Ly8gTWljcm9zb2Z0IFZpc3VhbCBDKysgZ2VuZXJhdGVkIHJlc291cmNlIHNjcmlwdC4NCi8vDQojaW5jbHVkZSAicmVzb3VyY2UuaCINCg0KI2RlZmluZSBBUFNUVURJT19SRUFET05MWV9TWU1CT0xTDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLy8NCi8vIEdlbmVyYXRlZCBmcm9tIHRoZSBURVhUSU5DTFVERSAyIHJlc291cmNlLg0KLy8NCiNpbmNsdWRlICJhZnhyZXMuaCINCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCiN1bmRlZiBBUFNUVURJT19SRUFET05MWV9TWU1CT0xTDQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQovLyBHZXJtYW4gKEdlcm1hbnkpIHJlc291cmNlcw0KDQojaWYgIWRlZmluZWQoQUZYX1JFU09VUkNFX0RMTCkgfHwgZGVmaW5lZChBRlhfVEFSR19ERVUpDQojaWZkZWYgX1dJTjMyDQpMQU5HVUFHRSBMQU5HX0dFUk1BTiwgU1VCTEFOR19HRVJNQU4NCiNwcmFnbWEgY29kZV9wYWdlKDEyNTIpDQojZW5kaWYgLy9fV0lOMzINCg0KI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQovLw0KLy8gVEVYVElOQ0xVREUNCi8vDQoNCjEgVEVYVElOQ0xVREUgDQpCRUdJTg0KICAgICJyZXNvdXJjZS5oXDAiDQpFTkQNCg0KMiBURVhUSU5DTFVERSANCkJFR0lODQogICAgIiNpbmNsdWRlICIiYWZ4cmVzLmgiIlxyXG4iDQogICAgIlwwIg0KRU5EDQoNCjMgVEVYVElOQ0xVREUgDQpCRUdJTg0KICAgICIjZGVmaW5lIF9BRlhfTk9fU1BMSVRURVJfUkVTT1VSQ0VTXHJcbiINCiAgICAiI2RlZmluZSBfQUZYX05PX09MRV9SRVNPVVJDRVNcclxuIg0KICAgICIjZGVmaW5lIF9BRlhfTk9fVFJBQ0tFUl9SRVNPVVJDRVNcclxuIg0KICAgICIjZGVmaW5lIF9BRlhfTk9fUFJPUEVSVFlfUkVTT1VSQ0VTXHJcbiINCiAgICAiXHJcbiINCiAgICAiI2lmICFkZWZpbmVkKEFGWF9SRVNPVVJDRV9ETEwpIHx8IGRlZmluZWQoQUZYX1RBUkdfREVVKVxyXG4iDQogICAgIiNpZmRlZiBfV0lOMzJcclxuIg0KICAgICJMQU5HVUFHRSA3LCAxXHJcbiINCiAgICAiI3ByYWdtYSBjb2RlX3BhZ2UoMTI1MilcclxuIg0KICAgICIjZW5kaWYgLy9fV0lOMzJcclxuIg0KICAgICIjaW5jbHVkZSAiImwuZGV1XFxhZnhyZXMucmMiIiAgICAgICAgICAvLyBTdGFuZGFyZGtvbXBvbmVudGVuXHJcbiINCiAgICAiI2VuZGlmXHJcbiINCiAgICAiXDAiDQpFTkQNCg0KI2VuZGlmICAgIC8vIEFQU1RVRElPX0lOVk9LRUQNCg0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLy8NCi8vIFZlcnNpb24NCi8vDQoNClZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTw0KIEZJTEVWRVJTSU9OIDIsMywwLDANCiBQUk9EVUNUVkVSU0lPTiAyLDMsMCwwDQogRklMRUZMQUdTTUFTSyAweDNmTA0KI2lmZGVmIF9ERUJVRw0KIEZJTEVGTEFHUyAweDFMDQojZWxzZQ0KIEZJTEVGTEFHUyAweDBMDQojZW5kaWYNCiBGSUxFT1MgMHg0TA0KIEZJTEVUWVBFIDB4MkwNCiBGSUxFU1VCVFlQRSAweDBMDQpCRUdJTg0KICAgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyINCiAgICBCRUdJTg0KICAgICAgICBCTE9DSyAiMDQwNzA0YjAiDQogICAgICAgIEJFR0lODQogICAgICAgICAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAid3d3LmltYWdvbWF0LmRlIg0KICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJpVHVuZXMgVmlzdWFsaXplciINCiAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICIyLCAzLCAwLCAwIg0KICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJWaXpLaXQiDQogICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkiDQogICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJWaXpLaXQuRExMIg0KICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlZpektpdCBEeW5hbWljIExpbmsgTGlicmFyeSINCiAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsICIyLCAzLCAwLCAwIg0KICAgICAgICBFTkQNCiAgICBFTkQNCiAgICBCTE9DSyAiVmFyRmlsZUluZm8iDQogICAgQkVHSU4NCiAgICAgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHg0MDcsIDEyMDANCiAgICBFTkQNCkVORA0KDQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQovLw0KLy8gRGlhbG9nDQovLw0KDQpJRERfRElBTE9HMiBESUFMT0dFWCAwLCAwLCAyMTQsIDc5DQpTVFlMRSBEU19TRVRGT05UIHwgV1NfQ0hJTEQgfCBXU19ESVNBQkxFRCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VDQpDQVBUSU9OICJBYm91dCINCkZPTlQgOCwgIk1TIFNhbnMgU2VyaWYiLCAwLCAwLCAweDANCkJFR0lODQogICAgQ1RFWFQgICAgICAgICAgICJWaXpLaXQiLElEQ19TVEFUSUMsNywxMiwyMDEsOA0KICAgIENURVhUICAgICAgICAgICAiqSAyMDA0LTIwMDkgSGVpa28gV2ljaG1hbm4iLElEQ19TVEFUSUMsNyw1NywyMDEsMTANCiAgICBDVEVYVCAgICAgICAgICAgImh0dHA6Ly93d3cuaW1hZ29tYXQuZGUvdml6a2l0IixJRENfU1RBVElDLDcsNDEsMjAxLDgNCiAgICBDVEVYVCAgICAgICAgICAgIlZlcnNpb24gMi4zIixJRENfU1RBVElDLDcsMjMsMjAxLDkNCkVORA0KDQpJRERfRElBTE9HMyBESUFMT0dFWCAwLCAwLCAyMTQsIDc5DQpTVFlMRSBEU19TRVRGT05UIHwgV1NfQ0hJTEQgfCBXU19ESVNBQkxFRCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VDQpDQVBUSU9OICJGb250Ig0KRk9OVCA4LCAiTVMgU2FucyBTZXJpZiIsIDAsIDAsIDB4MA0KQkVHSU4NCiAgICBDT01CT0JPWCAgICAgICAgSURDX0NPTUJPMSw0MCwyNiwxNTQsMzAsQ0JTX0RST1BET1dOTElTVCB8IENCU19TT1JUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1ANCiAgICBSVEVYVCAgICAgICAgICAgIkZvbnQ6IixJRENfU1RBVElDLDE1LDI4LDE1LDgNCkVORA0KDQpJRERfRElBTE9HNCBESUFMT0dFWCAwLCAwLCAyMTQsIDc4DQpTVFlMRSBEU19TRVRGT05UIHwgV1NfQ0hJTEQgfCBXU19ESVNBQkxFRCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VDQpDQVBUSU9OICJVcGRhdGUiDQpGT05UIDgsICJNUyBTYW5zIFNlcmlmIiwgNDAwLCAwLCAweDANCkJFR0lODQogICAgQ09OVFJPTCAgICAgICAgICJDaGVjayBGb3IgVXBkYXRlIE9uIFN0YXJ0dXAiLElEQ19DSEVDS19GT1JfVVBEQVRFLA0KICAgICAgICAgICAgICAgICAgICAiQnV0dG9uIixCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QLDQ0LDI4LDExMCwxMA0KRU5EDQoNCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi8vDQovLyBGT05UUkVTT1VSQ0UNCi8vDQoNCklEUl9ERVZST1lFRk9OVCAgICAgICAgIEZPTlRSRVNPVVJDRSAgICAgICAgICAgICIuLlxcLi5cXHJlc291cmNlc1xcRGV2cm95ZVxcRGV2cm95ZSBPcGVuIFR5cGVcXERFVlJPWUVfLm90ZiINCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi8vDQovLyBERVNJR05JTkZPDQovLw0KDQojaWZkZWYgQVBTVFVESU9fSU5WT0tFRA0KR1VJREVMSU5FUyBERVNJR05JTkZPIA0KQkVHSU4NCiAgICBJRERfRElBTE9HMiwgRElBTE9HDQogICAgQkVHSU4NCiAgICAgICAgTEVGVE1BUkdJTiwgNw0KICAgICAgICBSSUdIVE1BUkdJTiwgMjA4DQogICAgICAgIFRPUE1BUkdJTiwgNw0KICAgICAgICBCT1RUT01NQVJHSU4sIDcyDQogICAgRU5EDQoNCiAgICBJRERfRElBTE9HMywgRElBTE9HDQogICAgQkVHSU4NCiAgICAgICAgTEVGVE1BUkdJTiwgNw0KICAgICAgICBSSUdIVE1BUkdJTiwgMjA3DQogICAgICAgIFRPUE1BUkdJTiwgNw0KICAgICAgICBCT1RUT01NQVJHSU4sIDcyDQogICAgRU5EDQoNCiAgICBJRERfRElBTE9HNCwgRElBTE9HDQogICAgQkVHSU4NCiAgICAgICAgTEVGVE1BUkdJTiwgNw0KICAgICAgICBSSUdIVE1BUkdJTiwgMjA3DQogICAgICAgIFRPUE1BUkdJTiwgNw0KICAgICAgICBCT1RUT01NQVJHSU4sIDcxDQogICAgRU5EDQpFTkQNCiNlbmRpZiAgICAvLyBBUFNUVURJT19JTlZPS0VEDQoNCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi8vDQovLyBQTkcNCi8vDQoNCklEUl9QTkdfU1BPVCAgICAgICAgICAgIFBORyAgICAgICAgICAgICAgICAgICAgICIuLlxcLi5cXHJlc291cmNlc1xcc3BvdC5wbmciDQojZW5kaWYgICAgLy8gR2VybWFuIChHZXJtYW55KSByZXNvdXJjZXMNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCg0KDQojaWZuZGVmIEFQU1RVRElPX0lOVk9LRUQNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQovLw0KLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuDQovLw0KI2RlZmluZSBfQUZYX05PX1NQTElUVEVSX1JFU09VUkNFUw0KI2RlZmluZSBfQUZYX05PX09MRV9SRVNPVVJDRVMNCiNkZWZpbmUgX0FGWF9OT19UUkFDS0VSX1JFU09VUkNFUw0KI2RlZmluZSBfQUZYX05PX1BST1BFUlRZX1JFU09VUkNFUw0KDQojaWYgIWRlZmluZWQoQUZYX1JFU09VUkNFX0RMTCkgfHwgZGVmaW5lZChBRlhfVEFSR19ERVUpDQojaWZkZWYgX1dJTjMyDQpMQU5HVUFHRSA3LCAxDQojcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQ0KI2VuZGlmIC8vX1dJTjMyDQojaW5jbHVkZSAibC5kZXVcYWZ4cmVzLnJjIiAgICAgICAgICAvLyBTdGFuZGFyZGtvbXBvbmVudGVuDQojZW5kaWYNCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCiNlbmRpZiAgICAvLyBub3QgQVBTVFVESU9fSU5WT0tFRA0KDQo=