ZGlmZiAtLWdpdCBhL3NyYy9jaGFyc2V0LmMgYi9zcmMvY2hhcnNldC5jCmluZGV4IGM3Njk0ODYuLjE5ZjIwMmEgMTAwNjQ0Ci0tLSBhL3NyYy9jaGFyc2V0LmMKKysrIGIvc3JjL2NoYXJzZXQuYwpAQCAtMTU0Miw5ICsxNTQyLDkgQEAKICNkZWZpbmUgTEFUSU4xVVBQRVIgJ1UnCiAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdJV8nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/ICovCi1zdGF0aWMgY2hhcl91IGxhdGluMWZsYWdzWzI1Nl0gPSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVSAgICAgIGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUgVVVVVVVVVWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbCBsbGxsbGxsbCI7Ci1zdGF0aWMgY2hhcl91IGxhdGluMXVwcGVyWzI1Nl0gPSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e38DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW99jZ2tvc3d7/IjsKLXN0YXRpYyBjaGFyX3UgbGF0aW4xbG93ZXJbMjU2XSA9ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX21/j5+vv8/f7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8iOworc3RhdGljIGNoYXJfdSBsYXRpbjFmbGFnc1syNTddID0gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUgICAgICBsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVIFVVVVVVVVVsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGwgbGxsbGxsbGwiOworc3RhdGljIGNoYXJfdSBsYXRpbjF1cHBlclsyNTddID0gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlae3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/AwcLDxMXGx8jJysvMzc7P0NHS09TV1vfY2drb3N3e/yI7CitzdGF0aWMgY2hhcl91IGxhdGluMWxvd2VyWzI1N10gPSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19tf4+fr7/P3+3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/IjsKIAogICAgIGludAogdmltX2lzbG93ZXIoYykKZGlmZiAtLWdpdCBhL3NyYy9lZGl0LmMgYi9zcmMvZWRpdC5jCmluZGV4IDk2ZWJlNzEuLmIzMTE3N2MgMTAwNjQ0Ci0tLSBhL3NyYy9lZGl0LmMKKysrIGIvc3JjL2VkaXQuYwpAQCAtMTM3LDYgKzEzNyw3IEBACiAjaWZkZWYgRkVBVF9TWU5fSEwKIHN0YXRpYyB2b2lkIGNoZWNrX3NwZWxsX3JlZHJhdyBfX0FSR1MoKHZvaWQpKTsKIHN0YXRpYyB2b2lkIHNwZWxsX2JhY2tfdG9fYmFkd29yZCBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQgIHNwZWxsX2JhZF9sZW4gPSAwOwkvKiBsZW5ndGggb2YgbG9jYXRlZCBiYWQgd29yZCAqLwogI2VuZGlmCiBzdGF0aWMgdm9pZCBzdG9wX2luc2VydCBfX0FSR1MoKHBvc19UICplbmRfaW5zZXJ0X3BvcywgaW50IGVzYykpOwogc3RhdGljIGludCAgZWNoZWNrX2FiYnIgX19BUkdTKChpbnQpKTsKQEAgLTM1MzYsOCArMzUzNywxMSBAQAogCWVsc2UgaWYgKGN0cmxfeF9tb2RlID09IENUUkxfWF9TUEVMTCkKIAl7CiAjaWZkZWYgRkVBVF9TWU5fSEwKLQkgICAgY29tcGxfY29sID0gc3BlbGxfd29yZF9zdGFydChzdGFydGNvbCk7Ci0JICAgIGlmIChjb21wbF9jb2wgPT0gKGNvbG5yX1Qpc3RhcnRjb2wpCisJICAgIGlmIChzcGVsbF9iYWRfbGVuID4gMCkKKwkJY29tcGxfY29sID0gY3Vyc19jb2wgLSBzcGVsbF9iYWRfbGVuOworCSAgICBlbHNlCisJCWNvbXBsX2NvbCA9IHNwZWxsX3dvcmRfc3RhcnQoc3RhcnRjb2wpOworCSAgICBpZiAoY29tcGxfY29sID49IChjb2xucl9UKXN0YXJ0Y29sKQogCQlyZXR1cm4gRkFJTDsKIAkgICAgY29tcGxfbGVuZ3RoID0gKGludCljdXJzX2NvbCAtIGNvbXBsX2NvbDsKIAkgICAgY29tcGxfcGF0dGVybiA9IHZpbV9zdHJuc2F2ZShsaW5lICsgY29tcGxfY29sLCBjb21wbF9sZW5ndGgpOwpAQCAtNDgwNiw3ICs0ODEwLDcgQEAKIHsKICAgICBwb3NfVAl0cG9zID0gY3Vyd2luLT53X2N1cnNvcjsKIAotICAgIHNwZWxsX21vdmVfdG8oQkFDS1dBUkQsIFRSVUUsIFRSVUUpOworICAgIHNwZWxsX2JhZF9sZW4gPSBzcGVsbF9tb3ZlX3RvKEJBQ0tXQVJELCBUUlVFLCBUUlVFKTsKICAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wgIT0gdHBvcy5jb2wpCiAJc3RhcnRfYXJyb3coJnRwb3MpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2V2YWwuYyBiL3NyYy9ldmFsLmMKaW5kZXggYTdmYzZiMy4uYzkzNDU1MyAxMDA2NDQKLS0tIGEvc3JjL2V2YWwuYworKysgYi9zcmMvZXZhbC5jCkBAIC0xMzc0OSwyMiArMTM3NDksMTYgQEAKICAgICB0eXB2YWxfVAkqYXJndmFyczsKICAgICB0eXB2YWxfVAkqcmV0dHY7CiB7Ci0gICAgaW50CQlhdHRyOwotICAgIGNoYXJfdQkqcHRyOwogICAgIGludAkJbGVuOwogCiAgICAgcmV0dHYtPnZ2YWwudl9zdHJpbmcgPSBOVUxMOwogICAgIHJldHR2LT52X3R5cGUgPSBWQVJfU1RSSU5HOwogCiAjaWZkZWYgRkVBVF9TWU5fSEwKLSAgICAvKiBGaW5kIHRoZSBzdGFydCBvZiB0aGUgYmFkbHkgc3BlbGxlZCB3b3JkLiAqLwotICAgIGlmIChzcGVsbF9tb3ZlX3RvKEZPUldBUkQsIFRSVUUsIFRSVUUpID09IEZBSUwpCi0JcmV0dXJuOwotCi0gICAgLyogR2V0IHRoZSBsZW5ndGggb2YgdGhlIHdvcmQgYW5kIGNvcHkgaXQuICovCi0gICAgcHRyID0gbWxfZ2V0X2N1cnNvcigpOwotICAgIGxlbiA9IHNwZWxsX2NoZWNrKGN1cndpbiwgcHRyLCAmYXR0ciwgTlVMTCk7Ci0gICAgcmV0dHYtPnZ2YWwudl9zdHJpbmcgPSB2aW1fc3RybnNhdmUocHRyLCBsZW4pOworICAgIC8qIEZpbmQgdGhlIHN0YXJ0IGFuZCBsZW5ndGggb2YgdGhlIGJhZGx5IHNwZWxsZWQgd29yZC4gKi8KKyAgICBsZW4gPSBzcGVsbF9tb3ZlX3RvKEZPUldBUkQsIFRSVUUsIFRSVUUpOworICAgIGlmIChsZW4gIT0gMCkKKwlyZXR0di0+dnZhbC52X3N0cmluZyA9IHZpbV9zdHJuc2F2ZShtbF9nZXRfY3Vyc29yKCksIGxlbik7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2d1aV9ndGtfeDExLmMgYi9zcmMvZ3VpX2d0a194MTEuYwppbmRleCBkYTY4MGQwLi4xNTAyZTBjIDEwMDY0NAotLS0gYS9zcmMvZ3VpX2d0a194MTEuYworKysgYi9zcmMvZ3VpX2d0a194MTEuYwpAQCAtNTMyOCw2ICs1MzI4LDkgQEAKIAlpbnQJCWNsdXN0ZXJfd2lkdGg7CiAJaW50CQlsYXN0X2dseXBoX3JiZWFyaW5nOwogCWludAkJY2VsbHMgPSAwOyAgLyogY2VsbHMgb2NjdXBpZWQgYnkgY3VycmVudCBjbHVzdGVyICovCisjaWYgMAorCWludAkJbW9ub3NwYWNlMTMgPSBTVFJJQ01QKHBfZ3VpZm9udCwgIm1vbm9zcGFjZSAxMyIpID09IDA7CisjZW5kaWYKIAogCS8qIFNhZmV0eSBjaGVjazogcGFuZ28gY3Jhc2hlcyB3aGVuIGludm9rZWQgd2l0aCBpbnZhbGlkIHV0Zi04CiAJICogY2hhcmFjdGVycy4gKi8KQEAgLTU0NDYsMTAgKzU0NDksMTcgQEAKIAkJICAgICAqIGNoYXJhY3RlcnMgdGhlIGNhbm9uaWNhbCB3YXkuICBUaGF0IGlzLCBzZXR0aW5nIHRoZQogCQkgICAgICogd2lkdGggb2YgdGhlIHByZXZpb3VzIGdseXBoIHRvIDAuICovCiAJCSAgICBnbHlwaHMtPmdseXBoc1tpIC0gMV0uZ2VvbWV0cnkud2lkdGggPSAwOwotCiAJCSAgICB3aWR0aCA9IGNlbGxzICogZ3VpLmNoYXJfd2lkdGggKiBQQU5HT19TQ0FMRTsKIAkJICAgIGdseXBoLT5nZW9tZXRyeS54X29mZnNldCArPQogCQkJCQkgICAgTUFYKDAsIHdpZHRoIC0gY2x1c3Rlcl93aWR0aCkgLyAyOworI2lmIDAKKwkJICAgIC8qIERpcnR5IGhhY2s6IGZvciAibW9ub3NwYWNlIDEzIiBmb250IHRoZXJlIGlzIGEgYnVnIHRoYXQKKwkJICAgICAqIGRyYXdzIGNvbXBvc2luZyBjaGFycyBpbiB0aGUgd3JvbmcgcG9zaXRpb24uICBBZGQKKwkJICAgICAqICJ3aWR0aCIgdG8gdGhlIG9mZnNldCB0byB3b3JrIGFyb3VuZCB0aGF0LiAqLworCQkgICAgaWYgKG1vbm9zcGFjZTEzKQorCQkJZ2x5cGgtPmdlb21ldHJ5Lnhfb2Zmc2V0ID0gd2lkdGg7CisjZW5kaWYKKwogCQkgICAgZ2x5cGgtPmdlb21ldHJ5LndpZHRoID0gd2lkdGg7CiAJCX0KIAkJZWxzZSAvKiBpID09IDAgImNhbm5vdCBoYXBwZW4iICovCmRpZmYgLS1naXQgYS9zcmMvdmVyc2lvbi5oIGIvc3JjL3ZlcnNpb24uaAppbmRleCA4YzY0NjVlLi5mMWNlMDJiIDEwMDY0NAotLS0gYS9zcmMvdmVyc2lvbi5oCisrKyBiL3NyYy92ZXJzaW9uLmgKQEAgLTM2LDUgKzM2LDUgQEAKICNkZWZpbmUgVklNX1ZFUlNJT05fTk9ET1QJInZpbTcwYWEiCiAjZGVmaW5lIFZJTV9WRVJTSU9OX1NIT1JUCSI3LjBhYSIKICNkZWZpbmUgVklNX1ZFUlNJT05fTUVESVVNCSI3LjBhYSBBTFBIQSIKLSNkZWZpbmUgVklNX1ZFUlNJT05fTE9ORwkiVklNIC0gVmkgSU1wcm92ZWQgNy4wYWEgQUxQSEEgKDIwMDUgQXVnIDI0KSIKLSNkZWZpbmUgVklNX1ZFUlNJT05fTE9OR19EQVRFCSJWSU0gLSBWaSBJTXByb3ZlZCA3LjBhYSBBTFBIQSAoMjAwNSBBdWcgMjQsIGNvbXBpbGVkICIKKyNkZWZpbmUgVklNX1ZFUlNJT05fTE9ORwkiVklNIC0gVmkgSU1wcm92ZWQgNy4wYWEgQUxQSEEgKDIwMDUgQXVnIDI1KSIKKyNkZWZpbmUgVklNX1ZFUlNJT05fTE9OR19EQVRFCSJWSU0gLSBWaSBJTXByb3ZlZCA3LjBhYSBBTFBIQSAoMjAwNSBBdWcgMjUsIGNvbXBpbGVkICIK