LyogSGV5LCBFbWFjcywgb3BlbiB0aGlzIGZpbGUgd2l0aCAtKi0gY29kaW5nOiBjcDEyNTAgLSotCiAqCiAqIENvcHlyaWdodCAyMDAyIE1pY2hhZWwgR/xubmV3aWcKICoKICogQ3plY2ggcmVzb3VyY2VzIGZvciBhdmlmaWxlCiAqIENvcHlyaWdodCAyMDA0IERhdmlkIEtyZWRiYQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAiYXZpZmlsZV9wcml2YXRlLmgiCgpMQU5HVUFHRSBMQU5HX0NaRUNILCBTVUJMQU5HX0RFRkFVTFQKCi8qIEN6ZWNoIHN0cmluZ3MgaW4gQ1AxMjUwICovCgpJRERfU0FWRU9QVElPTlMgRElBTE9HICA0MywgMzcsIDIyNiwgODIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIk5hc3RhdmVu7SBrb21wcmVzZSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICImVnliZXIgZGF0b3b9IHByb3VkOiIsLTEsMiw1LDE1NCwxMAogICAgQ09NQk9CT1ggICAgICAgIElEQ19TVFJFQU0sMiwxOCwxNTQsNjEsQ0JTX0RST1BET1dOTElTVCB8IFdTX1ZTQ1JPTEwgfAogICAgICAgICAgICAgICAgICAgIFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gICAgICAiViZvbGJ5Li4uIixJRENfT1BUSU9OUywxNzAsMTcsNTAsMTQKICAgIEFVVE9DSEVDS0JPWCAgICAiUHJvbG+eJml0IGthnmT9Y2giLElEQ19JTlRFUkxFQVZFLDMsNDIsODUsMTEsV1NfVEFCU1RPUAogICAgRURJVFRFWFQgICAgICAgIElEQ19JTlRFUkxFQVZFRVZFUlksOTEsNDEsMzIsMTIsRVNfQVVUT0hTQ1JPTEwKICAgIExURVhUICAgICAgICAgICAicuFtY/kiLC0xLDEyOSw0MywzNiw5CiAgICBMVEVYVCAgICAgICAgICAgIlNvdehhc279IGZvcm3hdDoiLC0xLDMsNTYsNzMsOQogICAgTFRFWFQgICAgICAgICAgICJaYv12YWrtY+0gbe1zdG8iLElEQ19GT1JNQVRURVhULDc1LDU2LDkwLDI2CiAgICBERUZQVVNIQlVUVE9OICAgIkJ1ZGmeIixJRE9LLDE3MCw0Miw1MCwxNAogICAgUFVTSEJVVFRPTiAgICAgICJacnWaaXQiLElEQ0FOQ0VMLDE3MCw2MSw1MCwxNApFTkQK