I2lmbmRlZiBRRFNQNUFVRFBMQVlNU0dfSAojZGVmaW5lIFFEU1A1QVVEUExBWU1TR19ICgovKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09KgoKICAgICAgIFEgRCBTIFAgNSAgQSBVIEQgSSBPICAgUCBMIEEgWSAgVCBBIFMgSyAgIE0gUyBHCgpHRU5FUkFMIERFU0NSSVBUSU9OCiAgTWVzc2FnZSBzZW50IGJ5IEFVRFBMQVkgdGFzawoKUkVGRVJFTkNFUwogIE5vbmUKCiAgCkNvcHlyaWdodCAoYykgMTk5Mi0yMDA5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KIApUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Ki8KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICBFRElUIEhJU1RPUlkgRk9SIEZJTEUKClRoaXMgc2VjdGlvbiBjb250YWlucyBjb21tZW50cyBkZXNjcmliaW5nIGNoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUuCk5vdGljZSB0aGF0IGNoYW5nZXMgYXJlIGxpc3RlZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCiAgCiRIZWFkZXI6IC8vc291cmNlL3Fjb20vcWN0L211bHRpbWVkaWEyL0F1ZGlvL2RyaXZlcnMvUURTUDVEcml2ZXIvUURTUDVJbnRlcmZhY2UvbWFpbi9sYXRlc3QvcWRzcDVhdWRwbGF5bXNnLmgjMyAkCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwojZGVmaW5lIEFVRFBMQVlfTVNHX0RFQ19ORUVEU19EQVRBCQkweDAwMDEKI2RlZmluZSBBVURQTEFZX01TR19ERUNfTkVFRFNfREFUQV9NU0dfTEVOCVwKCXNpemVvZihhdWRwbGF5X21zZ19kZWNfbmVlZHNfZGF0YSkKCnR5cGVkZWYgc3RydWN0ewogICAvKiByZXNlcnZlZCovCiAgdW5zaWduZWQgaW50IGRlY19pZDsgICAgICAgICAgIAoKICAvKlRoZSByZWFkIHBvaW50ZXIgb2Zmc2V0IG9mIGV4dGVybmFsIG1lbW9yeSB0aWxsIHdoaWNoIGJpdHN0cmVhbSAKICAgIGhhcyBiZWVuIGRtZZJkIGluKi8KICB1bnNpZ25lZCBpbnQgYWRlY0RhdGFSZWFkUHRyT2Zmc2V0OyAgCgogIC8qCVRoZSBidWZmZXIgc2l6ZSBvZiBleHRlcm5hbCBtZW1vcnkuICovCiAgdW5zaWduZWQgaW50IGFkZWNEYXRhQnVmU2l6ZTsKICAKICB1bnNpZ25lZCBpbnQgCWJpdHN0cmVhbV9mcmVlX2xlbjsKICB1bnNpZ25lZCBpbnQJYml0c3RyZWFtX3dyaXRlX3B0cjsKICB1bnNpZ25lZCBpbnQJYml0c3RhcmVtX2J1Zl9zdGFydDsKICB1bnNpZ25lZCBpbnQJYml0c3RyZWFtX2J1Zl9sZW47Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcGxheV9tc2dfZGVjX25lZWRzX2RhdGE7CgojZGVmaW5lIEFVRFBMQVlfVVBfU1RSRUFNX0lORk8gMHgwMDAzCiNkZWZpbmUgQVVEUExBWV9VUF9TVFJFQU1fSU5GT19MRU4gXAogIHNpemVvZihzdHJ1Y3QgYXVkcGxheV9tc2dfc3RyZWFtX2luZm8pCgpzdHJ1Y3QgYXVkcGxheV9tc2dfc3RyZWFtX2luZm8gewogIHVuc2lnbmVkIGludCBkZWNvZGVyX2lkOwogIHVuc2lnbmVkIGludCBjaGFubmVsX2luZm87CiAgdW5zaWduZWQgaW50IHNhbXBsZV9mcmVxOwogIHVuc2lnbmVkIGludCBiaXRzdHJlYW1faW5mbzsKICB1bnNpZ25lZCBpbnQgYml0X3JhdGU7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgojZGVmaW5lIEFVRFBMQVlfTVNHX0JVRkZFUl9VUERBVEUgMHgwMDA0CiNkZWZpbmUgQVVEUExBWV9NU0dfQlVGRkVSX1VQREFURV9MRU4gXAogIHNpemVvZihzdHJ1Y3QgYXVkcGxheV9tc2dfYnVmZmVyX3VwZGF0ZSkKCnN0cnVjdCBhdWRwbGF5X21zZ19idWZmZXJfdXBkYXRlIHsKICB1bnNpZ25lZCBpbnQgYnVmZmVyX3dyaXRlX2NvdW50OwogIHVuc2lnbmVkIGludCBudW1fb2ZfYnVmZmVyOwogIHVuc2lnbmVkIGludCBidWYwX2FkZHJlc3M7CiAgdW5zaWduZWQgaW50IGJ1ZjBfbGVuZ3RoOwogIHVuc2lnbmVkIGludCBidWYxX2FkZHJlc3M7CiAgdW5zaWduZWQgaW50IGJ1ZjFfbGVuZ3RoOwp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKI2RlZmluZSBBRFNQX01FU1NBR0VfSUQgMHhGRkZGCiNlbmRpZiAvKiBRRFNQNUFVRFBMQVlNU0dfSCAqLwo=