LyoqDQogKiBcZmlsZQ0KICoNCiAqIFxicmllZiBDb21tb25seSB1c2VkIGluY2x1ZGVzLCB0eXBlcyBhbmQgbWFjcm9zLg0KICoNCiAqIENvcHlyaWdodCAoYykgMjAxMC0yMDEzIEF0bWVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICoNCiAqIFxhc2ZfbGljZW5zZV9zdGFydA0KICoNCiAqIFxwYWdlIExpY2Vuc2UNCiAqDQogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KICoNCiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCiAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQogKg0KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogKg0KICogMy4gVGhlIG5hbWUgb2YgQXRtZWwgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkDQogKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogKg0KICogNC4gVGhpcyBzb2Z0d2FyZSBtYXkgb25seSBiZSByZWRpc3RyaWJ1dGVkIGFuZCB1c2VkIGluIGNvbm5lY3Rpb24gd2l0aCBhbg0KICogICAgQXRtZWwgbWljcm9jb250cm9sbGVyIHByb2R1Y3QuDQogKg0KICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEDQogKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRg0KICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUNCiAqIEVYUFJFU1NMWSBBTkQgU1BFQ0lGSUNBTExZIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1INCiAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCiAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTDQogKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikNCiAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwNCiAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTg0KICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQogKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAqDQogKiBcYXNmX2xpY2Vuc2Vfc3RvcA0KICoNCiAqLw0KDQojaWZuZGVmIFVUSUxTX0NPTVBJTEVSX0gNCiNkZWZpbmUgVVRJTFNfQ09NUElMRVJfSA0KDQovKioNCiAqIFxkZWZncm91cCBncm91cF9zYW1fdXRpbHMgQ29tcGlsZXIgYWJzdHJhY3Rpb24gbGF5ZXIgYW5kIGNvZGUgdXRpbGl0aWVzDQogKg0KICogQ29tcGlsZXIgYWJzdHJhY3Rpb24gbGF5ZXIgYW5kIGNvZGUgdXRpbGl0aWVzIGZvciBBVDkxU0FNLg0KICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdmFyaW91cyBhYnN0cmFjdGlvbiBsYXllcnMgYW5kIHV0aWxpdGllcyB0byBtYWtlIGNvZGUgY29tcGF0aWJsZSBiZXR3ZWVuIGRpZmZlcmVudCBjb21waWxlcnMuDQogKg0KICogXHsNCiAqLw0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0KDQojaWYgKGRlZmluZWQgX19JQ0NBUk1fXykNCiMgIGluY2x1ZGUgPGludHJpbnNpY3MuaD4NCiNlbmRpZg0KDQojaW5jbHVkZSA8cGFydHMuaD4NCiNpbmNsdWRlICJwcmVwcm9jZXNzb3IuaCINCg0KI2luY2x1ZGUgPGlvLmg+DQoNCi8vX19fX18gRCBFIEMgTCBBIFIgQSBUIEkgTyBOIFMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCg0KI2lmbmRlZiBfX0FTU0VNQkxZX18gLy8gTm90IGRlZmluZWQgZm9yIGFzc2VtYmxpbmcuDQoNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCiNpbmNsdWRlIDxzdGRpbnQuaD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCg0KI2lmZGVmIF9fSUNDQVJNX18NCi8qISBcbmFtZSBDb21waWxlciBLZXl3b3Jkcw0KICoNCiAqIFBvcnQgb2Ygc29tZSBrZXl3b3JkcyBmcm9tIEdDQyB0byBJQVIgRW1iZWRkZWQgV29ya2JlbmNoLg0KICovDQovLyEgQHsNCiNkZWZpbmUgX19hc21fXyAgICAgICAgICAgICBhc20NCiNkZWZpbmUgX19pbmxpbmVfXyAgICAgICAgICBpbmxpbmUNCiNkZWZpbmUgX192b2xhdGlsZV9fDQovLyEgQH0NCg0KI2VuZGlmDQoNCiNkZWZpbmUgRlVOQ19QVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqDQovKioNCiAqIFxkZWYgVU5VU0VEDQogKiBcYnJpZWYgTWFya2luZyBcYSB2IGFzIGEgdW51c2VkIHBhcmFtZXRlciBvciB2YWx1ZS4NCiAqLw0KI2RlZmluZSBVTlVTRUQodikgICAgICAgICAgKHZvaWQpKHYpDQoNCi8qKg0KICogXGRlZiB1bnVzZWQNCiAqIFxicmllZiBNYXJraW5nIFxhIHYgYXMgYSB1bnVzZWQgcGFyYW1ldGVyIG9yIHZhbHVlLg0KICovDQojZGVmaW5lIHVudXNlZCh2KSAgICAgICAgICBkbyB7ICh2b2lkKSh2KTsgfSB3aGlsZSgwKQ0KDQovKioNCiAqIFxkZWYgYmFycmllcg0KICogXGJyaWVmIE1lbW9yeSBiYXJyaWVyDQogKi8NCiNkZWZpbmUgYmFycmllcigpICAgICAgICAgIF9fRE1CKCkNCg0KLyoqDQogKiBcYnJpZWYgRW1pdCB0aGUgY29tcGlsZXIgcHJhZ21hIFxhIGFyZy4NCiAqDQogKiBccGFyYW0gYXJnIFRoZSBwcmFnbWEgZGlyZWN0aXZlIGFzIGl0IHdvdWxkIGFwcGVhciBhZnRlciBcZSBcI3ByYWdtYQ0KICogKGkuZS4gbm90IHN0cmluZ2lmaWVkKS4NCiAqLw0KI2RlZmluZSBDT01QSUxFUl9QUkFHTUEoYXJnKSAgICAgICAgICAgIF9QcmFnbWEoI2FyZykNCg0KLyoqDQogKiBcZGVmIENPTVBJTEVSX1BBQ0tfU0VUKGFsaWdubWVudCkNCiAqIFxicmllZiBTZXQgbWF4aW11bSBhbGlnbm1lbnQgZm9yIHN1YnNlcXVlbnQgc3RydWN0IGFuZCB1bmlvbg0KICogZGVmaW5pdGlvbnMgdG8gXGEgYWxpZ25tZW50Lg0KICovDQojZGVmaW5lIENPTVBJTEVSX1BBQ0tfU0VUKGFsaWdubWVudCkgICBDT01QSUxFUl9QUkFHTUEocGFjayhhbGlnbm1lbnQpKQ0KDQovKioNCiAqIFxkZWYgQ09NUElMRVJfUEFDS19SRVNFVCgpDQogKiBcYnJpZWYgU2V0IGRlZmF1bHQgYWxpZ25tZW50IGZvciBzdWJzZXF1ZW50IHN0cnVjdCBhbmQgdW5pb24NCiAqIGRlZmluaXRpb25zLg0KICovDQojZGVmaW5lIENPTVBJTEVSX1BBQ0tfUkVTRVQoKSAgICAgICAgICBDT01QSUxFUl9QUkFHTUEocGFjaygpKQ0KDQoNCi8qKg0KICogXGJyaWVmIFNldCBhbGlnbmVkIGJvdW5kYXJ5Lg0KICovDQojaWYgKGRlZmluZWQgX19HTlVDX18pIHx8IChkZWZpbmVkIF9fQ0NfQVJNKQ0KIyAgIGRlZmluZSBDT01QSUxFUl9BTElHTkVEKGEpICAgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKGEpKSkNCiNlbGlmIChkZWZpbmVkIF9fSUNDQVJNX18pDQojICAgZGVmaW5lIENPTVBJTEVSX0FMSUdORUQoYSkgICAgQ09NUElMRVJfUFJBR01BKGRhdGFfYWxpZ25tZW50ID0gYSkNCiNlbmRpZg0KDQovKioNCiAqIFxicmllZiBTZXQgd29yZC1hbGlnbmVkIGJvdW5kYXJ5Lg0KICovDQojaWYgKGRlZmluZWQgX19HTlVDX18pIHx8IGRlZmluZWQoX19DQ19BUk0pDQojZGVmaW5lIENPTVBJTEVSX1dPUkRfQUxJR05FRCAgICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpDQojZWxpZiAoZGVmaW5lZCBfX0lDQ0FSTV9fKQ0KI2RlZmluZSBDT01QSUxFUl9XT1JEX0FMSUdORUQgICAgQ09NUElMRVJfUFJBR01BKGRhdGFfYWxpZ25tZW50ID0gNCkNCiNlbmRpZg0KDQovKioNCiAqIFxkZWYgX19hbHdheXNfaW5saW5lDQogKiBcYnJpZWYgVGhlIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgYmUgaW5saW5lZC4NCiAqDQogKiBUaGlzIGFubm90YXRpb24gaW5zdHJ1Y3RzIHRoZSBjb21waWxlciB0byBpZ25vcmUgaXRzIGlubGluaW5nDQogKiBoZXVyaXN0aWNzIGFuZCBpbmxpbmUgdGhlIGZ1bmN0aW9uIG5vIG1hdHRlciBob3cgYmlnIGl0IHRoaW5rcyBpdA0KICogYmVjb21lcy4NCiAqLw0KI2lmIGRlZmluZWQoX19DQ19BUk0pDQojICAgZGVmaW5lIF9fYWx3YXlzX2lubGluZSAgIF9fZm9yY2VpbmxpbmUNCiNlbGlmIChkZWZpbmVkIF9fR05VQ19fKQ0KIwl1bmRlZiBfX2Fsd2F5c19pbmxpbmUgLyogcmVtb3ZlIHdhcm5pbmcgb2YgdGhlIG1hY3JvIGJlaW5nIHJlZGVmaW5lZC4gKi8NCiMJZGVmaW5lIF9fYWx3YXlzX2lubGluZSAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpDQojZWxpZiAoZGVmaW5lZCBfX0lDQ0FSTV9fKQ0KIwlkZWZpbmUgX19hbHdheXNfaW5saW5lICAgX1ByYWdtYSgiaW5saW5lPWZvcmNlZCIpDQojZW5kaWYNCg0KLyohIFxicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gdGVzdCBmYXRhbCBlcnJvcnMuDQogKg0KICogVGhlIG1hY3JvIHRlc3RzIGlmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlLiBJZiBpdCBpcywgYSBmYXRhbCBlcnJvciBpcw0KICogZGV0ZWN0ZWQgYW5kIHRoZSBhcHBsaWNhdGlvbiBoYW5ncyB1cC4gSWYgVEVTVF9TVUlURV9ERUZJTkVfQVNTRVJUX01BQ1JPDQogKiBpcyBkZWZpbmVkLCBhIHVuaXQgdGVzdCB2ZXJzaW9uIG9mIHRoZSBtYWNybyBpcyB1c2VkLCB0byBhbGxvdyBleGVjdXRpb24NCiAqIG9mIGZ1cnRoZXIgdGVzdHMgYWZ0ZXIgYSBmYWxzZSBleHByZXNzaW9uLg0KICoNCiAqIFxwYXJhbSBleHByICBFeHByZXNzaW9uIHRvIGV2YWx1YXRlIGFuZCBzdXBwb3NlZCB0byBiZSBub256ZXJvLg0KICovDQojaWYgZGVmaW5lZChfQVNTRVJUX0VOQUJMRV8pDQojICBpZiBkZWZpbmVkKFRFU1RfU1VJVEVfREVGSU5FX0FTU0VSVF9NQUNSTykNCiAgICAgLy8gQXNzZXJ0KCkgaXMgZGVmaW5lZCBpbiB1bml0X3Rlc3Qvc3VpdGUuaA0KIyAgICBpbmNsdWRlICJ1bml0X3Rlc3Qvc3VpdGUuaCINCiMgIGVsc2UNCiN1bmRlZiBURVNUX1NVSVRFX0RFRklORV9BU1NFUlRfTUFDUk8NCiMgICAgZGVmaW5lIEFzc2VydChleHByKSBcDQoJe1wNCgkJaWYgKCEoZXhwcikpIHdoaWxlICh0cnVlKTtcDQoJfQ0KIyAgZW5kaWYNCiNlbHNlDQojICBkZWZpbmUgQXNzZXJ0KGV4cHIpICgodm9pZCkgMCkNCiNlbmRpZg0KDQovKiBEZWZpbmUgV0VBSyBhdHRyaWJ1dGUgKi8NCiNpZiBkZWZpbmVkICAgKCBfX0NDX0FSTSAgICkgLyogS2VpbCC1VmlzaW9uIDQgKi8NCiMgICBkZWZpbmUgV0VBSyBfX2F0dHJpYnV0ZV9fICgod2VhaykpDQojZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApIC8qIElBUiBFd2FybSA1LjQxKyAqLw0KIyAgIGRlZmluZSBXRUFLIF9fd2Vhaw0KI2VsaWYgZGVmaW5lZCAoICBfX0dOVUNfXyAgKSAvKiBHQ0MgQ1MzIDIwMDlxMy02OCAqLw0KIyAgIGRlZmluZSBXRUFLIF9fYXR0cmlidXRlX18gKCh3ZWFrKSkNCiNlbmRpZg0KDQovKiBEZWZpbmUgTk9fSU5JVCBhdHRyaWJ1dGUgKi8NCiNpZiBkZWZpbmVkICAgKCBfX0NDX0FSTSAgICkNCiMgICBkZWZpbmUgTk9fSU5JVCBfX2F0dHJpYnV0ZV9fKCh6ZXJvX2luaXQpKQ0KI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQ0KIyAgIGRlZmluZSBOT19JTklUIF9fbm9faW5pdA0KI2VsaWYgZGVmaW5lZCAoICBfX0dOVUNfXyAgKQ0KIyAgIGRlZmluZSBOT19JTklUIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5ub19pbml0IikpKQ0KI2VuZGlmDQoNCi8qIERlZmluZSBSQU1GVU5DIGF0dHJpYnV0ZSAqLw0KI2lmIGRlZmluZWQgICAoIF9fQ0NfQVJNICAgKSAvKiBLZWlsILVWaXNpb24gNCAqLw0KIyAgIGRlZmluZSBSQU1GVU5DIF9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIucmFtZnVuYyIpKSkNCiNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkgLyogSUFSIEV3YXJtIDUuNDErICovDQojICAgZGVmaW5lIFJBTUZVTkMgX19yYW1mdW5jDQojZWxpZiBkZWZpbmVkICggIF9fR05VQ19fICApIC8qIEdDQyBDUzMgMjAwOXEzLTY4ICovDQojICAgZGVmaW5lIFJBTUZVTkMgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi5yYW1mdW5jIikpKQ0KI2VuZGlmDQoNCi8qIERlZmluZSBPUFRJTUlaRV9ISUdIIGF0dHJpYnV0ZSAqLw0KI2lmIGRlZmluZWQgICAoIF9fQ0NfQVJNICAgKSAvKiBLZWlsILVWaXNpb24gNCAqLw0KIyAgIGRlZmluZSBPUFRJTUlaRV9ISUdIIF9QcmFnbWEoIk8zIikgDQojZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApIC8qIElBUiBFd2FybSA1LjQxKyAqLw0KIyAgIGRlZmluZSBPUFRJTUlaRV9ISUdIIF9QcmFnbWEoIm9wdGltaXplPWhpZ2giKQ0KI2VsaWYgZGVmaW5lZCAoICBfX0dOVUNfXyAgKSAvKiBHQ0MgQ1MzIDIwMDlxMy02OCAqLw0KIyAgIGRlZmluZSBPUFRJTUlaRV9ISUdIIF9fYXR0cmlidXRlX18oKG9wdGltaXplKHMpKSkNCiNlbmRpZg0KDQojaW5jbHVkZSAiaW50ZXJydXB0LmgiDQoNCi8qISBcbmFtZSBVc3VhbCBUeXBlcw0KICovDQovLyEgQHsNCnR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAgICAgQm9vbDsgLy8hPCBCb29sZWFuLg0KI2lmbmRlZiBfX2NwbHVzcGx1cw0KI2lmICFkZWZpbmVkKF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkKQ0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgICAgICAgICBib29sOyAvLyE8IEJvb2xlYW4uDQojZW5kaWYNCiNlbmRpZg0KdHlwZWRlZiBpbnQ4X3QgICAgICAgICAgICAgICAgICBTOCA7ICAvLyE8IDgtYml0IHNpZ25lZCBpbnRlZ2VyLg0KdHlwZWRlZiB1aW50OF90ICAgICAgICAgICAgICAgICBVOCA7ICAvLyE8IDgtYml0IHVuc2lnbmVkIGludGVnZXIuDQp0eXBlZGVmIGludDE2X3QgICAgICAgICAgICAgICAgIFMxNjsgIC8vITwgMTYtYml0IHNpZ25lZCBpbnRlZ2VyLg0KdHlwZWRlZiB1aW50MTZfdCAgICAgICAgICAgICAgICBVMTY7ICAvLyE8IDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLg0KdHlwZWRlZiB1aW50MTZfdCAgICAgICAgICAgICAgICBsZTE2X3Q7DQp0eXBlZGVmIHVpbnQxNl90ICAgICAgICAgICAgICAgIGJlMTZfdDsNCnR5cGVkZWYgaW50MzJfdCAgICAgICAgICAgICAgICAgUzMyOyAgLy8hPCAzMi1iaXQgc2lnbmVkIGludGVnZXIuDQp0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgICAgIFUzMjsgIC8vITwgMzItYml0IHVuc2lnbmVkIGludGVnZXIuDQp0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgICAgIGxlMzJfdDsNCnR5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgICAgYmUzMl90Ow0KdHlwZWRlZiBpbnQ2NF90ICAgICAgICAgICAgICAgICBTNjQ7ICAvLyE8IDY0LWJpdCBzaWduZWQgaW50ZWdlci4NCnR5cGVkZWYgdWludDY0X3QgICAgICAgICAgICAgICAgVTY0OyAgLy8hPCA2NC1iaXQgdW5zaWduZWQgaW50ZWdlci4NCnR5cGVkZWYgZmxvYXQgICAgICAgICAgICAgICAgICAgRjMyOyAgLy8hPCAzMi1iaXQgZmxvYXRpbmctcG9pbnQgbnVtYmVyLg0KdHlwZWRlZiBkb3VibGUgICAgICAgICAgICAgICAgICBGNjQ7ICAvLyE8IDY0LWJpdCBmbG9hdGluZy1wb2ludCBudW1iZXIuDQp0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgICAgIGlyYW1fc2l6ZV90Ow0KLy8hIEB9DQoNCg0KLyohIFxuYW1lIFN0YXR1cyBUeXBlcw0KICovDQovLyEgQHsNCnR5cGVkZWYgYm9vbCAgICAgICAgICAgICAgICBTdGF0dXNfYm9vbF90OyAgLy8hPCBCb29sZWFuIHN0YXR1cy4NCnR5cGVkZWYgVTggICAgICAgICAgICAgICAgICBTdGF0dXNfdDsgICAgICAgLy8hPCA4LWJpdC1jb2RlZCBzdGF0dXMuDQovLyEgQH0NCg0KDQovKiEgXG5hbWUgQWxpYXNpbmcgQWdncmVnYXRlIFR5cGVzDQogKi8NCi8vISBAew0KDQovLyEgMTYtYml0IHVuaW9uLg0KdHlwZWRlZiB1bmlvbg0Kew0KICBTMTYgczE2ICAgOw0KICBVMTYgdTE2ICAgOw0KICBTOCAgczggWzJdOw0KICBVOCAgdTggWzJdOw0KfSBVbmlvbjE2Ow0KDQovLyEgMzItYml0IHVuaW9uLg0KdHlwZWRlZiB1bmlvbg0Kew0KICBTMzIgczMyICAgOw0KICBVMzIgdTMyICAgOw0KICBTMTYgczE2WzJdOw0KICBVMTYgdTE2WzJdOw0KICBTOCAgczggWzRdOw0KICBVOCAgdTggWzRdOw0KfSBVbmlvbjMyOw0KDQovLyEgNjQtYml0IHVuaW9uLg0KdHlwZWRlZiB1bmlvbg0Kew0KICBTNjQgczY0ICAgOw0KICBVNjQgdTY0ICAgOw0KICBTMzIgczMyWzJdOw0KICBVMzIgdTMyWzJdOw0KICBTMTYgczE2WzRdOw0KICBVMTYgdTE2WzRdOw0KICBTOCAgczggWzhdOw0KICBVOCAgdTggWzhdOw0KfSBVbmlvbjY0Ow0KDQovLyEgVW5pb24gb2YgcG9pbnRlcnMgdG8gNjQtLCAzMi0sIDE2LSBhbmQgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMuDQp0eXBlZGVmIHVuaW9uDQp7DQogIFM2NCAqczY0cHRyOw0KICBVNjQgKnU2NHB0cjsNCiAgUzMyICpzMzJwdHI7DQogIFUzMiAqdTMycHRyOw0KICBTMTYgKnMxNnB0cjsNCiAgVTE2ICp1MTZwdHI7DQogIFM4ICAqczhwdHIgOw0KICBVOCAgKnU4cHRyIDsNCn0gVW5pb25QdHI7DQoNCi8vISBVbmlvbiBvZiBwb2ludGVycyB0byB2b2xhdGlsZSA2NC0sIDMyLSwgMTYtIGFuZCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2Vycy4NCnR5cGVkZWYgdW5pb24NCnsNCiAgdm9sYXRpbGUgUzY0ICpzNjRwdHI7DQogIHZvbGF0aWxlIFU2NCAqdTY0cHRyOw0KICB2b2xhdGlsZSBTMzIgKnMzMnB0cjsNCiAgdm9sYXRpbGUgVTMyICp1MzJwdHI7DQogIHZvbGF0aWxlIFMxNiAqczE2cHRyOw0KICB2b2xhdGlsZSBVMTYgKnUxNnB0cjsNCiAgdm9sYXRpbGUgUzggICpzOHB0ciA7DQogIHZvbGF0aWxlIFU4ICAqdThwdHIgOw0KfSBVbmlvblZQdHI7DQoNCi8vISBVbmlvbiBvZiBwb2ludGVycyB0byBjb25zdGFudCA2NC0sIDMyLSwgMTYtIGFuZCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2Vycy4NCnR5cGVkZWYgdW5pb24NCnsNCiAgY29uc3QgUzY0ICpzNjRwdHI7DQogIGNvbnN0IFU2NCAqdTY0cHRyOw0KICBjb25zdCBTMzIgKnMzMnB0cjsNCiAgY29uc3QgVTMyICp1MzJwdHI7DQogIGNvbnN0IFMxNiAqczE2cHRyOw0KICBjb25zdCBVMTYgKnUxNnB0cjsNCiAgY29uc3QgUzggICpzOHB0ciA7DQogIGNvbnN0IFU4ICAqdThwdHIgOw0KfSBVbmlvbkNQdHI7DQoNCi8vISBVbmlvbiBvZiBwb2ludGVycyB0byBjb25zdGFudCB2b2xhdGlsZSA2NC0sIDMyLSwgMTYtIGFuZCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2Vycy4NCnR5cGVkZWYgdW5pb24NCnsNCiAgY29uc3Qgdm9sYXRpbGUgUzY0ICpzNjRwdHI7DQogIGNvbnN0IHZvbGF0aWxlIFU2NCAqdTY0cHRyOw0KICBjb25zdCB2b2xhdGlsZSBTMzIgKnMzMnB0cjsNCiAgY29uc3Qgdm9sYXRpbGUgVTMyICp1MzJwdHI7DQogIGNvbnN0IHZvbGF0aWxlIFMxNiAqczE2cHRyOw0KICBjb25zdCB2b2xhdGlsZSBVMTYgKnUxNnB0cjsNCiAgY29uc3Qgdm9sYXRpbGUgUzggICpzOHB0ciA7DQogIGNvbnN0IHZvbGF0aWxlIFU4ICAqdThwdHIgOw0KfSBVbmlvbkNWUHRyOw0KDQovLyEgU3RydWN0dXJlIG9mIHBvaW50ZXJzIHRvIDY0LSwgMzItLCAxNi0gYW5kIDgtYml0IHVuc2lnbmVkIGludGVnZXJzLg0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgUzY0ICpzNjRwdHI7DQogIFU2NCAqdTY0cHRyOw0KICBTMzIgKnMzMnB0cjsNCiAgVTMyICp1MzJwdHI7DQogIFMxNiAqczE2cHRyOw0KICBVMTYgKnUxNnB0cjsNCiAgUzggICpzOHB0ciA7DQogIFU4ICAqdThwdHIgOw0KfSBTdHJ1Y3RQdHI7DQoNCi8vISBTdHJ1Y3R1cmUgb2YgcG9pbnRlcnMgdG8gdm9sYXRpbGUgNjQtLCAzMi0sIDE2LSBhbmQgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMuDQp0eXBlZGVmIHN0cnVjdA0Kew0KICB2b2xhdGlsZSBTNjQgKnM2NHB0cjsNCiAgdm9sYXRpbGUgVTY0ICp1NjRwdHI7DQogIHZvbGF0aWxlIFMzMiAqczMycHRyOw0KICB2b2xhdGlsZSBVMzIgKnUzMnB0cjsNCiAgdm9sYXRpbGUgUzE2ICpzMTZwdHI7DQogIHZvbGF0aWxlIFUxNiAqdTE2cHRyOw0KICB2b2xhdGlsZSBTOCAgKnM4cHRyIDsNCiAgdm9sYXRpbGUgVTggICp1OHB0ciA7DQp9IFN0cnVjdFZQdHI7DQoNCi8vISBTdHJ1Y3R1cmUgb2YgcG9pbnRlcnMgdG8gY29uc3RhbnQgNjQtLCAzMi0sIDE2LSBhbmQgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMuDQp0eXBlZGVmIHN0cnVjdA0Kew0KICBjb25zdCBTNjQgKnM2NHB0cjsNCiAgY29uc3QgVTY0ICp1NjRwdHI7DQogIGNvbnN0IFMzMiAqczMycHRyOw0KICBjb25zdCBVMzIgKnUzMnB0cjsNCiAgY29uc3QgUzE2ICpzMTZwdHI7DQogIGNvbnN0IFUxNiAqdTE2cHRyOw0KICBjb25zdCBTOCAgKnM4cHRyIDsNCiAgY29uc3QgVTggICp1OHB0ciA7DQp9IFN0cnVjdENQdHI7DQoNCi8vISBTdHJ1Y3R1cmUgb2YgcG9pbnRlcnMgdG8gY29uc3RhbnQgdm9sYXRpbGUgNjQtLCAzMi0sIDE2LSBhbmQgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMuDQp0eXBlZGVmIHN0cnVjdA0Kew0KICBjb25zdCB2b2xhdGlsZSBTNjQgKnM2NHB0cjsNCiAgY29uc3Qgdm9sYXRpbGUgVTY0ICp1NjRwdHI7DQogIGNvbnN0IHZvbGF0aWxlIFMzMiAqczMycHRyOw0KICBjb25zdCB2b2xhdGlsZSBVMzIgKnUzMnB0cjsNCiAgY29uc3Qgdm9sYXRpbGUgUzE2ICpzMTZwdHI7DQogIGNvbnN0IHZvbGF0aWxlIFUxNiAqdTE2cHRyOw0KICBjb25zdCB2b2xhdGlsZSBTOCAgKnM4cHRyIDsNCiAgY29uc3Qgdm9sYXRpbGUgVTggICp1OHB0ciA7DQp9IFN0cnVjdENWUHRyOw0KDQovLyEgQH0NCg0KI2VuZGlmICAvLyAjaWZuZGVmIF9fQVNTRU1CTFlfXw0KDQovKiEgXG5hbWUgVXN1YWwgQ29uc3RhbnRzDQogKi8NCi8vISBAew0KI2RlZmluZSBESVNBQkxFICAgMA0KI2RlZmluZSBFTkFCTEUgICAgMQ0KI2lmbmRlZiBfX2NwbHVzcGx1cw0KI2lmICFkZWZpbmVkKF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkKQ0KI2RlZmluZSBmYWxzZSAgICAgMA0KI2RlZmluZSB0cnVlICAgICAgMQ0KI2VuZGlmDQojZW5kaWYNCiNkZWZpbmUgUEFTUyAgICAgIDANCiNkZWZpbmUgRkFJTCAgICAgIDENCiNkZWZpbmUgTE9XICAgICAgIDANCiNkZWZpbmUgSElHSCAgICAgIDENCi8vISBAfQ0KDQoNCiNpZm5kZWYgX19BU1NFTUJMWV9fIC8vIG5vdCBmb3IgYXNzZW1ibGluZy4NCg0KLy8hIFxuYW1lIE9wdGltaXphdGlvbiBDb250cm9sDQovL0B7DQoNCi8qKg0KICogXGRlZiBsaWtlbHkoZXhwKQ0KICogXGJyaWVmIFRoZSBleHByZXNzaW9uIFxhIGV4cCBpcyBsaWtlbHkgdG8gYmUgdHJ1ZQ0KICovDQojaWZuZGVmIGxpa2VseQ0KIyAgIGRlZmluZSBsaWtlbHkoZXhwKSAgICAoZXhwKQ0KI2VuZGlmDQoNCi8qKg0KICogXGRlZiB1bmxpa2VseShleHApDQogKiBcYnJpZWYgVGhlIGV4cHJlc3Npb24gXGEgZXhwIGlzIHVubGlrZWx5IHRvIGJlIHRydWUNCiAqLw0KI2lmbmRlZiB1bmxpa2VseQ0KIyAgIGRlZmluZSB1bmxpa2VseShleHApICAoZXhwKQ0KI2VuZGlmDQoNCi8qKg0KICogXGRlZiBpc19jb25zdGFudChleHApDQogKiBcYnJpZWYgRGV0ZXJtaW5lIGlmIGFuIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgY29uc3RhbnQgdmFsdWUuDQogKg0KICogXHBhcmFtIGV4cCBBbnkgZXhwcmVzc2lvbg0KICoNCiAqIFxyZXR1cm4gdHJ1ZSBpZiBcYSBleHAgaXMgY29uc3RhbnQsIGZhbHNlIG90aGVyd2lzZS4NCiAqLw0KI2lmIChkZWZpbmVkIF9fR05VQ19fKSB8fCAoZGVmaW5lZCBfX0NDX0FSTSkNCiMgICBkZWZpbmUgaXNfY29uc3RhbnQoZXhwKSAgICAgICBfX2J1aWx0aW5fY29uc3RhbnRfcChleHApDQojZWxzZQ0KIyAgIGRlZmluZSBpc19jb25zdGFudChleHApICAgICAgICgwKQ0KI2VuZGlmDQoNCi8vISBAfQ0KDQovKiEgXG5hbWUgQml0LUZpZWxkIEhhbmRsaW5nDQogKi8NCi8vISBAew0KDQovKiEgXGJyaWVmIFJlYWRzIHRoZSBiaXRzIG9mIGEgdmFsdWUgc3BlY2lmaWVkIGJ5IGEgZ2l2ZW4gYml0LW1hc2suDQogKg0KICogXHBhcmFtIHZhbHVlIFZhbHVlIHRvIHJlYWQgYml0cyBmcm9tLg0KICogXHBhcmFtIG1hc2sgIEJpdC1tYXNrIGluZGljYXRpbmcgYml0cyB0byByZWFkLg0KICoNCiAqIFxyZXR1cm4gUmVhZCBiaXRzLg0KICovDQojZGVmaW5lIFJkX2JpdHMoIHZhbHVlLCBtYXNrKSAgICAgICAgKCh2YWx1ZSkgJiAobWFzaykpDQoNCi8qISBcYnJpZWYgV3JpdGVzIHRoZSBiaXRzIG9mIGEgQyBsdmFsdWUgc3BlY2lmaWVkIGJ5IGEgZ2l2ZW4gYml0LW1hc2suDQogKg0KICogXHBhcmFtIGx2YWx1ZSAgQyBsdmFsdWUgdG8gd3JpdGUgYml0cyB0by4NCiAqIFxwYXJhbSBtYXNrICAgIEJpdC1tYXNrIGluZGljYXRpbmcgYml0cyB0byB3cml0ZS4NCiAqIFxwYXJhbSBiaXRzICAgIEJpdHMgdG8gd3JpdGUuDQogKg0KICogXHJldHVybiBSZXN1bHRpbmcgdmFsdWUgd2l0aCB3cml0dGVuIGJpdHMuDQogKi8NCiNkZWZpbmUgV3JfYml0cyhsdmFsdWUsIG1hc2ssIGJpdHMpICAoKGx2YWx1ZSkgPSAoKGx2YWx1ZSkgJiB+KG1hc2spKSB8XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYml0cyAgKSAmICAobWFzaykpKQ0KDQovKiEgXGJyaWVmIFRlc3RzIHRoZSBiaXRzIG9mIGEgdmFsdWUgc3BlY2lmaWVkIGJ5IGEgZ2l2ZW4gYml0LW1hc2suDQogKg0KICogXHBhcmFtIHZhbHVlIFZhbHVlIG9mIHdoaWNoIHRvIHRlc3QgYml0cy4NCiAqIFxwYXJhbSBtYXNrICBCaXQtbWFzayBpbmRpY2F0aW5nIGJpdHMgdG8gdGVzdC4NCiAqDQogKiBccmV0dXJuIFxjIDEgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSB0ZXN0ZWQgYml0cyBpcyBzZXQsIGVsc2UgXGMgMC4NCiAqLw0KI2RlZmluZSBUc3RfYml0cyggdmFsdWUsIG1hc2spICAoUmRfYml0cyh2YWx1ZSwgbWFzaykgIT0gMCkNCg0KLyohIFxicmllZiBDbGVhcnMgdGhlIGJpdHMgb2YgYSBDIGx2YWx1ZSBzcGVjaWZpZWQgYnkgYSBnaXZlbiBiaXQtbWFzay4NCiAqDQogKiBccGFyYW0gbHZhbHVlICBDIGx2YWx1ZSBvZiB3aGljaCB0byBjbGVhciBiaXRzLg0KICogXHBhcmFtIG1hc2sgICAgQml0LW1hc2sgaW5kaWNhdGluZyBiaXRzIHRvIGNsZWFyLg0KICoNCiAqIFxyZXR1cm4gUmVzdWx0aW5nIHZhbHVlIHdpdGggY2xlYXJlZCBiaXRzLg0KICovDQojZGVmaW5lIENscl9iaXRzKGx2YWx1ZSwgbWFzaykgICgobHZhbHVlKSAmPSB+KG1hc2spKQ0KDQovKiEgXGJyaWVmIFNldHMgdGhlIGJpdHMgb2YgYSBDIGx2YWx1ZSBzcGVjaWZpZWQgYnkgYSBnaXZlbiBiaXQtbWFzay4NCiAqDQogKiBccGFyYW0gbHZhbHVlICBDIGx2YWx1ZSBvZiB3aGljaCB0byBzZXQgYml0cy4NCiAqIFxwYXJhbSBtYXNrICAgIEJpdC1tYXNrIGluZGljYXRpbmcgYml0cyB0byBzZXQuDQogKg0KICogXHJldHVybiBSZXN1bHRpbmcgdmFsdWUgd2l0aCBzZXQgYml0cy4NCiAqLw0KI2RlZmluZSBTZXRfYml0cyhsdmFsdWUsIG1hc2spICAoKGx2YWx1ZSkgfD0gIChtYXNrKSkNCg0KLyohIFxicmllZiBUb2dnbGVzIHRoZSBiaXRzIG9mIGEgQyBsdmFsdWUgc3BlY2lmaWVkIGJ5IGEgZ2l2ZW4gYml0LW1hc2suDQogKg0KICogXHBhcmFtIGx2YWx1ZSAgQyBsdmFsdWUgb2Ygd2hpY2ggdG8gdG9nZ2xlIGJpdHMuDQogKiBccGFyYW0gbWFzayAgICBCaXQtbWFzayBpbmRpY2F0aW5nIGJpdHMgdG8gdG9nZ2xlLg0KICoNCiAqIFxyZXR1cm4gUmVzdWx0aW5nIHZhbHVlIHdpdGggdG9nZ2xlZCBiaXRzLg0KICovDQojZGVmaW5lIFRnbF9iaXRzKGx2YWx1ZSwgbWFzaykgICgobHZhbHVlKSBePSAgKG1hc2spKQ0KDQovKiEgXGJyaWVmIFJlYWRzIHRoZSBiaXQtZmllbGQgb2YgYSB2YWx1ZSBzcGVjaWZpZWQgYnkgYSBnaXZlbiBiaXQtbWFzay4NCiAqDQogKiBccGFyYW0gdmFsdWUgVmFsdWUgdG8gcmVhZCBhIGJpdC1maWVsZCBmcm9tLg0KICogXHBhcmFtIG1hc2sgIEJpdC1tYXNrIGluZGljYXRpbmcgdGhlIGJpdC1maWVsZCB0byByZWFkLg0KICoNCiAqIFxyZXR1cm4gUmVhZCBiaXQtZmllbGQuDQogKi8NCiNkZWZpbmUgUmRfYml0ZmllbGQoIHZhbHVlLCBtYXNrKSAgICAgICAgICAgKFJkX2JpdHMoIHZhbHVlLCBtYXNrKSA+PiBjdHoobWFzaykpDQoNCi8qISBcYnJpZWYgV3JpdGVzIHRoZSBiaXQtZmllbGQgb2YgYSBDIGx2YWx1ZSBzcGVjaWZpZWQgYnkgYSBnaXZlbiBiaXQtbWFzay4NCiAqDQogKiBccGFyYW0gbHZhbHVlICAgIEMgbHZhbHVlIHRvIHdyaXRlIGEgYml0LWZpZWxkIHRvLg0KICogXHBhcmFtIG1hc2sgICAgICBCaXQtbWFzayBpbmRpY2F0aW5nIHRoZSBiaXQtZmllbGQgdG8gd3JpdGUuDQogKiBccGFyYW0gYml0ZmllbGQgIEJpdC1maWVsZCB0byB3cml0ZS4NCiAqDQogKiBccmV0dXJuIFJlc3VsdGluZyB2YWx1ZSB3aXRoIHdyaXR0ZW4gYml0LWZpZWxkLg0KICovDQojZGVmaW5lIFdyX2JpdGZpZWxkKGx2YWx1ZSwgbWFzaywgYml0ZmllbGQpIChXcl9iaXRzKGx2YWx1ZSwgbWFzaywgKFUzMikoYml0ZmllbGQpIDw8IGN0eihtYXNrKSkpDQoNCi8vISBAfQ0KDQoNCi8qISBcbmFtZSBaZXJvLUJpdCBDb3VudGluZw0KICoNCiAqIFVuZGVyIEdDQywgX19idWlsdGluX2NseiBhbmQgX19idWlsdGluX2N0eiBiZWhhdmUgbGlrZSBtYWNyb3Mgd2hlbg0KICogYXBwbGllZCB0byBjb25zdGFudCBleHByZXNzaW9ucyAodmFsdWVzIGtub3duIGF0IGNvbXBpbGUgdGltZSksIHNvIHRoZXkgYXJlDQogKiBtb3JlIG9wdGltaXplZCB0aGFuIHRoZSB1c2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmcgYXNzZW1ibHkgaW5zdHJ1Y3Rpb25zIGFuZA0KICogdGhleSBjYW4gYmUgdXNlZCBhcyBjb25zdGFudCBleHByZXNzaW9ucyBlLmcuIHRvIGluaXRpYWxpemUgb2JqZWN0cyBoYXZpbmcNCiAqIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLCBhbmQgbGlrZSB0aGUgY29ycmVzcG9uZGluZyBhc3NlbWJseSBpbnN0cnVjdGlvbnMNCiAqIHdoZW4gYXBwbGllZCB0byBub24tY29uc3RhbnQgZXhwcmVzc2lvbnMgKHZhbHVlcyB1bmtub3duIGF0IGNvbXBpbGUgdGltZSksIHNvDQogKiB0aGV5IGFyZSBtb3JlIG9wdGltaXplZCB0aGFuIGFuIGFzc2VtYmx5IHBlcmlwaHJhc2lzLiBIZW5jZSwgY2x6IGFuZCBjdHoNCiAqIGVuc3VyZSBhIHBvc3NpYmxlIGFuZCBvcHRpbWl6ZWQgYmVoYXZpb3IgZm9yIGJvdGggY29uc3RhbnQgYW5kIG5vbi1jb25zdGFudA0KICogZXhwcmVzc2lvbnMuDQogKi8NCi8vISBAew0KDQovKiEgXGJyaWVmIENvdW50cyB0aGUgbGVhZGluZyB6ZXJvIGJpdHMgb2YgdGhlIGdpdmVuIHZhbHVlIGNvbnNpZGVyZWQgYXMgYSAzMi1iaXQgaW50ZWdlci4NCiAqDQogKiBccGFyYW0gdSBWYWx1ZSBvZiB3aGljaCB0byBjb3VudCB0aGUgbGVhZGluZyB6ZXJvIGJpdHMuDQogKg0KICogXHJldHVybiBUaGUgY291bnQgb2YgbGVhZGluZyB6ZXJvIGJpdHMgaW4gXGEgdS4NCiAqLw0KI2lmIChkZWZpbmVkIF9fR05VQ19fKSB8fCAoZGVmaW5lZCBfX0NDX0FSTSkNCiMgICBkZWZpbmUgY2x6KHUpICAgICAgICAgICAgICBfX2J1aWx0aW5fY2x6KHUpDQojZWxpZiAoZGVmaW5lZCBfX0lDQ0FSTV9fKQ0KIyAgIGRlZmluZSBjbHoodSkgICAgICAgICAgICAgIF9fQ0xaKHUpDQojZWxzZQ0KIyAgIGRlZmluZSBjbHoodSkgICAgICAgICAgICAgICgoKHUpID09IDApICAgICAgICAgID8gMzIgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDMxKSkgPyAgMCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMzApKSA/ICAxIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAyOSkpID8gIDIgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDI4KSkgPyAgMyA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMjcpKSA/ICA0IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAyNikpID8gIDUgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDI1KSkgPyAgNiA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMjQpKSA/ICA3IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAyMykpID8gIDggOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDIyKSkgPyAgOSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMjEpKSA/IDEwIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAyMCkpID8gMTEgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDE5KSkgPyAxMiA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMTgpKSA/IDEzIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAxNykpID8gMTQgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDE2KSkgPyAxNSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMTUpKSA/IDE2IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAxNCkpID8gMTcgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDEzKSkgPyAxOCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMTIpKSA/IDE5IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAxMSkpID8gMjAgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDEwKSkgPyAyMSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgIDkpKSA/IDIyIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAgOCkpID8gMjMgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8ICA3KSkgPyAyNCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgIDYpKSA/IDI1IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAgNSkpID8gMjYgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8ICA0KSkgPyAyNyA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgIDMpKSA/IDI4IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAgMikpID8gMjkgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8ICAxKSkgPyAzMCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEpDQojZW5kaWYNCg0KLyohIFxicmllZiBDb3VudHMgdGhlIHRyYWlsaW5nIHplcm8gYml0cyBvZiB0aGUgZ2l2ZW4gdmFsdWUgY29uc2lkZXJlZCBhcyBhIDMyLWJpdCBpbnRlZ2VyLg0KICoNCiAqIFxwYXJhbSB1IFZhbHVlIG9mIHdoaWNoIHRvIGNvdW50IHRoZSB0cmFpbGluZyB6ZXJvIGJpdHMuDQogKg0KICogXHJldHVybiBUaGUgY291bnQgb2YgdHJhaWxpbmcgemVybyBiaXRzIGluIFxhIHUuDQogKi8NCiNpZiAoZGVmaW5lZCBfX0dOVUNfXykgfHwgKGRlZmluZWQgX19DQ19BUk0pDQojICAgZGVmaW5lIGN0eih1KSAgICAgICAgICAgICAgX19idWlsdGluX2N0eih1KQ0KI2Vsc2UNCiMgICBkZWZpbmUgY3R6KHUpICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAgMCkgPyAgMCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAgMSkgPyAgMSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAgMikgPyAgMiA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAgMykgPyAgMyA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAgNCkgPyAgNCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAgNSkgPyAgNSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAgNikgPyAgNiA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAgNykgPyAgNyA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAgOCkgPyAgOCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAgOSkgPyAgOSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAxMCkgPyAxMCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAxMSkgPyAxMSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAxMikgPyAxMiA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAxMykgPyAxMyA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAxNCkgPyAxNCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAxNSkgPyAxNSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAxNikgPyAxNiA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAxNykgPyAxNyA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAxOCkgPyAxOCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAxOSkgPyAxOSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAyMCkgPyAyMCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAyMSkgPyAyMSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAyMikgPyAyMiA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAyMykgPyAyMyA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAyNCkgPyAyNCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAyNSkgPyAyNSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAyNikgPyAyNiA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAyNykgPyAyNyA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAyOCkgPyAyOCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAyOSkgPyAyOSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAzMCkgPyAzMCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUpICYgKDF1bCA8PCAzMSkgPyAzMSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIpDQojZW5kaWYNCg0KLy8hIEB9DQoNCg0KLyohIFxuYW1lIEJpdCBSZXZlcnNpbmcNCiAqLw0KLy8hIEB7DQoNCi8qISBcYnJpZWYgUmV2ZXJzZXMgdGhlIGJpdHMgb2YgXGEgdTguDQogKg0KICogXHBhcmFtIHU4ICBVOCBvZiB3aGljaCB0byByZXZlcnNlIHRoZSBiaXRzLg0KICoNCiAqIFxyZXR1cm4gVmFsdWUgcmVzdWx0aW5nIGZyb20gXGEgdTggd2l0aCByZXZlcnNlZCBiaXRzLg0KICovDQojZGVmaW5lIGJpdF9yZXZlcnNlOCh1OCkgICAgKChVOCkoYml0X3JldmVyc2UzMigoVTgpKHU4KSkgPj4gMjQpKQ0KDQovKiEgXGJyaWVmIFJldmVyc2VzIHRoZSBiaXRzIG9mIFxhIHUxNi4NCiAqDQogKiBccGFyYW0gdTE2IFUxNiBvZiB3aGljaCB0byByZXZlcnNlIHRoZSBiaXRzLg0KICoNCiAqIFxyZXR1cm4gVmFsdWUgcmVzdWx0aW5nIGZyb20gXGEgdTE2IHdpdGggcmV2ZXJzZWQgYml0cy4NCiAqLw0KI2RlZmluZSBiaXRfcmV2ZXJzZTE2KHUxNikgICgoVTE2KShiaXRfcmV2ZXJzZTMyKChVMTYpKHUxNikpID4+IDE2KSkNCg0KLyohIFxicmllZiBSZXZlcnNlcyB0aGUgYml0cyBvZiBcYSB1MzIuDQogKg0KICogXHBhcmFtIHUzMiBVMzIgb2Ygd2hpY2ggdG8gcmV2ZXJzZSB0aGUgYml0cy4NCiAqDQogKiBccmV0dXJuIFZhbHVlIHJlc3VsdGluZyBmcm9tIFxhIHUzMiB3aXRoIHJldmVyc2VkIGJpdHMuDQogKi8NCiNkZWZpbmUgYml0X3JldmVyc2UzMih1MzIpICAgX19SQklUKHUzMikNCg0KLyohIFxicmllZiBSZXZlcnNlcyB0aGUgYml0cyBvZiBcYSB1NjQuDQogKg0KICogXHBhcmFtIHU2NCBVNjQgb2Ygd2hpY2ggdG8gcmV2ZXJzZSB0aGUgYml0cy4NCiAqDQogKiBccmV0dXJuIFZhbHVlIHJlc3VsdGluZyBmcm9tIFxhIHU2NCB3aXRoIHJldmVyc2VkIGJpdHMuDQogKi8NCiNkZWZpbmUgYml0X3JldmVyc2U2NCh1NjQpICAoKFU2NCkoKChVNjQpYml0X3JldmVyc2UzMigoVTY0KSh1NjQpID4+IDMyKSkgfFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChVNjQpYml0X3JldmVyc2UzMigoVTY0KSh1NjQpKSA8PCAzMikpKQ0KDQovLyEgQH0NCg0KDQovKiEgXG5hbWUgQWxpZ25tZW50DQogKi8NCi8vISBAew0KDQovKiEgXGJyaWVmIFRlc3RzIGFsaWdubWVudCBvZiB0aGUgbnVtYmVyIFxhIHZhbCB3aXRoIHRoZSBcYSBuIGJvdW5kYXJ5Lg0KICoNCiAqIFxwYXJhbSB2YWwgSW5wdXQgdmFsdWUuDQogKiBccGFyYW0gbiAgIEJvdW5kYXJ5Lg0KICoNCiAqIFxyZXR1cm4gXGMgMSBpZiB0aGUgbnVtYmVyIFxhIHZhbCBpcyBhbGlnbmVkIHdpdGggdGhlIFxhIG4gYm91bmRhcnksIGVsc2UgXGMgMC4NCiAqLw0KI2RlZmluZSBUZXN0X2FsaWduKHZhbCwgbiAgICAgKSAoIVRzdF9iaXRzKCB2YWwsIChuKSAtIDEgICAgICkgICApDQoNCi8qISBcYnJpZWYgR2V0cyBhbGlnbm1lbnQgb2YgdGhlIG51bWJlciBcYSB2YWwgd2l0aCByZXNwZWN0IHRvIHRoZSBcYSBuIGJvdW5kYXJ5Lg0KICoNCiAqIFxwYXJhbSB2YWwgSW5wdXQgdmFsdWUuDQogKiBccGFyYW0gbiAgIEJvdW5kYXJ5Lg0KICoNCiAqIFxyZXR1cm4gQWxpZ25tZW50IG9mIHRoZSBudW1iZXIgXGEgdmFsIHdpdGggcmVzcGVjdCB0byB0aGUgXGEgbiBib3VuZGFyeS4NCiAqLw0KI2RlZmluZSBHZXRfYWxpZ24oIHZhbCwgbiAgICAgKSAoICBSZF9iaXRzKCB2YWwsIChuKSAtIDEgICAgICkgICApDQoNCi8qISBcYnJpZWYgU2V0cyBhbGlnbm1lbnQgb2YgdGhlIGx2YWx1ZSBudW1iZXIgXGEgbHZhbCB0byBcYSBhbGcgd2l0aCByZXNwZWN0IHRvIHRoZSBcYSBuIGJvdW5kYXJ5Lg0KICoNCiAqIFxwYXJhbSBsdmFsICBJbnB1dC9vdXRwdXQgbHZhbHVlLg0KICogXHBhcmFtIG4gICAgIEJvdW5kYXJ5Lg0KICogXHBhcmFtIGFsZyAgIEFsaWdubWVudC4NCiAqDQogKiBccmV0dXJuIE5ldyB2YWx1ZSBvZiBcYSBsdmFsIHJlc3VsdGluZyBmcm9tIGl0cyBhbGlnbm1lbnQgc2V0IHRvIFxhIGFsZyB3aXRoIHJlc3BlY3QgdG8gdGhlIFxhIG4gYm91bmRhcnkuDQogKi8NCiNkZWZpbmUgU2V0X2FsaWduKGx2YWwsIG4sIGFsZykgKCAgV3JfYml0cyhsdmFsLCAobikgLSAxLCBhbGcpICAgKQ0KDQovKiEgXGJyaWVmIEFsaWducyB0aGUgbnVtYmVyIFxhIHZhbCB3aXRoIHRoZSB1cHBlciBcYSBuIGJvdW5kYXJ5Lg0KICoNCiAqIFxwYXJhbSB2YWwgSW5wdXQgdmFsdWUuDQogKiBccGFyYW0gbiAgIEJvdW5kYXJ5Lg0KICoNCiAqIFxyZXR1cm4gVmFsdWUgcmVzdWx0aW5nIGZyb20gdGhlIG51bWJlciBcYSB2YWwgYWxpZ25lZCB3aXRoIHRoZSB1cHBlciBcYSBuIGJvdW5kYXJ5Lg0KICovDQojZGVmaW5lIEFsaWduX3VwKCAgdmFsLCBuICAgICApICgoKHZhbCkgKyAoKG4pIC0gMSkpICYgfigobikgLSAxKSkNCg0KLyohIFxicmllZiBBbGlnbnMgdGhlIG51bWJlciBcYSB2YWwgd2l0aCB0aGUgbG93ZXIgXGEgbiBib3VuZGFyeS4NCiAqDQogKiBccGFyYW0gdmFsIElucHV0IHZhbHVlLg0KICogXHBhcmFtIG4gICBCb3VuZGFyeS4NCiAqDQogKiBccmV0dXJuIFZhbHVlIHJlc3VsdGluZyBmcm9tIHRoZSBudW1iZXIgXGEgdmFsIGFsaWduZWQgd2l0aCB0aGUgbG93ZXIgXGEgbiBib3VuZGFyeS4NCiAqLw0KI2RlZmluZSBBbGlnbl9kb3duKHZhbCwgbiAgICAgKSAoICh2YWwpICAgICAgICAgICAgICAmIH4oKG4pIC0gMSkpDQoNCi8vISBAfQ0KDQoNCi8qISBcbmFtZSBNYXRoZW1hdGljcw0KICoNCiAqIFRoZSBzYW1lIGNvbnNpZGVyYXRpb25zIGFzIGZvciBjbHogYW5kIGN0eiBhcHBseSBoZXJlIGJ1dCBHQ0MgZG9lcyBub3QNCiAqIHByb3ZpZGUgYnVpbHQtaW4gZnVuY3Rpb25zIHRvIGFjY2VzcyB0aGUgYXNzZW1ibHkgaW5zdHJ1Y3Rpb25zIGFicywgbWluIGFuZA0KICogbWF4IGFuZCBpdCBkb2VzIG5vdCBwcm9kdWNlIHRoZW0gYnkgaXRzZWxmIGluIG1vc3QgY2FzZXMsIHNvIHR3byBzZXRzIG9mDQogKiBtYWNyb3MgYXJlIGRlZmluZWQgaGVyZToNCiAqICAgLSBBYnMsIE1pbiBhbmQgTWF4IHRvIGFwcGx5IHRvIGNvbnN0YW50IGV4cHJlc3Npb25zICh2YWx1ZXMga25vd24gYXQNCiAqICAgICBjb21waWxlIHRpbWUpOw0KICogICAtIGFicywgbWluIGFuZCBtYXggdG8gYXBwbHkgdG8gbm9uLWNvbnN0YW50IGV4cHJlc3Npb25zICh2YWx1ZXMgdW5rbm93biBhdA0KICogICAgIGNvbXBpbGUgdGltZSksIGFicyBpcyBmb3VuZCBpbiBzdGRsaWIuaC4NCiAqLw0KLy8hIEB7DQoNCi8qISBcYnJpZWYgVGFrZXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIFxhIGEuDQogKg0KICogXHBhcmFtIGEgSW5wdXQgdmFsdWUuDQogKg0KICogXHJldHVybiBBYnNvbHV0ZSB2YWx1ZSBvZiBcYSBhLg0KICoNCiAqIFxub3RlIE1vcmUgb3B0aW1pemVkIGlmIG9ubHkgdXNlZCB3aXRoIHZhbHVlcyBrbm93biBhdCBjb21waWxlIHRpbWUuDQogKi8NCiNkZWZpbmUgQWJzKGEpICAgICAgICAgICAgICAoKChhKSA8ICAwICkgPyAtKGEpIDogKGEpKQ0KDQovKiEgXGJyaWVmIFRha2VzIHRoZSBtaW5pbWFsIHZhbHVlIG9mIFxhIGEgYW5kIFxhIGIuDQogKg0KICogXHBhcmFtIGEgSW5wdXQgdmFsdWUuDQogKiBccGFyYW0gYiBJbnB1dCB2YWx1ZS4NCiAqDQogKiBccmV0dXJuIE1pbmltYWwgdmFsdWUgb2YgXGEgYSBhbmQgXGEgYi4NCiAqDQogKiBcbm90ZSBNb3JlIG9wdGltaXplZCBpZiBvbmx5IHVzZWQgd2l0aCB2YWx1ZXMga25vd24gYXQgY29tcGlsZSB0aW1lLg0KICovDQojZGVmaW5lIE1pbihhLCBiKSAgICAgICAgICAgKCgoYSkgPCAoYikpID8gIChhKSA6IChiKSkNCg0KLyohIFxicmllZiBUYWtlcyB0aGUgbWF4aW1hbCB2YWx1ZSBvZiBcYSBhIGFuZCBcYSBiLg0KICoNCiAqIFxwYXJhbSBhIElucHV0IHZhbHVlLg0KICogXHBhcmFtIGIgSW5wdXQgdmFsdWUuDQogKg0KICogXHJldHVybiBNYXhpbWFsIHZhbHVlIG9mIFxhIGEgYW5kIFxhIGIuDQogKg0KICogXG5vdGUgTW9yZSBvcHRpbWl6ZWQgaWYgb25seSB1c2VkIHdpdGggdmFsdWVzIGtub3duIGF0IGNvbXBpbGUgdGltZS4NCiAqLw0KI2RlZmluZSBNYXgoYSwgYikgICAgICAgICAgICgoKGEpID4gKGIpKSA/ICAoYSkgOiAoYikpDQoNCi8vIGFicygpIGlzIGFscmVhZHkgZGVmaW5lZCBieSBzdGRsaWIuaA0KDQovKiEgXGJyaWVmIFRha2VzIHRoZSBtaW5pbWFsIHZhbHVlIG9mIFxhIGEgYW5kIFxhIGIuDQogKg0KICogXHBhcmFtIGEgSW5wdXQgdmFsdWUuDQogKiBccGFyYW0gYiBJbnB1dCB2YWx1ZS4NCiAqDQogKiBccmV0dXJuIE1pbmltYWwgdmFsdWUgb2YgXGEgYSBhbmQgXGEgYi4NCiAqDQogKiBcbm90ZSBNb3JlIG9wdGltaXplZCBpZiBvbmx5IHVzZWQgd2l0aCB2YWx1ZXMgdW5rbm93biBhdCBjb21waWxlIHRpbWUuDQogKi8NCiNkZWZpbmUgbWluKGEsIGIpICAgTWluKGEsIGIpDQoNCi8qISBcYnJpZWYgVGFrZXMgdGhlIG1heGltYWwgdmFsdWUgb2YgXGEgYSBhbmQgXGEgYi4NCiAqDQogKiBccGFyYW0gYSBJbnB1dCB2YWx1ZS4NCiAqIFxwYXJhbSBiIElucHV0IHZhbHVlLg0KICoNCiAqIFxyZXR1cm4gTWF4aW1hbCB2YWx1ZSBvZiBcYSBhIGFuZCBcYSBiLg0KICoNCiAqIFxub3RlIE1vcmUgb3B0aW1pemVkIGlmIG9ubHkgdXNlZCB3aXRoIHZhbHVlcyB1bmtub3duIGF0IGNvbXBpbGUgdGltZS4NCiAqLw0KI2RlZmluZSBtYXgoYSwgYikgICBNYXgoYSwgYikNCg0KLy8hIEB9DQoNCg0KLyohIFxicmllZiBDYWxscyB0aGUgcm91dGluZSBhdCBhZGRyZXNzIFxhIGFkZHIuDQogKg0KICogSXQgZ2VuZXJhdGVzIGEgbG9uZyBjYWxsIG9wY29kZS4NCiAqDQogKiBGb3IgZXhhbXBsZSwgYExvbmdfY2FsbCgweDgwMDAwMDAwKScgZ2VuZXJhdGVzIGEgc29mdHdhcmUgcmVzZXQgb24gYSBVQzMgaWYNCiAqIGl0IGlzIGludm9rZWQgZnJvbSB0aGUgQ1BVIHN1cGVydmlzb3IgbW9kZS4NCiAqDQogKiBccGFyYW0gYWRkciAgQWRkcmVzcyBvZiB0aGUgcm91dGluZSB0byBjYWxsLg0KICoNCiAqIFxub3RlIEl0IG1heSBiZSB1c2VkIGFzIGEgbG9uZyBqdW1wIG9wY29kZSBpbiBzb21lIHNwZWNpYWwgY2FzZXMuDQogKi8NCiNkZWZpbmUgTG9uZ19jYWxsKGFkZHIpICAgICAgICAgICAgICAgICAgICgoKih2b2lkICgqKSh2b2lkKSkoYWRkcikpKCkpDQoNCg0KLyohIFxuYW1lIE1DVSBFbmRpYW5pc20gSGFuZGxpbmcNCiAqIEFSTSBpcyBNQ1UgbGl0dGxlIGVuZGlhbmlzbS4NCiAqLw0KLy8hIEB7DQojZGVmaW5lICBNU0IodTE2KSAgICAgICAoKChVOCAgKikmKHUxNikpWzFdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiBcYSB1MTYuDQojZGVmaW5lICBMU0IodTE2KSAgICAgICAoKChVOCAgKikmKHUxNikpWzBdKSAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgXGEgdTE2Lg0KDQojZGVmaW5lICBNU0godTMyKSAgICAgICAoKChVMTYgKikmKHUzMikpWzFdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgaGFsZi13b3JkIG9mIFxhIHUzMi4NCiNkZWZpbmUgIExTSCh1MzIpICAgICAgICgoKFUxNiAqKSYodTMyKSlbMF0pIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgaGFsZi13b3JkIG9mIFxhIHUzMi4NCiNkZWZpbmUgIE1TQjBXKHUzMikgICAgICgoKFU4ICAqKSYodTMyKSlbM10pIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDFzdCByYW5rIG9mIFxhIHUzMi4NCiNkZWZpbmUgIE1TQjFXKHUzMikgICAgICgoKFU4ICAqKSYodTMyKSlbMl0pIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDJuZCByYW5rIG9mIFxhIHUzMi4NCiNkZWZpbmUgIE1TQjJXKHUzMikgICAgICgoKFU4ICAqKSYodTMyKSlbMV0pIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDNyZCByYW5rIG9mIFxhIHUzMi4NCiNkZWZpbmUgIE1TQjNXKHUzMikgICAgICgoKFU4ICAqKSYodTMyKSlbMF0pIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDR0aCByYW5rIG9mIFxhIHUzMi4NCiNkZWZpbmUgIExTQjNXKHUzMikgICAgIE1TQjBXKHUzMikgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiA0dGggcmFuayBvZiBcYSB1MzIuDQojZGVmaW5lICBMU0IyVyh1MzIpICAgICBNU0IxVyh1MzIpICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgM3JkIHJhbmsgb2YgXGEgdTMyLg0KI2RlZmluZSAgTFNCMVcodTMyKSAgICAgTVNCMlcodTMyKSAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDJuZCByYW5rIG9mIFxhIHUzMi4NCiNkZWZpbmUgIExTQjBXKHUzMikgICAgIE1TQjNXKHUzMikgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAxc3QgcmFuayBvZiBcYSB1MzIuDQogICAgICAgIA0KI2RlZmluZSAgTVNXKHU2NCkgICAgICAgKCgoVTMyICopJih1NjQpKVsxXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IHdvcmQgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTFNXKHU2NCkgICAgICAgKCgoVTMyICopJih1NjQpKVswXSkgLy8hPCBMZWFzdCBzaWduaWZpY2FudCB3b3JkIG9mIFxhIHU2NC4NCiNkZWZpbmUgIE1TSDAodTY0KSAgICAgICgoKFUxNiAqKSYodTY0KSlbM10pIC8vITwgTW9zdCBzaWduaWZpY2FudCBoYWxmLXdvcmQgb2YgMXN0IHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTVNIMSh1NjQpICAgICAgKCgoVTE2ICopJih1NjQpKVsyXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGhhbGYtd29yZCBvZiAybmQgcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBNU0gyKHU2NCkgICAgICAoKChVMTYgKikmKHU2NCkpWzFdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgaGFsZi13b3JkIG9mIDNyZCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIE1TSDModTY0KSAgICAgICgoKFUxNiAqKSYodTY0KSlbMF0pIC8vITwgTW9zdCBzaWduaWZpY2FudCBoYWxmLXdvcmQgb2YgNHRoIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTFNIMyh1NjQpICAgICAgTVNIMCh1NjQpICAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBoYWxmLXdvcmQgb2YgNHRoIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTFNIMih1NjQpICAgICAgTVNIMSh1NjQpICAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBoYWxmLXdvcmQgb2YgM3JkIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTFNIMSh1NjQpICAgICAgTVNIMih1NjQpICAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBoYWxmLXdvcmQgb2YgMm5kIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTFNIMCh1NjQpICAgICAgTVNIMyh1NjQpICAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBoYWxmLXdvcmQgb2YgMXN0IHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTVNCMEQodTY0KSAgICAgKCgoVTggICopJih1NjQpKVs3XSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgMXN0IHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTVNCMUQodTY0KSAgICAgKCgoVTggICopJih1NjQpKVs2XSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgMm5kIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTVNCMkQodTY0KSAgICAgKCgoVTggICopJih1NjQpKVs1XSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgM3JkIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTVNCM0QodTY0KSAgICAgKCgoVTggICopJih1NjQpKVs0XSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgNHRoIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTVNCNEQodTY0KSAgICAgKCgoVTggICopJih1NjQpKVszXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgNXRoIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTVNCNUQodTY0KSAgICAgKCgoVTggICopJih1NjQpKVsyXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgNnRoIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTVNCNkQodTY0KSAgICAgKCgoVTggICopJih1NjQpKVsxXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgN3RoIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTVNCN0QodTY0KSAgICAgKCgoVTggICopJih1NjQpKVswXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgOHRoIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTFNCN0QodTY0KSAgICAgTVNCMEQodTY0KSAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDh0aCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIExTQjZEKHU2NCkgICAgIE1TQjFEKHU2NCkgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiA3dGggcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBMU0I1RCh1NjQpICAgICBNU0IyRCh1NjQpICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgNnRoIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTFNCNEQodTY0KSAgICAgTVNCM0QodTY0KSAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDV0aCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIExTQjNEKHU2NCkgICAgIE1TQjREKHU2NCkgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiA0dGggcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBMU0IyRCh1NjQpICAgICBNU0I1RCh1NjQpICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgM3JkIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTFNCMUQodTY0KSAgICAgTVNCNkQodTY0KSAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDJuZCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIExTQjBEKHU2NCkgICAgIE1TQjdEKHU2NCkgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAxc3QgcmFuayBvZiBcYSB1NjQuDQoNCiNkZWZpbmUgIEJFMTYoeCkgICAgICAgIFN3YXAxNih4KQ0KI2RlZmluZSAgTEUxNih4KSAgICAgICAgKHgpDQoNCiNkZWZpbmUgIGxlMTZfdG9fY3B1KHgpICh4KQ0KI2RlZmluZSAgY3B1X3RvX2xlMTYoeCkgKHgpDQojZGVmaW5lICBMRTE2X1RPX0NQVSh4KSAoeCkNCiNkZWZpbmUgIENQVV9UT19MRTE2KHgpICh4KQ0KDQojZGVmaW5lICBiZTE2X3RvX2NwdSh4KSBTd2FwMTYoeCkNCiNkZWZpbmUgIGNwdV90b19iZTE2KHgpIFN3YXAxNih4KQ0KI2RlZmluZSAgQkUxNl9UT19DUFUoeCkgU3dhcDE2KHgpDQojZGVmaW5lICBDUFVfVE9fQkUxNih4KSBTd2FwMTYoeCkNCg0KI2RlZmluZSAgbGUzMl90b19jcHUoeCkgKHgpDQojZGVmaW5lICBjcHVfdG9fbGUzMih4KSAoeCkNCiNkZWZpbmUgIExFMzJfVE9fQ1BVKHgpICh4KQ0KI2RlZmluZSAgQ1BVX1RPX0xFMzIoeCkgKHgpDQoNCiNkZWZpbmUgIGJlMzJfdG9fY3B1KHgpIHN3YXAzMih4KQ0KI2RlZmluZSAgY3B1X3RvX2JlMzIoeCkgc3dhcDMyKHgpDQojZGVmaW5lICBCRTMyX1RPX0NQVSh4KSBzd2FwMzIoeCkNCiNkZWZpbmUgIENQVV9UT19CRTMyKHgpIHN3YXAzMih4KQ0KLy8hIEB9DQoNCg0KLyohIFxuYW1lIEVuZGlhbmlzbSBDb252ZXJzaW9uDQogKg0KICogVGhlIHNhbWUgY29uc2lkZXJhdGlvbnMgYXMgZm9yIGNseiBhbmQgY3R6IGFwcGx5IGhlcmUgYnV0IEdDQydzDQogKiBfX2J1aWx0aW5fYnN3YXBfMzIgYW5kIF9fYnVpbHRpbl9ic3dhcF82NCBkbyBub3QgYmVoYXZlIGxpa2UgbWFjcm9zIHdoZW4NCiAqIGFwcGxpZWQgdG8gY29uc3RhbnQgZXhwcmVzc2lvbnMsIHNvIHR3byBzZXRzIG9mIG1hY3JvcyBhcmUgZGVmaW5lZCBoZXJlOg0KICogICAtIFN3YXAxNiwgU3dhcDMyIGFuZCBTd2FwNjQgdG8gYXBwbHkgdG8gY29uc3RhbnQgZXhwcmVzc2lvbnMgKHZhbHVlcyBrbm93bg0KICogICAgIGF0IGNvbXBpbGUgdGltZSk7DQogKiAgIC0gc3dhcDE2LCBzd2FwMzIgYW5kIHN3YXA2NCB0byBhcHBseSB0byBub24tY29uc3RhbnQgZXhwcmVzc2lvbnMgKHZhbHVlcw0KICogICAgIHVua25vd24gYXQgY29tcGlsZSB0aW1lKS4NCiAqLw0KLy8hIEB7DQoNCi8qISBcYnJpZWYgVG9nZ2xlcyB0aGUgZW5kaWFuaXNtIG9mIFxhIHUxNiAoYnkgc3dhcHBpbmcgaXRzIGJ5dGVzKS4NCiAqDQogKiBccGFyYW0gdTE2IFUxNiBvZiB3aGljaCB0byB0b2dnbGUgdGhlIGVuZGlhbmlzbS4NCiAqDQogKiBccmV0dXJuIFZhbHVlIHJlc3VsdGluZyBmcm9tIFxhIHUxNiB3aXRoIHRvZ2dsZWQgZW5kaWFuaXNtLg0KICoNCiAqIFxub3RlIE1vcmUgb3B0aW1pemVkIGlmIG9ubHkgdXNlZCB3aXRoIHZhbHVlcyBrbm93biBhdCBjb21waWxlIHRpbWUuDQogKi8NCiNkZWZpbmUgU3dhcDE2KHUxNikgKChVMTYpKCgoVTE2KSh1MTYpID4+IDgpIHxcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAoKFUxNikodTE2KSA8PCA4KSkpDQoNCi8qISBcYnJpZWYgVG9nZ2xlcyB0aGUgZW5kaWFuaXNtIG9mIFxhIHUzMiAoYnkgc3dhcHBpbmcgaXRzIGJ5dGVzKS4NCiAqDQogKiBccGFyYW0gdTMyIFUzMiBvZiB3aGljaCB0byB0b2dnbGUgdGhlIGVuZGlhbmlzbS4NCiAqDQogKiBccmV0dXJuIFZhbHVlIHJlc3VsdGluZyBmcm9tIFxhIHUzMiB3aXRoIHRvZ2dsZWQgZW5kaWFuaXNtLg0KICoNCiAqIFxub3RlIE1vcmUgb3B0aW1pemVkIGlmIG9ubHkgdXNlZCB3aXRoIHZhbHVlcyBrbm93biBhdCBjb21waWxlIHRpbWUuDQogKi8NCiNkZWZpbmUgU3dhcDMyKHUzMikgKChVMzIpKCgoVTMyKVN3YXAxNigoVTMyKSh1MzIpID4+IDE2KSkgfFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVTMyKVN3YXAxNigoVTMyKSh1MzIpKSA8PCAxNikpKQ0KDQovKiEgXGJyaWVmIFRvZ2dsZXMgdGhlIGVuZGlhbmlzbSBvZiBcYSB1NjQgKGJ5IHN3YXBwaW5nIGl0cyBieXRlcykuDQogKg0KICogXHBhcmFtIHU2NCBVNjQgb2Ygd2hpY2ggdG8gdG9nZ2xlIHRoZSBlbmRpYW5pc20uDQogKg0KICogXHJldHVybiBWYWx1ZSByZXN1bHRpbmcgZnJvbSBcYSB1NjQgd2l0aCB0b2dnbGVkIGVuZGlhbmlzbS4NCiAqDQogKiBcbm90ZSBNb3JlIG9wdGltaXplZCBpZiBvbmx5IHVzZWQgd2l0aCB2YWx1ZXMga25vd24gYXQgY29tcGlsZSB0aW1lLg0KICovDQojZGVmaW5lIFN3YXA2NCh1NjQpICgoVTY0KSgoKFU2NClTd2FwMzIoKFU2NCkodTY0KSA+PiAzMikpIHxcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAoKFU2NClTd2FwMzIoKFU2NCkodTY0KSkgPDwgMzIpKSkNCg0KLyohIFxicmllZiBUb2dnbGVzIHRoZSBlbmRpYW5pc20gb2YgXGEgdTE2IChieSBzd2FwcGluZyBpdHMgYnl0ZXMpLg0KICoNCiAqIFxwYXJhbSB1MTYgVTE2IG9mIHdoaWNoIHRvIHRvZ2dsZSB0aGUgZW5kaWFuaXNtLg0KICoNCiAqIFxyZXR1cm4gVmFsdWUgcmVzdWx0aW5nIGZyb20gXGEgdTE2IHdpdGggdG9nZ2xlZCBlbmRpYW5pc20uDQogKg0KICogXG5vdGUgTW9yZSBvcHRpbWl6ZWQgaWYgb25seSB1c2VkIHdpdGggdmFsdWVzIHVua25vd24gYXQgY29tcGlsZSB0aW1lLg0KICovDQojZGVmaW5lIHN3YXAxNih1MTYpIFN3YXAxNih1MTYpDQoNCi8qISBcYnJpZWYgVG9nZ2xlcyB0aGUgZW5kaWFuaXNtIG9mIFxhIHUzMiAoYnkgc3dhcHBpbmcgaXRzIGJ5dGVzKS4NCiAqDQogKiBccGFyYW0gdTMyIFUzMiBvZiB3aGljaCB0byB0b2dnbGUgdGhlIGVuZGlhbmlzbS4NCiAqDQogKiBccmV0dXJuIFZhbHVlIHJlc3VsdGluZyBmcm9tIFxhIHUzMiB3aXRoIHRvZ2dsZWQgZW5kaWFuaXNtLg0KICoNCiAqIFxub3RlIE1vcmUgb3B0aW1pemVkIGlmIG9ubHkgdXNlZCB3aXRoIHZhbHVlcyB1bmtub3duIGF0IGNvbXBpbGUgdGltZS4NCiAqLw0KI2lmIChkZWZpbmVkIF9fR05VQ19fKQ0KIyAgIGRlZmluZSBzd2FwMzIodTMyKSAoKFUzMilfX2J1aWx0aW5fYnN3YXAzMigoVTMyKSh1MzIpKSkNCiNlbHNlDQojICAgZGVmaW5lIHN3YXAzMih1MzIpIFN3YXAzMih1MzIpDQojZW5kaWYNCg0KLyohIFxicmllZiBUb2dnbGVzIHRoZSBlbmRpYW5pc20gb2YgXGEgdTY0IChieSBzd2FwcGluZyBpdHMgYnl0ZXMpLg0KICoNCiAqIFxwYXJhbSB1NjQgVTY0IG9mIHdoaWNoIHRvIHRvZ2dsZSB0aGUgZW5kaWFuaXNtLg0KICoNCiAqIFxyZXR1cm4gVmFsdWUgcmVzdWx0aW5nIGZyb20gXGEgdTY0IHdpdGggdG9nZ2xlZCBlbmRpYW5pc20uDQogKg0KICogXG5vdGUgTW9yZSBvcHRpbWl6ZWQgaWYgb25seSB1c2VkIHdpdGggdmFsdWVzIHVua25vd24gYXQgY29tcGlsZSB0aW1lLg0KICovDQojaWYgKGRlZmluZWQgX19HTlVDX18pDQojICAgZGVmaW5lIHN3YXA2NCh1NjQpICgoVTY0KV9fYnVpbHRpbl9ic3dhcDY0KChVNjQpKHU2NCkpKQ0KI2Vsc2UNCiMgICBkZWZpbmUgc3dhcDY0KHU2NCkgKChVNjQpKCgoVTY0KXN3YXAzMigoVTY0KSh1NjQpID4+IDMyKSkgfFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVTY0KXN3YXAzMigoVTY0KSh1NjQpKSA8PCAzMikpKQ0KI2VuZGlmDQoNCi8vISBAfQ0KDQoNCi8qISBcbmFtZSBUYXJnZXQgQWJzdHJhY3Rpb24NCiAqLw0KLy8hIEB7DQoNCiNkZWZpbmUgX0dMT0JFWFRfICAgICAgICAgICBleHRlcm4gICAgICAvLyE8IGV4dGVybiBzdG9yYWdlLWNsYXNzIHNwZWNpZmllci4NCiNkZWZpbmUgX0NPTlNUX1RZUEVfICAgICAgICBjb25zdCAgICAgICAvLyE8IGNvbnN0IHR5cGUgcXVhbGlmaWVyLg0KI2RlZmluZSBfTUVNX1RZUEVfU0xPV18gICAgICAgICAgICAgICAgIC8vITwgU2xvdyBtZW1vcnkgdHlwZS4NCiNkZWZpbmUgX01FTV9UWVBFX01FREZBU1RfICAgICAgICAgICAgICAvLyE8IEZhaXJseSBmYXN0IG1lbW9yeSB0eXBlLg0KI2RlZmluZSBfTUVNX1RZUEVfRkFTVF8gICAgICAgICAgICAgICAgIC8vITwgRmFzdCBtZW1vcnkgdHlwZS4NCg0KdHlwZWRlZiBVOCAgICAgICAgICAgICAgICAgIEJ5dGU7ICAgICAgIC8vITwgOC1iaXQgdW5zaWduZWQgaW50ZWdlci4NCg0KI2RlZmluZSBtZW1jbXBfcmFtMnJhbSAgICAgIG1lbWNtcCAgICAgIC8vITwgVGFyZ2V0LXNwZWNpZmljIG1lbWNtcCBvZiBSQU0gdG8gUkFNLg0KI2RlZmluZSBtZW1jbXBfY29kZTJyYW0gICAgIG1lbWNtcCAgICAgIC8vITwgVGFyZ2V0LXNwZWNpZmljIG1lbWNtcCBvZiBSQU0gdG8gTlZSQU0uDQojZGVmaW5lIG1lbWNweV9yYW0ycmFtICAgICAgbWVtY3B5ICAgICAgLy8hPCBUYXJnZXQtc3BlY2lmaWMgbWVtY3B5IGZyb20gUkFNIHRvIFJBTS4NCiNkZWZpbmUgbWVtY3B5X2NvZGUycmFtICAgICBtZW1jcHkgICAgICAvLyE8IFRhcmdldC1zcGVjaWZpYyBtZW1jcHkgZnJvbSBOVlJBTSB0byBSQU0uDQoNCiNkZWZpbmUgTFNCMCh1MzIpICAgICAgICAgICBMU0IwVyh1MzIpICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgMXN0IHJhbmsgb2YgXGEgdTMyLg0KI2RlZmluZSBMU0IxKHUzMikgICAgICAgICAgIExTQjFXKHUzMikgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAybmQgcmFuayBvZiBcYSB1MzIuDQojZGVmaW5lIExTQjIodTMyKSAgICAgICAgICAgTFNCMlcodTMyKSAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDNyZCByYW5rIG9mIFxhIHUzMi4NCiNkZWZpbmUgTFNCMyh1MzIpICAgICAgICAgICBMU0IzVyh1MzIpICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgNHRoIHJhbmsgb2YgXGEgdTMyLg0KI2RlZmluZSBNU0IzKHUzMikgICAgICAgICAgIE1TQjNXKHUzMikgIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDR0aCByYW5rIG9mIFxhIHUzMi4NCiNkZWZpbmUgTVNCMih1MzIpICAgICAgICAgICBNU0IyVyh1MzIpICAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAzcmQgcmFuayBvZiBcYSB1MzIuDQojZGVmaW5lIE1TQjEodTMyKSAgICAgICAgICAgTVNCMVcodTMyKSAgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgMm5kIHJhbmsgb2YgXGEgdTMyLg0KI2RlZmluZSBNU0IwKHUzMikgICAgICAgICAgIE1TQjBXKHUzMikgIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDFzdCByYW5rIG9mIFxhIHUzMi4NCg0KLy8hIEB9DQoNCi8qKg0KICogXGJyaWVmIENhbGN1bGF0ZSBcZiQgXGxlZnRcbGNlaWwgXGZyYWN7YX17Yn0gXHJpZ2h0XHJjZWlsIFxmJCB1c2luZw0KICogaW50ZWdlciBhcml0aG1ldGljLg0KICoNCiAqIFxwYXJhbSBhIEFuIGludGVnZXINCiAqIFxwYXJhbSBiIEFub3RoZXIgaW50ZWdlcg0KICoNCiAqIFxyZXR1cm4gKFxhIGEgLyBcYSBiKSByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuDQogKi8NCiNkZWZpbmUgZGl2X2NlaWwoYSwgYikgICAgICAoKChhKSArIChiKSAtIDEpIC8gKGIpKQ0KDQojZW5kaWYgIC8vICNpZm5kZWYgX19BU1NFTUJMWV9fDQoNCg0KI2lmIGRlZmluZWQoX19JQ0NBUk1fXykNCiNkZWZpbmUgU0hPUlRFTlVNICAgICAgICAgICBfX3BhY2tlZA0KI2VsaWYgZGVmaW5lZChfX0dOVUNfXykNCiNkZWZpbmUgU0hPUlRFTlVNICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQ0KI2VuZGlmDQoNCiNkZWZpbmUgRkxBU0hfREVDTEFSRSh4KSAgY29uc3QgeA0KI2RlZmluZSBGTEFTSF9FWFRFUk4oeCkgZXh0ZXJuIGNvbnN0IHgNCiNkZWZpbmUgUEdNX1JFQURfQllURSh4KSAqKHgpDQojZGVmaW5lIFBHTV9SRUFEX1dPUkQoeCkgKih4KQ0KI2RlZmluZSBNRU1DUFlfRU5ESUFOIG1lbWNweQ0KI2RlZmluZSBQR01fUkVBRF9CTE9DSyhkc3QsIHNyYywgbGVuKSBtZW1jcHkoKGRzdCksIChzcmMpLCAobGVuKSkNCg0KLyogQ29udmVydGluZyBvZiB2YWx1ZXMgZnJvbSBDUFUgZW5kaWFuIHRvIGxpdHRsZSBlbmRpYW4uICovDQojZGVmaW5lIENQVV9FTkRJQU5fVE9fTEUxNih4KSAgICh4KQ0KI2RlZmluZSBDUFVfRU5ESUFOX1RPX0xFMzIoeCkgICAoeCkNCiNkZWZpbmUgQ1BVX0VORElBTl9UT19MRTY0KHgpICAgKHgpDQoNCi8qIENvbnZlcnRpbmcgb2YgdmFsdWVzIGZyb20gbGl0dGxlIGVuZGlhbiB0byBDUFUgZW5kaWFuLiAqLw0KI2RlZmluZSBMRTE2X1RPX0NQVV9FTkRJQU4oeCkgICAoeCkNCiNkZWZpbmUgTEUzMl9UT19DUFVfRU5ESUFOKHgpICAgKHgpDQojZGVmaW5lIExFNjRfVE9fQ1BVX0VORElBTih4KSAgICh4KQ0KDQovKiBDb252ZXJ0aW5nIG9mIGNvbnN0YW50cyBmcm9tIENQVSBlbmRpYW4gdG8gbGl0dGxlIGVuZGlhbi4gKi8NCiNkZWZpbmUgQ0NQVV9FTkRJQU5fVE9fTEUxNih4KSAgKHgpDQojZGVmaW5lIENDUFVfRU5ESUFOX1RPX0xFMzIoeCkgICh4KQ0KI2RlZmluZSBDQ1BVX0VORElBTl9UT19MRTY0KHgpICAoeCkNCg0KI2RlZmluZSBBRERSX0NPUFlfRFNUX1NSQ18xNihkc3QsIHNyYykgICgoZHN0KSA9IChzcmMpKQ0KI2RlZmluZSBBRERSX0NPUFlfRFNUX1NSQ182NChkc3QsIHNyYykgICgoZHN0KSA9IChzcmMpKQ0KDQovKioNCiAqIFx9DQogKi8NCg0KI2VuZGlmIC8qIFVUSUxTX0NPTVBJTEVSX0ggKi8NCg==