ZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9jcHUvTWFrZWZpbGUgYi9hcmNoL2kzODYvY3B1L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NThjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2kzODYvY3B1L01ha2VmaWxlCkBAIC0wLDAgKzEsNTAgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIChDKSBDb3B5cmlnaHQgMjAwMgorIyBEYW5pZWwgRW5nc3Ry9m0sIE9taWNyb24gQ2V0aSBBQiwgZGFuaWVsQG9taWNyb24uc2UuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSAkKG9iailsaWIkKENQVSkuYQorCitTVEFSVAk9IHN0YXJ0Lm8gc3RhcnQxNi5vIHJlc2V0dmVjLm8KK0NPQkpTCT0gc2VyaWFsLm8gaW50ZXJydXB0cy5vIGNwdS5vCisKK1NSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQorU1RBUlQJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU1RBUlQpKQorCithbGw6CSQob2JqKS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCisKKyQoTElCKToJJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2NwdS9jb25maWcubWsgYi9hcmNoL2kzODYvY3B1L2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmExNjBkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pMzg2L2NwdS9jb25maWcubWsKQEAgLTAsMCArMSwyNiBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDIKKyMgRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitQTEFURk9STV9SRUxGTEFHUyArPQorCitQTEFURk9STV9DUFBGTEFHUyArPSAtbWFyY2g9aTM4NiAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvY3B1L2NwdS5jIGIvYXJjaC9pMzg2L2NwdS9jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDEwNTE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pMzg2L2NwdS9jcHUuYwpAQCAtMCwwICsxLDkyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBEYW5pZWwgRW5nc3Ry9m0sIE9taWNyb24gQ2V0aSBBQiwgZGFuaWVsQG9taWNyb24uc2UuCisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogQWxleCBadWVwa2UgPGF6dUBzeXNnby5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogQ1BVIHNwZWNpZmljIGNvZGUKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPGFzbS9pbnRlcnJ1cHQuaD4KKworaW50IGNwdV9pbml0X2Yodm9pZCkKK3sKKwkvKiBpbml0aWFsaXplIEZQVSwgcmVzZXQgRU0sIHNldCBNUCBhbmQgTkUgKi8KKwlhc20gKCJmbmluaXRcbiIgXAorCSAgICAgIm1vdmwgJWNyMCwgJWVheFxuIiBcCisJICAgICAiYW5kbCAkfjB4NCwgJWVheFxuIiBcCisJICAgICAib3JsICAkMHgyMiwgJWVheFxuIiBcCisJICAgICAibW92bCAlZWF4LCAlY3IwXG4iICk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNwdV9pbml0X3Iodm9pZCkKK3sKKwkvKiBJbml0aWFsaXplIGNvcmUgaW50ZXJydXB0IGFuZCBleGNlcHRpb24gZnVuY3Rpb25hbGl0eSBvZiBDUFUgKi8KKwljcHVfaW5pdF9pbnRlcnJ1cHRzICgpOworCXJldHVybiAwOworfQorCitpbnQgZG9fcmVzZXQoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJcHJpbnRmICgicmVzZXR0aW5nIC4uLlxuIik7CisJdWRlbGF5KDUwMDAwKTsJCQkJLyogd2FpdCA1MCBtcyAqLworCWRpc2FibGVfaW50ZXJydXB0cygpOworCXJlc2V0X2NwdSgwKTsKKworCS8qTk9UUkVBQ0hFRCovCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgIGZsdXNoX2NhY2hlICh1bnNpZ25lZCBsb25nIGR1bW15MSwgdW5zaWduZWQgbG9uZyBkdW1teTIpCit7CisJYXNtKCJ3YmludmRcbiIpOworCXJldHVybjsKK30KKwordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGdlbmVyYXRlX2dwZih2b2lkKTsKKworLyogc2VnbWVudCAweDcwIGlzIGFuIGFyYml0cmFyeSBzZWdtZW50IHdoaWNoIGRvZXMgbm90IGV4aXN0ICovCithc20oIi5nbG9ibCBnZW5lcmF0ZV9ncGZcbiIKKyAgICAiLmhpZGRlbiBnZW5lcmF0ZV9ncGZcbiIKKyAgICAiLnR5cGUgZ2VuZXJhdGVfZ3BmLCBAZnVuY3Rpb25cbiIKKyAgICAiZ2VuZXJhdGVfZ3BmOlxuIgorICAgICJsam1wICAgJDB4NzAsICQweDQ3MTE0NzExXG4iKTsKKwordm9pZCBfX3Jlc2V0X2NwdSh1bG9uZyBhZGRyKQoreworCXByaW50ZigiUmVzZXR0aW5nIHVzaW5nIGkzODYgVHJpcGxlIEZhdWx0XG4iKTsKKwlzZXRfdmVjdG9yKDEzLCBnZW5lcmF0ZV9ncGYpOyAgLyogZ2VuZXJhbCBwcm90ZWN0aW9uIGZhdWx0IGhhbmRsZXIgKi8KKwlzZXRfdmVjdG9yKDgsIGdlbmVyYXRlX2dwZik7ICAgLyogZG91YmxlIGZhdWx0IGhhbmRsZXIgKi8KKwlnZW5lcmF0ZV9ncGYoKTsgICAgICAgICAgICAgICAgLyogc3RhcnQgdGhlIHNob3cgKi8KK30KK3ZvaWQgcmVzZXRfY3B1KHVsb25nIGFkZHIpIF9fYXR0cmlidXRlX18oKHdlYWssIGFsaWFzKCJfX3Jlc2V0X2NwdSIpKSk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvY3B1L2ludGVycnVwdHMuYyBiL2FyY2gvaTM4Ni9jcHUvaW50ZXJydXB0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNTc0MzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2kzODYvY3B1L2ludGVycnVwdHMuYwpAQCAtMCwwICsxLDUwMSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOAorICogR3JhZW1lIFJ1c3MsIGdyYWVtZS5ydXNzQGdtYWlsLmNvbS4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2ludGVycnVwdC5oPgorCisjZGVmaW5lIERFQ0xBUkVfSU5URVJSVVBUKHgpIFwKKwkiLmdsb2JsIGlycV8iI3giXG4iIFwKKwkiLmhpZGRlbiBpcnFfIiN4IlxuIiBcCisJIi50eXBlIGlycV8iI3giLCBAZnVuY3Rpb25cbiIgXAorCSJpcnFfIiN4IjpcbiIgXAorCSJwdXNobCAlZWJwXG4iIFwKKwkibW92bCAlZXNwLCVlYnBcbiIgXAorCSJwdXNoYVxuIiBcCisJInB1c2hsICQiI3giXG4iIFwKKwkiam1wIGlycV9jb21tb25fZW50cnlcbiIKKworc3RydWN0IGlkdF9lbnRyeSB7CisJdTE2CWJhc2VfbG93OworCXUxNglzZWxlY3RvcjsKKwl1OAlyZXM7CisJdTgJYWNjZXNzOworCXUxNgliYXNlX2hpZ2g7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGRlc2NfcHRyIHsKKwl1bnNpZ25lZCBzaG9ydCBzaXplOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKwl1bnNpZ25lZCBzaG9ydCBzZWdtZW50OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGlkdF9lbnRyeSBpZHRbMjU2XTsKKworc3RydWN0IGRlc2NfcHRyIGlkdF9wdHI7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX2lkdChjb25zdCBzdHJ1Y3QgZGVzY19wdHIgKmR0cikKK3sKKwlhc20gdm9sYXRpbGUoImNzIGxpZHQgJTAiOjoibSIgKCpkdHIpKTsKK30KKwordm9pZCBzZXRfdmVjdG9yKHU4IGludG51bSwgdm9pZCAqcm91dGluZSkKK3sKKwlpZHRbaW50bnVtXS5iYXNlX2hpZ2ggPSAodTE2KSgodTMyKShyb3V0aW5lKSA+PiAxNik7CisJaWR0W2ludG51bV0uYmFzZV9sb3cgPSAodTE2KSgodTMyKShyb3V0aW5lKSAmIDB4ZmZmZik7Cit9CisKK3ZvaWQgaXJxXzAodm9pZCk7Cit2b2lkIGlycV8xKHZvaWQpOworCitpbnQgY3B1X2luaXRfaW50ZXJydXB0cyh2b2lkKQoreworCWludCBpOworCisJaW50IGlycV9lbnRyeV9zaXplID0gaXJxXzEgLSBpcnFfMDsKKwl2b2lkICppcnFfZW50cnkgPSAodm9pZCAqKWlycV8wOworCisJLyogSnVzdCBpbiBjYXNlLi4uICovCisJZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkvKiBTZXR1cCB0aGUgSURUICovCisJZm9yIChpPTA7aTwyNTY7aSsrKSB7CisJCWlkdFtpXS5hY2Nlc3MgPSAweDhlOworCQlpZHRbaV0ucmVzID0gMDsKKwkJaWR0W2ldLnNlbGVjdG9yID0gMHgxMDsKKwkJc2V0X3ZlY3RvcihpLCBpcnFfZW50cnkpOworCQlpcnFfZW50cnkgKz0gaXJxX2VudHJ5X3NpemU7CisJfQorCisJaWR0X3B0ci5zaXplID0gMjU2ICogODsKKwlpZHRfcHRyLmFkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgaWR0OworCWlkdF9wdHIuc2VnbWVudCA9IDB4MTg7CisKKwlsb2FkX2lkdCgmaWR0X3B0cik7CisKKwkvKiBJdCBpcyBub3cgc2FmZSB0byBlbmFibGUgaW50ZXJydXB0cyAqLworCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2RvX2lycShpbnQgaXJxKQoreworCXByaW50ZigiVW5oYW5kbGVkIElSUSA6ICVkXG4iLCBpcnEpOworfQordm9pZCBkb19pcnEoaW50IGlycSkgX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoIl9fZG9faXJxIikpKTsKKwordm9pZCBlbmFibGVfaW50ZXJydXB0cyh2b2lkKQoreworCWFzbSgic3RpXG4iKTsKK30KKworaW50IGRpc2FibGVfaW50ZXJydXB0cyh2b2lkKQoreworCWxvbmcgZmxhZ3M7CisKKwlhc20gdm9sYXRpbGUgKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpXG4iIDogIj1nIiAoZmxhZ3MpIDogKTsKKworCXJldHVybiAoZmxhZ3MmMHgyMDApOyAvKiBJRSBmbGFncyBpcyBiaXQgOSAqLworfQorCisvKiBJUlEgTG93LUxldmVsIFNlcnZpY2UgUm91dGluZSAqLworX19pc3JfXyBpcnFfbGxzcihpbnQgaXAsIGludCBzZWcsIGludCBpcnEpCit7CisJLyoKKwkgKiBGb3IgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgZWFjaCBleGNlcHRpb24sIHJlZmVyIHRvOgorCSAqIEludGVsriA2NCBhbmQgSUEtMzIgQXJjaGl0ZWN0dXJlcyBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwKKwkgKiBWb2x1bWUgMTogQmFzaWMgQXJjaGl0ZWN0dXJlCisJICogT3JkZXIgTnVtYmVyOiAyNTM2NjUtMDI5VVMsIE5vdmVtYmVyIDIwMDgKKwkgKiBUYWJsZSA2LTEuIEV4Y2VwdGlvbnMgYW5kIEludGVycnVwdHMKKwkgKi8KKwlzd2l0Y2ggKGlycSkgeworCWNhc2UgMHgwMDoKKwkJcHJpbnRmKCJEaXZpZGUgRXJyb3IgKERpdmlzaW9uIGJ5IHplcm8pIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCXdoaWxlKDEpOworCQlicmVhazsKKwljYXNlIDB4MDE6CisJCXByaW50ZigiRGVidWcgSW50ZXJydXB0IChTaW5nbGUgc3RlcCkgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKKwkJYnJlYWs7CisJY2FzZSAweDAyOgorCQlwcmludGYoIk5NSSBJbnRlcnJ1cHQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKKwkJYnJlYWs7CisJY2FzZSAweDAzOgorCQlwcmludGYoIkJyZWFrcG9pbnQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKKwkJYnJlYWs7CisJY2FzZSAweDA0OgorCQlwcmludGYoIk92ZXJmbG93IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCXdoaWxlKDEpOworCQlicmVhazsKKwljYXNlIDB4MDU6CisJCXByaW50ZigiQk9VTkQgUmFuZ2UgRXhjZWVkZWQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKKwkJd2hpbGUoMSk7CisJCWJyZWFrOworCWNhc2UgMHgwNjoKKwkJcHJpbnRmKCJJbnZhbGlkIE9wY29kZSAoVW5EZWZpbmVkIE9wY29kZSkgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKKwkJd2hpbGUoMSk7CisJCWJyZWFrOworCWNhc2UgMHgwNzoKKwkJcHJpbnRmKCJEZXZpY2UgTm90IEF2YWlsYWJsZSAoTm8gTWF0aCBDb3Byb2Nlc3NvcikgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKKwkJd2hpbGUoMSk7CisJCWJyZWFrOworCWNhc2UgMHgwODoKKwkJcHJpbnRmKCJEb3VibGUgZmF1bHQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKKwkJd2hpbGUoMSk7CisJCWJyZWFrOworCWNhc2UgMHgwOToKKwkJcHJpbnRmKCJDby1wcm9jZXNzb3Igc2VnbWVudCBvdmVycnVuIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCXdoaWxlKDEpOworCQlicmVhazsKKwljYXNlIDB4MGE6CisJCXByaW50ZigiSW52YWxpZCBUU1MgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKKwkJYnJlYWs7CisJY2FzZSAweDBiOgorCQlwcmludGYoIlNlZ21lbnQgTm90IFByZXNlbnQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKKwkJd2hpbGUoMSk7CisJCWJyZWFrOworCWNhc2UgMHgwYzoKKwkJcHJpbnRmKCJTdGFjayBTZWdtZW50IEZhdWx0IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCXdoaWxlKDEpOworCQlicmVhazsKKwljYXNlIDB4MGQ6CisJCXByaW50ZigiR2VuZXJhbCBQcm90ZWN0aW9uIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCWJyZWFrOworCWNhc2UgMHgwZToKKwkJcHJpbnRmKCJQYWdlIGZhdWx0IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCXdoaWxlKDEpOworCQlicmVhazsKKwljYXNlIDB4MGY6CisJCXByaW50ZigiRmxvYXRpbmctUG9pbnQgRXJyb3IgKE1hdGggRmF1bHQpIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCWJyZWFrOworCWNhc2UgMHgxMDoKKwkJcHJpbnRmKCJBbGlnbm1lbnQgY2hlY2sgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKKwkJYnJlYWs7CisJY2FzZSAweDExOgorCQlwcmludGYoIk1hY2hpbmUgQ2hlY2sgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKKwkJYnJlYWs7CisJY2FzZSAweDEyOgorCQlwcmludGYoIlNJTUQgRmxvYXRpbmctUG9pbnQgRXhjZXB0aW9uIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCWJyZWFrOworCWNhc2UgMHgxMzoKKwljYXNlIDB4MTQ6CisJY2FzZSAweDE1OgorCWNhc2UgMHgxNjoKKwljYXNlIDB4MTc6CisJY2FzZSAweDE4OgorCWNhc2UgMHgxOToKKwljYXNlIDB4MWE6CisJY2FzZSAweDFiOgorCWNhc2UgMHgxYzoKKwljYXNlIDB4MWQ6CisJY2FzZSAweDFlOgorCWNhc2UgMHgxZjoKKwkJcHJpbnRmKCJSZXNlcnZlZCBFeGNlcHRpb24gJWQgYXQgJTA0eDolMDh4XG4iLCBpcnEsIHNlZywgaXApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIEhhcmR3YXJlIG9yIFVzZXIgSVJRICovCisJCWRvX2lycShpcnEpOworCX0KK30KKworLyoKKyAqIE9LIC0gVGhpcyBsb29rcyByZWFsbHkgaG9ycmlibGUsIGJ1dCBpdCBzZXJ2ZXMgYSBwdXJwb3NlIC0gSXQgaGVscHMgY3JlYXRlCisgKiBmdWxseSByZWxvY2F0YWJsZSBjb2RlLgorICogIC0gVGhlIGNhbGwgdG8gaXJxX2xsc3Igd2lsbCBiZSBhIHJlbGF0aXZlIGp1bXAKKyAqICAtIFRoZSBJUlEgZW50cmllcyB3aWxsIGJlIGd1YXJhbnRlZWQgdG8gYmUgaW4gb3JkZXIKKyAqIEl0J3MgYSBiaXQgYW5ub3lpbmcgdGhhdCB3ZSBuZWVkIHRvIHdhc3RlIDMgYnl0ZXMgcGVyIGludGVycnVwdCBlbnRyeQorICogKHRvdGFsIG9mIDc2OCBjb2RlIGJ5dGVzKSwgYnV0IHdlIE1VU1QgY3JlYXRlIGEgU3RhY2sgRnJhbWUgYW5kIHRoaXMgaXMKKyAqIHRoZSBlYXNpZXN0IHdheSBJIGNvdWxkIGRvIGl0LiBNYXliZSBpdCBjYW4gYmUgbWFkZSBiZXR0ZXIgbGF0ZXIuCisgKi8KK2FzbSgiLmdsb2JsIGlycV9jb21tb25fZW50cnlcbiIgXAorCSIuaGlkZGVuIGlycV9jb21tb25fZW50cnlcbiIgXAorCSIudHlwZSBpcnFfY29tbW9uX2VudHJ5LCBAZnVuY3Rpb25cbiIgXAorCSJpcnFfY29tbW9uX2VudHJ5OlxuIiBcCisJInB1c2hsICQwXG4iIFwKKwkicHVzaGwgJDBcbiIgXAorCSJjYWxsIGlycV9sbHNyXG4iIFwKKwkicG9wbCAlZWF4XG4iIFwKKwkicG9wbCAlZWF4XG4iIFwKKwkicG9wbCAlZWF4XG4iIFwKKwkicG9wYVxuIiBcCisJImxlYXZlXG4iXAorCSJpcmV0XG4iIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDUpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDgpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTApIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgxMSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTMpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgxNCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTYpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgxNykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTkpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgyMCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjIpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgyMykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjUpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgyNikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjgpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgyOSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDMwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMzEpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgzMikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDMzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMzQpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgzNSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDM2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMzcpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgzOCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDM5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNDApIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg0MSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDQyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNDMpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg0NCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDQ1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNDYpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg0NykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDQ4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNDkpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg1MCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDUxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNTIpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg1MykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDU0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNTUpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg1NikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDU3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNTgpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg1OSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDYwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNjEpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg2MikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDYzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNjQpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg2NSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDY2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNjcpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg2OCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDY5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNzApIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg3MSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDcyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNzMpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg3NCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDc1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNzYpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg3NykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDc4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNzkpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg4MCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDgxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoODIpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg4MykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDg0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoODUpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg4NikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDg3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoODgpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg4OSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDkwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoOTEpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg5MikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDkzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoOTQpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg5NSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDk3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoOTYpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg5OCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDk5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTAwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTAxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTAyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTAzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTA0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTA1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTA2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTA3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTA4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTA5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTEwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTExKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTEyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTEzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTE0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTE1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTE2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTE3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTE4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTE5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTIwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTIxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTIyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTIzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTI0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTI1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTI2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTI3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTI4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTI5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTMwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTMxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTMyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTMzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTM0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTM1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTM2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTM3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTM4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTM5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTQwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTQxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTQyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTQzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTQ0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTQ1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTQ2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTQ3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTQ4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTQ5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTUwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTUxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTUyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTUzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTU0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTU1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTU2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTU3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTU4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTU5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTYwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTYxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTYyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTYzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTY0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTY1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTY2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTY3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTY4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTY5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTcwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTcxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTcyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTczKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTc0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTc1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTc2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTc3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTc4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTc5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTgwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTgxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTgyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTgzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTg0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTg1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTg2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTg3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTg4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTg5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTkwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTkxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTkyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTkzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTk0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTk1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTk2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTk3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTk4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTk5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjAwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjAxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjAyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjAzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjA0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjA1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjA2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjA3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjA4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjA5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjEwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjExKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjEyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjEzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjE0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjE1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjE2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjE3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjE4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjE5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjIwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjIxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjIyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjIzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjI0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjI1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjI2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjI3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjI4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjI5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjMwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjMxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjMyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjMzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjM0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjM1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjM2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjM3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjM4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjM5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjQwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjQxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjQyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjQzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjQ0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjQ1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjQ2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjQ3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjQ4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjQ5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjUwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjUxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjUyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjUzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjU0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjU1KSk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvY3B1L3Jlc2V0dmVjLlMgYi9hcmNoL2kzODYvY3B1L3Jlc2V0dmVjLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyMjJkZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaTM4Ni9jcHUvcmVzZXR2ZWMuUwpAQCAtMCwwICsxLDM3IEBACisvKgorICogIFUtYm9vdCAtIGkzODYgU3RhcnR1cCBDb2RlCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMglPbWljcm9uIENldGkgQUIsIERhbmllbCBFbmdzdHL2bSA8ZGVuYWllbEBvbWljcm9uLnNlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qIFJlc2V0IHZlY3RvciwganVtcHMgdG8gc3RhcnQxNi5TICovCisKKy5leHRlcm4gc3RhcnQxNgorCisuc2VjdGlvbiAucmVzZXR2ZWMsICJheCIKKy5jb2RlMTYKK3Jlc2V0X3ZlY3RvcjoKKwljbGkKKwljbGQKKwlqbXAgc3RhcnQxNgorCisJLm9yZyAweGYKKwlub3AKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9jcHUvc2M1MjAvTWFrZWZpbGUgYi9hcmNoL2kzODYvY3B1L3NjNTIwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ODM1YjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2kzODYvY3B1L3NjNTIwL01ha2VmaWxlCkBAIC0wLDAgKzEsNTYgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA4CisjIEdyYWVtZSBSdXNzLCBncmFlbWUucnVzc0BnbWFpbC5jb20uCisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyAoQykgQ29weXJpZ2h0IDIwMDIKKyMgRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCTo9ICQob2JqKWxpYiQoU09DKS5hCisKK0NPQkpTLSQoQ09ORklHX1NZU19TQzUyMCkgKz0gc2M1MjAubworQ09CSlMtJChDT05GSUdfU1lTX1NDNTIwX1NTSSkgKz0gc2M1MjBfc3NpLm8KK0NPQkpTLSQoQ09ORklHX1NZU19TQzUyMF9USU1FUikgKz0gc2M1MjBfdGltZXIubworQ09CSlMtJChDT05GSUdfUENJKSArPSBzYzUyMF9wY2kubworCitTT0JKUy0kKENPTkZJR19TWVNfU0M1MjApICs9IHNjNTIwX2FzbS5vCisKK1NSQ1MJOj0gJChTT0JKUy15Oi5vPS5TKSAkKENPQkpTLXk6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTLXkpICQoQ09CSlMteSkpCisKK2FsbDogJChvYmopLmRlcGVuZCAkKExJQikKKworJChMSUIpOgkkKE9CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2NwdS9zYzUyMC9zYzUyMC5jIGIvYXJjaC9pMzg2L2NwdS9zYzUyMC9zYzUyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNTY2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2kzODYvY3B1L3NjNTIwL3NjNTIwLmMKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCIDxkYW5pZWxAb21pY3Jvbi5zZT4uCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyogc3R1ZmYgc3BlY2lmaWMgZm9yIHRoZSBzYzUyMCwKKyAqIGJ1dCBpZGVwZW5kZW50IG9mIGltcGxlbWVudGF0aW9uICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaWMvc2M1MjAuaD4KKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKy8qCisgKiB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgYm9hcmRzIGJhc2VkIG9uIHRoZSBBTUQgc2M1MjAKKyAqCisgKiB2b2lkIGluaXRfc2M1MjAodm9pZCkKKyAqIHVuc2lnbmVkIGxvbmcgaW5pdF9zYzUyMF9kcmFtKHZvaWQpCisgKi8KKwordm9sYXRpbGUgc2M1MjBfbW1jcl90ICpzYzUyMF9tbWNyID0gKHNjNTIwX21tY3JfdCAqKTB4ZmZmZWYwMDA7CisKK3ZvaWQgaW5pdF9zYzUyMCh2b2lkKQoreworCS8qIFNldCB0aGUgVUFSVHhDVEwgcmVnaXN0ZXIgYXQgaXQncyBzbG93ZXIsCisJICogYmF1ZCBjbG9jayBnaXZpbmcgdXMgYSAxLjg0MzIgTUh6IHJlZmVyZW5jZQorCSAqLworCXNjNTIwX21tY3ItPnVhcnQxY3RsID0gMHgwNzsKKwlzYzUyMF9tbWNyLT51YXJ0MmN0bCA9IDB4MDc7CisKKwkvKiBmaXJzdCBzZXQgdGhlIHRpbWVyIHBpbiBtYXBwaW5nICovCisJc2M1MjBfbW1jci0+Y2xrc2VsID0gMHg3MjsJLyogbm8gY2xvY2sgZnJlcXVlbmN5IHNlbGVjdGVkLCB1c2UgMS4xODkyTUh6ICovCisKKwkvKiBlbmFibGUgUENJIGJ1cyBhcmJpdHJlciAqLworCXNjNTIwX21tY3ItPnN5c2FyYmN0bCA9IDB4MDI7CS8qIGVuYWJsZSBjb25jdXJyZW50IG1vZGUgKi8KKworCXNjNTIwX21tY3ItPnN5c2FyYm1lbmIgPSAweDFmOwkvKiBlbmFibGUgZXh0ZXJuYWwgZ3JhbnRzICovCisJc2M1MjBfbW1jci0+aGJjdGwgPSAweDA0OwkvKiBlbmFibGUgcG9zdGVkLXdyaXRlcyAqLworCisJaWYgKENPTkZJR19TWVNfU0M1MjBfSElHSF9TUEVFRCkgeworCQlzYzUyMF9tbWNyLT5jcHVjdGwgPSAweDAyOwkvKiBzZXQgaXQgdG8gMTMzIE1IeiBhbmQgd3JpdGUgYmFjayAqLworCQlnZC0+Y3B1X2NsayA9IDEzMzAwMDAwMDsKKwkJcHJpbnRmKCIjIyBDUFUgU3BlZWQgc2V0IHRvIDEzM01IelxuIik7CisJfSBlbHNlIHsKKwkJc2M1MjBfbW1jci0+Y3B1Y3RsID0gMHgwMTsJLyogc2V0IGl0IHRvIDEwMCBNSHogYW5kIHdyaXRlIGJhY2sgKi8KKwkJcHJpbnRmKCIjIyBDUFUgU3BlZWQgc2V0IHRvIDEwME1IelxuIik7CisJCWdkLT5jcHVfY2xrID0gMTAwMDAwMDAwOworCX0KKworCisJLyogd2FpdCBhdCBsZWFzdCBvbmUgbWlsbGlzZWNvbmQgKi8KKwlhc20oIm1vdmwJJDB4MjAwMCwlJWVjeFxuIgorCSAgICAiMDoJCXB1c2hsICUlZWN4XG4iCisJICAgICJwb3BsCSUlZWN4XG4iCisJICAgICJsb29wIDBiXG4iOiA6IDogImVjeCIpOworCisJLyogdHVybiBvbiB0aGUgU0RSQU0gd3JpdGUgYnVmZmVyICovCisJc2M1MjBfbW1jci0+ZGJjdGwgPSAweDExOworCisJLyogdHVybiBvbiB0aGUgY2FjaGUgYW5kIGRpc2FibGUgd3JpdGUgdGhyb3VnaCAqLworCWFzbSgibW92bAklJWNyMCwgJSVlYXhcbiIKKwkgICAgImFuZGwJJDB4OWZmZmZmZmYsICUlZWF4XG4iCisJICAgICJtb3ZsCSUlZWF4LCAlJWNyMFxuIiAgOiA6IDogImVheCIpOworfQorCit1bnNpZ25lZCBsb25nIGluaXRfc2M1MjBfZHJhbSh2b2lkKQoreworCWJkX3QgKmJkID0gZ2QtPmJkOworCisJdTMyIGRyYW1fcHJlc2VudD0wOworCXUzMiBkcmFtX2N0cmw7CisjaWZkZWYgQ09ORklHX1NZU19TRFJBTV9EUkNUTUNUTAorCS8qIHRoZXNlIG1lbW9yeSBjb250cm9sIHJlZ2lzdGVycyBhcmUgc2V0IHVwIGluIHRoZSBhc3NlbWJlciBwYXJ0LAorCSAqIGluIHNjNTIwX2FzbS5TLCBkdXJpbmcgJ21lbV9pbml0Jy4gIElmIHdlIG11Y2sgd2l0aCB0aGVtIGhlcmUsCisJICogYWZ0ZXIgd2UgYXJlIHJ1bm5pbmcgYSBzdGFjayBpbiBSQU0sIHdlIGhhdmUgdHJvdWJsZXMuICBCZXNpZGVzLAorCSAqIHRoZXNlIHJlZnJlc2ggYW5kIGRlbGF5IHZhbHVlcyBhcmUgYmV0dGVyID8gc2ltcGx5IHNwZWNpZmllZAorCSAqIG91dHJpZ2h0IGluIHRoZSBpbmNsdWRlL2NvbmZpZ3Mve2NmZ30gZmlsZSBzaW5jZSB0aGUgSFcgZGVzaWduZXIKKwkgKiBzaW1wbHkgZGljdGF0ZXMgaXQuCisJICovCisjZWxzZQorCWludCB2YWw7CisKKwlpbnQgY2FzX3ByZWNoYXJnZV9kZWxheSA9IENPTkZJR19TWVNfU0RSQU1fUFJFQ0hBUkdFX0RFTEFZOworCWludCByZWZyZXNoX3JhdGUgICAgICAgID0gQ09ORklHX1NZU19TRFJBTV9SRUZSRVNIX1JBVEU7CisJaW50IHJhc19jYXNfZGVsYXkgICAgICAgPSBDT05GSUdfU1lTX1NEUkFNX1JBU19DQVNfREVMQVk7CisKKwkvKiBzZXQgU0RSQU0gc3BlZWQgaGVyZSAqLworCisJcmVmcmVzaF9yYXRlLz03ODsKKwlpZiAocmVmcmVzaF9yYXRlPD0xKSB7CisJCXZhbCA9IDA7ICAvKiA3Ljh1cyAqLworCX0gZWxzZSBpZiAocmVmcmVzaF9yYXRlPT0yKSB7CisJCXZhbCA9IDE7ICAvKiAxNS42dXMgKi8KKwl9IGVsc2UgaWYgKHJlZnJlc2hfcmF0ZT09MyB8fCByZWZyZXNoX3JhdGU9PTQpIHsKKwkJdmFsID0gMjsgIC8qIDMxLjJ1cyAqLworCX0gZWxzZSB7CisJCXZhbCA9IDM7ICAvKiA2Mi40dXMgKi8KKwl9CisKKwlzYzUyMF9tbWNyLT5kcmNjdGwgPSAoc2M1MjBfbW1jci0+ZHJjY3RsICYgMHhjZikgfCAodmFsPDw0KTsKKworCXZhbCA9IHNjNTIwX21tY3ItPmRyY3RtY3RsICYgMHhmMDsKKworCWlmIChjYXNfcHJlY2hhcmdlX2RlbGF5PT0zKSB7CisJCXZhbCB8PSAweDA0OyAgIC8qIDNUICovCisJfSBlbHNlIGlmIChjYXNfcHJlY2hhcmdlX2RlbGF5PT00KSB7CisJCXZhbCB8PSAweDA4OyAgIC8qIDRUICovCisJfSBlbHNlIGlmIChjYXNfcHJlY2hhcmdlX2RlbGF5PjQpIHsKKwkJdmFsIHw9IDB4MGM7CisJfQorCisJaWYgKHJhc19jYXNfZGVsYXkgPiAzKSB7CisJCXZhbCB8PSAyOworCX0gZWxzZSB7CisJCXZhbCB8PSAxOworCX0KKwlzYzUyMF9tbWNyLT5kcmN0bWN0bCA9IHZhbDsKKyNlbmRpZgorCisJLyogV2UgcmVhZC1iYWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBkcmFtCisJICogY29udHJvbGxlciB0aGF0IHRoZSBhc3NlbWJseSBjb2RlIHdyb3RlICovCisJZHJhbV9jdHJsID0gc2M1MjBfbW1jci0+ZHJjYmVuZGFkcjsKKworCWJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gMDsKKwlpZiAoZHJhbV9jdHJsICYgMHg4MCkgeworCQkvKiBiYW5rIDAgZW5hYmxlZCAqLworCQlkcmFtX3ByZXNlbnQgPSBiZC0+YmlfZHJhbVsxXS5zdGFydCA9IChkcmFtX2N0cmwgJiAweDdmKSA8PCAyMjsKKwkJYmQtPmJpX2RyYW1bMF0uc2l6ZSA9IGJkLT5iaV9kcmFtWzFdLnN0YXJ0OworCisJfSBlbHNlIHsKKwkJYmQtPmJpX2RyYW1bMF0uc2l6ZSA9IDA7CisJCWJkLT5iaV9kcmFtWzFdLnN0YXJ0ID0gYmQtPmJpX2RyYW1bMF0uc3RhcnQ7CisJfQorCisJaWYgKGRyYW1fY3RybCAmIDB4ODAwMCkgeworCQkvKiBiYW5rIDEgZW5hYmxlZCAqLworCQlkcmFtX3ByZXNlbnQgPSBiZC0+YmlfZHJhbVsyXS5zdGFydCA9IChkcmFtX2N0cmwgJiAweDdmMDApIDw8IDE0OworCQliZC0+YmlfZHJhbVsxXS5zaXplID0gYmQtPmJpX2RyYW1bMl0uc3RhcnQgLSAgYmQtPmJpX2RyYW1bMV0uc3RhcnQ7CisJfSBlbHNlIHsKKwkJYmQtPmJpX2RyYW1bMV0uc2l6ZSA9IDA7CisJCWJkLT5iaV9kcmFtWzJdLnN0YXJ0ID0gYmQtPmJpX2RyYW1bMV0uc3RhcnQ7CisJfQorCisJaWYgKGRyYW1fY3RybCAmIDB4ODAwMDAwKSB7CisJCS8qIGJhbmsgMiBlbmFibGVkICovCisJCWRyYW1fcHJlc2VudCA9IGJkLT5iaV9kcmFtWzNdLnN0YXJ0ID0gKGRyYW1fY3RybCAmIDB4N2YwMDAwKSA8PCA2OworCQliZC0+YmlfZHJhbVsyXS5zaXplID0gYmQtPmJpX2RyYW1bM10uc3RhcnQgLSAgYmQtPmJpX2RyYW1bMl0uc3RhcnQ7CisJfSBlbHNlIHsKKwkJYmQtPmJpX2RyYW1bMl0uc2l6ZSA9IDA7CisJCWJkLT5iaV9kcmFtWzNdLnN0YXJ0ID0gYmQtPmJpX2RyYW1bMl0uc3RhcnQ7CisJfQorCisJaWYgKGRyYW1fY3RybCAmIDB4ODAwMDAwMDApIHsKKwkJLyogYmFuayAzIGVuYWJsZWQgKi8KKwkJZHJhbV9wcmVzZW50ICA9IChkcmFtX2N0cmwgJiAweDdmMDAwMDAwKSA+PiAyOworCQliZC0+YmlfZHJhbVszXS5zaXplID0gZHJhbV9wcmVzZW50IC0gIGJkLT5iaV9kcmFtWzNdLnN0YXJ0OworCX0gZWxzZSB7CisJCWJkLT5iaV9kcmFtWzNdLnNpemUgPSAwOworCX0KKworCisjaWYgMAorCXByaW50ZigiQ29uZmlndXJlZCAlZCBieXRlcyBvZiBkcmFtXG4iLCBkcmFtX3ByZXNlbnQpOworI2VuZGlmCisJZ2QtPnJhbV9zaXplID0gZHJhbV9wcmVzZW50OworCisJcmV0dXJuIGRyYW1fcHJlc2VudDsKK30KKworI2lmZGVmIENPTkZJR19TWVNfU0M1MjBfUkVTRVQKK3ZvaWQgcmVzZXRfY3B1KHVsb25nIGFkZHIpCit7CisJcHJpbnRmKCJSZXNldHRpbmcgdXNpbmcgU0M1MjAgTU1DUlxuIik7CisJLyogV3JpdGUgYSAnMScgdG8gdGhlIFNZU19SU1Qgb2YgdGhlIFJFU0NGRyBNTUNSICovCisJc2M1MjBfbW1jci0+cmVzY2ZnID0gMHgwMTsKKworCS8qIE5PVFJFQUNIRUQgKi8KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2NwdS9zYzUyMC9zYzUyMF9hc20uUyBiL2FyY2gvaTM4Ni9jcHUvc2M1MjAvc2M1MjBfYXNtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0MmQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaTM4Ni9jcHUvc2M1MjAvc2M1MjBfYXNtLlMKQEAgLTAsMCArMSw1ODEgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCIDxkYW5pZWxAb21pY3Jvbi5zZT4uCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyogVGhpcyBmaWxlIGlzIGxhcmdlbHkgYmFzZWQgb24gY29kZSBvYnRuZWQgZnJvbSBBTUQuIEFNRCdzIG9yaWdpbmFsCisgKiBjb3B5cmlnaHQgaXMgaW5jbHVkZWQgYmVsb3cKKyAqLworCisvKgorICogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogICBDb3B5cmlnaHQgMTk5OSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogIFRoaXMgc29mdHdhcmUgaXMgdGhlIHByb3BlcnR5IG9mIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYyAgKEFNRCkgIHdoaWNoCisgKiAgc3BlY2lmaWNhbGx5IGdyYW50cyB0aGUgdXNlciB0aGUgcmlnaHQgdG8gbW9kaWZ5LCB1c2UgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogIHNvZnR3YXJlIHByb3ZpZGVkIHRoaXMgQ09QWVJJR0hUIE5PVElDRSBpcyBub3QgcmVtb3ZlZCBvciBhbHRlcmVkLiAgQWxsCisgKiAgb3RoZXIgcmlnaHRzIGFyZSByZXNlcnZlZCBieSBBTUQuCisgKgorICogIFRIRSBNQVRFUklBTFMgQVJFIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRZCisgKiAgT0YgQU5ZIEtJTkQgSU5DTFVESU5HIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBOT05JTkZSSU5HRU1FTlQgT0YKKyAqICBUSElSRC1QQVJUWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFksIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKiAgSU4gTk8gRVZFTlQgU0hBTEwgQU1EIE9SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisgKiAgKElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIFBST0ZJVFMsIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OLCBMT1NTIE9GIElORk9STUFJVE9OKSBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIE9SIElOQUJJTElUWQorICogIFRPIFVTRSBUSEUgTUFURVJJQUxTLCBFVkVOIElGIEFNRCBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogIFNVQ0ggREFNQUdFUy4gIEJFQ0FVU0UgU09NRSBKVVJTSURJQ1RJT05TIFBST0hJQklUIFRIRSBFWENMVVNJT04gT1IKKyAqICBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBGT1IgQ09OU0VRVUVOVElBTCBPUiBJTkNJREVOVEFMIERBTUFHRVMsIFRIRSBBQk9WRQorICogIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisgKgorICogIEFNRCBkb2VzIG5vdCBhc3N1bWUgYW55IHJlc3BvbnNpYmlsaXR5IGZvciBhbnkgZXJyb3JzIHRoYXQgbWF5IGFwcGVhciBpbgorICogIHRoZSBNYXRlcmlhbHMgbm9yIGFueSByZXNwb25zaWJpbGl0eSB0byBzdXBwb3J0IG9yIHVwZGF0ZSB0aGUgTWF0ZXJpYWxzLgorICogIEFNRCByZXRhaW5zIHRoZSByaWdodCB0byBtYWtlIGNoYW5nZXMgdG8gaXRzIHRlc3Qgc3BlY2lmaWNhdGlvbnMgYXQgYW55CisgKiAgdGltZSwgd2l0aG91dCBub3RpY2UuCisgKgorICogIFNvIHRoYXQgYWxsIG1heSBiZW5lZml0IGZyb20geW91ciBleHBlcmllbmNlLCBwbGVhc2UgcmVwb3J0ICBhbnkgIHByb2JsZW1zCisgKiAgb3Igc3VnZ2VzdGlvbnMgYWJvdXQgdGhpcyBzb2Z0d2FyZSBiYWNrIHRvIEFNRC4gIFBsZWFzZSBpbmNsdWRlIHlvdXIgbmFtZSwKKyAqICBjb21wYW55LCAgdGVsZXBob25lIG51bWJlciwgIEFNRCBwcm9kdWN0IHJlcXVpcmluZyBzdXBwb3J0IGFuZCBxdWVzdGlvbiBvcgorICogIHByb2JsZW0gZW5jb3VudGVyZWQuCisgKgorICogIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gICAgICAgICBXb3JsZHdpZGUgc3VwcG9ydCBhbmQgY29udGFjdAorICogIEVtYmVkZGVkIFByb2Nlc3NvciBEaXZpc2lvbiAgICAgICAgICAgIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBhdDoKKyAqICBTeXN0ZW1zIEVuZ2luZWVyaW5nICAgICAgICAgICAgICAgICAgICAgICBlcGQuc3VwcG9ydEBhbWQuY29tCisgKiAgNTIwNCBFLiBCZW4gV2hpdGUgQmx2ZC4gICAgICAgICAgICAgICAgICAgICAgICAgIC1vci0KKyAqICBBdXN0aW4sIFRYIDc4NzQxICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYW1kLmNvbS9odG1sL3N1cHBvcnQvdGVjaHN1cC5odG1sCisgKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCSBBVVRIT1IgICAgICA6IEJ1ZGR5IEZleSAtIE9yaWdpbmFsLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICBGVU5DVElPTkFMIERFU0NSSVBUSU9OOgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBhdXRvZGV0ZWN0IHRoZSBnZW9tZXRyeSBvZiB0aGUgRFJBTS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGNvbHVtbiBiaXRzIGZvciB0aGUgRFJBTQorICogZGV2aWNlcyBpbiB0aGlzIGV4dGVybmFsIGJhbmsuIFRoaXMgcm91dGluZSBhc3N1bWVzIHRoYXQgdGhlIGV4dGVybmFsIGJhbmsKKyAqIGhhcyBiZWVuIGNvbmZpZ3VyZWQgZm9yIGFuIDExLWJpdCBjb2x1bW4gYW5kIGZvciA0IGludGVybmFsIGJhbmtzLiBUaGlzIGdpdmVzCisgKiB1cyB0aGUgbWF4aW11bSBhZGRyZXNzIHJlYWNoIGluIG1lbW9yeS4gQnkgd3JpdGluZyBhIHRlc3QgdmFsdWUgdG8gdGhlIG1heAorICogYWRkcmVzcyBhbmQgbG9jYXRpbmcgd2hlcmUgaXQgYWxpYXNlcyB0bywgd2UgY2FuIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHZhbGlkCisgKiBjb2x1bW4gYml0cy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGludGVybmFsIGJhbmtzIGVhY2ggRFJBTQorICogZGV2aWNlIGhhcy4gVGhlIGV4dGVybmFsIGJhbmsgKHVuZGVyIHRlc3QpIGlzIGNvbmZpZ3VyZWQgZm9yIG1heGltdW0gcmVhY2gKKyAqIHdpdGggMTEtYml0IGNvbHVtbnMgYW5kIDQgaW50ZXJuYWwgYmFua3MuIFRoaXMgcm91dGluZSB3aWxsIHdyaXRlIHRvIGEgbWF4CisgKiBhZGRyZXNzIChCQTEgYW5kIEJBMCA9IDEpIGFuZCB0aGVuIHJlYWQgZnJvbSBhbiBhZGRyZXNzIHdpdGggQkExPTAgdG8gc2VlIGlmCisgKiB0aGF0IGNvbHVtbiBpcyBhICJkb24ndCBjYXJlIi4gSWYgQkExIGRvZXMgbm90IGFmZmVjdCB3cml0ZS9yZWFkIG9mIGRhdGEsCisgKiB0aGVuIHRoaXMgZGV2aWNlIGhhcyBvbmx5IDIgaW50ZXJuYWwgYmFua3MuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgdGhlIGVuZGluZyBhZGRyZXNzIGZvciB0aGlzIGV4dGVybmFsCisgKiBiYW5rIG9mIFNEUkFNLiBXZSB3cml0ZSB0byBhIG1heCBhZGRyZXNzIHdpdGggYSBkYXRhIHZhbHVlIGFuZCB0aGVuIGRpc2FibGUKKyAqIHJvdyBhZGRyZXNzIGJpdHMgbG9va2luZyBmb3IgImRvbid0IGNhcmUiIGxvY2F0aW9ucy4gRWFjaCAiZG9uJ3QgY2FyZSIgYml0CisgKiByZXByZXNlbnRzIGEgZGl2aWRpbmcgb2YgdGhlIG1heGltdW0gZGVuc2l0eSAoMTI4TSkgYnkgMi4gQnkgZGl2aWRpbmcgdGhlCisgKiBtYXhpbXVtIG9mIDMyIDRNIGNodW5rcyBpbiBhbiBleHRlcm5hbCBiYW5rIGRvd24gYnkgYWxsIHRoZSAiZG9uJ3QgY2FyZSIgYml0cworICogZGV0ZXJtaW5lZCBkdXJpbmcgc2l6aW5nLCB3ZSBzZXQgdGhlIHByb3BlciBkZW5zaXR5LgorICoKKyAqIFdBUk5JTkdTLgorICogYnAgbXVzdCBiZSBwcmVzZXJ2ZWQgYmVjYXVzZSBpdCBpcyB1c2VkIGZvciByZXR1cm4gbGlua2FnZS4KKyAqCisgKiBFWElUCisgKiBub3RoaW5nIHJldHVybmVkIC0gYnV0IHRoZSBtZW1vcnkgc3Vic3lzdGVtIGlzIGVuYWJsZWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisuc2VjdGlvbiAudGV4dAorLmVxdSAgICAgICAgICAgIERSQ0NUTCwgICAgIDB4MGZmZmVmMDEwICAgLyogRFJBTSBjb250cm9sIHJlZ2lzdGVyICovCisuZXF1ICAgICAgICAgICAgRFJDVE1DVEwsICAgMHgwZmZmZWYwMTIgICAvKiBEUkFNIHRpbWluZyBjb250cm9sIHJlZ2lzdGVyICovCisuZXF1ICAgICAgICAgICAgRFJDQ0ZHLCAgICAgMHgwZmZmZWYwMTQgICAvKiBEUkFNIGJhbmsgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworLmVxdSAgICAgICAgICAgIERSQ0JFTkRBRFIsIDB4MGZmZmVmMDE4ICAgLyogRFJBTSBiYW5rIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICovCisuZXF1ICAgICAgICAgICAgRUNDQ1RMLCAgICAgMHgwZmZmZWYwMjAgICAvKiBEUkFNIEVDQyBjb250cm9sIHJlZ2lzdGVyICovCisuZXF1ICAgICAgICAgICAgRUNDSU5ULCAgICAgMHgwZmZmZWZkMTggICAvKiBEUkFNIEVDQyBubWktSU5UIG1hcHBpbmcgKi8KKy5lcXUgICAgICAgICAgICBEQkNUTCwgICAgICAweDBmZmZlZjA0MCAgIC8qIERSQU0gYnVmZmVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKworLmVxdSAgICAgICAgICAgIENBQ0hFTElORVNaLCAweDAwMDAwMDEwICAgLyogc2l6ZSBvZiBvdXIgY2FjaGUgbGluZSAocmVhZCBidWZmZXIpICovCisuZXF1ICAgICAgICAgICAgQ09MMTFfQURSLCAgMHgwZTAwMWUwMCAgICAvKiAxMSBjb2wgYWRkcnMgKi8KKy5lcXUgICAgICAgICAgICBDT0wxMF9BRFIsICAweDBlMDAwZTAwICAgIC8qIDEwIGNvbCBhZGRycyAqLworLmVxdSAgICAgICAgICAgIENPTDA5X0FEUiwgIDB4MGUwMDA2MDAgICAgLyogIDkgY29sIGFkZHJzICovCisuZXF1ICAgICAgICAgICAgQ09MMDhfQURSLCAgMHgwZTAwMDIwMCAgICAvKiAgOCBjb2wgYWRkcnMgKi8KKy5lcXUgICAgICAgICAgICBST1cxNF9BRFIsICAweDBmMDAwMDAwICAgIC8qIDE0IHJvdyBhZGRycyAqLworLmVxdSAgICAgICAgICAgIFJPVzEzX0FEUiwgIDB4MDcwMDAwMDAgICAgLyogMTMgcm93IGFkZHJzICovCisuZXF1ICAgICAgICAgICAgUk9XMTJfQURSLCAgMHgwMzAwMDAwMCAgICAvKiAxMiByb3cgYWRkcnMgKi8KKy5lcXUgICAgICAgICAgICBST1cxMV9BRFIsICAweDAxMDAwMDAwICAgIC8qIDExIHJvdyBhZGRycy9hbHNvIGJhbmsgc3dpdGNoICovCisuZXF1ICAgICAgICAgICAgUk9XMTBfQURSLCAgMHgwMDAwMDAwMCAgICAvKiAxMCByb3cgYWRkcnMvYWxzbyBiYW5rIHN3aXRjaCAqLworLmVxdSAgICAgICAgICAgIENPTDExX0RBVEEsIDB4MGIwYjBiMGIgICAgLyogMTEgY29sIGFkZHJzICovCisuZXF1ICAgICAgICAgICAgQ09MMTBfREFUQSwgMHgwYTBhMGEwYSAgICAvKiAxMCBjb2wgZGF0YSAqLworLmVxdSAgICAgICAgICAgIENPTDA5X0RBVEEsIDB4MDkwOTA5MDkgICAgLyogIDkgY29sIGRhdGEgKi8KKy5lcXUgICAgICAgICAgICBDT0wwOF9EQVRBLCAweDA4MDgwODA4ICAgIC8qICA4IGNvbCBkYXRhICovCisuZXF1ICAgICAgICAgICAgUk9XMTRfREFUQSwgMHgzZjNmM2YzZiAgICAvKiAxNCByb3cgZGF0YSAoTUFTSykgKi8KKy5lcXUgICAgICAgICAgICBST1cxM19EQVRBLCAweDFmMWYxZjFmICAgIC8qIDEzIHJvdyBkYXRhIChNQVNLKSAqLworLmVxdSAgICAgICAgICAgIFJPVzEyX0RBVEEsIDB4MGYwZjBmMGYgICAgLyogMTIgcm93IGRhdGEgKE1BU0spICovCisuZXF1ICAgICAgICAgICAgUk9XMTFfREFUQSwgMHgwNzA3MDcwNyAgICAvKiAxMSByb3cgZGF0YS9hbHNvIGJhbmsgc3dpdGNoIChNQVNLKSAqLworLmVxdSAgICAgICAgICAgIFJPVzEwX0RBVEEsIDB4YWFhYWFhYWEgICAgLyogMTAgcm93IGRhdGEvYWxzbyBiYW5rIHN3aXRjaCAoTUFTSykgKi8KKworCisgLyoKKyAgKiBpbml0aWFsaXplIGRyYW0gY29udHJvbGxlciByZWdpc3RlcnMKKyAgKi8KKy5nbG9ibCBtZW1faW5pdAorbWVtX2luaXQ6CisJeG9ydyAgICAlYXgsJWF4CisJbW92bCAgICAkREJDVEwsICVlZGkKKwltb3ZiICAgICAlYWwsICglZWRpKSAgICAgICAgICAgICAvKiBkaXNhYmxlIHdyaXRlIGJ1ZmZlciAqLworCisJbW92bCAgICAkRUNDQ1RMLCAlZWRpCisJbW92YiAgICAgJWFsLCAoJWVkaSkgICAgICAgICAgICAgLyogZGlzYWJsZSBFQ0MgKi8KKworCW1vdmwgICAgJERSQ1RNQ1RMLCAlZWRpCisJbW92YiAgICAkMHgxRSwlYWwgICAgICAgICAgICAgICAgLyogU2V0IFNEUkFNIHRpbWluZyBmb3Igc2xvd2VzdCAqLworCW1vdmIgICAgICVhbCwgKCVlZGkpCisKKyAvKgorICAqIHNldHVwIGxvb3AgdG8gZG8gNCBleHRlcm5hbCBiYW5rcyBzdGFydGluZyB3aXRoIGJhbmsgMworICAqLworCW1vdmwgICAgJDB4ZmYwMDAwMDAsJWVheCAgICAgICAgIC8qIGVuYWJsZSBsYXN0IGJhbmsgYW5kIHNldHVwICovCisJbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKwltb3ZsICAgICAlZWF4LCAoJWVkaSkKKworCW1vdmwgICAgJERSQ0NGRywgJWVkaSAgICAgICAgICAgIC8qIHNldHVwICovCisJbW92dyAgICAkMHhiYmJiLCVheCAgICAgICAgICAgICAgLyogZHJhbSBjb25maWcgcmVnaXN0ZXIgZm9yICAqLworCW1vdncgICAgJWF4LCAoJWVkaSkKKworIC8qCisgICogaXNzdWUgYSBOT1AgdG8gYWxsIERSQU1zCisgICovCisJbW92bCAgICAkRFJDQ1RMLCAlZWRpICAgICAgICAgICAgLyogc2V0dXAgRFJBTSBjb250cm9sIHJlZ2lzdGVyIHdpdGggKi8KKwltb3ZiICAgICQweDEsJWFsICAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIHJlZnJlc2gsZGlzYWJsZSB3cml0ZSBidWZmZXIgKi8KKwltb3ZiICAgICAlYWwsICglZWRpKQorCW1vdmwgICAgJENBQ0hFTElORVNaLCAlZXNpICAgICAgIC8qIGp1c3QgYSBkdW1teSBhZGRyZXNzIHRvIHdyaXRlIGZvciAqLworCW1vdncgICAgICVheCwgKCVlc2kpCisgLyoKKyAgKiBkZWxheSBmb3IgMTAwIHVzZWM/IDIwMD8KKyAgKiAqKioqKip0aGlzIGlzIGEgY2x1ZGdlIGZvciBub3cgKioqKioqKioqKioqKgorICAqLworCW1vdncgICAgJDEwMCwlY3gKK3NpemRlbGF5OgorCWxvb3AgICAgc2l6ZGVsYXkgICAgICAgICAgICAgICAgIC8qIHdlIG5lZWQgMTAwIHVzZWMgaGVyZSAqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIC8qCisgICogaXNzdWUgYWxsIGJhbmtzIHByZWNoYXJnZQorICAqLworCW1vdmIgICAgJDB4MiwlYWwgICAgICAgICAgICAgICAgIC8qIEFsbCBiYW5rcyBwcmVjaGFyZ2UgKi8KKwltb3ZiICAgICAlYWwsICglZWRpKQorCW1vdncgICAgICVheCwgKCVlc2kpCisKKyAvKgorICAqIGlzc3VlIDIgYXV0byByZWZyZXNoZXMgdG8gYWxsIGJhbmtzCisgICovCisJbW92YiAgICAkMHg0LCVhbCAgICAgICAgICAgICAgICAgLyogQXV0byByZWZyZXNoIGNtZCAqLworCW1vdmIgICAgICVhbCwgKCVlZGkpCisJbW92dyAgICAkMiwlY3gKK3JlZnJlc2gxOgorCW1vdncgICAgICVheCwgKCVlc2kpCisJbG9vcCAgICByZWZyZXNoMQorCisgLyoKKyAgKiBpc3N1ZSBMT0FEIE1PREUgUkVHSVNURVIgY29tbWFuZAorICAqLworCW1vdmIgICAgJDB4MywlYWwgICAgICAgICAgICAgICAgIC8qIExvYWQgbW9kZSByZWdpc3RlciBjbWQgKi8KKwltb3ZiICAgICAlYWwsICglZWRpKQorCW1vdncgICAgICVheCwgKCVlc2kpCisKKyAvKgorICAqIGlzc3VlIDggbW9yZSBhdXRvIHJlZnJlc2hlcyB0byBhbGwgYmFua3MKKyAgKi8KKwltb3ZiICAgICQweDQsJWFsICAgICAgICAgICAgICAgICAvKiBBdXRvIHJlZnJlc2ggY21kICovCisJbW92YiAgICAgJWFsLCAoJWVkaSkKKwltb3Z3ICAgICQ4LCVjeAorcmVmcmVzaDI6CisJbW92dyAgICAgJWF4LCAoJWVzaSkKKwlsb29wICAgIHJlZnJlc2gyCisKKyAvKgorICAqIHNldCBjb250cm9sIHJlZ2lzdGVyIHRvIE5PUk1BTCBtb2RlCisgICovCisJbW92YiAgICAkMHgwLCVhbCAgICAgICAgICAgICAgICAgLyogTm9ybWFsIG1vZGUgdmFsdWUgKi8KKwltb3ZiICAgICAlYWwsICglZWRpKQorCisgLyoKKyAgKiBzaXplIGRyYW0gc3RhcnRpbmcgd2l0aCBleHRlcm5hbCBiYW5rIDMgbW92aW5nIHRvIGV4dGVybmFsIGJhbmsgMAorICAqLworCW1vdmwgICAgJDB4MywlZWN4ICAgICAgICAgICAgICAgIC8qIHN0YXJ0IHdpdGggZXh0ZXJuYWwgYmFuayAzICovCisKK25leHRiYW5rOgorCisgLyoKKyAgKiB3cml0ZSBjb2wgMTEgd3JhcCBhZHIKKyAgKi8KKwltb3ZsICAgICRDT0wxMV9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggY29sICgxMSkgd3JhcCBhZGRyICovCisJbW92bCAgICAkQ09MMTFfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgbWF4IHN1cHBvcnRlZCBjb2x1bW5zKDExKSAqLworCW1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIG1heCBjb2wgcGF0dGVybiBhdCBtYXggY29sIGFkciAqLworCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KKwljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KKwlqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KKyAvKgorICAqIHdyaXRlIGNvbCAxMCB3cmFwIGFkcgorICAqLworCisJbW92bCAgICAkQ09MMTBfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gMTAgY29sIHdyYXAgYWRkcmVzcyAqLworCW1vdmwgICAgJENPTDEwX0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIDEwIGNvbCB3cmFwICovCisJbW92bCAgICAlZWF4LCAoJWVzaSkgICAgICAgICAgICAgLyogd3JpdGUgMTAgY29sIHBhdHRlcm4gQCAxMCBjb2wgd3JhcCBhZHIgKi8KKwltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCisJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCisJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCisgLyoKKyAgKiB3cml0ZSBjb2wgOSB3cmFwIGFkcgorICAqLworCW1vdmwgICAgJENPTDA5X0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDkgY29sIHdyYXAgYWRkcmVzcyAqLworCW1vdmwgICAgJENPTDA5X0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIDkgY29sIHdyYXAgKi8KKwltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSA5IGNvbCBwYXR0ZXJuIEAgOSBjb2wgd3JhcCBhZHIgKi8KKwltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCisJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCisJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCisgLyoKKyAgKiB3cml0ZSBjb2wgOCB3cmFwIGFkcgorICAqLworCW1vdmwgICAgJENPTDA4X0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIG1pbig4KSBjb2wgd3JhcCBhZGRyZXNzICovCisJbW92bCAgICAkQ09MMDhfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgbWluICg4KSBjb2wgd3JhcCAqLworCW1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIG1pbiBjb2wgcGF0dGVybiBAIG1pbiBjb2wgYWRyICovCisJbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworIC8qCisgICogd3JpdGUgcm93IDE0IHdyYXAgYWRyCisgICovCisJbW92bCAgICAkUk9XMTRfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gbWF4IHJvdyAoMTQpIHdyYXAgYWRkciAqLworCW1vdmwgICAgJFJPVzE0X0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIG1heCBzdXBwb3J0ZWQgcm93cygxNCkgKi8KKwltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSBtYXggcm93IHBhdHRlcm4gYXQgbWF4IHJvdyBhZHIgKi8KKwltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCisJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCisJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCisgLyoKKyAgKiB3cml0ZSByb3cgMTMgd3JhcCBhZHIKKyAgKi8KKwltb3ZsICAgICRST1cxM19BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMyByb3cgd3JhcCBhZGRyZXNzICovCisJbW92bCAgICAkUk9XMTNfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTMgcm93IHdyYXAgKi8KKwltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMyByb3cgcGF0dGVybiBAIDEzIHJvdyB3cmFwIGFkciAqLworCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KKwljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KKwlqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KKyAvKgorICAqIHdyaXRlIHJvdyAxMiB3cmFwIGFkcgorICAqLworCW1vdmwgICAgJFJPVzEyX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEyIHJvdyB3cmFwIGFkZHJlc3MgKi8KKwltb3ZsICAgICRST1cxMl9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMiByb3cgd3JhcCAqLworCW1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIDEyIHJvdyBwYXR0ZXJuIEAgMTIgcm93IHdyYXAgYWRyICovCisJbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworIC8qCisgICogd3JpdGUgcm93IDExIHdyYXAgYWRyCisgICovCisJbW92bCAgICAkUk9XMTFfQURSLCAlZWRpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gMTEgcm93IHdyYXAgYWRkcmVzcyAqLworCW1vdmwgICAgJFJPVzExX0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIDExIHJvdyB3cmFwICovCisJbW92bCAgICAlZWF4LCAoJWVkaSkgICAgICAgICAgICAgLyogd3JpdGUgMTEgcm93IHBhdHRlcm4gQCAxMSByb3cgd3JhcCBhZHIgKi8KKwltb3ZsICAgICglZWRpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCisJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCisJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCisgLyoKKyAgKiB3cml0ZSByb3cgMTAgd3JhcCBhZHIgLS0tIHRoaXMgd3JpdGUgaXMgcmVhbGx5IHRvIGRldGVybWluZSBudW1iZXIgb2YgYmFua3MKKyAgKi8KKwltb3ZsICAgICRST1cxMF9BRFIsICVlZGkgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMCByb3cgd3JhcCBhZGRyZXNzICovCisJbW92bCAgICAkUk9XMTBfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTAgcm93IHdyYXAgKEFBKSAqLworCW1vdmwgICAgJWVheCwgKCVlZGkpICAgICAgICAgICAgIC8qIHdyaXRlIDEwIHJvdyBwYXR0ZXJuIEAgMTAgcm93IHdyYXAgYWRyICovCisJbW92bCAgICAoJWVkaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworIC8qCisgICogcmVhZCBkYXRhIEAgcm93IDEyIHdyYXAgYWRyIHRvIGRldGVybWluZSAgKiBiYW5rcywKKyAgKiBhbmQgcmVhZCBkYXRhIEAgcm93IDE0IHdyYXAgYWRyIHRvIGRldGVybWluZSAgKiByb3dzLgorICAqIGlmIGRhdGEgQCByb3cgMTIgd3JhcCBhZHIgaXMgbm90IEFBLCAxMSBvciAxMiB3ZSBoYXZlIGJhZCBSQU0uCisgICogaWYgZGF0YSBAIHJvdyAxMiB3cmFwID09IEFBLCB3ZSBvbmx5IGhhdmUgMiBiYW5rcywgTk9UIDQKKyAgKiBpZiBkYXRhIEAgcm93IDEyIHdyYXAgPT0gMTEgb3IgMTIsIHdlIGhhdmUgNCBiYW5rcywKKyAgKi8KKwl4b3J3ICAgICVkaSwlZGkgICAgICAgICAgICAgICAgICAvKiB2YWx1ZSBmb3IgMiBiYW5rcyBpbiBESSAqLworCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIHJlYWQgZnJvbSAxMiByb3cgd3JhcCB0byBjaGVjayBiYW5rcworCQkJCQkgICogKGVzaSBpcyBzZXR1cCBmcm9tIHRoZSB3cml0ZSB0byByb3cgMTIgd3JhcCkgKi8KKwljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiBjaGVjayBmb3IgQUEgcGF0dGVybiAgKGVheCBob2xkcyB0aGUgYWEgcGF0dGVybikgKi8KKwlqeiAgICAgIG9ubHkyICAgICAgICAgICAgICAgICAgICAvKiBpZiBwYXR0ZXJuID09IEFBLCB3ZSBvbmx5IGhhdmUgMiBiYW5rcyAqLworCisJLyogNCBiYW5rcyAqLworCisJbW92dyAgICAkOCwlZGkgICAgICAgICAgICAgICAgICAgLyogdmFsdWUgZm9yIDQgYmFua3MgaW4gREkgKEJOS19DTlQgYml0KSAqLworCWNtcGwgICAgJFJPVzExX0RBVEEsICVlYnggICAgICAgIC8qIG9ubHkgb3RoZXIgbGVnaXRpbWF0ZSB2YWx1ZXMgYXJlIDExICovCisJanogICAgICBvbmx5MgorCWNtcGwgICAgJFJPVzEyX0RBVEEsICVlYnggICAgICAgIC8qIGFuZCAxMiAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIGl0cyBiYWQgaWYgbm90IDExIG9yIDEyISAqLworCisJLyogZmFsbCB0aHJvdWdoICovCitvbmx5MjoKKyAvKgorICAqIHZhbGlkYXRlIHJvdyBtYXNrCisgICovCisJbW92bCAgICAkUk9XMTRfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgYmFjayB0byBtYXggcm93IHdyYXAgYWRkciAqLworCW1vdmwgICAgKCVlc2kpLCAlZWF4ICAgICAgICAgICAgIC8qIHJlYWQgYWN0dWFsIG51bWJlciBvZiByb3dzIEAgcm93MTQgYWRyICovCisKKwljbXBsICAgICRST1cxMV9EQVRBLCAlZWF4ICAgICAgICAvKiByb3cgbXVzdCBiZSBncmVhdGVyIHRoYW4gMTEgcGF0dGVybiAqLworCWpiICAgICAgYmFkX3JhbQorCisJY21wbCAgICAkUk9XMTRfREFUQSwgJWVheCAgICAgICAgLyogYW5kIHJvdyBtdXN0IGJlIGxlc3MgdGhhbiAxNCBwYXR0ZXJuICovCisJamEgICAgICBiYWRfcmFtCisKKwljbXBiICAgICVhaCwlYWwgICAgICAgICAgICAgICAgICAvKiB2ZXJpZnkgYWxsIDQgYnl0ZXMgb2YgZHdvcmQgc2FtZSAqLworCWpueiAgICAgYmFkX3JhbQorCW1vdmwgICAgJWVheCwlZWJ4CisJc2hybCAgICAkMTYsJWVieAorCWNtcHcgICAgJWJ4LCVheAorCWpueiAgICAgYmFkX3JhbQorIC8qCisgICogcmVhZCBjb2wgMTEgd3JhcCBhZHIgZm9yIHJlYWwgY29sdW1uIGRhdGEgdmFsdWUKKyAgKi8KKwltb3ZsICAgICRDT0wxMV9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggY29sICgxMSkgd3JhcCBhZGRyICovCisJbW92bCAgICAoJWVzaSksICVlYXggICAgICAgICAgICAgLyogcmVhZCByZWFsIGNvbCBudW1iZXIgYXQgbWF4IGNvbCBhZHIgKi8KKyAvKgorICAqIHZhbGlkYXRlIGNvbHVtbiBkYXRhCisgICovCisJY21wbCAgICAkQ09MMDhfREFUQSwgJWVheCAgICAgICAgLyogY29sIG11c3QgYmUgZ3JlYXRlciB0aGFuIDggcGF0dGVybiAqLworCWpiICAgICAgYmFkX3JhbQorCisJY21wbCAgICAkQ09MMTFfREFUQSwgJWVheCAgICAgICAgLyogYW5kIHJvdyBtdXN0IGJlIGxlc3MgdGhhbiAxMSBwYXR0ZXJuICovCisJamEgICAgICBiYWRfcmFtCisKKwlzdWJsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBub3JtYWxpemUgY29sdW1uIGRhdGEgdG8gemVybyAqLworCWpjICAgICAgYmFkX3JhbQorCWNtcGIgICAgJWFoLCVhbCAgICAgICAgICAgICAgICAgIC8qIHZlcmlmeSBhbGwgNCBieXRlcyBvZiBkd29yZCBlcXVhbCAqLworCWpueiAgICAgYmFkX3JhbQorCW1vdmwgICAgJWVheCwlZWR4CisJc2hybCAgICAkMTYsJWVkeAorCWNtcHcgICAgJWR4LCVheAorCWpueiAgICAgYmFkX3JhbQorIC8qCisgICogbWVyZ2UgYmFuayBhbmQgY29sIGRhdGEgdG9nZXRoZXIKKyAgKi8KKwlhZGR3ICAgICVkaSwlZHggICAgICAgICAgICAgICAgICAvKiBtZXJnZSBvZiBiYW5rIGFuZCBjb2wgaW5mbyBpbiBkbCAqLworIC8qCisgICogZml4IGVuZGluZyBhZGRyIG1hc2sgYmFzZWQgdXBvbiBjb2wgaW5mbworICAqLworCW1vdmIgICAgJDMsJWFsCisJc3ViYiAgICAlZGgsJWFsICAgICAgICAgICAgICAgICAgLyogZGggY29udGFpbnMgdGhlIG92ZXJmbG93IGZyb20gdGhlIGJhbmsvY29sIG1lcmdlICAqLworCW1vdmIgICAgJWJsLCVkaCAgICAgICAgICAgICAgICAgIC8qIGJsIGNvbnRhaW5zIHRoZSByb3cgbWFzayAoYWEsIDA3LCAwZiwgMWYgb3IgM2YpICovCisJeGNoZ3cgICAlY3gsJWF4ICAgICAgICAgICAgICAgICAgLyogY3ggPSBheCA9IDMgb3IgMiBkZXBlbmRpbmcgb24gMiBvciA0IGJhbmsgZGV2aWNlICovCisJc2hyYiAgICAlY2wsJWRoCSAgICAgICAgICAgICAgICAgLyogICovCisJaW5jYiAgICAlZGggICAgICAgICAgICAgICAgICAgICAgLyogZW5kaW5nIGFkZHIgaXMgMSBncmVhdGVyIHRoYW4gcmVhbCBlbmQgKi8KKwl4Y2hndyAgICVjeCwlYXggICAgICAgICAgICAgICAgICAvKiBjeCBpcyBiYW5rIG51bWJlciBhZ2FpbiAqLworIC8qCisgICogaXNzdWUgYWxsIGJhbmtzIHByZWNoYXJnZQorICAqLworYmFkX3JlaW50OgorCW1vdmwgICAgJERSQ0NUTCwgJWVzaSAgICAgICAgICAgIC8qIHNldHVwIERSQU0gY29udHJvbCByZWdpc3RlciB3aXRoICovCisJbW92YiAgICAkMHgyLCVhbCAgICAgICAgICAgICAgICAgLyogQWxsIGJhbmtzIHByZWNoYXJnZSAqLworCW1vdmIgICAgICVhbCwgKCVlc2kpCisJbW92bCAgICAkQ0FDSEVMSU5FU1osICVlc2kgICAgICAgLyogYWRkcmVzcyB0byBpbml0IHJlYWQgYnVmZmVyICovCisJbW92dyAgICAgJWF4LCAoJWVzaSkKKworIC8qCisgICogdXBkYXRlIEVORElORyBBRERSRVNTIFJFR0lTVEVSCisgICovCisJbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogRFJBTSBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLworCW1vdmwgICAgJWVjeCwlZWJ4CisJYWRkbAklZWJ4LCAlZWRpCisJbW92YiAgICAlZGgsICglZWRpKQorIC8qCisgICogdXBkYXRlIENPTkZJRyBSRUdJU1RFUgorICAqLworCXhvcmIgICAgJWRoLCVkaAorCW1vdncgICAgJDB4MDBmLCVieAorCW1vdncgICAgJWN4LCVheAorCXNobHcgICAgJDIsJWF4CisJeGNoZ3cgICAlY3gsJWF4CisJc2hsdyAgICAlY2wsJWR4CisJc2hsdyAgICAlY2wsJWJ4CisJbm90dyAgICAlYngKKwl4Y2hndyAgICVjeCwlYXgKKwltb3ZsICAgICREUkNDRkcsICVlZGkKKwltb3YgICAgICglZWRpKSwgJWF4CisJYW5kdyAgICAlYngsJWF4CisJb3J3ICAgICAlZHgsJWF4CisJbW92dyAgICAlYXgsICglZWRpKQorCWpjeHogICAgY2xlYW51cAorCisJZGVjdyAgICAlY3gKKwltb3ZsICAgICVlY3gsJWVieAorCW1vdmwgICAgJERSQ0JFTkRBRFIsICVlZGkgICAgICAgIC8qIERSQU0gZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKwltb3ZiICAgICQweGZmLCVhbAorCWFkZGwJJWVieCwgJWVkaQorCW1vdmIgICAgJWFsLCAoJWVkaSkKKyAvKgorICAqIHNldCBjb250cm9sIHJlZ2lzdGVyIHRvIE5PUk1BTCBtb2RlCisgICovCisJbW92bCAgICAkRFJDQ1RMLCAlZXNpICAgICAgICAgICAgLyogc2V0dXAgRFJBTSBjb250cm9sIHJlZ2lzdGVyIHdpdGggKi8KKwltb3ZiICAgICQweDAsJWFsICAgICAgICAgICAgICAgICAvKiBOb3JtYWwgbW9kZSB2YWx1ZSAqLworCW1vdmIgICAgJWFsLCAoJWVzaSkKKwltb3ZsICAgICRDQUNIRUxJTkVTWiwgJWVzaSAgICAgICAvKiBhZGRyZXNzIHRvIGluaXQgcmVhZCBidWZmZXIgKi8KKwltb3Z3ICAgICVheCwgKCVlc2kpCisJam1wICAgICBuZXh0YmFuaworCitjbGVhbnVwOgorCW1vdmwgICAgJERSQ0JFTkRBRFIsICVlZGkgICAgICAgIC8qIERSQU0gZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgICovCisJbW92dyAgICAkNCwlY3gKKwl4b3J3ICAgICVheCwlYXgKK2NsZWFudXBscDoKKwltb3ZiICAgKCVlZGkpLCAlYWwKKwlvcmIgICAgICVhbCwlYWwKKwlqeiAgICAgIGVtcHR5YmFuaworCisJYWRkYiAgICAlYWgsJWFsCisJam5zICAgICBub3R0b29tdWNoCisKKwltb3ZiICAgICQweDdmLCVhbAorbm90dG9vbXVjaDoKKwltb3ZiICAgICVhbCwlYWgKKwlvcmIgICAgICQweDgwLCVhbAorCW1vdmIgICAgJWFsLCAoJWVkaSkKK2VtcHR5YmFuazoKKwlpbmNsICAgICVlZGkKKwlsb29wICAgIGNsZWFudXBscAorCisjaWYgZGVmaW5lZCBDT05GSUdfU1lTX1NEUkFNX0RSQ1RNQ1RMCisJLyoganVzdCBoYXZlIHlvdXIgaGFyZHdhcmUgZGVzaW5nZXIgX0dJVkVfIHlvdSB3aGF0IHlvdSBuZWVkIGhlcmUhICovCisJbW92bCAgICAkRFJDVE1DVEwsICVlZGkKKwltb3ZiICAgICRDT05GSUdfU1lTX1NEUkFNX0RSQ1RNQ1RMLCVhbAorCW1vdmIgICAgKCVlZGkpLCAlYWwKKyNlbHNlCisjaWYgZGVmaW5lZChDT05GSUdfU1lTX1NEUkFNX0NBU19MQVRFTkNZXzJUKSB8fCBkZWZpbmVkKENPTkZJR19TWVNfU0RSQU1fQ0FTX0xBVEVOQ1lfM1QpCisJLyogc2V0IHRoZSBDQVMgbGF0ZW5jeSBub3cgc2luY2UgaXQgaXMgaGFyZCB0byBkbworCSAqIHdoZW4gd2UgcnVuIGZyb20gdGhlIFJBTSAqLworCW1vdmwgICAgJERSQ1RNQ1RMLCAlZWRpICAgICAgICAgIC8qIERSQU0gdGltaW5nIHJlZ2lzdGVyICovCisJbW92YiAgICAoJWVkaSksICVhbAorI2lmZGVmIENPTkZJR19TWVNfU0RSQU1fQ0FTX0xBVEVOQ1lfMlQKKwlhbmRiICAgICQweGVmLCAlYWwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TWVNfU0RSQU1fQ0FTX0xBVEVOQ1lfM1QKKwlvcmIgICAgICQweDEwLCAlYWwKKyNlbmRpZgorCW1vdmIgICAgJWFsLCAoJWVkaSkKKyNlbmRpZgorI2VuZGlmCisJbW92bCAgICAkRFJDQ1RMLCAlZWRpICAgICAgICAgICAgLyogRFJBTSBDb250cm9sIHJlZ2lzdGVyICovCisJbW92YiAgICAkMHgzLCVhbCAgICAgICAgICAgICAgICAgLyogTG9hZCBtb2RlIHJlZ2lzdGVyIGNtZCAqLworCW1vdmIgICAgICVhbCwgKCVlZGkpCisJbW92dyAgICAgJWF4LCAoJWVzaSkKKworCisJbW92bCAgICAkRFJDQ1RMLCAlZWRpICAgICAgICAgICAgLyogRFJBTSBDb250cm9sIHJlZ2lzdGVyICovCisJbW92YiAgICAkMHgxOCwlYWwgICAgICAgICAgICAgICAgLyogIEVuYWJsZSByZWZyZXNoIGFuZCBOT1JNQUwgbW9kZSAqLworCW1vdmIgICAgJWFsLCAoJWVkaSkKKworCWptcCAgICAgZHJhbV9kb25lCisKK2JhZF9yYW06CisJeG9ybCAgICAlZWR4LCVlZHgKKwl4b3JsICAgICVlZGksJWVkaQorCWptcCAgICAgYmFkX3JlaW50CisKK2RyYW1fZG9uZToKKworCS8qIHJlYWRiYWNrIERSQ0JFTkRBRFIgYW5kIHJldHVybiB0aGUgbnVtYmVyCisJICogb2YgYXZhaWxhYmxlIHJhbSBieXRlcyBpbiAlZWF4ICovCisKKwltb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBEUkFNIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICAqLworCisJbW92bAkoJWVkaSksICVlYXgKKwltb3ZsCSVlYXgsICVlY3gKKwlhbmRsCSQweDgwMDAwMDAwLCAlZWN4CisJanoJYmFuazIKKwlhbmRsCSQweDdmMDAwMDAwLCAlZWF4CisJc2hybAkkMiwgJWVheAorCW1vdmwJJWVheCwgJWVieAorCitiYW5rMjoJbW92bAkoJWVkaSksICVlYXgKKwltb3ZsCSVlYXgsICVlY3gKKwlhbmRsCSQweDAwODAwMDAwLCAlZWN4CisJanoJYmFuazEKKwlhbmRsCSQweDAwN2YwMDAwLCAlZWF4CisJc2hsbAkkNiwgJWVheAorCW1vdmwJJWVheCwgJWVieAorCitiYW5rMToJbW92bAkoJWVkaSksICVlYXgKKwltb3ZsCSVlYXgsICVlY3gKKwlhbmRsCSQweDAwMDA4MDAwLCAlZWN4CisJanoJYmFuazAKKwlhbmRsCSQweDAwMDA3ZjAwLCAlZWF4CisJc2hsbAkkMTQsICVlYXgKKwltb3ZsCSVlYXgsICVlYngKKworYmFuazA6CW1vdmwJKCVlZGkpLCAlZWF4CisJbW92bAklZWF4LCAlZWN4CisJYW5kbAkkMHgwMDAwMDA4MCwgJWVjeAorCWp6CWRvbmUKKwlhbmRsCSQweDAwMDAwMDdmLCAlZWF4CisJc2hsbAkkMjIsICVlYXgKKwltb3ZsCSVlYXgsICVlYngKKworCitkb25lOgorCW1vdmwJJWVieCwgJWVheAorCisjaWYgQ09ORklHX1NZU19TRFJBTV9FQ0NfRU5BQkxFCisJLyogQSBub21pbmFsIG1lbW9yeSB0ZXN0OiBqdXN0IGEgYnl0ZSBhdCBlYWNoIGFkZHJlc3MgbGluZSAqLworCW1vdmwgICAgJWVheCwgJWVjeAorCXNocmwgICAgJDB4MSwgJWVjeAorCW1vdmwJJDB4MSwgJWVkaQorbWVtdGVzdDA6CisJbW92YgkkMHhhNSwgKCVlZGkpCisJY21wYiAgICAkMHhhNSwgKCVlZGkpCisJam5lCW91dAorCXNocmwJJDEsICVlY3gKKwlhbmRsCSVlY3gsJWVjeAorCWp6CXNldF9lY2MKKwlzaGxsCSQxLCAlZWRpCisJam1wCW1lbXRlc3QwCisKK3NldF9lY2M6CisJLyogY2xlYXIgYWxsIHJhbSB3aXRoIGEgbWVtc2V0ICovCisJbW92bAklZWF4LCAlZWN4CisJeG9ybAklZXNpLCAlZXNpCisJeG9ybAklZWRpLCAlZWRpCisJeG9ybAklZWF4LCAlZWF4CisJc2hybAkkMiwgJWVjeAorCWNsZAorCXJlcAlzdG9zbAorCQkJLyogZW5hYmxlIHJlYWQsIHdyaXRlIGJ1ZmZlcnMgKi8KKwltb3ZiICAgICQweDExLCAlYWwKKwltb3ZsICAgICREQkNUTCwgJWVkaQorCW1vdmIgICAgJWFsLCAoJWVkaSkKKwkJCS8qIGVuYWJsZSBOTUkgbWFwcGluZyBmb3IgRUNDICovCisJbW92bCAgICAkRUNDSU5ULCAlZWRpCisJbW92CSQweDEwLCAlYWwKKwltb3ZiICAgICVhbCwgKCVlZGkpCisJCQkvKiBUdXJuIG9uIEVDQyAqLworCW1vdmwgICAgJEVDQ0NUTCwgJWVkaQorCW1vdgkkMHgwNSwgJWFsCisJbW92YiAgICAlYWwsICglZWRpKQorI2VuZGlmCitvdXQ6CisJbW92bAklZWJ4LCAlZWF4CisJam1wCSolZWJwCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvY3B1L3NjNTIwL3NjNTIwX3BjaS5jIGIvYXJjaC9pMzg2L2NwdS9zYzUyMC9zYzUyMF9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDQ2YzZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pMzg2L2NwdS9zYzUyMC9zYzUyMF9wY2kuYwpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIgPGRhbmllbEBvbWljcm9uLnNlPi4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKiBzdHVmZiBzcGVjaWZpYyBmb3IgdGhlIHNjNTIwLCBidXQgaW5kZXBlbmRlbnQgb2YgaW1wbGVtZW50YXRpb24gKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPHBjaS5oPgorI2luY2x1ZGUgPGFzbS9wY2kuaD4KKyNpbmNsdWRlIDxhc20vaWMvc2M1MjAuaD4KKworc3RhdGljIHN0cnVjdCB7CisJdTggcHJpb3JpdHk7CisJdTE2IGxldmVsX3JlZzsKKwl1OCBsZXZlbF9iaXQ7Cit9IHNjNTIwX2lycVtdID0geworCXsgU0M1MjBfSVJRMCwgIDAsIDB4MDEgfSwKKwl7IFNDNTIwX0lSUTEsICAwLCAweDAyIH0sCisJeyBTQzUyMF9JUlEyLCAgMSwgMHgwMiB9LAorCXsgU0M1MjBfSVJRMywgIDAsIDB4MDggfSwKKwl7IFNDNTIwX0lSUTQsICAwLCAweDEwIH0sCisJeyBTQzUyMF9JUlE1LCAgMCwgMHgyMCB9LAorCXsgU0M1MjBfSVJRNiwgIDAsIDB4NDAgfSwKKwl7IFNDNTIwX0lSUTcsICAwLCAweDgwIH0sCisKKwl7IFNDNTIwX0lSUTgsICAxLCAweDAxIH0sCisJeyBTQzUyMF9JUlE5LCAgMSwgMHgwMiB9LAorCXsgU0M1MjBfSVJRMTAsIDEsIDB4MDQgfSwKKwl7IFNDNTIwX0lSUTExLCAxLCAweDA4IH0sCisJeyBTQzUyMF9JUlExMiwgMSwgMHgxMCB9LAorCXsgU0M1MjBfSVJRMTMsIDEsIDB4MjAgfSwKKwl7IFNDNTIwX0lSUTE0LCAxLCAweDQwIH0sCisJeyBTQzUyMF9JUlExNSwgMSwgMHg4MCB9Cit9OworCisKKy8qIFRoZSBpbnRlcnJ1cHQgdXNlZCBmb3IgUENJIElOVEEtSU5URCAgKi8KK2ludCBzYzUyMF9wY2lfaW50c1sxNV0gPSB7CisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMQorfTsKKworLyogdXRpbGl0eSBmdW5jdGlvbiB0byBjb25maWd1cmUgYSBwY2kgaW50ZXJydXB0ICovCitpbnQgcGNpX3NjNTIwX3NldF9pcnEoaW50IHBjaV9waW4sIGludCBpcnEpCit7CisJaW50IGk7CisKKyMgaWYgMQorCXByaW50Zigic2V0X2lycSgpOiBtYXAgSU5UJWMgdG8gSVJRJWRcbiIsIHBjaV9waW4gKyAnQScsIGlycSk7CisjZW5kaWYKKwlpZiAoaXJxIDwgMCB8fCBpcnEgPiAxNSkgeworCQlyZXR1cm4gLTE7IC8qIGlsbGVnYWwgaXJxICovCisJfQorCisJaWYgKHBjaV9waW4gPCAwIHx8IHBjaV9waW4gPiAxNSkgeworCQlyZXR1cm4gLTE7IC8qIGlsbGVnYWwgcGNpIGludCBwaW4gKi8KKwl9CisKKwkvKiBmaXJzdCBkaXNhYmxlIGFueSBub24tcGNpIGludGVycnVwdCBzb3VyY2UgdGhhdCB1c2UKKwkgKiB0aGlzIGxldmVsICovCisKKwkvKiBQQ0kgaW50ZXJydXB0IG1hcHBpbmcgKEEgdGhyb3VnaCBEKSovCisJZm9yIChpPTA7IGk8PTMgO2krKykgeworCQlpZiAoc2M1MjBfbW1jci0+cGNpX2ludF9tYXBbaV0gPT0gc2M1MjBfaXJxW2lycV0ucHJpb3JpdHkpCisJCQlzYzUyMF9tbWNyLT5wY2lfaW50X21hcFtpXSA9IFNDNTIwX0lSUV9ESVNBQkxFRDsKKwl9CisKKwkvKiBHUCBJUlEgaW50ZXJydXB0IG1hcHBpbmcgKi8KKwlmb3IgKGk9MDsgaTw9MTAgO2krKykgeworCQlpZiAoc2M1MjBfbW1jci0+Z3BfaW50X21hcFtpXSA9PSBzYzUyMF9pcnFbaXJxXS5wcmlvcml0eSkKKwkJCXNjNTIwX21tY3ItPmdwX2ludF9tYXBbaV0gPSBTQzUyMF9JUlFfRElTQUJMRUQ7CisJfQorCisJLyogU2V0IHRoZSB0cmlnZ2VyIHRvIGxldmVsICovCisJc2M1MjBfbW1jci0+cGljX21vZGVbc2M1MjBfaXJxW2lycV0ubGV2ZWxfcmVnXSA9CisJCXNjNTIwX21tY3ItPnBpY19tb2RlW3NjNTIwX2lycVtpcnFdLmxldmVsX3JlZ10gfCBzYzUyMF9pcnFbaXJxXS5sZXZlbF9iaXQ7CisKKworCWlmIChwY2lfcGluIDwgNCkgeworCQkvKiBQQ0kgSU5UQS1JTlREICovCisJCS8qIHJvdXRlIHRoZSBpbnRlcnJ1cHQgKi8KKwkJc2M1MjBfbW1jci0+cGNpX2ludF9tYXBbcGNpX3Bpbl0gPSBzYzUyMF9pcnFbaXJxXS5wcmlvcml0eTsKKwl9IGVsc2UgeworCQkvKiBHUElSUTAtR1BJUlExMCB1c2VkIGZvciBhZGRpdGlvbmFsIFBDSSBJTlRTICovCisJCXNjNTIwX21tY3ItPmdwX2ludF9tYXBbcGNpX3BpbiAtIDRdID0gc2M1MjBfaXJxW2lycV0ucHJpb3JpdHk7CisKKwkJLyogYWxzbyBzZXQgdGhlIHBvbGFyaXR5IGluIHRoaXMgY2FzZSAqLworCQlzYzUyMF9tbWNyLT5pbnRwaW5wb2wgPSBzYzUyMF9tbWNyLT5pbnRwaW5wb2wgfCAoMSA8PCAocGNpX3Bpbi00KSk7CisJfQorCisJLyogcmVnaXN0ZXIgdGhlIHBpbiAqLworCXNjNTIwX3BjaV9pbnRzW3BjaV9waW5dID0gaXJxOworCisKKwlyZXR1cm4gMDsgLyogT0sgKi8KK30KKwordm9pZCBwY2lfc2M1MjBfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisJaG9zZS0+Zmlyc3RfYnVzbm8gPSAwOworCWhvc2UtPmxhc3RfYnVzbm8gPSAweGZmOworCisJLyogU3lzdGVtIG1lbW9yeSBzcGFjZSAqLworCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAwLAorCQkgICAgICAgU0M1MjBfUENJX01FTU9SWV9CVVMsCisJCSAgICAgICBTQzUyMF9QQ0lfTUVNT1JZX1BIWVMsCisJCSAgICAgICBTQzUyMF9QQ0lfTUVNT1JZX1NJWkUsCisJCSAgICAgICBQQ0lfUkVHSU9OX01FTSB8IFBDSV9SRUdJT05fU1lTX01FTU9SWSk7CisKKwkvKiBQQ0kgbWVtb3J5IHNwYWNlICovCisJcGNpX3NldF9yZWdpb24oaG9zZS0+cmVnaW9ucyArIDEsCisJCSAgICAgICBTQzUyMF9QQ0lfTUVNX0JVUywKKwkJICAgICAgIFNDNTIwX1BDSV9NRU1fUEhZUywKKwkJICAgICAgIFNDNTIwX1BDSV9NRU1fU0laRSwKKwkJICAgICAgIFBDSV9SRUdJT05fTUVNKTsKKworCS8qIElTQS9QQ0kgbWVtb3J5IHNwYWNlICovCisJcGNpX3NldF9yZWdpb24oaG9zZS0+cmVnaW9ucyArIDIsCisJCSAgICAgICBTQzUyMF9JU0FfTUVNX0JVUywKKwkJICAgICAgIFNDNTIwX0lTQV9NRU1fUEhZUywKKwkJICAgICAgIFNDNTIwX0lTQV9NRU1fU0laRSwKKwkJICAgICAgIFBDSV9SRUdJT05fTUVNKTsKKworCS8qIFBDSSBJL08gc3BhY2UgKi8KKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMywKKwkJICAgICAgIFNDNTIwX1BDSV9JT19CVVMsCisJCSAgICAgICBTQzUyMF9QQ0lfSU9fUEhZUywKKwkJICAgICAgIFNDNTIwX1BDSV9JT19TSVpFLAorCQkgICAgICAgUENJX1JFR0lPTl9JTyk7CisKKwkvKiBJU0EvUENJIEkvTyBzcGFjZSAqLworCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyA0LAorCQkgICAgICAgU0M1MjBfSVNBX0lPX0JVUywKKwkJICAgICAgIFNDNTIwX0lTQV9JT19QSFlTLAorCQkgICAgICAgU0M1MjBfSVNBX0lPX1NJWkUsCisJCSAgICAgICBQQ0lfUkVHSU9OX0lPKTsKKworCWhvc2UtPnJlZ2lvbl9jb3VudCA9IDU7CisKKwlwY2lfc2V0dXBfdHlwZTEoaG9zZSwKKwkJCVNDNTIwX1JFR19BRERSLAorCQkJU0M1MjBfUkVHX0RBVEEpOworCisJcGNpX3JlZ2lzdGVyX2hvc2UoaG9zZSk7CisKKwlob3NlLT5sYXN0X2J1c25vID0gcGNpX2hvc2Vfc2Nhbihob3NlKTsKKworCS8qIGVuYWJsZSB0YXJnZXQgbWVtb3J5IGFjY2VzZXMgb24gaG9zdCBicmlnZSAqLworCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfQ09NTUFORCwKKwkJCSAgICAgIFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUik7CisKK30KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9jcHUvc2M1MjAvc2M1MjBfc3NpLmMgYi9hcmNoL2kzODYvY3B1L3NjNTIwL3NjNTIwX3NzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYmUxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2kzODYvY3B1L3NjNTIwL3NjNTIwX3NzaS5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCIDxkYW5pZWxAb21pY3Jvbi5zZT4uCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyogc3R1ZmYgc3BlY2lmaWMgZm9yIHRoZSBzYzUyMCwgYnV0IGluZGVwZW5kZW50IG9mIGltcGxlbWVudGF0aW9uICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaWMvc3NpLmg+CisjaW5jbHVkZSA8YXNtL2ljL3NjNTIwLmg+CisKK2ludCBzc2lfc2V0X2ludGVyZmFjZShpbnQgZnJlcSwgaW50IGxzYl9maXJzdCwgaW50IGludl9jbG9jaywgaW50IGludl9waGFzZSkKK3sKKwl1OCB0ZW1wPTA7CisKKwlpZiAoZnJlcSA+PSA4MTkyKSB7CisJCXRlbXAgfD0gQ1RMX0NMS19TRUxfNDsKKwl9IGVsc2UgaWYgKGZyZXEgPj0gNDA5NikgeworCQl0ZW1wIHw9IENUTF9DTEtfU0VMXzg7CisJfSBlbHNlIGlmIChmcmVxID49IDIwNDgpIHsKKwkJdGVtcCB8PSBDVExfQ0xLX1NFTF8xNjsKKwl9IGVsc2UgaWYgKGZyZXEgPj0gMTAyNCkgeworCQl0ZW1wIHw9IENUTF9DTEtfU0VMXzMyOworCX0gZWxzZSBpZiAoZnJlcSA+PSA1MTIpIHsKKwkJdGVtcCB8PSBDVExfQ0xLX1NFTF82NDsKKwl9IGVsc2UgaWYgKGZyZXEgPj0gMjU2KSB7CisJCXRlbXAgfD0gQ1RMX0NMS19TRUxfMTI4OworCX0gZWxzZSBpZiAoZnJlcSA+PSAxMjgpIHsKKwkJdGVtcCB8PSBDVExfQ0xLX1NFTF8yNTY7CisJfSBlbHNlIHsKKwkJdGVtcCB8PSBDVExfQ0xLX1NFTF81MTI7CisJfQorCisJaWYgKCFsc2JfZmlyc3QpIHsKKwkJdGVtcCB8PSBNU0JGX0VOQjsKKwl9CisKKwlpZiAoaW52X2Nsb2NrKSB7CisJCXRlbXAgfD0gQ0xLX0lOVl9FTkI7CisJfQorCisJaWYgKGludl9waGFzZSkgeworCQl0ZW1wIHw9IFBIU19JTlZfRU5COworCX0KKworCXNjNTIwX21tY3ItPnNzaWN0bCA9IHRlbXA7CisKKwlyZXR1cm4gMDsKK30KKwordTggc3NpX3R4cnhfYnl0ZSh1OCBkYXRhKQoreworCXNjNTIwX21tY3ItPnNzaXhtaXQgPSBkYXRhOworCXdoaWxlIChzYzUyMF9tbWNyLT5zc2lzdGEgJiBTU0lTVEFfQlNZKTsKKwlzYzUyMF9tbWNyLT5zc2ljbWQgPSBTU0lDTURfQ01EX1NFTF9YTUlUUkNWOworCXdoaWxlIChzYzUyMF9tbWNyLT5zc2lzdGEgJiBTU0lTVEFfQlNZKTsKKworCXJldHVybiBzYzUyMF9tbWNyLT5zc2lyY3Y7Cit9CisKKwordm9pZCBzc2lfdHhfYnl0ZSh1OCBkYXRhKQoreworCXNjNTIwX21tY3ItPnNzaXhtaXQgPSBkYXRhOworCXdoaWxlIChzYzUyMF9tbWNyLT5zc2lzdGEgJiBTU0lTVEFfQlNZKTsKKwlzYzUyMF9tbWNyLT5zc2ljbWQgPSBTU0lDTURfQ01EX1NFTF9YTUlUOworfQorCit1OCBzc2lfcnhfYnl0ZSh2b2lkKQoreworCXdoaWxlIChzYzUyMF9tbWNyLT5zc2lzdGEgJiBTU0lTVEFfQlNZKTsKKwlzYzUyMF9tbWNyLT5zc2ljbWQgPSBTU0lDTURfQ01EX1NFTF9SQ1Y7CisJd2hpbGUgKHNjNTIwX21tY3ItPnNzaXN0YSAmIFNTSVNUQV9CU1kpOworCisJcmV0dXJuIHNjNTIwX21tY3ItPnNzaXJjdjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9jcHUvc2M1MjAvc2M1MjBfdGltZXIuYyBiL2FyY2gvaTM4Ni9jcHUvc2M1MjAvc2M1MjBfdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2I1YjU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pMzg2L2NwdS9zYzUyMC9zYzUyMF90aW1lci5jCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCIDxkYW5pZWxAb21pY3Jvbi5zZT4uCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyogc3R1ZmYgc3BlY2lmaWMgZm9yIHRoZSBzYzUyMCwgYnV0IGluZGVwZW5kZW50IG9mIGltcGxlbWVudGF0aW9uICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL2ljL3NjNTIwLmg+CisKK3ZvaWQgc2M1MjBfdGltZXJfaXNyKHZvaWQpCit7CisJLyogQWNrIHRoZSBHUCBUaW1lciBJbnRlcnJ1cHQgKi8KKwlzYzUyMF9tbWNyLT5ncHRtcnN0YSA9IDB4MDI7Cit9CisKK2ludCB0aW1lcl9pbml0KHZvaWQpCit7CisJLyogUmVnaXN0ZXIgdGhlIFNDNTIwIHNwZWNpZmljIHRpbWVyIGludGVycnVwdCBoYW5kbGVyICovCisJcmVnaXN0ZXJfdGltZXJfaXNyIChzYzUyMF90aW1lcl9pc3IpOworCisJLyogSW5zdGFsbCBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgR1AgVGltZXIgMSAqLworCWlycV9pbnN0YWxsX2hhbmRsZXIgKDAsIHRpbWVyX2lzciwgTlVMTCk7CisKKwkvKiBNYXAgR1AgVGltZXIgMSB0byBNYXN0ZXIgUElDIElSMCAgKi8KKwlzYzUyMF9tbWNyLT5ncF90bXJfaW50X21hcFsxXSA9IDB4MDE7CisKKwkvKiBEaXNhYmxlIEdQIFRpbWVycyAxICYgMiAtIEFsbG93IGNvbmZpZ3VyYXRpb24gd3JpdGVzICovCisJc2M1MjBfbW1jci0+Z3B0bXIxY3RsID0gMHg0MDAwOworCXNjNTIwX21tY3ItPmdwdG1yMmN0bCA9IDB4NDAwMDsKKworCS8qIFJlc2V0IEdQIFRpbWVycyAxICYgMiAqLworCXNjNTIwX21tY3ItPmdwdG1yMWNudCA9IDB4MDAwMDsKKwlzYzUyMF9tbWNyLT5ncHRtcjJjbnQgPSAweDAwMDA7CisKKwkvKiBTZXR1cCBHUCBUaW1lciAyIGFzIGEgMTAwa0h6ICgxMHVzKSBwcmVzY2FsZXIgKi8KKwlzYzUyMF9tbWNyLT5ncHRtcjJtYXhjbXBhID0gODM7CisJc2M1MjBfbW1jci0+Z3B0bXIyY3RsID0gMHhjMDAxOworCisJLyogU2V0dXAgR1AgVGltZXIgMSBhcyBhIDEwMDAgSHogKDFtcykgaW50ZXJydXB0IGdlbmVyYXRvciAqLworCXNjNTIwX21tY3ItPmdwdG1yMW1heGNtcGEgPSAxMDA7CisJc2M1MjBfbW1jci0+Z3B0bXIxY3RsID0gMHhlMDA5OworCisJdW5tYXNrX2lycSAoMCk7CisKKwkvKiBDbGVhciB0aGUgR1AgVGltZXIgMSBzdGF0dXMgcmVnaXN0ZXIgdG8gZ2V0IHRoZSBzaG93IHJvbGxpbmcqLworCXNjNTIwX21tY3ItPmdwdG1yc3RhID0gMHgwMjsKKworCXJldHVybiAwOworfQorCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKK3sKKwlpbnQgbSA9IDA7CisJbG9uZyB1OworCWxvbmcgdGVtcDsKKworCXRlbXAgPSBzYzUyMF9tbWNyLT5zd3Rtcm1pbGxpOworCXRlbXAgPSBzYzUyMF9tbWNyLT5zd3Rtcm1pY3JvOworCisJZG8geworCQltICs9IHNjNTIwX21tY3ItPnN3dG1ybWlsbGk7CisJCXUgPSBzYzUyMF9tbWNyLT5zd3Rtcm1pY3JvICsgKG0gKiAxMDAwKTsKKwl9IHdoaWxlICh1IDwgdXNlYyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvY3B1L3NlcmlhbC5jIGIvYXJjaC9pMzg2L2NwdS9zZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzAyNWEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pMzg2L2NwdS9zZXJpYWwuYwpAQCAtMCwwICsxLDUwNiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlCisgKgorICogKEMpIENvcHlyaWdodCAyMDAwCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgKi8KKworLyoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgZHVhbC1saWNlbnNlZC4gIFlvdSBtYXkgdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgb3IgdW5kZXIgdGhlIGxpY2Vuc2UgYmVsb3cuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byB5b3UgYnkgSUJNIG9uIGFuIEFTLUlTCisgKiBiYXNpcy4gIEFueW9uZSByZWNlaXZpbmcgdGhpcyBzb3VyY2UgaXMgbGljZW5zZWQgdW5kZXIgSUJNCisgKiBjb3B5cmlnaHRzIHRvIHVzZSBpdCBpbiBhbnkgd2F5IGhlIG9yIHNoZSBkZWVtcyBmaXQsIGluY2x1ZGluZworICogY29weWluZyBpdCwgbW9kaWZ5aW5nIGl0LCBjb21waWxpbmcgaXQsIGFuZCByZWRpc3RyaWJ1dGluZyBpdCBlaXRoZXIKKyAqIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLiAgTm8gbGljZW5zZSB1bmRlciBJQk0gcGF0ZW50cyBvcgorICogcGF0ZW50IGFwcGxpY2F0aW9ucyBpcyB0byBiZSBpbXBsaWVkIGJ5IHRoZSBjb3B5cmlnaHQgbGljZW5zZS4KKyAqCisgKiBBbnkgdXNlciBvZiB0aGlzIHNvZnR3YXJlIHNob3VsZCB1bmRlcnN0YW5kIHRoYXQgSUJNIGNhbm5vdCBwcm92aWRlCisgKiB0ZWNobmljYWwgc3VwcG9ydCBmb3IgdGhpcyBzb2Z0d2FyZSBhbmQgd2lsbCBub3QgYmUgcmVzcG9uc2libGUgZm9yCisgKiBhbnkgY29uc2VxdWVuY2VzIHJlc3VsdGluZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBBbnkgcGVyc29uIHdobyB0cmFuc2ZlcnMgdGhpcyBzb3VyY2UgY29kZSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrCisgKiBtdXN0IGluY2x1ZGUgdGhlIElCTSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIHBhcmFncmFwaCwgYW5kIHRoZQorICogcHJlY2VkaW5nIHR3byBwYXJhZ3JhcGhzIGluIHRoZSB0cmFuc2ZlcnJlZCBzb2Z0d2FyZS4KKyAqCisgKiBDT1BZUklHSFQgICBJIEIgTSAgIENPUlBPUkFUSU9OIDE5OTUKKyAqIExJQ0VOU0VEIE1BVEVSSUFMICAtICBQUk9HUkFNIFBST1BFUlRZIE9GIEkgQiBNCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8d2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaWJtcGMuaD4KKworI2lmZGVmIENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTworI2luY2x1ZGUgPG1hbGxvYy5oPgorI2VuZGlmCisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisjZGVmaW5lIFVBUlRfUkJSICAgIDB4MDAKKyNkZWZpbmUgVUFSVF9USFIgICAgMHgwMAorI2RlZmluZSBVQVJUX0lFUiAgICAweDAxCisjZGVmaW5lIFVBUlRfSUlSICAgIDB4MDIKKyNkZWZpbmUgVUFSVF9GQ1IgICAgMHgwMgorI2RlZmluZSBVQVJUX0xDUiAgICAweDAzCisjZGVmaW5lIFVBUlRfTUNSICAgIDB4MDQKKyNkZWZpbmUgVUFSVF9MU1IgICAgMHgwNQorI2RlZmluZSBVQVJUX01TUiAgICAweDA2CisjZGVmaW5lIFVBUlRfU0NSICAgIDB4MDcKKyNkZWZpbmUgVUFSVF9ETEwgICAgMHgwMAorI2RlZmluZSBVQVJUX0RMTSAgICAweDAxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgTGluZSBTdGF0dXMgUmVnaXN0ZXIuCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIGFzeW5jTFNSRGF0YVJlYWR5MSAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgYXN5bmNMU1JPdmVycnVuRXJyb3IxICAgICAgICAgMHgwMgorI2RlZmluZSBhc3luY0xTUlBhcml0eUVycm9yMSAgICAgICAgICAweDA0CisjZGVmaW5lIGFzeW5jTFNSRnJhbWluZ0Vycm9yMSAgICAgICAgIDB4MDgKKyNkZWZpbmUgYXN5bmNMU1JCcmVha0ludGVycnVwdDEgICAgICAgMHgxMAorI2RlZmluZSBhc3luY0xTUlR4SG9sZEVtcHR5MSAgICAgICAgICAweDIwCisjZGVmaW5lIGFzeW5jTFNSVHhTaGlmdEVtcHR5MSAgICAgICAgIDB4NDAKKyNkZWZpbmUgYXN5bmNMU1JSeEZpZm9FcnJvcjEgICAgICAgICAgMHg4MAorCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRmlmbworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3QgeworCWNoYXIgKnJ4X2J1ZmZlcjsKKwl1bG9uZyByeF9wdXQ7CisJdWxvbmcgcnhfZ2V0OworCWludCBjdHM7Cit9IHNlcmlhbF9idWZmZXJfdDsKKwordm9sYXRpbGUgc2VyaWFsX2J1ZmZlcl90IGJ1Zl9pbmZvOworc3RhdGljIGludCBzZXJpYWxfYnVmZmVyX2FjdGl2ZT0wOworI2VuZGlmCisKKworc3RhdGljIGludCBzZXJpYWxfZGl2KGludCBiYXVkcmF0ZSkKK3sKKworCXN3aXRjaCAoYmF1ZHJhdGUpIHsKKwljYXNlIDEyMDA6CisJCXJldHVybiA5NjsKKwljYXNlIDk2MDA6CisJCXJldHVybiAxMjsKKwljYXNlIDE5MjAwOgorCQlyZXR1cm4gNjsKKwljYXNlIDM4NDAwOgorCQlyZXR1cm4gMzsKKwljYXNlIDU3NjAwOgorCQlyZXR1cm4gMjsKKwljYXNlIDExNTIwMDoKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDEyOworfQorCisKKy8qCisgKiBNaW5pbWFsIHNlcmlhbCBmdW5jdGlvbnMgbmVlZGVkIHRvIHVzZSBvbmUgb2YgdGhlIFNNQyBwb3J0cworICogYXMgc2VyaWFsIGNvbnNvbGUgaW50ZXJmYWNlLgorICovCisKK2ludCBzZXJpYWxfaW5pdCh2b2lkKQoreworCXZvbGF0aWxlIGNoYXIgdmFsOworCWludCBiZGl2ID0gc2VyaWFsX2RpdihnZC0+YmF1ZHJhdGUpOworCisJb3V0YigweDgwLCBVQVJUMF9CQVNFICsgVUFSVF9MQ1IpOwkvKiBzZXQgRExBQiBiaXQgKi8KKwlvdXRiKGJkaXYsIFVBUlQwX0JBU0UgKyBVQVJUX0RMTCk7CS8qIHNldCBiYXVkcmF0ZSBkaXZpc29yICovCisJb3V0YihiZGl2ID4+IDgsIFVBUlQwX0JBU0UgKyBVQVJUX0RMTSk7Lyogc2V0IGJhdWRyYXRlIGRpdmlzb3IgKi8KKwlvdXRiKDB4MDMsIFVBUlQwX0JBU0UgKyBVQVJUX0xDUik7CS8qIGNsZWFyIERMQUI7IHNldCA4IGJpdHMsIG5vIHBhcml0eSAqLworCW91dGIoMHgwMSwgVUFSVDBfQkFTRSArIFVBUlRfRkNSKTsJLyogZW5hYmxlIEZJRk8gKi8KKwlvdXRiKDB4MGIsIFVBUlQwX0JBU0UgKyBVQVJUX01DUik7CS8qIFNldCBEVFIgYW5kIFJUUyBhY3RpdmUgKi8KKwl2YWwgPSBpbmIoVUFSVDBfQkFTRSArIFVBUlRfTFNSKTsJLyogY2xlYXIgbGluZSBzdGF0dXMgKi8KKwl2YWwgPSBpbmIoVUFSVDBfQkFTRSArIFVBUlRfUkJSKTsJLyogcmVhZCByZWNlaXZlIGJ1ZmZlciAqLworCW91dGIoMHgwMCwgVUFSVDBfQkFTRSArIFVBUlRfU0NSKTsJLyogc2V0IHNjcmF0Y2hwYWQgKi8KKwlvdXRiKDB4MDAsIFVBUlQwX0JBU0UgKyBVQVJUX0lFUik7CS8qIHNldCBpbnRlcnJ1cHQgZW5hYmxlIHJlZyAqLworCisJcmV0dXJuIDA7Cit9CisKKwordm9pZCBzZXJpYWxfc2V0YnJnKHZvaWQpCit7CisJdW5zaWduZWQgc2hvcnQgYmRpdjsKKworCWJkaXYgPSBzZXJpYWxfZGl2KGdkLT5iYXVkcmF0ZSk7CisKKwlvdXRiKDB4ODAsIFVBUlQwX0JBU0UgKyBVQVJUX0xDUik7CS8qIHNldCBETEFCIGJpdCAqLworCW91dGIoYmRpdiYweGZmLCBVQVJUMF9CQVNFICsgVUFSVF9ETEwpOwkvKiBzZXQgYmF1ZHJhdGUgZGl2aXNvciAqLworCW91dGIoYmRpdiA+PiA4LCBVQVJUMF9CQVNFICsgVUFSVF9ETE0pOy8qIHNldCBiYXVkcmF0ZSBkaXZpc29yICovCisJb3V0YigweDAzLCBVQVJUMF9CQVNFICsgVUFSVF9MQ1IpOwkvKiBjbGVhciBETEFCOyBzZXQgOCBiaXRzLCBubyBwYXJpdHkgKi8KK30KKworCit2b2lkIHNlcmlhbF9wdXRjKGNvbnN0IGNoYXIgYykKK3sKKwlpbnQgaTsKKworCWlmIChjID09ICdcbicpCisJCXNlcmlhbF9wdXRjICgnXHInKTsKKworCS8qIGNoZWNrIFRIUkUgYml0LCB3YWl0IGZvciB0cmFuc21pdGVyIGF2YWlsYWJsZSAqLworCWZvciAoaSA9IDE7IGkgPCAzNTAwOyBpKyspIHsKKwkJaWYgKChpbmIgKFVBUlQwX0JBU0UgKyBVQVJUX0xTUikgJiAweDIwKSA9PSAweDIwKSB7CisJCQlicmVhazsKKwkJfQorCQl1ZGVsYXkoMTAwKTsKKwl9CisJb3V0YihjLCBVQVJUMF9CQVNFICsgVUFSVF9USFIpOwkvKiBwdXQgY2hhcmFjdGVyIG91dCAqLworfQorCisKK3ZvaWQgc2VyaWFsX3B1dHMoY29uc3QgY2hhciAqcykKK3sKKwl3aGlsZSAoKnMpIHsKKwkJc2VyaWFsX3B1dGMoKnMrKyk7CisJfQorfQorCisKK2ludCBzZXJpYWxfZ2V0Yyh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgc3RhdHVzID0gMDsKKworI2lmZGVmIENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTworCWlmIChzZXJpYWxfYnVmZmVyX2FjdGl2ZSkgeworCQlyZXR1cm4gc2VyaWFsX2J1ZmZlcmVkX2dldGMoKTsKKwl9CisjZW5kaWYKKworCXdoaWxlICgxKSB7CisjaWYgZGVmaW5lZChDT05GSUdfSFdfV0FUQ0hET0cpCisJCVdBVENIRE9HX1JFU0VUKCk7CS8qIFJlc2V0IEhXIFdhdGNoZG9nLCBpZiBuZWVkZWQgKi8KKyNlbmRpZgkvKiBDT05GSUdfSFdfV0FUQ0hET0cgKi8KKwkJc3RhdHVzID0gaW5iKFVBUlQwX0JBU0UgKyBVQVJUX0xTUik7CisJCWlmICgoc3RhdHVzICYgYXN5bmNMU1JEYXRhUmVhZHkxKSAhPSAweDApIHsKKwkJCWJyZWFrOworCQl9CisJCWlmICgoc3RhdHVzICYgKCBhc3luY0xTUkZyYW1pbmdFcnJvcjEgfAorCQkJCWFzeW5jTFNST3ZlcnJ1bkVycm9yMSB8CisJCQkJYXN5bmNMU1JQYXJpdHlFcnJvcjEgIHwKKwkJCQlhc3luY0xTUkJyZWFrSW50ZXJydXB0MSApKSAhPSAwKSB7CisJCQlvdXRiKGFzeW5jTFNSRnJhbWluZ0Vycm9yMSB8CisJCQkgICAgICBhc3luY0xTUk92ZXJydW5FcnJvcjEgfAorCQkJICAgICAgYXN5bmNMU1JQYXJpdHlFcnJvcjEgIHwKKwkJCSAgICAgIGFzeW5jTFNSQnJlYWtJbnRlcnJ1cHQxLCBVQVJUMF9CQVNFICsgVUFSVF9MU1IpOworCQl9CisJfQorCXJldHVybiAoMHgwMDAwMDBmZiAmIChpbnQpIGluYiAoVUFSVDBfQkFTRSkpOworfQorCisKK2ludCBzZXJpYWxfdHN0Yyh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCisjaWZkZWYgQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPCisJaWYgKHNlcmlhbF9idWZmZXJfYWN0aXZlKSB7CisJCXJldHVybiBzZXJpYWxfYnVmZmVyZWRfdHN0YygpOworCX0KKyNlbmRpZgorCisJc3RhdHVzID0gaW5iKFVBUlQwX0JBU0UgKyBVQVJUX0xTUik7CisJaWYgKChzdGF0dXMgJiBhc3luY0xTUkRhdGFSZWFkeTEpICE9IDB4MCkgeworCQlyZXR1cm4gKDEpOworCX0KKwlpZiAoKHN0YXR1cyAmICggYXN5bmNMU1JGcmFtaW5nRXJyb3IxIHwKKwkJCWFzeW5jTFNST3ZlcnJ1bkVycm9yMSB8CisJCQlhc3luY0xTUlBhcml0eUVycm9yMSAgfAorCQkJYXN5bmNMU1JCcmVha0ludGVycnVwdDEgKSkgIT0gMCkgeworCQlvdXRiKGFzeW5jTFNSRnJhbWluZ0Vycm9yMSB8CisJCSAgICAgIGFzeW5jTFNST3ZlcnJ1bkVycm9yMSB8CisJCSAgICAgIGFzeW5jTFNSUGFyaXR5RXJyb3IxICB8CisJCSAgICAgIGFzeW5jTFNSQnJlYWtJbnRlcnJ1cHQxLCBVQVJUMF9CQVNFICsgVUFSVF9MU1IpOworCX0KKwlyZXR1cm4gMDsKK30KKworCisjaWZkZWYgQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPCisKK3ZvaWQgc2VyaWFsX2lzcih2b2lkICphcmcpCit7CisJaW50IHNwYWNlOworCWludCBjOworCWludCByeF9wdXQgPSBidWZfaW5mby5yeF9wdXQ7CisKKwlpZiAoYnVmX2luZm8ucnhfZ2V0IDw9IHJ4X3B1dCkgeworCQlzcGFjZSA9IENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTyAtIChyeF9wdXQgLSBidWZfaW5mby5yeF9nZXQpOworCX0gZWxzZSB7CisJCXNwYWNlID0gYnVmX2luZm8ucnhfZ2V0IC0gcnhfcHV0OworCX0KKworCXdoaWxlIChpbmIoVUFSVDBfQkFTRSArIFVBUlRfTFNSKSAmIDEpIHsKKwkJYyA9IGluYihVQVJUMF9CQVNFKTsKKwkJaWYgKHNwYWNlKSB7CisJCQlidWZfaW5mby5yeF9idWZmZXJbcnhfcHV0KytdID0gYzsKKwkJCXNwYWNlLS07CisKKwkJCWlmIChyeF9wdXQgPT0gYnVmX2luZm8ucnhfZ2V0KSB7CisJCQkJYnVmX2luZm8ucnhfZ2V0Kys7CisJCQkJaWYgKHJ4X3B1dCA9PSBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8pIHsKKwkJCQkJYnVmX2luZm8ucnhfZ2V0ID0gMDsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChyeF9wdXQgPT0gQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPKSB7CisJCQkJcnhfcHV0ID0gMDsKKwkJCQlpZiAoMCA9PSBidWZfaW5mby5yeF9nZXQpIHsKKwkJCQkJYnVmX2luZm8ucnhfZ2V0ID0gMTsKKwkJCQl9CisKKwkJCX0KKworCQl9CisJCWlmIChzcGFjZSA8IENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTyAvIDQpIHsKKwkJCS8qIFN0b3AgZmxvdyBieSBzZXR0aW5nIFJUUyBpbmFjdGl2ZSAqLworCQkJb3V0YihpbmIoVUFSVDBfQkFTRSArIFVBUlRfTUNSKSAmICgweEZGIF4gMHgwMiksCisJCQkgICAgICBVQVJUMF9CQVNFICsgVUFSVF9NQ1IpOworCQl9CisJfQorCWJ1Zl9pbmZvLnJ4X3B1dCA9IHJ4X3B1dDsKK30KKwordm9pZCBzZXJpYWxfYnVmZmVyZWRfaW5pdCh2b2lkKQoreworCXNlcmlhbF9wdXRzICgiU3dpdGNoaW5nIHRvIGludGVycnVwdCBkcml2ZW4gc2VyaWFsIGlucHV0IG1vZGUuXG4iKTsKKwlidWZfaW5mby5yeF9idWZmZXIgPSBtYWxsb2MgKENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTyk7CisJYnVmX2luZm8ucnhfcHV0ID0gMDsKKwlidWZfaW5mby5yeF9nZXQgPSAwOworCisJaWYgKGluYiAoVUFSVDBfQkFTRSArIFVBUlRfTVNSKSAmIDB4MTApIHsKKwkJc2VyaWFsX3B1dHMgKCJDaGVjayBDVFMgc2lnbmFsIHByZXNlbnQgb24gc2VyaWFsIHBvcnQ6IE9LLlxuIik7CisJCWJ1Zl9pbmZvLmN0cyA9IDE7CisJfSBlbHNlIHsKKwkJc2VyaWFsX3B1dHMgKCJXQVJOSU5HOiBDVFMgc2lnbmFsIG5vdCBwcmVzZW50IG9uIHNlcmlhbCBwb3J0LlxuIik7CisJCWJ1Zl9pbmZvLmN0cyA9IDA7CisJfQorCisJaXJxX2luc3RhbGxfaGFuZGxlciAoIFZFQ05VTV9VMCAvKlVBUlQwICovIC8qaW50IHZlYyAqLyAsCisJCQkgICAgICBzZXJpYWxfaXNyIC8qaW50ZXJydXB0X2hhbmRsZXJfdCAqaGFuZGxlciAqLyAsCisJCQkgICAgICAodm9pZCAqKSAmYnVmX2luZm8gLyp2b2lkICphcmcgKi8gKTsKKworCS8qIEVuYWJsZSAiUlggRGF0YSBBdmFpbGFibGUiIEludGVycnVwdCBvbiBVQVJUICovCisJLyogb3V0YihpbmIoVUFSVDBfQkFTRSArIFVBUlRfSUVSKSB8MHgwMSwgVUFSVDBfQkFTRSArIFVBUlRfSUVSKTsgKi8KKwlvdXRiKDB4MDEsIFVBUlQwX0JBU0UgKyBVQVJUX0lFUik7CisKKwkvKiBTZXQgRFRSIGFuZCBSVFMgYWN0aXZlLCBlbmFibGUgaW50ZXJydXB0cyAgKi8KKwlvdXRiKGluYiAoVUFSVDBfQkFTRSArIFVBUlRfTUNSKSB8IDB4MGIsIFVBUlQwX0JBU0UgKyBVQVJUX01DUik7CisKKwkvKiBTZXR1cCBVQVJUIEZJRk86IFJYIHRyaWdnZXIgbGV2ZWw6IDEgYnl0ZSwgRW5hYmxlIEZJRk8gKi8KKwlvdXRiKCAvKigxIDw8IDYpIHwqLyAgMSwgVUFSVDBfQkFTRSArIFVBUlRfRkNSKTsKKworCXNlcmlhbF9idWZmZXJfYWN0aXZlID0gMTsKK30KKwordm9pZCBzZXJpYWxfYnVmZmVyZWRfcHV0YyAoY29uc3QgY2hhciBjKQoreworCWludCBpOworCS8qIFdhaXQgZm9yIENUUyAqLworI2lmIGRlZmluZWQoQ09ORklHX0hXX1dBVENIRE9HKQorCXdoaWxlICghKGluYiAoVUFSVDBfQkFTRSArIFVBUlRfTVNSKSAmIDB4MTApKQorCQlXQVRDSERPR19SRVNFVCAoKTsKKyNlbHNlCisJaWYgKGJ1Zl9pbmZvLmN0cykgIHsKKwkJZm9yIChpPTA7aTwxMDAwO2krKykgeworCQkJaWYgKChpbmIgKFVBUlQwX0JBU0UgKyBVQVJUX01TUikgJiAweDEwKSkgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIT0xMDAwKSB7CisJCQlidWZfaW5mby5jdHMgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKChpbmIgKFVBUlQwX0JBU0UgKyBVQVJUX01TUikgJiAweDEwKSkgeworCQkJYnVmX2luZm8uY3RzID0gMTsKKwkJfQorCX0KKworI2VuZGlmCisJc2VyaWFsX3B1dGMgKGMpOworfQorCit2b2lkIHNlcmlhbF9idWZmZXJlZF9wdXRzKGNvbnN0IGNoYXIgKnMpCit7CisJc2VyaWFsX3B1dHMgKHMpOworfQorCitpbnQgc2VyaWFsX2J1ZmZlcmVkX2dldGModm9pZCkKK3sKKwlpbnQgc3BhY2U7CisJaW50IGM7CisJaW50IHJ4X2dldCA9IGJ1Zl9pbmZvLnJ4X2dldDsKKwlpbnQgcnhfcHV0OworCisjaWYgZGVmaW5lZChDT05GSUdfSFdfV0FUQ0hET0cpCisJd2hpbGUgKHJ4X2dldCA9PSBidWZfaW5mby5yeF9wdXQpCisJCVdBVENIRE9HX1JFU0VUICgpOworI2Vsc2UKKwl3aGlsZSAocnhfZ2V0ID09IGJ1Zl9pbmZvLnJ4X3B1dCk7CisjZW5kaWYKKwljID0gYnVmX2luZm8ucnhfYnVmZmVyW3J4X2dldCsrXTsKKwlpZiAocnhfZ2V0ID09IENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTykgeworCQlyeF9nZXQgPSAwOworCX0KKwlidWZfaW5mby5yeF9nZXQgPSByeF9nZXQ7CisKKwlyeF9wdXQgPSBidWZfaW5mby5yeF9wdXQ7CisJaWYgKHJ4X2dldCA8PSByeF9wdXQpIHsKKwkJc3BhY2UgPSBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gLSAocnhfcHV0IC0gcnhfZ2V0KTsKKwl9IGVsc2UgeworCQlzcGFjZSA9IHJ4X2dldCAtIHJ4X3B1dDsKKwl9CisJaWYgKHNwYWNlID4gQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPIC8gMikgeworCQkvKiBTdGFydCBmbG93IGJ5IHNldHRpbmcgUlRTIGFjdGl2ZSAqLworCQlvdXRiKGluYiAoVUFSVDBfQkFTRSArIFVBUlRfTUNSKSB8IDB4MDIsIFVBUlQwX0JBU0UgKyBVQVJUX01DUik7CisJfQorCisJcmV0dXJuIGM7Cit9CisKK2ludCBzZXJpYWxfYnVmZmVyZWRfdHN0Yyh2b2lkKQoreworCXJldHVybiAoYnVmX2luZm8ucnhfZ2V0ICE9IGJ1Zl9pbmZvLnJ4X3B1dCkgPyAxIDogMDsKK30KKworI2VuZGlmCS8qIENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTyAqLworCisKKyNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKKy8qCisgIEFTIEhBUk5PSVMgOiBhY2NvcmRpbmcgdG8gQ09ORklHX0tHREJfU0VSX0lOREVYIGtnZGIgdXNlcyBzZXJpYWwgcG9ydAorICBudW1iZXIgMCBvciBudW1iZXIgMQorICAtIGlmIENPTkZJR19LR0RCX1NFUl9JTkRFWCA9IDEgPT4gc2VyaWFsIHBvcnQgbnVtYmVyIDAgOgorICBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGFscmVhZHkgZG9uZQorICAtIGlmIENPTkZJR19LR0RCX1NFUl9JTkRFWCA9IDIgPT4gc2VyaWFsIHBvcnQgbnVtYmVyIDEgOgorICBjb25maWd1cmUgcG9ydCAxIGZvciBzZXJpYWwgSS9PIHdpdGggcmF0ZSA9IENPTkZJR19LR0RCX0JBVURSQVRFCisqLworI2lmIChDT05GSUdfS0dEQl9TRVJfSU5ERVggJiAyKQordm9pZCBrZ2RiX3NlcmlhbF9pbml0KHZvaWQpCit7CisJdm9sYXRpbGUgY2hhciB2YWw7CisJYmRpdiA9IHNlcmlhbF9kaXYgKENPTkZJR19LR0RCX0JBVURSQVRFKTsKKworCS8qCisJICogSW5pdCBvbmJvYXJkIDE2NTUwIFVBUlQKKwkgKi8KKwlvdXRiKDB4ODAsIFVBUlQxX0JBU0UgKyBVQVJUX0xDUik7CS8qIHNldCBETEFCIGJpdCAqLworCW91dGIoKGJkaXYgJiAweGZmKSwgVUFSVDFfQkFTRSArIFVBUlRfRExMKTsJLyogc2V0IGRpdmlzb3IgZm9yIDk2MDAgYmF1ZCAqLworCW91dGIoKGJkaXYgPj4gOCAgKSwgVUFSVDFfQkFTRSArIFVBUlRfRExNKTsJLyogc2V0IGRpdmlzb3IgZm9yIDk2MDAgYmF1ZCAqLworCW91dGIoMHgwMywgVUFSVDFfQkFTRSArIFVBUlRfTENSKTsJLyogbGluZSBjb250cm9sIDggYml0cyBubyBwYXJpdHkgKi8KKwlvdXRiKDB4MDAsIFVBUlQxX0JBU0UgKyBVQVJUX0ZDUik7CS8qIGRpc2FibGUgRklGTyAqLworCW91dGIoMHgwMCwgVUFSVDFfQkFTRSArIFVBUlRfTUNSKTsJLyogbm8gbW9kZW0gY29udHJvbCBEVFIgUlRTICovCisJdmFsID0gaW5iKFVBUlQxX0JBU0UgKyBVQVJUX0xTUik7CS8qIGNsZWFyIGxpbmUgc3RhdHVzICovCisJdmFsID0gaW5iKFVBUlQxX0JBU0UgKyBVQVJUX1JCUik7CS8qIHJlYWQgcmVjZWl2ZSBidWZmZXIgKi8KKwlvdXRiKDB4MDAsIFVBUlQxX0JBU0UgKyBVQVJUX1NDUik7CS8qIHNldCBzY3JhdGNocGFkICovCisJb3V0YigweDAwLCBVQVJUMV9CQVNFICsgVUFSVF9JRVIpOwkvKiBzZXQgaW50ZXJydXB0IGVuYWJsZSByZWcgKi8KK30KKworCit2b2lkIHB1dERlYnVnQ2hhcihjb25zdCBjaGFyIGMpCit7CisJaWYgKGMgPT0gJ1xuJykKKwkJc2VyaWFsX3B1dGMgKCdccicpOworCisJb3V0YihjLCBVQVJUMV9CQVNFICsgVUFSVF9USFIpOwkvKiBwdXQgY2hhcmFjdGVyIG91dCAqLworCisJLyogY2hlY2sgVEhSRSBiaXQsIHdhaXQgZm9yIHRyYW5zZmVyIGRvbmUgKi8KKwl3aGlsZSAoKGluYihVQVJUMV9CQVNFICsgVUFSVF9MU1IpICYgMHgyMCkgIT0gMHgyMCk7Cit9CisKKwordm9pZCBwdXREZWJ1Z1N0cihjb25zdCBjaGFyICpzKQoreworCXdoaWxlICgqcykgeworCQlzZXJpYWxfcHV0YygqcysrKTsKKwl9Cit9CisKKworaW50IGdldERlYnVnQ2hhcih2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgc3RhdHVzID0gMDsKKworCXdoaWxlICgxKSB7CisJCXN0YXR1cyA9IGluYihVQVJUMV9CQVNFICsgVUFSVF9MU1IpOworCQlpZiAoKHN0YXR1cyAmIGFzeW5jTFNSRGF0YVJlYWR5MSkgIT0gMHgwKSB7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKHN0YXR1cyAmICggYXN5bmNMU1JGcmFtaW5nRXJyb3IxIHwKKwkJCQlhc3luY0xTUk92ZXJydW5FcnJvcjEgfAorCQkJCWFzeW5jTFNSUGFyaXR5RXJyb3IxICB8CisJCQkJYXN5bmNMU1JCcmVha0ludGVycnVwdDEgKSkgIT0gMCkgeworCQkJb3V0Yihhc3luY0xTUkZyYW1pbmdFcnJvcjEgfAorCQkJICAgICBhc3luY0xTUk92ZXJydW5FcnJvcjEgfAorCQkJICAgICBhc3luY0xTUlBhcml0eUVycm9yMSAgfAorCQkJICAgICBhc3luY0xTUkJyZWFrSW50ZXJydXB0MSwgVUFSVDFfQkFTRSArIFVBUlRfTFNSKTsKKwkJfQorCX0KKwlyZXR1cm4gKDB4MDAwMDAwZmYgJiAoaW50KSBpbmIoVUFSVDFfQkFTRSkpOworfQorCisKK3ZvaWQga2dkYl9pbnRlcnJ1cHRpYmxlKGludCB5ZXMpCit7CisJcmV0dXJuOworfQorCisjZWxzZQkvKiAhIChDT05GSUdfS0dEQl9TRVJfSU5ERVggJiAyKSAqLworCit2b2lkIGtnZGJfc2VyaWFsX2luaXQodm9pZCkKK3sKKwlzZXJpYWxfcHJpbnRmICgiW29uIHNlcmlhbF0gIik7Cit9CisKK3ZvaWQgcHV0RGVidWdDaGFyKGludCBjKQoreworCXNlcmlhbF9wdXRjIChjKTsKK30KKwordm9pZCBwdXREZWJ1Z1N0cihjb25zdCBjaGFyICpzdHIpCit7CisJc2VyaWFsX3B1dHMgKHN0cik7Cit9CisKK2ludCBnZXREZWJ1Z0NoYXIodm9pZCkKK3sKKwlyZXR1cm4gc2VyaWFsX2dldGMgKCk7Cit9CisKK3ZvaWQga2dkYl9pbnRlcnJ1cHRpYmxlKGludCB5ZXMpCit7CisJcmV0dXJuOworfQorI2VuZGlmCS8qIChDT05GSUdfS0dEQl9TRVJfSU5ERVggJiAyKSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvY3B1L3N0YXJ0LlMgYi9hcmNoL2kzODYvY3B1L3N0YXJ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVkMzJlNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaTM4Ni9jcHUvc3RhcnQuUwpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqICBVLWJvb3QgLSBpMzg2IFN0YXJ0dXAgQ29kZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDIJT21pY3JvbiBDZXRpIEFCLCBEYW5pZWwgRW5nc3Ry9m0gPGRlbmFpZWxAb21pY3Jvbi5zZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisKKworLnNlY3Rpb24gLnRleHQKKy5jb2RlMzIKKy5nbG9ibCBfc3RhcnQKKy50eXBlIF9zdGFydCwgQGZ1bmN0aW9uCisuZ2xvYmwgX2kzODZib290X3N0YXJ0CitfaTM4NmJvb3Rfc3RhcnQ6Citfc3RhcnQ6CisJbW92bCAgICAkMHgxOCwlZWF4CS8qIExvYWQgb3VyIHNlZ2VtZW50IHJlZ2lzdGVzLCB0aGUKKwkJCQkgKiBnZHQgaGF2ZSBhbHJlYWR5IGJlZW4gbG9hZGVkIGJ5IHN0YXJ0MTYuUyAqLworCW1vdncgICAgJWF4LCVmcworCW1vdncJJWF4LCVkcworCW1vdncgICAgJWF4LCVncworCW1vdncgICAgJWF4LCVlcworCW1vdncgICAgJWF4LCVzcworCisJLyogV2UgY2FsbCBhIGZldyBmdW5jdGlvbnMgaW4gdGhlIGJvYXJkIHN1cHBvcnQgcGFja2FnZQorCSAqIHNpbmNlIHdlIGhhdmUgbm8gc3RhY2sgeWV0IHdlJ2xsIGhhdmUgdG8gdXNlICVlYnAKKwkgKiB0byBzdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3MgKi8KKworCS8qIEVhcmx5IHBsYXRmb3JtIGluaXQgKHNldHVwIGdwaW8sIGV0YyApICovCisJbW92ICAgICAkZWFybHlfYm9hcmRfaW5pdF9yZXQsICVlYnAKKwlqbXAJZWFybHlfYm9hcmRfaW5pdAorZWFybHlfYm9hcmRfaW5pdF9yZXQ6CisKKwkvKiBUaGUgX19wb3J0ODAgZW50cnktcG9pbnQgc2hvdWxkIGJlIHVzYWJlIGJ5IG5vdyAqLworCS8qIHNvIHdlIHRyeSB0byBpbmRpY2F0ZSBwcm9ncmVzcyAqLworCW1vdncJJDB4MDEsICVheAorCW1vdmwJJC5wcm9ncmVzczAsICVlYnAKKwlqbXAJc2hvd19ib290X3Byb2dyZXNzX2FzbQorLnByb2dyZXNzMDoKKworCS8qIHNpemUgbWVtb3J5ICovCisJbW92CSRtZW1faW5pdF9yZXQsICVlYnAKKwlqbXAgICAgIG1lbV9pbml0CittZW1faW5pdF9yZXQ6CisKKwkvKiBDaGVjayB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgZm9yIHN0YWNrICovCisJbW92bAkkQ09ORklHX1NZU19TVEFDS19TSVpFLCAlZWN4CisJY21wbAklZWN4LCAlZWF4CisJamFlCW1lbV9vaworCisJLyogaW5kaWNhdGUgKGxhY2sgb2YpIHByb2dyZXNzICovCisJbW92dwkkMHg4MSwgJWF4CisJbW92bAkkLnByb2dyZXNzMGEsICVlYnAKKwlqbXAJc2hvd19ib290X3Byb2dyZXNzX2FzbQorLnByb2dyZXNzMGE6CisJam1wCWRpZQorbWVtX29rOgorCS8qIFNldCBzdGFjayBwb2ludGVyIHRvIHVwcGVyIG1lbW9yeSBsaW1pdCovCisJbW92bCAgICAlZWF4LCAlZXNwCisKKwkvKiBpbmRpY2F0ZSBwcm9ncmVzcyAqLworCW1vdncJJDB4MDIsICVheAorCW1vdmwJJC5wcm9ncmVzczEsICVlYnAKKwlqbXAJc2hvd19ib290X3Byb2dyZXNzX2FzbQorLnByb2dyZXNzMToKKworCS8qIFRlc3QgdGhlIHN0YWNrICovCisJcHVzaGwJJDAKKwlwb3BsCSVlYXgKKwljbXBsCSQwLCAlZWF4CisJam5lCW5vX3N0YWNrCisJcHVzaAkkMHg1NWFhNTVhYQorCXBvcGwJJWVieAorCWNtcGwJJDB4NTVhYTU1YWEsICVlYngKKwlqZQlzdGFja19vaworCitub19zdGFjazoKKwkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KKwltb3Z3CSQweDgyLCAlYXgKKwltb3ZsCSQucHJvZ3Jlc3MxYSwgJWVicAorCWptcAlzaG93X2Jvb3RfcHJvZ3Jlc3NfYXNtCisucHJvZ3Jlc3MxYToKKwlqbXAgZGllCisKKworc3RhY2tfb2s6CisJLyogaW5kaWNhdGUgcHJvZ3Jlc3MgKi8KKwltb3Z3CSQweDAzLCAlYXgKKwltb3ZsCSQucHJvZ3Jlc3MyLCAlZWJwCisJam1wCXNob3dfYm9vdF9wcm9ncmVzc19hc20KKy5wcm9ncmVzczI6CisKKwl3YmludmQKKworCS8qIEdldCB1cHBlciBtZW1vcnkgbGltaXQgKi8KKwltb3ZsICVlc3AsICVlY3gKKwlzdWJsICRDT05GSUdfU1lTX1NUQUNLX1NJWkUsICVlY3gKKworCS8qIENyZWF0ZSBhIFN0YWNrIEZyYW1lICovCisJcHVzaGwgJWVicAorCW1vdmwgJWVzcCwgJWVicAorCisJLyogc3RhY2tfbGltaXQgcGFyYW1ldGVyICovCisJcHVzaGwJJWVjeAorCWNhbGwJYm9hcmRfaW5pdF9mCS8qIEVudGVyLCBVLWJvb3QhICovCisKKwkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KKwltb3Z3CSQweDg1LCAlYXgKKwltb3ZsCSQucHJvZ3Jlc3M0YSwgJWVicAorCWptcAlzaG93X2Jvb3RfcHJvZ3Jlc3NfYXNtCisucHJvZ3Jlc3M0YToKKworZGllOglobHQKKwlqbXAJZGllCisJaGx0CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvY3B1L3N0YXJ0MTYuUyBiL2FyY2gvaTM4Ni9jcHUvc3RhcnQxNi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYmI2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2kzODYvY3B1L3N0YXJ0MTYuUwpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqICBVLWJvb3QgLSBpMzg2IFN0YXJ0dXAgQ29kZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgT21pY3JvbiBDZXRpIEFCLCBEYW5pZWwgRW5nc3Ry9m0gPGRlbmFpZWxAb21pY3Jvbi5zZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisKKyNkZWZpbmUgQk9PVF9TRUcJMHhmZmZmMDAwMAkvKiBsaW5lYXIgc2VnbWVudCBvZiBib290IGNvZGUgKi8KKyNkZWZpbmUgYTMyCQkuYnl0ZSAweDY3OworI2RlZmluZSBvMzIJCS5ieXRlIDB4NjY7CisKKy5zZWN0aW9uIC5zdGFydDE2LCAiYXgiCisuY29kZTE2CisuZ2xvYmwgc3RhcnQxNgorc3RhcnQxNjoKKwkvKiBGaXJzdCB3ZSBsZXQgdGhlIEJTUCBkbyBzb21lIGVhcmx5IGluaXRpYWxpemF0aW9uCisJICogdGhpcyBjb2RlIGhhdmUgdG8gbWFwIHRoZSBmbGFzaCB0byBpdHMgZmluYWwgcG9zaXRpb24KKwkgKi8KKwltb3YJJGJvYXJkX2luaXQxNl9yZXQsICVicAorCWptcAlib2FyZF9pbml0MTYKK2JvYXJkX2luaXQxNl9yZXQ6CisKKwkvKiBUdXJuIG9mIGNhY2hlICh0aGlzIG1pZ2h0IHJlcXVpcmUgYSA0ODYtY2xhc3MgQ1BVKSAqLworCW1vdmwJJWNyMCwgJWVheAorCW9ybAkkMHg2MDAwMDAwMCwlZWF4CisJbW92bAklZWF4LCAlY3IwCisJd2JpbnZkCisKKwkvKiBsb2FkIHRoZSBkZXNjcmlwdG9yIHRhYmxlcyAqLworbzMyIGNzCWxpZHQJaWR0X3B0cgorbzMyIGNzCWxnZHQJZ2R0X3B0cgorCisKKwkvKiBOb3csIHdlIGVudGVyIHByb3RlY3RlZCBtb2RlICovCisJbW92bAklY3IwLCAlZWF4CisJb3JsCSQxLCVlYXgKKwltb3ZsCSVlYXgsICVjcjAKKworCS8qIEZsdXNoIHRoZSBwcmVmZXRjaCBxdWV1ZSAqLworCWptcAlmZgorZmY6CisKKwkvKiBGaW5hbGx5IGp1bXAgdG8gdGhlIDMyYml0IGluaXRpYWxpemF0aW9uIGNvZGUgKi8KKwltb3Z3CSRjb2RlMzJzdGFydCwgJWF4CisJbW92dwklYXgsJWJwCitvMzIgY3MJbGptcAkqKCVicCkKKworCS8qIDQ4LWJpdCBmYXIgcG9pbnRlciAqLworY29kZTMyc3RhcnQ6CisJLmxvbmcJX3N0YXJ0CQkvKiBvZmZzZXQgKi8KKwkud29yZAkweDEwCQkvKiBzZWdtZW50ICovCisKK2lkdF9wdHI6CisJLndvcmQJMAkJLyogbGltaXQgKi8KKwkubG9uZwkwCQkvKiBiYXNlICovCisKK2dkdF9wdHI6CisJLndvcmQJMHgzMAkJLyogbGltaXQgKDQ4IGJ5dGVzID0gNiBHRFQgZW50cmllcykgKi8KKwkubG9uZwlCT09UX1NFRyArIGdkdAkvKiBiYXNlICovCisKKwkvKiBUaGUgR0RUIHRhYmxlIC4uLgorCSAqCisJICoJIFNlbGVjdG9yCVR5cGUKKwkgKgkgMHgwMAkJTlVMTAorCSAqCSAweDA4CQlVbnVzZWQKKwkgKgkgMHgxMAkJMzJiaXQgY29kZQorCSAqCSAweDE4CQkzMmJpdCBkYXRhL3N0YWNrCisJICoJIDB4MjAJCTE2Yml0IGNvZGUKKwkgKgkgMHgyOAkJMTZiaXQgZGF0YS9zdGFjaworCSAqLworCitnZHQ6CisJLndvcmQJMCwgMCwgMCwgMAkvKiBOVUxMICAqLworCS53b3JkCTAsIDAsIDAsIDAJLyogdW51c2VkICovCisKKwkud29yZAkweEZGRkYJCS8qIDRHYiAtICgweDEwMDAwMCoweDEwMDAgPSA0R2IpICovCisJLndvcmQJMAkJLyogYmFzZSBhZGRyZXNzID0gMCAqLworCS53b3JkCTB4OUIwMAkJLyogY29kZSByZWFkL2V4ZWMgKi8KKwkud29yZAkweDAwQ0YJCS8qIGdyYW51bGFyaXR5ID0gNDA5NiwgMzg2ICgrNXRoIG5pYmJsZSBvZiBsaW1pdCkgKi8KKworCS53b3JkCTB4RkZGRgkJLyogNEdiIC0gKDB4MTAwMDAwKjB4MTAwMCA9IDRHYikgKi8KKwkud29yZAkweDAJCS8qIGJhc2UgYWRkcmVzcyA9IDAgKi8KKwkud29yZAkweDkzMDAJCS8qIGRhdGEgcmVhZC93cml0ZSAqLworCS53b3JkCTB4MDBDRgkJLyogZ3JhbnVsYXJpdHkgPSA0MDk2LCAzODYgKCs1dGggbmliYmxlIG9mIGxpbWl0KSAqLworCisJLndvcmQJMHhGRkZGCQkvKiA2NGtiICovCisJLndvcmQJMAkJLyogYmFzZSBhZGRyZXNzID0gMCAqLworCS53b3JkCTB4OWIwMAkJLyogZGF0YSByZWFkL3dyaXRlICovCisJLndvcmQJMHgwMDEwCQkvKiBncmFudWxhcml0eSA9IDEgICgrNXRoIG5pYmJsZSBvZiBsaW1pdCkgKi8KKworCS53b3JkCTB4RkZGRgkJLyogNjRrYiAqLworCS53b3JkCTAJCS8qIGJhc2UgYWRkcmVzcyA9IDAgKi8KKwkud29yZAkweDkzMDAJCS8qIGRhdGEgcmVhZC93cml0ZSAqLworCS53b3JkCTB4MDAxMAkJLyogZ3JhbnVsYXJpdHkgPSAxICgrNXRoIG5pYmJsZSBvZiBsaW1pdCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9pbmNsdWRlL2FzbS9pbnRlcnJ1cHQuaCBiL2FyY2gvaTM4Ni9pbmNsdWRlL2FzbS9pbnRlcnJ1cHQuaAppbmRleCA4ZDMyNGQ5Li4wNzQyNmZlIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvaW5jbHVkZS9hc20vaW50ZXJydXB0LmgKKysrIGIvYXJjaC9pMzg2L2luY2x1ZGUvYXNtL2ludGVycnVwdC5oCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIF9fQVNNX0lOVEVSUlVQVF9IXwogI2RlZmluZSBfX0FTTV9JTlRFUlJVUFRfSF8gMQogCi0vKiBjcHUvaTM4Ni9pbnRlcnJ1cHRzLmMgKi8KKy8qIGFyY2gvaTM4Ni9jcHUvaW50ZXJydXB0cy5jICovCiB2b2lkIHNldF92ZWN0b3IodTggaW50bnVtLCB2b2lkICpyb3V0aW5lKTsKIAogLyogYXJjaC9pMzg2L2xpYi9pbnRlcnVwdHMuYyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2luY2x1ZGUvYXNtL3UtYm9vdC1pMzg2LmggYi9hcmNoL2kzODYvaW5jbHVkZS9hc20vdS1ib290LWkzODYuaAppbmRleCBhMDg2MzJkLi41MjFmZDM1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvaW5jbHVkZS9hc20vdS1ib290LWkzODYuaAorKysgYi9hcmNoL2kzODYvaW5jbHVkZS9hc20vdS1ib290LWkzODYuaApAQCAtMzMsNyArMzMsNyBAQAogdHlwZWRlZiB2b2lkICh0aW1lcl9mbmNfdCkgKHZvaWQpOwogaW50IHJlZ2lzdGVyX3RpbWVyX2lzciAodGltZXJfZm5jX3QgKmlzcl9mdW5jKTsKIAotLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIC0gY2FuIGJlIGluIGNwdS9pMzg2LywgYXJjaC9pMzg2L2xpYi8sIG9yICQoQk9BUkQpLyAqLworLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIC0gY2FuIGJlIGluIGFyY2gvaTM4Ni9jcHUvLCBhcmNoL2kzODYvbGliLywgb3IgJChCT0FSRCkvICovCiBpbnQgdGltZXJfaW5pdCh2b2lkKTsKIAogLyogY3B1Ly4uLi9pbnRlcnJ1cHRzLmMgKi8K