SENVNSBjb25maWd1cmF0aW9uIGRldGFpbHMgYW5kIHN0YXJ0dXAgc2VxdWVuY2UKCihDKSBDb3B5cmlnaHQgMjAwNyBOZXRzdGFsIE1hc2NoaW5lbiBBRwogICAgTmlrbGF1cyBHaWdlciAoTmlrbGF1cy5HaWdlckBuZXRzdGFsLmNvbSkKClRPRE86Ci0tLS0tCi0gRml4IGVycm9yOiBXYWl0aW5nIGZvciBQSFkgYXV0byBuZWdvdGlhdGlvbiB0byBjb21wbGV0ZS4uLi4uIFRJTUVPVVQgIQogICAgIC0gRG9lcyBub3Qgb2NjdXIgaWYgYm90aCBFTUFDIGFyZSBjb25uZWN0ZWQKLSBGaXggUlRTL0NUUyBwcm9ibGVtIChIVz8pCiAgQ09ORklHX1NFUklBTF9NVUxUSS9DT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gaGFuZ3MgYWZ0ZXIKICBTd2l0Y2hpbmcgdG8gaW50ZXJydXB0IGRyaXZlbiBzZXJpYWwgaW5wdXQgbW9kZQoKQ2F2ZWF0czoKLS0tLS0tLS0KRXJyYXRhIENISVBfODogSW5jb3JyZWN0IFdyaXRlIHRvIEREUiBTRFJBTS4gKHdhcyBub3QgYXBwbGllZCB0byBzZXF1b2lhLmMpCnNlZSBoY3U1LmMuCgoKTWVtb3J5IEJhbmsgMCAtLSBGbGFzaCBjaGlwCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKMHhmZmYwMDAwMCAtIDB4ZmZmZmZmZmYKClRoZSBmbGFzaCBjaGlwIGlzIHJlYWxseSBvbmx5IDUxMktieXRlcywgYnV0IHRoZSBoaWdoIGFkZHJlc3MgYml0IG9mCnRoZSAxTWVnIHJlZ2lvbiBpcyBpZ25vcmVkLCBzbyB0aGUgZmxhc2ggaXMgcmVwbGljYXRlZCB0aHJvdWdoIHRoZQpyZWdpb24uIFRodXMsIHRoaXMgaXMgY29uc2lzdGVudCB3aXRoIGEgZmxhc2ggYmFzZSBhZGRyZXNzIDB4ZmZmODAwMDAuCgpUaGUgcGxhY2VtZW50IGF0IHRoZSBlbmQgaXMgdG8gYmUgY29uc2lzdGVudCB3aXRoIHJlc2V0IGJlaGF2aW9yLAp3aGVyZSB0aGUgcHJvY2Vzc29yIGl0c2VsZiBpbml0aWFsbHkgdXNlcyB0aGlzIGJ1cyB0byBsb2FkIHRoZSBicmFuY2gKdmVjdG9yIGFuZCBzdGFydCBydW5uaW5nLgoKT24tQ2hpcCBNZW1vcnkKLS0tLS0tLS0tLS0tLS0KCjB4ZTAwMTAwMDAtIDB4ZTAwMTNmZmYgICBDT05GSUdfU1lTX09DTV9CQVNFClRoZSA0NDBFUHggaW5jbHVkZXMgYSAxNksgb24tY2hpcCBtZW1vcnkgdGhhdCBjYW4gYmUgcGxhY2VkIGhvd2V2ZXIKc29mdHdhcmUgY2hvb3Nlcy4KCkludGVybmFsIFBlcmlwaGVyYWxzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgoweGVmNjAwMzAwIC0gMHhlZjYwMDhmZgoKVGhlc2UgYXJlIHNjYXR0ZXJlZCB2YXJpb3VzIHBlcmlwaGVyYWxzIGludGVybmFsIHRvIHRoZSBQUEM0NDBFUFgKY2hpcC4KCkNoaXAtU2VsZWN0IDI6IEZsYXNoIE1lbW9yeQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCk5vdCB1c2VkCgpDaGlwLVNlbGVjdCAzOiBDQU4gSW50ZXJmYWNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMHhjODAwMDAwOiAyIEludGVsIDgyNTI3IENBTi1Db250cm9sbGVyCgoKQ2hpcC1TZWxlY3QgNDogSU1DLWJ1cyBzdGFuZGFyZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoweGNjMDAwMDA6IE5ldHN0YWwgc3BlY2lmaWMgSU8tQnVzCgoKQ2hpcC1TZWxlY3QgNTogSU1DLWJ1cyBmYXN0IChpbmFjdGl2ZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCjB4Y2UwMDAwMDogTmV0c3RhbCBzcGVjaWZpYyBJTy1CdXMgKGZhc3QsIGJ1dCBub3QgeWV0IHVzZWQpCgoKTWVtb3J5IEJhbmsgMSAtLSBERFIyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCjB4MDAwMDAwMDAgLSAweGZmZmZmZmYgICAjIERlZmF1bHQgMjU2IE1CCgpQQ0kgPz8KClVTQiA/PwpPbmx5IFVTQl9TVE9SQUdFIGlzIGVuYWJsZWQgdG8gbG9hZCB2eFdvcmtzCmZyb20gYSBtZW1vcnkgc3RpY2suCgpTeXN0ZW0tTEVEcyA/Pz8gKEFuYWxvZyB6dSBIQ1U0ID8/PykKClN0YXJ0dXAgc2VxdWVuY2UKLS0tLS0tLS0tLS0tLS0tLQoKKGNwdS9wcGM0eHgvcmVzZXR2ZWMuUykKZGVwZW5kaW5nIG9uIGNvbmZpZ3Mgb3B0aW9uCmNhbGwgX3N0YXJ0XzQ0MCBfc3RhcnRfcGNpIG9kZXIgX3N0YXJ0CgooY3B1L3BwYzR4eC9zdGFydC5TKQoKX3N0YXJ0XzQ0MDoKCWluaXRpYWxpemUgcmVnaXN0ZXIgbGlrZQoJQ0NSMAoJZGVidWcKCXNldHVwIGludGVycnVwdCB2ZWN0b3JzCgljb25maWd1cmUgY2FjaGUgcmVnaW9ucwoJY2xlYXIgYW5kIHNldHVwIFRMQgoJZW5hYmxlIGludGVybmFsIFJBTQoJanVtcCBzdGFydF9yYW0KCXdoaWNoIGluIHR1cm4gd2lsbCBqdW1wIHRvIHN0YXJ0Cl9zdGFydDoKCUNsZWFyIGFuZCBzZXQgdXAgc29tZSByZWdpc3RlcnMuCglEZWJ1ZyBzZXR1cAoJU2V0dXAgdGhlIGludGVybmFsIFNSQU0KCVNldHVwIHRoZSBzdGFjayBpbiBpbnRlcm5hbCBTUkFNCiAgICBzZXR1cCBzdGFjayBwb2ludGVyIChyMSkKICAgIHNldHVwIEdPVAoJY2FsbCBjcHVfaW5pdF9mCS8qIHJ1biBsb3ctbGV2ZWwgQ1BVIGluaXQgY29kZQkgICAoZnJvbSBGbGFzaCkgKi8KCiAgICBjYWxsIGNwdV9pbml0X2YKICAgIGJvYXJkX2luaXRfZjogKGFyY2gvcHBjL2xpYlxib2FyZC5jKQoJaW5pdF9zZXF1ZW5jZSBkZWZpbmVzIGEgbGlzdCBvZiBmdW5jdGlvbiB0byBiZSBjYWxsZWQKCSAgICBib2FyZF9lYXJseV9pbml0X2Y6IChib2FyZC9uZXRzdGFsL2hjdTUvaGN1NS5jKQoJCVdlIGFyZSB1c2luZyBCb290c3RyYXAtT3B0aW9uIEEKCQlpZiBDUFIwX0lDRkdfUkxJX01BU0sgPT0gMCB0aGVuIHNldCBzb21lIHJlZ2lzdGVycyBhbmQgcmVib290CgkJU2V0dXAgdGhlIEdQSU8gcGlucwoJCVNldHVwIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBwb2xhcml0aWVzLCB0cmlnZ2VycywgZXRjLgoJCUV0aGVybmV0LCBQQ0ksIFVTQiBlbmFibGUKCQlzZXR1cCBCT09UIEZMQVNIIChDaGlwIHRpbWluZykKCSAgICBpbml0X2JhdWRyYXRlLAoJICAgIHNlcmlhbF9pbml0CgkgICAgY2hlY2tjcHUKCSAgICBtaXNjX2luaXRfZiAjaWZkZWYKCSAgICBpbml0X2Z1bmNfaTJjICNpZmRlZgoJICAgIHBvc3RfaW5pdF9mICAjaWZkZWYKCSAgICBpbml0X2Z1bmNfcmFtIC0+IGNhbGxzIGluaXRfZHJhbSBib2FyZC9uZXRzdGFsL2hjdTUvc2RyYW0uYwoJCShFWUUgZnVuY3Rpb24gcmVtb3ZlZCEhKQoJICAgIHRlc3RfZHJhbSBjYWxsCgoJICogUmVzZXJ2ZSBtZW1vcnkgYXQgZW5kIG9mIFJBTSBmb3IgKHRvcCBkb3duIGluIHRoYXQgb3JkZXIpOgoJICogIC0ga2VybmVsIGxvZyBidWZmZXIKCSAqICAtIHByb3RlY3RlZCBSQU0KCSAqICAtIExDRCBmcmFtZWJ1ZmZlcgoJICogIC0gbW9uaXRvciBjb2RlCgkgKiAgLSBib2FyZCBpbmZvIHN0cnVjdAoJU2F2ZSBsb2NhbCB2YXJpYWJsZXMgdG8gYm9hcmQgaW5mbyBzdHJ1Y3QKCWNhbGwgcmVsb2NhdGVfY29kZSgpIGRvZXMgbm90IHJldHVybgoJcmVsb2NhdGVfY29kZTogKGNwdS9wcGM0eHgvc3RhcnQuUykKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcm9tIG5vdyBvbiBvdXIgY29weSBpcyBpbiBSQU0gYW5kIHdlIHdpbGwgcnVuIGZyb20gdGhlcmUsCglzdGFydGluZyB3aXRoIGJvYXJkX2luaXRfcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBib2FyZF9pbml0X3I6IChhcmNoL3BwYy9saWJcYm9hcmQuYykKCXNldHVwIGJkIGZ1bmN0aW9uIHBvaW50ZXJzCgl0cmFwX2luaXQKCWZsYXNoX2luaXQ6IChib2FyZC9uZXRzdGFsL2hjdTUvZmxhc2guYykKCQkvKiBzZXR1cCBmb3IgdS1ib290IGVyYXNlLCB1cGRhdGUgKi8KCXNldHVwIGJkIGZsYXNoIGluZm8KCWNwdV9pbml0X3I6IChjcHUvcHBjNHh4L2NwdV9pbml0LmMpCgkgICAgcGVyaXBoZXJhbCBjaGlwIHNlbGVjdCBpbiB1c2luZyBkZWZpbmVzIGxpa2UKCSAgICBDT05GSUdfU1lTX0VCQ19QQjBBLCBDT05GSUdfU1lTX0VCQ19QQjBDIGZyb20gaGN1NS5oCgltZW1fbWFsbG9jX2luaXQKCW1hbGxvY19iaW5fcmVsb2MKCXNwaV9pbml0IChyIG9yIGYpPz8/IChDT05GSUdfRU5WX0lTX0lOX0VFUFJPTSkKCWVudl9yZWxvY2F0ZWQKCW1pc2NfaW5pdF9yKGJkKTogKGJvYXJkL25ldHN0YWwvaGN1NS5jKQoJICAgIGV0aGFkZHIgbWl0IHNlcmlhbCBudW1iZXIgZXJn5G56ZW4KICAgIFRoZW4gd2Ugd2lsbCBzb21laG93IGdvIGludG8gdGhlIGNvbW1hbmQgbG9vcAoKTW9zdCBvZiB0aGUgSFcgc3BlY2lmaWMgY29kZSBmb3IgdGhlIEhDVTUgbWF5IGJlIGZvdW5kIGluCmluY2x1ZGUvY29uZmlncy9oY3U1LmgKYm9hcmQvbmV0c3RhbC9oY3U1LyoKY3B1L3BwYzR4eC8qCmFyY2gvcHBjL2xpYi8qCmluY2x1ZGUvcHBjNDQwLmgKCkRyaXZlcnMgZm9yIHNlcmlhbCBldGMgYXJlIGZvdW5kIHVuZGVyIGRyaXZlcnMvCgpEb24ndCBhc2sgcXVlc3Rpb24gaWYgeW91IGRpZCBub3QgbG9vayBhdCB0aGUgUkVBRE1FICEhCk1vc3QgQ09ORklHX1NZU18qIGFuZCBDT05GSUdfKiBzd2l0Y2hlcyBhcmUgbWVudGlvbmVkL2V4cGxhaW5lZCB0aGVyZS4K