ZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLW02OGsvYS5vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGExNjYyNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYS5vdXQuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIF9fTTY4S19BX09VVF9IX18KKyNkZWZpbmUgX19NNjhLX0FfT1VUX0hfXworCitzdHJ1Y3QgZXhlYworeworICB1bnNpZ25lZCBsb25nIGFfaW5mbzsJCS8qIFVzZSBtYWNyb3MgTl9NQUdJQywgZXRjIGZvciBhY2Nlc3MgKi8KKyAgdW5zaWduZWQgYV90ZXh0OwkJLyogbGVuZ3RoIG9mIHRleHQsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZGF0YTsJCS8qIGxlbmd0aCBvZiBkYXRhLCBpbiBieXRlcyAqLworICB1bnNpZ25lZCBhX2JzczsJCS8qIGxlbmd0aCBvZiB1bmluaXRpYWxpemVkIGRhdGEgYXJlYSBmb3IgZmlsZSwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9zeW1zOwkJLyogbGVuZ3RoIG9mIHN5bWJvbCB0YWJsZSBkYXRhIGluIGZpbGUsIGluIGJ5dGVzICovCisgIHVuc2lnbmVkIGFfZW50cnk7CQkvKiBzdGFydCBhZGRyZXNzICovCisgIHVuc2lnbmVkIGFfdHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgdGV4dCwgaW4gYnl0ZXMgKi8KKyAgdW5zaWduZWQgYV9kcnNpemU7CQkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciBkYXRhLCBpbiBieXRlcyAqLworfTsKKworI2RlZmluZSBOX1RSU0laRShhKQkoKGEpLmFfdHJzaXplKQorI2RlZmluZSBOX0RSU0laRShhKQkoKGEpLmFfZHJzaXplKQorI2RlZmluZSBOX1NZTVNJWkUoYSkJKChhKS5hX3N5bXMpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgU1RBQ0tfVE9QCVRBU0tfU0laRQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fTTY4S19BX09VVF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYWRiLmggYi9pbmNsdWRlL2FzbS1tNjhrL2FkYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNzZiNTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2FkYi5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGFsa2luZyB0byBBREIgYW5kIENVREEuICBUaGUgQ1VEQSBpcyBhIG1pY3JvY29udHJvbGxlcgorICogd2hpY2ggY29udHJvbHMgdGhlIEFEQiwgc3lzdGVtIHBvd2VyLCBSVEMsIGFuZCB2YXJpb3VzIG90aGVyIHRoaW5ncyBvbgorICogbGF0ZXIgTWFjaW50b3NoZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgUGF1bCBNYWNrZXJyYXMuCisgKi8KKworLyogRmlyc3QgYnl0ZSBzZW50IHRvIG9yIHJlY2VpdmVkIGZyb20gQ1VEQSAqLworI2RlZmluZSBBREJfUEFDS0VUCTAKKyNkZWZpbmUgQ1VEQV9QQUNLRVQJMQorI2RlZmluZSBFUlJPUl9QQUNLRVQJMgorI2RlZmluZSBUSU1FUl9QQUNLRVQJMworI2RlZmluZSBQT1dFUl9QQUNLRVQJNAorI2RlZmluZSBNQUNJSUNfUEFDS0VUCTUKKworLyogQURCIGNvbW1hbmRzICgybmQgYnl0ZSkgKi8KKyNkZWZpbmUgQURCX0JVU1JFU0VUCQkwCisjZGVmaW5lIEFEQl9GTFVTSChpZCkJCSgxICsgKChpZCkgPDwgNCkpCisjZGVmaW5lIEFEQl9XUklURVJFRyhpZCwgcmVnKQkoOCArIChyZWcpICsgKChpZCkgPDwgNCkpCisjZGVmaW5lIEFEQl9SRUFEUkVHKGlkLCByZWcpCSgweGMgKyAocmVnKSArICgoaWQpIDw8IDQpKQorCisvKiBBREIgZGVmYXVsdCBkZXZpY2UgSURzICh1cHBlciA0IGJpdHMgb2YgMm5kIGJ5dGUpICovCisjZGVmaW5lIEFEQl9ET05HTEUJMQkvKiAic29mdHdhcmUgZXhlY3V0aW9uIGNvbnRyb2wiIGRldmljZXMgKi8KKyNkZWZpbmUgQURCX0tFWUJPQVJECTIKKyNkZWZpbmUgQURCX01PVVNFCTMKKyNkZWZpbmUgQURCX1RBQkxFVAk0CisjZGVmaW5lIEFEQl9NT0RFTQk1CisjZGVmaW5lIEFEQl9NSVNDCTcJLyogbWF5YmUgYSBtb25pdG9yICovCisKKy8qIENVREEgY29tbWFuZHMgKDJuZCBieXRlKSAqLworI2RlZmluZSBDVURBX1dBUk1fU1RBUlQJCTAKKyNkZWZpbmUgQ1VEQV9BVVRPUE9MTAkJMQorI2RlZmluZSBDVURBX0dFVF82ODA1X0FERFIJMgorI2RlZmluZSBDVURBX0dFVF9USU1FCQkzCisjZGVmaW5lIENVREFfR0VUX1BSQU0JCTcKKyNkZWZpbmUgQ1VEQV9TRVRfNjgwNV9BRERSCTgKKyNkZWZpbmUgQ1VEQV9TRVRfVElNRQkJOQorI2RlZmluZSBDVURBX1BPV0VSRE9XTgkJMHhhCisjZGVmaW5lIENVREFfUE9XRVJVUF9USU1FCTB4YgorI2RlZmluZSBDVURBX1NFVF9QUkFNCQkweGMKKyNkZWZpbmUgQ1VEQV9NU19SRVNFVAkJMHhkCisjZGVmaW5lIENVREFfU0VORF9ERkFDCQkweGUKKyNkZWZpbmUgQ1VEQV9SRVNFVF9TWVNURU0JMHgxMQorI2RlZmluZSBDVURBX1NFVF9JUEwJCTB4MTIKKyNkZWZpbmUgQ1VEQV9TRVRfQVVUT19SQVRFCTB4MTQKKyNkZWZpbmUgQ1VEQV9HRVRfQVVUT19SQVRFCTB4MTYKKyNkZWZpbmUgQ1VEQV9TRVRfREVWSUNFX0xJU1QJMHgxOQorI2RlZmluZSBDVURBX0dFVF9ERVZJQ0VfTElTVAkweDFhCisjZGVmaW5lIENVREFfR0VUX1NFVF9JSUMJMHgyMgorCisjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3QgYWRiX3JlcXVlc3QgeworICAgIHVuc2lnbmVkIGNoYXIgZGF0YVsxNl07CisgICAgaW50IG5ieXRlczsKKyAgICB1bnNpZ25lZCBjaGFyIHJlcGx5WzE2XTsKKyAgICBpbnQgcmVwbHlfbGVuOworICAgIHVuc2lnbmVkIGNoYXIgcmVwbHlfZXhwZWN0ZWQ7CisgICAgdW5zaWduZWQgY2hhciBzZW50OworICAgIHVuc2lnbmVkIGNoYXIgZ290X3JlcGx5OworICAgIHZvaWQgKCpkb25lKShzdHJ1Y3QgYWRiX3JlcXVlc3QgKik7CisgICAgdm9pZCAqYXJnOworICAgIHN0cnVjdCBhZGJfcmVxdWVzdCAqbmV4dDsKK307CisKK3ZvaWQgdmlhX2FkYl9pbml0KHZvaWQpOworaW50IGFkYl9yZXF1ZXN0KHN0cnVjdCBhZGJfcmVxdWVzdCAqcmVxLAorCQkgdm9pZCAoKmRvbmUpKHN0cnVjdCBhZGJfcmVxdWVzdCAqKSwgaW50IG5ieXRlcywgLi4uKTsKK2ludCBhZGJfc2VuZF9yZXF1ZXN0KHN0cnVjdCBhZGJfcmVxdWVzdCAqcmVxKTsKK3ZvaWQgYWRiX3BvbGwodm9pZCk7CitpbnQgYWRiX3JlZ2lzdGVyKGludCBkZWZhdWx0X2lkLAorCQkgdm9pZCAoKmhhbmRsZXIpKHVuc2lnbmVkIGNoYXIgKiwgaW50LCBzdHJ1Y3QgcHRfcmVncyAqKSk7CisKKyNlbmRpZgkvKiBfX0tFUk5FTCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hZGJfaW9wLmggYi9pbmNsdWRlL2FzbS1tNjhrL2FkYl9pb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTQ4ZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hZGJfaW9wLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIEFEQiB0aHJvdWdoIHRoZSBJT1AKKyAqIFdyaXR0ZW4gYnkgSm9zaHVhIE0uIFRob21wc29uCisgKi8KKworLyogSU9QIG51bWJlciBhbmQgY2hhbm5lbCBudW1iZXIgZm9yIEFEQiAqLworCisjZGVmaW5lIEFEQl9JT1AJCUlPUF9OVU1fSVNNCisjZGVmaW5lIEFEQl9DSEFOCTIKKworLyogRnJvbSB0aGUgQS9VWCBoZWFkZXJzLi4ubWF5YmUgaW1wb3J0YW50LCBtYXliZSBub3QgKi8KKworI2RlZmluZSBBREJfSU9QX0xJU1RFTgkweDAxCisjZGVmaW5lIEFEQl9JT1BfVEFMSwkweDAyCisjZGVmaW5lIEFEQl9JT1BfRVhJU1RTCTB4MDQKKyNkZWZpbmUgQURCX0lPUF9GTFVTSAkweDA4CisjZGVmaW5lIEFEQl9JT1BfUkVTRVQJMHgxMAorI2RlZmluZSBBREJfSU9QX0lOVAkweDIwCisjZGVmaW5lIEFEQl9JT1BfUE9MTAkweDQwCisjZGVmaW5lIEFEQl9JT1BfVU5JTlQJMHg4MAorCisjZGVmaW5lIEFJRl9SRVNFVAkweDAwCisjZGVmaW5lIEFJRl9GTFVTSAkweDAxCisjZGVmaW5lIEFJRl9MSVNURU4JMHgwOAorI2RlZmluZSBBSUZfVEFMSwkweDBDCisKKy8qIEZsYWcgYml0cyBpbiBzdHJ1Y3QgYWRiX2lvcG1zZyAqLworCisjZGVmaW5lIEFEQl9JT1BfRVhQTElDSVQJMHg4MAkvKiBub256ZXJvIGlmIGV4cGxpY2l0IGNvbW1hbmQgKi8KKyNkZWZpbmUgQURCX0lPUF9BVVRPUE9MTAkweDQwCS8qIGF1dG8vU1JRIHBvbGxpbmcgZW5hYmxlZCAgICAqLworI2RlZmluZSBBREJfSU9QX1NSUQkJMHgwNAkvKiBTUlEgZGV0ZWN0ZWQgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQURCX0lPUF9USU1FT1VUCQkweDAyCS8qIG5vbnplcm8gaWYgdGltZW91dCAgICAgICAgICAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgYWRiX2lvcG1zZyB7CisJX191OCBmbGFnczsJCS8qIEFEQiBmbGFncyAgICAgICAgICovCisJX191OCBjb3VudDsJCS8qIG5vLiBvZiBkYXRhIGJ5dGVzICovCisJX191OCBjbWQ7CQkvKiBBREIgY29tbWFuZCAgICAgICAqLworCV9fdTggZGF0YVs4XTsJCS8qIEFEQiBkYXRhICAgICAgICAgICovCisJX191OCBzcGFyZVsyMV07CQkvKiBzcGFyZSAgICAgICAgICAgICAqLworfTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hbWlnYWh3LmggYi9pbmNsdWRlL2FzbS1tNjhrL2FtaWdhaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWU1ZDhkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hbWlnYWh3LmgKQEAgLTAsMCArMSwzNTQgQEAKKy8qCisqKiBhc20tbTY4ay9hbWlnYWh3LmggLS0gVGhpcyBoZWFkZXIgZGVmaW5lcyBzb21lIG1hY3JvcyBhbmQgcG9pbnRlcnMgZm9yCisqKiAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlvdXMgQW1pZ2EgY3VzdG9tIGhhcmR3YXJlIHJlZ2lzdGVycy4KKyoqICAgICAgICAgICAgICAgICAgICBUaGUgbmFtaW5nIGNvbnZlbnRpb25zIHVzZWQgaGVyZSBjb25mb3JtIHRvIHRob3NlCisqKiAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiB0aGUgQW1pZ2EgSGFyZHdhcmUgUmVmZXJlbmNlIE1hbnVhbCwgM3JkIEVkaXRpb24KKyoqCisqKiBDb3B5cmlnaHQgMTk5MiBieSBHcmVnIEhhcnAKKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKiogQ3JlYXRlZDogOS8yNC85MiBieSBHcmVnIEhhcnAKKyovCisKKyNpZm5kZWYgX002OEtfQU1JR0FIV19ICisjZGVmaW5lIF9NNjhLX0FNSUdBSFdfSAorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyAgICAvKgorICAgICAqICBEaWZmZXJlbnQgQW1pZ2EgbW9kZWxzCisgICAgICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGFtaWdhX21vZGVsOworCisjZGVmaW5lIEFNSV9VTktOT1dOCSgwKQorI2RlZmluZSBBTUlfNTAwCQkoMSkKKyNkZWZpbmUgQU1JXzUwMFBMVVMJKDIpCisjZGVmaW5lIEFNSV82MDAJCSgzKQorI2RlZmluZSBBTUlfMTAwMAkoNCkKKyNkZWZpbmUgQU1JXzEyMDAJKDUpCisjZGVmaW5lIEFNSV8yMDAwCSg2KQorI2RlZmluZSBBTUlfMjUwMAkoNykKKyNkZWZpbmUgQU1JXzMwMDAJKDgpCisjZGVmaW5lIEFNSV8zMDAwVAkoOSkKKyNkZWZpbmUgQU1JXzMwMDBQTFVTCSgxMCkKKyNkZWZpbmUgQU1JXzQwMDAJKDExKQorI2RlZmluZSBBTUlfNDAwMFQJKDEyKQorI2RlZmluZSBBTUlfQ0RUVgkoMTMpCisjZGVmaW5lIEFNSV9DRDMyCSgxNCkKKyNkZWZpbmUgQU1JX0RSQUNPCSgxNSkKKworCisgICAgLyoKKyAgICAgKiAgQ2hpcHNldHMKKyAgICAgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYW1pZ2FfY2hpcHNldDsKKworI2RlZmluZSBDU19TVE9ORUFHRQkoMCkKKyNkZWZpbmUgQ1NfT0NTCQkoMSkKKyNkZWZpbmUgQ1NfRUNTCQkoMikKKyNkZWZpbmUgQ1NfQUdBCQkoMykKKworCisgICAgLyoKKyAgICAgKiAgTWlzY2VsbGFuZW91cworICAgICAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyBhbWlnYV9lY2xvY2s7CS8qIDcwMCBrSHogRSBQZXJpcGhlcmFsIENsb2NrICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBhbWlnYV9tYXN0ZXJjbG9jazsJLyogMjggTUh6IE1hc3RlciBDbG9jayAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYW1pZ2FfY29sb3JjbG9jazsJLyogMy41IE1IeiBDb2xvciBDbG9jayAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYW1pZ2FfY2hpcF9zaXplOwkvKiBDaGlwIFJBTSBTaXplIChieXRlcykgKi8KK2V4dGVybiB1bnNpZ25lZCBjaGFyIGFtaWdhX3ZibGFuazsJLyogVkJMQU5LIEZyZXF1ZW5jeSAqLworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgYW1pZ2FfcHNmcmVxOwkvKiBQb3dlciBTdXBwbHkgRnJlcXVlbmN5ICovCisKKworI2RlZmluZSBBTUlHQUhXX0RFQ0xBUkUobmFtZSkJdW5zaWduZWQgbmFtZSA6IDEKKyNkZWZpbmUgQU1JR0FIV19TRVQobmFtZSkJKGFtaWdhX2h3X3ByZXNlbnQubmFtZSA9IDEpCisjZGVmaW5lIEFNSUdBSFdfUFJFU0VOVChuYW1lKQkoYW1pZ2FfaHdfcHJlc2VudC5uYW1lKQorCitzdHJ1Y3QgYW1pZ2FfaHdfcHJlc2VudCB7CisgICAgLyogdmlkZW8gaGFyZHdhcmUgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQU1JX1ZJREVPKTsJCS8qIEFtaWdhIFZpZGVvICovCisgICAgQU1JR0FIV19ERUNMQVJFKEFNSV9CTElUVEVSKTsJLyogQW1pZ2EgQmxpdHRlciAqLworICAgIEFNSUdBSFdfREVDTEFSRShBTUJFUl9GRik7CQkvKiBBbWJlciBGbGlja2VyIEZpeGVyICovCisgICAgLyogc291bmQgaGFyZHdhcmUgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQU1JX0FVRElPKTsJCS8qIEFtaWdhIEF1ZGlvICovCisgICAgLyogZGlzayBzdG9yYWdlIGludGVyZmFjZXMgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQU1JX0ZMT1BQWSk7CS8qIEFtaWdhIEZsb3BweSAqLworICAgIEFNSUdBSFdfREVDTEFSRShBMzAwMF9TQ1NJKTsJLyogU0NTSSAod2QzM2M5MywgQTMwMDAgYWxpa2UpICovCisgICAgQU1JR0FIV19ERUNMQVJFKEE0MDAwX1NDU0kpOwkvKiBTQ1NJIChuY3I1M2M3MTAsIEE0MDAwVCBhbGlrZSkgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQTEyMDBfSURFKTsJCS8qIElERSAoQTEyMDAgYWxpa2UpICovCisgICAgQU1JR0FIV19ERUNMQVJFKEE0MDAwX0lERSk7CQkvKiBJREUgKEE0MDAwIGFsaWtlKSAqLworICAgIEFNSUdBSFdfREVDTEFSRShDRF9ST00pOwkJLyogQ0QgUk9NIGRyaXZlICovCisgICAgLyogb3RoZXIgSS9PIGhhcmR3YXJlICovCisgICAgQU1JR0FIV19ERUNMQVJFKEFNSV9LRVlCT0FSRCk7CS8qIEFtaWdhIEtleWJvYXJkICovCisgICAgQU1JR0FIV19ERUNMQVJFKEFNSV9NT1VTRSk7CQkvKiBBbWlnYSBNb3VzZSAqLworICAgIEFNSUdBSFdfREVDTEFSRShBTUlfU0VSSUFMKTsJLyogQW1pZ2EgU2VyaWFsICovCisgICAgQU1JR0FIV19ERUNMQVJFKEFNSV9QQVJBTExFTCk7CS8qIEFtaWdhIFBhcmFsbGVsICovCisgICAgLyogcmVhbCB0aW1lIGNsb2NrcyAqLworICAgIEFNSUdBSFdfREVDTEFSRShBMjAwMF9DTEspOwkJLyogSGFyZHdhcmUgQ2xvY2sgKEEyMDAwIGFsaWtlKSAqLworICAgIEFNSUdBSFdfREVDTEFSRShBMzAwMF9DTEspOwkJLyogSGFyZHdhcmUgQ2xvY2sgKEEzMDAwIGFsaWtlKSAqLworICAgIC8qIHN1cHBvcnRpbmcgaGFyZHdhcmUgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQ0hJUF9SQU0pOwkJLyogQ2hpcCBSQU0gKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoUEFVTEEpOwkJLyogUGF1bGEgKDgzNjQpICovCisgICAgQU1JR0FIV19ERUNMQVJFKERFTklTRSk7CQkvKiBEZW5pc2UgKDgzNjIpICovCisgICAgQU1JR0FIV19ERUNMQVJFKERFTklTRV9IUik7CQkvKiBEZW5pc2UgKDgzNzMpICovCisgICAgQU1JR0FIV19ERUNMQVJFKExJU0EpOwkJLyogTGlzYSAoODM3NSkgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQUdOVVNfUEFMKTsJCS8qIE5vcm1hbC9GYXQgUEFMIEFnbnVzICg4MzY3LzgzNzEpICovCisgICAgQU1JR0FIV19ERUNMQVJFKEFHTlVTX05UU0MpOwkvKiBOb3JtYWwvRmF0IE5UU0MgQWdudXMgKDgzNjEvODM3MCkgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQUdOVVNfSFJfUEFMKTsJLyogRmF0IEhpcmVzIFBBTCBBZ251cyAoODM3MikgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoQUdOVVNfSFJfTlRTQyk7CS8qIEZhdCBIaXJlcyBOVFNDIEFnbnVzICg4MzcyKSAqLworICAgIEFNSUdBSFdfREVDTEFSRShBTElDRV9QQUwpOwkJLyogUEFMIEFsaWNlICg4Mzc0KSAqLworICAgIEFNSUdBSFdfREVDTEFSRShBTElDRV9OVFNDKTsJLyogTlRTQyBBbGljZSAoODM3NCkgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoTUFHSUNfUkVLSUNLKTsJLyogQTMwMDAgTWFnaWMgSGFyZCBSZWtpY2sgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoUENNQ0lBKTsJCS8qIFBDTUNJQSBTbG90ICovCisgICAgQU1JR0FIV19ERUNMQVJFKEdHMl9JU0EpOwkJLyogR0cyIFpvcnJvMklTQSBCcmlkZ2UgKi8KKyAgICBBTUlHQUhXX0RFQ0xBUkUoWk9SUk8pOwkJLyogWm9ycm8gQXV0b0NvbmZpZyAqLworICAgIEFNSUdBSFdfREVDTEFSRShaT1JSTzMpOwkJLyogWm9ycm8gSUlJICovCit9OworCitleHRlcm4gc3RydWN0IGFtaWdhX2h3X3ByZXNlbnQgYW1pZ2FfaHdfcHJlc2VudDsKKworc3RydWN0IENVU1RPTSB7CisgICAgdW5zaWduZWQgc2hvcnQgYmx0ZGRhdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBkbWFjb25yOworICAgIHVuc2lnbmVkIHNob3J0IHZwb3NyOworICAgIHVuc2lnbmVkIHNob3J0IHZocG9zcjsKKyAgICB1bnNpZ25lZCBzaG9ydCBkc2tkYXRyOworICAgIHVuc2lnbmVkIHNob3J0IGpveTBkYXQ7CisgICAgdW5zaWduZWQgc2hvcnQgam95MWRhdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBjbHhkYXQ7CisgICAgdW5zaWduZWQgc2hvcnQgYWRrY29ucjsKKyAgICB1bnNpZ25lZCBzaG9ydCBwb3QwZGF0OworICAgIHVuc2lnbmVkIHNob3J0IHBvdDFkYXQ7CisgICAgdW5zaWduZWQgc2hvcnQgcG90Z29yOworICAgIHVuc2lnbmVkIHNob3J0IHNlcmRhdHI7CisgICAgdW5zaWduZWQgc2hvcnQgZHNrYnl0cjsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbnRlbmFyOworICAgIHVuc2lnbmVkIHNob3J0IGludHJlcXI7CisgICAgdW5zaWduZWQgY2hhciAgKmRza3B0cjsKKyAgICB1bnNpZ25lZCBzaG9ydCBkc2tsZW47CisgICAgdW5zaWduZWQgc2hvcnQgZHNrZGF0OworICAgIHVuc2lnbmVkIHNob3J0IHJlZnB0cjsKKyAgICB1bnNpZ25lZCBzaG9ydCB2cG9zdzsKKyAgICB1bnNpZ25lZCBzaG9ydCB2aHBvc3c7CisgICAgdW5zaWduZWQgc2hvcnQgY29wY29uOworICAgIHVuc2lnbmVkIHNob3J0IHNlcmRhdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBzZXJwZXI7CisgICAgdW5zaWduZWQgc2hvcnQgcG90Z287CisgICAgdW5zaWduZWQgc2hvcnQgam95dGVzdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBzdHJlcXU7CisgICAgdW5zaWduZWQgc2hvcnQgc3RydmJsOworICAgIHVuc2lnbmVkIHNob3J0IHN0cmhvcjsKKyAgICB1bnNpZ25lZCBzaG9ydCBzdHJsb25nOworICAgIHVuc2lnbmVkIHNob3J0IGJsdGNvbjA7CisgICAgdW5zaWduZWQgc2hvcnQgYmx0Y29uMTsKKyAgICB1bnNpZ25lZCBzaG9ydCBibHRhZndtOworICAgIHVuc2lnbmVkIHNob3J0IGJsdGFsd207CisgICAgdW5zaWduZWQgY2hhciAgKmJsdGNwdDsKKyAgICB1bnNpZ25lZCBjaGFyICAqYmx0YnB0OworICAgIHVuc2lnbmVkIGNoYXIgICpibHRhcHQ7CisgICAgdW5zaWduZWQgY2hhciAgKmJsdGRwdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBibHRzaXplOworICAgIHVuc2lnbmVkIGNoYXIgIHBhZDJkOworICAgIHVuc2lnbmVkIGNoYXIgIGJsdGNvbjBsOworICAgIHVuc2lnbmVkIHNob3J0IGJsdHNpenY7CisgICAgdW5zaWduZWQgc2hvcnQgYmx0c2l6aDsKKyAgICB1bnNpZ25lZCBzaG9ydCBibHRjbW9kOworICAgIHVuc2lnbmVkIHNob3J0IGJsdGJtb2Q7CisgICAgdW5zaWduZWQgc2hvcnQgYmx0YW1vZDsKKyAgICB1bnNpZ25lZCBzaG9ydCBibHRkbW9kOworICAgIHVuc2lnbmVkIHNob3J0IHNwYXJlMls0XTsKKyAgICB1bnNpZ25lZCBzaG9ydCBibHRjZGF0OworICAgIHVuc2lnbmVkIHNob3J0IGJsdGJkYXQ7CisgICAgdW5zaWduZWQgc2hvcnQgYmx0YWRhdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBzcGFyZTNbM107CisgICAgdW5zaWduZWQgc2hvcnQgZGVuaXNlaWQ7CisgICAgdW5zaWduZWQgc2hvcnQgZHNrc3luYzsKKyAgICB1bnNpZ25lZCBzaG9ydCAqY29wMWxjOworICAgIHVuc2lnbmVkIHNob3J0ICpjb3AybGM7CisgICAgdW5zaWduZWQgc2hvcnQgY29wam1wMTsKKyAgICB1bnNpZ25lZCBzaG9ydCBjb3BqbXAyOworICAgIHVuc2lnbmVkIHNob3J0IGNvcGluczsKKyAgICB1bnNpZ25lZCBzaG9ydCBkaXdzdHJ0OworICAgIHVuc2lnbmVkIHNob3J0IGRpd3N0b3A7CisgICAgdW5zaWduZWQgc2hvcnQgZGRmc3RydDsKKyAgICB1bnNpZ25lZCBzaG9ydCBkZGZzdG9wOworICAgIHVuc2lnbmVkIHNob3J0IGRtYWNvbjsKKyAgICB1bnNpZ25lZCBzaG9ydCBjbHhjb247CisgICAgdW5zaWduZWQgc2hvcnQgaW50ZW5hOworICAgIHVuc2lnbmVkIHNob3J0IGludHJlcTsKKyAgICB1bnNpZ25lZCBzaG9ydCBhZGtjb247CisgICAgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAkqYXVkbGM7CisJdW5zaWduZWQgc2hvcnQgYXVkbGVuOworCXVuc2lnbmVkIHNob3J0IGF1ZHBlcjsKKwl1bnNpZ25lZCBzaG9ydCBhdWR2b2w7CisJdW5zaWduZWQgc2hvcnQgYXVkZGF0OworCXVuc2lnbmVkIHNob3J0IGF1ZHNwYXJlWzJdOworICAgIH0gYXVkWzRdOworICAgIHVuc2lnbmVkIGNoYXIgICpicGxwdFs4XTsKKyAgICB1bnNpZ25lZCBzaG9ydCBicGxjb24wOworICAgIHVuc2lnbmVkIHNob3J0IGJwbGNvbjE7CisgICAgdW5zaWduZWQgc2hvcnQgYnBsY29uMjsKKyAgICB1bnNpZ25lZCBzaG9ydCBicGxjb24zOworICAgIHVuc2lnbmVkIHNob3J0IGJwbDFtb2Q7CisgICAgdW5zaWduZWQgc2hvcnQgYnBsMm1vZDsKKyAgICB1bnNpZ25lZCBzaG9ydCBicGxjb240OworICAgIHVuc2lnbmVkIHNob3J0IGNseGNvbjI7CisgICAgdW5zaWduZWQgc2hvcnQgYnBsZGF0WzhdOworICAgIHVuc2lnbmVkIGNoYXIgICpzcHJwdFs4XTsKKyAgICBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IHBvczsKKwl1bnNpZ25lZCBzaG9ydCBjdGw7CisJdW5zaWduZWQgc2hvcnQgZGF0YWE7CisJdW5zaWduZWQgc2hvcnQgZGF0YWI7CisgICAgfSBzcHJbOF07CisgICAgdW5zaWduZWQgc2hvcnQgY29sb3JbMzJdOworICAgIHVuc2lnbmVkIHNob3J0IGh0b3RhbDsKKyAgICB1bnNpZ25lZCBzaG9ydCBoc3N0b3A7CisgICAgdW5zaWduZWQgc2hvcnQgaGJzdHJ0OworICAgIHVuc2lnbmVkIHNob3J0IGhic3RvcDsKKyAgICB1bnNpZ25lZCBzaG9ydCB2dG90YWw7CisgICAgdW5zaWduZWQgc2hvcnQgdnNzdG9wOworICAgIHVuc2lnbmVkIHNob3J0IHZic3RydDsKKyAgICB1bnNpZ25lZCBzaG9ydCB2YnN0b3A7CisgICAgdW5zaWduZWQgc2hvcnQgc3ByaHN0cnQ7CisgICAgdW5zaWduZWQgc2hvcnQgc3ByaHN0b3A7CisgICAgdW5zaWduZWQgc2hvcnQgYnBsaHN0cnQ7CisgICAgdW5zaWduZWQgc2hvcnQgYnBsaHN0b3A7CisgICAgdW5zaWduZWQgc2hvcnQgaGhwb3N3OworICAgIHVuc2lnbmVkIHNob3J0IGhocG9zcjsKKyAgICB1bnNpZ25lZCBzaG9ydCBiZWFtY29uMDsKKyAgICB1bnNpZ25lZCBzaG9ydCBoc3N0cnQ7CisgICAgdW5zaWduZWQgc2hvcnQgdnNzdHJ0OworICAgIHVuc2lnbmVkIHNob3J0IGhjZW50ZXI7CisgICAgdW5zaWduZWQgc2hvcnQgZGl3aGlnaDsKKyAgICB1bnNpZ25lZCBzaG9ydCBzcGFyZTRbMTFdOworICAgIHVuc2lnbmVkIHNob3J0IGZtb2RlOworfTsKKworLyoKKyAqIERNQSByZWdpc3RlciBiaXRzCisgKi8KKyNkZWZpbmUgRE1BRl9TRVRDTFIJCSgweDgwMDApCisjZGVmaW5lIERNQUZfQVVEMAkJKDB4MDAwMSkKKyNkZWZpbmUgRE1BRl9BVUQxCQkoMHgwMDAyKQorI2RlZmluZSBETUFGX0FVRDIJCSgweDAwMDQpCisjZGVmaW5lIERNQUZfQVVEMwkJKDB4MDAwOCkKKyNkZWZpbmUgRE1BRl9ESVNLCQkoMHgwMDEwKQorI2RlZmluZSBETUFGX1NQUklURQkJKDB4MDAyMCkKKyNkZWZpbmUgRE1BRl9CTElUVEVSCQkoMHgwMDQwKQorI2RlZmluZSBETUFGX0NPUFBFUgkJKDB4MDA4MCkKKyNkZWZpbmUgRE1BRl9SQVNURVIJCSgweDAxMDApCisjZGVmaW5lIERNQUZfTUFTVEVSCQkoMHgwMjAwKQorI2RlZmluZSBETUFGX0JMSVRIT0cJCSgweDA0MDApCisjZGVmaW5lIERNQUZfQkxUTlpFUk8JCSgweDIwMDApCisjZGVmaW5lIERNQUZfQkxURE9ORQkJKDB4NDAwMCkKKyNkZWZpbmUgRE1BRl9BTEwJCSgweDAxRkYpCisKK3N0cnVjdCBDSUEgeworICAgIHVuc2lnbmVkIGNoYXIgcHJhOwkJY2hhciBwYWQwWzB4ZmZdOworICAgIHVuc2lnbmVkIGNoYXIgcHJiOwkJY2hhciBwYWQxWzB4ZmZdOworICAgIHVuc2lnbmVkIGNoYXIgZGRyYTsJCWNoYXIgcGFkMlsweGZmXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRkcmI7CQljaGFyIHBhZDNbMHhmZl07CisgICAgdW5zaWduZWQgY2hhciB0YWxvOwkJY2hhciBwYWQ0WzB4ZmZdOworICAgIHVuc2lnbmVkIGNoYXIgdGFoaTsJCWNoYXIgcGFkNVsweGZmXTsKKyAgICB1bnNpZ25lZCBjaGFyIHRibG87CQljaGFyIHBhZDZbMHhmZl07CisgICAgdW5zaWduZWQgY2hhciB0YmhpOwkJY2hhciBwYWQ3WzB4ZmZdOworICAgIHVuc2lnbmVkIGNoYXIgdG9kbG87CWNoYXIgcGFkOFsweGZmXTsKKyAgICB1bnNpZ25lZCBjaGFyIHRvZG1pZDsJY2hhciBwYWQ5WzB4ZmZdOworICAgIHVuc2lnbmVkIGNoYXIgdG9kaGk7CWNoYXIgcGFkYVsweDFmZl07CisgICAgdW5zaWduZWQgY2hhciBzZHI7CQljaGFyIHBhZGJbMHhmZl07CisgICAgdW5zaWduZWQgY2hhciBpY3I7CQljaGFyIHBhZGNbMHhmZl07CisgICAgdW5zaWduZWQgY2hhciBjcmE7CQljaGFyIHBhZGRbMHhmZl07CisgICAgdW5zaWduZWQgY2hhciBjcmI7CQljaGFyIHBhZGVbMHhmZl07Cit9OworCisjZGVmaW5lIHpUd29CYXNlICgweDgwMDAwMDAwKQorI2RlZmluZSBaVFdPX1BBRERSKHgpICgoKHVuc2lnbmVkIGxvbmcpKHgpKS16VHdvQmFzZSkKKyNkZWZpbmUgWlRXT19WQUREUih4KSAoKCh1bnNpZ25lZCBsb25nKSh4KSkrelR3b0Jhc2UpCisKKyNkZWZpbmUgQ1VTVE9NX1BIWVNBRERSICAgICAoMHhkZmYwMDApCisjZGVmaW5lIGN1c3RvbSAoKCoodm9sYXRpbGUgc3RydWN0IENVU1RPTSAqKSh6VHdvQmFzZStDVVNUT01fUEhZU0FERFIpKSkKKworI2RlZmluZSBDSUFBX1BIWVNBRERSCSAgKDB4YmZlMDAxKQorI2RlZmluZSBDSUFCX1BIWVNBRERSCSAgKDB4YmZkMDAwKQorI2RlZmluZSBjaWFhICAgKCgqKHZvbGF0aWxlIHN0cnVjdCBDSUEgKikoelR3b0Jhc2UgKyBDSUFBX1BIWVNBRERSKSkpCisjZGVmaW5lIGNpYWIgICAoKCoodm9sYXRpbGUgc3RydWN0IENJQSAqKSh6VHdvQmFzZSArIENJQUJfUEhZU0FERFIpKSkKKworI2RlZmluZSBDSElQX1BIWVNBRERSCSAgICAoMHgwMDAwMDApCisKK3ZvaWQgYW1pZ2FfY2hpcF9pbml0ICh2b2lkKTsKK3ZvaWQgKmFtaWdhX2NoaXBfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgKmFtaWdhX2NoaXBfYWxsb2NfcmVzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHJlc291cmNlICpyZXMpOwordm9pZCBhbWlnYV9jaGlwX2ZyZWUodm9pZCAqcHRyKTsKK3Vuc2lnbmVkIGxvbmcgYW1pZ2FfY2hpcF9hdmFpbCggdm9pZCApOyAvKk1JTEFOKi8KK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBhbWlnYV9hdWRpb19taW5fcGVyaW9kOworCitzdGF0aWMgaW5saW5lIHZvaWQgYW1pZmJfdmlkZW9fb2ZmKHZvaWQpCit7CisJaWYgKGFtaWdhX2NoaXBzZXQgPT0gQ1NfRUNTIHx8IGFtaWdhX2NoaXBzZXQgPT0gQ1NfQUdBKSB7CisJCS8qIHByb2dyYW0gRGVuaXNlL0xpc2EgZm9yIGEgaGlnaGVyIG1heGltdW0gcGxheSByYXRlICovCisJCWN1c3RvbS5odG90YWwgPSAxMTM7ICAgICAgICAvKiAzMSBrSHogKi8KKwkJY3VzdG9tLnZ0b3RhbCA9IDIyMzsgICAgICAgIC8qIDcwIEh6ICovCisJCWN1c3RvbS5iZWFtY29uMCA9IDB4NDM5MDsgICAvKiBIQVJERElTLCBWQVJ7QkVBTSxWU1ksSFNZLENTWX1FTiAqLworCQkvKiBzdXNwZW5kIHRoZSBtb25pdG9yICovCisJCWN1c3RvbS5oc3N0cnQgPSBjdXN0b20uaHNzdG9wID0gMTE2OworCQljdXN0b20udnNzdHJ0ID0gY3VzdG9tLnZzc3RvcCA9IDIyNjsKKwkJYW1pZ2FfYXVkaW9fbWluX3BlcmlvZCA9IDU3OworCX0KK30KKworc3RydWN0IHRvZDMwMDAgeworICB1bnNpZ25lZCBpbnQgIDoyOCwgc2Vjb25kMjo0OwkvKiBsb3dlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgc2Vjb25kMTo0OwkvKiB1cHBlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgbWludXRlMjo0OwkvKiBsb3dlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgbWludXRlMTo0OwkvKiB1cHBlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgaG91cjI6NDsJLyogbG93ZXIgZGlnaXQgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIGhvdXIxOjQ7CS8qIHVwcGVyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCB3ZWVrZGF5OjQ7CisgIHVuc2lnbmVkIGludCAgOjI4LCBkYXkyOjQ7CS8qIGxvd2VyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBkYXkxOjQ7CS8qIHVwcGVyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBtb250aDI6NDsJLyogbG93ZXIgZGlnaXQgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIG1vbnRoMTo0OwkvKiB1cHBlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgeWVhcjI6NDsJLyogbG93ZXIgZGlnaXQgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIHllYXIxOjQ7CS8qIHVwcGVyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBjbnRybDE6NDsJLyogY29udHJvbC1ieXRlIDEgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIGNudHJsMjo0OwkvKiBjb250cm9sLWJ5dGUgMiAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgY250cmwzOjQ7CS8qIGNvbnRyb2wtYnl0ZSAzICovCit9OworI2RlZmluZSBUT0QzMDAwX0NOVFJMMV9IT0xECTAKKyNkZWZpbmUgVE9EMzAwMF9DTlRSTDFfRlJFRQk5CisjZGVmaW5lIHRvZF8zMDAwICgoKih2b2xhdGlsZSBzdHJ1Y3QgdG9kMzAwMCAqKSh6VHdvQmFzZSsweERDMDAwMCkpKQorCitzdHJ1Y3QgdG9kMjAwMCB7CisgIHVuc2lnbmVkIGludCAgOjI4LCBzZWNvbmQyOjQ7CS8qIGxvd2VyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBzZWNvbmQxOjQ7CS8qIHVwcGVyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBtaW51dGUyOjQ7CS8qIGxvd2VyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBtaW51dGUxOjQ7CS8qIHVwcGVyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBob3VyMjo0OwkvKiBsb3dlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgaG91cjE6NDsJLyogdXBwZXIgZGlnaXQgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIGRheTI6NDsJLyogbG93ZXIgZGlnaXQgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIGRheTE6NDsJLyogdXBwZXIgZGlnaXQgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIG1vbnRoMjo0OwkvKiBsb3dlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgbW9udGgxOjQ7CS8qIHVwcGVyIGRpZ2l0ICovCisgIHVuc2lnbmVkIGludCAgOjI4LCB5ZWFyMjo0OwkvKiBsb3dlciBkaWdpdCAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgeWVhcjE6NDsJLyogdXBwZXIgZGlnaXQgKi8KKyAgdW5zaWduZWQgaW50ICA6MjgsIHdlZWtkYXk6NDsKKyAgdW5zaWduZWQgaW50ICA6MjgsIGNudHJsMTo0OwkvKiBjb250cm9sLWJ5dGUgMSAqLworICB1bnNpZ25lZCBpbnQgIDoyOCwgY250cmwyOjQ7CS8qIGNvbnRyb2wtYnl0ZSAyICovCisgIHVuc2lnbmVkIGludCAgOjI4LCBjbnRybDM6NDsJLyogY29udHJvbC1ieXRlIDMgKi8KK307CisKKyNkZWZpbmUgVE9EMjAwMF9DTlRSTDFfSE9MRAkoMTw8MCkKKyNkZWZpbmUgVE9EMjAwMF9DTlRSTDFfQlVTWQkoMTw8MSkKKyNkZWZpbmUgVE9EMjAwMF9DTlRSTDNfMjRITU9ERQkoMTw8MikKKyNkZWZpbmUgVE9EMjAwMF9IT1VSMV9QTQkoMTw8MikKKyNkZWZpbmUgdG9kXzIwMDAgKCgqKHZvbGF0aWxlIHN0cnVjdCB0b2QyMDAwICopKHpUd29CYXNlKzB4REMwMDAwKSkpCisKKyNlbmRpZiAvKiBfTTY4S19BTUlHQUhXX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYW1pZ2FpbnRzLmggYi9pbmNsdWRlL2FzbS1tNjhrL2FtaWdhaW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZmY0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2FtaWdhaW50cy5oCkBAIC0wLDAgKzEsMTMzIEBACisvKgorKiogYW1pZ2FpbnRzLmggLS0gQW1pZ2EgTGludXggaW50ZXJydXB0IGhhbmRsaW5nIHN0cnVjdHMgYW5kIHByb3RvdHlwZXMKKyoqCisqKiBDb3B5cmlnaHQgMTk5MiBieSBHcmVnIEhhcnAKKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKiogQ3JlYXRlZCAxMC8yLzkyIGJ5IEdyZWcgSGFycAorKi8KKworI2lmbmRlZiBfQVNNbTY4a19BTUlHQUlOVFNfSF8KKyNkZWZpbmUgX0FTTW02OGtfQU1JR0FJTlRTX0hfCisKKy8qCisqKiBBbWlnYSBJbnRlcnJ1cHQgc291cmNlcy4KKyoqCisqLworCisjZGVmaW5lIEFVVE9fSVJRUyAgICAgICAgICAgKDgpCisjZGVmaW5lIEFNSV9TVERfSVJRUyAgICAgICAgKDE0KQorI2RlZmluZSBDSUFfSVJRUyAgICAgICAgICAgICg1KQorI2RlZmluZSBBTUlfSVJRUyAgICAgICAgICAgICgzMikgLyogQVVUT19JUlFTK0FNSV9TVERfSVJRUysyKkNJQV9JUlFTICovCisKKy8qIHZlcnRpY2FsIGJsYW5raW5nIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfQU1JR0FfVkVSVEIgICAgIDAKKworLyogY29wcGVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfQU1JR0FfQ09QUEVSICAgIDEKKworLyogQXVkaW8gaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfQU1JR0FfQVVEMAkgICAgMgorI2RlZmluZSBJUlFfQU1JR0FfQVVEMQkgICAgMworI2RlZmluZSBJUlFfQU1JR0FfQVVEMgkgICAgNAorI2RlZmluZSBJUlFfQU1JR0FfQVVEMwkgICAgNQorCisvKiBCbGl0dGVyIGRvbmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9BTUlHQV9CTElUCSAgICA2CisKKy8qIGZsb3BweSBkaXNrIGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX0FNSUdBX0RTS1NZTiAgICA3CisjZGVmaW5lIElSUV9BTUlHQV9EU0tCTEsgICAgOAorCisvKiBidWlsdGluIHNlcmlhbCBwb3J0IGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX0FNSUdBX1JCRgkgICAgOQorI2RlZmluZSBJUlFfQU1JR0FfVEJFCSAgICAxMAorCisvKiBzb2Z0d2FyZSBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElSUV9BTUlHQV9TT0ZUICAgICAgMTEKKworLyogaW50ZXJydXB0cyBmcm9tIGV4dGVybmFsIGhhcmR3YXJlICovCisjZGVmaW5lIElSUV9BTUlHQV9QT1JUUwkgICAgMTIKKyNkZWZpbmUgSVJRX0FNSUdBX0VYVEVSCSAgICAxMworCisvKiBDSUEgaW50ZXJydXB0IHNvdXJjZXMgKi8KKyNkZWZpbmUgSVJRX0FNSUdBX0NJQUEgICAgICAxNAorI2RlZmluZSBJUlFfQU1JR0FfQ0lBQV9UQSAgIDE0CisjZGVmaW5lIElSUV9BTUlHQV9DSUFBX1RCICAgMTUKKyNkZWZpbmUgSVJRX0FNSUdBX0NJQUFfQUxSTSAxNgorI2RlZmluZSBJUlFfQU1JR0FfQ0lBQV9TUCAgIDE3CisjZGVmaW5lIElSUV9BTUlHQV9DSUFBX0ZMRyAgMTgKKyNkZWZpbmUgSVJRX0FNSUdBX0NJQUIgICAgICAxOQorI2RlZmluZSBJUlFfQU1JR0FfQ0lBQl9UQSAgIDE5CisjZGVmaW5lIElSUV9BTUlHQV9DSUFCX1RCICAgMjAKKyNkZWZpbmUgSVJRX0FNSUdBX0NJQUJfQUxSTSAyMQorI2RlZmluZSBJUlFfQU1JR0FfQ0lBQl9TUCAgIDIyCisjZGVmaW5lIElSUV9BTUlHQV9DSUFCX0ZMRyAgMjMKKworLyogYXV0by12ZWN0b3IgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfQU1JR0FfQVVUTyAgICAgIDI0CisjZGVmaW5lIElSUV9BTUlHQV9BVVRPXzAgICAgMjQgLyogVGhpcyBpcyBqdXN0IGEgZHVtbXkgKi8KKyNkZWZpbmUgSVJRX0FNSUdBX0FVVE9fMSAgICAyNQorI2RlZmluZSBJUlFfQU1JR0FfQVVUT18yICAgIDI2CisjZGVmaW5lIElSUV9BTUlHQV9BVVRPXzMgICAgMjcKKyNkZWZpbmUgSVJRX0FNSUdBX0FVVE9fNCAgICAyOAorI2RlZmluZSBJUlFfQU1JR0FfQVVUT181ICAgIDI5CisjZGVmaW5lIElSUV9BTUlHQV9BVVRPXzYgICAgMzAKKyNkZWZpbmUgSVJRX0FNSUdBX0FVVE9fNyAgICAzMQorCisjZGVmaW5lIElSUV9GTE9QUFkJICAgIElSUV9BTUlHQV9EU0tCTEsKKworLyogSU5UUkVRUiBtYXNrcyAqLworI2RlZmluZSBJUlExX01BU0sgICAweDAwMDcJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgMSAqLworI2RlZmluZSBJUlEyX01BU0sgICAweDAwMDgJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgMiAqLworI2RlZmluZSBJUlEzX01BU0sgICAweDAwNzAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgMyAqLworI2RlZmluZSBJUlE0X01BU0sgICAweDA3ODAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgNCAqLworI2RlZmluZSBJUlE1X01BU0sgICAweDE4MDAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgNSAqLworI2RlZmluZSBJUlE2X01BU0sgICAweDIwMDAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgNiAqLworI2RlZmluZSBJUlE3X01BU0sgICAweDQwMDAJLyogSU5UUkVRUiBtYXNrIGZvciBJUlEgNyAqLworCisjZGVmaW5lIElGX1NFVENMUiAgIDB4ODAwMCAgICAgIC8qIHNldC9jbHIgYml0ICovCisjZGVmaW5lIElGX0lOVEVOICAgIDB4NDAwMAkvKiBtYXN0ZXIgaW50ZXJydXB0IGJpdCBpbiBJTlQqIHJlZ2lzdGVycyAqLworI2RlZmluZSBJRl9FWFRFUiAgICAweDIwMDAJLyogZXh0ZXJuYWwgbGV2ZWwgNiBhbmQgQ0lBIEIgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX0RTS1NZTiAgIDB4MTAwMAkvKiBkaXNrIHN5bmMgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX1JCRgkgICAgMHgwODAwCS8qIHNlcmlhbCByZWNlaXZlIGJ1ZmZlciBmdWxsIGludGVycnVwdCAqLworI2RlZmluZSBJRl9BVUQzICAgICAweDA0MDAJLyogYXVkaW8gY2hhbm5lbCAzIGRvbmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX0FVRDIgICAgIDB4MDIwMAkvKiBhdWRpbyBjaGFubmVsIDIgZG9uZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUZfQVVEMSAgICAgMHgwMTAwCS8qIGF1ZGlvIGNoYW5uZWwgMSBkb25lIGludGVycnVwdCAqLworI2RlZmluZSBJRl9BVUQwICAgICAweDAwODAJLyogYXVkaW8gY2hhbm5lbCAwIGRvbmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX0JMSVQgICAgIDB4MDA0MAkvKiBibGl0dGVyIGRvbmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElGX1ZFUlRCICAgIDB4MDAyMAkvKiB2ZXJ0aWNhbCBibGFua2luZyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUZfQ09QRVIgICAgMHgwMDEwCS8qIGNvcHBlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUZfUE9SVFMgICAgMHgwMDA4CS8qIGV4dGVybmFsIGxldmVsIDIgYW5kIENJQSBBIGludGVycnVwdCAqLworI2RlZmluZSBJRl9TT0ZUICAgICAweDAwMDQJLyogc29mdHdhcmUgaW5pdGlhdGVkIGludGVycnVwdCAqLworI2RlZmluZSBJRl9EU0tCTEsgICAweDAwMDIJLyogZGlza2Jsb2NrIERNQSBmaW5pc2hlZCAqLworI2RlZmluZSBJRl9UQkUJICAgIDB4MDAwMQkvKiBzZXJpYWwgdHJhbnNtaXQgYnVmZmVyIGVtcHR5IGludGVycnVwdCAqLworCitleHRlcm4gdm9pZCBhbWlnYV9kb19pcnEoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKmZwKTsKK2V4dGVybiB2b2lkIGFtaWdhX2RvX2lycV9saXN0KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpmcCk7CisKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBhbWlnYV9pbnRlbmFfdmFsc1tdOworCisvKiBDSUEgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgYml0cyAqLworCisjZGVmaW5lIENJQV9JQ1JfVEEJMHgwMQorI2RlZmluZSBDSUFfSUNSX1RCCTB4MDIKKyNkZWZpbmUgQ0lBX0lDUl9BTFJNCTB4MDQKKyNkZWZpbmUgQ0lBX0lDUl9TUAkweDA4CisjZGVmaW5lIENJQV9JQ1JfRkxHCTB4MTAKKyNkZWZpbmUgQ0lBX0lDUl9BTEwJMHgxZgorI2RlZmluZSBDSUFfSUNSX1NFVENMUgkweDgwCisKKy8qIHRvIGFjY2VzcyB0aGUgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXJzIG9mIENJQSdzIHVzZSBvbmx5CisqKiB0aGVzZSBmdW5jdGlvbnMsIHRoZXkgYmVoYXZlIGV4YWN0bHkgbGlrZSB0aGUgYW1pZ2Egb3Mgcm91dGluZXMKKyovCisKK2V4dGVybiBzdHJ1Y3QgY2lhYmFzZSBjaWFhX2Jhc2UsIGNpYWJfYmFzZTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgY2lhX3NldF9pcnEoc3RydWN0IGNpYWJhc2UgKmJhc2UsIHVuc2lnbmVkIGNoYXIgbWFzayk7CitleHRlcm4gdW5zaWduZWQgY2hhciBjaWFfYWJsZV9pcnEoc3RydWN0IGNpYWJhc2UgKmJhc2UsIHVuc2lnbmVkIGNoYXIgbWFzayk7CisKKyNlbmRpZiAvKiBhc20tbTY4ay9hbWlnYWludHMuaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hbWlnYXlsZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9hbWlnYXlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNWE2YWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2FtaWdheWxlLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisqKiBhc20tbTY4ay9hbWlnYXlsZS5oIC0tIFRoaXMgaGVhZGVyIGRlZmluZXMgdGhlIHJlZ2lzdGVycyBvZiB0aGUgZ2F5bGUgY2hpcAorKiogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBvbiB0aGUgQW1pZ2EgMTIwMAorKiogICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGluZm9ybWF0aW9uIHdhcyBmb3VuZCBieSBkaXNhc3NlbWJsaW5nIGNhcmQucmVzb3VyY2UsCisqKiAgICAgICAgICAgICAgICAgICAgICAgIHNvIHRoZSBkZWZpbml0aW9ucyBtYXkgbm90IGJlIDEwMCUgY29ycmVjdAorKiogICAgICAgICAgICAgICAgICAgICAgICBhbnlvbmUgaGFzIGFuIG9mZmljaWFsIGRvYyA/CisqKgorKiogQ29weXJpZ2h0IDE5OTcgYnkgQWxhaW4gTWFsZWsKKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKiogQ3JlYXRlZDogMTEvMjgvOTcgYnkgQWxhaW4gTWFsZWsKKyovCisKKyNpZm5kZWYgX002OEtfQU1JR0FZTEVfSF8KKyNkZWZpbmUgX002OEtfQU1JR0FZTEVfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FtaWdhaHcuaD4KKworLyogbWVtb3J5IGxheW91dCAqLworCisjZGVmaW5lIEdBWUxFX1JBTQkJKDB4NjAwMDAwK3pUd29CYXNlKQorI2RlZmluZSBHQVlMRV9SQU1TSVpFCQkoMHg0MDAwMDApCisjZGVmaW5lIEdBWUxFX0FUVFJJQlVURQkJKDB4YTAwMDAwK3pUd29CYXNlKQorI2RlZmluZSBHQVlMRV9BVFRSSUJVVEVTSVpFCSgweDAyMDAwMCkKKyNkZWZpbmUgR0FZTEVfSU8JCSgweGEyMDAwMCt6VHdvQmFzZSkJLyogMTZiaXQgYW5kIGV2ZW4gOGJpdCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0FZTEVfSU9TSVpFCQkoMHgwMTAwMDApCisjZGVmaW5lIEdBWUxFX0lPXzhCSVRPREQJKDB4YTMwMDAwK3pUd29CYXNlKQkvKiBvZGQgOGJpdCByZWdpc3RlcnMgKi8KKworLyogb2Zmc2V0IGZvciBhY2Nlc3Npbmcgb2RkIElPIHJlZ2lzdGVycyAqLworI2RlZmluZSBHQVlMRV9PREQJCShHQVlMRV9JT184QklUT0RELUdBWUxFX0lPLTEpCisKKy8qIEdBWUxFIHJlZ2lzdGVycyAqLworCitzdHJ1Y3QgR0FZTEUgeworCXVfY2hhciBjYXJkc3RhdHVzOworCXVfY2hhciBwYWQwWzB4MTAwMC0xXTsKKworCXVfY2hhciBpbnRyZXE7CisJdV9jaGFyIHBhZDFbMHgxMDAwLTFdOworCisJdV9jaGFyIGludGVuOworCXVfY2hhciBwYWQyWzB4MTAwMC0xXTsKKworCXVfY2hhciBjb25maWc7CisJdV9jaGFyIHBhZDNbMHgxMDAwLTFdOworfTsKKworI2RlZmluZSBHQVlMRV9BRERSRVNTCSgweGRhODAwMCkJLyogZ2F5bGUgbWFpbiByZWdpc3RlcnMgYmFzZSBhZGRyZXNzICovCisKKyNkZWZpbmUgR0FZTEVfUkVTRVQJKDB4YTQwMDAwKQkvKiB3cml0ZSAweDAwIHRvIHN0YXJ0IHJlc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQgMSBieXRlIHRvIHN0b3AgcmVzZXQgKi8KKworI2RlZmluZSBnYXlsZSAoKih2b2xhdGlsZSBzdHJ1Y3QgR0FZTEUgKikoelR3b0Jhc2UrR0FZTEVfQUREUkVTUykpCisjZGVmaW5lIGdheWxlX3Jlc2V0ICgqKHZvbGF0aWxlIHVfY2hhciAqKSh6VHdvQmFzZStHQVlMRV9SRVNFVCkpCisKKyNkZWZpbmUgZ2F5bGVfYXR0cmlidXRlICgodm9sYXRpbGUgdV9jaGFyICopKEdBWUxFX0FUVFJJQlVURSkpCisKKyNpZiAwCisjZGVmaW5lIGdheWxlX2luYihhKSByZWFkYiggR0FZTEVfSU8rKGEpKygoKGEpJjEpKkdBWUxFX09ERCkgKQorI2RlZmluZSBnYXlsZV9vdXRiKHYsYSkgd3JpdGViKCB2LCBHQVlMRV9JTysoYSkrKCgoYSkmMSkqR0FZTEVfT0REKSApCisKKyNkZWZpbmUgZ2F5bGVfaW53KGEpIHJlYWR3KCBHQVlMRV9JTysoYSkgKQorI2RlZmluZSBnYXlsZV9vdXR3KHYsYSkgd3JpdGV3KCB2LCBHQVlMRV9JTysoYSkgKQorI2VuZGlmCisKKy8qIEdBWUxFX0NBUkRTVEFUVVMgYml0IGRlZiAqLworCisjZGVmaW5lIEdBWUxFX0NTX0NDREVUCQkweDQwCS8qIGNyZWRpdCBjYXJkIGRldGVjdCAqLworI2RlZmluZSBHQVlMRV9DU19CVkQxCQkweDIwCS8qIGJhdHRlcnkgdm9sdGFnZSBkZXRlY3QgMSAqLworI2RlZmluZSBHQVlMRV9DU19TQwkJMHgyMAkvKiBjcmVkaXQgY2FyZCBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lIEdBWUxFX0NTX0JWRDIJCTB4MTAJLyogYmF0dGVyeSB2b2x0YWdlIGRldGVjdCAyICovCisjZGVmaW5lIEdBWUxFX0NTX0RBCQkweDEwCS8qIGRpZ2l0YWwgYXVkaW8gKi8KKyNkZWZpbmUgR0FZTEVfQ1NfV1IJCTB4MDgJLyogd3JpdGUgZW5hYmxlICgxID09IGVuYWJsZWQpICovCisjZGVmaW5lIEdBWUxFX0NTX0JTWQkJMHgwNAkvKiBjcmVkaXQgY2FyZCBidXN5ICovCisjZGVmaW5lIEdBWUxFX0NTX0lSUQkJMHgwNAkvKiBpbnRlcnJ1cHQgcmVxdWVzdCAqLworCisvKiBHQVlMRV9JUlEgYml0IGRlZiAqLworCisjZGVmaW5lIEdBWUxFX0lSUV9JREUJCTB4ODAKKyNkZWZpbmUgR0FZTEVfSVJRX0NDREVUCQkweDQwCisjZGVmaW5lIEdBWUxFX0lSUV9CVkQxCQkweDIwCisjZGVmaW5lIEdBWUxFX0lSUV9TQwkJMHgyMAorI2RlZmluZSBHQVlMRV9JUlFfQlZEMgkJMHgxMAorI2RlZmluZSBHQVlMRV9JUlFfREEJCTB4MTAKKyNkZWZpbmUgR0FZTEVfSVJRX1dSCQkweDA4CisjZGVmaW5lIEdBWUxFX0lSUV9CU1kJCTB4MDQKKyNkZWZpbmUgR0FZTEVfSVJRX0lSUQkJMHgwNAorI2RlZmluZSBHQVlMRV9JUlFfSURFQUNLMQkweDAyCisjZGVmaW5lIEdBWUxFX0lSUV9JREVBQ0swCTB4MDEKKworLyogR0FZTEVfQ09ORklHIGJpdCBkZWYKKyAgIChiaXQgMC0xIGZvciBwcm9ncmFtIHZvbHRhZ2UsIGJpdCAyLTMgZm9yIGFjY2VzcyBzcGVlZCAqLworCisjZGVmaW5lIEdBWUxFX0NGR18wVgkJMHgwMAorI2RlZmluZSBHQVlMRV9DRkdfNVYJCTB4MDEKKyNkZWZpbmUgR0FZTEVfQ0ZHXzEyVgkJMHgwMgorCisjZGVmaW5lIEdBWUxFX0NGR18xMDBOUwkJMHgwOAorI2RlZmluZSBHQVlMRV9DRkdfMTUwTlMJCTB4MDQKKyNkZWZpbmUgR0FZTEVfQ0ZHXzI1ME5TCQkweDAwCisjZGVmaW5lIEdBWUxFX0NGR183MjBOUwkJMHgwYworCisjZW5kaWYgLyogYXNtLW02OGsvYW1pZ2F5bGUuaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hbWlwY21jaWEuaCBiL2luY2x1ZGUvYXNtLW02OGsvYW1pcGNtY2lhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYxZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYW1pcGNtY2lhLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisqKiBhc20tbTY4ay9wY21jaWEuaCAtLSBBbWlnYSBMaW51eCBQQ01DSUEgRGVmaW5pdGlvbnMKKyoqCisqKiBDb3B5cmlnaHQgMTk5NyBieSBBbGFpbiBNYWxlaworKioKKyoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisqKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKiogZm9yIG1vcmUgZGV0YWlscy4KKyoqCisqKiBDcmVhdGVkOiAxMi8xMC85NyBieSBBbGFpbiBNYWxlaworKi8KKworI2lmbmRlZiBfX0FNSUdBX1BDTUNJQV9IX18KKyNkZWZpbmUgX19BTUlHQV9QQ01DSUFfSF9fCisKKyNpbmNsdWRlIDxhc20vYW1pZ2F5bGUuaD4KKworLyogcHJvdG90eXBlcyAqLworCit2b2lkIHBjbWNpYV9yZXNldCh2b2lkKTsKK2ludCBwY21jaWFfY29weV90dXBsZSh1bnNpZ25lZCBjaGFyIHR1cGxlX2lkLCB2b2lkICp0dXBsZSwgaW50IG1heF9sZW4pOwordm9pZCBwY21jaWFfcHJvZ3JhbV92b2x0YWdlKGludCB2b2x0YWdlKTsKK3ZvaWQgcGNtY2lhX2FjY2Vzc19zcGVlZChpbnQgc3BlZWQpOwordm9pZCBwY21jaWFfd3JpdGVfZW5hYmxlKHZvaWQpOwordm9pZCBwY21jaWFfd3JpdGVfZGlzYWJsZSh2b2lkKTsKKworc3RhdGljIGlubGluZSB1X2NoYXIgcGNtY2lhX3JlYWRfc3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIChnYXlsZS5jYXJkc3RhdHVzICYgMHg3Yyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdV9jaGFyIHBjbWNpYV9nZXRfaW50cmVxKHZvaWQpCit7CisJcmV0dXJuIChnYXlsZS5pbnRyZXEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNtY2lhX2Fja19pbnQodV9jaGFyIGludHJlcSkKK3sKKwlnYXlsZS5pbnRyZXEgPSAweGY4OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNtY2lhX2VuYWJsZV9pcnEodm9pZCkKK3sKKwlnYXlsZS5pbnRlbiB8PSBHQVlMRV9JUlFfSVJROworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNtY2lhX2Rpc2FibGVfaXJxKHZvaWQpCit7CisJZ2F5bGUuaW50ZW4gJj0gfkdBWUxFX0lSUV9JUlE7Cit9CisKKyNkZWZpbmUgUENNQ0lBX0lOU0VSVEVECShnYXlsZS5jYXJkc3RhdHVzICYgR0FZTEVfQ1NfQ0NERVQpCisKKy8qIHZhbGlkIHZvbHRhZ2VzIGZvciBwY21jaWFfUHJvZ3JhbVZvbHRhZ2UgKi8KKworI2RlZmluZSBQQ01DSUFfMFYJMAorI2RlZmluZSBQQ01DSUFfNVYJNQorI2RlZmluZSBQQ01DSUFfMTJWCTEyCisKKy8qIHZhbGlkIHNwZWVkcyBmb3IgcGNtY2lhX0FjY2Vzc1NwZWVkICovCisKKyNkZWZpbmUgUENNQ0lBX1NQRUVEXzEwME5TCTEwMAorI2RlZmluZSBQQ01DSUFfU1BFRURfMTUwTlMJMTUwCisjZGVmaW5lIFBDTUNJQV9TUEVFRF8yNTBOUwkyNTAKKyNkZWZpbmUgUENNQ0lBX1NQRUVEXzcyME5TCTcyMAorCisvKiBQQ01DSUEgVHVwbGUgY29kZXMgKi8KKworI2RlZmluZSBDSVNUUExfTlVMTAkJMHgwMAorI2RlZmluZSBDSVNUUExfREVWSUNFCQkweDAxCisjZGVmaW5lIENJU1RQTF9MT05HTElOS19DQgkweDAyCisjZGVmaW5lIENJU1RQTF9DT05GSUdfQ0IJMHgwNAorI2RlZmluZSBDSVNUUExfQ0ZUQUJMRV9FTlRSWV9DQgkweDA1CisjZGVmaW5lIENJU1RQTF9MT05HTElOS19NRkMJMHgwNgorI2RlZmluZSBDSVNUUExfQkFSCQkweDA3CisjZGVmaW5lIENJU1RQTF9DSEVDS1NVTQkJMHgxMAorI2RlZmluZSBDSVNUUExfTE9OR0xJTktfQQkweDExCisjZGVmaW5lIENJU1RQTF9MT05HTElOS19DCTB4MTIKKyNkZWZpbmUgQ0lTVFBMX0xJTktUQVJHRVQJMHgxMworI2RlZmluZSBDSVNUUExfTk9fTElOSwkJMHgxNAorI2RlZmluZSBDSVNUUExfVkVSU18xCQkweDE1CisjZGVmaW5lIENJU1RQTF9BTFRTVFIJCTB4MTYKKyNkZWZpbmUgQ0lTVFBMX0RFVklDRV9BCQkweDE3CisjZGVmaW5lIENJU1RQTF9KRURFQ19DCQkweDE4CisjZGVmaW5lIENJU1RQTF9KRURFQ19BCQkweDE5CisjZGVmaW5lIENJU1RQTF9DT05GSUcJCTB4MWEKKyNkZWZpbmUgQ0lTVFBMX0NGVEFCTEVfRU5UUlkJMHgxYgorI2RlZmluZSBDSVNUUExfREVWSUNFX09DCTB4MWMKKyNkZWZpbmUgQ0lTVFBMX0RFVklDRV9PQQkweDFkCisjZGVmaW5lIENJU1RQTF9ERVZJQ0VfR0VPCTB4MWUKKyNkZWZpbmUgQ0lTVFBMX0RFVklDRV9HRU9fQQkweDFmCisjZGVmaW5lIENJU1RQTF9NQU5GSUQJCTB4MjAKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNJRAkJMHgyMQorI2RlZmluZSBDSVNUUExfRlVOQ0UJCTB4MjIKKyNkZWZpbmUgQ0lTVFBMX1NXSUwJCTB4MjMKKyNkZWZpbmUgQ0lTVFBMX0VORAkJMHhmZgorCisvKiBGVU5DSUQgKi8KKworI2RlZmluZSBDSVNUUExfRlVOQ0lEX01VTFRJCTB4MDAKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNJRF9NRU1PUlkJMHgwMQorI2RlZmluZSBDSVNUUExfRlVOQ0lEX1NFUklBTAkweDAyCisjZGVmaW5lIENJU1RQTF9GVU5DSURfUEFSQUxMRUwJMHgwMworI2RlZmluZSBDSVNUUExfRlVOQ0lEX0ZJWEVECTB4MDQKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNJRF9WSURFTwkweDA1CisjZGVmaW5lIENJU1RQTF9GVU5DSURfTkVUV09SSwkweDA2CisjZGVmaW5lIENJU1RQTF9GVU5DSURfQUlNUwkweDA3CisjZGVmaW5lIENJU1RQTF9GVU5DSURfU0NTSQkweDA4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hcG9sbG9kbWEuaCBiL2luY2x1ZGUvYXNtLW02OGsvYXBvbGxvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyMWUzYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYXBvbGxvZG1hLmgKQEAgLTAsMCArMSwyNDggQEAKKy8qICRJZDogZG1hLmgsdiAxLjcgMTk5Mi8xMi8xNCAwMDoyOTozNCByb290IEV4cCByb290ICQKKyAqIGxpbnV4L2luY2x1ZGUvYXNtL2RtYS5oOiBEZWZpbmVzIGZvciB1c2luZyBhbmQgYWxsb2NhdGluZyBkbWEgY2hhbm5lbHMuCisgKiBXcml0dGVuIGJ5IEhlbm51cyBCZXJnbWFuLCAxOTkyLgorICogSGlnaCBETUEgY2hhbm5lbCBzdXBwb3J0ICYgaW5mbyBieSBIYW5udSBTYXZvbGFpbmVuCisgKiBhbmQgSm9obiBCb3lkLCBOb3YuIDE5OTIuCisgKi8KKworI2lmbmRlZiBfQVNNX0FQT0xMT19ETUFfSAorI2RlZmluZSBfQVNNX0FQT0xMT19ETUFfSAorCisjaW5jbHVkZSA8YXNtL2Fwb2xsb2h3Lmg+CQkvKiBuZWVkIGJ5dGUgSU8gKi8KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgkJLyogQW5kIHNwaW5sb2NrcyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKworI2RlZmluZSBkbWFfb3V0Yih2YWwsYWRkcikgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoYWRkcitJT19CQVNFKSkgPSAodmFsKSkKKyNkZWZpbmUgZG1hX2luYihhZGRyKQkgICAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShhZGRyK0lPX0JBU0UpKSkKKworLyoKKyAqIE5PVEVTIGFib3V0IERNQSB0cmFuc2ZlcnM6CisgKgorICogIGNvbnRyb2xsZXIgMTogY2hhbm5lbHMgMC0zLCBieXRlIG9wZXJhdGlvbnMsIHBvcnRzIDAwLTFGCisgKiAgY29udHJvbGxlciAyOiBjaGFubmVscyA0LTcsIHdvcmQgb3BlcmF0aW9ucywgcG9ydHMgQzAtREYKKyAqCisgKiAgLSBBTEwgcmVnaXN0ZXJzIGFyZSA4IGJpdHMgb25seSwgcmVnYXJkbGVzcyBvZiB0cmFuc2ZlciBzaXplCisgKiAgLSBjaGFubmVsIDQgaXMgbm90IHVzZWQgLSBjYXNjYWRlcyAxIGludG8gMi4KKyAqICAtIGNoYW5uZWxzIDAtMyBhcmUgYnl0ZSAtIGFkZHJlc3Nlcy9jb3VudHMgYXJlIGZvciBwaHlzaWNhbCBieXRlcworICogIC0gY2hhbm5lbHMgNS03IGFyZSB3b3JkIC0gYWRkcmVzc2VzL2NvdW50cyBhcmUgZm9yIHBoeXNpY2FsIHdvcmRzCisgKiAgLSB0cmFuc2ZlcnMgbXVzdCBub3QgY3Jvc3MgcGh5c2ljYWwgNjRLICgwLTMpIG9yIDEyOEsgKDUtNykgYm91bmRhcmllcworICogIC0gdHJhbnNmZXIgY291bnQgbG9hZGVkIHRvIHJlZ2lzdGVycyBpcyAxIGxlc3MgdGhhbiBhY3R1YWwgY291bnQKKyAqICAtIGNvbnRyb2xsZXIgMiBvZmZzZXRzIGFyZSBhbGwgZXZlbiAoMnggb2Zmc2V0cyBmb3IgY29udHJvbGxlciAxKQorICogIC0gcGFnZSByZWdpc3RlcnMgZm9yIDUtNyBkb24ndCB1c2UgZGF0YSBiaXQgMCwgcmVwcmVzZW50IDEyOEsgcGFnZXMKKyAqICAtIHBhZ2UgcmVnaXN0ZXJzIGZvciAwLTMgdXNlIGJpdCAwLCByZXByZXNlbnQgNjRLIHBhZ2VzCisgKgorICogRE1BIHRyYW5zZmVycyBhcmUgbGltaXRlZCB0byB0aGUgbG93ZXIgMTZNQiBvZiBfcGh5c2ljYWxfIG1lbW9yeS4KKyAqIE5vdGUgdGhhdCBhZGRyZXNzZXMgbG9hZGVkIGludG8gcmVnaXN0ZXJzIG11c3QgYmUgX3BoeXNpY2FsXyBhZGRyZXNzZXMsCisgKiBub3QgbG9naWNhbCBhZGRyZXNzZXMgKHdoaWNoIG1heSBkaWZmZXIgaWYgcGFnaW5nIGlzIGFjdGl2ZSkuCisgKgorICogIEFkZHJlc3MgbWFwcGluZyBmb3IgY2hhbm5lbHMgMC0zOgorICoKKyAqICAgQTIzIC4uLiBBMTYgQTE1IC4uLiBBOCAgQTcgLi4uIEEwICAgIChQaHlzaWNhbCBhZGRyZXNzZXMpCisgKiAgICB8ICAuLi4gIHwgICB8ICAuLi4gfCAgIHwgIC4uLiB8CisgKiAgICB8ICAuLi4gIHwgICB8ICAuLi4gfCAgIHwgIC4uLiB8CisgKiAgICB8ICAuLi4gIHwgICB8ICAuLi4gfCAgIHwgIC4uLiB8CisgKiAgIFA3ICAuLi4gIFAwICBBNyAuLi4gQTAgIEE3IC4uLiBBMAorICogfCAgICBQYWdlICAgIHwgQWRkciBNU0IgfCBBZGRyIExTQiB8ICAgKERNQSByZWdpc3RlcnMpCisgKgorICogIEFkZHJlc3MgbWFwcGluZyBmb3IgY2hhbm5lbHMgNS03OgorICoKKyAqICAgQTIzIC4uLiBBMTcgQTE2IEExNSAuLi4gQTkgQTggQTcgLi4uIEExIEEwICAgIChQaHlzaWNhbCBhZGRyZXNzZXMpCisgKiAgICB8ICAuLi4gIHwgICBcICAgXCAgIC4uLiBcICBcICBcICAuLi4gXCAgXAorICogICAgfCAgLi4uICB8ICAgIFwgICBcICAgLi4uIFwgIFwgIFwgIC4uLiBcICAobm90IHVzZWQpCisgKiAgICB8ICAuLi4gIHwgICAgIFwgICBcICAgLi4uIFwgIFwgIFwgIC4uLiBcCisgKiAgIFA3ICAuLi4gIFAxICgwKSBBNyBBNiAgLi4uIEEwIEE3IEE2IC4uLiBBMAorICogfCAgICAgIFBhZ2UgICAgICB8ICBBZGRyIE1TQiAgIHwgIEFkZHIgTFNCICB8ICAgKERNQSByZWdpc3RlcnMpCisgKgorICogQWdhaW4sIGNoYW5uZWxzIDUtNyB0cmFuc2ZlciBfcGh5c2ljYWxfIHdvcmRzICgxNiBiaXRzKSwgc28gYWRkcmVzc2VzCisgKiBhbmQgY291bnRzIF9tdXN0XyBiZSB3b3JkLWFsaWduZWQgKHRoZSBsb3dlc3QgYWRkcmVzcyBiaXQgaXMgX2lnbm9yZWRfIGF0CisgKiB0aGUgaGFyZHdhcmUgbGV2ZWwsIHNvIG9kZC1ieXRlIHRyYW5zZmVycyBhcmVuJ3QgcG9zc2libGUpLgorICoKKyAqIFRyYW5zZmVyIGNvdW50IChfbm90ICMgYnl0ZXNfKSBpcyBsaW1pdGVkIHRvIDY0SywgcmVwcmVzZW50ZWQgYXMgYWN0dWFsCisgKiBjb3VudCAtIDEgOiA2NEsgPT4gMHhGRkZGLCAxID0+IDB4MDAwMC4gIFRodXMsIGNvdW50IGlzIGFsd2F5cyAxIG9yIG1vcmUsCisgKiBhbmQgdXAgdG8gMTI4SyBieXRlcyBtYXkgYmUgdHJhbnNmZXJyZWQgb24gY2hhbm5lbHMgNS03IGluIG9uZSBvcGVyYXRpb24uCisgKgorICovCisKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwk4CisKKy8qIFRoZSBtYXhpbXVtIGFkZHJlc3MgdGhhdCB3ZSBjYW4gcGVyZm9ybSBhIERNQSB0cmFuc2ZlciB0byBvbiB0aGlzIHBsYXRmb3JtICovI2RlZmluZSBNQVhfRE1BX0FERFJFU1MgICAgICAoUEFHRV9PRkZTRVQrMHgxMDAwMDAwKQorCisvKiA4MjM3IERNQSBjb250cm9sbGVycyAqLworI2RlZmluZSBJT19ETUExX0JBU0UJMHgxMEMwMAkvKiA4IGJpdCBzbGF2ZSBETUEsIGNoYW5uZWxzIDAuLjMgKi8KKyNkZWZpbmUgSU9fRE1BMl9CQVNFCTB4MTBEMDAJLyogMTYgYml0IG1hc3RlciBETUEsIGNoIDQoPXNsYXZlIGlucHV0KS4uNyAqLworCisvKiBETUEgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRE1BMV9DTURfUkVHCQkoSU9fRE1BMV9CQVNFKzB4MDgpIC8qIGNvbW1hbmQgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTFfU1RBVF9SRUcJCShJT19ETUExX0JBU0UrMHgwOCkgLyogc3RhdHVzIHJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUExX1JFUV9SRUcgICAgICAgICAgICAoSU9fRE1BMV9CQVNFKzB4MDkpIC8qIHJlcXVlc3QgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTFfTUFTS19SRUcJCShJT19ETUExX0JBU0UrMHgwQSkgLyogc2luZ2xlLWNoYW5uZWwgbWFzayAodykgKi8KKyNkZWZpbmUgRE1BMV9NT0RFX1JFRwkJKElPX0RNQTFfQkFTRSsweDBCKSAvKiBtb2RlIHJlZ2lzdGVyICh3KSAqLworI2RlZmluZSBETUExX0NMRUFSX0ZGX1JFRwkoSU9fRE1BMV9CQVNFKzB4MEMpIC8qIGNsZWFyIHBvaW50ZXIgZmxpcC1mbG9wICh3KSAqLworI2RlZmluZSBETUExX1RFTVBfUkVHICAgICAgICAgICAoSU9fRE1BMV9CQVNFKzB4MEQpIC8qIFRlbXBvcmFyeSBSZWdpc3RlciAocikgKi8KKyNkZWZpbmUgRE1BMV9SRVNFVF9SRUcJCShJT19ETUExX0JBU0UrMHgwRCkgLyogTWFzdGVyIENsZWFyICh3KSAqLworI2RlZmluZSBETUExX0NMUl9NQVNLX1JFRyAgICAgICAoSU9fRE1BMV9CQVNFKzB4MEUpIC8qIENsZWFyIE1hc2sgKi8KKyNkZWZpbmUgRE1BMV9NQVNLX0FMTF9SRUcgICAgICAgKElPX0RNQTFfQkFTRSsweDBGKSAvKiBhbGwtY2hhbm5lbHMgbWFzayAodykgKi8KKworI2RlZmluZSBETUEyX0NNRF9SRUcJCShJT19ETUEyX0JBU0UrMHgxMCkgLyogY29tbWFuZCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMl9TVEFUX1JFRwkJKElPX0RNQTJfQkFTRSsweDEwKSAvKiBzdGF0dXMgcmVnaXN0ZXIgKHIpICovCisjZGVmaW5lIERNQTJfUkVRX1JFRyAgICAgICAgICAgIChJT19ETUEyX0JBU0UrMHgxMikgLyogcmVxdWVzdCByZWdpc3RlciAodykgKi8KKyNkZWZpbmUgRE1BMl9NQVNLX1JFRwkJKElPX0RNQTJfQkFTRSsweDE0KSAvKiBzaW5nbGUtY2hhbm5lbCBtYXNrICh3KSAqLworI2RlZmluZSBETUEyX01PREVfUkVHCQkoSU9fRE1BMl9CQVNFKzB4MTYpIC8qIG1vZGUgcmVnaXN0ZXIgKHcpICovCisjZGVmaW5lIERNQTJfQ0xFQVJfRkZfUkVHCShJT19ETUEyX0JBU0UrMHgxOCkgLyogY2xlYXIgcG9pbnRlciBmbGlwLWZsb3AgKHcpICovCisjZGVmaW5lIERNQTJfVEVNUF9SRUcgICAgICAgICAgIChJT19ETUEyX0JBU0UrMHgxQSkgLyogVGVtcG9yYXJ5IFJlZ2lzdGVyIChyKSAqLworI2RlZmluZSBETUEyX1JFU0VUX1JFRwkJKElPX0RNQTJfQkFTRSsweDFBKSAvKiBNYXN0ZXIgQ2xlYXIgKHcpICovCisjZGVmaW5lIERNQTJfQ0xSX01BU0tfUkVHICAgICAgIChJT19ETUEyX0JBU0UrMHgxQykgLyogQ2xlYXIgTWFzayAqLworI2RlZmluZSBETUEyX01BU0tfQUxMX1JFRyAgICAgICAoSU9fRE1BMl9CQVNFKzB4MUUpIC8qIGFsbC1jaGFubmVscyBtYXNrICh3KSAqLworCisjZGVmaW5lIERNQV9BRERSXzAgICAgICAgICAgICAgIChJT19ETUExX0JBU0UrMHgwMCkgLyogRE1BIGFkZHJlc3MgcmVnaXN0ZXJzICovCisjZGVmaW5lIERNQV9BRERSXzEgICAgICAgICAgICAgIChJT19ETUExX0JBU0UrMHgwMikKKyNkZWZpbmUgRE1BX0FERFJfMiAgICAgICAgICAgICAgKElPX0RNQTFfQkFTRSsweDA0KQorI2RlZmluZSBETUFfQUREUl8zICAgICAgICAgICAgICAoSU9fRE1BMV9CQVNFKzB4MDYpCisjZGVmaW5lIERNQV9BRERSXzQgICAgICAgICAgICAgIChJT19ETUEyX0JBU0UrMHgwMCkKKyNkZWZpbmUgRE1BX0FERFJfNSAgICAgICAgICAgICAgKElPX0RNQTJfQkFTRSsweDA0KQorI2RlZmluZSBETUFfQUREUl82ICAgICAgICAgICAgICAoSU9fRE1BMl9CQVNFKzB4MDgpCisjZGVmaW5lIERNQV9BRERSXzcgICAgICAgICAgICAgIChJT19ETUEyX0JBU0UrMHgwQykKKworI2RlZmluZSBETUFfQ05UXzAgICAgICAgICAgICAgICAoSU9fRE1BMV9CQVNFKzB4MDEpICAgLyogRE1BIGNvdW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBETUFfQ05UXzEgICAgICAgICAgICAgICAoSU9fRE1BMV9CQVNFKzB4MDMpCisjZGVmaW5lIERNQV9DTlRfMiAgICAgICAgICAgICAgIChJT19ETUExX0JBU0UrMHgwNSkKKyNkZWZpbmUgRE1BX0NOVF8zICAgICAgICAgICAgICAgKElPX0RNQTFfQkFTRSsweDA3KQorI2RlZmluZSBETUFfQ05UXzQgICAgICAgICAgICAgICAoSU9fRE1BMl9CQVNFKzB4MDIpCisjZGVmaW5lIERNQV9DTlRfNSAgICAgICAgICAgICAgIChJT19ETUEyX0JBU0UrMHgwNikKKyNkZWZpbmUgRE1BX0NOVF82ICAgICAgICAgICAgICAgKElPX0RNQTJfQkFTRSsweDBBKQorI2RlZmluZSBETUFfQ05UXzcgICAgICAgICAgICAgICAoSU9fRE1BMl9CQVNFKzB4MEUpCisKKyNkZWZpbmUgRE1BX01PREVfUkVBRAkweDQ0CS8qIEkvTyB0byBtZW1vcnksIG5vIGF1dG9pbml0LCBpbmNyZW1lbnQsIHNpbmdsZSBtb2RlICovCisjZGVmaW5lIERNQV9NT0RFX1dSSVRFCTB4NDgJLyogbWVtb3J5IHRvIEkvTywgbm8gYXV0b2luaXQsIGluY3JlbWVudCwgc2luZ2xlIG1vZGUgKi8KKyNkZWZpbmUgRE1BX01PREVfQ0FTQ0FERSAweEMwICAgLyogcGFzcyB0aHJ1IERSRVEtPkhSUSwgREFDSzwtSExEQSBvbmx5ICovCisKKyNkZWZpbmUgRE1BX0FVVE9JTklUCTB4MTAKKworI2RlZmluZSBETUFfOEJJVCAwCisjZGVmaW5lIERNQV8xNkJJVCAxCisjZGVmaW5lIERNQV9CVVNNQVNURVIgMgorCitleHRlcm4gc3BpbmxvY2tfdCAgZG1hX3NwaW5fbG9jazsKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBjbGFpbV9kbWFfbG9jayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcmVsZWFzZV9kbWFfbG9jayh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKK30KKworLyogZW5hYmxlL2Rpc2FibGUgYSBzcGVjaWZpYyBETUEgY2hhbm5lbCAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBlbmFibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKK3sKKwlpZiAoZG1hbnI8PTMpCisJCWRtYV9vdXRiKGRtYW5yLCAgRE1BMV9NQVNLX1JFRyk7CisJZWxzZQorCQlkbWFfb3V0YihkbWFuciAmIDMsICBETUEyX01BU0tfUkVHKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBkaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJaWYgKGRtYW5yPD0zKQorCQlkbWFfb3V0YihkbWFuciB8IDQsICBETUExX01BU0tfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKChkbWFuciAmIDMpIHwgNCwgIERNQTJfTUFTS19SRUcpOworfQorCisvKiBDbGVhciB0aGUgJ0RNQSBQb2ludGVyIEZsaXAgRmxvcCcuCisgKiBXcml0ZSAwIGZvciBMU0IvTVNCLCAxIGZvciBNU0IvTFNCIGFjY2Vzcy4KKyAqIFVzZSB0aGlzIG9uY2UgdG8gaW5pdGlhbGl6ZSB0aGUgRkYgdG8gYSBrbm93biBzdGF0ZS4KKyAqIEFmdGVyIHRoYXQsIGtlZXAgdHJhY2sgb2YgaXQuIDotKQorICogLS0tIEluIG9yZGVyIHRvIGRvIHRoYXQsIHRoZSBETUEgcm91dGluZXMgYmVsb3cgc2hvdWxkIC0tLQorICogLS0tIG9ubHkgYmUgdXNlZCB3aGlsZSBob2xkaW5nIHRoZSBETUEgbG9jayAhIC0tLQorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNsZWFyX2RtYV9mZih1bnNpZ25lZCBpbnQgZG1hbnIpCit7CisJaWYgKGRtYW5yPD0zKQorCQlkbWFfb3V0YigwLCAgRE1BMV9DTEVBUl9GRl9SRUcpOworCWVsc2UKKwkJZG1hX291dGIoMCwgIERNQTJfQ0xFQVJfRkZfUkVHKTsKK30KKworLyogc2V0IG1vZGUgKGFib3ZlKSBmb3IgYSBzcGVjaWZpYyBETUEgY2hhbm5lbCAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX21vZGUodW5zaWduZWQgaW50IGRtYW5yLCBjaGFyIG1vZGUpCit7CisJaWYgKGRtYW5yPD0zKQorCQlkbWFfb3V0Yihtb2RlIHwgZG1hbnIsICBETUExX01PREVfUkVHKTsKKwllbHNlCisJCWRtYV9vdXRiKG1vZGUgfCAoZG1hbnImMyksICBETUEyX01PREVfUkVHKTsKK30KKworLyogU2V0IHRyYW5zZmVyIGFkZHJlc3MgJiBwYWdlIGJpdHMgZm9yIHNwZWNpZmljIERNQSBjaGFubmVsLgorICogQXNzdW1lcyBkbWEgZmxpcGZsb3AgaXMgY2xlYXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9hZGRyKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGEpCit7CisJaWYgKGRtYW5yIDw9IDMpICB7CisJICAgIGRtYV9vdXRiKCBhICYgMHhmZiwgKChkbWFuciYzKTw8MSkgKyBJT19ETUExX0JBU0UgKTsKKyAgICAgICAgICAgIGRtYV9vdXRiKCAoYT4+OCkgJiAweGZmLCAoKGRtYW5yJjMpPDwxKSArIElPX0RNQTFfQkFTRSApOworCX0gIGVsc2UgIHsKKwkgICAgZG1hX291dGIoIChhPj4xKSAmIDB4ZmYsICgoZG1hbnImMyk8PDIpICsgSU9fRE1BMl9CQVNFICk7CisJICAgIGRtYV9vdXRiKCAoYT4+OSkgJiAweGZmLCAoKGRtYW5yJjMpPDwyKSArIElPX0RNQTJfQkFTRSApOworCX0KK30KKworCisvKiBTZXQgdHJhbnNmZXIgc2l6ZSAobWF4IDY0ayBmb3IgRE1BMS4uMywgMTI4ayBmb3IgRE1BNS4uNykgZm9yCisgKiBhIHNwZWNpZmljIERNQSBjaGFubmVsLgorICogWW91IG11c3QgZW5zdXJlIHRoZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZC4KKyAqIE5PVEU6IGZyb20gYSBtYW51YWw6ICJ0aGUgbnVtYmVyIG9mIHRyYW5zZmVycyBpcyBvbmUgbW9yZQorICogdGhhbiB0aGUgaW5pdGlhbCB3b3JkIGNvdW50IiEgVGhpcyBpcyB0YWtlbiBpbnRvIGFjY291bnQuCisgKiBBc3N1bWVzIGRtYSBmbGlwLWZsb3AgaXMgY2xlYXIuCisgKiBOT1RFIDI6ICJjb3VudCIgcmVwcmVzZW50cyBfYnl0ZXNfIGFuZCBtdXN0IGJlIGV2ZW4gZm9yIGNoYW5uZWxzIDUtNy4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX2NvdW50KHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgICAgICBjb3VudC0tOworCWlmIChkbWFuciA8PSAzKSAgeworCSAgICBkbWFfb3V0YiggY291bnQgJiAweGZmLCAoKGRtYW5yJjMpPDwxKSArIDEgKyBJT19ETUExX0JBU0UgKTsKKwkgICAgZG1hX291dGIoIChjb3VudD4+OCkgJiAweGZmLCAoKGRtYW5yJjMpPDwxKSArIDEgKyBJT19ETUExX0JBU0UgKTsKKyAgICAgICAgfSBlbHNlIHsKKwkgICAgZG1hX291dGIoIChjb3VudD4+MSkgJiAweGZmLCAoKGRtYW5yJjMpPDwyKSArIDIgKyBJT19ETUEyX0JBU0UgKTsKKwkgICAgZG1hX291dGIoIChjb3VudD4+OSkgJiAweGZmLCAoKGRtYW5yJjMpPDwyKSArIDIgKyBJT19ETUEyX0JBU0UgKTsKKyAgICAgICAgfQorfQorCisKKy8qIEdldCBETUEgcmVzaWR1ZSBjb3VudC4gQWZ0ZXIgYSBETUEgdHJhbnNmZXIsIHRoaXMKKyAqIHNob3VsZCByZXR1cm4gemVyby4gUmVhZGluZyB0aGlzIHdoaWxlIGEgRE1BIHRyYW5zZmVyIGlzCisgKiBzdGlsbCBpbiBwcm9ncmVzcyB3aWxsIHJldHVybiB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCisgKiBJZiBjYWxsZWQgYmVmb3JlIHRoZSBjaGFubmVsIGhhcyBiZWVuIHVzZWQsIGl0IG1heSByZXR1cm4gMS4KKyAqIE90aGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIF9ieXRlc18gbGVmdCB0byB0cmFuc2Zlci4KKyAqCisgKiBBc3N1bWVzIERNQSBmbGlwLWZsb3AgaXMgY2xlYXIuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBnZXRfZG1hX3Jlc2lkdWUodW5zaWduZWQgaW50IGRtYW5yKQoreworCXVuc2lnbmVkIGludCBpb19wb3J0ID0gKGRtYW5yPD0zKT8gKChkbWFuciYzKTw8MSkgKyAxICsgSU9fRE1BMV9CQVNFCisJCQkJCSA6ICgoZG1hbnImMyk8PDIpICsgMiArIElPX0RNQTJfQkFTRTsKKworCS8qIHVzaW5nIHNob3J0IHRvIGdldCAxNi1iaXQgd3JhcCBhcm91bmQgKi8KKwl1bnNpZ25lZCBzaG9ydCBjb3VudDsKKworCWNvdW50ID0gMSArIGRtYV9pbmIoaW9fcG9ydCk7CisJY291bnQgKz0gZG1hX2luYihpb19wb3J0KSA8PCA4OworCisJcmV0dXJuIChkbWFucjw9Myk/IGNvdW50IDogKGNvdW50PDwxKTsKK30KKworCisvKiBUaGVzZSBhcmUgaW4ga2VybmVsL2RtYS5jOiAqLworZXh0ZXJuIGludCByZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKiBkZXZpY2VfaWQpOwkvKiByZXNlcnZlIGEgRE1BIGNoYW5uZWwgKi8KK2V4dGVybiB2b2lkIGZyZWVfZG1hKHVuc2lnbmVkIGludCBkbWFucik7CS8qIHJlbGVhc2UgaXQgYWdhaW4gKi8KKworLyogVGhlc2UgYXJlIGluIGFyY2gvbTY4ay9hcG9sbG8vZG1hLmM6ICovCitleHRlcm4gdW5zaWduZWQgc2hvcnQgZG1hX21hcF9wYWdlKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLGludCBjb3VudCxpbnQgdHlwZSk7CitleHRlcm4gdm9pZCBkbWFfdW5tYXBfcGFnZSh1bnNpZ25lZCBzaG9ydCBkbWFfYWRkcik7CisKKyNlbmRpZiAvKiBfQVNNX0FQT0xMT19ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hcG9sbG9ody5oIGIvaW5jbHVkZS9hc20tbTY4ay9hcG9sbG9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMDRlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2Fwb2xsb2h3LmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qIGFwb2xsb2h3LmggOiBzb21lIHN0cnVjdHVyZXMgdG8gYWNjZXNzIGFwb2xsbyBIVyAqLworCisjaWZuZGVmIF9BU01tNjhrX0FQT0xMT0hXX0hfCisjZGVmaW5lIF9BU01tNjhrX0FQT0xMT0hXX0hfCisKKy8qCisgICBhcG9sbG8gbW9kZWxzCisqLworCitleHRlcm4gdV9sb25nIGFwb2xsb19tb2RlbDsKKworI2RlZmluZSBBUE9MTE9fVU5LTk9XTiAoMCkKKyNkZWZpbmUgQVBPTExPX0ROMzAwMCAoMSkKKyNkZWZpbmUgQVBPTExPX0ROMzAxMCAoMikKKyNkZWZpbmUgQVBPTExPX0ROMzUwMCAoMykKKyNkZWZpbmUgQVBPTExPX0RONDAwMCAoNCkKKyNkZWZpbmUgQVBPTExPX0RONDUwMCAoNSkKKworLyoKKyAgIHNlZSBzY24yNjgxIGRhdGEgc2hlZXQgZm9yIG1vcmUgaW5mby4KKyAgIG1lbWJlciBuYW1lcyBhcmUgcmVhZF93cml0ZS4KKyovCisKKyNkZWZpbmUgREVDTEFSRV8yNjgxX0ZJRUxEKHgpIHVuc2lnbmVkIGNoYXIgeDsgdW5zaWduZWQgY2hhciBkdW1teSMjeAorCitzdHJ1Y3QgU0NOMjY4MSB7CisKKwlERUNMQVJFXzI2ODFfRklFTEQobXJhKTsKKwlERUNMQVJFXzI2ODFfRklFTEQoc3JhX2NzcmEpOworCURFQ0xBUkVfMjY4MV9GSUVMRChCUkd0ZXN0X2NyYSk7CisJREVDTEFSRV8yNjgxX0ZJRUxEKHJocmFfdGhyYSk7CisJREVDTEFSRV8yNjgxX0ZJRUxEKGlwY3JfYWNyKTsKKwlERUNMQVJFXzI2ODFfRklFTEQoaXNyX2ltcik7CisJREVDTEFSRV8yNjgxX0ZJRUxEKGN0dV9jdHVyKTsKKwlERUNMQVJFXzI2ODFfRklFTEQoY3RsX2N0bHIpOworCURFQ0xBUkVfMjY4MV9GSUVMRChtcmIpOworCURFQ0xBUkVfMjY4MV9GSUVMRChzcmJfY3NyYik7CisJREVDTEFSRV8yNjgxX0ZJRUxEKHRzdF9jcmIpOworCURFQ0xBUkVfMjY4MV9GSUVMRChyaHJiX3RocmIpOworCURFQ0xBUkVfMjY4MV9GSUVMRChyZXNlcnZlZCk7CisJREVDTEFSRV8yNjgxX0ZJRUxEKGlwX29wY3IpOworCURFQ0xBUkVfMjY4MV9GSUVMRChzdGFydENudF9zZXRPdXRCaXQpOworCURFQ0xBUkVfMjY4MV9GSUVMRChzdG9wQ250X3Jlc2V0T3V0Qml0KTsKKworfTsKKworI2lmIDAKK3N0cnVjdCBtYzE0NjgxOCB7CisKKwl1bnNpZ25lZCBpbnQgc2Vjb25kMTo0LCBzZWNvbmQyOjQsIGFsYXJtX3NlY29uZDE6NCwgYWxhcm1fc2Vjb25kMjo0LAorCQkgICAgIG1pbnV0ZTE6NCwgbWludXRlMjo0LCBhbGFybV9taW51dGUxOjQsIGFsYXJtX21pbnV0ZTI6NDsKKwl1bnNpZ25lZCBpbnQgaG91cnMxOjQsIGhvdXJzMjo0LCBhbGFybV9ob3VyczE6NCwgYWxhcm1faG91cnMyOjQsCisJCSAgICAgZGF5X29mX3dlZWsxOjQsIGRheV9vZl93ZWVrMjo0LCBkYXlfb2ZfbW9udGgxOjQsIGRheV9vZl9tb250aDI6NDsKKwl1bnNpZ25lZCBpbnQgbW9udGgxOjQsIG1vbnRoMjo0LCB5ZWFyMTo0LCB5ZWFyMjo0LCA6MTY7CisKK307CisjZW5kaWYKKworc3RydWN0IG1jMTQ2ODE4IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBzZWNvbmQsIGFsYXJtX3NlY29uZDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtaW51dGUsIGFsYXJtX21pbnV0ZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBob3VycywgYWxhcm1faG91cnM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgZGF5X29mX3dlZWssIGRheV9vZl9tb250aDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtb250aCwgeWVhcjsKK307CisKKworI2RlZmluZSBJT19CQVNFIDB4ODAwMDAwMDAKKworZXh0ZXJuIHVfbG9uZyBzaW8wMV9waHlzYWRkcjsKK2V4dGVybiB1X2xvbmcgc2lvMjNfcGh5c2FkZHI7CitleHRlcm4gdV9sb25nIHJ0Y19waHlzYWRkcjsKK2V4dGVybiB1X2xvbmcgcGljYV9waHlzYWRkcjsKK2V4dGVybiB1X2xvbmcgcGljYl9waHlzYWRkcjsKK2V4dGVybiB1X2xvbmcgY3B1Y3RybF9waHlzYWRkcjsKK2V4dGVybiB1X2xvbmcgdGltZXJfcGh5c2FkZHI7CisKKyNkZWZpbmUgU0FVN19TSU8wMV9QSFlTQUREUiAweDEwNDAwCisjZGVmaW5lIFNBVTdfU0lPMjNfUEhZU0FERFIgMHgxMDUwMAorI2RlZmluZSBTQVU3X1JUQ19QSFlTQUREUiAweDEwOTAwCisjZGVmaW5lIFNBVTdfUElDQSAweDExMDAwCisjZGVmaW5lIFNBVTdfUElDQiAweDExMTAwCisjZGVmaW5lIFNBVTdfQ1BVQ1RSTCAweDEwMTAwCisjZGVmaW5lIFNBVTdfVElNRVIgMHgwMTA4MDAKKworI2RlZmluZSBTQVU4X1NJTzAxX1BIWVNBRERSIDB4ODQwMAorI2RlZmluZSBTQVU4X1JUQ19QSFlTQUREUiAweDg5MDAKKyNkZWZpbmUgU0FVOF9QSUNBIDB4OTQwMAorI2RlZmluZSBTQVU4X1BJQ0IgMHg5NTAwCisjZGVmaW5lIFNBVThfQ1BVQ1RSTCAweDgxMDAKKyNkZWZpbmUgU0FVOF9USU1FUiAweDg4MDAKKworI2RlZmluZSBzaW8wMSAoKCoodm9sYXRpbGUgc3RydWN0IFNDTjI2ODEgKikoSU9fQkFTRSArIHNpbzAxX3BoeXNhZGRyKSkpCisjZGVmaW5lIHNpbzIzICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NOMjY4MSAqKShJT19CQVNFICsgc2lvMjNfcGh5c2FkZHIpKSkKKyNkZWZpbmUgcnRjICgoKHZvbGF0aWxlIHN0cnVjdCBtYzE0NjgxOCAqKShJT19CQVNFICsgcnRjX3BoeXNhZGRyKSkpCisjZGVmaW5lIGNwdWN0cmwgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKElPX0JBU0UgKyBjcHVjdHJsX3BoeXNhZGRyKSkKKyNkZWZpbmUgcGljYSAoSU9fQkFTRSArIHBpY2FfcGh5c2FkZHIpCisjZGVmaW5lIHBpY2IgKElPX0JBU0UgKyBwaWNiX3BoeXNhZGRyKQorI2RlZmluZSB0aW1lciAoSU9fQkFTRSArIHRpbWVyX3BoeXNhZGRyKQorI2RlZmluZSBhZGRyX3hsYXRfbWFwICgodW5zaWduZWQgc2hvcnQgKikoSU9fQkFTRSArIDB4MTcwMDApKQorCisjZGVmaW5lIGlzYUlPMm1lbSh4KSAoKCgoKHgpICYgMHgzZjgpICA8PCA3KSB8ICgoKHgpICYgMHhmYzAwKSA+PiA2KSB8ICgoeCkgJiAweDcpKSArIDB4NDAwMDAgKyBJT19CQVNFKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYXRhZmQuaCBiL2luY2x1ZGUvYXNtLW02OGsvYXRhZmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDU2ODg5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFmZC5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX0FTTV9NNjhLX0ZEX0gKKyNkZWZpbmUgX0FTTV9NNjhLX0ZEX0gKKworLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBBdGFyaSBGbG9wcHkgZHJpdmVyICovCisKK3N0cnVjdCBhdGFyaV9mb3JtYXRfZGVzY3IgeworICAgIGludCB0cmFjazsJCQkvKiB0byBiZSBmb3JtYXR0ZWQgKi8KKyAgICBpbnQgaGVhZDsJCQkvKiAgICIiICAgICAiIiAgICAgKi8KKyAgICBpbnQgc2VjdF9vZmZzZXQ7CQkvKiBvZmZzZXQgb2YgZmlyc3Qgc2VjdG9yICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYXRhZmRyZWcuaCBiL2luY2x1ZGUvYXNtLW02OGsvYXRhZmRyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmY4MDk0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFmZHJlZy5oCkBAIC0wLDAgKzEsNzkgQEAKKyNpZm5kZWYgX0xJTlVYX0ZEUkVHX0gKKyNkZWZpbmUgX0xJTlVYX0ZEUkVHX0gKKworLyoKKyoqIFdEMTc3MiBzdHVmZgorICovCisKKy8qIHJlZ2lzdGVyIGNvZGVzICovCisKKyNkZWZpbmUgRkRDU0VMUkVHX1NUUCAgICgweDgwKSAgIC8qIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEZEQ1NFTFJFR19UUkEgICAoMHg4MikgICAvKiB0cmFjayByZWdpc3RlciAqLworI2RlZmluZSBGRENTRUxSRUdfU0VDICAgKDB4ODQpICAgLyogc2VjdG9yIHJlZ2lzdGVyICovCisjZGVmaW5lIEZEQ1NFTFJFR19EVEEgICAoMHg4NikgICAvKiBkYXRhIHJlZ2lzdGVyICovCisKKy8qIHJlZ2lzdGVyIG5hbWVzIGZvciBGRENfUkVBRC9XUklURSBtYWNyb3MgKi8KKworI2RlZmluZSBGRENSRUdfQ01ECQkwCisjZGVmaW5lIEZEQ1JFR19TVEFUVVMJMAorI2RlZmluZSBGRENSRUdfVFJBQ0sJMgorI2RlZmluZSBGRENSRUdfU0VDVE9SCTQKKyNkZWZpbmUgRkRDUkVHX0RBVEEJCTYKKworLyogY29tbWFuZCBvcGNvZGVzICovCisKKyNkZWZpbmUgRkRDQ01EX1JFU1RPUkUgICgweDAwKSAgIC8qICAtICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZEQ0NNRF9TRUVLICAgICAoMHgxMCkgICAvKiAgIHwgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGRENDTURfU1RFUCAgICAgKDB4MjApICAgLyogICB8ICBUWVAgMSBDb21tYW5kcyAgKi8KKyNkZWZpbmUgRkRDQ01EX1NUSU4gICAgICgweDQwKSAgIC8qICAgfCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZEQ0NNRF9TVE9UICAgICAoMHg2MCkgICAvKiAgLSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGRENDTURfUkRTRUMgICAgKDB4ODApICAgLyogIC0gICBUWVAgMiBDb21tYW5kcyAgKi8KKyNkZWZpbmUgRkRDQ01EX1dSU0VDICAgICgweGEwKSAgIC8qICAtICAgICAgICAgICIgICAgICAgICovCisjZGVmaW5lIEZEQ0NNRF9SREFEUiAgICAoMHhjMCkgICAvKiAgLSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGRENDTURfUkRUUkEgICAgKDB4ZTApICAgLyogICB8ICBUWVAgMyBDb21tYW5kcyAgKi8KKyNkZWZpbmUgRkRDQ01EX1dSVFJBICAgICgweGYwKSAgIC8qICAtICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZEQ0NNRF9GT1JDSSAgICAoMHhkMCkgICAvKiAgLSAgIFRZUCA0IENvbW1hbmQgICAqLworCisvKiBjb21tYW5kIG1vZGlmaWVyIGJpdHMgKi8KKworI2RlZmluZSBGRENDTURBRERfU1I2ICAgKDB4MDApICAgLyogc3RlcCByYXRlIHNldHRpbmdzICovCisjZGVmaW5lIEZEQ0NNREFERF9TUjEyICAoMHgwMSkKKyNkZWZpbmUgRkRDQ01EQUREX1NSMiAgICgweDAyKQorI2RlZmluZSBGRENDTURBRERfU1IzICAgKDB4MDMpCisjZGVmaW5lIEZEQ0NNREFERF9WICAgICAoMHgwNCkgICAvKiB2ZXJpZnkgKi8KKyNkZWZpbmUgRkRDQ01EQUREX0ggICAgICgweDA4KSAgIC8qIHdhaXQgZm9yIHNwaW4tdXAgKi8KKyNkZWZpbmUgRkRDQ01EQUREX1UgICAgICgweDEwKSAgIC8qIHVwZGF0ZSB0cmFjayByZWdpc3RlciAqLworI2RlZmluZSBGRENDTURBRERfTSAgICAgKDB4MTApICAgLyogbXVsdGlwbGUgc2VjdG9yIGFjY2VzcyAqLworI2RlZmluZSBGRENDTURBRERfRSAgICAgKDB4MDQpICAgLyogaGVhZCBzZXR0bGluZyBmbGFnICovCisjZGVmaW5lIEZEQ0NNREFERF9QICAgICAoMHgwMikgICAvKiBwcmVjb21wZW5zYXRpb24gb2ZmICovCisjZGVmaW5lIEZEQ0NNREFERF9BMCAgICAoMHgwMSkgICAvKiBEQU0gZmxhZyAqLworCisvKiBzdGF0dXMgcmVnaXN0ZXIgYml0cyAqLworCisjZGVmaW5lCUZEQ1NUQVRfTU9UT1JPTgkoMHg4MCkgICAvKiBtb3RvciBvbiAqLworI2RlZmluZQlGRENTVEFUX1dQUk9UCSgweDQwKSAgIC8qIHdyaXRlIHByb3RlY3RlZCAoRkRDQ01EX1dSKikgKi8KKyNkZWZpbmUJRkRDU1RBVF9TUElOVVAJKDB4MjApICAgLyogbW90b3Igc3BlZWQgc3RhYmxlIChUeXBlIEkpICovCisjZGVmaW5lCUZEQ1NUQVRfREVMREFNCSgweDIwKSAgIC8qIHNlY3RvciBoYXMgZGVsZXRlZCBEQU0gKFR5cGUgSUkrSUlJKSAqLworI2RlZmluZQlGRENTVEFUX1JFQ05GCSgweDEwKSAgIC8qIHJlY29yZCBub3QgZm91bmQgKi8KKyNkZWZpbmUJRkRDU1RBVF9DUkMJCSgweDA4KSAgIC8qIENSQyBlcnJvciAqLworI2RlZmluZQlGRENTVEFUX1RSMDAJKDB4MDQpICAgLyogVHJhY2sgMDAgZmxhZyAoVHlwZSBJKSAqLworI2RlZmluZQlGRENTVEFUX0xPU1QJKDB4MDQpICAgLyogTG9zdCBEYXRhIChUeXBlIElJK0lJSSkgKi8KKyNkZWZpbmUJRkRDU1RBVF9JRFgJCSgweDAyKSAgIC8qIEluZGV4IHN0YXR1cyAoVHlwZSBJKSAqLworI2RlZmluZQlGRENTVEFUX0RSUQkJKDB4MDIpICAgLyogRFJRIHN0YXR1cyAoVHlwZSBJSStJSUkpICovCisjZGVmaW5lCUZEQ1NUQVRfQlVTWQkoMHgwMSkgICAvKiBGREMgaXMgYnVzeSAqLworCisKKy8qIFBTRyBQb3J0IEEgQml0IE5yIDAgLi4gU2lkZSBTZWwgLi4gMCAtPiBTaWRlIDEgIDEgLT4gU2lkZSAyICovCisjZGVmaW5lIERTS1NJREUgICAgICgweDAxKQorCisjZGVmaW5lIERTS0RSVk5PTkUgICgweDA2KQorI2RlZmluZSBEU0tEUlYwICAgICAoMHgwMikKKyNkZWZpbmUgRFNLRFJWMSAgICAgKDB4MDQpCisKKy8qIHN0ZXAgcmF0ZXMgKi8KKyNkZWZpbmUJRkRDU1RFUF82CTB4MDAKKyNkZWZpbmUJRkRDU1RFUF8xMgkweDAxCisjZGVmaW5lCUZEQ1NURVBfMgkweDAyCisjZGVmaW5lCUZEQ1NURVBfMwkweDAzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hdGFyaV9TTE0uaCBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlfU0xNLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJmNGZjZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlfU0xNLmgKQEAgLTAsMCArMSwyOCBAQAorCisjaWZuZGVmIF9BVEFSSV9TTE1fSAorI2RlZmluZSBfQVRBUklfU0xNX0gKKworLyogQXRhcmkgU0xNIGxhc2VyIHByaW50ZXIgc3BlY2lmaWMgaW9jdGxzICovCisKKyNkZWZpbmUJU0xNSU9HU1RBVAkweGExMDAKKyNkZWZpbmUJU0xNSU9HUFNJWkUJMHhhMTAxCisjZGVmaW5lCVNMTUlPR01GRUVECTB4YTEwMgorCisjZGVmaW5lCVNMTUlPUkVTRVQJMHhhMTQwCisKKyNkZWZpbmUJU0xNSU9TUFNJWkUJMHhhMTgxCisjZGVmaW5lCVNMTUlPU01GRUVECTB4YTE4MgorCisvKiBTdGF0dXMgcmV0dXJuaW5nIHN0cnVjdHVyZSAoU0xNSU9HU1RBVCkgKi8KK3N0cnVjdCBTTE1fc3RhdHVzIHsKKwlpbnQJCXN0YXQ7CQkvKiBudW1lcmljIHN0YXR1cyBjb2RlICovCisJY2hhcglzdHJbNDBdOwkvKiBzdGF0dXMgc3RyaW5nICovCit9OworCisvKiBQYXBlciBzaXplIHN0cnVjdHVyZSAoU0xNSU9bR1NdUFNJWkUpICovCitzdHJ1Y3QgU0xNX3BhcGVyX3NpemUgeworCWludAkJd2lkdGg7CisJaW50CQloZWlnaHQ7Cit9OworCisjZW5kaWYgLyogX0FUQVJJX1NMTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpX2Fjc2kuaCBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlfYWNzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZmVhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpX2Fjc2kuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIF9BU01fQVRBUklfQUNTSV9ICisjZGVmaW5lIF9BU01fQVRBUklfQUNTSV9ICisKKy8qIEZ1bmN0aW9ucyBleHBvcnRlZCBieSBkcml2ZXJzL2Jsb2NrL2Fjc2kuYyAqLworCit2b2lkIGFjc2lfZGVsYXlfc3RhcnQoIHZvaWQgKTsKK3ZvaWQgYWNzaV9kZWxheV9lbmQoIGxvbmcgdXNlYyApOworaW50IGFjc2lfd2FpdF9mb3JfSVJRKCB1bnNpZ25lZCB0aW1lb3V0ICk7CitpbnQgYWNzaV93YWl0X2Zvcl9ub0lSUSggdW5zaWduZWQgdGltZW91dCApOworaW50IGFjc2ljbWRfbm9kbWEoIGNvbnN0IGNoYXIgKmNtZCwgaW50IGVuYWJsZSk7CitpbnQgYWNzaV9nZXRzdGF0dXMoIHZvaWQgKTsKK2ludCBhY3NpX2V4dHN0YXR1cyggY2hhciAqYnVmZmVyLCBpbnQgY250ICk7Cit2b2lkIGFjc2lfZW5kX2V4dHN0YXR1cyggdm9pZCApOworaW50IGFjc2lfZXh0Y21kKCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBjbnQgKTsKKworLyogVGhlIEFDU0kgYnVmZmVyIGlzIGd1YXJhbnR1ZWVkIHRvIHJlc2lkZSBpbiBTVC1SQU0gYW5kIG1heSBiZSB1c2VkIGJ5IG90aGVyCisgKiBkcml2ZXJzIHRoYXQgd29yayBvbiB0aGUgQUNTSSBidXMsIHRvby4gSXQncyBkYXRhIGFyZSB2YWxpZCBvbmx5IGFzIGxvbmcgYXMKKyAqIHRoZSBTVC1ETUEgaXMgbG9ja2VkLiAqLworZXh0ZXJuIGNoYXIgKmFjc2lfYnVmZmVyOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c19hY3NpX2J1ZmZlcjsKKworLyogVXRpbGl0eSBtYWNyb3MgKi8KKworLyogU2VuZCBvbmUgZGF0YSBieXRlIG92ZXIgdGhlIGJ1cyBhbmQgc2V0IG1vZGUgZm9yIG5leHQgb3BlcmF0aW9uCisgKiB3aXRoIG9uZSBtb3ZlLmwgLS0gQXRhcmkgcmVjb21tZW5kcyB0aGlzLi4uCisgKi8KKworI2RlZmluZSBETUFfTE9OR19XUklURShkYXRhLG1vZGUpCQkJCQkJCVwKKyAgICBkbyB7CQkJCQkJCQkJCQkJCVwKKwkJKigodW5zaWduZWQgbG9uZyAqKSZkbWFfd2QuZmRjX2FjY2VzX3NlY2NvdW50KSA9CVwKKwkJCSgoZGF0YSk8PDE2KSB8IChtb2RlKTsJCQkJCQkJXAorCX0gd2hpbGUoMCkKKworI2RlZmluZSBFTkFCTEVfSVJRKCkJYXRhcmlfdHVybm9uX2lycSggSVJRX01GUF9BQ1NJICkKKyNkZWZpbmUgRElTQUJMRV9JUlEoKQlhdGFyaV90dXJub2ZmX2lycSggSVJRX01GUF9BQ1NJICkKKworI2VuZGlmIC8qIF9BU01fQVRBUklfQUNTSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpX2pveXN0aWNrLmggYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpX2pveXN0aWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiZTdkYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlfam95c3RpY2suaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIF9MSU5VWF9BVEFSSV9KT1lTVElDS19ICisjZGVmaW5lIF9MSU5VWF9BVEFSSV9KT1lTVElDS19ICisKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2F0YXJpX2pveXN0aWNrLmgKKyAqIGhlYWRlciBmaWxlIGZvciBBdGFyaSBKb3lzdGljayBkcml2ZXIKKyAqIGJ5IFJvYmVydCBkZSBWcmllcyAocm9iZXJ0QGFuZC5ubCkgb24gMTlKdWw5MworICovCisKK3ZvaWQgYXRhcmlfam95c3RpY2tfaW50ZXJydXB0KGNoYXIqKTsKK2ludCBhdGFyaV9qb3lzdGlja19pbml0KHZvaWQpOworZXh0ZXJuIGludCBhdGFyaV9tb3VzZV9idXR0b25zOworCitzdHJ1Y3Qgam95c3RpY2tfc3RhdHVzIHsKKwljaGFyCQlmaXJlOworCWNoYXIJCWRpcjsKKwlpbnQJCXJlYWR5OworCWludAkJYWN0aXZlOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlfc3RkbWEuaCBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlfc3RkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGY5Mjg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFyaV9zdGRtYS5oCkBAIC0wLDAgKzEsMjMgQEAKKworI2lmbmRlZiBfYXRhcmlfc3RkbWFfaAorI2RlZmluZSBfYXRhcmlfc3RkbWFfaAorCisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgc3RkbWFfbG9jayhpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJdm9pZCAqZGF0YSk7Cit2b2lkIHN0ZG1hX3JlbGVhc2UoIHZvaWQgKTsKK2ludCBzdGRtYV9vdGhlcnNfd2FpdGluZyggdm9pZCApOworaW50IHN0ZG1hX2lzbG9ja2VkKCB2b2lkICk7Cit2b2lkICpzdGRtYV9sb2NrZWRfYnkoIHZvaWQgKTsKK3ZvaWQgc3RkbWFfaW5pdCggdm9pZCApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKiBFbmQgb2YgUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKKyNlbmRpZiAgLyogX2F0YXJpX3N0ZG1hX2ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlfc3RyYW0uaCBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlfc3RyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTQ2ZDEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFyaV9zdHJhbS5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX002OEtfQVRBUklfU1RSQU1fSAorI2RlZmluZSBfTTY4S19BVEFSSV9TVFJBTV9ICisKKy8qCisgKiBGdW5jdGlvbnMgZm9yIEF0YXJpIFNULVJBTSBtYW5hZ2VtZW50CisgKi8KKworLyogcHVibGljIGludGVyZmFjZSAqLwordm9pZCAqYXRhcmlfc3RyYW1fYWxsb2MobG9uZyBzaXplLCBjb25zdCBjaGFyICpvd25lcik7Cit2b2lkIGF0YXJpX3N0cmFtX2ZyZWUodm9pZCAqKTsKKworLyogZnVuY3Rpb25zIGNhbGxlZCBpbnRlcm5hbGx5IGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgKi8KK3ZvaWQgYXRhcmlfc3RyYW1faW5pdCh2b2lkKTsKK3ZvaWQgYXRhcmlfc3RyYW1fcmVzZXJ2ZV9wYWdlcyh2b2lkICpzdGFydF9tZW0pOwordm9pZCBhdGFyaV9zdHJhbV9tZW1faW5pdF9ob29rICh2b2lkKTsKKworI2VuZGlmIC8qX002OEtfQVRBUklfU1RSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hdGFyaWh3LmggYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjhhY2QwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFyaWh3LmgKQEAgLTAsMCArMSw4MDggQEAKKy8qCisqKiBsaW51eC9hdGFyaWh3LmggLS0gVGhpcyBoZWFkZXIgZGVmaW5lcyBzb21lIG1hY3JvcyBhbmQgcG9pbnRlcnMgZm9yCisqKiAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlvdXMgQXRhcmkgY3VzdG9tIGhhcmR3YXJlIHJlZ2lzdGVycy4KKyoqCisqKiBDb3B5cmlnaHQgMTk5NCBieSBCapRybiBCcmF1ZWwKKyoqCisqKiA1LzEvOTQgUm9tYW4gSG9kZWs6CisqKiAgIEFkZGVkIGRlZmluaXRpb25zIGZvciBUVCBzcGVjaWZpYyBjaGlwcy4KKyoqCisqKiAxOTk2LTA5LTEzIGxhcnMgYnJpbmtob2ZmIDxmOTNsYWJyQGRkLmNoYWxtZXJzLnNlPjoKKyoqICAgRmluYWxseSBhZGRlZCBkZWZpbml0aW9ucyBmb3IgdGhlIG1hdHJpeC9jb2RlYyBhbmQgdGhlIERTUDU2MDAxIGhvc3QKKyoqICAgaW50ZXJmYWNlLgorKioKKyoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisqKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKiogZm9yIG1vcmUgZGV0YWlscy4KKyoqCisqLworCisjaWZuZGVmIF9MSU5VWF9BVEFSSUhXX0hfCisjZGVmaW5lIF9MSU5VWF9BVEFSSUhXX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9yYXdfaW8uaD4KKworZXh0ZXJuIHVfbG9uZyBhdGFyaV9tY2hfY29va2llOworZXh0ZXJuIHVfbG9uZyBhdGFyaV9tY2hfdHlwZTsKK2V4dGVybiB1X2xvbmcgYXRhcmlfc3dpdGNoZXM7CitleHRlcm4gaW50IGF0YXJpX3J0Y195ZWFyX29mZnNldDsKK2V4dGVybiBpbnQgYXRhcmlfZG9udF90b3VjaF9mbG9wcHlfc2VsZWN0OworCisvKiBjb252ZW5pZW5jZSBtYWNyb3MgZm9yIHRlc3RpbmcgbWFjaGluZSB0eXBlICovCisjZGVmaW5lIE1BQ0hfSVNfU1QJKChhdGFyaV9tY2hfY29va2llID4+IDE2KSA9PSBBVEFSSV9NQ0hfU1QpCisjZGVmaW5lIE1BQ0hfSVNfU1RFCSgoYXRhcmlfbWNoX2Nvb2tpZSA+PiAxNikgPT0gQVRBUklfTUNIX1NURSAmJiBcCisJCQkgKGF0YXJpX21jaF9jb29raWUgJiAweGZmZmYpID09IDApCisjZGVmaW5lIE1BQ0hfSVNfTVNURQkoKGF0YXJpX21jaF9jb29raWUgPj4gMTYpID09IEFUQVJJX01DSF9TVEUgJiYgXAorCQkJIChhdGFyaV9tY2hfY29va2llICYgMHhmZmZmKSA9PSAweDEwKQorI2RlZmluZSBNQUNIX0lTX1RUCSgoYXRhcmlfbWNoX2Nvb2tpZSA+PiAxNikgPT0gQVRBUklfTUNIX1RUKQorI2RlZmluZSBNQUNIX0lTX0ZBTENPTgkoKGF0YXJpX21jaF9jb29raWUgPj4gMTYpID09IEFUQVJJX01DSF9GQUxDT04pCisjZGVmaW5lIE1BQ0hfSVNfTUVEVVNBCShhdGFyaV9tY2hfdHlwZSA9PSBBVEFSSV9NQUNIX01FRFVTQSkKKyNkZWZpbmUgTUFDSF9JU19IQURFUwkoYXRhcmlfbWNoX3R5cGUgPT0gQVRBUklfTUFDSF9IQURFUykKKyNkZWZpbmUgTUFDSF9JU19BQjQwCShhdGFyaV9tY2hfdHlwZSA9PSBBVEFSSV9NQUNIX0FCNDApCisKKy8qIHZhbHVlcyBmb3IgYXRhcmlfc3dpdGNoZXMgKi8KKyNkZWZpbmUgQVRBUklfU1dJVENIX0lLQkQJMHgwMQorI2RlZmluZSBBVEFSSV9TV0lUQ0hfTUlESQkweDAyCisjZGVmaW5lIEFUQVJJX1NXSVRDSF9TTkQ2CTB4MDQKKyNkZWZpbmUgQVRBUklfU1dJVENIX1NORDcJMHgwOAorI2RlZmluZSBBVEFSSV9TV0lUQ0hfT1ZTQ19TSElGVAkxNgorI2RlZmluZSBBVEFSSV9TV0lUQ0hfT1ZTQ19JS0JECShBVEFSSV9TV0lUQ0hfSUtCRCA8PCBBVEFSSV9TV0lUQ0hfT1ZTQ19TSElGVCkKKyNkZWZpbmUgQVRBUklfU1dJVENIX09WU0NfTUlESQkoQVRBUklfU1dJVENIX01JREkgPDwgQVRBUklfU1dJVENIX09WU0NfU0hJRlQpCisjZGVmaW5lIEFUQVJJX1NXSVRDSF9PVlNDX1NORDYJKEFUQVJJX1NXSVRDSF9TTkQ2IDw8IEFUQVJJX1NXSVRDSF9PVlNDX1NISUZUKQorI2RlZmluZSBBVEFSSV9TV0lUQ0hfT1ZTQ19TTkQ3CShBVEFSSV9TV0lUQ0hfU05ENyA8PCBBVEFSSV9TV0lUQ0hfT1ZTQ19TSElGVCkKKyNkZWZpbmUgQVRBUklfU1dJVENIX09WU0NfTUFTSwkweGZmZmYwMDAwCisKKy8qCisgKiBEZWZpbmUgc2V2ZXJhbCBIYXJkd2FyZS1DaGlwcyBmb3IgaW5kaWNhdGlvbiBzbyB0aGF0IGZvciB0aGUgQVRBUkkgd2UgZG8KKyAqIG5vIGxvbmdlciBkZWNpZGUgd2hldGhlciBpdCBpcyBhIEZhbGNvbiBvciBvdGhlciBtYWNoaW5lIC4gSXQncyBqdXN0CisgKiBpbXBvcnRhbnQgd2hhdCBoYXJkd2FyZSB0aGUgbWFjaGluZSB1c2VzCisgKi8KKworLyogKytyb21hbiAwOC8wOC85NTogcmV3cml0dGVuIGZyb20gT1JpbmcgY29uc3RhbnRzIHRvIGEgQyBiaXRmaWVsZCAqLworCisjZGVmaW5lIEFUQVJJSFdfREVDTEFSRShuYW1lKQl1bnNpZ25lZCBuYW1lIDogMQorI2RlZmluZSBBVEFSSUhXX1NFVChuYW1lKQkoYXRhcmlfaHdfcHJlc2VudC5uYW1lID0gMSkKKyNkZWZpbmUgQVRBUklIV19QUkVTRU5UKG5hbWUpCShhdGFyaV9od19wcmVzZW50Lm5hbWUpCisKK3N0cnVjdCBhdGFyaV9od19wcmVzZW50IHsKKyAgICAvKiB2aWRlbyBoYXJkd2FyZSAqLworICAgIEFUQVJJSFdfREVDTEFSRShTVE5EX1NISUZURVIpOwkvKiBTVC1TaGlmdGVyIC0gbm8gYmFzZSBsb3cgISAqLworICAgIEFUQVJJSFdfREVDTEFSRShFWFREX1NISUZURVIpOwkvKiBTVGUtU2hpZnRlciAtIDI0IGJpdCBhZGRyZXNzICovCisgICAgQVRBUklIV19ERUNMQVJFKFRUX1NISUZURVIpOwkvKiBUVC1TaGlmdGVyICovCisgICAgQVRBUklIV19ERUNMQVJFKFZJREVMX1NISUZURVIpOwkvKiBGYWxjb24tU2hpZnRlciAqLworICAgIC8qIHNvdW5kIGhhcmR3YXJlICovCisgICAgQVRBUklIV19ERUNMQVJFKFlNXzIxNDkpOwkJLyogWWFtYWhhIFlNIDIxNDkgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoUENNXzhCSVQpOwkJLyogUENNLVNvdW5kIGluIFNUZS1BVEFSSSAqLworICAgIEFUQVJJSFdfREVDTEFSRShDT0RFQyk7CQkvKiBDT0RFQyBTb3VuZCAoRmFsY29uKSAqLworICAgIC8qIGRpc2sgc3RvcmFnZSBpbnRlcmZhY2VzICovCisgICAgQVRBUklIV19ERUNMQVJFKFRUX1NDU0kpOwkJLyogRGlyZWN0bHkgbWFwcGVkIE5DUjUzODAgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoU1RfU0NTSSk7CQkvKiBOQ1I1MzgwIHZpYSBTVC1ETUEgKEZhbGNvbikgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoQUNTSSk7CQkvKiBTdGFuZGFyZCBBQ1NJIGxpa2UgaW4gU1RzICovCisgICAgQVRBUklIV19ERUNMQVJFKElERSk7CQkvKiBJREUgSW50ZXJmYWNlICovCisgICAgQVRBUklIV19ERUNMQVJFKEZEQ1NQRUVEKTsJCS8qIDgvMTYgTUh6IHN3aXRjaCBmb3IgRkRDICovCisgICAgLyogb3RoZXIgSS9PIGhhcmR3YXJlICovCisgICAgQVRBUklIV19ERUNMQVJFKFNUX01GUCk7CQkvKiBUaGUgU1QtTUZQICh0aGVyZSBzaG91bGQgYmUgbm8gQXRhcmkKKwkJCQkJICAgd2l0aG91dCBpdC4uLiBidXQgd2hvIGtub3dzPykgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoVFRfTUZQKTsJCS8qIDJuZCBNRlAgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoU0NDKTsJCS8qIFNlcmlhbCBDb21tdW5pY2F0aW9ucyBDb250ci4gKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoU1RfRVNDQyk7CQkvKiBTQ0MgWjgzMjMwIGluIGFuIFNUICovCisgICAgQVRBUklIV19ERUNMQVJFKEFOQUxPR19KT1kpOwkvKiBQYWRkbGUgSW50ZXJmYWNlIGZvciBTVGUKKwkJCQkJICAgYW5kIEZhbGNvbiAqLworICAgIEFUQVJJSFdfREVDTEFSRShNSUNST1dJUkUpOwkJLyogTWljcm93aXJlIEludGVyZmFjZSAqLworICAgIC8qIERNQSAqLworICAgIEFUQVJJSFdfREVDTEFSRShTVE5EX0RNQSk7CQkvKiAyNCBCaXQgbGltaXRlZCBTVC1ETUEgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoRVhURF9ETUEpOwkJLyogMzIgQml0IFNULURNQSAqLworICAgIEFUQVJJSFdfREVDTEFSRShTQ1NJX0RNQSk7CQkvKiBETUEgZm9yIHRoZSBOQ1I1MzgwICovCisgICAgQVRBUklIV19ERUNMQVJFKFNDQ19ETUEpOwkJLyogRE1BIGZvciB0aGUgU0NDICovCisgICAgLyogcmVhbCB0aW1lIGNsb2NrcyAqLworICAgIEFUQVJJSFdfREVDTEFSRShUVF9DTEspOwkJLyogVFQgY29tcGF0aWJsZSBjbG9jayBjaGlwICovCisgICAgQVRBUklIV19ERUNMQVJFKE1TVEVfQ0xLKTsJCS8qIE1lZ2EgU1QoRSkgY2xvY2sgY2hpcCAqLworICAgIC8qIHN1cHBvcnRpbmcgaGFyZHdhcmUgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoU0NVKTsJCS8qIFN5c3RlbSBDb250cm9sIFVuaXQgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoQkxJVFRFUik7CQkvKiBCbGl0dGVyICovCisgICAgQVRBUklIV19ERUNMQVJFKFZNRSk7CQkvKiBWTUUgQnVzICovCisgICAgQVRBUklIV19ERUNMQVJFKERTUDU2Syk7CQkvKiBEU1A1NmsgcHJvY2Vzc29yIGluIEZhbGNvbiAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBhdGFyaV9od19wcmVzZW50IGF0YXJpX2h3X3ByZXNlbnQ7CisKKworLyogUmVhZGluZyB0aGUgTUZQIHBvcnQgcmVnaXN0ZXIgZ2l2ZXMgYSBtYWNoaW5lIGluZGVwZW5kZW50IGRlbGF5LCBzaW5jZSB0aGUKKyAqIE1GUCBhbHdheXMgaGFzIGEgOCBNSHogY2xvY2suIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdpdGggdGhlIHZhcnlpbmcgbGVuZ3RoCisgKiBvZiBub3BzIG9uIHZhcmlvdXMgbWFjaGluZXMuIFNvbWVib2R5IGNsYWltZWQgdGhhdCB0aGUgdHN0YiB0YWtlcyA2MDAgbnMuCisgKi8KKyNkZWZpbmUJTUZQREVMQVkoKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCAidHN0YiAlMCIgOiA6ICJtIiAobWZwLnBhcl9kdF9yZWcpIDogImNjIiApOworCisvKiBEbyBjYWNoZSBwdXNoL2ludmFsaWRhdGUgZm9yIERNQSByZWFkL3dyaXRlLiBUaGlzIGZ1bmN0aW9uIG9iZXlzIHRoZQorICogc25vb3Bpbmcgb24gc29tZSBtYWNoaW5lcyAoTWVkdXNhKSBhbmQgcHJvY2Vzc29yczogVGhlIE1lZHVzYSBpdHNlbGYgY2FuCisgKiBzbm9vcCwgYnV0IG9ubHkgdGhlICcwNDAgY2FuIHNvdXJjZSBkYXRhIGZyb20gaXRzIGNhY2hlIHRvIERNQSB3cml0ZXMgaS5lLiwKKyAqIHJlYWRzIGZyb20gbWVtb3J5KS4gQm90aCAnMDQwIGFuZCAnMDYwIGludmFsaWRhdGUgY2FjaGUgZW50cmllcyBvbiBzbm9vcGVkCisgKiBETUEgcmVhZHMgKGkuZS4sIHdyaXRlcyB0byBtZW1vcnkpLgorICovCisKKworI2RlZmluZSBhdGFyaV9yZWFkYiAgIHJhd19pbmIKKyNkZWZpbmUgYXRhcmlfd3JpdGViICByYXdfb3V0YgorCisjZGVmaW5lIGF0YXJpX2luYl9wICAgcmF3X2luYgorI2RlZmluZSBhdGFyaV9vdXRiX3AgIHJhd19vdXRiCisKKworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2NhY2hlX21haW50ZW5hbmNlKCB1bnNpZ25lZCBsb25nIHBhZGRyLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCQkgIGludCB3cml0ZWZsYWcgKQorCit7CisJaWYgKHdyaXRlZmxhZykgeworCQlpZiAoIU1BQ0hfSVNfTUVEVVNBIHx8IENQVV9JU18wNjApCisJCQljYWNoZV9wdXNoKCBwYWRkciwgbGVuICk7CisJfQorCWVsc2UgeworCQlpZiAoIU1BQ0hfSVNfTUVEVVNBKQorCQkJY2FjaGVfY2xlYXIoIHBhZGRyLCBsZW4gKTsKKwl9Cit9CisKKworLyoKKyoqIFNoaWZ0ZXIKKyAqLworI2RlZmluZSBTVF9MT1cgIDAKKyNkZWZpbmUgU1RfTUlEICAxCisjZGVmaW5lIFNUX0hJR0ggMgorI2RlZmluZSBUVF9MT1cgIDcKKyNkZWZpbmUgVFRfTUlEICA0CisjZGVmaW5lIFRUX0hJR0ggNgorCisjZGVmaW5lIFNIRl9CQVMgKDB4ZmZmZjgyMDApCitzdHJ1Y3QgU0hJRlRFUgorIHsKKwl1X2NoYXIgcGFkMTsKKwl1X2NoYXIgYmFzX2hpOworCXVfY2hhciBwYWQyOworCXVfY2hhciBiYXNfbWQ7CisJdV9jaGFyIHBhZDM7CisJdV9jaGFyIHZvbGF0aWxlIHZjb3VudGhpOworCXVfY2hhciBwYWQ0OworCXVfY2hhciB2b2xhdGlsZSB2Y291bnRtaWQ7CisJdV9jaGFyIHBhZDU7CisJdV9jaGFyIHZvbGF0aWxlIHZjb3VudGxvdzsKKwl1X2NoYXIgdm9sYXRpbGUgc3luY21vZGU7CisJdV9jaGFyIHBhZDY7CisJdV9jaGFyIHBhZDc7CisJdV9jaGFyIGJhc19sbzsKKyB9OworIyBkZWZpbmUgc2hpZnRlciAoKCoodm9sYXRpbGUgc3RydWN0IFNISUZURVIgKilTSEZfQkFTKSkKKworI2RlZmluZSBTSEZfRkJBUyAoMHhmZmZmODIwZSkKK3N0cnVjdCBTSElGVEVSX0YwMzAKKyB7CisgIHVfc2hvcnQgb2ZmX25leHQ7CisgIHVfc2hvcnQgc2NuX3dpZHRoOworIH07CisjIGRlZmluZSBzaGlmdGVyX2YwMzAgKCgqKHZvbGF0aWxlIHN0cnVjdCBTSElGVEVSX0YwMzAgKilTSEZfRkJBUykpCisKKworI2RlZmluZQlTSEZfVEJBUyAoMHhmZmZmODIwMCkKK3N0cnVjdCBTSElGVEVSX1RUIHsKKwl1X2NoYXIJY2hhcl9kdW1teTA7CisJdV9jaGFyCWJhc19oaTsJCQkvKiB2aWRlbyBtZW0gYmFzZSBhZGRyLCBoaWdoIGFuZCBtaWQgYnl0ZSAqLworCXVfY2hhcgljaGFyX2R1bW15MTsKKwl1X2NoYXIJYmFzX21kOworCXVfY2hhcgljaGFyX2R1bW15MjsKKwl1X2NoYXIJdmNvdW50X2hpOwkJLyogcG9pbnRlciB0byBjdXJyZW50bHkgZGlzcGxheWVkIGJ5dGUgKi8KKwl1X2NoYXIJY2hhcl9kdW1teTM7CisJdV9jaGFyCXZjb3VudF9tZDsKKwl1X2NoYXIJY2hhcl9kdW1teTQ7CisJdV9jaGFyCXZjb3VudF9sbzsKKwl1X3Nob3J0CXN0X3N5bmM7CQkvKiBTVCBjb21wYXRpYmxlIHN5bmMgbW9kZSByZWdpc3RlciwgdW51c2VkICovCisJdV9jaGFyCWNoYXJfZHVtbXk1OworCXVfY2hhcgliYXNfbG87CQkJLyogdmlkZW8gbWVtIGFkZHIsIGxvdyBieXRlICovCisJdV9jaGFyCWNoYXJfZHVtbXk2WzIrMyoxNl07CisJLyogJGZmZmY4MjQwOiAqLworCXVfc2hvcnQJY29sb3JfcmVnWzE2XTsJLyogMTYgY29sb3IgcmVnaXN0ZXJzICovCisJdV9jaGFyCXN0X3NoaWZ0bW9kZTsJLyogU1QgY29tcGF0aWJsZSBzaGlmdCBtb2RlIHJlZ2lzdGVyLCB1bnVzZWQgKi8KKwl1X2NoYXIgIGNoYXJfZHVtbXk3OworCXVfc2hvcnQgdHRfc2hpZnRtb2RlOwkvKiBUVCBzaGlmdCBtb2RlIHJlZ2lzdGVyICovCisKKworfTsKKyNkZWZpbmUJc2hpZnRlcl90dAkoKCoodm9sYXRpbGUgc3RydWN0IFNISUZURVJfVFQgKilTSEZfVEJBUykpCisKKy8qIHZhbHVlcyBmb3Igc2hpZnRlcl90dC0+dHRfc2hpZnRtb2RlICovCisjZGVmaW5lCVRUX1NISUZURVJfU1RMT1cJCTB4MDAwMAorI2RlZmluZQlUVF9TSElGVEVSX1NUTUlECQkweDAxMDAKKyNkZWZpbmUJVFRfU0hJRlRFUl9TVEhJR0gJCTB4MDIwMAorI2RlZmluZQlUVF9TSElGVEVSX1RUTE9XCQkweDA3MDAKKyNkZWZpbmUJVFRfU0hJRlRFUl9UVE1JRAkJMHgwNDAwCisjZGVmaW5lCVRUX1NISUZURVJfVFRISUdICQkweDA2MDAKKyNkZWZpbmUJVFRfU0hJRlRFUl9NT0RFTUFTSwkweDA3MDAKKyNkZWZpbmUgVFRfU0hJRlRFUl9OVU1NT0RFCTB4MDAwOAorI2RlZmluZQlUVF9TSElGVEVSX1BBTEVUVEVfTUFTSwkweDAwMGYKKyNkZWZpbmUJVFRfU0hJRlRFUl9HUkFZTU9ERQkJMHgxMDAwCisKKy8qIDI1NiBUVCBwYWxldHRlIHJlZ2lzdGVycyAqLworI2RlZmluZQlUVF9QQUxFVFRFX0JBU0UJKDB4ZmZmZjg0MDApCisjZGVmaW5lCXR0X3BhbGV0dGUJKCh2b2xhdGlsZSB1X3Nob3J0ICopVFRfUEFMRVRURV9CQVNFKQorCisjZGVmaW5lCVRUX1BBTEVUVEVfUkVEX01BU0sJCTB4MGYwMAorI2RlZmluZQlUVF9QQUxFVFRFX0dSRUVOX01BU0sJMHgwMGYwCisjZGVmaW5lCVRUX1BBTEVUVEVfQkxVRV9NQVNLCTB4MDAwZgorCisvKgorKiogRmFsY29uMDMwIFZJREVMIFZpZGVvIENvbnRyb2xsZXIKKyoqIGZvciBkZXNjcmlwdGlvbiBzZWUgRmlsZSAnbGludXhcdG9vbHNcYXRhcmlcaGFyZHdhcmUudHh0CisgKi8KKyNkZWZpbmUgZjAzMF9jb2wgKCh1X2xvbmcgKikJCTB4ZmZmZjk4MDApCisjZGVmaW5lIGYwMzBfeHJlZyAoKHVfc2hvcnQqKQkJMHhmZmZmODI4MikKKyNkZWZpbmUgZjAzMF95cmVnICgodV9zaG9ydCopCQkweGZmZmY4MmEyKQorI2RlZmluZSBmMDMwX2NyZWcgKCh1X3Nob3J0KikJCTB4ZmZmZjgyYzApCisjZGVmaW5lIGYwMzBfc3JlZyAoKHVfc2hvcnQqKQkJMHhmZmZmODI2MCkKKyNkZWZpbmUgZjAzMF9tcmVnICgodV9zaG9ydCopCQkweGZmZmY4MjBhKQorI2RlZmluZSBmMDMwX2xpbmV3aWR0aCAoKHVfc2hvcnQqKSAgICAgIDB4ZmZmZjgyMGUpCisjZGVmaW5lIGYwMzBfaHNjcm9sbCAoKHVfY2hhciopCQkweGZmZmY4MjY1KQorCisjZGVmaW5lIFZJREVMX0JBUyAoMHhmZmZmODI2MCkKK3N0cnVjdCBWSURFTCB7CisJdV9zaG9ydCBzdF9zaGlmdDsKKwl1X3Nob3J0IHBhZDE7CisJdV9jaGFyICB4b2Zmc2V0X3M7CisJdV9jaGFyICB4b2Zmc2V0OworCXVfc2hvcnQgZl9zaGlmdDsKKwl1X2NoYXIgIHBhZDJbMHgxYV07CisJdV9zaG9ydCBoaHQ7CisJdV9zaG9ydCBoYmI7CisJdV9zaG9ydCBoYmU7CisJdV9zaG9ydCBoZGI7CisJdV9zaG9ydCBoZGU7CisJdV9zaG9ydCBoc3M7CisJdV9jaGFyICBwYWQzWzB4MTRdOworCXVfc2hvcnQgdmZ0OworCXVfc2hvcnQgdmJiOworCXVfc2hvcnQgdmJlOworCXVfc2hvcnQgdmRiOworCXVfc2hvcnQgdmRlOworCXVfc2hvcnQgdnNzOworCXVfY2hhciAgcGFkNFsweDEyXTsKKwl1X3Nob3J0IGNvbnRyb2w7CisJdV9zaG9ydCBtb2RlOworfTsKKyNkZWZpbmUJdmlkZWwJKCgqKHZvbGF0aWxlIHN0cnVjdCBWSURFTCAqKVZJREVMX0JBUykpCisKKy8qCisqKiBETUEvV0QxNzcyIERpc2sgQ29udHJvbGxlcgorICovCisKKyNkZWZpbmUgRldEX0JBUyAoMHhmZmZmODYwNCkKK3N0cnVjdCBETUFfV0QKKyB7CisgIHVfc2hvcnQgZmRjX2FjY2VzX3NlY2NvdW50OworICB1X3Nob3J0IGRtYV9tb2RlX3N0YXR1czsKKyAgdV9jaGFyIGRtYV92aGk7CS8qIFNvbWUgZXh0ZW5kZWQgU1QtRE1BcyBjYW4gaGFuZGxlIDMyIGJpdCBhZGRyZXNzZXMgKi8KKyAgdV9jaGFyIGRtYV9oaTsKKyAgdV9jaGFyIGNoYXJfZHVtbXkyOworICB1X2NoYXIgZG1hX21kOworICB1X2NoYXIgY2hhcl9kdW1teTM7CisgIHVfY2hhciBkbWFfbG87CisgIHVfc2hvcnQgZmRjX3NwZWVkOworIH07CisjIGRlZmluZSBkbWFfd2QgKCgqKHZvbGF0aWxlIHN0cnVjdCBETUFfV0QgKilGV0RfQkFTKSkKKy8qIGFsaWFzICovCisjZGVmaW5lCXN0X2RtYSBkbWFfd2QKKy8qIFRoZSB0d28gaGlnaGVzdCBieXRlcyBvZiBhbiBleHRlbmRlZCBETUEgYXMgYSBzaG9ydDsgdGhpcyBpcyBhIG11c3QKKyAqIGZvciB0aGUgTWVkdXNhLgorICovCisjZGVmaW5lIHN0X2RtYV9leHRfZG1haGkgKCooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopMHhmZmZmODYwOCkpCisKKy8qCisqKiBZTTIxNDkgU291bmQgQ2hpcAorKiogYWNjZXNzIGluIGJ5dGVzCisgKi8KKworI2RlZmluZSBZTV9CQVMgKDB4ZmZmZjg4MDApCitzdHJ1Y3QgU09VTkRfWU0KKyB7CisgIHVfY2hhciByZF9kYXRhX3JlZ19zZWw7CisgIHVfY2hhciBjaGFyX2R1bW15MTsKKyAgdV9jaGFyIHdkX2RhdGE7CisgfTsKKyNkZWZpbmUgc291bmRfeW0gKCgqKHZvbGF0aWxlIHN0cnVjdCBTT1VORF9ZTSAqKVlNX0JBUykpCisKKy8qIFRUIFNDU0kgRE1BICovCisKKyNkZWZpbmUJVFRfU0NTSV9ETUFfQkFTCSgweGZmZmY4NzAwKQorc3RydWN0IFRUX0RNQSB7CisJdV9jaGFyCWNoYXJfZHVtbXkwOworCXVfY2hhcglkbWFfYWRkcl9oaTsKKwl1X2NoYXIJY2hhcl9kdW1teTE7CisJdV9jaGFyCWRtYV9hZGRyX2htZDsKKwl1X2NoYXIJY2hhcl9kdW1teTI7CisJdV9jaGFyCWRtYV9hZGRyX2xtZDsKKwl1X2NoYXIJY2hhcl9kdW1teTM7CisJdV9jaGFyCWRtYV9hZGRyX2xvOworCXVfY2hhcgljaGFyX2R1bW15NDsKKwl1X2NoYXIJZG1hX2NudF9oaTsKKwl1X2NoYXIJY2hhcl9kdW1teTU7CisJdV9jaGFyCWRtYV9jbnRfaG1kOworCXVfY2hhcgljaGFyX2R1bW15NjsKKwl1X2NoYXIJZG1hX2NudF9sbWQ7CisJdV9jaGFyCWNoYXJfZHVtbXk3OworCXVfY2hhcglkbWFfY250X2xvOworCXVfbG9uZwlkbWFfcmVzdGRhdGE7CisJdV9zaG9ydAlkbWFfY3RybDsKK307CisjZGVmaW5lCXR0X3Njc2lfZG1hCSgoKih2b2xhdGlsZSBzdHJ1Y3QgVFRfRE1BICopVFRfU0NTSV9ETUFfQkFTKSkKKworLyogVFQgU0NTSSBDb250cm9sbGVyIDUzODAgKi8KKworI2RlZmluZQlUVF81MzgwX0JBUwkoMHhmZmZmODc4MSkKK3N0cnVjdCBUVF81MzgwIHsKKwl1X2NoYXIJc2NzaV9kYXRhOworCXVfY2hhcgljaGFyX2R1bW15MTsKKwl1X2NoYXIJc2NzaV9pY3I7CisJdV9jaGFyCWNoYXJfZHVtbXkyOworCXVfY2hhcglzY3NpX21vZGU7CisJdV9jaGFyCWNoYXJfZHVtbXkzOworCXVfY2hhcglzY3NpX3RjcjsKKwl1X2NoYXIJY2hhcl9kdW1teTQ7CisJdV9jaGFyCXNjc2lfaWRzdGF0OworCXVfY2hhcgljaGFyX2R1bW15NTsKKwl1X2NoYXIJc2NzaV9kbWFzdGF0OworCXVfY2hhcgljaGFyX2R1bW15NjsKKwl1X2NoYXIJc2NzaV90YXJncmN2OworCXVfY2hhcgljaGFyX2R1bW15NzsKKwl1X2NoYXIJc2NzaV9pbmlyY3Y7Cit9OworI2RlZmluZQl0dF9zY3NpCQkJKCgqKHZvbGF0aWxlIHN0cnVjdCBUVF81MzgwICopVFRfNTM4MF9CQVMpKQorI2RlZmluZQl0dF9zY3NpX3JlZ3AJKCh2b2xhdGlsZSBjaGFyICopVFRfNTM4MF9CQVMpCisKKworLyoKKyoqIEZhbGNvbiBETUEgU291bmQgU3Vic3lzdGVtCisgKi8KKworI2RlZmluZSBNQVRSSVhfQkFTRSAoMHhmZmZmODkzMCkKK3N0cnVjdCBNQVRSSVgKK3sKKyAgdV9zaG9ydCBzb3VyY2U7CisgIHVfc2hvcnQgZGVzdGluYXRpb247CisgIHVfY2hhciBleHRlcm5hbF9mcmVxdWVuY3lfZGl2aWRlcjsKKyAgdV9jaGFyIGludGVybmFsX2ZyZXF1ZW5jeV9kaXZpZGVyOworfTsKKyNkZWZpbmUgZmFsY29uX21hdHJpeCAoKih2b2xhdGlsZSBzdHJ1Y3QgTUFUUklYICopTUFUUklYX0JBU0UpCisKKyNkZWZpbmUgQ09ERUNfQkFTRSAoMHhmZmZmODkzNikKK3N0cnVjdCBDT0RFQworeworICB1X2NoYXIgdHJhY2tzOworICB1X2NoYXIgaW5wdXRfc291cmNlOworI2RlZmluZSBDT0RFQ19TT1VSQ0VfQURDICAgICAgICAxCisjZGVmaW5lIENPREVDX1NPVVJDRV9NQVRSSVggICAgIDIKKyAgdV9jaGFyIGFkY19zb3VyY2U7CisjZGVmaW5lIEFEQ19TT1VSQ0VfUklHSFRfUFNHICAgIDEKKyNkZWZpbmUgQURDX1NPVVJDRV9MRUZUX1BTRyAgICAgMgorICB1X2NoYXIgZ2FpbjsKKyNkZWZpbmUgQ09ERUNfR0FJTl9SSUdIVCAgICAgICAgMHgwZgorI2RlZmluZSBDT0RFQ19HQUlOX0xFRlQgICAgICAgICAweGYwCisgIHVfY2hhciBhdHRlbnVhdGlvbjsKKyNkZWZpbmUgQ09ERUNfQVRURU5VQVRJT05fUklHSFQgMHgwZgorI2RlZmluZSBDT0RFQ19BVFRFTlVBVElPTl9MRUZUICAweGYwCisgIHVfY2hhciB1bnVzZWQxOworICB1X2NoYXIgc3RhdHVzOworI2RlZmluZSBDT0RFQ19PVkVSRkxPV19SSUdIVCAgICAxCisjZGVmaW5lIENPREVDX09WRVJGTE9XX0xFRlQgICAgIDIKKyAgdV9jaGFyIHVudXNlZDIsIHVudXNlZDMsIHVudXNlZDQsIHVudXNlZDU7CisgIHVfY2hhciBncGlvX2RpcmVjdGlvbnM7CisjZGVmaW5lIEdQSU9fSU4gICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BJT19PVVQgICAgICAgICAgICAgICAgMQorICB1X2NoYXIgdW51c2VkNjsKKyAgdV9jaGFyIGdwaW9fZGF0YTsKK307CisjZGVmaW5lIGZhbGNvbl9jb2RlYyAoKih2b2xhdGlsZSBzdHJ1Y3QgQ09ERUMgKilDT0RFQ19CQVNFKQorCisvKgorKiogRmFsY29uIEJsaXR0ZXIKKyovCisKKyNkZWZpbmUgQkxUX0JBUyAoMHhmZmZmOGEwMCkKKworc3RydWN0IEJMSVRURVIKKyB7CisgIHVfc2hvcnQgaGFsZnRvbmVbMTZdOworICB1X3Nob3J0IHNyY194X2luYzsKKyAgdV9zaG9ydCBzcmNfeV9pbmM7CisgIHVfbG9uZyBzcmNfYWRkcmVzczsKKyAgdV9zaG9ydCBlbmRtYXNrMTsKKyAgdV9zaG9ydCBlbmRtYXNrMjsKKyAgdV9zaG9ydCBlbmRtYXNrMzsKKyAgdV9zaG9ydCBkc3RfeF9pbmM7CisgIHVfc2hvcnQgZHN0X3lfaW5jOworICB1X2xvbmcgZHN0X2FkZHJlc3M7CisgIHVfc2hvcnQgd2RfcGVyX2xpbmU7CisgIHVfc2hvcnQgbG5fcGVyX2JiOworICB1X3Nob3J0IGhsZl9vcF9yZWc7CisgIHVfc2hvcnQgbG9nX29wX3JlZzsKKyAgdV9zaG9ydCBsaW5fbm1fcmVnOworICB1X3Nob3J0IHNrZXdfcmVnOworIH07CisjIGRlZmluZSBibGl0dGVyICgoKih2b2xhdGlsZSBzdHJ1Y3QgQkxJVFRFUiAqKUJMVF9CQVMpKQorCisKKy8qCisqKiBTQ0MgWjg1MzAKKyAqLworCisjZGVmaW5lIFNDQ19CQVMgKDB4ZmZmZjhjODEpCitzdHJ1Y3QgU0NDCisgeworICB1X2NoYXIgY2hhX2FfY3RybDsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxOworICB1X2NoYXIgY2hhX2FfZGF0YTsKKyAgdV9jaGFyIGNoYXJfZHVtbXkyOworICB1X2NoYXIgY2hhX2JfY3RybDsKKyAgdV9jaGFyIGNoYXJfZHVtbXkzOworICB1X2NoYXIgY2hhX2JfZGF0YTsKKyB9OworIyBkZWZpbmUgc2NjICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NDKilTQ0NfQkFTKSkKKworLyogVGhlIEVTQ0MgKFo4NTIzMCkgaW4gYW4gQXRhcmkgU1QuIFRoZSBjaGFubmVscyBhcmUgcmV2ZXJzZWQhICovCisjIGRlZmluZSBzdF9lc2NjICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NDKikweGZmZmZmYTMxKSkKKyMgZGVmaW5lIHN0X2VzY2NfZHNyICgoKih2b2xhdGlsZSBjaGFyICopMHhmZmZmZmEzOSkpCisKKy8qIFRUIFNDQyBETUEgQ29udHJvbGxlciAoc2FtZSBjaGlwIGFzIFNDU0kgRE1BKSAqLworCisjZGVmaW5lCVRUX1NDQ19ETUFfQkFTCSgweGZmZmY4YzAwKQorI2RlZmluZQl0dF9zY2NfZG1hCSgoKih2b2xhdGlsZSBzdHJ1Y3QgVFRfRE1BICopVFRfU0NDX0RNQV9CQVMpKQorCisvKgorKiogVklERUwgUGFsZXR0ZSBSZWdpc3RlcgorICovCisKKyNkZWZpbmUgRlBMX0JBUyAoMHhmZmZmOTgwMCkKK3N0cnVjdCBWSURFTF9QQUxFVFRFCisgeworICB1X2xvbmcgcmVnWzI1Nl07CisgfTsKKyMgZGVmaW5lIHZpZGVsX3BhbGV0dGUgKCgqKHZvbGF0aWxlIHN0cnVjdCBWSURFTF9QQUxFVFRFKilGUExfQkFTKSkKKworCisvKgorKiogRmFsY29uIERTUCBIb3N0IEludGVyZmFjZQorICovCisKKyNkZWZpbmUgRFNQNTZLX0hPU1RfSU5URVJGQUNFX0JBU0UgKDB4ZmZmZmEyMDApCitzdHJ1Y3QgRFNQNTZLX0hPU1RfSU5URVJGQUNFIHsKKyAgdV9jaGFyIGljcjsKKyNkZWZpbmUgRFNQNTZLX0lDUl9SUkVRCTB4MDEKKyNkZWZpbmUgRFNQNTZLX0lDUl9UUkVRCTB4MDIKKyNkZWZpbmUgRFNQNTZLX0lDUl9IRjAJMHgwOAorI2RlZmluZSBEU1A1NktfSUNSX0hGMQkweDEwCisjZGVmaW5lIERTUDU2S19JQ1JfSE0wCTB4MjAKKyNkZWZpbmUgRFNQNTZLX0lDUl9ITTEJMHg0MAorI2RlZmluZSBEU1A1NktfSUNSX0lOSVQJMHg4MAorCisgIHVfY2hhciBjdnI7CisjZGVmaW5lIERTUDU2S19DVlJfSFZfTUFTSyAweDFmCisjZGVmaW5lIERTUDU2S19DVlJfSEMJMHg4MAorCisgIHVfY2hhciBpc3I7CisjZGVmaW5lIERTUDU2S19JU1JfUlhERgkweDAxCisjZGVmaW5lIERTUDU2S19JU1JfVFhERQkweDAyCisjZGVmaW5lIERTUDU2S19JU1JfVFJEWQkweDA0CisjZGVmaW5lIERTUDU2S19JU1JfSEYyCTB4MDgKKyNkZWZpbmUgRFNQNTZLX0lTUl9IRjMJMHgxMAorI2RlZmluZSBEU1A1NktfSVNSX0RNQQkweDQwCisjZGVmaW5lIERTUDU2S19JU1JfSFJFUQkweDgwCisKKyAgdV9jaGFyIGl2cjsKKworICB1bmlvbiB7CisgICAgdV9jaGFyIGJbNF07CisgICAgdV9zaG9ydCB3WzJdOworICAgIHVfbG9uZyBsOworICB9IGRhdGE7Cit9OworI2RlZmluZSBkc3A1NmtfaG9zdF9pbnRlcmZhY2UgKCgqKHZvbGF0aWxlIHN0cnVjdCBEU1A1NktfSE9TVF9JTlRFUkZBQ0UgKilEU1A1NktfSE9TVF9JTlRFUkZBQ0VfQkFTRSkpCisKKy8qCisqKiBNRlAgNjg5MDEKKyAqLworCisjZGVmaW5lIE1GUF9CQVMgKDB4ZmZmZmZhMDEpCitzdHJ1Y3QgTUZQCisgeworICB1X2NoYXIgcGFyX2R0X3JlZzsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxOworICB1X2NoYXIgYWN0aXZlX2VkZ2U7CisgIHVfY2hhciBjaGFyX2R1bW15MjsKKyAgdV9jaGFyIGRhdGFfZGlyOworICB1X2NoYXIgY2hhcl9kdW1teTM7CisgIHVfY2hhciBpbnRfZW5fYTsKKyAgdV9jaGFyIGNoYXJfZHVtbXk0OworICB1X2NoYXIgaW50X2VuX2I7CisgIHVfY2hhciBjaGFyX2R1bW15NTsKKyAgdV9jaGFyIGludF9wbl9hOworICB1X2NoYXIgY2hhcl9kdW1teTY7CisgIHVfY2hhciBpbnRfcG5fYjsKKyAgdV9jaGFyIGNoYXJfZHVtbXk3OworICB1X2NoYXIgaW50X3N2X2E7CisgIHVfY2hhciBjaGFyX2R1bW15ODsKKyAgdV9jaGFyIGludF9zdl9iOworICB1X2NoYXIgY2hhcl9kdW1teTk7CisgIHVfY2hhciBpbnRfbWtfYTsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxMDsKKyAgdV9jaGFyIGludF9ta19iOworICB1X2NoYXIgY2hhcl9kdW1teTExOworICB1X2NoYXIgdmVjX2FkcjsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxMjsKKyAgdV9jaGFyIHRpbV9jdF9hOworICB1X2NoYXIgY2hhcl9kdW1teTEzOworICB1X2NoYXIgdGltX2N0X2I7CisgIHVfY2hhciBjaGFyX2R1bW15MTQ7CisgIHVfY2hhciB0aW1fY3RfY2Q7CisgIHVfY2hhciBjaGFyX2R1bW15MTU7CisgIHVfY2hhciB0aW1fZHRfYTsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxNjsKKyAgdV9jaGFyIHRpbV9kdF9iOworICB1X2NoYXIgY2hhcl9kdW1teTE3OworICB1X2NoYXIgdGltX2R0X2M7CisgIHVfY2hhciBjaGFyX2R1bW15MTg7CisgIHVfY2hhciB0aW1fZHRfZDsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxOTsKKyAgdV9jaGFyIHN5bmNfY2hhcjsKKyAgdV9jaGFyIGNoYXJfZHVtbXkyMDsKKyAgdV9jaGFyIHVzYXJ0X2N0cjsKKyAgdV9jaGFyIGNoYXJfZHVtbXkyMTsKKyAgdV9jaGFyIHJjdl9zdGF0OworICB1X2NoYXIgY2hhcl9kdW1teTIyOworICB1X2NoYXIgdHJuX3N0YXQ7CisgIHVfY2hhciBjaGFyX2R1bW15MjM7CisgIHVfY2hhciB1c2FydF9kdGE7CisgfTsKKyMgZGVmaW5lIG1mcCAoKCoodm9sYXRpbGUgc3RydWN0IE1GUCopTUZQX0JBUykpCisKKy8qIFRUJ3Mgc2Vjb25kIE1GUCAqLworCisjZGVmaW5lCVRUX01GUF9CQVMJKDB4ZmZmZmZhODEpCisjIGRlZmluZSB0dF9tZnAgKCgqKHZvbGF0aWxlIHN0cnVjdCBNRlAqKVRUX01GUF9CQVMpKQorCisKKy8qIFRUIFN5c3RlbSBDb250cm9sIFVuaXQgKi8KKworI2RlZmluZQlUVF9TQ1VfQkFTCSgweGZmZmY4ZTAxKQorc3RydWN0IFRUX1NDVSB7CisJdV9jaGFyCXN5c19tYXNrOworCXVfY2hhcgljaGFyX2R1bW15MTsKKwl1X2NoYXIJc3lzX3N0YXQ7CisJdV9jaGFyCWNoYXJfZHVtbXkyOworCXVfY2hhcglzb2Z0aW50OworCXVfY2hhcgljaGFyX2R1bW15MzsKKwl1X2NoYXIJdm1laW50OworCXVfY2hhcgljaGFyX2R1bW15NDsKKwl1X2NoYXIJZ3BfcmVnMTsKKwl1X2NoYXIJY2hhcl9kdW1teTU7CisJdV9jaGFyCWdwX3JlZzI7CisJdV9jaGFyCWNoYXJfZHVtbXk2OworCXVfY2hhcgl2bWVfbWFzazsKKwl1X2NoYXIJY2hhcl9kdW1teTc7CisJdV9jaGFyCXZtZV9zdGF0OworfTsKKyNkZWZpbmUJdHRfc2N1CSgoKih2b2xhdGlsZSBzdHJ1Y3QgVFRfU0NVICopVFRfU0NVX0JBUykpCisKKy8qIFRUIHJlYWwgdGltZSBjbG9jayAqLworCisjZGVmaW5lCVRUX1JUQ19CQVMJKDB4ZmZmZjg5NjEpCitzdHJ1Y3QgVFRfUlRDIHsKKwl1X2NoYXIJcmVnc2VsOworCXVfY2hhcglkdW1teTsKKwl1X2NoYXIJZGF0YTsKK307CisjZGVmaW5lCXR0X3J0YwkoKCoodm9sYXRpbGUgc3RydWN0IFRUX1JUQyAqKVRUX1JUQ19CQVMpKQorCisKKy8qCisqKiBBQ0lBIDY4NTAKKyAqLworLyogY29uc3RhbnRzIGZvciB0aGUgQUNJQSByZWdpc3RlcnMgKi8KKworLyogYmF1ZHJhdGUgc2VsZWN0aW9uIGFuZCByZXNldCAoQmF1ZHJhdGUgPSBjbG9jay9mYWN0b3IpICovCisjZGVmaW5lIEFDSUFfRElWMSAgMAorI2RlZmluZSBBQ0lBX0RJVjE2IDEKKyNkZWZpbmUgQUNJQV9ESVY2NCAyCisjZGVmaW5lIEFDSUFfUkVTRVQgMworCisvKiBjaGFyYWN0ZXIgZm9ybWF0ICovCisjZGVmaW5lIEFDSUFfRDdFMlMgKDA8PDIpCS8qIDcgZGF0YSwgZXZlbiBwYXJpdHksIDIgc3RvcCAqLworI2RlZmluZSBBQ0lBX0Q3TzJTICgxPDwyKQkvKiA3IGRhdGEsIG9kZCBwYXJpdHksIDIgc3RvcCAqLworI2RlZmluZSBBQ0lBX0Q3RTFTICgyPDwyKQkvKiA3IGRhdGEsIGV2ZW4gcGFyaXR5LCAxIHN0b3AgKi8KKyNkZWZpbmUgQUNJQV9EN08xUyAoMzw8MikJLyogNyBkYXRhLCBvZGQgcGFyaXR5LCAxIHN0b3AgKi8KKyNkZWZpbmUgQUNJQV9EOE4yUyAoNDw8MikJLyogOCBkYXRhLCBubyBwYXJpdHksIDIgc3RvcCAqLworI2RlZmluZSBBQ0lBX0Q4TjFTICg1PDwyKQkvKiA4IGRhdGEsIG5vIHBhcml0eSwgMSBzdG9wICovCisjZGVmaW5lIEFDSUFfRDhFMVMgKDY8PDIpCS8qIDggZGF0YSwgZXZlbiBwYXJpdHksIDEgc3RvcCAqLworI2RlZmluZSBBQ0lBX0Q4TzFTICg3PDwyKQkvKiA4IGRhdGEsIG9kZCBwYXJpdHksIDEgc3RvcCAqLworCisvKiB0cmFuc21pdCBjb250cm9sICovCisjZGVmaW5lIEFDSUFfUkxUSUQgKDA8PDUpCS8qIFJUUyBsb3csIFR4SU5UIGRpc2FibGVkICovCisjZGVmaW5lIEFDSUFfUkxUSUUgKDE8PDUpCS8qIFJUUyBsb3csIFR4SU5UIGVuYWJsZWQgKi8KKyNkZWZpbmUgQUNJQV9SSFRJRCAoMjw8NSkJLyogUlRTIGhpZ2gsIFR4SU5UIGRpc2FibGVkICovCisjZGVmaW5lIEFDSUFfUkxUSURTQiAoMzw8NSkJLyogUlRTIGxvdywgVHhJTlQgZGlzYWJsZWQsIHNlbmQgYnJlYWsgKi8KKworLyogcmVjZWl2ZSBjb250cm9sICovCisjZGVmaW5lIEFDSUFfUklEICgwPDw3KQkJLyogUnhJTlQgZGlzYWJsZWQgKi8KKyNkZWZpbmUgQUNJQV9SSUUgKDE8PDcpCQkvKiBSeElOVCBlbmFibGVkICovCisKKy8qIHN0YXR1cyBmaWVsZHMgb2YgdGhlIEFDSUEgKi8KKyNkZWZpbmUgQUNJQV9SRFJGIDEJCS8qIFJlY2VpdmUgRGF0YSBSZWdpc3RlciBGdWxsICovCisjZGVmaW5lIEFDSUFfVERSRSAoMTw8MSkJLyogVHJhbnNtaXQgRGF0YSBSZWdpc3RlciBFbXB0eSAqLworI2RlZmluZSBBQ0lBX0RDRCAgKDE8PDIpCS8qIERhdGEgQ2FycmllciBEZXRlY3QgKi8KKyNkZWZpbmUgQUNJQV9DVFMgICgxPDwzKQkvKiBDbGVhciBUbyBTZW5kICovCisjZGVmaW5lIEFDSUFfRkUgICAoMTw8NCkJLyogRnJhbWluZyBFcnJvciAqLworI2RlZmluZSBBQ0lBX09WUk4gKDE8PDUpCS8qIFJlY2VpdmVyIE92ZXJydW4gKi8KKyNkZWZpbmUgQUNJQV9QRSAgICgxPDw2KQkvKiBQYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgQUNJQV9JUlEgICgxPDw3KQkvKiBJbnRlcnJ1cHQgUmVxdWVzdCAqLworCisjZGVmaW5lIEFDSUFfQkFTICgweGZmZmZmYzAwKQorc3RydWN0IEFDSUEKKyB7CisgIHVfY2hhciBrZXlfY3RybDsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxOworICB1X2NoYXIga2V5X2RhdGE7CisgIHVfY2hhciBjaGFyX2R1bW15MjsKKyAgdV9jaGFyIG1pZF9jdHJsOworICB1X2NoYXIgY2hhcl9kdW1teTM7CisgIHVfY2hhciBtaWRfZGF0YTsKKyB9OworIyBkZWZpbmUgYWNpYSAoKCoodm9sYXRpbGUgc3RydWN0IEFDSUEqKUFDSUFfQkFTKSkKKworI2RlZmluZQlUVF9ETUFTTkRfQkFTICgweGZmZmY4OTAwKQorc3RydWN0IFRUX0RNQVNORCB7CisJdV9jaGFyCWludF9jdHJsOwkvKiBGYWxjb246IEludGVycnVwdCBjb250cm9sICovCisJdV9jaGFyCWN0cmw7CisJdV9jaGFyCXBhZDI7CisJdV9jaGFyCWJhc19oaTsKKwl1X2NoYXIJcGFkMzsKKwl1X2NoYXIJYmFzX21pZDsKKwl1X2NoYXIJcGFkNDsKKwl1X2NoYXIJYmFzX2xvdzsKKwl1X2NoYXIJcGFkNTsKKwl1X2NoYXIJYWRkcl9oaTsKKwl1X2NoYXIJcGFkNjsKKwl1X2NoYXIJYWRkcl9taWQ7CisJdV9jaGFyCXBhZDc7CisJdV9jaGFyCWFkZHJfbG93OworCXVfY2hhcglwYWQ4OworCXVfY2hhcgllbmRfaGk7CisJdV9jaGFyCXBhZDk7CisJdV9jaGFyCWVuZF9taWQ7CisJdV9jaGFyCXBhZDEwOworCXVfY2hhcgllbmRfbG93OworCXVfY2hhcglwYWQxMVsxMl07CisJdV9jaGFyCXRyYWNrX3NlbGVjdDsJLyogRmFsY29uICovCisJdV9jaGFyCW1vZGU7CisJdV9jaGFyCXBhZDEyWzE0XTsKKwkvKiBGYWxjb24gb25seTogKi8KKwl1X3Nob3J0CWNiYXJfc3JjOworCXVfc2hvcnQgY2Jhcl9kc3Q7CisJdV9jaGFyCWV4dF9kaXY7CisJdV9jaGFyCWludF9kaXY7CisJdV9jaGFyCXJlY190cmFja19zZWxlY3Q7CisJdV9jaGFyCWRhY19zcmM7CisJdV9jaGFyCWFkY19zcmM7CisJdV9jaGFyCWlucHV0X2dhaW47CisJdV9zaG9ydAlvdXRwdXRfYXR0ZW47Cit9OworIyBkZWZpbmUgdHRfZG1hc25kICgoKih2b2xhdGlsZSBzdHJ1Y3QgVFRfRE1BU05EICopVFRfRE1BU05EX0JBUykpCisKKyNkZWZpbmUgRE1BU05EX01GUF9JTlRfUkVQTEFZICAgICAweDAxCisjZGVmaW5lIERNQVNORF9NRlBfSU5UX1JFQ09SRCAgICAgMHgwMgorI2RlZmluZSBETUFTTkRfVElNRVJBX0lOVF9SRVBMQVkgIDB4MDQKKyNkZWZpbmUgRE1BU05EX1RJTUVSQV9JTlRfUkVDT1JEICAweDA4CisKKyNkZWZpbmUJRE1BU05EX0NUUkxfT0ZGCQkgIDB4MDAKKyNkZWZpbmUJRE1BU05EX0NUUkxfT04JCSAgMHgwMQorI2RlZmluZQlETUFTTkRfQ1RSTF9SRVBFQVQJICAweDAyCisjZGVmaW5lIERNQVNORF9DVFJMX1JFQ09SRF9PTiAgICAgMHgxMAorI2RlZmluZSBETUFTTkRfQ1RSTF9SRUNPUkRfT0ZGICAgIDB4MDAKKyNkZWZpbmUgRE1BU05EX0NUUkxfUkVDT1JEX1JFUEVBVCAweDIwCisjZGVmaW5lIERNQVNORF9DVFJMX1NFTEVDVF9SRVBMQVkgMHgwMAorI2RlZmluZSBETUFTTkRfQ1RSTF9TRUxFQ1RfUkVDT1JEIDB4ODAKKyNkZWZpbmUJRE1BU05EX01PREVfTU9OTwkgIDB4ODAKKyNkZWZpbmUJRE1BU05EX01PREVfU1RFUkVPCSAgMHgwMAorI2RlZmluZSBETUFTTkRfTU9ERV84QklUCSAgMHgwMAorI2RlZmluZSBETUFTTkRfTU9ERV8xNkJJVAkgIDB4NDAJLyogRmFsY29uIG9ubHkgKi8KKyNkZWZpbmUJRE1BU05EX01PREVfNktIWgkgIDB4MDAJLyogRmFsY29uOiBtdXRlICovCisjZGVmaW5lCURNQVNORF9NT0RFXzEyS0haCSAgMHgwMQorI2RlZmluZQlETUFTTkRfTU9ERV8yNUtIWgkgIDB4MDIKKyNkZWZpbmUJRE1BU05EX01PREVfNTBLSFoJICAweDAzCisKKworI2RlZmluZSBETUFTTkRTZXRCYXNlKGJ1ZnN0YXJ0KQkJCQkJCVwKKyAgICBkbyB7CQkJCQkJCQlcCisJdHRfZG1hc25kLmJhc19oaSAgPSAodW5zaWduZWQgY2hhcikoKChidWZzdGFydCkgJiAweGZmMDAwMCkgPj4gMTYpOyBcCisJdHRfZG1hc25kLmJhc19taWQgPSAodW5zaWduZWQgY2hhcikoKChidWZzdGFydCkgJiAweDAwZmYwMCkgPj4gOCk7IFwKKwl0dF9kbWFzbmQuYmFzX2xvdyA9ICh1bnNpZ25lZCBjaGFyKSAoKGJ1ZnN0YXJ0KSAmIDB4MDAwMGZmKTsgXAorICAgIH0gd2hpbGUoIDAgKQorCisjZGVmaW5lIERNQVNOREdldEFkcigpICgodHRfZG1hc25kLmFkZHJfaGkgPDwgMTYpICsJXAorCQkJKHR0X2RtYXNuZC5hZGRyX21pZCA8PCA4KSArCVwKKwkJCSh0dF9kbWFzbmQuYWRkcl9sb3cpKQorCisjZGVmaW5lIERNQVNORFNldEVuZChidWZlbmQpCQkJCVwKKyAgICBkbyB7CQkJCQkJXAorCXR0X2RtYXNuZC5lbmRfaGkgID0gKHVuc2lnbmVkIGNoYXIpKCgoYnVmZW5kKSAmIDB4ZmYwMDAwKSA+PiAxNik7IFwKKwl0dF9kbWFzbmQuZW5kX21pZCA9ICh1bnNpZ25lZCBjaGFyKSgoKGJ1ZmVuZCkgJiAweDAwZmYwMCkgPj4gOCk7IFwKKwl0dF9kbWFzbmQuZW5kX2xvdyA9ICh1bnNpZ25lZCBjaGFyKSAoKGJ1ZmVuZCkgJiAweDAwMDBmZik7IFwKKyAgICB9IHdoaWxlKCAwICkKKworCisjZGVmaW5lCVRUX01JQ1JPV0lSRV9CQVMJKDB4ZmZmZjg5MjIpCitzdHJ1Y3QgVFRfTUlDUk9XSVJFIHsKKwl1X3Nob3J0CWRhdGE7CisJdV9zaG9ydAltYXNrOworfTsKKyMgZGVmaW5lIHR0X21pY3Jvd2lyZSAoKCoodm9sYXRpbGUgc3RydWN0IFRUX01JQ1JPV0lSRSAqKVRUX01JQ1JPV0lSRV9CQVMpKQorCisjZGVmaW5lCU1XX0xNMTk5Ml9BRERSCQkweDA0MDAKKworI2RlZmluZQlNV19MTTE5OTJfVk9MVU1FKGRCKQlcCisgICAgKDB4MGMwIHwgKChkQikgPCAtODAgPyAwIDogKGRCKSA+IDAgPyA0MCA6ICgoKGRCKSArIDgwKSAvIDIpKSkKKyNkZWZpbmUJTVdfTE0xOTkyX0JBTExFRlQoZEIpCVwKKyAgICAoMHgxNDAgfCAoKGRCKSA8IC00MCA/IDAgOiAoZEIpID4gMCA/IDIwIDogKCgoZEIpICsgNDApIC8gMikpKQorI2RlZmluZQlNV19MTTE5OTJfQkFMUklHSFQoZEIpCVwKKyAgICAoMHgxMDAgfCAoKGRCKSA8IC00MCA/IDAgOiAoZEIpID4gMCA/IDIwIDogKCgoZEIpICsgNDApIC8gMikpKQorI2RlZmluZQlNV19MTTE5OTJfVFJFQkxFKGRCKQlcCisgICAgKDB4MDgwIHwgKChkQikgPCAtMTIgPyAwIDogKGRCKSA+IDEyID8gMTIgOiAoKChkQikgLyAyKSArIDYpKSkKKyNkZWZpbmUJTVdfTE0xOTkyX0JBU1MoZEIpCVwKKyAgICAoMHgwNDAgfCAoKGRCKSA8IC0xMiA/IDAgOiAoZEIpID4gMTIgPyAxMiA6ICgoKGRCKSAvIDIpICsgNikpKQorCisjZGVmaW5lCU1XX0xNMTk5Ml9QU0dfTE9XCTB4MDAwCisjZGVmaW5lCU1XX0xNMTk5Ml9QU0dfSElHSAkweDAwMQorI2RlZmluZQlNV19MTTE5OTJfUFNHX09GRgkweDAwMgorCisjZGVmaW5lIE1TVEVfUlRDX0JBUwkoMHhmZmZmZmMyMSkKKworc3RydWN0IE1TVEVfUlRDIHsKKwl1X2NoYXIgc2VjX29uZXM7CisJdV9jaGFyIGR1bW15MTsKKwl1X2NoYXIgc2VjX3RlbnM7CisJdV9jaGFyIGR1bW15MjsKKwl1X2NoYXIgbWluX29uZXM7CisJdV9jaGFyIGR1bW15MzsKKwl1X2NoYXIgbWluX3RlbnM7CisJdV9jaGFyIGR1bW15NDsKKwl1X2NoYXIgaHJfb25lczsKKwl1X2NoYXIgZHVtbXk1OworCXVfY2hhciBocl90ZW5zOworCXVfY2hhciBkdW1teTY7CisJdV9jaGFyIHdlZWtkYXk7CisJdV9jaGFyIGR1bW15NzsKKwl1X2NoYXIgZGF5X29uZXM7CisJdV9jaGFyIGR1bW15ODsKKwl1X2NoYXIgZGF5X3RlbnM7CisJdV9jaGFyIGR1bW15OTsKKwl1X2NoYXIgbW9uX29uZXM7CisJdV9jaGFyIGR1bW15MTA7CisJdV9jaGFyIG1vbl90ZW5zOworCXVfY2hhciBkdW1teTExOworCXVfY2hhciB5ZWFyX29uZXM7CisJdV9jaGFyIGR1bW15MTI7CisJdV9jaGFyIHllYXJfdGVuczsKKwl1X2NoYXIgZHVtbXkxMzsKKwl1X2NoYXIgbW9kZTsKKwl1X2NoYXIgZHVtbXkxNDsKKwl1X2NoYXIgdGVzdDsKKwl1X2NoYXIgZHVtbXkxNTsKKwl1X2NoYXIgcmVzZXQ7Cit9OworCisjZGVmaW5lIG1zdGVfcnRjICgoKih2b2xhdGlsZSBzdHJ1Y3QgTVNURV9SVEMgKilNU1RFX1JUQ19CQVMpKQorCisjZW5kaWYgLyogbGludXgvYXRhcmlody5oICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlpbnRzLmggYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpaW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOTUyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpaW50cy5oCkBAIC0wLDAgKzEsMjE1IEBACisvKgorKiogYXRhcmlpbnRzLmggLS0gQXRhcmkgTGludXggaW50ZXJydXB0IGhhbmRsaW5nIHN0cnVjdHMgYW5kIHByb3RvdHlwZXMKKyoqCisqKiBDb3B5cmlnaHQgMTk5NCBieSBCapRybiBCcmF1ZWwKKyoqCisqKiA1LzIvOTQgUm9tYW4gSG9kZWs6CisqKiAgIFRUIGludGVycnVwdCBkZWZpbml0aW9ucyBhZGRlZC4KKyoqCisqKiAxMi8wMi85NjogKFJvbWFuKQorKiogICBBZGFwdGVkIHRvIG5ldyBpbnQgaGFuZGxpbmcgc2NoZW1lIChzZWUgYXRhaW50cy5jKTsgcmV2aXNlZCBudW1iZXJpbmcKKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKi8KKworI2lmbmRlZiBfTElOVVhfQVRBUklJTlRTX0hfCisjZGVmaW5lIF9MSU5VWF9BVEFSSUlOVFNfSF8KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlody5oPgorCisvKgorKiogQXRhcmkgSW50ZXJydXB0IHNvdXJjZXMuCisqKgorKi8KKworI2RlZmluZSBTVE1GUF9TT1VSQ0VfQkFTRSAgOAorI2RlZmluZSBUVE1GUF9TT1VSQ0VfQkFTRSAgMjQKKyNkZWZpbmUgU0NDX1NPVVJDRV9CQVNFICAgIDQwCisjZGVmaW5lIFZNRV9TT1VSQ0VfQkFTRSAgICA1NgorI2RlZmluZSBWTUVfTUFYX1NPVVJDRVMgICAgMTYKKworI2RlZmluZSBOVU1fQVRBUklfU09VUkNFUyAgIChWTUVfU09VUkNFX0JBU0UrVk1FX01BWF9TT1VSQ0VTLVNUTUZQX1NPVVJDRV9CQVNFKQorCisvKiBjb252ZXJ0IHZlY3RvciBudW1iZXIgdG8gaW50IHNvdXJjZSBudW1iZXIgKi8KKyNkZWZpbmUgSVJRX1ZFQ1RPUl9UT19TT1VSQ0UodikJKCh2KSAtICgodikgPCAweDIwID8gMHgxOCA6ICgweDQwLTgpKSkKKworLyogY29udmVydCBpcnFfaGFuZGxlciBpbmRleCB0byB2ZWN0b3IgbnVtYmVyICovCisjZGVmaW5lIElSUV9TT1VSQ0VfVE9fVkVDVE9SKGkpCSgoaSkgKyAoKGkpIDwgOCA/IDB4MTggOiAoMHg0MC04KSkpCisKKy8qIGludGVycnVwdCBzZXJ2aWNlIHR5cGVzICovCisjZGVmaW5lIElSUV9UWVBFX1NMT1cgICAgIDAKKyNkZWZpbmUgSVJRX1RZUEVfRkFTVCAgICAgMQorI2RlZmluZSBJUlFfVFlQRV9QUklPICAgICAyCisKKyNkZWZpbmUJSVJRX1NQVVJJT1VTICAgICAgKDApCisKKy8qIGF1dG8tdmVjdG9yIGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX0FVVE9fMSAgICAgICAgKDEpCisjZGVmaW5lIElSUV9BVVRPXzIgICAgICAgICgyKQorI2RlZmluZSBJUlFfQVVUT18zICAgICAgICAoMykKKyNkZWZpbmUgSVJRX0FVVE9fNCAgICAgICAgKDQpCisjZGVmaW5lIElSUV9BVVRPXzUgICAgICAgICg1KQorI2RlZmluZSBJUlFfQVVUT182ICAgICAgICAoNikKKyNkZWZpbmUgSVJRX0FVVE9fNyAgICAgICAgKDcpCisKKy8qIFNULU1GUCBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElSUV9NRlBfQlVTWSAgICAgICg4KQorI2RlZmluZSBJUlFfTUZQX0RDRCAgICAgICAoOSkKKyNkZWZpbmUgSVJRX01GUF9DVFMJICAoMTApCisjZGVmaW5lIElSUV9NRlBfR1BVCSAgKDExKQorI2RlZmluZSBJUlFfTUZQX1RJTUQgICAgICAoMTIpCisjZGVmaW5lIElSUV9NRlBfVElNQwkgICgxMykKKyNkZWZpbmUgSVJRX01GUF9BQ0lBCSAgKDE0KQorI2RlZmluZSBJUlFfTUZQX0ZEQyAgICAgICAoMTUpCisjZGVmaW5lIElSUV9NRlBfQUNTSSAgICAgIElSUV9NRlBfRkRDCisjZGVmaW5lIElSUV9NRlBfRlNDU0kgICAgIElSUV9NRlBfRkRDCisjZGVmaW5lIElSUV9NRlBfSURFICAgICAgIElSUV9NRlBfRkRDCisjZGVmaW5lIElSUV9NRlBfVElNQiAgICAgICgxNikKKyNkZWZpbmUgSVJRX01GUF9TRVJFUlIgICAgKDE3KQorI2RlZmluZSBJUlFfTUZQX1NFUkVNUFQgICAoMTgpCisjZGVmaW5lIElSUV9NRlBfUkVDRVJSICAgICgxOSkKKyNkZWZpbmUgSVJRX01GUF9SRUNGVUxMICAgKDIwKQorI2RlZmluZSBJUlFfTUZQX1RJTUEgICAgICAoMjEpCisjZGVmaW5lIElSUV9NRlBfUkkgICAgICAgICgyMikKKyNkZWZpbmUgSVJRX01GUF9NTUQgICAgICAgKDIzKQorCisvKiBUVC1NRlAgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfVFRfTUZQX0lPMCAgICAgICAoMjQpCisjZGVmaW5lIElSUV9UVF9NRlBfSU8xICAgICAgICgyNSkKKyNkZWZpbmUgSVJRX1RUX01GUF9TQ0MJICAgICAoMjYpCisjZGVmaW5lIElSUV9UVF9NRlBfUkkJICAgICAoMjcpCisjZGVmaW5lIElSUV9UVF9NRlBfVElNRCAgICAgICgyOCkKKyNkZWZpbmUgSVJRX1RUX01GUF9USU1DCSAgICAgKDI5KQorI2RlZmluZSBJUlFfVFRfTUZQX0RSVlJEWSAgICAoMzApCisjZGVmaW5lIElSUV9UVF9NRlBfU0NTSURNQSAgICgzMSkKKyNkZWZpbmUgSVJRX1RUX01GUF9USU1CICAgICAgKDMyKQorI2RlZmluZSBJUlFfVFRfTUZQX1NFUkVSUiAgICAoMzMpCisjZGVmaW5lIElSUV9UVF9NRlBfU0VSRU1QVCAgICgzNCkKKyNkZWZpbmUgSVJRX1RUX01GUF9SRUNFUlIgICAgKDM1KQorI2RlZmluZSBJUlFfVFRfTUZQX1JFQ0ZVTEwgICAoMzYpCisjZGVmaW5lIElSUV9UVF9NRlBfVElNQSAgICAgICgzNykKKyNkZWZpbmUgSVJRX1RUX01GUF9SVEMgICAgICAgKDM4KQorI2RlZmluZSBJUlFfVFRfTUZQX1NDU0kgICAgICAoMzkpCisKKy8qIFNDQyBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElSUV9TQ0NCX1RYCSAgICAgKDQwKQorI2RlZmluZSBJUlFfU0NDQl9TVEFUCSAgICAgKDQyKQorI2RlZmluZSBJUlFfU0NDQl9SWAkgICAgICg0NCkKKyNkZWZpbmUgSVJRX1NDQ0JfU1BDT05ECSAgICAgKDQ2KQorI2RlZmluZSBJUlFfU0NDQV9UWAkgICAgICg0OCkKKyNkZWZpbmUgSVJRX1NDQ0FfU1RBVAkgICAgICg1MCkKKyNkZWZpbmUgSVJRX1NDQ0FfUlgJICAgICAoNTIpCisjZGVmaW5lIElSUV9TQ0NBX1NQQ09ORAkgICAgICg1NCkKKworCisjZGVmaW5lIElOVF9DTEsgICAyNDU3NgkgICAgLyogQ0xLIHdoaWxlIGludF9jbGsgPTIuNDU2TUh6IGFuZCBkaXZpZGUgPSAxMDAgKi8KKyNkZWZpbmUgSU5UX1RJQ0tTIDI0NgkgICAgLyogdG8gbWFrZSBzY2hlZF90aW1lID0gOTkuOTAyLi4uIEhaICovCisKKworI2RlZmluZSBNRlBfRU5BQkxFCTAKKyNkZWZpbmUgTUZQX1BFTkRJTkcJMQorI2RlZmluZSBNRlBfU0VSVklDRQkyCisjZGVmaW5lIE1GUF9NQVNLCTMKKworLyogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHNldHRpbmcvY2xlYXJpbmcgYml0cyBpbiB0aGUgaW50ZXJydXB0IHJlZ2lzdGVycyBvZgorICogdGhlIE1GUC4gJ3R5cGUnIHNob3VsZCBiZSBjb25zdGFudCwgaWYgJ2lycScgaXMgY29uc3RhbnQsIHRvbywgY29kZSBzaXplIGlzCisgKiByZWR1Y2VkLiBzZXRfbWZwX2JpdCgpIGlzIG5vbnNlbnNlIGZvciBQRU5ESU5HIGFuZCBTRVJWSUNFIHJlZ2lzdGVycy4gKi8KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X21mcF9iaXQoIHVuc2lnbmVkIGlycSwgaW50IHR5cGUgKQorCit7CXVuc2lnbmVkIGNoYXIJbWFzaywgKnJlZzsKKworCW1hc2sgPSAxIDw8IChpcnEgJiA3KTsKKwlyZWcgPSAodW5zaWduZWQgY2hhciAqKSZtZnAuaW50X2VuX2EgKyB0eXBlKjQgKworCQkgICgoaXJxICYgOCkgPj4gMikgKyAoKChpcnEtOCkgJiAxNikgPDwgMyk7CisJcmV0dXJuKCAqcmVnICYgbWFzayApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X21mcF9iaXQoIHVuc2lnbmVkIGlycSwgaW50IHR5cGUgKQorCit7CXVuc2lnbmVkIGNoYXIJbWFzaywgKnJlZzsKKworCW1hc2sgPSAxIDw8IChpcnEgJiA3KTsKKwlyZWcgPSAodW5zaWduZWQgY2hhciAqKSZtZnAuaW50X2VuX2EgKyB0eXBlKjQgKworCQkgICgoaXJxICYgOCkgPj4gMikgKyAoKChpcnEtOCkgJiAxNikgPDwgMyk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCAib3JiICUwLCUxIgorCQkJICAgICAgOiA6ICJkaSIgKG1hc2spLCAibSIgKCpyZWcpIDogIm1lbW9yeSIgKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX21mcF9iaXQoIHVuc2lnbmVkIGlycSwgaW50IHR5cGUgKQorCit7CXVuc2lnbmVkIGNoYXIJbWFzaywgKnJlZzsKKworCW1hc2sgPSB+KDEgPDwgKGlycSAmIDcpKTsKKwlyZWcgPSAodW5zaWduZWQgY2hhciAqKSZtZnAuaW50X2VuX2EgKyB0eXBlKjQgKworCQkgICgoaXJxICYgOCkgPj4gMikgKyAoKChpcnEtOCkgJiAxNikgPDwgMyk7CisJaWYgKHR5cGUgPT0gTUZQX1BFTkRJTkcgfHwgdHlwZSA9PSBNRlBfU0VSVklDRSkKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCAibW92ZWIgJTAsJTEiCisJCQkJICAgICAgOiA6ICJkaSIgKG1hc2spLCAibSIgKCpyZWcpIDogIm1lbW9yeSIgKTsKKwllbHNlCisJCV9fYXNtX18gX192b2xhdGlsZV9fICggImFuZGIgJTAsJTEiCisJCQkJICAgICAgOiA6ICJkaSIgKG1hc2spLCAibSIgKCpyZWcpIDogIm1lbW9yeSIgKTsKK30KKworLyoKKyAqIHtlbixkaXN9YWJsZV9pcnEgaGF2ZSB0aGUgdXN1YWwgc2VtYW50aWNzIG9mIHRlbXBvcmFyeSBibG9ja2luZyB0aGUKKyAqIGludGVycnVwdCwgYnV0IG5vdCBsb29zaW5nIHJlcXVlc3RzIHRoYXQgaGFwcGVuIGJldHdlZW4gZGlzYWJsaW5nIGFuZAorICogZW5hYmxpbmcuIFRoaXMgaXMgZG9uZSB3aXRoIHRoZSBNRlAgbWFzayByZWdpc3RlcnMuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGF0YXJpX2VuYWJsZV9pcnEoIHVuc2lnbmVkIGlycSApCisKK3sKKwlpZiAoaXJxIDwgU1RNRlBfU09VUkNFX0JBU0UgfHwgaXJxID49IFNDQ19TT1VSQ0VfQkFTRSkgcmV0dXJuOworCXNldF9tZnBfYml0KCBpcnEsIE1GUF9NQVNLICk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGFyaV9kaXNhYmxlX2lycSggdW5zaWduZWQgaXJxICkKKworeworCWlmIChpcnEgPCBTVE1GUF9TT1VSQ0VfQkFTRSB8fCBpcnEgPj0gU0NDX1NPVVJDRV9CQVNFKSByZXR1cm47CisJY2xlYXJfbWZwX2JpdCggaXJxLCBNRlBfTUFTSyApOworfQorCisvKgorICogSW4gb3Bwb3NpdGUgdG8ge2VuLGRpc31hYmxlX2lycSwgcmVxdWVzdHMgYmV0d2VlbiB0dXJue29mZixvbn1faXJxIGFyZSBub3QKKyAqICJzdG9yZWQiCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGF0YXJpX3R1cm5vbl9pcnEoIHVuc2lnbmVkIGlycSApCisKK3sKKwlpZiAoaXJxIDwgU1RNRlBfU09VUkNFX0JBU0UgfHwgaXJxID49IFNDQ19TT1VSQ0VfQkFTRSkgcmV0dXJuOworCXNldF9tZnBfYml0KCBpcnEsIE1GUF9FTkFCTEUgKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0YXJpX3R1cm5vZmZfaXJxKCB1bnNpZ25lZCBpcnEgKQorCit7CisJaWYgKGlycSA8IFNUTUZQX1NPVVJDRV9CQVNFIHx8IGlycSA+PSBTQ0NfU09VUkNFX0JBU0UpIHJldHVybjsKKwljbGVhcl9tZnBfYml0KCBpcnEsIE1GUF9FTkFCTEUgKTsKKwljbGVhcl9tZnBfYml0KCBpcnEsIE1GUF9QRU5ESU5HICk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGFyaV9jbGVhcl9wZW5kaW5nX2lycSggdW5zaWduZWQgaXJxICkKKworeworCWlmIChpcnEgPCBTVE1GUF9TT1VSQ0VfQkFTRSB8fCBpcnEgPj0gU0NDX1NPVVJDRV9CQVNFKSByZXR1cm47CisJY2xlYXJfbWZwX2JpdCggaXJxLCBNRlBfUEVORElORyApOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdGFyaV9pcnFfcGVuZGluZyggdW5zaWduZWQgaXJxICkKKworeworCWlmIChpcnEgPCBTVE1GUF9TT1VSQ0VfQkFTRSB8fCBpcnEgPj0gU0NDX1NPVVJDRV9CQVNFKSByZXR1cm4oIDAgKTsKKwlyZXR1cm4oIGdldF9tZnBfYml0KCBpcnEsIE1GUF9QRU5ESU5HICkgKTsKK30KKwordW5zaWduZWQgbG9uZyBhdGFyaV9yZWdpc3Rlcl92bWVfaW50KCB2b2lkICk7Cit2b2lkIGF0YXJpX3VucmVnaXN0ZXJfdm1lX2ludCggdW5zaWduZWQgbG9uZyApOworCisjZW5kaWYgLyogbGludXgvYXRhcmlpbnRzLmggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlrYi5oIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFyaWtiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg5MjYwNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlrYi5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisqKiBhdGFyaWtiLmggLS0gVGhpcyBoZWFkZXIgY29udGFpbnMgdGhlIHByb3RvdHlwZXMgb2YgZnVuY3Rpb25zIG9mCisqKiAgICAgICAgICAgICAgdGhlIGludGVsbGlnZW50IGtleWJvYXJkIG9mIHRoZSBBdGFyaSBuZWVkZWQgYnkgdGhlCisqKiAgICAgICAgICAgICAgbW91c2UgYW5kIGpveXN0aWNrIGRyaXZlcnMuCisqKgorKiogQ29weXJpZ2h0IDE5OTQgYnkgUm9iZXJ0IGRlIFZyaWVzCisqKgorKiogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyoqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisqKiBmb3IgbW9yZSBkZXRhaWxzLgorKioKKyoqIENyZWF0ZWQ6IDIwIEZlYiAxOTk0IGJ5IFJvYmVydCBkZSBWcmllcworKi8KKworI2lmbmRlZiBfTElOVVhfQVRBUklLQl9ICisjZGVmaW5lIF9MSU5VWF9BVEFSSUtCX0gKKwordm9pZCBpa2JkX3dyaXRlKGNvbnN0IGNoYXIgKiwgaW50KTsKK3ZvaWQgaWtiZF9tb3VzZV9idXR0b25fYWN0aW9uKGludCBtb2RlKTsKK3ZvaWQgaWtiZF9tb3VzZV9yZWxfcG9zKHZvaWQpOwordm9pZCBpa2JkX21vdXNlX2Fic19wb3MoaW50IHhtYXgsIGludCB5bWF4KTsKK3ZvaWQgaWtiZF9tb3VzZV9rYmRfbW9kZShpbnQgZHgsIGludCBkeSk7Cit2b2lkIGlrYmRfbW91c2VfdGhyZXNoKGludCB4LCBpbnQgeSk7Cit2b2lkIGlrYmRfbW91c2Vfc2NhbGUoaW50IHgsIGludCB5KTsKK3ZvaWQgaWtiZF9tb3VzZV9wb3NfZ2V0KGludCAqeCwgaW50ICp5KTsKK3ZvaWQgaWtiZF9tb3VzZV9wb3Nfc2V0KGludCB4LCBpbnQgeSk7Cit2b2lkIGlrYmRfbW91c2VfeTBfYm90KHZvaWQpOwordm9pZCBpa2JkX21vdXNlX3kwX3RvcCh2b2lkKTsKK3ZvaWQgaWtiZF9tb3VzZV9kaXNhYmxlKHZvaWQpOwordm9pZCBpa2JkX2pveXN0aWNrX2V2ZW50X29uKHZvaWQpOwordm9pZCBpa2JkX2pveXN0aWNrX2V2ZW50X29mZih2b2lkKTsKK3ZvaWQgaWtiZF9qb3lzdGlja19nZXRfc3RhdGUodm9pZCk7Cit2b2lkIGlrYmRfam95c3RpY2tfZGlzYWJsZSh2b2lkKTsKKworLyogSG9vayBmb3IgTUlESSBzZXJpYWwgZHJpdmVyICovCitleHRlcm4gdm9pZCAoKmF0YXJpX01JRElfaW50ZXJydXB0X2hvb2spICh2b2lkKTsKKy8qIEhvb2sgZm9yIG1vdXNlIGRyaXZlciAqLworZXh0ZXJuIHZvaWQgKCphdGFyaV9tb3VzZV9pbnRlcnJ1cHRfaG9vaykgKGNoYXIgKik7CisKKyNlbmRpZiAvKiBfTElOVVhfQVRBUklLQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tbTY4ay9hdG9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGYzMDQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hdG9taWMuaApAQCAtMCwwICsxLDE0OCBAQAorI2lmbmRlZiBfX0FSQ0hfTTY4S19BVE9NSUNfXworI2RlZmluZSBfX0FSQ0hfTTY4S19BVE9NSUNfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CS8qIGxvY2FsX2lycV9YWFgoKSAqLworCisvKgorICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKKyAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uCisgKi8KKworLyoKKyAqIFdlIGRvIG5vdCBoYXZlIFNNUCBtNjhrIHN5c3RlbXMsIHNvIHdlIGRvbid0IGhhdmUgdG8gZGVhbCB3aXRoIHRoYXQuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKKyNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJeyAoaSkgfQorCisjZGVmaW5lIGF0b21pY19yZWFkKHYpCQkoKHYpLT5jb3VudGVyKQorI2RlZmluZSBhdG9taWNfc2V0KHYsIGkpCSgoKHYpLT5jb3VudGVyKSA9IGkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfYWRkKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYWRkbCAlMSwlMCIgOiAiK20iICgqdikgOiAiaWQiIChpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3VibCAlMSwlMCIgOiAiK20iICgqdikgOiAiaWQiIChpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJhZGRxbCAjMSwlMCIgOiAiK20iICgqdikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2RlYyhhdG9taWNfdCAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3VicWwgIzEsJTAiIDogIittIiAoKnYpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2RlY19hbmRfdGVzdChhdG9taWNfdCAqdikKK3sKKwljaGFyIGM7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN1YnFsICMxLCUxOyBzZXEgJTAiIDogIj1kIiAoYyksICIrbSIgKCp2KSk7CisJcmV0dXJuIGMgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdikKK3sKKwljaGFyIGM7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImFkZHFsICMxLCUxOyBzZXEgJTAiIDogIj1kIiAoYyksICIrbSIgKCp2KSk7CisJcmV0dXJuIGMgIT0gMDsKK30KKworI2lmZGVmIENPTkZJR19STVdfSU5TTlMKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlpbnQgdCwgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCQkiMToJbW92ZWwgJTIsJTFcbiIKKwkJCSIJYWRkbCAlMywlMVxuIgorCQkJIgljYXNsICUyLCUxLCUwXG4iCisJCQkiCWpuZSAxYiIKKwkJCTogIittIiAoKnYpLCAiPSZkIiAodCksICI9JmQiICh0bXApCisJCQk6ICJnIiAoaSksICIyIiAoYXRvbWljX3JlYWQodikpKTsKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQoreworCWludCB0LCB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJCSIxOgltb3ZlbCAlMiwlMVxuIgorCQkJIglzdWJsICUzLCUxXG4iCisJCQkiCWNhc2wgJTIsJTEsJTBcbiIKKwkJCSIJam5lIDFiIgorCQkJOiAiK20iICgqdiksICI9JmQiICh0KSwgIj0mZCIgKHRtcCkKKwkJCTogImciIChpKSwgIjIiIChhdG9taWNfcmVhZCh2KSkpOworCXJldHVybiB0OworfQorI2Vsc2UgLyogIUNPTkZJR19STVdfSU5TTlMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqIHYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl0ID0gYXRvbWljX3JlYWQodik7CisJdCArPSBpOworCWF0b21pY19zZXQodiwgdCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqIHYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl0ID0gYXRvbWljX3JlYWQodik7CisJdCAtPSBpOworCWF0b21pY19zZXQodiwgdCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHQ7Cit9CisjZW5kaWYgLyogIUNPTkZJR19STVdfSU5TTlMgKi8KKworI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KQlhdG9taWNfc3ViX3JldHVybigxLCAodikpCisjZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpCWF0b21pY19hZGRfcmV0dXJuKDEsICh2KSkKKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9hbmRfdGVzdChpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJY2hhciBjOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdWJsICUyLCUxOyBzZXEgJTAiIDogIj1kIiAoYyksICIrbSIgKCp2KTogImciIChpKSk7CisJcmV0dXJuIGMgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9uZWdhdGl2ZShpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJY2hhciBjOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJhZGRsICUyLCUxOyBzbWkgJTAiIDogIj1kIiAoYyksICIrbSIgKCp2KTogImciIChpKSk7CisJcmV0dXJuIGMgIT0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19jbGVhcl9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyAqdikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYW5kbCAlMSwlMCIgOiAiK20iICgqdikgOiAiaWQiICh+KG1hc2spKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2V0X21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nICp2KQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJvcmwgJTEsJTAiIDogIittIiAoKnYpIDogImlkIiAobWFzaykpOworfQorCisvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQorCisjZW5kaWYgLyogX19BUkNIX002OEtfQVRPTUlDIF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tbTY4ay9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWJjZjdjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2JpdG9wcy5oCkBAIC0wLDAgKzEsNDM2IEBACisjaWZuZGVmIF9NNjhLX0JJVE9QU19ICisjZGVmaW5lIF9NNjhLX0JJVE9QU19ICisvKgorICogQ29weXJpZ2h0IDE5OTIsIExpbnVzIFRvcnZhbGRzLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworLyoKKyAqIFJlcXVpcmUgNjgwMjAgb3IgYmV0dGVyLgorICoKKyAqIFRoZXkgdXNlIHRoZSBzdGFuZGFyZCBiaWctZW5kaWFuIG02ODB4MCBiaXQgb3JkZXJpbmcuCisgKi8KKworI2RlZmluZSB0ZXN0X2FuZF9zZXRfYml0KG5yLHZhZGRyKSBcCisgIChfX2J1aWx0aW5fY29uc3RhbnRfcChucikgPyBcCisgICBfX2NvbnN0YW50X3Rlc3RfYW5kX3NldF9iaXQobnIsIHZhZGRyKSA6IFwKKyAgIF9fZ2VuZXJpY190ZXN0X2FuZF9zZXRfYml0KG5yLCB2YWRkcikpCisKKyNkZWZpbmUgX190ZXN0X2FuZF9zZXRfYml0KG5yLHZhZGRyKSB0ZXN0X2FuZF9zZXRfYml0KG5yLHZhZGRyKQorCitzdGF0aWMgaW5saW5lIGludCBfX2NvbnN0YW50X3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB1bnNpZ25lZCBsb25nICp2YWRkcikKK3sKKwljaGFyICpwID0gKGNoYXIgKil2YWRkciArIChuciBeIDMxKSAvIDg7CisJY2hhciByZXR2YWw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJzZXQgJTIsJTE7IHNuZSAlMCIKKwkJCTogIj1kIiAocmV0dmFsKSwgIittIiAoKnApCisJCQk6ICJkaSIgKG5yICYgNykpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19nZW5lcmljX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB1bnNpZ25lZCBsb25nICp2YWRkcikKK3sKKwljaGFyIHJldHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgiYmZzZXQgJTJ7JTE6IzF9OyBzbmUgJTAiCisJCQk6ICI9ZCIgKHJldHZhbCkgOiAiZCIgKG5yXjMxKSwgIm8iICgqdmFkZHIpIDogIm1lbW9yeSIpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworI2RlZmluZSBzZXRfYml0KG5yLHZhZGRyKSBcCisgIChfX2J1aWx0aW5fY29uc3RhbnRfcChucikgPyBcCisgICBfX2NvbnN0YW50X3NldF9iaXQobnIsIHZhZGRyKSA6IFwKKyAgIF9fZ2VuZXJpY19zZXRfYml0KG5yLCB2YWRkcikpCisKKyNkZWZpbmUgX19zZXRfYml0KG5yLHZhZGRyKSBzZXRfYml0KG5yLHZhZGRyKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19jb25zdGFudF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqdmFkZHIpCit7CisJY2hhciAqcCA9IChjaGFyICopdmFkZHIgKyAobnIgXiAzMSkgLyA4OworCV9fYXNtX18gX192b2xhdGlsZV9fICgiYnNldCAlMSwlMCIKKwkJCTogIittIiAoKnApIDogImRpIiAobnIgJiA3KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2dlbmVyaWNfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnZhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgiYmZzZXQgJTF7JTA6IzF9IgorCQkJOiA6ICJkIiAobnJeMzEpLCAibyIgKCp2YWRkcikgOiAibWVtb3J5Iik7Cit9CisKKyNkZWZpbmUgdGVzdF9hbmRfY2xlYXJfYml0KG5yLHZhZGRyKSBcCisgIChfX2J1aWx0aW5fY29uc3RhbnRfcChucikgPyBcCisgICBfX2NvbnN0YW50X3Rlc3RfYW5kX2NsZWFyX2JpdChuciwgdmFkZHIpIDogXAorICAgX19nZW5lcmljX3Rlc3RfYW5kX2NsZWFyX2JpdChuciwgdmFkZHIpKQorCisjZGVmaW5lIF9fdGVzdF9hbmRfY2xlYXJfYml0KG5yLHZhZGRyKSB0ZXN0X2FuZF9jbGVhcl9iaXQobnIsdmFkZHIpCisKK3N0YXRpYyBpbmxpbmUgaW50IF9fY29uc3RhbnRfdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdW5zaWduZWQgbG9uZyAqdmFkZHIpCit7CisJY2hhciAqcCA9IChjaGFyICopdmFkZHIgKyAobnIgXiAzMSkgLyA4OworCWNoYXIgcmV0dmFsOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiY2xyICUyLCUxOyBzbmUgJTAiCisJCQk6ICI9ZCIgKHJldHZhbCksICIrbSIgKCpwKQorCQkJOiAiZGkiIChuciAmIDcpKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fZ2VuZXJpY190ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB1bnNpZ25lZCBsb25nICp2YWRkcikKK3sKKwljaGFyIHJldHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgiYmZjbHIgJTJ7JTE6IzF9OyBzbmUgJTAiCisJCQk6ICI9ZCIgKHJldHZhbCkgOiAiZCIgKG5yXjMxKSwgIm8iICgqdmFkZHIpIDogIm1lbW9yeSIpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIGNsZWFyX2JpdCgpIGRvZXNuJ3QgcHJvdmlkZSBhbnkgYmFycmllciBmb3IgdGhlIGNvbXBpbGVyLgorICovCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQorCisjZGVmaW5lIGNsZWFyX2JpdChucix2YWRkcikgXAorICAoX19idWlsdGluX2NvbnN0YW50X3AobnIpID8gXAorICAgX19jb25zdGFudF9jbGVhcl9iaXQobnIsIHZhZGRyKSA6IFwKKyAgIF9fZ2VuZXJpY19jbGVhcl9iaXQobnIsIHZhZGRyKSkKKyNkZWZpbmUgX19jbGVhcl9iaXQobnIsdmFkZHIpIGNsZWFyX2JpdChucix2YWRkcikKKworc3RhdGljIGlubGluZSB2b2lkIF9fY29uc3RhbnRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqdmFkZHIpCit7CisJY2hhciAqcCA9IChjaGFyICopdmFkZHIgKyAobnIgXiAzMSkgLyA4OworCV9fYXNtX18gX192b2xhdGlsZV9fICgiYmNsciAlMSwlMCIKKwkJCTogIittIiAoKnApIDogImRpIiAobnIgJiA3KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2dlbmVyaWNfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqdmFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiZmNsciAlMXslMDojMX0iCisJCQk6IDogImQiIChucl4zMSksICJvIiAoKnZhZGRyKSA6ICJtZW1vcnkiKTsKK30KKworI2RlZmluZSB0ZXN0X2FuZF9jaGFuZ2VfYml0KG5yLHZhZGRyKSBcCisgIChfX2J1aWx0aW5fY29uc3RhbnRfcChucikgPyBcCisgICBfX2NvbnN0YW50X3Rlc3RfYW5kX2NoYW5nZV9iaXQobnIsIHZhZGRyKSA6IFwKKyAgIF9fZ2VuZXJpY190ZXN0X2FuZF9jaGFuZ2VfYml0KG5yLCB2YWRkcikpCisKKyNkZWZpbmUgX190ZXN0X2FuZF9jaGFuZ2VfYml0KG5yLHZhZGRyKSB0ZXN0X2FuZF9jaGFuZ2VfYml0KG5yLHZhZGRyKQorI2RlZmluZSBfX2NoYW5nZV9iaXQobnIsdmFkZHIpIGNoYW5nZV9iaXQobnIsdmFkZHIpCisKK3N0YXRpYyBpbmxpbmUgaW50IF9fY29uc3RhbnRfdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgKnZhZGRyKQoreworCWNoYXIgKnAgPSAoY2hhciAqKXZhZGRyICsgKG5yIF4gMzEpIC8gODsKKwljaGFyIHJldHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgiYmNoZyAlMiwlMTsgc25lICUwIgorCQkJOiAiPWQiIChyZXR2YWwpLCAiK20iICgqcCkKKwkJCTogImRpIiAobnIgJiA3KSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2dlbmVyaWNfdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgKnZhZGRyKQoreworCWNoYXIgcmV0dmFsOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiZmNoZyAlMnslMTojMX07IHNuZSAlMCIKKwkJCTogIj1kIiAocmV0dmFsKSA6ICJkIiAobnJeMzEpLCAibyIgKCp2YWRkcikgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisjZGVmaW5lIGNoYW5nZV9iaXQobnIsdmFkZHIpIFwKKyAgKF9fYnVpbHRpbl9jb25zdGFudF9wKG5yKSA/IFwKKyAgIF9fY29uc3RhbnRfY2hhbmdlX2JpdChuciwgdmFkZHIpIDogXAorICAgX19nZW5lcmljX2NoYW5nZV9iaXQobnIsIHZhZGRyKSkKKworc3RhdGljIGlubGluZSB2b2lkIF9fY29uc3RhbnRfY2hhbmdlX2JpdChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgKnZhZGRyKQoreworCWNoYXIgKnAgPSAoY2hhciAqKXZhZGRyICsgKG5yIF4gMzEpIC8gODsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJjaGcgJTEsJTAiCisJCQk6ICIrbSIgKCpwKSA6ICJkaSIgKG5yICYgNykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19nZW5lcmljX2NoYW5nZV9iaXQoaW50IG5yLCB1bnNpZ25lZCBsb25nICp2YWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJmY2hnICUxeyUwOiMxfSIKKwkJCTogOiAiZCIgKG5yXjMxKSwgIm8iICgqdmFkZHIpIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnZhZGRyKQoreworCXJldHVybiAodmFkZHJbbnIgPj4gNV0gJiAoMVVMIDw8IChuciAmIDMxKSkpICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfZmlyc3RfemVyb19iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqdmFkZHIsCisJCQkJICAgICAgdW5zaWduZWQgc2l6ZSkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICpwID0gdmFkZHI7CisJaW50IHJlcyA9IDMyOworCXVuc2lnbmVkIGxvbmcgbnVtOworCisJaWYgKCFzaXplKQorCQlyZXR1cm4gMDsKKworCXNpemUgPSAoc2l6ZSArIDMxKSA+PiA1OworCXdoaWxlICghKG51bSA9IH4qcCsrKSkgeworCQlpZiAoIS0tc2l6ZSkKKwkJCWdvdG8gb3V0OworCX0KKworCV9fYXNtX18gX192b2xhdGlsZV9fICgiYmZmZm8gJTF7IzAsIzB9LCUwIgorCQkJICAgICAgOiAiPWQiIChyZXMpIDogImQiIChudW0gJiAtbnVtKSk7CisJcmVzIF49IDMxOworb3V0OgorCXJldHVybiAoKGxvbmcpcCAtIChsb25nKXZhZGRyIC0gNCkgKiA4ICsgcmVzOworfQorCitzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfemVyb19iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqdmFkZHIsIGludCBzaXplLAorCQkJCSAgICAgaW50IG9mZnNldCkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICpwID0gdmFkZHIgKyAob2Zmc2V0ID4+IDUpOworCWludCBiaXQgPSBvZmZzZXQgJiAzMVVMLCByZXM7CisKKwlpZiAob2Zmc2V0ID49IHNpemUpCisJCXJldHVybiBzaXplOworCisJaWYgKGJpdCkgeworCQl1bnNpZ25lZCBsb25nIG51bSA9IH4qcCsrICYgKH4wVUwgPDwgYml0KTsKKwkJb2Zmc2V0IC09IGJpdDsKKworCQkvKiBMb29rIGZvciB6ZXJvIGluIGZpcnN0IGxvbmd3b3JkICovCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgiYmZmZm8gJTF7IzAsIzB9LCUwIgorCQkJCSAgICAgIDogIj1kIiAocmVzKSA6ICJkIiAobnVtICYgLW51bSkpOworCQlpZiAocmVzIDwgMzIpCisJCQlyZXR1cm4gb2Zmc2V0ICsgKHJlcyBeIDMxKTsKKwkJb2Zmc2V0ICs9IDMyOworCX0KKwkvKiBObyB6ZXJvIHlldCwgc2VhcmNoIHJlbWFpbmluZyBmdWxsIGJ5dGVzIGZvciBhIHplcm8gKi8KKwlyZXMgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHAsIHNpemUgLSAoKGxvbmcpcCAtIChsb25nKXZhZGRyKSAqIDgpOworCXJldHVybiBvZmZzZXQgKyByZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfZmlyc3RfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKnZhZGRyLCB1bnNpZ25lZCBzaXplKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSB2YWRkcjsKKwlpbnQgcmVzID0gMzI7CisJdW5zaWduZWQgbG9uZyBudW07CisKKwlpZiAoIXNpemUpCisJCXJldHVybiAwOworCisJc2l6ZSA9IChzaXplICsgMzEpID4+IDU7CisJd2hpbGUgKCEobnVtID0gKnArKykpIHsKKwkJaWYgKCEtLXNpemUpCisJCQlnb3RvIG91dDsKKwl9CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJmZmZvICUxeyMwLCMwfSwlMCIKKwkJCSAgICAgIDogIj1kIiAocmVzKSA6ICJkIiAobnVtICYgLW51bSkpOworCXJlcyBePSAzMTsKK291dDoKKwlyZXR1cm4gKChsb25nKXAgLSAobG9uZyl2YWRkciAtIDQpICogOCArIHJlczsKK30KKworc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICp2YWRkciwgaW50IHNpemUsCisJCQkJaW50IG9mZnNldCkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICpwID0gdmFkZHIgKyAob2Zmc2V0ID4+IDUpOworCWludCBiaXQgPSBvZmZzZXQgJiAzMVVMLCByZXM7CisKKwlpZiAob2Zmc2V0ID49IHNpemUpCisJCXJldHVybiBzaXplOworCisJaWYgKGJpdCkgeworCQl1bnNpZ25lZCBsb25nIG51bSA9ICpwKysgJiAofjBVTCA8PCBiaXQpOworCQlvZmZzZXQgLT0gYml0OworCisJCS8qIExvb2sgZm9yIG9uZSBpbiBmaXJzdCBsb25nd29yZCAqLworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImJmZmZvICUxeyMwLCMwfSwlMCIKKwkJCQkgICAgICA6ICI9ZCIgKHJlcykgOiAiZCIgKG51bSAmIC1udW0pKTsKKwkJaWYgKHJlcyA8IDMyKQorCQkJcmV0dXJuIG9mZnNldCArIChyZXMgXiAzMSk7CisJCW9mZnNldCArPSAzMjsKKwl9CisJLyogTm8gb25lIHlldCwgc2VhcmNoIHJlbWFpbmluZyBmdWxsIGJ5dGVzIGZvciBhIG9uZSAqLworCXJlcyA9IGZpbmRfZmlyc3RfYml0KHAsIHNpemUgLSAoKGxvbmcpcCAtIChsb25nKXZhZGRyKSAqIDgpOworCXJldHVybiBvZmZzZXQgKyByZXM7Cit9CisKKy8qCisgKiBmZnogPSBGaW5kIEZpcnN0IFplcm8gaW4gd29yZC4gVW5kZWZpbmVkIGlmIG5vIHplcm8gZXhpc3RzLAorICogc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCB+MFVMIGZpcnN0Li4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZmeih1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJaW50IHJlczsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgiYmZmZm8gJTF7IzAsIzB9LCUwIgorCQkJICAgICAgOiAiPWQiIChyZXMpIDogImQiICh+d29yZCAmIC1+d29yZCkpOworCXJldHVybiByZXMgXiAzMTsKK30KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIGZmczogZmluZCBmaXJzdCBiaXQgc2V0LiBUaGlzIGlzIGRlZmluZWQgdGhlIHNhbWUgd2F5IGFzCisgKiB0aGUgbGliYyBhbmQgY29tcGlsZXIgYnVpbHRpbiBmZnMgcm91dGluZXMsIHRoZXJlZm9yZQorICogZGlmZmVycyBpbiBzcGlyaXQgZnJvbSB0aGUgYWJvdmUgZmZ6IChtYW4gZmZzKS4KKyAqLworCitzdGF0aWMgaW5saW5lIGludCBmZnMoaW50IHgpCit7CisJaW50IGNudDsKKworCWFzbSAoImJmZmZvICUxeyMwOiMwfSwlMCIgOiAiPWQiIChjbnQpIDogImRtIiAoeCAmIC14KSk7CisKKwlyZXR1cm4gMzIgLSBjbnQ7Cit9CisjZGVmaW5lIF9fZmZzKHgpIChmZnMoeCkgLSAxKQorCisvKgorICogZmxzOiBmaW5kIGxhc3QgYml0IHNldC4KKyAqLworCitzdGF0aWMgaW5saW5lIGludCBmbHMoaW50IHgpCit7CisJaW50IGNudDsKKworCWFzbSAoImJmZmZvICUxeyMwLCMwfSwlMCIgOiAiPWQiIChjbnQpIDogImRtIiAoeCkpOworCisJcmV0dXJuIDMyIC0gY250OworfQorCisvKgorICogRXZlcnkgYXJjaGl0ZWN0dXJlIG11c3QgZGVmaW5lIHRoaXMgZnVuY3Rpb24uIEl0J3MgdGhlIGZhc3Rlc3QKKyAqIHdheSBvZiBzZWFyY2hpbmcgYSAxNDAtYml0IGJpdG1hcCB3aGVyZSB0aGUgZmlyc3QgMTAwIGJpdHMgYXJlCisgKiB1bmxpa2VseSB0byBiZSBzZXQuIEl0J3MgZ3VhcmFudGVlZCB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgMTQwCisgKiBiaXRzIGlzIGNsZWFyZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjaGVkX2ZpbmRfZmlyc3RfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmIpCit7CisJaWYgKHVubGlrZWx5KGJbMF0pKQorCQlyZXR1cm4gX19mZnMoYlswXSk7CisJaWYgKHVubGlrZWx5KGJbMV0pKQorCQlyZXR1cm4gX19mZnMoYlsxXSkgKyAzMjsKKwlpZiAodW5saWtlbHkoYlsyXSkpCisJCXJldHVybiBfX2ZmcyhiWzJdKSArIDY0OworCWlmIChiWzNdKQorCQlyZXR1cm4gX19mZnMoYlszXSkgKyA5NjsKKwlyZXR1cm4gX19mZnMoYls0XSkgKyAxMjg7Cit9CisKKworLyoKKyAqIGh3ZWlnaHROOiByZXR1cm5zIHRoZSBoYW1taW5nIHdlaWdodCAoaS5lLiB0aGUgbnVtYmVyCisgKiBvZiBiaXRzIHNldCkgb2YgYSBOLWJpdCB3b3JkCisgKi8KKworI2RlZmluZSBod2VpZ2h0MzIoeCkgZ2VuZXJpY19od2VpZ2h0MzIoeCkKKyNkZWZpbmUgaHdlaWdodDE2KHgpIGdlbmVyaWNfaHdlaWdodDE2KHgpCisjZGVmaW5lIGh3ZWlnaHQ4KHgpIGdlbmVyaWNfaHdlaWdodDgoeCkKKworLyogQml0bWFwIGZ1bmN0aW9ucyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0gKi8KKworc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSkKK3sKKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyOworCWludCByZXM7CisJdW5zaWduZWQgc2hvcnQgbnVtOworCisJaWYgKCFzaXplKQorCQlyZXR1cm4gMDsKKworCXNpemUgPSAoc2l6ZSA+PiA0KSArICgoc2l6ZSAmIDE1KSA+IDApOworCXdoaWxlICgqcCsrID09IDB4ZmZmZikKKwl7CisJCWlmICgtLXNpemUgPT0gMCkKKwkJCXJldHVybiAocCAtIGFkZHIpIDw8IDQ7CisJfQorCisJbnVtID0gfiotLXA7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiZmZmbyAlMXsjMTYsIzE2fSwlMCIKKwkJCSAgICAgIDogIj1kIiAocmVzKSA6ICJkIiAobnVtICYgLW51bSkpOworCXJldHVybiAoKHAgLSBhZGRyKSA8PCA0KSArIChyZXMgXiAzMSk7Cit9CisKKyNkZWZpbmUgbWluaXhfdGVzdF9hbmRfc2V0X2JpdChuciwgYWRkcikJdGVzdF9hbmRfc2V0X2JpdCgobnIpIF4gMTYsICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorI2RlZmluZSBtaW5peF9zZXRfYml0KG5yLGFkZHIpCQkJc2V0X2JpdCgobnIpIF4gMTYsICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorI2RlZmluZSBtaW5peF90ZXN0X2FuZF9jbGVhcl9iaXQobnIsIGFkZHIpCXRlc3RfYW5kX2NsZWFyX2JpdCgobnIpIF4gMTYsICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorCitzdGF0aWMgaW5saW5lIGludCBtaW5peF90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvaWQgKnZhZGRyKQoreworCWNvbnN0IHVuc2lnbmVkIHNob3J0ICpwID0gdmFkZHI7CisJcmV0dXJuIChwW25yID4+IDRdICYgKDFVIDw8IChuciAmIDE1KSkpICE9IDA7Cit9CisKKy8qIEJpdG1hcCBmdW5jdGlvbnMgZm9yIHRoZSBleHQyIGZpbGVzeXN0ZW0uICovCisKKyNkZWZpbmUgZXh0Ml9zZXRfYml0KG5yLCBhZGRyKQkJCXRlc3RfYW5kX3NldF9iaXQoKG5yKSBeIDI0LCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKKyNkZWZpbmUgZXh0Ml9zZXRfYml0X2F0b21pYyhsb2NrLCBuciwgYWRkcikJdGVzdF9hbmRfc2V0X2JpdCgobnIpIF4gMjQsICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdChuciwgYWRkcikJCXRlc3RfYW5kX2NsZWFyX2JpdCgobnIpIF4gMjQsICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCXRlc3RfYW5kX2NsZWFyX2JpdCgobnIpIF4gMjQsICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorCitzdGF0aWMgaW5saW5lIGludCBleHQyX3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9pZCAqdmFkZHIpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHZhZGRyOworCXJldHVybiAocFtuciA+PiAzXSAmICgxVSA8PCAobnIgJiA3KSkpICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICpwID0gdmFkZHIsICphZGRyID0gdmFkZHI7CisJaW50IHJlczsKKworCWlmICghc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlzaXplID0gKHNpemUgPj4gNSkgKyAoKHNpemUgJiAzMSkgPiAwKTsKKwl3aGlsZSAoKnArKyA9PSB+MFVMKQorCXsKKwkJaWYgKC0tc2l6ZSA9PSAwKQorCQkJcmV0dXJuIChwIC0gYWRkcikgPDwgNTsKKwl9CisKKwktLXA7CisJZm9yIChyZXMgPSAwOyByZXMgPCAzMjsgcmVzKyspCisJCWlmICghZXh0Ml90ZXN0X2JpdCAocmVzLCBwKSkKKwkJCWJyZWFrOworCXJldHVybiAocCAtIGFkZHIpICogMzIgKyByZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGV4dDJfZmluZF9uZXh0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBzaXplLAorCQkJCQkgIHVuc2lnbmVkIG9mZnNldCkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICphZGRyID0gdmFkZHI7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9IGFkZHIgKyAob2Zmc2V0ID4+IDUpOworCWludCBiaXQgPSBvZmZzZXQgJiAzMVVMLCByZXM7CisKKwlpZiAob2Zmc2V0ID49IHNpemUpCisJCXJldHVybiBzaXplOworCisJaWYgKGJpdCkgeworCQkvKiBMb29rIGZvciB6ZXJvIGluIGZpcnN0IGxvbmd3b3JkICovCisJCWZvciAocmVzID0gYml0OyByZXMgPCAzMjsgcmVzKyspCisJCQlpZiAoIWV4dDJfdGVzdF9iaXQgKHJlcywgcCkpCisJCQkJcmV0dXJuIChwIC0gYWRkcikgKiAzMiArIHJlczsKKwkJcCsrOworCX0KKwkvKiBObyB6ZXJvIHlldCwgc2VhcmNoIHJlbWFpbmluZyBmdWxsIGJ5dGVzIGZvciBhIHplcm8gKi8KKwlyZXMgPSBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQgKHAsIHNpemUgLSAzMiAqIChwIC0gYWRkcikpOworCXJldHVybiAocCAtIGFkZHIpICogMzIgKyByZXM7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTTY4S19CSVRPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9ibGlua2VuLmggYi9pbmNsdWRlL2FzbS1tNjhrL2JsaW5rZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTc0OWNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9ibGlua2VuLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyoqIGFzbS9ibGlua2VuLmggLS0gbTY4ayBibGlua2VubGlnaHRzIHN1cHBvcnQgKGN1cnJlbnRseSBocDMwMCBvbmx5KQorKioKKyoqIChjKSAxOTk4IFBoaWwgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CisqKgorKiogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyoqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisqKiBmb3IgbW9yZSBkZXRhaWxzLgorKioKKyovCisKKyNpZm5kZWYgX002OEtfQkxJTktFTl9ICisjZGVmaW5lIF9NNjhLX0JMSU5LRU5fSAorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgSFAzMDBfTEVEUwkJMHhmMDAxZmZmZgorCitleHRlcm4gdW5zaWduZWQgY2hhciBsZWRzdGF0ZTsKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBibGlua2VuX2xlZHMoaW50IG9uLCBpbnQgb2ZmKQoreworCWlmIChNQUNIX0lTX0hQMzAwKQorCXsKKwkJbGVkc3RhdGUgfD0gb247CisJCWxlZHN0YXRlICY9IH5vZmY7CisJCW91dF84KEhQMzAwX0xFRFMsIH5sZWRzdGF0ZSk7CisJfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYm9vdGluZm8uaCBiL2luY2x1ZGUvYXNtLW02OGsvYm9vdGluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjhhMDZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9ib290aW5mby5oCkBAIC0wLDAgKzEsMzc4IEBACisvKgorKiogYXNtL2Jvb3RpbmZvLmggLS0gRGVmaW5pdGlvbiBvZiB0aGUgTGludXgvbTY4ayBib290IGluZm9ybWF0aW9uIHN0cnVjdHVyZQorKioKKyoqIENvcHlyaWdodCAxOTkyIGJ5IEdyZWcgSGFycAorKioKKyoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisqKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKiogZm9yIG1vcmUgZGV0YWlscy4KKyoqCisqKiBDcmVhdGVkIDA5LzI5LzkyIGJ5IEdyZWcgSGFycAorKioKKyoqIDUvMi85NCBSb21hbiBIb2RlazoKKyoqICAgQWRkZWQgYmlfYXRhcmkgcGFydCBvZiB0aGUgbWFjaGluZSBkZXBlbmRlbnQgdW5pb24gYmlfdW47IGZvciBub3cgaXQKKyoqICAgY29udGFpbnMganVzdCBhIG1vZGVsIGZpZWxkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gVFQgYW5kIEZhbGNvbi4KKyoqIDI2LzcvOTYgUm9tYW4gWmlwcGVsOgorKiogICBSZW5hbWVkIHRvIHNldHVwLmg7IGFkZGVkIHNvbWUgdXNlZnVsIG1hY3JvcyB0byBhbGxvdyBnY2Mgc29tZQorKiogICBvcHRpbWl6YXRpb25zIGlmIHBvc3NpYmxlLgorKiogNS8xMC85NiBHZWVydCBVeXR0ZXJob2V2ZW46CisqKiAgIFJlZGVzaWduIG9mIHRoZSBib290IGluZm9ybWF0aW9uIHN0cnVjdHVyZTsgcmVuYW1lZCB0byBib290aW5mby5oIGFnYWluCisqKiAyNy8xMS85NiBHZWVydCBVeXR0ZXJob2V2ZW46CisqKiAgIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggYm9vdGluZm8gaW50ZXJmYWNlIHZlcnNpb24gMS4wCisqLworCisjaWZuZGVmIF9NNjhLX0JPT1RJTkZPX0gKKyNkZWZpbmUgX002OEtfQk9PVElORk9fSAorCisKKyAgICAvKgorICAgICAqICBCb290aW5mbyBkZWZpbml0aW9ucworICAgICAqCisgICAgICogIFRoaXMgaXMgYW4gZWFzaWx5IHBhcnNhYmxlIGFuZCBleHRlbmRhYmxlIHN0cnVjdHVyZSBjb250YWluaW5nIGFsbAorICAgICAqICBpbmZvcm1hdGlvbiB0byBiZSBwYXNzZWQgZnJvbSB0aGUgYm9vdHN0cmFwIHRvIHRoZSBrZXJuZWwuCisgICAgICoKKyAgICAgKiAgVGhpcyB3YXkgSSBob3BlIHRvIGtlZXAgYWxsIGZ1dHVyZSBjaGFuZ2VzIGJhY2svZm9yZXdhcmRzIGNvbXBhdGlibGUuCisgICAgICogIFRodXMsIGtlZXAgeW91ciBmaW5nZXJzIGNyb3NzZWQuLi4KKyAgICAgKgorICAgICAqICBUaGlzIHN0cnVjdHVyZSBpcyBjb3BpZWQgcmlnaHQgYWZ0ZXIgdGhlIGtlcm5lbCBic3MgYnkgdGhlIGJvb3RzdHJhcAorICAgICAqICByb3V0aW5lLgorICAgICAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgYmlfcmVjb3JkIHsKKyAgICB1bnNpZ25lZCBzaG9ydCB0YWc7CQkJLyogdGFnIElEICovCisgICAgdW5zaWduZWQgc2hvcnQgc2l6ZTsJCS8qIHNpemUgb2YgcmVjb3JkIChpbiBieXRlcykgKi8KKyAgICB1bnNpZ25lZCBsb25nIGRhdGFbMF07CQkvKiBkYXRhICovCit9OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKworICAgIC8qCisgICAgICogIFRhZyBEZWZpbml0aW9ucworICAgICAqCisgICAgICogIE1hY2hpbmUgaW5kZXBlbmRlbnQgdGFncyBzdGFydCBjb3VudGluZyBmcm9tIDB4MDAwMAorICAgICAqICBNYWNoaW5lIGRlcGVuZGVudCB0YWdzIHN0YXJ0IGNvdW50aW5nIGZyb20gMHg4MDAwCisgICAgICovCisKKyNkZWZpbmUgQklfTEFTVAkJCTB4MDAwMAkvKiBsYXN0IHJlY29yZCAoc2VudGluZWwpICovCisjZGVmaW5lIEJJX01BQ0hUWVBFCQkweDAwMDEJLyogbWFjaGluZSB0eXBlICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0NQVVRZUEUJCTB4MDAwMgkvKiBjcHUgdHlwZSAodV9sb25nKSAqLworI2RlZmluZSBCSV9GUFVUWVBFCQkweDAwMDMJLyogZnB1IHR5cGUgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfTU1VVFlQRQkJMHgwMDA0CS8qIG1tdSB0eXBlICh1X2xvbmcpICovCisjZGVmaW5lIEJJX01FTUNIVU5LCQkweDAwMDUJLyogbWVtb3J5IGNodW5rIGFkZHJlc3MgYW5kIHNpemUgKi8KKwkJCQkJLyogKHN0cnVjdCBtZW1faW5mbykgKi8KKyNkZWZpbmUgQklfUkFNRElTSwkJMHgwMDA2CS8qIHJhbWRpc2sgYWRkcmVzcyBhbmQgc2l6ZSAqLworCQkJCQkvKiAoc3RydWN0IG1lbV9pbmZvKSAqLworI2RlZmluZSBCSV9DT01NQU5EX0xJTkUJCTB4MDAwNwkvKiBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgKi8KKwkJCQkJLyogKHN0cmluZykgKi8KKworICAgIC8qCisgICAgICogIEFtaWdhLXNwZWNpZmljIHRhZ3MKKyAgICAgKi8KKworI2RlZmluZSBCSV9BTUlHQV9NT0RFTAkJMHg4MDAwCS8qIG1vZGVsICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0FNSUdBX0FVVE9DT04JMHg4MDAxCS8qIEF1dG9Db25maWcgZGV2aWNlICovCisJCQkJCS8qIChzdHJ1Y3QgQ29uZmlnRGV2KSAqLworI2RlZmluZSBCSV9BTUlHQV9DSElQX1NJWkUJMHg4MDAyCS8qIHNpemUgb2YgQ2hpcCBSQU0gKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfQU1JR0FfVkJMQU5LCQkweDgwMDMJLyogVkJMQU5LIGZyZXF1ZW5jeSAodV9jaGFyKSAqLworI2RlZmluZSBCSV9BTUlHQV9QU0ZSRVEJCTB4ODAwNAkvKiBwb3dlciBzdXBwbHkgZnJlcXVlbmN5ICh1X2NoYXIpICovCisjZGVmaW5lIEJJX0FNSUdBX0VDTE9DSwkJMHg4MDA1CS8qIEVDbG9jayBmcmVxdWVuY3kgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfQU1JR0FfQ0hJUFNFVAkweDgwMDYJLyogbmF0aXZlIGNoaXBzZXQgcHJlc2VudCAodV9sb25nKSAqLworI2RlZmluZSBCSV9BTUlHQV9TRVJQRVIJCTB4ODAwNwkvKiBzZXJpYWwgcG9ydCBwZXJpb2QgKHVfc2hvcnQpICovCisKKyAgICAvKgorICAgICAqICBBdGFyaS1zcGVjaWZpYyB0YWdzCisgICAgICovCisKKyNkZWZpbmUgQklfQVRBUklfTUNIX0NPT0tJRQkweDgwMDAJLyogX01DSCBjb29raWUgZnJvbSBUT1MgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfQVRBUklfTUNIX1RZUEUJMHg4MDAxCS8qIHNwZWNpYWwgbWFjaGluZSB0eXBlICh1X2xvbmcpICovCisJCQkJCS8qICh2YWx1ZXMgYXJlIEFUQVJJX01BQ0hfKiBkZWZpbmVzICovCisKKy8qIG1jaF9jb29raWUgdmFsdWVzICh1cHBlciB3b3JkKSAqLworI2RlZmluZSBBVEFSSV9NQ0hfU1QJCTAKKyNkZWZpbmUgQVRBUklfTUNIX1NURQkJMQorI2RlZmluZSBBVEFSSV9NQ0hfVFQJCTIKKyNkZWZpbmUgQVRBUklfTUNIX0ZBTENPTgkzCisKKy8qIG1jaF90eXBlIHZhbHVlcyAqLworI2RlZmluZSBBVEFSSV9NQUNIX05PUk1BTAkwCS8qIG5vIHNwZWNpYWwgbWFjaGluZSB0eXBlICovCisjZGVmaW5lIEFUQVJJX01BQ0hfTUVEVVNBCTEJLyogTWVkdXNhIDA0MCAqLworI2RlZmluZSBBVEFSSV9NQUNIX0hBREVTCTIJLyogSGFkZXMgMDQwIG9yIDA2MCAqLworI2RlZmluZSBBVEFSSV9NQUNIX0FCNDAJCTMJLyogQWZ0ZXJidXJuZXIwNDAgb24gRmFsY29uICovCisKKyAgICAvKgorICAgICAqICBWTUUtc3BlY2lmaWMgdGFncworICAgICAqLworCisjZGVmaW5lIEJJX1ZNRV9UWVBFCQkweDgwMDAJLyogVk1FIHN1Yi1hcmNoaXRlY3R1cmUgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfVk1FX0JSRElORk8JCTB4ODAwMQkvKiBWTUUgYm9hcmQgaW5mb3JtYXRpb24gKHN0cnVjdCkgKi8KKworLyogQklfVk1FX1RZUEUgY29kZXMgKi8KKyNkZWZpbmUJVk1FX1RZUEVfVFAzNFYJCTB4MDAzNAkvKiBUYWRwb2xlIFRQMzRWICovCisjZGVmaW5lIFZNRV9UWVBFX01WTUUxNDcJMHgwMTQ3CS8qIE1vdG9yb2xhIE1WTUUxNDcgKi8KKyNkZWZpbmUgVk1FX1RZUEVfTVZNRTE2MgkweDAxNjIJLyogTW90b3JvbGEgTVZNRTE2MiAqLworI2RlZmluZSBWTUVfVFlQRV9NVk1FMTY2CTB4MDE2NgkvKiBNb3Rvcm9sYSBNVk1FMTY2ICovCisjZGVmaW5lIFZNRV9UWVBFX01WTUUxNjcJMHgwMTY3CS8qIE1vdG9yb2xhIE1WTUUxNjcgKi8KKyNkZWZpbmUgVk1FX1RZUEVfTVZNRTE3MgkweDAxNzIJLyogTW90b3JvbGEgTVZNRTE3MiAqLworI2RlZmluZSBWTUVfVFlQRV9NVk1FMTc3CTB4MDE3NwkvKiBNb3Rvcm9sYSBNVk1FMTc3ICovCisjZGVmaW5lIFZNRV9UWVBFX0JWTUU0MDAwCTB4NDAwMAkvKiBCVk0gTHRkLiBCVk1FNDAwMCAqLworI2RlZmluZSBWTUVfVFlQRV9CVk1FNjAwMAkweDYwMDAJLyogQlZNIEx0ZC4gQlZNRTYwMDAgKi8KKworLyogQklfVk1FX0JSRElORk8gaXMgYSAzMiBieXRlIHN0cnVjdCBhcyByZXR1cm5lZCBieSB0aGUgQnVnIGNvZGUgb24KKyAqIE1vdG9yb2xhIFZNRSBib2FyZHMuICBDb250YWlucyBib2FyZCBudW1iZXIsIEJ1ZyB2ZXJzaW9uLCBib2FyZAorICogY29uZmlndXJhdGlvbiBvcHRpb25zLCBldGMuICBTZWUgaW5jbHVkZS9hc20vbXZtZTE2eGh3LmggZm9yIGRldGFpbHMuCisgKi8KKworCisgICAgLyoKKyAgICAgKiAgTWFjaW50b3NoLXNwZWNpZmljIHRhZ3MgKGFsbCB1X2xvbmcpCisgICAgICovCisKKyNkZWZpbmUgQklfTUFDX01PREVMCQkweDgwMDAJLyogTWFjIEdlc3RhbHQgSUQgKG1vZGVsIHR5cGUpICovCisjZGVmaW5lIEJJX01BQ19WQUREUgkJMHg4MDAxCS8qIE1hYyB2aWRlbyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQklfTUFDX1ZERVBUSAkJMHg4MDAyCS8qIE1hYyB2aWRlbyBkZXB0aCAqLworI2RlZmluZSBCSV9NQUNfVlJPVwkJMHg4MDAzCS8qIE1hYyB2aWRlbyByb3dieXRlcyAqLworI2RlZmluZSBCSV9NQUNfVkRJTQkJMHg4MDA0CS8qIE1hYyB2aWRlbyBkaW1lbnNpb25zICovCisjZGVmaW5lIEJJX01BQ19WTE9HSUNBTAkJMHg4MDA1CS8qIE1hYyB2aWRlbyBsb2dpY2FsIGJhc2UgKi8KKyNkZWZpbmUgQklfTUFDX1NDQ0JBU0UJCTB4ODAwNgkvKiBNYWMgU0NDIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBCSV9NQUNfQlRJTUUJCTB4ODAwNwkvKiBNYWMgYm9vdCB0aW1lICovCisjZGVmaW5lIEJJX01BQ19HTVRCSUFTCQkweDgwMDgJLyogTWFjIEdNVCB0aW1lem9uZSBvZmZzZXQgKi8KKyNkZWZpbmUgQklfTUFDX01FTVNJWkUJCTB4ODAwOQkvKiBNYWMgUkFNIHNpemUgKHNhbml0eSBjaGVjaykgKi8KKyNkZWZpbmUgQklfTUFDX0NQVUlECQkweDgwMGEJLyogTWFjIENQVSB0eXBlIChzYW5pdHkgY2hlY2spICovCisjZGVmaW5lIEJJX01BQ19ST01CQVNFCQkweDgwMGIJLyogTWFjIHN5c3RlbSBST00gYmFzZSBhZGRyZXNzICovCisKKyAgICAvKgorICAgICAqICBNYWNpbnRvc2ggaGFyZHdhcmUgcHJvZmlsZSBkYXRhIC0gdW51c2VkLCBzZWUgbWFjaW50b3NoLmggZm9yCisgICAgICogIHJlc29uYWJsZSB0eXBlIHZhbHVlcworICAgICAqLworCisjZGVmaW5lIEJJX01BQ19WSUExQkFTRQkJMHg4MDEwCS8qIE1hYyBWSUExIGJhc2UgYWRkcmVzcyAoYWx3YXlzIHByZXNlbnQpICovCisjZGVmaW5lIEJJX01BQ19WSUEyQkFTRQkJMHg4MDExCS8qIE1hYyBWSUEyIGJhc2UgYWRkcmVzcyAodHlwZSB2YXJpZXMpICovCisjZGVmaW5lIEJJX01BQ19WSUEyVFlQRQkJMHg4MDEyCS8qIE1hYyBWSUEyIHR5cGUgKFZJQSwgUkJWLCBPU1MpICovCisjZGVmaW5lIEJJX01BQ19BREJUWVBFCQkweDgwMTMJLyogTWFjIEFEQiBpbnRlcmZhY2UgdHlwZSAqLworI2RlZmluZSBCSV9NQUNfQVNDQkFTRQkJMHg4MDE0CS8qIE1hYyBBcHBsZSBTb3VuZCBDaGlwIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBCSV9NQUNfU0NTSTUzODAJCTB4ODAxNQkvKiBNYWMgTkNSIDUzODAgU0NTSSAoYmFzZSBhZGRyZXNzLCBtdWx0aSkgKi8KKyNkZWZpbmUgQklfTUFDX1NDU0lETUEJCTB4ODAxNgkvKiBNYWMgU0NTSSBETUEgKGJhc2UgYWRkcmVzcykgKi8KKyNkZWZpbmUgQklfTUFDX1NDU0k1Mzk2CQkweDgwMTcJLyogTWFjIE5DUiA1M0M5NiBTQ1NJIChiYXNlIGFkZHJlc3MsIG11bHRpKSAqLworI2RlZmluZSBCSV9NQUNfSURFVFlQRQkJMHg4MDE4CS8qIE1hYyBJREUgaW50ZXJmYWNlIHR5cGUgKi8KKyNkZWZpbmUgQklfTUFDX0lERUJBU0UJCTB4ODAxOQkvKiBNYWMgSURFIGludGVyZmFjZSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQklfTUFDX05VQlVTCQkweDgwMWEJLyogTWFjIE51YnVzIHR5cGUgKG5vbmUsIHJlZ3VsYXIsIHBzZXVkbykgKi8KKyNkZWZpbmUgQklfTUFDX1NMT1RNQVNLCQkweDgwMWIJLyogTWFjIE51YnVzIHNsb3RzIHByZXNlbnQgKi8KKyNkZWZpbmUgQklfTUFDX1NDQ1RZUEUJCTB4ODAxYwkvKiBNYWMgU0NDIHNlcmlhbCB0eXBlIChub3JtYWwsIElPUCkgKi8KKyNkZWZpbmUgQklfTUFDX0VUSFRZUEUJCTB4ODAxZAkvKiBNYWMgYnVpbHRpbiBldGhlcm5ldCB0eXBlIChTb25pYywgTUFDRSAqLworI2RlZmluZSBCSV9NQUNfRVRIQkFTRQkJMHg4MDFlCS8qIE1hYyBidWlsdGluIGV0aGVybmV0IGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBCSV9NQUNfUE1VCQkweDgwMWYJLyogTWFjIHBvd2VyIG1hbmFnZW1lbnQgLyBwb3dlcm9mZiBoYXJkd2FyZSAqLworI2RlZmluZSBCSV9NQUNfSU9QX1NXSU0JCTB4ODAyMAkvKiBNYWMgU1dJTSBmbG9wcHkgSU9QICovCisjZGVmaW5lIEJJX01BQ19JT1BfQURCCQkweDgwMjEJLyogTWFjIEFEQiBJT1AgKi8KKworICAgIC8qCisgICAgICogTWFjOiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGJvb3RlciBkYXRhIGZvcm1hdCAodGVtcG9yYXJpbHkpCisgICAgICogRmllbGRzIHVudXNlZCB3aXRoIHRoZSBuZXcgYm9vdGluZm8gY2FuIGJlIGRlbGV0ZWQgbm93OyBpbnN0ZWFkIG9mCisgICAgICogYWRkaW5nIG5ldyBmaWVsZHMgdGhlIHN0cnVjdCBtaWdodCBiZSBzcGxpdHRlZCBpbnRvIGEgaGFyZHdhcmUgYWRkcmVzcworICAgICAqIHBhcnQgYW5kIGEgaGFyZHdhcmUgdHlwZSBwYXJ0CisgICAgICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBtYWNfYm9vdGVyX2RhdGEKK3sKKwl1bnNpZ25lZCBsb25nIHZpZGVvYWRkcjsKKwl1bnNpZ25lZCBsb25nIHZpZGVvcm93OworCXVuc2lnbmVkIGxvbmcgdmlkZW9kZXB0aDsKKwl1bnNpZ25lZCBsb25nIGRpbWVuc2lvbnM7CisJdW5zaWduZWQgbG9uZyBhcmdzOworCXVuc2lnbmVkIGxvbmcgYm9vdHRpbWU7CisJdW5zaWduZWQgbG9uZyBnbXRiaWFzOworCXVuc2lnbmVkIGxvbmcgYm9vdHZlcjsKKwl1bnNpZ25lZCBsb25nIHZpZGVvbG9naWNhbDsKKwl1bnNpZ25lZCBsb25nIHNjY2Jhc2U7CisJdW5zaWduZWQgbG9uZyBpZDsKKwl1bnNpZ25lZCBsb25nIG1lbXNpemU7CisJdW5zaWduZWQgbG9uZyBzZXJpYWxtZjsKKwl1bnNpZ25lZCBsb25nIHNlcmlhbGhzazsKKwl1bnNpZ25lZCBsb25nIHNlcmlhbGdwaTsKKwl1bnNpZ25lZCBsb25nIHByaW50bWY7CisJdW5zaWduZWQgbG9uZyBwcmludGhzazsKKwl1bnNpZ25lZCBsb25nIHByaW50Z3BpOworCXVuc2lnbmVkIGxvbmcgY3B1aWQ7CisJdW5zaWduZWQgbG9uZyByb21iYXNlOworCXVuc2lnbmVkIGxvbmcgYWRiZGVsYXk7CisJdW5zaWduZWQgbG9uZyB0aW1lZGJyYTsKK307CisKK2V4dGVybiBzdHJ1Y3QgbWFjX2Jvb3Rlcl9kYXRhCisJbWFjX2JpX2RhdGE7CisKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiAgQXBvbGxvLXNwZWNpZmljIHRhZ3MKKyAgICAgKi8KKworI2RlZmluZSBCSV9BUE9MTE9fTU9ERUwgICAgICAgICAweDgwMDAgIC8qIG1vZGVsICh1X2xvbmcpICovCisKKyAgICAvKgorICAgICAqICBIUDMwMC1zcGVjaWZpYyB0YWdzCisgICAgICovCisKKyNkZWZpbmUgQklfSFAzMDBfTU9ERUwJCTB4ODAwMAkvKiBtb2RlbCAodV9sb25nKSAqLworI2RlZmluZSBCSV9IUDMwMF9VQVJUX1NDT0RFCTB4ODAwMQkvKiBVQVJUIHNlbGVjdCBjb2RlICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0hQMzAwX1VBUlRfQUREUgkweDgwMDIJLyogcGh5cy4gYWRkciBvZiBVQVJUICh1X2xvbmcpICovCisKKyAgICAvKgorICAgICAqIFN0dWZmIGZvciBib290aW5mbyBpbnRlcmZhY2UgdmVyc2lvbmluZworICAgICAqCisgICAgICogQXQgdGhlIHN0YXJ0IG9mIGtlcm5lbCBjb2RlLCBhICdzdHJ1Y3QgYm9vdHZlcnNpb24nIGlzIGxvY2F0ZWQuCisgICAgICogYm9vdHN0cmFwIGNoZWNrcyBmb3IgYSBtYXRjaGluZyB2ZXJzaW9uIG9mIHRoZSBpbnRlcmZhY2UgYmVmb3JlIGJvb3RpbmcKKyAgICAgKiBhIGtlcm5lbCwgdG8gYXZvaWQgdXNlciBjb25mdXNpb24gaWYga2VybmVsIGFuZCBib290c3RyYXAgZG9uJ3Qgd29yaworICAgICAqIHRvZ2V0aGVyIDotKQorICAgICAqCisgICAgICogSWYgaW5jb21wYXRpYmxlIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlIGJvb3RpbmZvIGludGVyZmFjZSwgdGhlIG1ham9yCisgICAgICogbnVtYmVyIGJlbG93IHNob3VsZCBiZSBzdGVwcGVkIChhbmQgdGhlIG1pbm9yIHJlc2V0IHRvIDApIGZvciB0aGUKKyAgICAgKiBhcHByb3ByaWF0ZSBtYWNoaW5lLiBJZiBhIGNoYW5nZSBpcyBiYWNrd2FyZC1jb21wYXRpYmxlLCB0aGUgbWlub3IKKyAgICAgKiBzaG91bGQgYmUgc3RlcHBlZC4gIkJhY2t3YXJkcy1jb21wYXRpYmxlIiBtZWFucyB0aGF0IGJvb3Rpbmcgd2lsbCB3b3JrLAorICAgICAqIGJ1dCBjZXJ0YWluIGZlYXR1cmVzIG1heSBub3QuCisgICAgICovCisKKyNkZWZpbmUgQk9PVElORk9WX01BR0lDCQkJMHg0MjQ5NTYxQQkvKiAnQklWXlonICovCisjZGVmaW5lIE1LX0JJX1ZFUlNJT04obWFqb3IsbWlub3IpCSgoKG1ham9yKTw8MTYpKyhtaW5vcikpCisjZGVmaW5lIEJJX1ZFUlNJT05fTUFKT1IodikJCSgoKHYpID4+IDE2KSAmIDB4ZmZmZikKKyNkZWZpbmUgQklfVkVSU0lPTl9NSU5PUih2KQkJKCh2KSAmIDB4ZmZmZikKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGJvb3R2ZXJzaW9uIHsKKyAgICB1bnNpZ25lZCBzaG9ydCBicmFuY2g7CisgICAgdW5zaWduZWQgbG9uZyBtYWdpYzsKKyAgICBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgbWFjaHR5cGU7CisJdW5zaWduZWQgbG9uZyB2ZXJzaW9uOworICAgIH0gbWFjaHZlcnNpb25zWzBdOworfTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIEFNSUdBX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMiwgMCApCisjZGVmaW5lIEFUQVJJX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMiwgMSApCisjZGVmaW5lIE1BQ19CT09USV9WRVJTSU9OICAgICAgTUtfQklfVkVSU0lPTiggMiwgMCApCisjZGVmaW5lIE1WTUUxNDdfQk9PVElfVkVSU0lPTiAgTUtfQklfVkVSU0lPTiggMiwgMCApCisjZGVmaW5lIE1WTUUxNnhfQk9PVElfVkVSU0lPTiAgTUtfQklfVkVSU0lPTiggMiwgMCApCisjZGVmaW5lIEJWTUU2MDAwX0JPT1RJX1ZFUlNJT04gTUtfQklfVkVSU0lPTiggMiwgMCApCisjZGVmaW5lIFE0MF9CT09USV9WRVJTSU9OICAgICAgTUtfQklfVkVSU0lPTiggMiwgMCApCisjZGVmaW5lIEhQMzAwX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMiwgMCApCisKKyNpZmRlZiBCT09USU5GT19DT01QQVRfMV8wCisKKyAgICAvKgorICAgICAqICBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGJvb3RpbmZvIGludGVyZmFjZSB2ZXJzaW9uIDEuMAorICAgICAqLworCisjZGVmaW5lIENPTVBBVF9BTUlHQV9CT09USV9WRVJTSU9OICAgIE1LX0JJX1ZFUlNJT04oIDEsIDAgKQorI2RlZmluZSBDT01QQVRfQVRBUklfQk9PVElfVkVSU0lPTiAgICBNS19CSV9WRVJTSU9OKCAxLCAwICkKKyNkZWZpbmUgQ09NUEFUX01BQ19CT09USV9WRVJTSU9OICAgICAgTUtfQklfVkVSU0lPTiggMSwgMCApCisKKyNpbmNsdWRlIDxsaW51eC96b3Jyby5oPgorCisjZGVmaW5lIENPTVBBVF9OVU1fQVVUTyAgICAxNgorCitzdHJ1Y3QgY29tcGF0X2JpX0FtaWdhIHsKKyAgICBpbnQgbW9kZWw7CisgICAgaW50IG51bV9hdXRvY29uOworICAgIHN0cnVjdCBDb25maWdEZXYgYXV0b2NvbltDT01QQVRfTlVNX0FVVE9dOworICAgIHVuc2lnbmVkIGxvbmcgY2hpcF9zaXplOworICAgIHVuc2lnbmVkIGNoYXIgdmJsYW5rOworICAgIHVuc2lnbmVkIGNoYXIgcHNmcmVxOworICAgIHVuc2lnbmVkIGxvbmcgZWNsb2NrOworICAgIHVuc2lnbmVkIGxvbmcgY2hpcHNldDsKKyAgICB1bnNpZ25lZCBsb25nIGh3X3ByZXNlbnQ7Cit9OworCitzdHJ1Y3QgY29tcGF0X2JpX0F0YXJpIHsKKyAgICB1bnNpZ25lZCBsb25nIGh3X3ByZXNlbnQ7CisgICAgdW5zaWduZWQgbG9uZyBtY2hfY29va2llOworfTsKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGNvbXBhdF9iaV9NYWNpbnRvc2gKK3sKKwl1bnNpZ25lZCBsb25nIHZpZGVvYWRkcjsKKwl1bnNpZ25lZCBsb25nIHZpZGVvcm93OworCXVuc2lnbmVkIGxvbmcgdmlkZW9kZXB0aDsKKwl1bnNpZ25lZCBsb25nIGRpbWVuc2lvbnM7CisJdW5zaWduZWQgbG9uZyBhcmdzOworCXVuc2lnbmVkIGxvbmcgYm9vdHRpbWU7CisJdW5zaWduZWQgbG9uZyBnbXRiaWFzOworCXVuc2lnbmVkIGxvbmcgYm9vdHZlcjsKKwl1bnNpZ25lZCBsb25nIHZpZGVvbG9naWNhbDsKKwl1bnNpZ25lZCBsb25nIHNjY2Jhc2U7CisJdW5zaWduZWQgbG9uZyBpZDsKKwl1bnNpZ25lZCBsb25nIG1lbXNpemU7CisJdW5zaWduZWQgbG9uZyBzZXJpYWxtZjsKKwl1bnNpZ25lZCBsb25nIHNlcmlhbGhzazsKKwl1bnNpZ25lZCBsb25nIHNlcmlhbGdwaTsKKwl1bnNpZ25lZCBsb25nIHByaW50bWY7CisJdW5zaWduZWQgbG9uZyBwcmludGhzazsKKwl1bnNpZ25lZCBsb25nIHByaW50Z3BpOworCXVuc2lnbmVkIGxvbmcgY3B1aWQ7CisJdW5zaWduZWQgbG9uZyByb21iYXNlOworCXVuc2lnbmVkIGxvbmcgYWRiZGVsYXk7CisJdW5zaWduZWQgbG9uZyB0aW1lZGJyYTsKK307CisKKyNlbmRpZgorCitzdHJ1Y3QgY29tcGF0X21lbV9pbmZvIHsKKyAgICB1bnNpZ25lZCBsb25nIGFkZHI7CisgICAgdW5zaWduZWQgbG9uZyBzaXplOworfTsKKworI2RlZmluZSBDT01QQVRfTlVNX01FTUlORk8gIDQKKworI2RlZmluZSBDT01QQVRfQ1BVQl82ODAyMCAwCisjZGVmaW5lIENPTVBBVF9DUFVCXzY4MDMwIDEKKyNkZWZpbmUgQ09NUEFUX0NQVUJfNjgwNDAgMgorI2RlZmluZSBDT01QQVRfQ1BVQl82ODA2MCAzCisjZGVmaW5lIENPTVBBVF9GUFVCXzY4ODgxIDUKKyNkZWZpbmUgQ09NUEFUX0ZQVUJfNjg4ODIgNgorI2RlZmluZSBDT01QQVRfRlBVQl82ODA0MCA3CisjZGVmaW5lIENPTVBBVF9GUFVCXzY4MDYwIDgKKworI2RlZmluZSBDT01QQVRfQ1BVXzY4MDIwICAgICgxPDxDT01QQVRfQ1BVQl82ODAyMCkKKyNkZWZpbmUgQ09NUEFUX0NQVV82ODAzMCAgICAoMTw8Q09NUEFUX0NQVUJfNjgwMzApCisjZGVmaW5lIENPTVBBVF9DUFVfNjgwNDAgICAgKDE8PENPTVBBVF9DUFVCXzY4MDQwKQorI2RlZmluZSBDT01QQVRfQ1BVXzY4MDYwICAgICgxPDxDT01QQVRfQ1BVQl82ODA2MCkKKyNkZWZpbmUgQ09NUEFUX0NQVV9NQVNLICAgICAoMzEpCisjZGVmaW5lIENPTVBBVF9GUFVfNjg4ODEgICAgKDE8PENPTVBBVF9GUFVCXzY4ODgxKQorI2RlZmluZSBDT01QQVRfRlBVXzY4ODgyICAgICgxPDxDT01QQVRfRlBVQl82ODg4MikKKyNkZWZpbmUgQ09NUEFUX0ZQVV82ODA0MCAgICAoMTw8Q09NUEFUX0ZQVUJfNjgwNDApCisjZGVmaW5lIENPTVBBVF9GUFVfNjgwNjAgICAgKDE8PENPTVBBVF9GUFVCXzY4MDYwKQorI2RlZmluZSBDT01QQVRfRlBVX01BU0sgICAgICgweGZlMCkKKworI2RlZmluZSBDT01QQVRfQ0xfU0laRSAgICAgICgyNTYpCisKK3N0cnVjdCBjb21wYXRfYm9vdGluZm8geworICAgIHVuc2lnbmVkIGxvbmcgbWFjaHR5cGU7CisgICAgdW5zaWduZWQgbG9uZyBjcHV0eXBlOworICAgIHN0cnVjdCBjb21wYXRfbWVtX2luZm8gbWVtb3J5W0NPTVBBVF9OVU1fTUVNSU5GT107CisgICAgaW50IG51bV9tZW1vcnk7CisgICAgdW5zaWduZWQgbG9uZyByYW1kaXNrX3NpemU7CisgICAgdW5zaWduZWQgbG9uZyByYW1kaXNrX2FkZHI7CisgICAgY2hhciBjb21tYW5kX2xpbmVbQ09NUEFUX0NMX1NJWkVdOworICAgIHVuaW9uIHsKKwlzdHJ1Y3QgY29tcGF0X2JpX0FtaWdhICAgICBiaV9hbWk7CisJc3RydWN0IGNvbXBhdF9iaV9BdGFyaSAgICAgYmlfYXRhOworCXN0cnVjdCBjb21wYXRfYmlfTWFjaW50b3NoIGJpX21hYzsKKyAgICB9IGJpX3VuOworfTsKKworI2RlZmluZSBiaV9hbWlnYQliaV91bi5iaV9hbWkKKyNkZWZpbmUgYmlfYXRhcmkJYmlfdW4uYmlfYXRhCisjZGVmaW5lIGJpX21hYwkJYmlfdW4uYmlfbWFjCisKKyNlbmRpZiAvKiBCT09USU5GT19DT01QQVRfMV8wICovCisKKworI2VuZGlmIC8qIF9NNjhLX0JPT1RJTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYnVnLmggYi9pbmNsdWRlL2FzbS1tNjhrL2J1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMWQyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2J1Zy5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX002OEtfQlVHX0gKKyNkZWZpbmUgX002OEtfQlVHX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKKyNpZm5kZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgQlVHKCkgZG8geyBcCisJcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorCWFzbSB2b2xhdGlsZSgiaWxsZWdhbCIpOyBcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgQlVHKCkgZG8geyBcCisJcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorCXBhbmljKCJCVUchIik7IFwKK30gd2hpbGUgKDApCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIEJVRygpIGRvIHsgXAorCWFzbSB2b2xhdGlsZSgiaWxsZWdhbCIpOyBcCit9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgSEFWRV9BUkNIX0JVRworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYnVncy5oIGIvaW5jbHVkZS9hc20tbTY4ay9idWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxOTM1NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYnVncy5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tbTY4ay9idWdzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0ICBMaW51cyBUb3J2YWxkcworICovCisKKy8qCisgKiBUaGlzIGlzIGluY2x1ZGVkIGJ5IGluaXQvbWFpbi5jIHRvIGNoZWNrIGZvciBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1Z3MuCisgKgorICogTmVlZHM6CisgKgl2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CisgKi8KKworZXh0ZXJuIHZvaWQgY2hlY2tfYnVncyh2b2lkKTsJLyogaW4gYXJjaC9tNjhrL2tlcm5lbC9zZXR1cC5jICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2J2bWU2MDAwaHcuaCBiL2luY2x1ZGUvYXNtLW02OGsvYnZtZTYwMDBody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTg1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2J2bWU2MDAwaHcuaApAQCAtMCwwICsxLDE1MCBAQAorI2lmbmRlZiBfTTY4S19CVk1FNjAwMEhXX0hfCisjZGVmaW5lIF9NNjhLX0JWTUU2MDAwSFdfSF8KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworLyoKKyAqIFBJVCBzdHJ1Y3R1cmUKKyAqLworCisjZGVmaW5lIEJWTUVfUElUX0JBU0UJMHhmZmEwMDAwMAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhcgorCXBhZF9hWzNdLCBwZ2NyLAorCXBhZF9iWzNdLCBwc3JyLAorCXBhZF9jWzNdLCBwYWRkciwKKwlwYWRfZFszXSwgcGJkZHIsCisJcGFkX2VbM10sIHBjZGRyLAorCXBhZF9mWzNdLCBwaXZyLAorCXBhZF9nWzNdLCBwYWNyLAorCXBhZF9oWzNdLCBwYmNyLAorCXBhZF9pWzNdLCBwYWRyLAorCXBhZF9qWzNdLCBwYmRyLAorCXBhZF9rWzNdLCBwYWFyLAorCXBhZF9sWzNdLCBwYmFyLAorCXBhZF9tWzNdLCBwY2RyLAorCXBhZF9uWzNdLCBwc3IsCisJcGFkX29bM10sIHJlczEsCisJcGFkX3BbM10sIHJlczIsCisJcGFkX3FbM10sIHRjciwKKwlwYWRfclszXSwgdGl2ciwKKwlwYWRfc1szXSwgcmVzMywKKwlwYWRfdFszXSwgY3ByaCwKKwlwYWRfdVszXSwgY3BybSwKKwlwYWRfdlszXSwgY3BybCwKKwlwYWRfd1szXSwgcmVzNCwKKwlwYWRfeFszXSwgY3JoLAorCXBhZF95WzNdLCBjcm0sCisJcGFkX3pbM10sIGNybCwKKwlwYWRfQVszXSwgdHNyLAorCXBhZF9CWzNdLCByZXM1OworfSBQaXRSZWdzX3QsICpQaXRSZWdzUHRyOworCisjZGVmaW5lIGJ2bWVwaXQgICAoKCoodm9sYXRpbGUgUGl0UmVnc1B0cikoQlZNRV9QSVRfQkFTRSkpKQorCisjZGVmaW5lIEJWTUVfUlRDX0JBU0UJMHhmZjkwMDAwMAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhcgorCXBhZF9hWzNdLCBtc3IsCisJcGFkX2JbM10sIHQwY3JfcnRtciwKKwlwYWRfY1szXSwgdDFjcl9vbXIsCisJcGFkX2RbM10sIHBmcl9pY3IwLAorCXBhZF9lWzNdLCBpcnJfaWNyMSwKKwlwYWRfZlszXSwgYmNkX3Rlbm1zLAorCXBhZF9nWzNdLCBiY2Rfc2VjLAorCXBhZF9oWzNdLCBiY2RfbWluLAorCXBhZF9pWzNdLCBiY2RfaHIsCisJcGFkX2pbM10sIGJjZF9kb20sCisJcGFkX2tbM10sIGJjZF9tdGgsCisJcGFkX2xbM10sIGJjZF95ZWFyLAorCXBhZF9tWzNdLCBiY2RfdWpjYywKKwlwYWRfblszXSwgYmNkX2hqY2MsCisJcGFkX29bM10sIGJjZF9kb3csCisJcGFkX3BbM10sIHQwbHNiLAorCXBhZF9xWzNdLCB0MG1zYiwKKwlwYWRfclszXSwgdDFsc2IsCisJcGFkX3NbM10sIHQxbXNiLAorCXBhZF90WzNdLCBjbXBfc2VjLAorCXBhZF91WzNdLCBjbXBfbWluLAorCXBhZF92WzNdLCBjbXBfaHIsCisJcGFkX3dbM10sIGNtcF9kb20sCisJcGFkX3hbM10sIGNtcF9tdGgsCisJcGFkX3lbM10sIGNtcF9kb3csCisJcGFkX3pbM10sIHNhdl9zZWMsCisJcGFkX0FbM10sIHNhdl9taW4sCisJcGFkX0JbM10sIHNhdl9ociwKKwlwYWRfQ1szXSwgc2F2X2RvbSwKKwlwYWRfRFszXSwgc2F2X210aCwKKwlwYWRfRVszXSwgcmFtLAorCXBhZF9GWzNdLCB0ZXN0OworfSBSdGNSZWdzX3QsICpSdGNQdHJfdDsKKworCisjZGVmaW5lIEJWTUVfSTU5Nl9CQVNFCTB4ZmYxMDAwMDAKKworI2RlZmluZSBCVk1FX0VUSElSUV9SRUcJMHhmZjIwMDAwYgorCisjZGVmaW5lIEJWTUVfTE9DQUxfSVJRX1NUQVQgIDB4ZmYyMDAwMGYKKworI2RlZmluZSBCVk1FX0VUSEVSUiAgICAgICAgICAweDAyCisjZGVmaW5lIEJWTUVfQUJPUlRfU1RBVFVTICAgIDB4MDgKKworI2RlZmluZSBCVk1FX05DUjUzQzcxMF9CQVNFCTB4ZmYwMDAwMDAKKworI2RlZmluZSBCVk1FX1NDQ19BX0FERFIJMHhmZmIwMDAwYgorI2RlZmluZSBCVk1FX1NDQ19CX0FERFIJMHhmZmIwMDAwMworI2RlZmluZSBCVk1FX1NDQ19SVHhDCTczNzI4MDAKKworI2RlZmluZSBCVk1FX0NPTkZJR19SRUcJMHhmZjUwMDAwMworCisjZGVmaW5lIGNvbmZpZ19yZWdfcHRyCSh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopQlZNRV9DT05GSUdfUkVHCisKKyNkZWZpbmUgQlZNRV9DT05GSUdfU1cxCTB4MDgKKyNkZWZpbmUgQlZNRV9DT05GSUdfU1cyCTB4MDQKKyNkZWZpbmUgQlZNRV9DT05GSUdfU1czCTB4MDIKKyNkZWZpbmUgQlZNRV9DT05GSUdfU1c0CTB4MDEKKworCisjZGVmaW5lIEJWTUVfSVJRX1RZUEVfUFJJTwkwCisKKyNkZWZpbmUgQlZNRV9JUlFfUFJOCQkweDU0CisjZGVmaW5lIEJWTUVfSVJRX0k1OTYJCTB4MWEKKyNkZWZpbmUgQlZNRV9JUlFfU0NTSQkJMHgxYgorI2RlZmluZSBCVk1FX0lSUV9USU1FUgkJMHg1OQorI2RlZmluZSBCVk1FX0lSUV9SVEMJCTB4MWUKKyNkZWZpbmUgQlZNRV9JUlFfQUJPUlQJCTB4MWYKKworLyogU0NDIGludGVycnVwdHMgKi8KKyNkZWZpbmUgQlZNRV9JUlFfU0NDX0JBU0UJCTB4NDAKKyNkZWZpbmUgQlZNRV9JUlFfU0NDQl9UWAkJMHg0MAorI2RlZmluZSBCVk1FX0lSUV9TQ0NCX1NUQVQJCTB4NDIKKyNkZWZpbmUgQlZNRV9JUlFfU0NDQl9SWAkJMHg0NAorI2RlZmluZSBCVk1FX0lSUV9TQ0NCX1NQQ09ORAkJMHg0NgorI2RlZmluZSBCVk1FX0lSUV9TQ0NBX1RYCQkweDQ4CisjZGVmaW5lIEJWTUVfSVJRX1NDQ0FfU1RBVAkJMHg0YQorI2RlZmluZSBCVk1FX0lSUV9TQ0NBX1JYCQkweDRjCisjZGVmaW5lIEJWTUVfSVJRX1NDQ0FfU1BDT05ECQkweDRlCisKKy8qIEFkZHJlc3MgY29udHJvbCByZWdpc3RlcnMgKi8KKworI2RlZmluZSBCVk1FX0FDUl9BMzJWQkEJCTB4ZmY0MDAwMDMKKyNkZWZpbmUgQlZNRV9BQ1JfQTMyTVNLCQkweGZmNDEwMDAzCisjZGVmaW5lIEJWTUVfQUNSX0EyNFZCQQkJMHhmZjQyMDAwMworI2RlZmluZSBCVk1FX0FDUl9BMjRNU0sJCTB4ZmY0MzAwMDMKKyNkZWZpbmUgQlZNRV9BQ1JfQTE2VkJBCQkweGZmNDQwMDAzCisjZGVmaW5lIEJWTUVfQUNSX0EzMkxCQQkJMHhmZjQ1MDAwMworI2RlZmluZSBCVk1FX0FDUl9BMjRMQkEJCTB4ZmY0NjAwMDMKKyNkZWZpbmUgQlZNRV9BQ1JfQUREUkNUTAkweGZmNDcwMDAzCisKKyNkZWZpbmUgYnZtZV9hY3JfYTMydmJhCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilCVk1FX0FDUl9BMzJWQkEKKyNkZWZpbmUgYnZtZV9hY3JfYTMybXNrCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilCVk1FX0FDUl9BMzJNU0sKKyNkZWZpbmUgYnZtZV9hY3JfYTI0dmJhCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilCVk1FX0FDUl9BMjRWQkEKKyNkZWZpbmUgYnZtZV9hY3JfYTI0bXNrCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilCVk1FX0FDUl9BMjRNU0sKKyNkZWZpbmUgYnZtZV9hY3JfYTE2dmJhCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilCVk1FX0FDUl9BMTZWQkEKKyNkZWZpbmUgYnZtZV9hY3JfYTMybGJhCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilCVk1FX0FDUl9BMzJMQkEKKyNkZWZpbmUgYnZtZV9hY3JfYTI0bGJhCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilCVk1FX0FDUl9BMjRMQkEKKyNkZWZpbmUgYnZtZV9hY3JfYWRkcmN0bAkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilCVk1FX0FDUl9BRERSQ1RMCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9ieXRlb3JkZXIuaCBiL2luY2x1ZGUvYXNtLW02OGsvYnl0ZW9yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFkNDIwYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYnl0ZW9yZGVyLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfTTY4S19CWVRFT1JERVJfSAorI2RlZmluZSBfTTY4S19CWVRFT1JERVJfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworI2lmZGVmIF9fR05VQ19fCisKK3N0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19fYXJjaF9fc3dhYjMyKF9fdTMyIHZhbCkKK3sKKwlfX2FzbV9fKCJyb2x3ICM4LCUwOyBzd2FwICUwOyByb2x3ICM4LCUwIiA6ICI9ZCIgKHZhbCkgOiAiMCIgKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisjZGVmaW5lIF9fYXJjaF9fc3dhYjMyKHgpIF9fX2FyY2hfX3N3YWIzMih4KQorCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQorIyAgZGVmaW5lIF9fQllURU9SREVSX0hBU19VNjRfXworIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaD4KKworI2VuZGlmIC8qIF9NNjhLX0JZVEVPUkRFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2NhY2hlLmggYi9pbmNsdWRlL2FzbS1tNjhrL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE2MWZkMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvY2FjaGUuaApAQCAtMCwwICsxLDEzIEBACisvKgorICogaW5jbHVkZS9hc20tbTY4ay9jYWNoZS5oCisgKi8KKyNpZm5kZWYgX19BUkNIX002OEtfQ0FDSEVfSAorI2RlZmluZSBfX0FSQ0hfTTY4S19DQUNIRV9ICisKKy8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCisjZGVmaW5lICAgICAgICBMMV9DQUNIRV9TSElGVCAgNAorI2RlZmluZSAgICAgICAgTDFfQ0FDSEVfQllURVMgICgxPDwgTDFfQ0FDSEVfU0hJRlQpCisKKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlRfTUFYIDQJLyogbGFyZ2VzdCBMMSB3aGljaCB0aGlzIGFyY2ggc3VwcG9ydHMgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2NhY2hlY3RsLmggYi9pbmNsdWRlL2FzbS1tNjhrL2NhY2hlY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1OTc4ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvY2FjaGVjdGwuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9NNjhLX0NBQ0hFQ1RMX0gKKyNkZWZpbmUgX002OEtfQ0FDSEVDVExfSAorCisvKiBEZWZpbml0aW9ucyBmb3IgdGhlIGNhY2hlZmx1c2ggc3lzdGVtIGNhbGwuICAqLworCisjZGVmaW5lIEZMVVNIX1NDT1BFX0xJTkUgICAgMQkvKiBGbHVzaCBhIGNhY2hlIGxpbmUgKi8KKyNkZWZpbmUgRkxVU0hfU0NPUEVfUEFHRSAgICAyCS8qIEZsdXNoIGEgcGFnZSAqLworI2RlZmluZSBGTFVTSF9TQ09QRV9BTEwgICAgIDMJLyogRmx1c2ggdGhlIHdob2xlIGNhY2hlIC0tIHN1cGVydXNlciBvbmx5ICovCisKKyNkZWZpbmUgRkxVU0hfQ0FDSEVfREFUQSAgICAxCS8qIFdyaXRlYmFjayBhbmQgZmx1c2ggZGF0YSBjYWNoZSAqLworI2RlZmluZSBGTFVTSF9DQUNIRV9JTlNOICAgIDIJLyogRmx1c2ggaW5zdHJ1Y3Rpb24gY2FjaGUgKi8KKyNkZWZpbmUgRkxVU0hfQ0FDSEVfQk9USCAgICAzCS8qIEZsdXNoIGJvdGggY2FjaGVzICovCisKKyNlbmRpZiAvKiBfTTY4S19DQUNIRUNUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLW02OGsvY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NzczOTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2NhY2hlZmx1c2guaApAQCAtMCwwICsxLDE0OSBAQAorI2lmbmRlZiBfTTY4S19DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX002OEtfQ0FDSEVGTFVTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisvKgorICogQ2FjaGUgaGFuZGxpbmcgZnVuY3Rpb25zCisgKi8KKworI2RlZmluZSBmbHVzaF9pY2FjaGUoKQkJCQkJCVwKKyh7CQkJCQkJCQlcCisJaWYgKENQVV9JU18wNDBfT1JfMDYwKQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibm9wXG5cdCIJCQlcCisJCQkJICAgICAiLmNoaXAgNjgwNDBcblx0IgkJXAorCQkJCSAgICAgImNpbnZhICUlaWNcblx0IgkJXAorCQkJCSAgICAgIi5jaGlwIDY4ayIgOiApOwkJXAorCWVsc2UgewkJCQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgX3RtcDsJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ZWMgJSVjYWNyLCUwXG5cdCIJXAorCQkJCSAgICAgIm9ydyAlMSwlMFxuXHQiCQlcCisJCQkJICAgICAibW92ZWMgJTAsJSVjYWNyIgkJXAorCQkJCSAgICAgOiAiPSZkIiAoX3RtcCkJCVwKKwkJCQkgICAgIDogImlkIiAoRkxVU0hfSSkpOwlcCisJfQkJCQkJCQlcCit9KQorCisvKgorICogaW52YWxpZGF0ZSB0aGUgY2FjaGUgZm9yIHRoZSBzcGVjaWZpZWQgbWVtb3J5IHJhbmdlLgorICogSXQgc3RhcnRzIGF0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwZWNpZmllZCBmb3IKKyAqIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMuCisgKi8KK2V4dGVybiB2b2lkIGNhY2hlX2NsZWFyKHVuc2lnbmVkIGxvbmcgcGFkZHIsIGludCBsZW4pOworLyoKKyAqIHB1c2ggYW55IGRpcnR5IGNhY2hlIGluIHRoZSBzcGVjaWZpZWQgbWVtb3J5IHJhbmdlLgorICogSXQgc3RhcnRzIGF0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwZWNpZmllZCBmb3IKKyAqIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMuCisgKi8KK2V4dGVybiB2b2lkIGNhY2hlX3B1c2godW5zaWduZWQgbG9uZyBwYWRkciwgaW50IGxlbik7CisKKy8qCisgKiBwdXNoIGFuZCBpbnZhbGlkYXRlIHBhZ2VzIGluIHRoZSBzcGVjaWZpZWQgdXNlciB2aXJ0dWFsCisgKiBtZW1vcnkgcmFuZ2UuCisgKi8KK2V4dGVybiB2b2lkIGNhY2hlX3B1c2hfdih1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgbGVuKTsKKworLyogY2FjaGUgY29kZSAqLworI2RlZmluZSBGTFVTSF9JX0FORF9ECSgweDAwMDAwODA4KQorI2RlZmluZSBGTFVTSF9JCQkoMHgwMDAwMDAwOCkKKworLyogVGhpcyBpcyBuZWVkZWQgd2hlbmV2ZXIgdGhlIHZpcnR1YWwgbWFwcGluZyBvZiB0aGUgY3VycmVudAorICAgcHJvY2VzcyBjaGFuZ2VzLiAgKi8KKyNkZWZpbmUgX19mbHVzaF9jYWNoZV9hbGwoKQkJCQkJXAorKHsJCQkJCQkJCVwKKwlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJub3Bcblx0IgkJCVwKKwkJCQkgICAgICIuY2hpcCA2ODA0MFxuXHQiCQlcCisJCQkJICAgICAiY3B1c2hhICVkY1xuXHQiCQlcCisJCQkJICAgICAiLmNoaXAgNjhrIik7CQlcCisJZWxzZSB7CQkJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyBfdG1wOwkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZlYyAlJWNhY3IsJTBcblx0IglcCisJCQkJICAgICAib3J3ICUxLCUwXG5cdCIJCVwKKwkJCQkgICAgICJtb3ZlYyAlMCwlJWNhY3IiCQlcCisJCQkJICAgICA6ICI9JmQiIChfdG1wKQkJXAorCQkJCSAgICAgOiAiZGkiIChGTFVTSF9JX0FORF9EKSk7CVwKKwl9CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19mbHVzaF9jYWNoZV8wMzAoKQkJCQkJXAorKHsJCQkJCQkJCVwKKwlpZiAoQ1BVX0lTXzAyMF9PUl8wMzApIHsJCQkJXAorCQl1bnNpZ25lZCBsb25nIF90bXA7CQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdmVjICUlY2FjciwlMFxuXHQiCVwKKwkJCQkgICAgICJvcncgJTEsJTBcblx0IgkJXAorCQkJCSAgICAgIm1vdmVjICUwLCUlY2FjciIJCVwKKwkJCQkgICAgIDogIj0mZCIgKF90bXApCQlcCisJCQkJICAgICA6ICJkaSIgKEZMVVNIX0lfQU5EX0QpKTsJXAorCX0JCQkJCQkJXAorfSkKKworI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKSBfX2ZsdXNoX2NhY2hlX2FsbCgpCisKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlmbHVzaF9jYWNoZV9hbGwoKQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaWYgKG1tID09IGN1cnJlbnQtPm1tKQorCQlfX2ZsdXNoX2NhY2hlXzAzMCgpOworfQorCisvKiBmbHVzaF9jYWNoZV9yYW5nZS9mbHVzaF9jYWNoZV9wYWdlIG11c3QgYmUgbWFjcm9zIHRvIGF2b2lkCisgICBhIGRlcGVuZGVuY3kgb24gbGludXgvbW0uaCwgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaWxlLi4uICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+bW0pCisJICAgICAgICBfX2ZsdXNoX2NhY2hlXzAzMCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuKQoreworCWlmICh2bWEtPnZtX21tID09IGN1cnJlbnQtPm1tKQorCSAgICAgICAgX19mbHVzaF9jYWNoZV8wMzAoKTsKK30KKworCisvKiBQdXNoIHRoZSBwYWdlIGF0IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgYW5kIGNsZWFyIHRoZSBpY2FjaGUgKi8KKy8qIFJaOiB1c2UgY3B1c2ggJWJjIGluc3RlYWQgb2YgY3B1c2ggJWRjLCBjaW52ICVpYyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfcGFnZV90b19yYW0odm9pZCAqdmFkZHIpCit7CisJaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJub3Bcblx0IgorCQkJCSAgICAgIi5jaGlwIDY4MDQwXG5cdCIKKwkJCQkgICAgICJjcHVzaHAgJSViYywoJTApXG5cdCIKKwkJCQkgICAgICIuY2hpcCA2OGsiCisJCQkJICAgICA6IDogImEiIChfX3BhKHZhZGRyKSkpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgX3RtcDsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdmVjICUlY2FjciwlMFxuXHQiCisJCQkJICAgICAib3J3ICUxLCUwXG5cdCIKKwkJCQkgICAgICJtb3ZlYyAlMCwlJWNhY3IiCisJCQkJICAgICA6ICI9JmQiIChfdG1wKQorCQkJCSAgICAgOiAiZGkiIChGTFVTSF9JKSk7CisJfQorfQorCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQlfX2ZsdXNoX3BhZ2VfdG9fcmFtKHBhZ2VfYWRkcmVzcyhwYWdlKSkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEsIHBhZ2UpCV9fZmx1c2hfcGFnZV90b19yYW0ocGFnZV9hZGRyZXNzKHBhZ2UpKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEscGcsYWRyLGxlbikJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwlkbyB7CQkJCQkJCVwKKwkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7XAorCQltZW1jcHkoZHN0LCBzcmMsIGxlbik7CQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorCWRvIHsJCQkJCQkJXAorCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTtcCisJCW1lbWNweShkc3QsIHNyYywgbGVuKTsJCQkJXAorCX0gd2hpbGUgKDApCisKK2V4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZW5kYWRkcik7CisKKyNlbmRpZiAvKiBfTTY4S19DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLW02OGsvY2hlY2tzdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODg2MGMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9jaGVja3N1bS5oCkBAIC0wLDAgKzEsMTUwIEBACisjaWZuZGVmIF9NNjhLX0NIRUNLU1VNX0gKKyNkZWZpbmUgX002OEtfQ0hFQ0tTVU1fSAorCisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgYSBtZW1vcnkgYmxvY2sgYXQgYnVmZiwgbGVuZ3RoIGxlbiwKKyAqIGFuZCBhZGRzIGluICJzdW0iICgzMi1iaXQpCisgKgorICogcmV0dXJucyBhIDMyLWJpdCBudW1iZXIgc3VpdGFibGUgZm9yIGZlZWRpbmcgaW50byBpdHNlbGYKKyAqIG9yIGNzdW1fdGNwdWRwX21hZ2ljCisgKgorICogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGV2ZW4gbGVuZ3RocywgZXhjZXB0CisgKiBmb3IgdGhlIGxhc3QgZnJhZ21lbnQsIHdoaWNoIG1heSBiZSBvZGQKKyAqCisgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKKyAqLwordW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSk7CisKKy8qCisgKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSBzcmMgd2hpbGUgaXQKKyAqIGNoZWNrc3VtcworICoKKyAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgorICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKKyAqLworCitleHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCisJCQkJCQl1bnNpZ25lZCBjaGFyICpkc3QsCisJCQkJCQlpbnQgbGVuLCBpbnQgc3VtLAorCQkJCQkJaW50ICpjc3VtX2Vycik7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCisJCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbiwKKwkJCQkJICAgICAgaW50IHN1bSk7CisKKy8qCisgKglUaGlzIGlzIGEgdmVyc2lvbiBvZiBpcF9jb21wdXRlX2NzdW0oKSBvcHRpbWl6ZWQgZm9yIElQIGhlYWRlcnMsCisgKgl3aGljaCBhbHdheXMgY2hlY2tzdW0gb24gNCBvY3RldCBib3VuZGFyaWVzLgorICoKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydAoraXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKmlwaCwgdW5zaWduZWQgaW50IGlobCkKK3sKKwl1bnNpZ25lZCBpbnQgc3VtID0gMDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gKCJzdWJxdyAjMSwlMlxuIgorCQkgIjE6XHQiCisJCSAibW92ZWwgJTFAKywlM1xuXHQiCisJCSAiYWRkeGwgJTMsJTBcblx0IgorCQkgImRicmEgICUyLDFiXG5cdCIKKwkJICJtb3ZlbCAlMCwlM1xuXHQiCisJCSAic3dhcCAgJTNcblx0IgorCQkgImFkZHh3ICUzLCUwXG5cdCIKKwkJICJjbHJ3ICAlM1xuXHQiCisJCSAiYWRkeHcgJTMsJTBcblx0IgorCQkgOiAiPWQiIChzdW0pLCAiPSZhIiAoaXBoKSwgIj0mZCIgKGlobCksICI9JmQiICh0bXApCisJCSA6ICIwIiAoc3VtKSwgIjEiIChpcGgpLCAiMiIgKGlobCkKKwkJIDogIm1lbW9yeSIpOworCXJldHVybiB+c3VtOworfQorCisvKgorICoJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0KKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wID0gc3VtOworCV9fYXNtX18oInN3YXAgJTFcblx0IgorCQkiYWRkdyAlMSwgJTBcblx0IgorCQkiY2xydyAlMVxuXHQiCisJCSJhZGR4dyAlMSwgJTAiCisJCTogIj0mZCIgKHN1bSksICI9JmQiICh0bXApCisJCTogIjAiIChzdW0pLCAiMSIgKHRtcCkpOworCXJldHVybiB+c3VtOworfQorCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Citjc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkgIHVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKQoreworCV9fYXNtX18gKCJhZGRsICAlMiwlMFxuXHQiCisJCSAiYWRkeGwgJTMsJTBcblx0IgorCQkgImFkZHhsICU0LCUwXG5cdCIKKwkJICJjbHJsICUxXG5cdCIKKwkJICJhZGR4bCAlMSwlMCIKKwkJIDogIj0mZCIgKHN1bSksICI9ZCIgKHNhZGRyKQorCQkgOiAiZyIgKGRhZGRyKSwgIjEiIChzYWRkciksICJkIiAobGVuICsgcHJvdG8pLAorCQkgICAiMCIgKHN1bSkpOworCXJldHVybiBzdW07Cit9CisKKworLyoKKyAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCisgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludAorY3N1bV90Y3B1ZHBfbWFnaWModW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkgIHVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKQoreworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKK30KKworLyoKKyAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKKyAqIGluIGljbXAuYworICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQKK2lwX2NvbXB1dGVfY3N1bSh1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbikKK3sKKwlyZXR1cm4gY3N1bV9mb2xkIChjc3VtX3BhcnRpYWwoYnVmZiwgbGVuLCAwKSk7Cit9CisKKyNkZWZpbmUgX0hBVkVfQVJDSF9JUFY2X0NTVU0KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IGludAorY3N1bV9pcHY2X21hZ2ljKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCV9fdTMyIGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyB0bXA7CisJX19hc21fXygiYWRkbCAlMkAsJTBcblx0IgorCQkibW92ZWwgJTJAKDQpLCUxXG5cdCIKKwkJImFkZHhsICUxLCUwXG5cdCIKKwkJIm1vdmVsICUyQCg4KSwlMVxuXHQiCisJCSJhZGR4bCAlMSwlMFxuXHQiCisJCSJtb3ZlbCAlMkAoMTIpLCUxXG5cdCIKKwkJImFkZHhsICUxLCUwXG5cdCIKKwkJIm1vdmVsICUzQCwlMVxuXHQiCisJCSJhZGR4bCAlMSwlMFxuXHQiCisJCSJtb3ZlbCAlM0AoNCksJTFcblx0IgorCQkiYWRkeGwgJTEsJTBcblx0IgorCQkibW92ZWwgJTNAKDgpLCUxXG5cdCIKKwkJImFkZHhsICUxLCUwXG5cdCIKKwkJIm1vdmVsICUzQCgxMiksJTFcblx0IgorCQkiYWRkeGwgJTEsJTBcblx0IgorCQkiYWRkeGwgJTQsJTBcblx0IgorCQkiY2xybCAlMVxuXHQiCisJCSJhZGR4bCAlMSwlMCIKKwkJOiAiPSZkIiAoc3VtKSwgIj0mZCIgKHRtcCkKKwkJOiAiYSIgKHNhZGRyKSwgImEiIChkYWRkciksICJkIiAobGVuICsgcHJvdG8pLAorCQkgICIwIiAoc3VtKSk7CisKKwlyZXR1cm4gY3N1bV9mb2xkKHN1bSk7Cit9CisKKyNlbmRpZiAvKiBfTTY4S19DSEVDS1NVTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2NvbnRyZWdzLmggYi9pbmNsdWRlL2FzbS1tNjhrL2NvbnRyZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyMzNlNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvY29udHJlZ3MuaApAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgX002OEtfQ09OVFJFR1NfSAorI2RlZmluZSBfTTY4S19DT05UUkVHU19ICisjaW5jbHVkZSA8YXNtLXNwYXJjL2NvbnRyZWdzLmg+CisjZW5kaWYgLyogX002OEtfQ09OVFJFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9jcHV0aW1lLmggYi9pbmNsdWRlL2FzbS1tNjhrL2NwdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzljNWU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9jcHV0aW1lLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fTTY4S19DUFVUSU1FX0gKKyNkZWZpbmUgX19NNjhLX0NQVVRJTUVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY3B1dGltZS5oPgorCisjZW5kaWYgLyogX19NNjhLX0NQVVRJTUVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9jdXJyZW50LmggYi9pbmNsdWRlL2FzbS1tNjhrL2N1cnJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGU4ZjhjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9jdXJyZW50LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9NNjhLX0NVUlJFTlRfSAorI2RlZmluZSBfTTY4S19DVVJSRU5UX0gKKworcmVnaXN0ZXIgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50IF9fYXNtX18oIiVhMiIpOworCisjZW5kaWYgLyogIShfTTY4S19DVVJSRU5UX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2RlbGF5LmggYi9pbmNsdWRlL2FzbS1tNjhrL2RlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkOTI4NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZGVsYXkuaApAQCAtMCwwICsxLDU3IEBACisjaWZuZGVmIF9NNjhLX0RFTEFZX0gKKyNkZWZpbmUgX002OEtfREVMQVlfSAorCisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQgSGFtaXNoIE1hY2RvbmFsZAorICoKKyAqIERlbGF5IHJvdXRpbmVzLCB1c2luZyBhIHByZS1jb21wdXRlZCAibG9vcHNfcGVyX2ppZmZ5IiB2YWx1ZS4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgiMTogc3VicWwgIzEsJTA7IGpjYyAxYiIKKwkJOiAiPWQiIChsb29wcykgOiAiMCIgKGxvb3BzKSk7Cit9CisKK2V4dGVybiB2b2lkIF9fYmFkX3VkZWxheSh2b2lkKTsKKworLyoKKyAqIFVzZSBvbmx5IGZvciB2ZXJ5IHNtYWxsIGRlbGF5cyAoIDwgMSBtc2VjKS4gIFNob3VsZCBwcm9iYWJseSB1c2UgYQorICogbG9va3VwIHRhYmxlLCByZWFsbHksIGFzIHRoZSBtdWx0aXBsaWNhdGlvbnMgdGFrZSBtdWNoIHRvbyBsb25nIHdpdGgKKyAqIHNob3J0IGRlbGF5cy4gIFRoaXMgaXMgYSAicmVhc29uYWJsZSIgaW1wbGVtZW50YXRpb24sIHRob3VnaCAoYW5kIHRoZQorICogZmlyc3QgY29uc3RhbnQgbXVsdGlwbGljYXRpb25zIGdldHMgb3B0aW1pemVkIGF3YXkgaWYgdGhlIGRlbGF5IGlzCisgKiBhIGNvbnN0YW50KQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19jb25zdF91ZGVsYXkodW5zaWduZWQgbG9uZyB4bG9vcHMpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fICgibXVsdWwgJTIsJTA6JTEiCisJCTogIj1kIiAoeGxvb3BzKSwgIj1kIiAodG1wKQorCQk6ICJkIiAoeGxvb3BzKSwgIjEiIChsb29wc19wZXJfamlmZnkpKTsKKwlfX2RlbGF5KHhsb29wcyAqIEhaKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCit7CisJX19jb25zdF91ZGVsYXkodXNlY3MgKiA0Mjk1KTsJLyogMioqMzIgLyAxMDAwMDAwICovCit9CisKKyNkZWZpbmUgdWRlbGF5KG4pIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/IFwKKwkoKG4pID4gMjAwMDAgPyBfX2JhZF91ZGVsYXkoKSA6IF9fY29uc3RfdWRlbGF5KChuKSAqIDQyOTUpKSA6IFwKKwlfX3VkZWxheShuKSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG11bGRpdih1bnNpZ25lZCBsb25nIGEsIHVuc2lnbmVkIGxvbmcgYiwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGMpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fICgibXVsdWwgJTIsJTA6JTE7IGRpdnVsICUzLCUwOiUxIgorCQk6ICI9ZCIgKHRtcCksICI9ZCIgKGEpCisJCTogImQiIChiKSwgImQiIChjKSwgIjEiIChhKSk7CisJcmV0dXJuIGE7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9NNjhLX0RFTEFZX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2RpdjY0LmggYi9pbmNsdWRlL2FzbS1tNjhrL2RpdjY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY2NWRlMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZGl2NjQuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIF9NNjhLX0RJVjY0X0gKKyNkZWZpbmUgX002OEtfRElWNjRfSAorCisvKiBuID0gbiAvIGJhc2U7IHJldHVybiByZW07ICovCisKKyNkZWZpbmUgZG9fZGl2KG4sIGJhc2UpICh7CQkJCQlcCisJdW5pb24gewkJCQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgbjMyWzJdOwkJCQlcCisJCXVuc2lnbmVkIGxvbmcgbG9uZyBuNjQ7CQkJCVwKKwl9IF9fbjsJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19yZW0sIF9fdXBwZXI7CQkJCVwKKwkJCQkJCQkJXAorCV9fbi5uNjQgPSAobik7CQkJCQkJXAorCWlmICgoX191cHBlciA9IF9fbi5uMzJbMF0pKSB7CQkJCVwKKwkJYXNtICgiZGl2dWwubCAlMiwlMTolMCIJCQkJXAorCQkJOiAiPWQiIChfX24ubjMyWzBdKSwgIj1kIiAoX191cHBlcikJXAorCQkJOiAiZCIgKGJhc2UpLCAiMCIgKF9fbi5uMzJbMF0pKTsJXAorCX0JCQkJCQkJXAorCWFzbSAoImRpdnUubCAlMiwlMTolMCIJCQkJCVwKKwkJOiAiPWQiIChfX24ubjMyWzFdKSwgIj1kIiAoX19yZW0pCQlcCisJCTogImQiIChiYXNlKSwgIjEiIChfX3VwcGVyKSwgIjAiIChfX24ubjMyWzFdKSk7CVwKKwkobikgPSBfX24ubjY0OwkJCQkJCVwKKwlfX3JlbTsJCQkJCQkJXAorfSkKKworI2VuZGlmIC8qIF9NNjhLX0RJVjY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLW02OGsvZG1hLW1hcHBpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTkyMGM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9kbWEtbWFwcGluZy5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX002OEtfRE1BX01BUFBJTkdfSAorI2RlZmluZSBfTTY4S19ETUFfTUFQUElOR19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19QQ0kKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1icm9rZW4uaD4KKyNlbmRpZgorCisjZW5kaWYgIC8qIF9NNjhLX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZG1hLmggYi9pbmNsdWRlL2FzbS1tNjhrL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjY2YTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2RtYS5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX002OEtfRE1BX0gKKyNkZWZpbmUgX002OEtfRE1BX0ggMQorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIGl0J3MgdXNlbGVzcyBvbiB0aGUgbTY4aywgYnV0IHVuZm9ydHVuYXRlbHkgbmVlZGVkIGJ5IHRoZSBuZXcKKyAgIGJvb3RtZW0gYWxsb2NhdG9yIChidXQgdGhpcyBzaG91bGQgZG8gaXQgZm9yIHRoaXMpICovCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUyBQQUdFX09GRlNFVAorCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMgOAorCitleHRlcm4gaW50IHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqIGRldmljZV9pZCk7CS8qIHJlc2VydmUgYSBETUEgY2hhbm5lbCAqLworZXh0ZXJuIHZvaWQgZnJlZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKTsJLyogcmVsZWFzZSBpdCBhZ2FpbiAqLworCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIGludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKKyNlbHNlCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5ICAgICgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfTTY4S19ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9kc3A1NmsuaCBiL2luY2x1ZGUvYXNtLW02OGsvZHNwNTZrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIzZGQzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZHNwNTZrLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLW02OGsvZHNwNTZrLmggLSBkZWZpbmVzIGFuZCBkZWNsYXJhdGlvbnMgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQNTZrIGRldmljZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsMTk5NyBGcmVkcmlrIE5vcmluZywgbGFycyBicmlua2hvZmYgJiBUb21hcyBCZXJuZHRzc29uCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKworLyogVXNlZCBmb3IgdXBsb2FkaW5nIERTUCBiaW5hcnkgY29kZSAqLworc3RydWN0IGRzcDU2a191cGxvYWQgeworCWludCBsZW47CisJY2hhciAqYmluOworfTsKKworLyogRm9yIHRoZSBEU1AgaG9zdCBmbGFncyAqLworc3RydWN0IGRzcDU2a19ob3N0X2ZsYWdzIHsKKwlpbnQgZGlyOyAgICAgLyogQml0IGZpZWxkLiAxID0gd3JpdGUgb3V0cHV0IGJpdCwgMCA9IGRvIG5vdGhpbmcuCisJCSAgICAgICogMHgwMDAwIG1lYW5zIHJlYWRpbmcgb25seSwgMHgwMDExIG1lYW5zCisJCSAgICAgICogd3JpdGluZyB0aGUgYml0cyBzdG9yZWQgaW4gYG91dCcgb24gSEYwIGFuZCBIRjEuCisJCSAgICAgICogTm90ZSB0aGF0IEhGMiBhbmQgSEYzIGNhbiBvbmx5IGJlIHJlYWQuCisJCSAgICAgICovCisJaW50IG91dDsgICAgIC8qIEJpdCBmaWVsZCBsaWtlIGFib3ZlLiAqLworCWludCBzdGF0dXM7ICAvKiBIb3N0IHJlZ2lzdGVyJ3MgY3VycmVudCBzdGF0ZSBpcyByZXR1cm5lZCAqLworfTsKKworLyogaW9jdGwgY29tbWFuZCBjb2RlcyAqLworI2RlZmluZSBEU1A1NktfVVBMT0FECSAgICAgICAgMSAgICAvKiBVcGxvYWQgRFNQIGJpbmFyeSBwcm9ncmFtICAgICAgICovCisjZGVmaW5lIERTUDU2S19TRVRfVFhfV1NJWkUJMiAgICAvKiBIb3N0IHRyYW5zbWl0IHdvcmQgc2l6ZSAoMS00KSAgICovCisjZGVmaW5lIERTUDU2S19TRVRfUlhfV1NJWkUJMyAgICAvKiBIb3N0IHJlY2VpdmUgd29yZCBzaXplICgxLTQpICAgICovCisjZGVmaW5lIERTUDU2S19IT1NUX0ZMQUdTCTQgICAgLyogSG9zdCBmbGFnIHJlZ2lzdGVycyAgICAgICAgICAgICAqLworI2RlZmluZSBEU1A1NktfSE9TVF9DTUQgICAgICAgICA1ICAgIC8qIFRyaWcgSG9zdCBDb21tYW5kICgwLTMxKSAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZHZtYS5oIGIvaW5jbHVkZS9hc20tbTY4ay9kdm1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3OGY4NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZHZtYS5oCkBAIC0wLDAgKzEsMjQzIEBACisvKiAkSWQ6IGR2bWEuaCx2IDEuNCAxOTk5LzAzLzI3IDIwOjIzOjQxIHRzYm9nZW5kIEV4cCAkCisgKiBpbmNsdWRlL2FzbS1tNjhrL2RtYS5oCisgKgorICogQ29weXJpZ2h0IDE5OTUgKEMpIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqCisgKiBIYWNrZWQgdG8gZml0IFN1bjN4IG5lZWRzIGJ5IFRob21hcyBCb2dlbmRvZXJmZXIKKyAqLworCisjaWZuZGVmIF9fTTY4S19EVk1BX0gKKyNkZWZpbmUgX19NNjhLX0RWTUFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNkZWZpbmUgRFZNQV9QQUdFX1NISUZUCTEzCisjZGVmaW5lIERWTUFfUEFHRV9TSVpFCSgxVUwgPDwgRFZNQV9QQUdFX1NISUZUKQorI2RlZmluZSBEVk1BX1BBR0VfTUFTSwkofihEVk1BX1BBR0VfU0laRS0xKSkKKyNkZWZpbmUgRFZNQV9QQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpK0RWTUFfUEFHRV9TSVpFLTEpJkRWTUFfUEFHRV9NQVNLKQorCitleHRlcm4gdm9pZCBkdm1hX2luaXQodm9pZCk7CitleHRlcm4gaW50IGR2bWFfbWFwX2lvbW11KHVuc2lnbmVkIGxvbmcga2FkZHIsIHVuc2lnbmVkIGxvbmcgYmFkZHIsCisJCQkgIGludCBsZW4pOworCisjZGVmaW5lIGR2bWFfbWFsbG9jKHgpIGR2bWFfbWFsbG9jX2FsaWduKHgsIDApCisjZGVmaW5lIGR2bWFfbWFwKHgsIHkpIGR2bWFfbWFwX2FsaWduKHgsIHksIDApCisjZGVmaW5lIGR2bWFfbWFwX3ZtZSh4LCB5KSAoZHZtYV9tYXAoeCwgeSkgJiAweGZmZmZmKQorI2RlZmluZSBkdm1hX21hcF9hbGlnbl92bWUoeCwgeSwgeikgKGR2bWFfbWFwX2FsaWduICh4LCB5LCB6KSAmIDB4ZmZmZmYpCitleHRlcm4gdW5zaWduZWQgbG9uZyBkdm1hX21hcF9hbGlnbih1bnNpZ25lZCBsb25nIGthZGRyLCBpbnQgbGVuLAorCQkJICAgIGludCBhbGlnbik7CitleHRlcm4gdm9pZCAqZHZtYV9tYWxsb2NfYWxpZ24odW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgYWxpZ24pOworCitleHRlcm4gdm9pZCBkdm1hX3VubWFwKHZvaWQgKmJhZGRyKTsKK2V4dGVybiB2b2lkIGR2bWFfZnJlZSh2b2lkICp2YWRkcik7CisKKworI2lmZGVmIENPTkZJR19TVU4zCisvKiBzdW4zIGR2bWEgcGFnZSBzdXBwb3J0ICovCisKKy8qIG1lbW9yeSBhbmQgcG1lZ3MgcG90ZW50aWFsbHkgcmVzZXJ2ZWQgZm9yIGR2bWEgKi8KKyNkZWZpbmUgRFZNQV9QTUVHX1NUQVJUIDEwCisjZGVmaW5lIERWTUFfUE1FR19FTkQgMTYKKyNkZWZpbmUgRFZNQV9TVEFSVCAweGYwMDAwMAorI2RlZmluZSBEVk1BX0VORCAweGZlMDAwMAorI2RlZmluZSBEVk1BX1NJWkUgKERWTUFfRU5ELURWTUFfU1RBUlQpCisjZGVmaW5lIElPTU1VX1RPVEFMX0VOVFJJRVMgMTI4CisjZGVmaW5lIElPTU1VX0VOVFJJRVMgMTIwCisKKy8qIGVtcGlyaWNhbCBrbHVkZ2UgLS0gZHZtYSByZWdpb25zIG9ubHkgc2VlbSB0byB3b3JrIHJpZ2h0IG9uIDB4MTAwMDAKKyAgIGJ5dGUgYm91bmRhcmllcyAqLworI2RlZmluZSBEVk1BX1JFR0lPTl9TSVpFIDB4MTAwMDAKKyNkZWZpbmUgRFZNQV9BTElHTihhZGRyKSAoKChhZGRyKStEVk1BX1JFR0lPTl9TSVpFLTEpICYgXAorICAgICAgICAgICAgICAgICAgICAgICAgIH4oRFZNQV9SRUdJT05fU0laRS0xKSkKKworLyogdmlydCA8LT4gcGh5cyBjb252ZXJzaW9ucyAqLworI2RlZmluZSBkdm1hX3Z0b3AoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSAmIDB4ZmZmZmZmKQorI2RlZmluZSBkdm1hX3B0b3YoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSB8IDB4ZjAwMDAwMCkKKyNkZWZpbmUgZHZtYV92dG92bWUoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSAmIDB4MDBmZmZmZikKKyNkZWZpbmUgZHZtYV92bWV0b3YoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSB8IDB4ZmYwMDAwMCkKKyNkZWZpbmUgZHZtYV92dG9iKHgpIGR2bWFfdnRvcCh4KQorI2RlZmluZSBkdm1hX2J0b3YoeCkgZHZtYV9wdG92KHgpCisKK3N0YXRpYyBpbmxpbmUgaW50IGR2bWFfbWFwX2NwdSh1bnNpZ25lZCBsb25nIGthZGRyLCB1bnNpZ25lZCBsb25nIHZhZGRyLAorCQkJICAgICAgIGludCBsZW4pCit7CisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGR2bWFfcGFnZSh1bnNpZ25lZCBsb25nIGthZGRyLCB1bnNpZ25lZCBsb25nIHZhZGRyKTsKKworI2Vsc2UgLyogU3VuM3ggKi8KKworLyogc3VuM3ggZHZtYSBwYWdlIHN1cHBvcnQgKi8KKworI2RlZmluZSBEVk1BX1NUQVJUIDB4MAorI2RlZmluZSBEVk1BX0VORCAweGYwMDAwMAorI2RlZmluZSBEVk1BX1NJWkUgKERWTUFfRU5ELURWTUFfU1RBUlQpCisjZGVmaW5lIElPTU1VX1RPVEFMX0VOVFJJRVMJICAgMjA0OAorLyogdGhlIHByb20gdGFrZXMgdGhlIHRvcCBtZWcgKi8KKyNkZWZpbmUgSU9NTVVfRU5UUklFUyAgICAgICAgICAgICAgKElPTU1VX1RPVEFMX0VOVFJJRVMgLSAweDgwKQorCisjZGVmaW5lIGR2bWFfdnRvYih4KSAoKHVuc2lnbmVkIGxvbmcpKHgpICYgMHgwMGZmZmZmZikKKyNkZWZpbmUgZHZtYV9idG92KHgpICgodW5zaWduZWQgbG9uZykoeCkgfCAweGZmMDAwMDAwKQorCitleHRlcm4gaW50IGR2bWFfbWFwX2NwdSh1bnNpZ25lZCBsb25nIGthZGRyLCB1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgbGVuKTsKKworCisKKy8qIGV2ZXJ5dGhpbmcgYmVsb3cgdGhpcyBsaW5lIGlzIHNwZWNpZmljIHRvIGRtYSB1c2VkIGZvciB0aGUgb25ib2FyZAorICAgRVNQIHNjc2kgb24gc3VuM3ggKi8KKworLyogU3RydWN0dXJlIHRvIGRlc2NyaWJlIHRoZSBjdXJyZW50IHN0YXR1cyBvZiBETUEgcmVnaXN0ZXJzIG9uIHRoZSBTcGFyYyAqLworc3RydWN0IHNwYXJjX2RtYV9yZWdpc3RlcnMgeworICBfX3ZvbGF0aWxlX18gdW5zaWduZWQgbG9uZyBjb25kX3JlZzsJLyogRE1BIGNvbmRpdGlvbiByZWdpc3RlciAqLworICBfX3ZvbGF0aWxlX18gdW5zaWduZWQgbG9uZyBzdF9hZGRyOwkvKiBTdGFydCBhZGRyZXNzIG9mIHRoaXMgdHJhbnNmZXIgKi8KKyAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGxvbmcgIGNudDsJLyogSG93IG1hbnkgYnl0ZXMgdG8gdHJhbnNmZXIgKi8KKyAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGxvbmcgZG1hX3Rlc3Q7CS8qIERNQSB0ZXN0IHJlZ2lzdGVyICovCit9OworCisvKiBEVk1BIGNoaXAgcmV2aXNpb25zICovCitlbnVtIGR2bWFfcmV2IHsKKwlkdm1hcmV2MCwKKwlkdm1hZXNjMSwKKwlkdm1hcmV2MSwKKwlkdm1hcmV2MiwKKwlkdm1hcmV2MywKKwlkdm1hcmV2cGx1cywKKwlkdm1haG1lCit9OworCisjZGVmaW5lIERNQV9IQVNDT1VOVChyZXYpICAoKHJldik9PWR2bWFlc2MxKQorCisvKiBMaW51eCBETUEgaW5mb3JtYXRpb24gc3RydWN0dXJlLCBmaWxsZWQgZHVyaW5nIHByb2JlLiAqLworc3RydWN0IExpbnV4X1NCdXNfRE1BIHsKKwlzdHJ1Y3QgTGludXhfU0J1c19ETUEgKm5leHQ7CisJc3RydWN0IGxpbnV4X3NidXNfZGV2aWNlICpTQnVzX2RldjsKKwlzdHJ1Y3Qgc3BhcmNfZG1hX3JlZ2lzdGVycyAqcmVnczsKKworCS8qIFN0YXR1cywgbWlzYyBpbmZvICovCisJaW50IG5vZGU7ICAgICAgICAgICAgICAgIC8qIFByb20gbm9kZSBmb3IgdGhpcyBETUEgZGV2aWNlICovCisJaW50IHJ1bm5pbmc7ICAgICAgICAgICAgIC8qIEFyZSB3ZSBkb2luZyBETUEgbm93PyAqLworCWludCBhbGxvY2F0ZWQ7ICAgICAgICAgICAvKiBBcmUgd2UgIm93bmVkIiBieSBhbnlvbmUgeWV0PyAqLworCisJLyogVHJhbnNmZXIgaW5mb3JtYXRpb24uICovCisJdW5zaWduZWQgbG9uZyBhZGRyOyAgICAgIC8qIFN0YXJ0IGFkZHJlc3Mgb2YgY3VycmVudCB0cmFuc2ZlciAqLworCWludCBuYnl0ZXM7ICAgICAgICAgICAgICAvKiBTaXplIG9mIGN1cnJlbnQgdHJhbnNmZXIgKi8KKwlpbnQgcmVhbGJ5dGVzOyAgICAgICAgICAgLyogRm9yIHNwbGl0dGluZyB1cCBsYXJnZSB0cmFuc2ZlcnMsIGV0Yy4gKi8KKworCS8qIERNQSByZXZpc2lvbiAqLworCWVudW0gZHZtYV9yZXYgcmV2aXNpb247Cit9OworCitleHRlcm4gc3RydWN0IExpbnV4X1NCdXNfRE1BICpkbWFfY2hhaW47CisKKy8qIEJyb2tlbiBoYXJkd2FyZS4uLiAqLworI2RlZmluZSBETUFfSVNCUk9LRU4oZG1hKSAgICAoKGRtYSktPnJldmlzaW9uID09IGR2bWFyZXYxKQorI2RlZmluZSBETUFfSVNFU0MxKGRtYSkgICAgICAoKGRtYSktPnJldmlzaW9uID09IGR2bWFlc2MxKQorCisvKiBGaWVsZHMgaW4gdGhlIGNvbmRfcmVnIHJlZ2lzdGVyICovCisvKiBGaXJzdCwgdGhlIHZlcnNpb24gaWRlbnRpZmljYXRpb24gYml0cyAqLworI2RlZmluZSBETUFfREVWSUNFX0lEICAgIDB4ZjAwMDAwMDAgICAgICAgIC8qIERldmljZSBpZGVudGlmaWNhdGlvbiBiaXRzICovCisjZGVmaW5lIERNQV9WRVJTMCAgICAgICAgMHgwMDAwMDAwMCAgICAgICAgLyogU3VucmF5IERNQSB2ZXJzaW9uICovCisjZGVmaW5lIERNQV9FU0NWMSAgICAgICAgMHg0MDAwMDAwMCAgICAgICAgLyogRE1BIEVTQyBWZXJzaW9uIDEgKi8KKyNkZWZpbmUgRE1BX1ZFUlMxICAgICAgICAweDgwMDAwMDAwICAgICAgICAvKiBETUEgcmV2IDEgKi8KKyNkZWZpbmUgRE1BX1ZFUlMyICAgICAgICAweGEwMDAwMDAwICAgICAgICAvKiBETUEgcmV2IDIgKi8KKyNkZWZpbmUgRE1BX1ZFUkhNRSAgICAgICAweGIwMDAwMDAwICAgICAgICAvKiBETUEgaG1lIGdhdGUgYXJyYXkgKi8KKyNkZWZpbmUgRE1BX1ZFUlNQTFVTICAgICAweDkwMDAwMDAwICAgICAgICAvKiBETUEgcmV2IDEgUExVUyAqLworCisjZGVmaW5lIERNQV9ITkRMX0lOVFIgICAgMHgwMDAwMDAwMSAgICAgICAgLyogQW4gSVJRIG5lZWRzIHRvIGJlIGhhbmRsZWQgKi8KKyNkZWZpbmUgRE1BX0hORExfRVJST1IgICAweDAwMDAwMDAyICAgICAgICAvKiBXZSBuZWVkIHRvIHRha2UgYW4gZXJyb3IgKi8KKyNkZWZpbmUgRE1BX0ZJRk9fSVNEUkFJTiAweDAwMDAwMDBjICAgICAgICAvKiBUaGUgRE1BIEZJRk8gaXMgZHJhaW5pbmcgKi8KKyNkZWZpbmUgRE1BX0lOVF9FTkFCICAgICAweDAwMDAwMDEwICAgICAgICAvKiBUdXJuIG9uIGludGVycnVwdHMgKi8KKyNkZWZpbmUgRE1BX0ZJRk9fSU5WICAgICAweDAwMDAwMDIwICAgICAgICAvKiBJbnZhbGlkYXRlIHRoZSBGSUZPICovCisjZGVmaW5lIERNQV9BQ0NfU1pfRVJSICAgMHgwMDAwMDA0MCAgICAgICAgLyogVGhlIGFjY2VzcyBzaXplIHdhcyBiYWQgKi8KKyNkZWZpbmUgRE1BX0ZJRk9fU1REUkFJTiAweDAwMDAwMDQwICAgICAgICAvKiBETUFfVkVSUzEgRHJhaW4gdGhlIEZJRk8gKi8KKyNkZWZpbmUgRE1BX1JTVF9TQ1NJICAgICAweDAwMDAwMDgwICAgICAgICAvKiBSZXNldCB0aGUgU0NTSSBjb250cm9sbGVyICovCisjZGVmaW5lIERNQV9SU1RfRU5FVCAgICAgRE1BX1JTVF9TQ1NJICAgICAgLyogUmVzZXQgdGhlIEVORVQgY29udHJvbGxlciAqLworI2RlZmluZSBETUFfU1RfV1JJVEUgICAgIDB4MDAwMDAxMDAgICAgICAgIC8qIHdyaXRlIGZyb20gZGV2aWNlIHRvIG1lbW9yeSAqLworI2RlZmluZSBETUFfRU5BQkxFICAgICAgIDB4MDAwMDAyMDAgICAgICAgIC8qIEZpcmUgdXAgRE1BLCBoYW5kbGUgcmVxdWVzdHMgKi8KKyNkZWZpbmUgRE1BX1BFTkRfUkVBRCAgICAweDAwMDAwNDAwICAgICAgICAvKiBETUFfVkVSUzEvMC9QTFVTIFBlbmRpbmcgUmVhZCAqLworI2RlZmluZSBETUFfRVNDX0JVUlNUICAgIDB4MDAwMDA4MDAgICAgICAgIC8qIDE9MTZieXRlIDA9MzJieXRlICovCisjZGVmaW5lIERNQV9SRUFEX0FIRUFEICAgMHgwMDAwMTgwMCAgICAgICAgLyogRE1BIHJlYWQgYWhlYWQgcGFydGlhbCBsb25nd29yZCAqLworI2RlZmluZSBETUFfRFNCTF9SRF9EUk4gIDB4MDAwMDEwMDAgICAgICAgIC8qIE5vIEVDIGRyYWluIG9uIHNsYXZlIHJlYWRzICovCisjZGVmaW5lIERNQV9CQ05UX0VOQUIgICAgMHgwMDAwMjAwMCAgICAgICAgLyogSWYgb24sIHVzZSB0aGUgYnl0ZSBjb3VudGVyICovCisjZGVmaW5lIERNQV9URVJNX0NOVFIgICAgMHgwMDAwNDAwMCAgICAgICAgLyogVGVybWluYWwgY291bnRlciAqLworI2RlZmluZSBETUFfQ1NSX0RJU0FCICAgIDB4MDAwMTAwMDAgICAgICAgIC8qIE5vIEZJRk8gZHJhaW5zIGR1cmluZyBjc3IgKi8KKyNkZWZpbmUgRE1BX1NDU0lfRElTQUIgICAweDAwMDIwMDAwICAgICAgICAvKiBObyBGSUZPIGRyYWlucyBkdXJpbmcgcmVnICovCisjZGVmaW5lIERNQV9EU0JMX1dSX0lOViAgMHgwMDAyMDAwMCAgICAgICAgLyogTm8gRUMgaW52YWwuIG9uIHNsYXZlIHdyaXRlcyAqLworI2RlZmluZSBETUFfQUREX0VOQUJMRSAgIDB4MDAwNDAwMDAgICAgICAgIC8qIFNwZWNpYWwgRVNDIERWTUEgb3B0aW1pemF0aW9uICovCisjZGVmaW5lIERNQV9FX0JVUlNUOAkgMHgwMDA0MDAwMAkgICAvKiBFTkVUOiBTQlVTIHIvdyBidXJzdCBzaXplICovCisjZGVmaW5lIERNQV9CUlNUX1NaICAgICAgMHgwMDBjMDAwMCAgICAgICAgLyogU0NTSTogU0JVUyByL3cgYnVyc3Qgc2l6ZSAqLworI2RlZmluZSBETUFfQlJTVDY0ICAgICAgIDB4MDAwODAwMDAgICAgICAgIC8qIFNDU0k6IDY0Ynl0ZSBidXJzdHMgKEhNRSBvbiBVbHRyYVNwYXJjIG9ubHkpICovCisjZGVmaW5lIERNQV9CUlNUMzIgICAgICAgMHgwMDA0MDAwMCAgICAgICAgLyogU0NTSTogMzJieXRlIGJ1cnN0cyAqLworI2RlZmluZSBETUFfQlJTVDE2ICAgICAgIDB4MDAwMDAwMDAgICAgICAgIC8qIFNDU0k6IDE2Ynl0ZSBidXJzdHMgKi8KKyNkZWZpbmUgRE1BX0JSU1QwICAgICAgICAweDAwMDgwMDAwICAgICAgICAvKiBTQ1NJOiBubyBidXJzdHMgKG5vbi1ITUUgZ2F0ZSBhcnJheXMpICovCisjZGVmaW5lIERNQV9BRERSX0RJU0FCICAgMHgwMDEwMDAwMCAgICAgICAgLyogTm8gRklGTyBkcmFpbnMgZHVyaW5nIGFkZHIgKi8KKyNkZWZpbmUgRE1BXzJDTEtTICAgICAgICAweDAwMjAwMDAwICAgICAgICAvKiBFYWNoIHRyYW5zZmVyID0gMiBjbG9jayB0aWNrcyAqLworI2RlZmluZSBETUFfM0NMS1MgICAgICAgIDB4MDA0MDAwMDAgICAgICAgIC8qIEVhY2ggdHJhbnNmZXIgPSAzIGNsb2NrIHRpY2tzICovCisjZGVmaW5lIERNQV9FTl9FTkVUQVVJICAgRE1BXzNDTEtTICAgICAgICAgLyogUHV0IGxhbmNlIGludG8gQVVJLWNhYmxlIG1vZGUgKi8KKyNkZWZpbmUgRE1BX0NOVFJfRElTQUIgICAweDAwODAwMDAwICAgICAgICAvKiBObyBJUlEgd2hlbiBETUFfVEVSTV9DTlRSIHNldCAqLworI2RlZmluZSBETUFfQVVUT19OQUREUiAgIDB4MDEwMDAwMDAgICAgICAgIC8qIFVzZSAiYXV0byBueHQgYWRkciIgZmVhdHVyZSAqLworI2RlZmluZSBETUFfU0NTSV9PTiAgICAgIDB4MDIwMDAwMDAgICAgICAgIC8qIEVuYWJsZSBTQ1NJIGRtYSAqLworI2RlZmluZSBETUFfUEFSSVRZX09GRiAgIDB4MDIwMDAwMDAgICAgICAgIC8qIEhNRTogZGlzYWJsZSBwYXJpdHkgY2hlY2tpbmcgKi8KKyNkZWZpbmUgRE1BX0xPQURFRF9BRERSICAweDA0MDAwMDAwICAgICAgICAvKiBBZGRyZXNzIGhhcyBiZWVuIGxvYWRlZCAqLworI2RlZmluZSBETUFfTE9BREVEX05BRERSIDB4MDgwMDAwMDAgICAgICAgIC8qIE5leHQgYWRkcmVzcyBoYXMgYmVlbiBsb2FkZWQgKi8KKworLyogVmFsdWVzIGRlc2NyaWJpbmcgdGhlIGJ1cnN0LXNpemUgcHJvcGVydHkgZnJvbSB0aGUgUFJPTSAqLworI2RlZmluZSBETUFfQlVSU1QxICAgICAgIDB4MDEKKyNkZWZpbmUgRE1BX0JVUlNUMiAgICAgICAweDAyCisjZGVmaW5lIERNQV9CVVJTVDQgICAgICAgMHgwNAorI2RlZmluZSBETUFfQlVSU1Q4ICAgICAgIDB4MDgKKyNkZWZpbmUgRE1BX0JVUlNUMTYgICAgICAweDEwCisjZGVmaW5lIERNQV9CVVJTVDMyICAgICAgMHgyMAorI2RlZmluZSBETUFfQlVSU1Q2NCAgICAgIDB4NDAKKyNkZWZpbmUgRE1BX0JVUlNUQklUUyAgICAweDdmCisKKy8qIERldGVybWluZSBoaWdoZXN0IHBvc3NpYmxlIGZpbmFsIHRyYW5zZmVyIGFkZHJlc3MgZ2l2ZW4gYSBiYXNlICovCisjZGVmaW5lIERNQV9NQVhFTkQoYWRkcikgKDB4MDEwMDAwMDBVTC0oKCh1bnNpZ25lZCBsb25nKShhZGRyKSkmMHgwMGZmZmZmZlVMKSkKKworLyogWWVzLCBJIGhhY2sgYSBsb3Qgb2YgZWxpc3AgaW4gbXkgc3BhcmUgdGltZS4uLiAqLworI2RlZmluZSBETUFfRVJST1JfUChyZWdzKSAgKCgoKHJlZ3MpLT5jb25kX3JlZykgJiBETUFfSE5ETF9FUlJPUikpCisjZGVmaW5lIERNQV9JUlFfUChyZWdzKSAgICAoKCgocmVncyktPmNvbmRfcmVnKSAmIChETUFfSE5ETF9JTlRSIHwgRE1BX0hORExfRVJST1IpKSkKKyNkZWZpbmUgRE1BX1dSSVRFX1AocmVncykgICgoKChyZWdzKS0+Y29uZF9yZWcpICYgRE1BX1NUX1dSSVRFKSkKKyNkZWZpbmUgRE1BX09GRihyZWdzKSAgICAgICgoKChyZWdzKS0+Y29uZF9yZWcpICY9ICh+RE1BX0VOQUJMRSkpKQorI2RlZmluZSBETUFfSU5UU09GRihyZWdzKSAgKCgoKHJlZ3MpLT5jb25kX3JlZykgJj0gKH5ETUFfSU5UX0VOQUIpKSkKKyNkZWZpbmUgRE1BX0lOVFNPTihyZWdzKSAgICgoKChyZWdzKS0+Y29uZF9yZWcpIHw9IChETUFfSU5UX0VOQUIpKSkKKyNkZWZpbmUgRE1BX1BVTlRGSUZPKHJlZ3MpICgoKChyZWdzKS0+Y29uZF9yZWcpIHw9IERNQV9GSUZPX0lOVikpCisjZGVmaW5lIERNQV9TRVRTVEFSVChyZWdzLCBhZGRyKSAgKCgoKHJlZ3MpLT5zdF9hZGRyKSA9IChjaGFyICopIGFkZHIpKQorI2RlZmluZSBETUFfQkVHSU5ETUFfVyhyZWdzKSBcCisgICAgICAgICgoKChyZWdzKS0+Y29uZF9yZWcgfD0gKERNQV9TVF9XUklURXxETUFfRU5BQkxFfERNQV9JTlRfRU5BQikpKSkKKyNkZWZpbmUgRE1BX0JFR0lORE1BX1IocmVncykgXAorICAgICAgICAoKCgocmVncyktPmNvbmRfcmVnIHw9ICgoRE1BX0VOQUJMRXxETUFfSU5UX0VOQUIpJih+RE1BX1NUX1dSSVRFKSkpKSkKKworLyogRm9yIGNlcnRhaW4gRE1BIGNoaXBzLCB3ZSBuZWVkIHRvIGRpc2FibGUgaW50cyB1cG9uIGlycSBlbnRyeQorICogYW5kIHR1cm4gdGhlbSBiYWNrIG9uIHdoZW4gd2UgYXJlIGRvbmUuICBTbyBpbiBhbnkgRVNQIGludGVycnVwdAorICogaGFuZGxlciB5b3UgKm11c3QqIGNhbGwgRE1BX0lSUV9FTlRSWSB1cG9uIGVudHJ5IGFuZCBETUFfSVJRX0VYSVQKKyAqIHdoZW4gbGVhdmluZyB0aGUgaGFuZGxlci4gIFlvdSBoYXZlIGJlZW4gd2FybmVkLi4uCisgKi8KKyNkZWZpbmUgRE1BX0lSUV9FTlRSWShkbWEsIGRyZWdzKSBkbyB7IFwKKyAgICAgICAgaWYoRE1BX0lTQlJPS0VOKGRtYSkpIERNQV9JTlRTT0ZGKGRyZWdzKTsgXAorICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBETUFfSVJRX0VYSVQoZG1hLCBkcmVncykgZG8geyBcCisJaWYoRE1BX0lTQlJPS0VOKGRtYSkpIERNQV9JTlRTT04oZHJlZ3MpOyBcCisgICB9IHdoaWxlKDApCisKKy8qIFJlc2V0IHRoZSBmcmlnZ2luJyB0aGluZy4uLiAqLworI2RlZmluZSBETUFfUkVTRVQoZG1hKSBkbyB7IFwKKwlzdHJ1Y3Qgc3BhcmNfZG1hX3JlZ2lzdGVycyAqcmVncyA9IGRtYS0+cmVnczsgICAgICAgICAgICAgICAgICAgICAgXAorCS8qIExldCB0aGUgY3VycmVudCBGSUZPIGRyYWluIGl0c2VsZiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJc3BhcmNfZG1hX3BhdXNlKHJlZ3MsIChETUFfRklGT19JU0RSQUlOKSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkvKiBSZXNldCB0aGUgbG9naWMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXJlZ3MtPmNvbmRfcmVnIHw9IChETUFfUlNUX1NDU0kpOyAgICAgLyogYXNzZXJ0ICovICAgICAgICAgICAgICAgICBcCisJX19kZWxheSg0MDApOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZXQgdGhlIGJpdHMgc2V0IDspICovICAgIFwKKwlyZWdzLT5jb25kX3JlZyAmPSB+KERNQV9SU1RfU0NTSSk7ICAgIC8qIGRlLWFzc2VydCAqLyAgICAgICAgICAgICAgXAorCXNwYXJjX2RtYV9lbmFibGVfaW50ZXJydXB0cyhyZWdzKTsgICAgLyogUmUtZW5hYmxlIGludGVycnVwdHMgKi8gICBcCisJLyogRW5hYmxlIEZBU1QgdHJhbnNmZXJzIGlmIGF2YWlsYWJsZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZihkbWEtPnJldmlzaW9uPmR2bWFyZXYxKSByZWdzLT5jb25kX3JlZyB8PSBETUFfM0NMS1M7ICAgICAgICAgICAgXAorCWRtYS0+cnVubmluZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlKDApCisKKworI2VuZGlmIC8qICFDT05GSUdfU1VOMyAqLworCisjZW5kaWYgLyogIShfX002OEtfRFZNQV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9lbGYuaCBiL2luY2x1ZGUvYXNtLW02OGsvZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiZjgzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZWxmLmgKQEAgLTAsMCArMSwxMjIgQEAKKyNpZm5kZWYgX19BU01tNjhrX0VMRl9ICisjZGVmaW5lIF9fQVNNbTY4a19FTEZfSAorCisvKgorICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS91c2VyLmg+CisKKy8qCisgKiA2OGsgRUxGIHJlbG9jYXRpb24gdHlwZXMKKyAqLworI2RlZmluZSBSXzY4S19OT05FCTAKKyNkZWZpbmUgUl82OEtfMzIJMQorI2RlZmluZSBSXzY4S18xNgkyCisjZGVmaW5lIFJfNjhLXzgJCTMKKyNkZWZpbmUgUl82OEtfUEMzMgk0CisjZGVmaW5lIFJfNjhLX1BDMTYJNQorI2RlZmluZSBSXzY4S19QQzgJNgorI2RlZmluZSBSXzY4S19HT1QzMgk3CisjZGVmaW5lIFJfNjhLX0dPVDE2CTgKKyNkZWZpbmUgUl82OEtfR09UOAk5CisjZGVmaW5lIFJfNjhLX0dPVDMyTwkxMAorI2RlZmluZSBSXzY4S19HT1QxNk8JMTEKKyNkZWZpbmUgUl82OEtfR09UOE8JMTIKKyNkZWZpbmUgUl82OEtfUExUMzIJMTMKKyNkZWZpbmUgUl82OEtfUExUMTYJMTQKKyNkZWZpbmUgUl82OEtfUExUOAkxNQorI2RlZmluZSBSXzY4S19QTFQzMk8JMTYKKyNkZWZpbmUgUl82OEtfUExUMTZPCTE3CisjZGVmaW5lIFJfNjhLX1BMVDhPCTE4CisjZGVmaW5lIFJfNjhLX0NPUFkJMTkKKyNkZWZpbmUgUl82OEtfR0xPQl9EQVQJMjAKKyNkZWZpbmUgUl82OEtfSk1QX1NMT1QJMjEKKyNkZWZpbmUgUl82OEtfUkVMQVRJVkUJMjIKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisKKyNkZWZpbmUgRUxGX05HUkVHIChzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQordHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKKwordHlwZWRlZiBzdHJ1Y3QgdXNlcl9tNjhrZnBfc3RydWN0IGVsZl9mcHJlZ3NldF90OworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoKHgpLT5lX21hY2hpbmUgPT0gRU1fNjhLKQorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJNU0IKKyNkZWZpbmUgRUxGX0FSQ0gJRU1fNjhLCisKKy8qIEZvciBTVlI0L202OGsgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIGBhdGV4aXQnIGlzCisgICBwYXNzZWQgaW4gJWExLiAgQWx0aG91Z2ggbXkgY29weSBvZiB0aGUgQUJJIGhhcyBubyBzdWNoIHN0YXRlbWVudCwgaXQKKyAgIGlzIGFjdHVhbGx5IHVzZWQgb24gQVNWLiAgKi8KKyNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKQlfci0+YTEgPSAwCisKKyNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKKyNpZm5kZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgorI2Vsc2UKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJODE5MgorI2VuZGlmCisKKy8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCisgICB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEgbmV3IHZlcnNpb24gb2YKKyAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCisgICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLworCisjaWZuZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIDB4RDAwMDAwMDBVTAorI2Vsc2UKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICAgICAgICAgMHgwRDgwMDAwMFVMCisjZW5kaWYKKworI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKQkJCQlcCisJLyogQmxlZWNoLiAqLwkJCQkJCQlcCisJcHJfcmVnWzBdID0gcmVncy0+ZDE7CQkJCQkJXAorCXByX3JlZ1sxXSA9IHJlZ3MtPmQyOwkJCQkJCVwKKwlwcl9yZWdbMl0gPSByZWdzLT5kMzsJCQkJCQlcCisJcHJfcmVnWzNdID0gcmVncy0+ZDQ7CQkJCQkJXAorCXByX3JlZ1s0XSA9IHJlZ3MtPmQ1OwkJCQkJCVwKKwlwcl9yZWdbN10gPSByZWdzLT5hMDsJCQkJCQlcCisJcHJfcmVnWzhdID0gcmVncy0+YTE7CQkJCQkJXAorCXByX3JlZ1s5XSA9IHJlZ3MtPmEyOwkJCQkJCVwKKwlwcl9yZWdbMTRdID0gcmVncy0+ZDA7CQkJCQkJXAorCXByX3JlZ1sxNV0gPSByZHVzcCgpOwkJCQkJCVwKKwlwcl9yZWdbMTZdID0gcmVncy0+b3JpZ19kMDsJCQkJCVwKKwlwcl9yZWdbMTddID0gcmVncy0+c3I7CQkJCQkJXAorCXByX3JlZ1sxOF0gPSByZWdzLT5wYzsJCQkJCQlcCisJcHJfcmVnWzE5XSA9IChyZWdzLT5mb3JtYXQgPDwgMTIpIHwgcmVncy0+dmVjdG9yOwkJXAorCXsJCQkJCQkJCVwKKwkgIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3ID0gKChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopcmVncykgLSAxOwlcCisJICBwcl9yZWdbNV0gPSBzdy0+ZDY7CQkJCQkJXAorCSAgcHJfcmVnWzZdID0gc3ctPmQ3OwkJCQkJCVwKKwkgIHByX3JlZ1sxMF0gPSBzdy0+YTM7CQkJCQkJXAorCSAgcHJfcmVnWzExXSA9IHN3LT5hNDsJCQkJCQlcCisJICBwcl9yZWdbMTJdID0gc3ctPmE1OwkJCQkJCVwKKwkgIHByX3JlZ1sxM10gPSBzdy0+YTY7CQkJCQkJXAorCX0KKworLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAorICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgY3B1IHN1cHBvcnRzLiAgKi8KKworI2RlZmluZSBFTEZfSFdDQVAJKDApCisKKy8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgorICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KKyAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLiAgKi8KKworI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoKGliY3MyKT9QRVJfU1ZSNDpQRVJfTElOVVgpCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2VudHJ5LmggYi9pbmNsdWRlL2FzbS1tNjhrL2VudHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5NjQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZW50cnkuaApAQCAtMCwwICsxLDEzOCBAQAorI2lmbmRlZiBfX002OEtfRU5UUllfSAorI2RlZmluZSBfX002OEtfRU5UUllfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyoKKyAqIFN0YWNrIGxheW91dCBpbiAncmV0X2Zyb21fZXhjZXB0aW9uJzoKKyAqCisgKglUaGlzIGFsbG93cyBhY2Nlc3MgdG8gdGhlIHN5c2NhbGwgYXJndW1lbnRzIGluIHJlZ2lzdGVycyBkMS1kNQorICoKKyAqCSAwKHNwKSAtIGQxCisgKgkgNChzcCkgLSBkMgorICoJIDgoc3ApIC0gZDMKKyAqCSBDKHNwKSAtIGQ0CisgKgkxMChzcCkgLSBkNQorICoJMTQoc3ApIC0gYTAKKyAqCTE4KHNwKSAtIGExCisgKgkxQyhzcCkgLSBhMgorICoJMjAoc3ApIC0gZDAKKyAqCTI0KHNwKSAtIG9yaWdfZDAKKyAqCTI4KHNwKSAtIHN0YWNrIGFkanVzdG1lbnQKKyAqCTJDKHNwKSAtIHNyCisgKgkyRShzcCkgLSBwYworICoJMzIoc3ApIC0gZm9ybWF0ICYgdmVjdG9yCisgKi8KKworLyoKKyAqIDk3LzA1LzE0IEFuZHJlYXM6IFJlZ2lzdGVyICVhMiBpcyBub3cgc2V0IHRvIHRoZSBjdXJyZW50IHRhc2sgdGhyb3VnaG91dAorICoJCSAgICAgdGhlIHdob2xlIGtlcm5lbC4KKyAqLworCisvKiB0aGUgZm9sbG93aW5nIG1hY3JvIGlzIHVzZWQgd2hlbiBlbmFibGluZyBpbnRlcnJ1cHRzICovCisjaWYgZGVmaW5lZChNQUNIX0FUQVJJX09OTFkpICYmICFkZWZpbmVkKENPTkZJR19IQURFUykKKwkvKiBibG9jayBvdXQgSFNZTkMgb24gdGhlIGF0YXJpICovCisjZGVmaW5lIEFMTE9XSU5UCSh+MHg0MDApCisjZGVmaW5lCU1BWF9OT0lOVF9JUEwJMworI2Vsc2UKKwkvKiBwb3J0YWJsZSB2ZXJzaW9uICovCisjZGVmaW5lIEFMTE9XSU5UCSh+MHg3MDApCisjZGVmaW5lCU1BWF9OT0lOVF9JUEwJMAorI2VuZGlmIC8qIG1hY2hpbmUgY29tcGlsYXRpb24gdHlwZXMgKi8KKworI2lmZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIGN1cnB0ciBhMgorCitMRkxVU0hfSV9BTkRfRCA9IDB4MDAwMDA4MDgKK0xTSUdUUkFQID0gNQorCisvKiBwcm9jZXNzIGJpdHMgZm9yIHRhc2tfc3RydWN0LnB0cmFjZSAqLworUFRfVFJBQ0VTWVNfT0ZGID0gMworUFRfVFJBQ0VTWVNfQklUID0gMQorUFRfUFRSQUNFRF9PRkYgPSAzCitQVF9QVFJBQ0VEX0JJVCA9IDAKK1BUX0RUUkFDRV9PRkYgPSAzCitQVF9EVFJBQ0VfQklUID0gMgorCisjZGVmaW5lIFNBVkVfQUxMX0lOVCBzYXZlX2FsbF9pbnQKKyNkZWZpbmUgU0FWRV9BTExfU1lTIHNhdmVfYWxsX3N5cworI2RlZmluZSBSRVNUT1JFX0FMTCByZXN0b3JlX2FsbAorLyoKKyAqIFRoaXMgZGVmaW5lcyB0aGUgbm9ybWFsIGtlcm5lbCBwdC1yZWdzIGxheW91dC4KKyAqCisgKiByZWdzIGEzLWE2IGFuZCBkNi1kNyBhcmUgcHJlc2VydmVkIGJ5IEMgY29kZQorICogdGhlIGtlcm5lbCBkb2Vzbid0IG1lc3Mgd2l0aCB1c3AgdW5sZXNzIGl0IG5lZWRzIHRvCisgKi8KKworLyoKKyAqIGEgLTEgaW4gdGhlIG9yaWdfZDAgZmllbGQgc2lnbmlmaWVzCisgKiB0aGF0IHRoZSBzdGFjayBmcmFtZSBpcyBOT1QgZm9yIHN5c2NhbGwKKyAqLworLm1hY3JvCXNhdmVfYWxsX2ludAorCWNscmwJJXNwQC0JCXwgc3RrX2FkagorCXBlYQktMTp3CQl8IG9yaWcgZDAKKwltb3ZlbAklZDAsJXNwQC0JfCBkMAorCW1vdmVtbAklZDEtJWQ1LyVhMC0lYTEvJWN1cnB0ciwlc3BALQorLmVuZG0KKworLm1hY3JvCXNhdmVfYWxsX3N5cworCWNscmwJJXNwQC0JCXwgc3RrX2FkagorCW1vdmVsCSVkMCwlc3BALQl8IG9yaWcgZDAKKwltb3ZlbAklZDAsJXNwQC0JfCBkMAorCW1vdmVtbAklZDEtJWQ1LyVhMC0lYTEvJWN1cnB0ciwlc3BALQorLmVuZG0KKworLm1hY3JvCXJlc3RvcmVfYWxsCisJbW92ZW1sCSVzcEArLCVhMC0lYTEvJWN1cnB0ci8lZDEtJWQ1CisJbW92ZWwJJXNwQCssJWQwCisJYWRkcWwJIzQsJXNwCQl8IG9yaWcgZDAKKwlhZGRsCSVzcEArLCVzcAl8IHN0ayBhZGoKKwlydGUKKy5lbmRtCisKKyNkZWZpbmUgU1dJVENIX1NUQUNLX1NJWkUgKDYqNCs0KQkvKiBpbmNsdWRlcyByZXR1cm4gYWRkcmVzcyAqLworCisjZGVmaW5lIFNBVkVfU1dJVENIX1NUQUNLIHNhdmVfc3dpdGNoX3N0YWNrCisjZGVmaW5lIFJFU1RPUkVfU1dJVENIX1NUQUNLIHJlc3RvcmVfc3dpdGNoX3N0YWNrCisjZGVmaW5lIEdFVF9DVVJSRU5UKHRtcCkgZ2V0X2N1cnJlbnQgdG1wCisKKy5tYWNybwlzYXZlX3N3aXRjaF9zdGFjaworCW1vdmVtbAklYTMtJWE2LyVkNi0lZDcsJXNwQC0KKy5lbmRtCisKKy5tYWNybwlyZXN0b3JlX3N3aXRjaF9zdGFjaworCW1vdmVtbAklc3BAKywlYTMtJWE2LyVkNi0lZDcKKy5lbmRtCisKKy5tYWNybwlnZXRfY3VycmVudCByZWc9JWQwCisJbW92ZWwJJXNwLFxyZWcKKwlhbmR3CSMtVEhSRUFEX1NJWkUsXHJlZworCW1vdmVsCVxyZWcsJWN1cnB0cgorCW1vdmVsCSVjdXJwdHJALCVjdXJwdHIKKy5lbmRtCisKKyNlbHNlIC8qIEMgc291cmNlICovCisKKyNkZWZpbmUgU1RSKFgpIFNUUjEoWCkKKyNkZWZpbmUgU1RSMShYKSAjWAorCisjZGVmaW5lIFBUX09GRl9PUklHX0QwCSAweDI0CisjZGVmaW5lIFBUX09GRl9GT1JNQVRWRUMgMHgzMgorI2RlZmluZSBQVF9PRkZfU1IJIDB4MkMKKyNkZWZpbmUgU0FWRV9BTExfSU5UCQkJCVwKKwkiY2xybAklJXNwQC07IiAgICAvKiBzdGtfYWRqICovCVwKKwkicGVhCS0xOnc7IgkgICAgLyogb3JpZyBkMCA9IC0xICovCVwKKwkibW92ZWwJJSVkMCwlJXNwQC07IiAvKiBkMCAqLwkJXAorCSJtb3ZlbWwJJSVkMS0lJWQ1LyUlYTAtJSVhMiwlJXNwQC0iCisjZGVmaW5lIEdFVF9DVVJSRU5UKHRtcCkgXAorCSJtb3ZlbAklJXNwLCIjdG1wIlxuXHQiIFwKKwkiYW5kdwkjLSJTVFIoVEhSRUFEX1NJWkUpIiwiI3RtcCJcblx0IiBcCisJIm1vdmVsCSIjdG1wIiwlJWEyXG5cdCIgXAorCSJtb3ZlbAklJWEyQCwlJWEyIgorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fTTY4S19FTlRSWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2Vycm5vLmggYi9pbmNsdWRlL2FzbS1tNjhrL2Vycm5vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0ZTE4OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZXJybm8uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX002OEtfRVJSTk9fSAorI2RlZmluZSBfTTY4S19FUlJOT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby5oPgorCisjZW5kaWYgLyogX002OEtfRVJSTk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9mYmlvLmggYi9pbmNsdWRlL2FzbS1tNjhrL2ZiaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTdlZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9mYmlvLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1zcGFyYy9mYmlvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1tNjhrL2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0MjEyOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZmNudGwuaApAQCAtMCwwICsxLDg3IEBACisjaWZuZGVmIF9NNjhLX0ZDTlRMX0gKKyNkZWZpbmUgX002OEtfRkNOVExfSAorCisvKiBvcGVuL2ZjbnRsIC0gT19TWU5DIGlzIG9ubHkgaW1wbGVtZW50ZWQgb24gYmxvY2tzIGRldmljZXMgYW5kIG9uIGZpbGVzCisgICBsb2NhdGVkIG9uIGFuIGV4dDIgZmlsZSBzeXN0ZW0gKi8KKyNkZWZpbmUgT19BQ0NNT0RFCSAgMDAwMworI2RlZmluZSBPX1JET05MWQkgICAgMDAKKyNkZWZpbmUgT19XUk9OTFkJICAgIDAxCisjZGVmaW5lIE9fUkRXUgkJICAgIDAyCisjZGVmaW5lIE9fQ1JFQVQJCSAgMDEwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19FWENMCQkgIDAyMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fTk9DVFRZCSAgMDQwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19UUlVOQwkJIDAxMDAwCS8qIG5vdCBmY250bCAqLworI2RlZmluZSBPX0FQUEVORAkgMDIwMDAKKyNkZWZpbmUgT19OT05CTE9DSwkgMDQwMDAKKyNkZWZpbmUgT19OREVMQVkJT19OT05CTE9DSworI2RlZmluZSBPX1NZTkMJCTAxMDAwMAorI2RlZmluZSBGQVNZTkMJCTAyMDAwMAkvKiBmY250bCwgZm9yIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIE9fRElSRUNUT1JZCTA0MDAwMAkvKiBtdXN0IGJlIGEgZGlyZWN0b3J5ICovCisjZGVmaW5lIE9fTk9GT0xMT1cJMDEwMDAwMAkvKiBkb24ndCBmb2xsb3cgbGlua3MgKi8KKyNkZWZpbmUgT19ESVJFQ1QJMDIwMDAwMAkvKiBkaXJlY3QgZGlzayBhY2Nlc3MgaGludCAtIGN1cnJlbnRseSBpZ25vcmVkICovCisjZGVmaW5lIE9fTEFSR0VGSUxFCTA0MDAwMDAKKyNkZWZpbmUgT19OT0FUSU1FCTAxMDAwMDAwCisKKyNkZWZpbmUgRl9EVVBGRAkJMAkvKiBkdXAgKi8KKyNkZWZpbmUgRl9HRVRGRAkJMQkvKiBnZXQgY2xvc2Vfb25fZXhlYyAqLworI2RlZmluZSBGX1NFVEZECQkyCS8qIHNldC9jbGVhciBjbG9zZV9vbl9leGVjICovCisjZGVmaW5lIEZfR0VURkwJCTMJLyogZ2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9TRVRGTAkJNAkvKiBzZXQgZmlsZS0+Zl9mbGFncyAqLworI2RlZmluZSBGX0dFVExLCQk1CisjZGVmaW5lIEZfU0VUTEsJCTYKKyNkZWZpbmUgRl9TRVRMS1cJNworCisjZGVmaW5lIEZfU0VUT1dOCTgJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX0dFVE9XTgk5CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9TRVRTSUcJMTAJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX0dFVFNJRwkxMQkvKiAgZm9yIHNvY2tldHMuICovCisKKyNkZWZpbmUgRl9HRVRMSzY0CTEyCS8qICB1c2luZyAnc3RydWN0IGZsb2NrNjQnICovCisjZGVmaW5lIEZfU0VUTEs2NAkxMworI2RlZmluZSBGX1NFVExLVzY0CTE0CisKKy8qIGZvciBGX1tHRVR8U0VUXUZMICovCisjZGVmaW5lIEZEX0NMT0VYRUMJMQkvKiBhY3R1YWxseSBhbnl0aGluZyB3aXRoIGxvdyBiaXQgc2V0IGdvZXMgKi8KKworLyogZm9yIHBvc2l4IGZjbnRsKCkgYW5kIGxvY2tmKCkgKi8KKyNkZWZpbmUgRl9SRExDSwkJMAorI2RlZmluZSBGX1dSTENLCQkxCisjZGVmaW5lIEZfVU5MQ0sJCTIKKworLyogZm9yIG9sZCBpbXBsZW1lbnRhdGlvbiBvZiBic2QgZmxvY2sgKCkgKi8KKyNkZWZpbmUgRl9FWExDSwkJNAkvKiBvciAzICovCisjZGVmaW5lIEZfU0hMQ0sJCTgJLyogb3IgNCAqLworCisvKiBmb3IgbGVhc2VzICovCisjZGVmaW5lIEZfSU5QUk9HUkVTUwkxNgorCisvKiBvcGVyYXRpb25zIGZvciBic2QgZmxvY2soKSwgYWxzbyB1c2VkIGJ5IHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24gKi8KKyNkZWZpbmUgTE9DS19TSAkJMQkvKiBzaGFyZWQgbG9jayAqLworI2RlZmluZSBMT0NLX0VYCQkyCS8qIGV4Y2x1c2l2ZSBsb2NrICovCisjZGVmaW5lIExPQ0tfTkIJCTQJLyogb3InZCB3aXRoIG9uZSBvZiB0aGUgYWJvdmUgdG8gcHJldmVudAorCQkJCSAgIGJsb2NraW5nICovCisjZGVmaW5lIExPQ0tfVU4JCTgJLyogcmVtb3ZlIGxvY2sgKi8KKworI2RlZmluZSBMT0NLX01BTkQJMzIJLyogVGhpcyBpcyBhIG1hbmRhdG9yeSBmbG9jayAqLworI2RlZmluZSBMT0NLX1JFQUQJNjQJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHJlYWQgb3BlcmF0aW9ucyAqLworI2RlZmluZSBMT0NLX1dSSVRFCTEyOAkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgd3JpdGUgb3BlcmF0aW9ucyAqLworI2RlZmluZSBMT0NLX1JXCQkxOTIJLyogLi4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHJlYWQgJiB3cml0ZSBvcHMgKi8KKworc3RydWN0IGZsb2NrIHsKKwlzaG9ydCBsX3R5cGU7CisJc2hvcnQgbF93aGVuY2U7CisJb2ZmX3QgbF9zdGFydDsKKwlvZmZfdCBsX2xlbjsKKwlwaWRfdCBsX3BpZDsKK307CisKK3N0cnVjdCBmbG9jazY0IHsKKwlzaG9ydCAgbF90eXBlOworCXNob3J0ICBsX3doZW5jZTsKKwlsb2ZmX3QgbF9zdGFydDsKKwlsb2ZmX3QgbF9sZW47CisJcGlkX3QgIGxfcGlkOworfTsKKworI2RlZmluZSBGX0xJTlVYX1NQRUNJRklDX0JBU0UJMTAyNAorI2VuZGlmIC8qIF9NNjhLX0ZDTlRMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZmxvcHB5LmggYi9pbmNsdWRlL2FzbS1tNjhrL2Zsb3BweS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZTcwOGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2Zsb3BweS5oCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogSW1wbGVtZW50YXRpb24gaW5kZXBlbmRlbnQgYml0cyBvZiB0aGUgRmxvcHB5IGRyaXZlci4KKyAqCisgKiBtdWNoIG9mIHRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gd2hhdCB3YXMgb3JpZ2luYWxseSB0aGUgUTQwIGZsb3BweSBkcml2ZXIuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxCisgKgorICogU3VuM3ggc3VwcG9ydCBhZGRlZCAyLzQvMjAwMCBTYW0gQ3JlYXNleSAoc2FtbXlAc2FtbXkubmV0KQorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKK2FzbWxpbmthZ2UgaXJxcmV0dXJuX3QgZmxvcHB5X2hhcmRpbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkLAorCQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyogY29uc3RhbnRzLi4uICovCisKKyN1bmRlZiBNQVhfRE1BX0FERFJFU1MKKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTICAgMHgwMCAgLyogbm90aGluZyBsaWtlIHRoYXQgKi8KKworCisvKgorICogQWdhaW4sIHRoZSBDTU9TIGluZm9ybWF0aW9uIGRvZXNuJ3Qgd29yayBvbiBtNjhrLi4KKyAqLworI2RlZmluZSBGTE9QUFkwX1RZUEUgKE1BQ0hfSVNfUTQwID8gNiA6IDQpCisjZGVmaW5lIEZMT1BQWTFfVFlQRSAwCisKKyNkZWZpbmUgRkxPUFBZX01PVE9SX01BU0sgMHhmMAorCisKKy8qIGJhc2ljYWxseSBQQyBpbml0ICsgc2V0IHVzZV92aXJ0dWFsX2RtYSAqLworI2RlZmluZSAgRkRDMSBtNjhrX2Zsb3BweV9pbml0KCkKKworI2RlZmluZSBOX0ZEQyAxCisjZGVmaW5lIE5fRFJJVkUgOAorCisKKy8qIHZkbWEgZ2xvYmFscyBhZGFwdGVkIGZyb20gYXNtLWkzODYvZmxvcHB5LmggKi8KKworc3RhdGljIGludCB2aXJ0dWFsX2RtYV9jb3VudD0wOworc3RhdGljIGludCB2aXJ0dWFsX2RtYV9yZXNpZHVlPTA7CitzdGF0aWMgY2hhciAqdmlydHVhbF9kbWFfYWRkcj0wOworc3RhdGljIGludCB2aXJ0dWFsX2RtYV9tb2RlPTA7CitzdGF0aWMgaW50IGRvaW5nX3BkbWE9MDsKKworI2luY2x1ZGUgPGFzbS9zdW4zeGZsb3AuaD4KKworZXh0ZXJuIHNwaW5sb2NrX3QgIGRtYV9zcGluX2xvY2s7CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgY2xhaW1fZG1hX2xvY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHJlbGVhc2VfZG1hX2xvY2sodW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBmZF9pbmIoaW50IHBvcnQpCit7CisJaWYoTUFDSF9JU19RNDApCisJCXJldHVybiBpbmJfcChwb3J0KTsKKwllbHNlIGlmKE1BQ0hfSVNfU1VOM1gpCisJCXJldHVybiBzdW4zeF84MjA3Ml9mZF9pbmIocG9ydCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZmRfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCBpbnQgcG9ydCkKK3sKKwlpZihNQUNIX0lTX1E0MCkKKwkJb3V0Yl9wKHZhbHVlLCBwb3J0KTsKKwllbHNlIGlmKE1BQ0hfSVNfU1VOM1gpCisJCXN1bjN4XzgyMDcyX2ZkX291dGIodmFsdWUsIHBvcnQpOworfQorCisKK3N0YXRpYyBpbnQgZmRfcmVxdWVzdF9pcnEodm9pZCkKK3sKKwlpZihNQUNIX0lTX1E0MCkKKwkJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9oYXJkaW50LFNBX0lOVEVSUlVQVCwKKwkJCQkJCSAgICJmbG9wcHkiLCBmbG9wcHlfaGFyZGludCk7CisJZWxzZSBpZihNQUNIX0lTX1NVTjNYKQorCQlyZXR1cm4gc3VuM3hmbG9wX3JlcXVlc3RfaXJxKCk7CisJcmV0dXJuIC1FTlhJTzsKK30KKworc3RhdGljIHZvaWQgZmRfZnJlZV9pcnEodm9pZCkKK3sKKwlpZihNQUNIX0lTX1E0MCkKKwkJZnJlZV9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2hhcmRpbnQpOworfQorCisjZGVmaW5lIGZkX3JlcXVlc3RfZG1hKCkgICAgICAgIHZkbWFfcmVxdWVzdF9kbWEoRkxPUFBZX0RNQSwiZmxvcHB5IikKKyNkZWZpbmUgZmRfZ2V0X2RtYV9yZXNpZHVlKCkgICAgdmRtYV9nZXRfZG1hX3Jlc2lkdWUoRkxPUFBZX0RNQSkKKyNkZWZpbmUgZmRfZG1hX21lbV9hbGxvYyhzaXplKQl2ZG1hX21lbV9hbGxvYyhzaXplKQorI2RlZmluZSBmZF9kbWFfc2V0dXAoYWRkciwgc2l6ZSwgbW9kZSwgaW8pIHZkbWFfZG1hX3NldHVwKGFkZHIsIHNpemUsIG1vZGUsIGlvKQorCisjZGVmaW5lIGZkX2VuYWJsZV9pcnEoKSAgICAgICAgICAgLyogbm90aGluZy4uLiAqLworI2RlZmluZSBmZF9kaXNhYmxlX2lycSgpICAgICAgICAgIC8qIG5vdGhpbmcuLi4gKi8KKworI2RlZmluZSBmZF9mcmVlX2RtYSgpICAgICAgICAgICAgIC8qIG5vdGhpbmcgKi8KKworLyogTm8gNjRrIGJvdW5kYXJ5IGNyb3NzaW5nIHByb2JsZW1zIG9uIFE0MCAtIG5vIERNQSBhdCBhbGwgKi8KKyNkZWZpbmUgQ1JPU1NfNjRLQihhLHMpICgwKQorCisjZGVmaW5lIERNQV9NT0RFX1JFQUQgIDB4NDQgICAgLyogaTM4NiBsb29rLWFsaWtlICovCisjZGVmaW5lIERNQV9NT0RFX1dSSVRFIDB4NDgKKworCitzdGF0aWMgaW50IG02OGtfZmxvcHB5X2luaXQodm9pZCkKK3sKKyAgdXNlX3ZpcnR1YWxfZG1hID0xOworICBjYW5fdXNlX3ZpcnR1YWxfZG1hID0gMTsKKworCisgIGlmIChNQUNIX0lTX1E0MCkKKwkgIHJldHVybiAweDNmMDsKKyAgZWxzZSBpZihNQUNIX0lTX1NVTjNYKQorCSAgcmV0dXJuIHN1bjN4ZmxvcF9pbml0KCk7CisgIGVsc2UKKyAgICByZXR1cm4gLTE7Cit9CisKKworc3RhdGljIGludCB2ZG1hX3JlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqIGRldmljZV9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHZkbWFfZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkdW1teSkKK3sKKwlyZXR1cm4gdmlydHVhbF9kbWFfY291bnQgKyB2aXJ0dWFsX2RtYV9yZXNpZHVlOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHZkbWFfbWVtX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHZtYWxsb2Moc2l6ZSk7CisKK30KKworc3RhdGljIHZvaWQgX2ZkX2RtYV9tZW1fZnJlZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgICAgICAgdmZyZWUoKHZvaWQgKilhZGRyKTsKK30KKyNkZWZpbmUgZmRfZG1hX21lbV9mcmVlKGFkZHIsc2l6ZSkgX2ZkX2RtYV9tZW1fZnJlZShhZGRyLCBzaXplKQorCisKKy8qIGNob29zZV9kbWFfbW9kZSA/Pz8qLworCitzdGF0aWMgaW50IHZkbWFfZG1hX3NldHVwKGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG1vZGUsIGludCBpbykKK3sKKwlkb2luZ19wZG1hID0gMTsKKwl2aXJ0dWFsX2RtYV9wb3J0ID0gKE1BQ0hfSVNfUTQwID8gaW8gOiAwKTsKKwl2aXJ0dWFsX2RtYV9tb2RlID0gKG1vZGUgID09IERNQV9NT0RFX1dSSVRFKTsKKwl2aXJ0dWFsX2RtYV9hZGRyID0gYWRkcjsKKwl2aXJ0dWFsX2RtYV9jb3VudCA9IHNpemU7CisJdmlydHVhbF9kbWFfcmVzaWR1ZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgdm9pZCBmZF9kaXNhYmxlX2RtYSh2b2lkKQoreworCWRvaW5nX3BkbWEgPSAwOworCXZpcnR1YWxfZG1hX3Jlc2lkdWUgKz0gdmlydHVhbF9kbWFfY291bnQ7CisJdmlydHVhbF9kbWFfY291bnQ9MDsKK30KKworCisKKy8qIHRoaXMgaXMgdGhlIG9ubHkgdHJ1bHkgUTQwIHNwZWNpZmljIGZ1bmN0aW9uICovCisKK2FzbWxpbmthZ2UgaXJxcmV0dXJuX3QgZmxvcHB5X2hhcmRpbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkLAorCQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgc3Q7CisKKyN1bmRlZiBUUkFDRV9GTFBZX0lOVAorI2RlZmluZSBOT19GTE9QUFlfQVNTRU1CTEVSCisKKyNpZmRlZiBUUkFDRV9GTFBZX0lOVAorCXN0YXRpYyBpbnQgY2FsbHM9MDsKKwlzdGF0aWMgaW50IGJ5dGVzPTA7CisJc3RhdGljIGludCBkbWFfd2FpdD0wOworI2VuZGlmCisJaWYoIWRvaW5nX3BkbWEpIHsKKwkJZmxvcHB5X2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKyNpZmRlZiBUUkFDRV9GTFBZX0lOVAorCWlmKCFjYWxscykKKwkJYnl0ZXMgPSB2aXJ0dWFsX2RtYV9jb3VudDsKKyNlbmRpZgorCisJeworCQlyZWdpc3RlciBpbnQgbGNvdW50OworCQlyZWdpc3RlciBjaGFyICpscHRyOworCisJCS8qIHNlcnZlIDFzdCBieXRlIGZhc3Q6ICovCisKKwkJc3Q9MTsKKwkJZm9yKGxjb3VudD12aXJ0dWFsX2RtYV9jb3VudCwgbHB0cj12aXJ0dWFsX2RtYV9hZGRyOworCQkgICAgbGNvdW50OyBsY291bnQtLSwgbHB0cisrKSB7CisJCQlzdD1pbmIodmlydHVhbF9kbWFfcG9ydCs0KSAmIDB4YTAgOworCQkJaWYoc3QgIT0gMHhhMCkKKwkJCQlicmVhazsKKwkJCWlmKHZpcnR1YWxfZG1hX21vZGUpCisJCQkJb3V0Yl9wKCpscHRyLCB2aXJ0dWFsX2RtYV9wb3J0KzUpOworCQkJZWxzZQorCQkJCSpscHRyID0gaW5iX3AodmlydHVhbF9kbWFfcG9ydCs1KTsKKwkJfQorCisJCXZpcnR1YWxfZG1hX2NvdW50ID0gbGNvdW50OworCQl2aXJ0dWFsX2RtYV9hZGRyID0gbHB0cjsKKwkJc3QgPSBpbmIodmlydHVhbF9kbWFfcG9ydCs0KTsKKwl9CisKKyNpZmRlZiBUUkFDRV9GTFBZX0lOVAorCWNhbGxzKys7CisjZW5kaWYKKwlpZihzdCA9PSAweDIwKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJaWYoIShzdCAmIDB4MjApKSB7CisJCXZpcnR1YWxfZG1hX3Jlc2lkdWUgKz0gdmlydHVhbF9kbWFfY291bnQ7CisJCXZpcnR1YWxfZG1hX2NvdW50PTA7CisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwkJcHJpbnRrKCJjb3VudD0leCwgcmVzaWR1ZT0leCBjYWxscz0lZCBieXRlcz0lZCBkbWFfd2FpdD0lZFxuIiwKKwkJICAgICAgIHZpcnR1YWxfZG1hX2NvdW50LCB2aXJ0dWFsX2RtYV9yZXNpZHVlLCBjYWxscywgYnl0ZXMsCisJCSAgICAgICBkbWFfd2FpdCk7CisJCWNhbGxzID0gMDsKKwkJZG1hX3dhaXQ9MDsKKyNlbmRpZgorCQlkb2luZ19wZG1hID0gMDsKKwkJZmxvcHB5X2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwlpZighdmlydHVhbF9kbWFfY291bnQpCisJCWRtYV93YWl0Kys7CisjZW5kaWYKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNkZWZpbmUgRVhUUkFfRkxPUFBZX1BBUkFNUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9mcHUuaCBiL2luY2x1ZGUvYXNtLW02OGsvZnB1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjZjg1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZnB1LmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfX002OEtfRlBVX0gKKyNkZWZpbmUgX19NNjhLX0ZQVV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIE1BWCBmbG9hdGluZyBwb2ludCB1bml0IHN0YXRlIHNpemUgKEZTQVZFL0ZSRVNUT1JFKQorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODAzMCkKKyNkZWZpbmUgRlBTVEFURVNJWkUgKDIxNi9zaXplb2YodW5zaWduZWQgY2hhcikpCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwNDApCisjZGVmaW5lIEZQU1RBVEVTSVpFICg5Ni9zaXplb2YodW5zaWduZWQgY2hhcikpCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjhLRlBVX0VNVSkKKyNkZWZpbmUgRlBTVEFURVNJWkUgKDI4L3NpemVvZih1bnNpZ25lZCBjaGFyKSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX002ODA2MCkKKyNkZWZpbmUgRlBTVEFURVNJWkUgKDEyL3NpemVvZih1bnNpZ25lZCBjaGFyKSkKKyNlbHNlCisjZGVmaW5lIEZQU1RBVEVTSVpFIGVycm9yIG5vX2NwdV90eXBlX2NvbmZpZ3VyZWQKKyNlbmRpZgorCisjZW5kaWYgLyogX19NNjhLX0ZQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLW02OGsvaGFyZGlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyODMxOGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2hhcmRpcnEuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIF9fTTY4S19IQVJESVJRX0gKKyNkZWZpbmUgX19NNjhLX0hBUkRJUlFfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisKKy8qIGVudHJ5LlMgaXMgc2Vuc2l0aXZlIHRvIHRoZSBvZmZzZXRzIG9mIHRoZXNlIGZpZWxkcyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7CisKKyNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgkvKiBTdGFuZGFyZCBtYXBwaW5ncyBmb3IgaXJxX2NwdXN0YXRfdCBhYm92ZSAqLworCisjZGVmaW5lIEhBUkRJUlFfQklUUwk4CisKKy8qCisgKiBUaGUgaGFyZGlycSBtYXNrIGhhcyB0byBiZSBsYXJnZSBlbm91Z2ggdG8gaGF2ZQorICogc3BhY2UgZm9yIHBvdGVudGlhbGx5IGFsbCBJUlEgc291cmNlcyBpbiB0aGUgc3lzdGVtCisgKiBuZXN0aW5nIG9uIGEgc2luZ2xlIENQVToKKyAqLworI2lmICgxIDw8IEhBUkRJUlFfQklUUykgPCBOUl9JUlFTCisjIGVycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9oZHJlZy5oIGIvaW5jbHVkZS9hc20tbTY4ay9oZHJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ODliYmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2hkcmVnLmgKQEAgLTAsMCArMSBAQAorI3dhcm5pbmcgdGhpcyBmaWxlIGlzIG9ic29sZXRlLCBwbGVhc2UgZG8gbm90IHVzZSBpdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9ocDMwMGh3LmggYi9pbmNsdWRlL2FzbS1tNjhrL2hwMzAwaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTk4ZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9ocDMwMGh3LmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfTTY4S19IUDMwMEhXX0gKKyNkZWZpbmUgX002OEtfSFAzMDBIV19ICisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGhwMzAwX21vZGVsOworCisvKiBUaGlzIGluZm9ybWF0aW9uIHdhcyB0YWtlbiBmcm9tIE5ldEJTRCAqLworI2RlZmluZQlIUF8zMjAJCSgwKQkvKiAxNk1IeiA2ODAyMCtIUCBNTVUrMTZLIGV4dGVybmFsIGNhY2hlICovCisjZGVmaW5lCUhQXzMzMAkJKDEpCS8qIDE2TUh6IDY4MDIwKzY4ODUxIE1NVSAqLworI2RlZmluZQlIUF8zNDAJCSgyKQkvKiAxNk1IeiA2ODAzMCAqLworI2RlZmluZQlIUF8zNDUJCSgzKQkvKiA1ME1IeiA2ODAzMCszMksgZXh0ZXJuYWwgY2FjaGUgKi8KKyNkZWZpbmUJSFBfMzUwCQkoNCkJLyogMjVNSHogNjgwMjArSFAgTU1VKzMySyBleHRlcm5hbCBjYWNoZSAqLworI2RlZmluZQlIUF8zNjAJCSg1KQkvKiAyNU1IeiA2ODAzMCAqLworI2RlZmluZQlIUF8zNzAJCSg2KQkvKiAzM01IeiA2ODAzMCs2NEsgZXh0ZXJuYWwgY2FjaGUgKi8KKyNkZWZpbmUJSFBfMzc1CQkoNykJLyogNTBNSHogNjgwMzArMzJLIGV4dGVybmFsIGNhY2hlICovCisjZGVmaW5lCUhQXzM4MAkJKDgpCS8qIDI1TUh6IDY4MDQwICovCisjZGVmaW5lCUhQXzM4NQkJKDkpCS8qIDMzTUh6IDY4MDQwICovCisKKyNkZWZpbmUJSFBfNDAwCQkoMTApCS8qIDUwTUh6IDY4MDMwKzMySyBleHRlcm5hbCBjYWNoZSAqLworI2RlZmluZQlIUF80MjVUCQkoMTEpCS8qIDI1TUh6IDY4MDQwIC0gbW9kZWwgNDI1dCAqLworI2RlZmluZQlIUF80MjVTCQkoMTIpCS8qIDI1TUh6IDY4MDQwIC0gbW9kZWwgNDI1cyAqLworI2RlZmluZSBIUF80MjVFCQkoMTMpCS8qIDI1TUh6IDY4MDQwIC0gbW9kZWwgNDI1ZSAqLworI2RlZmluZSBIUF80MzNUCQkoMTQpCS8qIDMzTUh6IDY4MDQwIC0gbW9kZWwgNDMzdCAqLworI2RlZmluZSBIUF80MzNTCQkoMTUpCS8qIDMzTUh6IDY4MDQwIC0gbW9kZWwgNDMzcyAqLworCisjZW5kaWYgLyogX002OEtfSFAzMDBIV19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2h3X2lycS5oIGIvaW5jbHVkZS9hc20tbTY4ay9od19pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWNlZjA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9od19pcnEuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19BU01fTTY4S19IV19JUlFfSAorI2RlZmluZSBfX0FTTV9NNjhLX0hXX0lSUV9ICisKKy8qIER1bW15IGluY2x1ZGUuICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9od3Rlc3QuaCBiL2luY2x1ZGUvYXNtLW02OGsvaHd0ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyYzhhNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaHd0ZXN0LmgKQEAgLTAsMCArMSwxNSBAQAorLyogUm91dGluZXMgdG8gdGVzdCBmb3IgcHJlc2VuY2UvYWJzZW5jZSBvZiBoYXJkd2FyZSByZWdpc3RlcnM6CisgKiBzZWUgYXJjaC9tNjhrL21tL2h3dGVzdC5jLgorICogIC0tIFBNTSA8cG1heWRlbGxAY2hpYXJrLmdyZWVuZW5kLm9yZy51az4gMDUvMTk5OAorICoKKyAqIFJlbW92ZWQgX19pbml0IGZyb20gZGVjbHMuICBXZSBtaWdodCB3YW50IHRoZW0gaW4gbW9kdWxlcywgYW5kCisgKiB0aGUgY29kZSBpcyB0aW55IGFueXdheS4gIDE2LzUvOTggcGIKKyAqLworCisjaWZuZGVmIF9fQVNNX0hXVEVTVF9ICisjZGVmaW5lIF9fQVNNX0hXVEVTVF9ICisKK2V4dGVybiBpbnQgaHdyZWdfcHJlc2VudCh2b2xhdGlsZSB2b2lkICpyZWdwKTsKK2V4dGVybiBpbnQgaHdyZWdfd3JpdGUodm9sYXRpbGUgdm9pZCAqcmVncCwgdW5zaWduZWQgc2hvcnQgdmFsKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2lkZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjExOGZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9pZGUuaApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1tNjhrL2lkZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk2ICBMaW51cyBUb3J2YWxkcyAmIGF1dGhvcnMKKyAqLworCisvKiBDb3B5cmlnaHQoYykgMTk5NiBLYXJzIGRlIEpvbmcgKi8KKy8qIEJhc2VkIG9uIHRoZSBpZGUgZHJpdmVyIGZyb20gMS4yLjEzcGw4ICovCisKKy8qCisgKiBDcmVkaXRzIChhbHBoYWJldGljYWwpOgorICoKKyAqICAtIEJqb2VybiBCcmF1ZWwKKyAqICAtIEthcnMgZGUgSm9uZworICogIC0gVG9yc3RlbiBFYmVsaW5nCisgKiAgLSBEd2lnaHQgRW5nZW4KKyAqICAtIFRob3JzdGVuIEZsb2VjaworICogIC0gUm9tYW4gSG9kZWsKKyAqICAtIEd1ZW50aGVyIEtlbGxldGVyCisgKiAgLSBDaHJpcyBMYXdyZW5jZQorICogIC0gTWljaGFlbCBSYXVzY2gKKyAqICAtIENocmlzdGlhbiBTYXVlcgorICogIC0gTWljaGFlbCBTY2htaXR6CisgKiAgLSBKZXMgU29lcmVuc2VuCisgKiAgLSBNaWNoYWVsIFRodXJtCisgKiAgLSBHZWVydCBVeXR0ZXJob2V2ZW4KKyAqLworCisjaWZuZGVmIF9NNjhLX0lERV9ICisjZGVmaW5lIF9NNjhLX0lERV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2lmZGVmIENPTkZJR19BVEFSSQorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaV9zdGRtYS5oPgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDCisjaW5jbHVkZSA8YXNtL21hY2ludHMuaD4KKyNlbmRpZgorCisjaWZuZGVmIE1BWF9IV0lGUworI2RlZmluZSBNQVhfSFdJRlMJNAkvKiBzYW1lIGFzIHRoZSBvdGhlciBhcmNocyAqLworI2VuZGlmCisKKy8qCisgKiBHZXQgcmlkIG9mIGRlZnMgZnJvbSBpby5oIC0gaWRlIGhhcyBpdHMgcHJpdmF0ZSBhbmQgY29uZmxpY3RpbmcgdmVyc2lvbnMKKyAqIFNpbmNlIHNvIGZhciBubyBzaW5nbGUgbTY4ayBwbGF0Zm9ybSB1c2VzIElTQS9QQ0kgSS9PIHNwYWNlIGZvciBJREUsIHdlCisgKiBhbHdheXMgdXNlIHRoZSBgcmF3JyBNTUlPIHZlcnNpb25zCisgKi8KKyN1bmRlZiBpbmIKKyN1bmRlZiBpbncKKyN1bmRlZiBpbnN3CisjdW5kZWYgaW5sCisjdW5kZWYgaW5zbAorI3VuZGVmIG91dGIKKyN1bmRlZiBvdXR3CisjdW5kZWYgb3V0c3cKKyN1bmRlZiBvdXRsCisjdW5kZWYgb3V0c2wKKyN1bmRlZiByZWFkYgorI3VuZGVmIHJlYWR3CisjdW5kZWYgcmVhZGwKKyN1bmRlZiB3cml0ZWIKKyN1bmRlZiB3cml0ZXcKKyN1bmRlZiB3cml0ZWwKKworI2RlZmluZSBpbmIJCQkJaW5fOAorI2RlZmluZSBpbncJCQkJaW5fYmUxNgorI2RlZmluZSBpbnN3KHBvcnQsIGFkZHIsIG4pCQlyYXdfaW5zdygodTE2ICopcG9ydCwgYWRkciwgbikKKyNkZWZpbmUgaW5sCQkJCWluX2JlMzIKKyNkZWZpbmUgaW5zbChwb3J0LCBhZGRyLCBuKQkJcmF3X2luc2woKHUzMiAqKXBvcnQsIGFkZHIsIG4pCisjZGVmaW5lIG91dGIodmFsLCBwb3J0KQkJCW91dF84KHBvcnQsIHZhbCkKKyNkZWZpbmUgb3V0dyh2YWwsIHBvcnQpCQkJb3V0X2JlMTYocG9ydCwgdmFsKQorI2RlZmluZSBvdXRzdyhwb3J0LCBhZGRyLCBuKQkJcmF3X291dHN3KCh1MTYgKilwb3J0LCBhZGRyLCBuKQorI2RlZmluZSBvdXRsKHZhbCwgcG9ydCkJCQlvdXRfYmUzMihwb3J0LCB2YWwpCisjZGVmaW5lIG91dHNsKHBvcnQsIGFkZHIsIG4pCQlyYXdfb3V0c2woKHUzMiAqKXBvcnQsIGFkZHIsIG4pCisjZGVmaW5lIHJlYWRiCQkJCWluXzgKKyNkZWZpbmUgcmVhZHcJCQkJaW5fYmUxNgorI2RlZmluZSBfX2lkZV9tbV9pbnN3KHBvcnQsIGFkZHIsIG4pCXJhd19pbnN3KCh1MTYgKilwb3J0LCBhZGRyLCBuKQorI2RlZmluZSByZWFkbAkJCQlpbl9iZTMyCisjZGVmaW5lIF9faWRlX21tX2luc2wocG9ydCwgYWRkciwgbikJcmF3X2luc2woKHUzMiAqKXBvcnQsIGFkZHIsIG4pCisjZGVmaW5lIHdyaXRlYih2YWwsIHBvcnQpCQlvdXRfOChwb3J0LCB2YWwpCisjZGVmaW5lIHdyaXRldyh2YWwsIHBvcnQpCQlvdXRfYmUxNihwb3J0LCB2YWwpCisjZGVmaW5lIF9faWRlX21tX291dHN3KHBvcnQsIGFkZHIsIG4pCXJhd19vdXRzdygodTE2ICopcG9ydCwgYWRkciwgbikKKyNkZWZpbmUgd3JpdGVsKHZhbCwgcG9ydCkJCW91dF9iZTMyKHBvcnQsIHZhbCkKKyNkZWZpbmUgX19pZGVfbW1fb3V0c2wocG9ydCwgYWRkciwgbikJcmF3X291dHNsKCh1MzIgKilwb3J0LCBhZGRyLCBuKQorI2lmIGRlZmluZWQoQ09ORklHX0FUQVJJKSB8fCBkZWZpbmVkKENPTkZJR19RNDApCisjZGVmaW5lIGluc3dfc3dhcHcocG9ydCwgYWRkciwgbikJcmF3X2luc3dfc3dhcHcoKHUxNiAqKXBvcnQsIGFkZHIsIG4pCisjZGVmaW5lIG91dHN3X3N3YXB3KHBvcnQsIGFkZHIsIG4pCXJhd19vdXRzd19zd2FwdygodTE2ICopcG9ydCwgYWRkciwgbikKKyNlbmRpZgorCisKKy8qIFE0MCBhbmQgQXRhcmkgaGF2ZSBieXRlc3dhcHBlZCBJREUgYnVzc2VzIGFuZCBzaW5jZSBtYW55IGludGVyZXN0aW5nCisgKiB2YWx1ZXMgaW4gdGhlIGlkZW50aWZpY2F0aW9uIHN0cmluZyBhcmUgdGV4dCwgY2hhcnMgYW5kIHdvcmRzIHRoZXkKKyAqIGhhcHBlbmVkIHRvIGJlIGFsbW9zdCBjb3JyZWN0IHdpdGhvdXQgc3dhcHBpbmcuLiBIb3dldmVyICpfY2FwYWNpdHkKKyAqIGlzIG5lZWRlZCBmb3IgZHJpdmVzIG92ZXIgOCBHQi4gUlogKi8KKyNpZiBkZWZpbmVkKENPTkZJR19RNDApIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKQorI2RlZmluZSBNNjhLX0lERV9TV0FQVyAgKE1BQ0hfSVNfUTQwIHx8IE1BQ0hfSVNfQVRBUkkpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19CTEtfREVWX0ZBTENPTl9JREUKKyNkZWZpbmUgSURFX0FSQ0hfTE9DSworCitleHRlcm4gaW50IGZhbGNvbmlkZV9pbnRyX2xvY2s7CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgaWRlX3JlbGVhc2VfbG9jayAodm9pZCkKK3sKKwlpZiAoTUFDSF9JU19BVEFSSSkgeworCQlpZiAoZmFsY29uaWRlX2ludHJfbG9jayA9PSAwKSB7CisJCQlwcmludGsoImlkZV9yZWxlYXNlX2xvY2s6IGJ1Z1xuIik7CisJCQlyZXR1cm47CisJCX0KKwkJZmFsY29uaWRlX2ludHJfbG9jayA9IDA7CisJCXN0ZG1hX3JlbGVhc2UoKTsKKwl9Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK2lkZV9nZXRfbG9jayhpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwgdm9pZCAqZGF0YSkKK3sKKwlpZiAoTUFDSF9JU19BVEFSSSkgeworCQlpZiAoZmFsY29uaWRlX2ludHJfbG9jayA9PSAwKSB7CisJCQlpZiAoaW5faW50ZXJydXB0KCkgPiAwKQorCQkJCXBhbmljKCAiRmFsY29uIElERSBoYXNuJ3QgU1QtRE1BIGxvY2sgaW4gaW50ZXJydXB0IiApOworCQkJc3RkbWFfbG9jayhoYW5kbGVyLCBkYXRhKTsKKwkJCWZhbGNvbmlkZV9pbnRyX2xvY2sgPSAxOworCQl9CisJfQorfQorI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0ZBTENPTl9JREUgKi8KKworI2RlZmluZSBJREVfQVJDSF9BQ0tfSU5UUgorI2RlZmluZSBpZGVfYWNrX2ludHIoaHdpZikJKChod2lmKS0+aHcuYWNrX2ludHIgPyAoaHdpZiktPmh3LmFja19pbnRyKGh3aWYpIDogMSkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfTTY4S19JREVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9pZHByb20uaCBiL2luY2x1ZGUvYXNtLW02OGsvaWRwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM0OWVhZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaWRwcm9tLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9NNjhLX0lEUFJPTV9ICisjZGVmaW5lIF9NNjhLX0lEUFJPTV9ICisjaW5jbHVkZSA8YXNtLXNwYXJjL2lkcHJvbS5oPgorCisvKiBTdW4zOiBpbiBjb250cm9sIHNwYWNlICovCisjZGVmaW5lIFNVTjNfSURQUk9NX0JBU0UJMHgwMDAwMDAwMAorCisjZW5kaWYgLyogIShfTTY4S19JRFBST01fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaW50ZXJzaWwuaCBiL2luY2x1ZGUvYXNtLW02OGsvaW50ZXJzaWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDgyOTAyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9pbnRlcnNpbC5oCkBAIC0wLDAgKzEsNDggQEAKKyNpZm5kZWYgX1NVTjNfSU5URVJTSUxfSAorI2RlZmluZSBfU1VOM19JTlRFUlNJTF9ICisvKiBiaXRzIDAgYW5kIDEgKi8KKyNkZWZpbmUgSU5URVJTSUxfRlJFUV8zMksgICAgICAgIDB4MDAKKyNkZWZpbmUgSU5URVJTSUxfRlJFUV8xTSAgICAgICAgIDB4MDEKKyNkZWZpbmUgSU5URVJTSUxfRlJFUV8yTSAgICAgICAgIDB4MDIKKyNkZWZpbmUgSU5URVJTSUxfRlJFUV80TSAgICAgICAgIDB4MDMKKworLyogYml0IDIgKi8KKyNkZWZpbmUgSU5URVJTSUxfMTJIX01PREUgICAweDAwCisjZGVmaW5lIElOVEVSU0lMXzI0SF9NT0RFICAgMHgwNAorCisvKiBiaXQgMyAqLworI2RlZmluZSBJTlRFUlNJTF9TVE9QICAgICAgICAgICAgMHgwMAorI2RlZmluZSBJTlRFUlNJTF9SVU4gICAgICAgICAgICAgMHgwOAorCisvKiBiaXQgNCAqLworI2RlZmluZSBJTlRFUlNJTF9JTlRfRU5BQkxFICAgICAweDEwCisjZGVmaW5lIElOVEVSU0lMX0lOVF9ESVNBQkxFICAgIDB4MDAKKworLyogYml0IDUgKi8KKyNkZWZpbmUgSU5URVJTSUxfTU9ERV9OT1JNQUwgICAgIDB4MDAKKyNkZWZpbmUgSU5URVJTSUxfTU9ERV9URVNUICAgICAgIDB4MjAKKworI2RlZmluZSBJTlRFUlNJTF9IWl8xMDBfTUFTSwkgMHgwMgorCitzdHJ1Y3QgaW50ZXJzaWxfZHQgeworCXVuc2lnbmVkIGNoYXIJY3NlYzsKKwl1bnNpZ25lZCBjaGFyCWhvdXI7CisJdW5zaWduZWQgY2hhcgltaW51dGU7CisJdW5zaWduZWQgY2hhcglzZWNvbmQ7CisJdW5zaWduZWQgY2hhcgltb250aDsKKwl1bnNpZ25lZCBjaGFyCWRheTsKKwl1bnNpZ25lZCBjaGFyCXllYXI7CisJdW5zaWduZWQgY2hhcgl3ZWVrZGF5OworfTsKKworc3RydWN0IGludGVyc2lsXzcxNzAgeworCXN0cnVjdCBpbnRlcnNpbF9kdCBjb3VudGVyOworCXN0cnVjdCBpbnRlcnNpbF9kdCBhbGFybTsKKwl1bnNpZ25lZCBjaGFyCWludF9yZWc7CisJdW5zaWduZWQgY2hhcgljbWRfcmVnOworfTsKKworZXh0ZXJuIHZvbGF0aWxlIGNoYXIqIGNsb2NrX3ZhOworI2RlZmluZSBpbnRlcnNpbF9jbG9jayAoKHZvbGF0aWxlIHN0cnVjdCBpbnRlcnNpbF83MTcwICopIGNsb2NrX3ZhKQorI2RlZmluZSBpbnRlcnNpbF9jbGVhcigpICh2b2lkKWludGVyc2lsX2Nsb2NrLT5pbnRfcmVnCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaW8uaCBiL2luY2x1ZGUvYXNtLW02OGsvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI4YjBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9pby5oCkBAIC0wLDAgKzEsMzc2IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tbTY4ay9pby5oCisgKgorICogNC8xLzAwIFJaOiAtIHJld3JpdHRlbiB0byBhdm9pZCBjbGFzaGVzIGJldHdlZW4gSVNBL1BDSSBhbmQgb3RoZXIKKyAqICAgICAgICAgICAgICBJTyBhY2Nlc3MKKyAqICAgICAgICAgICAgLSBhZGRlZCBRNDAgc3VwcG9ydAorICogICAgICAgICAgICAtIGFkZGVkIHNrZWxldG9uIGZvciBHRy1JSSBhbmQgQW1pZ2EgUENNQ0lBCisgKiAyLzMvMDEgUlo6IC0gbW92ZWQgYSBmZXcgbW9yZSBkZWZzIGludG8gcmF3X2lvLmgKKyAqCisgKiBpblgvb3V0WC9yZWFkWC93cml0ZVggc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IGFueSBkcml2ZXIgdW5sZXNzIGl0IGRvZXMKKyAqIElTQSBvciBQQ0kgYWNjZXNzLiBPdGhlciBkcml2ZXJzIHNob3VsZCB1c2UgZnVuY3Rpb24gZGVmaW5lZCBpbiByYXdfaW8uaAorICogb3IgZGVmaW5lIGl0cyBvd24gbWFjcm9zIG9uIHRvcCBvZiB0aGVzZS4KKyAqCisgKiAgICBpblgoKSxvdXRYKCkgICAgICAgICAgICAgIGFyZSBmb3IgUENJIGFuZCBJU0EgSS9PCisgKiAgICByZWFkWCgpLHdyaXRlWCgpICAgICAgICAgIGFyZSBmb3IgUENJIG1lbW9yeQorICogICAgaXNhX3JlYWRYKCksaXNhX3dyaXRlWCgpICBhcmUgZm9yIElTQSBtZW1vcnkKKyAqCisgKiBtb3ZlZCBtZW17Y3B5LHNldH1fKmlvIGluc2lkZSBDT05GSUdfUENJCisgKi8KKworI2lmbmRlZiBfSU9fSAorI2RlZmluZSBfSU9fSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3Jhd19pby5oPgorI2luY2x1ZGUgPGFzbS92aXJ0Y29udmVydC5oPgorCisKKyNpZmRlZiBDT05GSUdfQVRBUkkKKyNpbmNsdWRlIDxhc20vYXRhcmlody5oPgorI2VuZGlmCisKKworLyoKKyAqIElPL01FTSBkZWZpbml0aW9ucyBmb3IgdmFyaW91cyBJU0EgYnJpZGdlcworICovCisKKworI2lmZGVmIENPTkZJR19RNDAKKworI2RlZmluZSBxNDBfaXNhX2lvX2Jhc2UgIDB4ZmY0MDAwMDAKKyNkZWZpbmUgcTQwX2lzYV9tZW1fYmFzZSAweGZmODAwMDAwCisKKyNkZWZpbmUgUTQwX0lTQV9JT19CKGlvYWRkcikgKHE0MF9pc2FfaW9fYmFzZSsxKzQqKCh1bnNpZ25lZCBsb25nKShpb2FkZHIpKSkKKyNkZWZpbmUgUTQwX0lTQV9JT19XKGlvYWRkcikgKHE0MF9pc2FfaW9fYmFzZSsgIDQqKCh1bnNpZ25lZCBsb25nKShpb2FkZHIpKSkKKyNkZWZpbmUgUTQwX0lTQV9NRU1fQihtYWRyKSAgKHE0MF9pc2FfbWVtX2Jhc2UrMSs0KigodW5zaWduZWQgbG9uZykobWFkcikpKQorI2RlZmluZSBRNDBfSVNBX01FTV9XKG1hZHIpICAocTQwX2lzYV9tZW1fYmFzZSsgIDQqKCh1bnNpZ25lZCBsb25nKShtYWRyKSkpCisKKyNkZWZpbmUgTVVMVElfSVNBIDAKKyNlbmRpZiAvKiBRNDAgKi8KKworLyogR0ctSUkgWm9ycm8gdG8gSVNBIGJyaWRnZSAqLworI2lmZGVmIENPTkZJR19HRzIKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2cyX2lzYV9iYXNlOworI2RlZmluZSBHRzJfSVNBX0lPX0IoaW9hZGRyKSAoZ2cyX2lzYV9iYXNlKzErKCh1bnNpZ25lZCBsb25nKShpb2FkZHIpKjQpKQorI2RlZmluZSBHRzJfSVNBX0lPX1coaW9hZGRyKSAoZ2cyX2lzYV9iYXNlKyAgKCh1bnNpZ25lZCBsb25nKShpb2FkZHIpKjQpKQorI2RlZmluZSBHRzJfSVNBX01FTV9CKG1hZHIpICAoZ2cyX2lzYV9iYXNlKzErKCgodW5zaWduZWQgbG9uZykobWFkcikqNCkgJiAweGZmZmZmKSkKKyNkZWZpbmUgR0cyX0lTQV9NRU1fVyhtYWRyKSAgKGdnMl9pc2FfYmFzZSsgICgoKHVuc2lnbmVkIGxvbmcpKG1hZHIpKjQpICYgMHhmZmZmZikpCisKKyNpZm5kZWYgTVVMVElfSVNBCisjZGVmaW5lIE1VTFRJX0lTQSAwCisjZWxzZQorI3VuZGVmIE1VTFRJX0lTQQorI2RlZmluZSBNVUxUSV9JU0EgMQorI2VuZGlmCisjZW5kaWYgLyogR0cyICovCisKKyNpZmRlZiBDT05GSUdfQU1JR0FfUENNQ0lBCisjaW5jbHVkZSA8YXNtL2FtaWdheWxlLmg+CisKKyNkZWZpbmUgQUdfSVNBX0lPX0IoaW9hZGRyKSAoIEdBWUxFX0lPKyhpb2FkZHIpKygoKGlvYWRkcikmMSkqR0FZTEVfT0REKSApCisjZGVmaW5lIEFHX0lTQV9JT19XKGlvYWRkcikgKCBHQVlMRV9JTysoaW9hZGRyKSApCisKKyNpZm5kZWYgTVVMVElfSVNBCisjZGVmaW5lIE1VTFRJX0lTQSAwCisjZWxzZQorI3VuZGVmIE1VTFRJX0lTQQorI2RlZmluZSBNVUxUSV9JU0EgMQorI2VuZGlmCisjZW5kaWYgLyogQU1JR0FfUENNQ0lBICovCisKKworCisjaWZkZWYgQ09ORklHX0lTQQorCisjaWYgTVVMVElfSVNBID09IDAKKyN1bmRlZiBNVUxUSV9JU0EKKyNlbmRpZgorCisjZGVmaW5lIFE0MF9JU0EgKDEpCisjZGVmaW5lIEdHMl9JU0EgKDIpCisjZGVmaW5lIEFHX0lTQSAgKDMpCisKKyNpZiBkZWZpbmVkKENPTkZJR19RNDApICYmICFkZWZpbmVkKE1VTFRJX0lTQSkKKyNkZWZpbmUgSVNBX1RZUEUgUTQwX0lTQQorI2RlZmluZSBJU0FfU0VYICAwCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BTUlHQV9QQ01DSUEpICYmICFkZWZpbmVkKE1VTFRJX0lTQSkKKyNkZWZpbmUgSVNBX1RZUEUgQUdfSVNBCisjZGVmaW5lIElTQV9TRVggIDEKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0dHMikgJiYgIWRlZmluZWQoTVVMVElfSVNBKQorI2RlZmluZSBJU0FfVFlQRSBHRzJfSVNBCisjZGVmaW5lIElTQV9TRVggIDAKKyNlbmRpZgorCisjaWZkZWYgTVVMVElfSVNBCitleHRlcm4gaW50IGlzYV90eXBlOworZXh0ZXJuIGludCBpc2Ffc2V4OworCisjZGVmaW5lIElTQV9UWVBFIGlzYV90eXBlCisjZGVmaW5lIElTQV9TRVggIGlzYV9zZXgKKyNlbmRpZgorCisvKgorICogZGVmaW5lIGlubGluZSBhZGRyIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4gTm9ybWFsbHkgb25seSBvbmUgdmFyaWFudCB3aWxsCisgKiBiZSBjb21waWxlZCBpbiBzbyB0aGUgY2FzZSBzdGF0ZW1lbnQgd2lsbCBiZSBvcHRpbWlzZWQgYXdheQorICovCisKK3N0YXRpYyBpbmxpbmUgdTggKmlzYV9pdGIodW5zaWduZWQgbG9uZyBhZGRyKQoreworICBzd2l0Y2goSVNBX1RZUEUpCisgICAgeworI2lmZGVmIENPTkZJR19RNDAKKyAgICBjYXNlIFE0MF9JU0E6IHJldHVybiAodTggKilRNDBfSVNBX0lPX0IoYWRkcik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR0cyCisgICAgY2FzZSBHRzJfSVNBOiByZXR1cm4gKHU4ICopR0cyX0lTQV9JT19CKGFkZHIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0FNSUdBX1BDTUNJQQorICAgIGNhc2UgQUdfSVNBOiByZXR1cm4gKHU4ICopQUdfSVNBX0lPX0IoYWRkcik7CisjZW5kaWYKKyAgICBkZWZhdWx0OiByZXR1cm4gMDsgLyogYXZvaWQgd2FybmluZ3MsIGp1c3QgaW4gY2FzZSAqLworICAgIH0KK30KK3N0YXRpYyBpbmxpbmUgdTE2ICppc2FfaXR3KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKyAgc3dpdGNoKElTQV9UWVBFKQorICAgIHsKKyNpZmRlZiBDT05GSUdfUTQwCisgICAgY2FzZSBRNDBfSVNBOiByZXR1cm4gKHUxNiAqKVE0MF9JU0FfSU9fVyhhZGRyKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19HRzIKKyAgICBjYXNlIEdHMl9JU0E6IHJldHVybiAodTE2ICopR0cyX0lTQV9JT19XKGFkZHIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0FNSUdBX1BDTUNJQQorICAgIGNhc2UgQUdfSVNBOiByZXR1cm4gKHUxNiAqKUFHX0lTQV9JT19XKGFkZHIpOworI2VuZGlmCisgICAgZGVmYXVsdDogcmV0dXJuIDA7IC8qIGF2b2lkIHdhcm5pbmdzLCBqdXN0IGluIGNhc2UgKi8KKyAgICB9Cit9CitzdGF0aWMgaW5saW5lIHU4ICppc2FfbXRiKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKyAgc3dpdGNoKElTQV9UWVBFKQorICAgIHsKKyNpZmRlZiBDT05GSUdfUTQwCisgICAgY2FzZSBRNDBfSVNBOiByZXR1cm4gKHU4ICopUTQwX0lTQV9NRU1fQihhZGRyKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19HRzIKKyAgICBjYXNlIEdHMl9JU0E6IHJldHVybiAodTggKilHRzJfSVNBX01FTV9CKGFkZHIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0FNSUdBX1BDTUNJQQorICAgIGNhc2UgQUdfSVNBOiByZXR1cm4gKHU4ICopYWRkcjsKKyNlbmRpZgorICAgIGRlZmF1bHQ6IHJldHVybiAwOyAvKiBhdm9pZCB3YXJuaW5ncywganVzdCBpbiBjYXNlICovCisgICAgfQorfQorc3RhdGljIGlubGluZSB1MTYgKmlzYV9tdHcodW5zaWduZWQgbG9uZyBhZGRyKQoreworICBzd2l0Y2goSVNBX1RZUEUpCisgICAgeworI2lmZGVmIENPTkZJR19RNDAKKyAgICBjYXNlIFE0MF9JU0E6IHJldHVybiAodTE2ICopUTQwX0lTQV9NRU1fVyhhZGRyKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19HRzIKKyAgICBjYXNlIEdHMl9JU0E6IHJldHVybiAodTE2ICopR0cyX0lTQV9NRU1fVyhhZGRyKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BTUlHQV9QQ01DSUEKKyAgICBjYXNlIEFHX0lTQTogcmV0dXJuICh1MTYgKilhZGRyOworI2VuZGlmCisgICAgZGVmYXVsdDogcmV0dXJuIDA7IC8qIGF2b2lkIHdhcm5pbmdzLCBqdXN0IGluIGNhc2UgKi8KKyAgICB9Cit9CisKKworI2RlZmluZSBpc2FfaW5iKHBvcnQpICAgICAgaW5fOChpc2FfaXRiKHBvcnQpKQorI2RlZmluZSBpc2FfaW53KHBvcnQpICAgICAgKElTQV9TRVggPyBpbl9iZTE2KGlzYV9pdHcocG9ydCkpIDogaW5fbGUxNihpc2FfaXR3KHBvcnQpKSkKKyNkZWZpbmUgaXNhX291dGIodmFsLHBvcnQpIG91dF84KGlzYV9pdGIocG9ydCksKHZhbCkpCisjZGVmaW5lIGlzYV9vdXR3KHZhbCxwb3J0KSAoSVNBX1NFWCA/IG91dF9iZTE2KGlzYV9pdHcocG9ydCksKHZhbCkpIDogb3V0X2xlMTYoaXNhX2l0dyhwb3J0KSwodmFsKSkpCisKKyNkZWZpbmUgaXNhX3JlYWRiKHApICAgICAgIGluXzgoaXNhX210YigodW5zaWduZWQgbG9uZykocCkpKQorI2RlZmluZSBpc2FfcmVhZHcocCkgICAgICAgXAorCShJU0FfU0VYID8gaW5fYmUxNihpc2FfbXR3KCh1bnNpZ25lZCBsb25nKShwKSkpCVwKKwkJIDogaW5fbGUxNihpc2FfbXR3KCh1bnNpZ25lZCBsb25nKShwKSkpKQorI2RlZmluZSBpc2Ffd3JpdGViKHZhbCxwKSAgb3V0XzgoaXNhX210YigodW5zaWduZWQgbG9uZykocCkpLCh2YWwpKQorI2RlZmluZSBpc2Ffd3JpdGV3KHZhbCxwKSAgXAorCShJU0FfU0VYID8gb3V0X2JlMTYoaXNhX210dygodW5zaWduZWQgbG9uZykocCkpLCh2YWwpKQlcCisJCSA6IG91dF9sZTE2KGlzYV9tdHcoKHVuc2lnbmVkIGxvbmcpKHApKSwodmFsKSkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpc2FfZGVsYXkodm9pZCkKK3sKKyAgc3dpdGNoKElTQV9UWVBFKQorICAgIHsKKyNpZmRlZiBDT05GSUdfUTQwCisgICAgY2FzZSBRNDBfSVNBOiBpc2Ffb3V0YigwLDB4ODApOyBicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19HRzIKKyAgICBjYXNlIEdHMl9JU0E6IGJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0FNSUdBX1BDTUNJQQorICAgIGNhc2UgQUdfSVNBOiBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6IGJyZWFrOyAvKiBhdm9pZCB3YXJuaW5ncyAqLworICAgIH0KK30KKworI2RlZmluZSBpc2FfaW5iX3AocCkgICAgICAoe3U4IHY9aXNhX2luYihwKTtpc2FfZGVsYXkoKTt2O30pCisjZGVmaW5lIGlzYV9vdXRiX3AodixwKSAgICh7aXNhX291dGIoKHYpLChwKSk7aXNhX2RlbGF5KCk7fSkKKyNkZWZpbmUgaXNhX2lud19wKHApICAgICAgKHt1MTYgdj1pc2FfaW53KHApO2lzYV9kZWxheSgpO3Y7fSkKKyNkZWZpbmUgaXNhX291dHdfcCh2LHApICAgKHtpc2Ffb3V0dygodiksKHApKTtpc2FfZGVsYXkoKTt9KQorI2RlZmluZSBpc2FfaW5sX3AocCkgICAgICAoe3UzMiB2PWlzYV9pbmwocCk7aXNhX2RlbGF5KCk7djt9KQorI2RlZmluZSBpc2Ffb3V0bF9wKHYscCkgICAoe2lzYV9vdXRsKCh2KSwocCkpO2lzYV9kZWxheSgpO30pCisKKyNkZWZpbmUgaXNhX2luc2IocG9ydCwgYnVmLCBucikgcmF3X2luc2IoaXNhX2l0Yihwb3J0KSwgKHU4ICopKGJ1ZiksIChucikpCisjZGVmaW5lIGlzYV9vdXRzYihwb3J0LCBidWYsIG5yKSByYXdfb3V0c2IoaXNhX2l0Yihwb3J0KSwgKHU4ICopKGJ1ZiksIChucikpCisKKyNkZWZpbmUgaXNhX2luc3cocG9ydCwgYnVmLCBucikgICAgIFwKKyAgICAgICAoSVNBX1NFWCA/IHJhd19pbnN3KGlzYV9pdHcocG9ydCksICh1MTYgKikoYnVmKSwgKG5yKSkgOiAgICBcCisgICAgICAgICAgICAgICAgICByYXdfaW5zd19zd2Fwdyhpc2FfaXR3KHBvcnQpLCAodTE2ICopKGJ1ZiksIChucikpKQorCisjZGVmaW5lIGlzYV9vdXRzdyhwb3J0LCBidWYsIG5yKSAgICBcCisgICAgICAgKElTQV9TRVggPyByYXdfb3V0c3coaXNhX2l0dyhwb3J0KSwgKHUxNiAqKShidWYpLCAobnIpKSA6ICBcCisgICAgICAgICAgICAgICAgICByYXdfb3V0c3dfc3dhcHcoaXNhX2l0dyhwb3J0KSwgKHUxNiAqKShidWYpLCAobnIpKSkKKyNlbmRpZiAgLyogQ09ORklHX0lTQSAqLworCisKKyNpZiBkZWZpbmVkKENPTkZJR19JU0EpICYmICFkZWZpbmVkKENPTkZJR19QQ0kpCisjZGVmaW5lIGluYiAgICAgaXNhX2luYgorI2RlZmluZSBpbmJfcCAgIGlzYV9pbmJfcAorI2RlZmluZSBvdXRiICAgIGlzYV9vdXRiCisjZGVmaW5lIG91dGJfcCAgaXNhX291dGJfcAorI2RlZmluZSBpbncgICAgIGlzYV9pbncKKyNkZWZpbmUgaW53X3AgICBpc2FfaW53X3AKKyNkZWZpbmUgb3V0dyAgICBpc2Ffb3V0dworI2RlZmluZSBvdXR3X3AgIGlzYV9vdXR3X3AKKyNkZWZpbmUgaW5sICAgICBpc2FfaW53CisjZGVmaW5lIGlubF9wICAgaXNhX2lud19wCisjZGVmaW5lIG91dGwgICAgaXNhX291dHcKKyNkZWZpbmUgb3V0bF9wICBpc2Ffb3V0d19wCisjZGVmaW5lIGluc2IgICAgaXNhX2luc2IKKyNkZWZpbmUgaW5zdyAgICBpc2FfaW5zdworI2RlZmluZSBvdXRzYiAgIGlzYV9vdXRzYgorI2RlZmluZSBvdXRzdyAgIGlzYV9vdXRzdworI2RlZmluZSByZWFkYiAgIGlzYV9yZWFkYgorI2RlZmluZSByZWFkdyAgIGlzYV9yZWFkdworI2RlZmluZSB3cml0ZWIgIGlzYV93cml0ZWIKKyNkZWZpbmUgd3JpdGV3ICBpc2Ffd3JpdGV3CisjZW5kaWYgLyogQ09ORklHX0lTQSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfUENJKQorCisjZGVmaW5lIGlubChwb3J0KSAgICAgICAgaW5fbGUzMihwb3J0KQorI2RlZmluZSBvdXRsKHZhbCxwb3J0KSAgIG91dF9sZTMyKChwb3J0KSwodmFsKSkKKyNkZWZpbmUgcmVhZGwoYWRkcikgICAgICBpbl9sZTMyKGFkZHIpCisjZGVmaW5lIHdyaXRlbCh2YWwsYWRkcikgb3V0X2xlMzIoKGFkZHIpLCh2YWwpKQorCisvKiB0aG9zZSBjYW4gYmUgZGVmaW5lZCBmb3IgYm90aCBJU0EgYW5kIFBDSSAtIGl0IHdvbid0IHdvcmsgdGhvdWdoICovCisjZGVmaW5lIHJlYWRiKGFkZHIpICAgICAgIGluXzgoYWRkcikKKyNkZWZpbmUgcmVhZHcoYWRkcikgICAgICAgaW5fbGUxNihhZGRyKQorI2RlZmluZSB3cml0ZWIodmFsLGFkZHIpICBvdXRfOCgoYWRkciksKHZhbCkpCisjZGVmaW5lIHdyaXRldyh2YWwsYWRkcikgIG91dF9sZTE2KChhZGRyKSwodmFsKSkKKworI2RlZmluZSByZWFkYl9yZWxheGVkKGFkZHIpIHJlYWRiKGFkZHIpCisjZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikgcmVhZHcoYWRkcikKKyNkZWZpbmUgcmVhZGxfcmVsYXhlZChhZGRyKSByZWFkbChhZGRyKQorCisjaWZuZGVmIENPTkZJR19JU0EKKyNkZWZpbmUgaW5iKHBvcnQpICAgICAgaW5fOChwb3J0KQorI2RlZmluZSBvdXRiKHZhbCxwb3J0KSBvdXRfOCgocG9ydCksKHZhbCkpCisjZGVmaW5lIGludyhwb3J0KSAgICAgIGluX2xlMTYocG9ydCkKKyNkZWZpbmUgb3V0dyh2YWwscG9ydCkgb3V0X2xlMTYoKHBvcnQpLCh2YWwpKQorCisjZWxzZQorLyoKKyAqIGtlcm5lbCB3aXRoIGJvdGggSVNBIGFuZCBQQ0kgY29tcGlsZWQgaW4sIHRob3NlIGhhdmUKKyAqIGNvbmZsaWN0aW5nIGRlZnMgZm9yIGluL291dC4gU2ltcGx5IGNvbnNpZGVyIHBvcnQgPCAxMDI0CisgKiBJU0EgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBQQ0kuIHJlYWQsd3JpdGUgbm90IGRlZmluZWQKKyAqIGluIHRoaXMgY2FzZQorICovCisjZGVmaW5lIGluYihwb3J0KSAoKHBvcnQpPDEwMjQgPyBpc2FfaW5iKHBvcnQpIDogaW5fOChwb3J0KSkKKyNkZWZpbmUgaW5iX3AocG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX2luYl9wKHBvcnQpIDogaW5fOChwb3J0KSkKKyNkZWZpbmUgaW53KHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9pbncocG9ydCkgOiBpbl9sZTE2KHBvcnQpKQorI2RlZmluZSBpbndfcChwb3J0KSAoKHBvcnQpPDEwMjQgPyBpc2FfaW53X3AocG9ydCkgOiBpbl9sZTE2KHBvcnQpKQorI2RlZmluZSBpbmwocG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX2lubChwb3J0KSA6IGluX2xlMzIocG9ydCkpCisjZGVmaW5lIGlubF9wKHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9pbmxfcChwb3J0KSA6IGluX2xlMzIocG9ydCkpCisKKyNkZWZpbmUgb3V0Yih2YWwscG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX291dGIoKHZhbCksKHBvcnQpKSA6IG91dF84KChwb3J0KSwodmFsKSkpCisjZGVmaW5lIG91dGJfcCh2YWwscG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX291dGJfcCgodmFsKSwocG9ydCkpIDogb3V0XzgoKHBvcnQpLCh2YWwpKSkKKyNkZWZpbmUgb3V0dyh2YWwscG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX291dHcoKHZhbCksKHBvcnQpKSA6IG91dF9sZTE2KChwb3J0KSwodmFsKSkpCisjZGVmaW5lIG91dHdfcCh2YWwscG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX291dHdfcCgodmFsKSwocG9ydCkpIDogb3V0X2xlMTYoKHBvcnQpLCh2YWwpKSkKKyNkZWZpbmUgb3V0bCh2YWwscG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX291dGwoKHZhbCksKHBvcnQpKSA6IG91dF9sZTMyKChwb3J0KSwodmFsKSkpCisjZGVmaW5lIG91dGxfcCh2YWwscG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX291dGxfcCgodmFsKSwocG9ydCkpIDogb3V0X2xlMzIoKHBvcnQpLCh2YWwpKSkKKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KKworI2lmICFkZWZpbmVkKENPTkZJR19JU0EpICYmICFkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX0hQMzAwKQorLyoKKyAqIFdlIG5lZWQgdG8gZGVmaW5lIGR1bW15IGZ1bmN0aW9ucyBvdGhlcndpc2UgZHJpdmVycy9zZXJpYWwvODI1MC5jIGRvZXNuJ3QgbGluaworICovCisjZGVmaW5lIGluYihwb3J0KSAgICAgICAgMHhmZgorI2RlZmluZSBpbmJfcChwb3J0KSAgICAgIDB4ZmYKKyNkZWZpbmUgb3V0Yih2YWwscG9ydCkgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIG91dGJfcCh2YWwscG9ydCkgZG8geyB9IHdoaWxlICgwKQorCisvKgorICogVGhlc2Ugc2hvdWxkIGJlIHZhbGlkIG9uIGFueSBpb3JlbWFwKCllZCByZWdpb24KKyAqLworI2RlZmluZSByZWFkYihhZGRyKSAgICAgIGluXzgoYWRkcikKKyNkZWZpbmUgd3JpdGViKHZhbCxhZGRyKSBvdXRfOCgoYWRkciksKHZhbCkpCisjZGVmaW5lIHJlYWRsKGFkZHIpICAgICAgaW5fbGUzMihhZGRyKQorI2RlZmluZSB3cml0ZWwodmFsLGFkZHIpIG91dF9sZTMyKChhZGRyKSwodmFsKSkKKyNlbmRpZgorCisjZGVmaW5lIG1taW93YigpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqaW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfTk9DQUNIRV9TRVIpOworfQorc3RhdGljIGlubGluZSB2b2lkICppb3JlbWFwX25vY2FjaGUodW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXAocGh5c2FkZHIsIHNpemUsIElPTUFQX05PQ0FDSEVfU0VSKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCAqaW9yZW1hcF93cml0ZXRocm91Z2godW5zaWduZWQgbG9uZyBwaHlzYWRkciwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9XUklURVRIUk9VR0gpOworfQorc3RhdGljIGlubGluZSB2b2lkICppb3JlbWFwX2Z1bGxjYWNoZSh1bnNpZ25lZCBsb25nIHBoeXNhZGRyLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9GVUxMX0NBQ0hJTkcpOworfQorCisKKy8qIG02OGsgY2FjaGVzIGFyZW4ndCBETUEgY29oZXJlbnQgKi8KK2V4dGVybiB2b2lkIGRtYV9jYWNoZV93YmFja19pbnYodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIGRtYV9jYWNoZV93YmFjayh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgZG1hX2NhY2hlX2ludih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOworCisKKyNpZm5kZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmCisjZWxzZQorI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweDBmZmZmZmZmCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2RlZmluZSBfX0FSQ0hfSEFTX05PX1BBR0VfWkVST19NQVBQRUQJCTEKKworLyoKKyAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KKyAqIGFjY2VzcworICovCisjZGVmaW5lIHhsYXRlX2Rldl9tZW1fcHRyKHApCV9fdmEocCkKKworLyoKKyAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBwb2ludGVyIHRvIGFuIHVuY2FjaGVkIHBvaW50ZXIKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAorCisjZW5kaWYgLyogX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaW9jdGwuaCBiL2luY2x1ZGUvYXNtLW02OGsvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDY4OTE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9pb2N0bC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qICRJZDogaW9jdGwuaCx2IDEuMyAxOTk3LzA0LzE2IDE1OjEwOjA3IGplcyBFeHAgJAorICoKKyAqIGxpbnV4L2lvY3RsLmggZm9yIExpbnV4IGJ5IEguSC4gQmVyZ21hbi4KKyAqLworCisjaWZuZGVmIF9NNjhLX0lPQ1RMX0gKKyNkZWZpbmUgX002OEtfSU9DVExfSAorCisvKiBpb2N0bCBjb21tYW5kIGVuY29kaW5nOiAzMiBiaXRzIHRvdGFsLCBjb21tYW5kIGluIGxvd2VyIDE2IGJpdHMsCisgKiBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBsb3dlciAxNCBiaXRzIG9mIHRoZQorICogdXBwZXIgMTYgYml0cy4KKyAqIEVuY29kaW5nIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGluIHRoZSBpb2N0bCByZXF1ZXN0CisgKiBpcyB1c2VmdWwgZm9yIGNhdGNoaW5nIHByb2dyYW1zIGNvbXBpbGVkIHdpdGggb2xkIHZlcnNpb25zCisgKiBhbmQgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdXNlciBzcGFjZSBvdXRzaWRlIHRoZSB1c2VyIGJ1ZmZlciBhcmVhLgorICogVGhlIGhpZ2hlc3QgMiBiaXRzIGFyZSByZXNlcnZlZCBmb3IgaW5kaWNhdGluZyB0aGUgYGBhY2Nlc3MgbW9kZScnLgorICogTk9URTogVGhpcyBsaW1pdHMgdGhlIG1heCBwYXJhbWV0ZXIgc2l6ZSB0byAxNmtCIC0xICEKKyAqLworCisvKgorICogSSBkb24ndCByZWFsbHkgaGF2ZSBhbnkgaWRlYSBhYm91dCB3aGF0IHRoaXMgc2hvdWxkIGxvb2sgbGlrZSwgc28KKyAqIGZvciB0aGUgdGltZSBiZWluZywgdGhpcyBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZSBQQyBkZWZpbml0aW9ucy4KKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBpcyBmb3IgY29tcGF0aWJpbGl0eSBhY3Jvc3MgdGhlIHZhcmlvdXMgTGludXgKKyAqIHBsYXRmb3Jtcy4gIFRoZSBpMzg2IGlvY3RsIG51bWJlcmluZyBzY2hlbWUgZG9lc24ndCByZWFsbHkgZW5mb3JjZQorICogYSB0eXBlIGZpZWxkLiAgRGUgZmFjdG8sIGhvd2V2ZXIsIHRoZSB0b3AgOCBiaXRzIG9mIHRoZSBsb3dlciAxNgorICogYml0cyBhcmUgaW5kZWVkIHVzZWQgYXMgYSB0eXBlIGZpZWxkLCBzbyB3ZSBtaWdodCBqdXN0IGFzIHdlbGwgbWFrZQorICogdGhpcyBleHBsaWNpdCBoZXJlLiAgUGxlYXNlIGJlIHN1cmUgdG8gdXNlIHRoZSBkZWNvZGluZyBtYWNyb3MKKyAqIGJlbG93IGZyb20gbm93IG9uLgorICovCisjZGVmaW5lIF9JT0NfTlJCSVRTCTgKKyNkZWZpbmUgX0lPQ19UWVBFQklUUwk4CisjZGVmaW5lIF9JT0NfU0laRUJJVFMJMTQKKyNkZWZpbmUgX0lPQ19ESVJCSVRTCTIKKworI2RlZmluZSBfSU9DX05STUFTSwkoKDEgPDwgX0lPQ19OUkJJVFMpLTEpCisjZGVmaW5lIF9JT0NfVFlQRU1BU0sJKCgxIDw8IF9JT0NfVFlQRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfU0laRU1BU0sJKCgxIDw8IF9JT0NfU0laRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfRElSTUFTSwkoKDEgPDwgX0lPQ19ESVJCSVRTKS0xKQorCisjZGVmaW5lIF9JT0NfTlJTSElGVAkwCisjZGVmaW5lIF9JT0NfVFlQRVNISUZUCShfSU9DX05SU0hJRlQrX0lPQ19OUkJJVFMpCisjZGVmaW5lIF9JT0NfU0laRVNISUZUCShfSU9DX1RZUEVTSElGVCtfSU9DX1RZUEVCSVRTKQorI2RlZmluZSBfSU9DX0RJUlNISUZUCShfSU9DX1NJWkVTSElGVCtfSU9DX1NJWkVCSVRTKQorCisvKgorICogRGlyZWN0aW9uIGJpdHMuCisgKi8KKyNkZWZpbmUgX0lPQ19OT05FCTBVCisjZGVmaW5lIF9JT0NfV1JJVEUJMVUKKyNkZWZpbmUgX0lPQ19SRUFECTJVCisKKyNkZWZpbmUgX0lPQyhkaXIsdHlwZSxucixzaXplKSBcCisJKCgoZGlyKSAgPDwgX0lPQ19ESVJTSElGVCkgfCBcCisJICgodHlwZSkgPDwgX0lPQ19UWVBFU0hJRlQpIHwgXAorCSAoKG5yKSAgIDw8IF9JT0NfTlJTSElGVCkgfCBcCisJICgoc2l6ZSkgPDwgX0lPQ19TSVpFU0hJRlQpKQorCisvKiB1c2VkIHRvIGNyZWF0ZSBudW1iZXJzICovCisjZGVmaW5lIF9JTyh0eXBlLG5yKQkJX0lPQyhfSU9DX05PTkUsKHR5cGUpLChuciksMCkKKyNkZWZpbmUgX0lPUih0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKyNkZWZpbmUgX0lPVyh0eXBlLG5yLHNpemUpCV9JT0MoX0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1dSKHR5cGUsbnIsc2l6ZSkJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisKKy8qIHVzZWQgdG8gZGVjb2RlIGlvY3RsIG51bWJlcnMuLiAqLworI2RlZmluZSBfSU9DX0RJUihucikJCSgoKG5yKSA+PiBfSU9DX0RJUlNISUZUKSAmIF9JT0NfRElSTUFTSykKKyNkZWZpbmUgX0lPQ19UWVBFKG5yKQkJKCgobnIpID4+IF9JT0NfVFlQRVNISUZUKSAmIF9JT0NfVFlQRU1BU0spCisjZGVmaW5lIF9JT0NfTlIobnIpCQkoKChucikgPj4gX0lPQ19OUlNISUZUKSAmIF9JT0NfTlJNQVNLKQorI2RlZmluZSBfSU9DX1NJWkUobnIpCQkoKChucikgPj4gX0lPQ19TSVpFU0hJRlQpICYgX0lPQ19TSVpFTUFTSykKKworLyogLi4uYW5kIGZvciB0aGUgZHJpdmVycy9zb3VuZCBmaWxlcy4uLiAqLworCisjZGVmaW5lIElPQ19JTgkJKF9JT0NfV1JJVEUgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX09VVAkJKF9JT0NfUkVBRCA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfSU5PVVQJKChfSU9DX1dSSVRFfF9JT0NfUkVBRCkgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9NQVNLCShfSU9DX1NJWkVNQVNLIDw8IF9JT0NfU0laRVNISUZUKQorI2RlZmluZSBJT0NTSVpFX1NISUZUCShfSU9DX1NJWkVTSElGVCkKKworI2VuZGlmIC8qIF9NNjhLX0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS1tNjhrL2lvY3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNDg5MjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2lvY3Rscy5oCkBAIC0wLDAgKzEsODAgQEAKKyNpZm5kZWYgX19BUkNIX002OEtfSU9DVExTX0hfXworI2RlZmluZSBfX0FSQ0hfTTY4S19JT0NUTFNfSF9fCisKKyNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKworLyogMHg1NCBpcyBqdXN0IGEgbWFnaWMgbnVtYmVyIHRvIG1ha2UgdGhlc2UgcmVsYXRpdmVseSB1bmlxdWUgKCdUJykgKi8KKworI2RlZmluZSBUQ0dFVFMJCTB4NTQwMQorI2RlZmluZSBUQ1NFVFMJCTB4NTQwMgorI2RlZmluZSBUQ1NFVFNXCQkweDU0MDMKKyNkZWZpbmUgVENTRVRTRgkJMHg1NDA0CisjZGVmaW5lIFRDR0VUQQkJMHg1NDA1CisjZGVmaW5lIFRDU0VUQQkJMHg1NDA2CisjZGVmaW5lIFRDU0VUQVcJCTB4NTQwNworI2RlZmluZSBUQ1NFVEFGCQkweDU0MDgKKyNkZWZpbmUgVENTQlJLCQkweDU0MDkKKyNkZWZpbmUgVENYT05DCQkweDU0MEEKKyNkZWZpbmUgVENGTFNICQkweDU0MEIKKyNkZWZpbmUgVElPQ0VYQ0wJMHg1NDBDCisjZGVmaW5lIFRJT0NOWENMCTB4NTQwRAorI2RlZmluZSBUSU9DU0NUVFkJMHg1NDBFCisjZGVmaW5lIFRJT0NHUEdSUAkweDU0MEYKKyNkZWZpbmUgVElPQ1NQR1JQCTB4NTQxMAorI2RlZmluZSBUSU9DT1VUUQkweDU0MTEKKyNkZWZpbmUgVElPQ1NUSQkJMHg1NDEyCisjZGVmaW5lIFRJT0NHV0lOU1oJMHg1NDEzCisjZGVmaW5lIFRJT0NTV0lOU1oJMHg1NDE0CisjZGVmaW5lIFRJT0NNR0VUCTB4NTQxNQorI2RlZmluZSBUSU9DTUJJUwkweDU0MTYKKyNkZWZpbmUgVElPQ01CSUMJMHg1NDE3CisjZGVmaW5lIFRJT0NNU0VUCTB4NTQxOAorI2RlZmluZSBUSU9DR1NPRlRDQVIJMHg1NDE5CisjZGVmaW5lIFRJT0NTU09GVENBUgkweDU0MUEKKyNkZWZpbmUgRklPTlJFQUQJMHg1NDFCCisjZGVmaW5lIFRJT0NJTlEJCUZJT05SRUFECisjZGVmaW5lIFRJT0NMSU5VWAkweDU0MUMKKyNkZWZpbmUgVElPQ0NPTlMJMHg1NDFECisjZGVmaW5lIFRJT0NHU0VSSUFMCTB4NTQxRQorI2RlZmluZSBUSU9DU1NFUklBTAkweDU0MUYKKyNkZWZpbmUgVElPQ1BLVAkJMHg1NDIwCisjZGVmaW5lIEZJT05CSU8JCTB4NTQyMQorI2RlZmluZSBUSU9DTk9UVFkJMHg1NDIyCisjZGVmaW5lIFRJT0NTRVRECTB4NTQyMworI2RlZmluZSBUSU9DR0VURAkweDU0MjQKKyNkZWZpbmUgVENTQlJLUAkJMHg1NDI1CS8qIE5lZWRlZCBmb3IgUE9TSVggdGNzZW5kYnJlYWsoKSAqLworI2RlZmluZSBUSU9DU0JSSwkweDU0MjcgIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRJT0NDQlJLCTB4NTQyOCAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVElPQ0dTSUQJMHg1NDI5ICAvKiBSZXR1cm4gdGhlIHNlc3Npb24gSUQgb2YgRkQgKi8KKyNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCisjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCisKKyNkZWZpbmUgRklPTkNMRVgJMHg1NDUwICAvKiB0aGVzZSBudW1iZXJzIG5lZWQgdG8gYmUgYWRqdXN0ZWQuICovCisjZGVmaW5lIEZJT0NMRVgJCTB4NTQ1MQorI2RlZmluZSBGSU9BU1lOQwkweDU0NTIKKyNkZWZpbmUgVElPQ1NFUkNPTkZJRwkweDU0NTMKKyNkZWZpbmUgVElPQ1NFUkdXSUxECTB4NTQ1NAorI2RlZmluZSBUSU9DU0VSU1dJTEQJMHg1NDU1CisjZGVmaW5lIFRJT0NHTENLVFJNSU9TCTB4NTQ1NgorI2RlZmluZSBUSU9DU0xDS1RSTUlPUwkweDU0NTcKKyNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QJMHg1NDU4IC8qIEZvciBkZWJ1Z2dpbmcgb25seSAqLworI2RlZmluZSBUSU9DU0VSR0VUTFNSICAgMHg1NDU5IC8qIEdldCBsaW5lIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBUSU9DU0VSR0VUTVVMVEkgMHg1NDVBIC8qIEdldCBtdWx0aXBvcnQgY29uZmlnICAqLworI2RlZmluZSBUSU9DU0VSU0VUTVVMVEkgMHg1NDVCIC8qIFNldCBtdWx0aXBvcnQgY29uZmlnICovCisKKyNkZWZpbmUgVElPQ01JV0FJVAkweDU0NUMJLyogd2FpdCBmb3IgYSBjaGFuZ2Ugb24gc2VyaWFsIGlucHV0IGxpbmUocykgKi8KKyNkZWZpbmUgVElPQ0dJQ09VTlQJMHg1NDVECS8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KKyNkZWZpbmUgRklPUVNJWkUJMHg1NDVFCisKKy8qIFVzZWQgZm9yIHBhY2tldCBtb2RlICovCisjZGVmaW5lIFRJT0NQS1RfREFUQQkJIDAKKyNkZWZpbmUgVElPQ1BLVF9GTFVTSFJFQUQJIDEKKyNkZWZpbmUgVElPQ1BLVF9GTFVTSFdSSVRFCSAyCisjZGVmaW5lIFRJT0NQS1RfU1RPUAkJIDQKKyNkZWZpbmUgVElPQ1BLVF9TVEFSVAkJIDgKKyNkZWZpbmUgVElPQ1BLVF9OT1NUT1AJCTE2CisjZGVmaW5lIFRJT0NQS1RfRE9TVE9QCQkzMgorCisjZGVmaW5lIFRJT0NTRVJfVEVNVCAgICAweDAxCS8qIFRyYW5zbWl0dGVyIHBoeXNpY2FsbHkgZW1wdHkgKi8KKworI2VuZGlmIC8qIF9fQVJDSF9NNjhLX0lPQ1RMU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaXBjLmggYi9pbmNsdWRlL2FzbS1tNjhrL2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NmUzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2lwYy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcGMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaXBjYnVmLmggYi9pbmNsdWRlL2FzbS1tNjhrL2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MjNlYTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2lwY2J1Zi5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX19tNjhrX0lQQ0JVRl9IX18KKyNkZWZpbmUgX19tNjhrX0lQQ0JVRl9IX18KKworLyoKKyAqIFRoZSB1c2VyX2lwY19wZXJtIHN0cnVjdHVyZSBmb3IgbTY4ayBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gMzItYml0IG1vZGVfdCBhbmQgc2VxCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IGlwYzY0X3Blcm0KK3sKKwlfX2tlcm5lbF9rZXlfdAkJa2V5OworCV9fa2VybmVsX3VpZDMyX3QJdWlkOworCV9fa2VybmVsX2dpZDMyX3QJZ2lkOworCV9fa2VybmVsX3VpZDMyX3QJY3VpZDsKKwlfX2tlcm5lbF9naWQzMl90CWNnaWQ7CisJX19rZXJuZWxfbW9kZV90CQltb2RlOworCXVuc2lnbmVkIHNob3J0CQlfX3BhZDE7CisJdW5zaWduZWQgc2hvcnQJCXNlcTsKKwl1bnNpZ25lZCBzaG9ydAkJX19wYWQyOworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMTsKKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDI7Cit9OworCisjZW5kaWYgLyogX19tNjhrX0lQQ0JVRl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaXJxLmggYi9pbmNsdWRlL2FzbS1tNjhrL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTY5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2lycS5oCkBAIC0wLDAgKzEsMTMxIEBACisjaWZuZGVmIF9NNjhLX0lSUV9IXworI2RlZmluZSBfTTY4S19JUlFfSF8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisvKgorICogIyBvZiBtNjhrIGludGVycnVwdHMKKyAqLworCisjZGVmaW5lIFNZU19JUlFTIDgKKworLyoKKyAqIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBtYXgoTlVNX1hfU09VUkNFUykgZm9yIGFsbCB0aGUKKyAqIGRpZmZlcmVudCBtNjhrIGhvc3RzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4KKyAqIEN1cnJlbnRseSB0aGUgQXRhcmkgaGFzIDcyIGFuZCB0aGUgQW1pZ2EgMjQsIGJ1dCBpZiBib3RoIGFyZQorICogc3VwcG9ydGVkIGluIHRoZSBrZXJuZWwgaXQgaXMgYmV0dGVyIHRvIG1ha2Ugcm9vbSBmb3IgNzIuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19BVEFSSSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKQorI2RlZmluZSBOUl9JUlFTICg3MitTWVNfSVJRUykKKyNlbHNlCisjZGVmaW5lIE5SX0lSUVMgKDI0K1NZU19JUlFTKQorI2VuZGlmCisKKy8qCisgKiBJbnRlcnJ1cHQgc291cmNlIGRlZmluaXRpb25zCisgKiBHZW5lcmFsIGludGVycnVwdCBzb3VyY2VzIGFyZSB0aGUgbGV2ZWwgMS03LgorICogQWRkaW5nIGFuIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZm9yIG9uZSBvZiB0aGVzZSBzb3VyY2VzCisgKiByZXN1bHRzIGluIHRoZSBhZGRpdGlvbiBvZiB0aGF0IHJvdXRpbmUgdG8gYSBjaGFpbiBvZiByb3V0aW5lcy4KKyAqIEVhY2ggb25lIGlzIGNhbGxlZCBpbiBzdWNjZXNzaW9uLiAgRWFjaCBpbmRpdmlkdWFsIGludGVycnVwdAorICogc2VydmljZSByb3V0aW5lIHNob3VsZCBkZXRlcm1pbmUgaWYgdGhlIGRldmljZSBhc3NvY2lhdGVkIHdpdGgKKyAqIHRoYXQgcm91dGluZSByZXF1aXJlcyBzZXJ2aWNlLgorICovCisKKyNkZWZpbmUgSVJRMQkJKDEpCS8qIGxldmVsIDEgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUTIJCSgyKQkvKiBsZXZlbCAyIGludGVycnVwdCAqLworI2RlZmluZSBJUlEzCQkoMykJLyogbGV2ZWwgMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRNAkJKDQpCS8qIGxldmVsIDQgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUTUJCSg1KQkvKiBsZXZlbCA1IGludGVycnVwdCAqLworI2RlZmluZSBJUlE2CQkoNikJLyogbGV2ZWwgNiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRNwkJKDcpCS8qIGxldmVsIDcgaW50ZXJydXB0IChub24tbWFza2FibGUpICovCisKKy8qCisgKiAiR2VuZXJpYyIgaW50ZXJydXB0IHNvdXJjZXMKKyAqLworCisjZGVmaW5lIElSUV9TQ0hFRF9USU1FUgkoOCkgICAgLyogaW50ZXJydXB0IHNvdXJjZSBmb3Igc2NoZWR1bGluZyB0aW1lciAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgaXJxX2Nhbm9uaWNhbGl6ZShpbnQgaXJxKQoreworCXJldHVybiBpcnE7Cit9CisKKy8qCisgKiBNYWNoaW5lIHNwZWNpZmljIGludGVycnVwdCBzb3VyY2VzLgorICoKKyAqIEFkZGluZyBhbiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciBhIHNvdXJjZSB3aXRoIHRoaXMgYml0CisgKiBzZXQgaW5kaWNhdGVzIGEgc3BlY2lhbCBtYWNoaW5lIHNwZWNpZmljIGludGVycnVwdCBzb3VyY2UuCisgKiBUaGUgbWFjaGluZSBzcGVjaWZpYyBmaWxlcyBkZWZpbmUgdGhlc2Ugc291cmNlcy4KKyAqCisgKiBUaGUgSVJRX01BQ0hTUEVDIGJpdCBpcyBub3cgZ29uZSAtIHRoZSBvbmx5IHRoaW5nIGl0IGRpZCB3YXMgdG8KKyAqIGludHJvZHVjZSB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4KKyAqCisgKiBBbGwgaW50ZXJydXB0IGhhbmRsaW5nIGlzIGFjdHVhbGx5IG1hY2hpbmUgc3BlY2lmaWMgc28gaXQgaXMgYmV0dGVyCisgKiB0byB1c2UgZnVuY3Rpb24gcG9pbnRlcnMsIGFzIHVzZWQgYnkgdGhlIFNwYXJjIHBvcnQsIGFuZCBzZWxlY3QgdGhlCisgKiBpbnRlcnJ1cHQgaGFuZGxpbmcgZnVuY3Rpb25zIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBrZXJuZWwuIFRoaXMgd2F5CisgKiB3ZSBzYXZlIHNvbWUgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQgYXQgcnVuLXRpbWUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAxLzExLzk3IC0gSmVzCisgKi8KKworZXh0ZXJuIHZvaWQgKCplbmFibGVfaXJxKSh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgKCpkaXNhYmxlX2lycSkodW5zaWduZWQgaW50KTsKKworI2RlZmluZSBkaXNhYmxlX2lycV9ub3N5bmMJZGlzYWJsZV9pcnEKKyNkZWZpbmUgZW5hYmxlX2lycV9ub3N5bmMJZW5hYmxlX2lycQorCitzdHJ1Y3QgcHRfcmVnczsKKworZXh0ZXJuIGludCBjcHVfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50LAorCQkJICAgaXJxcmV0dXJuX3QgKCopKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcsIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGNwdV9mcmVlX2lycSh1bnNpZ25lZCBpbnQsIHZvaWQgKik7CisKKy8qCisgKiB2YXJpb3VzIGZsYWdzIGZvciByZXF1ZXN0X2lycSgpIC0gdGhlIEFtaWdhIG5vdyB1c2VzIHRoZSBzdGFuZGFyZAorICogbWVjaGFuaXNtIGxpa2UgYWxsIG90aGVyIGFyY2hpdGVjdHVyZXMgLSBTQV9JTlRFUlJVUFQgYW5kIFNBX1NISVJRCisgKiBhcmUgeW91ciBmcmllbmRzLgorICovCisjaWZuZGVmIE1BQ0hfQU1JR0FfT05MWQorI2RlZmluZSBJUlFfRkxHX0xPQ0sJKDB4MDAwMSkJLyogaGFuZGxlciBpcyBub3QgcmVwbGFjZWFibGUJKi8KKyNkZWZpbmUgSVJRX0ZMR19SRVBMQUNFCSgweDAwMDIpCS8qIHJlcGxhY2UgZXhpc3RpbmcgaGFuZGxlcgkqLworI2RlZmluZSBJUlFfRkxHX0ZBU1QJKDB4MDAwNCkKKyNkZWZpbmUgSVJRX0ZMR19TTE9XCSgweDAwMDgpCisjZGVmaW5lIElSUV9GTEdfU1RECSgweDgwMDApCS8qIGludGVybmFsbHkgdXNlZAkJKi8KKyNlbmRpZgorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBjaGFpbiB0b2dldGhlciB0aGUgSVNScyBmb3IgYSBwYXJ0aWN1bGFyCisgKiBpbnRlcnJ1cHQgc291cmNlIChpZiBpdCBzdXBwb3J0cyBjaGFpbmluZykuCisgKi8KK3R5cGVkZWYgc3RydWN0IGlycV9ub2RlIHsKKwlpcnFyZXR1cm5fdAkoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXZvaWQJCSpkZXZfaWQ7CisJY29uc3QgY2hhcgkqZGV2bmFtZTsKKwlzdHJ1Y3QgaXJxX25vZGUgKm5leHQ7Cit9IGlycV9ub2RlX3Q7CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBoYXMgb25seSA0IGVsZW1lbnRzIGZvciBzcGVlZCByZWFzb25zCisgKi8KK3R5cGVkZWYgc3RydWN0IGlycV9oYW5kbGVyIHsKKwlpcnFyZXR1cm5fdAkoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXZvaWQJCSpkZXZfaWQ7CisJY29uc3QgY2hhcgkqZGV2bmFtZTsKK30gaXJxX2hhbmRsZXJfdDsKKworLyogY291bnQgb2Ygc3B1cmlvdXMgaW50ZXJydXB0cyAqLworZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGludCBudW1fc3B1cmlvdXM7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgaXJxX25vZGVfdAorICovCitleHRlcm4gaXJxX25vZGVfdCAqbmV3X2lycV9ub2RlKHZvaWQpOworCitzdHJ1Y3QgaXJxYWN0aW9uOworc3RydWN0IHB0X3JlZ3M7CitpbnQgaGFuZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCBpcnFhY3Rpb24gKik7CisKKyNlbmRpZiAvKiBfTTY4S19JUlFfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsva2Jpby5oIGIvaW5jbHVkZS9hc20tbTY4ay9rYmlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFmYmY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsva2Jpby5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tc3BhcmMva2Jpby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1tNjhrL2ttYXBfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODQzYzYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9rbWFwX3R5cGVzLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfX0FTTV9NNjhLX0tNQVBfVFlQRVNfSAorI2RlZmluZSBfX0FTTV9NNjhLX0tNQVBfVFlQRVNfSAorCitlbnVtIGttX3R5cGUgeworCUtNX0JPVU5DRV9SRUFELAorCUtNX1NLQl9TVU5SUENfREFUQSwKKwlLTV9TS0JfREFUQV9TT0ZUSVJRLAorCUtNX1VTRVIwLAorCUtNX1VTRVIxLAorCUtNX0JJT19TUkNfSVJRLAorCUtNX0JJT19EU1RfSVJRLAorCUtNX1BURTAsCisJS01fUFRFMSwKKwlLTV9JUlEwLAorCUtNX0lSUTEsCisJS01fU09GVElSUTAsCisJS01fU09GVElSUTEsCisJS01fVFlQRV9OUgorfTsKKworI2VuZGlmCS8qIF9fQVNNX002OEtfS01BUF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLW02OGsvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhODIyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2xpbmthZ2UuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fTElOS0FHRV9ICisjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAorCisjZGVmaW5lIF9fQUxJR04gLmFsaWduIDQKKyNkZWZpbmUgX19BTElHTl9TVFIgIi5hbGlnbiA0IgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbG9jYWwuaCBiL2luY2x1ZGUvYXNtLW02OGsvbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzI1OTI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9sb2NhbC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNX002OEtfTE9DQUxfSAorI2RlZmluZSBfQVNNX002OEtfTE9DQUxfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWwuaD4KKworI2VuZGlmIC8qIF9BU01fTTY4S19MT0NBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21hY19hc2MuaCBiL2luY2x1ZGUvYXNtLW02OGsvbWFjX2FzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmU1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21hY19hc2MuaApAQCAtMCwwICsxLDI3IEBACisvKgorICoJQXBwbGUgU291bmQgQ2hpcAorICovCisKKyNpZm5kZWYgX19BU01fTUFDX0FTQ19ICisjZGVmaW5lIF9fQVNNX01BQ19BU0NfSAorCisvKgorICoJQVNDIG9mZnNldHMgYW5kIGNvbnRyb2xzCisgKi8KKworI2RlZmluZSBBU0NfQlVGX0JBU0UJMHgwMAkvKiBSQU0gYnVmZmVyIG9mZnNldCAqLworI2RlZmluZSBBU0NfQlVGX1NJWkUJMHg4MDAKKworI2RlZmluZSBBU0NfQ09OVFJPTAkweDgwMAorI2RlZmluZSBBU0NfQ09OVFJPTF9PRkYJCTB4MDAKKyNkZWZpbmUgQVNDX0ZSRVEoY2hhbixieXRlKQkoKDB4ODEwKSsoKGNoYW4pPDwzKSsoYnl0ZSkpCisjZGVmaW5lIEFTQ19FTkFCTEUJMHg4MDEKKyNkZWZpbmUgQVNDX0VOQUJMRV9TQU1QTEUJMHgwMgorI2RlZmluZSBBU0NfTU9ERQkweDgwMgorI2RlZmluZSBBU0NfTU9ERV9TQU1QTEUJCTB4MDIKKworI2RlZmluZSBBU0NfVk9MVU1FCTB4ODA2CisjZGVmaW5lIEFTQ19DSEFOCTB4ODA3CS8qID8/PyAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tYWNfYmFib29uLmggYi9pbmNsdWRlL2FzbS1tNjhrL21hY19iYWJvb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODc4NTA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNfYmFib29uLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgIkJhYm9vbiIgY3VzdG9tIElDIG9uIHRoZSBQb3dlckJvb2sgMTkwLgorICovCisKKyNkZWZpbmUgQkFCT09OX0JBU0UgKDB4NTBGMUEwMDApCS8qIHNhbWUgYXMgSURFIGNvbnRyb2xsZXIgYmFzZSAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgYmFib29uIHsKKwljaGFyCXBhZDFbMjA4XTsJLyogZ2VuZXJpYyBJREUgcmVnaXN0ZXJzLCBub3QgdXNlZCBoZXJlICovCisJc2hvcnQJbWJfY29udHJvbDsJLyogQ29udHJvbCByZWdpc3RlcjoKKwkJCQkgKiBiaXQgNSA6IHNsb3QgMiBwb3dlciBjb250cm9sCisJCQkJICogYml0IDYgOiBzbG90IDEgcG93ZXIgY29udHJvbAorCQkJCSAqLworCWNoYXIJcGFkMlsyXTsKKwlzaG9ydAltYl9zdGF0dXM7CS8qICgweEQ0KSBtZWRpYSBiYXkgc3RhdHVzIHJlZ2lzdGVyOgorCQkJCSAqCisJCQkJICogYml0IDA6ID8/Pz8KKwkJCQkgKiBiaXQgMTogSURFIGludGVycnVwdCBhY3RpdmU/CisJCQkJICogYml0IDI6IGJheSBzdGF0dXMsIDAgPSBmdWxsLCAxID0gZW1wdHkKKwkJCQkgKiBiaXQgMzogPz8/PworCQkJCSAqLworCWNoYXIJcGFkM1syXTsJLyogKDB4RDYpIG5vdCB1c2VkICovCisJc2hvcnQJbWJfaWZyOwkJLyogKDB4RDgpIG1lZGlhIGJheSBpbnRlcnJ1cHQgZmxhZ3MgcmVnaXN0ZXI6CisJCQkJICoKKwkJCQkgKiBiaXQgMDogPz8/PworCQkJCSAqIGJpdCAxOiBJREUgY29udHJvbGxlciBpbnRlcnJ1cHQKKwkJCQkgKiBiaXQgMjogbWVkaWEgYmF5IHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0CisJCQkJICovCit9OworCitleHRlcm4gdm9sYXRpbGUgc3RydWN0IGJhYm9vbiAqYmFib29uOworCisjZW5kaWYgLyogX19BU1NFTUJMWSAqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbWFjX2lvcC5oIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNfaW9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBkMmUzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWFjX2lvcC5oCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogSS9PIFByb2Nlc3NvciAoSU9QKSBkZWZpbmVzIGFuZCBzdHJ1Y3R1cmVzLCBtb3N0bHkgc25hZ2dlZCBmcm9tIEEvVVgKKyAqIGhlYWRlciBmaWxlcy4KKyAqCisgKiBUaGUgb3JpZ2luYWwgaGVhZGVyIGZyb20gd2hpY2ggdGhpcyB3YXMgdGFrZW4gaXMgY29weXJpZ2h0ZWQuIEkndmUgZG9uZSBzb21lCisgKiByZXdyaXRpbmcgKGluIGZhY3QgbXkgY2hhbmdlcyBtYWtlIHRoaXMgYSBiaXQgbW9yZSByZWFkYWJsZSwgSU1ITykgYnV0IHNvbWUKKyAqIG1vcmUgc2hvdWxkIGJlIGRvbmUuCisgKi8KKworLyoKKyAqIFRoaXMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSU9Qcy4gVXNlIHRoaXMgYXMgdGhlIGFkZHJlc3Mgb2YKKyAqIGEgInN0cnVjdCBpb3AiIChzZWUgYmVsb3cpIHRvIHNlZSB3aGVyZSB0aGUgYWN0dWFsIHJlZ2lzdGVycyBmYWxsLgorICovCisKKyNkZWZpbmUgU0NDX0lPUF9CQVNFX0lJRlgJKDB4NTBGMDQwMDApCisjZGVmaW5lIElTTV9JT1BfQkFTRV9JSUZYCSgweDUwRjEyMDAwKQorCisjZGVmaW5lIFNDQ19JT1BfQkFTRV9RVUFEUkEJKDB4NTBGMEMwMDApCisjZGVmaW5lIElTTV9JT1BfQkFTRV9RVUFEUkEJKDB4NTBGMUUwMDApCisKKy8qIElPUCBzdGF0dXMvY29udHJvbCByZWdpc3RlciBiaXRzOiAqLworCisjZGVmaW5lCUlPUF9CWVBBU1MJMHgwMQkvKiBieXBhc3MtbW9kZSBoYXJkd2FyZSBhY2Nlc3MgKi8KKyNkZWZpbmUJSU9QX0FVVE9JTkMJMHgwMgkvKiBhbGxvdyBhdXRvaW5jcmVtZW50IG9mIHJhbWhpL2xvICovCisjZGVmaW5lCUlPUF9SVU4JCTB4MDQJLyogc2V0IHRvIDAgdG8gcmVzZXQgSU9QIGNoaXAgKi8KKyNkZWZpbmUJSU9QX0lSUQkJMHgwOAkvKiBnZW5lcmF0ZSBJUlEgdG8gSU9QIGlmIDEgKi8KKyNkZWZpbmUJSU9QX0lOVDAJMHgxMAkvKiBpbnRyIHByaW9yaXR5IGZyb20gSU9QIHRvIGhvc3QgKi8KKyNkZWZpbmUJSU9QX0lOVDEJMHgyMAkvKiBpbnRyIHByaW9yaXR5IGZyb20gSU9QIHRvIGhvc3QgKi8KKyNkZWZpbmUJSU9QX0hXSU5UCTB4NDAJLyogSVJRIGZyb20gaGFyZHdhcmU7IGJ5cGFzcyBtb2RlIG9ubHkgKi8KKyNkZWZpbmUJSU9QX0RNQUlOQUNUSVZFCTB4ODAJLyogbm8gRE1BIHJlcXVlc3QgYWN0aXZlOyBieXBhc3MgbW9kZSBvbmx5ICovCisKKyNkZWZpbmUgTlVNX0lPUFMJMgorI2RlZmluZSBOVU1fSU9QX0NIQU4JNworI2RlZmluZSBOVU1fSU9QX01TR1MJTlVNX0lPUF9DSEFOKjgKKyNkZWZpbmUgSU9QX01TR19MRU4JMzIKKworLyogSU9QIHJlZmVyZW5jZSBudW1iZXJzLCB1c2VkIGJ5IHRoZSBnbG9iYWxseS12aXNpYmxlIGlvcF94eHggZnVuY3Rpb25zICovCisKKyNkZWZpbmUgSU9QX05VTV9TQ0MJMAorI2RlZmluZSBJT1BfTlVNX0lTTQkxCisKKy8qIElPUCBjaGFubmVsIHN0YXRlcyAqLworCisjZGVmaW5lIElPUF9NU0dfSURMRQkJMCAgICAgICAvKiBpZGxlICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElPUF9NU0dfTkVXCQkxICAgICAgIC8qIG5ldyBtZXNzYWdlIHNlbnQgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSU9QX01TR19SQ1ZECQkyICAgICAgIC8qIG1lc3NhZ2UgcmVjZWl2ZWQ7IHByb2Nlc3NpbmcgKi8KKyNkZWZpbmUgSU9QX01TR19DT01QTEVURQkzICAgICAgIC8qIG1lc3NhZ2UgcHJvY2Vzc2luZyBjb21wbGV0ZSAgKi8KKworLyogSU9QIG1lc3NhZ2Ugc3RhdHVzIGNvZGVzICovCisKKyNkZWZpbmUgSU9QX01TR1NUQVRVU19VTlVTRUQJMAkvKiBVbnVzdWVkIG1lc3NhZ2Ugc3RydWN0dXJlICAgICAgICovCisjZGVmaW5lIElPUF9NU0dTVEFUVVNfV0FJVElORwkxCS8qIHdhaXRpbmcgZm9yIGNoYW5uZWwgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSU9QX01TR1NUQVRVU19TRU5UCTIJLyogbWVzc2FnZSBzZW50LCBhd2FpdGluZyByZXBseSAgICAqLworI2RlZmluZSBJT1BfTVNHU1RBVFVTX0NPTVBMRVRFCTMJLyogbWVzc2FnZSBjb21wbGV0ZSBhbmQgcmVwbHkgcmN2ZCAqLworI2RlZmluZSBJT1BfTVNHU1RBVFVTX1VOU09MCTYJLyogbWVzc2FnZSBpcyB1bnNvbGljaXRlZCAgICAgICAgICAqLworCisvKiBJT1AgbWVtb3J5IGFkZHJlc3NlcyBvZiB0aGUgbWVtYmVycyBvZiB0aGUgbWFjX2lvcF9rZXJuZWwgc3RydWN0dXJlLiAqLworCisjZGVmaW5lIElPUF9BRERSX01BWF9TRU5EX0NIQU4JMHgwMjAwCisjZGVmaW5lIElPUF9BRERSX1NFTkRfU1RBVEUJMHgwMjAxCisjZGVmaW5lIElPUF9BRERSX1BBVENIX0NUUkwJMHgwMjFGCisjZGVmaW5lIElPUF9BRERSX1NFTkRfTVNHCTB4MDIyMAorI2RlZmluZSBJT1BfQUREUl9NQVhfUkVDVl9DSEFOCTB4MDMwMAorI2RlZmluZSBJT1BfQUREUl9SRUNWX1NUQVRFCTB4MDMwMQorI2RlZmluZSBJT1BfQUREUl9BTElWRQkJMHgwMzFGCisjZGVmaW5lIElPUF9BRERSX1JFQ1ZfTVNHCTB4MDMyMAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogSU9QIENvbnRyb2wgcmVnaXN0ZXJzLCBzdGFnZ2VyZWQgYmVjYXVzZSBpbiB1c3VhbCBBcHBsZSBzdHlsZSB0aGV5IHdlcmUKKyAqIHRvbyBsYXp5IHRvIGRlY29kZSB0aGUgQTAgYml0LiBUaGlzIHN0cnVjdHVyZSBpcyBhc3N1bWVkIHRvIGJlZ2luIGF0CisgKiBvbmUgb2YgdGhlIHh4eF9JT1BfQkFTRSBhZGRyZXNzZXMgZ2l2ZW4gYWJvdmUuCisgKi8KKworc3RydWN0IG1hY19pb3AgeworICAgIF9fdTgJcmFtX2FkZHJfaGk7CS8qIHNoYXJlZCBSQU0gYWRkcmVzcyBoaSBieXRlICovCisgICAgX191OAlwYWQwOworICAgIF9fdTgJcmFtX2FkZHJfbG87CS8qIHNoYXJlZCBSQU0gYWRkcmVzcyBsbyBieXRlICovCisgICAgX191OAlwYWQxOworICAgIF9fdTgJc3RhdHVzX2N0cmw7CS8qIHN0YXR1cy9jb250cm9sIHJlZ2lzdGVyICovCisgICAgX191OAlwYWQyWzNdOworICAgIF9fdTgJcmFtX2RhdGE7CS8qIFJBTSBkYXRhIGJ5dGUgYXQgcmFtaGkvbG8gKi8KKworICAgIF9fdTgJcGFkM1syM107CisKKyAgICAvKiBCeXBhc3MtbW9kZSBoYXJkd2FyZSBhY2Nlc3MgcmVnaXN0ZXJzICovCisKKyAgICB1bmlvbiB7CisJc3RydWN0IHsJCS8qIFNDQyByZWdpc3RlcnMgKi8KKwkgICAgX191OCBzY2NiX2NtZDsJLyogU0NDIEIgY29tbWFuZCByZWcgKi8KKwkgICAgX191OCBwYWQ0OworCSAgICBfX3U4IHNjY2FfY21kOwkvKiBTQ0MgQSBjb21tYW5kIHJlZyAqLworCSAgICBfX3U4IHBhZDU7CisJICAgIF9fdTggc2NjYl9kYXRhOwkvKiBTQ0MgQiBkYXRhICovCisJICAgIF9fdTggcGFkNjsKKwkgICAgX191OCBzY2NhX2RhdGE7CS8qIFNDQyBBIGRhdGEgKi8KKwl9IHNjY19yZWdzOworCisJc3RydWN0IHsJCS8qIElTTSByZWdpc3RlcnMgKi8KKwkgICAgX191OCB3ZGF0YTsJCS8qIHdyaXRlIGEgZGF0YSBieXRlICovCisJICAgIF9fdTggcGFkNzsKKwkgICAgX191OCB3bWFyazsJCS8qIHdyaXRlIGEgbWFyayBieXRlICovCisJICAgIF9fdTggcGFkODsKKwkgICAgX191OCB3Y3JjOwkJLyogd3JpdGUgMi1ieXRlIGNyYyB0byBkaXNrICovCisJICAgIF9fdTggcGFkOTsKKwkgICAgX191OCB3cGFyYW1zOwkvKiB3cml0ZSB0aGUgcGFyYW0gcmVncyAqLworCSAgICBfX3U4IHBhZDEwOworCSAgICBfX3U4IHdwaGFzZTsJLyogd3JpdGUgdGhlIHBoYXNlIHN0YXRlcyAmIGRpcnMgKi8KKwkgICAgX191OCBwYWQxMTsKKwkgICAgX191OCB3c2V0dXA7CS8qIHdyaXRlIHRoZSBzZXR1cCByZWdpc3RlciAqLworCSAgICBfX3U4IHBhZDEyOworCSAgICBfX3U4IHd6ZXJvZXM7CS8qIG1vZGUgcmVnOiAxJ3MgY2xyIGJpdHMsIDAncyBhcmUgeCAqLworCSAgICBfX3U4IHBhZDEzOworCSAgICBfX3U4IHdvbmVzOwkJLyogbW9kZSByZWc6IDEncyBzZXQgYml0cywgMCdzIGFyZSB4ICovCisJICAgIF9fdTggcGFkMTQ7CisJICAgIF9fdTggcmRhdGE7CQkvKiByZWFkIGEgZGF0YSBieXRlICovCisJICAgIF9fdTggcGFkMTU7CisJICAgIF9fdTggcm1hcms7CQkvKiByZWFkIGEgbWFyayBieXRlICovCisJICAgIF9fdTggcGFkMTY7CisJICAgIF9fdTggcmVycm9yOwkvKiByZWFkIHRoZSBlcnJvciByZWdpc3RlciAqLworCSAgICBfX3U4IHBhZDE3OworCSAgICBfX3U4IHJwYXJhbXM7CS8qIHJlYWQgdGhlIHBhcmFtIHJlZ3MgKi8KKwkgICAgX191OCBwYWQxODsKKwkgICAgX191OCBycGhhc2U7CS8qIHJlYWQgdGhlIHBoYXNlIHN0YXRlcyAmIGRpcnMgKi8KKwkgICAgX191OCBwYWQxOTsKKwkgICAgX191OCByc2V0dXA7CS8qIHJlYWQgdGhlIHNldHVwIHJlZ2lzdGVyICovCisJICAgIF9fdTggcGFkMjA7CisJICAgIF9fdTggcm1vZGU7CQkvKiByZWFkIHRoZSBtb2RlIHJlZ2lzdGVyICovCisJICAgIF9fdTggcGFkMjE7CisJICAgIF9fdTggcmhhbmRzaGFrZTsJLyogcmVhZCB0aGUgaGFuZHNoYWtlIHJlZ2lzdGVyICovCisJfSBpc21fcmVnczsKKyAgICB9IGI7Cit9OworCisvKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHRyYWNrIElPUCBtZXNzYWdlcyBpbiB0aGUgTGludXgga2VybmVsICovCisKK3N0cnVjdCBpb3BfbXNnIHsKKwlzdHJ1Y3QgaW9wX21zZwkqbmV4dDsJCS8qIG5leHQgbWVzc2FnZSBpbiBxdWV1ZSBvciBOVUxMICAgICAqLworCXVpbnQJaW9wX251bTsJCS8qIElPUCBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQJY2hhbm5lbDsJCS8qIGNoYW5uZWwgbnVtYmVyICAgICAgICAgICAgICAgICAgICAqLworCXZvaWQJKmNhbGxlcl9wcml2OwkJLyogY2FsbGVyIHByaXZhdGUgZGF0YSAgICAgICAgICAgICAgICovCisJaW50CXN0YXR1czsJCQkvKiBzdGF0dXMgb2YgdGhpcyBtZXNzYWdlICAgICAgICAgICAgKi8KKwlfX3U4CW1lc3NhZ2VbSU9QX01TR19MRU5dOwkvKiB0aGUgbWVzc2FnZSBiZWluZyBzZW50L3JlY2VpdmVkICAgKi8KKwlfX3U4CXJlcGx5W0lPUF9NU0dfTEVOXTsJLyogdGhlIHJlcGx5IHRvIHRoZSBtZXNzYWdlICAgICAgICAgICovCisJdm9pZAkoKmhhbmRsZXIpKHN0cnVjdCBpb3BfbXNnICosIHN0cnVjdCBwdF9yZWdzICopOworCQkJCQkvKiBmdW5jdGlvbiB0byBjYWxsIHdoZW4gcmVwbHkgcmVjdmQgKi8KK307CisKK2V4dGVybiBpbnQgaW9wX3NjY19wcmVzZW50LGlvcF9pc21fcHJlc2VudDsKKworZXh0ZXJuIGludCBpb3BfbGlzdGVuKHVpbnQsIHVpbnQsCisJCQl2b2lkICgqaGFuZGxlcikoc3RydWN0IGlvcF9tc2cgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCQljb25zdCBjaGFyICopOworZXh0ZXJuIGludCBpb3Bfc2VuZF9tZXNzYWdlKHVpbnQsIHVpbnQsIHZvaWQgKiwgdWludCwgX191OCAqLAorCQkJICAgIHZvaWQgKCopKHN0cnVjdCBpb3BfbXNnICosIHN0cnVjdCBwdF9yZWdzICopKTsKK2V4dGVybiB2b2lkIGlvcF9jb21wbGV0ZV9tZXNzYWdlKHN0cnVjdCBpb3BfbXNnICopOworZXh0ZXJuIHZvaWQgaW9wX3VwbG9hZF9jb2RlKHVpbnQsIF9fdTggKiwgdWludCwgX191MTYpOworZXh0ZXJuIHZvaWQgaW9wX2Rvd25sb2FkX2NvZGUodWludCwgX191OCAqLCB1aW50LCBfX3UxNik7CitleHRlcm4gX191OCAqaW9wX2NvbXBhcmVfY29kZSh1aW50LCBfX3U4ICosIHVpbnQsIF9fdTE2KTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tYWNfbW91c2UuaCBiL2luY2x1ZGUvYXNtLW02OGsvbWFjX21vdXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlhNWMyOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWFjX21vdXNlLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfQVNNX01BQ19NT1VTRV9ICisjZGVmaW5lIF9BU01fTUFDX01PVVNFX0gKKworLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLW02OGsvbWFjX21vdXNlLmgKKyAqIGhlYWRlciBmaWxlIGZvciBNYWNpbnRvc2ggQURCIG1vdXNlIGRyaXZlcgorICogMjctMTAtOTcgTWljaGFlbCBTY2htaXR6CisgKiBjb3BpZWQgZnJvbToKKyAqIGhlYWRlciBmaWxlIGZvciBBdGFyaSBNb3VzZSBkcml2ZXIKKyAqIGJ5IFJvYmVydCBkZSBWcmllcyAocm9iZXJ0QGFuZC5ubCkgb24gMTlKdWw5MworICovCisKK3N0cnVjdCBtb3VzZV9zdGF0dXMgeworCWNoYXIJCWJ1dHRvbnM7CisJc2hvcnQJCWR4OworCXNob3J0CQlkeTsKKwlpbnQJCXJlYWR5OworCWludAkJYWN0aXZlOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY3B0cjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tYWNfb3NzLmggYi9pbmNsdWRlL2FzbS1tNjhrL21hY19vc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjQ0YTYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNfb3NzLmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqCU9TUworICoKKyAqCVRoaXMgaXMgdXNlZCBpbiBwbGFjZSBvZiBWSUEyIG9uIHRoZSBJSWZ4LgorICovCisKKyNkZWZpbmUgT1NTX0JBU0UJKDB4NTBmMWEwMDApCisKKy8qCisgKiBJbnRlcnJ1cHQgbGV2ZWwgb2Zmc2V0cyBmb3IgbWFjX29zcy0+aXJxX2xldmVsCisgKi8KKworI2RlZmluZSBPU1NfTlVCVVMwCTAKKyNkZWZpbmUgT1NTX05VQlVTMQkxCisjZGVmaW5lIE9TU19OVUJVUzIJMgorI2RlZmluZSBPU1NfTlVCVVMzCTMKKyNkZWZpbmUgT1NTX05VQlVTNAk0CisjZGVmaW5lIE9TU19OVUJVUzUJNQorI2RlZmluZSBPU1NfSU9QSVNNCTYKKyNkZWZpbmUgT1NTX0lPUFNDQwk3CisjZGVmaW5lIE9TU19TT1VORAk4CisjZGVmaW5lIE9TU19TQ1NJCTkKKyNkZWZpbmUgT1NTXzYwSFoJMTAKKyNkZWZpbmUgT1NTX1ZJQTEJMTEKKyNkZWZpbmUgT1NTX1VOVVNFRDEJMTIKKyNkZWZpbmUgT1NTX1VOVVNFRDIJMTMKKyNkZWZpbmUgT1NTX1BBUklUWQkxNAorI2RlZmluZSBPU1NfVU5VU0VEMwkxNQorCisjZGVmaW5lIE9TU19OVU1fU09VUkNFUwkxNgorCisvKgorICogUGVuZGluZyBpbnRlcnJ1cHQgYml0cyBpbiBtYWNfb3NzLT5pcnFfcGVuZGluZworICovCisKKyNkZWZpbmUgT1NTX0lQX05VQlVTMAkweDAwMDEKKyNkZWZpbmUgT1NTX0lQX05VQlVTMQkweDAwMDIKKyNkZWZpbmUgT1NTX0lQX05VQlVTMgkweDAwMDQKKyNkZWZpbmUgT1NTX0lQX05VQlVTMwkweDAwMDgKKyNkZWZpbmUgT1NTX0lQX05VQlVTNAkweDAwMTAKKyNkZWZpbmUgT1NTX0lQX05VQlVTNQkweDAwMjAKKyNkZWZpbmUgT1NTX0lQX0lPUElTTQkweDAwNDAKKyNkZWZpbmUgT1NTX0lQX0lPUFNDQwkweDAwODAKKyNkZWZpbmUgT1NTX0lQX1NPVU5ECTB4MDEwMAorI2RlZmluZSBPU1NfSVBfU0NTSQkweDAyMDAKKyNkZWZpbmUgT1NTX0lQXzYwSFoJMHgwNDAwCisjZGVmaW5lIE9TU19JUF9WSUExCTB4MDgwMAorI2RlZmluZSBPU1NfSVBfVU5VU0VEMQkweDEwMDAKKyNkZWZpbmUgT1NTX0lQX1VOVVNFRDIJMHgyMDAwCisjZGVmaW5lIE9TU19JUF9QQVJJVFkJMHg0MDAwCisjZGVmaW5lIE9TU19JUF9VTlVTRUQzCTB4ODAwMAorCisjZGVmaW5lIE9TU19JUF9OVUJVUyAoT1NTX0lQX05VQlVTMHxPU1NfSVBfTlVCVVMxfE9TU19JUF9OVUJVUzJ8T1NTX0lQX05VQlVTM3xPU1NfSVBfTlVCVVM0fE9TU19JUF9OVUJVUzUpCisKKy8qCisgKiBSb20gQ29udHJvbCBSZWdpc3RlcgorICovCisKKyNkZWZpbmUgT1NTX1BPV0VST0ZGCTB4ODAKKworLyoKKyAqIE9TUyBJbnRlcnJ1cHQgbGV2ZWxzIGZvciB2YXJpb3VzIHN1Yi1zeXN0ZW1zCisgKgorICogVGhpcyBtYXBwaW5nIGlzIGxheWVkIG91dCB3aXRoIHR3byB0aGluZ3MgaW4gbWluZDogZmlyc3QsIHdlIHRyeSB0byBrZWVwCisgKiB0aGluZ3Mgb24gdGhlaXIgb3duIGxldmVscyB0byBhdm9pZCBoYXZpbmcgdG8gZG8gZG91YmxlLWRpc3BhdGNoZXMuIFNlY29uZCwKKyAqIHRoZSBsZXZlbHMgbWF0Y2ggYXMgY2xvc2VseSBhcyBwb3NzaWJsZSB0aGUgYWx0ZXJuYXRlIElSUSBtYXBwaW5nIG1vZGUgKGFrYQorICogIkEvVVggbW9kZSIpIGF2YWlsYWJsZSBvbiBzb21lIFZJQSBtYWNoaW5lcy4KKyAqLworCisjZGVmaW5lIE9TU19JUlFMRVZfRElTQUJMRUQJMAorI2RlZmluZSBPU1NfSVJRTEVWX0lPUElTTQkxCS8qIEFEQj8gKi8KKyNkZWZpbmUgT1NTX0lSUUxFVl9TQ1NJCQkyCisjZGVmaW5lIE9TU19JUlFMRVZfTlVCVVMJMwkvKiBrZWVwIHRoaXMgb24gaXRzIG93biBsZXZlbCAqLworI2RlZmluZSBPU1NfSVJRTEVWX0lPUFNDQwk0CS8qIG1hdGNoZXMgVklBIGFsdGVybmF0ZSBtYXBwaW5nICovCisjZGVmaW5lIE9TU19JUlFMRVZfU09VTkQJNQkvKiBtYXRjaGVzIFZJQSBhbHRlcm5hdGUgbWFwcGluZyAqLworI2RlZmluZSBPU1NfSVJRTEVWXzYwSFoJCTYJLyogbWF0Y2hlcyBWSUEgYWx0ZXJuYXRlIG1hcHBpbmcgKi8KKyNkZWZpbmUgT1NTX0lSUUxFVl9WSUExCQk2CS8qIG1hdGNoZXMgVklBIGFsdGVybmF0ZSBtYXBwaW5nICovCisjZGVmaW5lIE9TU19JUlFMRVZfUEFSSVRZCTcJLyogbWF0Y2hlcyBWSUEgYWx0ZXJuYXRlIG1hcHBpbmcgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IG1hY19vc3MgeworICAgIF9fdTggIGlycV9sZXZlbFsweDEwXTsJLyogWzB4MDAwLTB4MDBmXSBJbnRlcnJ1cHQgbGV2ZWxzICovCisgICAgX191OCAgcGFkZGluZzBbMHgxRjJdOwkvKiBbMHgwMTAtMHgyMDFdIElPIHNwYWNlIGZpbGxlciAqLworICAgIF9fdTE2IGlycV9wZW5kaW5nOwkJLyogWzB4MjAyLTB4MjAzXSBwZW5kaW5nIGludGVycnVwdHMgYml0cyAqLworICAgIF9fdTggIHJvbV9jdHJsOwkJLyogWzB4MjA0LTB4MjA0XSBST00gY250bCByZWcgKGZvciBwb3dlcm9mZikgKi8KKyAgICBfX3U4ICBwYWRkaW5nMVsweDJdOwkvKiBbMHgyMDUtMHgyMDZdIGN1cnJlbnRseSB1bnVzZWQgYnkgQS9VWCAqLworICAgIF9fdTggIGFja182MGh6OwkJLyogWzB4MjA3LTB4MjA3XSA2MCBIeiBhY2suICovCit9OworCitleHRlcm4gdm9sYXRpbGUgc3RydWN0IG1hY19vc3MgKm9zczsKK2V4dGVybiBpbnQgb3NzX3ByZXNlbnQ7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbWFjX3BzYy5oIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNfcHNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgwOGJiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWFjX3BzYy5oCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQXBwbGUgUGVyaXBoZXJhbCBTeXN0ZW0gQ29udHJvbGxlciAoUFNDKQorICoKKyAqIFRoZSBQU0MgaXMgdXNlZCBvbiB0aGUgQVYgTWFjcyB0byBjb250cm9sIElPIGZ1bmN0aW9ucyBub3QgaGFuZGxlZAorICogYnkgdGhlIFZJQXMgKEV0aGVybmV0LCBEU1AsIFNDQywgU291bmQpLiBUaGlzIGluY2x1ZGVzIG5pbmUgRE1BCisgKiBjaGFubmVscy4KKyAqCisgKiBUaGUgZmlyc3Qgc2V2ZW4gRE1BIGNoYW5uZWxzIGFwcGVhciB0byBiZSAib25lLXNob3QiIGFuZCBhcmUgYWN0dWFsbHkKKyAqIHNldHMgb2YgdHdvIGNoYW5uZWxzOyBvbmUgbWVtYmVyIGlzIGFjdGl2ZSB3aGlsZSB0aGUgb3RoZXIgaXMgYmVpbmcKKyAqIGNvbmZpZ3VyZWQsIGFuZCB0aGVuIHlvdSBmbGlwIHRoZSBhY3RpdmUgbWVtYmVyIGFuZCBzdGFydCBhbGwgb3ZlciBhZ2Fpbi4KKyAqIFRoZSBvbmUtc2hvdCBjaGFubmVscyBhcmUgZ3JvdXBlZCB0b2dldGhlciBhbmQgYXJlOgorICoKKyAqIDEuIFNDU0kKKyAqIDIuIEV0aGVybmV0IFJlYWQKKyAqIDMuIEV0aGVybmV0IFdyaXRlCisgKiA0LiBGbG9wcHkgRGlzayBDb250cm9sbGVyCisgKiA1LiBTQ0MgQ2hhbm5lbCBBIFJlY2VpdmUKKyAqIDYuIFNDQyBDaGFubmVsIEIgUmVjZWl2ZQorICogNy4gU0NDIENoYW5uZWwgQSBUcmFuc21pdAorICoKKyAqIFRoZSByZW1haW5pbmcgdHdvIGNoYW5uZWxzIGFyZSBoYW5kbGVkIHNvbWV3aGF0IGRpZmZlcmVudGx5LiBUaGV5IGFwcGVhcgorICogdG8gYmUgY2xvc2VseSB0aWVkIGFuZCBzaGFyZSBvbmUgc2V0IG9mIHJlZ2lzdGVycy4gVGhleSBhbHNvIHNlZW0gdG8gcnVuCisgKiBjb250aW51b3VzbHksIGFsdGhvdWdoIGhvdyB5b3Uga2VlcCB0aGUgYnVmZmVyIGZpbGxlZCBpbiB0aGlzIHNjZW5hcmlvIGlzCisgKiBub3QgdW5kZXJzdG9vZCBhcyB0aGVyZSBzZWVtcyB0byBiZSBvbmx5IG9uZSBpbnB1dCBhbmQgb25lIG91dHB1dCBidWZmZXIKKyAqIHBvaW50ZXIuCisgKgorICogTXVjaCBvZiB0aGlzIHdhcyBleHRyYXBvbGF0ZWQgZnJvbSB3aGF0IHdhcyBrbm93biBhYm91dCB0aGUgRXRoZXJuZXQKKyAqIHJlZ2lzdGVycyBhbmQgc3Vic2VxdWVudGx5IGNvbmZpcm1lZCB1c2luZyBNYWNzQnVnIChpZSBieSBwaW5naW5nIHRoZQorICogbWFjaGluZSB3aXRoIGVhc3ktdG8tZmluZCBwYXR0ZXJucyBhbmQgbG9va2luZyBmb3IgdGhlbSBpbiB0aGUgRE1BCisgKiBidWZmZXJzLCBvciBieSBzZW5kaW5nIGEgZmlsZSBvdmVyIHRoZSBzZXJpYWwgcG9ydHMgYW5kIGZpbmRpbmcgdGhlCisgKiBmaWxlIGluIHRoZSBidWZmZXJzLikKKyAqCisgKiAxOTk5LTA1LTI1IChqbXQpCisgKi8KKworI2RlZmluZSBQU0NfQkFTRQkoMHg1MEYzMTAwMCkKKworLyoKKyAqIFRoZSBJRVIvSUZSIHJlZ2lzdGVycyB3b3JrIGxpa2UgdGhlIFZJQSwgZXhjZXB0IHRoYXQgaXQgaGFzIDQKKyAqIG9mIHRoZW0gZWFjaCBvbiBkaWZmZXJlbnQgaW50ZXJydXB0IGxldmVscywgYW5kIGVhY2ggcmVnaXN0ZXIKKyAqIHNldCBvbmx5IHNlZW1zIHRvIGhhbmRsZSBmb3VyIGludGVycnVwdHMgaW5zdGVhZCBvZiBzZXZlbi4KKyAqCisgKiBUbyBhY2Nlc3MgYSBwYXJ0aWN1bGFyIHNldCBvZiByZWdpc3RlcnMsIGFkZCAweG4wIHRvIHRoZSBiYXNlCisgKiB3aGVyZSBuID0gMyw0LDUgb3IgNi4KKyAqLworCisjZGVmaW5lIHBJRlJiYXNlCTB4MTAwCisjZGVmaW5lIHBJRVJiYXNlCTB4MTA0CisKKy8qCisgKiBPbmUtc2hvdCBETUEgY29udHJvbCByZWdpc3RlcnMKKyAqLworCisjZGVmaW5lIFBTQ19NWVNURVJZCTB4ODA0CisKKyNkZWZpbmUgUFNDX0NUTF9CQVNFCTB4QzAwCisKKyNkZWZpbmUgUFNDX1NDU0lfQ1RMCTB4QzAwCisjZGVmaW5lIFBTQ19FTkVUUkRfQ1RMICAweEMxMAorI2RlZmluZSBQU0NfRU5FVFdSX0NUTCAgMHhDMjAKKyNkZWZpbmUgUFNDX0ZEQ19DVEwJMHhDMzAKKyNkZWZpbmUgUFNDX1NDQ0FfQ1RMCTB4QzQwCisjZGVmaW5lIFBTQ19TQ0NCX0NUTAkweEM1MAorI2RlZmluZSBQU0NfU0NDQVRYX0NUTAkweEM2MAorCisvKgorICogRE1BIGNoYW5uZWxzLiBBZGQgKzB4MTAgZm9yIHRoZSBzZWNvbmQgY2hhbm5lbCBpbiB0aGUgc2V0LgorICogWW91J3JlIHN1cHBvc2VkIHRvIHVzZSBvbmUgY2hhbm5lbCB3aGlsZSB0aGUgb3RoZXIgcnVucyBhbmQKKyAqIHRoZW4gZmxpcCBjaGFubmVscyBhbmQgZG8gdGhlIHdob2xlIHRoaW5nIGFnYWluLgorICovCisKKyNkZWZpbmUgUFNDX0FERFJfQkFTRQkweDEwMDAKKyNkZWZpbmUgUFNDX0xFTl9CQVNFCTB4MTAwNAorI2RlZmluZSBQU0NfQ01EX0JBU0UJMHgxMDA4CisKKyNkZWZpbmUgUFNDX1NFVDAJMHgwMAorI2RlZmluZSBQU0NfU0VUMQkweDEwCisKKyNkZWZpbmUgUFNDX1NDU0lfQUREUgkweDEwMDAJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19TQ1NJX0xFTgkweDEwMDQJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19TQ1NJX0NNRAkweDEwMDgJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19FTkVUUkRfQUREUiAweDEwMjAJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19FTkVUUkRfTEVOICAweDEwMjQJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19FTkVUUkRfQ01EICAweDEwMjgJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19FTkVUV1JfQUREUiAweDEwNDAJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19FTkVUV1JfTEVOICAweDEwNDQJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19FTkVUV1JfQ01EICAweDEwNDgJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19GRENfQUREUgkweDEwNjAJLyogc3Ryb25nbHkgc3VzcGVjdGVkICovCisjZGVmaW5lIFBTQ19GRENfTEVOCTB4MTA2NAkvKiBzdHJvbmdseSBzdXNwZWN0ZWQgKi8KKyNkZWZpbmUgUFNDX0ZEQ19DTUQJMHgxMDY4CS8qIHN0cm9uZ2x5IHN1c3BlY3RlZCAqLworI2RlZmluZSBQU0NfU0NDQV9BRERSCTB4MTA4MAkvKiBjb25maXJtZWQgKi8KKyNkZWZpbmUgUFNDX1NDQ0FfTEVOCTB4MTA4NAkvKiBjb25maXJtZWQgKi8KKyNkZWZpbmUgUFNDX1NDQ0FfQ01ECTB4MTA4OAkvKiBjb25maXJtZWQgKi8KKyNkZWZpbmUgUFNDX1NDQ0JfQUREUgkweDEwQTAJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19TQ0NCX0xFTgkweDEwQTQJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19TQ0NCX0NNRAkweDEwQTgJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19TQ0NBVFhfQUREUgkweDEwQzAJLyogY29uZmlybWVkICovCisjZGVmaW5lIFBTQ19TQ0NBVFhfTEVOCTB4MTBDNAkvKiBjb25maXJtZWQgKi8KKyNkZWZpbmUgUFNDX1NDQ0FUWF9DTUQJMHgxMEM4CS8qIGNvbmZpcm1lZCAqLworCisvKgorICogRnJlZS1ydW5uaW5nIERNQSByZWdpc3RlcnMuIFRoZSBvbmx5IHBhcnQga25vd24gZm9yIHN1cmUgYXJlIHRoZSBiaXRzIGluCisgKiB0aGUgY29udHJvbCByZWdpc3RlciwgdGhlIGJ1ZmZlciBhZGRyZXNzZXMgYW5kIHRoZSBidWZmZXIgbGVuZ3RoLiBFdmVyeXRoaW5nCisgKiBlbHNlIGlzIGFueWJvZHkncyBndWVzcy4KKyAqCisgKiBUaGVzZSByZWdpc3RlcnMgc2VlbSB0byBiZSBtaXJyb3JlZCBldmVyeSB0aGlydHktdHdvIGJ5dGVzIHVwIHVudGlsIG9mZnNldAorICogMHgzMDAuIEl0J3Mgc2FmZSB0byBhc3N1bWUgdGhlbiB0aGF0IGEgbmV3IHNldCBvZiByZWdpc3RlcnMgc3RhcnRzIHRoZXJlLgorICovCisKKyNkZWZpbmUgUFNDX1NORF9DVEwJMHgyMDAJLyoKKwkJCQkgKiBbIDE2LWJpdCBdCisJCQkJICogU291bmQgKFNpbmdlcj8pIGNvbnRyb2wgcmVnaXN0ZXIuCisJCQkJICoKKwkJCQkgKiBiaXQgMCAgOiA/Pz8/CisJCQkJICogYml0IDEgIDogPz8/PworCQkJCSAqIGJpdCAyICA6IFNldCB0byBvbmUgdG8gZW5hYmxlIHNvdW5kCisJCQkJICogICAgICAgICAgb3V0cHV0LiBQb3NzaWJseSBhIG11dGUgZmxhZy4KKwkJCQkgKiBiaXQgMyAgOiA/Pz8/CisJCQkJICogYml0IDQgIDogPz8/PworCQkJCSAqIGJpdCA1ICA6ID8/Pz8KKwkJCQkgKiBiaXQgNiAgOiBTZXQgdG8gb25lIHRvIGVuYWJsZSBwYXNzLXRocnUKKwkJCQkgKiAgICAgICAgICBhdWRpby4gSW4gdGhpcyBtb2RlIHRoZSBhdWRpbyBkYXRhCisJCQkJICogICAgICAgICAgc2VlbXMgdG8gYXBwZWFyIGluIGJvdGggdGhlIGlucHV0CisJCQkJICogICAgICAgICAgYnVmZmVyIGFuZCB0aGUgb3V0cHV0IGJ1ZmZlci4KKwkJCQkgKiBiaXQgNyAgOiBTZXQgdG8gb25lIHRvIGFjdGl2YXRlIHRoZQorCQkJCSAqICAgICAgICAgIHNvdW5kIGlucHV0IERNQSBvciB6ZXJvIHRvCisJCQkJICogICAgICAgICAgZGlzYWJsZSBpdC4KKwkJCQkgKiBiaXQgOCAgOiBTZXQgdG8gb25lIHRvIGFjdGl2YXRlIHRoZQorCQkJCSAqICAgICAgICAgIHNvdW5kIG91dHB1dCBETUEgb3IgemVybyB0bworCQkJCSAqICAgICAgICAgIGRpc2FibGUgaXQuCisJCQkJICogYml0IDkgIDogXAorCQkJCSAqIGJpdCAxMSA6ICB8CisJCQkJICogICAgICAgICAgVGhlc2UgdHdvIGJpdHMgY29udHJvbCB0aGUgc2FtcGxlCisJCQkJICogICAgICAgICAgcmF0ZS4gVXN1YWxseSBzZXQgdG8gYmluYXJ5IDEwIGFuZAorCQkJCSAqCSAgICBNYWNPUyA4LjAgc2F5cyBJJ20gYXQgNDggS0h6LiBVc2luZworCQkJCSAqCSAgICBhIGJpbmFyeSB2YWx1ZSBvZiAwMSBtYWtlcyB0aGluZ3MKKwkJCQkgKgkgICAgc291bmQgYWJvdXQgMS8yIHNwZWVkICgyNCBLSHo/KSBhbmQKKwkJCQkgKiAgICAgICAgICBiaW5hcnkgMDAgaXMgc2xvd2VyIHN0aWxsICgyMiBLSHo/KQorCQkJCSAqCisJCQkJICogU2V0dGluZyB0aGlzIHRvIDB4MDAwMCBpcyBhIGdvb2Qgd2F5IHRvCisJCQkJICoga2lsbCBhbGwgRE1BIGF0IGJvb3QgdGltZSBzbyB0aGF0IHRoZQorCQkJCSAqIFBTQyB3b24ndCBvdmVyd3JpdGUgdGhlIGtlcm5lbCBpbWFnZQorCQkJCSAqIHdpdGggc291bmQgZGF0YS4KKwkJCQkgKi8KKworLyoKKyAqIDB4MDIwMiAtIDB4MDIwMyBpcyB1bnVzZWQuIFdyaXRpbmcgdGhlcmUKKyAqIHNlZW1zIHRvIGNsb2JiZXIgdGhlIGNvbnRyb2wgcmVnaXN0ZXIuCisgKi8KKworI2RlZmluZSBQU0NfU05EX1NPVVJDRQkweDIwNAkvKgorCQkJCSAqIFsgMzItYml0IF0KKwkJCQkgKiBDb250cm9scyBpbnB1dCBzb3VyY2UgYW5kIHZvbHVtZToKKwkJCQkgKgorCQkJCSAqIGJpdHMgMTItMTUgOiBpbnB1dCBzb3VyY2Ugdm9sdW1lLCAwIC0gRgorCQkJCSAqIGJpdHMgMTYtMTkgOiB1bmtub3duLCBhbHdheXMgMHg1CisJCQkJICogYml0cyAyMC0yMyA6IGlucHV0IHNvdXJjZSBzZWxlY3Rpb246CisJCQkJICogICAgICAgICAgICAgICAgICAweDMgPSBDRCBBdWRpbworCQkJCSAqICAgICAgICAgICAgICAgICAgMHg0ID0gRXh0ZXJuYWwgQXVkaW8KKwkJCQkgKgorCQkJCSAqIFRoZSB2b2x1bWUgaXMgZGVmaW5pdGVseSBub3QgdGhlIGdlbmVyYWwKKwkJCQkgKiBvdXRwdXQgdm9sdW1lIGFzIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZQorCQkJCSAqIGFsZXJ0IHNvdW5kIHZvbHVtZS4KKwkJCQkgKi8KKyNkZWZpbmUgUFNDX1NORF9TVEFUVVMxCTB4MjA4CS8qCisJCQkJICogWyAzMi1iaXQgXQorCQkJCSAqIEFwcGVhcnMgdG8gYmUgYSByZWFkLW9ubHkgc3RhdHVzIHJlZ2lzdGVyLgorCQkJCSAqIFRoZSB1c3VhbCB2YWx1ZSBpcyAweDAwNDAwMDAyLgorCQkJCSAqLworI2RlZmluZSBQU0NfU05EX0hVSDMJMHgyMEMJLyoKKwkJCQkgKiBbIDE2LWJpdCBdCisJCQkJICogVW5rbm93biAxNi1iaXQgdmFsdWUsIGFsd2F5cyAweDAwMDAuCisJCQkJICovCisjZGVmaW5lIFBTQ19TTkRfQklUUzJHTwkweDIwRQkvKgorCQkJCSAqIFsgMTYtYml0IF0KKwkJCQkgKiBDb3VudHMgZG93biB0byB6ZXJvIGZyb20gc29tZSBjb25zdGFudAorCQkJCSAqIHZhbHVlLiBUaGUgdmFsdWUgYXBwZWFycyB0byBiZSB0aGUKKwkJCQkgKiBudW1iZXIgb2YgX2JpdHNfIHJlbWFpbmluZyBiZWZvcmUgdGhlCisJCQkJICogYnVmZmVyIGlzIGZ1bGwsIHdoaWNoIHdvdWxkIG1ha2Ugc2Vuc2UKKwkJCQkgKiBzaW5jZSBBcHBsZSdzIGRvY3Mgc2F5IHRoZSBzb3VuZCBETUEKKwkJCQkgKiBjaGFubmVscyBhcmUgMSBiaXQgd2lkZS4KKwkJCQkgKi8KKyNkZWZpbmUgUFNDX1NORF9JTkFERFIJMHgyMTAJLyoKKwkJCQkgKiBbIDMyLWJpdCBdCisJCQkJICogQWRkcmVzcyBvZiB0aGUgc291bmQgaW5wdXQgRE1BIGJ1ZmZlcgorCQkJCSAqLworI2RlZmluZSBQU0NfU05EX09VVEFERFIJMHgyMTQJLyoKKwkJCQkgKiBbIDMyLWJpdCBdCisJCQkJICogQWRkcmVzcyBvZiB0aGUgc291bmQgb3V0cHV0IERNQSBidWZmZXIKKwkJCQkgKi8KKyNkZWZpbmUgUFNDX1NORF9MRU4JMHgyMTgJLyoKKwkJCQkgKiBbIDE2LWJpdCBdCisJCQkJICogTGVuZ3RoIG9mIGJvdGggYnVmZmVycyBpbiBlaWdodC1ieXRlIHVuaXRzLgorCQkJCSAqLworI2RlZmluZSBQU0NfU05EX0hVSDQJMHgyMUEJLyoKKwkJCQkgKiBbIDE2LWJpdCBdCisJCQkJICogVW5rbm93biwgYWx3YXlzIDB4MDAwMC4KKwkJCQkgKi8KKyNkZWZpbmUgUFNDX1NORF9TVEFUVVMyCTB4MjFDCS8qCisJCQkJICogWyAxNi1iaXQgXQorCQkJCSAqIEFwcGVhcnMgdG8gZSBhIHJlYWQtb25seSBzdGF0dXMgcmVnaXN0ZXIuCisJCQkJICogVGhlIHVzdWFsIHZhbHVlIGlzIDB4MDIwMC4KKwkJCQkgKi8KKyNkZWZpbmUgUFNDX1NORF9IVUg1CTB4MjFFCS8qCisJCQkJICogWyAxNi1iaXQgXQorCQkJCSAqIFVua25vd24sIGFsd2F5cyAweDAwMDAuCisJCQkJICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiB2b2xhdGlsZSBfX3U4ICpwc2M7CitleHRlcm4gaW50IHBzY19wcmVzZW50OworCisvKgorICoJQWNjZXNzIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwc2Nfd3JpdGVfYnl0ZShpbnQgb2Zmc2V0LCBfX3U4IGRhdGEpCit7CisJKigodm9sYXRpbGUgX191OCAqKShwc2MgKyBvZmZzZXQpKSA9IGRhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwc2Nfd3JpdGVfd29yZChpbnQgb2Zmc2V0LCBfX3UxNiBkYXRhKQoreworCSooKHZvbGF0aWxlIF9fdTE2ICopKHBzYyArIG9mZnNldCkpID0gZGF0YTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBzY193cml0ZV9sb25nKGludCBvZmZzZXQsIF9fdTMyIGRhdGEpCit7CisJKigodm9sYXRpbGUgX191MzIgKikocHNjICsgb2Zmc2V0KSkgPSBkYXRhOworfQorCitzdGF0aWMgaW5saW5lIHU4IHBzY19yZWFkX2J5dGUoaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gKigodm9sYXRpbGUgX191OCAqKShwc2MgKyBvZmZzZXQpKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgcHNjX3JlYWRfd29yZChpbnQgb2Zmc2V0KQoreworCXJldHVybiAqKCh2b2xhdGlsZSBfX3UxNiAqKShwc2MgKyBvZmZzZXQpKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcHNjX3JlYWRfbG9uZyhpbnQgb2Zmc2V0KQoreworCXJldHVybiAqKCh2b2xhdGlsZSBfX3UzMiAqKShwc2MgKyBvZmZzZXQpKTsKK30KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tYWNfdmlhLmggYi9pbmNsdWRlL2FzbS1tNjhrL21hY192aWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWI3NThjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNfdmlhLmgKQEAgLTAsMCArMSwyNjggQEAKKy8qCisgKgk2NTIyIFZlcnNhdGlsZSBJbnRlcmZhY2UgQWRhcHRlciAoVklBKQorICoKKyAqCVRoZXJlIGFyZSB0d28gb2YgdGhlc2Ugb24gdGhlIE1hYyBJSS4gU29tZSBJUlEncyBhcmUgdmVjdG9yZWQKKyAqCXZpYSB0aGVtIGFzIGFyZSBhc3NvcnRlZCBiaXRzIGFuZCBib2JzIC0gZWcgcnRjLCBhZGIuIFRoZSBwaWN0dXJlCisgKglpcyBhIGJpdCBpbmNvbXBsZXRlIGFzIHRoZSBNYWMgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IGNvdmVyIHRoaXMgd2VsbAorICovCisKKyNpZm5kZWYgX0FTTV9NQUNfVklBX0hfCisjZGVmaW5lIF9BU01fTUFDX1ZJQV9IXworCisvKgorICogQmFzZSBhZGRyZXNzZXMgZm9yIHRoZSBWSUFzLiBUaGVyZSBhcmUgdHdvIGluIGV2ZXJ5IG1hY2hpbmUsCisgKiBhbHRob3VnaCBvbiBzb21lIG1hY2hpbmVzIHRoZSBzZWNvbmQgaXMgYW4gUkJWIG9yIGFuIE9TUy4KKyAqIFRoZSBPU1MgaXMgZGlmZmVyZW50IGVub3VnaCB0aGF0IGl0J3MgaGFuZGxlZCBzZXBhcmF0ZWx5LgorICoKKyAqIERvIG5vdCB1c2UgdGhlc2UgdmFsdWVzIGRpcmVjdGx5OyB1c2UgdGhlIHZpYTEgYW5kIHZpYTIgdmFyaWFibGVzCisgKiBpbnN0ZWFkIChhbmQgZG9uJ3QgZm9yZ2V0IHRvIGNoZWNrIHJidl9wcmVzZW50IHdoZW4gdXNpbmcgdmlhMiEpCisgKi8KKworI2RlZmluZSBWSUExX0JBU0UJKDB4NTBGMDAwMDApCisjZGVmaW5lIFZJQTJfQkFTRQkoMHg1MEYwMjAwMCkKKyNkZWZpbmUgIFJCVl9CQVNFCSgweDUwRjI2MDAwKQorCisvKgorICoJTm90IGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSBwb3N0IE1hY0lJIEkgdGhpbmsuCisgKiAgICAgIENTQTogcHJvYmFibHkgdGhlIG9uZXMgQ0hSUCBtYXJrcyBhcyAndW51c2VkJyBjaGFuZ2UgcHVycG9zZXMKKyAqICAgICAgd2hlbiB0aGUgSVdNIGJlY29tZXMgdGhlIFNXSU0uCisgKiAgICAgIGh0dHA6Ly93d3cucnM2MDAwLmlibS5jb20vcmVzb3VyY2UvdGVjaG5vbG9neS9jaHJwaW8vdmlhNS5tYWsuaHRtbAorICogICAgICBmdHA6Ly9mdHAuYXVzdGluLmlibS5jb20vcHViL3RlY2hub2xvZ3kvc3BlYy9jaHJwL2lud29yay9DSFJQX0lPUmVmXzEuMC5wZGYKKyAqCisgKiBhbHNvLCBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90ZWNobm90ZXMvaHcvaHdfMDkuaHRtbCBjbGFpbXMgdGhlCisgKiBmb2xsb3dpbmcgY2hhbmdlcyBmb3IgSUlmeDoKKyAqIFZJQTFBX3ZTY2NXclJlcSBub3QgYXZhaWxhYmxlIGFuZCB0aGF0IFZJQTFBX3ZTeW5jIGhhcyBtb3ZlZCB0byBhbiBJT1AuCisgKiBBbHNvLCAiQWxsIG9mIHRoZSBmdW5jdGlvbmFsaXR5IG9mIFZJQTIgaGFzIGJlZW4gbW92ZWQgdG8gb3RoZXIgY2hpcHMiLgorICovCisKKyNkZWZpbmUgVklBMUFfdlNjY1dyUmVxCTB4ODAJLyogU0NDIHdyaXRlLiAoaW5wdXQpCisJCQkJICogW0NIUlBdIFNDQyBXUkVROiBSZWZsZWN0cyB0aGUgc3RhdGUgb2YgdGhlCisJCQkJICogV2FpdC9SZXF1ZXN0IHBpbnMgZnJvbSB0aGUgU0NDLgorCQkJCSAqIFtNYWNpbnRvc2ggRmFtaWx5IEhhcmR3YXJlXQorCQkJCSAqIGFzIENIUlAgb24gU0UvMzAsSUksSUl4LElJY3gsSUljaS4KKwkJCQkgKiBvbiBJSWZ4LCAiMCBtZWFucyBhbiBhY3RpdmUgcmVxdWVzdCIKKwkJCQkgKi8KKyNkZWZpbmUgVklBMUFfdlJldjgJMHg0MAkvKiBSZXZpc2lvbiA4IGJvYXJkID8/PworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBbQ0hSUF0gRW4gV2FpdFJlcUI6IExldHMgdGhlIFdhaXRSZXFfTAorCQkJCSAqIHNpZ25hbCBmcm9tIHBvcnQgQiBvZiB0aGUgU0NDIGFwcGVhciBvbgorCQkJCSAqIHRoZSBQQTcgaW5wdXQgcGluLiBPdXRwdXQuCisJCQkJICogW01hY2ludG9zaCBGYW1pbHldIE9uIHRoZSBTRS8zMCwgdGhpcworCQkJCSAqIGlzIHRoZSBiaXQgdG8gZmxpcCBzY3JlZW4gYnVmZmVycy4KKwkJCQkgKiAwPWFsdGVybmF0ZSwgMT1tYWluLgorCQkJCSAqIG9uIElJLElJeCxJSWN4LElJY2ksSUlmeCB0aGlzIGlzIGEgYml0CisJCQkJICogZm9yIFJldiBJRC4gMD1JSSxJSXgsIDE9SUljeCxJSWNpLElJZngKKwkJCQkgKi8KKyNkZWZpbmUgVklBMUFfdkhlYWRTZWwJMHgyMAkvKiBIZWFkIHNlbGVjdCBmb3IgSVdNLgorCQkJCSAqIFtDSFJQXSB1bnVzZWQuCisJCQkJICogW01hY2ludG9zaCBGYW1pbHldICJGbG9wcHkgZGlzaworCQkJCSAqIHN0YXRlLWNvbnRyb2wgbGluZSBTRUwiIG9uIGFsbCBidXQgSUlmeAorCQkJCSAqLworI2RlZmluZSBWSUExQV92T3ZlcmxheQkweDEwICAgIC8qIFtNYWNpbnRvc2ggRmFtaWx5XSBPbiBTRS8zMCxJSSxJSXgsSUljeAorCQkJCSAqIHRoaXMgYml0IGVuYWJsZXMgdGhlICJPdmVybGF5IiBhZGRyZXNzCisJCQkJICogbWFwIGluIHRoZSBhZGRyZXNzIGRlY29kZXJzIGFzIGl0IGlzIG9uCisJCQkJICogcmVzZXQgZm9yIG1hcHBpbmcgdGhlIFJPTSBvdmVyIHRoZSByZXNldAorCQkJCSAqIHZlY3Rvci4gMT11c2Ugb3ZlcmxheSBtYXAuCisJCQkJICogT24gdGhlIElJY2ksSUlmeCBpdCBpcyBhbm90aGVyIGJpdCBvZiB0aGUKKwkJCQkgKiBDUFUgSUQ6IDA9bm9ybWFsIElJY2ksIDE9SUljaSB3aXRoIHBhcml0eQorCQkJCSAqIGZlYXR1cmUgb3IgSUlmeC4KKwkJCQkgKiBbQ0hSUF0gRW4gV2FpdFJlcUE6IExldHMgdGhlIFdhaXRSZXFfTAorCQkJCSAqIHNpZ25hbCBmcm9tIHBvcnQgQSBvZiB0aGUgU0NDIGFwcGVhcgorCQkJCSAqIG9uIHRoZSBQQTcgaW5wdXQgcGluIChDSFJQKS4gT3V0cHV0LgorCQkJCSAqIFtNa0xpbnV4XSAiRHJpdmUgU2VsZWN0IgorCQkJCSAqICAod2l0aCAweDIwIGJlaW5nICdkaXNrIGhlYWQgc2VsZWN0JykKKwkJCQkgKi8KKyNkZWZpbmUgVklBMUFfdlN5bmMJMHgwOCAgICAvKiBbQ0hSUF0gU3luYyBNb2RlbTogbW9kZW0gY2xvY2sgc2VsZWN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAxOiBzZWxlY3QgdGhlIGV4dGVybmFsIHNlcmlhbCBjbG9jayB0bworCQkJCSAqICAgIGRyaXZlIHRoZSBTQ0MncyAvUlR4Q0EgcGluLgorCQkJCSAqIDA6IFNlbGVjdCB0aGUgMy42ODY0TUh6IGNsb2NrIHRvIGRyaXZlCisJCQkJICogICAgdGhlIFNDQyBjZWxsLgorCQkJCSAqIFtNYWNpbnRvc2ggRmFtaWx5XSBDb3JyZWN0IG9uIGFsbCBidXQgSUlmeAorCQkJCSAqLworCisvKiBNYWNpbnRvc2ggRmFtaWx5IEhhcmR3YXJlIHNlejogYml0cyAwLTIgb2YgVklBMUEgYXJlIHZvbHVtZSBjb250cm9sCisgKiBvbiBNYWNzIHdoaWNoIGhhZCB0aGUgUFdNIHNvdW5kIGhhcmR3YXJlLiAgUmVzZXJ2ZWQgb24gbmV3ZXIgbW9kZWxzLgorICogT24gSUljaSxJSWZ4LCBiaXRzIDEtMiBhcmUgdGhlIHJlc3Qgb2YgdGhlIENQVSBJRDoKKyAqIGJpdCAyOiAxPUlJY2ksIDA9SUlmeAorICogYml0IDE6IDEgb24gYm90aCBJSWNpIGFuZCBJSWZ4LgorICogTWtMaW51eCBzZXogYml0IDAgaXMgJ2J1cm5pbiBmbGFnJyBpbiB0aGlzIGNhc2UuCisgKiBDSFJQIHNlejogVklBMUEgYml0cyAwLTIgYW5kIDUgYXJlICd1bnVzZWQnOiBpZiBwcm9ncmFtbWVkIGFzCisgKiBpbnB1dHMsIHRoZXNlIGJpdHMgd2lsbCByZWFkIDAuCisgKi8KKyNkZWZpbmUgVklBMUFfdlZvbHVtZQkweDA3CS8qIEF1ZGlvIHZvbHVtZSBtYXNrIGZvciBQV00gKi8KKyNkZWZpbmUgVklBMUFfQ1BVSUQwCTB4MDIJLyogQ1BVIGlkIGJpdCAwIG9uIFJCViwgb3RoZXJzICovCisjZGVmaW5lIFZJQTFBX0NQVUlEMQkweDA0CS8qIENQVSBpZCBiaXQgMCBvbiBSQlYsIG90aGVycyAqLworI2RlZmluZSBWSUExQV9DUFVJRDIJMHgxMAkvKiBDUFUgaWQgYml0IDAgb24gUkJWLCBvdGhlcnMgKi8KKyNkZWZpbmUgVklBMUFfQ1BVSUQzCTB4NDAJLyogQ1BVIGlkIGJpdCAwIG9uIFJCViwgb3RoZXJzICovCisKKy8qIEluZm8gb24gVklBMUIgaXMgZnJvbSBNYWNpbnRvc2ggRmFtaWx5IEhhcmR3YXJlICYgTWtMaW51eC4KKyAqIENIUlAgb2ZmZXJzIG5vIGluZm8uICovCisjZGVmaW5lIFZJQTFCX3ZTb3VuZAkweDgwCS8qIFNvdW5kIGVuYWJsZSAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aAorCQkJCSAqIFBXTSBoYXJkd2FyZSkgMD1lbmFibGVkLgorCQkJCSAqIEFsc28sIG9uIElJY2kgdy9wYXJpdHksIHNob3dzIHBhcml0eSBlcnJvcgorCQkJCSAqIDA9ZXJyb3IsIDE9T0suICovCisjZGVmaW5lIFZJQTFCX3ZNeXN0ZXJ5CTB4NDAgICAgLyogT24gSUljaSwgcGFyaXR5IGVuYWJsZS4gMD1lbmFibGVkLDE9ZGlzYWJsZWQKKwkJCQkgKiBPbiBTRS8zMCwgdmVydGljYWwgc3luYyBpbnRlcnJ1cHQgZW5hYmxlLgorCQkJCSAqIDA9ZW5hYmxlZC4gVGhpcyB2U3luYyBpbnRlcnJ1cHQgc2hvd3MgdXAKKwkJCQkgKiBhcyBhIHNsb3QgJEUgaW50ZXJydXB0LiAqLworI2RlZmluZSBWSUExQl92QURCUzIJMHgyMAkvKiBBREIgc3RhdGUgaW5wdXQgYml0IDEgKHVudXNlZCBvbiBJSWZ4KSAqLworI2RlZmluZSBWSUExQl92QURCUzEJMHgxMAkvKiBBREIgc3RhdGUgaW5wdXQgYml0IDAgKHVudXNlZCBvbiBJSWZ4KSAqLworI2RlZmluZSBWSUExQl92QURCSW50CTB4MDgJLyogQURCIGludGVycnVwdCAwPWludGVycnVwdCAodW51c2VkIG9uIElJZngpKi8KKyNkZWZpbmUgVklBMUJfdlJUQ0VuYgkweDA0CS8qIEVuYWJsZSBSZWFsIHRpbWUgY2xvY2suIDA9ZW5hYmxlZC4gKi8KKyNkZWZpbmUgVklBMUJfdlJUQ0NsawkweDAyICAgIC8qIFJlYWwgdGltZSBjbG9jayBzZXJpYWwtY2xvY2sgbGluZS4gKi8KKyNkZWZpbmUgVklBMUJfdlJUQ0RhdGEJMHgwMSAgICAvKiBSZWFsIHRpbWUgY2xvY2sgc2VyaWFsLWRhdGEgbGluZS4gKi8KKworLyogTWtMaW51eCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgIlZJQTEgUmVnaXN0ZXIgQiBjb250ZW50cyB3aGVyZSB0aGV5CisgKiBkaWZmZXIgZnJvbSBzdGFuZGFyZCBWSUExIi4gIEZyb20gdGhlIG5hbWluZyBzY2hlbWUsIHdlIGFzc3VtZSB0aGV5CisgKiBjb3JyZXNwb25kIHRvIGEgVklBIHdvcmstYWxpa2UgbmFtZWQgJ0VWUicuICovCisjZGVmaW5lCUVWUkJfWENWUgkweDA4CS8qIFhDVlJfU0VTU0lPTiogKi8KKyNkZWZpbmUJRVZSQl9GVUxMCTB4MTAJLyogVklBX0ZVTEwgKi8KKyNkZWZpbmUJRVZSQl9TWVNFUwkweDIwCS8qIFNZU19TRVNTSU9OICovCisjZGVmaW5lCUVWUkJfQVVYSUUJMHgwMAkvKiBFbmFibGUgQS9VWCBJbnRlcnJ1cHQgU2NoZW1lICovCisjZGVmaW5lCUVWUkJfQVVYSUQJMHg0MAkvKiBEaXNhYmxlIEEvVVggSW50ZXJydXB0IFNjaGVtZSAqLworI2RlZmluZQlFVlJCX1NGVFdSSUUJMHgwMAkvKiBTb2Z0d2FyZSBJbnRlcnJ1cHQgUmVRdWVzdCAqLworI2RlZmluZQlFVlJCX1NGVFdSSUQJMHg4MAkvKiBTb2Z0d2FyZSBJbnRlcnJ1cHQgUmVRdWVzdCAqLworCisvKgorICoJVklBMiBBIHJlZ2lzdGVyIGlzIHRoZSBpbnRlcnJ1cHQgbGluZXMgcmFpc2VkIG9mZiB0aGUgbnVidXMKKyAqCXNsb3RzLgorICogICAgICBUaGUgYmVsb3cgaW5mbyBpcyBmcm9tICdNYWNpbnRvc2ggRmFtaWx5IEhhcmR3YXJlLicKKyAqICAgICAgTWtMaW51eCBjYWxscyB0aGUgJ0lJY2kgaW50ZXJuYWwgdmlkZW8gSVJRJyBiZWxvdyB0aGUgJ1JCViBzbG90IDAgaXJxLicKKyAqICAgICAgSXQgYWxzbyBub3RlcyB0aGF0IHRoZSBzbG90ICQ5IElSUSBpcyB0aGUgJ0V0aGVybmV0IElSUScgYW5kCisgKiAgICAgIGRlZmluZXMgdGhlICdWaWRlbyBJUlEnIGFzIDB4NDAgZm9yIHRoZSAnRVZSJyBWSUEgd29yay1hbGlrZS4KKyAqICAgICAgUGVyaGFwcyBPU1MgdXNlcyB2UkFNMSBhbmQgdlJBTTIgZm9yIEFEQi4KKyAqLworCisjZGVmaW5lIFZJQTJBX3ZSQU0xCTB4ODAJLyogUkFNIHNpemUgYml0IDEgKElJY2k6IHJlc2VydmVkKSAqLworI2RlZmluZSBWSUEyQV92UkFNMAkweDQwCS8qIFJBTSBzaXplIGJpdCAwIChJSWNpOiBpbnRlcm5hbCB2aWRlbyBJUlEpICovCisjZGVmaW5lIFZJQTJBX3ZJUlFFCTB4MjAJLyogSVJRIGZyb20gc2xvdCAkRSAqLworI2RlZmluZSBWSUEyQV92SVJRRAkweDEwCS8qIElSUSBmcm9tIHNsb3QgJEQgKi8KKyNkZWZpbmUgVklBMkFfdklSUUMJMHgwOAkvKiBJUlEgZnJvbSBzbG90ICRDICovCisjZGVmaW5lIFZJQTJBX3ZJUlFCCTB4MDQJLyogSVJRIGZyb20gc2xvdCAkQiAqLworI2RlZmluZSBWSUEyQV92SVJRQQkweDAyCS8qIElSUSBmcm9tIHNsb3QgJEEgKi8KKyNkZWZpbmUgVklBMkFfdklSUTkJMHgwMQkvKiBJUlEgZnJvbSBzbG90ICQ5ICovCisKKy8qIFJBTSBzaXplIGJpdHMgZGVjb2RlZCBhcyBmb2xsb3dzOgorICogYml0MSBiaXQwICBzaXplIG9mIElDcyBpbiBiYW5rIEEKKyAqICAwICAgIDAgICAgMjU2IGtiaXQKKyAqICAwICAgIDEgICAgMSBNYml0CisgKiAgMSAgICAwICAgIDQgTWJpdAorICogIDEgICAgMSAgIDE2IE1iaXQKKyAqLworCisvKgorICoJUmVnaXN0ZXIgQiBoYXMgdGhlIGZ1biBzdHVmZiBpbiBpdAorICovCisKKyNkZWZpbmUgVklBMkJfdlZCTAkweDgwCS8qIFZCTCBvdXRwdXQgdG8gVklBMSAoNjAuMTVIeikgZHJpdmVuIGJ5CisJCQkJICogdGltZXIgVDEuCisJCQkJICogb24gSUljaSwgcGFyaXR5IHRlc3Q6IDA9dGVzdCBtb2RlLgorCQkJCSAqIFtNa0xpbnV4XSBSQlZfUEFST0REOiAxPW9kZCwwPWV2ZW4uICovCisjZGVmaW5lIFZJQTJCX3ZTbmRKY2sJMHg0MAkvKiBFeHRlcm5hbCBzb3VuZCBqYWNrIHN0YXR1cy4KKwkJCQkgKiAwPXBsdWcgaXMgaW5zZXJ0ZWQuICBPbiBTRS8zMCwgYWx3YXlzIDAgKi8KKyNkZWZpbmUgVklBMkJfdlRmcjAJMHgyMAkvKiBUcmFuc2ZlciBtb2RlIGJpdCAwIGFjayBmcm9tIE51QnVzICovCisjZGVmaW5lIFZJQTJCX3ZUZnIxCTB4MTAJLyogVHJhbnNmZXIgbW9kZSBiaXQgMSBhY2sgZnJvbSBOdUJ1cyAqLworI2RlZmluZSBWSUEyQl92TW9kZTMyCTB4MDgJLyogMjQvMzJiaXQgc3dpdGNoIC0gZG91YmxlcyBhcyBjYWNoZSBmbHVzaAorCQkJCSAqIG9uIElJLCBBTVUvUE1NVSBjb250cm9sLgorCQkJCSAqICAgaWYgQU1VLCAwPTI0Yml0IHRvIDMyYml0IHRyYW5zbGF0aW9uCisJCQkJICogICBpZiBQTU1VLCAxPVBNTVUgaXMgYWNjZXNzaW5nIHBhZ2UgdGFibGUuCisJCQkJICogb24gU0UvMzAgdGllZCBsb3cuCisJCQkJICogb24gSUl4LElJY3gsSUlmeCwgdW51c2VkLgorCQkJCSAqIG9uIElJY2kvUkJWLCBjYWNoZSBjb250cm9sLiAwPWZsdXNoIGNhY2hlLgorCQkJCSAqLworI2RlZmluZSBWSUEyQl92UG93ZXIJMHgwNAkvKiBQb3dlciBvZmYsIDA9c2h1dCBvZmYgcG93ZXIuCisJCQkJICogb24gU0UvMzAgdGhpcyBzaWduYWwgc2VudCB0byBQRFMgY2FyZC4gKi8KKyNkZWZpbmUgVklBMkJfdkJ1c0xrCTB4MDIJLyogTG9jayBOdUJ1cyB0cmFuc2FjdGlvbnMsIDA9bG9ja2VkLgorCQkJCSAqIG9uIFNFLzMwIHNlbnQgdG8gUERTIGNhcmQuICovCisjZGVmaW5lIFZJQTJCX3ZDRGlzCTB4MDEJLyogQ2FjaGUgY29udHJvbC4gT24gSUljaSwgMT1kaXNhYmxlIGNhY2hlIGNhcmQKKwkJCQkgKiBvbiBvdGhlcnMsIDA9ZGlzYWJsZSBwcm9jZXNzb3IncyBpbnN0cnVjdGlvbgorCQkJCSAqIGFuZCBkYXRhIGNhY2hlcy4gKi8KKworLyogQXBwbGUgc2V6OiBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90ZWNobm90ZXMvb3Yvb3ZfMDQuaHRtbAorICogQW5vdGhlciBleGFtcGxlIG9mIGEgdmFsaWQgZnVuY3Rpb24gdGhhdCBoYXMgbm8gUk9NIHN1cHBvcnQgaXMgdGhlIHVzZQorICogb2YgdGhlIGFsdGVybmF0ZSB2aWRlbyBwYWdlIGZvciBwYWdlLWZsaXBwaW5nIGFuaW1hdGlvbi4gU2luY2UgdGhlcmUKKyAqIGlzIG5vIFJPTSBjYWxsIHRvIGZsaXAgcGFnZXMsIGl0IGlzIG5lY2Vzc2FyeSB0byBnbyBwbGF5IHdpdGggdGhlCisgKiByaWdodCBiaXQgaW4gdGhlIFZJQSBjaGlwICg2NTIyIFZlcnNhdGlsZSBJbnRlcmZhY2UgQWRhcHRlcikuCisgKiBbQ1NBOiBkb24ndCBrbm93IHdoaWNoIG9uZSB0aGlzIGlzLCBidXQgaXQncyBvbmUgb2YgJ2VtIV0KKyAqLworCisvKgorICoJNjUyMiByZWdpc3RlcnMgLSBzZWUgZGF0YWJvb2suCisgKiBDU0E6IEFzc2lnbm1lbnRzIGZvciBWSUExIGNvbmZpcm1lZCBmcm9tIENIUlAgc3BlYy4KKyAqLworCisvKiBwYXJ0aWFsIGFkZHJlc3MgZGVjb2RlLiAgMHhZWVhYIDogWFggcGFydCBmb3IgUkJWLCBZWSBwYXJ0IGZvciBWSUEgKi8KKy8qIE5vdGU6IDE1IFZJQSByZWdzLCA4IFJCViByZWdzICovCisKKyNkZWZpbmUgdkJ1ZkIJMHgwMDAwCS8qIFtWSUEvUkJWXSAgUmVnaXN0ZXIgQiAqLworI2RlZmluZSB2QnVmQUgJMHgwMjAwICAvKiBbVklBIG9ubHldIEJ1ZmZlciBBLCB3aXRoIGhhbmRzaGFrZS4gRE9OJ1QgVVNFISAqLworI2RlZmluZSB2RGlyQgkweDA0MDAgIC8qIFtWSUEgb25seV0gRGF0YSBEaXJlY3Rpb24gUmVnaXN0ZXIgQi4gKi8KKyNkZWZpbmUgdkRpckEJMHgwNjAwICAvKiBbVklBIG9ubHldIERhdGEgRGlyZWN0aW9uIFJlZ2lzdGVyIEEuICovCisjZGVmaW5lIHZUMUNMCTB4MDgwMCAgLyogW1ZJQSBvbmx5XSBUaW1lciBvbmUgY291bnRlciBsb3cuICovCisjZGVmaW5lIHZUMUNICTB4MGEwMCAgLyogW1ZJQSBvbmx5XSBUaW1lciBvbmUgY291bnRlciBoaWdoLiAqLworI2RlZmluZSB2VDFMTAkweDBjMDAgIC8qIFtWSUEgb25seV0gVGltZXIgb25lIGxhdGNoZXMgbG93LiAqLworI2RlZmluZSB2VDFMSAkweDBlMDAgIC8qIFtWSUEgb25seV0gVGltZXIgb25lIGxhdGNoZXMgaGlnaC4gKi8KKyNkZWZpbmUgdlQyQ0wJMHgxMDAwICAvKiBbVklBIG9ubHldIFRpbWVyIHR3byBjb3VudGVyIGxvdy4gKi8KKyNkZWZpbmUgdlQyQ0gJMHgxMjAwICAvKiBbVklBIG9ubHldIFRpbWVyIHR3byBjb3VudGVyIGhpZ2guICovCisjZGVmaW5lIHZTUgkweDE0MDAgIC8qIFtWSUEgb25seV0gU2hpZnQgcmVnaXN0ZXIuICovCisjZGVmaW5lIHZBQ1IJMHgxNjAwICAvKiBbVklBIG9ubHldIEF1eGlsYXJ5IGNvbnRyb2wgcmVnaXN0ZXIuICovCisjZGVmaW5lIHZQQ1IJMHgxODAwICAvKiBbVklBIG9ubHldIFBlcmlwaGVyYWwgY29udHJvbCByZWdpc3Rlci4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgQ0hSUCBzZXogbmV2ZXIgZXZlciB0byAqd3JpdGUqIHRoaXMuCisJCQkgKiAgICAgICAgICAgIE1hYyBmYW1pbHkgc2F5cyBuZXZlciB0byAqY2hhbmdlKiB0aGlzLgorCQkJICogSW4gZmFjdCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgaXQgb25jZSBhdCBzdGFydC4gKi8KKyNkZWZpbmUgdklGUgkweDFhMDAgIC8qIFtWSUEvUkJWXSAgSW50ZXJydXB0IGZsYWcgcmVnaXN0ZXIuICovCisjZGVmaW5lIHZJRVIJMHgxYzAwICAvKiBbVklBL1JCVl0gIEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIuICovCisjZGVmaW5lIHZCdWZBCTB4MWUwMCAgLyogW1ZJQS9SQlZdIHJlZ2lzdGVyIEEgKG5vIGhhbmRzaGFrZSkgKi8KKworLyogVGhlIFJCViBvbmx5IGRlY29kZXMgdGhlIGJvdHRvbSBlaWdodCBhZGRyZXNzIGxpbmVzOyB0aGUgVklBIGRvZXNuJ3QKKyAqIGRlY29kZSB0aGUgYm90dG9tIGVpZ2h0IC0tIHNvIHZCdWZCIHwgckJ1ZkIgd2lsbCBhbHdheXMgZ2V0IHlvdSBCdWZCICovCisvKiBDU0E6IGluIGZhY3QsIG9ubHkgYml0cyAwLDEsIGFuZCA0IHNlZW0gdG8gYmUgZGVjb2RlZC4KKyAqIEJVVCBub3RlIHRoZSB2YWx1ZXMgZm9yIHJJRVIgYW5kIHJJRlIsIHdoZXJlIHRoZSB0b3AgOCBiaXRzICpkbyogc2VlbQorICogdG8gbWF0dGVyLiAgSW4gZmFjdCAqYWxsKiBvZiB0aGUgdG9wIDggYml0cyBzZWVtIHRvIG1hdHRlcjsKKyAqIHNldHRpbmcgcklFUj0weDE4MTMgYW5kIHJJRlI9MHgxODAzIGRvZXNuJ3Qgd29yaywgZWl0aGVyLgorICogUGVyaGFwcyBzb21lIHNvcnQgb2YgJ2NvbXBhdGliaWxpdHkgbW9kZScgaXMgYnVpbHQtaW4/IFsyMS1NYXktMTk5OV0KKyAqLworCisjZGVmaW5lIHJCdWZCICAgMHgwMDAwICAvKiBbVklBL1JCVl0gIFJlZ2lzdGVyIEIgKi8KKyNkZWZpbmUgckV4cAkweDAwMDEJLyogW1JCViBvbmx5XSBSQlYgZnV0dXJlIGV4cGFuc2lvbiAoYWx3YXlzIDApICovCisjZGVmaW5lIHJTSUZSCTB4MDAwMiAgLyogW1JCViBvbmx5XSBSQlYgc2xvdCBpbnRlcnJ1cHRzIHJlZ2lzdGVyLiAqLworI2RlZmluZSBySUZSCTB4MWEwMyAgLyogW1ZJQS9SQlZdICBSQlYgaW50ZXJydXB0IGZsYWcgcmVnaXN0ZXIuICovCisjZGVmaW5lIHJNb25QICAgMHgwMDEwICAvKiBbUkJWIG9ubHldIFJCViB2aWRlbyBtb25pdG9yIHR5cGUuICovCisjZGVmaW5lIHJDaHBUICAgMHgwMDExICAvKiBbUkJWIG9ubHldIFJCViB0ZXN0IG1vZGUgcmVnaXN0ZXIgKHJlYWRzIGFzIDApLiAqLworI2RlZmluZSByU0lFUiAgIDB4MDAxMiAgLyogW1JCViBvbmx5XSBSQlYgc2xvdCBpbnRlcnJ1cHQgZW5hYmxlcy4gKi8KKyNkZWZpbmUgcklFUiAgICAweDFjMTMgIC8qIFtWSUEvUkJWXSAgUkJWIGludGVycnVwdCBmbGFnIGVuYWJsZSByZWdpc3Rlci4gKi8KKyNkZWZpbmUgckJ1ZkEJclNJRlIgICAvKiB0aGUgJ3Nsb3QgaW50ZXJydXB0cyByZWdpc3RlcicgaXMgQnVmQSBvbiBhIFZJQSAqLworCisvKgorICogVmlkZW8gbW9uaXRvciBwYXJhbWV0ZXJzLCBmb3Igck1vblA6CisgKi8KKyNkZWZpbmUgUkJWX0RFUFRIICAweDA3CS8qIGJpdHMgcGVyIHBpeGVsOiAwMDA9MSwwMDE9MiwwMTA9NCwwMTE9OCAqLworI2RlZmluZSBSQlZfTU9OSUQgIDB4MzgJLyogbW9uaXRvciB0eXBlLCBhcyBiZWxvdy4gKi8KKyNkZWZpbmUgUkJWX1ZJRE9GRiAweDQwCS8qIDEgdHVybnMgb2ZmIG9uYm9hcmQgdmlkZW8gKi8KKy8qIFN1cHBvcnRlZCBtb25pdG9yIHR5cGVzOiAqLworI2RlZmluZSBNT05fMTVCVyAgICgxPDwzKSAvKiAxNSIgQlcgcG9ydHJhaXQuICovCisjZGVmaW5lIE1PTl9JSUdTICAgKDI8PDMpIC8qIDEyIiBjb2xvciAobW9kaWZpZWQgSUlHUyBtb25pdG9yKS4gKi8KKyNkZWZpbmUgTU9OXzE1UkdCICAoNTw8MykgLyogMTUiIFJHQiBwb3J0cmFpdC4gKi8KKyNkZWZpbmUgTU9OXzEyT1IxMyAoNjw8MykgLyogMTIiIEJXIG9yIDEzIiBSR0IuICovCisjZGVmaW5lIE1PTl9OT05FICAgKDc8PDMpIC8qIE5vIG1vbml0b3IgYXR0YWNoZWQuICovCisKKy8qIFRvIGNsYXJpZnkgSUVSIG1hbmlwdWxhdGlvbnMgKi8KKyNkZWZpbmUgSUVSX1NFVF9CSVQoYikgKDB4ODAgfCAoMTw8KGIpKSApCisjZGVmaW5lIElFUl9DTFJfQklUKGIpICgweDdGICYgKDE8PChiKSkgKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitleHRlcm4gdm9sYXRpbGUgX191OCAqdmlhMSwqdmlhMjsKK2V4dGVybiBpbnQgcmJ2X3ByZXNlbnQsdmlhX2FsdF9tYXBwaW5nOworZXh0ZXJuIF9fdTggcmJ2X2NsZWFyOworCitzdGF0aWMgaW5saW5lIGludCByYnZfc2V0X3ZpZGVvX2JwcChpbnQgYnBwKQoreworCWNoYXIgdmFsID0gKGJwcD09MSk/MDooYnBwPT0yKT8xOihicHA9PTQpPzI6KGJwcD09OCk/MzotMTsKKwlpZiAoIXJidl9wcmVzZW50IHx8IHZhbDwwKSByZXR1cm4gLTE7CisJdmlhMltyTW9uUF0gPSAodmlhMltyTW9uUF0gJiB+UkJWX0RFUFRIKSB8IHZhbDsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9NQUNfVklBX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21hY2hkZXAuaCBiL2luY2x1ZGUvYXNtLW02OGsvbWFjaGRlcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZGQ1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21hY2hkZXAuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9NNjhLX01BQ0hERVBfSAorI2RlZmluZSBfTTY4S19NQUNIREVQX0gKKworI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKK3N0cnVjdCBwdF9yZWdzOworc3RydWN0IG1rdGltZTsKK3N0cnVjdCBydGNfdGltZTsKK3N0cnVjdCBydGNfcGxsX2luZm87CitzdHJ1Y3QgYnVmZmVyX2hlYWQ7CisKK2V4dGVybiB2b2lkICgqbWFjaF9zY2hlZF9pbml0KSAoaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpOworLyogbWFjaGluZSBkZXBlbmRlbnQgaXJxIGZ1bmN0aW9ucyAqLworZXh0ZXJuIHZvaWQgKCptYWNoX2luaXRfSVJRKSAodm9pZCk7CitleHRlcm4gaXJxcmV0dXJuX3QgKCooKm1hY2hfZGVmYXVsdF9oYW5kbGVyKVtdKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGludCAoKm1hY2hfcmVxdWVzdF9pcnEpICh1bnNpZ25lZCBpbnQgaXJxLCBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKTsKK2V4dGVybiB2b2lkICgqbWFjaF9mcmVlX2lycSkgKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gdm9pZCAoKm1hY2hfZ2V0X21vZGVsKSAoY2hhciAqbW9kZWwpOworZXh0ZXJuIGludCAoKm1hY2hfZ2V0X2hhcmR3YXJlX2xpc3QpIChjaGFyICpidWZmZXIpOworZXh0ZXJuIGludCAoKm1hY2hfZ2V0X2lycV9saXN0KSAoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KTsKK2V4dGVybiBpcnFyZXR1cm5fdCAoKm1hY2hfcHJvY2Vzc19pbnQpIChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqZnApOworLyogbWFjaGluZSBkZXBlbmRlbnQgdGltZXIgZnVuY3Rpb25zICovCitleHRlcm4gdW5zaWduZWQgbG9uZyAoKm1hY2hfZ2V0dGltZW9mZnNldCkodm9pZCk7CitleHRlcm4gaW50ICgqbWFjaF9od2NsaykoaW50LCBzdHJ1Y3QgcnRjX3RpbWUqKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgKCptYWNoX2dldF9zcykodm9pZCk7CitleHRlcm4gaW50ICgqbWFjaF9nZXRfcnRjX3BsbCkoc3RydWN0IHJ0Y19wbGxfaW5mbyAqKTsKK2V4dGVybiBpbnQgKCptYWNoX3NldF9ydGNfcGxsKShzdHJ1Y3QgcnRjX3BsbF9pbmZvICopOworZXh0ZXJuIGludCAoKm1hY2hfc2V0X2Nsb2NrX21tc3MpKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgKCptYWNoX3Jlc2V0KSggdm9pZCApOworZXh0ZXJuIHZvaWQgKCptYWNoX2hhbHQpKCB2b2lkICk7CitleHRlcm4gdm9pZCAoKm1hY2hfcG93ZXJfb2ZmKSggdm9pZCApOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKCptYWNoX2hkX2luaXQpICh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkICgqbWFjaF9oZF9zZXR1cCkoY2hhciAqLCBpbnQgKik7CitleHRlcm4gbG9uZyBtYWNoX21heF9kbWFfYWRkcmVzczsKK2V4dGVybiB2b2lkICgqbWFjaF9mbG9wcHlfc2V0dXApKGNoYXIgKiwgaW50ICopOworZXh0ZXJuIHZvaWQgKCptYWNoX2hlYXJ0YmVhdCkgKGludCk7CitleHRlcm4gdm9pZCAoKm1hY2hfbDJfZmx1c2gpIChpbnQpOworZXh0ZXJuIHZvaWQgKCptYWNoX2JlZXApICh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CisKKyNlbmRpZiAvKiBfTTY4S19NQUNIREVQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbWFjaGluZXMuaCBiL2luY2x1ZGUvYXNtLW02OGsvbWFjaGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTYwMTVhOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWFjaGluZXMuaApAQCAtMCwwICsxLDg3IEBACisvKiAkSWQ6IG1hY2hpbmVzLmgsdiAxLjQgMTk5NS8xMS8yNSAwMjozMTo1OCBkYXZlbSBFeHAgJAorICogbWFjaGluZXMuaDogIERlZmluZXMgZm9yIHRha2luZyBhcGFydCB0aGUgbWFjaGluZSB0eXBlIHZhbHVlIGluIHRoZQorICogICAgICAgICAgICAgIGlkcHJvbSBhbmQgZGV0ZXJtaW5pbmcgdGhlIGtpbmQgb2YgbWFjaGluZSB3ZSBhcmUgb24uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIFN1bjMvM3ggbW9kZWxzIGFkZGVkIGJ5IERhdmlkIE1vbnJvIChkYXZpZG1AcHNyZy5jcy51c3lkLmVkdS5hdSkKKyAqLworI2lmbmRlZiBfU1BBUkNfTUFDSElORVNfSAorI2RlZmluZSBfU1BBUkNfTUFDSElORVNfSAorCitzdHJ1Y3QgU3VuX01hY2hpbmVfTW9kZWxzIHsKKwljaGFyICpuYW1lOworCXVuc2lnbmVkIGNoYXIgaWRfbWFjaHR5cGU7Cit9OworCisvKiBDdXJyZW50IG51bWJlciBvZiBtYWNoaW5lcyB3ZSBrbm93IGFib3V0IHRoYXQgaGFzIGFuIElEUFJPTQorICogbWFjaHR5cGUgZW50cnkgaW5jbHVkaW5nIG9uZSBlbnRyeSBmb3IgdGhlIDB4ODAgT0JQIG1hY2hpbmVzLgorICovCisvLyByZWR1Y2VkIGFsb25nIHdpdGggdGFibGUgaW4gYXJjaC9tNjhrL3N1bjMvaWRwcm9tLmMKKy8vIHN1bjMgcG9ydCBkb2Vzbid0IG5lZWQgdG8ga25vdyBhYm91dCBzcGFyYyBtYWNoaW5lcy4KKy8vI2RlZmluZSBOVU1fU1VOX01BQ0hJTkVTICAgMjMKKyNkZWZpbmUgTlVNX1NVTl9NQUNISU5FUyAgOAorCitleHRlcm4gc3RydWN0IFN1bl9NYWNoaW5lX01vZGVscyBTdW5fTWFjaGluZXNbTlVNX1NVTl9NQUNISU5FU107CisKKy8qIFRoZSBtYWNoaW5lIHR5cGUgaW4gdGhlIGlkcHJvbSBhcmVhIGxvb2tzIGxpa2UgdGhpczoKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0KKyAqIHwgQVJDSCB8IE1BQ0ggfAorICogLS0tLS0tLS0tLS0tLS0tCisgKiAgNyAgICA0IDMgICAgMAorICoKKyAqIFRoZSBBUkNIIGZpZWxkIGRldGVybWluZXMgdGhlIGFyY2hpdGVjdHVyZSBsaW5lIChzdW40LCBzdW40YywgZXRjKS4KKyAqIFRoZSBNQUNIIGZpZWxkIGRldGVybWluZXMgdGhlIG1hY2hpbmUgbWFrZSB3aXRoaW4gdGhhdCBhcmNoaXRlY3R1cmUuCisgKi8KKworI2RlZmluZSBTTV9BUkNIX01BU0sgIDB4ZjAKKyNkZWZpbmUgU01fU1VOMyAgICAgICAweDEwCisjZGVmaW5lIFNNX1NVTjQgICAgICAgMHgyMAorI2RlZmluZSBTTV9TVU4zWCAgICAgIDB4NDAKKyNkZWZpbmUgU01fU1VONEMgICAgICAweDUwCisjZGVmaW5lIFNNX1NVTjRNICAgICAgMHg3MAorI2RlZmluZSBTTV9TVU40TV9PQlAgIDB4ODAKKworI2RlZmluZSBTTV9UWVBfTUFTSyAgIDB4MGYKKy8qIFN1bjMgbWFjaGluZXMgKi8KKyNkZWZpbmUgU01fM18xNjAgICAgICAweDAxICAgIC8qIFN1biAzLzE2MCBzZXJpZXMgKi8KKyNkZWZpbmUgU01fM181MCAgICAgICAweDAyICAgIC8qIFN1biAzLzUwIHNlcmllcyAqLworI2RlZmluZSBTTV8zXzI2MCAgICAgIDB4MDMgICAgLyogU3VuIDMvMjYwIHNlcmllcyAqLworI2RlZmluZSBTTV8zXzExMCAgICAgIDB4MDQgICAgLyogU3VuIDMvMTEwIHNlcmllcyAqLworI2RlZmluZSBTTV8zXzYwICAgICAgIDB4MDcgICAgLyogU3VuIDMvNjAgc2VyaWVzICovCisjZGVmaW5lIFNNXzNfRSAgICAgICAgMHgwOCAgICAvKiBTdW4gMy9FIHNlcmllcyAqLworCisvKiBTdW4zeCBtYWNoaW5lcyAqLworI2RlZmluZSBTTV8zXzQ2MCAgICAgIDB4MDEgICAgLyogU3VuIDMvNDYwICg0NjAsNDcwLDQ4MCkgc2VyaWVzICovCisjZGVmaW5lIFNNXzNfODAgICAgICAgMHgwMiAgICAvKiBTdW4gMy84MCBzZXJpZXMgKi8KKworLyogU3VuNCBtYWNoaW5lcyAqLworI2RlZmluZSBTTV80XzI2MCAgICAgIDB4MDEgICAgLyogU3VuIDQvMjAwIHNlcmllcyAqLworI2RlZmluZSBTTV80XzExMCAgICAgIDB4MDIgICAgLyogU3VuIDQvMTAwIHNlcmllcyAqLworI2RlZmluZSBTTV80XzMzMCAgICAgIDB4MDMgICAgLyogU3VuIDQvMzAwIHNlcmllcyAqLworI2RlZmluZSBTTV80XzQ3MCAgICAgIDB4MDQgICAgLyogU3VuIDQvNDAwIHNlcmllcyAqLworCisvKiBTdW40YyBtYWNoaW5lcyAgICAgICAgICAgICAgICBGdWxsIE5hbWUgICAgICAgICAgICAgIC0gUFJPTSBOQU1FICovCisjZGVmaW5lIFNNXzRDX1NTMSAgICAgMHgwMSAgICAvKiBTdW40YyBTcGFyY1N0YXRpb24gMSAgIC0gU3VuIDQvNjAgICovCisjZGVmaW5lIFNNXzRDX0lQQyAgICAgMHgwMiAgICAvKiBTdW40YyBTcGFyY1N0YXRpb24gSVBDIC0gU3VuIDQvNDAgICovCisjZGVmaW5lIFNNXzRDX1NTMVBMVVMgMHgwMyAgICAvKiBTdW40YyBTcGFyY1N0YXRpb24gMSsgIC0gU3VuIDQvNjUgICovCisjZGVmaW5lIFNNXzRDX1NMQyAgICAgMHgwNCAgICAvKiBTdW40YyBTcGFyY1N0YXRpb24gU0xDIC0gU3VuIDQvMjAgICovCisjZGVmaW5lIFNNXzRDX1NTMiAgICAgMHgwNSAgICAvKiBTdW40YyBTcGFyY1N0YXRpb24gMiAgIC0gU3VuIDQvNzUgICovCisjZGVmaW5lIFNNXzRDX0VMQyAgICAgMHgwNiAgICAvKiBTdW40YyBTcGFyY1N0YXRpb24gRUxDIC0gU3VuIDQvMjUgICovCisjZGVmaW5lIFNNXzRDX0lQWCAgICAgMHgwNyAgICAvKiBTdW40YyBTcGFyY1N0YXRpb24gSVBYIC0gU3VuIDQvNTAgICovCisKKy8qIFN1bjRtIG1hY2hpbmVzLCB0aGVzZSBwcmVkYXRlIHRoZSBPcGVuQm9vdC4gIFRoZXNlIHZhbHVlcyBvbmx5IG1lYW4KKyAqIHNvbWV0aGluZyBpZiB0aGUgdmFsdWUgaW4gdGhlIEFSQ0ggZmllbGQgaXMgU01fU1VONE0sIGlmIGl0IGlzCisgKiBTTV9TVU40TV9PQlAgdGhlbiB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbjoKKyAqIDEpIFlvdSBlaXRoZXIgaGF2ZSBhIHN1bjRkLCBhIHN1bjRlLCBvciBhIHJlY2VudGx5IG1hZGUgc3VuNG0uCisgKiAyKSBZb3UgaGF2ZSB0byBjb25zdWx0IE9wZW5Cb290IHRvIGRldGVybWluZSB3aGljaCBtYWNoaW5lIHRoaXMgaXMuCisgKi8KKyNkZWZpbmUgU01fNE1fU1M2MCAgICAweDAxICAgIC8qIFN1bjRtIFNwYXJjU3lzdGVtIDYwMCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNNXzRNX1NTNTAgICAgMHgwMiAgICAvKiBTdW40bSBTcGFyY1N0YXRpb24gMTAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTTV80TV9TUzQwICAgIDB4MDMgICAgLyogU3VuNG0gU3BhcmNTdGF0aW9uIDUgICAgICAgICAgICAgICAgICAgKi8KKworLyogU3VuNGQgbWFjaGluZXMgLS0gTi9BICovCisvKiBTdW40ZSBtYWNoaW5lcyAtLSBOL0EgKi8KKy8qIFN1bjR1IG1hY2hpbmVzIC0tIE4vQSAqLworCisjZW5kaWYgLyogIShfU1BBUkNfTUFDSElORVNfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbWFjaHcuaCBiL2luY2x1ZGUvYXNtLW02OGsvbWFjaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmUwZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNody5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorKiogbGludXgvbWFjaHcuaCAtLSBUaGlzIGhlYWRlciBkZWZpbmVzIHNvbWUgbWFjcm9zIGFuZCBwb2ludGVycyBmb3IKKyoqICAgICAgICAgICAgICAgICAgICB0aGUgdmFyaW91cyBNYWNpbnRvc2ggY3VzdG9tIGhhcmR3YXJlIHJlZ2lzdGVycy4KKyoqCisqKiBDb3B5cmlnaHQgMTk5NyBieSBNaWNoYWVsIFNjaG1pdHoKKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKi8KKworI2lmbmRlZiBfQVNNX01BQ0hXX0hfCisjZGVmaW5lIF9BU01fTUFDSFdfSF8KKworLyoKKyAqIGhlYWQuUyBtYXBzIHRoZSB2aWRlb21lbSB0byBWSURFT01FTUJBU0UKKyAqLworCisjZGVmaW5lIFZJREVPTUVNQkFTRQkweGYwMDAwMDAwCisjZGVmaW5lIFZJREVPTUVNU0laRQkoNDA5NioxMDI0KQorI2RlZmluZSBWSURFT01FTU1BU0sJKC00MDk2KjEwMjQpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaWYgMAorLyogTWFjIFNDU0kgQ29udHJvbGxlciA1MzgwICovCisKKyNkZWZpbmUJTUFDXzUzODBfQkFTCSgweDUwRjEwMDAwKSAvKiBUaGlzIGlzIGRlZmluaXRlbHkgd3JvbmchISAqLworc3RydWN0IE1BQ181MzgwIHsKKwl1X2NoYXIJc2NzaV9kYXRhOworCXVfY2hhcgljaGFyX2R1bW15MTsKKwl1X2NoYXIJc2NzaV9pY3I7CisJdV9jaGFyCWNoYXJfZHVtbXkyOworCXVfY2hhcglzY3NpX21vZGU7CisJdV9jaGFyCWNoYXJfZHVtbXkzOworCXVfY2hhcglzY3NpX3RjcjsKKwl1X2NoYXIJY2hhcl9kdW1teTQ7CisJdV9jaGFyCXNjc2lfaWRzdGF0OworCXVfY2hhcgljaGFyX2R1bW15NTsKKwl1X2NoYXIJc2NzaV9kbWFzdGF0OworCXVfY2hhcgljaGFyX2R1bW15NjsKKwl1X2NoYXIJc2NzaV90YXJncmN2OworCXVfY2hhcgljaGFyX2R1bW15NzsKKwl1X2NoYXIJc2NzaV9pbmlyY3Y7Cit9OworI2RlZmluZQltYWNfc2NzaSAgICAgICAoKCoodm9sYXRpbGUgc3RydWN0IE1BQ181MzgwICopTUFDXzUzODBfQkFTKSkKKworLyoKKyoqIFNDQyBaODUzMAorKi8KKworI2RlZmluZSBNQUNfU0NDX0JBUyAoMHg1MEYwNDAwMCkKK3N0cnVjdCBNQUNfU0NDCisgeworICB1X2NoYXIgY2hhX2FfY3RybDsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxOworICB1X2NoYXIgY2hhX2FfZGF0YTsKKyAgdV9jaGFyIGNoYXJfZHVtbXkyOworICB1X2NoYXIgY2hhX2JfY3RybDsKKyAgdV9jaGFyIGNoYXJfZHVtbXkzOworICB1X2NoYXIgY2hhX2JfZGF0YTsKKyB9OworIyBkZWZpbmUgbWFjX3NjYyAoKCoodm9sYXRpbGUgc3RydWN0IFNDQyopTUFDX1NDQ19CQVMpKQorI2VuZGlmCisKKy8qIGhhcmR3YXJlIHN0dWZmICovCisKKyNkZWZpbmUgTUFDSFdfREVDTEFSRShuYW1lKQl1bnNpZ25lZCBuYW1lIDogMQorI2RlZmluZSBNQUNIV19TRVQobmFtZSkJCShtYWNfaHdfcHJlc2VudC5uYW1lID0gMSkKKyNkZWZpbmUgTUFDSFdfUFJFU0VOVChuYW1lKQkobWFjX2h3X3ByZXNlbnQubmFtZSkKKworc3RydWN0IG1hY19od19wcmVzZW50IHsKKyAgLyogdmlkZW8gaGFyZHdhcmUgKi8KKyAgLyogc291bmQgaGFyZHdhcmUgKi8KKyAgLyogZGlzayBzdG9yYWdlIGludGVyZmFjZXMgKi8KKyAgTUFDSFdfREVDTEFSRShNQUNfU0NTSV84MCk7ICAgICAvKiBEaXJlY3RseSBtYXBwZWQgTkNSNTM4MCAqLworICBNQUNIV19ERUNMQVJFKE1BQ19TQ1NJXzk2KTsgICAgIC8qIDUzYzlbNDZdICovCisgIE1BQ0hXX0RFQ0xBUkUoTUFDX1NDU0lfOTZfMik7ICAgLyogMm5kIDUzYzlbNDZdIFE5MDAgYW5kIFE5NTAgKi8KKyAgTUFDSFdfREVDTEFSRShJREUpOyAgICAgICAgICAgICAvKiBJREUgSW50ZXJmYWNlICovCisgIC8qIG90aGVyIEkvTyBoYXJkd2FyZSAqLworICBNQUNIV19ERUNMQVJFKFNDQyk7ICAgICAgICAgICAgIC8qIFNlcmlhbCBDb21tdW5pY2F0aW9ucyBDb250ci4gKi8KKyAgLyogRE1BICovCisgIE1BQ0hXX0RFQ0xBUkUoU0NTSV9ETUEpOyAgICAgICAgLyogRE1BIGZvciB0aGUgTkNSNTM4MCAqLworICAvKiByZWFsIHRpbWUgY2xvY2tzICovCisgIE1BQ0hXX0RFQ0xBUkUoUlRDX0NMSyk7ICAgICAgICAgLyogY2xvY2sgY2hpcCAqLworICAvKiBzdXBwb3J0aW5nIGhhcmR3YXJlICovCisgIE1BQ0hXX0RFQ0xBUkUoVklBMSk7ICAgICAgICAgICAgLyogVmVyc2F0aWxlIEludGVyZmFjZSBBZC4gMSAqLworICBNQUNIV19ERUNMQVJFKFZJQTIpOyAgICAgICAgICAgIC8qIFZlcnNhdGlsZSBJbnRlcmZhY2UgQWQuIDIgKi8KKyAgTUFDSFdfREVDTEFSRShSQlYpOyAgICAgICAgICAgICAvKiBWZXJzYXRpbGUgSW50ZXJmYWNlIEFkLiAyKyAqLworICAvKiBOVUJVUyAqLworICBNQUNIV19ERUNMQVJFKE5VQlVTKTsgICAgICAgICAgIC8qIE5VQlVTICovCit9OworCitleHRlcm4gc3RydWN0IG1hY19od19wcmVzZW50IG1hY19od19wcmVzZW50OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBsaW51eC9tYWNody5oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21hY2ludG9zaC5oIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNpbnRvc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmMzZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNpbnRvc2guaApAQCAtMCwwICsxLDE1MiBAQAorI2lmbmRlZiBfX0FTTV9NQUNJTlRPU0hfSAorI2RlZmluZSBfX0FTTV9NQUNJTlRPU0hfSAorCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworLyoKKyAqCUFwcGxlIE1hY2ludG9zaGlzbXMKKyAqLworCitleHRlcm4gdm9pZCBtYWNfcmVzZXQodm9pZCk7CitleHRlcm4gdm9pZCBtYWNfcG93ZXJvZmYodm9pZCk7CitleHRlcm4gdm9pZCBtYWNfaW5pdF9JUlEodm9pZCk7CitleHRlcm4gaW50IG1hY19yZXF1ZXN0X2lycSAodW5zaWduZWQgaW50LCBpcnFyZXR1cm5fdCAoKikoaW50LCB2b2lkICosCisJCQkJc3RydWN0IHB0X3JlZ3MgKiksCisJCQkJdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgbWFjX2ZyZWVfaXJxKHVuc2lnbmVkIGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIG1hY19lbmFibGVfaXJxKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBtYWNfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgbWFjX2lycV9wZW5kaW5nKHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IHNob3dfbWFjX2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICosIHZvaWQgKik7CisjaWYgMAorZXh0ZXJuIHZvaWQgbWFjX2RlZmF1bHRfaGFuZGxlcihpbnQgaXJxKTsKKyNlbmRpZgorZXh0ZXJuIHZvaWQgbWFjX2lkZW50aWZ5KHZvaWQpOworZXh0ZXJuIHZvaWQgbWFjX3JlcG9ydF9oYXJkd2FyZSh2b2lkKTsKK2V4dGVybiB2b2lkIG1hY19kZWJ1Z2dpbmdfcGVuZ3VpbihpbnQpOworZXh0ZXJuIHZvaWQgbWFjX2Jvb20oaW50KTsKKworLyoKKyAqCUZsb3BweSBkcml2ZXIgbWFnaWMgaG9vayAtIHByb2JhYmx5IHNob3VsZG50IGJlIGhlcmUKKyAqLworCitleHRlcm4gdm9pZCB2aWExX3NldF9oZWFkKGludCk7CisKK2V4dGVybiB2b2lkIHBhcnNlX2Jvb3RlcihjaGFyICpwdHIpOworZXh0ZXJuIHZvaWQgcHJpbnRfYm9vdGVyKGNoYXIgKnB0cik7CisKKy8qCisgKglNYWNpbnRvc2ggVGFibGUKKyAqLworCitzdHJ1Y3QgbWFjX21vZGVsCit7CisJc2hvcnQgaWRlbnQ7CisJY2hhciAqbmFtZTsKKwljaGFyIGFkYl90eXBlOworCWNoYXIgdmlhX3R5cGU7CisJY2hhciBzY3NpX3R5cGU7CisJY2hhciBpZGVfdHlwZTsKKwljaGFyIHNjY190eXBlOworCWNoYXIgZXRoZXJfdHlwZTsKKwljaGFyIG51YnVzX3R5cGU7Cit9OworCisjZGVmaW5lIE1BQ19BREJfTk9ORQkJMAorI2RlZmluZSBNQUNfQURCX0lJCQkxCisjZGVmaW5lIE1BQ19BREJfSUlTSQkJMgorI2RlZmluZSBNQUNfQURCX0NVREEJCTMKKyNkZWZpbmUgTUFDX0FEQl9QQjEJCTQKKyNkZWZpbmUgTUFDX0FEQl9QQjIJCTUKKyNkZWZpbmUgTUFDX0FEQl9JT1AJCTYKKworI2RlZmluZSBNQUNfVklBX0lJCQkxCisjZGVmaW5lIE1BQ19WSUFfSUljaQkJMgorI2RlZmluZSBNQUNfVklBX1FVQURSQQkJMworCisjZGVmaW5lIE1BQ19TQ1NJX05PTkUJCTAKKyNkZWZpbmUgTUFDX1NDU0lfT0xECQkxCisjZGVmaW5lIE1BQ19TQ1NJX1FVQURSQQkJMgorI2RlZmluZSBNQUNfU0NTSV9RVUFEUkEyCTMKKyNkZWZpbmUgTUFDX1NDU0lfUVVBRFJBMwk0CisKKyNkZWZpbmUgTUFDX0lERV9OT05FCQkwCisjZGVmaW5lIE1BQ19JREVfUVVBRFJBCQkxCisjZGVmaW5lIE1BQ19JREVfUEIJCTIKKyNkZWZpbmUgTUFDX0lERV9CQUJPT04JCTMKKworI2RlZmluZSBNQUNfU0NDX0lJCQkxCisjZGVmaW5lIE1BQ19TQ0NfSU9QCQkyCisjZGVmaW5lIE1BQ19TQ0NfUVVBRFJBCQkzCisjZGVmaW5lIE1BQ19TQ0NfUFNDCQk0CisKKyNkZWZpbmUgTUFDX0VUSEVSX05PTkUJCTAKKyNkZWZpbmUgTUFDX0VUSEVSX1NPTklDCQkxCisjZGVmaW5lIE1BQ19FVEhFUl9NQUNFCQkyCisKKyNkZWZpbmUgTUFDX05PX05VQlVTCQkwCisjZGVmaW5lIE1BQ19OVUJVUwkJMQorCisvKgorICoJR2VzdGFsdCBudW1iZXJzCisgKi8KKworI2RlZmluZSBNQUNfTU9ERUxfSUkJCTYKKyNkZWZpbmUgTUFDX01PREVMX0lJWAkJNworI2RlZmluZSBNQUNfTU9ERUxfSUlDWAkJOAorI2RlZmluZSBNQUNfTU9ERUxfU0UzMAkJOQorI2RlZmluZSBNQUNfTU9ERUxfSUlDSQkJMTEKKyNkZWZpbmUgTUFDX01PREVMX0lJRlgJCTEzCS8qIEFuZCB3ZWxsIG51bWJlcmVkIGl0IGlzIHRvbyAqLworI2RlZmluZSBNQUNfTU9ERUxfSUlTSQkJMTgKKyNkZWZpbmUgTUFDX01PREVMX0xDCQkxOQorI2RlZmluZSBNQUNfTU9ERUxfUTkwMAkJMjAKKyNkZWZpbmUgTUFDX01PREVMX1BCMTcwCQkyMQorI2RlZmluZSBNQUNfTU9ERUxfUTcwMAkJMjIKKyNkZWZpbmUgTUFDX01PREVMX0NMSUkJCTIzCS8qIGFrYTogUDIwMCAqLworI2RlZmluZSBNQUNfTU9ERUxfUEIxNDAJCTI1CisjZGVmaW5lIE1BQ19NT0RFTF9ROTUwCQkyNgkvKiBha2E6IFdHUzk1ICovCisjZGVmaW5lIE1BQ19NT0RFTF9MQ0lJSQkJMjcJLyogYWthOiBQNDUwICovCisjZGVmaW5lIE1BQ19NT0RFTF9QQjIxMAkJMjkKKyNkZWZpbmUgTUFDX01PREVMX0M2NTAJCTMwCisjZGVmaW5lIE1BQ19NT0RFTF9QQjIzMAkJMzIKKyNkZWZpbmUgTUFDX01PREVMX1BCMTgwCQkzMworI2RlZmluZSBNQUNfTU9ERUxfUEIxNjAJCTM0CisjZGVmaW5lIE1BQ19NT0RFTF9RODAwCQkzNQkvKiBha2E6IFdHUzgwICovCisjZGVmaW5lIE1BQ19NT0RFTF9RNjUwCQkzNgorI2RlZmluZSBNQUNfTU9ERUxfTENJSQkJMzcJLyogYWthOiBQNDAwLzQwNS80MTAvNDMwICovCisjZGVmaW5lIE1BQ19NT0RFTF9QQjI1MAkJMzgKKyNkZWZpbmUgTUFDX01PREVMX0lJVkkJCTQ0CisjZGVmaW5lIE1BQ19NT0RFTF9QNjAwCQk0NQkvKiBha2E6IFA2MDBDRCAqLworI2RlZmluZSBNQUNfTU9ERUxfSUlWWAkJNDgKKyNkZWZpbmUgTUFDX01PREVMX0NDTAkJNDkJLyogYWthOiBQMjUwICovCisjZGVmaW5lIE1BQ19NT0RFTF9QQjE2NUMJNTAKKyNkZWZpbmUgTUFDX01PREVMX0M2MTAJCTUyCS8qIGFrYTogV0dTNjAgKi8KKyNkZWZpbmUgTUFDX01PREVMX1E2MTAJCTUzCisjZGVmaW5lIE1BQ19NT0RFTF9QQjE0NQkJNTQJLyogYWthOiBQQjE0NUIgKi8KKyNkZWZpbmUgTUFDX01PREVMX1A1MjAJCTU2CS8qIGFrYTogTEM1MjAgKi8KKyNkZWZpbmUgTUFDX01PREVMX0M2NjAJCTYwCisjZGVmaW5lIE1BQ19NT0RFTF9QNDYwCQk2MgkvKiBha2E6IExDSUlJKywgUDQ2Ni9QNDY3ICovCisjZGVmaW5lIE1BQ19NT0RFTF9QQjE4MEMJNzEKKyNkZWZpbmUgTUFDX01PREVMX1BCNTIwCQk3MgkvKiBha2E6IFBCNTIwQywgUEI1NDAsIFBCNTQwQywgUEI1NTBDICovCisjZGVmaW5lIE1BQ19NT0RFTF9QQjI3MEMJNzcKKyNkZWZpbmUgTUFDX01PREVMX1E4NDAJCTc4CisjZGVmaW5lIE1BQ19NT0RFTF9QNTUwCQk4MAkvKiBha2E6IExDNTUwLCBQNTYwICovCisjZGVmaW5lIE1BQ19NT0RFTF9DQ0xJSQkJODMJLyogYWthOiBQMjc1ICovCisjZGVmaW5lIE1BQ19NT0RFTF9QQjE2NQkJODQKKyNkZWZpbmUgTUFDX01PREVMX1BCMTkwCQk4NQkvKiBha2E6IFBCMTkwQ1MgKi8KKyNkZWZpbmUgTUFDX01PREVMX1RWCQk4OAorI2RlZmluZSBNQUNfTU9ERUxfUDQ3NQkJODkJLyogYWthOiBMQzQ3NSwgUDQ3NiAqLworI2RlZmluZSBNQUNfTU9ERUxfUDQ3NUYJCTkwCS8qIGFrYTogUDQ3NSB3LyBGUFUgKG5vIExDMDQwKSAqLworI2RlZmluZSBNQUNfTU9ERUxfUDU3NQkJOTIJLyogYWthOiBMQzU3NSwgUDU3Ny9QNTc4ICovCisjZGVmaW5lIE1BQ19NT0RFTF9RNjA1CQk5NAorI2RlZmluZSBNQUNfTU9ERUxfUTYwNV9BQ0MJOTUJLyogUTYwNSBhY2NlbGVyYXRlZCB0byAzMyBNSHogKi8KKyNkZWZpbmUgTUFDX01PREVMX1E2MzAJCTk4CS8qIGFrYTogTEM2MzAsIFA2MzAvNjMxLzYzNS82MzYvNjM3LzYzOC82NDAgKi8KKyNkZWZpbmUgTUFDX01PREVMX1A1ODgJCTk5CS8qIGFrYTogTEM1ODAsIFA1ODAgKi8KKyNkZWZpbmUgTUFDX01PREVMX1BCMjgwCQkxMDIKKyNkZWZpbmUgTUFDX01PREVMX1BCMjgwQwkxMDMKKyNkZWZpbmUgTUFDX01PREVMX1BCMTUwCQkxMTUKKworZXh0ZXJuIHN0cnVjdCBtYWNfbW9kZWwgKm1hY2ludG9zaF9jb25maWc7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tYWNpbnRzLmggYi9pbmNsdWRlL2FzbS1tNjhrL21hY2ludHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDhjM2E5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tYWNpbnRzLmgKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisqKiBtYWNpbnRzLmggLS0gTWFjaW50b3NoIExpbnV4IGludGVycnVwdCBoYW5kbGluZyBzdHJ1Y3RzIGFuZCBwcm90b3R5cGVzCisqKgorKiogQ29weXJpZ2h0IDE5OTcgYnkgTWljaGFlbCBTY2htaXR6CisqKgorKiogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyoqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisqKiBmb3IgbW9yZSBkZXRhaWxzLgorKioKKyovCisKKyNpZm5kZWYgX0FTTV9NQUNJTlRTX0hfCisjZGVmaW5lIF9BU01fTUFDSU5UU19IXworCisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisvKiBTZXR0aW5nIHRoaXMgcHJpbnRzIGRlYnVnZ2luZyBpbmZvIGZvciB1bmNsYWltZWQgaW50ZXJydXB0cyAqLworCisjZGVmaW5lIERFQlVHX1NQVVJJT1VTCisKKy8qIFNldHRpbmcgdGhpcyBwcmludHMgZGVidWdnaW5nIGluZm8gb24gZWFjaCBhdXRvdmVjdG9yIGludGVycnVwdCAqLworCisvKiAjZGVmaW5lIERFQlVHX0lSUVMgKi8KKworLyogU2V0dGluZyB0aGlzIHByaW50cyBkZWJ1Z2dpbmcgaW5mbyBvbiBlYWNoIE51YnVzIGludGVycnVwdCAqLworCisvKiAjZGVmaW5lIERFQlVHX05VQlVTX0lOVCAqLworCisvKiBTZXR0aW5nIHRoaXMgcHJpbnRzIGRlYnVnZ2luZyBpbmZvIG9uIGlycXMgYXMgdGhleSBlbmFibGVkIGFuZCBkaXNhYmxlZC4gKi8KKworLyogI2RlZmluZSBERUJVR19JUlFVU0UgKi8KKworLyoKKyAqIEJhc2UgSVJRIG51bWJlciBmb3IgYWxsIE1hYzY4SyBpbnRlcnJ1cHQgc291cmNlcy4gRWFjaCBzb3VyY2UKKyAqIGhhcyBlaWdodCBpbmRleGVzIChiYXNlIC0+IGJhc2UrNykuCisgKi8KKworI2RlZmluZSBWSUExX1NPVVJDRV9CQVNFCTgKKyNkZWZpbmUgVklBMl9TT1VSQ0VfQkFTRQkxNgorI2RlZmluZSBNQUNfU0NDX1NPVVJDRV9CQVNFCTI0CisjZGVmaW5lIFBTQzNfU09VUkNFX0JBU0UJMjQKKyNkZWZpbmUgUFNDNF9TT1VSQ0VfQkFTRQkzMgorI2RlZmluZSBQU0M1X1NPVVJDRV9CQVNFCTQwCisjZGVmaW5lIFBTQzZfU09VUkNFX0JBU0UJNDgKKyNkZWZpbmUgTlVCVVNfU09VUkNFX0JBU0UJNTYKKyNkZWZpbmUgQkFCT09OX1NPVVJDRV9CQVNFCTY0CisKKy8qCisgKiBNYXhpbXVtIElSUSBudW1iZXIgaXMgQkFCT09OX1NPVVJDRV9CQVNFICsgNywKKyAqIGdpdmluZyB1cyBJUlFzIHVwIHRocm91Z2ggNzEKKyAqLworCisjZGVmaW5lIE5VTV9NQUNfU09VUkNFUwkJNzIKKworLyoKKyAqIGNsZWFuIHdheSB0byBzZXBhcmF0ZSBJUlEgaW50byBpdHMgc291cmNlIGFuZCBpbmRleAorICovCisKKyNkZWZpbmUgSVJRX1NSQyhpcnEpCShpcnEgPj4gMykKKyNkZWZpbmUJSVJRX0lEWChpcnEpCShpcnEgJiA3KQorCisjZGVmaW5lCUlSUV9TUFVSSU9VUyAgICAgICgwKQorCisvKiBhdXRvLXZlY3RvciBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElSUV9BVVRPXzEgICAgICAgICgxKQorI2RlZmluZSBJUlFfQVVUT18yICAgICAgICAoMikKKyNkZWZpbmUgSVJRX0FVVE9fMyAgICAgICAgKDMpCisjZGVmaW5lIElSUV9BVVRPXzQgICAgICAgICg0KQorI2RlZmluZSBJUlFfQVVUT181ICAgICAgICAoNSkKKyNkZWZpbmUgSVJRX0FVVE9fNiAgICAgICAgKDYpCisjZGVmaW5lIElSUV9BVVRPXzcgICAgICAgICg3KQorCisvKiBWSUExIGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX1ZJQTFfMAkgICg4KQkJLyogb25lIHNlY29uZCBpbnQuICovCisjZGVmaW5lIElSUV9WSUExXzEgICAgICAgICg5KQkJLyogVkJsYW5rIGludC4gKi8KKyNkZWZpbmUgSVJRX01BQ19WQkwJICBJUlFfVklBMV8xCisjZGVmaW5lIElSUV9WSUExXzIJICAoMTApCQkvKiBBREIgU1Igc2hpZnRzIGNvbXBsZXRlICovCisjZGVmaW5lIElSUV9NQUNfQURCCSAgSVJRX1ZJQTFfMgorI2RlZmluZSBJUlFfTUFDX0FEQl9TUgkgIElSUV9WSUExXzIKKyNkZWZpbmUgSVJRX1ZJQTFfMwkgICgxMSkJCS8qIEFEQiBTUiBDQjIgPz8gKi8KKyNkZWZpbmUgSVJRX01BQ19BREJfU0QJICBJUlFfVklBMV8zCisjZGVmaW5lIElSUV9WSUExXzQgICAgICAgICgxMikJCS8qIEFEQiBTUiBleHQuIGNsb2NrIHB1bHNlICovCisjZGVmaW5lIElSUV9NQUNfQURCX0NMCSAgSVJRX1ZJQTFfNAorI2RlZmluZSBJUlFfVklBMV81CSAgKDEzKQorI2RlZmluZSBJUlFfTUFDX1RJTUVSXzIJICBJUlFfVklBMV81CisjZGVmaW5lIElSUV9WSUExXzYJICAoMTQpCisjZGVmaW5lIElSUV9NQUNfVElNRVJfMQkgIElSUV9WSUExXzYKKyNkZWZpbmUgSVJRX1ZJQTFfNyAgICAgICAgKDE1KQorCisvKiBWSUEyL1JCViBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElSUV9WSUEyXzAJICAoMTYpCisjZGVmaW5lIElSUV9NQUNfU0NTSURSUQkgIElSUV9WSUEyXzAKKyNkZWZpbmUgSVJRX1ZJQTJfMSAgICAgICAgKDE3KQorI2RlZmluZSBJUlFfTUFDX05VQlVTCSAgSVJRX1ZJQTJfMQorI2RlZmluZSBJUlFfVklBMl8yCSAgKDE4KQorI2RlZmluZSBJUlFfVklBMl8zCSAgKDE5KQorI2RlZmluZSBJUlFfTUFDX1NDU0kJICBJUlFfVklBMl8zCisjZGVmaW5lIElSUV9WSUEyXzQgICAgICAgICgyMCkKKyNkZWZpbmUgSVJRX1ZJQTJfNQkgICgyMSkKKyNkZWZpbmUgSVJRX1ZJQTJfNgkgICgyMikKKyNkZWZpbmUgSVJRX1ZJQTJfNyAgICAgICAgKDIzKQorCisvKiBMZXZlbCAzIChQU0MsIEFWIE1hY3Mgb25seSkgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfUFNDM18wCSAgKDI0KQorI2RlZmluZSBJUlFfTUFDX01BQ0UJICBJUlFfUFNDM18wCisjZGVmaW5lIElSUV9QU0MzXzEJICAoMjUpCisjZGVmaW5lIElSUV9QU0MzXzIJICAoMjYpCisjZGVmaW5lIElSUV9QU0MzXzMJICAoMjcpCisKKy8qIExldmVsIDQgKFNDQykgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfU0NDCQkgICAgICgzMikKKyNkZWZpbmUgSVJRX1NDQ0EJICAgICAoMzMpCisjZGVmaW5lIElSUV9TQ0NCCSAgICAgKDM0KQorI2lmIDAgLyogRklYTUU6IGFyZSB0aGVyZSBtdWx0aXBsZSBpbnRlcnJ1cHQgY29uZGl0aW9ucyBvbiB0aGUgU0NDID8/ICovCisvKiBTQ0MgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfU0NDQl9UWAkgICAgICgzMikKKyNkZWZpbmUgSVJRX1NDQ0JfU1RBVAkgICAgICgzMykKKyNkZWZpbmUgSVJRX1NDQ0JfUlgJICAgICAoMzQpCisjZGVmaW5lIElSUV9TQ0NCX1NQQ09ORAkgICAgICgzNSkKKyNkZWZpbmUgSVJRX1NDQ0FfVFgJICAgICAoMzYpCisjZGVmaW5lIElSUV9TQ0NBX1NUQVQJICAgICAoMzcpCisjZGVmaW5lIElSUV9TQ0NBX1JYCSAgICAgKDM4KQorI2RlZmluZSBJUlFfU0NDQV9TUENPTkQJICAgICAoMzkpCisjZW5kaWYKKworLyogTGV2ZWwgNCAoUFNDLCBBViBNYWNzIG9ubHkpIGludGVycnVwdHMgKi8KKyNkZWZpbmUgSVJRX1BTQzRfMAkgICgzMikKKyNkZWZpbmUgSVJRX1BTQzRfMQkgICgzMykKKyNkZWZpbmUgSVJRX1BTQzRfMgkgICgzNCkKKyNkZWZpbmUgSVJRX1BTQzRfMwkgICgzNSkKKyNkZWZpbmUgSVJRX01BQ19NQUNFX0RNQSAgSVJRX1BTQzRfMworCisvKiBMZXZlbCA1IChQU0MsIEFWIE1hY3Mgb25seSkgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfUFNDNV8wCSAgKDQwKQorI2RlZmluZSBJUlFfUFNDNV8xCSAgKDQxKQorI2RlZmluZSBJUlFfUFNDNV8yCSAgKDQyKQorI2RlZmluZSBJUlFfUFNDNV8zCSAgKDQzKQorCisvKiBMZXZlbCA2IChQU0MsIEFWIE1hY3Mgb25seSkgaW50ZXJydXB0cyAqLworI2RlZmluZSBJUlFfUFNDNl8wCSAgKDQ4KQorI2RlZmluZSBJUlFfUFNDNl8xCSAgKDQ5KQorI2RlZmluZSBJUlFfUFNDNl8yCSAgKDUwKQorI2RlZmluZSBJUlFfUFNDNl8zCSAgKDUxKQorCisvKiBOdWJ1cyBpbnRlcnJ1cHRzIChjYXNjYWRlZCB0byBWSUEyKSAqLworI2RlZmluZSBJUlFfTlVCVVNfOQkgICg1NikKKyNkZWZpbmUgSVJRX05VQlVTX0EJICAoNTcpCisjZGVmaW5lIElSUV9OVUJVU19CCSAgKDU4KQorI2RlZmluZSBJUlFfTlVCVVNfQwkgICg1OSkKKyNkZWZpbmUgSVJRX05VQlVTX0QJICAoNjApCisjZGVmaW5lIElSUV9OVUJVU19FCSAgKDYxKQorI2RlZmluZSBJUlFfTlVCVVNfRgkgICg2MikKKworLyogQmFib29uIGludGVycnVwdHMgKGNhc2NhZGVkIHRvIG51YnVzIHNsb3QgJEMpICovCisjZGVmaW5lIElSUV9CQUJPT05fMAkgICg2NCkKKyNkZWZpbmUgSVJRX0JBQk9PTl8xCSAgKDY1KQorI2RlZmluZSBJUlFfQkFCT09OXzIJICAoNjYpCisjZGVmaW5lIElSUV9CQUJPT05fMwkgICg2NykKKworI2RlZmluZSBTTE9UMklSUSh4KQkgICh4ICsgNDcpCisjZGVmaW5lIElSUTJTTE9UKHgpCSAgKHggLSA0NykKKworI2RlZmluZSBJTlRfQ0xLICAgMjQ1NzYJICAgIC8qIENMSyB3aGlsZSBpbnRfY2xrID0yLjQ1Nk1IeiBhbmQgZGl2aWRlID0gMTAwICovCisjZGVmaW5lIElOVF9USUNLUyAyNDYJICAgIC8qIHRvIG1ha2Ugc2NoZWRfdGltZSA9IDk5LjkwMi4uLiBIWiAqLworCitleHRlcm4gaXJxX25vZGVfdCAqbWFjX2lycV9saXN0W05VTV9NQUNfU09VUkNFU107CitleHRlcm4gdm9pZCBtYWNfZG9faXJxX2xpc3QoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKik7CisKKyNlbmRpZiAvKiBhc20vbWFjaW50cy5oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21hdGgtZW11LmggYi9pbmNsdWRlL2FzbS1tNjhrL21hdGgtZW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjNjI1OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWF0aC1lbXUuaApAQCAtMCwwICsxLDMwMCBAQAorI2lmbmRlZiBfQVNNX002OEtfU0VUVVBfSAorI2RlZmluZSBfQVNNX002OEtfU0VUVVBfSAorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisvKiBTdGF0dXMgUmVnaXN0ZXIgYml0cyAqLworCisvKiBhY2NydWVkIGV4Y2VwdGlvbiBiaXRzICovCisjZGVmaW5lIEZQU1JfQUVYQ19JTkVYCTMKKyNkZWZpbmUgRlBTUl9BRVhDX0RaCTQKKyNkZWZpbmUgRlBTUl9BRVhDX1VORkwJNQorI2RlZmluZSBGUFNSX0FFWENfT1ZGTAk2CisjZGVmaW5lIEZQU1JfQUVYQ19JT1AJNworCisvKiBleGNlcHRpb24gc3RhdHVzIGJpdHMgKi8KKyNkZWZpbmUgRlBTUl9FWENfSU5FWDEJOAorI2RlZmluZSBGUFNSX0VYQ19JTkVYMgk5CisjZGVmaW5lIEZQU1JfRVhDX0RaCTEwCisjZGVmaW5lIEZQU1JfRVhDX1VORkwJMTEKKyNkZWZpbmUgRlBTUl9FWENfT1ZGTAkxMgorI2RlZmluZSBGUFNSX0VYQ19PUEVSUgkxMworI2RlZmluZSBGUFNSX0VYQ19TTkFOCTE0CisjZGVmaW5lIEZQU1JfRVhDX0JTVU4JMTUKKworLyogcXVvdGllbnQgYnl0ZSwgYXNzdW1lcyBiaWctZW5kaWFuLCBvZiBjb3Vyc2UgKi8KKyNkZWZpbmUgRlBTUl9RVU9USUVOVChmcHNyKSAoKigoc2lnbmVkIGNoYXIgKikgJihmcHNyKSArIDEpKQorCisvKiBjb25kaXRpb24gY29kZSBiaXRzICovCisjZGVmaW5lIEZQU1JfQ0NfTkFOCTI0CisjZGVmaW5lIEZQU1JfQ0NfSU5GCTI1CisjZGVmaW5lIEZQU1JfQ0NfWgkyNgorI2RlZmluZSBGUFNSX0NDX05FRwkyNworCisKKy8qIENvbnRyb2wgcmVnaXN0ZXIgYml0cyAqLworCisvKiByb3VuZGluZyBtb2RlICovCisjZGVmaW5lCUZQQ1JfUk9VTkRfUk4JMAkJLyogcm91bmQgdG8gbmVhcmVzdC9ldmVuICovCisjZGVmaW5lIEZQQ1JfUk9VTkRfUloJMQkJLyogcm91bmQgdG8gemVybyAqLworI2RlZmluZSBGUENSX1JPVU5EX1JNCTIJCS8qIG1pbnVzIGluZmluaXR5ICovCisjZGVmaW5lIEZQQ1JfUk9VTkRfUlAJMwkJLyogcGx1cyBpbmZpbml0eSAqLworCisvKiByb3VuZGluZyBwcmVjaXNpb24gKi8KKyNkZWZpbmUgRlBDUl9QUkVDSVNJT05fWAkwCS8qIGxvbmcgZG91YmxlICovCisjZGVmaW5lIEZQQ1JfUFJFQ0lTSU9OX1MJMQkvKiBkb3VibGUgKi8KKyNkZWZpbmUgRlBDUl9QUkVDSVNJT05fRAkyCS8qIGZsb2F0ICovCisKKworLyogRmxhZ3MgdG8gc2VsZWN0IHRoZSBkZWJ1Z2dpbmcgb3V0cHV0ICovCisjZGVmaW5lIFBERUNPREUJCTAKKyNkZWZpbmUgUEVYRUNVVEUJMQorI2RlZmluZSBQQ09OVgkJMgorI2RlZmluZSBQTk9STQkJMworI2RlZmluZSBQUkVHSVNURVIJNAorI2RlZmluZSBQSU5TVFIJCTUKKyNkZWZpbmUgUFVOSU1QTAkJNgorI2RlZmluZSBQTU9WRU0JCTcKKworI2RlZmluZSBQTURFQ09ERQkoMTw8UERFQ09ERSkKKyNkZWZpbmUgUE1FWEVDVVRFCSgxPDxQRVhFQ1VURSkKKyNkZWZpbmUgUE1DT05WCQkoMTw8UENPTlYpCisjZGVmaW5lIFBNTk9STQkJKDE8PFBOT1JNKQorI2RlZmluZSBQTVJFR0lTVEVSCSgxPDxQUkVHSVNURVIpCisjZGVmaW5lIFBNSU5TVFIJCSgxPDxQSU5TVFIpCisjZGVmaW5lIFBNVU5JTVBMCSgxPDxQVU5JTVBMKQorI2RlZmluZSBQTU1PVkVNCQkoMTw8UE1PVkVNKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKwordW5pb24gZnBfbWFudDY0IHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbTY0OworCXVuc2lnbmVkIGxvbmcgbTMyWzJdOworfTsKKwordW5pb24gZnBfbWFudDEyOCB7CisJdW5zaWduZWQgbG9uZyBsb25nIG02NFsyXTsKKwl1bnNpZ25lZCBsb25nIG0zMls0XTsKK307CisKKy8qIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGV4dGVuZGVkIGZwIG51bWJlcnMgKi8KK3N0cnVjdCBmcF9leHQgeworCXVuc2lnbmVkIGNoYXIgbG93bWFudDsKKwl1bnNpZ25lZCBjaGFyIHNpZ247CisJdW5zaWduZWQgc2hvcnQgZXhwOworCXVuaW9uIGZwX21hbnQ2NCBtYW50OworfTsKKworLyogQyByZXByZXNlbnRhdGlvbiBvZiBGUFUgcmVnaXN0ZXJzICovCisvKiBOT1RFOiBpZiB5b3UgY2hhbmdlIHRoaXMsIHlvdSBoYXZlIHRvIGNoYW5nZSB0aGUgYXNzZW1ibGVyIG9mZnNldHMKKyAgIGJlbG93IGFuZCB0aGUgc2l6ZSBpbiA8YXNtL2ZwdS5oPiwgdG9vICovCitzdHJ1Y3QgZnBfZGF0YSB7CisJc3RydWN0IGZwX2V4dCBmcHJlZ1s4XTsKKwl1bnNpZ25lZCBpbnQgZnBjcjsKKwl1bnNpZ25lZCBpbnQgZnBzcjsKKwl1bnNpZ25lZCBpbnQgZnBpYXI7CisJdW5zaWduZWQgc2hvcnQgcHJlYzsKKwl1bnNpZ25lZCBzaG9ydCBybmQ7CisJc3RydWN0IGZwX2V4dCB0ZW1wWzJdOworfTsKKworI2lmZGVmIEZQVV9FTVVfREVCVUcKK2V4dGVybiB1bnNpZ25lZCBpbnQgZnBfZGVidWdwcmludDsKKworI2RlZmluZSBkcHJpbnQoYml0LCBmbXQsIGFyZ3MuLi4pICh7CQkJXAorCWlmIChmcF9kZWJ1Z3ByaW50ICYgKDEgPDwgKGJpdCkpKQkJXAorCQlwcmludGsoZm10LCAjIyBhcmdzKTsJCQlcCit9KQorI2Vsc2UKKyNkZWZpbmUgZHByaW50KGJpdCwgZm10LCBhcmdzLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgdXByaW50KHN0cikgKHsJCQkJCVwKKwlzdGF0aWMgaW50IF9fY291bnQgPSAzOwkJCQlcCisJCQkJCQkJXAorCWlmIChfX2NvdW50ID4gMCkgewkJCQlcCisJCXByaW50aygiWW91IGp1c3QgaGl0IGFuIHVuaW1wbGVtZW50ZWQgIglcCisJCSAgICAgICAiZnB1IGluc3RydWN0aW9uICglcylcbiIsIHN0cik7CVwKKwkJcHJpbnRrKCJQbGVhc2UgcmVwb3J0IHRoaXMgdG8gLi4uLlxuIik7CVwKKwkJX19jb3VudC0tOwkJCQlcCisJfQkJCQkJCVwKK30pCisKKyNkZWZpbmUgRlBEQVRBCQkoKHN0cnVjdCBmcF9kYXRhICopY3VycmVudC0+dGhyZWFkLmZwKQorCisjZWxzZQkvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBGUERBVEEJCSVhMgorCisvKiBvZmZzZXRzIGZyb20gdGhlIGJhc2UgcmVnaXN0ZXIgdG8gdGhlIGZsb2F0aW5nIHBvaW50IGRhdGEgaW4gdGhlIHRhc2sgc3RydWN0ICovCisjZGVmaW5lIEZQRF9GUFJFRwkoVEFTS19USFJFQUQrVEhSRUFEX0ZQUkVHKzApCisjZGVmaW5lIEZQRF9GUENSCShUQVNLX1RIUkVBRCtUSFJFQURfRlBSRUcrOTYpCisjZGVmaW5lIEZQRF9GUFNSCShUQVNLX1RIUkVBRCtUSFJFQURfRlBSRUcrMTAwKQorI2RlZmluZSBGUERfRlBJQVIJKFRBU0tfVEhSRUFEK1RIUkVBRF9GUFJFRysxMDQpCisjZGVmaW5lIEZQRF9QUkVDCShUQVNLX1RIUkVBRCtUSFJFQURfRlBSRUcrMTA4KQorI2RlZmluZSBGUERfUk5ECQkoVEFTS19USFJFQUQrVEhSRUFEX0ZQUkVHKzExMCkKKyNkZWZpbmUgRlBEX1RFTVBGUDEJKFRBU0tfVEhSRUFEK1RIUkVBRF9GUFJFRysxMTIpCisjZGVmaW5lIEZQRF9URU1QRlAyCShUQVNLX1RIUkVBRCtUSFJFQURfRlBSRUcrMTI0KQorI2RlZmluZSBGUERfU0laRU9GCShUQVNLX1RIUkVBRCtUSFJFQURfRlBSRUcrMTM2KQorCisvKiBvZmZzZXRzIG9uIHRoZSBzdGFjayB0byBhY2Nlc3Mgc2F2ZWQgcmVnaXN0ZXJzLAorICogdGhlc2UgYXJlIG9ubHkgdXNlZCBkdXJpbmcgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcKKyAqIHdoZXJlIHdlIGFsd2F5cyBrbm93IGhvdyBkZWVwIHdlJ3JlIG9uIHRoZSBzdGFjay4KKyAqLworI2RlZmluZSBGUFNfRE8JCShQVF9EMCkKKyNkZWZpbmUgRlBTX0QxCQkoUFRfRDEpCisjZGVmaW5lIEZQU19EMgkJKFBUX0QyKQorI2RlZmluZSBGUFNfQTAJCShQVF9BMCkKKyNkZWZpbmUgRlBTX0ExCQkoUFRfQTEpCisjZGVmaW5lIEZQU19BMgkJKFBUX0EyKQorI2RlZmluZSBGUFNfU1IJCShQVF9TUikKKyNkZWZpbmUgRlBTX1BDCQkoUFRfUEMpCisjZGVmaW5lIEZQU19FQQkJKFBUX1BDKzYpCisjZGVmaW5lIEZQU19QQzIJCShQVF9QQysxMCkKKworLm1hY3JvCWZwX2dldF9mcF9yZWcKKwlsZWEJKEZQRF9GUFJFRyxGUERBVEEsJWQwLncqNCksJWEwCisJbGVhCSglYTAsJWQwLncqOCksJWEwCisuZW5kbQorCisvKiBNYWNyb3MgdXNlZCB0byBnZXQvcHV0IHRoZSBjdXJyZW50IHByb2dyYW0gY291bnRlci4KKyAqIDAyMC8wMzAgdXNlIGEgZGlmZmVyZW50IHN0YWNrIGZyYW1lIHRoZW4gMDQwLzA2MCwgZm9yIHRoZQorICogMDQwLzA2MCB0aGUgcmV0dXJuIHBjIHBvaW50cyBhbHJlYWR5IHRvIHRoZSBuZXh0IGxvY2F0aW9uLAorICogc28gdGhpcyBvbmx5IG5lZWRzIHRvIGJlIG1vZGlmaWVkIGZvciBqdW1wIGluc3RydWN0aW9ucy4KKyAqLworLm1hY3JvCWZwX2dldF9wYyBkZXN0CisJbW92ZS5sCShGUFNfUEMrNCwlc3ApLFxkZXN0CisuZW5kbQorCisubWFjcm8JZnBfcHV0X3BjIHNyYyxqdW1wPTAKKwltb3ZlLmwJXHNyYywoRlBTX1BDKzQsJXNwKQorLmVuZG0KKworLm1hY3JvCWZwX2dldF9pbnN0cl9kYXRhCWYscyxkZXN0LGxhYmVsCisJZ2V0dXNlcglcZiwlc3BAKEZQU19QQys0KUAoMCksXGRlc3QsXGxhYmVsLCVzcEAoRlBTX1BDKzQpCisJYWRkcS5sCSNccywlc3BAKEZQU19QQys0KQorLmVuZG0KKworLm1hY3JvCWZwX2dldF9pbnN0cl93b3JkCWRlc3QsbGFiZWwsYWRkcgorCWZwX2dldF9pbnN0cl9kYXRhCXcsMixcZGVzdCxcbGFiZWwsXGFkZHIKKy5lbmRtCisKKy5tYWNybwlmcF9nZXRfaW5zdHJfbG9uZwlkZXN0LGxhYmVsLGFkZHIKKwlmcF9nZXRfaW5zdHJfZGF0YQlsLDQsXGRlc3QsXGxhYmVsLFxhZGRyCisuZW5kbQorCisvKiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgdG8gcmVhZCBmcm9tL3dyaXRlIHRvIHVzZXIgc3BhY2UKKyAqIG9uIGVycm9yIHdlIGp1bXAgdG8gdGhlIGZpeHVwIHNlY3Rpb24sIGxvYWQgdGhlIGZhdWx0CisgKiBhZGRyZXNzIGludG8gJWEwIGFuZCBqdW1wIHRvIHRoZSBleGl0LgorICogKGRlcml2ZWQgZnJvbSA8YXNtL3VhY2Nlc3MuaD4pCisgKi8KKy5tYWNybwlnZXR1c2VyCXNpemUsc3JjLGRlc3QsbGFiZWwsYWRkcgorfAlwcmludGYJLCJbXHNpemU8JTA4eF0iLDEsXGFkZHIKKy5MdTFcQDoJbW92ZXNcc2l6ZQlcc3JjLFxkZXN0CisKKwkuc2VjdGlvbiAuZml4dXAsImF4IgorCS5ldmVuCisuTHUyXEA6CW1vdmUubAlcYWRkciwlYTAKKwlqcmEJXGxhYmVsCisJLnByZXZpb3VzCisKKwkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgorCS5hbGlnbgk0CisJLmxvbmcJLkx1MVxALC5MdTJcQAorCS5wcmV2aW91cworLmVuZG0KKworLm1hY3JvCXB1dHVzZXIJc2l6ZSxzcmMsZGVzdCxsYWJlbCxhZGRyCit8CXByaW50ZgksIltcc2l6ZT4lMDh4XSIsMSxcYWRkcgorLkx1MVxAOgltb3Zlc1xzaXplCVxzcmMsXGRlc3QKKy5MdTJcQDoKKworCS5zZWN0aW9uIC5maXh1cCwiYXgiCisJLmV2ZW4KKy5MdTNcQDoJbW92ZS5sCVxhZGRyLCVhMAorCWpyYQlcbGFiZWwKKwkucHJldmlvdXMKKworCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCisJLmFsaWduCTQKKwkubG9uZwkuTHUxXEAsLkx1M1xACisJLmxvbmcJLkx1MlxALC5MdTNcQAorCS5wcmV2aW91cworLmVuZG0KKworCisubWFjcm8JbW92ZXN0YWNrCW5yLGFyZzEsYXJnMixhcmczLGFyZzQsYXJnNQorCS5pZglcbnIKKwltb3Zlc3RhY2sJKFxuci0xKSxcYXJnMixcYXJnMyxcYXJnNCxcYXJnNQorCW1vdmUubAlcYXJnMSwtKCVzcCkKKwkuZW5kaWYKKy5lbmRtCisKKy5tYWNybwlwcmludGYJYml0PS0xLHN0cmluZyxucj0wLGFyZzEsYXJnMixhcmczLGFyZzQsYXJnNQorI2lmZGVmIEZQVV9FTVVfREVCVUcKKwkuZGF0YQorLkxwZGF0YVxAOgorCS5zdHJpbmcJIlxzdHJpbmciCisJLnByZXZpb3VzCisKKwltb3ZlbS5sCSVkMC8lZDEvJWEwLyVhMSwtKCVzcCkKKwkuaWYJXGJpdCsxCisjaWYgMAorCW1vdmVxCSNcYml0LCVkMAorCWFuZHcJIzcsJWQwCisJYnRzdAklZDAsZnBfZGVidWdwcmludCsoKDMxLVxiaXQpLzgpCisjZWxzZQorCWJ0c3QJI1xiaXQsZnBfZGVidWdwcmludCsoKDMxLVxiaXQpLzgpCisjZW5kaWYKKwlqZXEJLkxwc2tpcFxACisJLmVuZGlmCisJbW92ZXN0YWNrCVxucixcYXJnMSxcYXJnMixcYXJnMyxcYXJnNCxcYXJnNQorCXBlYQkuTHBkYXRhXEAKKwlqc3IJcHJpbnRrCisJbGVhCSgoXG5yKzEpKjQsJXNwKSwlc3AKKy5McHNraXBcQDoKKwltb3ZlbS5sCSglc3ApKywlZDAvJWQxLyVhMC8lYTEKKyNlbmRpZgorLmVuZG0KKworLm1hY3JvCXByaW50eAliaXQsZnAKKyNpZmRlZiBGUFVfRU1VX0RFQlVHCisJbW92ZW0ubAklZDAvJWEwLC0oJXNwKQorCWxlYQlcZnAsJWEwCisjaWYgMAorCW1vdmVxCSMnKycsJWQwCisJdHN0LncJKCVhMCkKKwlqZXEJLkx4MVxACisJbW92ZXEJIyctJywlZDAKKy5MeDFcQDoJcHJpbnRmCVxiaXQsIiAlYyIsMSwlZDAKKwltb3ZlLmwJKDQsJWEwKSwlZDAKKwliY2xyCSMzMSwlZDAKKwlqbmUJLkx4MlxACisJcHJpbnRmCVxiaXQsIjAuIgorCWpyYQkuTHgzXEAKKy5MeDJcQDoJcHJpbnRmCVxiaXQsIjEuIgorLkx4M1xAOglwcmludGYJXGJpdCwiJTA4eCUwOHgiLDIsJWQwLCVhMEAoOCkKKwltb3ZlLncJKDIsJWEwKSwlZDAKKwlleHQubAklZDAKKwlwcmludGYJXGJpdCwiRSUwNHgiLDEsJWQwCisjZWxzZQorCXByaW50ZglcYml0LCIgJTA4eCUwOHglMDh4IiwzLCVhMEAsJWEwQCg0KSwlYTBAKDgpCisjZW5kaWYKKwltb3ZlbS5sCSglc3ApKywlZDAvJWEwCisjZW5kaWYKKy5lbmRtCisKKy5tYWNybwlkZWJ1ZwlpbnN0cixhcmdzCisjaWZkZWYgRlBVX0VNVV9ERUJVRworCVxpbnN0cglcYXJncworI2VuZGlmCisuZW5kbQorCisKKyNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmCS8qIF9BU01fTTY4S19TRVRVUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1tNjhrL21jMTQ2ODE4cnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0NDIwOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbWMxNDY4MThydGMuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogTWFjaGluZSBkZXBlbmRlbnQgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgUlRDIHJlZ2lzdGVycy4KKyAqLworI2lmbmRlZiBfQVNNX01DMTQ2ODE4UlRDX0gKKyNkZWZpbmUgX0FTTV9NQzE0NjgxOFJUQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19BVEFSSQorLyogUlRDIGluIEF0YXJpIG1hY2hpbmVzICovCisKKyNpbmNsdWRlIDxhc20vYXRhcmlody5oPgorCisjZGVmaW5lIFJUQ19QT1JUKHgpCShUVF9SVENfQkFTICsgMiooeCkpCisKKyNkZWZpbmUgQ01PU19SRUFEKGFkZHIpICh7IFwKK2F0YXJpX291dGJfcCgoYWRkciksUlRDX1BPUlQoMCkpOyBcCithdGFyaV9pbmJfcChSVENfUE9SVCgxKSk7IFwKK30pCisjZGVmaW5lIENNT1NfV1JJVEUodmFsLCBhZGRyKSAoeyBcCithdGFyaV9vdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAorYXRhcmlfb3V0Yl9wKCh2YWwpLFJUQ19QT1JUKDEpKTsgXAorfSkKKyNlbmRpZiAvKiBDT05GSUdfQVRBUkkgKi8KKworI2VuZGlmIC8qIF9BU01fTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tZC5oIGIvaW5jbHVkZS9hc20tbTY4ay9tZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2N2VhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21kLmgKQEAgLTAsMCArMSwxMyBAQAorLyogJElkOiBtZC5oLHYgMS4xIDE5OTcvMTIvMTUgMTU6MTI6MDQgamogRXhwICQKKyAqIG1kLmg6IEhpZ2ggc3BlZWQgeG9yX2Jsb2NrIG9wZXJhdGlvbiBmb3IgUkFJRDQvNQorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX01EX0gKKyNkZWZpbmUgX19BU01fTURfSAorCisvKiAjZGVmaW5lIEhBVkVfQVJDSF9YT1JCTE9DSyAqLworCisjZGVmaW5lIE1EX1hPUkJMT0NLX0FMSUdOTUVOVAlzaXplb2YobG9uZykKKworI2VuZGlmIC8qIF9fQVNNX01EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbW1hbi5oIGIvaW5jbHVkZS9hc20tbTY4ay9tbWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzMWM0ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbW1hbi5oCkBAIC0wLDAgKzEsNDMgQEAKKyNpZm5kZWYgX19NNjhLX01NQU5fSF9fCisjZGVmaW5lIF9fTTY4S19NTUFOX0hfXworCisjZGVmaW5lIFBST1RfUkVBRAkweDEJCS8qIHBhZ2UgY2FuIGJlIHJlYWQgKi8KKyNkZWZpbmUgUFJPVF9XUklURQkweDIJCS8qIHBhZ2UgY2FuIGJlIHdyaXR0ZW4gKi8KKyNkZWZpbmUgUFJPVF9FWEVDCTB4NAkJLyogcGFnZSBjYW4gYmUgZXhlY3V0ZWQgKi8KKyNkZWZpbmUgUFJPVF9TRU0JMHg4CQkvKiBwYWdlIG1heSBiZSB1c2VkIGZvciBhdG9taWMgb3BzICovCisjZGVmaW5lIFBST1RfTk9ORQkweDAJCS8qIHBhZ2UgY2FuIG5vdCBiZSBhY2Nlc3NlZCAqLworI2RlZmluZSBQUk9UX0dST1dTRE9XTgkweDAxMDAwMDAwCS8qIG1wcm90ZWN0IGZsYWc6IGV4dGVuZCBjaGFuZ2UgdG8gc3RhcnQgb2YgZ3Jvd3Nkb3duIHZtYSAqLworI2RlZmluZSBQUk9UX0dST1dTVVAJMHgwMjAwMDAwMAkvKiBtcHJvdGVjdCBmbGFnOiBleHRlbmQgY2hhbmdlIHRvIGVuZCBvZiBncm93c3VwIHZtYSAqLworCisjZGVmaW5lIE1BUF9TSEFSRUQJMHgwMQkJLyogU2hhcmUgY2hhbmdlcyAqLworI2RlZmluZSBNQVBfUFJJVkFURQkweDAyCQkvKiBDaGFuZ2VzIGFyZSBwcml2YXRlICovCisjZGVmaW5lIE1BUF9UWVBFCTB4MGYJCS8qIE1hc2sgZm9yIHR5cGUgb2YgbWFwcGluZyAqLworI2RlZmluZSBNQVBfRklYRUQJMHgxMAkJLyogSW50ZXJwcmV0IGFkZHIgZXhhY3RseSAqLworI2RlZmluZSBNQVBfQU5PTllNT1VTCTB4MjAJCS8qIGRvbid0IHVzZSBhIGZpbGUgKi8KKworI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCisjZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCisjZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCisjZGVmaW5lIE1BUF9MT0NLRUQJMHgyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCisjZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHg0MDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCisjZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLworI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCisKKyNkZWZpbmUgTVNfQVNZTkMJMQkJLyogc3luYyBtZW1vcnkgYXN5bmNocm9ub3VzbHkgKi8KKyNkZWZpbmUgTVNfSU5WQUxJREFURQkyCQkvKiBpbnZhbGlkYXRlIHRoZSBjYWNoZXMgKi8KKyNkZWZpbmUgTVNfU1lOQwkJNAkJLyogc3luY2hyb25vdXMgbWVtb3J5IHN5bmMgKi8KKworI2RlZmluZSBNQ0xfQ1VSUkVOVAkxCQkvKiBsb2NrIGFsbCBjdXJyZW50IG1hcHBpbmdzICovCisjZGVmaW5lIE1DTF9GVVRVUkUJMgkJLyogbG9jayBhbGwgZnV0dXJlIG1hcHBpbmdzICovCisKKyNkZWZpbmUgTUFEVl9OT1JNQUwJMHgwCQkvKiBkZWZhdWx0IHBhZ2UtaW4gYmVoYXZpb3IgKi8KKyNkZWZpbmUgTUFEVl9SQU5ET00JMHgxCQkvKiBwYWdlLWluIG1pbmltdW0gcmVxdWlyZWQgKi8KKyNkZWZpbmUgTUFEVl9TRVFVRU5USUFMCTB4MgkJLyogcmVhZC1haGVhZCBhZ2dyZXNzaXZlbHkgKi8KKyNkZWZpbmUgTUFEVl9XSUxMTkVFRAkweDMJCS8qIHByZS1mYXVsdCBwYWdlcyAqLworI2RlZmluZSBNQURWX0RPTlRORUVECTB4NAkJLyogZGlzY2FyZCB0aGVzZSBwYWdlcyAqLworCisvKiBjb21wYXRpYmlsaXR5IGZsYWdzICovCisjZGVmaW5lIE1BUF9BTk9OCU1BUF9BTk9OWU1PVVMKKyNkZWZpbmUgTUFQX0ZJTEUJMAorCisjZW5kaWYgLyogX19NNjhLX01NQU5fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21tdS5oIGIvaW5jbHVkZS9hc20tbTY4ay9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2QzNmQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tbXUuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19NTVVfSAorI2RlZmluZSBfX01NVV9ICisKKy8qIERlZmF1bHQgInVuc2lnbmVkIGxvbmciIGNvbnRleHQgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tbTY4ay9tbXVfY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MTE5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21tdV9jb250ZXh0LmgKQEAgLTAsMCArMSwxNTQgQEAKKyNpZm5kZWYgX19NNjhLX01NVV9DT05URVhUX0gKKyNkZWZpbmUgX19NNjhLX01NVV9DT05URVhUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCisjaWZuZGVmIENPTkZJR19TVU4zCisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisKK3N0YXRpYyBpbmxpbmUgaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJbW0tPmNvbnRleHQgPSB2aXJ0X3RvX3BoeXMobW0tPnBnZCk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgZGVzdHJveV9jb250ZXh0KG1tKQkJZG8geyB9IHdoaWxlKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW1fMDIzMChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nIGNycFsyXSA9IHsKKwkJMHg4MDAwMDAwMCB8IF9QQUdFX1RBQkxFLCBtbS0+Y29udGV4dAorCX07CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhc20gdm9sYXRpbGUgKCIuY2hpcCA2ODAzMCIpOworCisJLyogZmx1c2ggTUM2ODAzMC9NQzY4MDIwIGNhY2hlcyAodGhleSBhcmUgdmlydHVhbGx5IGFkZHJlc3NlZCkgKi8KKwlhc20gdm9sYXRpbGUgKAorCQkibW92ZWMgJSVjYWNyLCUwOyIKKwkJIm9ydyAlMSwlMDsgIgorCQkibW92ZWMgJTAsJSVjYWNyIgorCQk6ICI9ZCIgKHRtcCkgOiAiZGkiIChGTFVTSF9JX0FORF9EKSk7CisKKwkvKiBTd2l0Y2ggdGhlIHJvb3QgcG9pbnRlci4gRm9yIGEgMDMwLW9ubHkga2VybmVsLAorCSAqIGF2b2lkIGZsdXNoaW5nIHRoZSB3aG9sZSBBVEMsIHdlIG9ubHkgbmVlZCB0bworCSAqIGZsdXNoIHRoZSB1c2VyIGVudHJpZXMuIFRoZSA2ODg1MSBkb2VzIHRoaXMgYnkKKwkgKiBpdHNlbGYuIEF2b2lkIGEgcnVudGltZSBjaGVjayBoZXJlLgorCSAqLworCWFzbSB2b2xhdGlsZSAoCisjaWZkZWYgQ1BVX002ODAzMF9PTkxZCisJCSJwbW92ZWZkICUwLCUlY3JwOyAiCisJCSJwZmx1c2ggIzAsIzQiCisjZWxzZQorCQkicG1vdmUgJTAsJSVjcnAiCisjZW5kaWYKKwkJOiA6ICJtIiAoY3JwWzBdKSk7CisKKwlhc20gdm9sYXRpbGUgKCIuY2hpcCA2OGsiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbV8wNDYwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWFzbSB2b2xhdGlsZSAoIi5jaGlwIDY4MDQwIik7CisKKwkvKiBmbHVzaCBhZGRyZXNzIHRyYW5zbGF0aW9uIGNhY2hlICh1c2VyIGVudHJpZXMpICovCisJYXNtIHZvbGF0aWxlICgicGZsdXNoYW4iKTsKKworCS8qIHN3aXRjaCB0aGUgcm9vdCBwb2ludGVyICovCisJYXNtIHZvbGF0aWxlICgibW92ZWMgJTAsJSV1cnAiIDogOiAiciIgKG1tLT5jb250ZXh0KSk7CisKKwlpZiAoQ1BVX0lTXzA2MCkgeworCQl1bnNpZ25lZCBsb25nIHRtcDsKKworCQkvKiBjbGVhciB1c2VyIGVudHJpZXMgaW4gdGhlIGJyYW5jaCBjYWNoZSAqLworCQlhc20gdm9sYXRpbGUgKAorCQkJIm1vdmVjICUlY2FjciwlMDsgIgorCQkgICAgICAgICJvcmwgJTEsJTA7ICIKKwkJICAgICAgICAibW92ZWMgJTAsJSVjYWNyIgorCQkJOiAiPWQiICh0bXApOiAiZGkiICgweDAwMjAwMDAwKSk7CisJfQorCisJYXNtIHZvbGF0aWxlICgiLmNoaXAgNjhrIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKHByZXYgIT0gbmV4dCkgeworCQlpZiAoQ1BVX0lTXzAyMF9PUl8wMzApCisJCQlzd2l0Y2hfbW1fMDIzMChuZXh0KTsKKwkJZWxzZQorCQkJc3dpdGNoX21tXzA0NjAobmV4dCk7CisJfQorfQorCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2X21tLAorCQkJICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHRfbW0pCit7CisJbmV4dF9tbS0+Y29udGV4dCA9IHZpcnRfdG9fcGh5cyhuZXh0X21tLT5wZ2QpOworCisJaWYgKENQVV9JU18wMjBfT1JfMDMwKQorCQlzd2l0Y2hfbW1fMDIzMChuZXh0X21tKTsKKwllbHNlCisJCXN3aXRjaF9tbV8wNDYwKG5leHRfbW0pOworfQorCisjZWxzZSAgLyogQ09ORklHX1NVTjMgKi8KKyNpbmNsdWRlIDxhc20vc3VuM21tdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF9mcmVlX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgY2xlYXJfY29udGV4dCh1bnNpZ25lZCBsb25nIGNvbnRleHQpOworCisvKiBzZXQgdGhlIGNvbnRleHQgZm9yIGEgbmV3IHRhc2sgdG8gdW5tYXBwZWQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCW1tLT5jb250ZXh0ID0gU1VOM19JTlZBTElEX0NPTlRFWFQ7CisJcmV0dXJuIDA7Cit9CisKKy8qIGZpbmQgdGhlIGNvbnRleHQgZ2l2ZW4gdG8gdGhpcyBwcm9jZXNzLCBhbmQgaWYgaXQgaGFzbid0IGFscmVhZHkKKyAgIGdvdCBvbmUsIGdvIGdldCBvbmUgZm9yIGl0LiAqLworc3RhdGljIGlubGluZSB2b2lkIGdldF9tbXVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZihtbS0+Y29udGV4dCA9PSBTVU4zX0lOVkFMSURfQ09OVEVYVCkKKwkJbW0tPmNvbnRleHQgPSBnZXRfZnJlZV9jb250ZXh0KG1tKTsKK30KKworLyogZmx1c2ggY29udGV4dCBpZiBhbGxvY2F0ZWQuLi4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaWYobW0tPmNvbnRleHQgIT0gU1VOM19JTlZBTElEX0NPTlRFWFQpCisJCWNsZWFyX2NvbnRleHQobW0tPmNvbnRleHQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlnZXRfbW11X2NvbnRleHQobW0pOworCXN1bjNfcHV0X2NvbnRleHQobW0tPmNvbnRleHQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWFjdGl2YXRlX2NvbnRleHQodHNrLT5tbSk7Cit9CisKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXZfbW0sCisJCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV4dF9tbSkKK3sKKwlhY3RpdmF0ZV9jb250ZXh0KG5leHRfbW0pOworfQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tb2R1bGUuaCBiL2luY2x1ZGUvYXNtLW02OGsvbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZkNzVhZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbW9kdWxlLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9BU01fTTY4S19NT0RVTEVfSAorI2RlZmluZSBfQVNNX002OEtfTU9EVUxFX0gKK3N0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7IH07CisjZGVmaW5lIEVsZl9TaGRyIEVsZjMyX1NoZHIKKyNkZWZpbmUgRWxmX1N5bSBFbGYzMl9TeW0KKyNkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgorI2VuZGlmIC8qIF9BU01fTTY4S19NT0RVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tb3Rvcm9sYV9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1tNjhrL21vdG9yb2xhX3BnYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTU4NDEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tb3Rvcm9sYV9wZ2FsbG9jLmgKQEAgLTAsMCArMSwxMDcgQEAKKyNpZm5kZWYgX01PVE9ST0xBX1BHQUxMT0NfSAorI2RlZmluZSBfTU9UT1JPTEFfUEdBTExPQ19ICisKKyNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKK2V4dGVybiBwbWRfdCAqZ2V0X3BvaW50ZXJfdGFibGUodm9pZCk7CitleHRlcm4gaW50IGZyZWVfcG9pbnRlcl90YWJsZShwbWRfdCAqKTsKKworCitzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXB0ZV90ICpwdGU7CisKKwlwdGUgPSAocHRlX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTyk7CisJaWYgKHB0ZSkgeworCQlfX2ZsdXNoX3BhZ2VfdG9fcmFtKHB0ZSk7CisJCWZsdXNoX3RsYl9rZXJuZWxfcGFnZShwdGUpOworCQlub2NhY2hlX3BhZ2UocHRlKTsKKwl9CisKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHB0ZV90ICpwdGUpCit7CisJY2FjaGVfcGFnZShwdGUpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcHRlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTywgMCk7CisJcHRlX3QgKnB0ZTsKKworCWlmKCFwYWdlKQorCQlyZXR1cm4gTlVMTDsKKworCXB0ZSA9IGttYXAocGFnZSk7CisJaWYgKHB0ZSkgeworCQlfX2ZsdXNoX3BhZ2VfdG9fcmFtKHB0ZSk7CisJCWZsdXNoX3RsYl9rZXJuZWxfcGFnZShwdGUpOworCQlub2NhY2hlX3BhZ2UocHRlKTsKKwl9CisJa3VubWFwKHB0ZSk7CisKKwlyZXR1cm4gcGFnZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWNhY2hlX3BhZ2Uoa21hcChwYWdlKSk7CisJa3VubWFwKHBhZ2UpOworCV9fZnJlZV9wYWdlKHBhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJY2FjaGVfcGFnZShrbWFwKHBhZ2UpKTsKKwlrdW5tYXAocGFnZSk7CisJX19mcmVlX3BhZ2UocGFnZSk7Cit9CisKKworc3RhdGljIGlubGluZSBwbWRfdCAqcG1kX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiBnZXRfcG9pbnRlcl90YWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwbWRfZnJlZShwbWRfdCAqcG1kKQoreworCXJldHVybiBmcmVlX3BvaW50ZXJfdGFibGUocG1kKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCkKK3sKKwlyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIHBnZF9mcmVlKHBnZF90ICpwZ2QpCit7CisJcG1kX2ZyZWUoKHBtZF90ICopcGdkKTsKK30KKworc3RhdGljIGlubGluZSBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiAocGdkX3QgKilnZXRfcG9pbnRlcl90YWJsZSgpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLCBwdGVfdCAqcHRlKQoreworCXBtZF9zZXQocG1kLCBwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlwbWRfc2V0KHBtZCwgcGFnZV9hZGRyZXNzKHBhZ2UpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBnZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCwgcG1kX3QgKnBtZCkKK3sKKwlwZ2Rfc2V0KHBnZCwgcG1kKTsKK30KKworI2VuZGlmIC8qIF9NT1RPUk9MQV9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbW90b3JvbGFfcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9tb3Rvcm9sYV9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyODcyMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbW90b3JvbGFfcGd0YWJsZS5oCkBAIC0wLDAgKzEsMjk0IEBACisjaWZuZGVmIF9NT1RPUk9MQV9QR1RBQkxFX0gKKyNkZWZpbmUgX01PVE9ST0xBX1BHVEFCTEVfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgTU1VIGRlc2NyaXB0b3JzCisgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMQorI2RlZmluZSBfUEFHRV9TSE9SVAkweDAwMgorI2RlZmluZSBfUEFHRV9ST05MWQkweDAwNAorI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDAwOAorI2RlZmluZSBfUEFHRV9ESVJUWQkweDAxMAorI2RlZmluZSBfUEFHRV9TVVBFUgkweDA4MAkvKiA2ODA0MCBzdXBlcnZpc29yIG9ubHkgKi8KKyNkZWZpbmUgX1BBR0VfR0xPQkFMMDQwCTB4NDAwCS8qIDY4MDQwIGdsb2JhbCBiaXQsIHVzZWQgZm9yIGt2YSBkZXNjcyAqLworI2RlZmluZSBfUEFHRV9OT0NBQ0hFMDMwIDB4MDQwCS8qIDY4MDMwIG5vLWNhY2hlIG1vZGUgKi8KKyNkZWZpbmUgX1BBR0VfTk9DQUNIRQkweDA2MAkvKiA2ODA0MCBjYWNoZSBtb2RlLCBub24tc2VyaWFsaXplZCAqLworI2RlZmluZSBfUEFHRV9OT0NBQ0hFX1MJMHgwNDAJLyogNjgwNDAgbm8tY2FjaGUgbW9kZSwgc2VyaWFsaXplZCAqLworI2RlZmluZSBfUEFHRV9DQUNIRTA0MAkweDAyMAkvKiA2ODA0MCBjYWNoZSBtb2RlLCBjYWNoYWJsZSwgY29weWJhY2sgKi8KKyNkZWZpbmUgX1BBR0VfQ0FDSEUwNDBXCTB4MDAwCS8qIDY4MDQwIGNhY2hlIG1vZGUsIGNhY2hhYmxlLCB3cml0ZS10aHJvdWdoICovCisKKyNkZWZpbmUgX0RFU0NUWVBFX01BU0sJMHgwMDMKKworI2RlZmluZSBfQ0FDSEVNQVNLMDQwCSh+MHgwNjApCisjZGVmaW5lIF9UQUJMRV9NQVNLCSgweGZmZmZmZTAwKQorCisjZGVmaW5lIF9QQUdFX1RBQkxFCShfUEFHRV9TSE9SVCkKKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sgIChQQUdFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfTk9DQUNIRSkKKworI2RlZmluZSBfUEFHRV9QUk9UTk9ORQkweDAwNAorI2RlZmluZSBfUEFHRV9GSUxFCTB4MDA4CS8qIHBhZ2VjYWNoZSBvciBzd2FwPyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBUaGlzIGlzIHRoZSBjYWNoZSBtb2RlIHRvIGJlIHVzZWQgZm9yIHBhZ2VzIGNvbnRhaW5pbmcgcGFnZSBkZXNjcmlwdG9ycyBmb3IKKyAqIHByb2Nlc3NvcnMgPj0gJzA0MC4gSXQgaXMgaW4gcHRlX21rbm9jYWNoZSgpLCBhbmQgdGhlIHZhcmlhYmxlIGlzIGRlZmluZWQKKyAqIGFuZCBpbml0aWFsaXplZCBpbiBoZWFkLlMgKi8KK2V4dGVybiBpbnQgbTY4a19wZ3RhYmxlX2NhY2hlbW9kZTsKKworLyogVGhpcyBpcyB0aGUgY2FjaGUgbW9kZSBmb3Igbm9ybWFsIHBhZ2VzLCBmb3Igc3VwZXJ2aXNvciBhY2Nlc3Mgb24KKyAqIHByb2Nlc3NvcnMgPj0gJzA0MC4gSXQgaXMgdXNlZCBpbiBwdGVfbWtjYWNoZSgpLCBhbmQgdGhlIHZhcmlhYmxlIGlzCisgKiBkZWZpbmVkIGFuZCBpbml0aWFsaXplZCBpbiBoZWFkLlMgKi8KKworI2lmIGRlZmluZWQoQ1BVX002ODA2MF9PTkxZKSAmJiBkZWZpbmVkKENPTkZJR18wNjBfV1JJVEVUSFJPVUdIKQorI2RlZmluZSBtNjhrX3N1cGVydmlzb3JfY2FjaGVtb2RlIF9QQUdFX0NBQ0hFMDQwVworI2VsaWYgZGVmaW5lZChDUFVfTTY4MDQwX09SX002ODA2MF9PTkxZKQorI2RlZmluZSBtNjhrX3N1cGVydmlzb3JfY2FjaGVtb2RlIF9QQUdFX0NBQ0hFMDQwCisjZWxpZiBkZWZpbmVkKENQVV9NNjgwMjBfT1JfTTY4MDMwX09OTFkpCisjZGVmaW5lIG02OGtfc3VwZXJ2aXNvcl9jYWNoZW1vZGUgMAorI2Vsc2UKK2V4dGVybiBpbnQgbTY4a19zdXBlcnZpc29yX2NhY2hlbW9kZTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDUFVfTTY4MDQwX09SX002ODA2MF9PTkxZKQorI2RlZmluZSBtbV9jYWNoZWJpdHMgX1BBR0VfQ0FDSEUwNDAKKyNlbGlmIGRlZmluZWQoQ1BVX002ODAyMF9PUl9NNjgwMzBfT05MWSkKKyNkZWZpbmUgbW1fY2FjaGViaXRzIDAKKyNlbHNlCitleHRlcm4gdW5zaWduZWQgbG9uZyBtbV9jYWNoZWJpdHM7CisjZW5kaWYKKworI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCB8IG1tX2NhY2hlYml0cykKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgbW1fY2FjaGViaXRzKQorI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JPTkxZIHwgX1BBR0VfQUNDRVNTRUQgfCBtbV9jYWNoZWJpdHMpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JPTkxZIHwgX1BBR0VfQUNDRVNTRUQgfCBtbV9jYWNoZWJpdHMpCisjZGVmaW5lIFBBR0VfS0VSTkVMCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgbW1fY2FjaGViaXRzKQorCisvKiBBbHRlcm5hdGUgZGVmaW5pdGlvbnMgdGhhdCBhcmUgY29tcGlsZSB0aW1lIGNvbnN0YW50cywgZm9yCisgICBpbml0aWFsaXppbmcgcHJvdGVjdGlvbl9tYXAuICBUaGUgY2FjaGViaXRzIGFyZSBmaXhlZCBsYXRlci4gICovCisjZGVmaW5lIFBBR0VfTk9ORV9DCV9fcGdwcm90KF9QQUdFX1BST1ROT05FIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIFBBR0VfU0hBUkVEX0MJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBQQUdFX0NPUFlfQwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUk9OTFkgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9SRUFET05MWV9DCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9ST05MWSB8IF9QQUdFX0FDQ0VTU0VEKQorCisvKgorICogVGhlIG02OGsgY2FuJ3QgZG8gcGFnZSBwcm90ZWN0aW9uIGZvciBleGVjdXRlLCBhbmQgY29uc2lkZXJzIHRoYXQgdGhlIHNhbWUgYXJlIHJlYWQuCisgKiBBbHNvLCB3cml0ZSBwZXJtaXNzaW9ucyBpbXBseSByZWFkIHBlcm1pc3Npb25zLiBUaGlzIGlzIHRoZSBjbG9zZXN0IHdlIGNhbiBnZXQuLgorICovCisjZGVmaW5lIF9fUDAwMAlQQUdFX05PTkVfQworI2RlZmluZSBfX1AwMDEJUEFHRV9SRUFET05MWV9DCisjZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFlfQworI2RlZmluZSBfX1AwMTEJUEFHRV9DT1BZX0MKKyNkZWZpbmUgX19QMTAwCVBBR0VfUkVBRE9OTFlfQworI2RlZmluZSBfX1AxMDEJUEFHRV9SRUFET05MWV9DCisjZGVmaW5lIF9fUDExMAlQQUdFX0NPUFlfQworI2RlZmluZSBfX1AxMTEJUEFHRV9DT1BZX0MKKworI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FX0MKKyNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFlfQworI2RlZmluZSBfX1MwMTAJUEFHRV9TSEFSRURfQworI2RlZmluZSBfX1MwMTEJUEFHRV9TSEFSRURfQworI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWV9DCisjZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZX0MKKyNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVEX0MKKyNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVEX0MKKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICovCisjZGVmaW5lIG1rX3B0ZShwYWdlLCBwZ3Byb3QpIHBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIChwZ3Byb3QpKQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQoreworCXB0ZV92YWwocHRlKSA9IChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSykgfCBwZ3Byb3RfdmFsKG5ld3Byb3QpOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfc2V0KHBtZF90ICpwbWRwLCBwdGVfdCAqcHRlcCkKK3sKKwl1bnNpZ25lZCBsb25nIHB0YmwgPSB2aXJ0X3RvX3BoeXMocHRlcCkgfCBfUEFHRV9UQUJMRSB8IF9QQUdFX0FDQ0VTU0VEOworCXVuc2lnbmVkIGxvbmcgKnB0ciA9IHBtZHAtPnBtZDsKKwlzaG9ydCBpID0gMTY7CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCSpwdHIrKyA9IHB0Ymw7CisJCXB0YmwgKz0gKHNpemVvZihwdGVfdCkqUFRSU19QRVJfUFRFLzE2KTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2Rfc2V0KHBnZF90ICpwZ2RwLCBwbWRfdCAqcG1kcCkKK3sKKwlwZ2RfdmFsKCpwZ2RwKSA9IF9QQUdFX1RBQkxFIHwgX1BBR0VfQUNDRVNTRUQgfCBfX3BhKHBtZHApOworfQorCisjZGVmaW5lIF9fcHRlX3BhZ2UocHRlKSAoKHVuc2lnbmVkIGxvbmcpX192YShwdGVfdmFsKHB0ZSkgJiBQQUdFX01BU0spKQorI2RlZmluZSBfX3BtZF9wYWdlKHBtZCkgKCh1bnNpZ25lZCBsb25nKV9fdmEocG1kX3ZhbChwbWQpICYgX1RBQkxFX01BU0spKQorI2RlZmluZSBfX3BnZF9wYWdlKHBnZCkgKCh1bnNpZ25lZCBsb25nKV9fdmEocGdkX3ZhbChwZ2QpICYgX1RBQkxFX01BU0spKQorCisKKyNkZWZpbmUgcHRlX25vbmUocHRlKQkJKCFwdGVfdmFsKHB0ZSkpCisjZGVmaW5lIHB0ZV9wcmVzZW50KHB0ZSkJKHB0ZV92YWwocHRlKSAmIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFJPVE5PTkUpKQorI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcixwdGVwKQkJKHsgcHRlX3ZhbCgqKHB0ZXApKSA9IDA7IH0pCisKKyNkZWZpbmUgcHRlX3BhZ2UocHRlKQkJKG1lbV9tYXAgKyAoKHVuc2lnbmVkIGxvbmcpKF9fdmEocHRlX3ZhbChwdGUpKSAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUKSkKKyNkZWZpbmUgcHRlX3BmbihwdGUpCQkocHRlX3ZhbChwdGUpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQorCisjZGVmaW5lIHBtZF9ub25lKHBtZCkJCSghcG1kX3ZhbChwbWQpKQorI2RlZmluZSBwbWRfYmFkKHBtZCkJCSgocG1kX3ZhbChwbWQpICYgX0RFU0NUWVBFX01BU0spICE9IF9QQUdFX1RBQkxFKQorI2RlZmluZSBwbWRfcHJlc2VudChwbWQpCShwbWRfdmFsKHBtZCkgJiBfUEFHRV9UQUJMRSkKKyNkZWZpbmUgcG1kX2NsZWFyKHBtZHApICh7CQkJXAorCXVuc2lnbmVkIGxvbmcgKl9fcHRyID0gcG1kcC0+cG1kOwlcCisJc2hvcnQgX19pID0gMTY7CQkJCVwKKwl3aGlsZSAoLS1fX2kgPj0gMCkJCQlcCisJCSpfX3B0cisrID0gMDsJCQlcCit9KQorI2RlZmluZSBwbWRfcGFnZShwbWQpCQkobWVtX21hcCArICgodW5zaWduZWQgbG9uZykoX192YShwbWRfdmFsKHBtZCkpIC0gUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQpKQorCisKKyNkZWZpbmUgcGdkX25vbmUocGdkKQkJKCFwZ2RfdmFsKHBnZCkpCisjZGVmaW5lIHBnZF9iYWQocGdkKQkJKChwZ2RfdmFsKHBnZCkgJiBfREVTQ1RZUEVfTUFTSykgIT0gX1BBR0VfVEFCTEUpCisjZGVmaW5lIHBnZF9wcmVzZW50KHBnZCkJKHBnZF92YWwocGdkKSAmIF9QQUdFX1RBQkxFKQorI2RlZmluZSBwZ2RfY2xlYXIocGdkcCkJCSh7IHBnZF92YWwoKnBnZHApID0gMDsgfSkKKworI2RlZmluZSBwdGVfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwoZSkpCisjZGVmaW5lIHBtZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBtZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcG1kX3ZhbChlKSkKKyNkZWZpbmUgcGdkX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcGdkICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQorCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCisgKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIDE7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCQl7IHJldHVybiAhKHB0ZV92YWwocHRlKSAmIF9QQUdFX1JPTkxZKTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2V4ZWMocHRlX3QgcHRlKQkJeyByZXR1cm4gMTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0RJUlRZOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfQUNDRVNTRUQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7IH0KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfUk9OTFk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3JkcHJvdGVjdChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfZXhwcm90ZWN0KHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0RJUlRZOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9ST05MWTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtyZWFkKHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2V4ZWMocHRlX3QgcHRlKQl7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9ESVJUWTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta25vY2FjaGUocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSA9IChwdGVfdmFsKHB0ZSkgJiBfQ0FDSEVNQVNLMDQwKSB8IG02OGtfcGd0YWJsZV9jYWNoZW1vZGU7CisJcmV0dXJuIHB0ZTsKK30KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2FjaGUocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSA9IChwdGVfdmFsKHB0ZSkgJiBfQ0FDSEVNQVNLMDQwKSB8IG02OGtfc3VwZXJ2aXNvcl9jYWNoZW1vZGU7CisJcmV0dXJuIHB0ZTsKK30KKworI2RlZmluZSBQQUdFX0RJUl9PRkZTRVQodHNrLGFkZHJlc3MpIHBnZF9vZmZzZXQoKHRzayksKGFkZHJlc3MpKQorCisjZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKSAgICAgKChhZGRyZXNzKSA+PiBQR0RJUl9TSElGVCkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIHBhZ2UtdGFibGUtZGlyZWN0b3J5ICovCitzdGF0aWMgaW5saW5lIHBnZF90ICpwZ2Rfb2Zmc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIG1tLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcmVzcyk7Cit9CisKKyNkZWZpbmUgc3dhcHBlcl9wZ19kaXIga2VybmVsX3BnX2RpcgorZXh0ZXJuIHBnZF90IGtlcm5lbF9wZ19kaXJbMTI4XTsKKworc3RhdGljIGlubGluZSBwZ2RfdCAqcGdkX29mZnNldF9rKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4ga2VybmVsX3BnX2RpciArIChhZGRyZXNzID4+IFBHRElSX1NISUZUKTsKK30KKworCisvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovCitzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfb2Zmc2V0KHBnZF90ICpkaXIsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHBtZF90ICopX19wZ2RfcGFnZSgqZGlyKSArICgoYWRkcmVzcyA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRC0xKSk7Cit9CisKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUuLiAqLworc3RhdGljIGlubGluZSBwdGVfdCAqcHRlX29mZnNldF9rZXJuZWwocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHB0ZV90ICopX19wbWRfcGFnZSgqcG1kcCkgKyAoKGFkZHJlc3MgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpOworfQorCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKHBtZHAsYWRkcmVzcykgKChwdGVfdCAqKWttYXAocG1kX3BhZ2UoKnBtZHApKSArICgoYWRkcmVzcyA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChwbWRwLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X21hcChwbWRwLCBhZGRyZXNzKQorI2RlZmluZSBwdGVfdW5tYXAocHRlKSBrdW5tYXAocHRlKQorI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkga3VubWFwKHB0ZSkKKworLyoKKyAqIEFsbG9jYXRlIGFuZCBmcmVlIHBhZ2UgdGFibGVzLiBUaGUgeHh4X2tlcm5lbCgpIHZlcnNpb25zIGFyZQorICogdXNlZCB0byBhbGxvY2F0ZSBhIGtlcm5lbCBwYWdlIHRhYmxlIC0gdGhpcyB0dXJucyBvbiBBU04gYml0cworICogaWYgYW55LgorICovCisKKy8qIFByaW9yIHRvIGNhbGxpbmcgdGhlc2Ugcm91dGluZXMsIHRoZSBwYWdlIHNob3VsZCBoYXZlIGJlZW4gZmx1c2hlZAorICogZnJvbSBib3RoIHRoZSBjYWNoZSBhbmQgQVRDLCBvciB0aGUgQ1BVIG1pZ2h0IG5vdCBub3RpY2UgdGhhdCB0aGUKKyAqIGNhY2hlIHNldHRpbmcgZm9yIHRoZSBwYWdlIGhhcyBiZWVuIGNoYW5nZWQuIC1qc2tvdgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbm9jYWNoZV9wYWdlKHZvaWQgKnZhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXZhZGRyOworCisJaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7CisJCXBnZF90ICpkaXI7CisJCXBtZF90ICpwbWRwOworCQlwdGVfdCAqcHRlcDsKKworCQlkaXIgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7CisJCXBtZHAgPSBwbWRfb2Zmc2V0KGRpciwgYWRkcik7CisJCXB0ZXAgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTsKKwkJKnB0ZXAgPSBwdGVfbWtub2NhY2hlKCpwdGVwKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZV9wYWdlKHZvaWQgKnZhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXZhZGRyOworCisJaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7CisJCXBnZF90ICpkaXI7CisJCXBtZF90ICpwbWRwOworCQlwdGVfdCAqcHRlcDsKKworCQlkaXIgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7CisJCXBtZHAgPSBwbWRfb2Zmc2V0KGRpciwgYWRkcik7CisJCXB0ZXAgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTsKKwkJKnB0ZXAgPSBwdGVfbWtjYWNoZSgqcHRlcCk7CisJfQorfQorCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI4CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfdG9fcGdvZmYocHRlX3QgcHRlKQoreworCXJldHVybiBwdGUucHRlID4+IDQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcGdvZmZfdG9fcHRlKHVuc2lnbmVkIG9mZikKK3sKKwlwdGVfdCBwdGUgPSB7IChvZmYgPDwgNCkgKyBfUEFHRV9GSUxFIH07CisJcmV0dXJuIHB0ZTsKK30KKworLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAobXVzdCBiZSAhcHRlX25vbmUoZSkgJiYgIXB0ZV9wcmVzZW50KGUpKSAqLworI2RlZmluZSBfX3N3cF90eXBlKHgpCQkoKCh4KS52YWwgPj4gNCkgJiAweGZmKQorI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkJCSgoeCkudmFsID4+IDEyKQorI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmZzZXQpICgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCA0KSB8ICgob2Zmc2V0KSA8PCAxMikgfSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgKHgpLnZhbCB9KQorCisjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9NT1RPUk9MQV9QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbW92cy5oIGIvaW5jbHVkZS9hc20tbTY4ay9tb3ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdkYmVhMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbW92cy5oCkBAIC0wLDAgKzEsNTUgQEAKKyNpZm5kZWYgIF9fTU9WU19IX18KKyNkZWZpbmUgX19NT1ZTX0hfXworCisvKgorKiogbW92cy5oCisqKgorKiogSW5saW5lIGFzc2VtYmx5IG1hY3JvcyB0byBnZW5lcmF0ZSBtb3ZzICYgcmVsYXRlZCBpbnN0cnVjdGlvbnMKKyovCisKKy8qIFNldCBERkMgcmVnaXN0ZXIgdmFsdWUgKi8KKworI2RlZmluZSBTRVRfREZDKHgpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgbW92ZWMgJTAsJS9kZmMiIDogOiAiZCIgKHgpKTsKKworLyogR2V0IERGQyByZWdpc3RlciB2YWx1ZSAqLworCisjZGVmaW5lIEdFVF9ERkMoeCkgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiBtb3ZlYyAlL2RmYywgJTAiIDogIj1kIiAoeCkgOiApOworCisvKiBTZXQgU0ZDIHJlZ2lzdGVyIHZhbHVlICovCisKKyNkZWZpbmUgU0VUX1NGQyh4KSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiIG1vdmVjICUwLCUvc2ZjIiA6IDogImQiICh4KSk7CisKKy8qIEdldCBTRkMgcmVnaXN0ZXIgdmFsdWUgKi8KKworI2RlZmluZSBHRVRfU0ZDKHgpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgbW92ZWMgJS9zZmMsICUwIiA6ICI9ZCIgKHgpIDogKTsKKworI2RlZmluZSBTRVRfVkJSKHgpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgbW92ZWMgJTAsJS92YnIiIDogOiAiciIgKHgpKTsKKworI2RlZmluZSBHRVRfVkJSKHgpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgbW92ZWMgJS92YnIsICUwIiA6ICI9ZyIgKHgpIDogKTsKKworLyogU2V0IGEgYnl0ZSB1c2luZyB0aGUgIm1vdnMiIGluc3RydWN0aW9uICovCisKKyNkZWZpbmUgU0VUX0NPTlRST0xfQllURShhZGRyLHZhbHVlKSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiIG1vdnNiICUwLCAlMUAiIDogOiAiZCIgKHZhbHVlKSwgImEiIChhZGRyKSk7CisKKy8qIEdldCBhIGJ5dGUgdXNpbmcgdGhlICJtb3ZzIiBpbnN0cnVjdGlvbiAqLworCisjZGVmaW5lIEdFVF9DT05UUk9MX0JZVEUoYWRkcix2YWx1ZSkgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiBtb3ZzYiAlMUAsICUwIiA6ICI9ZCIgKHZhbHVlKSA6ICJhIiAoYWRkcikpOworCisvKiBTZXQgYSAobG9uZyl3b3JkIHVzaW5nIHRoZSAibW92cyIgaW5zdHJ1Y3Rpb24gKi8KKworI2RlZmluZSBTRVRfQ09OVFJPTF9XT1JEKGFkZHIsdmFsdWUpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgbW92c2wgJTAsICUxQCIgOiA6ICJkIiAodmFsdWUpLCAiYSIgKGFkZHIpKTsKKworLyogR2V0IGEgKGxvbmcpd29yZCB1c2luZyB0aGUgIm1vdnMiIGluc3RydWN0aW9uICovCisKKyNkZWZpbmUgR0VUX0NPTlRST0xfV09SRChhZGRyLHZhbHVlKSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiIG1vdnNsICUxQCwgJTAiIDogIj1kIiAodmFsdWUpIDogImEiIChhZGRyKSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbXNnYnVmLmggYi9pbmNsdWRlL2FzbS1tNjhrL21zZ2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0M2NiNzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21zZ2J1Zi5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX002OEtfTVNHQlVGX0gKKyNkZWZpbmUgX002OEtfTVNHQlVGX0gKKworLyoKKyAqIFRoZSBtc3FpZDY0X2RzIHN0cnVjdHVyZSBmb3IgbTY4ayBhcmNoaXRlY3R1cmUuCisgKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKKyAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgorICoKKyAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKKyAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCisgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCisgKi8KKworc3RydWN0IG1zcWlkNjRfZHMgeworCXN0cnVjdCBpcGM2NF9wZXJtIG1zZ19wZXJtOworCV9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7CS8qIGxhc3QgbXNnc25kIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwlfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOwkvKiBsYXN0IG1zZ3JjdiB0aW1lICovCisJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7CisJX19rZXJuZWxfdGltZV90IG1zZ19jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcgIG1zZ19jYnl0ZXM7CS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJ5dGVzIG9uIHF1ZXVlICovCisJdW5zaWduZWQgbG9uZyAgbXNnX3FudW07CS8qIG51bWJlciBvZiBtZXNzYWdlcyBpbiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcgIG1zZ19xYnl0ZXM7CS8qIG1heCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KKwlfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CS8qIHBpZCBvZiBsYXN0IG1zZ3NuZCAqLworCV9fa2VybmVsX3BpZF90IG1zZ19scnBpZDsJLyogbGFzdCByZWNlaXZlIHBpZCAqLworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNDsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDU7Cit9OworCisjZW5kaWYgLyogX002OEtfTVNHQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbXZtZTE0N2h3LmggYi9pbmNsdWRlL2FzbS1tNjhrL212bWUxNDdody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNDUxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL212bWUxNDdody5oCkBAIC0wLDAgKzEsMTExIEBACisjaWZuZGVmIF9NVk1FMTQ3SFdfSF8KKyNkZWZpbmUgX01WTUUxNDdIV19IXworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhcgorCQljdHJsLAorCQliY2Rfc2VjLAorCQliY2RfbWluLAorCQliY2RfaHIsCisJCWJjZF9kb3csCisJCWJjZF9kb20sCisJCWJjZF9tdGgsCisJCWJjZF95ZWFyOworfSBNSzQ4VDAyOworCisjZGVmaW5lIFJUQ19XUklURQkweDgwCisjZGVmaW5lIFJUQ19SRUFECTB4NDAKKyNkZWZpbmUgUlRDX1NUT1AJMHgyMAorCisjZGVmaW5lIG0xNDdfcnRjICgoTUs0OFQwMiAqIHZvbGF0aWxlKTB4ZmZmZTA3ZjgpCisKKworc3RydWN0IHBjY19yZWdzIHsKKyAgIHZvbGF0aWxlIHVfbG9uZwlkbWFfdGFkcjsKKyAgIHZvbGF0aWxlIHVfbG9uZwlkbWFfZGFkcjsKKyAgIHZvbGF0aWxlIHVfbG9uZwlkbWFfYmNyOworICAgdm9sYXRpbGUgdV9sb25nCWRtYV9ocjsKKyAgIHZvbGF0aWxlIHVfc2hvcnQJdDFfcHJlbG9hZDsKKyAgIHZvbGF0aWxlIHVfc2hvcnQJdDFfY291bnQ7CisgICB2b2xhdGlsZSB1X3Nob3J0CXQyX3ByZWxvYWQ7CisgICB2b2xhdGlsZSB1X3Nob3J0CXQyX2NvdW50OworICAgdm9sYXRpbGUgdV9jaGFyCXQxX2ludF9jbnRybDsKKyAgIHZvbGF0aWxlIHVfY2hhcgl0MV9jbnRybDsKKyAgIHZvbGF0aWxlIHVfY2hhcgl0Ml9pbnRfY250cmw7CisgICB2b2xhdGlsZSB1X2NoYXIJdDJfY250cmw7CisgICB2b2xhdGlsZSB1X2NoYXIJYWNfZmFpbDsKKyAgIHZvbGF0aWxlIHVfY2hhcgl3YXRjaGRvZzsKKyAgIHZvbGF0aWxlIHVfY2hhcglscHRfaW50cjsKKyAgIHZvbGF0aWxlIHVfY2hhcglscHRfY250cmw7CisgICB2b2xhdGlsZSB1X2NoYXIJZG1hX2ludHI7CisgICB2b2xhdGlsZSB1X2NoYXIJZG1hX2NudHJsOworICAgdm9sYXRpbGUgdV9jaGFyCWJ1c19lcnJvcjsKKyAgIHZvbGF0aWxlIHVfY2hhcglkbWFfc3RhdHVzOworICAgdm9sYXRpbGUgdV9jaGFyCWFib3J0OworICAgdm9sYXRpbGUgdV9jaGFyCXRhX2ZuY3RsOworICAgdm9sYXRpbGUgdV9jaGFyCXNlcmlhbF9jbnRybDsKKyAgIHZvbGF0aWxlIHVfY2hhcglnZW5lcmFsX2NudHJsOworICAgdm9sYXRpbGUgdV9jaGFyCWxhbl9jbnRybDsKKyAgIHZvbGF0aWxlIHVfY2hhcglnZW5lcmFsX3N0YXR1czsKKyAgIHZvbGF0aWxlIHVfY2hhcglzY3NpX2ludGVycnVwdDsKKyAgIHZvbGF0aWxlIHVfY2hhcglzbGF2ZTsKKyAgIHZvbGF0aWxlIHVfY2hhcglzb2Z0MV9jbnRybDsKKyAgIHZvbGF0aWxlIHVfY2hhcglpbnRfYmFzZTsKKyAgIHZvbGF0aWxlIHVfY2hhcglzb2Z0Ml9jbnRybDsKKyAgIHZvbGF0aWxlIHVfY2hhcglyZXZpc2lvbl9sZXZlbDsKKyAgIHZvbGF0aWxlIHVfY2hhcglscHRfZGF0YTsKKyAgIHZvbGF0aWxlIHVfY2hhcglscHRfc3RhdHVzOworICAgfTsKKworI2RlZmluZSBtMTQ3X3BjYyAoKHN0cnVjdCBwY2NfcmVncyAqIHZvbGF0aWxlKTB4ZmZmZTEwMDApCisKKworI2RlZmluZSBQQ0NfSU5UX0VOQUIJCTB4MDgKKworI2RlZmluZSBQQ0NfVElNRVJfSU5UX0NMUgkweDgwCisjZGVmaW5lIFBDQ19USU1FUl9QUkVMT0FECTYzOTM2bAorCisjZGVmaW5lIFBDQ19MRVZFTF9BQk9SVAkJMHgwNworI2RlZmluZSBQQ0NfTEVWRUxfU0VSSUFMCTB4MDQKKyNkZWZpbmUgUENDX0xFVkVMX0VUSAkJMHgwNAorI2RlZmluZSBQQ0NfTEVWRUxfVElNRVIxCTB4MDQKKyNkZWZpbmUgUENDX0xFVkVMX1NDU0lfUE9SVAkweDA0CisjZGVmaW5lIFBDQ19MRVZFTF9TQ1NJX0RNQQkweDA0CisKKyNkZWZpbmUgUENDX0lSUV9BQ19GQUlMCQkweDQwCisjZGVmaW5lIFBDQ19JUlFfQkVSUgkJMHg0MQorI2RlZmluZSBQQ0NfSVJRX0FCT1JUCQkweDQyCisvKiAjZGVmaW5lIFBDQ19JUlFfU0VSSUFMCTB4NDMgKi8KKyNkZWZpbmUgUENDX0lSUV9QUklOVEVSCQkweDQ3CisjZGVmaW5lIFBDQ19JUlFfVElNRVIxCQkweDQ4CisjZGVmaW5lIFBDQ19JUlFfVElNRVIyCQkweDQ5CisjZGVmaW5lIFBDQ19JUlFfU09GVFdBUkUxCTB4NGEKKyNkZWZpbmUgUENDX0lSUV9TT0ZUV0FSRTIJMHg0YgorCisKKyNkZWZpbmUgTTE0N19TQ0NfQV9BRERSCQkweGZmZmUzMDAyCisjZGVmaW5lIE0xNDdfU0NDX0JfQUREUgkJMHhmZmZlMzAwMAorI2RlZmluZSBNMTQ3X1NDQ19QQ0xLCQk1MDAwMDAwCisKKyNkZWZpbmUgTVZNRTE0N19JUlFfU0NTSV9QT1JUCTB4NDUKKyNkZWZpbmUgTVZNRTE0N19JUlFfU0NTSV9ETUEJMHg0NgorCisvKiBTQ0MgaW50ZXJydXB0cywgZm9yIE1WTUUxNDcgKi8KKworI2RlZmluZSBNVk1FMTQ3X0lSUV9UWVBFX1BSSU8JMAorI2RlZmluZSBNVk1FMTQ3X0lSUV9TQ0NfQkFTRQkJMHg2MAorI2RlZmluZSBNVk1FMTQ3X0lSUV9TQ0NCX1RYCQkweDYwCisjZGVmaW5lIE1WTUUxNDdfSVJRX1NDQ0JfU1RBVAkJMHg2MgorI2RlZmluZSBNVk1FMTQ3X0lSUV9TQ0NCX1JYCQkweDY0CisjZGVmaW5lIE1WTUUxNDdfSVJRX1NDQ0JfU1BDT05ECQkweDY2CisjZGVmaW5lIE1WTUUxNDdfSVJRX1NDQ0FfVFgJCTB4NjgKKyNkZWZpbmUgTVZNRTE0N19JUlFfU0NDQV9TVEFUCQkweDZhCisjZGVmaW5lIE1WTUUxNDdfSVJRX1NDQ0FfUlgJCTB4NmMKKyNkZWZpbmUgTVZNRTE0N19JUlFfU0NDQV9TUENPTkQJCTB4NmUKKworI2RlZmluZSBNVk1FMTQ3X0xBTkNFX0JBU0UJMHhmZmZlMTgwMAorI2RlZmluZSBNVk1FMTQ3X0xBTkNFX0lSUQkweDQ0CisKKyNkZWZpbmUgRVRIRVJORVRfQUREUkVTUyAweGZmZmUwNzc4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tdm1lMTZ4aHcuaCBiL2luY2x1ZGUvYXNtLW02OGsvbXZtZTE2eGh3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQwNzIzMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbXZtZTE2eGh3LmgKQEAgLTAsMCArMSwxMTEgQEAKKyNpZm5kZWYgX002OEtfTVZNRTE2eEhXX0hfCisjZGVmaW5lIF9NNjhLX01WTUUxNnhIV19IXworCisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisvKiBCb2FyZCBJRCBkYXRhIHN0cnVjdHVyZSAtIHBvaW50ZXIgdG8gdGhpcyByZXRyaWV2ZWQgZnJvbSBCdWcgYnkgaGVhZC5TICovCisKKy8qIE5vdGUsIGJ5dGVzIDEyIGFuZCAxMyBhcmUgYm9hcmQgbm8gaW4gQkNEICgwMTYyLDAxNjYsMDE2NywwMTc3LGV0YykgKi8KKworZXh0ZXJuIGxvbmcgbXZtZV9iZGlkX3B0cjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWNoYXIJYmRpZFs0XTsKKwl1X2NoYXIJcmV2LCBtdGgsIGRheSwgeXI7CisJdV9zaG9ydAlzaXplLCByZXNlcnZlZDsKKwl1X3Nob3J0CWJyZG5vOworCWNoYXIgYnJkc3VmZml4WzJdOworCXVfbG9uZwlvcHRpb25zOworCXVfc2hvcnQJY2x1biwgZGx1biwgY3R5cGUsIGRudW07CisJdV9sb25nCW9wdGlvbjI7Cit9IHRfYmRpZCwgKnBfYmRpZDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdV9jaGFyCWFja19pY3IsCisJCWZsdF9pY3IsCisJCXNlbF9pY3IsCisJCXBlX2ljciwKKwkJYnN5X2ljciwKKwkJc3BhcmUxLAorCQlpc3IsCisJCWNyLAorCQlzcGFyZTIsCisJCXNwYXJlMywKKwkJc3BhcmU0LAorCQlkYXRhOworfSBNVk1FbHAsICpNVk1FbHBQdHI7CisKKyNkZWZpbmUgTVZNRV9MUFJfQkFTRQkweGZmZjQyMDMwCisKKyNkZWZpbmUgbXZtZWxwICAgKCgqKHZvbGF0aWxlIE1WTUVscFB0cikoTVZNRV9MUFJfQkFTRSkpKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhcgorCQljdHJsLAorCQliY2Rfc2VjLAorCQliY2RfbWluLAorCQliY2RfaHIsCisJCWJjZF9kb3csCisJCWJjZF9kb20sCisJCWJjZF9tdGgsCisJCWJjZF95ZWFyOworfSBNSzQ4VDA4X3QsICpNSzQ4VDA4cHRyX3Q7CisKKyNkZWZpbmUgUlRDX1dSSVRFCTB4ODAKKyNkZWZpbmUgUlRDX1JFQUQJMHg0MAorI2RlZmluZSBSVENfU1RPUAkweDIwCisKKyNkZWZpbmUgTVZNRV9SVENfQkFTRQkweGZmZmMxZmY4CisKKyNkZWZpbmUgTVZNRV9JNTk2X0JBU0UJMHhmZmY0NjAwMAorCisjZGVmaW5lIE1WTUVfU0NDX0FfQUREUgkweGZmZjQ1MDA1CisjZGVmaW5lIE1WTUVfU0NDX0JfQUREUgkweGZmZjQ1MDAxCisjZGVmaW5lIE1WTUVfU0NDX1BDTEsJMTAwMDAwMDAKKworI2RlZmluZSBNVk1FMTYyX0lSUV9UWVBFX1BSSU8JMAorCisjZGVmaW5lIE1WTUUxNjdfSVJRX1BSTgkJMHg1NAorI2RlZmluZSBNVk1FMTZ4X0lSUV9JNTk2CTB4NTcKKyNkZWZpbmUgTVZNRTE2eF9JUlFfU0NTSQkweDU1CisjZGVmaW5lIE1WTUUxNnhfSVJRX0ZMWQkJMHg3ZgorI2RlZmluZSBNVk1FMTY3X0lSUV9TRVJfRVJSCTB4NWMKKyNkZWZpbmUgTVZNRTE2N19JUlFfU0VSX01PREVNCTB4NWQKKyNkZWZpbmUgTVZNRTE2N19JUlFfU0VSX1RYCTB4NWUKKyNkZWZpbmUgTVZNRTE2N19JUlFfU0VSX1JYCTB4NWYKKyNkZWZpbmUgTVZNRTE2eF9JUlFfVElNRVIJMHg1OQorI2RlZmluZSBNVk1FMTY3X0lSUV9BQk9SVAkweDZlCisjZGVmaW5lIE1WTUUxNjJfSVJRX0FCT1JUCTB4NWUKKworLyogU0NDIGludGVycnVwdHMsIGZvciBNVk1FMTYyICovCisjZGVmaW5lIE1WTUUxNjJfSVJRX1NDQ19CQVNFCQkweDQwCisjZGVmaW5lIE1WTUUxNjJfSVJRX1NDQ0JfVFgJCTB4NDAKKyNkZWZpbmUgTVZNRTE2Ml9JUlFfU0NDQl9TVEFUCQkweDQyCisjZGVmaW5lIE1WTUUxNjJfSVJRX1NDQ0JfUlgJCTB4NDQKKyNkZWZpbmUgTVZNRTE2Ml9JUlFfU0NDQl9TUENPTkQJCTB4NDYKKyNkZWZpbmUgTVZNRTE2Ml9JUlFfU0NDQV9UWAkJMHg0OAorI2RlZmluZSBNVk1FMTYyX0lSUV9TQ0NBX1NUQVQJCTB4NGEKKyNkZWZpbmUgTVZNRTE2Ml9JUlFfU0NDQV9SWAkJMHg0YworI2RlZmluZSBNVk1FMTYyX0lSUV9TQ0NBX1NQQ09ORAkJMHg0ZQorCisvKiBNVk1FMTYyIHZlcnNpb24gcmVnaXN0ZXIgKi8KKworI2RlZmluZSBNVk1FMTYyX1ZFUlNJT05fUkVHCTB4ZmZmNDIwMmUKKworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IG12bWUxNnhfY29uZmlnOworCisvKiBMb3dlciA4IGJpdHMgbXVzdCBtYXRjaCB0aGUgcmV2aXNpb24gcmVnaXN0ZXIgaW4gdGhlIE1DMiBjaGlwICovCisKKyNkZWZpbmUgTVZNRTE2eF9DT05GSUdfU1BFRURfMzIJCTB4MDAwMQorI2RlZmluZSBNVk1FMTZ4X0NPTkZJR19OT19WTUVDSElQMgkweDAwMDIKKyNkZWZpbmUgTVZNRTE2eF9DT05GSUdfTk9fU0NTSUNISVAJMHgwMDA0CisjZGVmaW5lIE1WTUUxNnhfQ09ORklHX05PX0VUSEVSTkVUCTB4MDAwOAorI2RlZmluZSBNVk1FMTZ4X0NPTkZJR19HT1RfRlBVCQkweDAwMTAKKworI2RlZmluZSBNVk1FMTZ4X0NPTkZJR19HT1RfTFAJCTB4MDEwMAorI2RlZmluZSBNVk1FMTZ4X0NPTkZJR19HT1RfQ0QyNDAxCTB4MDIwMAorI2RlZmluZSBNVk1FMTZ4X0NPTkZJR19HT1RfU0NDQQkJMHgwNDAwCisjZGVmaW5lIE1WTUUxNnhfQ09ORklHX0dPVF9TQ0NCCQkweDA4MDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL25hbWVpLmggYi9pbmNsdWRlL2FzbS1tNjhrL25hbWVpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzZjI0MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbmFtZWkuaApAQCAtMCwwICsxLDE3IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tbTY4ay9uYW1laS5oCisgKgorICogSW5jbHVkZWQgZnJvbSBsaW51eC9mcy9uYW1laS5jCisgKi8KKworI2lmbmRlZiBfX002OEtfTkFNRUlfSAorI2RlZmluZSBfX002OEtfTkFNRUlfSAorCisvKiBUaGlzIGR1bW15IHJvdXRpbmUgbWF5YmUgY2hhbmdlZCB0byBzb21ldGhpbmcgdXNlZnVsCisgKiBmb3IgL3Vzci9nbmVtdWwvIGVtdWxhdGlvbiBzdHVmZi4KKyAqIExvb2sgYXQgYXNtLXNwYXJjL25hbWVpLmggZm9yIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBfX2VtdWxfcHJlZml4KCkgTlVMTAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbnVidXMuaCBiL2luY2x1ZGUvYXNtLW02OGsvbnVidXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmJlOTk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9udWJ1cy5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgX0FTTV9NNjhLX05VQlVTX0gKKyNkZWZpbmUgX0FTTV9NNjhLX05VQlVTX0gKKworI2luY2x1ZGUgPGFzbS9yYXdfaW8uaD4KKworI2RlZmluZSBudWJ1c19yZWFkYiByYXdfaW5iCisjZGVmaW5lIG51YnVzX3JlYWR3IHJhd19pbncKKyNkZWZpbmUgbnVidXNfcmVhZGwgcmF3X2lubAorCisjZGVmaW5lIG51YnVzX3dyaXRlYiByYXdfb3V0YgorI2RlZmluZSBudWJ1c193cml0ZXcgcmF3X291dHcKKyNkZWZpbmUgbnVidXNfd3JpdGVsIHJhd19vdXRsCisKKyNkZWZpbmUgbnVidXNfbWVtc2V0X2lvKGEsYixjKQkJbWVtc2V0KCh2b2lkICopKGEpLChiKSwoYykpCisjZGVmaW5lIG51YnVzX21lbWNweV9mcm9taW8oYSxiLGMpCW1lbWNweSgoYSksKHZvaWQgKikoYiksKGMpKQorI2RlZmluZSBudWJ1c19tZW1jcHlfdG9pbyhhLGIsYykJbWVtY3B5KCh2b2lkICopKGEpLChiKSwoYykpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqbnVidXNfcmVtYXBfbm9jYWNoZV9zZXIodW5zaWduZWQgbG9uZyBwaHlzYWRkciwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9OT0NBQ0hFX1NFUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqbnVidXNfcmVtYXBfbm9jYWNoZV9ub25zZXIodW5zaWduZWQgbG9uZyBwaHlzYWRkciwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9OT0NBQ0hFX05PTlNFUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqbmJ1c19yZW1hcF93cml0ZXRocm91Z2godW5zaWduZWQgbG9uZyBwaHlzYWRkciwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9XUklURVRIUk9VR0gpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKm51YnVzX3JlbWFwX2Z1bGxjYWNoZSh1bnNpZ25lZCBsb25nIHBoeXNhZGRyLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9GVUxMX0NBQ0hJTkcpOworfQorCisjZGVmaW5lIG51YnVzX3VubWFwIGlvdW5tYXAKKyNkZWZpbmUgbnVidXNfaW91bm1hcCBpb3VubWFwCisjZGVmaW5lIG51YnVzX2lvcmVtYXAgbnVidXNfcmVtYXBfbm9jYWNoZV9zZXIKKworI2VuZGlmIC8qIF9BU01fTlVCVVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9vcGVucHJvbS5oIGIvaW5jbHVkZS9hc20tbTY4ay9vcGVucHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYmZiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL29wZW5wcm9tLmgKQEAgLTAsMCArMSwzMTQgQEAKKy8qICRJZDogb3BlbnByb20uaCx2IDEuMTkgMTk5Ni8wOS8yNSAwMzo1MTowOCBkYXZlbSBFeHAgJCAqLworI2lmbmRlZiBfX1NQQVJDX09QRU5QUk9NX0gKKyNkZWZpbmUgX19TUEFSQ19PUEVOUFJPTV9ICisKKy8qIG9wZW5wcm9tLmg6ICBQcm9tIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgZm9yIGFjY2VzcyB0byB0aGUgT1BFTkJPT1QKKyAqICAgICAgICAgICAgICBwcm9tIHJvdXRpbmVzIGFuZCBkYXRhIGFyZWFzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBFbXBpcmljYWwgY29uc3RhbnRzLi4uICovCisjaWZkZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgS0FEQl9ERUJVR0dFUl9CRUdWTSAgICAgMHgwZmVlMDAwMCAgICAvKiBUaGVyZSBpcyBubyBrYWRiIHlldCBidXQuLi4qLworI2RlZmluZSBMSU5VWF9PUFBST01fQkVHVk0gICAgICAweDBmZWYwMDAwCisjZGVmaW5lIExJTlVYX09QUFJPTV9FTkRWTSAgICAgIDB4MGZmMTAwMDAgICAgLyogSSB0aGluayB0aGlzIGlzIHJpZ2h0IC0gdG0gKi8KKyNlbHNlCisjZGVmaW5lIEtBREJfREVCVUdHRVJfQkVHVk0gICAgIDB4ZmZjMDAwMDAgICAgLyogV2hlcmUga2VybiBkZWJ1Z2dlciBpcyBpbiB2aXJ0LW1lbSAqLworI2RlZmluZQlMSU5VWF9PUFBST01fQkVHVk0JMHhmZmQwMDAwMAorI2RlZmluZQlMSU5VWF9PUFBST01fRU5EVk0JMHhmZmYwMDAwMAorI2RlZmluZQlMSU5VWF9PUFBST01fTUFHSUMgICAgICAweDEwMDEwNDA3CisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIFYwIHByb20gZGV2aWNlIG9wZXJhdGlvbnMuICovCitzdHJ1Y3QgbGludXhfZGV2X3YwX2Z1bmNzIHsKKwlpbnQgKCp2MF9kZXZvcGVuKShjaGFyICpkZXZpY2Vfc3RyKTsKKwlpbnQgKCp2MF9kZXZjbG9zZSkoaW50IGRldl9kZXNjKTsKKwlpbnQgKCp2MF9yZGJsa2RldikoaW50IGRldl9kZXNjLCBpbnQgbnVtX2Jsa3MsIGludCBibGtfc3QsIGNoYXIgKmJ1Zik7CisJaW50ICgqdjBfd3JibGtkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ibGtzLCBpbnQgYmxrX3N0LCBjaGFyICpidWYpOworCWludCAoKnYwX3dybmV0ZGV2KShpbnQgZGV2X2Rlc2MsIGludCBudW1fYnl0ZXMsIGNoYXIgKmJ1Zik7CisJaW50ICgqdjBfcmRuZXRkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ieXRlcywgY2hhciAqYnVmKTsKKwlpbnQgKCp2MF9yZGNoYXJkZXYpKGludCBkZXZfZGVzYywgaW50IG51bV9ieXRlcywgaW50IGR1bW15LCBjaGFyICpidWYpOworCWludCAoKnYwX3dyY2hhcmRldikoaW50IGRldl9kZXNjLCBpbnQgbnVtX2J5dGVzLCBpbnQgZHVtbXksIGNoYXIgKmJ1Zik7CisJaW50ICgqdjBfc2Vla2RldikoaW50IGRldl9kZXNjLCBsb25nIGxvZ2ljYWxfb2Zmc3QsIGludCBmcm9tKTsKK307CisKKy8qIFYyIGFuZCBsYXRlciBwcm9tIGRldmljZSBvcGVyYXRpb25zLiAqLworc3RydWN0IGxpbnV4X2Rldl92Ml9mdW5jcyB7CisJaW50ICgqdjJfaW5zdDJwa2cpKGludCBkKTsJLyogQ29udmVydCBpaGFuZGxlIHRvIHBoYW5kbGUgKi8KKwljaGFyICogKCp2Ml9kdW1iX21lbV9hbGxvYykoY2hhciAqdmEsIHVuc2lnbmVkIHN6KTsKKwl2b2lkICgqdjJfZHVtYl9tZW1fZnJlZSkoY2hhciAqdmEsIHVuc2lnbmVkIHN6KTsKKworCS8qIFRvIG1hcCBkZXZpY2VzIGludG8gdmlydHVhbCBJL08gc3BhY2UuICovCisJY2hhciAqICgqdjJfZHVtYl9tbWFwKShjaGFyICp2aXJ0YSwgaW50IHdoaWNoX2lvLCB1bnNpZ25lZCBwYWRkciwgdW5zaWduZWQgc3opOworCXZvaWQgKCp2Ml9kdW1iX211bm1hcCkoY2hhciAqdmlydGEsIHVuc2lnbmVkIHNpemUpOworCisJaW50ICgqdjJfZGV2X29wZW4pKGNoYXIgKmRldnBhdGgpOworCXZvaWQgKCp2Ml9kZXZfY2xvc2UpKGludCBkKTsKKwlpbnQgKCp2Ml9kZXZfcmVhZCkoaW50IGQsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcyk7CisJaW50ICgqdjJfZGV2X3dyaXRlKShpbnQgZCwgY2hhciAqYnVmLCBpbnQgbmJ5dGVzKTsKKwlpbnQgKCp2Ml9kZXZfc2VlaykoaW50IGQsIGludCBoaSwgaW50IGxvKTsKKworCS8qIE5ldmVyIGlzc3VlZCAobXVsdGlzdGFnZSBsb2FkIHN1cHBvcnQpICovCisJdm9pZCAoKnYyX3doZWVlMikodm9pZCk7CisJdm9pZCAoKnYyX3doZWVlMykodm9pZCk7Cit9OworCitzdHJ1Y3QgbGludXhfbWxpc3RfdjAgeworCXN0cnVjdCBsaW51eF9tbGlzdF92MCAqdGhlcmVzX21vcmU7CisJY2hhciAqc3RhcnRfYWRyOworCXVuc2lnbmVkIG51bV9ieXRlczsKK307CisKK3N0cnVjdCBsaW51eF9tZW1fdjAgeworCXN0cnVjdCBsaW51eF9tbGlzdF92MCAqKnYwX3RvdHBoeXM7CisJc3RydWN0IGxpbnV4X21saXN0X3YwICoqdjBfcHJvbW1hcDsKKwlzdHJ1Y3QgbGludXhfbWxpc3RfdjAgKip2MF9hdmFpbGFibGU7IC8qIFdoYXQgd2UgY2FuIHVzZSAqLworfTsKKworLyogQXJndW1lbnRzIHNlbnQgdG8gdGhlIGtlcm5lbCBmcm9tIHRoZSBib290IHByb21wdC4gKi8KK3N0cnVjdCBsaW51eF9hcmd1bWVudHNfdjAgeworCWNoYXIgKmFyZ3ZbOF07CisJY2hhciBhcmdzWzEwMF07CisJY2hhciBib290X2RldlsyXTsKKwlpbnQgYm9vdF9kZXZfY3RybDsKKwlpbnQgYm9vdF9kZXZfdW5pdDsKKwlpbnQgZGV2X3BhcnRpdGlvbjsKKwljaGFyICprZXJuZWxfZmlsZV9uYW1lOworCXZvaWQgKmFpZWVlMTsgICAgICAgICAgIC8qIFhYWCAqLworfTsKKworLyogVjIgYW5kIHVwIGJvb3QgdGhpbmdzLiAqLworc3RydWN0IGxpbnV4X2Jvb3RhcmdzX3YyIHsKKwljaGFyICoqYm9vdHBhdGg7CisJY2hhciAqKmJvb3RhcmdzOworCWludCAqZmRfc3RkaW47CisJaW50ICpmZF9zdGRvdXQ7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfU1VOMykgfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpCitzdHJ1Y3QgbGludXhfcm9tdmVjIHsKKwljaGFyCQkqcHZfaW5pdHNwOworCWludAkJKCpwdl9zdGFydG1vbikodm9pZCk7CisKKwlpbnQJCSpkaWFnYmVycjsKKworCXN0cnVjdCBsaW51eF9hcmd1bWVudHNfdjAgKipwdl92MGJvb3RhcmdzOworCXVuc2lnbmVkCSpwdl9zdW4zbWVtOworCisJdW5zaWduZWQgY2hhcgkoKnB2X2dldGNoYXIpKHZvaWQpOworCWludAkJKCpwdl9wdXRjaGFyKShpbnQgY2gpOworCWludAkJKCpwdl9uYmdldGNoYXIpKHZvaWQpOworCWludAkJKCpwdl9uYnB1dGNoYXIpKGludCBjaCk7CisJdW5zaWduZWQgY2hhcgkqcHZfZWNobzsKKwl1bnNpZ25lZCBjaGFyCSpwdl9pbnNvdXJjZTsKKwl1bnNpZ25lZCBjaGFyCSpwdl9vdXRzaW5rOworCisJaW50CQkoKnB2X2dldGtleSkodm9pZCk7CisJaW50CQkoKnB2X2luaXRnZXRrZXkpKHZvaWQpOworCXVuc2lnbmVkIGludAkqcHZfdHJhbnNsYXRpb247CisJdW5zaWduZWQgY2hhcgkqcHZfa2V5YmlkOworCWludAkJKnB2X3NjcmVlbl94OworCWludAkJKnB2X3NjcmVlbl95OworCXN0cnVjdCBrZXlidWYJKnB2X2tleWJ1ZjsKKworCWNoYXIJCSpwdl9tb25pZDsKKworCS8qCisJICogRnJhbWUgYnVmZmVyIG91dHB1dCBhbmQgdGVybWluYWwgZW11bGF0aW9uCisJICovCisKKwlpbnQJCSgqcHZfZmJ3cml0ZWNoYXIpKGNoYXIpOworCWludAkJKnB2X2ZiYWRkcjsKKwljaGFyCQkqKnB2X2ZvbnQ7CisJaW50CQkoKnB2X2Zid3JpdGVzdHIpKGNoYXIpOworCisJdm9pZAkJKCpwdl9yZWJvb3QpKGNoYXIgKmJvb3RzdHIpOworCisJLyoKKwkgKiBMaW5lIGlucHV0IGFuZCBwYXJzaW5nCisJICovCisKKwl1bnNpZ25lZCBjaGFyCSpwdl9saW5lYnVmOworCXVuc2lnbmVkIGNoYXIJKipwdl9saW5lcHRyOworCWludAkJKnB2X2xpbmVzaXplOworCWludAkJKCpwdl9nZXRsaW5lKSh2b2lkKTsKKwl1bnNpZ25lZCBjaGFyCSgqcHZfZ2V0bmV4dGNoYXIpKHZvaWQpOworCXVuc2lnbmVkIGNoYXIJKCpwdl9wZWVrbmV4dGNoYXIpKHZvaWQpOworCWludAkJKnB2X2ZidGhlcmU7CisJaW50CQkoKnB2X2dldG51bSkodm9pZCk7CisKKwl2b2lkCQkoKnB2X3ByaW50ZikoY29uc3QgY2hhciAqZm10LCAuLi4pOworCWludAkJKCpwdl9wcmludGhleCkodm9pZCk7CisKKwl1bnNpZ25lZCBjaGFyCSpwdl9sZWRzOworCWludAkJKCpwdl9zZXRsZWRzKSh2b2lkKTsKKworCS8qCisJICogTm9uLW1hc2thYmxlIGludGVycnVwdCAgKG5taSkgaW5mb3JtYXRpb24KKwkgKi8KKworCWludAkJKCpwdl9ubWlhZGRyKSh2b2lkKTsKKwlpbnQJCSgqcHZfYWJvcnRlbnRyeSkodm9pZCk7CisJaW50CQkqcHZfbm1pY2xvY2s7CisKKwlpbnQJCSpwdl9mYnR5cGU7CisKKwkvKgorCSAqIEFzc29ydGVkIG90aGVyIHRoaW5ncworCSAqLworCisJdW5zaWduZWQJcHZfcm9tdmVyczsKKwlzdHJ1Y3QgZ2xvYnJhbSAgKnB2X2dsb2JyYW07CisJY2hhcgkJKnB2X2tiZHpzY2M7CisKKwlpbnQJCSpwdl9rZXlyaW5pdDsKKwl1bnNpZ25lZCBjaGFyCSpwdl9rZXlydGljazsKKwl1bnNpZ25lZAkqcHZfbWVtb3J5YXZhaWw7CisJbG9uZwkJKnB2X3Jlc2V0YWRkcjsKKwlsb25nCQkqcHZfcmVzZXRtYXA7CisKKwl2b2lkCQkoKnB2X2hhbHQpKHZvaWQpOworCXVuc2lnbmVkIGNoYXIJKnB2X21lbW9yeWJpdG1hcDsKKworI2lmZGVmIENPTkZJR19TVU4zCisJdm9pZAkJKCpwdl9zZXRjdHh0KShpbnQgY3R4dCwgY2hhciAqdmEsIGludCBwbWVnKTsKKwl2b2lkCQkoKnB2X3ZlY3Rvcl9jbWQpKHZvaWQpOworCWludAkJZHVtbXkxejsKKwlpbnQJCWR1bW15Mno7CisJaW50CQlkdW1teTN6OworCWludAkJZHVtbXk0ejsKKyNlbmRpZgorfTsKKyNlbHNlCisvKiBUaGUgdG9wIGxldmVsIFBST00gdmVjdG9yLiAqLworc3RydWN0IGxpbnV4X3JvbXZlYyB7CisJLyogVmVyc2lvbiBudW1iZXJzLiAqLworCXVuc2lnbmVkIGludCBwdl9tYWdpY19jb29raWU7CisJdW5zaWduZWQgaW50IHB2X3JvbXZlcnM7CisJdW5zaWduZWQgaW50IHB2X3BsdWdpbl9yZXZpc2lvbjsKKwl1bnNpZ25lZCBpbnQgcHZfcHJpbnRyZXY7CisKKwkvKiBWZXJzaW9uIDAgbWVtb3J5IGRlc2NyaXB0b3JzLiAqLworCXN0cnVjdCBsaW51eF9tZW1fdjAgcHZfdjBtZW07CisKKwkvKiBOb2RlIG9wZXJhdGlvbnMuICovCisJc3RydWN0IGxpbnV4X25vZGVvcHMgKnB2X25vZGVvcHM7CisKKwljaGFyICoqcHZfYm9vdHN0cjsKKwlzdHJ1Y3QgbGludXhfZGV2X3YwX2Z1bmNzIHB2X3YwZGV2b3BzOworCisJY2hhciAqcHZfc3RkaW47CisJY2hhciAqcHZfc3Rkb3V0OworI2RlZmluZQlQUk9NREVWX0tCRAkwCQkvKiBpbnB1dCBmcm9tIGtleWJvYXJkICovCisjZGVmaW5lCVBST01ERVZfU0NSRUVOCTAJCS8qIG91dHB1dCB0byBzY3JlZW4gKi8KKyNkZWZpbmUJUFJPTURFVl9UVFlBCTEJCS8qIGluL291dCB0byB0dHlhICovCisjZGVmaW5lCVBST01ERVZfVFRZQgkyCQkvKiBpbi9vdXQgdG8gdHR5YiAqLworCisJLyogQmxvY2tpbmcgZ2V0Y2hhci9wdXRjaGFyLiAgTk9UIFJFRU5UUkFOVCEgKGdycikgKi8KKwlpbnQgKCpwdl9nZXRjaGFyKSh2b2lkKTsKKwl2b2lkICgqcHZfcHV0Y2hhcikoaW50IGNoKTsKKworCS8qIE5vbi1ibG9ja2luZyB2YXJpYW50cy4gKi8KKwlpbnQgKCpwdl9uYmdldGNoYXIpKHZvaWQpOworCWludCAoKnB2X25icHV0Y2hhcikoaW50IGNoKTsKKworCXZvaWQgKCpwdl9wdXRzdHIpKGNoYXIgKnN0ciwgaW50IGxlbik7CisKKwkvKiBNaXNjZWxsYW55LiAqLworCXZvaWQgKCpwdl9yZWJvb3QpKGNoYXIgKmJvb3RzdHIpOworCXZvaWQgKCpwdl9wcmludGYpKF9fY29uc3RfXyBjaGFyICpmbXQsIC4uLik7CisJdm9pZCAoKnB2X2Fib3J0KSh2b2lkKTsKKwlfX3ZvbGF0aWxlX18gaW50ICpwdl90aWNrczsKKwl2b2lkICgqcHZfaGFsdCkodm9pZCk7CisJdm9pZCAoKipwdl9zeW5jaG9vaykodm9pZCk7CisKKwkvKiBFdmFsdWF0ZSBhIGZvcnRoIHN0cmluZywgbm90IGRpZmZlcmVudCBwcm90byBmb3IgVjAgYW5kIFYyLT51cC4gKi8KKwl1bmlvbiB7CisJCXZvaWQgKCp2MF9ldmFsKShpbnQgbGVuLCBjaGFyICpzdHIpOworCQl2b2lkICgqdjJfZXZhbCkoY2hhciAqc3RyKTsKKwl9IHB2X2ZvcnRoZXZhbDsKKworCXN0cnVjdCBsaW51eF9hcmd1bWVudHNfdjAgKipwdl92MGJvb3RhcmdzOworCisJLyogR2V0IGV0aGVyIGFkZHJlc3MuICovCisJdW5zaWduZWQgaW50ICgqcHZfZW5hZGRyKShpbnQgZCwgY2hhciAqZW5hZGRyKTsKKworCXN0cnVjdCBsaW51eF9ib290YXJnc192MiBwdl92MmJvb3RhcmdzOworCXN0cnVjdCBsaW51eF9kZXZfdjJfZnVuY3MgcHZfdjJkZXZvcHM7CisKKwlpbnQgZmlsbGVyWzE1XTsKKworCS8qIFRoaXMgb25lIGlzIHN1bjRjL3N1bjQgb25seS4gKi8KKwl2b2lkICgqcHZfc2V0Y3R4dCkoaW50IGN0eHQsIGNoYXIgKnZhLCBpbnQgcG1lZyk7CisKKwkvKiBQcm9tIHZlcnNpb24gMyBNdWx0aXByb2Nlc3NvciByb3V0aW5lcy4gVGhpcyBzdHVmZiBpcyBjcmF6eS4KKwkgKiBObyBqb2tlLiBDYWxsaW5nIHRoZXNlIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgY3B1IHByb2JhYmx5CisJICogY3Jhc2hlcyB0aGUgbWFjaGluZSwgaGF2ZSB0byB0ZXN0IHRoaXMuIDotKQorCSAqLworCisJLyogdjNfY3B1c3RhcnQoKSB3aWxsIHN0YXJ0IHRoZSBjcHUgJ3doaWNoY3B1JyBpbiBtbXUtY29udGV4dAorCSAqICd0aGlzY29udGV4dCcgZXhlY3V0aW5nIGF0IGFkZHJlc3MgJ3Byb2dfY291bnRlcicKKwkgKi8KKwlpbnQgKCp2M19jcHVzdGFydCkodW5zaWduZWQgaW50IHdoaWNoY3B1LCBpbnQgY3R4dGJsX3B0ciwKKwkJCSAgIGludCB0aGlzY29udGV4dCwgY2hhciAqcHJvZ19jb3VudGVyKTsKKworCS8qIHYzX2NwdXN0b3AoKSB3aWxsIGNhdXNlIGNwdSAnd2hpY2hjcHUnIHRvIHN0b3AgZXhlY3V0aW5nCisJICogdW50aWwgYSByZXN1bWUgY3B1IGNhbGwgaXMgbWFkZS4KKwkgKi8KKwlpbnQgKCp2M19jcHVzdG9wKSh1bnNpZ25lZCBpbnQgd2hpY2hjcHUpOworCisJLyogdjNfY3B1aWRsZSgpIHdpbGwgaWRsZSBjcHUgJ3doaWNoY3B1JyB1bnRpbCBhIHN0b3Agb3IKKwkgKiByZXN1bWUgY3B1IGNhbGwgaXMgbWFkZS4KKwkgKi8KKwlpbnQgKCp2M19jcHVpZGxlKSh1bnNpZ25lZCBpbnQgd2hpY2hjcHUpOworCisJLyogdjNfY3B1cmVzdW1lKCkgd2lsbCByZXN1bWUgcHJvY2Vzc29yICd3aGljaGNwdScgZXhlY3V0aW5nCisJICogc3RhcnRpbmcgd2l0aCB3aGF0ZXZlciAncGMnIGFuZCAnbnBjJyB3ZXJlIGxlZnQgYXQgdGhlCisJICogbGFzdCAnaWRsZScgb3IgJ3N0b3AnIGNhbGwuCisJICovCisJaW50ICgqdjNfY3B1cmVzdW1lKSh1bnNpZ25lZCBpbnQgd2hpY2hjcHUpOworfTsKKyNlbmRpZgorCisvKiBSb3V0aW5lcyBmb3IgdHJhdmVyc2luZyB0aGUgcHJvbSBkZXZpY2UgdHJlZS4gKi8KK3N0cnVjdCBsaW51eF9ub2Rlb3BzIHsKKwlpbnQgKCpub19uZXh0bm9kZSkoaW50IG5vZGUpOworCWludCAoKm5vX2NoaWxkKShpbnQgbm9kZSk7CisJaW50ICgqbm9fcHJvcGxlbikoaW50IG5vZGUsIGNoYXIgKm5hbWUpOworCWludCAoKm5vX2dldHByb3ApKGludCBub2RlLCBjaGFyICpuYW1lLCBjaGFyICp2YWwpOworCWludCAoKm5vX3NldHByb3ApKGludCBub2RlLCBjaGFyICpuYW1lLCBjaGFyICp2YWwsIGludCBsZW4pOworCWNoYXIgKiAoKm5vX25leHRwcm9wKShpbnQgbm9kZSwgY2hhciAqbmFtZSk7Cit9OworCisvKiBNb3JlIGZ1biBQUk9NIHN0cnVjdHVyZXMgZm9yIGRldmljZSBwcm9iaW5nLiAqLworI2RlZmluZSBQUk9NUkVHX01BWCAgICAgMTYKKyNkZWZpbmUgUFJPTVZBRERSX01BWCAgIDE2CisjZGVmaW5lIFBST01JTlRSX01BWCAgICAxNQorCitzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgeworCWludCB3aGljaF9pbzsgICAgICAgICAvKiBpcyB0aGlzIGluIE9CSU8gc3BhY2U/ICovCisJY2hhciAqcGh5c19hZGRyOyAgICAgIC8qIFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgcmVnaXN0ZXIgKi8KKwlpbnQgcmVnX3NpemU7ICAgICAgICAgLyogSG93IG1hbnkgYnl0ZXMgZG9lcyB0aGlzIHJlZ2lzdGVyIHRha2UgdXA/ICovCit9OworCitzdHJ1Y3QgbGludXhfcHJvbV9pcnFzIHsKKwlpbnQgcHJpOyAgICAvKiBJUlEgcHJpb3JpdHkgKi8KKwlpbnQgdmVjdG9yOyAvKiBUaGlzIGlzIGZvb2Jhciwgd2hhdCBkb2VzIGl0IGRvPyAqLworfTsKKworLyogRWxlbWVudCBvZiB0aGUgInJhbmdlcyIgdmVjdG9yICovCitzdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMgeworCXVuc2lnbmVkIGludCBvdF9jaGlsZF9zcGFjZTsKKwl1bnNpZ25lZCBpbnQgb3RfY2hpbGRfYmFzZTsJCS8qIEJ1cyBmZWVscyB0aGlzICovCisJdW5zaWduZWQgaW50IG90X3BhcmVudF9zcGFjZTsKKwl1bnNpZ25lZCBpbnQgb3RfcGFyZW50X2Jhc2U7CQkvKiBDUFUgbG9va3MgZnJvbSBoZXJlICovCisJdW5zaWduZWQgaW50IG9yX3NpemU7Cit9OworCisjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCisKKyNlbmRpZiAvKiAhKF9fU1BBUkNfT1BFTlBST01fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvb3BsaWIuaCBiL2luY2x1ZGUvYXNtLW02OGsvb3BsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzU5NGY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9vcGxpYi5oCkBAIC0wLDAgKzEsMjk3IEBACisvKiAkSWQ6IG9wbGliLmgsdiAxLjEyIDE5OTYvMTAvMzEgMDY6Mjk6MTMgZGF2ZW0gRXhwICQKKyAqIG9wbGliLmg6ICBEZXNjcmliZXMgdGhlIGludGVyZmFjZSBhbmQgYXZhaWxhYmxlIHJvdXRpbmVzIGluIHRoZQorICogICAgICAgICAgIExpbnV4IFByb20gbGlicmFyeS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICovCisKKyNpZm5kZWYgX19TUEFSQ19PUExJQl9ICisjZGVmaW5lIF9fU1BBUkNfT1BMSUJfSAorCisjaW5jbHVkZSA8YXNtL29wZW5wcm9tLmg+CisKKy8qIFRoZSBtYXN0ZXIgcm9tdmVjIHBvaW50ZXIuLi4gKi8KK2V4dGVybiBzdHJ1Y3QgbGludXhfcm9tdmVjICpyb212ZWM7CisKKy8qIEVudW1lcmF0aW9uIHRvIGRlc2NyaWJlIHRoZSBwcm9tIG1ham9yIHZlcnNpb24gd2UgaGF2ZSBkZXRlY3RlZC4gKi8KK2VudW0gcHJvbV9tYWpvcl92ZXJzaW9uIHsKKwlQUk9NX1YwLCAgICAgIC8qIE9yaWdpbmFsIHN1bjRjIFYwIHByb20gKi8KKwlQUk9NX1YyLCAgICAgIC8qIHN1bjRjIGFuZCBlYXJseSBzdW40bSBWMiBwcm9tICovCisJUFJPTV9WMywgICAgICAvKiBzdW40bSBhbmQgbGF0ZXIsIHVwIHRvIHN1bjRkL3N1bjRlIG1hY2hpbmVzIFYzICovCisJUFJPTV9QMTI3NSwgICAvKiBJRUVFIGNvbXBsaWFudCBJU0EgYmFzZWQgU3VuIFBST00sIG9ubHkgc3VuNHUgKi8KKyAgICAgICAgUFJPTV9BUDEwMDAsICAvKiBhY3R1YWxseSBubyBwcm9tIGF0IGFsbCAqLworfTsKKworZXh0ZXJuIGVudW0gcHJvbV9tYWpvcl92ZXJzaW9uIHByb21fdmVyczsKKy8qIFJldmlzaW9uLCBhbmQgZmlybXdhcmUgcmV2aXNpb24uICovCitleHRlcm4gdW5zaWduZWQgaW50IHByb21fcmV2LCBwcm9tX3ByZXY7CisKKy8qIFJvb3Qgbm9kZSBvZiB0aGUgcHJvbSBkZXZpY2UgdHJlZSwgdGhpcyBzdGF5cyBjb25zdGFudCBhZnRlcgorICogaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9yb290X25vZGU7CisKKy8qIFBvaW50ZXIgdG8gcHJvbSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgZGV2aWNlIHRyZWUgdHJhdmVyc2FsCisgKiBhbmQgdXNhZ2UgdXRpbGl0eSBmdW5jdGlvbnMuICBPbmx5IHByb20tbGliIHNob3VsZCB1c2UgdGhlc2UsCisgKiB1c2VycyB1c2UgdGhlIGludGVyZmFjZSBkZWZpbmVkIGJ5IHRoZSBsaWJyYXJ5IG9ubHkhCisgKi8KK2V4dGVybiBzdHJ1Y3QgbGludXhfbm9kZW9wcyAqcHJvbV9ub2Rlb3BzOworCisvKiBUaGUgZnVuY3Rpb25zLi4uICovCisKKy8qIFlvdSBtdXN0IGNhbGwgcHJvbV9pbml0KCkgYmVmb3JlIHVzaW5nIGFueSBvZiB0aGUgbGlicmFyeSBzZXJ2aWNlcywKKyAqIHByZWZlcmFibHkgYXMgZWFybHkgYXMgcG9zc2libGUuICBQYXNzIGl0IHRoZSByb212ZWMgcG9pbnRlci4KKyAqLworZXh0ZXJuIHZvaWQgcHJvbV9pbml0KHN0cnVjdCBsaW51eF9yb212ZWMgKnJvbV9wdHIpOworCisvKiBCb290IGFyZ3VtZW50IGFjcXVpc2l0aW9uLCByZXR1cm5zIHRoZSBib290IGNvbW1hbmQgbGluZSBzdHJpbmcuICovCitleHRlcm4gY2hhciAqcHJvbV9nZXRib290YXJncyh2b2lkKTsKKworLyogRGV2aWNlIHV0aWxpdGllcy4gKi8KKworLyogTWFwIGFuZCB1bm1hcCBkZXZpY2VzIGluIElPIHNwYWNlIGF0IHZpcnR1YWwgYWRkcmVzc2VzLiBOb3RlIHRoYXQgdGhlCisgKiB2aXJ0dWFsIGFkZHJlc3MgeW91IHBhc3MgaXMgYSByZXF1ZXN0IGFuZCB0aGUgcHJvbSBtYXkgcHV0IHlvdXIgbWFwcGluZ3MKKyAqIHNvbWV3aGVyZSBlbHNlLCBzbyBjaGVjayB5b3VyIHJldHVybiB2YWx1ZSBhcyB0aGF0IGlzIHdoZXJlIHlvdXIgbmV3CisgKiBtYXBwaW5ncyByZWFsbHkgYXJlIQorICoKKyAqIEFub3RoZXIgbm90ZSwgdGhlc2UgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFYyIG9yIGhpZ2hlciBwcm9tcyEKKyAqLworZXh0ZXJuIGNoYXIgKnByb21fbWFwaW8oY2hhciAqdmlydF9oaW50LCBpbnQgaW9fc3BhY2UsIHVuc2lnbmVkIGludCBwaHlzX2FkZHIsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpOworZXh0ZXJuIHZvaWQgcHJvbV91bm1hcGlvKGNoYXIgKnZpcnRfYWRkciwgdW5zaWduZWQgaW50IG51bV9ieXRlcyk7CisKKy8qIERldmljZSBvcGVyYXRpb25zLiAqLworCisvKiBPcGVuIHRoZSBkZXZpY2UgZGVzY3JpYmVkIGJ5IHRoZSBwYXNzZWQgc3RyaW5nLiAgTm90ZSwgdGhhdCB0aGUgZm9ybWF0CisgKiBvZiB0aGUgc3RyaW5nIGlzIGRpZmZlcmVudCBvbiBWMCB2cy4gVjItPmhpZ2hlciBwcm9tcy4gIFRoZSBjYWxsZXIgbXVzdAorICoga25vdyB3aGF0IGhlL3NoZSBpcyBkb2luZyEgIFJldHVybnMgdGhlIGRldmljZSBkZXNjcmlwdG9yLCBhbiBpbnQuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9kZXZvcGVuKGNoYXIgKmRldmljZV9zdHJpbmcpOworCisvKiBDbG9zZSBhIHByZXZpb3VzbHkgb3BlbmVkIGRldmljZSBkZXNjcmliZWQgYnkgdGhlIHBhc3NlZCBpbnRlZ2VyCisgKiBkZXNjcmlwdG9yLgorICovCitleHRlcm4gaW50IHByb21fZGV2Y2xvc2UoaW50IGRldmljZV9oYW5kbGUpOworCisvKiBEbyBhIHNlZWsgb3BlcmF0aW9uIG9uIHRoZSBkZXZpY2UgZGVzY3JpYmVkIGJ5IHRoZSBwYXNzZWQgaW50ZWdlcgorICogZGVzY3JpcHRvci4KKyAqLworZXh0ZXJuIHZvaWQgcHJvbV9zZWVrKGludCBkZXZpY2VfaGFuZGxlLCB1bnNpZ25lZCBpbnQgc2Vla19oaXZhbCwKKwkJICAgICAgdW5zaWduZWQgaW50IHNlZWtfbG93dmFsKTsKKworLyogTWFjaGluZSBtZW1vcnkgY29uZmlndXJhdGlvbiByb3V0aW5lLiAqLworCisvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBWMCBmb3JtYXQgbWVtb3J5IGRlc2NyaXB0b3IgdGFibGUsIGl0IGhhcyB0aHJlZQorICogZW50cmllcy4gIE9uZSBmb3IgdGhlIHRvdGFsIGFtb3VudCBvZiBwaHlzaWNhbCByYW0gb24gdGhlIG1hY2hpbmUsIG9uZQorICogZm9yIHRoZSBhbW91bnQgb2YgcGh5c2ljYWwgcmFtIGF2YWlsYWJsZSwgYW5kIG9uZSBkZXNjcmliaW5nIHRoZSB2aXJ0dWFsCisgKiBhcmVhcyB3aGljaCBhcmUgYWxsb2NhdGVkIGJ5IHRoZSBwcm9tLiAgU28sIGluIGEgc2Vuc2UgdGhlIHBoeXNpY2FsCisgKiBhdmFpbGFibGUgaXMgYSBjYWxjdWxhdGlvbiBvZiB0aGUgdG90YWwgcGh5c2ljYWwgbWludXMgdGhlIHBoeXNpY2FsIG1hcHBlZAorICogYnkgdGhlIHByb20gd2l0aCB2aXJ0dWFsIG1hcHBpbmdzLgorICoKKyAqIFRoZXNlIGxpc3RzIGFyZSByZXR1cm5lZCBwcmUtc29ydGVkLCB0aGlzIHNob3VsZCBtYWtlIHlvdXIgbGlmZSBlYXNpZXIKKyAqIHNpbmNlIHRoZSBwcm9tIGl0c2VsZiBpcyB3YXkgdG9vIGxhenkgdG8gZG8gc3VjaCBuaWNlIHRoaW5ncy4KKyAqLworZXh0ZXJuIHN0cnVjdCBsaW51eF9tZW1fdjAgKnByb21fbWVtaW5mbyh2b2lkKTsKKworLyogTWlzY2VsbGFuZW91cyByb3V0aW5lcywgZG9uJ3QgcmVhbGx5IGZpdCBpbiBhbnkgY2F0ZWdvcnkgcGVyIHNlLiAqLworCisvKiBSZWJvb3QgdGhlIG1hY2hpbmUgd2l0aCB0aGUgY29tbWFuZCBsaW5lIHBhc3NlZC4gKi8KK2V4dGVybiB2b2lkIHByb21fcmVib290KGNoYXIgKmJvb3RfY29tbWFuZCk7CisKKy8qIEV2YWx1YXRlIHRoZSBmb3J0aCBzdHJpbmcgcGFzc2VkLiAqLworZXh0ZXJuIHZvaWQgcHJvbV9mZXZhbChjaGFyICpmb3J0aF9zdHJpbmcpOworCisvKiBFbnRlciB0aGUgcHJvbSwgd2l0aCBwb3NzaWJpbGl0eSBvZiBjb250aW51YXRpb24gd2l0aCB0aGUgJ2dvJworICogY29tbWFuZCBpbiBuZXdlciBwcm9tcy4KKyAqLworZXh0ZXJuIHZvaWQgcHJvbV9jbWRsaW5lKHZvaWQpOworCisvKiBFbnRlciB0aGUgcHJvbSwgd2l0aCBubyBjaGFuY2Ugb2YgY29udGludWF0aW9uIGZvciB0aGUgc3RhbmQtYWxvbmUKKyAqIHdoaWNoIGNhbGxzIHRoaXMuCisgKi8KK2V4dGVybiB2b2lkIHByb21faGFsdCh2b2lkKTsKKworLyogU2V0IHRoZSBQUk9NICdzeW5jJyBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgcGFzc2VkIGZ1bmN0aW9uIHBvaW50ZXIuCisgKiBXaGVuIHRoZSB1c2VyIGdpdmVzIHRoZSAnc3luYycgY29tbWFuZCBhdCB0aGUgcHJvbSBwcm9tcHQgd2hpbGUgdGhlCisgKiBrZXJuZWwgaXMgc3RpbGwgYWN0aXZlLCB0aGUgcHJvbSB3aWxsIGNhbGwgdGhpcyByb3V0aW5lLgorICoKKyAqIFhYWCBUaGUgYXJndW1lbnRzIGFyZSBkaWZmZXJlbnQgb24gVjAgdnMuIFYyLT5oaWdoZXIgcHJvbXMsIGdycnIhIFhYWAorICovCit0eXBlZGVmIHZvaWQgKCpzeW5jX2Z1bmNfdCkodm9pZCk7CitleHRlcm4gdm9pZCBwcm9tX3NldHN5bmMoc3luY19mdW5jX3QgZnVuY19wdHIpOworCisvKiBBY3F1aXJlIHRoZSBJRFBST00gb2YgdGhlIHJvb3Qgbm9kZSBpbiB0aGUgcHJvbSBkZXZpY2UgdHJlZS4gIFRoaXMKKyAqIGdldHMgcGFzc2VkIGEgYnVmZmVyIHdoZXJlIHlvdSB3b3VsZCBsaWtlIGl0IHN0dWZmZWQuICBUaGUgcmV0dXJuIHZhbHVlCisgKiBpcyB0aGUgZm9ybWF0IHR5cGUgb2YgdGhpcyBpZHByb20gb3IgMHhmZiBvbiBlcnJvci4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcHJvbV9nZXRfaWRwcm9tKGNoYXIgKmlkcF9idWZmZXIsIGludCBpZHBidWZfc2l6ZSk7CisKKy8qIEdldCB0aGUgcHJvbSBtYWpvciB2ZXJzaW9uLiAqLworZXh0ZXJuIGludCBwcm9tX3ZlcnNpb24odm9pZCk7CisKKy8qIEdldCB0aGUgcHJvbSBwbHVnaW4gcmV2aXNpb24uICovCitleHRlcm4gaW50IHByb21fZ2V0cmV2KHZvaWQpOworCisvKiBHZXQgdGhlIHByb20gZmlybXdhcmUgcmV2aXNpb24uICovCitleHRlcm4gaW50IHByb21fZ2V0cHJldih2b2lkKTsKKworLyogQ2hhcmFjdGVyIG9wZXJhdGlvbnMgdG8vZnJvbSB0aGUgY29uc29sZS4uLi4gKi8KKworLyogTm9uLWJsb2NraW5nIGdldCBjaGFyYWN0ZXIgZnJvbSBjb25zb2xlLiAqLworZXh0ZXJuIGludCBwcm9tX25iZ2V0Y2hhcih2b2lkKTsKKworLyogTm9uLWJsb2NraW5nIHB1dCBjaGFyYWN0ZXIgdG8gY29uc29sZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9uYnB1dGNoYXIoY2hhciBjaGFyYWN0ZXIpOworCisvKiBCbG9ja2luZyBnZXQgY2hhcmFjdGVyIGZyb20gY29uc29sZS4gKi8KK2V4dGVybiBjaGFyIHByb21fZ2V0Y2hhcih2b2lkKTsKKworLyogQmxvY2tpbmcgcHV0IGNoYXJhY3RlciB0byBjb25zb2xlLiAqLworZXh0ZXJuIHZvaWQgcHJvbV9wdXRjaGFyKGNoYXIgY2hhcmFjdGVyKTsKKworLyogUHJvbSdzIGludGVybmFsIHByaW50ZiByb3V0aW5lLCBkb24ndCB1c2UgaW4ga2VybmVsL2Jvb3QgY29kZS4gKi8KK3ZvaWQgcHJvbV9wcmludGYoY2hhciAqZm10LCAuLi4pOworCisvKiBRdWVyeSBmb3IgaW5wdXQgZGV2aWNlIHR5cGUgKi8KKworZW51bSBwcm9tX2lucHV0X2RldmljZSB7CisJUFJPTURFVl9JS0JELAkJCS8qIGlucHV0IGZyb20ga2V5Ym9hcmQgKi8KKwlQUk9NREVWX0lUVFlBLAkJCS8qIGlucHV0IGZyb20gdHR5YSAqLworCVBST01ERVZfSVRUWUIsCQkJLyogaW5wdXQgZnJvbSB0dHliICovCisJUFJPTURFVl9JX1VOSywKK307CisKK2V4dGVybiBlbnVtIHByb21faW5wdXRfZGV2aWNlIHByb21fcXVlcnlfaW5wdXRfZGV2aWNlKHZvaWQpOworCisvKiBRdWVyeSBmb3Igb3V0cHV0IGRldmljZSB0eXBlICovCisKK2VudW0gcHJvbV9vdXRwdXRfZGV2aWNlIHsKKwlQUk9NREVWX09TQ1JFRU4sCQkvKiB0byBzY3JlZW4gKi8KKwlQUk9NREVWX09UVFlBLAkJCS8qIHRvIHR0eWEgKi8KKwlQUk9NREVWX09UVFlCLAkJCS8qIHRvIHR0eWIgKi8KKwlQUk9NREVWX09fVU5LLAorfTsKKworZXh0ZXJuIGVudW0gcHJvbV9vdXRwdXRfZGV2aWNlIHByb21fcXVlcnlfb3V0cHV0X2RldmljZSh2b2lkKTsKKworLyogTXVsdGlwcm9jZXNzb3Igb3BlcmF0aW9ucy4uLiAqLworCisvKiBTdGFydCB0aGUgQ1BVIHdpdGggdGhlIGdpdmVuIGRldmljZSB0cmVlIG5vZGUsIGNvbnRleHQgdGFibGUsIGFuZCBjb250ZXh0CisgKiBhdCB0aGUgcGFzc2VkIHByb2dyYW0gY291bnRlci4KKyAqLworZXh0ZXJuIGludCBwcm9tX3N0YXJ0Y3B1KGludCBjcHVub2RlLCBzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKmNvbnRleHRfdGFibGUsCisJCQkgaW50IGNvbnRleHQsIGNoYXIgKnByb2dyYW1fY291bnRlcik7CisKKy8qIFN0b3AgdGhlIENQVSB3aXRoIHRoZSBwYXNzZWQgZGV2aWNlIHRyZWUgbm9kZS4gKi8KK2V4dGVybiBpbnQgcHJvbV9zdG9wY3B1KGludCBjcHVub2RlKTsKKworLyogSWRsZSB0aGUgQ1BVIHdpdGggdGhlIHBhc3NlZCBkZXZpY2UgdHJlZSBub2RlLiAqLworZXh0ZXJuIGludCBwcm9tX2lkbGVjcHUoaW50IGNwdW5vZGUpOworCisvKiBSZS1TdGFydCB0aGUgQ1BVIHdpdGggdGhlIHBhc3NlZCBkZXZpY2UgdHJlZSBub2RlLiAqLworZXh0ZXJuIGludCBwcm9tX3Jlc3RhcnRjcHUoaW50IGNwdW5vZGUpOworCisvKiBQUk9NIG1lbW9yeSBhbGxvY2F0aW9uIGZhY2lsaXRpZXMuLi4gKi8KKworLyogQWxsb2NhdGVkIGF0IHBvc3NpYmx5IHRoZSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MgYSBjaHVuayBvZiB0aGUKKyAqIGluZGljYXRlZCBzaXplLgorICovCitleHRlcm4gY2hhciAqcHJvbV9hbGxvYyhjaGFyICp2aXJ0X2hpbnQsIHVuc2lnbmVkIGludCBzaXplKTsKKworLyogRnJlZSBhIHByZXZpb3VzbHkgYWxsb2NhdGVkIGNodW5rLiAqLworZXh0ZXJuIHZvaWQgcHJvbV9mcmVlKGNoYXIgKnZpcnRfYWRkciwgdW5zaWduZWQgaW50IHNpemUpOworCisvKiBTdW40L3N1bjRjIHNwZWNpZmljIG1lbW9yeS1tYW5hZ2VtZW50IHN0YXJ0dXAgaG9vay4gKi8KKworLyogTWFwIHRoZSBwYXNzZWQgc2VnbWVudCBpbiB0aGUgZ2l2ZW4gY29udGV4dCBhdCB0aGUgcGFzc2VkCisgKiB2aXJ0dWFsIGFkZHJlc3MuCisgKi8KK2V4dGVybiB2b2lkIHByb21fcHV0c2VnbWVudChpbnQgY29udGV4dCwgdW5zaWduZWQgbG9uZyB2aXJ0X2FkZHIsCisJCQkgICAgaW50IHBoeXNpY2FsX3NlZ21lbnQpOworCisvKiBQUk9NIGRldmljZSB0cmVlIHRyYXZlcnNhbCBmdW5jdGlvbnMuLi4gKi8KKworLyogR2V0IHRoZSBjaGlsZCBub2RlIG9mIHRoZSBnaXZlbiBub2RlLCBvciB6ZXJvIGlmIG5vIGNoaWxkIGV4aXN0cy4gKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRjaGlsZChpbnQgcGFyZW50X25vZGUpOworCisvKiBHZXQgdGhlIG5leHQgc2libGluZyBub2RlIG9mIHRoZSBnaXZlbiBub2RlLCBvciB6ZXJvIGlmIG5vIGZ1cnRoZXIKKyAqIHNpYmxpbmdzIGV4aXN0LgorICovCitleHRlcm4gaW50IHByb21fZ2V0c2libGluZyhpbnQgbm9kZSk7CisKKy8qIEdldCB0aGUgbGVuZ3RoLCBhdCB0aGUgcGFzc2VkIG5vZGUsIG9mIHRoZSBnaXZlbiBwcm9wZXJ0eSB0eXBlLgorICogUmV0dXJucyAtMSBvbiBlcnJvciAoaWUuIG5vIHN1Y2ggcHJvcGVydHkgYXQgdGhpcyBub2RlKS4KKyAqLworZXh0ZXJuIGludCBwcm9tX2dldHByb3BsZW4oaW50IHRoaXNub2RlLCBjaGFyICpwcm9wZXJ0eSk7CisKKy8qIEZldGNoIHRoZSByZXF1ZXN0ZWQgcHJvcGVydHkgdXNpbmcgdGhlIGdpdmVuIGJ1ZmZlci4gIFJldHVybnMKKyAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIHByb20gcHV0IGludG8geW91ciBidWZmZXIgb3IgLTEgb24gZXJyb3IuCisgKi8KK2V4dGVybiBpbnQgcHJvbV9nZXRwcm9wZXJ0eShpbnQgdGhpc25vZGUsIGNoYXIgKnByb3BlcnR5LAorCQkJICAgIGNoYXIgKnByb3BfYnVmZmVyLCBpbnQgcHJvcGJ1Zl9zaXplKTsKKworLyogQWNxdWlyZSBhbiBpbnRlZ2VyIHByb3BlcnR5LiAqLworZXh0ZXJuIGludCBwcm9tX2dldGludChpbnQgbm9kZSwgY2hhciAqcHJvcGVydHkpOworCisvKiBBY3F1aXJlIGFuIGludGVnZXIgcHJvcGVydHksIHdpdGggYSBkZWZhdWx0IHZhbHVlLiAqLworZXh0ZXJuIGludCBwcm9tX2dldGludGRlZmF1bHQoaW50IG5vZGUsIGNoYXIgKnByb3BlcnR5LCBpbnQgZGVmdmFsKTsKKworLyogQWNxdWlyZSBhIGJvb2xlYW4gcHJvcGVydHksIDA9RkFMU0UgMT1UUlVFLiAqLworZXh0ZXJuIGludCBwcm9tX2dldGJvb2woaW50IG5vZGUsIGNoYXIgKnByb3ApOworCisvKiBBY3F1aXJlIGEgc3RyaW5nIHByb3BlcnR5LCBudWxsIHN0cmluZyBvbiBlcnJvci4gKi8KK2V4dGVybiB2b2lkIHByb21fZ2V0c3RyaW5nKGludCBub2RlLCBjaGFyICpwcm9wLCBjaGFyICpidWYsIGludCBidWZzaXplKTsKKworLyogRG9lcyB0aGUgcGFzc2VkIG5vZGUgaGF2ZSB0aGUgZ2l2ZW4gIm5hbWUiPyBZRVM9MSBOTz0wICovCitleHRlcm4gaW50IHByb21fbm9kZW1hdGNoKGludCB0aGlzbm9kZSwgY2hhciAqbmFtZSk7CisKKy8qIFB1dHMgaW4gYnVmZmVyIGEgcHJvbSBuYW1lIGluIHRoZSBmb3JtIG5hbWVAeCx5IG9yIG5hbWUgKHggZm9yIHdoaWNoX2lvCisgKiBhbmQgeSBmb3IgZmlyc3QgcmVncyBwaHlzIGFkZHJlc3MKKyAqLworZXh0ZXJuIGludCBwcm9tX2dldG5hbWUoaW50IG5vZGUsIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7CisKKy8qIFNlYXJjaCBhbGwgc2libGluZ3Mgc3RhcnRpbmcgYXQgdGhlIHBhc3NlZCBub2RlIGZvciAibmFtZSIgbWF0Y2hpbmcKKyAqIHRoZSBnaXZlbiBzdHJpbmcuICBSZXR1cm5zIHRoZSBub2RlIG9uIHN1Y2Nlc3MsIHplcm8gb24gZmFpbHVyZS4KKyAqLworZXh0ZXJuIGludCBwcm9tX3NlYXJjaHNpYmxpbmdzKGludCBub2RlX3N0YXJ0LCBjaGFyICpuYW1lKTsKKworLyogUmV0dXJuIHRoZSBmaXJzdCBwcm9wZXJ0eSB0eXBlLCBhcyBhIHN0cmluZywgZm9yIHRoZSBnaXZlbiBub2RlLgorICogUmV0dXJucyBhIG51bGwgc3RyaW5nIG9uIGVycm9yLgorICovCitleHRlcm4gY2hhciAqcHJvbV9maXJzdHByb3AoaW50IG5vZGUpOworCisvKiBSZXR1cm5zIHRoZSBuZXh0IHByb3BlcnR5IGFmdGVyIHRoZSBwYXNzZWQgcHJvcGVydHkgZm9yIHRoZSBnaXZlbgorICogbm9kZS4gIFJldHVybnMgbnVsbCBzdHJpbmcgb24gZmFpbHVyZS4KKyAqLworZXh0ZXJuIGNoYXIgKnByb21fbmV4dHByb3AoaW50IG5vZGUsIGNoYXIgKnByZXZfcHJvcGVydHkpOworCisvKiBSZXR1cm5zIDEgaWYgdGhlIHNwZWNpZmllZCBub2RlIGhhcyBnaXZlbiBwcm9wZXJ0eS4gKi8KK2V4dGVybiBpbnQgcHJvbV9ub2RlX2hhc19wcm9wZXJ0eShpbnQgbm9kZSwgY2hhciAqcHJvcGVydHkpOworCisvKiBTZXQgdGhlIGluZGljYXRlZCBwcm9wZXJ0eSBhdCB0aGUgZ2l2ZW4gbm9kZSB3aXRoIHRoZSBwYXNzZWQgdmFsdWUuCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgeW91ciB2YWx1ZSB0aGF0IHRoZSBwcm9tIHRvb2suCisgKi8KK2V4dGVybiBpbnQgcHJvbV9zZXRwcm9wKGludCBub2RlLCBjaGFyICpwcm9wX25hbWUsIGNoYXIgKnByb3BfdmFsdWUsCisJCQlpbnQgdmFsdWVfc2l6ZSk7CisKK2V4dGVybiBpbnQgcHJvbV9wYXRodG9pbm9kZShjaGFyICpwYXRoKTsKK2V4dGVybiBpbnQgcHJvbV9pbnN0MnBrZyhpbnQpOworCisvKiBEb3JraW5nIHdpdGggQnVzIHJhbmdlcy4uLiAqLworCisvKiBBZGp1c3QgcmVnIHZhbHVlcyB3aXRoIHRoZSBwYXNzZWQgcmFuZ2VzLiAqLworZXh0ZXJuIHZvaWQgcHJvbV9hZGp1c3RfcmVncyhzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnJlZ3AsIGludCBucmVncywKKwkJCSAgICAgc3RydWN0IGxpbnV4X3Byb21fcmFuZ2VzICpyYW5nZXAsIGludCBucmFuZ2VzKTsKKworLyogQWRqdXN0IGNoaWxkIHJhbmdlcyB3aXRoIHRoZSBwYXNzZWQgcGFyZW50IHJhbmdlcy4gKi8KK2V4dGVybiB2b2lkIHByb21fYWRqdXN0X3JhbmdlcyhzdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMgKmNyYW5nZXMsIGludCBuY3JhbmdlcywKKwkJCSAgICAgICBzdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMgKnByYW5nZXMsIGludCBucHJhbmdlcyk7CisKKy8qIEFwcGx5IHByb21saWIgcHJvYmVkIE9CSU8gcmFuZ2VzIHRvIHJlZ2lzdGVycy4gKi8KK2V4dGVybiB2b2lkIHByb21fYXBwbHlfb2Jpb19yYW5nZXMoc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpvYmlvcmVncywgaW50IG5yZWdzKTsKKworLyogQXBwbHkgcmFuZ2VzIG9mIGFueSBwcm9tIG5vZGUgKGFuZCBvcHRpb25hbGx5IHBhcmVudCBub2RlIGFzIHdlbGwpIHRvIHJlZ2lzdGVycy4gKi8KK2V4dGVybiB2b2lkIHByb21fYXBwbHlfZ2VuZXJpY19yYW5nZXMoaW50IG5vZGUsIGludCBwYXJlbnQsCisJCQkJICAgICAgc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpzYnVzcmVncywgaW50IG5yZWdzKTsKKworCisjZW5kaWYgLyogIShfX1NQQVJDX09QTElCX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLW02OGsvcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YTUxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3BhZ2UuaApAQCAtMCwwICsxLDE5NSBAQAorI2lmbmRlZiBfTTY4S19QQUdFX0gKKyNkZWZpbmUgX002OEtfUEFHRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KKyNpZm5kZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgUEFHRV9TSElGVAkoMTIpCisjZWxzZQorI2RlZmluZSBQQUdFX1NISUZUCSgxMykKKyNlbmRpZgorI2lmZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBQQUdFX1NJWkUJKDEgPDwgUEFHRV9TSElGVCkKKyNlbHNlCisjZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjZW5kaWYKKyNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCisjaWYgUEFHRV9TSElGVCA8IDEzCisjZGVmaW5lIFRIUkVBRF9TSVpFICg4MTkyKQorI2Vsc2UKKyNkZWZpbmUgVEhSRUFEX1NJWkUgUEFHRV9TSVpFCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBnZXRfdXNlcl9wYWdlKHZhZGRyKQkJX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpCisjZGVmaW5lIGZyZWVfdXNlcl9wYWdlKHBhZ2UsIGFkZHIpCWZyZWVfcGFnZShhZGRyKQorCisvKgorICogV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgYWxpZ25tZW50IGV0Yy4KKyAqLworI2lmZGVmIENQVV9NNjgwNDBfT1JfTTY4MDYwX09OTFkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pCit7CisgIHVuc2lnbmVkIGxvbmcgdG1wOworCisgIF9fYXNtX18gX192b2xhdGlsZV9fKCIxOlx0IgorCQkgICAgICAgIi5jaGlwIDY4MDQwXG5cdCIKKwkJICAgICAgICJtb3ZlMTYgJTFAKywlMEArXG5cdCIKKwkJICAgICAgICJtb3ZlMTYgJTFAKywlMEArXG5cdCIKKwkJICAgICAgICIuY2hpcCA2OGtcblx0IgorCQkgICAgICAgImRicmEgICUyLDFiXG5cdCIKKwkJICAgICAgIDogIj1hIiAodG8pLCAiPWEiIChmcm9tKSwgIj1kIiAodG1wKQorCQkgICAgICAgOiAiMCIgKHRvKSwgIjEiIChmcm9tKSAsICIyIiAoUEFHRV9TSVpFIC8gMzIgLSAxKQorCQkgICAgICAgKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2Uodm9pZCAqcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKwl1bnNpZ25lZCBsb25nICpzcCA9IHBhZ2U7CisKKwkqc3ArKyA9IDA7CisJKnNwKysgPSAwOworCSpzcCsrID0gMDsKKwkqc3ArKyA9IDA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiMTpcdCIKKwkJCSAgICAgIi5jaGlwIDY4MDQwXG5cdCIKKwkJCSAgICAgIm1vdmUxNiAlMkArLCUwQCtcblx0IgorCQkJICAgICAiLmNoaXAgNjhrXG5cdCIKKwkJCSAgICAgInN1YnF3ICAjOCwlMlxuXHQiCisJCQkgICAgICJzdWJxdyAgIzgsJTJcblx0IgorCQkJICAgICAiZGJyYSAgICUxLDFiXG5cdCIKKwkJCSAgICAgOiAiPWEiIChzcCksICI9ZCIgKHRtcCkKKwkJCSAgICAgOiAiYSIgKHBhZ2UpLCAiMCIgKHNwKSwKKwkJCSAgICAgICAiMSIgKChQQUdFX1NJWkUgLSAxNikgLyAxNiAtIDEpKTsKK30KKworI2Vsc2UKKyNkZWZpbmUgY2xlYXJfcGFnZShwYWdlKQltZW1zZXQoKHBhZ2UpLCAwLCBQQUdFX1NJWkUpCisjZGVmaW5lIGNvcHlfcGFnZSh0byxmcm9tKQltZW1jcHkoKHRvKSwgKGZyb20pLCBQQUdFX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBjbGVhcl91c2VyX3BhZ2UoYWRkciwgdmFkZHIsIHBhZ2UpCVwKKwlkbyB7CWNsZWFyX3BhZ2UoYWRkcik7CQlcCisJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgY29weV91c2VyX3BhZ2UodG8sIGZyb20sIHZhZGRyLCBwYWdlKQlcCisJZG8gewljb3B5X3BhZ2UodG8sIGZyb20pOwkJXAorCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsJXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgorICovCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHRlOyB9IHB0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZFsxNl07IH0gcG1kX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKKworI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlKQorI2RlZmluZSBwbWRfdmFsKHgpCSgoJngpLT5wbWRbMF0pCisjZGVmaW5lIHBnZF92YWwoeCkJKCh4KS5wZ2QpCisjZGVmaW5lIHBncHJvdF92YWwoeCkJKCh4KS5wZ3Byb3QpCisKKyNkZWZpbmUgX19wdGUoeCkJKChwdGVfdCkgeyAoeCkgfSApCisjZGVmaW5lIF9fcG1kKHgpCSgocG1kX3QpIHsgKHgpIH0gKQorI2RlZmluZSBfX3BnZCh4KQkoKHBnZF90KSB7ICh4KSB9ICkKKyNkZWZpbmUgX19wZ3Byb3QoeCkJKChwZ3Byb3RfdCkgeyAoeCkgfSApCisKKy8qIHRvIGFsaWduIHRoZSBwb2ludGVyIHRvIHRoZSAobmV4dCkgcGFnZSBib3VuZGFyeSAqLworI2RlZmluZSBQQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpK1BBR0VfU0laRS0xKSZQQUdFX01BU0spCisKKy8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCitzdGF0aWMgaW5saW5lIGludCBnZXRfb3JkZXIodW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCBvcmRlcjsKKworCXNpemUgPSAoc2l6ZS0xKSA+PiAoUEFHRV9TSElGVC0xKTsKKwlvcmRlciA9IC0xOworCWRvIHsKKwkJc2l6ZSA+Pj0gMTsKKwkJb3JkZXIrKzsKKwl9IHdoaWxlIChzaXplKTsKKwlyZXR1cm4gb3JkZXI7Cit9CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNpbmNsdWRlIDxhc20vcGFnZV9vZmZzZXQuaD4KKworI2RlZmluZSBQQUdFX09GRlNFVAkJKFBBR0VfT0ZGU0VUX1JBVykKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2lmbmRlZiBDT05GSUdfU1VOMworCisjZGVmaW5lIFdBTlRfUEFHRV9WSVJUVUFMCisjaWZkZWYgQ09ORklHX1NJTkdMRV9NRU1PUllfQ0hVTksKK2V4dGVybiB1bnNpZ25lZCBsb25nIG02OGtfbWVtb2Zmc2V0OworCisjZGVmaW5lIF9fcGEodmFkZHIpCQkoKHVuc2lnbmVkIGxvbmcpKHZhZGRyKSttNjhrX21lbW9mZnNldCkKKyNkZWZpbmUgX192YShwYWRkcikJCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykocGFkZHIpLW02OGtfbWVtb2Zmc2V0KSkKKyNlbHNlCisjZGVmaW5lIF9fcGEodmFkZHIpCQl2aXJ0X3RvX3BoeXMoKHZvaWQgKil2YWRkcikKKyNkZWZpbmUgX192YShwYWRkcikJCXBoeXNfdG9fdmlydCgodW5zaWduZWQgbG9uZylwYWRkcikKKyNlbmRpZgorCisjZWxzZQkvKiAhQ09ORklHX1NVTjMgKi8KKy8qIFRoaXMgI2RlZmluZSBpcyBhIGhvcnJpYmxlIGhhY2sgdG8gc3VwcHJlc3MgbG90cyBvZiB3YXJuaW5ncy4gLS1tICovCisjZGVmaW5lIF9fcGEoeCkgX19fcGEoKHVuc2lnbmVkIGxvbmcpeCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX19wYSh1bnNpZ25lZCBsb25nIHgpCit7CisgICAgIGlmKHggPT0gMCkKKwkgIHJldHVybiAwOworICAgICBpZih4ID49IFBBR0VfT0ZGU0VUKQorICAgICAgICByZXR1cm4gKHgtUEFHRV9PRkZTRVQpOworICAgICBlbHNlCisgICAgICAgIHJldHVybiAoeCsweDIwMDAwMDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKl9fdmEodW5zaWduZWQgbG9uZyB4KQoreworICAgICBpZih4ID09IDApCisJICByZXR1cm4gKHZvaWQgKikwOworCisgICAgIGlmKHggPCAweDIwMDAwMDApCisgICAgICAgIHJldHVybiAodm9pZCAqKSh4K1BBR0VfT0ZGU0VUKTsKKyAgICAgZWxzZQorICAgICAgICByZXR1cm4gKHZvaWQgKikoeC0weDIwMDAwMDApOworfQorI2VuZGlmCS8qIENPTkZJR19TVU4zICovCisKKy8qCisgKiBOT1RFOiB2aXJ0dWFsIGlzbid0IHJlYWxseSBjb3JyZWN0LCBhY3R1YWxseSBpdCBzaG91bGQgYmUgdGhlIG9mZnNldCBpbnRvIHRoZQorICogbWVtb3J5IG5vZGUsIGJ1dCB3ZSBoYXZlIG5vIGhpZ2htZW0sIHNvIHRoYXQgd29ya3MgZm9yIG5vdy4KKyAqIFRPRE86IGltcGxlbWVudCAoZmFzdCkgcGZuPC0+cGdkYXRfaWR4IGNvbnZlcnNpb24gZnVuY3Rpb25zLCB0aGlzIG1ha2VzIGxvdHMKKyAqIG9mIHRoZSBzaGlmdHMgdW5uZWNlc3NhcnkuCisgKi8KKyNkZWZpbmUgdmlydF90b19wZm4oa2FkZHIpCShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwZm5fdG9fdmlydChwZm4pCV9fdmEoKHBmbikgPDwgUEFHRV9TSElGVCkKKworI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCShtZW1fbWFwICsgKCgodW5zaWduZWQgbG9uZykoa2FkZHIpLVBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUKSkKKyNkZWZpbmUgcGFnZV90b192aXJ0KHBhZ2UpCSgoKChwYWdlKSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpICsgUEFHRV9PRkZTRVQpCisKKyNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQl2aXJ0X3RvX3BhZ2UocGZuX3RvX3ZpcnQocGZuKSkKKyNkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJdmlydF90b19wZm4ocGFnZV90b192aXJ0KHBhZ2UpKQorCisjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJKCh2b2lkICopKGthZGRyKSA+PSAodm9pZCAqKVBBR0VfT0ZGU0VUICYmICh2b2lkICopKGthZGRyKSA8IGhpZ2hfbWVtb3J5KQorI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJdmlydF9hZGRyX3ZhbGlkKHBmbl90b192aXJ0KHBmbikpCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCisJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTTY4S19QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcGFnZV9vZmZzZXQuaCBiL2luY2x1ZGUvYXNtLW02OGsvcGFnZV9vZmZzZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmQzYzI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wYWdlX29mZnNldC5oCkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBUaGlzIGhhbmRsZXMgdGhlIG1lbW9yeSBtYXAuLiAqLworI2lmbmRlZiBDT05GSUdfU1VOMworI2RlZmluZSBQQUdFX09GRlNFVF9SQVcJCTB4MDAwMDAwMDAKKyNlbHNlCisjZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVwkJMHgwRTAwMDAwMAorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLW02OGsvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGY0MDlkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wYXJhbS5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX002OEtfUEFSQU1fSAorI2RlZmluZSBfTTY4S19QQVJBTV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGRlZmluZSBIWgkJMTAwCQkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCisjIGRlZmluZSBVU0VSX0haCTEwMAkJLyogLi4gc29tZSB1c2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KKyMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KKyNlbmRpZgorCisjaWZuZGVmIEhaCisjZGVmaW5lIEhaIDEwMAorI2VuZGlmCisKKyNkZWZpbmUgRVhFQ19QQUdFU0laRQk4MTkyCisKKyNpZm5kZWYgTk9HUk9VUAorI2RlZmluZSBOT0dST1VQCQkoLTEpCisjZW5kaWYKKworI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCisKKyNlbmRpZiAvKiBfTTY4S19QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3BhcnBvcnQuaCBiL2luY2x1ZGUvYXNtLW02OGsvcGFycG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NmIxODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3BhcnBvcnQuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogcGFycG9ydC5oOiBwbGF0Zm9ybS1zcGVjaWZpYyBQQy1zdHlsZSBwYXJwb3J0IGluaXRpYWxpc2F0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBUaW0gV2F1Z2ggPHRpbUBjeWJlcmVsay5kZW1vbi5jby51az4KKyAqCisgKiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgYnkgZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYy4KKyAqCisgKiBSWjogZm9yIHVzZSB3aXRoIFE0MCBhbmQgb3RoZXIgSVNBIG1hY2hpbmVzCisgKi8KKworI2lmbmRlZiBfQVNNX002OEtfUEFSUE9SVF9ICisjZGVmaW5lIF9BU01fTTY4S19QQVJQT1JUX0ggMQorCisjZGVmaW5lIGluc2wocG9ydCxidWYsbGVuKSAgIGlzYV9pbnNiKHBvcnQsYnVmLChsZW4pPDwyKQorI2RlZmluZSBvdXRzbChwb3J0LGJ1ZixsZW4pICBpc2Ffb3V0c2IocG9ydCxidWYsKGxlbik8PDIpCisKKy8qIG5vIGRtYSwgb3IgSVJRIGF1dG9wcm9iaW5nICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X3BjX2ZpbmRfaXNhX3BvcnRzIChpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpOworc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9wY19maW5kX25vbnBjaV9wb3J0cyAoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKQoreworICAgICAgICBpZiAoISAoTUFDSF9JU19RNDApKQorCSAgcmV0dXJuIDA7IC8qIGNvdW50PTAgKi8KKwlyZXR1cm4gcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyAoUEFSUE9SVF9JUlFfTk9ORSwgUEFSUE9SVF9ETUFfTk9ORSk7Cit9CisKKyNlbmRpZiAvKiAhKF9BU01fTTY4S19QQVJQT1JUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3BjaS5oIGIvaW5jbHVkZS9hc20tbTY4ay9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTdkNzlhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wY2kuaApAQCAtMCwwICsxLDYxIEBACisjaWZuZGVmIF9BU01fTTY4S19QQ0lfSAorI2RlZmluZSBfQVNNX002OEtfUENJX0gKKworLyoKKyAqIGFzbS1tNjhrL3BjaV9tNjhrLmggLSBtNjhrIHNwZWNpZmljIFBDSSBkZWNsYXJhdGlvbnMuCisgKgorICogV3JpdHRlbiBieSBXb3V0IEtsYXJlbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisKK3N0cnVjdCBwY2lfb3BzOworCisvKgorICogU3RydWN0dXJlIHdpdGggaGFyZHdhcmUgZGVwZW5kZW50IGluZm9ybWF0aW9uIGFuZCBmdW5jdGlvbnMgb2YgdGhlCisgKiBQQ0kgYnVzLgorICovCisKK3N0cnVjdCBwY2lfYnVzX2luZm8KK3sKKwkvKgorCSAqIFJlc291cmNlcyBvZiB0aGUgUENJIGJ1cy4KKwkgKi8KKworCXN0cnVjdCByZXNvdXJjZSBtZW1fc3BhY2U7CisJc3RydWN0IHJlc291cmNlIGlvX3NwYWNlOworCisJLyoKKwkgKiBTeXN0ZW0gZGVwZW5kZW50IGZ1bmN0aW9ucy4KKwkgKi8KKworCXN0cnVjdCBwY2lfb3BzICptNjhrX3BjaV9vcHM7CisKKwl2b2lkICgqZml4dXApKGludCBwY2lfbW9kaWZ5KTsKKwl2b2lkICgqY29uZl9kZXZpY2UpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworfTsKKworI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkJMAorI2RlZmluZSBwY2liaW9zX3NjYW5fYWxsX2ZucyhhLCBiKQkwCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3NldF9tYXN0ZXIoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwkvKiBObyBzcGVjaWFsIGJ1cyBtYXN0ZXJpbmcgc2V0dXAgaGFuZGxpbmcgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfcGVuYWxpemVfaXNhX2lycShpbnQgaXJxKQoreworCS8qIFdlIGRvbid0IGRvIGR5bmFtaWMgUENJIElSUSBhbGxvY2F0aW9uICovCit9CisKKy8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKKyAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKKyAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMuCisgKi8KKyNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkoMSkKKworc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfYWRkX3BsYXRmb3JtX2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKK30KKworI2VuZGlmIC8qIF9BU01fTTY4S19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLW02OGsvcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1OWQwNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcGVyY3B1LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX002OEtfUEVSQ1BVX0gKKyNkZWZpbmUgX19BU01fTTY4S19QRVJDUFVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+CisKKyNlbmRpZgkvKiBfX0FTTV9NNjhLX1BFUkNQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLW02OGsvcGdhbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NjhiNzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3BnYWxsb2MuaApAQCAtMCwwICsxLDE5IEBACisKKyNpZm5kZWYgTTY4S19QR0FMTE9DX0gKKyNkZWZpbmUgTTY4S19QR0FMTE9DX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS92aXJ0Y29udmVydC5oPgorCisKKworI2lmZGVmIENPTkZJR19TVU4zCisjaW5jbHVkZSA8YXNtL3N1bjNfcGdhbGxvYy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vbW90b3JvbGFfcGdhbGxvYy5oPgorI2VuZGlmCisKKyNlbmRpZiAvKiBNNjhLX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1tNjhrL3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWVmMzI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wZ3RhYmxlLmgKQEAgLTAsMCArMSwxOTEgQEAKKyNpZm5kZWYgX002OEtfUEdUQUJMRV9ICisjZGVmaW5lIF9NNjhLX1BHVEFCTEVfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBhbmQgZGVmaW5lcyBuZWNlc3NhcnkgdG8gbW9kaWZ5IGFuZCB1c2UKKyAqIHRoZSBtNjhrIHBhZ2UgdGFibGUgdHJlZS4KKyAqLworCisjaW5jbHVkZSA8YXNtL3ZpcnRjb252ZXJ0Lmg+CisKKy8qIENlcnRhaW4gYXJjaGl0ZWN0dXJlcyBuZWVkIHRvIGRvIHNwZWNpYWwgdGhpbmdzIHdoZW4gcHRlJ3MKKyAqIHdpdGhpbiBhIHBhZ2UgdGFibGUgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLiAgVGh1cywgdGhlIGZvbGxvd2luZworICogaG9vayBpcyBtYWRlIGF2YWlsYWJsZS4KKyAqLworI2RlZmluZSBzZXRfcHRlKHB0ZXB0ciwgcHRldmFsKQkJCQkJXAorCWRvewkJCQkJCQlcCisJCSoocHRlcHRyKSA9IChwdGV2YWwpOwkJCQlcCisJfSB3aGlsZSgwKQorI2RlZmluZSBzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGV2YWwpIHNldF9wdGUocHRlcCxwdGV2YWwpCisKKworLyogUE1EX1NISUZUIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGFyZWEgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBjYW4gbWFwICovCisjaWZkZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgUE1EX1NISUZUICAgICAgIDE3CisjZWxzZQorI2RlZmluZSBQTURfU0hJRlQJMjIKKyNlbmRpZgorI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKKyNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCisKKy8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2lmZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIFBHRElSX1NISUZUICAgICAxNworI2Vsc2UKKyNkZWZpbmUgUEdESVJfU0hJRlQJMjUKKyNlbmRpZgorI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKKworLyoKKyAqIGVudHJpZXMgcGVyIHBhZ2UgZGlyZWN0b3J5IGxldmVsOiB0aGUgbTY4ayBpcyBjb25maWd1cmVkIGFzIHRocmVlLWxldmVsLAorICogc28gd2UgZG8gaGF2ZSBQTUQgbGV2ZWwgcGh5c2ljYWxseS4KKyAqLworI2lmZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIFBUUlNfUEVSX1BURSAgIDE2CisjZGVmaW5lIFBUUlNfUEVSX1BNRCAgIDEKKyNkZWZpbmUgUFRSU19QRVJfUEdEICAgMjA0OAorI2Vsc2UKKyNkZWZpbmUgUFRSU19QRVJfUFRFCTEwMjQKKyNkZWZpbmUgUFRSU19QRVJfUE1ECTgKKyNkZWZpbmUgUFRSU19QRVJfUEdECTEyOAorI2VuZGlmCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECShUQVNLX1NJWkUvUEdESVJfU0laRSkKKyNkZWZpbmUgRklSU1RfVVNFUl9QR0RfTlIJMAorCisvKiBWaXJ0dWFsIGFkZHJlc3MgcmVnaW9uIGZvciB1c2UgYnkga2VybmVsX21hcCgpICovCisjaWZkZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgS01BUF9TVEFSVCAgICAgMHgwREMwMDAwMAorI2RlZmluZSBLTUFQX0VORCAgICAgICAweDBFMDAwMDAwCisjZWxzZQorI2RlZmluZQlLTUFQX1NUQVJUCTB4ZDAwMDAwMDAKKyNkZWZpbmUJS01BUF9FTkQJMHhmMDAwMDAwMAorI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX1NVTjMKKy8qIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQorICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQorICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0CisgKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgorICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCisgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCisgKi8KKyNkZWZpbmUgVk1BTExPQ19PRkZTRVQJKDgqMTAyNCoxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUICgoKHVuc2lnbmVkIGxvbmcpIGhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKKyNkZWZpbmUgVk1BTExPQ19FTkQgS01BUF9TVEFSVAorI2Vsc2UKK2V4dGVybiB1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kOworI2RlZmluZSBWTUFMTE9DX1NUQVJUIDB4MGY4MDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQgdm1hbGxvY19lbmQKKyNlbmRpZiAvKiBDT05GSUdfU1VOMyAqLworCisvKiB6ZXJvIHBhZ2UgdXNlZCBmb3IgdW5pbml0aWFsaXplZCBzdHVmZiAqLworZXh0ZXJuIHZvaWQgKmVtcHR5X3plcm9fcGFnZTsKKworLyoKKyAqIFpFUk9fUEFHRSBpcyBhIGdsb2JhbCBzaGFyZWQgcGFnZSB0aGF0IGlzIGFsd2F5cyB6ZXJvOiB1c2VkCisgKiBmb3IgemVyby1tYXBwZWQgbWVtb3J5IGFyZWFzIGV0Yy4uCisgKi8KKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKQkodmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSkpCisKKy8qIG51bWJlciBvZiBiaXRzIHRoYXQgZml0IGludG8gYSBtZW1vcnkgcG9pbnRlciAqLworI2RlZmluZSBCSVRTX1BFUl9QVFIJCQkoOCpzaXplb2YodW5zaWduZWQgbG9uZykpCisKKy8qIHRvIGFsaWduIHRoZSBwb2ludGVyIHRvIGEgcG9pbnRlciBhZGRyZXNzICovCisjZGVmaW5lIFBUUl9NQVNLCQkJKH4oc2l6ZW9mKHZvaWQqKS0xKSkKKworLyogc2l6ZW9mKHZvaWQqKT09MTw8U0laRU9GX1BUUl9MT0cyICovCisvKiA2NC1iaXQgbWFjaGluZXMsIGJld2FyZSEgIFNSQi4gKi8KKyNkZWZpbmUgU0laRU9GX1BUUl9MT0cyCQkJICAgICAgIDIKKworLyoKKyAqIENoZWNrIGlmIHRoZSBhZGRyL2xlbiBnb2VzIHVwIHRvIHRoZSBlbmQgb2YgYSBwaHlzaWNhbAorICogbWVtb3J5IGNodW5rLiAgVXNlZCBmb3IgRE1BIGZ1bmN0aW9ucy4KKyAqLworI2lmZGVmIENPTkZJR19TSU5HTEVfTUVNT1JZX0NIVU5LCisvKgorICogSXQgbWFrZXMgbm8gc2Vuc2UgdG8gY29uc2lkZXIgd2hldGhlciB3ZSBjcm9zcyBhIG1lbW9yeSBib3VuZGFyeSBpZgorICogd2Ugc3VwcG9ydCBqdXN0IG9uZSBwaHlzaWNhbCBjaHVuayBvZiBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1tX2VuZF9vZl9jaHVuayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4pCit7CisJcmV0dXJuIDA7Cit9CisjZWxzZQoraW50IG1tX2VuZF9vZl9jaHVuayAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuKTsKKyNlbmRpZgorCitleHRlcm4gdm9pZCBrZXJuZWxfc2V0X2NhY2hlbW9kZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBjbW9kZSk7CisKKy8qCisgKiBUaGUgbTY4ayBkb2Vzbid0IGhhdmUgYW55IGV4dGVybmFsIE1NVSBpbmZvOiB0aGUga2VybmVsIHBhZ2UKKyAqIHRhYmxlcyBjb250YWluIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLiAgVGhlIFN1bjMgZG9lcywgYnV0CisgKiB0aGV5IGFyZSB1cGRhdGVkIG9uIGRlbWFuZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQoreworfQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKKworI2RlZmluZSBpb19yZW1hcF9wYWdlX3JhbmdlKHZtYSwgdmFkZHIsIHBhZGRyLCBzaXplLCBwcm90KQkJXAorCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgKHBhZGRyKSA+PiBQQUdFX1NISUZULCBzaXplLCBwcm90KQorCisjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCisKKyNkZWZpbmUgTUtfSU9TUEFDRV9QRk4oc3BhY2UsIHBmbikJKHBmbikKKyNkZWZpbmUgR0VUX0lPU1BBQ0UocGZuKQkJMAorI2RlZmluZSBHRVRfUEZOKHBmbikJCQkocGZuKQorCisvKiBNTVUtc3BlY2lmaWMgaGVhZGVycyAqLworCisjaWZkZWYgQ09ORklHX1NVTjMKKyNpbmNsdWRlIDxhc20vc3VuM19wZ3RhYmxlLmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS9tb3Rvcm9sYV9wZ3RhYmxlLmg+CisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CisKKy8qCisgKiBNYWNybyB0byBtYXJrIGEgcGFnZSBwcm90ZWN0aW9uIHZhbHVlIGFzICJ1bmNhY2hlYWJsZSIuCisgKi8KKyNpZmRlZiBTVU4zX1BBR0VfTk9DQUNIRQorIyBkZWZpbmUgX19TVU4zX1BBR0VfTk9DQUNIRQlTVU4zX1BBR0VfTk9DQUNIRQorI2Vsc2UKKyMgZGVmaW5lIF9fU1VOM19QQUdFX05PQ0FDSEUJMAorI2VuZGlmCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkJCQkJCQkJXAorCShNTVVfSVNfU1VOMwkJCQkJCQkJXAorCSA/IChfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwgX19TVU4zX1BBR0VfTk9DQUNIRSkpCQkJXAorCSA6ICgoTU1VX0lTXzg1MSB8fCBNTVVfSVNfMDMwKQkJCQkJCVwKKwkgICAgPyAoX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX05PQ0FDSEUwMzApKQkJCVwKKwkgICAgOiAoTU1VX0lTXzA0MCB8fCBNTVVfSVNfMDYwKQkJCQkJXAorCSAgICA/IChfX3BncHJvdCgocGdwcm90X3ZhbChwcm90KSAmIF9DQUNIRU1BU0swNDApIHwgX1BBR0VfTk9DQUNIRV9TKSkJXAorCSAgICA6IChwcm90KSkpCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBObyBwYWdlIHRhYmxlIGNhY2hlcyB0byBpbml0aWFsaXNlCisgKi8KKyNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9NNjhLX1BHVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wb2xsLmggYi9pbmNsdWRlL2FzbS1tNjhrL3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGI2OWM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wb2xsLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfX202OGtfUE9MTF9ICisjZGVmaW5lIF9fbTY4a19QT0xMX0gKKworI2RlZmluZSBQT0xMSU4JCSAgMQorI2RlZmluZSBQT0xMUFJJCQkgIDIKKyNkZWZpbmUgUE9MTE9VVAkJICA0CisjZGVmaW5lIFBPTExFUlIJCSAgOAorI2RlZmluZSBQT0xMSFVQCQkgMTYKKyNkZWZpbmUgUE9MTE5WQUwJIDMyCisjZGVmaW5lIFBPTExSRE5PUk0JIDY0CisjZGVmaW5lIFBPTExXUk5PUk0JUE9MTE9VVAorI2RlZmluZSBQT0xMUkRCQU5ECTEyOAorI2RlZmluZSBQT0xMV1JCQU5ECTI1NgorI2RlZmluZSBQT0xMTVNHCQkweDA0MDAKKyNkZWZpbmUgUE9MTFJFTU9WRQkweDEwMDAKKworc3RydWN0IHBvbGxmZCB7CisJaW50IGZkOworCXNob3J0IGV2ZW50czsKKwlzaG9ydCByZXZlbnRzOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3Bvc2l4X3R5cGVzLmggYi9pbmNsdWRlL2FzbS1tNjhrL3Bvc2l4X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExNjZlZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcG9zaXhfdHlwZXMuaApAQCAtMCwwICsxLDY1IEBACisjaWZuZGVmIF9fQVJDSF9NNjhLX1BPU0lYX1RZUEVTX0gKKyNkZWZpbmUgX19BUkNIX002OEtfUE9TSVhfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCisgKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLiAgQWxzbywgd2UgY2Fubm90CisgKiBhc3N1bWUgR0NDIGlzIGJlaW5nIHVzZWQuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nCV9fa2VybmVsX2lub190OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9tb2RlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX25saW5rX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX29mZl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3B0cmRpZmZfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGltZV90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF90aW1lcl90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX2Nsb2NraWRfdDsKK3R5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90OwordHlwZWRlZiBjaGFyICoJCV9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX3VpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF91aWQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfZ2lkMzJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9vbGRfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfb2xkX2Rldl90OworCisjaWZkZWYgX19HTlVDX18KK3R5cGVkZWYgbG9uZyBsb25nCV9fa2VybmVsX2xvZmZfdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKF9fVVNFX0FMTCkKKwlpbnQJdmFsWzJdOworI2Vsc2UgLyogIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19VU0VfQUxMKSAqLworCWludAlfX3ZhbFsyXTsKKyNlbmRpZiAvKiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX1VTRV9BTEwpICovCit9IF9fa2VybmVsX2ZzaWRfdDsKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikKKworI3VuZGVmCV9fRkRfU0VUCisjZGVmaW5lCV9fRkRfU0VUKGQsIHNldCkJKChzZXQpLT5mZHNfYml0c1tfX0ZERUxUKGQpXSB8PSBfX0ZETUFTSyhkKSkKKworI3VuZGVmCV9fRkRfQ0xSCisjZGVmaW5lCV9fRkRfQ0xSKGQsIHNldCkJKChzZXQpLT5mZHNfYml0c1tfX0ZERUxUKGQpXSAmPSB+X19GRE1BU0soZCkpCisKKyN1bmRlZglfX0ZEX0lTU0VUCisjZGVmaW5lCV9fRkRfSVNTRVQoZCwgc2V0KQkoKHNldCktPmZkc19iaXRzW19fRkRFTFQoZCldICYgX19GRE1BU0soZCkpCisKKyN1bmRlZglfX0ZEX1pFUk8KKyNkZWZpbmUgX19GRF9aRVJPKGZkc2V0cCkgKG1lbXNldCAoZmRzZXRwLCAwLCBzaXplb2YoKihmZF9zZXQgKilmZHNldHApKSkKKworI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tbTY4ay9wcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjE1NzVkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLW02OGsvcHJvY2Vzc29yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgSGFtaXNoIE1hY2RvbmFsZAorICovCisKKyNpZm5kZWYgX19BU01fTTY4S19QUk9DRVNTT1JfSAorI2RlZmluZSBfX0FTTV9NNjhLX1BST0NFU1NPUl9ICisKKy8qCisgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CisgKiBpbnN0cnVjdGlvbiBwb2ludGVyICgicHJvZ3JhbSBjb3VudGVyIikuCisgKi8KKyNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyBfX2xhYmVsX18gX2w7IF9sOiAmJl9sO30pCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9mcHUuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZHVzcCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdXNwOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdmUgJS91c3AsJTAiIDogIj1hIiAodXNwKSk7CisJcmV0dXJuIHVzcDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdydXNwKHVuc2lnbmVkIGxvbmcgdXNwKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZlICUwLCUvdXNwIiA6IDogImEiICh1c3ApKTsKK30KKworLyoKKyAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplOiAzLjc1R0IuIFRoaXMgaXMgaGFyZGNvZGVkIGludG8gYSBmZXcgcGxhY2VzLAorICogc28gZG9uJ3QgY2hhbmdlIGl0IHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisgKi8KKyNpZm5kZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgVEFTS19TSVpFCSgweEYwMDAwMDAwVUwpCisjZWxzZQorI2lmZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBUQVNLX1NJWkUJKDB4MEUwMDAwMDApCisjZWxzZQorI2RlZmluZSBUQVNLX1NJWkUJKDB4MEUwMDAwMDBVTCkKKyNlbmRpZgorI2VuZGlmCisKKy8qIFRoaXMgZGVjaWRlcyB3aGVyZSB0aGUga2VybmVsIHdpbGwgc2VhcmNoIGZvciBhIGZyZWUgY2h1bmsgb2Ygdm0KKyAqIHNwYWNlIGR1cmluZyBtbWFwJ3MuCisgKi8KKyNpZm5kZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFCTB4QzAwMDAwMDBVTAorI2Vsc2UKKyNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFCTB4MEEwMDAwMDBVTAorI2VuZGlmCisjZGVmaW5lIFRBU0tfVU5NQVBQRURfQUxJR04oYWRkciwgb2ZmKQlQQUdFX0FMSUdOKGFkZHIpCisKK3N0cnVjdCB0YXNrX3dvcmsgeworCXVuc2lnbmVkIGNoYXIgc2lncGVuZGluZzsKKwl1bnNpZ25lZCBjaGFyIG5vdGlmeV9yZXN1bWU7CS8qIHJlcXVlc3QgZm9yIG5vdGlmaWNhdGlvbiBvbgorCQkJCQkgICB1c2Vyc3BhY2UgZXhlY3V0aW9uIHJlc3VtcHRpb24gKi8KKwljaGFyICAgICAgICAgIG5lZWRfcmVzY2hlZDsKKwl1bnNpZ25lZCBjaGFyIGRlbGF5ZWRfdHJhY2U7CS8qIHNpbmdsZSBzdGVwIGEgc3lzY2FsbCAqLworCXVuc2lnbmVkIGNoYXIgc3lzY2FsbF90cmFjZTsJLyogY291bnQgb2Ygc3lzY2FsbCBpbnRlcmNlcHRvcnMgKi8KKwl1bnNpZ25lZCBjaGFyIG1lbWRpZTsJCS8qIHRhc2sgd2FzIHNlbGVjdGVkIHRvIGJlIGtpbGxlZCAqLworCXVuc2lnbmVkIGNoYXIgcGFkWzJdOworfTsKKworc3RydWN0IHRocmVhZF9zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgIGtzcDsJCS8qIGtlcm5lbCBzdGFjayBwb2ludGVyICovCisJdW5zaWduZWQgbG9uZyAgdXNwOwkJLyogdXNlciBzdGFjayBwb2ludGVyICovCisJdW5zaWduZWQgc2hvcnQgc3I7CQkvKiBzYXZlZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBzaG9ydCBmczsJCS8qIHNhdmVkIGZzIChzZmMsIGRmYykgKi8KKwl1bnNpZ25lZCBsb25nICBjcnBbMl07CQkvKiBjcHUgcm9vdCBwb2ludGVyICovCisJdW5zaWduZWQgbG9uZyAgZXNwMDsJCS8qIHBvaW50cyB0byBTUiBvZiBzdGFjayBmcmFtZSAqLworCXVuc2lnbmVkIGxvbmcgIGZhZGRyOwkJLyogaW5mbyBhYm91dCBsYXN0IGZhdWx0ICovCisJaW50ICAgICAgICAgICAgc2lnbm8sIGNvZGU7CisJdW5zaWduZWQgbG9uZyAgZnBbOCozXTsKKwl1bnNpZ25lZCBsb25nICBmcGNudGxbM107CS8qIGZwIGNvbnRyb2wgcmVncyAqLworCXVuc2lnbmVkIGNoYXIgIGZwc3RhdGVbRlBTVEFURVNJWkVdOyAgLyogZmxvYXRpbmcgcG9pbnQgc3RhdGUgKi8KKwlzdHJ1Y3QgdGFza193b3JrIHdvcms7Cit9OworCisjZGVmaW5lIElOSVRfVEhSRUFEICB7CQkJCQkJCVwKKwlrc3A6CXNpemVvZihpbml0X3N0YWNrKSArICh1bnNpZ25lZCBsb25nKSBpbml0X3N0YWNrLAlcCisJc3I6CVBTX1MsCQkJCQkJCVwKKwlmczoJX19LRVJORUxfRFMsCQkJCQkJXAorCWluZm86CUlOSVRfVEhSRUFEX0lORk8oaW5pdF90YXNrKQkJCQlcCit9CisKKy8qCisgKiBEbyBuZWNlc3Nhcnkgc2V0dXAgdG8gc3RhcnQgdXAgYSBuZXdseSBleGVjdXRlZCB0aHJlYWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdGFydF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCB1bnNpZ25lZCBsb25nIHBjLAorCQkJCXVuc2lnbmVkIGxvbmcgdXNwKQoreworCS8qIHJlYWRzIGZyb20gdXNlciBzcGFjZSAqLworCXNldF9mcyhVU0VSX0RTKTsKKworCXJlZ3MtPnBjID0gcGM7CisJcmVncy0+c3IgJj0gfjB4MjAwMDsKKwl3cnVzcCh1c3ApOworfQorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLCBhIHN0cmFuZ2UgQyB0aGluZyAqLworc3RydWN0IHRhc2tfc3RydWN0OworCisvKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRlYWRfdGFzaykKK3sKK30KKworLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KKyNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gaW50IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKiBhcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCisvKgorICogRnJlZSBjdXJyZW50IHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgZXRjLi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGV4aXRfdGhyZWFkKHZvaWQpCit7Cit9CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRocmVhZF9zYXZlZF9wYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKyNkZWZpbmUJS1NUS19FSVAodHNrKQlcCisgICAgKHsJCQlcCisJdW5zaWduZWQgbG9uZyBlaXAgPSAwOwkgXAorCWlmICgodHNrKS0+dGhyZWFkLmVzcDAgPiBQQUdFX1NJWkUgJiYgXAorCSAgICAodmlydF9hZGRyX3ZhbGlkKCh0c2spLT50aHJlYWQuZXNwMCkpKSBcCisJICAgICAgZWlwID0gKChzdHJ1Y3QgcHRfcmVncyAqKSAodHNrKS0+dGhyZWFkLmVzcDApLT5wYzsgXAorCWVpcDsgfSkKKyNkZWZpbmUJS1NUS19FU1AodHNrKQkoKHRzaykgPT0gY3VycmVudCA/IHJkdXNwKCkgOiAodHNrKS0+dGhyZWFkLnVzcCkKKworI2RlZmluZSBjcHVfcmVsYXgoKQliYXJyaWVyKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2U3NjNkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wdHJhY2UuaApAQCAtMCwwICsxLDgwIEBACisjaWZuZGVmIF9NNjhLX1BUUkFDRV9ICisjZGVmaW5lIF9NNjhLX1BUUkFDRV9ICisKKyNkZWZpbmUgUFRfRDEJICAgMAorI2RlZmluZSBQVF9EMgkgICAxCisjZGVmaW5lIFBUX0QzCSAgIDIKKyNkZWZpbmUgUFRfRDQJICAgMworI2RlZmluZSBQVF9ENQkgICA0CisjZGVmaW5lIFBUX0Q2CSAgIDUKKyNkZWZpbmUgUFRfRDcJICAgNgorI2RlZmluZSBQVF9BMAkgICA3CisjZGVmaW5lIFBUX0ExCSAgIDgKKyNkZWZpbmUgUFRfQTIJICAgOQorI2RlZmluZSBQVF9BMwkgICAxMAorI2RlZmluZSBQVF9BNAkgICAxMQorI2RlZmluZSBQVF9BNQkgICAxMgorI2RlZmluZSBQVF9BNgkgICAxMworI2RlZmluZSBQVF9EMAkgICAxNAorI2RlZmluZSBQVF9VU1AJICAgMTUKKyNkZWZpbmUgUFRfT1JJR19EMCAxNgorI2RlZmluZSBQVF9TUgkgICAxNworI2RlZmluZSBQVF9QQwkgICAxOAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiB0aGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZQorICAgc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwuICovCisKK3N0cnVjdCBwdF9yZWdzIHsKKyAgbG9uZyAgICAgZDE7CisgIGxvbmcgICAgIGQyOworICBsb25nICAgICBkMzsKKyAgbG9uZyAgICAgZDQ7CisgIGxvbmcgICAgIGQ1OworICBsb25nICAgICBhMDsKKyAgbG9uZyAgICAgYTE7CisgIGxvbmcgICAgIGEyOworICBsb25nICAgICBkMDsKKyAgbG9uZyAgICAgb3JpZ19kMDsKKyAgbG9uZyAgICAgc3RrYWRqOworICB1bnNpZ25lZCBzaG9ydCBzcjsKKyAgdW5zaWduZWQgbG9uZyAgcGM7CisgIHVuc2lnbmVkIGZvcm1hdCA6ICA0OyAvKiBmcmFtZSBmb3JtYXQgc3BlY2lmaWVyICovCisgIHVuc2lnbmVkIHZlY3RvciA6IDEyOyAvKiB2ZWN0b3Igb2Zmc2V0ICovCit9OworCisvKgorICogVGhpcyBpcyB0aGUgZXh0ZW5kZWQgc3RhY2sgdXNlZCBieSBzaWduYWwgaGFuZGxlcnMgYW5kIHRoZSBjb250ZXh0CisgKiBzd2l0Y2hlcjogaXQncyBwdXNoZWQgYWZ0ZXIgdGhlIG5vcm1hbCAic3RydWN0IHB0X3JlZ3MiLgorICovCitzdHJ1Y3Qgc3dpdGNoX3N0YWNrIHsKKwl1bnNpZ25lZCBsb25nICBkNjsKKwl1bnNpZ25lZCBsb25nICBkNzsKKwl1bnNpZ25lZCBsb25nICBhMzsKKwl1bnNpZ25lZCBsb25nICBhNDsKKwl1bnNpZ25lZCBsb25nICBhNTsKKwl1bnNpZ25lZCBsb25nICBhNjsKKwl1bnNpZ25lZCBsb25nICByZXRwYzsKK307CisKKy8qIEFyYml0cmFyaWx5IGNob29zZSB0aGUgc2FtZSBwdHJhY2UgbnVtYmVycyBhcyB1c2VkIGJ5IHRoZSBTcGFyYyBjb2RlLiAqLworI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAgICAgICAgICAgIDEyCisjZGVmaW5lIFBUUkFDRV9TRVRSRUdTICAgICAgICAgICAgMTMKKyNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUyAgICAgICAgICAxNAorI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTICAgICAgICAgIDE1CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgUFNfUworI2RlZmluZSBQU19TICAoMHgyMDAwKQorI2RlZmluZSBQU19NICAoMHgxMDAwKQorI2VuZGlmCisKKyNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpICghKChyZWdzKS0+c3IgJiBQU19TKSkKKyNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT5wYykKKyNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9NNjhLX1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3E0MF9tYXN0ZXIuaCBiL2luY2x1ZGUvYXNtLW02OGsvcTQwX21hc3Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MDdhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3E0MF9tYXN0ZXIuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogUTQwIG1hc3RlciBDaGlwIENvbnRyb2wKKyAqIFJUQyBzdHVmZiBtZXJnZWQgZm9yIGNvbXBhY3RuZXMuLgorKi8KKworI2lmbmRlZiBfUTQwX01BU1RFUl9ICisjZGVmaW5lIF9RNDBfTUFTVEVSX0gKKworI2luY2x1ZGUgPGFzbS9yYXdfaW8uaD4KKworCisjZGVmaW5lIHE0MF9tYXN0ZXJfYWRkciAweGZmMDAwMDAwCisKKyNkZWZpbmUgSUlSUV9SRUcgICAgICAgICAgICAweDAgICAgICAgLyogaW50ZXJuYWwgSVJRIHJlZyAqLworI2RlZmluZSBFSVJRX1JFRyAgICAgICAgICAgIDB4NCAgICAgICAvKiBleHRlcm5hbCAuLi4gKi8KKyNkZWZpbmUgS0VZQ09ERV9SRUcgICAgICAgICAweDFjICAgICAgLyogdmFsdWUgb2YgcmVjZWl2ZWQgc2NhbmNvZGUgICovCisjZGVmaW5lIERJU1BMQVlfQ09OVFJPTF9SRUcgMHgxOAorI2RlZmluZSBGUkFNRV9DTEVBUl9SRUcgICAgIDB4MjQKKyNkZWZpbmUgTEVEX1JFRyAgICAgICAgICAgICAweDMwCisKKyNkZWZpbmUgUTQwX0xFRF9PTigpICAgICAgICBtYXN0ZXJfb3V0YigxLExFRF9SRUcpCisjZGVmaW5lIFE0MF9MRURfT0ZGKCkgICAgICAgbWFzdGVyX291dGIoMCxMRURfUkVHKQorCisjZGVmaW5lIElOVEVSUlVQVF9SRUcgICAgICAgSUlSUV9SRUcgIC8qICJuYXRpdmUiIGludHMgKi8KKyNkZWZpbmUgS0VZX0lSUV9FTkFCTEVfUkVHICAweDA4ICAgICAgLyoqLworI2RlZmluZSBLRVlCT0FSRF9VTkxPQ0tfUkVHIDB4MjAgICAgICAvKiBjbGVhciBrYiBpbnQgKi8KKworI2RlZmluZSBTQU1QTEVfRU5BQkxFX1JFRyAgIDB4MTQgICAgICAvKiBnZW5lcmF0ZSBTQU1QTEUgaW50cyAqLworI2RlZmluZSBTQU1QTEVfUkFURV9SRUcgICAgIDB4MmMKKyNkZWZpbmUgU0FNUExFX0NMRUFSX1JFRyAgICAweDI4CisjZGVmaW5lIFNBTVBMRV9MT1cgICAgICAgICAgMHgwMAorI2RlZmluZSBTQU1QTEVfSElHSCAgICAgICAgIDB4MDEKKworI2RlZmluZSBGUkFNRV9SQVRFX1JFRyAgICAgICAweDM4ICAgICAgLyogZ2VuZXJhdGUgRlJBTUUgaW50cyBhdCAyMDAgSFogcmF0ZSAqLworCisjaWYgMAorI2RlZmluZSBTRVJfRU5BQkxFX1JFRyAgICAgIDB4MGMgICAgICAvKiBhbGxvdyBzZXJpYWwgaW50cyB0byBiZSBnZW5lcmF0ZWQgKi8KKyNlbmRpZgorI2RlZmluZSBFWFRfRU5BQkxFX1JFRyAgICAgIDB4MTAgICAgICAvKiAuLi4gcmVzdCBvZiB0aGUgSVNBIGludHMgLi4uICovCisKKworI2RlZmluZSBtYXN0ZXJfaW5iKF9yZWdfKSAgICAgIGluXzgoKHVuc2lnbmVkIGNoYXIgKilxNDBfbWFzdGVyX2FkZHIrX3JlZ18pCisjZGVmaW5lIG1hc3Rlcl9vdXRiKF9iXyxfcmVnXykgIG91dF84KCh1bnNpZ25lZCBjaGFyICopcTQwX21hc3Rlcl9hZGRyK19yZWdfLF9iXykKKworLyogUlRDIGRlZmluZXMgKi8KKworI2RlZmluZSBRNDBfUlRDX0JBU0UJICAgICgweGZmMDIxZmZjKQorCisjZGVmaW5lIFE0MF9SVENfWUVBUiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShRNDBfUlRDX0JBU0UrMCkpCisjZGVmaW5lIFE0MF9SVENfTU5USCAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShRNDBfUlRDX0JBU0UtNCkpCisjZGVmaW5lIFE0MF9SVENfREFURSAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShRNDBfUlRDX0JBU0UtOCkpCisjZGVmaW5lIFE0MF9SVENfRE9XICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShRNDBfUlRDX0JBU0UtMTIpKQorI2RlZmluZSBRNDBfUlRDX0hPVVIgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoUTQwX1JUQ19CQVNFLTE2KSkKKyNkZWZpbmUgUTQwX1JUQ19NSU5TICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKFE0MF9SVENfQkFTRS0yMCkpCisjZGVmaW5lIFE0MF9SVENfU0VDUyAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShRNDBfUlRDX0JBU0UtMjQpKQorI2RlZmluZSBRNDBfUlRDX0NUUkwgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoUTQwX1JUQ19CQVNFLTI4KSkKKworLyogc29tZSBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgUTQwX1JUQ19SRUFEICAgNjQgIC8qIHByZXBhcmUgZm9yIHJlYWRpbmcgKi8KKyNkZWZpbmUgUTQwX1JUQ19XUklURSAgMTI4CisKKy8qIGRlZmluZSBzb21lIFE0MCBzcGVjaWZpYyBpbnRzICovCisjaW5jbHVkZSAicTQwaW50cy5oIgorCisvKiBtaXNjIGRlZnMgKi8KKyNkZWZpbmUgREFDX0xFRlQgICgodW5zaWduZWQgY2hhciAqKTB4ZmYwMDgwMDApCisjZGVmaW5lIERBQ19SSUdIVCAoKHVuc2lnbmVkIGNoYXIgKikweGZmMDA4MDA0KQorCisjZW5kaWYgLyogX1E0MF9NQVNURVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9xNDBpbnRzLmggYi9pbmNsdWRlL2FzbS1tNjhrL3E0MGludHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDk3MGFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9xNDBpbnRzLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIGNvbnRhaW5zIHNvbWUgUTQwIHJlbGF0ZWQgaW50ZXJydXB0IGRlZmluaXRpb25zCisgKi8KKworI2RlZmluZSBRNDBfSVJRX01BWCAgICAgICgzNCkKKworI2RlZmluZSBRNDBfSVJRX1NBTVBMRSAgICAoMzQpCisjZGVmaW5lIFE0MF9JUlFfS0VZQk9BUkQgKDMyKQorI2RlZmluZSBRNDBfSVJRX0ZSQU1FICAgICgzMykKKworCisvKiBtYXNrcyBmb3IgaW50ZXJydXB0IHJlZ2lvc3RlcnMqLworLyogaW50ZXJuYWwsIElJUlFfUkVHICovCisjZGVmaW5lIFE0MF9JUlFfS0VZQl9NQVNLICAgICgyKQorI2RlZmluZSBRNDBfSVJRX1NFUl9NQVNLICAgICAoMTw8MikKKyNkZWZpbmUgUTQwX0lSUV9GUkFNRV9NQVNLICAgKDE8PDMpCisjZGVmaW5lIFE0MF9JUlFfRVhUX01BU0sgICAgICgxPDw0KSAgICAvKiBpcyBhIEVJUlEgKi8KKy8qIGVpcnEsIEVJUlFfUkVHICovCisjZGVmaW5lIFE0MF9JUlEzX01BU0sgICAgICAgICgxKQorI2RlZmluZSBRNDBfSVJRNF9NQVNLICAgICAgICAoMTw8MSkKKyNkZWZpbmUgUTQwX0lSUTVfTUFTSyAgICAgICAgKDE8PDIpCisjZGVmaW5lIFE0MF9JUlE2X01BU0sgICAgICAgICgxPDwzKQorI2RlZmluZSBRNDBfSVJRN19NQVNLICAgICAgICAoMTw8NCkKKyNkZWZpbmUgUTQwX0lSUTEwX01BU0sgICAgICAgKDE8PDUpCisjZGVmaW5lIFE0MF9JUlExNF9NQVNLICAgICAgICgxPDw2KQorI2RlZmluZSBRNDBfSVJRMTVfTUFTSyAgICAgICAoMTw8NykKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcTQwX3Byb2JlX2lycV9vbiAodm9pZCk7CitleHRlcm4gaW50IHE0MF9wcm9iZV9pcnFfb2ZmICh1bnNpZ25lZCBsb25nIGlycXMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9yYXdfaW8uaCBiL2luY2x1ZGUvYXNtLW02OGsvcmF3X2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxZjBhOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcmF3X2lvLmgKQEAgLTAsMCArMSwzNDIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1tNjhrL3Jhd19pby5oCisgKgorICogMTAvMjAvMDAgUlo6IC0gY3JlYXRlZCBmcm9tIGJpdHMgb2YgaW8uaCBhbmQgaWRlLmggdG8gY2xlYW51cCBuYW1lc3BhY2UKKyAqCisgKi8KKworI2lmbmRlZiBfUkFXX0lPX0gKKyNkZWZpbmUgX1JBV19JT19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworCisvKiBWYWx1ZXMgZm9yIG5vY2FjaGVmbGFnIGFuZCBjbW9kZSAqLworI2RlZmluZSBJT01BUF9GVUxMX0NBQ0hJTkcJCTAKKyNkZWZpbmUgSU9NQVBfTk9DQUNIRV9TRVIJCTEKKyNkZWZpbmUgSU9NQVBfTk9DQUNIRV9OT05TRVIJCTIKKyNkZWZpbmUgSU9NQVBfV1JJVEVUSFJPVUdICQkzCisKK2V4dGVybiB2b2lkIGlvdW5tYXAodm9pZCAqYWRkcik7CisKK2V4dGVybiB2b2lkICpfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICAgICAgaW50IGNhY2hlZmxhZyk7CitleHRlcm4gdm9pZCBfX2lvdW5tYXAodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworCisvKiArK3JvbWFuOiBUaGUgYXNzaWdubWVudHMgdG8gdGVtcC4gdmFycyBhdm9pZCB0aGF0IGdjYyBzb21ldGltZXMgZ2VuZXJhdGVzCisgKiB0d28gYWNjZXNzZXMgdG8gbWVtb3J5LCB3aGljaCBtYXkgYmUgdW5kZXNpcmFibGUgZm9yIHNvbWUgZGV2aWNlcy4KKyAqLworI2RlZmluZSBpbl84KGFkZHIpIFwKKyAgICAoeyB1OCBfX3YgPSAoKih2b2xhdGlsZSB1OCAqKSAoYWRkcikpOyBfX3Y7IH0pCisjZGVmaW5lIGluX2JlMTYoYWRkcikgXAorICAgICh7IHUxNiBfX3YgPSAoKih2b2xhdGlsZSB1MTYgKikgKGFkZHIpKTsgX192OyB9KQorI2RlZmluZSBpbl9iZTMyKGFkZHIpIFwKKyAgICAoeyB1MzIgX192ID0gKCoodm9sYXRpbGUgdTMyICopIChhZGRyKSk7IF9fdjsgfSkKKyNkZWZpbmUgaW5fbGUxNihhZGRyKSBcCisgICAgKHsgdTE2IF9fdiA9IGxlMTZfdG9fY3B1KCoodm9sYXRpbGUgdTE2ICopIChhZGRyKSk7IF9fdjsgfSkKKyNkZWZpbmUgaW5fbGUzMihhZGRyKSBcCisgICAgKHsgdTMyIF9fdiA9IGxlMzJfdG9fY3B1KCoodm9sYXRpbGUgdTMyICopIChhZGRyKSk7IF9fdjsgfSkKKworI2RlZmluZSBvdXRfOChhZGRyLGIpICh2b2lkKSgoKih2b2xhdGlsZSB1OCAqKSAoYWRkcikpID0gKGIpKQorI2RlZmluZSBvdXRfYmUxNihhZGRyLHcpICh2b2lkKSgoKih2b2xhdGlsZSB1MTYgKikgKGFkZHIpKSA9ICh3KSkKKyNkZWZpbmUgb3V0X2JlMzIoYWRkcixsKSAodm9pZCkoKCoodm9sYXRpbGUgdTMyICopIChhZGRyKSkgPSAobCkpCisjZGVmaW5lIG91dF9sZTE2KGFkZHIsdykgKHZvaWQpKCgqKHZvbGF0aWxlIHUxNiAqKSAoYWRkcikpID0gY3B1X3RvX2xlMTYodykpCisjZGVmaW5lIG91dF9sZTMyKGFkZHIsbCkgKHZvaWQpKCgqKHZvbGF0aWxlIHUzMiAqKSAoYWRkcikpID0gY3B1X3RvX2xlMzIobCkpCisKKyNkZWZpbmUgcmF3X2luYiBpbl84CisjZGVmaW5lIHJhd19pbncgaW5fYmUxNgorI2RlZmluZSByYXdfaW5sIGluX2JlMzIKKworI2RlZmluZSByYXdfb3V0Yih2YWwscG9ydCkgb3V0XzgoKHBvcnQpLCh2YWwpKQorI2RlZmluZSByYXdfb3V0dyh2YWwscG9ydCkgb3V0X2JlMTYoKHBvcnQpLCh2YWwpKQorI2RlZmluZSByYXdfb3V0bCh2YWwscG9ydCkgb3V0X2JlMzIoKHBvcnQpLCh2YWwpKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmF3X2luc2Iodm9sYXRpbGUgdTggKnBvcnQsIHU4ICpidWYsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IGk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQkqYnVmKysgPSBpbl84KHBvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmF3X291dHNiKHZvbGF0aWxlIHU4ICpwb3J0LCBjb25zdCB1OCAqYnVmLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGludCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJb3V0XzgocG9ydCwgKmJ1ZisrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJhd19pbnN3KHZvbGF0aWxlIHUxNiAqcG9ydCwgdTE2ICpidWYsIHVuc2lnbmVkIGludCBucikKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKG5yICYgMTUpIHsKKwkJdG1wID0gKG5yICYgMTUpIC0gMTsKKwkJYXNtIHZvbGF0aWxlICgKKwkJCSIxOiBtb3ZldyAlMkAsJTBAKzsgZGJyYSAlMSwxYiIKKwkJCTogIj1hIiAoYnVmKSwgIj1kIiAodG1wKQorCQkJOiAiYSIgKHBvcnQpLCAiMCIgKGJ1ZiksCisJCQkgICIxIiAodG1wKSk7CisJfQorCWlmIChuciA+PiA0KSB7CisJCXRtcCA9IChuciA+PiA0KSAtIDE7CisJCWFzbSB2b2xhdGlsZSAoCisJCQkiMTogIgorCQkJIm1vdmV3ICUyQCwlMEArOyAiCisJCQkibW92ZXcgJTJALCUwQCs7ICIKKwkJCSJtb3ZldyAlMkAsJTBAKzsgIgorCQkJIm1vdmV3ICUyQCwlMEArOyAiCisJCQkibW92ZXcgJTJALCUwQCs7ICIKKwkJCSJtb3ZldyAlMkAsJTBAKzsgIgorCQkJIm1vdmV3ICUyQCwlMEArOyAiCisJCQkibW92ZXcgJTJALCUwQCs7ICIKKwkJCSJtb3ZldyAlMkAsJTBAKzsgIgorCQkJIm1vdmV3ICUyQCwlMEArOyAiCisJCQkibW92ZXcgJTJALCUwQCs7ICIKKwkJCSJtb3ZldyAlMkAsJTBAKzsgIgorCQkJIm1vdmV3ICUyQCwlMEArOyAiCisJCQkibW92ZXcgJTJALCUwQCs7ICIKKwkJCSJtb3ZldyAlMkAsJTBAKzsgIgorCQkJIm1vdmV3ICUyQCwlMEArOyAiCisJCQkiZGJyYSAlMSwxYiIKKwkJCTogIj1hIiAoYnVmKSwgIj1kIiAodG1wKQorCQkJOiAiYSIgKHBvcnQpLCAiMCIgKGJ1ZiksCisJCQkgICIxIiAodG1wKSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmF3X291dHN3KHZvbGF0aWxlIHUxNiAqcG9ydCwgY29uc3QgdTE2ICpidWYsCisJCQkgICAgIHVuc2lnbmVkIGludCBucikKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKG5yICYgMTUpIHsKKwkJdG1wID0gKG5yICYgMTUpIC0gMTsKKwkJYXNtIHZvbGF0aWxlICgKKwkJCSIxOiBtb3ZldyAlMEArLCUyQDsgZGJyYSAlMSwxYiIKKwkJCTogIj1hIiAoYnVmKSwgIj1kIiAodG1wKQorCQkJOiAiYSIgKHBvcnQpLCAiMCIgKGJ1ZiksCisJCQkgICIxIiAodG1wKSk7CisJfQorCWlmIChuciA+PiA0KSB7CisJCXRtcCA9IChuciA+PiA0KSAtIDE7CisJCWFzbSB2b2xhdGlsZSAoCisJCQkiMTogIgorCQkJIm1vdmV3ICUwQCssJTJAOyAiCisJCQkibW92ZXcgJTBAKywlMkA7ICIKKwkJCSJtb3ZldyAlMEArLCUyQDsgIgorCQkJIm1vdmV3ICUwQCssJTJAOyAiCisJCQkibW92ZXcgJTBAKywlMkA7ICIKKwkJCSJtb3ZldyAlMEArLCUyQDsgIgorCQkJIm1vdmV3ICUwQCssJTJAOyAiCisJCQkibW92ZXcgJTBAKywlMkA7ICIKKwkJCSJtb3ZldyAlMEArLCUyQDsgIgorCQkJIm1vdmV3ICUwQCssJTJAOyAiCisJCQkibW92ZXcgJTBAKywlMkA7ICIKKwkJCSJtb3ZldyAlMEArLCUyQDsgIgorCQkJIm1vdmV3ICUwQCssJTJAOyAiCisJCQkibW92ZXcgJTBAKywlMkA7ICIKKwkJCSJtb3ZldyAlMEArLCUyQDsgIgorCQkJIm1vdmV3ICUwQCssJTJAOyAiCisJCQkiZGJyYSAlMSwxYiIKKwkJCTogIj1hIiAoYnVmKSwgIj1kIiAodG1wKQorCQkJOiAiYSIgKHBvcnQpLCAiMCIgKGJ1ZiksCisJCQkgICIxIiAodG1wKSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmF3X2luc2wodm9sYXRpbGUgdTMyICpwb3J0LCB1MzIgKmJ1ZiwgdW5zaWduZWQgaW50IG5yKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwlpZiAobnIgJiAxNSkgeworCQl0bXAgPSAobnIgJiAxNSkgLSAxOworCQlhc20gdm9sYXRpbGUgKAorCQkJIjE6IG1vdmVsICUyQCwlMEArOyBkYnJhICUxLDFiIgorCQkJOiAiPWEiIChidWYpLCAiPWQiICh0bXApCisJCQk6ICJhIiAocG9ydCksICIwIiAoYnVmKSwKKwkJCSAgIjEiICh0bXApKTsKKwl9CisJaWYgKG5yID4+IDQpIHsKKwkJdG1wID0gKG5yID4+IDQpIC0gMTsKKwkJYXNtIHZvbGF0aWxlICgKKwkJCSIxOiAiCisJCQkibW92ZWwgJTJALCUwQCs7ICIKKwkJCSJtb3ZlbCAlMkAsJTBAKzsgIgorCQkJIm1vdmVsICUyQCwlMEArOyAiCisJCQkibW92ZWwgJTJALCUwQCs7ICIKKwkJCSJtb3ZlbCAlMkAsJTBAKzsgIgorCQkJIm1vdmVsICUyQCwlMEArOyAiCisJCQkibW92ZWwgJTJALCUwQCs7ICIKKwkJCSJtb3ZlbCAlMkAsJTBAKzsgIgorCQkJIm1vdmVsICUyQCwlMEArOyAiCisJCQkibW92ZWwgJTJALCUwQCs7ICIKKwkJCSJtb3ZlbCAlMkAsJTBAKzsgIgorCQkJIm1vdmVsICUyQCwlMEArOyAiCisJCQkibW92ZWwgJTJALCUwQCs7ICIKKwkJCSJtb3ZlbCAlMkAsJTBAKzsgIgorCQkJIm1vdmVsICUyQCwlMEArOyAiCisJCQkibW92ZWwgJTJALCUwQCs7ICIKKwkJCSJkYnJhICUxLDFiIgorCQkJOiAiPWEiIChidWYpLCAiPWQiICh0bXApCisJCQk6ICJhIiAocG9ydCksICIwIiAoYnVmKSwKKwkJCSAgIjEiICh0bXApKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYXdfb3V0c2wodm9sYXRpbGUgdTMyICpwb3J0LCBjb25zdCB1MzIgKmJ1ZiwKKwkJCSAgICAgdW5zaWduZWQgaW50IG5yKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwlpZiAobnIgJiAxNSkgeworCQl0bXAgPSAobnIgJiAxNSkgLSAxOworCQlhc20gdm9sYXRpbGUgKAorCQkJIjE6IG1vdmVsICUwQCssJTJAOyBkYnJhICUxLDFiIgorCQkJOiAiPWEiIChidWYpLCAiPWQiICh0bXApCisJCQk6ICJhIiAocG9ydCksICIwIiAoYnVmKSwKKwkJCSAgIjEiICh0bXApKTsKKwl9CisJaWYgKG5yID4+IDQpIHsKKwkJdG1wID0gKG5yID4+IDQpIC0gMTsKKwkJYXNtIHZvbGF0aWxlICgKKwkJCSIxOiAiCisJCQkibW92ZWwgJTBAKywlMkA7ICIKKwkJCSJtb3ZlbCAlMEArLCUyQDsgIgorCQkJIm1vdmVsICUwQCssJTJAOyAiCisJCQkibW92ZWwgJTBAKywlMkA7ICIKKwkJCSJtb3ZlbCAlMEArLCUyQDsgIgorCQkJIm1vdmVsICUwQCssJTJAOyAiCisJCQkibW92ZWwgJTBAKywlMkA7ICIKKwkJCSJtb3ZlbCAlMEArLCUyQDsgIgorCQkJIm1vdmVsICUwQCssJTJAOyAiCisJCQkibW92ZWwgJTBAKywlMkA7ICIKKwkJCSJtb3ZlbCAlMEArLCUyQDsgIgorCQkJIm1vdmVsICUwQCssJTJAOyAiCisJCQkibW92ZWwgJTBAKywlMkA7ICIKKwkJCSJtb3ZlbCAlMEArLCUyQDsgIgorCQkJIm1vdmVsICUwQCssJTJAOyAiCisJCQkibW92ZWwgJTBAKywlMkA7ICIKKwkJCSJkYnJhICUxLDFiIgorCQkJOiAiPWEiIChidWYpLCAiPWQiICh0bXApCisJCQk6ICJhIiAocG9ydCksICIwIiAoYnVmKSwKKwkJCSAgIjEiICh0bXApKTsKKwl9Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIHJhd19pbnN3X3N3YXB3KHZvbGF0aWxlIHUxNiAqcG9ydCwgdTE2ICpidWYsCisJCQkJICB1bnNpZ25lZCBpbnQgbnIpCit7CisgICAgaWYgKChucikgJSA4KQorCV9fYXNtX18gX192b2xhdGlsZV9fCisJICAgICAgICgiXHRtb3ZlbCAlMCwlL2EwXG5cdCIKKwkJIm1vdmVsICUxLCUvYTFcblx0IgorCQkibW92ZWwgJTIsJS9kNlxuXHQiCisJCSJzdWJxbCAjMSwlL2Q2XG4iCisJCSIxOlx0bW92ZXcgJS9hMEAsJS9kMFxuXHQiCisJCSJyb2x3ICAjOCwlL2QwXG5cdCIKKwkJIm1vdmV3ICUvZDAsJS9hMUArXG5cdCIKKwkJImRicmEgJS9kNiwxYiIKKwkJOgorCQk6ICJnIiAocG9ydCksICJnIiAoYnVmKSwgImciIChucikKKwkJOiAiZDAiLCAiYTAiLCAiYTEiLCAiZDYiKTsKKyAgICBlbHNlCisJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkgICAgICAgKCJtb3ZlbCAlMCwlL2EwXG5cdCIKKwkJIm1vdmVsICUxLCUvYTFcblx0IgorCQkibW92ZWwgJTIsJS9kNlxuXHQiCisJCSJsc3JsICAjMywlL2Q2XG5cdCIKKwkJInN1YnFsICMxLCUvZDZcbiIKKwkJIjE6XHRtb3ZldyAlL2EwQCwlL2QwXG5cdCIKKwkJInJvbHcgICM4LCUvZDBcblx0IgorCQkibW92ZXcgJS9kMCwlL2ExQCtcblx0IgorCQkibW92ZXcgJS9hMEAsJS9kMFxuXHQiCisJCSJyb2x3ICAjOCwlL2QwXG5cdCIKKwkJIm1vdmV3ICUvZDAsJS9hMUArXG5cdCIKKwkJIm1vdmV3ICUvYTBALCUvZDBcblx0IgorCQkicm9sdyAgIzgsJS9kMFxuXHQiCisJCSJtb3ZldyAlL2QwLCUvYTFAK1xuXHQiCisJCSJtb3ZldyAlL2EwQCwlL2QwXG5cdCIKKwkJInJvbHcgICM4LCUvZDBcblx0IgorCQkibW92ZXcgJS9kMCwlL2ExQCtcblx0IgorCQkibW92ZXcgJS9hMEAsJS9kMFxuXHQiCisJCSJyb2x3ICAjOCwlL2QwXG5cdCIKKwkJIm1vdmV3ICUvZDAsJS9hMUArXG5cdCIKKwkJIm1vdmV3ICUvYTBALCUvZDBcblx0IgorCQkicm9sdyAgIzgsJS9kMFxuXHQiCisJCSJtb3ZldyAlL2QwLCUvYTFAK1xuXHQiCisJCSJtb3ZldyAlL2EwQCwlL2QwXG5cdCIKKwkJInJvbHcgICM4LCUvZDBcblx0IgorCQkibW92ZXcgJS9kMCwlL2ExQCtcblx0IgorCQkibW92ZXcgJS9hMEAsJS9kMFxuXHQiCisJCSJyb2x3ICAjOCwlL2QwXG5cdCIKKwkJIm1vdmV3ICUvZDAsJS9hMUArXG5cdCIKKwkJImRicmEgJS9kNiwxYiIKKyAgICAgICAgICAgICAgICA6CisJCTogImciIChwb3J0KSwgImciIChidWYpLCAiZyIgKG5yKQorCQk6ICJkMCIsICJhMCIsICJhMSIsICJkNiIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmF3X291dHN3X3N3YXB3KHZvbGF0aWxlIHUxNiAqcG9ydCwgY29uc3QgdTE2ICpidWYsCisJCQkJICAgdW5zaWduZWQgaW50IG5yKQoreworICAgIGlmICgobnIpICUgOCkKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAgICAoIm1vdmVsICUwLCUvYTBcblx0IgorCQkibW92ZWwgJTEsJS9hMVxuXHQiCisJCSJtb3ZlbCAlMiwlL2Q2XG5cdCIKKwkJInN1YnFsICMxLCUvZDZcbiIKKwkJIjE6XHRtb3ZldyAlL2ExQCssJS9kMFxuXHQiCisJCSJyb2x3ICAjOCwlL2QwXG5cdCIKKwkJIm1vdmV3ICUvZDAsJS9hMEBcblx0IgorCQkiZGJyYSAlL2Q2LDFiIgorICAgICAgICAgICAgICAgIDoKKwkJOiAiZyIgKHBvcnQpLCAiZyIgKGJ1ZiksICJnIiAobnIpCisJCTogImQwIiwgImEwIiwgImExIiwgImQ2Iik7CisgICAgZWxzZQorCV9fYXNtX18gX192b2xhdGlsZV9fCisJICAgICAgICgibW92ZWwgJTAsJS9hMFxuXHQiCisJCSJtb3ZlbCAlMSwlL2ExXG5cdCIKKwkJIm1vdmVsICUyLCUvZDZcblx0IgorCQkibHNybCAgIzMsJS9kNlxuXHQiCisJCSJzdWJxbCAjMSwlL2Q2XG4iCisJCSIxOlx0bW92ZXcgJS9hMUArLCUvZDBcblx0IgorCQkicm9sdyAgIzgsJS9kMFxuXHQiCisJCSJtb3ZldyAlL2QwLCUvYTBAXG5cdCIKKwkJIm1vdmV3ICUvYTFAKywlL2QwXG5cdCIKKwkJInJvbHcgICM4LCUvZDBcblx0IgorCQkibW92ZXcgJS9kMCwlL2EwQFxuXHQiCisJCSJtb3ZldyAlL2ExQCssJS9kMFxuXHQiCisJCSJyb2x3ICAjOCwlL2QwXG5cdCIKKwkJIm1vdmV3ICUvZDAsJS9hMEBcblx0IgorCQkibW92ZXcgJS9hMUArLCUvZDBcblx0IgorCQkicm9sdyAgIzgsJS9kMFxuXHQiCisJCSJtb3ZldyAlL2QwLCUvYTBAXG5cdCIKKwkJIm1vdmV3ICUvYTFAKywlL2QwXG5cdCIKKwkJInJvbHcgICM4LCUvZDBcblx0IgorCQkibW92ZXcgJS9kMCwlL2EwQFxuXHQiCisJCSJtb3ZldyAlL2ExQCssJS9kMFxuXHQiCisJCSJyb2x3ICAjOCwlL2QwXG5cdCIKKwkJIm1vdmV3ICUvZDAsJS9hMEBcblx0IgorCQkibW92ZXcgJS9hMUArLCUvZDBcblx0IgorCQkicm9sdyAgIzgsJS9kMFxuXHQiCisJCSJtb3ZldyAlL2QwLCUvYTBAXG5cdCIKKwkJIm1vdmV3ICUvYTFAKywlL2QwXG5cdCIKKwkJInJvbHcgICM4LCUvZDBcblx0IgorCQkibW92ZXcgJS9kMCwlL2EwQFxuXHQiCisJCSJkYnJhICUvZDYsMWIiCisgICAgICAgICAgICAgICAgOgorCQk6ICJnIiAocG9ydCksICJnIiAoYnVmKSwgImciIChucikKKwkJOiAiZDAiLCAiYTAiLCAiYTEiLCAiZDYiKTsKK30KKworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX1JBV19JT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3Jlc291cmNlLmggYi9pbmNsdWRlL2FzbS1tNjhrL3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdkMzUwMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcmVzb3VyY2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX002OEtfUkVTT1VSQ0VfSAorI2RlZmluZSBfTTY4S19SRVNPVVJDRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9yZXNvdXJjZS5oPgorCisjZW5kaWYgLyogX002OEtfUkVTT1VSQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9ydGMuaCBiL2luY2x1ZGUvYXNtLW02OGsvcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE0MDZmYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcnRjLmgKQEAgLTAsMCArMSw3NiBAQAorLyogYXNtLW02OGsvcnRjLmgKKyAqCisgKiBDb3B5cmlnaHQgUmljaGFyZCBaaWRsaWNreQorICogaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgZ2VucnRjL3E0MHJ0YyBkcml2ZXIKKyAqLworLyogcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5LCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGlzIGNvZGUKKyAqIGluIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIgb3IgbGF0ZXIsCisgKiBhdCB5b3VyIG9wdGlvbi4KKyAqLworCisjaWZuZGVmIF9BU01fUlRDX0gKKyNkZWZpbmUgX0FTTV9SVENfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKworI2RlZmluZSBSVENfUElFIDB4NDAJCS8qIHBlcmlvZGljIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgUlRDX0FJRSAweDIwCQkvKiBhbGFybSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFJUQ19VSUUgMHgxMAkJLyogdXBkYXRlLWZpbmlzaGVkIGludGVycnVwdCBlbmFibGUgKi8KKworLyogc29tZSBkdW1teSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBSVENfQkFUVF9CQUQgMHgxMDAJLyogYmF0dGVyeSBiYWQgKi8KKyNkZWZpbmUgUlRDX1NRV0UgMHgwOAkJLyogZW5hYmxlIHNxdWFyZS13YXZlIG91dHB1dCAqLworI2RlZmluZSBSVENfRE1fQklOQVJZIDB4MDQJLyogYWxsIHRpbWUvZGF0ZSB2YWx1ZXMgYXJlIEJDRCBpZiBjbGVhciAqLworI2RlZmluZSBSVENfMjRIIDB4MDIJCS8qIDI0IGhvdXIgbW9kZSAtIGVsc2UgaG91cnMgYml0IDcgbWVhbnMgcG0gKi8KKyNkZWZpbmUgUlRDX0RTVF9FTiAweDAxCSAgICAgICAgLyogYXV0byBzd2l0Y2ggRFNUIC0gd29ya3MgZi4gVVNBIG9ubHkgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSkKK3sKKwkvKgorCSAqIE9ubHkgdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZnJvbSB0aGUgUlRDIGFyZSBzZXQuIFdlIGxlYXZlCisJICogdG1fd2RheSwgdG1feWRheSBhbmQgdG1faXNkc3QgdW50b3VjaGVkLiBFdmVuIHRob3VnaCB0aGUKKwkgKiBSVEMgaGFzIFJUQ19EQVlfT0ZfV0VFSywgd2UgaWdub3JlIGl0LCBhcyBpdCBpcyBvbmx5IHVwZGF0ZWQKKwkgKiBieSB0aGUgUlRDIHdoZW4gaW5pdGlhbGx5IHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLgorCSAqLworCW1hY2hfaHdjbGsoMCwgdGltZSk7CisJcmV0dXJuIFJUQ18yNEg7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJcmV0dXJuIG1hY2hfaHdjbGsoMSwgdGltZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9ydGNfc3Modm9pZCkKK3sKKwlpZiAobWFjaF9nZXRfc3MpCisJCXJldHVybiBtYWNoX2dldF9zcygpOworCWVsc2V7CisJCXN0cnVjdCBydGNfdGltZSBoOworCisJCWdldF9ydGNfdGltZSgmaCk7CisJCXJldHVybiBoLnRtX3NlYzsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9ydGNfcGxsKHN0cnVjdCBydGNfcGxsX2luZm8gKnBsbCkKK3sKKwlpZiAobWFjaF9nZXRfcnRjX3BsbCkKKwkJcmV0dXJuIG1hY2hfZ2V0X3J0Y19wbGwocGxsKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorc3RhdGljIGlubGluZSBpbnQgc2V0X3J0Y19wbGwoc3RydWN0IHJ0Y19wbGxfaW5mbyAqcGxsKQoreworCWlmIChtYWNoX3NldF9ydGNfcGxsKQorCQlyZXR1cm4gbWFjaF9zZXRfcnRjX3BsbChwbGwpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7Cit9CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9fUlRDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc2J1cy5oIGIvaW5jbHVkZS9hc20tbTY4ay9zYnVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyNWMwMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2J1cy5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBzb21lIHNidXMgc3RydWN0dXJlcyBhbmQgbWFjcm9zIHRvIG1ha2UgdXNhZ2Ugb2Ygc2J1cyBkcml2ZXJzIHBvc3NpYmxlCisgKi8KKworI2lmbmRlZiBfX002OEtfU0JVU19ICisjZGVmaW5lIF9fTTY4S19TQlVTX0gKKworc3RydWN0IHNidXNfZGV2IHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgd2hpY2hfaW87CisJCXVuc2lnbmVkIGludCBwaHlzX2FkZHI7CisJfSByZWdfYWRkcnNbMV07Cit9OworCitleHRlcm4gdm9pZCAqc3BhcmNfYWxsb2NfaW8gKHUzMiwgdm9pZCAqLCBpbnQsIGNoYXIgKiwgdTMyLCBpbnQpOworI2RlZmluZSBzcGFyY19hbGxvY19pbyhhLGIsYyxkLGUsZikJKGEpCisKKyNkZWZpbmUgQVJDSF9TVU40ICAwCisKKy8qIHNidXMgSU8gZnVuY3Rpb25zIHN0b2xlbiBmcm9tIGluY2x1ZGUvYXNtLXNwYXJjL2lvLmggZm9yIHRoZSBzZXJpYWwgZHJpdmVyICovCisvKiBObyBTQlVTIG9uIHRoZSBTdW4zLCBrbHVkZ2UgLS0gc2FtICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfc2J1c193cml0ZWIodW5zaWduZWQgY2hhciB2YWwsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilhZGRyID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgX3NidXNfcmVhZGIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3NidXNfd3JpdGVsKHVuc2lnbmVkIGxvbmcgdmFsLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopYWRkciA9IHZhbDsKKworfQorCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgX3NidXNfcmVhZGwodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilhZGRyOworfQorCisKKyNkZWZpbmUgc2J1c19yZWFkYihhKSBfc2J1c19yZWFkYigodW5zaWduZWQgbG9uZylhKQorI2RlZmluZSBzYnVzX3dyaXRlYih2LCBhKSBfc2J1c193cml0ZWIodiwgKHVuc2lnbmVkIGxvbmcpYSkKKyNkZWZpbmUgc2J1c19yZWFkbChhKSBfc2J1c19yZWFkbCgodW5zaWduZWQgbG9uZylhKQorI2RlZmluZSBzYnVzX3dyaXRlbCh2LCBhKSBfc2J1c193cml0ZWwodiwgKHVuc2lnbmVkIGxvbmcpYSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2FzbS1tNjhrL3NjYXR0ZXJsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjOWI1YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2NhdHRlcmxpc3QuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9NNjhLX1NDQVRURVJMSVNUX0gKKyNkZWZpbmUgX002OEtfU0NBVFRFUkxJU1RfSAorCitzdHJ1Y3Qgc2NhdHRlcmxpc3QgeworCS8qIFRoZXNlIHR3byBhcmUgb25seSB2YWxpZCBpZiBBRERSRVNTIG1lbWJlciBvZiB0aGlzCisJICogc3RydWN0IGlzIE5VTEwuCisJICovCisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKworCXVuc2lnbmVkIGludCBsZW5ndGg7CisKKwlfX3UzMiBkdm1hX2FkZHJlc3M7IC8qIEEgcGxhY2UgdG8gaGFuZyBob3N0LXNwZWNpZmljIGFkZHJlc3NlcyBhdC4gKi8KK307CisKKy8qIFRoaXMgaXMgYm9ndXMgYW5kIHNob3VsZCBnbyBhd2F5LiAqLworI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAoMHgwMGZmZmZmZikKKworI2VuZGlmIC8qICEoX002OEtfU0NBVFRFUkxJU1RfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjQ5NjdlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zZWN0aW9ucy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNX002OEtfU0VDVElPTlNfSAorI2RlZmluZSBfQVNNX002OEtfU0VDVElPTlNfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KKworI2VuZGlmIC8qIF9BU01fTTY4S19TRUNUSU9OU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3NlZ21lbnQuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2VnbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMGIyZDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NlZ21lbnQuaApAQCAtMCwwICsxLDU3IEBACisjaWZuZGVmIF9NNjhLX1NFR01FTlRfSAorI2RlZmluZSBfTTY4S19TRUdNRU5UX0gKKworLyogZGVmaW5lIGNvbnN0YW50cyAqLworLyogQWRkcmVzcyBzcGFjZXMgKEZDMC1GQzIpICovCisjZGVmaW5lIFVTRVJfREFUQSAgICAgKDEpCisjaWZuZGVmIF9fVVNFUl9EUworI2RlZmluZSBfX1VTRVJfRFMgICAgIChVU0VSX0RBVEEpCisjZW5kaWYKKyNkZWZpbmUgVVNFUl9QUk9HUkFNICAoMikKKyNkZWZpbmUgU1VQRVJfREFUQSAgICAoNSkKKyNpZm5kZWYgX19LRVJORUxfRFMKKyNkZWZpbmUgX19LRVJORUxfRFMgICAoU1VQRVJfREFUQSkKKyNlbmRpZgorI2RlZmluZSBTVVBFUl9QUk9HUkFNICg2KQorI2RlZmluZSBDUFVfU1BBQ0UgICAgICg3KQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzZWc7Cit9IG1tX3NlZ21lbnRfdDsKKworI2RlZmluZSBNQUtFX01NX1NFRyhzKQkoKG1tX3NlZ21lbnRfdCkgeyAocykgfSkKKyNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoX19VU0VSX0RTKQorI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoX19LRVJORUxfRFMpCisKKy8qCisgKiBHZXQvc2V0IHRoZSBTRkMvREZDIHJlZ2lzdGVycyBmb3IgTU9WRVMgaW5zdHJ1Y3Rpb25zCisgKi8KKworc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2ZzKHZvaWQpCit7CisJbW1fc2VnbWVudF90IF92OworCV9fYXNtX18gKCJtb3ZlYyAlL2RmYywlMCI6Ij1yIiAoX3Yuc2VnKTopOworCisJcmV0dXJuIF92OworfQorCitzdGF0aWMgaW5saW5lIG1tX3NlZ21lbnRfdCBnZXRfZHModm9pZCkKK3sKKyAgICAvKiByZXR1cm4gdGhlIHN1cGVydmlzb3IgZGF0YSBzcGFjZSBjb2RlICovCisgICAgcmV0dXJuIEtFUk5FTF9EUzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9mcyhtbV9zZWdtZW50X3QgdmFsKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92ZWMgJTAsJS9zZmNcblx0IgorCQkJICAgICAgIm1vdmVjICUwLCUvZGZjXG5cdCIKKwkJCSAgICAgIDogLyogbm8gb3V0cHV0cyAqLyA6ICJyIiAodmFsLnNlZykgOiAibWVtb3J5Iik7Cit9CisKKyNkZWZpbmUgc2VnbWVudF9lcShhLGIpCSgoYSkuc2VnID09IChiKS5zZWcpCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9NNjhLX1NFR01FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zZW1hcGhvcmUtaGVscGVyLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NlbWFwaG9yZS1oZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTE2YTY0MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2VtYXBob3JlLWhlbHBlci5oCkBAIC0wLDAgKzEsMTQzIEBACisjaWZuZGVmIF9NNjhLX1NFTUFQSE9SRV9IRUxQRVJfSAorI2RlZmluZSBfTTY4S19TRU1BUEhPUkVfSEVMUEVSX0gKKworLyoKKyAqIFNNUC0gYW5kIGludGVycnVwdC1zYWZlIHNlbWFwaG9yZXMgaGVscGVyIGZ1bmN0aW9ucy4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKKyAqCisgKiBtNjhrIHZlcnNpb24gYnkgQW5kcmVhcyBTY2h3YWIKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKworLyoKKyAqIFRoZXNlIHR3byBfbXVzdF8gZXhlY3V0ZSBhdG9taWNhbGx5IHdydCBlYWNoIG90aGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgd2FrZV9vbmVfbW9yZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCWF0b21pY19pbmMoJnNlbS0+d2FraW5nKTsKK30KKworI2lmbmRlZiBDT05GSUdfUk1XX0lOU05TCitleHRlcm4gc3BpbmxvY2tfdCBzZW1hcGhvcmVfd2FrZV9sb2NrOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IHdha2luZ19ub25femVybyhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJaW50IHJldDsKKyNpZm5kZWYgQ09ORklHX1JNV19JTlNOUworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworCXJldCA9IDA7CisJaWYgKGF0b21pY19yZWFkKCZzZW0tPndha2luZykgPiAwKSB7CisJCWF0b21pY19kZWMoJnNlbS0+d2FraW5nKTsKKwkJcmV0ID0gMTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOworI2Vsc2UKKwlpbnQgdG1wMSwgdG1wMjsKKworCV9fYXNtX18gX192b2xhdGlsZV9fCisJICAoIjE6CW1vdmVsCSUxLCUyXG4iCisJICAgIiAgICBqbGUJMmZcbiIKKwkgICAiCXN1YnFsCSMxLCUyXG4iCisJICAgIgljYXNsCSUxLCUyLCUzXG4iCisJICAgIglqbmUJMWJcbiIKKwkgICAiCW1vdmVxCSMxLCUwXG4iCisJICAgIjI6IgorCSAgIDogIj1kIiAocmV0KSwgIj1kIiAodG1wMSksICI9ZCIgKHRtcDIpCisJICAgOiAibSIgKHNlbS0+d2FraW5nKSwgIjAiICgwKSwgIjEiIChzZW0tPndha2luZykpOworI2VuZGlmCisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogd2FraW5nX25vbl96ZXJvX2ludGVycnVwdGlibGU6CisgKgkxCWdvdCB0aGUgbG9jaworICoJMAlnbyB0byBzbGVlcAorICoJLUVJTlRSCWludGVycnVwdGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwKKwkJCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWludCByZXQ7CisjaWZuZGVmIENPTkZJR19STVdfSU5TTlMKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSAwOworCWlmIChhdG9taWNfcmVhZCgmc2VtLT53YWtpbmcpID4gMCkgeworCQlhdG9taWNfZGVjKCZzZW0tPndha2luZyk7CisJCXJldCA9IDE7CisJfSBlbHNlIGlmIChzaWduYWxfcGVuZGluZyh0c2spKSB7CisJCWF0b21pY19pbmMoJnNlbS0+Y291bnQpOworCQlyZXQgPSAtRUlOVFI7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKyNlbHNlCisJaW50IHRtcDEsIHRtcDI7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgKCIxOgltb3ZlbAklMSwlMlxuIgorCSAgICIJamxlCTJmXG4iCisJICAgIglzdWJxbAkjMSwlMlxuIgorCSAgICIJY2FzbAklMSwlMiwlM1xuIgorCSAgICIJam5lCTFiXG4iCisJICAgIgltb3ZlcQkjMSwlMFxuIgorCSAgICIJanJhCSVhNFxuIgorCSAgICIyOiIKKwkgICA6ICI9ZCIgKHJldCksICI9ZCIgKHRtcDEpLCAiPWQiICh0bXAyKQorCSAgIDogIm0iIChzZW0tPndha2luZyksICJpIiAoJiZuZXh0KSwgIjAiICgwKSwgIjEiIChzZW0tPndha2luZykpOworCWlmIChzaWduYWxfcGVuZGluZyh0c2spKSB7CisJCWF0b21pY19pbmMoJnNlbS0+Y291bnQpOworCQlyZXQgPSAtRUlOVFI7CisJfQorbmV4dDoKKyNlbmRpZgorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHdha2luZ19ub25femVyb190cnlsb2NrOgorICoJMQlmYWlsZWQgdG8gbG9jaworICoJMAlnb3QgdGhlIGxvY2sKKyAqLworc3RhdGljIGlubGluZSBpbnQgd2FraW5nX25vbl96ZXJvX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqc2VtKQoreworCWludCByZXQ7CisjaWZuZGVmIENPTkZJR19STVdfSU5TTlMKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSAxOworCWlmIChhdG9taWNfcmVhZCgmc2VtLT53YWtpbmcpID4gMCkgeworCQlhdG9taWNfZGVjKCZzZW0tPndha2luZyk7CisJCXJldCA9IDA7CisJfSBlbHNlCisJCWF0b21pY19pbmMoJnNlbS0+Y291bnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKKyNlbHNlCisJaW50IHRtcDEsIHRtcDI7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgKCIxOgltb3ZlbAklMSwlMlxuIgorCSAgICIgICAgamxlCTJmXG4iCisJICAgIglzdWJxbAkjMSwlMlxuIgorCSAgICIJY2FzbAklMSwlMiwlM1xuIgorCSAgICIJam5lCTFiXG4iCisJICAgIgltb3ZlcQkjMCwlMFxuIgorCSAgICIyOiIKKwkgICA6ICI9ZCIgKHJldCksICI9ZCIgKHRtcDEpLCAiPWQiICh0bXAyKQorCSAgIDogIm0iIChzZW0tPndha2luZyksICIwIiAoMSksICIxIiAoc2VtLT53YWtpbmcpKTsKKwlpZiAocmV0KQorCQlhdG9taWNfaW5jKCZzZW0tPmNvdW50KTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2VtYXBob3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5NGNmMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2VtYXBob3JlLmgKQEAgLTAsMCArMSwxNjcgQEAKKyNpZm5kZWYgX002OEtfU0VNQVBIT1JFX0gKKyNkZWZpbmUgX002OEtfU0VNQVBIT1JFX0gKKworI2RlZmluZSBSV19MT0NLX0JJQVMJCSAweDAxMDAwMDAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKy8qCisgKiBJbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzLi4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKKyAqCisgKiBtNjhrIHZlcnNpb24gYnkgQW5kcmVhcyBTY2h3YWIKKyAqLworCisKK3N0cnVjdCBzZW1hcGhvcmUgeworCWF0b21pY190IGNvdW50OworCWF0b21pY190IHdha2luZzsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworfTsKKworI2RlZmluZSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLCBuKQkJCQlcCit7CQkJCQkJCQkJXAorCS5jb3VudAkJPSBBVE9NSUNfSU5JVChuKSwJCQkJXAorCS53YWtpbmcJCT0gQVRPTUlDX0lOSVQoMCksCQkJCVwKKwkud2FpdAkJPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigobmFtZSkud2FpdCkJXAorfQorCisjZGVmaW5lIF9fTVVURVhfSU5JVElBTElaRVIobmFtZSkgXAorCV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsMSkKKworI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgXAorCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCisKKyNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0KHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKK3sKKwkqc2VtID0gKHN0cnVjdCBzZW1hcGhvcmUpX19TRU1BUEhPUkVfSU5JVElBTElaRVIoKnNlbSwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzZW1hX2luaXQoc2VtLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJc2VtYV9pbml0KHNlbSwgMCk7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBfX2Rvd25fZmFpbGVkKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOworYXNtbGlua2FnZSBpbnQgIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZSh2b2lkICAvKiBwYXJhbXMgaW4gcmVnaXN0ZXJzICovKTsKK2FzbWxpbmthZ2UgaW50ICBfX2Rvd25fZmFpbGVkX3RyeWxvY2sodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7Cithc21saW5rYWdlIHZvaWQgX191cF93YWtldXAodm9pZCAvKiBzcGVjaWFsIHJlZ2lzdGVyIGNhbGxpbmcgY29udmVudGlvbiAqLyk7CisKK2FzbWxpbmthZ2Ugdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIGludCAgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Cithc21saW5rYWdlIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKKworLyoKKyAqIFRoaXMgaXMgdWdseSwgYnV0IHdlIHdhbnQgdGhlIGRlZmF1bHQgY2FzZSB0byBmYWxsIHRocm91Z2guCisgKiAiZG93bl9mYWlsZWQiIGlzIGEgc3BlY2lhbCBhc20gaGFuZGxlciB0aGF0IGNhbGxzIHRoZSBDCisgKiByb3V0aW5lIHRoYXQgYWN0dWFsbHkgd2FpdHMuIFNlZSBhcmNoL202OGsvbGliL3NlbWFwaG9yZS5TCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlyZWdpc3RlciBzdHJ1Y3Qgc2VtYXBob3JlICpzZW0xIF9fYXNtX18gKCIlYTEiKSA9IHNlbTsKKworCW1pZ2h0X3NsZWVwKCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJ8IGF0b21pYyBkb3duIG9wZXJhdGlvblxuXHQiCisJCSJzdWJxbCAjMSwlMEBcblx0IgorCQkiam1pIDJmXG5cdCIKKwkJIjE6XG4iCisJCUxPQ0tfU0VDVElPTl9TVEFSVCgiLmV2ZW5cblx0IikKKwkJIjI6XHRwZWEgMWJcblx0IgorCQkiamJyYSBfX2Rvd25fZmFpbGVkXG4iCisJCUxPQ0tfU0VDVElPTl9FTkQKKwkJOiAvKiBubyBvdXRwdXRzICovCisJCTogImEiIChzZW0xKQorCQk6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlyZWdpc3RlciBzdHJ1Y3Qgc2VtYXBob3JlICpzZW0xIF9fYXNtX18gKCIlYTEiKSA9IHNlbTsKKwlyZWdpc3RlciBpbnQgcmVzdWx0IF9fYXNtX18gKCIlZDAiKTsKKworCW1pZ2h0X3NsZWVwKCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJ8IGF0b21pYyBpbnRlcnJ1cHRpYmxlIGRvd24gb3BlcmF0aW9uXG5cdCIKKwkJInN1YnFsICMxLCUxQFxuXHQiCisJCSJqbWkgMmZcblx0IgorCQkiY2xybCAlMFxuIgorCQkiMTpcbiIKKwkJTE9DS19TRUNUSU9OX1NUQVJUKCIuZXZlblxuXHQiKQorCQkiMjpcdHBlYSAxYlxuXHQiCisJCSJqYnJhIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZVxuIgorCQlMT0NLX1NFQ1RJT05fRU5ECisJCTogIj1kIiAocmVzdWx0KQorCQk6ICJhIiAoc2VtMSkKKwkJOiAibWVtb3J5Iik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlyZWdpc3RlciBzdHJ1Y3Qgc2VtYXBob3JlICpzZW0xIF9fYXNtX18gKCIlYTEiKSA9IHNlbTsKKwlyZWdpc3RlciBpbnQgcmVzdWx0IF9fYXNtX18gKCIlZDAiKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkifCBhdG9taWMgZG93biB0cnlsb2NrIG9wZXJhdGlvblxuXHQiCisJCSJzdWJxbCAjMSwlMUBcblx0IgorCQkiam1pIDJmXG5cdCIKKwkJImNscmwgJTBcbiIKKwkJIjE6XG4iCisJCUxPQ0tfU0VDVElPTl9TVEFSVCgiLmV2ZW5cblx0IikKKwkJIjI6XHRwZWEgMWJcblx0IgorCQkiamJyYSBfX2Rvd25fZmFpbGVkX3RyeWxvY2tcbiIKKwkJTE9DS19TRUNUSU9OX0VORAorCQk6ICI9ZCIgKHJlc3VsdCkKKwkJOiAiYSIgKHNlbTEpCisJCTogIm1lbW9yeSIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBOb3RlISBUaGlzIGlzIHN1YnRsZS4gV2UganVtcCB0byB3YWtlIHBlb3BsZSB1cCBvbmx5IGlmCisgKiB0aGUgc2VtYXBob3JlIHdhcyBuZWdhdGl2ZSAoPT0gc29tZWJvZHkgd2FzIHdhaXRpbmcgb24gaXQpLgorICogVGhlIGRlZmF1bHQgY2FzZSAobm8gY29udGVudGlvbikgd2lsbCByZXN1bHQgaW4gTk8KKyAqIGp1bXBzIGZvciBib3RoIGRvd24oKSBhbmQgdXAoKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlyZWdpc3RlciBzdHJ1Y3Qgc2VtYXBob3JlICpzZW0xIF9fYXNtX18gKCIlYTEiKSA9IHNlbTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkifCBhdG9taWMgdXAgb3BlcmF0aW9uXG5cdCIKKwkJImFkZHFsICMxLCUwQFxuXHQiCisJCSJqbGUgMmZcbiIKKwkJIjE6XG4iCisJCUxPQ0tfU0VDVElPTl9TVEFSVCgiLmV2ZW5cblx0IikKKwkJIjI6XHQiCisJCSJwZWEgMWJcblx0IgorCQkiamJyYSBfX3VwX3dha2V1cFxuIgorCQlMT0NLX1NFQ1RJT05fRU5ECisJCTogLyogbm8gb3V0cHV0cyAqLworCQk6ICJhIiAoc2VtMSkKKwkJOiAibWVtb3J5Iik7Cit9CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3NlbWJ1Zi5oIGIvaW5jbHVkZS9hc20tbTY4ay9zZW1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzA4MDUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zZW1idWYuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9NNjhLX1NFTUJVRl9ICisjZGVmaW5lIF9NNjhLX1NFTUJVRl9ICisKKy8qCisgKiBUaGUgc2VtaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIG02OGsgYXJjaGl0ZWN0dXJlLgorICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCisgKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAqCisgKiBQYWQgc3BhY2UgaXMgbGVmdCBmb3I6CisgKiAtIDY0LWJpdCB0aW1lX3QgdG8gc29sdmUgeTIwMzggcHJvYmxlbQorICogLSAyIG1pc2NlbGxhbmVvdXMgMzItYml0IHZhbHVlcworICovCisKK3N0cnVjdCBzZW1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybSBzZW1fcGVybTsJCS8qIHBlcm1pc3Npb25zIC4uIHNlZSBpcGMuaCAqLworCV9fa2VybmVsX3RpbWVfdAlzZW1fb3RpbWU7CQkvKiBsYXN0IHNlbW9wIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKKwlfX2tlcm5lbF90aW1lX3QJc2VtX2N0aW1lOwkJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCXVuc2lnbmVkIGxvbmcJc2VtX25zZW1zOwkJLyogbm8uIG9mIHNlbWFwaG9yZXMgaW4gYXJyYXkgKi8KKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nCV9fdW51c2VkNDsKK307CisKKyNlbmRpZiAvKiBfTTY4S19TRU1CVUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY1YmNkYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2VyaWFsLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLW02OGsvc2VyaWFsLmgKKyAqCisgKiBjdXJyZW50bHkgdGhpcyBzZWVtcyB1c2VmdWwgb25seSBmb3IgYSBRNDAsCisgKiBpdCdzIGFuIGFsbW9zdCBleGFjdCBjb3B5IG9mIC4uL2FzbS1hbHBoYS9zZXJpYWwuaAorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAxLjg0MzIgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCisgKgorICogSXQnZCBiZSBuaWNlIGlmIHNvbWVvbmUgYnVpbHQgYSBzZXJpYWwgY2FyZCB3aXRoIGEgMjQuNTc2IE1IegorICogY2xvY2ssIHNpbmNlIHRoZSAxNjU1MEEgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyBhIHRvcCBzcGVlZCBvZiAxLjUKKyAqIG1lZ2FiaXRzL3NlY29uZDsgYnV0IHRoaXMgcmVxdWlyZXMgdGhlIGZhc3RlciBjbG9jay4KKyAqLworI2RlZmluZSBCQVNFX0JBVUQgKCAxODQzMjAwIC8gMTYgKQorCisvKiBTdGFuZGFyZCBDT00gZmxhZ3MgKGV4Y2VwdCBmb3IgQ09NNCwgYmVjYXVzZSBvZiB0aGUgODUxNCBwcm9ibGVtKSAqLworI2lmZGVmIENPTkZJR19TRVJJQUxfREVURUNUX0lSUQorI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUIHwgQVNZTkNfQVVUT19JUlEpCisjZGVmaW5lIFNURF9DT000X0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfQVVUT19JUlEpCisjZWxzZQorI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUKQorI2RlZmluZSBTVERfQ09NNF9GTEFHUyBBU1lOQ19CT09UX0FVVE9DT05GCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TRVJJQUxfTUFOWV9QT1JUUworI2RlZmluZSBGT1VSUE9SVF9GTEFHUyBBU1lOQ19GT1VSUE9SVAorI2RlZmluZSBBQ0NFTlRfRkxBR1MgMAorI2RlZmluZSBCT0NBX0ZMQUdTIDAKKyNlbmRpZgorCisjZGVmaW5lIFNURF9TRVJJQUxfUE9SVF9ERUZOUwkJCVwKKwkvKiBVQVJUIENMSyAgIFBPUlQgSVJRICAgICBGTEFHUyAgICAgICAgKi8JCQlcCisJeyAwLCBCQVNFX0JBVUQsIDB4M0Y4LCA0LCBTVERfQ09NX0ZMQUdTIH0sCS8qIHR0eVMwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgyRjgsIDMsIFNURF9DT01fRkxBR1MgfSwJLyogdHR5UzEgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDNFOCwgNCwgU1REX0NPTV9GTEFHUyB9LAkvKiB0dHlTMiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkU4LCAzLCBTVERfQ09NNF9GTEFHUyB9LAkvKiB0dHlTMyAqLworCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX01BTllfUE9SVFMKKyNkZWZpbmUgRVhUUkFfU0VSSUFMX1BPUlRfREVGTlMJCQlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MUEwLCA5LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTNCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MUE4LCA5LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTNSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MUIwLCA5LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTNiAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MUI4LCA5LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTNyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkEwLCA1LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTOCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkE4LCA1LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTOSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MkIwLCA1LCBGT1VSUE9SVF9GTEFHUyB9LAkvKiB0dHlTMTAgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDJCOCwgNSwgRk9VUlBPUlRfRkxBR1MgfSwJLyogdHR5UzExICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgzMzAsIDQsIEFDQ0VOVF9GTEFHUyB9LAkvKiB0dHlTMTIgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDMzOCwgNCwgQUNDRU5UX0ZMQUdTIH0sCS8qIHR0eVMxMyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MDAwLCAwLCAwIH0sCS8qIHR0eVMxNCAoc3BhcmUpICovCQlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MDAwLCAwLCAwIH0sCS8qIHR0eVMxNSAoc3BhcmUpICovCQlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTAwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMTYgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDEwOCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzE3ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMTAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMxOCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTE4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMTkgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDEyMCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzIwICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxMjgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyMSAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTMwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjIgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDEzOCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzIzICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNDAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyNCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTQ4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjUgKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE1MCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzI2ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNTgsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMyNyAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTYwLCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMjggKi8JXAorCXsgMCwgQkFTRV9CQVVELCAweDE2OCwgMTIsIEJPQ0FfRkxBR1MgfSwJLyogdHR5UzI5ICovCVwKKwl7IDAsIEJBU0VfQkFVRCwgMHgxNzAsIDEyLCBCT0NBX0ZMQUdTIH0sCS8qIHR0eVMzMCAqLwlcCisJeyAwLCBCQVNFX0JBVUQsIDB4MTc4LCAxMiwgQk9DQV9GTEFHUyB9LAkvKiB0dHlTMzEgKi8KKyNlbHNlCisjZGVmaW5lIEVYVFJBX1NFUklBTF9QT1JUX0RFRk5TCisjZW5kaWYKKworI2RlZmluZSBTRVJJQUxfUE9SVF9ERk5TCQlcCisJU1REX1NFUklBTF9QT1JUX0RFRk5TCQlcCisJRVhUUkFfU0VSSUFMX1BPUlRfREVGTlMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc2V0dXAuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTIzNDkyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zZXR1cC5oCkBAIC0wLDAgKzEsMzc1IEBACisvKgorKiogYXNtL3NldHVwLmggLS0gRGVmaW5pdGlvbiBvZiB0aGUgTGludXgvbTY4ayBzZXR1cCBpbmZvcm1hdGlvbgorKioKKyoqIENvcHlyaWdodCAxOTkyIGJ5IEdyZWcgSGFycAorKioKKyoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisqKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKiogZm9yIG1vcmUgZGV0YWlscy4KKyoqCisqKiBDcmVhdGVkIDA5LzI5LzkyIGJ5IEdyZWcgSGFycAorKioKKyoqIDUvMi85NCBSb21hbiBIb2RlazoKKyoqICAgQWRkZWQgYmlfYXRhcmkgcGFydCBvZiB0aGUgbWFjaGluZSBkZXBlbmRlbnQgdW5pb24gYmlfdW47IGZvciBub3cgaXQKKyoqICAgY29udGFpbnMganVzdCBhIG1vZGVsIGZpZWxkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gVFQgYW5kIEZhbGNvbi4KKyoqIDI2LzcvOTYgUm9tYW4gWmlwcGVsOgorKiogICBSZW5hbWVkIHRvIHNldHVwLmg7IGFkZGVkIHNvbWUgdXNlZnVsIG1hY3JvcyB0byBhbGxvdyBnY2Mgc29tZQorKiogICBvcHRpbWl6YXRpb25zIGlmIHBvc3NpYmxlLgorKiogNS8xMC85NiBHZWVydCBVeXR0ZXJob2V2ZW46CisqKiAgIFJlZGVzaWduIG9mIHRoZSBib290IGluZm9ybWF0aW9uIHN0cnVjdHVyZTsgbW92ZWQgYm9vdCBpbmZvcm1hdGlvbgorKiogICBzdHJ1Y3R1cmUgdG8gYm9vdGluZm8uaAorKi8KKworI2lmbmRlZiBfTTY4S19TRVRVUF9ICisjZGVmaW5lIF9NNjhLX1NFVFVQX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisKKyAgICAvKgorICAgICAqICBMaW51eC9tNjhrIEFyY2hpdGVjdHVyZXMKKyAgICAgKi8KKworI2RlZmluZSBNQUNIX0FNSUdBICAgIDEKKyNkZWZpbmUgTUFDSF9BVEFSSSAgICAyCisjZGVmaW5lIE1BQ0hfTUFDICAgICAgMworI2RlZmluZSBNQUNIX0FQT0xMTyAgIDQKKyNkZWZpbmUgTUFDSF9TVU4zICAgICA1CisjZGVmaW5lIE1BQ0hfTVZNRTE0NyAgNgorI2RlZmluZSBNQUNIX01WTUUxNnggIDcKKyNkZWZpbmUgTUFDSF9CVk1FNjAwMCA4CisjZGVmaW5lIE1BQ0hfSFAzMDAgICAgOQorI2RlZmluZSBNQUNIX1E0MCAgICAgMTAKKyNkZWZpbmUgTUFDSF9TVU4zWCAgIDExCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX21hY2h0eXBlOworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2lmICFkZWZpbmVkKENPTkZJR19BTUlHQSkKKyMgIGRlZmluZSBNQUNIX0lTX0FNSUdBICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVRBUkkpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSBcCisJfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX0FNSUdBIChtNjhrX21hY2h0eXBlID09IE1BQ0hfQU1JR0EpCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfQU1JR0FfT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfQU1JR0EgKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX0FNSUdBKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDT05GSUdfQVRBUkkpCisjICBkZWZpbmUgTUFDSF9JU19BVEFSSSAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgXAorCXx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCisjICBkZWZpbmUgTUFDSF9JU19BVEFSSSAobTY4a19tYWNodHlwZSA9PSBNQUNIX0FUQVJJKQorI2Vsc2UKKyMgIGRlZmluZSBNQUNIX0FUQVJJX09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX0FUQVJJICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9BVEFSSSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX01BQykKKyMgIGRlZmluZSBNQUNIX0lTX01BQyAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSBcCisJfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCisjICBkZWZpbmUgTUFDSF9JU19NQUMgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9NQUMpCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfTUFDX09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX01BQyAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfTUFDKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TVU4zKQorI2RlZmluZSBNQUNIX0lTX1NVTjMgKDEpCisjZGVmaW5lIE1BQ0hfU1VOM19PTkxZICgxKQorI2RlZmluZSBNQUNIX1RZUEUgKE1BQ0hfU1VOMykKKyNlbHNlCisjZGVmaW5lIE1BQ0hfSVNfU1VOMyAoMCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKENPTkZJR19BUE9MTE8pCisjICBkZWZpbmUgTUFDSF9JU19BUE9MTE8gKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAorCXx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfQVBPTExPIChtNjhrX21hY2h0eXBlID09IE1BQ0hfQVBPTExPKQorI2Vsc2UKKyMgIGRlZmluZSBNQUNIX0FQT0xMT19PTkxZCisjICBkZWZpbmUgTUFDSF9JU19BUE9MTE8gKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX0FQT0xMTykKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE0NyAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCisJfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpCisjICBkZWZpbmUgTUFDSF9JU19NVk1FMTQ3IChtNjhrX21hY2h0eXBlID09IE1BQ0hfTVZNRTE0NykKKyNlbHNlCisjICBkZWZpbmUgTUFDSF9NVk1FMTQ3X09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX01WTUUxNDcgKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX01WTUUxNDcpCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChDT05GSUdfTVZNRTE2eCkKKyMgIGRlZmluZSBNQUNIX0lTX01WTUUxNnggKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAorCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE2eCAobTY4a19tYWNodHlwZSA9PSBNQUNIX01WTUUxNngpCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfTVZNRTE2eF9PTkxZCisjICBkZWZpbmUgTUFDSF9JU19NVk1FMTZ4ICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9NVk1FMTZ4KQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoQ09ORklHX0JWTUU2MDAwKQorIyAgZGVmaW5lIE1BQ0hfSVNfQlZNRTYwMDAgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAorCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfQlZNRTYwMDAgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9CVk1FNjAwMCkKKyNlbHNlCisjICBkZWZpbmUgTUFDSF9CVk1FNjAwMF9PTkxZCisjICBkZWZpbmUgTUFDSF9JU19CVk1FNjAwMCAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfQlZNRTYwMDApCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChDT05GSUdfSFAzMDApCisjICBkZWZpbmUgTUFDSF9JU19IUDMwMCAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCisJfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSBcCisJfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfSFAzMDAgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9IUDMwMCkKKyNlbHNlCisjICBkZWZpbmUgTUFDSF9IUDMwMF9PTkxZCisjICBkZWZpbmUgTUFDSF9JU19IUDMwMCAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfSFAzMDApCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChDT05GSUdfUTQwKQorIyAgZGVmaW5lIE1BQ0hfSVNfUTQwICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgfHwgZGVmaW5lZChDT05GSUdfSFAzMDApICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX1E0MCAobTY4a19tYWNodHlwZSA9PSBNQUNIX1E0MCkKKyNlbHNlCisjICBkZWZpbmUgTUFDSF9RNDBfT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfUTQwICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9RNDApCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChDT05GSUdfU1VOM1gpCisjICBkZWZpbmUgTUFDSF9JU19TVU4zWCAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCisJfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApIHx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfUTQwKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfU1VOM1ggKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9TVU4zWCkKKyNlbHNlCisjICBkZWZpbmUgQ09ORklHX1NVTjNYX09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX1NVTjNYICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9TVU4zWCkKKyNlbmRpZgorCisjaWZuZGVmIE1BQ0hfVFlQRQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAobTY4a19tYWNodHlwZSkKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisKKyAgICAvKgorICAgICAqICBDUFUsIEZQVSBhbmQgTU1VIHR5cGVzCisgICAgICoKKyAgICAgKiAgTm90ZTogd2UgbWF5IHJlbHkgb24gdGhlIGZvbGxvd2luZyBlcXVhbGl0aWVzOgorICAgICAqCisgICAgICogICAgICBDUFVfNjgwMjAgPT0gTU1VXzY4ODUxCisgICAgICogICAgICBDUFVfNjgwMzAgPT0gTU1VXzY4MDMwCisgICAgICogICAgICBDUFVfNjgwNDAgPT0gRlBVXzY4MDQwID09IE1NVV82ODA0MAorICAgICAqICAgICAgQ1BVXzY4MDYwID09IEZQVV82ODA2MCA9PSBNTVVfNjgwNjAKKyAgICAgKi8KKworI2RlZmluZSBDUFVCXzY4MDIwICAgICAwCisjZGVmaW5lIENQVUJfNjgwMzAgICAgIDEKKyNkZWZpbmUgQ1BVQl82ODA0MCAgICAgMgorI2RlZmluZSBDUFVCXzY4MDYwICAgICAzCisKKyNkZWZpbmUgQ1BVXzY4MDIwICAgICAgKDE8PENQVUJfNjgwMjApCisjZGVmaW5lIENQVV82ODAzMCAgICAgICgxPDxDUFVCXzY4MDMwKQorI2RlZmluZSBDUFVfNjgwNDAgICAgICAoMTw8Q1BVQl82ODA0MCkKKyNkZWZpbmUgQ1BVXzY4MDYwICAgICAgKDE8PENQVUJfNjgwNjApCisKKyNkZWZpbmUgRlBVQl82ODg4MSAgICAgMAorI2RlZmluZSBGUFVCXzY4ODgyICAgICAxCisjZGVmaW5lIEZQVUJfNjgwNDAgICAgIDIgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIEZQVSAqLworI2RlZmluZSBGUFVCXzY4MDYwICAgICAzICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBGUFUgKi8KKyNkZWZpbmUgRlBVQl9TVU5GUEEgICAgNCAgICAgICAgICAgICAgICAgICAgICAgLyogU3VuLTMgRlBBICovCisKKyNkZWZpbmUgRlBVXzY4ODgxICAgICAgKDE8PEZQVUJfNjg4ODEpCisjZGVmaW5lIEZQVV82ODg4MiAgICAgICgxPDxGUFVCXzY4ODgyKQorI2RlZmluZSBGUFVfNjgwNDAgICAgICAoMTw8RlBVQl82ODA0MCkKKyNkZWZpbmUgRlBVXzY4MDYwICAgICAgKDE8PEZQVUJfNjgwNjApCisjZGVmaW5lIEZQVV9TVU5GUEEgICAgICgxPDxGUFVCX1NVTkZQQSkKKworI2RlZmluZSBNTVVCXzY4ODUxICAgICAwCisjZGVmaW5lIE1NVUJfNjgwMzAgICAgIDEgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIE1NVSAqLworI2RlZmluZSBNTVVCXzY4MDQwICAgICAyICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBNTVUgKi8KKyNkZWZpbmUgTU1VQl82ODA2MCAgICAgMyAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgTU1VICovCisjZGVmaW5lIE1NVUJfQVBPTExPICAgIDQgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1c3RvbSBBcG9sbG8gKi8KKyNkZWZpbmUgTU1VQl9TVU4zICAgICAgNSAgICAgICAgICAgICAgICAgICAgICAgLyogQ3VzdG9tIFN1bi0zICovCisKKyNkZWZpbmUgTU1VXzY4ODUxICAgICAgKDE8PE1NVUJfNjg4NTEpCisjZGVmaW5lIE1NVV82ODAzMCAgICAgICgxPDxNTVVCXzY4MDMwKQorI2RlZmluZSBNTVVfNjgwNDAgICAgICAoMTw8TU1VQl82ODA0MCkKKyNkZWZpbmUgTU1VXzY4MDYwICAgICAgKDE8PE1NVUJfNjgwNjApCisjZGVmaW5lIE1NVV9TVU4zICAgICAgICgxPDxNTVVCX1NVTjMpCisjZGVmaW5lIE1NVV9BUE9MTE8gICAgICgxPDxNTVVCX0FQT0xMTykKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIG02OGtfY3B1dHlwZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG02OGtfZnB1dHlwZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG02OGtfbW11dHlwZTsJCS8qIE5vdCByZWFsbHkgdXNlZCB5ZXQgKi8KKyNpZmRlZiBDT05GSUdfVk1FCitleHRlcm4gdW5zaWduZWQgbG9uZyB2bWVfYnJkdHlwZTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiAgbTY4a19pczA0MG9yMDYwIGlzICE9IDAgZm9yIGEgJzA0MCBvciBoaWdoZXI7CisgICAgICogIHVzZWQgbnVtYmVycyBhcmUgNCBmb3IgNjgwNDAgYW5kIDYgZm9yIDY4MDYwLgorICAgICAqLworCitleHRlcm4gaW50IG02OGtfaXMwNDBvcjA2MDsKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNpZiAhZGVmaW5lZChDT05GSUdfTTY4MDIwKQorIyAgZGVmaW5lIENQVV9JU18wMjAgKDApCisjICBkZWZpbmUgTU1VX0lTXzg1MSAoMCkKKyMgIGRlZmluZSBNTVVfSVNfU1VOMyAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX002ODAzMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDQwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNjApCisjICBkZWZpbmUgQ1BVX0lTXzAyMCAobTY4a19jcHV0eXBlICYgQ1BVXzY4MDIwKQorIyAgZGVmaW5lIE1NVV9JU184NTEgKG02OGtfbW11dHlwZSAmIE1NVV82ODg1MSkKKyMgIGRlZmluZSBNTVVfSVNfU1VOMyAoMCkJLyogU3VuMyBub3Qgc3VwcG9ydGVkIHdpdGggb3RoZXIgQ1BVIGVuYWJsZWQgKi8KKyNlbHNlCisjICBkZWZpbmUgQ1BVX002ODAyMF9PTkxZCisjICBkZWZpbmUgQ1BVX0lTXzAyMCAoMSkKKyNpZmRlZiBNQUNIX1NVTjNfT05MWQorIyAgZGVmaW5lIE1NVV9JU19TVU4zICgxKQorIyAgZGVmaW5lIE1NVV9JU184NTEgKDApCisjZWxzZQorIyAgZGVmaW5lIE1NVV9JU19TVU4zICgwKQorIyAgZGVmaW5lIE1NVV9JU184NTEgKDEpCisjZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX002ODAzMCkKKyMgIGRlZmluZSBDUFVfSVNfMDMwICgwKQorIyAgZGVmaW5lIE1NVV9JU18wMzAgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODA0MCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDYwKQorIyAgZGVmaW5lIENQVV9JU18wMzAgKG02OGtfY3B1dHlwZSAmIENQVV82ODAzMCkKKyMgIGRlZmluZSBNTVVfSVNfMDMwIChtNjhrX21tdXR5cGUgJiBNTVVfNjgwMzApCisjZWxzZQorIyAgZGVmaW5lIENQVV9NNjgwMzBfT05MWQorIyAgZGVmaW5lIENQVV9JU18wMzAgKDEpCisjICBkZWZpbmUgTU1VX0lTXzAzMCAoMSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX002ODA0MCkKKyMgIGRlZmluZSBDUFVfSVNfMDQwICgwKQorIyAgZGVmaW5lIE1NVV9JU18wNDAgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODAzMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDYwKQorIyAgZGVmaW5lIENQVV9JU18wNDAgKG02OGtfY3B1dHlwZSAmIENQVV82ODA0MCkKKyMgIGRlZmluZSBNTVVfSVNfMDQwIChtNjhrX21tdXR5cGUgJiBNTVVfNjgwNDApCisjZWxzZQorIyAgZGVmaW5lIENQVV9NNjgwNDBfT05MWQorIyAgZGVmaW5lIENQVV9JU18wNDAgKDEpCisjICBkZWZpbmUgTU1VX0lTXzA0MCAoMSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX002ODA2MCkKKyMgIGRlZmluZSBDUFVfSVNfMDYwICgwKQorIyAgZGVmaW5lIE1NVV9JU18wNjAgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODAzMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDQwKQorIyAgZGVmaW5lIENQVV9JU18wNjAgKG02OGtfY3B1dHlwZSAmIENQVV82ODA2MCkKKyMgIGRlZmluZSBNTVVfSVNfMDYwIChtNjhrX21tdXR5cGUgJiBNTVVfNjgwNjApCisjZWxzZQorIyAgZGVmaW5lIENQVV9NNjgwNjBfT05MWQorIyAgZGVmaW5lIENQVV9JU18wNjAgKDEpCisjICBkZWZpbmUgTU1VX0lTXzA2MCAoMSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX002ODAyMCkgJiYgIWRlZmluZWQoQ09ORklHX002ODAzMCkKKyMgIGRlZmluZSBDUFVfSVNfMDIwX09SXzAzMCAoMCkKKyNlbHNlCisjICBkZWZpbmUgQ1BVX002ODAyMF9PUl9NNjgwMzAKKyMgIGlmIGRlZmluZWQoQ09ORklHX002ODA0MCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDYwKQorIyAgICBkZWZpbmUgQ1BVX0lTXzAyMF9PUl8wMzAgKCFtNjhrX2lzMDQwb3IwNjApCisjICBlbHNlCisjICAgIGRlZmluZSBDUFVfTTY4MDIwX09SX002ODAzMF9PTkxZCisjICAgIGRlZmluZSBDUFVfSVNfMDIwX09SXzAzMCAoMSkKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19NNjgwNDApICYmICFkZWZpbmVkKENPTkZJR19NNjgwNjApCisjICBkZWZpbmUgQ1BVX0lTXzA0MF9PUl8wNjAgKDApCisjZWxzZQorIyAgZGVmaW5lIENQVV9NNjgwNDBfT1JfTTY4MDYwCisjICBpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODAzMCkKKyMgICAgZGVmaW5lIENQVV9JU18wNDBfT1JfMDYwIChtNjhrX2lzMDQwb3IwNjApCisjICBlbHNlCisjICAgIGRlZmluZSBDUFVfTTY4MDQwX09SX002ODA2MF9PTkxZCisjICAgIGRlZmluZSBDUFVfSVNfMDQwX09SXzA2MCAoMSkKKyMgIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBDUFVfVFlQRSAobTY4a19jcHV0eXBlKQorCisjaWZkZWYgQ09ORklHX002OEtGUFVfRU1VCisjICBpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVVfT05MWQorIyAgICBkZWZpbmUgRlBVX0lTX0VNVSAoMSkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEZQVV9JU19FTVUgKCFtNjhrX2ZwdXR5cGUpCisjICBlbmRpZgorI2Vsc2UKKyMgIGRlZmluZSBGUFVfSVNfRU1VICgwKQorI2VuZGlmCisKKworICAgIC8qCisgICAgICogIE1pc2NlbGxhbmVvdXMKKyAgICAgKi8KKworI2RlZmluZSBOVU1fTUVNSU5GTwk0CisjZGVmaW5lIENMX1NJWkUJCTI1NgorI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRQlDTF9TSVpFCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gaW50IG02OGtfbnVtX21lbW9yeTsJCS8qICMgb2YgbWVtb3J5IGJsb2NrcyBmb3VuZCAoYW5kIHVzZWQpICovCitleHRlcm4gaW50IG02OGtfcmVhbG51bV9tZW1vcnk7CQkvKiByZWFsICMgb2YgbWVtb3J5IGJsb2NrcyBmb3VuZCAqLworZXh0ZXJuIHN0cnVjdCBtZW1faW5mbyBtNjhrX21lbW9yeVtOVU1fTUVNSU5GT107LyogbWVtb3J5IGRlc2NyaXB0aW9uICovCisKK3N0cnVjdCBtZW1faW5mbyB7CisJdW5zaWduZWQgbG9uZyBhZGRyOwkJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBtZW1vcnkgY2h1bmsgKi8KKwl1bnNpZ25lZCBsb25nIHNpemU7CQkvKiBsZW5ndGggb2YgbWVtb3J5IGNodW5rIChpbiBieXRlcykgKi8KK307CisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9NNjhLX1NFVFVQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc2htLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NobS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYTJmMzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NobS5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX002OEtfU0hNX0gKKyNkZWZpbmUgX002OEtfU0hNX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBmb3JtYXQgb2YgcGFnZSB0YWJsZSBlbnRyaWVzIHRoYXQgY29ycmVzcG9uZCB0byBzaGFyZWQgbWVtb3J5IHBhZ2VzCisgICBjdXJyZW50bHkgb3V0IGluIHN3YXAgc3BhY2UgKHNlZSBhbHNvIG1tL3N3YXAuYyk6CisgICBiaXRzIDAtMSAoUEFHRV9QUkVTRU5UKSBpcyAgPSAwCisgICBiaXRzIDguLjIgKFNXUF9UWVBFKSBhcmUgPSBTSE1fU1dQX1RZUEUKKyAgIGJpdHMgMzEuLjkgYXJlIHVzZWQgbGlrZSB0aGlzOgorICAgYml0cyAxNS4uOSAoU0hNX0lEKSB0aGUgaWQgb2YgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudAorICAgYml0cyAzMC4uMTYgKFNITV9JRFgpIHRoZSBpbmRleCBvZiB0aGUgcGFnZSB3aXRoaW4gdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudAorICAgICAgICAgICAgICAgICAgICAoYWN0dWFsbHkgb25seSBiaXRzIDI1Li4xNiBnZXQgdXNlZCBzaW5jZSBTSE1NQVggaXMgc28gbG93KQorICAgYml0IDMxIChTSE1fUkVBRF9PTkxZKSBmbGFnIHdoZXRoZXIgdGhlIHBhZ2UgYmVsb25ncyB0byBhIHJlYWQtb25seSBhdHRhY2gKKyovCisvKiBvbiB0aGUgbTY4ayBib3RoIGJpdHMgMCBhbmQgMSBtdXN0IGJlIHplcm8gKi8KKy8qIGZvcm1hdCBvbiB0aGUgc3VuMyBpcyBzaW1pbGFyLCBidXQgYml0cyAzMCwgMzEgYXJlIHNldCB0byB6ZXJvIGFuZCBhbGwKKyAgIG90aGVycyBhcmUgcmVkdWNlZCBieSAyLiAtLW0gKi8KKworI2lmbmRlZiBDT05GSUdfU1VOMworI2RlZmluZSBTSE1fSURfU0hJRlQJOQorI2Vsc2UKKyNkZWZpbmUgU0hNX0lEX1NISUZUCTcKKyNlbmRpZgorI2RlZmluZSBfU0hNX0lEX0JJVFMJNworI2RlZmluZSBTSE1fSURfTUFTSwkoKDE8PF9TSE1fSURfQklUUyktMSkKKworI2RlZmluZSBTSE1fSURYX1NISUZUCShTSE1fSURfU0hJRlQrX1NITV9JRF9CSVRTKQorI2RlZmluZSBfU0hNX0lEWF9CSVRTCTE1CisjZGVmaW5lIFNITV9JRFhfTUFTSwkoKDE8PF9TSE1fSURYX0JJVFMpLTEpCisKKyNlbmRpZiAvKiBfTTY4S19TSE1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zaG1idWYuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2htYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5MjhkNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2htYnVmLmgKQEAgLTAsMCArMSw0MiBAQAorI2lmbmRlZiBfTTY4S19TSE1CVUZfSAorI2RlZmluZSBfTTY4S19TSE1CVUZfSAorCisvKgorICogVGhlIHNobWlkNjRfZHMgc3RydWN0dXJlIGZvciBtNjhrIGFyY2hpdGVjdHVyZS4KKyAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAorICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCisgKgorICogUGFkIHNwYWNlIGlzIGxlZnQgZm9yOgorICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KKyAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKKyAqLworCitzdHJ1Y3Qgc2htaWQ2NF9kcyB7CisJc3RydWN0IGlwYzY0X3Blcm0Jc2htX3Blcm07CS8qIG9wZXJhdGlvbiBwZXJtcyAqLworCXNpemVfdAkJCXNobV9zZWdzejsJLyogc2l6ZSBvZiBzZWdtZW50IChieXRlcykgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXNobV9hdGltZTsJLyogbGFzdCBhdHRhY2ggdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMTsKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9kdGltZTsJLyogbGFzdCBkZXRhY2ggdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKKwlfX2tlcm5lbF90aW1lX3QJCXNobV9jdGltZTsJLyogbGFzdCBjaGFuZ2UgdGltZSAqLworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMzsKKwlfX2tlcm5lbF9waWRfdAkJc2htX2NwaWQ7CS8qIHBpZCBvZiBjcmVhdG9yICovCisJX19rZXJuZWxfcGlkX3QJCXNobV9scGlkOwkvKiBwaWQgb2YgbGFzdCBvcGVyYXRvciAqLworCXVuc2lnbmVkIGxvbmcJCXNobV9uYXR0Y2g7CS8qIG5vLiBvZiBjdXJyZW50IGF0dGFjaGVzICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNTsKK307CisKK3N0cnVjdCBzaG1pbmZvNjQgeworCXVuc2lnbmVkIGxvbmcJc2htbWF4OworCXVuc2lnbmVkIGxvbmcJc2htbWluOworCXVuc2lnbmVkIGxvbmcJc2htbW5pOworCXVuc2lnbmVkIGxvbmcJc2htc2VnOworCXVuc2lnbmVkIGxvbmcJc2htYWxsOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OworfTsKKworI2VuZGlmIC8qIF9NNjhLX1NITUJVRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3NobXBhcmFtLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NobXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4ODkyYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2htcGFyYW0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX002OEtfU0hNUEFSQU1fSAorI2RlZmluZSBfTTY4S19TSE1QQVJBTV9ICisKKyNkZWZpbmUJU0hNTEJBIFBBR0VfU0laRQkJIC8qIGF0dGFjaCBhZGRyIGEgbXVsdGlwbGUgb2YgdGhpcyAqLworCisjZW5kaWYgLyogX002OEtfU0hNUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1tNjhrL3NpZ2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGZiZTM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfQVNNX002OGtfU0lHQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fTTY4a19TSUdDT05URVhUX0gKKworc3RydWN0IHNpZ2NvbnRleHQgeworCXVuc2lnbmVkIGxvbmcgIHNjX21hc2s7CQkvKiBvbGQgc2lnbWFzayAqLworCXVuc2lnbmVkIGxvbmcgIHNjX3VzcDsJCS8qIG9sZCB1c2VyIHN0YWNrIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nICBzY19kMDsKKwl1bnNpZ25lZCBsb25nICBzY19kMTsKKwl1bnNpZ25lZCBsb25nICBzY19hMDsKKwl1bnNpZ25lZCBsb25nICBzY19hMTsKKwl1bnNpZ25lZCBzaG9ydCBzY19zcjsKKwl1bnNpZ25lZCBsb25nICBzY19wYzsKKwl1bnNpZ25lZCBzaG9ydCBzY19mb3JtYXR2ZWM7CisJdW5zaWduZWQgbG9uZyAgc2NfZnByZWdzWzIqM107ICAvKiByb29tIGZvciB0d28gZnAgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyAgc2NfZnBjbnRsWzNdOworCXVuc2lnbmVkIGNoYXIgIHNjX2Zwc3RhdGVbMjE2XTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWE4ZDZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zaWdpbmZvLmgKQEAgLTAsMCArMSw5MiBAQAorI2lmbmRlZiBfTTY4S19TSUdJTkZPX0gKKyNkZWZpbmUgX002OEtfU0lHSU5GT19ICisKKyNkZWZpbmUgSEFWRV9BUkNIX1NJR0lORk9fVAorI2RlZmluZSBIQVZFX0FSQ0hfQ09QWV9TSUdJTkZPCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CisKK3R5cGVkZWYgc3RydWN0IHNpZ2luZm8geworCWludCBzaV9zaWdubzsKKwlpbnQgc2lfZXJybm87CisJaW50IHNpX2NvZGU7CisKKwl1bmlvbiB7CisJCWludCBfcGFkW1NJX1BBRF9TSVpFXTsKKworCQkvKiBraWxsKCkgKi8KKwkJc3RydWN0IHsKKwkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLworCQkJX19rZXJuZWxfdWlkX3QgX3VpZDsJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKwkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAvKiBzZW5kZXIncyB1aWQgKi8KKwkJfSBfa2lsbDsKKworCQkvKiBQT1NJWC4xYiB0aW1lcnMgKi8KKwkJc3RydWN0IHsKKwkJCXRpbWVyX3QgX3RpZDsJCS8qIHRpbWVyIGlkICovCisJCQlpbnQgX292ZXJydW47CQkvKiBvdmVycnVuIGNvdW50ICovCisJCQljaGFyIF9wYWRbc2l6ZW9mKCBfX0FSQ0hfU0lfVUlEX1QpIC0gc2l6ZW9mKGludCldOworCQkJc2lndmFsX3QgX3NpZ3ZhbDsJLyogc2FtZSBhcyBiZWxvdyAqLworCQkJaW50IF9zeXNfcHJpdmF0ZTsgICAgICAgLyogbm90IHRvIGJlIHBhc3NlZCB0byB1c2VyICovCisJCX0gX3RpbWVyOworCisJCS8qIFBPU0lYLjFiIHNpZ25hbHMgKi8KKwkJc3RydWN0IHsKKwkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLworCQkJX19rZXJuZWxfdWlkX3QgX3VpZDsJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKwkJCXNpZ3ZhbF90IF9zaWd2YWw7CisJCQlfX2tlcm5lbF91aWQzMl90IF91aWQzMjsgLyogc2VuZGVyJ3MgdWlkICovCisJCX0gX3J0OworCisJCS8qIFNJR0NITEQgKi8KKwkJc3RydWN0IHsKKwkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHdoaWNoIGNoaWxkICovCisJCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworCQkJaW50IF9zdGF0dXM7CQkvKiBleGl0IGNvZGUgKi8KKwkJCWNsb2NrX3QgX3V0aW1lOworCQkJY2xvY2tfdCBfc3RpbWU7CisJCQlfX2tlcm5lbF91aWQzMl90IF91aWQzMjsgLyogc2VuZGVyJ3MgdWlkICovCisJCX0gX3NpZ2NobGQ7CisKKwkJLyogU0lHSUxMLCBTSUdGUEUsIFNJR1NFR1YsIFNJR0JVUyAqLworCQlzdHJ1Y3QgeworCQkJdm9pZCAqX2FkZHI7IC8qIGZhdWx0aW5nIGluc24vbWVtb3J5IHJlZi4gKi8KKwkJfSBfc2lnZmF1bHQ7CisKKwkJLyogU0lHUE9MTCAqLworCQlzdHJ1Y3QgeworCQkJaW50IF9iYW5kOwkvKiBQT0xMX0lOLCBQT0xMX09VVCwgUE9MTF9NU0cgKi8KKwkJCWludCBfZmQ7CisJCX0gX3NpZ3BvbGw7CisJfSBfc2lmaWVsZHM7Cit9IHNpZ2luZm9fdDsKKworI2RlZmluZSBVSUQxNl9TSUdJTkZPX0NPTVBBVF9ORUVERUQKKworLyoKKyAqIEhvdyB0aGVzZSBmaWVsZHMgYXJlIHRvIGJlIGFjY2Vzc2VkLgorICovCisjdW5kZWYgc2lfdWlkCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBzaV91aWQJCV9zaWZpZWxkcy5fa2lsbC5fdWlkMzIKKyNkZWZpbmUgc2lfdWlkMTYJX3NpZmllbGRzLl9raWxsLl91aWQKKyNlbHNlCisjZGVmaW5lIHNpX3VpZAkJX3NpZmllbGRzLl9raWxsLl91aWQKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3NpZ2luZm8oc3RydWN0IHNpZ2luZm8gKnRvLCBzdHJ1Y3Qgc2lnaW5mbyAqZnJvbSkKK3sKKwlpZiAoZnJvbS0+c2lfY29kZSA8IDApCisJCW1lbWNweSh0bywgZnJvbSwgc2l6ZW9mKCp0bykpOworCWVsc2UKKwkJLyogX3NpZ2NobGQgaXMgY3VycmVudGx5IHRoZSBsYXJnZXN0IGtub3cgdW5pb24gbWVtYmVyICovCisJCW1lbWNweSh0bywgZnJvbSwgMypzaXplb2YoaW50KSArIHNpemVvZihmcm9tLT5fc2lmaWVsZHMuX3NpZ2NobGQpKTsKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tbTY4ay9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjgxYmI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zaWduYWwuaApAQCAtMCwwICsxLDIyMCBAQAorI2lmbmRlZiBfTTY4S19TSUdOQUxfSAorI2RlZmluZSBfTTY4S19TSUdOQUxfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogQXZvaWQgdG9vIG1hbnkgaGVhZGVyIG9yZGVyaW5nIHByb2JsZW1zLiAgKi8KK3N0cnVjdCBzaWdpbmZvOworCisjaWZkZWYgX19LRVJORUxfXworLyogTW9zdCB0aGluZ3Mgc2hvdWxkIGJlIGNsZWFuIGVub3VnaCB0byByZWRlZmluZSB0aGlzIGF0IHdpbGwsIGlmIGNhcmUKKyAgIGlzIHRha2VuIHRvIG1ha2UgbGliYyBtYXRjaC4gICovCisKKyNkZWZpbmUgX05TSUcJCTY0CisjZGVmaW5lIF9OU0lHX0JQVwkzMgorI2RlZmluZSBfTlNJR19XT1JEUwkoX05TSUcgLyBfTlNJR19CUFcpCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBvbGRfc2lnc2V0X3Q7CQkvKiBhdCBsZWFzdCAzMiBiaXRzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNpZ1tfTlNJR19XT1JEU107Cit9IHNpZ3NldF90OworCisjZWxzZQorLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCisKKyNkZWZpbmUgTlNJRwkJMzIKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdzZXRfdDsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2RlZmluZSBTSUdIVVAJCSAxCisjZGVmaW5lIFNJR0lOVAkJIDIKKyNkZWZpbmUgU0lHUVVJVAkJIDMKKyNkZWZpbmUgU0lHSUxMCQkgNAorI2RlZmluZSBTSUdUUkFQCQkgNQorI2RlZmluZSBTSUdBQlJUCQkgNgorI2RlZmluZSBTSUdJT1QJCSA2CisjZGVmaW5lIFNJR0JVUwkJIDcKKyNkZWZpbmUgU0lHRlBFCQkgOAorI2RlZmluZSBTSUdLSUxMCQkgOQorI2RlZmluZSBTSUdVU1IxCQkxMAorI2RlZmluZSBTSUdTRUdWCQkxMQorI2RlZmluZSBTSUdVU1IyCQkxMgorI2RlZmluZSBTSUdQSVBFCQkxMworI2RlZmluZSBTSUdBTFJNCQkxNAorI2RlZmluZSBTSUdURVJNCQkxNQorI2RlZmluZSBTSUdTVEtGTFQJMTYKKyNkZWZpbmUgU0lHQ0hMRAkJMTcKKyNkZWZpbmUgU0lHQ09OVAkJMTgKKyNkZWZpbmUgU0lHU1RPUAkJMTkKKyNkZWZpbmUgU0lHVFNUUAkJMjAKKyNkZWZpbmUgU0lHVFRJTgkJMjEKKyNkZWZpbmUgU0lHVFRPVQkJMjIKKyNkZWZpbmUgU0lHVVJHCQkyMworI2RlZmluZSBTSUdYQ1BVCQkyNAorI2RlZmluZSBTSUdYRlNaCQkyNQorI2RlZmluZSBTSUdWVEFMUk0JMjYKKyNkZWZpbmUgU0lHUFJPRgkJMjcKKyNkZWZpbmUgU0lHV0lOQ0gJMjgKKyNkZWZpbmUgU0lHSU8JCTI5CisjZGVmaW5lIFNJR1BPTEwJCVNJR0lPCisvKgorI2RlZmluZSBTSUdMT1NUCQkyOQorKi8KKyNkZWZpbmUgU0lHUFdSCQkzMAorI2RlZmluZSBTSUdTWVMJCTMxCisjZGVmaW5lCVNJR1VOVVNFRAkzMQorCisvKiBUaGVzZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgY29uc3RhbnRzIGZyb20gdXNlcmxhbmQuICAqLworI2RlZmluZSBTSUdSVE1JTgkzMgorI2RlZmluZSBTSUdSVE1BWAlfTlNJRworCisvKgorICogU0FfRkxBR1MgdmFsdWVzOgorICoKKyAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgorICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKKyAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQorICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCisgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCisgKiBTQV9OT0NMRFdBSVQgZmxhZyBvbiBTSUdDSExEIHRvIGluaGliaXQgem9tYmllcy4KKyAqIFNBX05PREVGRVIgcHJldmVudHMgdGhlIGN1cnJlbnQgc2lnbmFsIGZyb20gYmVpbmcgbWFza2VkIGluIHRoZSBoYW5kbGVyLgorICoKKyAqIFNBX09ORVNIT1QgYW5kIFNBX05PTUFTSyBhcmUgdGhlIGhpc3RvcmljYWwgTGludXggbmFtZXMgZm9yIHRoZSBTaW5nbGUKKyAqIFVuaXggbmFtZXMgUkVTRVRIQU5EIGFuZCBOT0RFRkVSIHJlc3BlY3RpdmVseS4KKyAqLworI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwMQorI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDAwMgorI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMDQKKyNkZWZpbmUgU0FfT05TVEFDSwkweDA4MDAwMDAwCisjZGVmaW5lIFNBX1JFU1RBUlQJMHgxMDAwMDAwMAorI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4ODAwMDAwMDAKKworI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgorI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAorI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMCAvKiBkdW1teSAtLSBpZ25vcmVkICovCisKKy8qCisgKiBzaWdhbHRzdGFjayBjb250cm9scworICovCisjZGVmaW5lIFNTX09OU1RBQ0sJMQorI2RlZmluZSBTU19ESVNBQkxFCTIKKworI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CisjZGVmaW5lIFNJR1NUS1NaCTgxOTIKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qCisgKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCisgKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKgorICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCisgKi8KKyNkZWZpbmUgU0FfUFJPQkUJCVNBX09ORVNIT1QKKyNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlTQV9SRVNUQVJUCisjZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCisjZW5kaWYKKworI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLworI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCisjZGVmaW5lIFNJR19TRVRNQVNLICAgICAgICAyCS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLworCisvKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLwordHlwZWRlZiB2b2lkICgqX19zaWdoYW5kbGVyX3QpKGludCk7CisKKyNkZWZpbmUgU0lHX0RGTAkoKF9fc2lnaGFuZGxlcl90KTApCS8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCisjZGVmaW5lIFNJR19JR04JKChfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCisjZGVmaW5lIFNJR19FUlIJKChfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiB7CisJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKKwlvbGRfc2lnc2V0X3Qgc2FfbWFzazsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCXZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7Cit9OworCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKKwlzaWdzZXRfdCBzYV9tYXNrOwkJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCit9OworCitzdHJ1Y3Qga19zaWdhY3Rpb24geworCXN0cnVjdCBzaWdhY3Rpb24gc2E7Cit9OworI2Vsc2UKKy8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLworCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwl1bmlvbiB7CisJICBfX3NpZ2hhbmRsZXJfdCBfc2FfaGFuZGxlcjsKKwkgIHZvaWQgKCpfc2Ffc2lnYWN0aW9uKShpbnQsIHN0cnVjdCBzaWdpbmZvICosIHZvaWQgKik7CisJfSBfdTsKKwlzaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKKyNkZWZpbmUgc2FfaGFuZGxlcglfdS5fc2FfaGFuZGxlcgorI2RlZmluZSBzYV9zaWdhY3Rpb24JX3UuX3NhX3NpZ2FjdGlvbgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCit0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CisJdm9pZCAqc3Nfc3A7CisJaW50IHNzX2ZsYWdzOworCXNpemVfdCBzc19zaXplOworfSBzdGFja190OworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU0lHX0JJVE9QUworCitzdGF0aWMgaW5saW5lIHZvaWQgc2lnYWRkc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQoreworCV9fYXNtX18oImJmc2V0ICUweyUxLCMxfSIgOiAiPW0iICgqc2V0KSA6ICJpZCIgKChfc2lnIC0gMSkgXiAzMSkKKwkJOiAiY2MiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNpZ2RlbHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwlfX2FzbV9fKCJiZmNsciAlMHslMSwjMX0iIDogIj1tIigqc2V0KSA6ICJpZCIoKF9zaWcgLSAxKSBeIDMxKQorCQk6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2NvbnN0X3NpZ2lzbWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQoreworCXVuc2lnbmVkIGxvbmcgc2lnID0gX3NpZyAtIDE7CisJcmV0dXJuIDEgJiAoc2V0LT5zaWdbc2lnIC8gX05TSUdfQlBXXSA+PiAoc2lnICUgX05TSUdfQlBXKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fZ2VuX3NpZ2lzbWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQoreworCWludCByZXQ7CisJX19hc21fXygiYmZleHR1ICUxeyUyLCMxfSwlMCIKKwkJOiAiPWQiKHJldCkgOiAibSIoKnNldCksICJpZCIoKF9zaWctMSkgXiAzMSkpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgc2lnaXNtZW1iZXIoc2V0LHNpZykJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpZykgPwkJXAorCSBfX2NvbnN0X3NpZ2lzbWVtYmVyKHNldCxzaWcpIDoJCVwKKwkgX19nZW5fc2lnaXNtZW1iZXIoc2V0LHNpZykpCisKK3N0YXRpYyBpbmxpbmUgaW50IHNpZ2ZpbmRpbndvcmQodW5zaWduZWQgbG9uZyB3b3JkKQoreworCV9fYXNtX18oImJmZmZvICUxeyMwLCMwfSwlMCIgOiAiPWQiKHdvcmQpIDogImQiKHdvcmQgJiAtd29yZCkgOiAiY2MiKTsKKwlyZXR1cm4gd29yZCBeIDMxOworfQorCitleHRlcm4gdm9pZCBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKmNvb2tpZSk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTTY4S19TSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLW02OGsvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwYjlmYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc29ja2V0LmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfQVNNX1NPQ0tFVF9ICisjZGVmaW5lIF9BU01fU09DS0VUX0gKKworI2luY2x1ZGUgPGFzbS9zb2NraW9zLmg+CisKKy8qIEZvciBzZXRzb2Nrb3B0KDIpICovCisjZGVmaW5lIFNPTF9TT0NLRVQJMQorCisjZGVmaW5lIFNPX0RFQlVHCTEKKyNkZWZpbmUgU09fUkVVU0VBRERSCTIKKyNkZWZpbmUgU09fVFlQRQkJMworI2RlZmluZSBTT19FUlJPUgk0CisjZGVmaW5lIFNPX0RPTlRST1VURQk1CisjZGVmaW5lIFNPX0JST0FEQ0FTVAk2CisjZGVmaW5lIFNPX1NOREJVRgk3CisjZGVmaW5lIFNPX1JDVkJVRgk4CisjZGVmaW5lIFNPX0tFRVBBTElWRQk5CisjZGVmaW5lIFNPX09PQklOTElORQkxMAorI2RlZmluZSBTT19OT19DSEVDSwkxMQorI2RlZmluZSBTT19QUklPUklUWQkxMgorI2RlZmluZSBTT19MSU5HRVIJMTMKKyNkZWZpbmUgU09fQlNEQ09NUEFUCTE0CisvKiBUbyBhZGQgOiNkZWZpbmUgU09fUkVVU0VQT1JUIDE1ICovCisjZGVmaW5lIFNPX1BBU1NDUkVECTE2CisjZGVmaW5lIFNPX1BFRVJDUkVECTE3CisjZGVmaW5lIFNPX1JDVkxPV0FUCTE4CisjZGVmaW5lIFNPX1NORExPV0FUCTE5CisjZGVmaW5lIFNPX1JDVlRJTUVPCTIwCisjZGVmaW5lIFNPX1NORFRJTUVPCTIxCisKKy8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkyMgorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAkyMworI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksJCTI0CisKKyNkZWZpbmUgU09fQklORFRPREVWSUNFCTI1CisKKy8qIFNvY2tldCBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUgU09fQVRUQUNIX0ZJTFRFUiAgICAgICAgMjYKKyNkZWZpbmUgU09fREVUQUNIX0ZJTFRFUiAgICAgICAgMjcKKworI2RlZmluZSBTT19QRUVSTkFNRSAgICAgICAgICAgICAyOAorI2RlZmluZSBTT19USU1FU1RBTVAJCTI5CisjZGVmaW5lIFNDTV9USU1FU1RBTVAJCVNPX1RJTUVTVEFNUAorCisjZGVmaW5lIFNPX0FDQ0VQVENPTk4JCTMwCisKKyNkZWZpbmUgU09fUEVFUlNFQyAgICAgICAgICAgICAzMQorCisjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zb2NraW9zLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NvY2tpb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjllZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zb2NraW9zLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfX0FSQ0hfTTY4S19TT0NLSU9TX18KKyNkZWZpbmUgX19BUkNIX002OEtfU09DS0lPU19fCisKKy8qIFNvY2tldC1sZXZlbCBJL08gY29udHJvbCBjYWxscy4gKi8KKyNkZWZpbmUgRklPU0VUT1dOCTB4ODkwMQorI2RlZmluZSBTSU9DU1BHUlAJMHg4OTAyCisjZGVmaW5lIEZJT0dFVE9XTgkweDg5MDMKKyNkZWZpbmUgU0lPQ0dQR1JQCTB4ODkwNAorI2RlZmluZSBTSU9DQVRNQVJLCTB4ODkwNQorI2RlZmluZSBTSU9DR1NUQU1QCTB4ODkwNgkJLyogR2V0IHN0YW1wICovCisKKyNlbmRpZiAvKiBfX0FSQ0hfTTY4S19TT0NLSU9TX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLW02OGsvc3BpbmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGY0NmUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zcGlubG9jay5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX002OEtfU1BJTkxPQ0tfSAorI2RlZmluZSBfX002OEtfU1BJTkxPQ0tfSAorCisjZXJyb3IgIm02OGsgZG9lc24ndCBkbyBTTVAgeWV0IgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3RhdC5oIGIvaW5jbHVkZS9hc20tbTY4ay9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRjNDAyYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3RhdC5oCkBAIC0wLDAgKzEsNzggQEAKKyNpZm5kZWYgX002OEtfU1RBVF9ICisjZGVmaW5lIF9NNjhLX1NUQVRfSAorCitzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQgeworCXVuc2lnbmVkIHNob3J0IHN0X2RldjsKKwl1bnNpZ25lZCBzaG9ydCBzdF9pbm87CisJdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKKwl1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKKwl1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfZ2lkOworCXVuc2lnbmVkIHNob3J0IHN0X3JkZXY7CisJdW5zaWduZWQgbG9uZyAgc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nICBzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9tdGltZTsKKwl1bnNpZ25lZCBsb25nICBzdF9jdGltZTsKK307CisKK3N0cnVjdCBzdGF0IHsKKwl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CisJdW5zaWduZWQgc2hvcnQgX19wYWQxOworCXVuc2lnbmVkIGxvbmcgIHN0X2lubzsKKwl1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOworCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKwl1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisJdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKwl1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CisJdW5zaWduZWQgbG9uZyAgc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nICBzdF9ibGtzaXplOworCXVuc2lnbmVkIGxvbmcgIHN0X2Jsb2NrczsKKwl1bnNpZ25lZCBsb25nICBzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDE7CisJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQyOworCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lOworCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkMzsKKwl1bnNpZ25lZCBsb25nICBfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZyAgX191bnVzZWQ1OworfTsKKworLyogVGhpcyBtYXRjaGVzIHN0cnVjdCBzdGF0NjQgaW4gZ2xpYmMyLjEsIGhlbmNlIHRoZSBhYnNvbHV0ZWx5CisgKiBpbnNhbmUgYW1vdW50cyBvZiBwYWRkaW5nIGFyb3VuZCBkZXZfdCdzLgorICovCitzdHJ1Y3Qgc3RhdDY0IHsKKwl1bnNpZ25lZCBsb25nIGxvbmcJc3RfZGV2OworCXVuc2lnbmVkIGNoYXIJX19wYWQxWzJdOworCisjZGVmaW5lIFNUQVQ2NF9IQVNfQlJPS0VOX1NUX0lOTwkxCisJdW5zaWduZWQgbG9uZwlfX3N0X2lubzsKKworCXVuc2lnbmVkIGludAlzdF9tb2RlOworCXVuc2lnbmVkIGludAlzdF9ubGluazsKKworCXVuc2lnbmVkIGxvbmcJc3RfdWlkOworCXVuc2lnbmVkIGxvbmcJc3RfZ2lkOworCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X3JkZXY7CisJdW5zaWduZWQgY2hhcglfX3BhZDNbMl07CisKKwlsb25nIGxvbmcJc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nCXN0X2Jsa3NpemU7CisKKwl1bnNpZ25lZCBsb25nCV9fcGFkNDsJCS8qIGZ1dHVyZSBwb3NzaWJsZSBzdF9ibG9ja3MgaGlnaCBiaXRzICovCisJdW5zaWduZWQgbG9uZwlzdF9ibG9ja3M7CS8qIE51bWJlciA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkLiAqLworCisJdW5zaWduZWQgbG9uZwlzdF9hdGltZTsKKwl1bnNpZ25lZCBsb25nCXN0X2F0aW1lX25zZWM7CisKKwl1bnNpZ25lZCBsb25nCXN0X210aW1lOworCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWVfbnNlYzsKKworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9jdGltZV9uc2VjOworCisJdW5zaWduZWQgbG9uZyBsb25nCXN0X2lubzsKK307CisKKyNlbmRpZiAvKiBfTTY4S19TVEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS1tNjhrL3N0YXRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZDkzZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3N0YXRmcy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfTTY4S19TVEFURlNfSAorI2RlZmluZSBfTTY4S19TVEFURlNfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3RhdGZzLmg+CisKKyNlbmRpZiAvKiBfTTY4S19TVEFURlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zdHJpbmcuaCBiL2luY2x1ZGUvYXNtLW02OGsvc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkZWYwNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3RyaW5nLmgKQEAgLTAsMCArMSw1NDIgQEAKKyNpZm5kZWYgX002OEtfU1RSSU5HX0hfCisjZGVmaW5lIF9NNjhLX1NUUklOR19IXworCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDUFkKK3N0YXRpYyBpbmxpbmUgY2hhciAqIHN0cmNweShjaGFyICogZGVzdCxjb25zdCBjaGFyICpzcmMpCit7CisgIGNoYXIgKnhkZXN0ID0gZGVzdDsKKworICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICAgICgiMTpcdG1vdmViICUxQCssJTBAK1xuXHQiCisgICAgICAgICJqbmUgMWIiCisJOiAiPWEiIChkZXN0KSwgIj1hIiAoc3JjKQorICAgICAgICA6ICIwIiAoZGVzdCksICIxIiAoc3JjKSA6ICJtZW1vcnkiKTsKKyAgcmV0dXJuIHhkZXN0OworfQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DUFkKK3N0YXRpYyBpbmxpbmUgY2hhciAqIHN0cm5jcHkoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbikKK3sKKyAgY2hhciAqeGRlc3QgPSBkZXN0OworCisgIGlmIChuID09IDApCisgICAgcmV0dXJuIHhkZXN0OworCisgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgICAgKCIxOlx0bW92ZWIgJTFAKywlMEArXG5cdCIKKwkiamVxIDJmXG5cdCIKKyAgICAgICAgInN1YnFsICMxLCUyXG5cdCIKKyAgICAgICAgImpuZSAxYlxuXHQiCisgICAgICAgICIyOiIKKyAgICAgICAgOiAiPWEiIChkZXN0KSwgIj1hIiAoc3JjKSwgIj1kIiAobikKKyAgICAgICAgOiAiMCIgKGRlc3QpLCAiMSIgKHNyYyksICIyIiAobikKKyAgICAgICAgOiAibWVtb3J5Iik7CisgIHJldHVybiB4ZGVzdDsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDQVQKK3N0YXRpYyBpbmxpbmUgY2hhciAqIHN0cmNhdChjaGFyICogZGVzdCwgY29uc3QgY2hhciAqIHNyYykKK3sKKwljaGFyICp0bXAgPSBkZXN0OworCisJd2hpbGUgKCpkZXN0KQorCQlkZXN0Kys7CisJd2hpbGUgKCgqZGVzdCsrID0gKnNyYysrKSkKKwkJOworCisJcmV0dXJuIHRtcDsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ0FUCitzdGF0aWMgaW5saW5lIGNoYXIgKiBzdHJuY2F0KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGNvdW50KQoreworCWNoYXIgKnRtcCA9IGRlc3Q7CisKKwlpZiAoY291bnQpIHsKKwkJd2hpbGUgKCpkZXN0KQorCQkJZGVzdCsrOworCQl3aGlsZSAoKCpkZXN0KysgPSAqc3JjKyspKSB7CisJCQlpZiAoLS1jb3VudCA9PSAwKSB7CisJCQkJKmRlc3QrKz0nXDAnOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHRtcDsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDSFIKK3N0YXRpYyBpbmxpbmUgY2hhciAqIHN0cmNocihjb25zdCBjaGFyICogcywgaW50IGMpCit7CisgIGNvbnN0IGNoYXIgY2ggPSBjOworCisgIGZvcig7ICpzICE9IGNoOyArK3MpCisgICAgaWYgKCpzID09ICdcMCcpCisgICAgICByZXR1cm4oIE5VTEwgKTsKKyAgcmV0dXJuKCAoY2hhciAqKSBzKTsKK30KKworI2lmIDAKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSUEJSSworc3RhdGljIGlubGluZSBjaGFyICpzdHJwYnJrKGNvbnN0IGNoYXIgKmNzLGNvbnN0IGNoYXIgKmN0KQoreworICBjb25zdCBjaGFyICpzYzEsKnNjMjsKKworICBmb3IoIHNjMSA9IGNzOyAqc2MxICE9ICdcMCc7ICsrc2MxKQorICAgIGZvciggc2MyID0gY3Q7ICpzYzIgIT0gJ1wwJzsgKytzYzIpCisgICAgICBpZiAoKnNjMSA9PSAqc2MyKQorCXJldHVybigoY2hhciAqKSBzYzEpOworICByZXR1cm4oIE5VTEwgKTsKK30KKyNlbmRpZgorCisjaWYgMAorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJTUE4KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICphY2NlcHQpCit7CisgIGNvbnN0IGNoYXIgKnA7CisgIGNvbnN0IGNoYXIgKmE7CisgIHNpemVfdCBjb3VudCA9IDA7CisKKyAgZm9yIChwID0gczsgKnAgIT0gJ1wwJzsgKytwKQorICAgIHsKKyAgICAgIGZvciAoYSA9IGFjY2VwdDsgKmEgIT0gJ1wwJzsgKythKQorICAgICAgICBpZiAoKnAgPT0gKmEpCisgICAgICAgICAgYnJlYWs7CisgICAgICBpZiAoKmEgPT0gJ1wwJykKKyAgICAgICAgcmV0dXJuIGNvdW50OworICAgICAgZWxzZQorICAgICAgICArK2NvdW50OworICAgIH0KKworICByZXR1cm4gY291bnQ7Cit9CisjZW5kaWYKKworLyogc3Ryc3RyICEhICovCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTEVOCitzdGF0aWMgaW5saW5lIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqIHMpCit7CisgIGNvbnN0IGNoYXIgKnNjOworICBmb3IgKHNjID0gczsgKnNjICE9ICdcMCc7ICsrc2MpIDsKKyAgcmV0dXJuKHNjIC0gcyk7Cit9CisKKy8qIHN0cm5sZW4gISEgKi8KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDTVAKK3N0YXRpYyBpbmxpbmUgaW50IHN0cmNtcChjb25zdCBjaGFyICogY3MsY29uc3QgY2hhciAqIGN0KQoreworICBjaGFyIF9fcmVzOworCisgIF9fYXNtX18KKyAgICAgICAoIjE6XHRtb3ZlYiAlMEArLCUyXG5cdCIgLyogZ2V0ICpjcyAqLworICAgICAgICAiY21wYiAlMUArLCUyXG5cdCIgICAgICAvKiBjb21wYXJlIGEgYnl0ZSAqLworICAgICAgICAiam5lICAyZlxuXHQiICAgICAgICAgICAvKiBub3QgZXF1YWwsIGJyZWFrIG91dCAqLworICAgICAgICAidHN0YiAlMlxuXHQiICAgICAgICAgICAvKiBhdCBlbmQgb2YgY3M/ICovCisgICAgICAgICJqbmUgIDFiXG5cdCIgICAgICAgICAgIC8qIG5vLCBrZWVwIGdvaW5nICovCisgICAgICAgICJqcmEgIDNmXG5cdCIJCS8qIHN0cmluZ3MgYXJlIGVxdWFsICovCisgICAgICAgICIyOlx0c3ViYiAlMUAtLCUyXG5cdCIgIC8qICpjcyAtICpjdCAqLworICAgICAgICAiMzoiCisgICAgICAgIDogIj1hIiAoY3MpLCAiPWEiIChjdCksICI9ZCIgKF9fcmVzKQorICAgICAgICA6ICIwIiAoY3MpLCAiMSIgKGN0KSk7CisgIHJldHVybiBfX3JlczsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ01QCitzdGF0aWMgaW5saW5lIGludCBzdHJuY21wKGNvbnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3Qsc2l6ZV90IGNvdW50KQoreworICBjaGFyIF9fcmVzOworCisgIGlmICghY291bnQpCisgICAgcmV0dXJuIDA7CisgIF9fYXNtX18KKyAgICAgICAoIjE6XHRtb3ZiICUwQCssJTNcblx0IiAgICAgICAgICAvKiBnZXQgKmNzICovCisgICAgICAgICJjbXBiICAgJTFAKywlM1xuXHQiICAgICAgICAgICAgLyogY29tcGFyZSBhIGJ5dGUgKi8KKyAgICAgICAgImpuZSAgICAzZlxuXHQiICAgICAgICAgICAgICAgICAvKiBub3QgZXF1YWwsIGJyZWFrIG91dCAqLworICAgICAgICAidHN0YiAgICUzXG5cdCIgICAgICAgICAgICAgICAgIC8qIGF0IGVuZCBvZiBjcz8gKi8KKyAgICAgICAgImplcSAgICA0ZlxuXHQiICAgICAgICAgICAgICAgICAvKiB5ZXMsIGFsbCBkb25lICovCisgICAgICAgICJzdWJxbCAgIzEsJTJcblx0IiAgICAgICAgICAgICAgLyogbm8sIGFkanVzdCBjb3VudCAqLworICAgICAgICAiam5lICAgIDFiXG5cdCIgICAgICAgICAgICAgICAgIC8qIG1vcmUgdG8gZG8sIGtlZXAgZ29pbmcgKi8KKyAgICAgICAgIjI6XHRtb3ZlcSAjMCwlM1xuXHQiICAgICAgICAgICAvKiBzdHJpbmdzIGFyZSBlcXVhbCAqLworICAgICAgICAianJhICAgIDRmXG5cdCIKKyAgICAgICAgIjM6XHRzdWJiICUxQC0sJTNcblx0IiAgICAgICAgICAvKiAqY3MgLSAqY3QgKi8KKyAgICAgICAgIjQ6IgorICAgICAgICA6ICI9YSIgKGNzKSwgIj1hIiAoY3QpLCAiPWQiIChjb3VudCksICI9ZCIgKF9fcmVzKQorICAgICAgICA6ICIwIiAoY3MpLCAiMSIgKGN0KSwgIjIiIChjb3VudCkpOworICByZXR1cm4gX19yZXM7Cit9CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCisvKgorICogVGhpcyBpcyByZWFsbHkgdWdseSwgYnV0IGl0cyBoaWdobHkgb3B0aW1pemF0aWFibGUgYnkgdGhlCisgKiBjb21waWxlciBhbmQgaXMgbWVhbnQgYXMgY29tcGVuc2F0aW9uIGZvciBnY2MncyBtaXNzaW5nCisgKiBfX2J1aWx0aW5fbWVtc2V0KCkuIEZvciB0aGUgNjgwWzIzXTAJaXQgbWlnaHQgYmUgd29ydGggY29uc2lkZXJpbmcKKyAqIHRoZSBvcHRpbWFsIG51bWJlciBvZiBtaXNhbGlnbmVkIHdyaXRlcyBjb21wYXJlZCB0byB0aGUgbnVtYmVyIG9mCisgKiB0ZXN0cyduJ2JyYW5jaGVzIG5lZWRlZCB0byBhbGlnbiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcy4gVGhlCisgKiA2ODBbNDZdMCBkb2Vzbid0IHJlYWxseSBjYXJlIGR1ZSB0byB0aGVpciBjb3B5LWJhY2sgY2FjaGVzLgorICoJCQkJCQkxMC8wOS85NiAtIEplcyBTb3JlbnNlbgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKiBfX21lbXNldF9nKHZvaWQgKiBzLCBpbnQgYywgc2l6ZV90IGNvdW50KQoreworICB2b2lkICp4cyA9IHM7CisgIHNpemVfdCB0ZW1wOworCisgIGlmICghY291bnQpCisgICAgcmV0dXJuIHhzOworCisgIGMgJj0gMHhmZjsKKyAgYyB8PSBjIDw8IDg7CisgIGMgfD0gYyA8PCAxNjsKKworICBpZiAoY291bnQgPCAzNil7CisJICBsb25nICpscyA9IHM7CisKKwkgIHN3aXRjaChjb3VudCl7CisJICBjYXNlIDMyOiBjYXNlIDMzOiBjYXNlIDM0OiBjYXNlIDM1OgorCQkgICpscysrID0gYzsKKwkgIGNhc2UgMjg6IGNhc2UgMjk6IGNhc2UgMzA6IGNhc2UgMzE6CisJCSAgKmxzKysgPSBjOworCSAgY2FzZSAyNDogY2FzZSAyNTogY2FzZSAyNjogY2FzZSAyNzoKKwkJICAqbHMrKyA9IGM7CisJICBjYXNlIDIwOiBjYXNlIDIxOiBjYXNlIDIyOiBjYXNlIDIzOgorCQkgICpscysrID0gYzsKKwkgIGNhc2UgMTY6IGNhc2UgMTc6IGNhc2UgMTg6IGNhc2UgMTk6CisJCSAgKmxzKysgPSBjOworCSAgY2FzZSAxMjogY2FzZSAxMzogY2FzZSAxNDogY2FzZSAxNToKKwkJICAqbHMrKyA9IGM7CisJICBjYXNlIDg6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMToKKwkJICAqbHMrKyA9IGM7CisJICBjYXNlIDQ6IGNhc2UgNTogY2FzZSA2OiBjYXNlIDc6CisJCSAgKmxzKysgPSBjOworCQkgIGJyZWFrOworCSAgZGVmYXVsdDoKKwkJICBicmVhazsKKwkgIH0KKwkgIHMgPSBsczsKKwkgIGlmIChjb3VudCAmIDB4MDIpeworCQkgIHNob3J0ICpzcyA9IHM7CisJCSAgKnNzKysgPSBjOworCQkgIHMgPSBzczsKKwkgIH0KKwkgIGlmIChjb3VudCAmIDB4MDEpeworCQkgIGNoYXIgKmNzID0gczsKKwkJICAqY3MrKyA9IGM7CisJCSAgcyA9IGNzOworCSAgfQorCSAgcmV0dXJuIHhzOworICB9CisKKyAgaWYgKChsb25nKSBzICYgMSkKKyAgICB7CisgICAgICBjaGFyICpjcyA9IHM7CisgICAgICAqY3MrKyA9IGM7CisgICAgICBzID0gY3M7CisgICAgICBjb3VudC0tOworICAgIH0KKyAgaWYgKGNvdW50ID4gMiAmJiAobG9uZykgcyAmIDIpCisgICAgeworICAgICAgc2hvcnQgKnNzID0gczsKKyAgICAgICpzcysrID0gYzsKKyAgICAgIHMgPSBzczsKKyAgICAgIGNvdW50IC09IDI7CisgICAgfQorICB0ZW1wID0gY291bnQgPj4gMjsKKyAgaWYgKHRlbXApCisgICAgeworICAgICAgbG9uZyAqbHMgPSBzOworICAgICAgdGVtcC0tOworICAgICAgZG8KKwkqbHMrKyA9IGM7CisgICAgICB3aGlsZSAodGVtcC0tKTsKKyAgICAgIHMgPSBsczsKKyAgICB9CisgIGlmIChjb3VudCAmIDIpCisgICAgeworICAgICAgc2hvcnQgKnNzID0gczsKKyAgICAgICpzcysrID0gYzsKKyAgICAgIHMgPSBzczsKKyAgICB9CisgIGlmIChjb3VudCAmIDEpCisgICAgeworICAgICAgY2hhciAqY3MgPSBzOworICAgICAgKmNzID0gYzsKKyAgICB9CisgIHJldHVybiB4czsKK30KKworLyoKKyAqIF9fbWVtc2V0X3BhZ2UgYXNzdW1lcyB0aGF0IGRhdGEgaXMgbG9uZ3dvcmQgYWxpZ25lZC4gTW9zdCwgaWYgbm90CisgKiBhbGwsIG9mIHRoZXNlIHBhZ2Ugc2l6ZWQgbWVtc2V0cyBhcmUgcGVyZm9ybWVkIG9uIHBhZ2UgYWxpZ25lZAorICogYXJlYXMsIHRodXMgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgaWYgdGhlIGRlc3RpbmF0aW9uIGlzIGxvbmd3b3JkCisgKiBhbGlnbmVkLiBPZiBjb3Vyc2Ugd2Ugc3VmZmVyIGEgc2VyaW91cyBwZXJmb3JtYW5jZSBsb3NzIGlmIHRoaXMgaXMKKyAqIG5vdCB0aGUgY2FzZSBidXQgSSB0aGluayB0aGUgcmlzayBvZiB0aGlzIGV2ZXIgaGFwcGVuaW5nIGlzCisgKiBleHRyZW1lbHkgc21hbGwuIFdlIHNwZW5kIGEgbG90IG9mIHRpbWUgY2xlYXJpbmcgcGFnZXMgaW4KKyAqIGdldF9lbXB0eV9wYWdlKCkgc28gSSB0aGluayBpdCBpcyB3b3J0aCBpdCBhbnl3YXkuIEJlc2lkZXMsIHRoZQorICogNjgwWzQ2XTAgZG8gbm90IHJlYWxseSBjYXJlIGFib3V0IG1pc2FsaWduZWQgd3JpdGVzIGR1ZSB0byB0aGVpcgorICogY29weS1iYWNrIGNhY2hlLgorICoKKyAqIFRoZSBvcHRpbWl6ZWQgY2FzZSBmb3IgdGhlIDY4MFs0Nl0wIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBtb3ZlMTYKKyAqIGluc3RydWN0aW9uLiBNeSB0ZXN0cyBzaG93ZWQgdGhhdCB0aGlzIGltcGxlbWVudGF0aW9uIGlzIDM1LTQ1JQorICogZmFzdGVyIHRoYW4gdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIHVzaW5nIG1vdmVsLCB0aGUgb25seQorICogY2F2ZWF0IGlzIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgbXVzdCBiZSAxNi1ieXRlIGFsaWduZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDEvMDkvOTYgLSBKZXMgU29yZW5zZW4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICogX19tZW1zZXRfcGFnZSh2b2lkICogcyxpbnQgYyxzaXplX3QgY291bnQpCit7CisgIHVuc2lnbmVkIGxvbmcgZGF0YSwgdG1wOworICB2b2lkICp4cyA9IHM7CisKKyAgYyA9IGMgJiAyNTU7CisgIGRhdGEgPSBjIHwgKGMgPDwgOCk7CisgIGRhdGEgfD0gZGF0YSA8PCAxNjsKKworI2lmZGVmIENQVV9NNjgwNDBfT1JfTTY4MDYwX09OTFkKKworICBpZiAoKCh1bnNpZ25lZCBsb25nKSBzKSAmIDB4MGYpCisJICBfX21lbXNldF9nKHMsIGMsIGNvdW50KTsKKyAgZWxzZXsKKwkgIHVuc2lnbmVkIGxvbmcgKnNwID0gczsKKwkgICpzcCsrID0gZGF0YTsKKwkgICpzcCsrID0gZGF0YTsKKwkgICpzcCsrID0gZGF0YTsKKwkgICpzcCsrID0gZGF0YTsKKworCSAgX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6XHQiCisJCQkgICAgICAgIi5jaGlwIDY4MDQwXG5cdCIKKwkJCSAgICAgICAibW92ZTE2ICUyQCssJTBAK1xuXHQiCisJCQkgICAgICAgIi5jaGlwIDY4a1xuXHQiCisJCQkgICAgICAgInN1YnF3ICAjOCwlMlxuXHQiCisJCQkgICAgICAgInN1YnF3ICAjOCwlMlxuXHQiCisJCQkgICAgICAgImRicmEgICAlMSwxYlxuXHQiCisJCQkgICAgICAgOiAiPWEiIChzcCksICI9ZCIgKHRtcCkKKwkJCSAgICAgICA6ICJhIiAocyksICIwIiAoc3ApLCAiMSIgKChjb3VudCAtIDE2KSAvIDE2IC0gMSkKKwkJCSAgICAgICApOworICB9CisKKyNlbHNlCisgIF9fYXNtX18gX192b2xhdGlsZV9fKCIxOlx0IgorCQkgICAgICAgIm1vdmVsICUyLCUwQCtcblx0IgorCQkgICAgICAgIm1vdmVsICUyLCUwQCtcblx0IgorCQkgICAgICAgIm1vdmVsICUyLCUwQCtcblx0IgorCQkgICAgICAgIm1vdmVsICUyLCUwQCtcblx0IgorCQkgICAgICAgIm1vdmVsICUyLCUwQCtcblx0IgorCQkgICAgICAgIm1vdmVsICUyLCUwQCtcblx0IgorCQkgICAgICAgIm1vdmVsICUyLCUwQCtcblx0IgorCQkgICAgICAgIm1vdmVsICUyLCUwQCtcblx0IgorCQkgICAgICAgImRicmEgICUxLDFiXG5cdCIKKwkJICAgICAgIDogIj1hIiAocyksICI9ZCIgKHRtcCkKKwkJICAgICAgIDogImQiIChkYXRhKSwgIjAiIChzKSwgIjEiIChjb3VudCAvIDMyIC0gMSkKKwkJICAgICAgICk7CisjZW5kaWYKKworICByZXR1cm4geHM7Cit9CisKK2V4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpOworCisjZGVmaW5lIF9fbWVtc2V0X2NvbnN0KHMsYyxjb3VudCkgXAorKChjb3VudD09UEFHRV9TSVpFKSA/IFwKKyAgX19tZW1zZXRfcGFnZSgocyksKGMpLChjb3VudCkpIDogXAorICBfX21lbXNldF9nKChzKSwoYyksKGNvdW50KSkpCisKKyNkZWZpbmUgbWVtc2V0KHMsIGMsIGNvdW50KSBcCisoX19idWlsdGluX2NvbnN0YW50X3AoY291bnQpID8gXAorIF9fbWVtc2V0X2NvbnN0KChzKSwoYyksKGNvdW50KSkgOiBcCisgX19tZW1zZXRfZygocyksKGMpLChjb3VudCkpKQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQorZXh0ZXJuIHZvaWQgKiBtZW1jcHkodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCApOworLyoKKyAqIF9fYnVpbHRpbl9tZW1jcHkoKSBkb2VzIG5vdCBoYW5kbGUgcGFnZS1zaXplZCBtZW1jcHlzIHZlcnkgd2VsbCwKKyAqIHRodXMgZm9sbG93aW5nIHRoZSBzYW1lIGFzc3VtcHRpb25zIGFzIGZvciBwYWdlLXNpemVkIG1lbXNldHMsIHRoaXMKKyAqIGZ1bmN0aW9uIGNvcGllcyBwYWdlLXNpemVkIGFyZWFzIHVzaW5nIGFuIHVucm9sbGVkIGxvb3AsIHdpdGhvdXQKKyAqIGNvbnNpZGVyaW5nIGFsaWdubWVudC4KKyAqCisgKiBGb3IgdGhlIDY4MFs0Nl0wIG9ubHkga2VybmVscyB3ZSB1c2UgdGhlIG1vdmUxNiBpbnN0cnVjdGlvbiBpbnN0ZWFkCisgKiBhcyBpdCB3cml0ZXMgdGhyb3VnaCB0aGUgZGF0YS1jYWNoZSwgaW52YWxpZGF0aW5nIHRoZSBjYWNoZS1saW5lcworICogdG91Y2hlZC4gSW4gdGhpcyB3YXkgd2UgZG8gbm90IHVzZSB1cCB0aGUgZW50aXJlIGRhdGEtY2FjaGUgKHdlbGwsCisgKiBoYWxmIG9mIGl0IG9uIHRoZSA2ODA2MCkgYnkgY29weWluZyBhIHBhZ2UuIEFuIHVucm9sbGVkIGxvb3Agb2YgdHdvCisgKiBtb3ZlMTYgaW5zdHJ1Y3Rpb25zIHNlZW0gdG8gdGhlIGZhc3Rlc3QuIFRoZSBvbmx5IGNhdmVhdCBpcyB0aGF0CisgKiBib3RoIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBiZSAxNi1ieXRlIGFsaWduZWQsIGlmIG5vdCB3ZSBmYWxsCisgKiBiYWNrIHRvIHRoZSBnZW5lcmljIG1lbWNweSBmdW5jdGlvbi4gIC0gSmVzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqIF9fbWVtY3B5X3BhZ2Uodm9pZCAqIHRvLCBjb25zdCB2b2lkICogZnJvbSwgc2l6ZV90IGNvdW50KQoreworICB1bnNpZ25lZCBsb25nIHRtcDsKKyAgdm9pZCAqeHRvID0gdG87CisKKyNpZmRlZiBDUFVfTTY4MDQwX09SX002ODA2MF9PTkxZCisKKyAgaWYgKCgodW5zaWduZWQgbG9uZykgdG8gfCAodW5zaWduZWQgbG9uZykgZnJvbSkgJiAweDBmKQorCSAgcmV0dXJuIG1lbWNweSh0bywgZnJvbSwgY291bnQpOworCisgIF9fYXNtX18gX192b2xhdGlsZV9fKCIxOlx0IgorCQkgICAgICAgIi5jaGlwIDY4MDQwXG5cdCIKKwkJICAgICAgICJtb3ZlMTYgJTFAKywlMEArXG5cdCIKKwkJICAgICAgICJtb3ZlMTYgJTFAKywlMEArXG5cdCIKKwkJICAgICAgICIuY2hpcCA2OGtcblx0IgorCQkgICAgICAgImRicmEgICUyLDFiXG5cdCIKKwkJICAgICAgIDogIj1hIiAodG8pLCAiPWEiIChmcm9tKSwgIj1kIiAodG1wKQorCQkgICAgICAgOiAiMCIgKHRvKSwgIjEiIChmcm9tKSAsICIyIiAoY291bnQgLyAzMiAtIDEpCisJCSAgICAgICApOworI2Vsc2UKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6XHQiCisJCSAgICAgICAibW92ZWwgJTFAKywlMEArXG5cdCIKKwkJICAgICAgICJtb3ZlbCAlMUArLCUwQCtcblx0IgorCQkgICAgICAgIm1vdmVsICUxQCssJTBAK1xuXHQiCisJCSAgICAgICAibW92ZWwgJTFAKywlMEArXG5cdCIKKwkJICAgICAgICJtb3ZlbCAlMUArLCUwQCtcblx0IgorCQkgICAgICAgIm1vdmVsICUxQCssJTBAK1xuXHQiCisJCSAgICAgICAibW92ZWwgJTFAKywlMEArXG5cdCIKKwkJICAgICAgICJtb3ZlbCAlMUArLCUwQCtcblx0IgorCQkgICAgICAgImRicmEgICUyLDFiXG5cdCIKKwkJICAgICAgIDogIj1hIiAodG8pLCAiPWEiIChmcm9tKSwgIj1kIiAodG1wKQorCQkgICAgICAgOiAiMCIgKHRvKSwgIjEiIChmcm9tKSAsICIyIiAoY291bnQgLyAzMiAtIDEpCisJCSAgICAgICApOworI2VuZGlmCisgIHJldHVybiB4dG87Cit9CisKKyNkZWZpbmUgX19tZW1jcHlfY29uc3QodG8sIGZyb20sIG4pIFwKKygobj09UEFHRV9TSVpFKSA/IFwKKyAgX19tZW1jcHlfcGFnZSgodG8pLChmcm9tKSwobikpIDogXAorICBfX2J1aWx0aW5fbWVtY3B5KCh0byksKGZyb20pLChuKSkpCisKKyNkZWZpbmUgbWVtY3B5KHRvLCBmcm9tLCBuKSBcCisoX19idWlsdGluX2NvbnN0YW50X3AobikgPyBcCisgX19tZW1jcHlfY29uc3QoKHRvKSwoZnJvbSksKG4pKSA6IFwKKyBtZW1jcHkoKHRvKSwoZnJvbSksKG4pKSkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1NT1ZFCitzdGF0aWMgaW5saW5lIHZvaWQgKiBtZW1tb3ZlKHZvaWQgKiBkZXN0LGNvbnN0IHZvaWQgKiBzcmMsIHNpemVfdCBuKQoreworICB2b2lkICp4ZGVzdCA9IGRlc3Q7CisgIHNpemVfdCB0ZW1wOworCisgIGlmICghbikKKyAgICByZXR1cm4geGRlc3Q7CisKKyAgaWYgKGRlc3QgPCBzcmMpCisgICAgeworICAgICAgaWYgKChsb25nKSBkZXN0ICYgMSkKKwl7CisJICBjaGFyICpjZGVzdCA9IGRlc3Q7CisJICBjb25zdCBjaGFyICpjc3JjID0gc3JjOworCSAgKmNkZXN0KysgPSAqY3NyYysrOworCSAgZGVzdCA9IGNkZXN0OworCSAgc3JjID0gY3NyYzsKKwkgIG4tLTsKKwl9CisgICAgICBpZiAobiA+IDIgJiYgKGxvbmcpIGRlc3QgJiAyKQorCXsKKwkgIHNob3J0ICpzZGVzdCA9IGRlc3Q7CisJICBjb25zdCBzaG9ydCAqc3NyYyA9IHNyYzsKKwkgICpzZGVzdCsrID0gKnNzcmMrKzsKKwkgIGRlc3QgPSBzZGVzdDsKKwkgIHNyYyA9IHNzcmM7CisJICBuIC09IDI7CisJfQorICAgICAgdGVtcCA9IG4gPj4gMjsKKyAgICAgIGlmICh0ZW1wKQorCXsKKwkgIGxvbmcgKmxkZXN0ID0gZGVzdDsKKwkgIGNvbnN0IGxvbmcgKmxzcmMgPSBzcmM7CisJICB0ZW1wLS07CisJICBkbworCSAgICAqbGRlc3QrKyA9ICpsc3JjKys7CisJICB3aGlsZSAodGVtcC0tKTsKKwkgIGRlc3QgPSBsZGVzdDsKKwkgIHNyYyA9IGxzcmM7CisJfQorICAgICAgaWYgKG4gJiAyKQorCXsKKwkgIHNob3J0ICpzZGVzdCA9IGRlc3Q7CisJICBjb25zdCBzaG9ydCAqc3NyYyA9IHNyYzsKKwkgICpzZGVzdCsrID0gKnNzcmMrKzsKKwkgIGRlc3QgPSBzZGVzdDsKKwkgIHNyYyA9IHNzcmM7CisJfQorICAgICAgaWYgKG4gJiAxKQorCXsKKwkgIGNoYXIgKmNkZXN0ID0gZGVzdDsKKwkgIGNvbnN0IGNoYXIgKmNzcmMgPSBzcmM7CisJICAqY2Rlc3QgPSAqY3NyYzsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZGVzdCA9IChjaGFyICopIGRlc3QgKyBuOworICAgICAgc3JjID0gKGNvbnN0IGNoYXIgKikgc3JjICsgbjsKKyAgICAgIGlmICgobG9uZykgZGVzdCAmIDEpCisJeworCSAgY2hhciAqY2Rlc3QgPSBkZXN0OworCSAgY29uc3QgY2hhciAqY3NyYyA9IHNyYzsKKwkgICotLWNkZXN0ID0gKi0tY3NyYzsKKwkgIGRlc3QgPSBjZGVzdDsKKwkgIHNyYyA9IGNzcmM7CisJICBuLS07CisJfQorICAgICAgaWYgKG4gPiAyICYmIChsb25nKSBkZXN0ICYgMikKKwl7CisJICBzaG9ydCAqc2Rlc3QgPSBkZXN0OworCSAgY29uc3Qgc2hvcnQgKnNzcmMgPSBzcmM7CisJICAqLS1zZGVzdCA9ICotLXNzcmM7CisJICBkZXN0ID0gc2Rlc3Q7CisJICBzcmMgPSBzc3JjOworCSAgbiAtPSAyOworCX0KKyAgICAgIHRlbXAgPSBuID4+IDI7CisgICAgICBpZiAodGVtcCkKKwl7CisJICBsb25nICpsZGVzdCA9IGRlc3Q7CisJICBjb25zdCBsb25nICpsc3JjID0gc3JjOworCSAgdGVtcC0tOworCSAgZG8KKwkgICAgKi0tbGRlc3QgPSAqLS1sc3JjOworCSAgd2hpbGUgKHRlbXAtLSk7CisJICBkZXN0ID0gbGRlc3Q7CisJICBzcmMgPSBsc3JjOworCX0KKyAgICAgIGlmIChuICYgMikKKwl7CisJICBzaG9ydCAqc2Rlc3QgPSBkZXN0OworCSAgY29uc3Qgc2hvcnQgKnNzcmMgPSBzcmM7CisJICAqLS1zZGVzdCA9ICotLXNzcmM7CisJICBkZXN0ID0gc2Rlc3Q7CisJICBzcmMgPSBzc3JjOworCX0KKyAgICAgIGlmIChuICYgMSkKKwl7CisJICBjaGFyICpjZGVzdCA9IGRlc3Q7CisJICBjb25zdCBjaGFyICpjc3JjID0gc3JjOworCSAgKi0tY2Rlc3QgPSAqLS1jc3JjOworCX0KKyAgICB9CisgIHJldHVybiB4ZGVzdDsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DTVAKK2V4dGVybiBpbnQgbWVtY21wKGNvbnN0IHZvaWQgKiAsY29uc3Qgdm9pZCAqICxzaXplX3QgKTsKKyNkZWZpbmUgbWVtY21wKGNzLCBjdCwgbikgXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pID8gXAorIF9fYnVpbHRpbl9tZW1jbXAoKGNzKSwoY3QpLChuKSkgOiBcCisgbWVtY21wKChjcyksKGN0KSwobikpKQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNIUgorc3RhdGljIGlubGluZSB2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqY3MsIGludCBjLCBzaXplX3QgY291bnQpCit7CisJLyogU29tZW9uZSBlbHNlIGNhbiBvcHRpbWl6ZSB0aGlzLCBJIGRvbid0IGNhcmUgLSB0b255bUBtYWMubGludXgtbTY4ay5vcmcgKi8KKwl1bnNpZ25lZCBjaGFyICpyZXQgPSAodW5zaWduZWQgY2hhciAqKWNzOworCWZvcig7Y291bnQ+MDtjb3VudC0tLHJldCsrKQorCQlpZigqcmV0ID09IGMpIHJldHVybiByZXQ7CisKKwlyZXR1cm4gTlVMTDsKK30KKworI2VuZGlmIC8qIF9NNjhLX1NUUklOR19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zdW4zLWhlYWQuaCBiL2luY2x1ZGUvYXNtLW02OGsvc3VuMy1oZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5OWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3VuMy1oZWFkLmgKQEAgLTAsMCArMSwxMiBAQAorLyogJElkOiBoZWFkLmgsdiAxLjMyIDE5OTYvMTIvMDQgMDA6MTI6NDggZWNkIEV4cCAkICovCisjaWZuZGVmIF9fU1VOM19IRUFEX0gKKyNkZWZpbmUgX19TVU4zX0hFQURfSAorCisjZGVmaW5lIEtFUk5CQVNFICAgICAgICAweEUwMDAwMDAgIC8qIEZpcnN0IGFkZHJlc3MgdGhlIGtlcm5lbCB3aWxsIGV2ZW50dWFsbHkgYmUgKi8KKyNkZWZpbmUgTE9BRF9BRERSICAgICAgIDB4NDAwMCAgICAgIC8qIHByb20ganVtcHMgdG8gdXMgaGVyZSB1bmxlc3MgdGhpcyBpcyBlbGYgL2Jvb3QgKi8KKyNkZWZpbmUgQklfU1RBUlQgKEtFUk5CQVNFICsgMHgzMDAwKSAvKiBiZWdpbm5pbmcgb2YgdGhlIGJvb3RpbmZvIHJlY29yZHMgKi8KKyNkZWZpbmUgRkNfQ09OVFJPTCAgMworI2RlZmluZSBGQ19TVVBFUkQgICAgNQorI2RlZmluZSBGQ19DUFUgICAgICA3CisKKyNlbmRpZiAvKiBfX1NVTjNfSEVBRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3N1bjNfcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tbTY4ay9zdW4zX3BnYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDgyNDExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zdW4zX3BnYWxsb2MuaApAQCAtMCwwICsxLDk1IEBACisvKiBzdW4zX3BnYWxsb2MuaCAtLQorICogcmVvcmdhbml6YXRpb24gYXJvdW5kIDIuMy4zOSwgcm91dGluZXMgbW92ZWQgZnJvbSBzdW4zX3BndGFibGUuaAorICoKKyAqCisgKiAwMi8yNy8yMDAyIC0tIE1vZGlmaWVkIHRvIHN1cHBvcnQgImhpZ2hwdGUiIGltcGxlbWVudGF0aW9uIGluIDIuNS41IChTYW0pCisgKgorICogbW92ZWQgMS8yNi8yMDAwIFNhbSBDcmVhc2V5CisgKi8KKworI2lmbmRlZiBfU1VOM19QR0FMTE9DX0gKKyNkZWZpbmUgX1NVTjNfUEdBTExPQ19ICisKKyNpbmNsdWRlIDxhc20vdGxiLmg+CisKKy8qIEZJWE1FIC0gd2hlbiB3ZSBnZXQgdGhpcyBjb21waWxpbmcgKi8KKy8qIGVybSwgbm93IHRoYXQgaXQncyBjb21waWxpbmcsIHdoYXQgZG8gd2UgZG8gd2l0aCBpdD8gKi8KKyNkZWZpbmUgX0tFUk5QR19UQUJMRSAwCisKK2V4dGVybiBjb25zdCBjaGFyIGJhZF9wbWRfc3RyaW5nW107CisKKyNkZWZpbmUgcG1kX2FsbG9jX29uZShtbSxhZGRyZXNzKSAgICAgICAoeyBCVUcoKTsgKChwbWRfdCAqKTIpOyB9KQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwocHRlX3QgKiBwdGUpCit7CisgICAgICAgIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcHRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBwYWdlICpwYWdlKQoreworICAgICAgICBfX2ZyZWVfcGFnZShwYWdlKTsKK30KKworI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIscHRlKSB0bGJfcmVtb3ZlX3BhZ2UoKHRsYiksKHB0ZSkpCisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBsb25nIHBhZ2UgPSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOworCisJaWYgKCFwYWdlKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldCgodm9pZCAqKXBhZ2UsIDAsIFBBR0VfU0laRSk7CisJcmV0dXJuIChwdGVfdCAqKSAocGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisgICAgICAgIHN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQsIDApOworCisJaWYgKHBhZ2UgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwljbGVhcl9oaWdocGFnZShwYWdlKTsKKwlyZXR1cm4gcGFnZTsKKworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwgcHRlX3QgKnB0ZSkKK3sKKwlwbWRfdmFsKCpwbWQpID0gX19wYSgodW5zaWduZWQgbG9uZylwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlwbWRfdmFsKCpwbWQpID0gX19wYSgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSkpOworfQorCisvKgorICogYWxsb2NhdGluZyBhbmQgZnJlZWluZyBhIHBtZCBpcyB0cml2aWFsOiB0aGUgMS1lbnRyeSBwbWQgaXMKKyAqIGluc2lkZSB0aGUgcGdkLCBzbyBoYXMgbm8gZXh0cmEgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAqLworI2RlZmluZSBwbWRfZnJlZSh4KQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCB4KQkJZG8geyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2ZyZWUocGdkX3QgKiBwZ2QpCit7CisgICAgICAgIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGdkKTsKK30KKworc3RhdGljIGlubGluZSBwZ2RfdCAqIHBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKyAgICAgcGdkX3QgKm5ld19wZ2Q7CisKKyAgICAgbmV3X3BnZCA9IChwZ2RfdCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKyAgICAgbWVtY3B5KG5ld19wZ2QsIHN3YXBwZXJfcGdfZGlyLCBQQUdFX1NJWkUpOworICAgICBtZW1zZXQobmV3X3BnZCwgMCwgKFBBR0VfT0ZGU0VUID4+IFBHRElSX1NISUZUKSk7CisgICAgIHJldHVybiBuZXdfcGdkOworfQorCisjZGVmaW5lIHBnZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpIEJVRygpCisKKyNlbmRpZiAvKiBTVU4zX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zdW4zX3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM19wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk3NGJiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM19wZ3RhYmxlLmgKQEAgLTAsMCArMSwyMzggQEAKKyNpZm5kZWYgX1NVTjNfUEdUQUJMRV9ICisjZGVmaW5lIF9TVU4zX1BHVEFCTEVfSAorCisjaW5jbHVkZSA8YXNtL3N1bjNtbXUuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vdmlydGNvbnZlcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSB0aGluZ3Mgd2hpY2ggY2hhbmdlIGRyYXN0aWNhbGx5IGZvciB0aGUgc3VuMworICogcGFnZXRhYmxlIHN0dWZmLCB0byBhdm9pZCBtYWtpbmcgdG9vIG11Y2ggb2YgYSBtZXNzIG9mIHRoZSBnZW5lcmljIG02OGsKKyAqIGBwZ3RhYmxlLmgnOyB0aGlzIHNob3VsZCBvbmx5IGJlIGluY2x1ZGVkIGZyb20gdGhlIGdlbmVyaWMgZmlsZS4gLS1tCisgKi8KKworLyogRm9yIHZpcnR1YWwgYWRkcmVzcyB0byBwaHlzaWNhbCBhZGRyZXNzIGNvbnZlcnNpb24gKi8KKyNkZWZpbmUgVlRPUChhZGRyKQlfX3BhKGFkZHIpCisjZGVmaW5lIFBUT1YoYWRkcikJX192YShhZGRyKQorCisKKyNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCisKKy8qIFRoZXNlIG5lZWQgdG8gYmUgZGVmaW5lZCBmb3IgY29tcGF0aWJpbGl0eSBhbHRob3VnaCB0aGUgc3VuMyBkb2Vzbid0IHVzZSB0aGVtICovCisjZGVmaW5lIF9QQUdFX05PQ0FDSEUwMzAgMHgwNDAKKyNkZWZpbmUgX0NBQ0hFTUFTSzA0MCAgICh+MHgwNjApCisjZGVmaW5lIF9QQUdFX05PQ0FDSEVfUyAweDA0MAorCisvKiBQYWdlIHByb3RlY3Rpb24gdmFsdWVzIHdpdGhpbiBQVEUuICovCisjZGVmaW5lIFNVTjNfUEFHRV9WQUxJRCAgICAgKDB4ODAwMDAwMDApCisjZGVmaW5lIFNVTjNfUEFHRV9XUklURUFCTEUgKDB4NDAwMDAwMDApCisjZGVmaW5lIFNVTjNfUEFHRV9TWVNURU0gICAgKDB4MjAwMDAwMDApCisjZGVmaW5lIFNVTjNfUEFHRV9OT0NBQ0hFICAgKDB4MTAwMDAwMDApCisjZGVmaW5lIFNVTjNfUEFHRV9BQ0NFU1NFRCAgKDB4MDIwMDAwMDApCisjZGVmaW5lIFNVTjNfUEFHRV9NT0RJRklFRCAgKDB4MDEwMDAwMDApCisKKworLyogRXh0ZXJuYWxseSB1c2VkIHBhZ2UgcHJvdGVjdGlvbiB2YWx1ZXMuICovCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJKFNVTjNfUEFHRV9WQUxJRCkKKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJKFNVTjNfUEFHRV9BQ0NFU1NFRCkKKworI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUyAyOAorCisvKiBDb21wb3VuZCBwYWdlIHByb3RlY3Rpb24gdmFsdWVzLiAqLworLy90b2RvOiB3b3JrIG91dCB3aGljaCBvbmVzICpzaG91bGQqIGhhdmUgU1VOM19QQUdFX05PQ0FDSEUgYW5kIGZpeC4uLgorLy8gaXMgaXQganVzdCBQQUdFX0tFUk5FTCBhbmQgUEFHRV9TSEFSRUQ/CisjZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChTVU4zX1BBR0VfVkFMSUQgXAorCQkJCSB8IFNVTjNfUEFHRV9BQ0NFU1NFRCBcCisJCQkJIHwgU1VOM19QQUdFX05PQ0FDSEUpCisjZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KFNVTjNfUEFHRV9WQUxJRCBcCisJCQkJIHwgU1VOM19QQUdFX1dSSVRFQUJMRSBcCisJCQkJIHwgU1VOM19QQUdFX0FDQ0VTU0VEIFwKKwkJCQkgfCBTVU4zX1BBR0VfTk9DQUNIRSkKKyNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KFNVTjNfUEFHRV9WQUxJRCBcCisJCQkJIHwgU1VOM19QQUdFX0FDQ0VTU0VEIFwKKwkJCQkgfCBTVU4zX1BBR0VfTk9DQUNIRSkKKyNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChTVU4zX1BBR0VfVkFMSUQgXAorCQkJCSB8IFNVTjNfUEFHRV9BQ0NFU1NFRCBcCisJCQkJIHwgU1VOM19QQUdFX05PQ0FDSEUpCisjZGVmaW5lIFBBR0VfS0VSTkVMCV9fcGdwcm90KFNVTjNfUEFHRV9WQUxJRCBcCisJCQkJIHwgU1VOM19QQUdFX1dSSVRFQUJMRSBcCisJCQkJIHwgU1VOM19QQUdFX1NZU1RFTSBcCisJCQkJIHwgU1VOM19QQUdFX05PQ0FDSEUgXAorCQkJCSB8IFNVTjNfUEFHRV9BQ0NFU1NFRCBcCisJCQkJIHwgU1VOM19QQUdFX01PRElGSUVEKQorI2RlZmluZSBQQUdFX0lOSVQJX19wZ3Byb3QoU1VOM19QQUdFX1ZBTElEIFwKKwkJCQkgfCBTVU4zX1BBR0VfV1JJVEVBQkxFIFwKKwkJCQkgfCBTVU4zX1BBR0VfU1lTVEVNIFwKKwkJCQkgfCBTVU4zX1BBR0VfTk9DQUNIRSkKKworLyoKKyAqIFBhZ2UgcHJvdGVjdGlvbnMgZm9yIGluaXRpYWxpc2luZyBwcm90ZWN0aW9uX21hcC4gVGhlIHN1bjMgaGFzIG9ubHkgdHdvCisgKiBwcm90ZWN0aW9uIHNldHRpbmdzLCB2YWxpZCAoaW1wbHlpbmcgcmVhZCBhbmQgZXhlY3V0ZSkgYW5kIHdyaXRlYWJsZS4gVGhlc2UKKyAqIGFyZSBhcyBjbG9zZSBhcyB3ZSBjYW4gZ2V0Li4uCisgKi8KKyNkZWZpbmUgX19QMDAwCVBBR0VfTk9ORQorI2RlZmluZSBfX1AwMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AwMTAJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDAxMQlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMTAwCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19QMTAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19QMTEwCVBBR0VfQ09QWQorI2RlZmluZSBfX1AxMTEJUEFHRV9DT1BZCisKKyNkZWZpbmUgX19TMDAwCVBBR0VfTk9ORQorI2RlZmluZSBfX1MwMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MwMTAJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMDExCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzEwMAlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUzExMAlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMTEJUEFHRV9TSEFSRUQKKworLyogVXNlIHRoZXNlIGZha2UgcGFnZS1wcm90ZWN0aW9ucyBvbiBQTURzLiAqLworI2RlZmluZSBTVU4zX1BNRF9WQUxJRAkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgU1VOM19QTURfTUFTSwkoMHgwMDAwMDAzRikKKyNkZWZpbmUgU1VOM19QTURfTUFHSUMJKDB4MDAwMDAwMkIpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAorICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KKyAqLworI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KSBwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKK3sKKwlwdGVfdmFsKHB0ZSkgPSAocHRlX3ZhbChwdGUpICYgU1VOM19QQUdFX0NIR19NQVNLKSB8IHBncHJvdF92YWwobmV3cHJvdCk7CisJcmV0dXJuIHB0ZTsKK30KKworI2RlZmluZSBwbWRfc2V0KHBtZHAscHRlcCkgZG8ge30gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2Rfc2V0KHBnZF90ICpwZ2RwLCBwbWRfdCAqcG1kcCkKK3sKKwlwZ2RfdmFsKCpwZ2RwKSA9IHZpcnRfdG9fcGh5cyhwbWRwKTsKK30KKworI2RlZmluZSBfX3B0ZV9wYWdlKHB0ZSkgXAorKCh1bnNpZ25lZCBsb25nKSBfX3ZhICgocHRlX3ZhbCAocHRlKSAmIFNVTjNfUEFHRV9QR05VTV9NQVNLKSA8PCBQQUdFX1NISUZUKSkKKyNkZWZpbmUgX19wbWRfcGFnZShwbWQpIFwKKygodW5zaWduZWQgbG9uZykgX192YSAocG1kX3ZhbCAocG1kKSAmIFBBR0VfTUFTSykpCisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9ub25lIChwdGVfdCBwdGUpIHsgcmV0dXJuICFwdGVfdmFsIChwdGUpOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfcHJlc2VudCAocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsIChwdGUpICYgU1VOM19QQUdFX1ZBTElEOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyIChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwlwdGVfdmFsICgqcHRlcCkgPSAwOworfQorCisjZGVmaW5lIHB0ZV9wZm4ocHRlKSAgICAgICAgICAgIChwdGVfdmFsKHB0ZSkgJiBTVU4zX1BBR0VfUEdOVU1fTUFTSykKKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHBncHJvdCkgXAorKHsgcHRlX3QgX19wdGU7IHB0ZV92YWwoX19wdGUpID0gcGZuIHwgcGdwcm90X3ZhbChwZ3Byb3QpOyBfX3B0ZTsgfSkKKworI2RlZmluZSBwdGVfcGFnZShwdGUpCQkobWVtX21hcCsoKF9fcHRlX3BhZ2UocHRlKSAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUKSkKKyNkZWZpbmUgcG1kX3BhZ2UocG1kKQkJKG1lbV9tYXArKChfX3BtZF9wYWdlKHBtZCkgLSBQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCkpCisKKworc3RhdGljIGlubGluZSBpbnQgcG1kX25vbmUyIChwbWRfdCAqcG1kKSB7IHJldHVybiAhcG1kX3ZhbCAoKnBtZCk7IH0KKyNkZWZpbmUgcG1kX25vbmUocG1kKSBwbWRfbm9uZTIoJihwbWQpKQorLy9zdGF0aWMgaW5saW5lIGludCBwbWRfYmFkIChwbWRfdCBwbWQpIHsgcmV0dXJuIChwbWRfdmFsIChwbWQpICYgU1VOM19QTURfTUFTSykgIT0gU1VOM19QTURfTUFHSUM7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBtZF9iYWQyIChwbWRfdCAqcG1kKSB7IHJldHVybiAwOyB9CisjZGVmaW5lIHBtZF9iYWQocG1kKSBwbWRfYmFkMigmKHBtZCkpCitzdGF0aWMgaW5saW5lIGludCBwbWRfcHJlc2VudDIgKHBtZF90ICpwbWQpIHsgcmV0dXJuIHBtZF92YWwgKCpwbWQpICYgU1VOM19QTURfVkFMSUQ7IH0KKy8qICNkZWZpbmUgcG1kX3ByZXNlbnQocG1kKSBwbWRfcHJlc2VudDIoJihwbWQpKSAqLworI2RlZmluZSBwbWRfcHJlc2VudChwbWQpICghcG1kX25vbmUyKCYocG1kKSkpCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2NsZWFyIChwbWRfdCAqcG1kcCkgeyBwbWRfdmFsICgqcG1kcCkgPSAwOyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9ub25lIChwZ2RfdCBwZ2QpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9iYWQgKHBnZF90IHBnZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGdkX3ByZXNlbnQgKHBnZF90IHBnZCkgeyByZXR1cm4gMTsgfQorc3RhdGljIGlubGluZSB2b2lkIHBnZF9jbGVhciAocGdkX3QgKnBnZHApIHt9CisKKworI2RlZmluZSBwdGVfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwoZSkpCisjZGVmaW5lIHBtZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBtZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcG1kX3ZhbChlKSkKKyNkZWZpbmUgcGdkX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcGdkICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQorCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCisgKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uLgorICogW3dlIGhhdmUgdGhlIGZ1bGwgc2V0IGhlcmUgZXZlbiBpZiB0aGV5IGRvbid0IGNoYW5nZSBmcm9tIG02OGtdCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIDE7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBTVU4zX1BBR0VfV1JJVEVBQkxFOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZXhlYyhwdGVfdCBwdGUpCQl7IHJldHVybiAxOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgU1VOM19QQUdFX01PRElGSUVEOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgU1VOM19QQUdFX0FDQ0VTU0VEOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBTVU4zX1BBR0VfQUNDRVNTRUQ7IH0KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gflNVTjNfUEFHRV9XUklURUFCTEU7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3JkcHJvdGVjdChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfZXhwcm90ZWN0KHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gflNVTjNfUEFHRV9NT0RJRklFRDsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSAmPSB+U1VOM19QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gU1VOM19QQUdFX1dSSVRFQUJMRTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtyZWFkKHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2V4ZWMocHRlX3QgcHRlKQl7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBTVU4zX1BBR0VfTU9ESUZJRUQ7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBTVU4zX1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rbm9jYWNoZShwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IFNVTjNfUEFHRV9OT0NBQ0hFOyByZXR1cm4gcHRlOyB9CisvLyB1c2UgdGhpcyB2ZXJzaW9uIHdoZW4gY2FjaGVzIHdvcmsuLi4KKy8vc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjYWNoZShwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IFNVTjNfUEFHRV9OT0NBQ0hFOyByZXR1cm4gcHRlOyB9CisvLyB1bnRpbCB0aGVuLCB1c2U6CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2NhY2hlKHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlOyB9CisKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOworZXh0ZXJuIHBnZF90IGtlcm5lbF9wZ19kaXJbUFRSU19QRVJfUEdEXTsKKworLyogRmluZCBhbiBlbnRyeSBpbiBhIHBhZ2V0YWJsZSBkaXJlY3RvcnkuICovCisjZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKSAgICAgKChhZGRyZXNzKSA+PiBQR0RJUl9TSElGVCkKKworI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKSBcCisoKG1tKS0+cGdkICsgcGdkX2luZGV4KGFkZHJlc3MpKQorCisvKiBGaW5kIGFuIGVudHJ5IGluIGEga2VybmVsIHBhZ2V0YWJsZSBkaXJlY3RvcnkuICovCisjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKQorCisvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSBzZWNvbmQtbGV2ZWwgcGFnZXRhYmxlLiAqLworc3RhdGljIGlubGluZSBwbWRfdCAqcG1kX29mZnNldCAocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAocG1kX3QgKikgcGdkOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3RvX3Bnb2ZmKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlLnB0ZSAmIFNVTjNfUEFHRV9QR05VTV9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHBnb2ZmX3RvX3B0ZShpbmxpbmUgdW5zaWduZWQgb2ZmKQoreworCXB0ZV90IHB0ZSA9IHsgb2ZmICsgU1VOM19QQUdFX0FDQ0VTU0VEIH07CisJcmV0dXJuIHB0ZTsKK30KKworCisvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSB0aGlyZC1sZXZlbCBwYWdldGFibGUuICovCisjZGVmaW5lIHB0ZV9pbmRleChhZGRyZXNzKSAoKGFkZHJlc3MgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFLTEpKQorI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpICgocHRlX3QgKikgX19wbWRfcGFnZSgqcG1kKSArIHB0ZV9pbmRleChhZGRyZXNzKSkKKy8qIEZJWE1FOiBzaG91bGQgd2UgYm90aGVyIHdpdGgga21hcCgpIGhlcmU/ICovCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcmVzcykgKChwdGVfdCAqKWttYXAocG1kX3BhZ2UoKnBtZCkpICsgcHRlX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQocG1kLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHJlc3MpCisjZGVmaW5lIHB0ZV91bm1hcChwdGUpIGt1bm1hcChwdGUpCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSBrdW5tYXAocHRlKQorCisvKiBNYWNyb3MgdG8gKGRlKWNvbnN0cnVjdCB0aGUgZmFrZSBQVEVzIHJlcHJlc2VudGluZyBzd2FwIHBhZ2VzLiAqLworI2RlZmluZSBfX3N3cF90eXBlKHgpCQkoKHgpLnZhbCAmIDB4N0YpCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJKCgoeCkudmFsKSA+PiA3KQorI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLG9mZnNldCkgKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIHwgKChvZmZzZXQpIDw8IDcpKSB9KQorI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSB9KQorI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJKChwdGVfdCkgeyAoeCkudmFsIH0pCisKKyNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCisjZW5kaWYJLyogIV9TVU4zX1BHVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zdW4zaW50cy5oIGIvaW5jbHVkZS9hc20tbTY4ay9zdW4zaW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkODM4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3N1bjNpbnRzLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIHN1bjNpbnRzLmggLS0gTGludXgvU3VuMyBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSBkZWZpbml0aW9ucworICoKKyAqIEVyaWsgVmVyYnJ1Z2dlbiAoZXJpa0BiaWdtYW1hLnh0ZG5ldC5ubCkKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBTVU4zSU5UU19ICisjZGVmaW5lIFNVTjNJTlRTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vaW50ZXJzaWwuaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKworI2RlZmluZSBTVU4zX0lOVF9WRUNTIDE5MgorCit2b2lkIHN1bjNfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK3ZvaWQgc3VuM19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK2ludCBzdW4zX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCisgICAgICAgICAgICAgICAgICAgICBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZAorCQkgICAgKTsKK2V4dGVybiB2b2lkIHN1bjNfaW5pdF9JUlEgKHZvaWQpOworZXh0ZXJuIGlycXJldHVybl90ICgqc3VuM19kZWZhdWx0X2hhbmRsZXJbXSkgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBpcnFyZXR1cm5fdCAoKnN1bjNfaW50aGFuZGxlcltdKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIHZvaWQgc3VuM19mcmVlX2lycSAodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK2V4dGVybiB2b2lkIHN1bjNfZW5hYmxlX2ludGVycnVwdHMgKHZvaWQpOworZXh0ZXJuIHZvaWQgc3VuM19kaXNhYmxlX2ludGVycnVwdHMgKHZvaWQpOworZXh0ZXJuIGludCBzaG93X3N1bjNfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBzdW4zX3Byb2Nlc3NfaW50KGludCwgc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgY2hhciogc3VuM19pbnRyZWc7CisKKy8qIG1hc3RlciBsaXN0IG9mIFZNRSB2ZWN0b3JzIC0tIGRvbid0IGZ1Y2sgd2l0aCB0aGlzICovCisjZGVmaW5lIFNVTjNfVkVDX0ZMT1BQWSAweDQwCisjZGVmaW5lIFNVTjNfVkVDX1ZNRVNDU0kwIDB4NDAKKyNkZWZpbmUgU1VOM19WRUNfVk1FU0NTSTEgMHg0MQorI2RlZmluZSBTVU4zX1ZFQ19DRyAweEE4CisKKworI2VuZGlmIC8qIFNVTjNJTlRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3VuM21tdS5oIGIvaW5jbHVkZS9hc20tbTY4ay9zdW4zbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM4YzE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM21tdS5oCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogRGVmaW5pdGlvbnMgZm9yIFN1bjMgY3VzdG9tIE1NVS4KKyAqLworI2lmbmRlZiBfX1NVTjNfTU1VX0hfXworI2RlZmluZSBfX1NVTjNfTU1VX0hfXworCisjaW5jbHVkZSA8YXNtL21vdnMuaD4KKyNpbmNsdWRlIDxhc20vc3VuMy1oZWFkLmg+CisKKy8qIE1NVSBjaGFyYWN0ZXJpc3RpY3MuICovCisjZGVmaW5lIFNVTjNfU0VHTUFQU19QRVJfQ09OVEVYVAkyMDQ4CisjZGVmaW5lIFNVTjNfUE1FR1NfTlVNCQkJMjU2CisjZGVmaW5lIFNVTjNfQ09OVEVYVFNfTlVNICAgICAgICAgICAgICAgOAorCisjZGVmaW5lIFNVTjNfUE1FR19TSVpFX0JJVFMJIDE3CisjZGVmaW5lIFNVTjNfUE1FR19TSVpFCQkgKDEgPDwgU1VOM19QTUVHX1NJWkVfQklUUykKKyNkZWZpbmUgU1VOM19QTUVHX01BU0sJCSAoU1VOM19QTUVHX1NJWkUgLSAxKQorCisjZGVmaW5lIFNVTjNfUFRFX1NJWkVfQklUUyAgICAgICAxMworI2RlZmluZSBTVU4zX1BURV9TSVpFCQkgKDEgPDwgU1VOM19QVEVfU0laRV9CSVRTKQorI2RlZmluZSBTVU4zX1BURV9NQVNLCQkgKFNVTjNfUFRFX1NJWkUgLSAxKQorCisjZGVmaW5lIFNVTjNfQ09OVFJPTF9NQVNLICAgICAgICgweDBGRkZGRkZDKQorI2RlZmluZSBTVU4zX0lOVkFMSURfUE1FRwkyNTUKKyNkZWZpbmUgU1VOM19JTlZBTElEX0NPTlRFWFQgMjU1CisKKyNkZWZpbmUgQUNfSURQUk9NICAgICAweDAwMDAwMDAwICAgIC8qIDM0ICBJRCBQUk9NLCBSL08sIGJ5dGUsIDMyIGJ5dGVzICAgICAgKi8KKyNkZWZpbmUgQUNfUEFHRU1BUCAgICAweDEwMDAwMDAwICAgIC8qIDMgICBQYWdlbWFwIFIvVywgbG9uZyAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUNfU0VHTUFQICAgICAweDIwMDAwMDAwICAgIC8qIDMgICBTZWdtZW50IG1hcCwgYnl0ZSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUNfQ09OVEVYVCAgICAweDMwMDAwMDAwICAgIC8qIDM0YyBjdXJyZW50IG1tdS1jb250ZXh0ICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUNfU0VOQUJMRSAgICAweDQwMDAwMDAwICAgIC8qIDM0YyBzeXN0ZW0gZHZtYS9jYWNoZS9yZXNldCBlbmFibGUgcmVnKi8KKyNkZWZpbmUgQUNfVURWTUFfRU5CICAweDUwMDAwMDAwICAgIC8qIDM0ICBOb3QgdXNlZCBvbiBTdW4gYm9hcmRzLCBieXRlICAgICAgKi8KKyNkZWZpbmUgQUNfQlVTX0VSUk9SICAweDYwMDAwMDAwICAgIC8qIDM0ICBDbGVhcmVkIG9uIHJlYWQsIGJ5dGUuICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUNfU1lOQ19FUlIgICAweDYwMDAwMDAwICAgIC8qICAgYyBmYXVsdCB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUNfU1lOQ19WQSAgICAweDYwMDAwMDA0ICAgIC8qICAgYyBmYXVsdCB2aXJ0dWFsIGFkZHJlc3MgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUNfQVNZTkNfRVJSICAweDYwMDAwMDA4ICAgIC8qICAgYyBhc3luY2hyb25vdXMgZmF1bHQgdHlwZSAgICAgICAgICAgKi8KKyNkZWZpbmUgQUNfQVNZTkNfVkEgICAweDYwMDAwMDBjICAgIC8qICAgYyBhc3luYyBmYXVsdCB2aXJ0dWFsIGFkZHJlc3MgICAgICAgKi8KKyNkZWZpbmUgQUNfTEVEUyAgICAgICAweDcwMDAwMDAwICAgIC8qIDM0ICBaZXJvIHR1cm5zIG9uIExFRHMsIGJ5dGUgICAgICAgICAgKi8KKyNkZWZpbmUgQUNfQ0FDSEVUQUdTICAweDgwMDAwMDAwICAgIC8qIDM0YyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBWQUMgdGFncyAgICAgKi8KKyNkZWZpbmUgQUNfQ0FDSEVEREFUQSAweDkwMDAwMDAwICAgIC8qIDMgYyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBWQUMgZGF0YSAgICAgKi8KKyNkZWZpbmUgQUNfVURWTUFfTUFQICAweEQwMDAwMDAwICAgIC8qIDQgICBOb3QgdXNlZCBvbiBTdW4gYm9hcmRzLCBieXRlICAgICAgKi8KKyNkZWZpbmUgQUNfVk1FX1ZFQ1RPUiAweEUwMDAwMDAwICAgIC8qIDQgICBGb3Igbm9uLUF1dG92ZWN0b3IgVk1FLCBieXRlICAgICAgKi8KKyNkZWZpbmUgQUNfQk9PVF9TQ0MgICAweEYwMDAwMDAwICAgIC8qIDM0ICBieXBhc3MgdG8gYWNjZXNzIFppbG9nIDg1MzAuIGJ5dGUuKi8KKworI2RlZmluZSBTVU4zX1BBR0VfQ0hHX01BU0sgKFNVTjNfUEFHRV9QR05VTV9NQVNLIFwKKwkJCSAgICB8IFNVTjNfUEFHRV9BQ0NFU1NFRCB8IFNVTjNfUEFHRV9NT0RJRklFRCkKKworLyogQnVzIGFjY2VzcyB0eXBlIHdpdGhpbiBQVEUuICovCisjZGVmaW5lIFNVTjNfUEFHRV9UWVBFX01BU0sgICAoMHgwYzAwMDAwMCkKKyNkZWZpbmUgU1VOM19QQUdFX1RZUEVfTUVNT1JZICgweDAwMDAwMDAwKQorI2RlZmluZSBTVU4zX1BBR0VfVFlQRV9JTyAgICAgKDB4MDQwMDAwMDApCisjZGVmaW5lIFNVTjNfUEFHRV9UWVBFX1ZNRTE2ICAoMHgwODAwMDAwMCkKKyNkZWZpbmUgU1VOM19QQUdFX1RZUEVfVk1FMzIgICgweDBjMDAwMDAwKQorCisvKiBNYXNrIGZvciBwYWdlIG51bWJlciB3aXRoaW4gUFRFLiAqLworI2RlZmluZSBTVU4zX1BBR0VfUEdOVU1fTUFTSyAoMHgwMDA3RkZGRikKKworLyogQml0cyB3aXRoaW4gYnVzLWVycm9yIHJlZ2lzdGVyLiAqLworI2RlZmluZSBTVU4zX0JVU0VSUl9XQVRDSERPRwkoMHgwMSkKKyNkZWZpbmUgU1VOM19CVVNFUlJfdW51c2VkCSgweDAyKQorI2RlZmluZSBTVU4zX0JVU0VSUl9GUEFFTkVSUgkoMHgwNCkKKyNkZWZpbmUgU1VOM19CVVNFUlJfRlBBQkVSUgkoMHgwOCkKKyNkZWZpbmUgU1VOM19CVVNFUlJfVk1FQkVSUgkoMHgxMCkKKyNkZWZpbmUgU1VOM19CVVNFUlJfVElNRU9VVAkoMHgyMCkKKyNkZWZpbmUgU1VOM19CVVNFUlJfUFJPVEVSUgkoMHg0MCkKKyNkZWZpbmUgU1VOM19CVVNFUlJfSU5WQUxJRAkoMHg4MCkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogUmVhZCBidXMgZXJyb3Igc3RhdHVzIHJlZ2lzdGVyIChpbXBsaWNpdGx5IGNsZWFyaW5nIGl0KS4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBzdW4zX2dldF9idXNlcnIodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNmYywgYzsKKworCUdFVF9TRkMgKHNmYyk7CisJU0VUX1NGQyAoRkNfQ09OVFJPTCk7CisJR0VUX0NPTlRST0xfQllURSAoQUNfQlVTX0VSUk9SLCBjKTsKKwlTRVRfU0ZDIChzZmMpOworCisJcmV0dXJuIGM7Cit9CisKKy8qIFJlYWQgc2VnbWFwIGZyb20gaGFyZHdhcmUgTU1VLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHN1bjNfZ2V0X3NlZ21hcCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisgICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgZW50cnk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYywgc2ZjOworCisgICAgICAgIEdFVF9TRkMgKHNmYyk7CisgICAgICAgIFNFVF9TRkMgKEZDX0NPTlRST0wpOworICAgICAgICBHRVRfQ09OVFJPTF9CWVRFIChBQ19TRUdNQVAgfCAoYWRkciAmIFNVTjNfQ09OVFJPTF9NQVNLKSwgYyk7CisgICAgICAgIFNFVF9TRkMgKHNmYyk7CisgICAgICAgIGVudHJ5ID0gYzsKKworICAgICAgICByZXR1cm4gZW50cnk7Cit9CisKKy8qIFdyaXRlIHNlZ21hcCB0byBoYXJkd2FyZSBNTVUuICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3VuM19wdXRfc2VnbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbnRyeSkKK3sKKyAgICAgICAgdW5zaWduZWQgY2hhciBzZmM7CisKKyAgICAgICAgR0VUX0RGQyAoc2ZjKTsKKyAgICAgICAgU0VUX0RGQyAoRkNfQ09OVFJPTCk7CisgICAgICAgIFNFVF9DT05UUk9MX0JZVEUgKEFDX1NFR01BUCB8IChhZGRyICYgU1VOM19DT05UUk9MX01BU0spLCBlbnRyeSk7CisJU0VUX0RGQyAoc2ZjKTsKKworICAgICAgICByZXR1cm47Cit9CisKKy8qIFJlYWQgUFRFIGZyb20gaGFyZHdhcmUgTU1VLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHN1bjNfZ2V0X3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisgICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgZW50cnk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc2ZjOworCisgICAgICAgIEdFVF9TRkMgKHNmYyk7CisgICAgICAgIFNFVF9TRkMgKEZDX0NPTlRST0wpOworICAgICAgICBHRVRfQ09OVFJPTF9XT1JEIChBQ19QQUdFTUFQIHwgKGFkZHIgJiBTVU4zX0NPTlRST0xfTUFTSyksIGVudHJ5KTsKKyAgICAgICAgU0VUX1NGQyAoc2ZjKTsKKworICAgICAgICByZXR1cm4gZW50cnk7Cit9CisKKy8qIFdyaXRlIFBURSB0byBoYXJkd2FyZSBNTVUuICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3VuM19wdXRfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbnRyeSkKK3sKKyAgICAgICAgdW5zaWduZWQgY2hhciBzZmM7CisKKyAgICAgICAgR0VUX0RGQyAoc2ZjKTsKKyAgICAgICAgU0VUX0RGQyAoRkNfQ09OVFJPTCk7CisgICAgICAgIFNFVF9DT05UUk9MX1dPUkQgKEFDX1BBR0VNQVAgfCAoYWRkciAmIFNVTjNfQ09OVFJPTF9NQVNLKSwgZW50cnkpOworCVNFVF9ERkMgKHNmYyk7CisKKyAgICAgICAgcmV0dXJuOworfQorCisvKiBnZXQgY3VycmVudCBjb250ZXh0ICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc3VuM19nZXRfY29udGV4dCh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgc2ZjLCBjOworCisJR0VUX1NGQyhzZmMpOworCVNFVF9TRkMoRkNfQ09OVFJPTCk7CisJR0VUX0NPTlRST0xfQllURShBQ19DT05URVhULCBjKTsKKwlTRVRfU0ZDKHNmYyk7CisKKwlyZXR1cm4gYzsKK30KKworLyogc2V0IGFsdGVybmF0ZSBjb250ZXh0ICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3VuM19wdXRfY29udGV4dCh1bnNpZ25lZCBjaGFyIGMpCit7CisJdW5zaWduZWQgY2hhciBkZmM7CisJR0VUX0RGQyhkZmMpOworCVNFVF9ERkMoRkNfQ09OVFJPTCk7CisJU0VUX0NPTlRST0xfQllURShBQ19DT05URVhULCBjKTsKKwlTRVRfREZDKGRmYyk7CisKKwlyZXR1cm47Cit9CisKK2V4dGVybiB2b2lkICpzdW4zX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgIHVuc2lnbmVkIGxvbmcgdHlwZSk7CisKK2V4dGVybiBpbnQgc3VuM19tYXBfdGVzdCh1bnNpZ25lZCBsb25nIGFkZHIsIGNoYXIgKnZhbCk7CisKKyNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZgkvKiAhX19TVU4zX01NVV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3VuM3guaCBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTY5MWExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zdW4zeC5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgU1VOM1hfSAorI2RlZmluZSBTVU4zWF9ICisKKy8qIGhhcmR3YXJlIGFkZHJlc3NlcyAqLworI2RlZmluZSBTVU4zWF9JT01NVSAgICAgICAweDYwMDAwMDAwCisjZGVmaW5lIFNVTjNYX0VOQVJFRyAgICAgIDB4NjEwMDAwMDAKKyNkZWZpbmUgU1VOM1hfSU5UUkVHICAgICAgMHg2MTAwMTQwMAorI2RlZmluZSBTVU4zWF9ESUFHUkVHICAgICAweDYxMDAxODAwCisjZGVmaW5lIFNVTjNYX1pTMSAgICAgICAgIDB4NjIwMDAwMDAKKyNkZWZpbmUgU1VOM1hfWlMyICAgICAgICAgMHg2MjAwMjAwMAorI2RlZmluZSBTVU4zWF9MQU5DRSAgICAgICAweDY1MDAyMDAwCisjZGVmaW5lIFNVTjNYX0VFUFJPTSAgICAgIDB4NjQwMDAwMDAKKyNkZWZpbmUgU1VOM1hfSURQUk9NICAgICAgMHg2NDAwMDdkOAorI2RlZmluZSBTVU4zWF9WSURFT19CQVNFICAweDUwMDAwMDAwCisjZGVmaW5lIFNVTjNYX1ZJREVPX1A0SUQgIDB4NTAzMDAwMDAKKyNkZWZpbmUgU1VOM1hfRVNQX0JBU0UJICAweDY2MDAwMDAwCisjZGVmaW5lIFNVTjNYX0VTUF9ETUEJICAweDY2MDAxMDAwCisjZGVmaW5lIFNVTjNYX0ZEQyAgICAgICAgIDB4NmUwMDAwMDAKKyNkZWZpbmUgU1VOM1hfRkRDX0ZDUiAgICAgMHg2ZTAwMDQwMAorI2RlZmluZSBTVU4zWF9GRENfRlZSICAgICAweDZlMDAwODAwCisKKy8qIHNvbWUgTlZSQU0gYWRkcmVzc2VzICovCisjZGVmaW5lIFNVTjNYX0VFUFJPTV9DT05TCShTVU4zWF9FRVBST00gKyAweDFmKQorI2RlZmluZSBTVU4zWF9FRVBST01fUE9SVEEJKFNVTjNYX0VFUFJPTSArIDB4NTgpCisjZGVmaW5lIFNVTjNYX0VFUFJPTV9QT1JUQgkoU1VOM1hfRUVQUk9NICsgMHg2MCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3N1bjN4ZmxvcC5oIGIvaW5jbHVkZS9hc20tbTY4ay9zdW4zeGZsb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWQzYjc4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zdW4zeGZsb3AuaApAQCAtMCwwICsxLDI2NSBAQAorLyogc3VuM3hmbG9wLmg6IFN1bjMvODAgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGZsb3BweSBkcml2ZXIuCisgKgorICogRGVyaXZlZCBwYXJ0aWFsbHkgZnJvbSBhc20tc3BhcmMvZmxvcHB5LmgsIHdoaWNoIGlzOgorICogICAgIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKgorICogU3VuM3ggdmVyc2lvbiAyLzQvMjAwMCBTYW0gQ3JlYXNleSAoc2FtbXlAc2FtbXkubmV0KQorICovCisKKyNpZm5kZWYgX19BU01fU1VOM1hfRkxPUFBZX0gKKyNkZWZpbmUgX19BU01fU1VOM1hfRkxPUFBZX0gKKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zdW4zeC5oPgorCisvKiBkZWZhdWx0IGludGVycnVwdCB2ZWN0b3IgKi8KKyNkZWZpbmUgU1VOM1hfRkRDX0lSUSAweDQwCisKKy8qIHNvbWUgY29uc3RhbnRzICovCisjZGVmaW5lIEZDUl9UQyAweDEKKyNkZWZpbmUgRkNSX0VKRUNUIDB4MgorI2RlZmluZSBGQ1JfTVRST04gMHg0CisjZGVmaW5lIEZDUl9EU0VMMSAweDgKKyNkZWZpbmUgRkNSX0RTRUwwIDB4MTAKKworLyogV2UgZG9uJ3QgbmVlZCBubyBzdGlua2luJyBJL08gcG9ydCBhbGxvY2F0aW9uIGNyYXAuICovCisjdW5kZWYgcmVsZWFzZV9yZWdpb24KKyN1bmRlZiBjaGVja19yZWdpb24KKyN1bmRlZiByZXF1ZXN0X3JlZ2lvbgorI2RlZmluZSByZWxlYXNlX3JlZ2lvbihYLCBZKQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgY2hlY2tfcmVnaW9uKFgsIFkpCSgwKQorI2RlZmluZSByZXF1ZXN0X3JlZ2lvbihYLCBZLCBaKQkoMSkKKworc3RydWN0IHN1bjN4ZmxvcF9wcml2YXRlIHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpzdGF0dXNfcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpkYXRhX3I7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqZmNyX3I7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqZnZyX3I7CisJdW5zaWduZWQgY2hhciBmY3I7Cit9IHN1bjN4X2ZkYzsKKworLyogU3VwZXIgcGFyYW5vaWQuLi4gKi8KKyN1bmRlZiBIQVZFX0RJU0FCTEVfSExUCisKKy8qIFJvdXRpbmVzIHVuaXF1ZSB0byBlYWNoIGNvbnRyb2xsZXIgdHlwZSBvbiBhIFN1bi4gKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHN1bjN4XzgyMDcyX2ZkX2luYihpbnQgcG9ydCkKK3sKKwlzdGF0aWMgaW50IG9uY2UgPSAwOworLy8JdWRlbGF5KDUpOworCXN3aXRjaChwb3J0ICYgNykgeworCWRlZmF1bHQ6CisJCXByaW50aygiZmxvcHB5OiBBc2tlZCB0byByZWFkIHVua25vd24gcG9ydCAlZFxuIiwgcG9ydCk7CisJCXBhbmljKCJmbG9wcHk6IFBvcnQgYm9saXhlZC4iKTsKKwljYXNlIDQ6IC8qIEZEX1NUQVRVUyAqLworCQlyZXR1cm4gKCpzdW4zeF9mZGMuc3RhdHVzX3IpICYgflNUQVRVU19ETUE7CisJY2FzZSA1OiAvKiBGRF9EQVRBICovCisJCXJldHVybiAoKnN1bjN4X2ZkYy5kYXRhX3IpOworCWNhc2UgNzogLyogRkRfRElSICovCisJCS8qIHVnbHkgaGFjaywgSSBjYW4ndCBmaW5kIGEgd2F5IHRvIGFjdHVhbGx5IGRldGVjdCB0aGUgZGlzayAqLworCQlpZighb25jZSkgeworCQkJb25jZSA9IDE7CisJCQlyZXR1cm4gMHg4MDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9OworCXBhbmljKCJzdW5fODIwNzJfZmRfaW5iOiBIb3cgZGlkIEkgZ2V0IGhlcmU/Iik7Cit9CisKK3N0YXRpYyB2b2lkIHN1bjN4XzgyMDcyX2ZkX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgaW50IHBvcnQpCit7CisvLwl1ZGVsYXkoNSk7CisJc3dpdGNoKHBvcnQgJiA3KSB7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJmbG9wcHk6IEFza2VkIHRvIHdyaXRlIHRvIHVua25vd24gcG9ydCAlZFxuIiwgcG9ydCk7CisJCXBhbmljKCJmbG9wcHk6IFBvcnQgYm9saXhlZC4iKTsKKwljYXNlIDI6IC8qIEZEX0RPUiAqLworCQkvKiBPaCBnZWVzZSwgODIwNzIgb24gdGhlIFN1biBoYXMgbm8gRE9SIHJlZ2lzdGVyLAorCQkgKiBzbyB3ZSBtYWtlIGRvIHdpdGggdGF1bnRpbmcgdGhlIEZDUi4KKwkJICoKKwkJICogQVNTVU1QVElPTlM6ICBUaGVyZSB3aWxsIG9ubHkgZXZlciBiZSBvbmUgZmxvcHB5CisJCSAqICAgICAgICAgICAgICAgZHJpdmUgYXR0YWNoZWQgdG8gYSBTdW4gY29udHJvbGxlcgorCQkgKiAgICAgICAgICAgICAgIGFuZCBpdCB3aWxsIGJlIGF0IGRyaXZlIHplcm8uCisJCSAqLworCisJeworCQl1bnNpZ25lZCBjaGFyIGZjciA9IHN1bjN4X2ZkYy5mY3I7CisKKwkJaWYodmFsdWUgJiAweDEwKSB7CisJCQlmY3IgfD0gKEZDUl9EU0VMMCB8IEZDUl9NVFJPTik7CisJCX0gZWxzZQorCQkJZmNyICY9IH4oRkNSX0RTRUwwIHwgRkNSX01UUk9OKTsKKworCisJCWlmKGZjciAhPSBzdW4zeF9mZGMuZmNyKSB7CisJCQkqKHN1bjN4X2ZkYy5mY3JfcikgPSBmY3I7CisJCQlzdW4zeF9mZGMuZmNyID0gZmNyOworCQl9CisJfQorCQlicmVhazsKKwljYXNlIDU6IC8qIEZEX0RBVEEgKi8KKwkJKihzdW4zeF9mZGMuZGF0YV9yKSA9IHZhbHVlOworCQlicmVhazsKKwljYXNlIDc6IC8qIEZEX0RDUiAqLworCQkqKHN1bjN4X2ZkYy5zdGF0dXNfcikgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KKwkJKihzdW4zeF9mZGMuc3RhdHVzX3IpID0gdmFsdWU7CisJCWJyZWFrOworCX07CisJcmV0dXJuOworfQorCisKK2FzbWxpbmthZ2UgaXJxcmV0dXJuX3Qgc3VuM3hmbG9wX2hhcmRpbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgc3Q7CisKKyN1bmRlZiBUUkFDRV9GTFBZX0lOVAorI2RlZmluZSBOT19GTE9QUFlfQVNTRU1CTEVSCisKKyNpZmRlZiBUUkFDRV9GTFBZX0lOVAorCXN0YXRpYyBpbnQgY2FsbHM9MDsKKwlzdGF0aWMgaW50IGJ5dGVzPTA7CisJc3RhdGljIGludCBkbWFfd2FpdD0wOworI2VuZGlmCisJaWYoIWRvaW5nX3BkbWEpIHsKKwkJZmxvcHB5X2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKy8vCXByaW50aygiZG9pbmcgcGRtYVxuIik7Ly8gc3QgJXhcbiIsIHN1bl9mZGMtPnN0YXR1c184MjA3Mik7CisKKyNpZmRlZiBUUkFDRV9GTFBZX0lOVAorCWlmKCFjYWxscykKKwkJYnl0ZXMgPSB2aXJ0dWFsX2RtYV9jb3VudDsKKyNlbmRpZgorCisJeworCQlyZWdpc3RlciBpbnQgbGNvdW50OworCQlyZWdpc3RlciBjaGFyICpscHRyOworCisJCWZvcihsY291bnQ9dmlydHVhbF9kbWFfY291bnQsIGxwdHI9dmlydHVhbF9kbWFfYWRkcjsKKwkJICAgIGxjb3VudDsgbGNvdW50LS0sIGxwdHIrKykgeworLyoJCQlzdD1mZF9pbmIodmlydHVhbF9kbWFfcG9ydCs0KSAmIDB4ODAgOyAgKi8KKwkJCXN0ID0gKihzdW4zeF9mZGMuc3RhdHVzX3IpOworLyoJCQlpZihzdCAhPSAweGEwKSAgICAgICAgICAgICAgICAgICovCisvKgkJCQlicmVhazsgICAgICAgICAgICAgICAgICAqLworCisJCQlpZigoc3QgJiAweDgwKSA9PSAwKSB7CisJCQkJdmlydHVhbF9kbWFfY291bnQgPSBsY291bnQ7CisJCQkJdmlydHVhbF9kbWFfYWRkciA9IGxwdHI7CisJCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQkJfQorCisJCQlpZigoc3QgJiAweDIwKSA9PSAwKQorCQkJCWJyZWFrOworCisJCQlpZih2aXJ0dWFsX2RtYV9tb2RlKQorLyoJCQkJZmRfb3V0YigqbHB0ciwgdmlydHVhbF9kbWFfcG9ydCs1KTsgKi8KKwkJCQkqKHN1bjN4X2ZkYy5kYXRhX3IpID0gKmxwdHI7CisJCQllbHNlCisvKgkJCQkqbHB0ciA9IGZkX2luYih2aXJ0dWFsX2RtYV9wb3J0KzUpOyAqLworCQkJCSpscHRyID0gKihzdW4zeF9mZGMuZGF0YV9yKTsKKwkJfQorCisJCXZpcnR1YWxfZG1hX2NvdW50ID0gbGNvdW50OworCQl2aXJ0dWFsX2RtYV9hZGRyID0gbHB0cjsKKy8qCQlzdCA9IGZkX2luYih2aXJ0dWFsX2RtYV9wb3J0KzQpOyAgICovCisJCXN0ID0gKihzdW4zeF9mZGMuc3RhdHVzX3IpOworCX0KKworI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJY2FsbHMrKzsKKyNlbmRpZgorLy8JcHJpbnRrKCJzdD0lMDJ4XG4iLCBzdCk7CisJaWYoc3QgPT0gMHgyMCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCWlmKCEoc3QgJiAweDIwKSkgeworCQl2aXJ0dWFsX2RtYV9yZXNpZHVlICs9IHZpcnR1YWxfZG1hX2NvdW50OworCQl2aXJ0dWFsX2RtYV9jb3VudD0wOworCQlkb2luZ19wZG1hID0gMDsKKworI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCisJCXByaW50aygiY291bnQ9JXgsIHJlc2lkdWU9JXggY2FsbHM9JWQgYnl0ZXM9JXggZG1hX3dhaXQ9JWRcbiIsCisJCSAgICAgICB2aXJ0dWFsX2RtYV9jb3VudCwgdmlydHVhbF9kbWFfcmVzaWR1ZSwgY2FsbHMsIGJ5dGVzLAorCQkgICAgICAgZG1hX3dhaXQpOworCQljYWxscyA9IDA7CisJCWRtYV93YWl0PTA7CisjZW5kaWYKKworCQlmbG9wcHlfaW50ZXJydXB0KGlycSwgZGV2X2lkLCByZWdzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCisjaWZkZWYgVFJBQ0VfRkxQWV9JTlQKKwlpZighdmlydHVhbF9kbWFfY291bnQpCisJCWRtYV93YWl0Kys7CisjZW5kaWYKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgc3VuM3hmbG9wX3JlcXVlc3RfaXJxKHZvaWQpCit7CisJc3RhdGljIGludCBvbmNlID0gMDsKKwlpbnQgZXJyb3I7CisKKwlpZighb25jZSkgeworCQlvbmNlID0gMTsKKwkJZXJyb3IgPSByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBzdW4zeGZsb3BfaGFyZGludCwgU0FfSU5URVJSVVBULCAiZmxvcHB5IiwgMCk7CisJCXJldHVybiAoKGVycm9yID09IDApID8gMCA6IC0xKTsKKwl9IGVsc2UgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBmbG9wcHlfc2V0X2ZsYWdzKGludCAqaW50cyxpbnQgcGFyYW0sIGludCBwYXJhbTIpOworCitzdGF0aWMgaW50IHN1bjN4ZmxvcF9pbml0KHZvaWQpCit7CisJaWYoRkxPUFBZX0lSUSA8IDB4NDApCisJCUZMT1BQWV9JUlEgPSBTVU4zWF9GRENfSVJROworCisJc3VuM3hfZmRjLnN0YXR1c19yID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilTVU4zWF9GREM7CisJc3VuM3hfZmRjLmRhdGFfciAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShTVU4zWF9GREMrMSk7CisJc3VuM3hfZmRjLmZjcl9yID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilTVU4zWF9GRENfRkNSOworCXN1bjN4X2ZkYy5mdnJfciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopU1VOM1hfRkRDX0ZWUjsKKwlzdW4zeF9mZGMuZmNyID0gMDsKKworCS8qIExhc3QgbWludXRlIHNhbml0eSBjaGVjay4uLiAqLworCWlmKCpzdW4zeF9mZGMuc3RhdHVzX3IgPT0gMHhmZikgeworCQlyZXR1cm4gLTE7CisJfQorCisJKnN1bjN4X2ZkYy5mdnJfciA9IEZMT1BQWV9JUlE7CisKKwkqc3VuM3hfZmRjLmZjcl9yID0gRkNSX1RDOworCXVkZWxheSgxMCk7CisJKnN1bjN4X2ZkYy5mY3JfciA9IDA7CisKKwkvKiBTdWNjZXNzLi4uICovCisJZmxvcHB5X3NldF9mbGFncygwLCAxLCBGRF9CUk9LRU5fRENMKTsgLy8gSSBkb24ndCBrbm93IGhvdyB0byBkZXRlY3QgdGhpcy4KKwlhbGxvd2VkX2RyaXZlX21hc2sgPSAweDAxOworCXJldHVybiAoaW50KSBTVU4zWF9GREM7Cit9CisKKy8qIEknbSBub3QgcHJlY2lzZWx5IHN1cmUgdGhpcyBlamVjdCByb3V0aW5lIHdvcmtzICovCitzdGF0aWMgaW50IHN1bjN4X2VqZWN0KHZvaWQpCit7CisJaWYoTUFDSF9JU19TVU4zWCkgeworCisJCXN1bjN4X2ZkYy5mY3IgfD0gKEZDUl9EU0VMMCB8IEZDUl9FSkVDVCk7CisJCSooc3VuM3hfZmRjLmZjcl9yKSA9IHN1bjN4X2ZkYy5mY3I7CisJCXVkZWxheSgxMCk7CisJCXN1bjN4X2ZkYy5mY3IgJj0gfihGQ1JfRFNFTDAgfCBGQ1JfRUpFQ1QpOworCQkqKHN1bjN4X2ZkYy5mY3JfcikgPSBzdW4zeF9mZGMuZmNyOworCX0KKworCXJldHVybiAwOworfQorCisjZGVmaW5lIGZkX2VqZWN0KGRyaXZlKSBzdW4zeF9lamVjdCgpCisKKyNlbmRpZiAvKiAhKF9fQVNNX1NVTjNYX0ZMT1BQWV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zdW4zeHByb20uaCBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM3hwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjczNWVmYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM3hwcm9tLmgKQEAgLTAsMCArMSw0MyBAQAorLyogVXNlZnVsIFBST00gbG9jYXRpb25zICovCisKKyNpZm5kZWYgU1VOM1hfUFJPTV9ICisjZGVmaW5lIFNVTjNYX1BST01fSAorCitleHRlcm4gdm9pZCAoKnN1bjN4X3B1dGNoYXIpKGludCk7CitleHRlcm4gaW50ICgqc3VuM3hfZ2V0Y2hhcikodm9pZCk7CitleHRlcm4gaW50ICgqc3VuM3hfbWF5Z2V0KSh2b2lkKTsKK2V4dGVybiBpbnQgKCpzdW4zeF9tYXlwdXQpKGludCk7CisKK3ZvaWQgc3VuM3hfcmVib290KHZvaWQpOwordm9pZCBzdW4zeF9hYm9ydCh2b2lkKTsKK3ZvaWQgc3VuM3hfcHJvbV9pbml0KHZvaWQpOwordW5zaWduZWQgbG9uZyBzdW4zeF9wcm9tX3B0b3YodW5zaWduZWQgbG9uZyBwYSwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworLyogaW50ZXJlc3RpbmcgaGFyZHdhcmUgbG9jYXRpb25zICovCisjZGVmaW5lIFNVTjNYX0lPTU1VICAgICAgIDB4NjAwMDAwMDAKKyNkZWZpbmUgU1VOM1hfRU5BUkVHICAgICAgMHg2MTAwMDAwMAorI2RlZmluZSBTVU4zWF9JTlRSRUcgICAgICAweDYxMDAxNDAwCisjZGVmaW5lIFNVTjNYX0RJQUdSRUcgICAgIDB4NjEwMDE4MDAKKyNkZWZpbmUgU1VOM1hfWlMxICAgICAgICAgMHg2MjAwMDAwMAorI2RlZmluZSBTVU4zWF9aUzIgICAgICAgICAweDYyMDAyMDAwCisjZGVmaW5lIFNVTjNYX0xBTkNFICAgICAgIDB4NjUwMDIwMDAKKyNkZWZpbmUgU1VOM1hfRUVQUk9NICAgICAgMHg2NDAwMDAwMAorI2RlZmluZSBTVU4zWF9JRFBST00gICAgICAweDY0MDAwN2Q4CisjZGVmaW5lIFNVTjNYX1ZJREVPX0JBU0UgIDB4NTA0MDAwMDAKKyNkZWZpbmUgU1VOM1hfVklERU9fUkVHUyAgMHg1MDMwMDAwMAorCisvKiB2ZWN0b3IgdGFibGUgKi8KKyNkZWZpbmUgU1VOM1hfUFJPTV9CQVNFICAgMHhmZWZlMDAwMAorI2RlZmluZSBTVU4zWF9QX0dFVENIQVIgICAoU1VOM1hfUFJPTV9CQVNFICsgMjApCisjZGVmaW5lIFNVTjNYX1BfUFVUQ0hBUiAgIChTVU4zWF9QUk9NX0JBU0UgKyAyNCkKKyNkZWZpbmUgU1VOM1hfUF9NQVlHRVQgICAgKFNVTjNYX1BST01fQkFTRSArIDI4KQorI2RlZmluZSBTVU4zWF9QX01BWVBVVCAgICAoU1VOM1hfUFJPTV9CQVNFICsgMzIpCisjZGVmaW5lIFNVTjNYX1BfUkVCT09UICAgIChTVU4zWF9QUk9NX0JBU0UgKyA5NikKKyNkZWZpbmUgU1VOM1hfUF9TRVRMRURTICAgKFNVTjNYX1BST01fQkFTRSArIDE0NCkKKyNkZWZpbmUgU1VOM1hfUF9BQk9SVCAgICAgKFNVTjNYX1BST01fQkFTRSArIDE1MikKKworLyogbWFwcGVkIGFyZWEgKi8KKyNkZWZpbmUgU1VOM1hfTUFQX1NUQVJUICAgMHhmZWUwMDAwMAorI2RlZmluZSBTVU4zWF9NQVBfRU5EICAgICAweGZmMDAwMDAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zdXNwZW5kLmggYi9pbmNsdWRlL2FzbS1tNjhrL3N1c3BlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2IzZGRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zdXNwZW5kLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9NNjhLX1NVU1BFTkRfSAorI2RlZmluZSBfTTY4S19TVVNQRU5EX0gKKworLyogRHVtbXkgaW5jbHVkZS4gKi8KKworI2VuZGlmICAvKiBfTTY4S19TVVNQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3dpbV9pb3AuaCBiL2luY2x1ZGUvYXNtLW02OGsvc3dpbV9pb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjliNjc4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zd2ltX2lvcC5oCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogU1dJTSBhY2Nlc3MgdGhyb3VnaCB0aGUgSU9QCisgKiBXcml0dGVuIGJ5IEpvc2h1YSBNLiBUaG9tcHNvbgorICovCisKKy8qIElPUCBudW1iZXIgYW5kIGNoYW5uZWwgbnVtYmVyIGZvciB0aGUgU1dJTSAqLworCisjZGVmaW5lIFNXSU1fSU9QCUlPUF9OVU1fSVNNCisjZGVmaW5lIFNXSU1fQ0hBTgkxCisKKy8qIENvbW1hbmQgY29kZTogKi8KKworI2RlZmluZSBDTURfSU5JVAkJMHgwMQkvKiBJbml0aWFsaXplICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ01EX1NIVVRET1dOCQkweDAyCS8qIFNodXRkb3duICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDTURfU1RBUlRfUE9MTAkJMHgwMwkvKiBTdGFydCBpbnNlcnQvZWplY3QgcG9sbGluZyAgKi8KKyNkZWZpbmUgQ01EX1NUT1BfUE9MTAkJMHgwNAkvKiBTdG9wIGluc2VydC9lamVjdCBwb2xsaW5nICAgKi8KKyNkZWZpbmUgQ01EX1NFVEhGU1RBRwkJMHgwNQkvKiBTZXQgSEZTIHRhZyBidWZmZXIgYWRkcmVzcyAgKi8KKyNkZWZpbmUgQ01EX1NUQVRVUwkJMHgwNgkvKiBTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ01EX0VKRUNUCQkweDA3CS8qIEVqZWN0ICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDTURfRk9STUFUCQkweDA4CS8qIEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDTURfRk9STUFUX1ZFUklGWQkweDA5CS8qIEZvcm1hdCBhbmQgVmVyaWZ5ICAgICAgICAgICAqLworI2RlZmluZSBDTURfV1JJVEUJCTB4MEEJLyogV3JpdGUgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENNRF9SRUFECQkweDBCCS8qIFJlYWQgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDTURfUkVBRF9WRVJJRlkJCTB4MEMJLyogUmVhZCBhbmQgVmVyaWZ5ICAgICAgICAgICAgICovCisjZGVmaW5lIENNRF9DQUNIRV9DVFJMCQkweDBECS8qIENhY2hlIGNvbnRyb2wgICAgICAgICAgICAgICAqLworI2RlZmluZSBDTURfVEFHQlVGRl9DVFJMCTB4MEUJLyogVGFnIGJ1ZmZlciBjb250cm9sICAgICAgICAgICovCisjZGVmaW5lIENNRF9HRVRfSUNPTgkJMHgwRgkvKiBHZXQgSWNvbiAgICAgICAgICAgICAgICAgICAgKi8KKworLyogRHJpdmUgdHlwZXM6ICovCisKKy8qIG5vdGU6IGFwcGxlIHNleiBEUlZfRkRIRCBpcyA0LCBidXQgSSBnZXQgYmFjayBhIHR5cGUgKi8KKy8qICAgICAgIG9mIDUgd2hlbiBJIGRvIGEgZHJpdmUgc3RhdHVzIGNoZWNrIG9uIG15IEZESEQgKi8KKworI2RlZmluZQlEUlZfTk9ORQkwCS8qIE5vIGRyaXZlICAgICAgICAgICAgICovCisjZGVmaW5lCURSVl9VTktOT1dOCTEJLyogVW5zcGVjaWZpZWQgZHJpdmUgICAgKi8KKyNkZWZpbmUJRFJWXzQwMEsJMgkvKiA0MDBLICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlEUlZfODAwSwkzCS8qIDQwMEsvODAwSyAgICAgICAgICAgICovCisjZGVmaW5lCURSVl9GREhECTUJLyogNDAwSy84MDBLLzcyMEsvMTQ0MEsgKi8KKyNkZWZpbmUJRFJWX0hEMjAJNwkvKiBBcHBsZSBIRDIwICAgICAgICAgICAqLworCisvKiBGb3JtYXQgdHlwZXM6ICovCisKKyNkZWZpbmUJRk1UX0hEMjAJMHgwMDAxCS8qICBBcHBsZSBIRDIwICovCisjZGVmaW5lCUZNVF80MDBLCTB4MDAwMgkvKiAgNDAwSyAoR0NSKSAqLworI2RlZmluZQlGTVRfODAwSwkweDAwMDQJLyogIDgwMEsgKEdDUikgKi8KKyNkZWZpbmUJRk1UXzcyMEsJMHgwMDA4CS8qICA3MjBLIChNRk0pICovCisjZGVmaW5lCUZNVF8xNDQwSwkweDAwMTAJLyogMS40NE0gKE1GTSkgKi8KKworI2RlZmluZQlGTURfS0lORF80MDBLCTEKKyNkZWZpbmUJRk1EX0tJTkRfODAwSwkyCisjZGVmaW5lCUZNRF9LSU5EXzcyMEsJMworI2RlZmluZQlGTURfS0lORF8xNDQwSwkxCisKKy8qIEljb24gRmxhZ3M6ICovCisKKyNkZWZpbmUJSUNPTl9NRURJQQkweDAxCS8qIEhhdmUgSU9QIHN1cHBseSBtZWRpYSBpY29uICovCisjZGVmaW5lCUlDT05fRFJJVkUJMHgwMQkvKiBIYXZlIElPUCBzdXBwbHkgZHJpdmUgaWNvbiAqLworCisvKiBFcnJvciBjb2RlczogKi8KKworI2RlZmluZQlnY3JPbk1GTUVycgktNDAwCS8qIEdDUiAoNDAwLzgwMEspIG9uIEhEIG1lZGlhICovCisjZGVmaW5lCXZlckVycgkJLTg0CS8qIHZlcmlmeSBmYWlsZWQgKi8KKyNkZWZpbmUJZm10MkVycgkJLTgzCS8qIGNhbid0IGdldCBlbm91Z2ggc3luYyBkdXJpbmcgZm9ybWF0ICovCisjZGVmaW5lCWZtdDFFcnIJCS04MgkvKiBjYW4ndCBmaW5kIHNlY3RvciAwIGFmdGVyIHRyYWNrIGZvcm1hdCAqLworI2RlZmluZQlzZWN0TkZFcnIJLTgxCS8qIGNhbid0IGZpbmQgc2VjdG9yICovCisjZGVmaW5lCXNlZWtFcnIJCS04MAkvKiBkcml2ZSBlcnJvciBkdXJpbmcgc2VlayAqLworI2RlZmluZQlzcGRBZGpFcnIJLTc5CS8qIGNhbid0IHNldCBkcml2ZSBzcGVlZCAqLworI2RlZmluZQl0d29TaWRlRXJyCS03OAkvKiBkcml2ZSBpcyBzaW5nbGUtc2lkZWQgKi8KKyNkZWZpbmUJaW5pdElXTUVycgktNzcJLyogZXJyb3IgZHVyaW5nIGluaXRpYWxpemF0aW9uICovCisjZGVmaW5lCXRrMGJhZEVycgktNzYJLyogdHJhY2sgemVybyBpcyBiYWQgKi8KKyNkZWZpbmUJY2FudFN0ZXBFcnIJLTc1CS8qIGRyaXZlIGVycm9yIGR1cmluZyBzdGVwICovCisjZGVmaW5lCXdyVW5kZXJydW4JLTc0CS8qIHdyaXRlIHVuZGVycnVuIG9jY3VycmVkICovCisjZGVmaW5lCWJhZERCdFNscAktNzMJLyogYmFkIGRhdGEgYml0c2xpcCBtYXJrcyAqLworI2RlZmluZQliYWREQ2tzdW0JLTcyCS8qIGJhZCBkYXRhIGNoZWNrc3VtICovCisjZGVmaW5lCW5vRHRhTWtFcnIJLTcxCS8qIGNhbid0IGZpbmQgZGF0YSBtYXJrICovCisjZGVmaW5lCWJhZEJ0U2xwRXJyCS03MAkvKiBiYWQgYWRkcmVzcyBiaXRzbGlwIG1hcmtzICovCisjZGVmaW5lCWJhZENrc21FcnIJLTY5CS8qIGJhZCBhZGRyZXNzLW1hcmsgY2hlY2tzdW0gKi8KKyNkZWZpbmUJZGF0YVZlckVycgktNjgJLyogcmVhZC12ZXJpZnkgZmFpbGVkICovCisjZGVmaW5lCW5vQWRyTWtFcnIJLTY3CS8qIGNhbid0IGZpbmQgYW4gYWRkcmVzcyBtYXJrICovCisjZGVmaW5lCW5vTnliRXJyCS02NgkvKiBubyBueWJibGVzPyBkaXNrIGlzIHByb2JhYmx5IGRlZ2F1c3NlZCAqLworI2RlZmluZQlvZmZMaW5FcnIJLTY1CS8qIG5vIGRpc2sgaW4gZHJpdmUgKi8KKyNkZWZpbmUJbm9Ecml2ZUVycgktNjQJLyogZHJpdmUgaXNuJ3QgY29ubmVjdGVkICovCisjZGVmaW5lCW5zRHJ2RXJyCS01NgkvKiBubyBzdWNoIGRyaXZlICovCisjZGVmaW5lCXBhcmFtRXJyCS01MAkvKiBiYWQgcG9zaXRpb25pbmcgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUJd1ByRXJyCQktNDQJLyogd3JpdGUgcHJvdGVjdGVkICovCisjZGVmaW5lCW9wZW5FcnIJCS0yMwkvKiBhbHJlYWR5IGluaXRpYWxpemVkICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBzd2ltX2RydnN0YXR1cyB7CisJX191MTYJY3Vycl90cmFjazsJLyogQ3VycmVudCB0cmFjayBudW1iZXIgICAgICAgICAgICAgICAgICAgKi8KKwlfX3U4CXdyaXRlX3Byb3Q7CS8qIDB4ODAgaWYgZGlzayBpcyB3cml0ZSBwcm90ZWN0ZWQgICAgICAgICovCisJX191OAlkaXNrX2luX2RyaXZlOwkvKiAweDAxIG9yIDB4MDIgaWYgYSBkaXNrIGlzIGluIHRoZSBkcml2ZSAqLworCV9fdTgJaW5zdGFsbGVkOwkvKiAweDAxIGlmIGRyaXZlIGluc3RhbGxlZCwgMHhGRiBpZiBub3QgICAqLworCV9fdTgJbnVtX3NpZGVzOwkvKiAweDgwIGlmIHR3by1zaWRlZCBmb3JtYXQgc3VwcG9ydGVkICAgICAqLworCV9fdTgJdHdvX3NpZGVkOwkvKiAweGZmIGlmIHR3by1zaWRlZCBmb3JtYXQgZGlza2V0dGUgICAgICAqLworCV9fdTgJbmV3X2ludGVyZmFjZTsJLyogMHgwMCBpZiBvbGQgNDAwSyBkcml2ZSwgMHhGRiBpZiBuZXdlciAgKi8KKwlfX3UxNgllcnJvcnM7CQkvKiBEaXNrIGVycm9yIGNvdW50ICAgICAgICAgICAgICAgICAgICAgICAqLworCXN0cnVjdCB7CQkvKiAzMiBiaXRzICovCisJCV9fdTE2CXJlc2VydmVkOworCQlfX3UxNgk6NDsKKwkJX191MTYJZXh0ZXJuYWw6MTsJLyogRHJpdmUgaXMgZXh0ZXJuYWwgICAgICAgICovCisJCV9fdTE2CXNjc2k6MTsJCS8qIERyaXZlIGlzIGEgU0NTSSBkcml2ZSAgICAqLworCQlfX3UxNglmaXhlZDoxOwkvKiBEcml2ZSBoYXMgZml4ZWQgbWVkaWEgICAgKi8KKwkJX191MTYJc2Vjb25kYXJ5OjE7CS8qIERyaXZlIGlzIHNlY29uZGFyeSBkcml2ZSAqLworCQlfX3U4CXR5cGU7CQkvKiBEcml2ZSB0eXBlICAgICAgICAgICAgICAgKi8KKwl9IGluZm87CisJX191OAltZm1fZHJpdmU7CS8qIDB4RkYgaWYgdGhpcyBpcyBhbiBGREhEIGRyaXZlICAgICovCisJX191OAltZm1fZGlzazsJLyogMHhGRiBpZiA3MjBLLzE0NDBLIChNRk0pIGRpc2sgICAgKi8KKwlfX3U4CW1mbV9mb3JtYXQ7CS8qIDB4MDAgaWYgNzIwSywgMHhGRiBpZiAxNDQwSyAgICAgICovCisJX191OAljdGxyX3R5cGU7CS8qIDB4MDAgaWYgSVdNLCAweEZGIGlmIFNXSU0gICAgICAgICovCisJX191MTYJY3Vycl9mb3JtYXQ7CS8qIEN1cnJlbnQgZm9ybWF0IHR5cGUgICAgICAgICAgICAgICovCisJX191MTYJYWxsb3dlZF9mbXQ7CS8qIEFsbG93ZWQgZm9ybWF0IHR5cGVzICAgICAgICAgICAgICovCisJX191MzIJbnVtX2Jsb2NrczsJLyogTnVtYmVyIG9mIGJsb2NrcyBvbiBkaXNrICAgICAgICAgKi8KKwlfX3U4CWljb25fZmxhZ3M7CS8qIEljb24gZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICovCisJX191OAl1bnVzdWVkOworfTsKKworLyogQ29tbWFuZHMgaXNzdWVkIGZyb20gdGhlIGhvc3QgdG8gdGhlIElPUDogKi8KKworc3RydWN0IHN3aW1jbWRfaW5pdCB7CisJX191OAljb2RlOwkJLyogQ01EX0lOSVQgKi8KKwlfX3U4CXVudXN1ZWQ7CisJX191MTYJZXJyb3I7CisJX191OAlkcml2ZXNbMjhdOwkvKiBkcml2ZSB0eXBlIGxpc3QgKi8KK307CisKK3N0cnVjdCBzd2ltY21kX3N0YXJ0cG9sbCB7CisJX191OAljb2RlOwkJLyogQ01EX1NUQVJUX1BPTEwgKi8KKwlfX3U4CXVudXN1ZWQ7CisJX191MTYJZXJyb3I7Cit9OworCitzdHJ1Y3Qgc3dpbWNtZF9zZXRoZnN0YWcgeworCV9fdTgJY29kZTsJCS8qIENNRF9TRVRIRlNUQUcgKi8KKwlfX3U4CXVudXN1ZWQ7CisJX191MTYJZXJyb3I7CisJY2FkZHJfdAl0YWdidWY7CQkvKiBIRlMgdGFnIGJ1ZmZlciBhZGRyZXNzICovCit9OworCitzdHJ1Y3Qgc3dpbWNtZF9zdGF0dXMgeworCV9fdTgJY29kZTsJCS8qIENNRF9TVEFUVVMgKi8KKwlfX3U4CWRyaXZlX251bTsKKwlfX3UxNgllcnJvcjsKKwlzdHJ1Y3Qgc3dpbV9kcnZzdGF0dXMgc3RhdHVzOworfTsKKworc3RydWN0IHN3aW1jbWRfZWplY3QgeworCV9fdTgJY29kZTsJCS8qIENNRF9FSkVDVCAqLworCV9fdTgJZHJpdmVfbnVtOworCV9fdTE2CWVycm9yOworCXN0cnVjdCBzd2ltX2RydnN0YXR1cyBzdGF0dXM7Cit9OworCitzdHJ1Y3Qgc3dpbWNtZF9mb3JtYXQgeworCV9fdTgJY29kZTsJCS8qIENNRF9GT1JNQVQgKi8KKwlfX3U4CWRyaXZlX251bTsKKwlfX3UxNgllcnJvcjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX3UxNiBmbXQ7CSAgIC8qIGZvcm1hdCBraW5kICAgICAgICAgICAgICAgICAgKi8KKwkJCV9fdTggIGhkcmJ5dGU7CSAgIC8qIGZtdCBieXRlIGZvciBoZHIgKDA9ZGVmYXVsdCkgKi8KKwkJCV9fdTggIGludGVybGVhdmU7ICAvKiBpbnRlcmxlYXZlICgwID0gZGVmYXVsdCkgICAgICovCisJCQljYWRkcl90CWRhdGFidWY7ICAgLyogc2VjdG9yIGRhdGEgYnVmZiAoMD1kZWZhdWx0ICAqLworCQkJY2FkZHJfdAl0YWdidWY7CSAgIC8qIHRhZyBkYXRhIGJ1ZmZlciAoMD1kZWZhdWx0KSAgKi8KKwkJfSBmOworCQlzdHJ1Y3Qgc3dpbV9kcnZzdGF0dXMgc3RhdHVzOworCX0gcDsKK307CisKK3N0cnVjdCBzd2ltY21kX2ZtdHZlcmlmeSB7CisJX191OAljb2RlOwkJLyogQ01EX0ZPUk1BVF9WRVJJRlkgKi8KKwlfX3U4CWRyaXZlX251bTsKKwlfX3UxNgllcnJvcjsKK307CisKK3N0cnVjdCBzd2ltY21kX3J3IHsKKwlfX3U4CWNvZGU7CQkvKiBDTURfUkVBRCwgQ01EX1dSSVRFIG9yIENNRF9SRUFEX1ZFUklGWSAqLworCV9fdTgJZHJpdmVfbnVtOworCV9fdTE2CWVycm9yOworCWNhZGRyX3QJYnVmZmVyOwkJLyogUi9XIGJ1ZmZlciBhZGRyZXNzICovCisJX191MzIJZmlyc3RfYmxvY2s7CS8qIFN0YXJ0aW5nIGJsb2NrICAgICAqLworCV9fdTMyCW51bV9ibG9ja3M7CS8qIE51bWJlciBvZiBibG9ja3MgICAqLworCV9fdTgJdGFnWzEyXTsJLyogdGFnIGRhdGEgICAgICAgICAgICovCit9OworCitzdHJ1Y3Qgc3dpbWNtZF9jYWNoZWN0bCB7CisJX191OAljb2RlOwkJLyogQ01EX0NBQ0hFX0NUUkwgKi8KKwlfX3U4CXVudXNlZDsKKwlfX3UxNgllcnJvcjsKKwlfX3U4CWVuYWJsZTsJCS8qIE5vbnplcm8gdG8gZW5hYmxlIGNhY2hlICAgICAgICAgICAgICAgICovCisJX191OAlpbnN0YWxsOwkvKiArMSA9IGluc3RhbGwsIC0xID0gcmVtb3ZlLCAwID0gbmVpdGhlciAqLworfTsKKworc3RydWN0IHN3aW1jbWRfdGFnYnVmY3RsIHsKKwlfX3U4CWNvZGU7CQkvKiBDTURfVEFHQlVGRl9DVFJMICovCisJX191OAl1bnVzZWQ7CisJX191MTYJZXJyb3I7CisJY2FkZHJfdAlidWY7CQkvKiBidWZmZXIgYWRkcmVzcyBvciAwIHRvIGRpc2FibGUgKi8KK307CisKK3N0cnVjdCBzd2ltY21kX2dldGljb24geworCV9fdTgJY29kZTsJCS8qIENNRF9HRVRfSUNPTiAqLworCV9fdTgJZHJpdmVfbnVtOworCV9fdTE2CWVycm9yOworCWNhZGRyX3QJYnVmZmVyOwkJLyogTnVmZmVyIGFkZHJlc3MgKi8KKwlfX3UxNglraW5kOwkJLyogMCA9IG1lZGlhIGljb24sIDEgPSBkcml2ZSBpY29uICovCisJX191MTYJdW51c2VkOworCV9fdTE2CW1heF9ieXRlczsJLyogbWF4aW11bSAgYnl0ZSBjb3VudCAqLworfTsKKworLyogTWVzc2FnZXMgZnJvbSB0aGUgU1dJTSBJT1AgdG8gdGhlIGhvc3QgQ1BVOiAqLworCitzdHJ1Y3Qgc3dpbW1zZ19zdGF0dXMgeworCV9fdTgJY29kZTsJCS8qIDEgPSBpbnNlcnQsIDIgPSBlamVjdCwgMyA9IHN0YXR1cyBjaGFuZ2VkICovCisJX191OAlkcml2ZV9udW07CisJX191MTYJZXJyb3I7CisJc3RydWN0IHN3aW1fZHJ2c3RhdHVzIHN0YXR1czsKK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1tNjhrL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZDM0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3N5c3RlbS5oCkBAIC0wLDAgKzEsMjAxIEBACisjaWZuZGVmIF9NNjhLX1NZU1RFTV9ICisjZGVmaW5lIF9NNjhLX1NZU1RFTV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4gLyogZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2VudHJ5Lmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBzd2l0Y2hfdG8obikgc2hvdWxkIHN3aXRjaCB0YXNrcyB0byB0YXNrIHB0ciwgZmlyc3QgY2hlY2tpbmcgdGhhdAorICogcHRyIGlzbid0IHRoZSBjdXJyZW50IHRhc2ssIGluIHdoaWNoIGNhc2UgaXQgZG9lcyBub3RoaW5nLiAgVGhpcworICogYWxzbyBjbGVhcnMgdGhlIFRTLWZsYWcgaWYgdGhlIHRhc2sgd2Ugc3dpdGNoZWQgdG8gaGFzIHVzZWQgdGhlCisgKiBtYXRoIGNvLXByb2Nlc3NvciBsYXRlc3QuCisgKi8KKy8qCisgKiBzd2l0Y2hfdG8oKSBzYXZlcyB0aGUgZXh0cmEgcmVnaXN0ZXJzLCB0aGF0IGFyZSBub3Qgc2F2ZWQKKyAqIGF1dG9tYXRpY2FsbHkgYnkgU0FWRV9TV0lUQ0hfU1RBQ0sgaW4gcmVzdW1lKCksIGllLiBkMC1kNSBhbmQKKyAqIGEwLWExLiBTb21lIG9mIHRoZXNlIGFyZSB1c2VkIGJ5IHNjaGVkdWxlKCkgYW5kIGl0cyBwcmVkZWNlc3NvcnMKKyAqIGFuZCBzbyB3ZSBtaWdodCBnZXQgc2VlIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHdoZW4gYSB0YXNrIHJldHVybnMKKyAqIHdpdGggdW5leHBlY3RlZCByZWdpc3RlciB2YWx1ZXMuCisgKgorICogc3lzY2FsbCBzdG9yZXMgdGhlc2UgcmVnaXN0ZXJzIGl0c2VsZiBhbmQgbm9uZSBvZiB0aGVtIGFyZSB1c2VkCisgKiBieSBzeXNjYWxsIGFmdGVyIHRoZSBmdW5jdGlvbiBpbiB0aGUgc3lzY2FsbCBoYXMgYmVlbiBjYWxsZWQuCisgKgorICogQmV3YXJlIHRoYXQgcmVzdW1lIG5vdyBleHBlY3RzICpuZXh0IHRvIGJlIGluIGQxIGFuZCB0aGUgb2Zmc2V0IG9mCisgKiB0c3MgdG8gYmUgaW4gYTEuIFRoaXMgc2F2ZXMgYSBmZXcgaW5zdHJ1Y3Rpb25zIGFzIHdlIG5vIGxvbmdlciBoYXZlCisgKiB0byBwdXNoIHRoZW0gb250byB0aGUgc3RhY2sgYW5kIHJlYWQgdGhlbSBiYWNrIHJpZ2h0IGFmdGVyLgorICoKKyAqIDAyLzE3Lzk2IC0gSmVzIFNvcmVuc2VuIChqZHNAa29tLmF1Yy5kaykKKyAqCisgKiBDaGFuZ2VkIDk2LzA5LzE5IGJ5IEFuZHJlYXMgU2Nod2FiCisgKiBwYXNzIHByZXYgaW4gYTAsIG5leHQgaW4gYTEKKyAqLworYXNtbGlua2FnZSB2b2lkIHJlc3VtZSh2b2lkKTsKKyNkZWZpbmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KSBkbyB7IFwKKyAgcmVnaXN0ZXIgdm9pZCAqX3ByZXYgX19hc21fXyAoImEwIikgPSAocHJldik7IFwKKyAgcmVnaXN0ZXIgdm9pZCAqX25leHQgX19hc21fXyAoImExIikgPSAobmV4dCk7IFwKKyAgcmVnaXN0ZXIgdm9pZCAqX2xhc3QgX19hc21fXyAoImQxIik7IFwKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18oImpic3IgcmVzdW1lIiBcCisJCSAgICAgICA6ICI9YSIgKF9wcmV2KSwgIj1hIiAoX25leHQpLCAiPWQiIChfbGFzdCkgXAorCQkgICAgICAgOiAiMCIgKF9wcmV2KSwgIjEiIChfbmV4dCkgXAorCQkgICAgICAgOiAiZDAiLCAiZDIiLCAiZDMiLCAiZDQiLCAiZDUiKTsgXAorICAobGFzdCkgPSBfbGFzdDsgXAorfSB3aGlsZSAoMCkKKworCisvKiBpbnRlcnJ1cHQgY29udHJvbC4uICovCisjaWYgMAorI2RlZmluZSBsb2NhbF9pcnFfZW5hYmxlKCkgYXNtIHZvbGF0aWxlICgiYW5kaXcgJTAsJSVzciI6IDogImkiIChBTExPV0lOVCkgOiAibWVtb3J5IikKKyNlbHNlCisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2RlZmluZSBsb2NhbF9pcnFfZW5hYmxlKCkgKHsJCQkJCQkJXAorCWlmIChNQUNIX0lTX1E0MCB8fCAhaGFyZGlycV9jb3VudCgpKQkJCQkJXAorCQlhc20gdm9sYXRpbGUgKCJhbmRpdyAlMCwlJXNyIjogOiAiaSIgKEFMTE9XSU5UKSA6ICJtZW1vcnkiKTsJXAorfSkKKyNlbmRpZgorI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpIGFzbSB2b2xhdGlsZSAoIm9yaXcgICMweDA3MDAsJSVzciI6IDogOiAibWVtb3J5IikKKyNkZWZpbmUgbG9jYWxfc2F2ZV9mbGFncyh4KSBhc20gdm9sYXRpbGUgKCJtb3ZldyAlJXNyLCUwIjoiPWQiICh4KSA6IDogIm1lbW9yeSIpCisjZGVmaW5lIGxvY2FsX2lycV9yZXN0b3JlKHgpIGFzbSB2b2xhdGlsZSAoIm1vdmV3ICUwLCUlc3IiOiA6ImQiICh4KSA6ICJtZW1vcnkiKQorCitzdGF0aWMgaW5saW5lIGludCBpcnFzX2Rpc2FibGVkKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwlyZXR1cm4gZmxhZ3MgJiB+QUxMT1dJTlQ7Cit9CisKKy8qIEZvciBzcGlubG9ja3MgZXRjICovCisjZGVmaW5lIGxvY2FsX2lycV9zYXZlKHgpCSh7IGxvY2FsX3NhdmVfZmxhZ3MoeCk7IGxvY2FsX2lycV9kaXNhYmxlKCk7IH0pCisKKy8qCisgKiBGb3JjZSBzdHJpY3QgQ1BVIG9yZGVyaW5nLgorICogTm90IHJlYWxseSByZXF1aXJlZCBvbiBtNjhrLi4uCisgKi8KKyNkZWZpbmUgbm9wKCkJCWRvIHsgYXNtIHZvbGF0aWxlICgibm9wIik7IGJhcnJpZXIoKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbWIoKQkJYmFycmllcigpCisjZGVmaW5lIHJtYigpCQliYXJyaWVyKCkKKyNkZWZpbmUgd21iKCkJCWJhcnJpZXIoKQorI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgICAgZG8geyB4Y2hnKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3dtYih2YXIsIHZhbHVlKSAgICBkbyB7IHZhciA9IHZhbHVlOyB3bWIoKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfd21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorCisKKyNkZWZpbmUgeGNoZyhwdHIseCkgKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCisjZGVmaW5lIHRhcyhwdHIpICh4Y2hnKChwdHIpLDEpKQorCitzdHJ1Y3QgX194Y2hnX2R1bW15IHsgdW5zaWduZWQgbG9uZyBhWzEwMF07IH07CisjZGVmaW5lIF9feGcoeCkgKCh2b2xhdGlsZSBzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHgpKQorCisjaWZuZGVmIENPTkZJR19STVdfSU5TTlMKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICogcHRyLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB0bXA7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXRtcCA9ICoodTggKilwdHI7CisJCSoodTggKilwdHIgPSB4OworCQl4ID0gdG1wOworCQlicmVhazsKKwljYXNlIDI6CisJCXRtcCA9ICoodTE2ICopcHRyOworCQkqKHUxNiAqKXB0ciA9IHg7CisJCXggPSB0bXA7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdG1wID0gKih1MzIgKilwdHI7CisJCSoodTMyICopcHRyID0geDsKKwkJeCA9IHRtcDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiB4OworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICogcHRyLCBpbnQgc2l6ZSkKK3sKKwlzd2l0Y2ggKHNpemUpIHsKKwkgICAgY2FzZSAxOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXworCQkJKCJtb3ZlYiAlMiwlMFxuXHQiCisJCQkgIjE6XG5cdCIKKwkJCSAiY2FzYiAlMCwlMSwlMlxuXHQiCisJCQkgImpuZSAxYiIKKwkJCSA6ICI9JmQiICh4KSA6ICJkIiAoeCksICJtIiAoKl9feGcocHRyKSkgOiAibWVtb3J5Iik7CisJCWJyZWFrOworCSAgICBjYXNlIDI6CisJCV9fYXNtX18gX192b2xhdGlsZV9fCisJCQkoIm1vdmV3ICUyLCUwXG5cdCIKKwkJCSAiMTpcblx0IgorCQkJICJjYXN3ICUwLCUxLCUyXG5cdCIKKwkJCSAiam5lIDFiIgorCQkJIDogIj0mZCIgKHgpIDogImQiICh4KSwgIm0iICgqX194ZyhwdHIpKSA6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgNDoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkJCSgibW92ZWwgJTIsJTBcblx0IgorCQkJICIxOlxuXHQiCisJCQkgImNhc2wgJTAsJTEsJTJcblx0IgorCQkJICJqbmUgMWIiCisJCQkgOiAiPSZkIiAoeCkgOiAiZCIgKHgpLCAibSIgKCpfX3hnKHB0cikpIDogIm1lbW9yeSIpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHg7Cit9CisjZW5kaWYKKworLyoKKyAqIEF0b21pYyBjb21wYXJlIGFuZCBleGNoYW5nZS4gIENvbXBhcmUgT0xEIHdpdGggTUVNLCBpZiBpZGVudGljYWwsCisgKiBzdG9yZSBORVcgaW4gTUVNLiAgUmV0dXJuIHRoZSBpbml0aWFsIHZhbHVlIGluIE1FTS4gIFN1Y2Nlc3MgaXMKKyAqIGluZGljYXRlZCBieSBjb21wYXJpbmcgUkVUVVJOIHdpdGggT0xELgorICovCisjaWZkZWYgQ09ORklHX1JNV19JTlNOUworI2RlZmluZSBfX0hBVkVfQVJDSF9DTVBYQ0hHCTEKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZyh2b2xhdGlsZSB2b2lkICpwLCB1bnNpZ25lZCBsb25nIG9sZCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNhc2IgJTAsJTIsJTEiCisJCQkJICAgICAgOiAiPWQiIChvbGQpLCAiPW0iICgqKGNoYXIgKilwKQorCQkJCSAgICAgIDogImQiIChuZXcpLCAiMCIgKG9sZCksICJtIiAoKihjaGFyICopcCkpOworCQlicmVhazsKKwljYXNlIDI6CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgiY2FzdyAlMCwlMiwlMSIKKwkJCQkgICAgICA6ICI9ZCIgKG9sZCksICI9bSIgKCooc2hvcnQgKilwKQorCQkJCSAgICAgIDogImQiIChuZXcpLCAiMCIgKG9sZCksICJtIiAoKihzaG9ydCAqKXApKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNhc2wgJTAsJTIsJTEiCisJCQkJICAgICAgOiAiPWQiIChvbGQpLCAiPW0iICgqKGludCAqKXApCisJCQkJICAgICAgOiAiZCIgKG5ldyksICIwIiAob2xkKSwgIm0iICgqKGludCAqKXApKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBvbGQ7Cit9CisKKyNkZWZpbmUgY21weGNoZyhwdHIsbyxuKVwKKwkoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGcoKHB0ciksKHVuc2lnbmVkIGxvbmcpKG8pLFwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpKG4pLHNpemVvZigqKHB0cikpKSkKKyNlbmRpZgorCisjZGVmaW5lIGFyY2hfYWxpZ25fc3RhY2soeCkgKHgpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTTY4S19TWVNURU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tbTY4ay90ZXJtYml0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZWVjM2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3Rlcm1iaXRzLmgKQEAgLTAsMCArMSwxNzUgQEAKKyNpZm5kZWYgX19BUkNIX002OEtfVEVSTUJJVFNfSF9fCisjZGVmaW5lIF9fQVJDSF9NNjhLX1RFUk1CSVRTX0hfXworCisjaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyCWNjX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlzcGVlZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJdGNmbGFnX3Q7CisKKyNkZWZpbmUgTkNDUyAxOQorc3RydWN0IHRlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCit9OworCisvKiBjX2NjIGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUgVklOVFIgMAorI2RlZmluZSBWUVVJVCAxCisjZGVmaW5lIFZFUkFTRSAyCisjZGVmaW5lIFZLSUxMIDMKKyNkZWZpbmUgVkVPRiA0CisjZGVmaW5lIFZUSU1FIDUKKyNkZWZpbmUgVk1JTiA2CisjZGVmaW5lIFZTV1RDIDcKKyNkZWZpbmUgVlNUQVJUIDgKKyNkZWZpbmUgVlNUT1AgOQorI2RlZmluZSBWU1VTUCAxMAorI2RlZmluZSBWRU9MIDExCisjZGVmaW5lIFZSRVBSSU5UIDEyCisjZGVmaW5lIFZESVNDQVJEIDEzCisjZGVmaW5lIFZXRVJBU0UgMTQKKyNkZWZpbmUgVkxORVhUIDE1CisjZGVmaW5lIFZFT0wyIDE2CisKKworLyogY19pZmxhZyBiaXRzICovCisjZGVmaW5lIElHTkJSSwkwMDAwMDAxCisjZGVmaW5lIEJSS0lOVAkwMDAwMDAyCisjZGVmaW5lIElHTlBBUgkwMDAwMDA0CisjZGVmaW5lIFBBUk1SSwkwMDAwMDEwCisjZGVmaW5lIElOUENLCTAwMDAwMjAKKyNkZWZpbmUgSVNUUklQCTAwMDAwNDAKKyNkZWZpbmUgSU5MQ1IJMDAwMDEwMAorI2RlZmluZSBJR05DUgkwMDAwMjAwCisjZGVmaW5lIElDUk5MCTAwMDA0MDAKKyNkZWZpbmUgSVVDTEMJMDAwMTAwMAorI2RlZmluZSBJWE9OCTAwMDIwMDAKKyNkZWZpbmUgSVhBTlkJMDAwNDAwMAorI2RlZmluZSBJWE9GRgkwMDEwMDAwCisjZGVmaW5lIElNQVhCRUwJMDAyMDAwMAorI2RlZmluZSBJVVRGOAkwMDQwMDAwCisKKy8qIGNfb2ZsYWcgYml0cyAqLworI2RlZmluZSBPUE9TVAkwMDAwMDAxCisjZGVmaW5lIE9MQ1VDCTAwMDAwMDIKKyNkZWZpbmUgT05MQ1IJMDAwMDAwNAorI2RlZmluZSBPQ1JOTAkwMDAwMDEwCisjZGVmaW5lIE9OT0NSCTAwMDAwMjAKKyNkZWZpbmUgT05MUkVUCTAwMDAwNDAKKyNkZWZpbmUgT0ZJTEwJMDAwMDEwMAorI2RlZmluZSBPRkRFTAkwMDAwMjAwCisjZGVmaW5lIE5MRExZCTAwMDA0MDAKKyNkZWZpbmUgICBOTDAJMDAwMDAwMAorI2RlZmluZSAgIE5MMQkwMDAwNDAwCisjZGVmaW5lIENSRExZCTAwMDMwMDAKKyNkZWZpbmUgICBDUjAJMDAwMDAwMAorI2RlZmluZSAgIENSMQkwMDAxMDAwCisjZGVmaW5lICAgQ1IyCTAwMDIwMDAKKyNkZWZpbmUgICBDUjMJMDAwMzAwMAorI2RlZmluZSBUQUJETFkJMDAxNDAwMAorI2RlZmluZSAgIFRBQjAJMDAwMDAwMAorI2RlZmluZSAgIFRBQjEJMDAwNDAwMAorI2RlZmluZSAgIFRBQjIJMDAxMDAwMAorI2RlZmluZSAgIFRBQjMJMDAxNDAwMAorI2RlZmluZSAgIFhUQUJTCTAwMTQwMDAKKyNkZWZpbmUgQlNETFkJMDAyMDAwMAorI2RlZmluZSAgIEJTMAkwMDAwMDAwCisjZGVmaW5lICAgQlMxCTAwMjAwMDAKKyNkZWZpbmUgVlRETFkJMDA0MDAwMAorI2RlZmluZSAgIFZUMAkwMDAwMDAwCisjZGVmaW5lICAgVlQxCTAwNDAwMDAKKyNkZWZpbmUgRkZETFkJMDEwMDAwMAorI2RlZmluZSAgIEZGMAkwMDAwMDAwCisjZGVmaW5lICAgRkYxCTAxMDAwMDAKKworLyogY19jZmxhZyBiaXQgbWVhbmluZyAqLworI2RlZmluZSBDQkFVRAkwMDEwMDE3CisjZGVmaW5lICBCMAkwMDAwMDAwCQkvKiBoYW5nIHVwICovCisjZGVmaW5lICBCNTAJMDAwMDAwMQorI2RlZmluZSAgQjc1CTAwMDAwMDIKKyNkZWZpbmUgIEIxMTAJMDAwMDAwMworI2RlZmluZSAgQjEzNAkwMDAwMDA0CisjZGVmaW5lICBCMTUwCTAwMDAwMDUKKyNkZWZpbmUgIEIyMDAJMDAwMDAwNgorI2RlZmluZSAgQjMwMAkwMDAwMDA3CisjZGVmaW5lICBCNjAwCTAwMDAwMTAKKyNkZWZpbmUgIEIxMjAwCTAwMDAwMTEKKyNkZWZpbmUgIEIxODAwCTAwMDAwMTIKKyNkZWZpbmUgIEIyNDAwCTAwMDAwMTMKKyNkZWZpbmUgIEI0ODAwCTAwMDAwMTQKKyNkZWZpbmUgIEI5NjAwCTAwMDAwMTUKKyNkZWZpbmUgIEIxOTIwMAkwMDAwMDE2CisjZGVmaW5lICBCMzg0MDAJMDAwMDAxNworI2RlZmluZSBFWFRBIEIxOTIwMAorI2RlZmluZSBFWFRCIEIzODQwMAorI2RlZmluZSBDU0laRQkwMDAwMDYwCisjZGVmaW5lICAgQ1M1CTAwMDAwMDAKKyNkZWZpbmUgICBDUzYJMDAwMDAyMAorI2RlZmluZSAgIENTNwkwMDAwMDQwCisjZGVmaW5lICAgQ1M4CTAwMDAwNjAKKyNkZWZpbmUgQ1NUT1BCCTAwMDAxMDAKKyNkZWZpbmUgQ1JFQUQJMDAwMDIwMAorI2RlZmluZSBQQVJFTkIJMDAwMDQwMAorI2RlZmluZSBQQVJPREQJMDAwMTAwMAorI2RlZmluZSBIVVBDTAkwMDAyMDAwCisjZGVmaW5lIENMT0NBTAkwMDA0MDAwCisjZGVmaW5lIENCQVVERVggMDAxMDAwMAorI2RlZmluZSAgICBCNTc2MDAgMDAxMDAwMQorI2RlZmluZSAgIEIxMTUyMDAgMDAxMDAwMgorI2RlZmluZSAgIEIyMzA0MDAgMDAxMDAwMworI2RlZmluZSAgIEI0NjA4MDAgMDAxMDAwNAorI2RlZmluZSAgIEI1MDAwMDAgMDAxMDAwNQorI2RlZmluZSAgIEI1NzYwMDAgMDAxMDAwNgorI2RlZmluZSAgIEI5MjE2MDAgMDAxMDAwNworI2RlZmluZSAgQjEwMDAwMDAgMDAxMDAxMAorI2RlZmluZSAgQjExNTIwMDAgMDAxMDAxMQorI2RlZmluZSAgQjE1MDAwMDAgMDAxMDAxMgorI2RlZmluZSAgQjIwMDAwMDAgMDAxMDAxMworI2RlZmluZSAgQjI1MDAwMDAgMDAxMDAxNAorI2RlZmluZSAgQjMwMDAwMDAgMDAxMDAxNQorI2RlZmluZSAgQjM1MDAwMDAgMDAxMDAxNgorI2RlZmluZSAgQjQwMDAwMDAgMDAxMDAxNworI2RlZmluZSBDSUJBVUQJICAwMDIwMDM2MDAwMDAJLyogaW5wdXQgYmF1ZCByYXRlIChub3QgdXNlZCkgKi8KKyNkZWZpbmUgQ01TUEFSCSAgMDEwMDAwMDAwMDAwCQkvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCisjZGVmaW5lIENSVFNDVFMJICAwMjAwMDAwMDAwMDAJCS8qIGZsb3cgY29udHJvbCAqLworCisvKiBjX2xmbGFnIGJpdHMgKi8KKyNkZWZpbmUgSVNJRwkwMDAwMDAxCisjZGVmaW5lIElDQU5PTgkwMDAwMDAyCisjZGVmaW5lIFhDQVNFCTAwMDAwMDQKKyNkZWZpbmUgRUNITwkwMDAwMDEwCisjZGVmaW5lIEVDSE9FCTAwMDAwMjAKKyNkZWZpbmUgRUNIT0sJMDAwMDA0MAorI2RlZmluZSBFQ0hPTkwJMDAwMDEwMAorI2RlZmluZSBOT0ZMU0gJMDAwMDIwMAorI2RlZmluZSBUT1NUT1AJMDAwMDQwMAorI2RlZmluZSBFQ0hPQ1RMCTAwMDEwMDAKKyNkZWZpbmUgRUNIT1BSVAkwMDAyMDAwCisjZGVmaW5lIEVDSE9LRQkwMDA0MDAwCisjZGVmaW5lIEZMVVNITwkwMDEwMDAwCisjZGVmaW5lIFBFTkRJTgkwMDQwMDAwCisjZGVmaW5lIElFWFRFTgkwMTAwMDAwCisKKworLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENPT0ZGCQkwCisjZGVmaW5lCVRDT09OCQkxCisjZGVmaW5lCVRDSU9GRgkJMgorI2RlZmluZQlUQ0lPTgkJMworCisvKiB0Y2ZsdXNoKCkgYW5kIFRDRkxTSCB1c2UgdGhlc2UgKi8KKyNkZWZpbmUJVENJRkxVU0gJMAorI2RlZmluZQlUQ09GTFVTSAkxCisjZGVmaW5lCVRDSU9GTFVTSAkyCisKKy8qIHRjc2V0YXR0ciB1c2VzIHRoZXNlICovCisjZGVmaW5lCVRDU0FOT1cJCTAKKyNkZWZpbmUJVENTQURSQUlOCTEKKyNkZWZpbmUJVENTQUZMVVNICTIKKworI2VuZGlmIC8qIF9fQVJDSF9NNjhLX1RFUk1CSVRTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1tNjhrL3Rlcm1pb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTdmMGM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay90ZXJtaW9zLmgKQEAgLTAsMCArMSwxMDggQEAKKyNpZm5kZWYgX002OEtfVEVSTUlPU19ICisjZGVmaW5lIF9NNjhLX1RFUk1JT1NfSAorCisjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CisjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgorCitzdHJ1Y3Qgd2luc2l6ZSB7CisJdW5zaWduZWQgc2hvcnQgd3Nfcm93OworCXVuc2lnbmVkIHNob3J0IHdzX2NvbDsKKwl1bnNpZ25lZCBzaG9ydCB3c194cGl4ZWw7CisJdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOworfTsKKworI2RlZmluZSBOQ0MgOAorc3RydWN0IHRlcm1pbyB7CisJdW5zaWduZWQgc2hvcnQgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIGNfbGluZTsJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCXVuc2lnbmVkIGNoYXIgY19jY1tOQ0NdOwkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKglpbnRyPV5DCQlxdWl0PV58CQllcmFzZT1kZWwJa2lsbD1eVQorCWVvZj1eRAkJdnRpbWU9XDAJdm1pbj1cMQkJc3h0Yz1cMAorCXN0YXJ0PV5RCXN0b3A9XlMJCXN1c3A9XloJCWVvbD1cMAorCXJlcHJpbnQ9XlIJZGlzY2FyZD1eVQl3ZXJhc2U9XlcJbG5leHQ9XlYKKwllb2wyPVwwCisqLworI2RlZmluZSBJTklUX0NfQ0MgIlwwMDNcMDM0XDE3N1wwMjVcMDA0XDBcMVwwXDAyMVwwMjNcMDMyXDBcMDIyXDAxN1wwMjdcMDI2XDAiCisjZW5kaWYKKworLyogbW9kZW0gbGluZXMgKi8KKyNkZWZpbmUgVElPQ01fTEUJMHgwMDEKKyNkZWZpbmUgVElPQ01fRFRSCTB4MDAyCisjZGVmaW5lIFRJT0NNX1JUUwkweDAwNAorI2RlZmluZSBUSU9DTV9TVAkweDAwOAorI2RlZmluZSBUSU9DTV9TUgkweDAxMAorI2RlZmluZSBUSU9DTV9DVFMJMHgwMjAKKyNkZWZpbmUgVElPQ01fQ0FSCTB4MDQwCisjZGVmaW5lIFRJT0NNX1JORwkweDA4MAorI2RlZmluZSBUSU9DTV9EU1IJMHgxMDAKKyNkZWZpbmUgVElPQ01fQ0QJVElPQ01fQ0FSCisjZGVmaW5lIFRJT0NNX1JJCVRJT0NNX1JORworI2RlZmluZSBUSU9DTV9PVVQxCTB4MjAwMAorI2RlZmluZSBUSU9DTV9PVVQyCTB4NDAwMAorI2RlZmluZSBUSU9DTV9MT09QCTB4ODAwMAorCisvKiBpb2N0bCAoZmQsIFRJT0NTRVJHRVRMU1IsICZyZXN1bHQpIHdoZXJlIHJlc3VsdCBtYXkgYmUgYXMgYmVsb3cgKi8KKworLyogbGluZSBkaXNjaXBsaW5lcyAqLworI2RlZmluZSBOX1RUWQkJMAorI2RlZmluZSBOX1NMSVAJCTEKKyNkZWZpbmUgTl9NT1VTRQkJMgorI2RlZmluZSBOX1BQUAkJMworI2RlZmluZSBOX1NUUklQCQk0CisjZGVmaW5lIE5fQVgyNQkJNQorI2RlZmluZSBOX1gyNQkJNgkvKiBYLjI1IGFzeW5jICovCisjZGVmaW5lIE5fNlBBQ0sJCTcKKyNkZWZpbmUgTl9NQVNDCQk4CS8qIFJlc2VydmVkIGZvciBNb2JpdGV4IG1vZHVsZSA8a2F6QGNhZmUubmV0PiAqLworI2RlZmluZSBOX1IzOTY0CQk5CS8qIFJlc2VydmVkIGZvciBTaW1hdGljIFIzOTY0IG1vZHVsZSAqLworI2RlZmluZSBOX1BST0ZJQlVTX0ZETAkxMAkvKiBSZXNlcnZlZCBmb3IgUHJvZmlidXMgPERhdmVAbXZoaS5jb20+ICovCisjZGVmaW5lIE5fSVJEQQkJMTEJLyogTGludXggSXJEYSAtIGh0dHA6Ly9pcmRhLnNvdXJjZWZvcmdlLm5ldC8gKi8KKyNkZWZpbmUgTl9TTVNCTE9DSwkxMgkvKiBTTVMgYmxvY2sgbW9kZSAtIGZvciB0YWxraW5nIHRvIEdTTSBkYXRhIGNhcmRzIGFib3V0IFNNUyBtZXNzYWdlcyAqLworI2RlZmluZSBOX0hETEMJCTEzCS8qIHN5bmNocm9ub3VzIEhETEMgKi8KKyNkZWZpbmUgTl9TWU5DX1BQUAkxNAorI2RlZmluZSBOX0hDSQkJMTUgIC8qIEJsdWV0b290aCBIQ0kgVUFSVCAqLworCisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pbyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvcyIuIFVnaC4KKyAqLworI2RlZmluZSB1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcyh0ZXJtaW9zLCB0ZXJtaW8pIFwKKyh7IFwKKwl1bnNpZ25lZCBzaG9ydCB0bXA7IFwKKwlnZXRfdXNlcih0bXAsICYodGVybWlvKS0+Y19pZmxhZyk7IFwKKwkodGVybWlvcyktPmNfaWZsYWcgPSAoMHhmZmZmMDAwMCAmICgodGVybWlvcyktPmNfaWZsYWcpKSB8IHRtcDsgXAorCWdldF91c2VyKHRtcCwgJih0ZXJtaW8pLT5jX29mbGFnKTsgXAorCSh0ZXJtaW9zKS0+Y19vZmxhZyA9ICgweGZmZmYwMDAwICYgKCh0ZXJtaW9zKS0+Y19vZmxhZykpIHwgdG1wOyBcCisJZ2V0X3VzZXIodG1wLCAmKHRlcm1pbyktPmNfY2ZsYWcpOyBcCisJKHRlcm1pb3MpLT5jX2NmbGFnID0gKDB4ZmZmZjAwMDAgJiAoKHRlcm1pb3MpLT5jX2NmbGFnKSkgfCB0bXA7IFwKKwlnZXRfdXNlcih0bXAsICYodGVybWlvKS0+Y19sZmxhZyk7IFwKKwkodGVybWlvcyktPmNfbGZsYWcgPSAoMHhmZmZmMDAwMCAmICgodGVybWlvcyktPmNfbGZsYWcpKSB8IHRtcDsgXAorCWdldF91c2VyKCh0ZXJtaW9zKS0+Y19saW5lLCAmKHRlcm1pbyktPmNfbGluZSk7IFwKKwljb3B5X2Zyb21fdXNlcigodGVybWlvcyktPmNfY2MsICh0ZXJtaW8pLT5jX2NjLCBOQ0MpOyBcCit9KQorCisvKgorICogVHJhbnNsYXRlIGEgInRlcm1pb3MiIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pbyIuIFVnaC4KKyAqLworI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pbyh0ZXJtaW8sIHRlcm1pb3MpIFwKKyh7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfaWZsYWcsICYodGVybWlvKS0+Y19pZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfb2ZsYWcsICYodGVybWlvKS0+Y19vZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfY2ZsYWcsICYodGVybWlvKS0+Y19jZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfbGZsYWcsICYodGVybWlvKS0+Y19sZmxhZyk7IFwKKwlwdXRfdXNlcigodGVybWlvcyktPmNfbGluZSwgICYodGVybWlvKS0+Y19saW5lKTsgXAorCWNvcHlfdG9fdXNlcigodGVybWlvKS0+Y19jYywgKHRlcm1pb3MpLT5jX2NjLCBOQ0MpOyBcCit9KQorCisjZGVmaW5lIHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcyhrLCB1KSBjb3B5X2Zyb21fdXNlcihrLCB1LCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3ModSwgaykgY29weV90b191c2VyKHUsIGssIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTTY4S19URVJNSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLW02OGsvdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjU4OTM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsMTE4IEBACisjaWZuZGVmIF9BU01fTTY4S19USFJFQURfSU5GT19ICisjZGVmaW5lIF9BU01fTTY4S19USFJFQURfSU5GT19ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworc3RydWN0IHRocmVhZF9pbmZvIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CQkvKiBtYWluIHRhc2sgc3RydWN0dXJlICovCisJc3RydWN0IGV4ZWNfZG9tYWluCSpleGVjX2RvbWFpbjsJLyogZXhlY3V0aW9uIGRvbWFpbiAqLworCV9fczMyCQkJcHJlZW1wdF9jb3VudDsgLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gQlVHICovCisJX191MzIgY3B1OyAvKiBzaG91bGQgYWx3YXlzIGJlIDAgb24gbTY4ayAqLworCXN0cnVjdCByZXN0YXJ0X2Jsb2NrICAgIHJlc3RhcnRfYmxvY2s7CisKKwlfX3U4CQkJc3VwZXJ2aXNvcl9zdGFja1swXTsKK307CisKKyNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCTB4NDAwMDAwMAorCisjZGVmaW5lIElOSVRfVEhSRUFEX0lORk8odHNrKQkJCVwKK3sJCQkJCQlcCisJLnRhc2sJCT0gJnRzaywJCQlcCisJLmV4ZWNfZG9tYWluCT0gJmRlZmF1bHRfZXhlY19kb21haW4sCVwKKwkucmVzdGFydF9ibG9jayA9IHsJCQlcCisJCS5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAorCX0sCQkJCQlcCit9CisKKy8qIFRIUkVBRF9TSVpFIHNob3VsZCBiZSA4aywgc28gaGFuZGxlIGRpZmZlcmVudGx5IGZvciA0ayBhbmQgOGsgbWFjaGluZXMgKi8KKyNpZiBQQUdFX1NISUZUID09IDEzIC8qIDhrIG1hY2hpbmVzICovCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykgICAoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwwKSkKKyNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkgIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpKHRpKSwwKQorI2Vsc2UgLyogb3RoZXJ3aXNlIGFzc3VtZSA0ayBwYWdlcyAqLworI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spICAgKChzdHJ1Y3QgdGhyZWFkX2luZm8gKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsMSkpCisjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpICBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSh0aSksMSkKKyNlbmRpZiAvKiBQQUdFX1NISUZUID09IDEzICovCisKKy8vI2RlZmluZSBpbml0X3RocmVhZF9pbmZvCShpbml0X3Rhc2sudGhyZWFkLmluZm8pCisjZGVmaW5lIGluaXRfc3RhY2sJCShpbml0X3RocmVhZF91bmlvbi5zdGFjaykKKworI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkJKGN1cnJlbnQtPnRocmVhZF9pbmZvKQorCisKKyNkZWZpbmUgX19IQVZFX1RIUkVBRF9GVU5DVElPTlMKKworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9ERUxBWUVEX1RSQUNFCTEJLyogc2luZ2xlIHN0ZXAgYSBzeXNjYWxsICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTIJLyogcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkzCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJNAkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9NRU1ESUUJCTUKKworZXh0ZXJuIGludCB0aHJlYWRfZmxhZ19maXhtZSh2b2lkKTsKKworLyoKKyAqIGZsYWcgc2V0L2NsZWFyL3Rlc3Qgd3JhcHBlcnMKKyAqIC0gcGFzcyBUSUZfeHh4eCBjb25zdGFudHMgdG8gdGhlc2UgZnVuY3Rpb25zCisgKi8KKworI2RlZmluZSBfX3NldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBmbGFnLCB2YWwpICh7CVwKKwlzd2l0Y2ggKGZsYWcpIHsJCQkJCVwKKwljYXNlIFRJRl9TSUdQRU5ESU5HOgkJCQlcCisJCXRzay0+dGhyZWFkLndvcmsuc2lncGVuZGluZyA9IHZhbDsJXAorCQlicmVhazsJCQkJCVwKKwljYXNlIFRJRl9ORUVEX1JFU0NIRUQ6CQkJCVwKKwkJdHNrLT50aHJlYWQud29yay5uZWVkX3Jlc2NoZWQgPSB2YWw7CVwKKwkJYnJlYWs7CQkJCQlcCisJY2FzZSBUSUZfU1lTQ0FMTF9UUkFDRToJCQkJXAorCQl0c2stPnRocmVhZC53b3JrLnN5c2NhbGxfdHJhY2UgPSB2YWw7CVwKKwkJYnJlYWs7CQkJCQlcCisJY2FzZSBUSUZfTUVNRElFOgkJCQlcCisJCXRzay0+dGhyZWFkLndvcmsubWVtZGllID0gdmFsOwkJXAorCQlicmVhazsJCQkJCVwKKwlkZWZhdWx0OgkJCQkJXAorCQl0aHJlYWRfZmxhZ19maXhtZSgpOwkJCVwKKwl9CQkJCQkJXAorfSkKKworI2RlZmluZSBfX2dldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBmbGFnKSAoewkJXAorCWludCBfX19yZXM7CQkJCQlcCisJc3dpdGNoIChmbGFnKSB7CQkJCQlcCisJY2FzZSBUSUZfU0lHUEVORElORzoJCQkJXAorCQlfX19yZXMgPSB0c2stPnRocmVhZC53b3JrLnNpZ3BlbmRpbmc7CVwKKwkJYnJlYWs7CQkJCQlcCisJY2FzZSBUSUZfTkVFRF9SRVNDSEVEOgkJCQlcCisJCV9fX3JlcyA9IHRzay0+dGhyZWFkLndvcmsubmVlZF9yZXNjaGVkOwlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgVElGX1NZU0NBTExfVFJBQ0U6CQkJCVwKKwkJX19fcmVzID0gdHNrLT50aHJlYWQud29yay5zeXNjYWxsX3RyYWNlO1wKKwkJYnJlYWs7CQkJCQlcCisJY2FzZSBUSUZfTUVNRElFOgkJCQlcCisJCV9fX3JlcyA9IHRzay0+dGhyZWFkLndvcmsubWVtZGllO1wKKwkJYnJlYWs7CQkJCQlcCisJZGVmYXVsdDoJCQkJCVwKKwkJX19fcmVzID0gdGhyZWFkX2ZsYWdfZml4bWUoKTsJCVwKKwl9CQkJCQkJXAorCV9fX3JlczsJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fZ2V0X3NldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBmbGFnLCB2YWwpICh7CVwKKwlpbnQgX19yZXMgPSBfX2dldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBmbGFnKTsJXAorCV9fc2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIGZsYWcsIHZhbCk7CQlcCisJX19yZXM7CQkJCQkJXAorfSkKKworI2RlZmluZSBzZXRfdHNrX3RocmVhZF9mbGFnKHRzaywgZmxhZykgX19zZXRfdHNrX3RocmVhZF9mbGFnKHRzaywgZmxhZywgfjApCisjZGVmaW5lIGNsZWFyX3Rza190aHJlYWRfZmxhZyh0c2ssIGZsYWcpIF9fc2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIGZsYWcsIDApCisjZGVmaW5lIHRlc3RfYW5kX3NldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBmbGFnKSBfX2dldF9zZXRfdHNrX3RocmVhZF9mbGFnKHRzaywgZmxhZywgfjApCisjZGVmaW5lIHRlc3RfdHNrX3RocmVhZF9mbGFnKHRzaywgZmxhZykgX19nZXRfdHNrX3RocmVhZF9mbGFnKHRzaywgZmxhZykKKworI2RlZmluZSBzZXRfdGhyZWFkX2ZsYWcoZmxhZykgc2V0X3Rza190aHJlYWRfZmxhZyhjdXJyZW50LCBmbGFnKQorI2RlZmluZSBjbGVhcl90aHJlYWRfZmxhZyhmbGFnKSBjbGVhcl90c2tfdGhyZWFkX2ZsYWcoY3VycmVudCwgZmxhZykKKyNkZWZpbmUgdGVzdF90aHJlYWRfZmxhZyhmbGFnKSB0ZXN0X3Rza190aHJlYWRfZmxhZyhjdXJyZW50LCBmbGFnKQorCisjZGVmaW5lIHNldF9uZWVkX3Jlc2NoZWQoKSBzZXRfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCkKKyNkZWZpbmUgY2xlYXJfbmVlZF9yZXNjaGVkKCkgY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCkKKworI2VuZGlmCS8qIF9BU01fTTY4S19USFJFQURfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1tNjhrL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg3ZjJmMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdGltZXguaApAQCAtMCwwICsxLDE4IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tbTY4ay90aW1leC5oCisgKgorICogbTY4ayBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqLworI2lmbmRlZiBfQVNNbTY4a19USU1FWF9ICisjZGVmaW5lIF9BU01tNjhrX1RJTUVYX0gKKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKKworc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay90bGIuaCBiL2luY2x1ZGUvYXNtLW02OGsvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4NWNmZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdGxiLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfTTY4S19UTEJfSAorI2RlZmluZSBfTTY4S19UTEJfSAorCisvKgorICogbTY4ayBkb2Vzbid0IG5lZWQgYW55IHNwZWNpYWwgcGVyLXB0ZSBvcgorICogcGVyLXZtYSBoYW5kbGluZy4uCisgKi8KKyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcykJZG8geyB9IHdoaWxlICgwKQorCisvKgorICogLi4gYmVjYXVzZSB3ZSBmbHVzaCB0aGUgd2hvbGUgbW0gd2hlbiBpdAorICogZmlsbHMgdXAuCisgKi8KKyNkZWZpbmUgdGxiX2ZsdXNoKHRsYikJCWZsdXNoX3RsYl9tbSgodGxiKS0+bW0pCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KKworI2VuZGlmIC8qIF9NNjhLX1RMQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1tNjhrL3RsYmZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2MWNjZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdGxiZmx1c2guaApAQCAtMCwwICsxLDIzMCBAQAorI2lmbmRlZiBfTTY4S19UTEJGTFVTSF9ICisjZGVmaW5lIF9NNjhLX1RMQkZMVVNIX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZuZGVmIENPTkZJR19TVU4zCisKKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHZvaWQgKmFkZHIpCit7CisJaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7CisJCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKKwkJc2V0X2ZzKEtFUk5FTF9EUyk7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODA0MFxuXHQiCisJCQkJICAgICAicGZsdXNoICglMClcblx0IgorCQkJCSAgICAgIi5jaGlwIDY4ayIKKwkJCQkgICAgIDogOiAiYSIgKGFkZHIpKTsKKwkJc2V0X2ZzKG9sZF9mcyk7CisJfSBlbHNlCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJwZmx1c2ggIzQsIzQsKCUwKSIgOiA6ICJhIiAoYWRkcikpOworfQorCisvKgorICogZmx1c2ggYWxsIHVzZXItc3BhY2UgYXRjIGVudHJpZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYih2b2lkKQoreworCWlmIChDUFVfSVNfMDQwX09SXzA2MCkKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIi5jaGlwIDY4MDQwXG5cdCIKKwkJCQkgICAgICJwZmx1c2hhblxuXHQiCisJCQkJICAgICAiLmNoaXAgNjhrIik7CisJZWxzZQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoICMwLCM0Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYjA0MF9vbmUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODA0MFxuXHQiCisJCQkgICAgICJwZmx1c2ggKCUwKVxuXHQiCisJCQkgICAgICIuY2hpcCA2OGsiCisJCQkgICAgIDogOiAiYSIgKGFkZHIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaWYgKENQVV9JU18wNDBfT1JfMDYwKQorCQlfX2ZsdXNoX3RsYjA0MF9vbmUoYWRkcik7CisJZWxzZQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoICMwLCM0LCglMCkiIDogOiAiYSIgKGFkZHIpKTsKK30KKworI2RlZmluZSBmbHVzaF90bGIoKSBfX2ZsdXNoX3RsYigpCisKKy8qCisgKiBmbHVzaCBhbGwgYXRjIGVudHJpZXMgKGJvdGgga2VybmVsIGFuZCB1c2VyLXNwYWNlIGVudHJpZXMpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQoreworCWlmIChDUFVfSVNfMDQwX09SXzA2MCkKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIi5jaGlwIDY4MDQwXG5cdCIKKwkJCQkgICAgICJwZmx1c2hhXG5cdCIKKwkJCQkgICAgICIuY2hpcCA2OGsiKTsKKwllbHNlCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJwZmx1c2hhIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaWYgKG1tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkKKwkJX19mbHVzaF90bGIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21tKSB7CisJCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKKwkJc2V0X2ZzKFVTRVJfRFMpOworCQlfX2ZsdXNoX3RsYl9vbmUoYWRkcik7CisJCXNldF9mcyhvbGRfZnMpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpZiAodm1hLT52bV9tbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCisJCV9fZmx1c2hfdGxiKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWZsdXNoX3RsYl9hbGwoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKK30KKworI2Vsc2UKKworCisvKiBSZXNlcnZlZCBQTUVHcy4gKi8KK2V4dGVybiBjaGFyIHN1bjNfcmVzZXJ2ZWRfcG1lZ1tTVU4zX1BNRUdTX05VTV07CitleHRlcm4gdW5zaWduZWQgbG9uZyBwbWVnX3ZhZGRyW1NVTjNfUE1FR1NfTlVNXTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHBtZWdfYWxsb2NbU1VOM19QTUVHU19OVU1dOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcG1lZ19jdHhbU1VOM19QTUVHU19OVU1dOworCisvKiBGbHVzaCBhbGwgdXNlcnNwYWNlIG1hcHBpbmdzIG9uZSBieSBvbmUuLi4gICh3aHkgbm8gZmx1c2ggY29tbWFuZCwKKyAgIHN1bj8pICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQoreworICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKKyAgICAgICB1bnNpZ25lZCBjaGFyIGN0eCwgb2xkY3R4OworCisgICAgICAgb2xkY3R4ID0gc3VuM19nZXRfY29udGV4dCgpOworICAgICAgIGZvcihhZGRyID0gMHgwMDAwMDAwMDsgYWRkciA8IFRBU0tfU0laRTsgYWRkciArPSBTVU4zX1BNRUdfU0laRSkgeworCSAgICAgICBmb3IoY3R4ID0gMDsgY3R4IDwgODsgY3R4KyspIHsKKwkJICAgICAgIHN1bjNfcHV0X2NvbnRleHQoY3R4KTsKKwkJICAgICAgIHN1bjNfcHV0X3NlZ21hcChhZGRyLCBTVU4zX0lOVkFMSURfUE1FRyk7CisJICAgICAgIH0KKyAgICAgICB9CisKKyAgICAgICBzdW4zX3B1dF9jb250ZXh0KG9sZGN0eCk7CisgICAgICAgLyogZXJhc2UgYWxsIG9mIHRoZSB1c2Vyc3BhY2UgcG1lZyBtYXBzLCB3ZSd2ZSBjbG9iYmVyZWQgdGhlbQorCSAgYWxsIGFueXdheSAqLworICAgICAgIGZvcihhZGRyID0gMDsgYWRkciA8IFNVTjNfSU5WQUxJRF9QTUVHOyBhZGRyKyspIHsKKwkgICAgICAgaWYocG1lZ19hbGxvY1thZGRyXSA9PSAxKSB7CisJCSAgICAgICBwbWVnX2FsbG9jW2FkZHJdID0gMDsKKwkJICAgICAgIHBtZWdfY3R4W2FkZHJdID0gMDsKKwkJICAgICAgIHBtZWdfdmFkZHJbYWRkcl0gPSAwOworCSAgICAgICB9CisgICAgICAgfQorCit9CisKKy8qIENsZWFyIHVzZXIgVExCIGVudHJpZXMgd2l0aGluIHRoZSBjb250ZXh0IG5hbWVkIGluIG1tICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX21tIChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKyAgICAgdW5zaWduZWQgY2hhciBvbGRjdHg7CisgICAgIHVuc2lnbmVkIGNoYXIgc2VnOworICAgICB1bnNpZ25lZCBsb25nIGk7CisKKyAgICAgb2xkY3R4ID0gc3VuM19nZXRfY29udGV4dCgpOworICAgICBzdW4zX3B1dF9jb250ZXh0KG1tLT5jb250ZXh0KTsKKworICAgICBmb3IoaSA9IDA7IGkgPCBUQVNLX1NJWkU7IGkgKz0gU1VOM19QTUVHX1NJWkUpIHsKKwkgICAgIHNlZyA9IHN1bjNfZ2V0X3NlZ21hcChpKTsKKwkgICAgIGlmKHNlZyA9PSBTVU4zX0lOVkFMSURfUE1FRykKKwkJICAgICBjb250aW51ZTsKKworCSAgICAgc3VuM19wdXRfc2VnbWFwKGksIFNVTjNfSU5WQUxJRF9QTUVHKTsKKwkgICAgIHBtZWdfYWxsb2Nbc2VnXSA9IDA7CisJICAgICBwbWVnX2N0eFtzZWddID0gMDsKKwkgICAgIHBtZWdfdmFkZHJbc2VnXSA9IDA7CisgICAgIH0KKworICAgICBzdW4zX3B1dF9jb250ZXh0KG9sZGN0eCk7CisKK30KKworLyogRmx1c2ggYSBzaW5nbGUgVExCIHBhZ2UuIEluIHRoaXMgY2FzZSwgd2UncmUgbGltaXRlZCB0byBmbHVzaGluZyBhCisgICBzaW5nbGUgUE1FRyAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgY2hhciBvbGRjdHg7CisJdW5zaWduZWQgY2hhciBpOworCisJb2xkY3R4ID0gc3VuM19nZXRfY29udGV4dCgpOworCXN1bjNfcHV0X2NvbnRleHQodm1hLT52bV9tbS0+Y29udGV4dCk7CisJYWRkciAmPSB+U1VOM19QTUVHX01BU0s7CisJaWYoKGkgPSBzdW4zX2dldF9zZWdtYXAoYWRkcikpICE9IFNVTjNfSU5WQUxJRF9QTUVHKQorCXsKKwkJcG1lZ19hbGxvY1tpXSA9IDA7CisJCXBtZWdfY3R4W2ldID0gMDsKKwkJcG1lZ192YWRkcltpXSA9IDA7CisJCXN1bjNfcHV0X3NlZ21hcCAoYWRkciwgIFNVTjNfSU5WQUxJRF9QTUVHKTsKKwl9CisJc3VuM19wdXRfY29udGV4dChvbGRjdHgpOworCit9CisvKiBGbHVzaCBhIHJhbmdlIG9mIHBhZ2VzIGZyb20gVExCLiAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOworCXVuc2lnbmVkIGNoYXIgc2VnLCBvbGRjdHg7CisKKwlzdGFydCAmPSB+U1VOM19QTUVHX01BU0s7CisKKwlvbGRjdHggPSBzdW4zX2dldF9jb250ZXh0KCk7CisJc3VuM19wdXRfY29udGV4dChtbS0+Y29udGV4dCk7CisKKwl3aGlsZShzdGFydCA8IGVuZCkKKwl7CisJCWlmKChzZWcgPSBzdW4zX2dldF9zZWdtYXAoc3RhcnQpKSA9PSBTVU4zX0lOVkFMSURfUE1FRykKKwkJICAgICBnb3RvIG5leHQ7CisJCWlmKHBtZWdfY3R4W3NlZ10gPT0gbW0tPmNvbnRleHQpIHsKKwkJCXBtZWdfYWxsb2Nbc2VnXSA9IDA7CisJCQlwbWVnX2N0eFtzZWddID0gMDsKKwkJCXBtZWdfdmFkZHJbc2VnXSA9IDA7CisJCX0KKwkJc3VuM19wdXRfc2VnbWFwKHN0YXJ0LCBTVU4zX0lOVkFMSURfUE1FRyk7CisJbmV4dDoKKwkJc3RhcnQgKz0gU1VOM19QTUVHX1NJWkU7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlmbHVzaF90bGJfYWxsKCk7Cit9CisKKy8qIEZsdXNoIGtlcm5lbCBwYWdlIGZyb20gVExCLiAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcGFnZSAodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN1bjNfcHV0X3NlZ21hcCAoYWRkciAmIH4oU1VOM19QTUVHX1NJWkUgLSAxKSwgU1VOM19JTlZBTElEX1BNRUcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworfQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9NNjhLX1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvYXNtLW02OGsvdG9wb2xvZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTE3M2U5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay90b3BvbG9neS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNX002OEtfVE9QT0xPR1lfSAorI2RlZmluZSBfQVNNX002OEtfVE9QT0xPR1lfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KKworI2VuZGlmIC8qIF9BU01fTTY4S19UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3RyYXBzLmggYi9pbmNsdWRlL2FzbS1tNjhrL3RyYXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1MDU2MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdHJhcHMuaApAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS90cmFwcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MyAgICAgICAgSGFtaXNoIE1hY2RvbmFsZAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9NNjhLX1RSQVBTX0gKKyNkZWZpbmUgX002OEtfVFJBUFNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHZvaWQgKCplX3ZlY3Rvcikodm9pZCk7CisKK2V4dGVybiBlX3ZlY3RvciB2ZWN0b3JzW107CisKKyNlbmRpZgorCisjZGVmaW5lIFZFQ19SRVNFVFNQICgwKQorI2RlZmluZSBWRUNfUkVTRVRQQyAoMSkKKyNkZWZpbmUgVkVDX0JVU0VSUiAgKDIpCisjZGVmaW5lIFZFQ19BRERSRVJSICgzKQorI2RlZmluZSBWRUNfSUxMRUdBTCAoNCkKKyNkZWZpbmUgVkVDX1pFUk9ESVYgKDUpCisjZGVmaW5lIFZFQ19DSEsgICAgICg2KQorI2RlZmluZSBWRUNfVFJBUCAgICAoNykKKyNkZWZpbmUgVkVDX1BSSVYgICAgKDgpCisjZGVmaW5lIFZFQ19UUkFDRSAgICg5KQorI2RlZmluZSBWRUNfTElORTEwICAoMTApCisjZGVmaW5lIFZFQ19MSU5FMTEgICgxMSkKKyNkZWZpbmUgVkVDX1JFU1YxMiAgKDEyKQorI2RlZmluZSBWRUNfQ09QUk9DICAoMTMpCisjZGVmaW5lIFZFQ19GT1JNQVQgICgxNCkKKyNkZWZpbmUgVkVDX1VOSU5UICAgKDE1KQorI2RlZmluZSBWRUNfUkVTVjE2ICAoMTYpCisjZGVmaW5lIFZFQ19SRVNWMTcgICgxNykKKyNkZWZpbmUgVkVDX1JFU1YxOCAgKDE4KQorI2RlZmluZSBWRUNfUkVTVjE5ICAoMTkpCisjZGVmaW5lIFZFQ19SRVNWMjAgICgyMCkKKyNkZWZpbmUgVkVDX1JFU1YyMSAgKDIxKQorI2RlZmluZSBWRUNfUkVTVjIyICAoMjIpCisjZGVmaW5lIFZFQ19SRVNWMjMgICgyMykKKyNkZWZpbmUgVkVDX1NQVVIgICAgKDI0KQorI2RlZmluZSBWRUNfSU5UMSAgICAoMjUpCisjZGVmaW5lIFZFQ19JTlQyICAgICgyNikKKyNkZWZpbmUgVkVDX0lOVDMgICAgKDI3KQorI2RlZmluZSBWRUNfSU5UNCAgICAoMjgpCisjZGVmaW5lIFZFQ19JTlQ1ICAgICgyOSkKKyNkZWZpbmUgVkVDX0lOVDYgICAgKDMwKQorI2RlZmluZSBWRUNfSU5UNyAgICAoMzEpCisjZGVmaW5lIFZFQ19TWVMgICAgICgzMikKKyNkZWZpbmUgVkVDX1RSQVAxICAgKDMzKQorI2RlZmluZSBWRUNfVFJBUDIgICAoMzQpCisjZGVmaW5lIFZFQ19UUkFQMyAgICgzNSkKKyNkZWZpbmUgVkVDX1RSQVA0ICAgKDM2KQorI2RlZmluZSBWRUNfVFJBUDUgICAoMzcpCisjZGVmaW5lIFZFQ19UUkFQNiAgICgzOCkKKyNkZWZpbmUgVkVDX1RSQVA3ICAgKDM5KQorI2RlZmluZSBWRUNfVFJBUDggICAoNDApCisjZGVmaW5lIFZFQ19UUkFQOSAgICg0MSkKKyNkZWZpbmUgVkVDX1RSQVAxMCAgKDQyKQorI2RlZmluZSBWRUNfVFJBUDExICAoNDMpCisjZGVmaW5lIFZFQ19UUkFQMTIgICg0NCkKKyNkZWZpbmUgVkVDX1RSQVAxMyAgKDQ1KQorI2RlZmluZSBWRUNfVFJBUDE0ICAoNDYpCisjZGVmaW5lIFZFQ19UUkFQMTUgICg0NykKKyNkZWZpbmUgVkVDX0ZQQlJVQyAgKDQ4KQorI2RlZmluZSBWRUNfRlBJUiAgICAoNDkpCisjZGVmaW5lIFZFQ19GUERJVlogICg1MCkKKyNkZWZpbmUgVkVDX0ZQVU5ERVIgKDUxKQorI2RlZmluZSBWRUNfRlBPRSAgICAoNTIpCisjZGVmaW5lIFZFQ19GUE9WRVIgICg1MykKKyNkZWZpbmUgVkVDX0ZQTkFOICAgKDU0KQorI2RlZmluZSBWRUNfRlBVTlNVUCAoNTUpCisjZGVmaW5lIFZFQ19NTVVDRkcgICg1NikKKyNkZWZpbmUgVkVDX01NVUlMTCAgKDU3KQorI2RlZmluZSBWRUNfTU1VQUNDICAoNTgpCisjZGVmaW5lIFZFQ19SRVNWNTkgICg1OSkKKyNkZWZpbmUJVkVDX1VOSU1QRUEgKDYwKQorI2RlZmluZQlWRUNfVU5JTVBJSSAoNjEpCisjZGVmaW5lIFZFQ19SRVNWNjIgICg2MikKKyNkZWZpbmUgVkVDX1JFU1Y2MyAgKDYzKQorI2RlZmluZSBWRUNfVVNFUiAgICAoNjQpCisKKyNkZWZpbmUgVkVDT0ZGKHZlYykgKCh2ZWMpPDwyKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBTdGF0dXMgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBQU19UICAoMHg4MDAwKQorI2RlZmluZSBQU19TICAoMHgyMDAwKQorI2RlZmluZSBQU19NICAoMHgxMDAwKQorI2RlZmluZSBQU19DICAoMHgwMDAxKQorCisvKiBiaXRzIGZvciA2ODAyMC82ODAzMCBzcGVjaWFsIHN0YXR1cyB3b3JkICovCisKKyNkZWZpbmUgRkMgICAgKDB4ODAwMCkKKyNkZWZpbmUgRkIgICAgKDB4NDAwMCkKKyNkZWZpbmUgUkMgICAgKDB4MjAwMCkKKyNkZWZpbmUgUkIgICAgKDB4MTAwMCkKKyNkZWZpbmUgREYgICAgKDB4MDEwMCkKKyNkZWZpbmUgUk0gICAgKDB4MDA4MCkKKyNkZWZpbmUgUlcgICAgKDB4MDA0MCkKKyNkZWZpbmUgU1ogICAgKDB4MDAzMCkKKyNkZWZpbmUgREZDICAgKDB4MDAwNykKKworLyogYml0cyBmb3IgNjgwMzAgTU1VIHN0YXR1cyByZWdpc3RlciAobW11c3IscHNyKSAqLworCisjZGVmaW5lIE1NVV9CCSAgICAgKDB4ODAwMCkgICAgLyogYnVzIGVycm9yICovCisjZGVmaW5lIE1NVV9MCSAgICAgKDB4NDAwMCkgICAgLyogbGltaXQgdmlvbGF0aW9uICovCisjZGVmaW5lIE1NVV9TCSAgICAgKDB4MjAwMCkgICAgLyogc3VwZXJ2aXNvciB2aW9sYXRpb24gKi8KKyNkZWZpbmUgTU1VX1dQCSAgICAgKDB4MDgwMCkgICAgLyogd3JpdGUtcHJvdGVjdGVkICovCisjZGVmaW5lIE1NVV9JCSAgICAgKDB4MDQwMCkgICAgLyogaW52YWxpZCBkZXNjcmlwdG9yICovCisjZGVmaW5lIE1NVV9NCSAgICAgKDB4MDIwMCkgICAgLyogQVRDIGVudHJ5IG1vZGlmaWVkICovCisjZGVmaW5lIE1NVV9UCSAgICAgKDB4MDA0MCkgICAgLyogdHJhbnNwYXJlbnQgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgTU1VX05VTSAgICAgICgweDAwMDcpICAgIC8qIG51bWJlciBvZiBsZXZlbHMgdHJhdmVyc2VkICovCisKKworLyogYml0cyBmb3IgNjgwNDAgc3BlY2lhbCBzdGF0dXMgd29yZCAqLworI2RlZmluZSBDUF8wNDAJKDB4ODAwMCkKKyNkZWZpbmUgQ1VfMDQwCSgweDQwMDApCisjZGVmaW5lIENUXzA0MAkoMHgyMDAwKQorI2RlZmluZSBDTV8wNDAJKDB4MTAwMCkKKyNkZWZpbmUgTUFfMDQwCSgweDA4MDApCisjZGVmaW5lIEFUQ18wNDAgKDB4MDQwMCkKKyNkZWZpbmUgTEtfMDQwCSgweDAyMDApCisjZGVmaW5lIFJXXzA0MAkoMHgwMTAwKQorI2RlZmluZSBTSVpfMDQwICgweDAwNjApCisjZGVmaW5lIFRUXzA0MAkoMHgwMDE4KQorI2RlZmluZSBUTV8wNDAJKDB4MDAwNykKKworLyogYml0cyBmb3IgNjgwNDAgd3JpdGUgYmFjayBzdGF0dXMgd29yZCAqLworI2RlZmluZSBXQlZfMDQwICAgKDB4ODApCisjZGVmaW5lIFdCU0laXzA0MCAoMHg2MCkKKyNkZWZpbmUgV0JCWVRfMDQwICgweDIwKQorI2RlZmluZSBXQldSRF8wNDAgKDB4NDApCisjZGVmaW5lIFdCTE5HXzA0MCAoMHgwMCkKKyNkZWZpbmUgV0JUVF8wNDAgICgweDE4KQorI2RlZmluZSBXQlRNXzA0MCAgKDB4MDcpCisKKy8qIGJ1cyBhY2Nlc3Mgc2l6ZSBjb2RlcyAqLworI2RlZmluZSBCQV9TSVpFX0JZVEUgICAgKDB4MjApCisjZGVmaW5lIEJBX1NJWkVfV09SRCAgICAoMHg0MCkKKyNkZWZpbmUgQkFfU0laRV9MT05HICAgICgweDAwKQorI2RlZmluZSBCQV9TSVpFX0xJTkUgICAgKDB4NjApCisKKy8qIGJ1cyBhY2Nlc3MgdHJhbnNmZXIgdHlwZSBjb2RlcyAqLworI2RlZmluZSBCQV9UVF9NT1ZFMTYgICAgKDB4MDgpCisKKy8qIGJpdHMgZm9yIDY4MDQwIE1NVSBzdGF0dXMgcmVnaXN0ZXIgKG1tdXNyKSAqLworI2RlZmluZSBNTVVfQl8wNDAgICAoMHgwODAwKQorI2RlZmluZSBNTVVfR18wNDAgICAoMHgwNDAwKQorI2RlZmluZSBNTVVfU18wNDAgICAoMHgwMDgwKQorI2RlZmluZSBNTVVfQ01fMDQwICAoMHgwMDYwKQorI2RlZmluZSBNTVVfTV8wNDAgICAoMHgwMDEwKQorI2RlZmluZSBNTVVfV1BfMDQwICAoMHgwMDA0KQorI2RlZmluZSBNTVVfVF8wNDAgICAoMHgwMDAyKQorI2RlZmluZSBNTVVfUl8wNDAgICAoMHgwMDAxKQorCisvKiBiaXRzIGluIHRoZSA2ODA2MCBmYXVsdCBzdGF0dXMgbG9uZyB3b3JkIChGU0xXKSAqLworI2RlZmluZQlNTVUwNjBfTUEJKDB4MDgwMDAwMDApCS8qIG1pc2FsaWduZWQgKi8KKyNkZWZpbmUJTU1VMDYwX0xLCSgweDAyMDAwMDAwKQkvKiBsb2NrZWQgdHJhbnNmZXIgKi8KKyNkZWZpbmUJTU1VMDYwX1JXCSgweDAxODAwMDAwKQkvKiByZWFkL3dyaXRlICovCisjIGRlZmluZSBNTVUwNjBfUldfVwkoMHgwMDgwMDAwMCkJLyogd3JpdGUgKi8KKyMgZGVmaW5lIE1NVTA2MF9SV19SCSgweDAxMDAwMDAwKQkvKiByZWFkICovCisjIGRlZmluZSBNTVUwNjBfUldfUk1XCSgweDAxODAwMDAwKQkvKiByZWFkL21vZGlmeS93cml0ZSAqLworIyBkZWZpbmUgTU1VMDYwX1cJKDB4MDA4MDAwMDApCS8qIGdlbmVyYWwgd3JpdGUsIGluY2x1ZGVzIHJtdyAqLworI2RlZmluZQlNTVUwNjBfU0laCSgweDAwNjAwMDAwKQkvKiB0cmFuc2ZlciBzaXplICovCisjZGVmaW5lCU1NVTA2MF9UVAkoMHgwMDE4MDAwMCkJLyogdHJhbnNmZXIgdHlwZSAoVFQpIGJpdHMgKi8KKyNkZWZpbmUJTU1VMDYwX1RNCSgweDAwMDcwMDAwKQkvKiB0cmFuc2ZlciBtb2RpZmllciAoVE0pIGJpdHMgKi8KKyNkZWZpbmUJTU1VMDYwX0lPCSgweDAwMDA4MDAwKQkvKiBpbnN0cnVjdGlvbiBvciBvcGVyYW5kICovCisjZGVmaW5lCU1NVTA2MF9QQkUJKDB4MDAwMDQwMDApCS8qIHB1c2ggYnVmZmVyIGJ1cyBlcnJvciAqLworI2RlZmluZQlNTVUwNjBfU0JFCSgweDAwMDAyMDAwKQkvKiBzdG9yZSBidWZmZXIgYnVzIGVycm9yICovCisjZGVmaW5lCU1NVTA2MF9QVEEJKDB4MDAwMDEwMDApCS8qIHBvaW50ZXIgQSBmYXVsdCAqLworI2RlZmluZQlNTVUwNjBfUFRCCSgweDAwMDAwODAwKQkvKiBwb2ludGVyIEIgZmF1bHQgKi8KKyNkZWZpbmUJTU1VMDYwX0lMCSgweDAwMDAwNDAwKQkvKiBkb3VibGUgaW5kaXJlY3QgZGVzY3IgZmF1bHQgKi8KKyNkZWZpbmUJTU1VMDYwX1BGCSgweDAwMDAwMjAwKQkvKiBwYWdlIGZhdWx0IChpbnZhbGlkIGRlc2NyKSAqLworI2RlZmluZQlNTVUwNjBfU1AJKDB4MDAwMDAxMDApCS8qIHN1cGVydmlzb3IgcHJvdGVjdGlvbiAqLworI2RlZmluZQlNTVUwNjBfV1AJKDB4MDAwMDAwODApCS8qIHdyaXRlIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUJTU1VMDYwX1RXRQkoMHgwMDAwMDA0MCkJLyogYnVzIGVycm9yIG9uIHRhYmxlIHNlYXJjaCAqLworI2RlZmluZQlNTVUwNjBfUkUJKDB4MDAwMDAwMjApCS8qIGJ1cyBlcnJvciBvbiByZWFkICovCisjZGVmaW5lCU1NVTA2MF9XRQkoMHgwMDAwMDAxMCkJLyogYnVzIGVycm9yIG9uIHdyaXRlICovCisjZGVmaW5lCU1NVTA2MF9UVFIJKDB4MDAwMDAwMDgpCS8qIGVycm9yIGNhdXNlZCBieSBUVFIgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUJTU1VMDYwX0JQRQkoMHgwMDAwMDAwNCkJLyogYnJhbmNoIHByZWRpY3Rpb24gZXJyb3IgKi8KKyNkZWZpbmUJTU1VMDYwX1NFRQkoMHgwMDAwMDAwMSkJLyogc29mdHdhcmUgZW11bGF0ZWQgZXJyb3IgKi8KKworLyogY2FzZXMgb2YgbWlzc2luZyBvciBpbnZhbGlkIGRlc2NyaXB0b3JzICovCisjZGVmaW5lIE1NVTA2MF9ERVNDX0VSUiAoTU1VMDYwX1BUQSB8IE1NVTA2MF9QVEIgfCBcCisJCQkgTU1VMDYwX0lMICB8IE1NVTA2MF9QRikKKy8qIGJpdHMgdGhhdCBpbmRpY2F0ZSByZWFsIGVycm9ycyAqLworI2RlZmluZSBNTVUwNjBfRVJSX0JJVFMgKE1NVTA2MF9QQkUgfCBNTVUwNjBfU0JFIHwgTU1VMDYwX0RFU0NfRVJSIHwgTU1VMDYwX1NQIHwgXAorCQkJIE1NVTA2MF9XUCAgfCBNTVUwNjBfVFdFIHwgTU1VMDYwX1JFICAgICAgIHwgTU1VMDYwX1dFKQorCisvKiBzdHJ1Y3R1cmUgZm9yIHN0YWNrIGZyYW1lcyAqLworCitzdHJ1Y3QgZnJhbWUgeworICAgIHN0cnVjdCBwdF9yZWdzIHB0cmVnczsKKyAgICB1bmlvbiB7CisJICAgIHN0cnVjdCB7CisJCSAgICB1bnNpZ25lZCBsb25nICBpYWRkcjsgICAgLyogaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLworCSAgICB9IGZtdDI7CisJICAgIHN0cnVjdCB7CisJCSAgICB1bnNpZ25lZCBsb25nICBlZmZhZGRyOyAgLyogZWZmZWN0aXZlIGFkZHJlc3MgKi8KKwkgICAgfSBmbXQzOworCSAgICBzdHJ1Y3QgeworCQkgICAgdW5zaWduZWQgbG9uZyAgZWZmYWRkcjsgIC8qIGVmZmVjdGl2ZSBhZGRyZXNzICovCisJCSAgICB1bnNpZ25lZCBsb25nICBwYzsJICAgICAvKiBwYyBvZiBmYXVsdGVkIGluc3RyICovCisJICAgIH0gZm10NDsKKwkgICAgc3RydWN0IHsKKwkJICAgIHVuc2lnbmVkIGxvbmcgIGVmZmFkZHI7ICAvKiBlZmZlY3RpdmUgYWRkcmVzcyAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgc3N3OyAgICAgIC8qIHNwZWNpYWwgc3RhdHVzIHdvcmQgKi8KKwkJICAgIHVuc2lnbmVkIHNob3J0IHdiM3M7ICAgICAvKiB3cml0ZSBiYWNrIDMgc3RhdHVzICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCB3YjJzOyAgICAgLyogd3JpdGUgYmFjayAyIHN0YXR1cyAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgd2IxczsgICAgIC8qIHdyaXRlIGJhY2sgMSBzdGF0dXMgKi8KKwkJICAgIHVuc2lnbmVkIGxvbmcgIGZhZGRyOyAgICAvKiBmYXVsdCBhZGRyZXNzICovCisJCSAgICB1bnNpZ25lZCBsb25nICB3YjNhOyAgICAgLyogd3JpdGUgYmFjayAzIGFkZHJlc3MgKi8KKwkJICAgIHVuc2lnbmVkIGxvbmcgIHdiM2Q7ICAgICAvKiB3cml0ZSBiYWNrIDMgZGF0YSAqLworCQkgICAgdW5zaWduZWQgbG9uZyAgd2IyYTsgICAgIC8qIHdyaXRlIGJhY2sgMiBhZGRyZXNzICovCisJCSAgICB1bnNpZ25lZCBsb25nICB3YjJkOyAgICAgLyogd3JpdGUgYmFjayAyIGRhdGEgKi8KKwkJICAgIHVuc2lnbmVkIGxvbmcgIHdiMWE7ICAgICAvKiB3cml0ZSBiYWNrIDEgYWRkcmVzcyAqLworCQkgICAgdW5zaWduZWQgbG9uZyAgd2IxZHBkMDsgIC8qIHdyaXRlIGJhY2sgMSBkYXRhL3B1c2ggZGF0YSAwKi8KKwkJICAgIHVuc2lnbmVkIGxvbmcgIHBkMTsgICAgICAvKiBwdXNoIGRhdGEgMSovCisJCSAgICB1bnNpZ25lZCBsb25nICBwZDI7ICAgICAgLyogcHVzaCBkYXRhIDIqLworCQkgICAgdW5zaWduZWQgbG9uZyAgcGQzOyAgICAgIC8qIHB1c2ggZGF0YSAzKi8KKwkgICAgfSBmbXQ3OworCSAgICBzdHJ1Y3QgeworCQkgICAgdW5zaWduZWQgbG9uZyAgaWFkZHI7ICAgIC8qIGluc3RydWN0aW9uIGFkZHJlc3MgKi8KKwkJICAgIHVuc2lnbmVkIHNob3J0IGludDFbNF07ICAvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkgICAgfSBmbXQ5OworCSAgICBzdHJ1Y3QgeworCQkgICAgdW5zaWduZWQgc2hvcnQgaW50MTsKKwkJICAgIHVuc2lnbmVkIHNob3J0IHNzdzsgICAgICAvKiBzcGVjaWFsIHN0YXR1cyB3b3JkICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCBpc2M7ICAgICAgLyogaW5zdHJ1Y3Rpb24gc3RhZ2UgYyAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgaXNiOyAgICAgIC8qIGluc3RydWN0aW9uIHN0YWdlIGIgKi8KKwkJICAgIHVuc2lnbmVkIGxvbmcgIGRhZGRyOyAgICAvKiBkYXRhIGN5Y2xlIGZhdWx0IGFkZHJlc3MgKi8KKwkJICAgIHVuc2lnbmVkIHNob3J0IGludDJbMl07CisJCSAgICB1bnNpZ25lZCBsb25nICBkb2J1ZjsgICAgLyogZGF0YSBjeWNsZSBvdXRwdXQgYnVmZmVyICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQzWzJdOworCSAgICB9IGZtdGE7CisJICAgIHN0cnVjdCB7CisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQxOworCQkgICAgdW5zaWduZWQgc2hvcnQgc3N3OyAgICAgLyogc3BlY2lhbCBzdGF0dXMgd29yZCAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgaXNjOyAgICAgLyogaW5zdHJ1Y3Rpb24gc3RhZ2UgYyAqLworCQkgICAgdW5zaWduZWQgc2hvcnQgaXNiOyAgICAgLyogaW5zdHJ1Y3Rpb24gc3RhZ2UgYiAqLworCQkgICAgdW5zaWduZWQgbG9uZyAgZGFkZHI7ICAgLyogZGF0YSBjeWNsZSBmYXVsdCBhZGRyZXNzICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQyWzJdOworCQkgICAgdW5zaWduZWQgbG9uZyAgZG9idWY7ICAgLyogZGF0YSBjeWNsZSBvdXRwdXQgYnVmZmVyICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQzWzRdOworCQkgICAgdW5zaWduZWQgbG9uZyAgYmFkZHI7ICAgLyogc3RhZ2UgQiBhZGRyZXNzICovCisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQ0WzJdOworCQkgICAgdW5zaWduZWQgbG9uZyAgZGlidWY7ICAgLyogZGF0YSBjeWNsZSBpbnB1dCBidWZmZXIgKi8KKwkJICAgIHVuc2lnbmVkIHNob3J0IGludDVbM107CisJCSAgICB1bnNpZ25lZAkgICB2ZXIgOiA0OyAvKiBzdGFjayBmcmFtZSB2ZXJzaW9uICMgKi8KKwkJICAgIHVuc2lnbmVkCSAgIGludDY6MTI7CisJCSAgICB1bnNpZ25lZCBzaG9ydCBpbnQ3WzE4XTsKKwkgICAgfSBmbXRiOworICAgIH0gdW47Cit9OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfTTY4S19UUkFQU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3R5cGVzLmggYi9pbmNsdWRlL2FzbS1tNjhrL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM5MWNiZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdHlwZXMuaApAQCAtMCwwICsxLDY5IEBACisjaWZuZGVmIF9NNjhLX1RZUEVTX0gKKyNkZWZpbmUgX002OEtfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIG5ldmVyIGluY2x1ZGVkIGJ5IGFwcGxpY2F0aW9uIHNvZnR3YXJlIHVubGVzcworICogZXhwbGljaXRseSByZXF1ZXN0ZWQgKGUuZy4sIHZpYSBsaW51eC90eXBlcy5oKSBpbiB3aGljaCBjYXNlIHRoZQorICogYXBwbGljYXRpb24gaXMgTGludXggc3BlY2lmaWMgc28gKHVzZXItKSBuYW1lIHNwYWNlIHBvbGx1dGlvbiBpcworICogbm90IGEgbWFqb3IgaXNzdWUuICBIb3dldmVyLCBmb3IgaW50ZXJvcGVyYWJpbGl0eSwgbGlicmFyaWVzIHN0aWxsCisgKiBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gYXZvaWQgYSBuYW1lIGNsYXNoZXMuCisgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OworCisvKgorICogX194eCBpcyBvazogaXQgZG9lc24ndCBwb2xsdXRlIHRoZSBQT1NJWCBuYW1lc3BhY2UuIFVzZSB0aGVzZSBpbiB0aGUKKyAqIGhlYWRlciBmaWxlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlCisgKi8KKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCit0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nIF9fczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX191NjQ7CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogVGhlc2UgYXJlbid0IGV4cG9ydGVkIG91dHNpZGUgdGhlIGtlcm5lbCB0byBhdm9pZCBuYW1lIHNwYWNlIGNsYXNoZXMKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBCSVRTX1BFUl9MT05HIDMyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CisKK3R5cGVkZWYgc2lnbmVkIHNob3J0IHMxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OworCit0eXBlZGVmIHNpZ25lZCBpbnQgczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOworCit0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OworCisvKiBETUEgYWRkcmVzc2VzIGFyZSBhbHdheXMgMzItYml0cyB3aWRlICovCisKK3R5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Cit0eXBlZGVmIHUzMiBkbWE2NF9hZGRyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQga21lbV9idWZjdGxfdDsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX002OEtfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1tNjhrL3VhY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDVlNmNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay91YWNjZXNzLmgKQEAgLTAsMCArMSw4OTMgQEAKKyNpZm5kZWYgX19NNjhLX1VBQ0NFU1NfSAorI2RlZmluZSBfX002OEtfVUFDQ0VTU19ICisKKy8qCisgKiBVc2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCisgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKworI2RlZmluZSBWRVJJRllfUkVBRAkwCisjZGVmaW5lIFZFUklGWV9XUklURQkxCisKKy8qIFdlIGxldCB0aGUgTU1VIGRvIGFsbCBjaGVja2luZyAqLworI2RlZmluZSBhY2Nlc3Nfb2sodHlwZSxhZGRyLHNpemUpIDEKKworLyogdGhpcyBmdW5jdGlvbiB3aWxsIGdvIGF3YXkgc29vbiAtIHVzZSBhY2Nlc3Nfb2soKSBpbnN0ZWFkICovCitzdGF0aWMgaW5saW5lIGludCBfX2RlcHJlY2F0ZWQgdmVyaWZ5X2FyZWEoaW50IHR5cGUsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gYWNjZXNzX29rKHR5cGUsYWRkcixzaXplKSA/IDAgOiAtRUZBVUxUOworfQorCisvKgorICogVGhlIGV4Y2VwdGlvbiB0YWJsZSBjb25zaXN0cyBvZiBwYWlycyBvZiBhZGRyZXNzZXM6IHRoZSBmaXJzdCBpcyB0aGUKKyAqIGFkZHJlc3Mgb2YgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGZhdWx0LCBhbmQgdGhlIHNlY29uZCBpcworICogdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIHByb2dyYW0gc2hvdWxkIGNvbnRpbnVlLiAgTm8gcmVnaXN0ZXJzIGFyZQorICogbW9kaWZpZWQsIHNvIGl0IGlzIGVudGlyZWx5IHVwIHRvIHRoZSBjb250aW51YXRpb24gY29kZSB0byBmaWd1cmUgb3V0CisgKiB3aGF0IHRvIGRvLgorICoKKyAqIEFsbCB0aGUgcm91dGluZXMgYmVsb3cgdXNlIGJpdHMgb2YgZml4dXAgY29kZSB0aGF0IGFyZSBvdXQgb2YgbGluZQorICogd2l0aCB0aGUgbWFpbiBpbnN0cnVjdGlvbiBwYXRoLiAgVGhpcyBtZWFucyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd2VsbCwKKyAqIHdlIGRvbid0IGV2ZW4gaGF2ZSB0byBqdW1wIG92ZXIgdGhlbS4gIEZ1cnRoZXIsIHRoZXkgZG8gbm90IGludHJ1ZGUKKyAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KKyAqLworCitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5Cit7CisJdW5zaWduZWQgbG9uZyBpbnNuLCBmaXh1cDsKK307CisKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgbWFpbiBzaW5nbGUtdmFsdWUgdHJhbnNmZXIgcm91dGluZXMuICBUaGV5IGF1dG9tYXRpY2FsbHkKKyAqIHVzZSB0aGUgcmlnaHQgc2l6ZSBpZiB3ZSBqdXN0IGhhdmUgdGhlIHJpZ2h0IHBvaW50ZXIgdHlwZS4KKyAqLworCisjZGVmaW5lIHB1dF91c2VyKHgsIHB0cikJCQkJXAorKHsJCQkJCQkJXAorICAgIGludCBfX3B1X2VycjsJCQkJCVwKKyAgICB0eXBlb2YoKihwdHIpKSBfX3B1X3ZhbCA9ICh4KTsJCQlcCisgICAgc3dpdGNoIChzaXplb2YgKCoocHRyKSkpIHsJCQkJXAorICAgIGNhc2UgMToJCQkJCQlcCisJX19wdXRfdXNlcl9hc20oX19wdV9lcnIsIF9fcHVfdmFsLCBwdHIsIGIpOwlcCisJYnJlYWs7CQkJCQkJXAorICAgIGNhc2UgMjoJCQkJCQlcCisJX19wdXRfdXNlcl9hc20oX19wdV9lcnIsIF9fcHVfdmFsLCBwdHIsIHcpOwlcCisJYnJlYWs7CQkJCQkJXAorICAgIGNhc2UgNDoJCQkJCQlcCisJX19wdXRfdXNlcl9hc20oX19wdV9lcnIsIF9fcHVfdmFsLCBwdHIsIGwpOwlcCisJYnJlYWs7CQkJCQkJXAorICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19wdV9lcnIgPSBfX2NvbnN0YW50X2NvcHlfdG9fdXNlcihwdHIsICZfX3B1X3ZhbCwgOCk7ICAgICAgICBcCisgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZhdWx0OgkJCQkJCVwKKwlfX3B1X2VyciA9IF9fcHV0X3VzZXJfYmFkKCk7CQkJXAorCWJyZWFrOwkJCQkJCVwKKyAgICB9CQkJCQkJCVwKKyAgICBfX3B1X2VycjsJCQkJCQlcCit9KQorI2RlZmluZSBfX3B1dF91c2VyKHgsIHB0cikgcHV0X3VzZXIoeCwgcHRyKQorCitleHRlcm4gaW50IF9fcHV0X3VzZXJfYmFkKHZvaWQpOworCisvKgorICogVGVsbCBnY2Mgd2UgcmVhZCBmcm9tIG1lbW9yeSBpbnN0ZWFkIG9mIHdyaXRpbmc6IHRoaXMgaXMgYmVjYXVzZQorICogd2UgZG8gbm90IHdyaXRlIHRvIGFueSBtZW1vcnkgZ2NjIGtub3dzIGFib3V0LCBzbyB0aGVyZSBhcmUgbm8KKyAqIGFsaWFzaW5nIGlzc3Vlcy4KKyAqLworI2RlZmluZSBfX3B1dF91c2VyX2FzbShlcnIseCxwdHIsYndsKQkJCVwKK19fYXNtX18gX192b2xhdGlsZV9fCQkJCQlcCisgICAgKCIyMTptb3ZlcyIgI2J3bCAiICUyLCUxXG4iCQkJCVwKKyAgICAgIjE6XG4iCQkJCQkJXAorICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCQlcCisgICAgICIgICAuZXZlblxuIgkJCQkJXAorICAgICAiMjogbW92ZWwgJTMsJTBcbiIJCQkJCVwKKyAgICAgIiAgIGpyYSAxYlxuIgkJCQkJXAorICAgICAiLnByZXZpb3VzXG4iCQkJCQlcCisgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAorICAgICAiICAgLmFsaWduIDRcbiIJCQkJCVwKKyAgICAgIiAgIC5sb25nIDIxYiwyYlxuIgkJCQlcCisgICAgICIgICAubG9uZyAxYiwyYlxuIgkJCQkJXAorICAgICAiLnByZXZpb3VzIgkJCQkJXAorICAgICA6ICI9ZCIoZXJyKQkJCQkJXAorICAgICA6ICJtIigqKHB0cikpLCAiciIoeCksICJpIigtRUZBVUxUKSwgIjAiKDApKQorCisjZGVmaW5lIGdldF91c2VyKHgsIHB0cikJCQkJCVwKKyh7CQkJCQkJCQlcCisgICAgaW50IF9fZ3VfZXJyOwkJCQkJCVwKKyAgICB0eXBlb2YoKihwdHIpKSBfX2d1X3ZhbDsJCQkJCVwKKyAgICBzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7CQkJCQlcCisgICAgY2FzZSAxOgkJCQkJCQlcCisJX19nZXRfdXNlcl9hc20oX19ndV9lcnIsIF9fZ3VfdmFsLCBwdHIsIGIsICI9ZCIpOwlcCisJYnJlYWs7CQkJCQkJCVwKKyAgICBjYXNlIDI6CQkJCQkJCVwKKwlfX2dldF91c2VyX2FzbShfX2d1X2VyciwgX19ndV92YWwsIHB0ciwgdywgIj1yIik7CVwKKwlicmVhazsJCQkJCQkJXAorICAgIGNhc2UgNDoJCQkJCQkJXAorCV9fZ2V0X3VzZXJfYXNtKF9fZ3VfZXJyLCBfX2d1X3ZhbCwgcHRyLCBsLCAiPXIiKTsJXAorCWJyZWFrOwkJCQkJCQlcCisgICAgY2FzZSA4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2d1X2VyciA9IF9fY29uc3RhbnRfY29weV9mcm9tX3VzZXIoJl9fZ3VfdmFsLCBwdHIsIDgpOyAgXAorICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZhdWx0OgkJCQkJCQlcCisJX19ndV92YWwgPSAwOwkJCQkJCVwKKwlfX2d1X2VyciA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCVwKKwlicmVhazsJCQkJCQkJXAorICAgIH0JCQkJCQkJCVwKKyAgICAoeCkgPSBfX2d1X3ZhbDsJCQkJCQlcCisgICAgX19ndV9lcnI7CQkJCQkJCVwKK30pCisjZGVmaW5lIF9fZ2V0X3VzZXIoeCwgcHRyKSBnZXRfdXNlcih4LCBwdHIpCisKK2V4dGVybiBpbnQgX19nZXRfdXNlcl9iYWQodm9pZCk7CisKKyNkZWZpbmUgX19nZXRfdXNlcl9hc20oZXJyLHgscHRyLGJ3bCxyZWcpCVwKK19fYXNtX18gX192b2xhdGlsZV9fCQkJCVwKKyAgICAoIjE6IG1vdmVzIiAjYndsICIgJTIsJTFcbiIJCQlcCisgICAgICIyOlxuIgkJCQkJXAorICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCVwKKyAgICAgIiAgIC5ldmVuXG4iCQkJCVwKKyAgICAgIjM6IG1vdmVsICUzLCUwXG4iCQkJCVwKKyAgICAgIiAgIHN1YiIgI2J3bCAiICUxLCUxXG4iCQkJXAorICAgICAiICAganJhIDJiXG4iCQkJCVwKKyAgICAgIi5wcmV2aW91c1xuIgkJCQlcCisgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQlcCisgICAgICIgICAuYWxpZ24gNFxuIgkJCQlcCisgICAgICIgICAubG9uZyAxYiwzYlxuIgkJCQlcCisgICAgICIucHJldmlvdXMiCQkJCVwKKyAgICAgOiAiPWQiKGVyciksIHJlZyh4KQkJCVwKKyAgICAgOiAibSIoKihwdHIpKSwgImkiICgtRUZBVUxUKSwgIjAiKDApKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fZ2VuZXJpY19jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworICAgIHVuc2lnbmVkIGxvbmcgdG1wOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisJKCIgICB0c3RsICUyXG4iCisJICIgICBqZXEgMmZcbiIKKwkgIjE6IG1vdmVzbCAoJTEpKywlM1xuIgorCSAiICAgbW92ZWwgJTMsKCUwKStcbiIKKwkgIiAgIHN1YnFsICMxLCUyXG4iCisJICIgICBqbmUgMWJcbiIKKwkgIjI6IG1vdmVsICU0LCUyXG4iCisJICIgICBiY2xyICMxLCUyXG4iCisJICIgICBqZXEgNGZcbiIKKwkgIjM6IG1vdmVzdyAoJTEpKywlM1xuIgorCSAiICAgbW92ZXcgJTMsKCUwKStcbiIKKwkgIjQ6IGJjbHIgIzAsJTJcbiIKKwkgIiAgIGplcSA2ZlxuIgorCSAiNTogbW92ZXNiICglMSkrLCUzXG4iCisJICIgICBtb3ZlYiAlMywoJTApK1xuIgorCSAiNjpcbiIKKwkgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkgIiAgIC5ldmVuXG4iCisJICI3OiBtb3ZlbCAlMiwlJWQwXG4iCisJICI3MTpjbHJsICglMCkrXG4iCisJICIgICBzdWJxbCAjMSwlJWQwXG4iCisJICIgICBqbmUgNzFiXG4iCisJICIgICBsc2xsICMyLCUyXG4iCisJICIgICBhZGRsICU0LCUyXG4iCisJICIgICBidHN0ICMxLCU0XG4iCisJICIgICBqbmUgODFmXG4iCisJICIgICBidHN0ICMwLCU0XG4iCisJICIgICBqbmUgOTFmXG4iCisJICIgICBqcmEgNmJcbiIKKwkgIjg6IGFkZHFsICMyLCUyXG4iCisJICI4MTpjbHJ3ICglMCkrXG4iCisJICIgICBidHN0ICMwLCU0XG4iCisJICIgICBqbmUgOTFmXG4iCisJICIgICBqcmEgNmJcbiIKKwkgIjk6IGFkZHFsICMxLCUyXG4iCisJICI5MTpjbHJiICglMCkrXG4iCisJICIgICBqcmEgNmJcbiIKKyAgICAgICAgICIucHJldmlvdXNcbiIKKwkgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkgIiAgIC5hbGlnbiA0XG4iCisJICIgICAubG9uZyAxYiw3YlxuIgorCSAiICAgLmxvbmcgM2IsOGJcbiIKKwkgIiAgIC5sb25nIDViLDliXG4iCisJICIucHJldmlvdXMiCisJIDogIj1hIih0byksICI9YSIoZnJvbSksICI9ZCIobiksICI9JmQiKHRtcCkKKwkgOiAiZCIobiAmIDMpLCAiMCIodG8pLCAiMSIoZnJvbSksICIyIihuLzQpCisJIDogImQwIiwgIm1lbW9yeSIpOworICAgIHJldHVybiBuOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fZ2VuZXJpY19jb3B5X3RvX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKyAgICB1bnNpZ25lZCBsb25nIHRtcDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworCSgiICAgdHN0bCAlMlxuIgorCSAiICAgamVxIDNmXG4iCisJICIxOiBtb3ZlbCAoJTEpKywlM1xuIgorCSAiMjI6bW92ZXNsICUzLCglMCkrXG4iCisJICIyOiBzdWJxbCAjMSwlMlxuIgorCSAiICAgam5lIDFiXG4iCisJICIzOiBtb3ZlbCAlNCwlMlxuIgorCSAiICAgYmNsciAjMSwlMlxuIgorCSAiICAgamVxIDRmXG4iCisJICIgICBtb3ZldyAoJTEpKywlM1xuIgorCSAiMjQ6bW92ZXN3ICUzLCglMCkrXG4iCisJICI0OiBiY2xyICMwLCUyXG4iCisJICIgICBqZXEgNWZcbiIKKwkgIiAgIG1vdmViICglMSkrLCUzXG4iCisJICIyNTptb3Zlc2IgJTMsKCUwKStcbiIKKwkgIjU6XG4iCisJICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJICIgICAuZXZlblxuIgorCSAiNjA6YWRkcWwgIzEsJTJcbiIKKwkgIjY6IGxzbGwgIzIsJTJcbiIKKwkgIiAgIGFkZGwgJTQsJTJcbiIKKwkgIiAgIGpyYSA1YlxuIgorCSAiNzogYWRkcWwgIzIsJTJcbiIKKwkgIiAgIGpyYSA1YlxuIgorCSAiODogYWRkcWwgIzEsJTJcbiIKKwkgIiAgIGpyYSA1YlxuIgorCSAiLnByZXZpb3VzXG4iCisJICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJICIgICAuYWxpZ24gNFxuIgorCSAiICAgLmxvbmcgMWIsNjBiXG4iCisJICIgICAubG9uZyAyMmIsNmJcbiIKKwkgIiAgIC5sb25nIDJiLDZiXG4iCisJICIgICAubG9uZyAyNGIsN2JcbiIKKwkgIiAgIC5sb25nIDNiLDYwYlxuIgorCSAiICAgLmxvbmcgNGIsN2JcbiIKKwkgIiAgIC5sb25nIDI1Yiw4YlxuIgorCSAiICAgLmxvbmcgNWIsOGJcbiIKKwkgIi5wcmV2aW91cyIKKwkgOiAiPWEiKHRvKSwgIj1hIihmcm9tKSwgIj1kIihuKSwgIj0mZCIodG1wKQorCSA6ICJyIihuICYgMyksICIwIih0byksICIxIihmcm9tKSwgIjIiKG4gLyA0KQorCSA6ICJtZW1vcnkiKTsKKyAgICByZXR1cm4gbjsKK30KKworI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2JpZyh0bywgZnJvbSwgbiwgZml4dXAsIGNvcHkpCVwKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXwkJCQlcCisJKCIxMDogbW92ZXNsICglMSkrLCUlZDBcbiIJCQlcCisJICIgICAgbW92ZWwgJSVkMCwoJTApK1xuIgkJCVwKKwkgIiAgICBzdWJxbCAjMSwlMlxuIgkJCQlcCisJICIgICAgam5lIDEwYlxuIgkJCQlcCisJICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJXAorCSAiICAgIC5ldmVuXG4iCQkJCQlcCisJICIxMTogbW92ZWwgJTIsJSVkMFxuIgkJCQlcCisJICIxMzogY2xybCAoJTApK1xuIgkJCQlcCisJICIgICAgc3VicWwgIzEsJSVkMFxuIgkJCQlcCisJICIgICAgam5lIDEzYlxuIgkJCQlcCisJICIgICAgbHNsbCAjMiwlMlxuIgkJCQlcCisJIGZpeHVwICJcbiIJCQkJCVwKKwkgIiAgICBqcmEgMTJmXG4iCQkJCVwKKwkgIi5wcmV2aW91c1xuIgkJCQkJXAorCSAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKKwkgIiAgICAuYWxpZ24gNFxuIgkJCQlcCisJICIgICAgLmxvbmcgMTBiLDExYlxuIgkJCQlcCisJICIucHJldmlvdXNcbiIJCQkJCVwKKwkgY29weSAiXG4iCQkJCQlcCisJICIxMjoiCQkJCQkJXAorCSA6ICI9YSIodG8pLCAiPWEiKGZyb20pLCAiPWQiKG4pCQlcCisJIDogIjAiKHRvKSwgIjEiKGZyb20pLCAiMiIobi80KQkJCVwKKwkgOiAiZDAiLCAibWVtb3J5IikKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2NvbnN0YW50X2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisgICAgc3dpdGNoIChuKSB7CisgICAgY2FzZSAwOgorCWJyZWFrOworICAgIGNhc2UgMToKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAoIjE6IG1vdmVzYiAoJTEpKywlJWQwXG4iCisJICAgICAiICAgbW92ZWIgJSVkMCwoJTApK1xuIgorCSAgICAgIjI6XG4iCisJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAgICAgIiAgIC5ldmVuXG4iCisJICAgICAiMzogYWRkcWwgIzEsJTJcbiIKKwkgICAgICIgICBjbHJiICglMCkrXG4iCisJICAgICAiICAganJhIDJiXG4iCisJICAgICAiLnByZXZpb3VzXG4iCisJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSAgICAgIiAgIC5hbGlnbiA0XG4iCisJICAgICAiICAgLmxvbmcgMWIsM2JcbiIKKwkgICAgICIucHJldmlvdXMiCisJICAgICA6ICI9YSIodG8pLCAiPWEiKGZyb20pLCAiPWQiKG4pCisJICAgICA6ICIwIih0byksICIxIihmcm9tKSwgIjIiKDApCisJICAgICA6ICJkMCIsICJtZW1vcnkiKTsKKwlicmVhazsKKyAgICBjYXNlIDI6CisJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkgICAgKCIxOiBtb3Zlc3cgKCUxKSssJSVkMFxuIgorCSAgICAgIiAgIG1vdmV3ICUlZDAsKCUwKStcbiIKKwkgICAgICIyOlxuIgorCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkgICAgICIgICAuZXZlblxuIgorCSAgICAgIjM6IGFkZHFsICMyLCUyXG4iCisJICAgICAiICAgY2xydyAoJTApK1xuIgorCSAgICAgIiAgIGpyYSAyYlxuIgorCSAgICAgIi5wcmV2aW91c1xuIgorCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkgICAgICIgICAuYWxpZ24gNFxuIgorCSAgICAgIiAgIC5sb25nIDFiLDNiXG4iCisJICAgICAiLnByZXZpb3VzIgorCSAgICAgOiAiPWEiKHRvKSwgIj1hIihmcm9tKSwgIj1kIihuKQorCSAgICAgOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIigwKQorCSAgICAgOiAiZDAiLCAibWVtb3J5Iik7CisJYnJlYWs7CisgICAgY2FzZSAzOgorCV9fYXNtX18gX192b2xhdGlsZV9fCisJICAgICgiMTogbW92ZXN3ICglMSkrLCUlZDBcbiIKKwkgICAgICIgICBtb3ZldyAlJWQwLCglMCkrXG4iCisJICAgICAiMjogbW92ZXNiICglMSkrLCUlZDBcbiIKKwkgICAgICIgICBtb3ZlYiAlJWQwLCglMCkrXG4iCisJICAgICAiMzoiCisJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAgICAgIiAgIC5ldmVuXG4iCisJICAgICAiNDogYWRkcWwgIzIsJTJcbiIKKwkgICAgICIgICBjbHJ3ICglMCkrXG4iCisJICAgICAiNTogYWRkcWwgIzEsJTJcbiIKKwkgICAgICIgICBjbHJiICglMCkrXG4iCisJICAgICAiICAganJhIDNiXG4iCisJICAgICAiLnByZXZpb3VzXG4iCisJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSAgICAgIiAgIC5hbGlnbiA0XG4iCisJICAgICAiICAgLmxvbmcgMWIsNGJcbiIKKwkgICAgICIgICAubG9uZyAyYiw1YlxuIgorCSAgICAgIi5wcmV2aW91cyIKKwkgICAgIDogIj1hIih0byksICI9YSIoZnJvbSksICI9ZCIobikKKwkgICAgIDogIjAiKHRvKSwgIjEiKGZyb20pLCAiMiIoMCkKKwkgICAgIDogImQwIiwgIm1lbW9yeSIpOworCWJyZWFrOworICAgIGNhc2UgNDoKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAoIjE6IG1vdmVzbCAoJTEpKywlJWQwXG4iCisJICAgICAiICAgbW92ZWwgJSVkMCwoJTApK1xuIgorCSAgICAgIjI6IgorCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkgICAgICIgICAuZXZlblxuIgorCSAgICAgIjM6IGFkZHFsICM0LCUyXG4iCisJICAgICAiICAgY2xybCAoJTApK1xuIgorCSAgICAgIiAgIGpyYSAyYlxuIgorCSAgICAgIi5wcmV2aW91c1xuIgorCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkgICAgICIgICAuYWxpZ24gNFxuIgorCSAgICAgIiAgIC5sb25nIDFiLDNiXG4iCisJICAgICAiLnByZXZpb3VzIgorCSAgICAgOiAiPWEiKHRvKSwgIj1hIihmcm9tKSwgIj1kIihuKQorCSAgICAgOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIigwKQorCSAgICAgOiAiZDAiLCAibWVtb3J5Iik7CisJYnJlYWs7CisgICAgY2FzZSA4OgorCV9fYXNtX18gX192b2xhdGlsZV9fCisJICAgICgiMTogbW92ZXNsICglMSkrLCUlZDBcbiIKKwkgICAgICIgICBtb3ZlbCAlJWQwLCglMCkrXG4iCisJICAgICAiMjogbW92ZXNsICglMSkrLCUlZDBcbiIKKwkgICAgICIgICBtb3ZlbCAlJWQwLCglMCkrXG4iCisJICAgICAiMzoiCisJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAgICAgIiAgIC5ldmVuXG4iCisJICAgICAiNDogYWRkcWwgIzQsJTJcbiIKKwkgICAgICIgICBjbHJsICglMCkrXG4iCisJICAgICAiNTogYWRkcWwgIzQsJTJcbiIKKwkgICAgICIgICBjbHJsICglMCkrXG4iCisJICAgICAiICAganJhIDNiXG4iCisJICAgICAiLnByZXZpb3VzXG4iCisJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSAgICAgIiAgIC5hbGlnbiA0XG4iCisJICAgICAiICAgLmxvbmcgMWIsNGJcbiIKKwkgICAgICIgICAubG9uZyAyYiw1YlxuIgorCSAgICAgIi5wcmV2aW91cyIKKwkgICAgIDogIj1hIih0byksICI9YSIoZnJvbSksICI9ZCIobikKKwkgICAgIDogIjAiKHRvKSwgIjEiKGZyb20pLCAiMiIoMCkKKwkgICAgIDogImQwIiwgIm1lbW9yeSIpOworCWJyZWFrOworICAgIGNhc2UgMTI6CisJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkgICAgKCIxOiBtb3Zlc2wgKCUxKSssJSVkMFxuIgorCSAgICAgIiAgIG1vdmVsICUlZDAsKCUwKStcbiIKKwkgICAgICIyOiBtb3Zlc2wgKCUxKSssJSVkMFxuIgorCSAgICAgIiAgIG1vdmVsICUlZDAsKCUwKStcbiIKKwkgICAgICIzOiBtb3Zlc2wgKCUxKSssJSVkMFxuIgorCSAgICAgIiAgIG1vdmVsICUlZDAsKCUwKStcbiIKKwkgICAgICI0OiIKKwkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJICAgICAiICAgLmV2ZW5cbiIKKwkgICAgICI1OiBhZGRxbCAjNCwlMlxuIgorCSAgICAgIiAgIGNscmwgKCUwKStcbiIKKwkgICAgICI2OiBhZGRxbCAjNCwlMlxuIgorCSAgICAgIiAgIGNscmwgKCUwKStcbiIKKwkgICAgICI3OiBhZGRxbCAjNCwlMlxuIgorCSAgICAgIiAgIGNscmwgKCUwKStcbiIKKwkgICAgICIgICBqcmEgNGJcbiIKKwkgICAgICIucHJldmlvdXNcbiIKKwkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJICAgICAiICAgLmFsaWduIDRcbiIKKwkgICAgICIgICAubG9uZyAxYiw1YlxuIgorCSAgICAgIiAgIC5sb25nIDJiLDZiXG4iCisJICAgICAiICAgLmxvbmcgM2IsN2JcbiIKKwkgICAgICIucHJldmlvdXMiCisJICAgICA6ICI9YSIodG8pLCAiPWEiKGZyb20pLCAiPWQiKG4pCisJICAgICA6ICIwIih0byksICIxIihmcm9tKSwgIjIiKDApCisJICAgICA6ICJkMCIsICJtZW1vcnkiKTsKKwlicmVhazsKKyAgICBjYXNlIDE2OgorCV9fYXNtX18gX192b2xhdGlsZV9fCisJICAgICgiMTogbW92ZXNsICglMSkrLCUlZDBcbiIKKwkgICAgICIgICBtb3ZlbCAlJWQwLCglMCkrXG4iCisJICAgICAiMjogbW92ZXNsICglMSkrLCUlZDBcbiIKKwkgICAgICIgICBtb3ZlbCAlJWQwLCglMCkrXG4iCisJICAgICAiMzogbW92ZXNsICglMSkrLCUlZDBcbiIKKwkgICAgICIgICBtb3ZlbCAlJWQwLCglMCkrXG4iCisJICAgICAiNDogbW92ZXNsICglMSkrLCUlZDBcbiIKKwkgICAgICIgICBtb3ZlbCAlJWQwLCglMCkrXG4iCisJICAgICAiNToiCisJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAgICAgIiAgIC5ldmVuXG4iCisJICAgICAiNjogYWRkcWwgIzQsJTJcbiIKKwkgICAgICIgICBjbHJsICglMCkrXG4iCisJICAgICAiNzogYWRkcWwgIzQsJTJcbiIKKwkgICAgICIgICBjbHJsICglMCkrXG4iCisJICAgICAiODogYWRkcWwgIzQsJTJcbiIKKwkgICAgICIgICBjbHJsICglMCkrXG4iCisJICAgICAiOTogYWRkcWwgIzQsJTJcbiIKKwkgICAgICIgICBjbHJsICglMCkrXG4iCisJICAgICAiICAganJhIDViXG4iCisJICAgICAiLnByZXZpb3VzXG4iCisJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSAgICAgIiAgIC5hbGlnbiA0XG4iCisJICAgICAiICAgLmxvbmcgMWIsNmJcbiIKKwkgICAgICIgICAubG9uZyAyYiw3YlxuIgorCSAgICAgIiAgIC5sb25nIDNiLDhiXG4iCisJICAgICAiICAgLmxvbmcgNGIsOWJcbiIKKwkgICAgICIucHJldmlvdXMiCisJICAgICA6ICI9YSIodG8pLCAiPWEiKGZyb20pLCAiPWQiKG4pCisJICAgICA6ICIwIih0byksICIxIihmcm9tKSwgIjIiKDApCisJICAgICA6ICJkMCIsICJtZW1vcnkiKTsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorCXN3aXRjaCAobiAmIDMpIHsKKwljYXNlIDA6CisJICAgIF9fY29weV9mcm9tX3VzZXJfYmlnKHRvLCBmcm9tLCBuLCAiIiwgIiIpOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIF9fY29weV9mcm9tX3VzZXJfYmlnKHRvLCBmcm9tLCBuLAorCQkJCSAvKiBmaXh1cCAqLworCQkJCSAiMTogYWRkcWwgIzEsJTJcbiIKKwkJCQkgIiAgIGNscmIgKCUwKSsiLAorCQkJCSAvKiBjb3B5ICovCisJCQkJICIyOiBtb3Zlc2IgKCUxKSssJSVkMFxuIgorCQkJCSAiICAgbW92ZWIgJSVkMCwoJTApK1xuIgorCQkJCSAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkJCSAiICAgLmxvbmcgMmIsMWJcbiIKKwkJCQkgIi5wcmV2aW91cyIpOworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIF9fY29weV9mcm9tX3VzZXJfYmlnKHRvLCBmcm9tLCBuLAorCQkJCSAvKiBmaXh1cCAqLworCQkJCSAiMTogYWRkcWwgIzIsJTJcbiIKKwkJCQkgIiAgIGNscncgKCUwKSsiLAorCQkJCSAvKiBjb3B5ICovCisJCQkJICIyOiBtb3Zlc3cgKCUxKSssJSVkMFxuIgorCQkJCSAiICAgbW92ZXcgJSVkMCwoJTApK1xuIgorCQkJCSAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkJCSAiICAgLmxvbmcgMmIsMWJcbiIKKwkJCQkgIi5wcmV2aW91cyIpOworCSAgICBicmVhazsKKwljYXNlIDM6CisJICAgIF9fY29weV9mcm9tX3VzZXJfYmlnKHRvLCBmcm9tLCBuLAorCQkJCSAvKiBmaXh1cCAqLworCQkJCSAiMTogYWRkcWwgIzIsJTJcbiIKKwkJCQkgIiAgIGNscncgKCUwKStcbiIKKwkJCQkgIjI6IGFkZHFsICMxLCUyXG4iCisJCQkJICIgICBjbHJiICglMCkrIiwKKwkJCQkgLyogY29weSAqLworCQkJCSAiMzogbW92ZXN3ICglMSkrLCUlZDBcbiIKKwkJCQkgIiAgIG1vdmV3ICUlZDAsKCUwKStcbiIKKwkJCQkgIjQ6IG1vdmVzYiAoJTEpKywlJWQwXG4iCisJCQkJICIgICBtb3ZlYiAlJWQwLCglMCkrXG4iCisJCQkJICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJCQkJICIgICAubG9uZyAzYiwxYlxuIgorCQkJCSAiICAgLmxvbmcgNGIsMmJcbiIKKwkJCQkgIi5wcmV2aW91cyIpOworCSAgICBicmVhazsKKwl9CisJYnJlYWs7CisgICAgfQorICAgIHJldHVybiBuOworfQorCisjZGVmaW5lIF9fY29weV90b191c2VyX2JpZyh0bywgZnJvbSwgbiwgZml4dXAsIGNvcHkpCVwKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXwkJCQlcCisJKCIxMDogbW92ZWwgKCUxKSssJSVkMFxuIgkJCVwKKwkgIjMxOiBtb3Zlc2wgJSVkMCwoJTApK1xuIgkJCVwKKwkgIjExOiBzdWJxbCAjMSwlMlxuIgkJCQlcCisJICIgICAgam5lIDEwYlxuIgkJCQlcCisJICI0MTpcbiIJCQkJCVwKKwkgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQlcCisJICIgICAuZXZlblxuIgkJCQkJXAorCSAiMjI6IGFkZHFsICMxLCUyXG4iCQkJCVwKKwkgIjEyOiBsc2xsICMyLCUyXG4iCQkJCVwKKwkgZml4dXAgIlxuIgkJCQkJXAorCSAiICAgIGpyYSAxM2ZcbiIJCQkJXAorCSAiLnByZXZpb3VzXG4iCQkJCQlcCisJICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAorCSAiICAgIC5hbGlnbiA0XG4iCQkJCVwKKwkgIiAgICAubG9uZyAxMGIsMjJiXG4iCQkJCVwKKwkgIiAgICAubG9uZyAzMWIsMTJiXG4iCQkJCVwKKwkgIiAgICAubG9uZyAxMWIsMTJiXG4iCQkJCVwKKwkgIiAgICAubG9uZyA0MWIsMjJiXG4iCQkJCVwKKwkgIi5wcmV2aW91c1xuIgkJCQkJXAorCSBjb3B5ICJcbiIJCQkJCVwKKwkgIjEzOiIJCQkJCQlcCisJIDogIj1hIih0byksICI9YSIoZnJvbSksICI9ZCIobikJCVwKKwkgOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIihuLzQpCQkJXAorCSA6ICJkMCIsICJtZW1vcnkiKQorCisjZGVmaW5lIF9fY29weV90b191c2VyX2luYXRvbWljIF9fY29weV90b191c2VyCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMgX19jb3B5X2Zyb21fdXNlcgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY29uc3RhbnRfY29weV90b191c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisgICAgc3dpdGNoIChuKSB7CisgICAgY2FzZSAwOgorCWJyZWFrOworICAgIGNhc2UgMToKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAoIiAgIG1vdmViICglMSkrLCUlZDBcbiIKKwkgICAgICIyMTptb3Zlc2IgJSVkMCwoJTApK1xuIgorCSAgICAgIjE6XG4iCisJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAgICAgIiAgIC5ldmVuXG4iCisJICAgICAiMjogYWRkcWwgIzEsJTJcbiIKKwkgICAgICIgICBqcmEgMWJcbiIKKwkgICAgICIucHJldmlvdXNcbiIKKwkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJICAgICAiICAgLmFsaWduIDRcbiAgIgorCSAgICAgIiAgIC5sb25nIDIxYiwyYlxuIgorCSAgICAgIiAgIC5sb25nIDFiLDJiXG4iCisJICAgICAiLnByZXZpb3VzIgorCSAgICAgOiAiPWEiKHRvKSwgIj1hIihmcm9tKSwgIj1kIihuKQorCSAgICAgOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIigwKQorCSAgICAgOiAiZDAiLCAibWVtb3J5Iik7CisJYnJlYWs7CisgICAgY2FzZSAyOgorCV9fYXNtX18gX192b2xhdGlsZV9fCisJICAgICgiICAgbW92ZXcgKCUxKSssJSVkMFxuIgorCSAgICAgIjIxOm1vdmVzdyAlJWQwLCglMCkrXG4iCisJICAgICAiMTpcbiIKKwkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJICAgICAiICAgLmV2ZW5cbiIKKwkgICAgICIyOiBhZGRxbCAjMiwlMlxuIgorCSAgICAgIiAgIGpyYSAxYlxuIgorCSAgICAgIi5wcmV2aW91c1xuIgorCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkgICAgICIgICAuYWxpZ24gNFxuIgorCSAgICAgIiAgIC5sb25nIDIxYiwyYlxuIgorCSAgICAgIiAgIC5sb25nIDFiLDJiXG4iCisJICAgICAiLnByZXZpb3VzIgorCSAgICAgOiAiPWEiKHRvKSwgIj1hIihmcm9tKSwgIj1kIihuKQorCSAgICAgOiAiMCIodG8pLCAiMSIoZnJvbSksICIyIigwKQorCSAgICAgOiAiZDAiLCAibWVtb3J5Iik7CisJYnJlYWs7CisgICAgY2FzZSAzOgorCV9fYXNtX18gX192b2xhdGlsZV9fCisJICAgICgiICAgbW92ZXcgKCUxKSssJSVkMFxuIgorCSAgICAgIjIxOm1vdmVzdyAlJWQwLCglMCkrXG4iCisJICAgICAiMTogbW92ZWIgKCUxKSssJSVkMFxuIgorCSAgICAgIjIyOm1vdmVzYiAlJWQwLCglMCkrXG4iCisJICAgICAiMjpcbiIKKwkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJICAgICAiICAgLmV2ZW5cbiIKKwkgICAgICIzOiBhZGRxbCAjMiwlMlxuIgorCSAgICAgIjQ6IGFkZHFsICMxLCUyXG4iCisJICAgICAiICAganJhIDJiXG4iCisJICAgICAiLnByZXZpb3VzXG4iCisJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSAgICAgIiAgIC5hbGlnbiA0XG4iCisJICAgICAiICAgLmxvbmcgMjFiLDNiXG4iCisJICAgICAiICAgLmxvbmcgMWIsM2JcbiIKKwkgICAgICIgICAubG9uZyAyMmIsNGJcbiIKKwkgICAgICIgICAubG9uZyAyYiw0YlxuIgorCSAgICAgIi5wcmV2aW91cyIKKwkgICAgIDogIj1hIih0byksICI9YSIoZnJvbSksICI9ZCIobikKKwkgICAgIDogIjAiKHRvKSwgIjEiKGZyb20pLCAiMiIoMCkKKwkgICAgIDogImQwIiwgIm1lbW9yeSIpOworCWJyZWFrOworICAgIGNhc2UgNDoKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAoIiAgIG1vdmVsICglMSkrLCUlZDBcbiIKKwkgICAgICIyMTptb3Zlc2wgJSVkMCwoJTApK1xuIgorCSAgICAgIjE6XG4iCisJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAgICAgIiAgIC5ldmVuXG4iCisJICAgICAiMjogYWRkcWwgIzQsJTJcbiIKKwkgICAgICIgICBqcmEgMWJcbiIKKwkgICAgICIucHJldmlvdXNcbiIKKwkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJICAgICAiICAgLmFsaWduIDRcbiIKKwkgICAgICIgICAubG9uZyAyMWIsMmJcbiIKKwkgICAgICIgICAubG9uZyAxYiwyYlxuIgorCSAgICAgIi5wcmV2aW91cyIKKwkgICAgIDogIj1hIih0byksICI9YSIoZnJvbSksICI9ZCIobikKKwkgICAgIDogIjAiKHRvKSwgIjEiKGZyb20pLCAiMiIoMCkKKwkgICAgIDogImQwIiwgIm1lbW9yeSIpOworCWJyZWFrOworICAgIGNhc2UgODoKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCSAgICAoIiAgIG1vdmVsICglMSkrLCUlZDBcbiIKKwkgICAgICIyMTptb3Zlc2wgJSVkMCwoJTApK1xuIgorCSAgICAgIjE6IG1vdmVsICglMSkrLCUlZDBcbiIKKwkgICAgICIyMjptb3Zlc2wgJSVkMCwoJTApK1xuIgorCSAgICAgIjI6XG4iCisJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAgICAgIiAgIC5ldmVuXG4iCisJICAgICAiMzogYWRkcWwgIzQsJTJcbiIKKwkgICAgICI0OiBhZGRxbCAjNCwlMlxuIgorCSAgICAgIiAgIGpyYSAyYlxuIgorCSAgICAgIi5wcmV2aW91c1xuIgorCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkgICAgICIgICAuYWxpZ24gNFxuIgorCSAgICAgIiAgIC5sb25nIDIxYiwzYlxuIgorCSAgICAgIiAgIC5sb25nIDFiLDNiXG4iCisJICAgICAiICAgLmxvbmcgMjJiLDRiXG4iCisJICAgICAiICAgLmxvbmcgMmIsNGJcbiIKKwkgICAgICIucHJldmlvdXMiCisJICAgICA6ICI9YSIodG8pLCAiPWEiKGZyb20pLCAiPWQiKG4pCisJICAgICA6ICIwIih0byksICIxIihmcm9tKSwgIjIiKDApCisJICAgICA6ICJkMCIsICJtZW1vcnkiKTsKKwlicmVhazsKKyAgICBjYXNlIDEyOgorCV9fYXNtX18gX192b2xhdGlsZV9fCisJICAgICgiICAgbW92ZWwgKCUxKSssJSVkMFxuIgorCSAgICAgIjIxOm1vdmVzbCAlJWQwLCglMCkrXG4iCisJICAgICAiMTogbW92ZWwgKCUxKSssJSVkMFxuIgorCSAgICAgIjIyOm1vdmVzbCAlJWQwLCglMCkrXG4iCisJICAgICAiMjogbW92ZWwgKCUxKSssJSVkMFxuIgorCSAgICAgIjIzOm1vdmVzbCAlJWQwLCglMCkrXG4iCisJICAgICAiMzpcbiIKKwkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJICAgICAiICAgLmV2ZW5cbiIKKwkgICAgICI0OiBhZGRxbCAjNCwlMlxuIgorCSAgICAgIjU6IGFkZHFsICM0LCUyXG4iCisJICAgICAiNjogYWRkcWwgIzQsJTJcbiIKKwkgICAgICIgICBqcmEgM2JcbiIKKwkgICAgICIucHJldmlvdXNcbiIKKwkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJICAgICAiICAgLmFsaWduIDRcbiIKKwkgICAgICIgICAubG9uZyAyMWIsNGJcbiIKKwkgICAgICIgICAubG9uZyAxYiw0YlxuIgorCSAgICAgIiAgIC5sb25nIDIyYiw1YlxuIgorCSAgICAgIiAgIC5sb25nIDJiLDViXG4iCisJICAgICAiICAgLmxvbmcgMjNiLDZiXG4iCisJICAgICAiICAgLmxvbmcgM2IsNmJcbiIKKwkgICAgICIucHJldmlvdXMiCisJICAgICA6ICI9YSIodG8pLCAiPWEiKGZyb20pLCAiPWQiKG4pCisJICAgICA6ICIwIih0byksICIxIihmcm9tKSwgIjIiKDApCisJICAgICA6ICJkMCIsICJtZW1vcnkiKTsKKwlicmVhazsKKyAgICBjYXNlIDE2OgorCV9fYXNtX18gX192b2xhdGlsZV9fCisJICAgICgiICAgbW92ZWwgKCUxKSssJSVkMFxuIgorCSAgICAgIjIxOm1vdmVzbCAlJWQwLCglMCkrXG4iCisJICAgICAiMTogbW92ZWwgKCUxKSssJSVkMFxuIgorCSAgICAgIjIyOm1vdmVzbCAlJWQwLCglMCkrXG4iCisJICAgICAiMjogbW92ZWwgKCUxKSssJSVkMFxuIgorCSAgICAgIjIzOm1vdmVzbCAlJWQwLCglMCkrXG4iCisJICAgICAiMzogbW92ZWwgKCUxKSssJSVkMFxuIgorCSAgICAgIjI0Om1vdmVzbCAlJWQwLCglMCkrXG4iCisJICAgICAiNDoiCisJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAgICAgIiAgIC5ldmVuXG4iCisJICAgICAiNTogYWRkcWwgIzQsJTJcbiIKKwkgICAgICI2OiBhZGRxbCAjNCwlMlxuIgorCSAgICAgIjc6IGFkZHFsICM0LCUyXG4iCisJICAgICAiODogYWRkcWwgIzQsJTJcbiIKKwkgICAgICIgICBqcmEgNGJcbiIKKwkgICAgICIucHJldmlvdXNcbiIKKwkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJICAgICAiICAgLmFsaWduIDRcbiIKKwkgICAgICIgICAubG9uZyAyMWIsNWJcbiIKKwkgICAgICIgICAubG9uZyAxYiw1YlxuIgorCSAgICAgIiAgIC5sb25nIDIyYiw2YlxuIgorCSAgICAgIiAgIC5sb25nIDJiLDZiXG4iCisJICAgICAiICAgLmxvbmcgMjNiLDdiXG4iCisJICAgICAiICAgLmxvbmcgM2IsN2JcbiIKKwkgICAgICIgICAubG9uZyAyNGIsOGJcbiIKKwkgICAgICIgICAubG9uZyA0Yiw4YlxuIgorCSAgICAgIi5wcmV2aW91cyIKKwkgICAgIDogIj1hIih0byksICI9YSIoZnJvbSksICI9ZCIobikKKwkgICAgIDogIjAiKHRvKSwgIjEiKGZyb20pLCAiMiIoMCkKKwkgICAgIDogImQwIiwgIm1lbW9yeSIpOworCWJyZWFrOworICAgIGRlZmF1bHQ6CisJc3dpdGNoIChuICYgMykgeworCWNhc2UgMDoKKwkgICAgX19jb3B5X3RvX3VzZXJfYmlnKHRvLCBmcm9tLCBuLCAiIiwgIiIpOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIF9fY29weV90b191c2VyX2JpZyh0bywgZnJvbSwgbiwKKwkJCSAgICAgICAvKiBmaXh1cCAqLworCQkJICAgICAgICIxOiBhZGRxbCAjMSwlMiIsCisJCQkgICAgICAgLyogY29weSAqLworCQkJICAgICAgICIgICBtb3ZlYiAoJTEpKywlJWQwXG4iCisJCQkgICAgICAgIjIyOm1vdmVzYiAlJWQwLCglMCkrXG4iCisJCQkgICAgICAgIjI6IgorCQkJICAgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJCQkgICAgICAgIiAgIC5sb25nIDIyYiwxYlxuIgorCQkJICAgICAgICIgICAubG9uZyAyYiwxYlxuIgorCQkJICAgICAgICIucHJldmlvdXMiKTsKKwkgICAgYnJlYWs7CisJY2FzZSAyOgorCSAgICBfX2NvcHlfdG9fdXNlcl9iaWcodG8sIGZyb20sIG4sCisJCQkgICAgICAgLyogZml4dXAgKi8KKwkJCSAgICAgICAiMTogYWRkcWwgIzIsJTIiLAorCQkJICAgICAgIC8qIGNvcHkgKi8KKwkJCSAgICAgICAiICAgbW92ZXcgKCUxKSssJSVkMFxuIgorCQkJICAgICAgICIyMjptb3Zlc3cgJSVkMCwoJTApK1xuIgorCQkJICAgICAgICIyOiIKKwkJCSAgICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkJICAgICAgICIgICAubG9uZyAyMmIsMWJcbiIKKwkJCSAgICAgICAiICAgLmxvbmcgMmIsMWJcbiIKKwkJCSAgICAgICAiLnByZXZpb3VzIik7CisJICAgIGJyZWFrOworCWNhc2UgMzoKKwkgICAgX19jb3B5X3RvX3VzZXJfYmlnKHRvLCBmcm9tLCBuLAorCQkJICAgICAgIC8qIGZpeHVwICovCisJCQkgICAgICAgIjE6IGFkZHFsICMyLCUyXG4iCisJCQkgICAgICAgIjI6IGFkZHFsICMxLCUyIiwKKwkJCSAgICAgICAvKiBjb3B5ICovCisJCQkgICAgICAgIiAgIG1vdmV3ICglMSkrLCUlZDBcbiIKKwkJCSAgICAgICAiMjM6bW92ZXN3ICUlZDAsKCUwKStcbiIKKwkJCSAgICAgICAiMzogbW92ZWIgKCUxKSssJSVkMFxuIgorCQkJICAgICAgICIyNDptb3Zlc2IgJSVkMCwoJTApK1xuIgorCQkJICAgICAgICI0OiIKKwkJCSAgICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkJICAgICAgICIgICAubG9uZyAyM2IsMWJcbiIKKwkJCSAgICAgICAiICAgLmxvbmcgM2IsMWJcbiIKKwkJCSAgICAgICAiICAgLmxvbmcgMjRiLDJiXG4iCisJCQkgICAgICAgIiAgIC5sb25nIDRiLDJiXG4iCisJCQkgICAgICAgIi5wcmV2aW91cyIpOworCSAgICBicmVhazsKKwl9CisJYnJlYWs7CisgICAgfQorICAgIHJldHVybiBuOworfQorCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKQkJXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pID8JCQlcCisgX19jb25zdGFudF9jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbikgOglcCisgX19nZW5lcmljX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKSkKKworI2RlZmluZSBjb3B5X3RvX3VzZXIodG8sIGZyb20sIG4pCQlcCisoX19idWlsdGluX2NvbnN0YW50X3AobikgPwkJCVwKKyBfX2NvbnN0YW50X2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbikgOgkJXAorIF9fZ2VuZXJpY19jb3B5X3RvX3VzZXIodG8sIGZyb20sIG4pKQorCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pIGNvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKQorI2RlZmluZSBfX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbikgY29weV90b191c2VyKHRvLCBmcm9tLCBuKQorCisvKgorICogQ29weSBhIG51bGwgdGVybWluYXRlZCBzdHJpbmcgZnJvbSB1c2Vyc3BhY2UuCisgKi8KKworc3RhdGljIGlubGluZSBsb25nCitzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgbG9uZyBjb3VudCkKK3sKKyAgICBsb25nIHJlczsKKyAgICBpZiAoY291bnQgPT0gMCkgcmV0dXJuIGNvdW50OworICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisJKCIxOiBtb3Zlc2IgKCUyKSssJSVkMFxuIgorCSAiMTI6bW92ZWIgJSVkMCwoJTEpK1xuIgorCSAiICAgamVxIDJmXG4iCisJICIgICBzdWJxbCAjMSwlM1xuIgorCSAiICAgam5lIDFiXG4iCisJICIyOiBzdWJsICUzLCUwXG4iCisJICIzOlxuIgorCSAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCSAiICAgLmV2ZW5cbiIKKwkgIjQ6IG1vdmVsICU0LCUwXG4iCisJICIgICBqcmEgM2JcbiIKKwkgIi5wcmV2aW91c1xuIgorCSAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCSAiICAgLmFsaWduIDRcbiIKKwkgIiAgIC5sb25nIDFiLDRiXG4iCisJICIgICAubG9uZyAxMmIsNGJcbiIKKwkgIi5wcmV2aW91cyIKKwkgOiAiPWQiKHJlcyksICI9YSIoZHN0KSwgIj1hIihzcmMpLCAiPWQiKGNvdW50KQorCSA6ICJpIigtRUZBVUxUKSwgIjAiKGNvdW50KSwgIjEiKGRzdCksICIyIihzcmMpLCAiMyIoY291bnQpCisJIDogImQwIiwgIm1lbW9yeSIpOworICAgIHJldHVybiByZXM7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHNpemUgb2YgYSBzdHJpbmcgKGluY2x1ZGluZyB0aGUgZW5kaW5nIDApCisgKgorICogUmV0dXJuIDAgb24gZXhjZXB0aW9uLCBhIHZhbHVlIGdyZWF0ZXIgdGhhbiBOIGlmIHRvbyBsb25nCisgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciAqc3JjLCBsb25nIG4pCit7CisJbG9uZyByZXM7CisKKwlyZXMgPSAtKGxvbmcpc3JjOworCV9fYXNtX18gX192b2xhdGlsZV9fCisJCSgiMTpcbiIKKwkJICIgICB0c3RsICUyXG4iCisJCSAiICAgamVxIDNmXG4iCisJCSAiMjogbW92ZXNiICglMSkrLCUlZDBcbiIKKwkJICIyMjpcbiIKKwkJICIgICBzdWJxbCAjMSwlMlxuIgorCQkgIiAgIHRzdGIgJSVkMFxuIgorCQkgIiAgIGpuZSAxYlxuIgorCQkgIiAgIGpyYSA0ZlxuIgorCQkgIjM6XG4iCisJCSAiICAgYWRkcWwgIzEsJTBcbiIKKwkJICI0OlxuIgorCQkgIiAgIGFkZGwgJTEsJTBcbiIKKwkJICI1OlxuIgorCQkgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkJICIgICAuZXZlblxuIgorCQkgIjY6IG1vdmVxICUzLCUwXG4iCisJCSAiICAganJhIDViXG4iCisJCSAiLnByZXZpb3VzXG4iCisJCSAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkgIiAgIC5hbGlnbiA0XG4iCisJCSAiICAgLmxvbmcgMmIsNmJcbiIKKwkJICIgICAubG9uZyAyMmIsNmJcbiIKKwkJICIucHJldmlvdXMiCisJCSA6ICI9ZCIocmVzKSwgIj1hIihzcmMpLCAiPWQiKG4pCisJCSA6ICJpIigwKSwgIjAiKHJlcyksICIxIihzcmMpLCAiMiIobikKKwkJIDogImQwIik7CisJcmV0dXJuIHJlczsKK30KKworI2RlZmluZSBzdHJsZW5fdXNlcihzdHIpIHN0cm5sZW5fdXNlcihzdHIsIDMyNzY3KQorCisvKgorICogWmVybyBVc2Vyc3BhY2UKKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2NsZWFyX3VzZXIodm9pZCAqdG8sIHVuc2lnbmVkIGxvbmcgbikKK3sKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworCSgiICAgdHN0bCAlMVxuIgorCSAiICAgamVxIDNmXG4iCisJICIxOiBtb3Zlc2wgJTMsKCUwKStcbiIKKwkgIjI6IHN1YnFsICMxLCUxXG4iCisJICIgICBqbmUgMWJcbiIKKwkgIjM6IG1vdmVsICUyLCUxXG4iCisJICIgICBiY2xyICMxLCUxXG4iCisJICIgICBqZXEgNGZcbiIKKwkgIjI0Om1vdmVzdyAlMywoJTApK1xuIgorCSAiNDogYmNsciAjMCwlMVxuIgorCSAiICAgamVxIDVmXG4iCisJICIyNTptb3Zlc2IgJTMsKCUwKStcbiIKKwkgIjU6XG4iCisJICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJICIgICAuZXZlblxuIgorCSAiNjE6YWRkcWwgIzEsJTFcbiIKKwkgIjY6IGxzbGwgIzIsJTFcbiIKKwkgIiAgIGFkZGwgJTIsJTFcbiIKKwkgIiAgIGpyYSA1YlxuIgorCSAiNzogYWRkcWwgIzIsJTFcbiIKKwkgIiAgIGpyYSA1YlxuIgorCSAiODogYWRkcWwgIzEsJTFcbiIKKwkgIiAgIGpyYSA1YlxuIgorCSAiLnByZXZpb3VzXG4iCisJICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJICIgICAuYWxpZ24gNFxuIgorCSAiICAgLmxvbmcgMWIsNjFiXG4iCisJICIgICAubG9uZyAyYiw2YlxuIgorCSAiICAgLmxvbmcgM2IsNjFiXG4iCisJICIgICAubG9uZyAyNGIsN2JcbiIKKwkgIiAgIC5sb25nIDRiLDdiXG4iCisJICIgICAubG9uZyAyNWIsOGJcbiIKKwkgIiAgIC5sb25nIDViLDhiXG4iCisJICIucHJldmlvdXMiCisJIDogIj1hIih0byksICI9ZCIobikKKwkgOiAiciIobiAmIDMpLCAiciIoMCksICIwIih0byksICIxIihuLzQpKTsKKyAgICByZXR1cm4gbjsKK30KKworI2VuZGlmIC8qIF9NNjhLX1VBQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay91Y29udGV4dC5oIGIvaW5jbHVkZS9hc20tbTY4ay91Y29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZTIyNjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3Vjb250ZXh0LmgKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBfTTY4S19VQ09OVEVYVF9ICisjZGVmaW5lIF9NNjhLX1VDT05URVhUX0gKKwordHlwZWRlZiBpbnQgZ3JlZ190OworI2RlZmluZSBOR1JFRyAxOAordHlwZWRlZiBncmVnX3QgZ3JlZ3NldF90W05HUkVHXTsKKwordHlwZWRlZiBzdHJ1Y3QgZnByZWdzZXQgeworCWludCBmX2ZwY250bFszXTsKKwlpbnQgZl9mcHJlZ3NbOCozXTsKK30gZnByZWdzZXRfdDsKKworc3RydWN0IG1jb250ZXh0IHsKKwlpbnQgdmVyc2lvbjsKKwlncmVnc2V0X3QgZ3JlZ3M7CisJZnByZWdzZXRfdCBmcHJlZ3M7Cit9OworCisjZGVmaW5lIE1DT05URVhUX1ZFUlNJT04gMgorCitzdHJ1Y3QgdWNvbnRleHQgeworCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKKwlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOworCXN0YWNrX3QJCSAgdWNfc3RhY2s7CisJc3RydWN0IG1jb250ZXh0CSAgdWNfbWNvbnRleHQ7CisJdW5zaWduZWQgbG9uZwkgIHVjX2ZpbGxlcls4MF07CisJc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLW02OGsvdW5hbGlnbmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA0Y2IzZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdW5hbGlnbmVkLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfX002OEtfVU5BTElHTkVEX0gKKyNkZWZpbmUgX19NNjhLX1VOQUxJR05FRF9ICisKKy8qCisgKiBUaGUgbTY4ayBjYW4gZG8gdW5hbGlnbmVkIGFjY2Vzc2VzIGl0c2VsZi4KKyAqCisgKiBUaGUgc3RyYW5nZSBtYWNyb3MgYXJlIHRoZXJlIHRvIG1ha2Ugc3VyZSB0aGVzZSBjYW4ndAorICogYmUgbWlzdXNlZCBpbiBhIHdheSB0aGF0IG1ha2VzIHRoZW0gbm90IHdvcmsgb24gb3RoZXIKKyAqIGFyY2hpdGVjdHVyZXMgd2hlcmUgdW5hbGlnbmVkIGFjY2Vzc2VzIGFyZW4ndCBhcyBzaW1wbGUuCisgKi8KKworI2RlZmluZSBnZXRfdW5hbGlnbmVkKHB0cikgKCoocHRyKSkKKworI2RlZmluZSBwdXRfdW5hbGlnbmVkKHZhbCwgcHRyKSAoKHZvaWQpKCAqKHB0cikgPSAodmFsKSApKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1tNjhrL3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYWJkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3VuaXN0ZC5oCkBAIC0wLDAgKzEsNDY1IEBACisjaWZuZGVmIF9BU01fTTY4S19VTklTVERfSF8KKyNkZWZpbmUgX0FTTV9NNjhLX1VOSVNURF9IXworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgorICovCisKKyNkZWZpbmUgX19OUl9leGl0CQkgIDEKKyNkZWZpbmUgX19OUl9mb3JrCQkgIDIKKyNkZWZpbmUgX19OUl9yZWFkCQkgIDMKKyNkZWZpbmUgX19OUl93cml0ZQkJICA0CisjZGVmaW5lIF9fTlJfb3BlbgkJICA1CisjZGVmaW5lIF9fTlJfY2xvc2UJCSAgNgorI2RlZmluZSBfX05SX3dhaXRwaWQJCSAgNworI2RlZmluZSBfX05SX2NyZWF0CQkgIDgKKyNkZWZpbmUgX19OUl9saW5rCQkgIDkKKyNkZWZpbmUgX19OUl91bmxpbmsJCSAxMAorI2RlZmluZSBfX05SX2V4ZWN2ZQkJIDExCisjZGVmaW5lIF9fTlJfY2hkaXIJCSAxMgorI2RlZmluZSBfX05SX3RpbWUJCSAxMworI2RlZmluZSBfX05SX21rbm9kCQkgMTQKKyNkZWZpbmUgX19OUl9jaG1vZAkJIDE1CisjZGVmaW5lIF9fTlJfY2hvd24JCSAxNgorI2RlZmluZSBfX05SX2JyZWFrCQkgMTcKKyNkZWZpbmUgX19OUl9vbGRzdGF0CQkgMTgKKyNkZWZpbmUgX19OUl9sc2VlawkJIDE5CisjZGVmaW5lIF9fTlJfZ2V0cGlkCQkgMjAKKyNkZWZpbmUgX19OUl9tb3VudAkJIDIxCisjZGVmaW5lIF9fTlJfdW1vdW50CQkgMjIKKyNkZWZpbmUgX19OUl9zZXR1aWQJCSAyMworI2RlZmluZSBfX05SX2dldHVpZAkJIDI0CisjZGVmaW5lIF9fTlJfc3RpbWUJCSAyNQorI2RlZmluZSBfX05SX3B0cmFjZQkJIDI2CisjZGVmaW5lIF9fTlJfYWxhcm0JCSAyNworI2RlZmluZSBfX05SX29sZGZzdGF0CQkgMjgKKyNkZWZpbmUgX19OUl9wYXVzZQkJIDI5CisjZGVmaW5lIF9fTlJfdXRpbWUJCSAzMAorI2RlZmluZSBfX05SX3N0dHkJCSAzMQorI2RlZmluZSBfX05SX2d0dHkJCSAzMgorI2RlZmluZSBfX05SX2FjY2VzcwkJIDMzCisjZGVmaW5lIF9fTlJfbmljZQkJIDM0CisjZGVmaW5lIF9fTlJfZnRpbWUJCSAzNQorI2RlZmluZSBfX05SX3N5bmMJCSAzNgorI2RlZmluZSBfX05SX2tpbGwJCSAzNworI2RlZmluZSBfX05SX3JlbmFtZQkJIDM4CisjZGVmaW5lIF9fTlJfbWtkaXIJCSAzOQorI2RlZmluZSBfX05SX3JtZGlyCQkgNDAKKyNkZWZpbmUgX19OUl9kdXAJCSA0MQorI2RlZmluZSBfX05SX3BpcGUJCSA0MgorI2RlZmluZSBfX05SX3RpbWVzCQkgNDMKKyNkZWZpbmUgX19OUl9wcm9mCQkgNDQKKyNkZWZpbmUgX19OUl9icmsJCSA0NQorI2RlZmluZSBfX05SX3NldGdpZAkJIDQ2CisjZGVmaW5lIF9fTlJfZ2V0Z2lkCQkgNDcKKyNkZWZpbmUgX19OUl9zaWduYWwJCSA0OAorI2RlZmluZSBfX05SX2dldGV1aWQJCSA0OQorI2RlZmluZSBfX05SX2dldGVnaWQJCSA1MAorI2RlZmluZSBfX05SX2FjY3QJCSA1MQorI2RlZmluZSBfX05SX3Vtb3VudDIJCSA1MgorI2RlZmluZSBfX05SX2xvY2sJCSA1MworI2RlZmluZSBfX05SX2lvY3RsCQkgNTQKKyNkZWZpbmUgX19OUl9mY250bAkJIDU1CisjZGVmaW5lIF9fTlJfbXB4CQkgNTYKKyNkZWZpbmUgX19OUl9zZXRwZ2lkCQkgNTcKKyNkZWZpbmUgX19OUl91bGltaXQJCSA1OAorI2RlZmluZSBfX05SX29sZG9sZHVuYW1lCSA1OQorI2RlZmluZSBfX05SX3VtYXNrCQkgNjAKKyNkZWZpbmUgX19OUl9jaHJvb3QJCSA2MQorI2RlZmluZSBfX05SX3VzdGF0CQkgNjIKKyNkZWZpbmUgX19OUl9kdXAyCQkgNjMKKyNkZWZpbmUgX19OUl9nZXRwcGlkCQkgNjQKKyNkZWZpbmUgX19OUl9nZXRwZ3JwCQkgNjUKKyNkZWZpbmUgX19OUl9zZXRzaWQJCSA2NgorI2RlZmluZSBfX05SX3NpZ2FjdGlvbgkJIDY3CisjZGVmaW5lIF9fTlJfc2dldG1hc2sJCSA2OAorI2RlZmluZSBfX05SX3NzZXRtYXNrCQkgNjkKKyNkZWZpbmUgX19OUl9zZXRyZXVpZAkJIDcwCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQJCSA3MQorI2RlZmluZSBfX05SX3NpZ3N1c3BlbmQJCSA3MgorI2RlZmluZSBfX05SX3NpZ3BlbmRpbmcJCSA3MworI2RlZmluZSBfX05SX3NldGhvc3RuYW1lCSA3NAorI2RlZmluZSBfX05SX3NldHJsaW1pdAkJIDc1CisjZGVmaW5lIF9fTlJfZ2V0cmxpbWl0CQkgNzYKKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UJCSA3NworI2RlZmluZSBfX05SX2dldHRpbWVvZmRheQkgNzgKKyNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkJIDc5CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzCQkgODAKKyNkZWZpbmUgX19OUl9zZXRncm91cHMJCSA4MQorI2RlZmluZSBfX05SX3NlbGVjdAkJIDgyCisjZGVmaW5lIF9fTlJfc3ltbGluawkJIDgzCisjZGVmaW5lIF9fTlJfb2xkbHN0YXQJCSA4NAorI2RlZmluZSBfX05SX3JlYWRsaW5rCQkgODUKKyNkZWZpbmUgX19OUl91c2VsaWIJCSA4NgorI2RlZmluZSBfX05SX3N3YXBvbgkJIDg3CisjZGVmaW5lIF9fTlJfcmVib290CQkgODgKKyNkZWZpbmUgX19OUl9yZWFkZGlyCQkgODkKKyNkZWZpbmUgX19OUl9tbWFwCQkgOTAKKyNkZWZpbmUgX19OUl9tdW5tYXAJCSA5MQorI2RlZmluZSBfX05SX3RydW5jYXRlCQkgOTIKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGUJCSA5MworI2RlZmluZSBfX05SX2ZjaG1vZAkJIDk0CisjZGVmaW5lIF9fTlJfZmNob3duCQkgOTUKKyNkZWZpbmUgX19OUl9nZXRwcmlvcml0eQkgOTYKKyNkZWZpbmUgX19OUl9zZXRwcmlvcml0eQkgOTcKKyNkZWZpbmUgX19OUl9wcm9maWwJCSA5OAorI2RlZmluZSBfX05SX3N0YXRmcwkJIDk5CisjZGVmaW5lIF9fTlJfZnN0YXRmcwkJMTAwCisjZGVmaW5lIF9fTlJfaW9wZXJtCQkxMDEKKyNkZWZpbmUgX19OUl9zb2NrZXRjYWxsCQkxMDIKKyNkZWZpbmUgX19OUl9zeXNsb2cJCTEwMworI2RlZmluZSBfX05SX3NldGl0aW1lcgkJMTA0CisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyCQkxMDUKKyNkZWZpbmUgX19OUl9zdGF0CQkxMDYKKyNkZWZpbmUgX19OUl9sc3RhdAkJMTA3CisjZGVmaW5lIF9fTlJfZnN0YXQJCTEwOAorI2RlZmluZSBfX05SX29sZHVuYW1lCQkxMDkKKyNkZWZpbmUgX19OUl9pb3BsCQkvKiAxMTAgKi8gbm90IHN1cHBvcnRlZAorI2RlZmluZSBfX05SX3ZoYW5ndXAJCTExMQorI2RlZmluZSBfX05SX2lkbGUJCS8qIDExMiAqLyBPYnNvbGV0ZQorI2RlZmluZSBfX05SX3ZtODYJCS8qIDExMyAqLyBub3Qgc3VwcG9ydGVkCisjZGVmaW5lIF9fTlJfd2FpdDQJCTExNAorI2RlZmluZSBfX05SX3N3YXBvZmYJCTExNQorI2RlZmluZSBfX05SX3N5c2luZm8JCTExNgorI2RlZmluZSBfX05SX2lwYwkJMTE3CisjZGVmaW5lIF9fTlJfZnN5bmMJCTExOAorI2RlZmluZSBfX05SX3NpZ3JldHVybgkJMTE5CisjZGVmaW5lIF9fTlJfY2xvbmUJCTEyMAorI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUJMTIxCisjZGVmaW5lIF9fTlJfdW5hbWUJCTEyMgorI2RlZmluZSBfX05SX2NhY2hlZmx1c2gJCTEyMworI2RlZmluZSBfX05SX2FkanRpbWV4CQkxMjQKKyNkZWZpbmUgX19OUl9tcHJvdGVjdAkJMTI1CisjZGVmaW5lIF9fTlJfc2lncHJvY21hc2sJMTI2CisjZGVmaW5lIF9fTlJfY3JlYXRlX21vZHVsZQkxMjcKKyNkZWZpbmUgX19OUl9pbml0X21vZHVsZQkxMjgKKyNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlCTEyOQorI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcwkxMzAKKyNkZWZpbmUgX19OUl9xdW90YWN0bAkJMTMxCisjZGVmaW5lIF9fTlJfZ2V0cGdpZAkJMTMyCisjZGVmaW5lIF9fTlJfZmNoZGlyCQkxMzMKKyNkZWZpbmUgX19OUl9iZGZsdXNoCQkxMzQKKyNkZWZpbmUgX19OUl9zeXNmcwkJMTM1CisjZGVmaW5lIF9fTlJfcGVyc29uYWxpdHkJMTM2CisjZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwJMTM3IC8qIFN5c2NhbGwgZm9yIEFuZHJldyBGaWxlIFN5c3RlbSAqLworI2RlZmluZSBfX05SX3NldGZzdWlkCQkxMzgKKyNkZWZpbmUgX19OUl9zZXRmc2dpZAkJMTM5CisjZGVmaW5lIF9fTlJfX2xsc2VlawkJMTQwCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHMJCTE0MQorI2RlZmluZSBfX05SX19uZXdzZWxlY3QJCTE0MgorI2RlZmluZSBfX05SX2Zsb2NrCQkxNDMKKyNkZWZpbmUgX19OUl9tc3luYwkJMTQ0CisjZGVmaW5lIF9fTlJfcmVhZHYJCTE0NQorI2RlZmluZSBfX05SX3dyaXRldgkJMTQ2CisjZGVmaW5lIF9fTlJfZ2V0c2lkCQkxNDcKKyNkZWZpbmUgX19OUl9mZGF0YXN5bmMJCTE0OAorI2RlZmluZSBfX05SX19zeXNjdGwJCTE0OQorI2RlZmluZSBfX05SX21sb2NrCQkxNTAKKyNkZWZpbmUgX19OUl9tdW5sb2NrCQkxNTEKKyNkZWZpbmUgX19OUl9tbG9ja2FsbAkJMTUyCisjZGVmaW5lIF9fTlJfbXVubG9ja2FsbAkJMTUzCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0JCTE1NAorI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtCQkxNTUKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIJCTE1NgorI2RlZmluZSBfX05SX3NjaGVkX2dldHNjaGVkdWxlcgkJMTU3CisjZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQJCTE1OAorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgJMTU5CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgkxNjAKKyNkZWZpbmUgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwJMTYxCisjZGVmaW5lIF9fTlJfbmFub3NsZWVwCQkxNjIKKyNkZWZpbmUgX19OUl9tcmVtYXAJCTE2MworI2RlZmluZSBfX05SX3NldHJlc3VpZAkJMTY0CisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkCQkxNjUKKyNkZWZpbmUgX19OUl9nZXRwYWdlc2l6ZQkxNjYKKyNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUJMTY3CisjZGVmaW5lIF9fTlJfcG9sbAkJMTY4CisjZGVmaW5lIF9fTlJfbmZzc2VydmN0bAkJMTY5CisjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkCQkxNzAKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQJCTE3MQorI2RlZmluZSBfX05SX3ByY3RsCQkxNzIKKyNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4JMTczCisjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uCTE3NAorI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrCTE3NQorI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcJMTc2CisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0CTE3NworI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbwkxNzgKKyNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kCTE3OQorI2RlZmluZSBfX05SX3ByZWFkNjQJCTE4MAorI2RlZmluZSBfX05SX3B3cml0ZTY0CQkxODEKKyNkZWZpbmUgX19OUl9sY2hvd24JCTE4MgorI2RlZmluZSBfX05SX2dldGN3ZAkJMTgzCisjZGVmaW5lIF9fTlJfY2FwZ2V0CQkxODQKKyNkZWZpbmUgX19OUl9jYXBzZXQJCTE4NQorI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCTE4NgorI2RlZmluZSBfX05SX3NlbmRmaWxlCQkxODcKKyNkZWZpbmUgX19OUl9nZXRwbXNnCQkxODgJLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBzdHJlYW1zICovCisjZGVmaW5lIF9fTlJfcHV0cG1zZwkJMTg5CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworI2RlZmluZSBfX05SX3Zmb3JrCQkxOTAKKyNkZWZpbmUgX19OUl91Z2V0cmxpbWl0CQkxOTEKKyNkZWZpbmUgX19OUl9tbWFwMgkJMTkyCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGU2NAkJMTkzCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQJMTk0CisjZGVmaW5lIF9fTlJfc3RhdDY0CQkxOTUKKyNkZWZpbmUgX19OUl9sc3RhdDY0CQkxOTYKKyNkZWZpbmUgX19OUl9mc3RhdDY0CQkxOTcKKyNkZWZpbmUgX19OUl9jaG93bjMyCQkxOTgKKyNkZWZpbmUgX19OUl9nZXR1aWQzMgkJMTk5CisjZGVmaW5lIF9fTlJfZ2V0Z2lkMzIJCTIwMAorI2RlZmluZSBfX05SX2dldGV1aWQzMgkJMjAxCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZDMyCQkyMDIKKyNkZWZpbmUgX19OUl9zZXRyZXVpZDMyCQkyMDMKKyNkZWZpbmUgX19OUl9zZXRyZWdpZDMyCQkyMDQKKyNkZWZpbmUgX19OUl9nZXRncm91cHMzMgkyMDUKKyNkZWZpbmUgX19OUl9zZXRncm91cHMzMgkyMDYKKyNkZWZpbmUgX19OUl9mY2hvd24zMgkJMjA3CisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkMzIJMjA4CisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkMzIJMjA5CisjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkMzIJMjEwCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkMzIJMjExCisjZGVmaW5lIF9fTlJfbGNob3duMzIJCTIxMgorI2RlZmluZSBfX05SX3NldHVpZDMyCQkyMTMKKyNkZWZpbmUgX19OUl9zZXRnaWQzMgkJMjE0CisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMgkJMjE1CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMgkJMjE2CisjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdAkJMjE3CisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJMjIwCisjZGVmaW5lIF9fTlJfZ2V0dGlkCQkyMjEKKyNkZWZpbmUgX19OUl90a2lsbAkJMjIyCisjZGVmaW5lIF9fTlJfc2V0eGF0dHIJCTIyMworI2RlZmluZSBfX05SX2xzZXR4YXR0cgkJMjI0CisjZGVmaW5lIF9fTlJfZnNldHhhdHRyCQkyMjUKKyNkZWZpbmUgX19OUl9nZXR4YXR0cgkJMjI2CisjZGVmaW5lIF9fTlJfbGdldHhhdHRyCQkyMjcKKyNkZWZpbmUgX19OUl9mZ2V0eGF0dHIJCTIyOAorI2RlZmluZSBfX05SX2xpc3R4YXR0cgkJMjI5CisjZGVmaW5lIF9fTlJfbGxpc3R4YXR0cgkJMjMwCisjZGVmaW5lIF9fTlJfZmxpc3R4YXR0cgkJMjMxCisjZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIJMjMyCisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyCTIzMworI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0cgkyMzQKKyNkZWZpbmUgX19OUl9mdXRleAkJMjM1CisjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NAkJMjM2CisjZGVmaW5lIF9fTlJfbWluY29yZQkJMjM3CisjZGVmaW5lIF9fTlJfbWFkdmlzZQkJMjM4CisjZGVmaW5lIF9fTlJfZmNudGw2NAkJMjM5CisjZGVmaW5lIF9fTlJfcmVhZGFoZWFkCQkyNDAKKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJMjQxCisjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJMjQyCisjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCTI0MworI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjQ0CisjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkyNDUKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjQJCTI0NgorI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAJCTI0NworI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llCTI0OAorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZQkyNDkKKyNkZWZpbmUgX19OUl9lcG9sbF9jdGwJCTI1MAorI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQJCTI1MQorI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMJMjUyCisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzCTI1MworI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkyNTQKKyNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lCTI1NQorI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUJMjU2CisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkyNTcKKyNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUJMjU4CisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkyNTkKKyNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCTI2MAorI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkyNjEKKyNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJMjYyCisjZGVmaW5lIF9fTlJfc3RhdGZzNjQJCTI2MworI2RlZmluZSBfX05SX2ZzdGF0ZnM2NAkJMjY0CisjZGVmaW5lIF9fTlJfdGdraWxsCQkyNjUKKyNkZWZpbmUgX19OUl91dGltZXMJCTI2NgorI2RlZmluZSBfX05SX2ZhZHZpc2U2NF82NAkyNjcKKyNkZWZpbmUgX19OUl9tYmluZAkJMjY4CisjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeQkyNjkKKyNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5CTI3MAorI2RlZmluZSBfX05SX21xX29wZW4JCTI3MQorI2RlZmluZSBfX05SX21xX3VubGluawkJMjcyCisjZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kCTI3MworI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkyNzQKKyNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCTI3NQorI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJMjc2CisjZGVmaW5lIF9fTlJfd2FpdGlkCQkyNzcKKyNkZWZpbmUgX19OUl92c2VydmVyCQkyNzgKKyNkZWZpbmUgX19OUl9hZGRfa2V5CQkyNzkKKyNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODAKKyNkZWZpbmUgX19OUl9rZXljdGwJCTI4MQorCisjZGVmaW5lIE5SX3N5c2NhbGxzCQkyODIKKworLyogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC0xMjQ6IHNlZQorICAgPGFzbS1tNjhrL2Vycm5vLmg+ICovCisKKyNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpIFwKK2RvIHsgXAorCWlmICgodW5zaWduZWQgbG9uZykocmVzKSA+PSAodW5zaWduZWQgbG9uZykoLTEyNSkpIHsgXAorCS8qIGF2b2lkIHVzaW5nIHJlcyB3aGljaCBpcyBkZWNsYXJlZCB0byBiZSBpbiByZWdpc3RlciBkMDsgXAorCSAgIGVycm5vIG1pZ2h0IGV4cGFuZCB0byBhIGZ1bmN0aW9uIGNhbGwgYW5kIGNsb2JiZXIgaXQuICAqLyBcCisJCWludCBfX2VyciA9IC0ocmVzKTsgXAorCQllcnJubyA9IF9fZXJyOyBcCisJCXJlcyA9IC0xOyBcCisJfSBcCisJcmV0dXJuICh0eXBlKSAocmVzKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfc3lzY2FsbDAodHlwZSxuYW1lKSBcCit0eXBlIG5hbWUodm9pZCkgXAoreyBcCityZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNuYW1lOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisgICAgICAgICAgICAgICAgICAgICAgOiAiK2QiIChfX3JlcykgKTsgXAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMSh0eXBlLG5hbWUsYXR5cGUsYSkgXAordHlwZSBuYW1lKGF0eXBlIGEpIFwKK3sgXAorcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjbmFtZTsgXAorcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoIiVkMSIpID0gKGxvbmcpKGEpOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisJCSAgICAgIDogIitkIiAoX19yZXMpIFwKKwkJICAgICAgOiAiZCIgKF9fYSkgICk7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDIodHlwZSxuYW1lLGF0eXBlLGEsYnR5cGUsYikgXAordHlwZSBuYW1lKGF0eXBlIGEsYnR5cGUgYikgXAoreyBcCityZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNuYW1lOyBcCityZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKK3JlZ2lzdGVyIGxvbmcgX19iIF9fYXNtX18gKCIlZDIiKSA9IChsb25nKShiKTsgXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICAjMCIgXAorCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisgICAgICAgICAgICAgICAgICAgICAgOiAiZCIgKF9fYSksICJkIiAoX19iKSBcCisJCSAgICAgKTsgXAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsgXAorfQorCisjZGVmaW5lIF9zeXNjYWxsMyh0eXBlLG5hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMpIFwKK3R5cGUgbmFtZShhdHlwZSBhLGJ0eXBlIGIsY3R5cGUgYykgXAoreyBcCityZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNuYW1lOyBcCityZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKK3JlZ2lzdGVyIGxvbmcgX19iIF9fYXNtX18gKCIlZDIiKSA9IChsb25nKShiKTsgXAorcmVnaXN0ZXIgbG9uZyBfX2MgX19hc21fXyAoIiVkMyIpID0gKGxvbmcpKGMpOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisJCSAgICAgIDogIitkIiAoX19yZXMpIFwKKyAgICAgICAgICAgICAgICAgICAgICA6ICJkIiAoX19hKSwgImQiIChfX2IpLCBcCisJCQkiZCIgKF9fYykgXAorCQkgICAgICk7IFwKK19fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKK30KKworI2RlZmluZSBfc3lzY2FsbDQodHlwZSxuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQpIFwKK3R5cGUgbmFtZSAoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYywgZHR5cGUgZCkgXAoreyBcCityZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNuYW1lOyBcCityZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKK3JlZ2lzdGVyIGxvbmcgX19iIF9fYXNtX18gKCIlZDIiKSA9IChsb25nKShiKTsgXAorcmVnaXN0ZXIgbG9uZyBfX2MgX19hc21fXyAoIiVkMyIpID0gKGxvbmcpKGMpOyBcCityZWdpc3RlciBsb25nIF9fZCBfX2FzbV9fICgiJWQ0IikgPSAobG9uZykoZCk7IFwKK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAgIzAiIFwKKyAgICAgICAgICAgICAgICAgICAgICA6ICIrZCIgKF9fcmVzKSBcCisgICAgICAgICAgICAgICAgICAgICAgOiAiZCIgKF9fYSksICJkIiAoX19iKSwgXAorCQkJImQiIChfX2MpLCAiZCIgKF9fZCkgIFwKKwkJICAgICApOyBcCitfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCit9CisKKyNkZWZpbmUgX3N5c2NhbGw1KHR5cGUsbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkLGV0eXBlLGUpIFwKK3R5cGUgbmFtZSAoYXR5cGUgYSxidHlwZSBiLGN0eXBlIGMsZHR5cGUgZCxldHlwZSBlKSBcCit7IFwKK3JlZ2lzdGVyIGxvbmcgX19yZXMgX19hc21fXyAoIiVkMCIpID0gX19OUl8jI25hbWU7IFwKK3JlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCIlZDEiKSA9IChsb25nKShhKTsgXAorcmVnaXN0ZXIgbG9uZyBfX2IgX19hc21fXyAoIiVkMiIpID0gKGxvbmcpKGIpOyBcCityZWdpc3RlciBsb25nIF9fYyBfX2FzbV9fICgiJWQzIikgPSAobG9uZykoYyk7IFwKK3JlZ2lzdGVyIGxvbmcgX19kIF9fYXNtX18gKCIlZDQiKSA9IChsb25nKShkKTsgXAorcmVnaXN0ZXIgbG9uZyBfX2UgX19hc21fXyAoIiVkNSIpID0gKGxvbmcpKGUpOyBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisJCSAgICAgIDogIitkIiAoX19yZXMpIFwKKwkJICAgICAgOiAiZCIgKF9fYSksICJkIiAoX19iKSwgXAorCQkJImQiIChfX2MpLCAiZCIgKF9fZCksICJkIiAoX19lKSAgXAorICAgICAgICAgICAgICAgICAgICAgKTsgXAorX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsgXAorfQorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgorI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgorI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19XQUlUUElECisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTklDRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX0dFVFJMSU1JVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIHdlIG5lZWQgdGhpcyBpbmxpbmUgLSBmb3JraW5nIGZyb20ga2VybmVsIHNwYWNlIHdpbGwgcmVzdWx0CisgKiBpbiBOTyBDT1BZIE9OIFdSSVRFICghISEpLCB1bnRpbCBhbiBleGVjdmUgaXMgZXhlY3V0ZWQuIFRoaXMKKyAqIGlzIG5vIHByb2JsZW0sIGJ1dCBmb3IgdGhlIHN0YWNrLiBUaGlzIGlzIGhhbmRsZWQgYnkgbm90IGxldHRpbmcKKyAqIG1haW4oKSB1c2UgdGhlIHN0YWNrIGF0IGFsbCBhZnRlciBmb3JrKCkuIFRodXMsIG5vIGZ1bmN0aW9uCisgKiBjYWxscyAtIHdoaWNoIG1lYW5zIGlubGluZSBjb2RlIGZvciBmb3JrIHRvbywgYXMgb3RoZXJ3aXNlIHdlCisgKiB3b3VsZCB1c2UgdGhlIHN0YWNrIHVwb24gZXhpdCBmcm9tICdmb3JrKCknLgorICoKKyAqIEFjdHVhbGx5IG9ubHkgcGF1c2UgYW5kIGZvcmsgYXJlIG5lZWRlZCBpbmxpbmUsIHNvIHRoYXQgdGhlcmUKKyAqIHdvbid0IGJlIGFueSBtZXNzaW5nIHdpdGggdGhlIHN0YWNrIGZyb20gbWFpbigpLCBidXQgd2UgZGVmaW5lCisgKiBzb21lIG90aGVycyB0b28uCisgKi8KKyNkZWZpbmUgX19OUl9fZXhpdCBfX05SX2V4aXQKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwwKHBpZF90LHNldHNpZCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCx3cml0ZSxpbnQsZmQsY29uc3QgY2hhciAqLGJ1ZixvZmZfdCxjb3VudCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCxyZWFkLGludCxmZCxjaGFyICosYnVmLG9mZl90LGNvdW50KQorc3RhdGljIGlubGluZSBfc3lzY2FsbDMob2ZmX3QsbHNlZWssaW50LGZkLG9mZl90LG9mZnNldCxpbnQsY291bnQpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMShpbnQsZHVwLGludCxmZCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCxleGVjdmUsY29uc3QgY2hhciAqLGZpbGUsY2hhciAqKixhcmd2LGNoYXIgKiosZW52cCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCxvcGVuLGNvbnN0IGNoYXIgKixmaWxlLGludCxmbGFnLGludCxtb2RlKQorc3RhdGljIGlubGluZSBfc3lzY2FsbDEoaW50LGNsb3NlLGludCxmZCkKK3N0YXRpYyBpbmxpbmUgX3N5c2NhbGwxKGludCxfZXhpdCxpbnQsZXhpdGNvZGUpCitzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhwaWRfdCx3YWl0cGlkLHBpZF90LHBpZCxpbnQgKix3YWl0X3N0YXQsaW50LG9wdGlvbnMpCisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbW1hcDIoCisJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZik7Cithc21saW5rYWdlIGludCBzeXNfZXhlY3ZlKGNoYXIgKm5hbWUsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52cCk7Cithc21saW5rYWdlIGludCBzeXNfcGlwZSh1bnNpZ25lZCBsb25nICpmaWxkZXMpOworYXNtbGlua2FnZSBpbnQgc3lzX3B0cmFjZShsb25nIHJlcXVlc3QsIGxvbmcgcGlkLCBsb25nIGFkZHIsIGxvbmcgZGF0YSk7CitzdHJ1Y3QgcHRfcmVnczsKK3N0cnVjdCBzaWdhY3Rpb247Cithc21saW5rYWdlIGxvbmcgc3lzX3J0X3NpZ2FjdGlvbihpbnQgc2lnLAorCQkJCWNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICphY3QsCisJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCisJCQkJc2l6ZV90IHNpZ3NldHNpemUpOworCisjZW5kaWYKKworLyoKKyAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKKyAqCisgKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAorICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCisgKi8KKyNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQorCisjZW5kaWYgLyogX0FTTV9NNjhLX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay91c2VyLmggYi9pbmNsdWRlL2FzbS1tNjhrL3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGQ1YTY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay91c2VyLmgKQEAgLTAsMCArMSw4OSBAQAorI2lmbmRlZiBfTTY4S19VU0VSX0gKKyNkZWZpbmUgX002OEtfVVNFUl9ICisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKiBDb3JlIGZpbGUgZm9ybWF0OiBUaGUgY29yZSBmaWxlIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGdkYgorICAgY2FuIHVuZGVyc3RhbmQgaXQgYW5kIHByb3ZpZGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyICh1bmRlcgorICAgbGludXggd2UgdXNlIHRoZSAndHJhZC1jb3JlJyBiZmQpLiAgVGhlcmUgYXJlIHF1aXRlIGEgbnVtYmVyIG9mCisgICBvYnN0YWNsZXMgdG8gYmVpbmcgYWJsZSB0byB2aWV3IHRoZSBjb250ZW50cyBvZiB0aGUgZmxvYXRpbmcgcG9pbnQKKyAgIHJlZ2lzdGVycywgYW5kIHVudGlsIHRoZXNlIGFyZSBzb2x2ZWQgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gdmlldyB0aGUKKyAgIGNvbnRlbnRzIG9mIHRoZW0uICBBY3R1YWxseSwgeW91IGNhbiByZWFkIGluIHRoZSBjb3JlIGZpbGUgYW5kIGxvb2sgYXQKKyAgIHRoZSBjb250ZW50cyBvZiB0aGUgdXNlciBzdHJ1Y3QgdG8gZmluZCBvdXQgd2hhdCB0aGUgZmxvYXRpbmcgcG9pbnQKKyAgIHJlZ2lzdGVycyBjb250YWluLgorICAgVGhlIGFjdHVhbCBmaWxlIGNvbnRlbnRzIGFyZSBhcyBmb2xsb3dzOgorICAgVVBBR0U6IDEgcGFnZSBjb25zaXN0aW5nIG9mIGEgdXNlciBzdHJ1Y3QgdGhhdCB0ZWxscyBnZGIgd2hhdCBpcyBwcmVzZW50CisgICBpbiB0aGUgZmlsZS4gIERpcmVjdGx5IGFmdGVyIHRoaXMgaXMgYSBjb3B5IG9mIHRoZSB0YXNrX3N0cnVjdCwgd2hpY2gKKyAgIGlzIGN1cnJlbnRseSBub3QgdXNlZCBieSBnZGIsIGJ1dCBpdCBtYXkgY29tZSBpbiB1c2VmdWwgYXQgc29tZSBwb2ludC4KKyAgIEFsbCBvZiB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdXBhZ2UuICBUaGUgdXBhZ2Ugc2hvdWxkCisgICBhbHdheXMgYmUgb25seSBvbmUgcGFnZS4KKyAgIERBVEE6IFRoZSBkYXRhIGFyZWEgaXMgc3RvcmVkLiAgV2UgdXNlIGN1cnJlbnQtPmVuZF90ZXh0IHRvCisgICBjdXJyZW50LT5icmsgdG8gcGljayB1cCBhbGwgb2YgdGhlIHVzZXIgdmFyaWFibGVzLCBwbHVzIGFueSBtZW1vcnkKKyAgIHRoYXQgbWF5IGhhdmUgYmVlbiBtYWxsb2NlZC4gIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBkZXRlcm1pbmUgaWYgYSBwYWdlCisgICBpcyBkZW1hbmQtemVybyBvciBpZiBhIHBhZ2UgaXMgdG90YWxseSB1bnVzZWQsIHdlIGp1c3QgY292ZXIgdGhlIGVudGlyZQorICAgcmFuZ2UuICBBbGwgb2YgdGhlIGFkZHJlc3NlcyBhcmUgcm91bmRlZCBpbiBzdWNoIGEgd2F5IHRoYXQgYW4gaW50ZWdyYWwKKyAgIG51bWJlciBvZiBwYWdlcyBpcyB3cml0dGVuLgorICAgU1RBQ0s6IFdlIG5lZWQgdGhlIHN0YWNrIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGdldCBhIG1lYW5pbmdmdWwKKyAgIGJhY2t0cmFjZS4gIFdlIG5lZWQgdG8gd3JpdGUgdGhlIGRhdGEgZnJvbSAoZXNwKSB0bworICAgY3VycmVudC0+c3RhcnRfc3RhY2ssIHNvIHdlIHJvdW5kIGVhY2ggb2YgdGhlc2Ugb2ZmIGluIG9yZGVyIHRvIGJlIGFibGUKKyAgIHRvIHdyaXRlIGFuIGludGVnZXIgbnVtYmVyIG9mIHBhZ2VzLgorICAgVGhlIG1pbmltdW0gY29yZSBmaWxlIHNpemUgaXMgMyBwYWdlcywgb3IgMTIyODggYnl0ZXMuCisqLworCitzdHJ1Y3QgdXNlcl9tNjhrZnBfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nICBmcHJlZ3NbOCozXTsJLyogZnAwLWZwNyByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBsb25nICBmcGNudGxbM107CS8qIGZwIGNvbnRyb2wgcmVncyAqLworfTsKKworLyogVGhpcyBpcyB0aGUgb2xkIGxheW91dCBvZiAic3RydWN0IHB0X3JlZ3MiIGFzIG9mIExpbnV4IDEueCwgYW5kCisgICBpcyBzdGlsbCB0aGUgbGF5b3V0IHVzZWQgYnkgdXNlciAodGhlIG5ldyBwdF9yZWdzIGRvZXNuJ3QgaGF2ZQorICAgYWxsIHJlZ2lzdGVycykuICovCitzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCB7CisJbG9uZyBkMSxkMixkMyxkNCxkNSxkNixkNzsKKwlsb25nIGEwLGExLGEyLGEzLGE0LGE1LGE2OworCWxvbmcgZDA7CisJbG9uZyB1c3A7CisJbG9uZyBvcmlnX2QwOworCXNob3J0IHN0a2FkajsKKwlzaG9ydCBzcjsKKwlsb25nIHBjOworCXNob3J0IGZtdHZlYzsKKwlzaG9ydCBfX2ZpbGw7Cit9OworCisKKy8qIFdoZW4gdGhlIGtlcm5lbCBkdW1wcyBjb3JlLCBpdCBzdGFydHMgYnkgZHVtcGluZyB0aGUgdXNlciBzdHJ1Y3QgLQorICAgdGhpcyB3aWxsIGJlIHVzZWQgYnkgZ2RiIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGRhdGEgYW5kIHN0YWNrIHNlZ21lbnRzCisgICBhcmUgd2l0aGluIHRoZSBmaWxlLCBhbmQgd2hhdCB2aXJ0dWFsIGFkZHJlc3NlcyB0byB1c2UuICovCitzdHJ1Y3QgdXNlcnsKKy8qIFdlIHN0YXJ0IHdpdGggdGhlIHJlZ2lzdGVycywgdG8gbWltaWMgdGhlIHdheSB0aGF0ICJtZW1vcnkiIGlzIHJldHVybmVkCisgICBmcm9tIHRoZSBwdHJhY2UoMywuLi4pIGZ1bmN0aW9uLiAgKi8KKyAgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgcmVnczsJLyogV2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWN0dWFsbHkgc3RvcmVkICovCisvKiBwdHJhY2UgZG9lcyBub3QgeWV0IHN1cHBseSB0aGVzZS4gIFNvbWVkYXkuLi4uICovCisgIGludCB1X2ZwdmFsaWQ7CQkvKiBUcnVlIGlmIG1hdGggY28tcHJvY2Vzc29yIGJlaW5nIHVzZWQuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciB0aGlzIG1lc3MuIE5vdCB5ZXQgdXNlZC4gKi8KKyAgc3RydWN0IHVzZXJfbTY4a2ZwX3N0cnVjdCBtNjhrZnA7IC8qIE1hdGggQ28tcHJvY2Vzc29yIHJlZ2lzdGVycy4gKi8KKy8qIFRoZSByZXN0IG9mIHRoaXMganVuayBpcyB0byBoZWxwIGdkYiBmaWd1cmUgb3V0IHdoYXQgZ29lcyB3aGVyZSAqLworICB1bnNpZ25lZCBsb25nIGludCB1X3RzaXplOwkvKiBUZXh0IHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworICB1bnNpZ25lZCBsb25nIGludCB1X2RzaXplOwkvKiBEYXRhIHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLworICB1bnNpZ25lZCBsb25nIGludCB1X3NzaXplOwkvKiBTdGFjayBzZWdtZW50IHNpemUgKHBhZ2VzKS4gKi8KKyAgdW5zaWduZWQgbG9uZyBzdGFydF9jb2RlOyAgICAgLyogU3RhcnRpbmcgdmlydHVhbCBhZGRyZXNzIG9mIHRleHQuICovCisgIHVuc2lnbmVkIGxvbmcgc3RhcnRfc3RhY2s7CS8qIFN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyBvZiBzdGFjayBhcmVhLgorCQkJCSAgIFRoaXMgaXMgYWN0dWFsbHkgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCisJCQkJICAgdGhlIHRvcCBvZiB0aGUgc3RhY2sgaXMgYWx3YXlzIGZvdW5kIGluIHRoZQorCQkJCSAgIGVzcCByZWdpc3Rlci4gICovCisgIGxvbmcgaW50IHNpZ25hbDsJCS8qIFNpZ25hbCB0aGF0IGNhdXNlZCB0aGUgY29yZSBkdW1wLiAqLworICBpbnQgcmVzZXJ2ZWQ7CQkJLyogTm8gbG9uZ2VyIHVzZWQgKi8KKyAgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgKnVfYXIwOworCQkJCS8qIFVzZWQgYnkgZ2RiIHRvIGhlbHAgZmluZCB0aGUgdmFsdWVzIGZvciAqLworCQkJCS8qIHRoZSByZWdpc3RlcnMuICovCisgIHN0cnVjdCB1c2VyX202OGtmcF9zdHJ1Y3QqIHVfZnBzdGF0ZTsJLyogTWF0aCBDby1wcm9jZXNzb3IgcG9pbnRlci4gKi8KKyAgdW5zaWduZWQgbG9uZyBtYWdpYzsJCS8qIFRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgY29yZSBmaWxlICovCisgIGNoYXIgdV9jb21tWzMyXTsJCS8qIFVzZXIgY29tbWFuZCB0aGF0IHdhcyByZXNwb25zaWJsZSAqLworfTsKKyNkZWZpbmUgTkJQRyBQQUdFX1NJWkUKKyNkZWZpbmUgVVBBR0VTIDEKKyNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIgKHUuc3RhcnRfY29kZSkKKyNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUiAodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay92aXJ0Y29udmVydC5oIGIvaW5jbHVkZS9hc20tbTY4ay92aXJ0Y29udmVydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNGU4MDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3ZpcnRjb252ZXJ0LmgKQEAgLTAsMCArMSw3NiBAQAorI2lmbmRlZiBfX1ZJUlRfQ09OVkVSVF9fCisjZGVmaW5lIF9fVklSVF9DT05WRVJUX18KKworLyoKKyAqIE1hY3JvcyB1c2VkIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gdmlydHVhbCBhbmQgcGh5c2ljYWwgbWFwcGluZ3MuCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2lmZGVmIENPTkZJR19BTUlHQQorI2luY2x1ZGUgPGFzbS9hbWlnYWh3Lmg+CisjZW5kaWYKKworLyoKKyAqIENoYW5nZSB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIHZ2LgorICovCisjaWZuZGVmIENPTkZJR19TVU4zCitleHRlcm4gdW5zaWduZWQgbG9uZyBtbV92dG9wKHVuc2lnbmVkIGxvbmcgYWRkcikgX19hdHRyaWJ1dGVfY29uc3RfXzsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1tX3B0b3YodW5zaWduZWQgbG9uZyBhZGRyKSBfX2F0dHJpYnV0ZV9jb25zdF9fOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbV92dG9wKHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJcmV0dXJuIF9fcGEodmFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fcHRvdih1bnNpZ25lZCBsb25nIHBhZGRyKQoreworCXJldHVybiAodW5zaWduZWQgbG9uZylfX3ZhKHBhZGRyKTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NJTkdMRV9NRU1PUllfQ0hVTksKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9pZCAqdmFkZHIpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKXZhZGRyIC0gUEFHRV9PRkZTRVQgKyBtNjhrX21lbW9yeVswXS5hZGRyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKiBwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBwYWRkcikKK3sKKwlyZXR1cm4gKHZvaWQgKikocGFkZHIgLSBtNjhrX21lbW9yeVswXS5hZGRyICsgUEFHRV9PRkZTRVQpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9pZCAqYWRkcmVzcykKK3sKKwlyZXR1cm4gbW1fdnRvcCgodW5zaWduZWQgbG9uZylhZGRyZXNzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAodm9pZCAqKSBtbV9wdG92KGFkZHJlc3MpOworfQorI2VuZGlmCisKKy8qIFBlcm1hbmVudCBhZGRyZXNzIG9mIGEgcGFnZS4gKi8KKyNkZWZpbmUgX19wYWdlX2FkZHJlc3MocGFnZSkJKFBBR0VfT0ZGU0VUICsgKCgocGFnZSkgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKSkKKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCXZpcnRfdG9fcGh5cygodm9pZCAqKV9fcGFnZV9hZGRyZXNzKHBhZ2UpKQorCisvKgorICogSU8gYnVzIG1lbW9yeSBhZGRyZXNzZXMgYXJlIDE6MSB3aXRoIHRoZSBwaHlzaWNhbCBhZGRyZXNzLAorICogZXhjZXB0IG9uIHRoZSBQQ0kgYnVzIG9mIHRoZSBIYWRlcy4KKyAqLworI2lmZGVmIENPTkZJR19IQURFUworI2RlZmluZSB2aXJ0X3RvX2J1cyhhKSAodmlydF90b19waHlzKGEpICsgKE1BQ0hfSVNfSEFERVMgPyAweDgwMDAwMDAwIDogMCkpCisjZGVmaW5lIGJ1c190b192aXJ0KGEpIChwaHlzX3RvX3ZpcnQoKGEpIC0gKE1BQ0hfSVNfSEFERVMgPyAweDgwMDAwMDAwIDogMCkpKQorI2Vsc2UKKyNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19waHlzCisjZGVmaW5lIGJ1c190b192aXJ0IHBoeXNfdG9fdmlydAorI2VuZGlmCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3Z1aWRfZXZlbnQuaCBiL2luY2x1ZGUvYXNtLW02OGsvdnVpZF9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZWNiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3Z1aWRfZXZlbnQuaApAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgX002OEtfVlVJRF9FVkVOVF9ICisjZGVmaW5lIF9NNjhLX1ZVSURfRVZFTlRfSAorI2luY2x1ZGUgPGFzbS1zcGFyYy92dWlkX2V2ZW50Lmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsveG9yLmggYi9pbmNsdWRlL2FzbS1tNjhrL3hvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MmViMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3hvci5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy94b3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvem9ycm8uaCBiL2luY2x1ZGUvYXNtLW02OGsvem9ycm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjgxNjU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay96b3Jyby5oCkBAIC0wLDAgKzEsNDUgQEAKKyNpZm5kZWYgX0FTTV9NNjhLX1pPUlJPX0gKKyNkZWZpbmUgX0FTTV9NNjhLX1pPUlJPX0gKKworI2luY2x1ZGUgPGFzbS9yYXdfaW8uaD4KKworI2RlZmluZSB6X3JlYWRiIHJhd19pbmIKKyNkZWZpbmUgel9yZWFkdyByYXdfaW53CisjZGVmaW5lIHpfcmVhZGwgcmF3X2lubAorCisjZGVmaW5lIHpfd3JpdGViIHJhd19vdXRiCisjZGVmaW5lIHpfd3JpdGV3IHJhd19vdXR3CisjZGVmaW5lIHpfd3JpdGVsIHJhd19vdXRsCisKKyNkZWZpbmUgel9tZW1zZXRfaW8oYSxiLGMpCW1lbXNldCgodm9pZCAqKShhKSwoYiksKGMpKQorI2RlZmluZSB6X21lbWNweV9mcm9taW8oYSxiLGMpCW1lbWNweSgoYSksKHZvaWQgKikoYiksKGMpKQorI2RlZmluZSB6X21lbWNweV90b2lvKGEsYixjKQltZW1jcHkoKHZvaWQgKikoYSksKGIpLChjKSkKKworc3RhdGljIGlubGluZSB2b2lkICp6X3JlbWFwX25vY2FjaGVfc2VyKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsCisJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9OT0NBQ0hFX1NFUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqel9yZW1hcF9ub2NhY2hlX25vbnNlcih1bnNpZ25lZCBsb25nIHBoeXNhZGRyLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfTk9DQUNIRV9OT05TRVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnpfcmVtYXBfd3JpdGV0aHJvdWdoKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsCisJCQkJCSB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfV1JJVEVUSFJPVUdIKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCAqel9yZW1hcF9mdWxsY2FjaGUodW5zaWduZWQgbG9uZyBwaHlzYWRkciwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfRlVMTF9DQUNISU5HKTsKK30KKworI2RlZmluZSB6X3VubWFwIGlvdW5tYXAKKyNkZWZpbmUgel9pb3VubWFwIGlvdW5tYXAKKyNkZWZpbmUgel9pb3JlbWFwIHpfcmVtYXBfbm9jYWNoZV9zZXIKKworI2VuZGlmIC8qIF9BU01fTTY4S19aT1JST19IICovCg==