IwojIE1ha2VmaWxlIGZvciBGcmVlVHlwZTIgbGluayBsaWJyYXJ5IHVzaW5nIEFtaWdhIFNBUy9DIDYuNTgKIwoKCiMgQ29weXJpZ2h0IDIwMDUsMjAwNiwgMjAwNywgMjAwOSBieQojIFdlcm5lciBMZW1iZXJnIGFuZCBEZXRsZWYgV/xya25lci4KIwojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCiMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAojIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CiMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKIyBmdWxseS4KCgojIHRvIGJ1aWxkIGZyb20gdGhlIGJ1aWxkcy9hbWlnYSBkaXJlY3RvcnkgY2FsbAojCiMgIHNtYWtlIGFzc2lnbgojICBzbWFrZQojCiMgWW91ciBwcm9ncmFtcyBzb3VyY2UgY29kZSBzaG91bGQgc3RhcnQgd2l0aCB0aGlzCiMgKHVuY29tbWVudCB0aGUgcGFydHMgeW91IGRvIG5vdCBuZWVkIHRvIGtlZXAgdGhlIHByb2dyYW0gc21hbGwpOgojIC0tLTg8LS0tCiNkZWZpbmUgRlRfVVNFX0FVVE9GSVQgLy8gYXV0b2ZpdHRlcgojZGVmaW5lIEZUX1VTRV9SQVNURVIgIC8vIG1vbm9jaHJvbWUgcmFzdGVyaXplcgojZGVmaW5lIEZUX1VTRV9TTU9PVEggIC8vIGFudGktYWxpYXNpbmcgcmFzdGVyaXplcgojZGVmaW5lIEZUX1VTRV9UVCAgICAgIC8vIHRydWV0eXBlIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1QxICAgICAgLy8gdHlwZTEgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfVDQyICAgICAvLyB0eXBlNDIgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfVDFDSUQgICAvLyBjaWQta2V5ZWQgdHlwZTEgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfQ0ZGICAgICAvLyBvcGVudHlwZSBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9CREYgICAgIC8vIGJkZiBiaXRtYXAgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfUENGICAgICAvLyBwY2YgYml0bWFwIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1BGUiAgICAgLy8gcGZyIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1dJTkZOVCAgLy8gd2luZG93cyAuZm50fC5mb24gYml0bWFwIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX09UViAgICAgLy8gb3BlbnR5cGUgdmFsaWRhdG9yCiNkZWZpbmUgRlRfVVNFX0dYViAgICAgLy8gdHJ1ZXR5cGUgZ3ggdmFsaWRhdG9yCiNpbmNsdWRlICJGVDpzcmMvYmFzZS9mdGluaXQuYyIKIyAtLS04PC0tLQojCiMgbGluayB5b3VyIHByb2dyYW1zIHdpdGggZnQyXzY4MHgwLmxpYiBhbmQgZWl0aGVyIGZ0c3lzdGVtLm8gb3IgZnRzeXN0ZW1wdXJlLm8KIyAoYW5kIGVpdGhlciBmdGRlYnVnLm8gb3IgZnRkZWJ1Z3B1cmUubyBpZiB5b3UgZW5hYmxlZCBGVF9ERUJVR19MRVZFTF9FUlJPUiBvcgojIEZUX0RFQlVHX0xFVkVMX1RSQUNFIGluIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgpLgoKT0JKQkFTRSA9IGZ0YmFzZS5vIGZ0YmJveC5vIGZ0YmRmLm8gZnRiaXRtYXAubyBmdGNpZC5vIGZ0ZnN0eXBlLm8gZnRnYXNwLm8gICBcCgkgIGZ0Z2x5cGgubyBmdGd4dmFsLm8gZnRsY2RmaWwubyBmdG1tLm8gZnRvdHZhbC5vIGZ0cGF0ZW50Lm8gZnRwZnIubyBcCgkgIGZ0c3Ryb2tlLm8gZnRzeW50aC5vIGZ0dHlwZTEubyBmdHdpbmZudC5vIGZ0eGY4Ni5vCgpPQkpTWVNURU0gPSBmdHN5c3RlbS5vIGZ0c3lzdGVtcHVyZS5vCgpPQkpERUJVRyA9IGZ0ZGVidWcubyBmdGRlYnVncHVyZS5vCgpPQkpBRklUID0gYXV0b2ZpdC5vCgpPQkpHWFYgPSBneHZhbGlkLm8KCk9CSk9UViA9IG90dmFsaWQubwoKT0JKUFMgPSBwc2F1eC5vIHBzbmFtZXMubyBwc2hpbnRlci5vCgpPQkpSQVNURVIgPSByYXN0ZXIubyBzbW9vdGgubwoKT0JKU0ZOVCA9IHNmbnQubwoKT0JKQ0FDSEUgPSBmdGNhY2hlLm8KCk9CSkZPTlREID0gY2ZmLm8gdHlwZTEubyB0eXBlNDIubyB0eXBlMWNpZC5vXAoJICAgdHJ1ZXR5cGUubyB3aW5mbnQubyBiZGYubyBwY2YubyBwZnIubwoKQ09SRSA9IEZUOnNyYy8KCkNQVSAgICAgICA9IDY4MDAwCiNDUFUgICAgICA9IDY4MDIwCiNDUFUgICAgICA9IDY4MDMwCiNDUFUgICAgICA9IDY4MDQwCiNDUFUgICAgICA9IDY4MDYwCgpPUFRJTUlaRVIgPSBvcHRpbmxvY2FsCgpTQ0ZMQUdTID0gb3B0aW1pemUgb3B0dGltZSBvcHRzY2hlZCBzdHJtZXJnZSBkYXRhPWZhcm9ubHkgaWRsZW49NTAgY3B1PSQoQ1BVKVwKCSAgaWRpcj1pbmNsdWRlLyBpZGlyPSQoQ09SRSkgaWRpcj1GVDppbmNsdWRlLyBub3N0YWNrY2hlY2sgbm9jaGthYm9ydFwKCSAgbm9pY29ucyBpZ25vcmU9NzksODUsMTEwLDMwNiBwYXJhbWV0ZXJzPWJvdGggZGVmaW5lPUZUMl9CVUlMRF9MSUJSQVJZCgpMSUIgID0gZnQyXyQoQ1BVKS5saWIKCiMgc2FtcGxlIGxpbmtlciBvcHRpb25zCk9QVFMgPSBsaW5rIGxpYj0kKExJQiksbGliOnNjLmxpYixsaWI6YW1pZ2EubGliLGxpYjpkZWJ1Zy5saWJcCiAgICAgICBzbWFsbGNvZGUgc21hbGxkYXRhIG5vaWNvbnMgdXRpbGxpYgoKIyBzYW1wbGUgcHJvZ3JhbSBlbnRyeQojbXlwcm9nOiBteXByb2cuYyBmdHN5c3RlbS5vICQoTElCKQojCXNjICQ8IHByb2dyYW1uYW1lPSRAIGZ0c3lzdGVtLm8gJChTQ0ZMQUdTKSAkKE9QVFMpCgphbGw6CSQoTElCKSAkKE9CSlNZU1RFTSkgJChPQkpERUJVRykKCmFzc2lnbjoKCWFzc2lnbiBGVDogLy8KCiMgdXNlcyBzZXBhcmF0ZSBvYmplY3QgbW9kdWxlcyBpbiBsaWIgdG8gbWFrZSBmb3IgZWFzaWVyIGRlYnVnZ2luZwojIGFsc28sIGNhbiBtYWtlIHNtYWxsZXIgcHJvZ3JhbXMgaWYgZW50aXJlIGVuZ2luZSBpcyBub3QgdXNlZApmdDJfJChDUFUpLmxpYjogICQoT0JKQkFTRSkgJChPQkpBRklUKSAkKE9CSk9UVikgJChPQkpQUykgJChPQkpSQVNURVIpICQoT0JKU0ZOVCkgJChPQkpDQUNIRSkgJChPQkpGT05URCkgbHp3Lm8gZ3ppcC5vIGJ6aXAyLm8KCW9tbCAkQCByICQoT0JKQkFTRSkgJChPQkpBRklUKSAkKE9CSk9UVikgJChPQkpQUykgJChPQkpSQVNURVIpICQoT0JKU0ZOVCkgJChPQkpDQUNIRSkgJChPQkpGT05URCkgbHp3Lm8gZ3ppcC5vIGJ6aXAyLm8KCmNsZWFuOgoJLWRlbGV0ZSBcIz8ubwoKcmVhbGNsZWFuOiBjbGVhbgoJLWRlbGV0ZSBmdDIkKENQVSkubGliCgojCiMgZnJlZXR5cGUgbGlicmFyeSBiYXNlCiMKZnRiYXNlLm86ICQoQ09SRSliYXNlL2Z0YmFzZS5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRpbml0Lm86ICQoQ09SRSliYXNlL2Z0aW5pdC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRzeXN0ZW0ubzogJChDT1JFKWJhc2UvZnRzeXN0ZW0uYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0c3lzdGVtcHVyZS5vOiBzcmMvYmFzZS9mdHN5c3RlbS5jCSMjIHB1cmUgdmVyc2lvbiBmb3IgdXNlIGluIHJ1bi10aW1lIGxpYnJhcnkgZXRjCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRkZWJ1Zy5vOiAkKENPUkUpYmFzZS9mdGRlYnVnLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGRlYnVncHVyZS5vOiBzcmMvYmFzZS9mdGRlYnVnLmMJIyMgcHVyZSB2ZXJzaW9uIGZvciB1c2UgaW4gcnVuLXRpbWUgbGlicmFyeSBldGMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAojCiMgZnJlZXR5cGUgbGlicmFyeSBiYXNlIGV4dGVuc2lvbnMKIwpmdGJib3gubzogJChDT1JFKWJhc2UvZnRiYm94LmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGJkZi5vOiAkKENPUkUpYmFzZS9mdGJkZi5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRiaXRtYXAubzogJChDT1JFKWJhc2UvZnRiaXRtYXAuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0Y2lkLm86ICQoQ09SRSliYXNlL2Z0Y2lkLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGZzdHlwZS5vOiAkKENPUkUpYmFzZS9mdGZzdHlwZS5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRnYXNwLm86ICQoQ09SRSliYXNlL2Z0Z2FzcC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRnbHlwaC5vOiAkKENPUkUpYmFzZS9mdGdseXBoLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGd4dmFsLm86ICQoQ09SRSliYXNlL2Z0Z3h2YWwuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0bGNkZmlsLm86ICQoQ09SRSliYXNlL2Z0bGNkZmlsLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdG1tLm86ICQoQ09SRSliYXNlL2Z0bW0uYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0b3R2YWwubzogJChDT1JFKWJhc2UvZnRvdHZhbC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRwYXRlbnQubzogJChDT1JFKWJhc2UvZnRwYXRlbnQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0cGZyLm86ICQoQ09SRSliYXNlL2Z0cGZyLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHN0cm9rZS5vOiAkKENPUkUpYmFzZS9mdHN0cm9rZS5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRzeW50aC5vOiAkKENPUkUpYmFzZS9mdHN5bnRoLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHR5cGUxLm86ICQoQ09SRSliYXNlL2Z0dHlwZTEuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0d2luZm50Lm86ICQoQ09SRSliYXNlL2Z0d2luZm50LmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHhmODYubzogJChDT1JFKWJhc2UvZnR4Zjg2LmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgYXV0b2ZpdHRlciBtb2R1bGUKIwphdXRvZml0Lm86ICQoQ09SRSlhdXRvZml0L2F1dG9maXQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBQUyBoaW50aW5nIG1vZHVsZQojCnBzaGludGVyLm86ICQoQ09SRSlwc2hpbnRlci9wc2hpbnRlci5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKIwojIGZyZWV0eXBlIGxpYnJhcnkgUFMgc3VwcG9ydCBtb2R1bGUKIwpwc2F1eC5vOiAkKENPUkUpcHNhdXgvcHNhdXguYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBQUyBnbHlwaCBuYW1lcyBtb2R1bGUKIwpwc25hbWVzLm86ICQoQ09SRSlwc25hbWVzL3BzbmFtZXMuYwoJc2MgJChTQ0ZMQUdTKSBjb2RlPWZhciBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBtb25vY2hyb21lIHJhc3RlciBtb2R1bGUKIwpyYXN0ZXIubzogJChDT1JFKXJhc3Rlci9yYXN0ZXIuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBhbnRpLWFsaWFzaW5nIHJhc3RlciBtb2R1bGUKIwpzbW9vdGgubzogJChDT1JFKXNtb290aC9zbW9vdGguYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSAnc2ZudCcgbW9kdWxlCiMKc2ZudC5vOiAkKENPUkUpc2ZudC9zZm50LmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgZ2x5cGggYW5kIGltYWdlIGNhY2hpbmcgc3lzdGVtIChzdGlsbCBleHBlcmltZW50YWwpCiMKZnRjYWNoZS5vOiAkKENPUkUpY2FjaGUvZnRjYWNoZS5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IE9wZW5UeXBlIGZvbnQgZHJpdmVyCiMKY2ZmLm86ICQoQ09SRSljZmYvY2ZmLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgVHJ1ZVR5cGUgZm9udCBkcml2ZXIKIwp0cnVldHlwZS5vOiAkKENPUkUpdHJ1ZXR5cGUvdHJ1ZXR5cGUuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBUeXBlMSBmb250IGRyaXZlcgojCnR5cGUxLm86ICQoQ09SRSl0eXBlMS90eXBlMS5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBUeXBlNDIgZm9udCBkcml2ZXIKIwp0eXBlNDIubzogJChDT1JFKXR5cGU0Mi90eXBlNDIuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBDSUQta2V5ZWQgVHlwZTEgZm9udCBkcml2ZXIKIwp0eXBlMWNpZC5vOiAkKENPUkUpY2lkL3R5cGUxY2lkLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAojCiMgZnJlZXR5cGUgbGlicmFyeSBDSUQta2V5ZWQgVHlwZTEgZm9udCBkcml2ZXIgZXh0ZW5zaW9ucwojCiNjaWRhZm0ubzogJChDT1JFKWNpZC9jaWRhZm0uYwojCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgQkRGIGJpdG1hcCBmb250IGRyaXZlcgojCmJkZi5vOiAkKENPUkUpYmRmL2JkZi5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IFBDRiBiaXRtYXAgZm9udCBkcml2ZXIKIwpwY2YubzogJChDT1JFKXBjZi9wY2YuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBnemlwIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgUENGIGJpdG1hcCBmb250cwojCmd6aXAubzogJChDT1JFKWd6aXAvZnRnemlwLmMKCXNjICQoU0NGTEFHUykgZGVmaW5lIEZBUiBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBiemlwMiBzdXBwb3J0IGZvciBjb21wcmVzc2VkIFBDRiBiaXRtYXAgZm9udHMKIwpiemlwMi5vOiAkKENPUkUpYnppcDIvZnRiemlwMi5jCglzYyAkKFNDRkxBR1MpIGRlZmluZSBGQVIgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgY29tcHJlc3Mgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBQQ0YgYml0bWFwIGZvbnRzCiMKbHp3Lm86ICQoQ09SRSlsencvZnRsencuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBQRlIgZm9udCBkcml2ZXIKIwpwZnIubzogJChDT1JFKXBmci9wZnIuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBXaW5kb3dzIEZOVC9GT04gYml0bWFwIGZvbnQgZHJpdmVyCiMKd2luZm50Lm86ICQoQ09SRSl3aW5mb250cy93aW5mbnQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBUcnVlVHlwZUdYIHZhbGlkYXRvcgojCmd4dmFsaWQubzogJChDT1JFKWd4dmFsaWQvZ3h2YWxpZC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IE9wZW5UeXBlIHZhbGlkYXRvcgojCm90dmFsaWQubzogJChDT1JFKW90dmFsaWQvb3R2YWxpZC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiNMb2NhbCBWYXJpYWJsZXM6CiNjb2Rpbmc6IGxhdGluLTEKI0VuZDoK