IwojIE1ha2VmaWxlIGZvciBGcmVlVHlwZTIgbGluayBsaWJyYXJ5IHVzaW5nIGdjYyA0LjAuMyBmcm9tIHRoZQojIEFtaWdhT1M0IFNESwojCgoKIyBDb3B5cmlnaHQgMjAwNSwgMjAwNiwgMjAwNyBieQojIFdlcm5lciBMZW1iZXJnIGFuZCBEZXRsZWYgV/xya25lci4KIwojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCiMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAojIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CiMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKIyBmdWxseS4KCgojIHRvIGJ1aWxkIGZyb20gdGhlIGJ1aWxkcy9hbWlnYSBkaXJlY3RvcnkgY2FsbAojCiMgIG1ha2UgLWYgbWFrZWZpbGUub3M0CiMKIyBZb3VyIHByb2dyYW1zIHNvdXJjZSBjb2RlIHNob3VsZCBzdGFydCB3aXRoIHRoaXMKIyAodW5jb21tZW50IHRoZSBwYXJ0cyB5b3UgZG8gbm90IG5lZWQgdG8ga2VlcCB0aGUgcHJvZ3JhbSBzbWFsbCk6CiMgLS0tODwtLS0KI2RlZmluZSBGVF9VU0VfQVVUT0ZJVCAvLyBhdXRvZml0dGVyCiNkZWZpbmUgRlRfVVNFX1JBU1RFUiAgLy8gbW9ub2Nocm9tZSByYXN0ZXJpemVyCiNkZWZpbmUgRlRfVVNFX1NNT09USCAgLy8gYW50aS1hbGlhc2luZyByYXN0ZXJpemVyCiNkZWZpbmUgRlRfVVNFX1RUICAgICAgLy8gdHJ1ZXR5cGUgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfVDEgICAgICAvLyB0eXBlMSBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9UNDIgICAgIC8vIHR5cGU0MiBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9UMUNJRCAgIC8vIGNpZC1rZXllZCB0eXBlMSBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9DRkYgICAgIC8vIG9wZW50eXBlIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX0JERiAgICAgLy8gYmRmIGJpdG1hcCBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9QQ0YgICAgIC8vIHBjZiBiaXRtYXAgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfUEZSICAgICAvLyBwZnIgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfV0lORk5UICAvLyB3aW5kb3dzIC5mbnR8LmZvbiBiaXRtYXAgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfT1RWICAgICAvLyBvcGVudHlwZSB2YWxpZGF0b3IKI2RlZmluZSBGVF9VU0VfR1hWICAgICAvLyB0cnVldHlwZSBneCB2YWxpZGF0b3IKI2luY2x1ZGUgIkZUOnNyYy9iYXNlL2Z0aW5pdC5jIgojIC0tLTg8LS0tCiMKIyBsaW5rIHlvdXIgcHJvZ3JhbXMgd2l0aCBsaWJmdDJfcHBjLmEgYW5kIGVpdGhlciBmdHN5c3RlbS5wcGMubyBvciBmdHN5c3RlbXB1cmUucHBjLm8KIyAoYW5kIGVpdGhlciBmdGRlYnVnLnBwYy5vIG9yIGZ0ZGVidWdwdXJlLnBwYy5vIGlmIHlvdSBlbmFibGVkIEZUX0RFQlVHX0xFVkVMX0VSUk9SIG9yCiMgRlRfREVCVUdfTEVWRUxfVFJBQ0UgaW4gaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCkuCgphbGw6CWFzc2lnbiBsaWJmdDJfcHBjLmEgZnRzeXN0ZW0ucHBjLm8gZnRzeXN0ZW1wdXJlLnBwYy5vCgphc3NpZ246Cglhc3NpZ24gRlQ6IC8vCgpDQyA9ICAgICBwcGMtYW1pZ2Fvcy1nY2MKQVIgPSAgICAgcHBjLWFtaWdhb3MtYXIKUkFOTElCID0gcHBjLWFtaWdhb3MtcmFubGliCgpESVJGTEFHUyAgPSAtSWluY2x1ZGUgLUkvRlQvc3JjIC1JL0ZUL2luY2x1ZGUgLUkvU0RLL2luY2x1ZGUKCldBUk5JTkdTID0gLVdhbGwgLVcgLVd1bmRlZiAtV3BvaW50ZXItYXJpdGggLVdiYWQtZnVuY3Rpb24tY2FzdCBcCgkgICAtV2FnZ3JlZ2F0ZS1yZXR1cm4gLVd3cml0ZS1zdHJpbmdzIC1Xc2hhZG93CgpPUFRJT05TICA9IC1ERlQyX0JVSUxEX0xJQlJBUlkgLUROREVCVUcgLWZuby1idWlsdGluCk9QVElNSVpFID0gLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mc3RyZW5ndGgtcmVkdWNlIC1maW5saW5lLWZ1bmN0aW9ucwoKQ0ZMQUdTICAgPSAtbWNydD1jbGliMiAkKERJUkZMQUdTKSAkKFdBUk5JTkdTKSAkKEZUMkZMQUdTKSAkKE9QVElPTlMpICQoT1BUSU1JWkUpCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgYmFzZQojCmZ0YmFzZS5wcGMubzogRlQ6c3JjL2Jhc2UvZnRiYXNlLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRiYXNlLmMKCmZ0aW5pdC5wcGMubzogRlQ6c3JjL2Jhc2UvZnRpbml0LmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRpbml0LmMKCmZ0c3lzdGVtLnBwYy5vOiBGVDpzcmMvYmFzZS9mdHN5c3RlbS5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0c3lzdGVtLmMKCiMgcHVyZSB2ZXJzaW9uIGZvciB1c2UgaW4gcnVuLXRpbWUgbGlicmFyeSBldGMKZnRzeXN0ZW1wdXJlLnBwYy5vOiBzcmMvYmFzZS9mdHN5c3RlbS5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgc3JjL2Jhc2UvZnRzeXN0ZW0uYwoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IGJhc2UgZXh0ZW5zaW9ucwojCmZ0YmJveC5wcGMubzogRlQ6c3JjL2Jhc2UvZnRiYm94LmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRiYm94LmMKCmZ0YmRmLnBwYy5vOiBGVDpzcmMvYmFzZS9mdGJkZi5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0YmRmLmMKCmZ0Yml0bWFwLnBwYy5vOiBGVDpzcmMvYmFzZS9mdGJpdG1hcC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0Yml0bWFwLmMKCmZ0ZGVidWcucHBjLm86IEZUOnNyYy9iYXNlL2Z0ZGVidWcuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdGRlYnVnLmMKCiMgcHVyZSB2ZXJzaW9uIGZvciB1c2UgaW4gcnVuLXRpbWUgbGlicmFyeSBldGMKZnRkZWJ1Z3B1cmUucHBjLm86IHNyYy9iYXNlL2Z0ZGVidWcuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIHNyYy9iYXNlL2Z0ZGVidWcuYwoKZnRnYXNwLnBwYy5vOiBGVDpzcmMvYmFzZS9mdGdhc3AuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdGdhc3AuYwoKZnRnbHlwaC5wcGMubzogRlQ6c3JjL2Jhc2UvZnRnbHlwaC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0Z2x5cGguYwoKZnRneHZhbC5wcGMubzogRlQ6c3JjL2Jhc2UvZnRneHZhbC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0Z3h2YWwuYwoKZnRsY2RmaWwucHBjLm86IEZUOnNyYy9iYXNlL2Z0bGNkZmlsLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRsY2RmaWwuYwoKZnRtbS5wcGMubzogRlQ6c3JjL2Jhc2UvZnRtbS5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0bW0uYwoKZnRvdHZhbC5wcGMubzogRlQ6c3JjL2Jhc2UvZnRvdHZhbC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0b3R2YWwuYwoKZnRwZnIucHBjLm86IEZUOnNyYy9iYXNlL2Z0cGZyLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRwZnIuYwoKZnRzdHJva2UucHBjLm86IEZUOnNyYy9iYXNlL2Z0c3Ryb2tlLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRzdHJva2UuYwoKZnRzeW50aC5wcGMubzogRlQ6c3JjL2Jhc2UvZnRzeW50aC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0c3ludGguYwoKZnR0eXBlMS5wcGMubzogRlQ6c3JjL2Jhc2UvZnR0eXBlMS5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0dHlwZTEuYwoKZnR3aW5mbnQucHBjLm86IEZUOnNyYy9iYXNlL2Z0d2luZm50LmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnR3aW5mbnQuYwoKZnR4Zjg2LnBwYy5vOiBGVDpzcmMvYmFzZS9mdHhmODYuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdHhmODYuYwoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IGF1dG9maXR0aW5nIG1vZHVsZQojCmF1dG9maXQucHBjLm86IEZUOnNyYy9hdXRvZml0L2F1dG9maXQuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYXV0b2ZpdC9hdXRvZml0LmMKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBwb3N0c2NyaXB0IGhpbnRpbmcgbW9kdWxlCiMKcHNoaW50ZXIucHBjLm86IEZUOnNyYy9wc2hpbnRlci9wc2hpbnRlci5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9wc2hpbnRlci9wc2hpbnRlci5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgUFMgc3VwcG9ydCBtb2R1bGUKIwpwc2F1eC5wcGMubzogRlQ6c3JjL3BzYXV4L3BzYXV4LmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3BzYXV4L3BzYXV4LmMKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBQUyBnbHlwaCBuYW1lcyBtb2R1bGUKIwpwc25hbWVzLnBwYy5vOiBGVDpzcmMvcHNuYW1lcy9wc25hbWVzLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3BzbmFtZXMvcHNuYW1lcy5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgbW9ub2Nocm9tZSByYXN0ZXIgbW9kdWxlCiMKcmFzdGVyLnBwYy5vOiBGVDpzcmMvcmFzdGVyL3Jhc3Rlci5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9yYXN0ZXIvcmFzdGVyLmMKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBhbnRpLWFsaWFzaW5nIHJhc3RlciBtb2R1bGUKIwpzbW9vdGgucHBjLm86IEZUOnNyYy9zbW9vdGgvc21vb3RoLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3Ntb290aC9zbW9vdGguYwoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5ICdzZm50JyBtb2R1bGUKIwpzZm50LnBwYy5vOiBGVDpzcmMvc2ZudC9zZm50LmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3NmbnQvc2ZudC5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgZ2x5cGggYW5kIGltYWdlIGNhY2hpbmcgc3lzdGVtCiMKZnRjYWNoZS5wcGMubzogRlQ6c3JjL2NhY2hlL2Z0Y2FjaGUuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvY2FjaGUvZnRjYWNoZS5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgT3BlblR5cGUgZm9udCBkcml2ZXIKIwpjZmYucHBjLm86IEZUOnNyYy9jZmYvY2ZmLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2NmZi9jZmYuYwoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IFRydWVUeXBlIGZvbnQgZHJpdmVyCiMKdHJ1ZXR5cGUucHBjLm86IEZUOnNyYy90cnVldHlwZS90cnVldHlwZS5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy90cnVldHlwZS90cnVldHlwZS5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgVHlwZTEgZm9udCBkcml2ZXIKIwp0eXBlMS5wcGMubzogRlQ6c3JjL3R5cGUxL3R5cGUxLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3R5cGUxL3R5cGUxLmMKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBUeXBlNDIgZm9udCBkcml2ZXIKIwp0eXBlNDIucHBjLm86IEZUOnNyYy90eXBlNDIvdHlwZTQyLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3R5cGU0Mi90eXBlNDIuYwoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IENJRC1rZXllZCBUeXBlMSBmb250IGRyaXZlcgojCnR5cGUxY2lkLnBwYy5vOiBGVDpzcmMvY2lkL3R5cGUxY2lkLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2NpZC90eXBlMWNpZC5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgQkRGIGJpdG1hcCBmb250IGRyaXZlcgojCmJkZi5wcGMubzogRlQ6c3JjL2JkZi9iZGYuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmRmL2JkZi5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgUENGIGJpdG1hcCBmb250IGRyaXZlcgojCnBjZi5wcGMubzogRlQ6c3JjL3BjZi9wY2YuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvcGNmL3BjZi5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgZ3ppcCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIFBDRiBiaXRtYXAgZm9udHMKIwpnemlwLnBwYy5vOiBGVDpzcmMvZ3ppcC9mdGd6aXAuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvZ3ppcC9mdGd6aXAuYwoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IGNvbXByZXNzIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgUENGIGJpdG1hcCBmb250cwojCmx6dy5wcGMubzogRlQ6c3JjL2x6dy9mdGx6dy5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9sencvZnRsencuYwoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IFBGUiBmb250IGRyaXZlcgojCnBmci5wcGMubzogRlQ6c3JjL3Bmci9wZnIuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvcGZyL3Bmci5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgV2luZG93cyBGTlQvRk9OIGJpdG1hcCBmb250IGRyaXZlcgojCndpbmZudC5wcGMubzogRlQ6c3JjL3dpbmZvbnRzL3dpbmZudC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy93aW5mb250cy93aW5mbnQuYwoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IFRydWVUeXBlR1ggVmFsaWRhdG9yCiMKZ3h2YWxpZC5wcGMubzogRlQ6c3JjL2d4dmFsaWQvZ3h2YWxpZC5jCgkkKENDKSAtYyAkKENGTEFHUykgLVduby1hZ2dyZWdhdGUtcmV0dXJuIC1vICRAIC9GVC9zcmMvZ3h2YWxpZC9neHZhbGlkLmMKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBPcGVuVHlwZSB2YWxpZGF0b3IKIwpvdHZhbGlkLnBwYy5vOiBGVDpzcmMvb3R2YWxpZC9vdHZhbGlkLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL290dmFsaWQvb3R2YWxpZC5jCgpCQVNFID0gIGZ0YmFzZS5wcGMubyBmdGJib3gucHBjLm8gZnRiZGYucHBjLm8gZnRiaXRtYXAucHBjLm8gICAgXAoJZnRnYXNwLnBwYy5vIGZ0Z2x5cGgucHBjLm8gZnRneHZhbC5wcGMubyBmdGxjZGZpbC5wcGMubyBcCglmdG1tLnBwYy5vIGZ0b3R2YWwucHBjLm8gZnRwZnIucHBjLm8gZnRzdHJva2UucHBjLm8gICAgIFwKCWZ0c3ludGgucHBjLm8gZnR0eXBlMS5wcGMubyBmdHdpbmZudC5wcGMubyBmdHhmODYucHBjLm8KCkRFQlVHID0gZnRkZWJ1Zy5wcGMubyBmdGRlYnVncHVyZS5wcGMubwoKQUZJVCA9IGF1dG9maXQucHBjLm8KCkdYViA9IGd4dmFsaWQucHBjLm8KCk9UViA9IG90dmFsaWQucHBjLm8KClBTID0gcHNhdXgucHBjLm8gcHNuYW1lcy5wcGMubyBwc2hpbnRlci5wcGMubwoKUkFTVEVSID0gcmFzdGVyLnBwYy5vIHNtb290aC5wcGMubwoKRk9OVEQgPSBjZmYucHBjLm8gdHlwZTEucHBjLm8gdHlwZTQyLnBwYy5vIHR5cGUxY2lkLnBwYy5vIHRydWV0eXBlLnBwYy5vXAoJYmRmLnBwYy5vIHBjZi5wcGMubyBwZnIucHBjLm8gd2luZm50LnBwYy5vCgpsaWJmdDJfcHBjLmE6ICAgICAgJChCQVNFKSAkKEFGSVQpICQoR1hWKSAkKE9UVikgJChQUykgJChSQVNURVIpIHNmbnQucHBjLm8gZnRjYWNoZS5wcGMubyAkKEZPTlREKSBnemlwLnBwYy5vIGx6dy5wcGMubwoJJChBUikgciAkQCAkKEJBU0UpICQoQUZJVCkgJChHWFYpICQoT1RWKSAkKFBTKSAkKFJBU1RFUikgc2ZudC5wcGMubyBmdGNhY2hlLnBwYy5vICQoRk9OVEQpIGd6aXAucHBjLm8gbHp3LnBwYy5vCgkkKFJBTkxJQikgJEAKCiNMb2NhbCBWYXJpYWJsZXM6CiNjb2Rpbmc6IGxhdGluLTEKI0VuZDoK