LyogYWxwaGF2bXMuaCAtLSBCRkQgZGVmaW5pdGlvbnMgZm9yIGFuIG9wZW5WTVMgaG9zdAogICBDb3B5cmlnaHQgMTk5NiwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgV3JpdHRlbiBieSBLbGF1cyBL5G1wZiAoa2thZW1wZkBwcm9naXMuZGUpCiAgIG9mIHByb0dJUyBTb2Z0d2FyZWVudHdpY2tsdW5nLCBBYWNoZW4sIEdlcm1hbnkKClRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJGRCwgdGhlIEJpbmFyeSBGaWxlIERlc2NyaXB0b3IgbGlicmFyeS4KClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgpUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCgojaW5jbHVkZSA8c3RkZGVmLmg+CiNpbmNsdWRlIDxmY250bC5oPgojaW5jbHVkZSA8ZXJybm8uaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN5cy9maWxlLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXhsaWIuaD4KI2luY2x1ZGUgPHVuaXhpby5oPgojaW5jbHVkZSA8dGltZS5oPgoKI2luY2x1ZGUgImJmZC5oIgoKI2lmbmRlZiBCRkRfSE9TVF82NF9CSVQKLyogTWFrZSB0aGUgYmFzaWMgdHlwZXMgNjQtYml0IHF1YW50aXRpZXMgb24gdGhlIGhvc3QuCiAgIEFsc28gcHJvdmlkZSB0aGUgc3VwcG9ydCBtYWNyb3MgQkZEIG5lZWRzLiAgKi8KIyBpZmRlZiBfX0dOVUNfXwojICBkZWZpbmUJQkZEX0hPU1RfNjRfQklUCWxvbmcgbG9uZwojIGVsc2UKIyAgZGVmaW5lCUJGRF9IT1NUXzY0X0JJVAlsb25nCiMgZW5kaWYKdHlwZWRlZiB1bnNpZ25lZCBCRkRfSE9TVF82NF9CSVQgdWludDY0X3R5cGU7CnR5cGVkZWYgQkZEX0hPU1RfNjRfQklUIGludDY0X3R5cGU7CgojIGRlZmluZSBzcHJpbnRmX3ZtYShzLHgpIHNwcmludGYgKHMsICIlMDE2bHgiLCB4KSAvKiBCRkRfSE9TVF82NF9CSVQgKi8KIyBkZWZpbmUgZnByaW50Zl92bWEoZix4KSBmcHJpbnRmIChmLCAiJTAxNmx4IiwgeCkgLyogQkZEX0hPU1RfNjRfQklUICovCgojIGRlZmluZSBCWVRFU19JTl9QUklOVEZfSU5UIDQKCi8qIFRoZXNlIG11c3QgaGF2ZSB0eXBlIHVuc2lnbmVkIGxvbmcgYmVjYXVzZSB0aGV5IGFyZSB1c2VkIGFzCiAgIGFyZ3VtZW50cyBpbiBwcmludGYgZnVuY3Rpb25zLiAgKi8KIyBkZWZpbmUgdWludDY0X3R5cGVMT1coeCkgKCh1bnNpZ25lZCBsb25nKSAoKCh4KSAmIDB4ZmZmZmZmZmYpKSkgLyogQkZEX0hPU1RfNjRfQklUICovCiMgZGVmaW5lIHVpbnQ2NF90eXBlSElHSCh4KSAoKHVuc2lnbmVkIGxvbmcpICgoKHgpID4+IDMyKSAmIDB4ZmZmZmZmZmYpKSAvKiBCRkRfSE9TVF82NF9CSVQgKi8KCiNlbmRpZiAvKiBCRkRfSE9TVF82NF9CSVQgKi8KCiNpbmNsdWRlICJmb3Blbi12bXMuaCIKCiNkZWZpbmUgTk9fRkNOVEwgMQoKI2lmbmRlZiBPX0FDQ01PREUKI2RlZmluZSBPX0FDQ01PREUgKE9fUkRPTkxZIHwgT19XUk9OTFkgfCBPX1JEV1IpCiNlbmRpZgoKZXh0ZXJuIGludCBnZXRwYWdlc2l6ZSBQQVJBTVMgKCh2b2lkKSk7Cg==