LyogYWxwaGF2bXMuaCAtLSBCRkQgZGVmaW5pdGlvbnMgZm9yIGFuIG9wZW5WTVMgaG9zdAogICBDb3B5cmlnaHQgMTk5NiwgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgV3JpdHRlbiBieSBLbGF1cyBL5G1wZiAoa2thZW1wZkBwcm9naXMuZGUpCiAgIG9mIHByb0dJUyBTb2Z0d2FyZWVudHdpY2tsdW5nLCBBYWNoZW4sIEdlcm1hbnkKClRoaXMgZmlsZSBpcyBwYXJ0IG9mIEJGRCwgdGhlIEJpbmFyeSBGaWxlIERlc2NyaXB0b3IgbGlicmFyeS4KClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgpUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KCiNpbmNsdWRlIDxzdGRkZWYuaD4KI2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8c3lzL3N0YXQuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3lzL2ZpbGUuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8dW5peGxpYi5oPgojaW5jbHVkZSA8dW5peGlvLmg+CiNpbmNsdWRlIDx0aW1lLmg+CgojaW5jbHVkZSAiYmZkLmgiCgojaWZuZGVmIEJGRF9IT1NUXzY0X0JJVAovKiBNYWtlIHRoZSBiYXNpYyB0eXBlcyA2NC1iaXQgcXVhbnRpdGllcyBvbiB0aGUgaG9zdC4KICAgQWxzbyBwcm92aWRlIHRoZSBzdXBwb3J0IG1hY3JvcyBCRkQgbmVlZHMuICAqLwojIGlmZGVmIF9fR05VQ19fCiMgIGRlZmluZQlCRkRfSE9TVF82NF9CSVQJbG9uZyBsb25nCiMgZWxzZQojICBkZWZpbmUJQkZEX0hPU1RfNjRfQklUCWxvbmcKIyBlbmRpZgp0eXBlZGVmIHVuc2lnbmVkIEJGRF9IT1NUXzY0X0JJVCB1aW50NjRfdHlwZTsKdHlwZWRlZiBCRkRfSE9TVF82NF9CSVQgaW50NjRfdHlwZTsKCiMgZGVmaW5lIHNwcmludGZfdm1hKHMseCkgc3ByaW50ZiAocywgIiUwMTZseCIsIHgpIC8qIEJGRF9IT1NUXzY0X0JJVCAqLwojIGRlZmluZSBmcHJpbnRmX3ZtYShmLHgpIGZwcmludGYgKGYsICIlMDE2bHgiLCB4KSAvKiBCRkRfSE9TVF82NF9CSVQgKi8KCiMgZGVmaW5lIEJZVEVTX0lOX1BSSU5URl9JTlQgNAoKLyogVGhlc2UgbXVzdCBoYXZlIHR5cGUgdW5zaWduZWQgbG9uZyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYXMKICAgYXJndW1lbnRzIGluIHByaW50ZiBmdW5jdGlvbnMuICAqLwojIGRlZmluZSB1aW50NjRfdHlwZUxPVyh4KSAoKHVuc2lnbmVkIGxvbmcpICgoKHgpICYgMHhmZmZmZmZmZikpKSAvKiBCRkRfSE9TVF82NF9CSVQgKi8KIyBkZWZpbmUgdWludDY0X3R5cGVISUdIKHgpICgodW5zaWduZWQgbG9uZykgKCgoeCkgPj4gMzIpICYgMHhmZmZmZmZmZikpIC8qIEJGRF9IT1NUXzY0X0JJVCAqLwoKI2VuZGlmIC8qIEJGRF9IT1NUXzY0X0JJVCAqLwoKI2luY2x1ZGUgImZvcGVuLXZtcy5oIgoKI2RlZmluZSBOT19GQ05UTCAxCgojaWZuZGVmIE9fQUNDTU9ERQojZGVmaW5lIE9fQUNDTU9ERSAoT19SRE9OTFkgfCBPX1dST05MWSB8IE9fUkRXUikKI2VuZGlmCgpleHRlcm4gaW50IGdldHBhZ2VzaXplIFBBUkFNUyAoKHZvaWQpKTsK