VGhlIFBvc3RncmVTUUwgY29udHJpYiB0cmVlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBzdWJ0cmVlIGNvbnRhaW5zIHBvcnRpbmcgdG9vbHMsIGFuYWx5c2lzIHV0aWxpdGllcywgYW5kIHBsdWctaW4KZmVhdHVyZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIGNvcmUgUG9zdGdyZVNRTCBzeXN0ZW0sIG1haW5seSBiZWNhdXNlCnRoZXkgYWRkcmVzcyBhIGxpbWl0ZWQgYXVkaWVuY2Ugb3IgYXJlIHRvbyBleHBlcmltZW50YWwgdG8gYmUgcGFydCBvZgp0aGUgbWFpbiBzb3VyY2UgdHJlZS4gIFRoaXMgZG9lcyBub3QgcHJlY2x1ZGUgdGhlaXIgdXNlZnVsbmVzcy4KClVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgZWFjaCBtb2R1bGUgYXBwZWFycyBpbiB0aGUgbWFpbiBTR01MIGRvY3VtZW50YXRpb24uCgpNb3N0IGl0ZW1zIGNhbiBiZSBidWlsdCB3aXRoIGBnbWFrZSBhbGwnIGFuZCBpbnN0YWxsZWQgd2l0aApgZ21ha2UgaW5zdGFsbCcgaW4gdGhlIHVzdWFsIGZhc2hpb24sIGFmdGVyIHlvdSBoYXZlIHJ1biB0aGUgYGNvbmZpZ3VyZScKc2NyaXB0IGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LiAgU29tZSBkaXJlY3RvcmllcyBzdXBwbHkgbmV3CnVzZXItZGVmaW5lZCBmdW5jdGlvbnMsIG9wZXJhdG9ycywgb3IgdHlwZXMuICBJbiB0aGVzZSBjYXNlcywgYWZ0ZXIgeW91IGhhdmUKaW5zdGFsbGVkIHRoZSBmaWxlcyB5b3UgbmVlZCB0byByZWdpc3RlciB0aGUgbmV3IGVudGl0aWVzIGluIHRoZSBkYXRhYmFzZQpzeXN0ZW0gYnkgcnVubmluZyB0aGUgY29tbWFuZHMgaW4gdGhlIHN1cHBsaWVkIC5zcWwgZmlsZS4gIEZvciBleGFtcGxlLAoKCSQgcHNxbCAtZCBkYm5hbWUgLWYgbW9kdWxlLnNxbAoKU2VlIHRoZSBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcwpwcm9jZWR1cmUuCgoKSW5kZXg6Ci0tLS0tLQoKYWRtaW5wYWNrIC0KCUZpbGUgYW5kIGxvZyBtYW5pcHVsYXRpb24gcm91dGluZXMsIHVzZWQgYnkgcGdBZG1pbgoJYnkgRGF2ZSBQYWdlIDxkcGFnZUB2YWxlLWhvdXNpbmcuY28udWs+CgphdXRvX2V4cGxhaW4gLQoJTG9nIEVYUExBSU4gb3V0cHV0IGZvciBsb25nLXJ1bm5pbmcgcXVlcmllcwoJYnkgVGFrYWhpcm8gSXRhZ2FraSA8aXRhZ2FraS50YWthaGlyb0Bvc3MubnR0LmNvLmpwPgoKYnRyZWVfZ2luIC0KCVN1cHBvcnQgZm9yIGVtdWxhdGluZyBCVFJFRSBpbmRleGluZyBpbiBHSU4KCWJ5IE9sZWcgQmFydHVub3YgPG9sZWdAc2FpLm1zdS5zdT4gYW5kIFRlb2RvciBTaWdhZXYgPHRlb2RvckBzaWdhZXYucnU+CgpidHJlZV9naXN0IC0KCVN1cHBvcnQgZm9yIGVtdWxhdGluZyBCVFJFRSBpbmRleGluZyBpbiBHaVNUCglieSBPbGVnIEJhcnR1bm92IDxvbGVnQHNhaS5tc3Uuc3U+IGFuZCBUZW9kb3IgU2lnYWV2IDx0ZW9kb3JAc2lnYWV2LnJ1PgoKY2hrcGFzcyAtCglBbiBhdXRvLWVuY3J5cHRlZCBwYXNzd29yZCBkYXRhdHlwZQoJYnkgRCdBcmN5IEouTS4gQ2FpbiA8ZGFyY3lAZHJ1aWQubmV0PgoKY2l0ZXh0IC0KCUEgY2FzZS1pbnNlbnNpdGl2ZSBjaGFyYWN0ZXIgc3RyaW5nIGRhdGF0eXBlCglieSBEYXZpZCBFLiBXaGVlbGVyIDxkYXZpZEBraW5ldGljb2RlLmNvbT4KCmN1YmUgLQoJTXVsdGlkaW1lbnNpb25hbC1jdWJlIGRhdGF0eXBlIChHaVNUIGluZGV4aW5nIGV4YW1wbGUpCglieSBHZW5lIFNlbGtvdiwgSnIuIDxzZWxrb3ZqckBtY3MuYW5sLmdvdj4KCmRibGluayAtCglBbGxvd3MgcmVtb3RlIHF1ZXJ5IGV4ZWN1dGlvbgoJYnkgSm9lIENvbndheSA8bWFpbEBqb2Vjb253YXkuY29tPgoKZGljdF9pbnQgLQoJVGV4dCBzZWFyY2ggZGljdGlvbmFyeSB0ZW1wbGF0ZSBmb3IgaW50ZWdlcnMKCWJ5IFNlcmdleSBLYXJwb3YgPGthcnBvdkBzYW8ucnU+CgpkaWN0X3hzeW4gLQoJVGV4dCBzZWFyY2ggZGljdGlvbmFyeSB0ZW1wbGF0ZSBmb3IgZXh0ZW5kZWQgc3lub255bSBwcm9jZXNzaW5nCglieSBTZXJnZXkgS2FycG92IDxrYXJwb3ZAc2FvLnJ1PgoKZWFydGhkaXN0YW5jZSAtCglGdW5jdGlvbnMgZm9yIGNvbXB1dGluZyBkaXN0YW5jZXMgYmV0d2VlbiB0d28gcG9pbnRzIG9uIEVhcnRoCiAgICAgICAgYnkgQnJ1bm8gV29sZmYgSUlJIDxicnVub0B3b2xmZi50bz4gYW5kIEhhbCBTbnlkZXIgPGhhbEB2YWlsc3lzLmNvbT4KCmZ1enp5c3RybWF0Y2ggLQoJTGV2ZW5zaHRlaW4sIG1ldGFwaG9uZSwgYW5kIHNvdW5kZXggZnV6enkgc3RyaW5nIG1hdGNoaW5nCglieSBKb2UgQ29ud2F5IDxtYWlsQGpvZWNvbndheS5jb20+IGFuZCBKb2VsIEJ1cnRvbiA8amJ1cnRvbkBzY3cub3JnPgoKaHN0b3JlIC0KCU1vZHVsZSBmb3Igc3RvcmluZyAoa2V5LCB2YWx1ZSkgcGFpcnMKCWJ5IE9sZWcgQmFydHVub3YgPG9sZWdAc2FpLm1zdS5zdT4gYW5kIFRlb2RvciBTaWdhZXYgPHRlb2RvckBzaWdhZXYucnU+CgppbnRhZ2cgLQoJSW50ZWdlciBhZ2dyZWdhdG9yCglieSBtbHcgPG1hcmt3QG1vaGF3a3NvZnQuY29tPgoKaW50YXJyYXkgLQoJSW5kZXggc3VwcG9ydCBmb3IgYXJyYXlzIG9mIGludDQsIHVzaW5nIEdpU1QKCWJ5IFRlb2RvciBTaWdhZXYgPHRlb2RvckBzaWdhZXYucnU+IGFuZCBPbGVnIEJhcnR1bm92IDxvbGVnQHNhaS5tc3Uuc3U+Cgppc24gLQoJUG9zdGdyZVNRTCB0eXBlIGV4dGVuc2lvbnMgZm9yIElTQk4sIElTU04sIElTTU4sIEVBTjEzIHByb2R1Y3QgbnVtYmVycwoJYnkgR2VybeFuIE3pbmRleiBCcmF2byAoS3JvbnV6KSA8a3JvbnV6QGhvdG1haWwuY29tPgoKbG8gLQoJTGFyZ2UgT2JqZWN0IG1haW50ZW5hbmNlCglieSBQZXRlciBNb3VudCA8cGV0ZXJAcmV0ZXAub3JnLnVrPiAKCmx0cmVlIC0KCVRyZWUtbGlrZSBkYXRhIHN0cnVjdHVyZXMKCWJ5IFRlb2RvciBTaWdhZXYgPHRlb2RvckBzaWdhZXYucnU+IGFuZCBPbGVnIEJhcnR1bm92IDxvbGVnQHNhaS5tc3Uuc3U+CgpvaWQybmFtZSAtIAoJTWFwcyBudW1lcmljIGZpbGVzIHRvIHRhYmxlIG5hbWVzCglieSBCIFBhbG1lciA8YnBhbG1lckBjcmltZWxhYnMubmV0PgoKcGFnZWluc3BlY3QgLQoJQWxsb3dzIGluc3BlY3Rpb24gb2YgZGF0YWJhc2UgcGFnZXMKCUhlaWtraSBMaW5uYWthbmdhcyA8aGVpa2tpQGVudGVycHJpc2VkYi5jb20+CgpwZ19idWZmZXJjYWNoZSAtCglSZWFsIHRpbWUgcXVlcmllcyBvbiB0aGUgc2hhcmVkIGJ1ZmZlciBjYWNoZQoJYnkgTWFyayBLaXJrd29vZCA8bWFya2lyQHBhcmFkaXNlLm5ldC5uej4KCnBnX2ZyZWVzcGFjZW1hcCAtCglEaXNwbGF5cyB0aGUgY29udGVudHMgb2YgdGhlIGZyZWUgc3BhY2UgbWFwIChGU00pCglieSBNYXJrIEtpcmt3b29kIDxtYXJraXJAcGFyYWRpc2UubmV0Lm56PgoKcGdfc3RhbmRieSAtCglTYW1wbGUgYXJjaGl2ZV9jb21tYW5kIGZvciB3YXJtIHN0YW5kYnkgb3BlcmF0aW9uCglieSBTaW1vbiBSaWdncyA8c2ltb25AMm5kcXVhZHJhbnQuY29tPgoKcGdfc3RhdF9zdGF0ZW1lbnRzIC0KCVRyYWNrIHN0YXRlbWVudCBleGVjdXRpb24gdGltZXMgYWNyb3NzIGEgd2hvbGUgZGF0YWJhc2UgY2x1c3RlcgoJYnkgVGFrYWhpcm8gSXRhZ2FraSA8aXRhZ2FraS50YWthaGlyb0Bvc3MubnR0LmNvLmpwPgoKcGdfdHJnbSAtCglGdW5jdGlvbnMgZm9yIGRldGVybWluaW5nIHRoZSBzaW1pbGFyaXR5IG9mIHRleHQgYmFzZWQgb24gdHJpZ3JhbQoJbWF0Y2hpbmcuCglieSBPbGVnIEJhcnR1bm92IDxvbGVnQHNhaS5tc3Uuc3U+IGFuZCBUZW9kb3IgU2lnYWV2IDx0ZW9kb3JAc2lnYWV2LnJ1PgoKcGdiZW5jaCAtCglUUEMtQiBsaWtlIGJlbmNobWFya2luZyB0b29sCglieSBUYXRzdW8gSXNoaWkgPGlzaGlpQHNyYW9zcy5jby5qcD4KCnBnY3J5cHRvIC0KCUNyeXB0b2dyYXBoaWMgZnVuY3Rpb25zCglieSBNYXJrbyBLcmVlbiA8bWFya29AbC10LmVlPgoKcGdyb3dsb2NrcyAtCglBIGZ1bmN0aW9uIHRvIHJldHVybiByb3cgbG9ja2luZyBpbmZvcm1hdGlvbgoJYnkgVGF0c3VvIElzaGlpIDxpc2hpaUBzcmFvc3MuY28uanA+CgpwZ3N0YXR0dXBsZSAtCglGdW5jdGlvbnMgdG8gcmV0dXJuIHN0YXRpc3RpY3MgYWJvdXQgImRlYWQiIHR1cGxlcyBhbmQgZnJlZQoJc3BhY2Ugd2l0aGluIGEgdGFibGUKCWJ5IFRhdHN1byBJc2hpaSA8aXNoaWlAc3Jhb3NzLmNvLmpwPgoKc2VnIC0KCUNvbmZpZGVuY2UtaW50ZXJ2YWwgZGF0YXR5cGUgKEdpU1QgaW5kZXhpbmcgZXhhbXBsZSkKCWJ5IEdlbmUgU2Vsa292LCBKci4gPHNlbGtvdmpyQG1jcy5hbmwuZ292PgoKc3BpIC0KCVZhcmlvdXMgdHJpZ2dlciBmdW5jdGlvbnMsIGV4YW1wbGVzIGZvciB1c2luZyBTUEkuCgpzc2xpbmZvIC0KCUZ1bmN0aW9ucyB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgU1NMIGNlcnRpZmljYXRlcwoJYnkgVmljdG9yIFdhZ25lciA8dml0dXNAY3J5cHRvY29tLnJ1PgoKc3RhcnQtc2NyaXB0cyAtIAoJU2NyaXB0cyBmb3Igc3RhcnRpbmcgdGhlIHNlcnZlciBhdCBib290IHRpbWUgb24gdmFyaW91cyBwbGF0Zm9ybXMuCgp0YWJsZWZ1bmMgLQoJRXhhbXBsZXMgb2YgZnVuY3Rpb25zIHJldHVybmluZyB0YWJsZXMKCWJ5IEpvZSBDb253YXkgPG1haWxAam9lY29ud2F5LmNvbT4KCnRlc3RfcGFyc2VyIC0KCVNhbXBsZSB0ZXh0IHNlYXJjaCBwYXJzZXIKCWJ5IFNlcmdleSBLYXJwb3YgPGthcnBvdkBzYW8ucnU+Cgp0c2VhcmNoMiAtCglDb21wYXRpYmlsaXR5IHBhY2thZ2UgZm9yIHRoZSBwcmUtOC4zIGltcGxlbWVudGF0aW9uIG9mIHRleHQgc2VhcmNoLgoJUGF2ZWwgU3RlaHVsZSA8cGF2ZWwuc3RlaHVsZUBnbWFpbC5jb20+LCBiYXNlZCBvbiBjb2RlIG9yaWdpbmFsbHkgYnkKCVRlb2RvciBTaWdhZXYgPHRlb2RvckBzaWdhZXYucnU+IGFuZCBPbGVnIEJhcnR1bm92IDxvbGVnQHNhaS5tc3Uuc3U+LgoKdXVpZC1vc3NwIC0KCVVVSUQgZ2VuZXJhdGlvbiBmdW5jdGlvbnMKCWJ5IFBldGVyIEVpc2VudHJhdXQgPHBldGVyX2VAZ214Lm5ldD4KCnZhY3V1bWxvIC0KCVJlbW92ZSBvcnBoYW5lZCBsYXJnZSBvYmplY3RzCglieSBQZXRlciBUIE1vdW50IDxwZXRlckByZXRlcC5vcmcudWs+Cgp4bWwyIC0KCVN0b3JpbmcgWE1MIGluIFBvc3RncmVTUUwKCWJ5IEpvaG4gR3JheSA8amdyYXlAYXp1bGkuY28udWs+Cg==