ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3J5cHRvL2FwaS1pbnRyby50eHQgYi9Eb2N1bWVudGF0aW9uL2NyeXB0by9hcGktaW50cm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDViNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NyeXB0by9hcGktaW50cm8udHh0CkBAIC0wLDAgKzEsMjQ0IEBACisKKyAgICAgICAgICAgICAgICAgICAgU2NhdHRlcmxpc3QgQ3J5cHRvZ3JhcGhpYyBBUEkKKyAgICAgICAgICAgICAgICAgICAKK0lOVFJPRFVDVElPTgorCitUaGUgU2NhdHRlcmxpc3QgQ3J5cHRvIEFQSSB0YWtlcyBwYWdlIHZlY3RvcnMgKHNjYXR0ZXJsaXN0cykgYXMKK2FyZ3VtZW50cywgYW5kIHdvcmtzIGRpcmVjdGx5IG9uIHBhZ2VzLiAgSW4gc29tZSBjYXNlcyAoZS5nLiBFQ0IKK21vZGUgY2lwaGVycyksIHRoaXMgd2lsbCBhbGxvdyBmb3IgcGFnZXMgdG8gYmUgZW5jcnlwdGVkIGluLXBsYWNlCit3aXRoIG5vIGNvcHlpbmcuCisKK09uZSBvZiB0aGUgaW5pdGlhbCBnb2FscyBvZiB0aGlzIGRlc2lnbiB3YXMgdG8gcmVhZGlseSBzdXBwb3J0IElQc2VjLAorc28gdGhhdCBwcm9jZXNzaW5nIGNhbiBiZSBhcHBsaWVkIHRvIHBhZ2VkIHNrYidzIHdpdGhvdXQgdGhlIG5lZWQKK2ZvciBsaW5lYXJpemF0aW9uLgorCisKK0RFVEFJTFMKKworQXQgdGhlIGxvd2VzdCBsZXZlbCBhcmUgYWxnb3JpdGhtcywgd2hpY2ggcmVnaXN0ZXIgZHluYW1pY2FsbHkgd2l0aCB0aGUKK0FQSS4KKworJ1RyYW5zZm9ybXMnIGFyZSB1c2VyLWluc3RhbnRpYXRlZCBvYmplY3RzLCB3aGljaCBtYWludGFpbiBzdGF0ZSwgaGFuZGxlIGFsbAorb2YgdGhlIGltcGxlbWVudGF0aW9uIGxvZ2ljIChlLmcuIG1hbmlwdWxhdGluZyBwYWdlIHZlY3RvcnMpLCBwcm92aWRlIGFuIAorYWJzdHJhY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgYWxnb3JpdGhtcywgYW5kIGhhbmRsZSBjb21tb24gbG9naWNhbCAKK29wZXJhdGlvbnMgKGUuZy4gY2lwaGVyIG1vZGVzLCBITUFDIGZvciBkaWdlc3RzKS4gIEhvd2V2ZXIsIGF0IHRoZSB1c2VyIAorbGV2ZWwgdGhleSBhcmUgdmVyeSBzaW1wbGUuCisKK0NvbmNlcHR1YWxseSwgdGhlIEFQSSBsYXllcmluZyBsb29rcyBsaWtlIHRoaXM6CisKKyAgW3RyYW5zZm9ybSBhcGldICAodXNlciBpbnRlcmZhY2UpCisgIFt0cmFuc2Zvcm0gb3BzXSAgKHBlci10eXBlIGxvZ2ljIGdsdWUgZS5nLiBjaXBoZXIuYywgZGlnZXN0LmMpCisgIFthbGdvcml0aG0gYXBpXSAgKGZvciByZWdpc3RlcmluZyBhbGdvcml0aG1zKQorICAKK1RoZSBpZGVhIGlzIHRvIG1ha2UgdGhlIHVzZXIgaW50ZXJmYWNlIGFuZCBhbGdvcml0aG0gcmVnaXN0cmF0aW9uIEFQSQordmVyeSBzaW1wbGUsIHdoaWxlIGhpZGluZyB0aGUgY29yZSBsb2dpYyBmcm9tIGJvdGguICBNYW55IGdvb2QgaWRlYXMKK2Zyb20gZXhpc3RpbmcgQVBJcyBzdWNoIGFzIENyeXB0b2FwaSBhbmQgTmV0dGxlIGhhdmUgYmVlbiBhZGFwdGVkIGZvciB0aGlzLgorCitUaGUgQVBJIGN1cnJlbnRseSBzdXBwb3J0cyB0aHJlZSB0eXBlcyBvZiB0cmFuc2Zvcm1zOiBDaXBoZXJzLCBEaWdlc3RzIGFuZAorQ29tcHJlc3NvcnMuICBUaGUgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBlc3BlY2lhbGx5IHNlZW0gdG8gYmUgcGVyZm9ybWluZwordmVyeSB3ZWxsIHNvIGZhci4KKworU3VwcG9ydCBmb3IgaGFyZHdhcmUgY3J5cHRvIGRldmljZXMgdmlhIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UgaXMKK3VuZGVyIGRldmVsb3BtZW50LgorCitIZXJlJ3MgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoZSBBUEk6CisKKwkjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisJCisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdOworCWNoYXIgcmVzdWx0WzEyOF07CisJc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKKwkKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKCJtZDUiLCAwKTsKKwlpZiAodGZtID09IE5VTEwpCisJCWZhaWwoKTsKKwkJCisJLyogLi4uIHNldCB1cCB0aGUgc2NhdHRlcmxpc3RzIC4uLiAqLworCQorCWNyeXB0b19kaWdlc3RfaW5pdCh0Zm0pOworCWNyeXB0b19kaWdlc3RfdXBkYXRlKHRmbSwgJnNnLCAyKTsKKwljcnlwdG9fZGlnZXN0X2ZpbmFsKHRmbSwgcmVzdWx0KTsKKwkKKwljcnlwdG9fZnJlZV90Zm0odGZtKTsKKworICAgIAorTWFueSByZWFsIGV4YW1wbGVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCBtb2R1bGUgKHRjcnlwdC5jKS4KKworCitDT05GSUdVUkFUSU9OIE5PVEVTCisKK0FzIFRyaXBsZSBERVMgaXMgcGFydCBvZiB0aGUgREVTIG1vZHVsZSwgZm9yIHRob3NlIHVzaW5nIG1vZHVsYXIgYnVpbGRzLAorYWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byAvZXRjL21vZHByb2JlLmNvbmY6CisKKyAgYWxpYXMgZGVzM19lZGUgZGVzCisKK1RoZSBOdWxsIGFsZ29yaXRobXMgcmVzaWRlIGluIHRoZSBjcnlwdG9fbnVsbCBtb2R1bGUsIHNvIHRoZXNlIGxpbmVzCitzaG91bGQgYWxzbyBiZSBhZGRlZDoKKworICBhbGlhcyBjaXBoZXJfbnVsbCBjcnlwdG9fbnVsbAorICBhbGlhcyBkaWdlc3RfbnVsbCBjcnlwdG9fbnVsbAorICBhbGlhcyBjb21wcmVzc19udWxsIGNyeXB0b19udWxsCisKK1RoZSBTSEEzODQgYWxnb3JpdGhtIHNoYXJlcyBjb2RlIHdpdGhpbiB0aGUgU0hBNTEyIG1vZHVsZSwgc28geW91J2xsCithbHNvIG5lZWQ6CisgIGFsaWFzIHNoYTM4NCBzaGE1MTIKKworCitERVZFTE9QRVIgTk9URVMKKworVHJhbnNmb3JtcyBtYXkgb25seSBiZSBhbGxvY2F0ZWQgaW4gdXNlciBjb250ZXh0LCBhbmQgY3J5cHRvZ3JhcGhpYworbWV0aG9kcyBtYXkgb25seSBiZSBjYWxsZWQgZnJvbSBzb2Z0aXJxIGFuZCB1c2VyIGNvbnRleHRzLgorCitXaGVuIHVzaW5nIHRoZSBBUEkgZm9yIGNpcGhlcnMsIHBlcmZvcm1hbmNlIHdpbGwgYmUgb3B0aW1hbCBpZiBlYWNoCitzY2F0dGVybGlzdCBjb250YWlucyBkYXRhIHdoaWNoIGlzIGEgbXVsdGlwbGUgb2YgdGhlIGNpcGhlcidzIGJsb2NrCitzaXplICh0eXBpY2FsbHkgOCBieXRlcykuICBUaGlzIHByZXZlbnRzIGhhdmluZyB0byBkbyBhbnkgY29weWluZworYWNyb3NzIG5vbi1hbGlnbmVkIHBhZ2UgZnJhZ21lbnQgYm91bmRhcmllcy4KKworCitBRERJTkcgTkVXIEFMR09SSVRITVMKKworV2hlbiBzdWJtaXR0aW5nIGEgbmV3IGFsZ29yaXRobSBmb3IgaW5jbHVzaW9uLCBhIG1hbmRhdG9yeSByZXF1aXJlbWVudAoraXMgdGhhdCBhdCBsZWFzdCBhIGZldyB0ZXN0IHZlY3RvcnMgZnJvbSBrbm93biBzb3VyY2VzIChwcmVmZXJhYmx5CitzdGFuZGFyZHMpIGJlIGluY2x1ZGVkLgorCitDb252ZXJ0aW5nIGV4aXN0aW5nIHdlbGwga25vd24gY29kZSBpcyBwcmVmZXJyZWQsIGFzIGl0IGlzIG1vcmUgbGlrZWx5Cit0byBoYXZlIGJlZW4gcmV2aWV3ZWQgYW5kIHdpZGVseSB0ZXN0ZWQuICBJZiBzdWJtaXR0aW5nIGNvZGUgZnJvbSBMR1BMCitzb3VyY2VzLCBwbGVhc2UgY29uc2lkZXIgY2hhbmdpbmcgdGhlIGxpY2Vuc2UgdG8gR1BMIChzZWUgc2VjdGlvbiAzIG9mCit0aGUgTEdQTCkuCisKK0FsZ29yaXRobXMgc3VibWl0dGVkIG11c3QgYWxzbyBiZSBnZW5lcmFsbHkgcGF0ZW50LWZyZWUgKGUuZy4gSURFQQord2lsbCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIG1haW5saW5lIHVudGlsIGFyb3VuZCAyMDExKSwgYW5kIGJlIGJhc2VkCitvbiBhIHJlY29nbml6ZWQgc3RhbmRhcmQgYW5kL29yIGhhdmUgYmVlbiBzdWJqZWN0ZWQgdG8gYXBwcm9wcmlhdGUKK3BlZXIgcmV2aWV3LgorCitBbHNvIGNoZWNrIGZvciBhbnkgUkZDcyB3aGljaCBtYXkgcmVsYXRlIHRvIHRoZSB1c2Ugb2Ygc3BlY2lmaWMgYWxnb3JpdGhtcywKK2FzIHdlbGwgYXMgZ2VuZXJhbCBhcHBsaWNhdGlvbiBub3RlcyBzdWNoIGFzIFJGQzI0NTEgKCJUaGUgRVNQIENCQy1Nb2RlCitDaXBoZXIgQWxnb3JpdGhtcyIpLgorCitJdCdzIGEgZ29vZCBpZGVhIHRvIGF2b2lkIHVzaW5nIGxvdHMgb2YgbWFjcm9zIGFuZCB1c2UgaW5saW5lZCBmdW5jdGlvbnMKK2luc3RlYWQsIGFzIGdjYyBkb2VzIGEgZ29vZCBqb2Igd2l0aCBpbmxpbmluZywgd2hpbGUgZXhjZXNzaXZlIHVzZSBvZgorbWFjcm9zIGNhbiBjYXVzZSBjb21waWxhdGlvbiBwcm9ibGVtcyBvbiBzb21lIHBsYXRmb3Jtcy4KKworQWxzbyBjaGVjayB0aGUgVE9ETyBsaXN0IGF0IHRoZSB3ZWIgc2l0ZSBsaXN0ZWQgYmVsb3cgdG8gc2VlIHdoYXQgcGVvcGxlCittaWdodCBhbHJlYWR5IGJlIHdvcmtpbmcgb24uCisKKworQlVHUworCitTZW5kIGJ1ZyByZXBvcnRzIHRvOgorSmFtZXMgTW9ycmlzIDxqbW9ycmlzQHJlZGhhdC5jb20+CitDYzogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUByZWRoYXQuY29tPgorCisKK0ZVUlRIRVIgSU5GT1JNQVRJT04KKworRm9yIGZ1cnRoZXIgcGF0Y2hlcyBhbmQgdmFyaW91cyB1cGRhdGVzLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgVE9ETworbGlzdCwgc2VlOgoraHR0cDovL3NhbWJhLm9yZy9+amFtZXNtL2NyeXB0by8KKworCitBVVRIT1JTCisKK0phbWVzIE1vcnJpcworRGF2aWQgUy4gTWlsbGVyCisKKworQ1JFRElUUworCitUaGUgZm9sbG93aW5nIHBlb3BsZSBwcm92aWRlZCBpbnZhbHVhYmxlIGZlZWRiYWNrIGR1cmluZyB0aGUgZGV2ZWxvcG1lbnQKK29mIHRoZSBBUEk6CisKKyAgQWxleGV5IEt1em5ldHpvdgorICBSdXN0eSBSdXNzZWxsCisgIEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwKKyAgSmVmZiBHYXJ6aWsKKyAgTWljaGFlbCBSaWNoYXJkc29uCisgIEFuZHJldyBNb3J0b24KKyAgSW5nbyBPZXNlcgorICBDaHJpc3RvcGggSGVsbHdpZworCitQb3J0aW9ucyBvZiB0aGlzIEFQSSB3ZXJlIGRlcml2ZWQgZnJvbSB0aGUgZm9sbG93aW5nIHByb2plY3RzOgorICAKKyAgS2VybmVsaSBDcnlwdG9hcGkgKGh0dHA6Ly93d3cua2VybmVsaS5vcmcvKQorICAgIEFsZXhhbmRlciBLamVsZGFhcworICAgIEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwKKyAgICBLeWxlIE1jTWFydGluCisgICAgSmVhbi1MdWMgQ29va2UKKyAgICBEYXZpZCBCcnlzb24KKyAgICBDbGVtZW5zIEZydWh3aXJ0aAorICAgIFRvYmlhcyBSaW5nc3Ryb20KKyAgICBIYXJhbGQgV2VsdGUKKworYW5kOworICAKKyAgTmV0dGxlIChodHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL35uaXNzZS9uZXR0bGUvKQorICAgIE5pZWxzIE32bGxlcgorCitPcmlnaW5hbCBkZXZlbG9wZXJzIG9mIHRoZSBjcnlwdG8gYWxnb3JpdGhtczoKKworICBEYW5hIEwuIEhvdyAoREVTKQorICBBbmRyZXcgVHJpZGdlbGwgYW5kIFN0ZXZlIEZyZW5jaCAoTUQ0KQorICBDb2xpbiBQbHVtYiAoTUQ1KQorICBTdGV2ZSBSZWlkIChTSEExKQorICBKZWFuLUx1YyBDb29rZSAoU0hBMjU2LCBTSEEzODQsIFNIQTUxMikKKyAgS2F6dW5vcmkgTWl5YXphd2EgLyBVU0FHSSAoSE1BQykKKyAgTWF0dGhldyBTa2FsYSAoVHdvZmlzaCkKKyAgRGFnIEFybmUgT3N2aWsgKFNlcnBlbnQpCisgIEJyaWFuIEdsYWRtYW4gKEFFUykKKyAgS2FydGlrZXkgTWFoZW5kcmEgQmhhdHQgKENBU1Q2KQorICBKb24gT2JlcmhlaWRlIChBUkM0KQorICBKb3VuaSBNYWxpbmVuIChNaWNoYWVsIE1JQykKKworU0hBMSBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBKZWFuLUZyYW5jb2lzIERpdmUKKyAgCitERVMgYWxnb3JpdGhtIGNvbnRyaWJ1dG9yczoKKyAgUmFpbWFyIEZhbGtlCisgIEdpc2xlIFPmbGVuc21pbmRlCisgIE5pZWxzIE32bGxlcgorCitCbG93ZmlzaCBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBIZXJiZXJ0IFZhbGVyaW8gUmllZGVsCisgIEt5bGUgTWNNYXJ0aW4KKworVHdvZmlzaCBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBXZXJuZXIgS29jaAorICBNYXJjIE11dHoKKworU0hBMjU2LzM4NC81MTIgYWxnb3JpdGhtIGNvbnRyaWJ1dG9yczoKKyAgQW5kcmV3IE1jRG9uYWxkCisgIEt5bGUgTWNNYXJ0aW4KKyAgSGVyYmVydCBWYWxlcmlvIFJpZWRlbAorICAKK0FFUyBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBBbGV4YW5kZXIgS2plbGRhYXMKKyAgSGVyYmVydCBWYWxlcmlvIFJpZWRlbAorICBLeWxlIE1jTWFydGluCisgIEFkYW0gSi4gUmljaHRlcgorICBGcnVod2lydGggQ2xlbWVucyAoaTU4NikKKyAgTGludXMgVG9ydmFsZHMgKGk1ODYpCisKK0NBU1Q1IGFsZ29yaXRobSBjb250cmlidXRvcnM6CisgIEthcnRpa2V5IE1haGVuZHJhIEJoYXR0IChvcmlnaW5hbCBkZXZlbG9wZXJzIHVua25vd24sIEZTRiBjb3B5cmlnaHQpLgorCitURUEvWFRFQSBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBBYXJvbiBHcm90aGUKKworS2hhemFkIGFsZ29yaXRobSBjb250cmlidXRvcnM6CisgIEFhcm9uIEdyb3RoZQorCitXaGlybHBvb2wgYWxnb3JpdGhtIGNvbnRyaWJ1dG9yczoKKyAgQWFyb24gR3JvdGhlCisgIEplYW4tTHVjIENvb2tlCisKK0FudWJpcyBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBBYXJvbiBHcm90aGUKKworVGlnZXIgYWxnb3JpdGhtIGNvbnRyaWJ1dG9yczoKKyAgQWFyb24gR3JvdGhlCisKK0dlbmVyaWMgc2NhdHRlcndhbGsgY29kZSBieSBBZGFtIEouIFJpY2h0ZXIgPGFkYW1AeWdnZHJhc2lsLmNvbT4KKworUGxlYXNlIHNlbmQgYW55IGNyZWRpdHMgdXBkYXRlcyBvciBjb3JyZWN0aW9ucyB0bzoKK0phbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NyeXB0by9kZXNjb3JlLXJlYWRtZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NyeXB0by9kZXNjb3JlLXJlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2NDc0YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY3J5cHRvL2Rlc2NvcmUtcmVhZG1lLnR4dApAQCAtMCwwICsxLDM1MiBAQAorQmVsb3cgaXMgdGhlIG9yZ2luYWwgUkVBRE1FIGZpbGUgZnJvbSB0aGUgZGVzY29yZS5zaGFyIHBhY2thZ2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVzIC0gZmFzdCAmIHBvcnRhYmxlIERFUyBlbmNyeXB0aW9uICYgZGVjcnlwdGlvbi4KK0NvcHlyaWdodCAoQykgMTk5MiAgRGFuYSBMLiBIb3cKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworQXV0aG9yJ3MgYWRkcmVzczogaG93QGlzbC5zdGFuZm9yZC5lZHUKKworJElkOiBSRUFETUUsdiAxLjE1IDE5OTIvMDUvMjAgMDA6MjU6MzIgaG93IEUgJAorCisKKz09Pj4gVG8gY29tcGlsZSBhZnRlciB1bnRhcnJpbmcvdW5zaGFycmluZywganVzdCBgbWFrZScgPDw9PQorCisKK1RoaXMgcGFja2FnZSB3YXMgZGVzaWduZWQgd2l0aCB0aGUgZm9sbG93aW5nIGdvYWxzOgorMS4JSGlnaGVzdCBwb3NzaWJsZSBlbmNyeXB0aW9uL2RlY3J5cHRpb24gUEVSRk9STUFOQ0UuCisyLglQT1JUQUJJTElUWSB0byBhbnkgYnl0ZS1hZGRyZXNzYWJsZSBob3N0IHdpdGggYSAzMmJpdCB1bnNpZ25lZCBDIHR5cGUKKzMuCVBsdWctY29tcGF0aWJsZSByZXBsYWNlbWVudCBmb3IgS0VSQkVST1MncyBsb3ctbGV2ZWwgcm91dGluZXMuCisKK1RoaXMgc2Vjb25kIHJlbGVhc2UgaW5jbHVkZXMgYSBudW1iZXIgb2YgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzIGZvcgorcmVnaXN0ZXItc3RhcnZlZCBtYWNoaW5lcy4gIE15IGRpc2N1c3Npb25zIHdpdGggUmljaGFyZCBPdXRlcmJyaWRnZSwKKzcxNzU1LjIwNEBjb21wdXNlcnZlLmNvbSwgc3BhcmtlZCBhIG51bWJlciBvZiB0aGVzZSBlbmhhbmNlbWVudHMuCisKK1RvIG1vcmUgcmFwaWRseSB1bmRlcnN0YW5kIHRoZSBjb2RlIGluIHRoaXMgcGFja2FnZSwgaW5zcGVjdCBkZXNTbWFsbEZpcHMuaQorKGNyZWF0ZWQgYnkgdHlwaW5nIGBtYWtlJykgQkVGT1JFIHlvdSB0YWNrbGUgZGVzQ29kZS5oLiAgVGhlIGxhdHRlciBpcyBzZXQKK3VwIGluIGEgcGFyYW1ldGVyaXplZCBmYXNoaW9uIHNvIGl0IGNhbiBlYXNpbHkgYmUgbW9kaWZpZWQgYnkgc3BlZWQtZGFlbW9uCitoYWNrZXJzIGluIHB1cnN1aXQgb2YgdGhhdCBsYXN0IG1pY3Jvc2Vjb25kLiAgWW91IHdpbGwgZmluZCBpdCBtb3JlCitpbGx1bWluYXRpbmcgdG8gaW5zcGVjdCBvbmUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sCithbmQgdGhlbiBtb3ZlIG9uIHRvIHRoZSBjb21tb24gYWJzdHJhY3Qgc2tlbGV0b24gd2l0aCB0aGlzIG9uZSBpbiBtaW5kLgorCisKK3BlcmZvcm1hbmNlIGNvbXBhcmlzb24gdG8gb3RoZXIgYXZhaWxhYmxlIGRlcyBjb2RlIHdoaWNoIGkgY291bGQKK2NvbXBpbGUgb24gYSBTUEFSQ1N0YXRpb24gMSAoY2MgLU80LCBnY2MgLU8yKToKKwordGhpcyBjb2RlIChieXRlLW9yZGVyIGluZGVwZW5kZW50KToKKyAgIDMwdXMgcGVyIGVuY3J5cHRpb24gKG9wdGlvbnM6IDY0ayB0YWJsZXMsIG5vIElQL0ZQKQorICAgMzN1cyBwZXIgZW5jcnlwdGlvbiAob3B0aW9uczogNjRrIHRhYmxlcywgRklQUyBzdGFuZGFyZCBiaXQgb3JkZXJpbmcpCisgICA0NXVzIHBlciBlbmNyeXB0aW9uIChvcHRpb25zOiAgMmsgdGFibGVzLCBubyBJUC9GUCkKKyAgIDQ4dXMgcGVyIGVuY3J5cHRpb24gKG9wdGlvbnM6ICAyayB0YWJsZXMsIEZJUFMgc3RhbmRhcmQgYml0IG9yZGVyaW5nKQorICAyNzV1cyB0byBzZXQgYSBuZXcga2V5ICh1c2VzIDFrIG9mIGtleSB0YWJsZXMpCisJdGhpcyBoYXMgdGhlIHF1aWNrZXN0IGVuY3J5cHRpb24vZGVjcnlwdGlvbiByb3V0aW5lcyBpJ3ZlIHNlZW4uCisJc2luY2UgaSB3YXMgaW50ZXJlc3RlZCBpbiBmYXN0IGRlcyBmaWx0ZXJzIHJhdGhlciB0aGFuIGNyeXB0KDMpCisJYW5kIHBhc3N3b3JkIGNyYWNraW5nLCBpIGhhdmVuJ3QgcmVhbGx5IGJvdGhlcmVkIHlldCB0byBzcGVlZCB1cAorCXRoZSBrZXkgc2V0dGluZyByb3V0aW5lLiBhbHNvLCBpIGhhdmUgbm8gaW50ZXJlc3QgaW4gcmUtaW1wbGVtZW50aW5nCisJYWxsIHRoZSBvdGhlciBqdW5rIGluIHRoZSBtaXQga2VyYmVyb3MgZGVzIGxpYnJhcnksIHNvIGkndmUganVzdAorCXByb3ZpZGVkIG15IHJvdXRpbmVzIHdpdGggbGl0dGxlIHN0dWIgaW50ZXJmYWNlcyBzbyB0aGV5IGNhbiBiZQorCXVzZWQgYXMgZHJvcC1pbiByZXBsYWNlbWVudHMgd2l0aCBtaXQncyBjb2RlIG9yIGFueSBvZiB0aGUgbWl0LQorCWNvbXBhdGlibGUgcGFja2FnZXMgYmVsb3cuIChub3RlIHRoYXQgdGhlIGZpcnN0IHR3byB0aW1pbmdzIGFib3ZlCisJYXJlIGhpZ2hseSB2YXJpYWJsZSBiZWNhdXNlIG9mIGNhY2hlIGVmZmVjdHMpLgorCitrZXJiZXJvcyBkZXMgcmVwbGFjZW1lbnQgZnJvbSBhdXN0cmFsaWEgKHZlcnNpb24gMS45NSk6CisgICA1M3VzIHBlciBlbmNyeXB0aW9uICh1c2VzIDJrIG9mIHRhYmxlcykKKyAgIDk2dXMgdG8gc2V0IGEgbmV3IGtleSAodXNlcyAyLjI1ayBvZiBrZXkgdGFibGVzKQorCXNvIGRlc3BpdGUgdGhlIGF1dGhvcidzIGluY2x1c2lvbiBvZiBzb21lIG9mIHRoZSBwZXJmb3JtYW5jZQorCWltcHJvdmVtZW50cyBpIGhhZCBzdWdnZXN0ZWQgdG8gaGltLCB0aGlzIHBhY2thZ2UncworCWVuY3J5cHRpb24vZGVjcnlwdGlvbiBpcyBzdGlsbCBzbG93ZXIgb24gdGhlIHNwYXJjIGFuZCA2ODAwMC4KKwltb3JlIHNwZWNpZmljYWxseSwgMTktNDAlIHNsb3dlciBvbiB0aGUgNjgwMjAgYW5kIDExLTM1JSBzbG93ZXIKKwlvbiB0aGUgc3BhcmMsICBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyOworCWluIGZ1bGwgZ29yeSBkZXRhaWwgKEFMVF9FQ0IgaXMgYSBsaWJkZXMgdmFyaWFudCk6CisJY29tcGlsZXIgICAJbWFjaGluZQkJZGVzQ29yZQlsaWJkZXMJQUxUX0VDQglzbG93ZXIgYnkKKwlnY2MgMi4xIC1PMglTdW4gMy8xMTAJMzA0ICB1UwkzNjkuNXVTCTQ2MS44dVMJIDIyJQorCWNjICAgICAgLU8xCVN1biAzLzExMAkzMzYgIHVTCTQzNi42dVMJMzk5LjN1UwkgMTklCisJY2MgICAgICAtTzIJU3VuIDMvMTEwCTM2MCAgdVMJNTMyLjR1Uwk1MDUuMXVTCSA0MCUKKwljYyAgICAgIC1PNAlTdW4gMy8xMTAJMzY1ICB1Uwk1MzIuM3VTCTUwNS4zdVMJIDM4JQorCWdjYyAyLjEgLU8yCVN1biA0LzUwCSA0OCAgdVMJIDUzLjR1UwkgNTcuNXVTCSAxMSUKKwljYyAgICAgIC1PMglTdW4gNC81MAkgNDggIHVTCSA2NC42dVMJIDY0Ljd1UwkgMzUlCisJY2MgICAgICAtTzQJU3VuIDQvNTAJIDQ4ICB1UwkgNjQuN3VTCSA2NC45dVMJIDM1JQorCShteSB0aW1lIG1lYXN1cmVtZW50cyBhcmUgbm90IGFzIGFjY3VyYXRlIGFzIGhpcykuCisgICB0aGUgY29tbWVudHMgaW4gbXkgZmlyc3QgcmVsZWFzZSBvZiBkZXNDb3JlIG9uIHZlcnNpb24gMS45MjoKKyAgIDY4dXMgcGVyIGVuY3J5cHRpb24gKHVzZXMgMmsgb2YgdGFibGVzKQorICAgOTZ1cyB0byBzZXQgYSBuZXcga2V5ICh1c2VzIDIuMjVrIG9mIGtleSB0YWJsZXMpCisJdGhpcyBpcyBhIHZlcnkgbmljZSBwYWNrYWdlIHdoaWNoIGltcGxlbWVudHMgdGhlIG1vc3QgaW1wb3J0YW50CisJb2YgdGhlIG9wdGltaXphdGlvbnMgd2hpY2ggaSBkaWQgaW4gbXkgZW5jcnlwdGlvbiByb3V0aW5lcy4KKwlpdCdzIGEgYml0IHdlYWsgb24gY29tbW9uIGxvdy1sZXZlbCBvcHRpbWl6YXRpb25zIHdoaWNoIGlzIHdoeQorCWl0J3MgMzklLTEwNiUgc2xvd2VyLiAgYmVjYXVzZSBoZSB3YXMgaW50ZXJlc3RlZCBpbiBmYXN0IGNyeXB0KDMpIGFuZAorCXBhc3N3b3JkLWNyYWNraW5nIGFwcGxpY2F0aW9ucywgIGhlIGFsc28gdXNlZCB0aGUgc2FtZSBpZGVhcyB0bworCXNwZWVkIHVwIHRoZSBrZXktc2V0dGluZyByb3V0aW5lcyB3aXRoIGltcHJlc3NpdmUgcmVzdWx0cy4KKwkoYXQgc29tZSBwb2ludCBpIG1heSBkbyB0aGUgc2FtZSBpbiBteSBwYWNrYWdlKS4gIGhlIGFsc28gaW1wbGVtZW50cworCXRoZSByZXN0IG9mIHRoZSBtaXQgZGVzIGxpYnJhcnkuCisJKGNvZGUgZnJvbSBlYXlAcHN5Y2gucHN5LnVxLm96LmF1IHZpYSBjb21wLnNvdXJjZXMubWlzYykKKworZmFzdCBjcnlwdCgzKSBwYWNrYWdlIGZyb20gZGVubWFyazoKKwl0aGUgZGVzIHJvdXRpbmUgaGVyZSBpcyBidXJpZWQgaW5zaWRlIGEgbG9vcCB0byBkbyB0aGUKKwljcnlwdCBmdW5jdGlvbiBhbmQgaSBkaWRuJ3QgZmVlbCBsaWtlIHJpcHBpbmcgaXQgb3V0IGFuZCBtZWFzdXJpbmcKKwlwZXJmb3JtYW5jZS4gaGlzIGNvZGUgdGFrZXMgMjYgc3BhcmMgaW5zdHJ1Y3Rpb25zIHRvIGNvbXB1dGUgb25lCisJZGVzIGl0ZXJhdGlvbjsgYWJvdmUsIFF1aWNrICg2NGspIHRha2VzIDIxIGFuZCBTbWFsbCAoMmspIHRha2VzIDM3LgorCWhlIGNsYWltcyB0byB1c2UgMjgwayBvZiB0YWJsZXMgYnV0IHRoZSBpdGVyYXRpb24gY2FsY3VsYXRpb24gc2VlbXMKKwl0byB1c2Ugb25seSAxMjhrLiAgaGlzIHRhYmxlcyBhbmQgY29kZSBhcmUgbWFjaGluZSBpbmRlcGVuZGVudC4KKwkoY29kZSBmcm9tIGdsYWRAZGFpbWkuYWF1LmRrIHZpYSBhbHQuc291cmNlcyBvciBjb21wLnNvdXJjZXMubWlzYykKKworc3dlZGlzaCByZWltcGxlbWVudGF0aW9uIG9mIEtlcmJlcm9zIGRlcyBsaWJyYXJ5CisgIDEwOHVzIHBlciBlbmNyeXB0aW9uICh1c2VzIDM0ayB3b3J0aCBvZiB0YWJsZXMpCisgIDEzNHVzIHRvIHNldCBhIG5ldyBrZXkgKHVzZXMgMzJrIG9mIGtleSB0YWJsZXMgdG8gZ2V0IHRoaXMgc3BlZWQhKQorCXRoZSB0YWJsZXMgdXNlZCBzZWVtIHRvIGJlIG1hY2hpbmUtaW5kZXBlbmRlbnQ7CisJaGUgc2VlbXMgdG8gaGF2ZSBpbmNsdWRlZCBhIGxvdCBvZiBzcGVjaWFsIGNhc2UgY29kZQorCXNvIHRoYXQsIGUuZy4sIGBsb25nJyBsb2FkcyBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIDQgYGNoYXInIGxvYWRzCisJd2hlbiB0aGUgbWFjaGluZSdzIGFyY2hpdGVjdHVyZSBhbGxvd3MgaXQuCisJKGNvZGUgb2J0YWluZWQgZnJvbSBjaGFsbWVycy5zZTpwdWIvZGVzKQorCitjcmFjayAzLjNjIHBhY2thZ2UgZnJvbSBlbmdsYW5kOgorCWFzIGluIGNyeXB0IGFib3ZlLCB0aGUgZGVzIHJvdXRpbmUgaXMgYnVyaWVkIGluIGEgbG9vcC4gaXQncworCWFsc28gdmVyeSBtb2RpZmllZCBmb3IgY3J5cHQuICBoaXMgaXRlcmF0aW9uIGNvZGUgdXNlcyAxNmsKKwlvZiB0YWJsZXMgYW5kIGFwcGVhcnMgdG8gYmUgc2xvdy4KKwkoY29kZSBvYnRhaW5lZCBmcm9tIGFlbUBhYmVyLmFjLnVrIHZpYSBhbHQuc291cmNlcyBvciBjb21wLnNvdXJjZXMubWlzYykKKworYGBoaWdobHkgb3B0aW1pemVkJycgYW5kIHR3ZWFrZWQgS2VyYmVyb3MvQXRoZW5hIGNvZGUgKGJ5dGUtb3JkZXIgZGVwZW5kZW50KToKKyAgMTY1dXMgcGVyIGVuY3J5cHRpb24gKHVzZXMgNmsgd29ydGggb2YgdGFibGVzKQorICA0Nzh1cyB0byBzZXQgYSBuZXcga2V5ICh1c2VzIDwxayBvZiBrZXkgdGFibGVzKQorCXNvIGRlc3BpdGUgdGhlIGNvbW1lbnRzIGluIHRoaXMgY29kZSwgaXQgd2FzIHBvc3NpYmxlIHRvIGdldAorCWZhc3RlciBjb2RlIEFORCBzbWFsbGVyIHRhYmxlcywgYXMgd2VsbCBhcyBtYWtpbmcgdGhlIHRhYmxlcworCW1hY2hpbmUtaW5kZXBlbmRlbnQuCisJKGNvZGUgb2J0YWluZWQgZnJvbSBwcmVwLmFpLm1pdC5lZHUpCisKK1VDIEJlcmtlbGV5IGNvZGUgKGRlcGVuZHMgb24gbWFjaGluZS1lbmRlZG5lc3MpOgorICAyMjZ1cyBwZXIgZW5jcnlwdGlvbgorMTA4NDh1cyB0byBzZXQgYSBuZXcga2V5CisJdGFibGUgc2l6ZXMgYXJlIHVuY2xlYXIsIGJ1dCB0aGV5IGRvbid0IGxvb2sgdmVyeSBzbWFsbAorCShjb2RlIG9idGFpbmVkIGZyb20gd3VhcmNoaXZlLnd1c3RsLmVkdSkKKworCittb3RpdmF0aW9uIGFuZCBoaXN0b3J5CisKK2Egd2hpbGUgYWdvIGkgd2FudGVkIHNvbWUgZGVzIHJvdXRpbmVzIGFuZCB0aGUgcm91dGluZXMgZG9jdW1lbnRlZCBvbiBzdW4ncworbWFuIHBhZ2VzIGVpdGhlciBkaWRuJ3QgZXhpc3Qgb3IgZHVtcGVkIGNvcmUuICBpIGhhZCBoZWFyZCBvZiBrZXJiZXJvcywKK2FuZCBrbmV3IHRoYXQgaXQgdXNlZCBkZXMsICBzbyBpIGZpZ3VyZWQgaSdkIHVzZSBpdHMgcm91dGluZXMuICBidXQgb25jZQoraSBnb3QgaXQgYW5kIGxvb2tlZCBhdCB0aGUgY29kZSwgIGl0IHJlYWxseSBzZXQgb2ZmIGEgbG90IG9mIHBldCBwZWV2ZXMgLQoraXQgd2FzIHRvbyBjb252b2x1dGVkLCB0aGUgY29kZSBoYWQgYmVlbiB3cml0dGVuIHdpdGhvdXQgdGFraW5nCithZHZhbnRhZ2Ugb2YgdGhlIHJlZ3VsYXIgc3RydWN0dXJlIG9mIG9wZXJhdGlvbnMgc3VjaCBhcyBJUCwgRSwgYW5kIEZQCisoaS5lLiB0aGUgYXV0aG9yIGRpZG4ndCBzaXQgZG93biBhbmQgdGhpbmsgYmVmb3JlIGNvZGluZyksCitpdCB3YXMgZXhjZXNzaXZlbHkgc2xvdywgIHRoZSBhdXRob3IgaGFkIGF0dGVtcHRlZCB0byBjbGFyaWZ5IHRoZSBjb2RlCitieSBhZGRpbmcgTU9SRSBzdGF0ZW1lbnRzIHRvIG1ha2UgdGhlIGRhdGEgbW92ZW1lbnQgbW9yZSBgY29uc2lzdGVudCcKK2luc3RlYWQgb2Ygc2ltcGxpZnlpbmcgaGlzIGltcGxlbWVudGF0aW9uIGFuZCBjdXR0aW5nIGRvd24gb24gYWxsIGRhdGEKK21vdmVtZW50IChpbiBwYXJ0aWN1bGFyLCBoaXMgdXNlIG9mIEwxLCBSMSwgTDIsIFIyKSwgYW5kIGl0IHdhcyBmdWxsIG9mCitpZGlvdGljIGB0d2Vha3MnIGZvciBwYXJ0aWN1bGFyIG1hY2hpbmVzIHdoaWNoIGZhaWxlZCB0byBkZWxpdmVyIHNpZ25pZmljYW50CitzcGVlZHVwcyBidXQgd2hpY2ggZGlkIG9iZnVzY2F0ZSBldmVyeXRoaW5nLiAgc28gaSB0b29rIHRoZSB0ZXN0IGRhdGEKK2Zyb20gaGlzIHZlcmlmaWNhdGlvbiBwcm9ncmFtIGFuZCByZXdyb3RlIGV2ZXJ5dGhpbmcgZWxzZS4KKworYSB3aGlsZSBsYXRlciBpIHJhbiBhY3Jvc3MgdGhlIGdyZWF0IGNyeXB0KDMpIHBhY2thZ2UgbWVudGlvbmVkIGFib3ZlLgordGhlIGZhY3QgdGhhdCB0aGlzIGd1eSB3YXMgY29tcHV0aW5nIDIgc2JveGVzIHBlciB0YWJsZSBsb29rdXAgcmF0aGVyCit0aGFuIG9uZSAoYW5kIHVzaW5nIGEgTVVDSCBsYXJnZXIgdGFibGUgaW4gdGhlIHByb2Nlc3MpIGVtYm9sZGVuZWQgbWUgdG8KK2RvIHRoZSBzYW1lIC0gaXQgd2FzIGEgdHJpdmlhbCBjaGFuZ2UgZnJvbSB3aGljaCBpIGhhZCBiZWVuIHNjYXJlZCBhd2F5CitieSB0aGUgbGFyZ2VyIHRhYmxlIHNpemUuICBpbiBoaXMgY2FzZSBoZSBkaWRuJ3QgcmVhbGl6ZSB5b3UgZG9uJ3QgbmVlZCB0byBrZWVwCit0aGUgd29ya2luZyBkYXRhIGluIFRXTyBmb3Jtcywgb25lIGZvciBlYXN5IHVzZSBvZiBoYWxmIHRoZSBzYm94ZXMgaW4KK2luZGV4aW5nLCB0aGUgb3RoZXIgZm9yIGVhc3kgdXNlIG9mIHRoZSBvdGhlciBoYWxmOyBpbnN0ZWFkIHlvdSBjYW4ga2VlcAoraXQgaW4gdGhlIGZvcm0gZm9yIHRoZSBmaXJzdCBoYWxmIGFuZCB1c2UgYSBzaW1wbGUgcm90YXRlIHRvIGdldCB0aGUgb3RoZXIKK2hhbGYuICB0aGlzIG1lYW5zIGkgaGF2ZSAoYWxtb3N0KSBoYWxmIHRoZSBkYXRhIG1hbmlwdWxhdGlvbiBhbmQgaGFsZgordGhlIHRhYmxlIHNpemUuICBpbiBmYWlybmVzcyB0aG91Z2ggaGUgbWlnaHQgYmUgZW5jb2Rpbmcgc29tZXRoaW5nIHBhcnRpY3VsYXIKK3RvIGNyeXB0KDMpIGluIGhpcyB0YWJsZXMgLSBpIGRpZG4ndCBjaGVjay4KKworaSdtIGdsYWQgdGhhdCBpIGltcGxlbWVudGVkIGl0IHRoZSB3YXkgaSBkaWQsIGJlY2F1c2UgdGhpcyBDIHZlcnNpb24gaXMKK3BvcnRhYmxlICh0aGUgaWZkZWYncyBhcmUgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzKSBhbmQgaXQgaXMgZmFzdGVyCit0aGFuIHZlcnNpb25zIGhhbmQtd3JpdHRlbiBpbiBhc3NlbWJseSBmb3IgdGhlIHNwYXJjIQorCisKK3BvcnRpbmcgbm90ZXMKKworb25lIHRoaW5nIGkgZGlkIG5vdCB3YW50IHRvIGRvIHdhcyB3cml0ZSBhbiBlbm9ybW91cyBtZXNzCit3aGljaCBkZXBlbmRlZCBvbiBlbmRlZG5lc3MgYW5kIG90aGVyIG1hY2hpbmUgcXVpcmtzLAorYW5kIHdoaWNoIG5lY2Vzc2FyaWx5IHByb2R1Y2VkIGRpZmZlcmVudCBjb2RlIGFuZCBkaWZmZXJlbnQgbG9va3VwIHRhYmxlcworZm9yIGRpZmZlcmVudCBtYWNoaW5lcy4gIHNlZSB0aGUga2VyYmVyb3MgY29kZSBmb3IgYW4gZXhhbXBsZQorb2Ygd2hhdCBpIGRpZG4ndCB3YW50IHRvIGRvOyBhbGwgdGhlaXIgZW5kZWRuZXNzLXNwZWNpZmljIGBvcHRpbWl6YXRpb25zJworb2JmdXNjYXRlIHRoZSBjb2RlIGFuZCBpbiB0aGUgZW5kIHdlcmUgc2xvd2VyIHRoYW4gYSBzaW1wbGVyIG1hY2hpbmUKK2luZGVwZW5kZW50IGFwcHJvYWNoLiAgaG93ZXZlciwgdGhlcmUgYXJlIGFsd2F5cyBzb21lIHBvcnRhYmlsaXR5Citjb25zaWRlcmF0aW9ucyBvZiBzb21lIGtpbmQsIGFuZCBpIGhhdmUgaW5jbHVkZWQgc29tZSBvcHRpb25zCitmb3IgdmFyeWluZyBudW1iZXJzIG9mIHJlZ2lzdGVyIHZhcmlhYmxlcy4KK3BlcmhhcHMgc29tZSB3aWxsIHN0aWxsIHJlZ2FyZCB0aGUgcmVzdWx0IGFzIGEgbWVzcyEKKworMSkgaSBhc3N1bWUgZXZlcnl0aGluZyBpcyBieXRlIGFkZHJlc3NhYmxlLCBhbHRob3VnaCBpIGRvbid0IGFjdHVhbGx5CisgICBkZXBlbmQgb24gdGhlIGJ5dGUgb3JkZXIsIGFuZCB0aGF0IGJ5dGVzIGFyZSA4IGJpdHMuCisgICBpIGFzc3VtZSB3b3JkIHBvaW50ZXJzIGNhbiBiZSBmcmVlbHkgY2FzdCB0byBhbmQgZnJvbSBjaGFyIHBvaW50ZXJzLgorICAgbm90ZSB0aGF0IDk5JSBvZiBDIHByb2dyYW1zIG1ha2UgdGhlc2UgYXNzdW1wdGlvbnMuCisgICBpIGFsd2F5cyB1c2UgdW5zaWduZWQgY2hhcidzIGlmIHRoZSBoaWdoIGJpdCBjb3VsZCBiZSBzZXQuCisyKSB0aGUgdHlwZWRlZiBgd29yZCcgbWVhbnMgYSAzMiBiaXQgdW5zaWduZWQgaW50ZWdyYWwgdHlwZS4KKyAgIGlmIGB1bnNpZ25lZCBsb25nJyBpcyBub3QgMzIgYml0cywgY2hhbmdlIHRoZSB0eXBlZGVmIGluIGRlc0NvcmUuaC4KKyAgIGkgYXNzdW1lIHNpemVvZih3b3JkKSA9PSA0IEVWRVJZV0hFUkUuCisKK3RoZSAod29yc3QtY2FzZSkgY29zdCBvZiBteSBOT1QgZG9pbmcgZW5kZWRuZXNzLXNwZWNpZmljIG9wdGltaXphdGlvbnMKK2luIHRoZSBkYXRhIGxvYWRpbmcgYW5kIHN0b3JpbmcgY29kZSBzdXJyb3VuZGluZyB0aGUga2V5IGl0ZXJhdGlvbnMKK2lzIGxlc3MgdGhhbiAxMiUuICBhbHNvLCB0aGVyZSBpcyB0aGUgYWRkZWQgYmVuZWZpdCB0aGF0Cit0aGUgaW5wdXQgYW5kIG91dHB1dCB3b3JrIGFyZWFzIGRvIG5vdCBuZWVkIHRvIGJlIHdvcmQtYWxpZ25lZC4KKworCitPUFRJT05BTCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zCisKKzEpIHlvdSBzaG91bGQgZGVmaW5lIG9uZSBvZiBgaTM4NiwnIGB2YXgsJyBgbWM2ODAwMCwnIG9yIGBzcGFyYywnCisgICB3aGljaGV2ZXIgb25lIGlzIGNsb3Nlc3QgdG8gdGhlIGNhcGFiaWxpdGllcyBvZiB5b3VyIG1hY2hpbmUuCisgICBzZWUgdGhlIHN0YXJ0IG9mIGRlc0NvZGUuaCB0byBzZWUgZXhhY3RseSB3aGF0IHRoaXMgc2VsZWN0aW9uIGltcGxpZXMuCisgICBub3RlIHRoYXQgaWYgeW91IHNlbGVjdCB0aGUgd3Jvbmcgb25lLCB0aGUgZGVzIGNvZGUgd2lsbCBzdGlsbCB3b3JrOworICAgdGhlc2UgYXJlIGp1c3QgcGVyZm9ybWFuY2UgdHdlYWtzLgorMikgZm9yIHRob3NlIHdpdGggZnVuY3Rpb25hbCBgYXNtJyBrZXl3b3JkczogeW91IHNob3VsZCBjaGFuZ2UgdGhlCisgICBST1IgYW5kIFJPTCBtYWNyb3MgdG8gdXNlIG1hY2hpbmUgcm90YXRlIGluc3RydWN0aW9ucyBpZiB5b3UgaGF2ZSB0aGVtLgorICAgdGhpcyB3aWxsIHNhdmUgMiBpbnN0cnVjdGlvbnMgYW5kIGEgdGVtcG9yYXJ5IHBlciB1c2UsCisgICBvciBhYm91dCAzMiB0byA0MCBpbnN0cnVjdGlvbnMgcGVyIGVuL2RlY3J5cHRpb24uCisgICBub3RlIHRoYXQgZ2NjIGlzIHNtYXJ0IGVub3VnaCB0byB0cmFuc2xhdGUgdGhlIFJPTC9SIG1hY3JvcyBpbnRvCisgICBtYWNoaW5lIHJvdGF0ZXMhCisKK3RoZXNlIG9wdGltaXphdGlvbnMgYXJlIGFsbCByYXRoZXIgcGVyc25pY2tldHksIHlldCB3aXRoIHRoZW0geW91IHNob3VsZAorYmUgYWJsZSB0byBnZXQgcGVyZm9ybWFuY2UgZXF1YWwgdG8gYXNzZW1ibHktY29kaW5nLCBleGNlcHQgdGhhdDoKKzEpIHdpdGggdGhlIGxhY2sgb2YgYSBiaXQgcm90YXRlIG9wZXJhdG9yIGluIEMsIHJvdGF0ZXMgaGF2ZSB0byBiZSBzeW50aGVzaXplZAorICAgZnJvbSBzaGlmdHMuICBzbyBhY2Nlc3MgdG8gYGFzbScgd2lsbCBzcGVlZCB0aGluZ3MgdXAgaWYgeW91ciBtYWNoaW5lCisgICBoYXMgcm90YXRlcywgYXMgZXhwbGFpbmVkIGFib3ZlIGluICgzKSAobm90IG5lY2Vzc2FyeSBpZiB5b3UgdXNlIGdjYykuCisyKSBpZiB5b3VyIG1hY2hpbmUgaGFzIGxlc3MgdGhhbiAxMiAzMi1iaXQgcmVnaXN0ZXJzIGkgZG91YnQgeW91ciBjb21waWxlciB3aWxsCisgICBnZW5lcmF0ZSBnb29kIGNvZGUuCisgICBgaTM4NicgdHJpZXMgdG8gY29uZmlndXJlIHRoZSBjb2RlIGZvciBhIDM4NiBieSBvbmx5IGRlY2xhcmluZyAzIHJlZ2lzdGVycworICAgKGl0IGFwcGVhcnMgdGhhdCBnY2MgY2FuIHVzZSBlYngsIGVzaSBhbmQgZWRpIHRvIGhvbGQgcmVnaXN0ZXIgdmFyaWFibGVzKS4KKyAgIGhvd2V2ZXIsIGlmIHlvdSBsaWtlIGFzc2VtYmx5IGNvZGluZywgdGhlIDM4NiBkb2VzIGhhdmUgNyAzMi1iaXQgcmVnaXN0ZXJzLAorICAgYW5kIGlmIHlvdSB1c2UgQUxMIG9mIHRoZW0sIHVzZSBgc2NhbGVkIGJ5IDgnIGFkZHJlc3MgbW9kZXMgd2l0aCBkaXNwbGFjZW1lbnQKKyAgIGFuZCBvdGhlciB0cmlja3MsIHlvdSBjYW4gZ2V0IHJlYXNvbmFibGUgcm91dGluZXMgZm9yIERlc1F1aWNrQ29yZS4uLiB3aXRoCisgICBhYm91dCAyNTAgaW5zdHJ1Y3Rpb25zIGFwaWVjZS4gIEZvciBEZXNTbWFsbC4uLiBpdCB3aWxsIGhlbHAgdG8gcmVhcnJhbmdlCisgICBkZXNfa2V5bWFwLCBpLmUuLCBub3cgdGhlIHNib3ggIyBpcyB0aGUgaGlnaCBwYXJ0IG9mIHRoZSBpbmRleCBhbmQKKyAgIHRoZSA2IGJpdHMgb2YgZGF0YSBpcyB0aGUgbG93IHBhcnQ7IGl0IGhlbHBzIHRvIGV4Y2hhbmdlIHRoZXNlLgorICAgc2luY2UgaSBoYXZlIG5vIHdheSB0byBjb252ZW5pZW50bHkgdGVzdCBpdCBpIGhhdmUgbm90IHByb3ZpZGVkIG15CisgICBzaG9laG9ybmVkIDM4NiB2ZXJzaW9uLiAgbm90ZSB0aGF0IHdpdGggdGhpcyByZWxlYXNlIG9mIGRlc0NvcmUsIGdjYyBpcyBhYmxlCisgICB0byBwdXQgZXZlcnl0aGluZyBpbiByZWdpc3RlcnMoISksIGFuZCBnZW5lcmF0ZSBhYm91dCAzNzAgaW5zdHJ1Y3Rpb25zIGFwaWVjZQorICAgZm9yIHRoZSBEZXNRdWlja0NvcmUuLi4gcm91dGluZXMhCisKK2NvZGluZyBub3RlcworCit0aGUgZW4vZGVjcnlwdGlvbiByb3V0aW5lcyBlYWNoIHVzZSA2IG5lY2Vzc2FyeSByZWdpc3RlciB2YXJpYWJsZXMsCit3aXRoIDQgYmVpbmcgYWN0aXZlbHkgdXNlZCBhdCBvbmNlIGR1cmluZyB0aGUgaW5uZXIgaXRlcmF0aW9ucy4KK2lmIHlvdSBkb24ndCBoYXZlIDQgcmVnaXN0ZXIgdmFyaWFibGVzIGdldCBhIG5ldyBtYWNoaW5lLgordXAgdG8gOCBtb3JlIHJlZ2lzdGVycyBhcmUgdXNlZCB0byBob2xkIGNvbnN0YW50cyBpbiBzb21lIGNvbmZpZ3VyYXRpb25zLgorCitpIGFzc3VtZSB0aGF0IHRoZSB1c2Ugb2YgYSBjb25zdGFudCBpcyBtb3JlIGV4cGVuc2l2ZSB0aGFuIHVzaW5nIGEgcmVnaXN0ZXI6CithKSBhZGRpdGlvbmFsbHksIGkgaGF2ZSB0cmllZCB0byBwdXQgdGhlIGxhcmdlciBjb25zdGFudHMgaW4gcmVnaXN0ZXJzLgorICAgcmVnaXN0ZXJpbmcgcHJpb3JpdHkgd2FzIGJ5IHRoZSBmb2xsb3dpbmc6CisJYW55dGhpbmcgbW9yZSB0aGFuIDEyIGJpdHMgKGJhZCBmb3IgUklTQyBhbmQgQ0lTQykKKwlncmVhdGVyIHRoYW4gMTI3IGluIHZhbHVlIChjYW4ndCB1c2UgbW92cSBvciBieXRlIGltbWVkaWF0ZSBvbiBDSVNDKQorCTktMTI3IChtYXkgbm90IGJlIGFibGUgdG8gdXNlIENJU0Mgc2hpZnQgaW1tZWRpYXRlIG9yIGFkZC9zdWIgcXVpY2spLAorCTEtOCB3ZXJlIG5ldmVyIHJlZ2lzdGVyZWQsIGJlaW5nIHRoZSBjaGVhcGVzdCBjb25zdGFudHMuCitiKSB0aGUgY29tcGlsZXIgbWF5IGJlIHRvbyBzdHVwaWQgdG8gcmVhbGl6ZSB0YWJsZSBhbmQgdGFibGUrMjU2IHNob3VsZAorICAgYmUgYXNzaWduZWQgdG8gZGlmZmVyZW50IGNvbnN0YW50IHJlZ2lzdGVycyBhbmQgaW5zdGVhZCByZXBldGl0aXZlbHkKKyAgIGRvIHRoZSBhcml0aG1ldGljLCBzbyBpIGFzc2lnbiB0aGVzZSB0byBleHBsaWNpdCBgbScgcmVnaXN0ZXIgdmFyaWFibGVzCisgICB3aGVuIHBvc3NpYmxlIGFuZCBoZWxwZnVsLgorCitpIGFzc3VtZSB0aGF0IGluZGV4aW5nIGlzIGNoZWFwZXIgb3IgZXF1aXZhbGVudCB0byBhdXRvIGluY3JlbWVudC9kZWNyZW1lbnQsCit3aGVyZSB0aGUgaW5kZXggaXMgNyBiaXRzIHVuc2lnbmVkIG9yIHNtYWxsZXIuCit0aGlzIGFzc3VtcHRpb24gaXMgcmV2ZXJzZWQgZm9yIDY4ayBhbmQgdmF4LgorCitpIGFzc3VtZSB0aGF0IGFkZHJlc3NlcyBjYW4gYmUgY2hlYXBseSBmb3JtZWQgZnJvbSB0d28gcmVnaXN0ZXJzLAorb3IgZnJvbSBhIHJlZ2lzdGVyIGFuZCBhIHNtYWxsIGNvbnN0YW50LgorZm9yIHRoZSA2ODAwMCwgdGhlIGB0d28gcmVnaXN0ZXJzIGFuZCBzbWFsbCBvZmZzZXQnIGZvcm0gaXMgdXNlZCBzcGFyaW5nbHkuCithbGwgaW5kZXggc2NhbGluZyBpcyBkb25lIGV4cGxpY2l0bHkgLSBubyBoaWRkZW4gc2hpZnRzIGJ5IGxvZzIoc2l6ZW9mKS4KKwordGhlIGNvZGUgaXMgd3JpdHRlbiBzbyB0aGF0IGV2ZW4gYSBkdW1iIGNvbXBpbGVyCitzaG91bGQgbmV2ZXIgbmVlZCBtb3JlIHRoYW4gb25lIGhpZGRlbiB0ZW1wb3JhcnksCitpbmNyZWFzaW5nIHRoZSBjaGFuY2UgdGhhdCBldmVyeXRoaW5nIHdpbGwgZml0IGluIHRoZSByZWdpc3RlcnMuCitLRUVQIFRISVMgTU9SRSBTVUJUTEUgUE9JTlQgSU4gTUlORCBJRiBZT1UgUkVXUklURSBBTllUSElORy4KKyhhY3R1YWxseSwgdGhlcmUgYXJlIHNvbWUgY29kZSBmcmFnbWVudHMgbm93IHdoaWNoIGRvIHJlcXVpcmUgdHdvIHRlbXBzLAorYnV0IGZpeGluZyBpdCB3b3VsZCBlaXRoZXIgYnJlYWsgdGhlIHN0cnVjdHVyZSBvZiB0aGUgbWFjcm9zIG9yCityZXF1aXJlIGRlY2xhcmluZyBhbm90aGVyIHRlbXBvcmFyeSkuCisKKworc3BlY2lhbCBlZmZpY2llbnQgZGF0YSBmb3JtYXQKKworYml0cyBhcmUgbWFuaXB1bGF0ZWQgaW4gdGhpcyBhcnJhbmdlbWVudCBtb3N0IG9mIHRoZSB0aW1lIChTNyBTNSBTMyBTMSk6CisJMDAzMTMwMjkyODI3eHh4eDI0MjMyMjIxMjAxOXh4eHgxNjE1MTQxMzEyMTF4eHh4MDgwNzA2MDUwNDAzeHh4eAorKHRoZSB4IGJpdHMgYXJlIHN0aWxsIHRoZXJlLCBpJ20ganVzdCBlbXBoYXNpemluZyB3aGVyZSB0aGUgUyBib3hlcyBhcmUpLgorYml0cyBhcmUgcm90YXRlZCBsZWZ0IDQgd2hlbiBjb21wdXRpbmcgUzYgUzQgUzIgUzA6CisJMjgyNzI2MjUyNDIzeHh4eDIwMTkxODE3MTYxNXh4eHgxMjExMTAwOTA4MDd4eHh4MDQwMzAyMDEwMDMxeHh4eAordGhlIHJpZ2h0bW9zdCB0d28gYml0cyBhcmUgdXN1YWxseSBjbGVhcmVkIHNvIHRoZSBsb3dlciBieXRlIGNhbiBiZSB1c2VkCithcyBhbiBpbmRleCBpbnRvIGFuIHNib3ggbWFwcGluZyB0YWJsZS4gdGhlIG5leHQgdHdvIHgnZCBiaXRzIGFyZSBzZXQKK3RvIHZhcmlvdXMgdmFsdWVzIHRvIGFjY2VzcyBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHRhYmxlcy4KKworCitob3cgdG8gdXNlIHRoZSByb3V0aW5lcworCitkYXRhdHlwZXM6CisJcG9pbnRlciB0byA4IGJ5dGUgYXJlYSBvZiB0eXBlIERlc0RhdGEKKwl1c2VkIHRvIGhvbGQga2V5cyBhbmQgaW5wdXQvb3V0cHV0IGJsb2NrcyB0byBkZXMuCisKKwlwb2ludGVyIHRvIDEyOCBieXRlIGFyZWEgb2YgdHlwZSBEZXNLZXlzCisJdXNlZCB0byBob2xkIGZ1bGwgNzY4LWJpdCBrZXkuCisJbXVzdCBiZSBsb25nLWFsaWduZWQuCisKK0Rlc1F1aWNrSW5pdCgpCisJY2FsbCB0aGlzIGJlZm9yZSB1c2luZyBhbnkgb3RoZXIgcm91dGluZSB3aXRoIGBRdWljaycgaW4gaXRzIG5hbWUuCisJaXQgZ2VuZXJhdGVzIHRoZSBzcGVjaWFsIDY0ayB0YWJsZSB0aGVzZSByb3V0aW5lcyBuZWVkLgorRGVzUXVpY2tEb25lKCkKKwlmcmVlcyB0aGlzIHRhYmxlCisKK0Rlc01ldGhvZChtLCBrKQorCW0gcG9pbnRzIHRvIGEgMTI4Ynl0ZSBibG9jaywgayBwb2ludHMgdG8gYW4gOCBieXRlIGRlcyBrZXkKKwl3aGljaCBtdXN0IGhhdmUgb2RkIHBhcml0eSAob3IgLTEgaXMgcmV0dXJuZWQpIGFuZCB3aGljaCBtdXN0CisJbm90IGJlIGEgKHNlbWktKXdlYWsga2V5IChvciAtMiBpcyByZXR1cm5lZCkuCisJbm9ybWFsbHkgRGVzTWV0aG9kKCkgcmV0dXJucyAwLgorCW0gaXMgZmlsbGVkIGluIGZyb20gayBzbyB0aGF0IHdoZW4gb25lIG9mIHRoZSByb3V0aW5lcyBiZWxvdworCWlzIGNhbGxlZCB3aXRoIG0sIHRoZSByb3V0aW5lIHdpbGwgYWN0IGxpa2Ugc3RhbmRhcmQgZGVzCisJZW4vZGVjcnlwdGlvbiB3aXRoIHRoZSBrZXkgay4gaWYgeW91IHVzZSBEZXNNZXRob2QsCisJeW91IHN1cHBseSBhIHN0YW5kYXJkIDU2Yml0IGtleTsgaG93ZXZlciwgaWYgeW91IGZpbGwgaW4KKwltIHlvdXJzZWxmLCB5b3Ugd2lsbCBnZXQgYSA3NjhiaXQga2V5IC0gYnV0IHRoZW4gaXQgd29uJ3QKKwliZSBzdGFuZGFyZC4gIGl0J3MgNzY4Yml0cyBub3QgMTAyNCBiZWNhdXNlIHRoZSBsZWFzdCBzaWduaWZpY2FudAorCXR3byBiaXRzIG9mIGVhY2ggYnl0ZSBhcmUgbm90IHVzZWQuICBub3RlIHRoYXQgdGhlc2UgdHdvIGJpdHMKKwl3aWxsIGJlIHNldCB0byBtYWdpYyBjb25zdGFudHMgd2hpY2ggc3BlZWQgdXAgdGhlIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorCW9uIHNvbWUgbWFjaGluZXMuICBhbmQgeWVzLCBlYWNoIGJ5dGUgY29udHJvbHMKKwlhIHNwZWNpZmljIHNib3ggZHVyaW5nIGEgc3BlY2lmaWMgaXRlcmF0aW9uLgorCXlvdSByZWFsbHkgc2hvdWxkbid0IHVzZSB0aGUgNzY4Yml0IGZvcm1hdCBkaXJlY3RseTsgIGkgc2hvdWxkCisJcHJvdmlkZSBhIHJvdXRpbmUgdGhhdCBjb252ZXJ0cyAxMjggNi1iaXQgYnl0ZXMgKHNwZWNpZmllZCBpbgorCVMtYm94IG1hcHBpbmcgb3JkZXIgb3Igc29tZXRoaW5nKSBpbnRvIHRoZSByaWdodCBmb3JtYXQgZm9yIHlvdS4KKwl0aGlzIHdvdWxkIGVudGFpbCBzb21lIGJ5dGUgY29uY2F0ZW5hdGlvbiBhbmQgcm90YXRpb24uCisKK0Rlc3tTbWFsbHxRdWlja317Rmlwc3xDb3JlfXtFbmNyeXB0fERlY3J5cHR9KGQsIG0sIHMpCisJcGVyZm9ybXMgZGVzIG9uIHRoZSA4IGJ5dGVzIGF0IHMgaW50byB0aGUgOCBieXRlcyBhdCBkLiAoZCxzOiBjaGFyICopLgorCXVzZXMgbSBhcyBhIDc2OGJpdCBrZXkgYXMgZXhwbGFpbmVkIGFib3ZlLgorCXRoZSBFbmNyeXB0fERlY3J5cHQgY2hvaWNlIGlzIG9idmlvdXMuCisJRmlwc3xDb3JlIGRldGVybWluZXMgd2hldGhlciBhIGNvbXBsZXRlbHkgc3RhbmRhcmQgRklQUyBpbml0aWFsCisJYW5kIGZpbmFsIHBlcm11dGF0aW9uIGlzIGRvbmU7IGlmIG5vdCwgdGhlbiB0aGUgZGF0YSBpcyBsb2FkZWQKKwlhbmQgc3RvcmVkIGluIGEgbm9uc3RhbmRhcmQgYml0IG9yZGVyIChGSVBTIHcvbyBJUC9GUCkuCisJRmlwcyBzbG93cyBkb3duIFF1aWNrIGJ5IDEwJSwgU21hbGwgYnkgOSUuCisJU21hbGx8UXVpY2sgZGV0ZXJtaW5lcyB3aGV0aGVyIHlvdSB1c2UgdGhlIG5vcm1hbCByb3V0aW5lCisJb3IgdGhlIGNyYXp5IHF1aWNrIG9uZSB3aGljaCBnb2JibGVzIHVwIDY0ayBtb3JlIG9mIG1lbW9yeS4KKwlTbWFsbCBpcyA1MCUgc2xvd2VyIHRoZW4gUXVpY2ssIGJ1dCBRdWljayBuZWVkcyAzMiB0aW1lcyBhcyBtdWNoCisJbWVtb3J5LiAgUXVpY2sgaXMgaW5jbHVkZWQgZm9yIHByb2dyYW1zIHRoYXQgZG8gbm90aGluZyBidXQgREVTLAorCWUuZy4sIGVuY3J5cHRpb24gZmlsdGVycywgZXRjLgorCisKK0dldHRpbmcgaXQgdG8gY29tcGlsZSBvbiB5b3VyIG1hY2hpbmUKKwordGhlcmUgYXJlIG5vIG1hY2hpbmUtZGVwZW5kZW5jaWVzIGluIHRoZSBjb2RlIChzZWUgcG9ydGluZyksCitleGNlcHQgcGVyaGFwcyB0aGUgYG5vdygpJyBtYWNybyBpbiBkZXNUZXN0LmMuCitBTEwgZ2VuZXJhdGVkIHRhYmxlcyBhcmUgbWFjaGluZSBpbmRlcGVuZGVudC4KK3lvdSBzaG91bGQgZWRpdCB0aGUgTWFrZWZpbGUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgb3B0aW1pemF0aW9uIGZsYWdzCitmb3IgeW91ciBjb21waWxlciAoTUFYIG9wdGltaXphdGlvbikuCisKKworU3BlZWRpbmcgdXAga2VyYmVyb3MgKGFuZC9vciBpdHMgZGVzIGxpYnJhcnkpCisKK25vdGUgdGhhdCBpIGhhdmUgaW5jbHVkZWQgYSBrZXJiZXJvcy1jb21wYXRpYmxlIGludGVyZmFjZSBpbiBkZXNVdGlsLmMKK3Rocm91Z2ggdGhlIGZ1bmN0aW9ucyBkZXNfa2V5X3NjaGVkKCkgYW5kIGRlc19lY2JfZW5jcnlwdCgpLgordG8gdXNlIHRoZXNlIHdpdGgga2VyYmVyb3Mgb3Iga2VyYmVyb3MtY29tcGF0aWJsZSBjb2RlIHB1dCBkZXNDb3JlLmEKK2FoZWFkIG9mIHRoZSBrZXJiZXJvcy1jb21wYXRpYmxlIGxpYnJhcnkgb24geW91ciBsaW5rZXIncyBjb21tYW5kIGxpbmUuCit5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvICNpbmNsdWRlIGRlc0NvcmUuaDsgIGp1c3QgaW5jbHVkZSB0aGUgaGVhZGVyCitmaWxlIHByb3ZpZGVkIHdpdGggdGhlIGtlcmJlcm9zIGxpYnJhcnkuCisKK090aGVyIHVzZXMKKwordGhlIG1hY3JvcyBpbiBkZXNDb2RlLmggd291bGQgYmUgdmVyeSB1c2VmdWwgZm9yIHB1dHRpbmcgaW5saW5lIGRlcworZnVuY3Rpb25zIGluIG1vcmUgY29tcGxpY2F0ZWQgZW5jcnlwdGlvbiByb3V0aW5lcy4K