Iw0KIyBGcmVlVHlwZSAyIGhvc3QgcGxhdGZvcm0gZGV0ZWN0aW9uIHJ1bGVzDQojDQoNCg0KIyBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5DQojIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4NCiMNCiMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwNCiMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLA0KIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQ0KIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdA0KIyBmdWxseS4NCg0KDQojIFRoaXMgc3ViLU1ha2VmaWxlIGlzIGluIGNoYXJnZSBvZiBkZXRlY3RpbmcgdGhlIGN1cnJlbnQgcGxhdGZvcm0uICBJdCBzZXRzDQojIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOg0KIw0KIyAgIEJVSUxEX0RJUiAgICBUaGUgY29uZmlndXJhdGlvbiBhbmQgc3lzdGVtLXNwZWNpZmljIGRpcmVjdG9yeS4gIFVzdWFsbHkNCiMgICAgICAgICAgICAgICAgYGJ1aWxkcy8kKFBMQVRGT1JNKScgYnV0IGNhbiBiZSBkaWZmZXJlbnQgZm9yIGN1c3RvbSBidWlsZHMNCiMgICAgICAgICAgICAgICAgb2YgdGhlIGxpYnJhcnkuDQojDQojIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIG11c3QgYmUgZGVmaW5lZCBpbiBzeXN0ZW0gc3BlY2lmaWMgYGRldGVjdC5taycNCiMgZmlsZXM6DQojDQojICAgUExBVEZPUk0gICAgIFRoZSBkZXRlY3RlZCBwbGF0Zm9ybS4gIFRoaXMgd2lsbCBkZWZhdWx0IHRvIGBhbnNpJyBpZg0KIyAgICAgICAgICAgICAgICBhdXRvLWRldGVjdGlvbiBmYWlscy4NCiMgICBDT05GSUdfRklMRSAgVGhlIGNvbmZpZ3VyYXRpb24gc3ViLW1ha2VmaWxlIHRvIHVzZS4gIFRoaXMgdXN1YWxseSBkZXBlbmRzDQojICAgICAgICAgICAgICAgIG9uIHRoZSBjb21waWxlciBkZWZpbmVkIGluIHRoZSBgQ0MnIGVudmlyb25tZW50IHZhcmlhYmxlLg0KIyAgIERFTEVURSAgICAgICBUaGUgc2hlbGwgY29tbWFuZCB1c2VkIHRvIHJlbW92ZSBhIGdpdmVuIGZpbGUuDQojICAgQ09QWSAgICAgICAgIFRoZSBzaGVsbCBjb21tYW5kIHVzZWQgdG8gY29weSBvbmUgZmlsZS4NCiMgICBTRVAgICAgICAgICAgVGhlIHBsYXRmb3JtLXNwZWNpZmljIGRpcmVjdG9yeSBzZXBhcmF0b3IuDQojICAgQ09NUElMRVJfU0VQIFRoZSBzZXBhcmF0b3IgdXNlZCBpbiBhcmd1bWVudHMgb2YgdGhlIGNvbXBpbGF0aW9uIHRvb2xzLg0KIyAgIENDICAgICAgICAgICBUaGUgY29tcGlsZXIgdG8gdXNlLg0KIw0KIyBZb3UgbmVlZCB0byBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZShzKSBiZWZvcmUgY2FsbGluZyBpdDoNCiMNCiMgICBUT1BfRElSICAgICAgVGhlIHRvcC1tb3N0IGRpcmVjdG9yeSBpbiB0aGUgRnJlZVR5cGUgbGlicmFyeSBzb3VyY2UNCiMgICAgICAgICAgICAgICAgaGllcmFyY2h5LiAgSWYgbm90IGRlZmluZWQsIGl0IHdpbGwgZGVmYXVsdCB0byBgLicuDQoNCiMgU2V0IGF1dG8tZGV0ZWN0aW9uIGRlZmF1bHQgdG8gYGFuc2knIHJlc3AuIFVOSVgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcy4NCiMNClBMQVRGT1JNICAgICA6PSBhbnNpDQpERUxFVEUgICAgICAgOj0gJChSTSkNCkNPUFkgICAgICAgICA6PSBjcA0KQ0FUICAgICAgICAgIDo9IGNhdA0KU0VQICAgICAgICAgIDo9IC8NCg0KQlVJTERfQ09ORklHIDo9ICQoVE9QX0RJUikvYnVpbGRzDQoNCiMgVGhlc2UgdHdvIGFzc2lnbm1lbnRzIG11c3QgYmUgZGVsYXllZC4NCkJVSUxEX0RJUiAgICA9ICQoQlVJTERfQ09ORklHKS8kKFBMQVRGT1JNKQ0KQ09ORklHX1JVTEVTID0gJChCVUlMRF9ESVIpLyQoQ09ORklHX0ZJTEUpDQoNCiMgV2UgZGVmaW5lIHRoZSBCQUNLU0xBU0ggdmFyaWFibGUgdG8gaG9sZCBhIHNpbmdsZSBiYWNrLXNsYXNoIGNoYXJhY3Rlci4NCiMgVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBhIGxpbmUgbGlrZQ0KIw0KIyAgIFNFUCA6PSBcDQojDQojIGRvZXMgbm90IHdvcmsgd2l0aCBHTlUgTWFrZSAodGhlIGJhY2tzbGFzaCBpcyBpbnRlcnByZXRlZCBhcyBhIGxpbmUNCiMgY29udGludWF0aW9uKS4gIFdoaWxlIGEgbGluZSBsaWtlDQojDQojICAgU0VQIDo9IFxcDQojDQojIHJlYWxseSBkZWZpbmVzICQoU0VQKSBhcyBgXCcgb24gVW5peCwgYW5kIGBcXCcgb24gRG9zIGFuZCBXaW5kb3dzIQ0KIw0KQkFDS1NMQVNIIDo9ICQoc3RyaXAgXCApDQoNCiMgRmluZCBhbGwgYXV0by1kZXRlY3RhYmxlIHBsYXRmb3Jtcy4NCiMNClBMQVRGT1JNUyA6PSAkKG5vdGRpciAkKHN1YnN0IC9kZXRlY3QubWssLCQod2lsZGNhcmQgJChCVUlMRF9DT05GSUcpLyovZGV0ZWN0Lm1rKSkpDQouUEhPTlk6ICQoUExBVEZPUk1TKSBhbnNpDQoNCiMgRmlsdGVyIG91dCBwbGF0Zm9ybSBzcGVjaWZpZWQgYXMgc2V0dXAgdGFyZ2V0Lg0KIw0KUExBVEZPUk0gOj0gJChmaXJzdHdvcmQgJChmaWx0ZXIgJChNQUtFQ01ER09BTFMpLCQoUExBVEZPUk1TKSkpDQoNCiMgSWYgbm8gc2V0dXAgdGFyZ2V0IHBsYXRmb3JtIHdhcyBzcGVjaWZpZWQsIGVuYWJsZSBhdXRvLWRldGVjdGlvbi8NCiMgZGVmYXVsdCBwbGF0Zm9ybS4NCiMNCmlmZXEgKCQoUExBVEZPUk0pLCkNCiAgUExBVEZPUk0gOj0gYW5zaQ0KZW5kaWYNCg0KIyBJZiB0aGUgdXNlciBoYXMgZXhwbGljaXRseSBhc2tlZCBmb3IgYGFuc2knIG9uIHRoZSBjb21tYW5kIGxpbmUsDQojIGRpc2FibGUgYXV0by1kZXRlY3Rpb24uDQojDQppZmVxICgkKGZpbmRzdHJpbmcgYW5zaSwkKE1BS0VDTURHT0FMUykpLCkNCiAgIyBOb3csIGluY2x1ZGUgYWxsIGRldGVjdGlvbiBydWxlIGZpbGVzIGZvdW5kIGluIHRoZSBgYnVpbGRzLzxzeXN0ZW0+Jw0KICAjIGRpcmVjdG9yaWVzLiAgTm90ZSB0aGF0IHRoZSBjYWxsaW5nIG9yZGVyIG9mIHRoZSB2YXJpb3VzIGBkZXRlY3QubWsnDQogICMgZmlsZXMgaXNuJ3QgcHJlZGljdGFibGUuDQogICMNCiAgaW5jbHVkZSAkKHdpbGRjYXJkICQoQlVJTERfQ09ORklHKS8qL2RldGVjdC5taykNCmVuZGlmDQoNCiMgSW4gY2FzZSBubyBkZXRlY3Rpb24gcnVsZSBmaWxlIHdhcyBzdWNjZXNzZnVsLCB1c2UgdGhlIGRlZmF1bHQuDQojDQppZm5kZWYgQ09ORklHX0ZJTEUNCiAgQ09ORklHX0ZJTEUgOj0gYW5zaS5taw0KICBzZXR1cDogc3RkX3NldHVwDQogIC5QSE9OWTogc2V0dXANCmVuZGlmDQoNCiMgVGhlIGZvbGxvd2luZyB0YXJnZXRzIGFyZSBlcXVpdmFsZW50LCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGV5IHVzZQ0KIyBhIHNsaWdodGx5IGRpZmZlcmVudCBzeW50YXggZm9yIHRoZSBgZWNobycgY29tbWFuZC4NCiMNCiMgc3RkX3NldHVwOiBkZWZpbmVkIGZvciBtb3N0IChpLmUuIFVuaXgtbGlrZSkgcGxhdGZvcm1zDQojIGRvc19zZXR1cDogZGVmaW5lZCBmb3IgRG9zLWlzaCBwbGF0Zm9ybXMgbGlrZSBEb3MsIFdpbmRvd3MgJiBPUy8yDQojDQouUEhPTlk6IHN0ZF9zZXR1cCBkb3Nfc2V0dXANCg0Kc3RkX3NldHVwOg0KCUBlY2hvICIiDQoJQGVjaG8gIiQoUFJPSkVDVF9USVRMRSkgYnVpbGQgc3lzdGVtIC0tIGF1dG9tYXRpYyBzeXN0ZW0gZGV0ZWN0aW9uIg0KCUBlY2hvICIiDQoJQGVjaG8gIlRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYXJlIHVzZWQ6Ig0KCUBlY2hvICIiDQoJQGVjaG8gIiAgcGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICQoUExBVEZPUk0pIg0KCUBlY2hvICIgIGNvbXBpbGVyICAgICAgICAgICAgICAgICAgICAkKENDKSINCglAZWNobyAiICBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSAgICAgJChCVUlMRF9ESVIpIg0KCUBlY2hvICIgIGNvbmZpZ3VyYXRpb24gcnVsZXMgICAgICAgICAkKENPTkZJR19SVUxFUykiDQoJQGVjaG8gIiINCglAZWNobyAiSWYgdGhpcyBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIHlvdXIgc3lzdGVtIG9yIHNldHRpbmdzIHBsZWFzZSByZW1vdmUgdGhlIGZpbGUiDQoJQGVjaG8gIlxgJChDT05GSUdfTUspJyBmcm9tIHRoaXMgZGlyZWN0b3J5IHRoZW4gcmVhZCB0aGUgSU5TVEFMTCBmaWxlIGZvciBoZWxwLiINCglAZWNobyAiIg0KCUBlY2hvICJPdGhlcndpc2UsIHNpbXBseSB0eXBlIFxgJChNQUtFKScgYWdhaW4gdG8gYnVpbGQgdGhlIGxpYnJhcnksIg0KCUBlY2hvICJvciBcYCQoTUFLRSkgcmVmZG9jJyB0byBidWlsZCB0aGUgQVBJIHJlZmVyZW5jZSAodGhpcyBuZWVkcyBweXRob24gPj0gMi42KS4iDQoJQGVjaG8gIiINCglAJChDT1BZKSAkKENPTkZJR19SVUxFUykgJChDT05GSUdfTUspDQoNCg0KIyBTcGVjaWFsIGNhc2UgZm9yIERvcywgV2luZG93cywgT1MvMiwgd2hlcmUgZWNobyAiIiBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IQ0KIw0KZG9zX3NldHVwOg0KCUB0eXBlIGJ1aWxkcyQoU0VQKW5ld2xpbmUNCglAZWNobyAkKFBST0pFQ1RfVElUTEUpIGJ1aWxkIHN5c3RlbSAtLSBhdXRvbWF0aWMgc3lzdGVtIGRldGVjdGlvbg0KCUB0eXBlIGJ1aWxkcyQoU0VQKW5ld2xpbmUNCglAZWNobyBUaGUgZm9sbG93aW5nIHNldHRpbmdzIGFyZSB1c2VkOg0KCUB0eXBlIGJ1aWxkcyQoU0VQKW5ld2xpbmUNCglAZWNobyAgIHBsYXRmb3Jt////////////////////////////JChQTEFURk9STSkNCglAZWNobyAgIGNvbXBpbGVy////////////////////////////JChDQykNCglAZWNobyAgIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5////////JChzdWJzdCAvLCQoU0VQKSwkKEJVSUxEX0RJUikpDQoJQGVjaG8gICBjb25maWd1cmF0aW9uIHJ1bGVz/////////////yQoc3Vic3QgLywkKFNFUCksJChDT05GSUdfUlVMRVMpKQ0KCUB0eXBlIGJ1aWxkcyQoU0VQKW5ld2xpbmUNCglAZWNobyBJZiB0aGlzIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8geW91ciBzeXN0ZW0gb3Igc2V0dGluZ3MgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZQ0KCUBlY2hvICckKENPTkZJR19NSyknIGZyb20gdGhpcyBkaXJlY3RvcnkgdGhlbiByZWFkIHRoZSBJTlNUQUxMIGZpbGUgZm9yIGhlbHAuDQoJQHR5cGUgYnVpbGRzJChTRVApbmV3bGluZQ0KCUBlY2hvIE90aGVyd2lzZSwgc2ltcGx5IHR5cGUgJ21ha2UnIGFnYWluIHRvIGJ1aWxkIHRoZSBsaWJyYXJ5Lg0KCUBlY2hvIG9yICdtYWtlIHJlZmRvYycgdG8gYnVpbGQgdGhlIEFQSSByZWZlcmVuY2UgKHRoaXMgbmVlZHMgcHl0aG9uID49IDIuNikuDQoJQHR5cGUgYnVpbGRzJChTRVApbmV3bGluZQ0KCUAkKENPUFkpICQoc3Vic3QgLywkKFNFUCksJChDT05GSUdfUlVMRVMpICQoQ09ORklHX01LKSkgPiBudWwNCg0KDQojIEVPRg0K