ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGVlMmNkNDYuLjM5Y2RjNGUgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtNTQsNCArNTQsNSBAQAogL0dTWU1TCiAvR1RBR1MKIC9UQUdTCisvY3Njb3BlKi5vdXQKIC90YWdzCmRpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0CmluZGV4IDVhZjRjODEuLmFjMjRiZjQgMTAwNjQ0Ci0tLSBhL0NNYWtlTGlzdHMudHh0CisrKyBiL0NNYWtlTGlzdHMudHh0CkBAIC0xNCw5ICsxNCwxMyBAQAogIyAgICAgQ01ha2UgZmlsZXMuIEl0IGlzIHJlbGF0ZWQgdG8gWkxJQiBzdXBwb3J0IHdoaWNoIGlzIHBsYW5uZWQgdG8gYmUgcmVtb3ZlZC4KICMgICAgIFdoZW4gdGhlIHN1cHBvcnQgaXMgcmVtb3ZlZCwgdGhlIGFzc29jaWF0ZWQgaW5jbHVkZV9kaXJlY3RvcmllcyBjb21tYW5kCiAjICAgICB3aWxsIGJlIHJlbW92ZWQgYXMgd2VsbCBhcyB0aGlzIG5vdGUuCisjIC0gTUJFRFRMU19UQVJHRVRfUFJFRklYOiBDTWFrZSB0YXJnZXRzIGFyZSBkZXNpZ25lZCB0byBiZSBhbHRlcmFibGUgYnkgY2FsbGluZworIyAgIENNYWtlIGluIG9yZGVyIHRvIGF2b2lkIHRhcmdldCBuYW1lIGNsYXNoZXMsIHZpYSB0aGUgdXNlIG9mCisjICAgTUJFRFRMU19UQVJHRVRfUFJFRklYLiBUaGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyBwcmVmaXhlZCB0byB0aGUKKyMgICBtYmVkdGxzLCBtYmVkeDUwOSwgbWJlZGNyeXB0byBhbmQgYXBpZG9jIHRhcmdldHMuCiAjCiAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjYpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogaWYoVEVTVF9DUFApCiAgICAgcHJvamVjdCgibWJlZCBUTFMiIEMgQ1hYKQogZWxzZSgpCkBAIC0xMTIsOSArMTE2LDEyIEBACiAgICAgZW5kaWYoKQogZW5kaWYoKQogCi1zZXQoQ01BS0VfQlVJTERfVFlQRSAke0NNQUtFX0JVSUxEX1RZUEV9Ci0gICAgQ0FDSEUgU1RSSU5HICJDaG9vc2UgdGhlIHR5cGUgb2YgYnVpbGQ6IE5vbmUgRGVidWcgUmVsZWFzZSBDb3ZlcmFnZSBBU2FuIEFTYW5EYmcgTWVtU2FuIE1lbVNhbkRiZyBDaGVjayBDaGVja0Z1bGwiCi0gICAgRk9SQ0UpCisjIElmIHRoaXMgaXMgdGhlIHJvb3QgcHJvamVjdCBhZGQgbG9uZ2VyIGxpc3Qgb2YgYXZhaWxhYmxlIENNQUtFX0JVSUxEX1RZUEUgdmFsdWVzCitpZihDTUFLRV9TT1VSQ0VfRElSIFNUUkVRVUFMIENNQUtFX0NVUlJFTlRfU09VUkNFX0RJUikKKyAgICBzZXQoQ01BS0VfQlVJTERfVFlQRSAke0NNQUtFX0JVSUxEX1RZUEV9CisgICAgICAgIENBQ0hFIFNUUklORyAiQ2hvb3NlIHRoZSB0eXBlIG9mIGJ1aWxkOiBOb25lIERlYnVnIFJlbGVhc2UgQ292ZXJhZ2UgQVNhbiBBU2FuRGJnIE1lbVNhbiBNZW1TYW5EYmcgQ2hlY2sgQ2hlY2tGdWxsIgorICAgICAgICBGT1JDRSkKK2VuZGlmKCkKIAogIyBDcmVhdGUgYSBzeW1ib2xpYyBsaW5rIGZyb20gJHtiYXNlX25hbWV9IGluIHRoZSBiaW5hcnkgZGlyZWN0b3J5CiAjIHRvIHRoZSBjb3JyZXNwb25kaW5nIHBhdGggaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCkBAIC0yNzMsNyArMjgwLDcgQEAKICAgICBhZGRfc3ViZGlyZWN0b3J5KHByb2dyYW1zKQogZW5kaWYoKQogCi1BRERfQ1VTVE9NX1RBUkdFVChhcGlkb2MKK0FERF9DVVNUT01fVEFSR0VUKCR7TUJFRFRMU19UQVJHRVRfUFJFRklYfWFwaWRvYwogICAgIENPTU1BTkQgZG94eWdlbiBtYmVkdGxzLmRveHlmaWxlCiAgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2RveHlnZW4pCiAKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kLzAwUkVBRE1FLm1kIGIvQ2hhbmdlTG9nLmQvMDBSRUFETUUubWQKaW5kZXggYjU1OWUyMy4uZDJlYTczZCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nLmQvMDBSRUFETUUubWQKKysrIGIvQ2hhbmdlTG9nLmQvMDBSRUFETUUubWQKQEAgLTMsNiArMywyOSBAQAogVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgY2hhbmdlbG9nIGVudHJpZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBtZXJnZWQKIHRvIHRoZSBjaGFuZ2Vsb2cgZmlsZSAoW2AuLi9DaGFuZ2VMb2dgXSguLi9DaGFuZ2VMb2cpKS4KIAorIyMgV2hhdCByZXF1aXJlcyBhIGNoYW5nZWxvZyBlbnRyeT8KKworV3JpdGUgYSBjaGFuZ2Vsb2cgZW50cnkgaWYgdGhlcmUgaXMgYSB1c2VyLXZpc2libGUgY2hhbmdlLiBUaGlzIGluY2x1ZGVzOgorCisqIEJ1ZyBmaXhlcyBpbiB0aGUgbGlicmFyeSBvciBpbiBzYW1wbGUgcHJvZ3JhbXM6IGZpeGluZyBhIHNlY3VyaXR5IGhvbGUsCisgIGZpeGluZyBicm9rZW4gYmVoYXZpb3IsIGZpeGluZyB0aGUgYnVpbGQgaW4gc29tZSBjb25maWd1cmF0aW9uIG9yIG9uIHNvbWUKKyAgcGxhdGZvcm0sIGV0Yy4KKyogTmV3IGZlYXR1cmVzIGluIHRoZSBsaWJyYXJ5LCBuZXcgc2FtcGxlIHByb2dyYW1zLCBvciBuZXcgcGxhdGZvcm0gc3VwcG9ydC4KKyogQ2hhbmdlcyBpbiBleGlzdGluZyBiZWhhdmlvci4gVGhlc2Ugc2hvdWxkIGJlIHJhcmUuIENoYW5nZXMgaW4gZmVhdHVyZXMKKyAgdGhhdCBhcmUgZG9jdW1lbnRlZCBhcyBleHBlcmltZW50YWwgbWF5IG9yIG1heSBub3QgYmUgYW5ub3VuY2VkLCBkZXBlbmRpbmcKKyAgb24gdGhlIGV4dGVudCBvZiB0aGUgY2hhbmdlIGFuZCBob3cgd2lkZWx5IHdlIGV4cGVjdCB0aGUgZmVhdHVyZSB0byBiZSB1c2VkLgorCitXZSBnZW5lcmFsbHkgZG9uJ3QgaW5jbHVkZSBjaGFuZ2Vsb2cgZW50cmllcyBmb3I6CisKKyogRG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMuCisqIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50cywgdW5sZXNzIHRoZXkgYXJlIHBhcnRpY3VsYXJseSBzaWduaWZpY2FudC4KKyogQ2hhbmdlcyB0byBwYXJ0cyBvZiB0aGUgY29kZSBiYXNlIHRoYXQgdXNlcnMgZG9uJ3QgaW50ZXJhY3Qgd2l0aCBkaXJlY3RseSwKKyAgc3VjaCBhcyB0ZXN0IGNvZGUgYW5kIHRlc3QgZGF0YS4KKworVW50aWwgTWJlZCBUTFMgMi4yNC4wLCB3ZSByZXF1aXJlZCBjaGFuZ2Vsb2cgZW50cmllcyBpbiBtb3JlIGNhc2VzLgorTG9va2luZyBhdCBvbGRlciBjaGFuZ2Vsb2cgZW50cmllcyBpcyBnb29kIHByYWN0aWNlIGZvciBob3cgdG8gd3JpdGUgYQorY2hhbmdlbG9nIGVudHJ5LCBidXQgbm90IGZvciBkZWNpZGluZyB3aGV0aGVyIHRvIHdyaXRlIG9uZS4KKwogIyMgQ2hhbmdlbG9nIGVudHJ5IGZpbGUgZm9ybWF0CiAKIEEgY2hhbmdlbG9nIGVudHJ5IGZpbGUgbXVzdCBoYXZlIHRoZSBleHRlbnNpb24gYCoudHh0YCBhbmQgbXVzdCBoYXZlIHRoZQpAQCAtMzMsOCArNTYsNyBAQAogICAgIEJ1Z2ZpeAogICAgIENoYW5nZXMKIAotVXNlIOKAnENoYW5nZXPigJ0gZm9yIGFueXRoaW5nIHRoYXQgZG9lc24ndCBmaXQgaW4gdGhlIG90aGVyIGNhdGVnb3JpZXMsIHN1Y2ggYXMKLXBlcmZvcm1hbmNlLCBkb2N1bWVudGF0aW9uIGFuZCB0ZXN0IGltcHJvdmVtZW50cy4KK1VzZSDigJxDaGFuZ2Vz4oCdIGZvciBhbnl0aGluZyB0aGF0IGRvZXNuJ3QgZml0IGluIHRoZSBvdGhlciBjYXRlZ29yaWVzLgogCiAjIyBIb3cgdG8gd3JpdGUgYSBjaGFuZ2Vsb2cgZW50cnkKIApAQCAtNDksOCArNzEsNyBAQAogTWJlZCBUTFMgaXNzdWUuIEFkZCBvdGhlciBleHRlcm5hbCByZWZlcmVuY2VzIHN1Y2ggYXMgQ1ZFIG51bWJlcnMgd2hlcmUKIGFwcGxpY2FibGUuCiAKLUNyZWRpdCB0aGUgYXV0aG9yIG9mIHRoZSBjb250cmlidXRpb24gaWYgdGhlIGNvbnRyaWJ1dGlvbiBpcyBub3QgYSBtZW1iZXIgb2YKLXRoZSBNYmVkIFRMUyBkZXZlbG9wbWVudCB0ZWFtLiBBbHNvIGNyZWRpdCBidWcgcmVwb3J0ZXJzIHdoZXJlIGFwcGxpY2FibGUuCitDcmVkaXQgYnVnIHJlcG9ydGVycyB3aGVyZSBhcHBsaWNhYmxlLgogCiAqKkV4cGxhaW4gd2h5LCBub3QgaG93KiouIFJlbWVtYmVyIHRoYXQgdGhlIGF1ZGllbmNlIGlzIHRoZSB1c2VycyBvZiB0aGUKIGxpYnJhcnksIG5vdCBpdHMgZGV2ZWxvcGVycy4gSW4gcGFydGljdWxhciwgZm9yIGEgYnVnIGZpeCwgZXhwbGFpbiB0aGUKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL19HTlVfU09VUkNFLXJlZGVmaW5lZC50eHQgYi9DaGFuZ2VMb2cuZC9fR05VX1NPVVJDRS1yZWRlZmluZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YzhhMTUKLS0tIC9kZXYvbnVsbAorKysgYi9DaGFuZ2VMb2cuZC9fR05VX1NPVVJDRS1yZWRlZmluZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorQnVnZml4CisgICAqIEZpeCB0aGUgYnVpbGQgd2hlbiB0aGUgbWFjcm8gX0dOVV9TT1VSQ0UgaXMgZGVmaW5lZCB0byBhIG5vbi1lbXB0eSB2YWx1ZS4KKyAgICAgRml4ICMzNDMyLgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvYWRkX01CRURUTFNfVEFSR0VUX1BSRUZJWF90b19jbWFrZS50eHQgYi9DaGFuZ2VMb2cuZC9hZGRfTUJFRFRMU19UQVJHRVRfUFJFRklYX3RvX2NtYWtlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzNmMzA5Ci0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvYWRkX01CRURUTFNfVEFSR0VUX1BSRUZJWF90b19jbWFrZS50eHQKQEAgLTAsMCArMSw2IEBACitGZWF0dXJlcworICAgKiBBZGQgTUJFRFRMU19UQVJHRVRfUFJFRklYIENNYWtlIHZhcmlhYmxlLCB3aGljaCBpcyBwcmVmaXhlZCB0byB0aGUgbWJlZHRscywKKyAgICAgbWJlZGNyeXB0bywgbWJlZHg1MDkgYW5kIGFwaWRvYyBDTWFrZSB0YXJnZXQgbmFtZXMuIFRoaXMgY2FuIGJlIHVzZWQgYnkKKyAgICAgZXh0ZXJuYWwgQ01ha2UgcHJvamVjdHMgdGhhdCBpbmNsdWRlIHRoaXMgb25lIHRvIGF2b2lkIENNYWtlIHRhcmdldCBuYW1lCisgICAgIGNsYXNoZXMuICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzICIiLCBzbyBkZWZhdWx0IHRhcmdldCBuYW1lcworICAgICBhcmUgdW5jaGFuZ2VkLgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvYWRkX2V4cG9ydF9wdWJsaWNfa2V5X2RyaXZlci50eHQgYi9DaGFuZ2VMb2cuZC9hZGRfZXhwb3J0X3B1YmxpY19rZXlfZHJpdmVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWJmZmJjCi0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvYWRkX2V4cG9ydF9wdWJsaWNfa2V5X2RyaXZlci50eHQKQEAgLTAsMCArMSwzIEBACitGZWF0dXJlcworICAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIGV4cG9ydF9wdWJsaWNfa2V5IGludGVyZmFjZSBmb3IgUFNBIENyeXB0bworICAgICAgYWNjZWxlcmF0b3IgZHJpdmVycywgYXMgZGVmaW5lZCBpbiAjMzQ5My4gQ29udHJpYnV0ZWQgaW4gIzM3ODYuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9hZXMtemVyb2l6ZS1wb2ludGVyLnR4dCBiL0NoYW5nZUxvZy5kL2Flcy16ZXJvaXplLXBvaW50ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzZkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9DaGFuZ2VMb2cuZC9hZXMtemVyb2l6ZS1wb2ludGVyLnR4dApAQCAtMCwwICsxLDUgQEAKK0NoYW5nZXMKKyAgICogUmVtb3ZlIHRoZSB6ZXJvaXphdGlvbiBvZiBhIHBvaW50ZXIgdmFyaWFibGUgaW4gQUVTIHJvdW5kcy4gSXQgd2FzIHZhbGlkCisgICAgIGJ1dCBzcHVyaW91cyBhbmQgbWlzbGVhZGluZyBzaW5jZSBpdCBsb29rZWQgbGlrZSBhIG1pc3Rha2VuIGF0dGVtcHQgdG8KKyAgICAgemVyb2l6ZSB0aGUgcG9pbnRlZC10byBidWZmZXIuIFJlcG9ydGVkIGJ5IEFudG9uaW8gZGUgbGEgUGllZHJhLCBDRUEKKyAgICAgTGV0aSwgRnJhbmNlLgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvYW5kcm9pZC1zb2NrbGVuX3QudHh0IGIvQ2hhbmdlTG9nLmQvYW5kcm9pZC1zb2NrbGVuX3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OTVhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9DaGFuZ2VMb2cuZC9hbmRyb2lkLXNvY2tsZW5fdC50eHQKQEAgLTAsMCArMSwzIEBACitCdWdmaXgKKyAgICogVXNlIHNvY2tsZW5fdCBvbiBBbmRyb2lkIGFuZCBvdGhlciBQT1NJWC1jb21wbGlhbnQgc3lzdGVtCisKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL2FyYzRyYW5kb21fYnVmLWltcGxpY2l0LnR4dCBiL0NoYW5nZUxvZy5kL2FyYzRyYW5kb21fYnVmLWltcGxpY2l0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWMyNDVlCi0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvYXJjNHJhbmRvbV9idWYtaW1wbGljaXQudHh0CkBAIC0wLDAgKzEsMyBAQAorQnVnZml4CisgICAqIE1ha2UgYXJjNHJhbmRvbV9idWYgYXZhaWxhYmxlIG9uIE5ldEJTRCBhbmQgT3BlbkJTRCB3aGVuIF9QT1NJWF9DX1NPVVJDRSBpcworICAgICBkZWZpbmVkLiBGaXggY29udHJpYnV0ZWQgaW4gIzM1NzEuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9idWdmaXhfMzUyNC50eHQgYi9DaGFuZ2VMb2cuZC9idWdmaXhfMzUyNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAzODM0MAotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy5kL2J1Z2ZpeF8zNTI0LnR4dApAQCAtMCwwICsxLDMgQEAKK0J1Z2ZpeAorICAqIEluY2x1ZGUgdGhlIHBzYV9jb25zdGFudF9uYW1lcyBnZW5lcmF0ZWQgc291cmNlIGNvZGUgaW4gdGhlIHNvdXJjZSB0cmVlCisgICAgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGl0IGF0IGJ1aWxkIHRpbWUuIEZpeGVzICMzNTI0LgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvYnVnZml4XzM3OTQudHh0IGIvQ2hhbmdlTG9nLmQvYnVnZml4XzM3OTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODNlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9DaGFuZ2VMb2cuZC9idWdmaXhfMzc5NC50eHQKQEAgLTAsMCArMSw0IEBACitCdWdmaXgKKyAgKiBGaXggaGFuZGxpbmcgb2YgRU9GIGFnYWluc3QgMHhmZiBieXRlcyBhbmQgb24gcGxhdGZvcm1zIHdpdGgKKyAgICB1bnNpZ25lZCBjaGFycy4gIEZpeGVzIGEgYnVpbGQgZmFpbHVyZSBvbiBwbGF0Zm9ybXMgd2hlcmUgY2hhciBpcworICAgIHVuc2lnbmVkLiAgRml4ZXMgIzM3OTQuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9jb21tZW50X3R5cG9faW5fbWJlZHRsc19zc2xfc2V0X2Jpby50eHQgYi9DaGFuZ2VMb2cuZC9jb21tZW50X3R5cG9faW5fbWJlZHRsc19zc2xfc2V0X2Jpby50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmOTRjMTYuLjAwMDAwMDAKLS0tIGEvQ2hhbmdlTG9nLmQvY29tbWVudF90eXBvX2luX21iZWR0bHNfc3NsX3NldF9iaW8udHh0CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1DaGFuZ2VzCi0gICAqIEZpeCBjb21tZW50IHR5cG8gaW4gZG9jdW1lbnRhdGlvbiBvZiBtYmVkdGxzX3NzbF9zZXRfYmlvLgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvZWNiX2l2X2ZpeC50eHQgYi9DaGFuZ2VMb2cuZC9lY2JfaXZfZml4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTJhZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvZWNiX2l2X2ZpeC50eHQKQEAgLTAsMCArMSwzIEBACitCdWdmaXgKKyAgICogQ29ycmVjdCB0aGUgZGVmYXVsdCBJViBzaXplIGZvciBtYmVkdGxzX2NpcGhlcl9pbmZvX3Qgc3RydWN0dXJlcyB1c2luZworICAgICBNQkVEVExTX01PREVfRUNCIHRvIDAsIHNpbmNlIEVDQiBtb2RlIGNpcGhlcnMgZG9uJ3QgdXNlIElWcy4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL2VjcF9jdXJ2ZV9saXN0LnR4dCBiL0NoYW5nZUxvZy5kL2VjcF9jdXJ2ZV9saXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTc0NWQzCi0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvZWNwX2N1cnZlX2xpc3QudHh0CkBAIC0wLDAgKzEsNSBAQAorQnVnZml4CisgICAqIG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKSBub3cgbGlzdHMgQ3VydmUyNTUxOSBhbmQgQ3VydmU0NDggdW5kZXIgdGhlIG5hbWVzCisgICAgICJ4MjU1MTkiIGFuZCAieDQ0OCIuIFRoZXNlIGN1cnZlcyBzdXBwb3J0IEVDREggYnV0IG5vdCBFQ0RTQS4gSWYgeW91IG5lZWQKKyAgICAgb25seSB0aGUgY3VydmVzIHRoYXQgc3VwcG9ydCBFQ0RTQSwgZmlsdGVyIHRoZSBsaXN0IHdpdGgKKyAgICAgbWJlZHRsc19lY2RzYV9jYW5fZG8oKS4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL2Vycm9yLWluY2x1ZGUtc3RyaW5nLnR4dCBiL0NoYW5nZUxvZy5kL2Vycm9yLWluY2x1ZGUtc3RyaW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTEyYzdiCi0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvZXJyb3ItaW5jbHVkZS1zdHJpbmcudHh0CkBAIC0wLDAgKzEsMiBAQAorQnVnZml4CisgICAqIEZpeCBjb25kaXRpb25zIGZvciBpbmNsdWRpbmcgc3RyaW5nLmggaW4gZXJyb3IuYy4gRml4ZXMgIzM4NjYuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9mZWF0dXJlLWR0bHMtc3J0cC50eHQgYi9DaGFuZ2VMb2cuZC9mZWF0dXJlLWR0bHMtc3J0cC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5MTg2YgotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy5kL2ZlYXR1cmUtZHRscy1zcnRwLnR4dApAQCAtMCwwICsxLDIgQEAKK0ZlYXR1cmVzCisqIEFkZCBzdXBwb3J0IGZvciBEVExTLVNSVFAgYXMgZGVmaW5lZCBpbiBSRkMgNTc2NC4gQ29udHJpYnV0ZWQgYnkgSm9oYW4gUGFzY2FsLCBpbXByb3ZlZCBieSBSb24gRWxkb3IuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9maXgtcnNhLWJsaW5kaW5nLnR4dCBiL0NoYW5nZUxvZy5kL2ZpeC1yc2EtYmxpbmRpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMzU3MmMKLS0tIC9kZXYvbnVsbAorKysgYi9DaGFuZ2VMb2cuZC9maXgtcnNhLWJsaW5kaW5nLnR4dApAQCAtMCwwICsxLDYgQEAKK0J1Z2ZpeAorICAgKiBGaXggcnNhX3ByZXBhcmVfYmxpbmRpbmcoKSB0byByZXRyeSB3aGVuIHRoZSBibGluZGluZyB2YWx1ZSBpcyBub3QKKyAgICAgaW52ZXJ0aWJsZSAobW9kIE4pLCBpbnN0ZWFkIG9mIHJldHVybmluZyBNQkVEVExTX0VSUl9SU0FfUk5HX0ZBSUxFRC4gVGhpcworICAgICBhZGRyZXNzZXMgYSByZWdyZXNzaW9uIGJ1dCBpcyByYXJlIGluIHByYWN0aWNlIChhcHByb3guIDEgaW4gMi9zcXJ0KE4pKS4KKyAgICAgRm91bmQgYnkgU3lub3BzeXMgQ292ZXJpdHksIGZpeCBjb250cmlidXRlZCBieSBQZXRlciBLb2xidXMgKEdhcm1pbikuCisgICAgIEZpeGVzICMzNjQ3LgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvZml4LXR5cG8udHh0IGIvQ2hhbmdlTG9nLmQvZml4LXR5cG8udHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTk2MWQyLi4wMDAwMDAwCi0tLSBhL0NoYW5nZUxvZy5kL2ZpeC10eXBvLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotQ2hhbmdlcwotICAgKiBGaXhlcyBhIHR5cG8gaW4gdGhlIGV4YW1wbGUgY29kZSBsb2NhdGVkIGluCi0gICAgIHByb2dyYW0vcGtleS9lY2RoX2N1cnZlMjU1MTkuYwpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvZml4X2NjbV9hZGRfbGVuZ3RoX2NoZWNrLnR4dCBiL0NoYW5nZUxvZy5kL2ZpeF9jY21fYWRkX2xlbmd0aF9jaGVjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5Mzk5ZgotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy5kL2ZpeF9jY21fYWRkX2xlbmd0aF9jaGVjay50eHQKQEAgLTAsMCArMSw1IEBACitCdWdmaXgKKyAgICogRml4IGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gdGhlIGFkZGl0aW9uYWwgZGF0YSBsZW5ndGggY2hlY2sgZm9yCisgICAgIENDTSwgd2hpY2ggYWxsb3dlZCBlbmNyeXB0aW9uIHdpdGggYSBub24tc3RhbmRhcmQgbGVuZ3RoIGZpZWxkLgorICAgICBGaXhlcyAjMzcxOS4KKwpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvbWluaW11bV9jbWFrZV92ZXJzaW9uX1BSMzgwMi50eHQgYi9DaGFuZ2VMb2cuZC9taW5pbXVtX2NtYWtlX3ZlcnNpb25fUFIzODAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDlmOWIxCi0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvbWluaW11bV9jbWFrZV92ZXJzaW9uX1BSMzgwMi50eHQKQEAgLTAsMCArMSwzIEBACitSZXF1aXJlbWVudCBjaGFuZ2VzCisqIFVwZGF0ZSB0aGUgbWluaW11bSByZXF1aXJlZCBDTWFrZSB2ZXJzaW9uIHRvIDIuOC4xMi4KKyogVGhpcyBzaWxlbmNlcyBhIHdhcm5pbmcgb24gQ01ha2UgMy4xOS4wLiAjMzgwMQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvcHNhLW9wZW5sZXNzLnR4dCBiL0NoYW5nZUxvZy5kL3BzYS1vcGVubGVzcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU0MGNkZgotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy5kL3BzYS1vcGVubGVzcy50eHQKQEAgLTAsMCArMSwxNyBAQAorRmVhdHVyZXMKKyAgICogSW4gdGhlIFBTQSBBUEksIGl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gb3BlbiBwZXJzaXN0ZW50IGtleXM6CisgICAgIG9wZXJhdGlvbnMgbm93IGFjY2VwdCB0aGUga2V5IGlkZW50aWZpZXIuIFRoZSB0eXBlIHBzYV9rZXlfaGFuZGxlX3QgaXMgbm93CisgICAgIGlkZW50aWNhbCB0byBwc2Ffa2V5X2lkX3QgaW5zdGVhZCBvZiBiZWluZyBwbGF0Zm9ybS1kZWZpbmVkLiBUaGlzIGJyaWRnZXMKKyAgICAgdGhlIGxhc3QgbWFqb3IgZ2FwIHRvIGNvbXBsaWFuY2Ugd2l0aCB0aGUgUFNBIENyeXB0b2dyYXBoeSBzcGVjaWZpY2F0aW9uCisgICAgIHZlcnNpb24gMS4wLjAuIE9wZW5pbmcgcGVyc2lzdGVudCBrZXlzIGlzIHN0aWxsIHN1cHBvcnRlZCBmb3IgYmFja3dhcmQKKyAgICAgY29tcGF0aWJpbGl0eSwgYnV0IHdpbGwgYmUgZGVwcmVjYXRlZCBhbmQgbGF0ZXIgcmVtb3ZlZCBpbiBmdXR1cmUKKyAgICAgcmVsZWFzZXMuCisKK0J1Z2ZpeAorICAgKiBwc2Ffc2V0X2tleV9pZCgpIG5vdyBhbHNvIHNldHMgdGhlIGxpZmV0aW1lIHRvIHBlcnNpc3RlbnQgZm9yIGtleXMgbG9jYXRlZAorICAgICBpbiBhIHNlY3VyZSBlbGVtZW50LgorICAgKiBBdHRlbXB0aW5nIHRvIGNyZWF0ZSBhIHZvbGF0aWxlIGtleSB3aXRoIGEgbm9uLXplcm8ga2V5IGlkZW50aWZpZXIgbm93CisgICAgIGZhaWxzLiBQcmV2aW91c2x5IHRoZSBrZXkgaWRlbnRpZmllciB3YXMganVzdCBpZ25vcmVkIHdoZW4gY3JlYXRpbmcgYQorICAgICB2b2xhdGlsZSBrZXkuCisgICAqIEF0dGVtcHRpbmcgdG8gY3JlYXRlIG9yIHJlZ2lzdGVyIGEga2V5IHdpdGggYSBrZXkgaWRlbnRpZmllciBpbiB0aGUgdmVuZG9yCisgICAgIHJhbmdlIG5vdyBmYWlscy4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL3BzYV9lcnJvcl9pbnZhbGlkX2FyZ3VtZW50X2Zvcl9pbnZhbGlkX2NpcGhlcl9pbnB1dF9zaXplcy50eHQgYi9DaGFuZ2VMb2cuZC9wc2FfZXJyb3JfaW52YWxpZF9hcmd1bWVudF9mb3JfaW52YWxpZF9jaXBoZXJfaW5wdXRfc2l6ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YzM2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9DaGFuZ2VMb2cuZC9wc2FfZXJyb3JfaW52YWxpZF9hcmd1bWVudF9mb3JfaW52YWxpZF9jaXBoZXJfaW5wdXRfc2l6ZXMudHh0CkBAIC0wLDAgKzEsNCBAQAorQnVnZml4CisgICAqIENvbnNpc3RlbnRseSByZXR1cm4gUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgb24gaW52YWxpZCBjaXBoZXIgaW5wdXQKKyAgICAgc2l6ZXMgKGluc3RlYWQgb2YgUFNBX0VSUk9SX0JBRF9TVEFURSBpbiBzb21lIGNhc2VzKSB0byBtYWtlIHRoZQorICAgICBwc2FfY2lwaGVyXyogZnVuY3Rpb25zIGNvbXBsaWFudCB3aXRoIHRoZSBQU0EgQ3J5cHRvIEFQSSBzcGVjaWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvcHNhX2dlbmVyYXRlX2tleS1jdXJ2ZTI1NTE5LnR4dCBiL0NoYW5nZUxvZy5kL3BzYV9nZW5lcmF0ZV9rZXktY3VydmUyNTUxOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRiNmZjZgotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy5kL3BzYV9nZW5lcmF0ZV9rZXktY3VydmUyNTUxOS50eHQKQEAgLTAsMCArMSwzIEBACitCdWdmaXgKKyAgICogRml4IHBzYV9nZW5lcmF0ZV9rZXkoKSByZXR1cm5pbmcgYW4gZXJyb3Igd2hlbiBhc2tlZCB0byBnZW5lcmF0ZQorICAgICBhbiBFQ0Mga2V5IHBhaXIgb24gQ3VydmUyNTUxOSBvciBzZWNwMjQ0azEuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9zdXBwb3J0LWVjZGgta2RmLXdpdGgtZWNkaC1rZXkudHh0IGIvQ2hhbmdlTG9nLmQvc3VwcG9ydC1lY2RoLWtkZi13aXRoLWVjZGgta2V5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjYwZGMzCi0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvc3VwcG9ydC1lY2RoLWtkZi13aXRoLWVjZGgta2V5LnR4dApAQCAtMCwwICsxLDYgQEAKK0ZlYXR1cmVzCisgICAqIEluIFBTQSwgYWxsb3cgdXNpbmcgYSBrZXkgZGVjbGFyZWQgd2l0aCBhIGJhc2Uga2V5IGFncmVlbWVudCBhbGdvcml0aG0KKyAgICAgaW4gY29tYmluZWQga2V5IGFncmVlbWVudCBhbmQgZGVyaXZhdGlvbiBvcGVyYXRpb25zLCBhcyBsb25nIGFzIHRoZSBrZXkKKyAgICAgYWdyZWVtZW50IGFsZ29yaXRobSBpbiB1c2UgbWF0Y2hlcyB0aGUgYWxnb3JpdGhtIHRoZSBrZXkgd2FzIGRlY2xhcmVkIHdpdGguCisgICAgIFRoaXMgaXMgY3VycmVudGx5IG5vbi1zdGFuZGFyZCBiZWhhdmlvdXIsIGJ1dCBleHBlY3RlZCB0byBtYWtlIGl0IGludG8gYQorICAgICBmdXR1cmUgcmV2aXNpb24gb2YgdGhlIFBTQSBDcnlwdG8gc3RhbmRhcmQuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9zdXBwb3J0LWtleS1hZ3JlZW1lbnQtYW5kLWRlcml2YXRpb24tb3V0cHV0LWFzLWtleS50eHQgYi9DaGFuZ2VMb2cuZC9zdXBwb3J0LWtleS1hZ3JlZW1lbnQtYW5kLWRlcml2YXRpb24tb3V0cHV0LWFzLWtleS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2MTQ4MQotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy5kL3N1cHBvcnQta2V5LWFncmVlbWVudC1hbmQtZGVyaXZhdGlvbi1vdXRwdXQtYXMta2V5LnR4dApAQCAtMCwwICsxLDQgQEAKK0J1Z2ZpeAorICAgKiBGaXggcHNhX2tleV9kZXJpdmF0aW9uX291dHB1dF9rZXkoKSB0byBhbGxvdyB0aGUgb3V0cHV0IG9mIGEgY29tYmluZWQga2V5CisgICAgIGFncmVlbWVudCBhbmQgc3Vic2VxdWVudCBrZXkgZGVyaXZhdGlvbiBvcGVyYXRpb24gdG8gYmUgdXNlZCBhcyBhIGtleQorICAgICBpbnNpZGUgb2YgdGhlIFBTQSBDcnlwdG8gY29yZS4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL3N5c3RlbWF0aWNhbGx5X3N0b3JlX2JpdF9zaXplXzM3NDAudHh0IGIvQ2hhbmdlTG9nLmQvc3lzdGVtYXRpY2FsbHlfc3RvcmVfYml0X3NpemVfMzc0MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU2M2JiYwotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy5kL3N5c3RlbWF0aWNhbGx5X3N0b3JlX2JpdF9zaXplXzM3NDAudHh0CkBAIC0wLDAgKzEsNSBAQAorQ2hhbmdlcworICAgKiBUaGUgUFNBIHBlcnNpc3RlbnQgc3RvcmFnZSBmb3JtYXQgaXMgdXBkYXRlZCB0byBhbHdheXMgc3RvcmUgdGhlIGtleSBiaXRzCisgICAgIGF0dHJpYnV0ZS4gTm8gYXV0b21hdGljIHVwZ3JhZGUgcGF0aCBpcyBwcm92aWRlZC4gUHJldmlvdXNseSBzdG9yZWQga2V5cworICAgICBtdXN0IGJlIGVyYXNlZCwgb3IgbWFudWFsbHkgdXBncmFkZWQgYmFzZWQgb24gdGhlIGtleSBzdG9yYWdlIGZvcm1hdAorICAgICBzcGVjaWZpY2F0aW9uIChkb2NzL2FyY2hpdGVjdHVyZS9tYmVkLWNyeXB0by1zdG9yYWdlLXNwZWNpZmljYXRpb24ubWQpLiAjMzc0MApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBkMDAxODNlLi45MzQ0ZTcxIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtNDUsNiArNDUsNyBAQAogCiB1bmluc3RhbGw6CiAJcm0gLXJmICQoREVTVERJUikvaW5jbHVkZS9tYmVkdGxzCisJcm0gLXJmICQoREVTVERJUikvaW5jbHVkZS9wc2EKIAlybSAtZiAkKERFU1RESVIpL2xpYi9saWJtYmVkdGxzLioKIAlybSAtZiAkKERFU1RESVIpL2xpYi9saWJtYmVkeDUwOS4qCiAJcm0gLWYgJChERVNURElSKS9saWIvbGlibWJlZGNyeXB0by4qCkBAIC0xMjYsMTIgKzEyNywyNiBAQAogZW5kaWYKIAogIyMgRWRpdG9yIG5hdmlnYXRpb24gZmlsZXMKLUNfU09VUkNFX0ZJTEVTID0gJCh3aWxkY2FyZCBpbmNsdWRlLyovKi5oIGxpYnJhcnkvKi5baGNdIHByb2dyYW1zLyovKi5baGNdIHRlc3RzL3N1aXRlcy8qLmZ1bmN0aW9uKQorQ19TT1VSQ0VfRklMRVMgPSAkKHdpbGRjYXJkIFwKKwkzcmRwYXJ0eS8qL2luY2x1ZGUvKi8qLmggM3JkcGFydHkvKi9pbmNsdWRlLyovKi8qLmggM3JkcGFydHkvKi9pbmNsdWRlLyovKi8qLyouaCBcCisJM3JkcGFydHkvKi8qLmMgM3JkcGFydHkvKi8qLyouYyAzcmRwYXJ0eS8qLyovKi8qLmMgM3JkcGFydHkvKi8qLyovKi8qLmMgXAorCWluY2x1ZGUvKi8qLmggXAorCWxpYnJhcnkvKi5baGNdIFwKKwlwcm9ncmFtcy8qLyouW2hjXSBcCisJdGVzdHMvaW5jbHVkZS8qLyouaCB0ZXN0cy9pbmNsdWRlLyovKi8qLmggXAorCXRlc3RzL3NyYy8qLmMgdGVzdHMvc3JjLyovKi5jIFwKKwl0ZXN0cy9zdWl0ZXMvKi5mdW5jdGlvbiBcCispCiAjIEV4dWJlcmFudC1jdGFncyBpbnZvY2F0aW9uLiBPdGhlciBjdGFncyBpbXBsZW1lbnRhdGlvbnMgbWF5IHJlcXVpcmUgZGlmZmVyZW50IG9wdGlvbnMuCiBDVEFHUyA9IGN0YWdzIC0tbGFuZ21hcD1jOisuaC5mdW5jdGlvbiAtbwogdGFnczogJChDX1NPVVJDRV9GSUxFUykKIAkkKENUQUdTKSAkQCAkKENfU09VUkNFX0ZJTEVTKQogVEFHUzogJChDX1NPVVJDRV9GSUxFUykKIAlldGFncyAtbyAkQCAkKENfU09VUkNFX0ZJTEVTKQorZ2xvYmFsOiBHUEFUSCBHUlRBR1MgR1NZTVMgR1RBR1MKIEdQQVRIIEdSVEFHUyBHU1lNUyBHVEFHUzogJChDX1NPVVJDRV9GSUxFUykKIAlscyAkKENfU09VUkNFX0ZJTEVTKSB8IGd0YWdzIC1mIC0gLS1ndGFnc2NvbmYgLmdsb2JhbHJjCitjc2NvcGU6IGNzY29wZS5pbi5vdXQgY3Njb3BlLnBvLm91dCBjc2NvcGUub3V0Citjc2NvcGUuaW4ub3V0IGNzY29wZS5wby5vdXQgY3Njb3BlLm91dDogJChDX1NPVVJDRV9GSUxFUykKKwljc2NvcGUgLWJxIC11IC1JaW5jbHVkZSAtSWxpYnJhcnkgJChwYXRzdWJzdCAlLC1JJSwkKHdpbGRjYXJkIDNyZHBhcnR5LyovaW5jbHVkZSkpIC1JdGVzdHMvaW5jbHVkZSAkKENfU09VUkNFX0ZJTEVTKQorLlBIT05ZOiBjc2NvcGUgZ2xvYmFsCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKaW5kZXggMjA1OGQyNC4uYWMyYTZhYiAxMDA2NDQKLS0tIGEvUkVBRE1FLm1kCisrKyBiL1JFQURNRS5tZApAQCAtMjA4LDcgKzIwOCw3IEBACiAKICogVGhlIEFQSSBkaXN0aW5ndWlzaGVzIGNhbGxlciBtZW1vcnkgZnJvbSBpbnRlcm5hbCBtZW1vcnksIHdoaWNoIGFsbG93cyB0aGUgbGlicmFyeSB0byBiZSBpbXBsZW1lbnRlZCBpbiBhbiBpc29sYXRlZCBzcGFjZSBmb3IgYWRkaXRpb25hbCBzZWN1cml0eS4gTGlicmFyeSBjYWxscyBjYW4gYmUgaW1wbGVtZW50ZWQgYXMgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzIGlmIGlzb2xhdGlvbiBpcyBub3QgZGVzaXJlZCwgYW5kIGFzIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMgaWYgaXNvbGF0aW9uIGlzIGRlc2lyZWQuCiAqIFRoZSBzdHJ1Y3R1cmUgb2YgaW50ZXJuYWwgZGF0YSBpcyBoaWRkZW4gdG8gdGhlIGFwcGxpY2F0aW9uLCB3aGljaCBhbGxvd3Mgc3Vic3RpdHV0aW5nIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9ucyBhdCBidWlsZCB0aW1lIG9yIHJ1biB0aW1lLCBmb3IgZXhhbXBsZSwgaW4gb3JkZXIgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaGFyZHdhcmUgYWNjZWxlcmF0b3JzLgotKiBBbGwgYWNjZXNzIHRvIHRoZSBrZXlzIGhhcHBlbnMgdGhyb3VnaCBoYW5kbGVzLCB3aGljaCBhbGxvd3Mgc3VwcG9ydCBmb3IgZXh0ZXJuYWwgY3J5cHRvcHJvY2Vzc29ycyB0aGF0IGlzIHRyYW5zcGFyZW50IHRvIGFwcGxpY2F0aW9ucy4KKyogQWxsIGFjY2VzcyB0byB0aGUga2V5cyBoYXBwZW5zIHRocm91Z2gga2V5IGlkZW50aWZpZXJzLCB3aGljaCBhbGxvd3Mgc3VwcG9ydCBmb3IgZXh0ZXJuYWwgY3J5cHRvcHJvY2Vzc29ycyB0aGF0IGlzIHRyYW5zcGFyZW50IHRvIGFwcGxpY2F0aW9ucy4KICogVGhlIGludGVyZmFjZSB0byBhbGdvcml0aG1zIGlzIGdlbmVyaWMsIGZhdm9yaW5nIGFsZ29yaXRobSBhZ2lsaXR5LgogKiBUaGUgaW50ZXJmYWNlIGlzIGRlc2lnbmVkIHRvIGJlIGVhc3kgdG8gdXNlIGFuZCBoYXJkIHRvIGFjY2lkZW50YWxseSBtaXN1c2UuCiAKZGlmZiAtLWdpdCBhL2NvbmZpZ3MvY29uZmlnLXN5bW1ldHJpYy1vbmx5LmggYi9jb25maWdzL2NvbmZpZy1zeW1tZXRyaWMtb25seS5oCmluZGV4IDA1NGNiOWUuLmYwNWEwZDcgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3MvY29uZmlnLXN5bW1ldHJpYy1vbmx5LmgKKysrIGIvY29uZmlncy9jb25maWctc3ltbWV0cmljLW9ubHkuaApAQCAtOTIsNiArOTIsOCBAQAogI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fQwogI2RlZmluZSBNQkVEVExTX1hURUFfQwogCisjaW5jbHVkZSAibWJlZHRscy9jb25maWdfcHNhLmgiCisKICNpbmNsdWRlICJjaGVja19jb25maWcuaCIKIAogI2VuZGlmIC8qIE1CRURUTFNfQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2RvY3MvYXJjaGl0ZWN0dXJlL21iZWQtY3J5cHRvLXN0b3JhZ2Utc3BlY2lmaWNhdGlvbi5tZCBiL2RvY3MvYXJjaGl0ZWN0dXJlL21iZWQtY3J5cHRvLXN0b3JhZ2Utc3BlY2lmaWNhdGlvbi5tZAppbmRleCBhZmViMjlmLi45MTRiY2EzIDEwMDY0NAotLS0gYS9kb2NzL2FyY2hpdGVjdHVyZS9tYmVkLWNyeXB0by1zdG9yYWdlLXNwZWNpZmljYXRpb24ubWQKKysrIGIvZG9jcy9hcmNoaXRlY3R1cmUvbWJlZC1jcnlwdG8tc3RvcmFnZS1zcGVjaWZpY2F0aW9uLm1kCkBAIC0yNTEsNiArMjUxLDcgQEAKICoga2V5IG1hdGVyaWFsIGxlbmd0aCAoNCBieXRlcykuCiAqIGtleSBtYXRlcmlhbDoKICAgICAqIEZvciBhIHRyYW5zcGFyZW50IGtleTogb3V0cHV0IG9mIGBwc2FfZXhwb3J0X2tleWAuCisgICAgKiBGb3IgYW4gb3BhcXVlIGtleSAodW5pZmllZCBkcml2ZXIgaW50ZXJmYWNlKTogZHJpdmVyLXNwZWNpZmljIG9wYXF1ZSBrZXkgYmxvYi4KICAgICAqIEZvciBhbiBvcGFxdWUga2V5IChrZXkgaW4gYSBzZWN1cmUgZWxlbWVudCk6IHNsb3QgbnVtYmVyICg4IGJ5dGVzKSwgaW4gcGxhdGZvcm0gZW5kaWFubmVzcy4KICogQW55IHRyYWlsaW5nIGRhdGEgaXMgcmVqZWN0ZWQgb24gbG9hZC4KIApAQCAtMjgwLDMgKzI4MSwzNiBAQAogICAgICogVGhlIHNsb3QgaW4gdGhlIHNlY3VyZSBlbGVtZW50IGRlc2lnbmF0ZWQgYnkgdGhlIHNsb3QgbnVtYmVyLgogICAgICogVGhlIGZpbGUgY29udGFpbmluZyB0aGUga2V5IG1ldGFkYXRhIGRlc2lnbmF0ZWQgYnkgdGhlIGtleSBpZGVudGlmaWVyLgogICAgICogVGhlIGRyaXZlciBwZXJzaXN0ZW50IGRhdGEuCisKK01iZWQgQ3J5cHRvIFRCRAorLS0tLS0tLS0tLS0tLS0tCisKK1RhZ3M6IFRCRAorCitSZWxlYXNlZCBpbiBUQkQgMjAyMC4gPGJyPgorSW50ZWdyYXRlZCBpbiBNYmVkIE9TIFRCRC4KKworIyMjIENoYW5nZXMgaW50cm9kdWNlZCBpbiBUQkQKKworKiBUaGUgdHlwZSBmaWVsZCBoYXMgYmVlbiBzcGxpdCBpbnRvIGEgdHlwZSBhbmQgYSBiaXRzIGZpZWxkIG9mIDIgYnl0ZXMgZWFjaC4KKworIyMjIEtleSBmaWxlIGZvcm1hdCBmb3IgVEJECisKK0FsbCBpbnRlZ2VycyBhcmUgZW5jb2RlZCBpbiBsaXR0bGUtZW5kaWFuIG9yZGVyIGluIDgtYml0IGJ5dGVzIGV4Y2VwdCB3aGVyZSBvdGhlcndpc2UgaW5kaWNhdGVkLgorCitUaGUgbGF5b3V0IG9mIGEga2V5IGZpbGUgaXM6CisKKyogbWFnaWMgKDggYnl0ZXMpOiBgIlBTQVwwS0VZXDAiYC4KKyogdmVyc2lvbiAoNCBieXRlcyk6IDAuCisqIGxpZmV0aW1lICg0IGJ5dGVzKTogYHBzYV9rZXlfbGlmZXRpbWVfdGAgdmFsdWUuCisqIHR5cGUgKDIgYnl0ZXMpOiBgcHNhX2tleV90eXBlX3RgIHZhbHVlLgorKiBiaXRzICgyIGJ5dGVzKTogYHBzYV9rZXlfYml0c190YCB2YWx1ZS4KKyogcG9saWN5IHVzYWdlIGZsYWdzICg0IGJ5dGVzKTogYHBzYV9rZXlfdXNhZ2VfdGAgdmFsdWUuCisqIHBvbGljeSB1c2FnZSBhbGdvcml0aG0gKDQgYnl0ZXMpOiBgcHNhX2FsZ29yaXRobV90YCB2YWx1ZS4KKyogcG9saWN5IGVucm9sbG1lbnQgYWxnb3JpdGhtICg0IGJ5dGVzKTogYHBzYV9hbGdvcml0aG1fdGAgdmFsdWUuCisqIGtleSBtYXRlcmlhbCBsZW5ndGggKDQgYnl0ZXMpLgorKiBrZXkgbWF0ZXJpYWw6CisgICAgKiBGb3IgYSB0cmFuc3BhcmVudCBrZXk6IG91dHB1dCBvZiBgcHNhX2V4cG9ydF9rZXlgLgorICAgICogRm9yIGFuIG9wYXF1ZSBrZXkgKHVuaWZpZWQgZHJpdmVyIGludGVyZmFjZSk6IGRyaXZlci1zcGVjaWZpYyBvcGFxdWUga2V5IGJsb2IuCisgICAgKiBGb3IgYW4gb3BhcXVlIGtleSAoa2V5IGluIGEgc2VjdXJlIGVsZW1lbnQpOiBzbG90IG51bWJlciAoOCBieXRlcyksIGluIHBsYXRmb3JtIGVuZGlhbm5lc3MuCisqIEFueSB0cmFpbGluZyBkYXRhIGlzIHJlamVjdGVkIG9uIGxvYWQuCmRpZmYgLS1naXQgYS9kb2NzL2FyY2hpdGVjdHVyZS90ZXN0aW5nL2ludmFzaXZlLXRlc3RpbmcubWQgYi9kb2NzL2FyY2hpdGVjdHVyZS90ZXN0aW5nL2ludmFzaXZlLXRlc3RpbmcubWQKaW5kZXggNzQ0ZjE5NC4uZGU2MTFhNSAxMDA2NDQKLS0tIGEvZG9jcy9hcmNoaXRlY3R1cmUvdGVzdGluZy9pbnZhc2l2ZS10ZXN0aW5nLm1kCisrKyBiL2RvY3MvYXJjaGl0ZWN0dXJlL3Rlc3RpbmcvaW52YXNpdmUtdGVzdGluZy5tZApAQCAtMTAwLDcgKzEwMCw3IEBACiAKICogTWVtb3J5LgogKiBGaWxlcyBpbiBzdG9yYWdlIChQU0EgQVBJIG9ubHkg4oCUIGluIHRoZSBNYmVkIFRMUyBBUEksIGJsYWNrLWJveCB1bml0IHRlc3RzIGFyZSBzdWZmaWNpZW50KS4KLSogS2V5IGhhbmRsZXMgKFBTQSBBUEkgb25seSkuCisqIEtleSBzbG90cyAoUFNBIEFQSSBvbmx5KS4KICogS2V5IHNsb3RzIGluIGEgc2VjdXJlIGVsZW1lbnQgKFBTQSBTRSBIQUwpLgogKiBDb21tdW5pY2F0aW9uIGhhbmRsZXMgKFBTQSBjcnlwdG8gc2VydmljZSBvbmx5KS4KIApAQCAtMTE2LDcgKzExNiw3IEBACiAKICogWmVyb2l6YXRpb24gb2YgY29uZmlkZW50aWFsIGRhdGEgYWZ0ZXIgdXNlLgogKiBGcmVlaW5nIG1lbW9yeS4KLSogQ2xvc2luZyBrZXkgaGFuZGxlcy4KKyogRnJlZWluZyBrZXkgc2xvdHMuCiAqIEZyZWVpbmcga2V5IHNsb3RzIGluIGEgc2VjdXJlIGVsZW1lbnQuCiAqIERlbGV0aW5nIGZpbGVzIGluIHN0b3JhZ2UgKFBTQSBBUEkgb25seSkuCiAKZGlmZiAtLWdpdCBhL2RvY3MvZ2V0dGluZ19zdGFydGVkLm1kIGIvZG9jcy9nZXR0aW5nX3N0YXJ0ZWQubWQKaW5kZXggZTI3NGY0OS4uMTVkNWEzMSAxMDA2NDQKLS0tIGEvZG9jcy9nZXR0aW5nX3N0YXJ0ZWQubWQKKysrIGIvZG9jcy9nZXR0aW5nX3N0YXJ0ZWQubWQKQEAgLTY0LDcgKzY0LDcgQEAKICMjIyBJbXBvcnRpbmcgYSBrZXkKIAogVG8gdXNlIGEga2V5IGZvciBjcnlwdG9ncmFwaHkgb3BlcmF0aW9ucyBpbiBNYmVkIENyeXB0bywgeW91IG5lZWQgdG8gZmlyc3QKLWltcG9ydCBpdC4gSW1wb3J0aW5nIHRoZSBrZXkgY3JlYXRlcyBhIGhhbmRsZSB0aGF0IHJlZmVycyB0byB0aGUga2V5IGZvciB1c2UKK2ltcG9ydCBpdC4gVGhlIGltcG9ydCBvcGVyYXRpb24gcmV0dXJucyB0aGUgaWRlbnRpZmllciBvZiB0aGUga2V5IGZvciB1c2UKIHdpdGggb3RoZXIgZnVuY3Rpb24gY2FsbHMuCiAKICoqUHJlcmVxdWlzaXRlcyB0byBpbXBvcnRpbmcga2V5czoqKgpAQCAtNzYsNyArNzYsNyBAQAogewogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlOworICAgIHBzYV9rZXlfaWRfdCBrZXk7CiAKICAgICBwcmludGYoIkltcG9ydCBhbiBBRVMga2V5Li4uXHQiKTsKICAgICBmZmx1c2goc3Rkb3V0KTsKQEAgLTk1LDcgKzk1LDcgQEAKICAgICBwc2Ffc2V0X2tleV9iaXRzKCZhdHRyaWJ1dGVzLCAxMjgpOwogCiAgICAgLyogSW1wb3J0IHRoZSBrZXkgKi8KLSAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleSgmYXR0cmlidXRlcywga2V5LCBrZXlfbGVuLCAmaGFuZGxlKTsKKyAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleSgmYXR0cmlidXRlcywga2V5LCBrZXlfbGVuLCAma2V5KTsKICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKSB7CiAgICAgICAgIHByaW50ZigiRmFpbGVkIHRvIGltcG9ydCBrZXlcbiIpOwogICAgICAgICByZXR1cm47CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoJmF0dHJpYnV0ZXMpOwogCiAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCi0gICAgcHNhX2Rlc3Ryb3lfa2V5KGhhbmRsZSk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KGtleSk7CiAKICAgICBtYmVkdGxzX3BzYV9jcnlwdG9fZnJlZSgpOwogfQpAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAweGE5LCAweGU4LCAweGNjLCAweGFjLCAweGQwLCAweGY2LCAweDU0LCAweDVjfTsKICAgICB1aW50OF90IHNpZ25hdHVyZVtQU0FfU0lHTkFUVVJFX01BWF9TSVpFXSA9IHswfTsKICAgICBzaXplX3Qgc2lnbmF0dXJlX2xlbmd0aDsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZTsKKyAgICBwc2Ffa2V5X2lkX3Qga2V5OwogCiAgICAgcHJpbnRmKCJTaWduIGEgbWVzc2FnZS4uLlx0Iik7CiAgICAgZmZsdXNoKHN0ZG91dCk7CkBAIC0xNTQsMTQgKzE1NCwxNCBAQAogICAgIHBzYV9zZXRfa2V5X2JpdHMoJmF0dHJpYnV0ZXMsIDEwMjQpOwogCiAgICAgLyogSW1wb3J0IHRoZSBrZXkgKi8KLSAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleSgmYXR0cmlidXRlcywga2V5LCBrZXlfbGVuLCAmaGFuZGxlKTsKKyAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleSgmYXR0cmlidXRlcywga2V5LCBrZXlfbGVuLCAma2V5KTsKICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKSB7CiAgICAgICAgIHByaW50ZigiRmFpbGVkIHRvIGltcG9ydCBrZXlcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLyogU2lnbiBtZXNzYWdlIHVzaW5nIHRoZSBrZXkgKi8KLSAgICBzdGF0dXMgPSBwc2Ffc2lnbl9oYXNoKGhhbmRsZSwgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVcsCisgICAgc3RhdHVzID0gcHNhX3NpZ25faGFzaChrZXksIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgc2l6ZW9mKGhhc2gpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLCBzaXplb2Yoc2lnbmF0dXJlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWduYXR1cmVfbGVuZ3RoKTsKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcygmYXR0cmlidXRlcyk7CiAKICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KLSAgICBwc2FfZGVzdHJveV9rZXkoaGFuZGxlKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoa2V5KTsKIAogICAgIG1iZWR0bHNfcHNhX2NyeXB0b19mcmVlKCk7CiB9CkBAIC0xODgsNyArMTg4LDcgQEAKIAogKipQcmVyZXF1aXNpdGVzIHRvIHdvcmtpbmcgd2l0aCB0aGUgc3ltbWV0cmljIGNpcGhlciBBUEk6KioKICogSW5pdGlhbGl6ZSB0aGUgbGlicmFyeSB3aXRoIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIGBwc2FfY3J5cHRvX2luaXQoKWAuCi0qIEhhdmUgYSBoYW5kbGUgdG8gYSBzeW1tZXRyaWMga2V5LiBUaGlzIGtleSdzIHVzYWdlIGZsYWdzIG11c3QgaW5jbHVkZSBgUFNBX0tFWV9VU0FHRV9FTkNSWVBUYCB0byBhbGxvdyBlbmNyeXB0aW9uIG9yIGBQU0FfS0VZX1VTQUdFX0RFQ1JZUFRgIHRvIGFsbG93IGRlY3J5cHRpb24uCisqIEhhdmUgYSBzeW1tZXRyaWMga2V5LiBUaGlzIGtleSdzIHVzYWdlIGZsYWdzIG11c3QgaW5jbHVkZSBgUFNBX0tFWV9VU0FHRV9FTkNSWVBUYCB0byBhbGxvdyBlbmNyeXB0aW9uIG9yIGBQU0FfS0VZX1VTQUdFX0RFQ1JZUFRgIHRvIGFsbG93IGRlY3J5cHRpb24uCiAKICoqVG8gZW5jcnlwdCBhIG1lc3NhZ2Ugd2l0aCBhIHN5bW1ldHJpYyBjaXBoZXI6KioKIDEuIEFsbG9jYXRlIGFuIG9wZXJhdGlvbiAoYHBzYV9jaXBoZXJfb3BlcmF0aW9uX3RgKSBzdHJ1Y3R1cmUgdG8gcGFzcyB0byB0aGUgY2lwaGVyIGZ1bmN0aW9ucy4KQEAgLTIxMyw3ICsyMTMsNyBAQAogICAgIHNpemVfdCBpdl9sZW47CiAgICAgdWludDhfdCBvdXRwdXRbYmxvY2tfc2l6ZV07CiAgICAgc2l6ZV90IG91dHB1dF9sZW47Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGU7CisgICAgcHNhX2tleV9pZF90IGtleTsKICAgICBwc2FfY2lwaGVyX29wZXJhdGlvbl90IG9wZXJhdGlvbiA9IFBTQV9DSVBIRVJfT1BFUkFUSU9OX0lOSVQ7CiAKICAgICBwcmludGYoIkVuY3J5cHQgd2l0aCBjaXBoZXIuLi5cdCIpOwpAQCAtMjMyLDcgKzIzMiw3IEBACiAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCZhdHRyaWJ1dGVzLCBhbGcpOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVFlQRV9BRVMpOwogICAgIHBzYV9zZXRfa2V5X2JpdHMoJmF0dHJpYnV0ZXMsIDEyOCk7Ci0gICAgc3RhdHVzID0gcHNhX2ltcG9ydF9rZXkoJmF0dHJpYnV0ZXMsIGtleSwga2V5X2xlbiwgJmhhbmRsZSk7CisgICAgc3RhdHVzID0gcHNhX2ltcG9ydF9rZXkoJmF0dHJpYnV0ZXMsIGtleSwga2V5X2xlbiwgJmtleSk7CiAgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykgewogICAgICAgICBwcmludGYoIkZhaWxlZCB0byBpbXBvcnQgYSBrZXlcbiIpOwogICAgICAgICByZXR1cm47CkBAIC0yNDAsNyArMjQwLDcgQEAKICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoJmF0dHJpYnV0ZXMpOwogCiAgICAgLyogRW5jcnlwdCB0aGUgcGxhaW50ZXh0ICovCi0gICAgc3RhdHVzID0gcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCZvcGVyYXRpb24sIGhhbmRsZSwgYWxnKTsKKyAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoJm9wZXJhdGlvbiwga2V5LCBhbGcpOwogICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpIHsKICAgICAgICAgcHJpbnRmKCJGYWlsZWQgdG8gYmVnaW4gY2lwaGVyIG9wZXJhdGlvblxuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTI2OCw3ICsyNjgsNyBAQAogICAgIHBzYV9jaXBoZXJfYWJvcnQoJm9wZXJhdGlvbik7CiAKICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KLSAgICBwc2FfZGVzdHJveV9rZXkoaGFuZGxlKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoa2V5KTsKIAogICAgIG1iZWR0bHNfcHNhX2NyeXB0b19mcmVlKCk7CiB9CkBAIC0yOTgsNyArMjk4LDcgQEAKICAgICB1aW50OF90IGl2W2Jsb2NrX3NpemVdID0gRU5DUllQVEVEX1dJVEhfSVY7CiAgICAgdWludDhfdCBvdXRwdXRbYmxvY2tfc2l6ZV07CiAgICAgc2l6ZV90IG91dHB1dF9sZW47Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGU7CisgICAgcHNhX2tleV9pZF90IGtleTsKIAogICAgIHByaW50ZigiRGVjcnlwdCB3aXRoIGNpcGhlci4uLlx0Iik7CiAgICAgZmZsdXNoKHN0ZG91dCk7CkBAIC0zMTYsNyArMzE2LDcgQEAKICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oJmF0dHJpYnV0ZXMsIGFsZyk7CiAgICAgcHNhX3NldF9rZXlfdHlwZSgmYXR0cmlidXRlcywgUFNBX0tFWV9UWVBFX0FFUyk7CiAgICAgcHNhX3NldF9rZXlfYml0cygmYXR0cmlidXRlcywgMTI4KTsKLSAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleSgmYXR0cmlidXRlcywga2V5LCBrZXlfbGVuLCAmaGFuZGxlKTsKKyAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleSgmYXR0cmlidXRlcywga2V5LCBrZXlfbGVuLCAma2V5KTsKICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKSB7CiAgICAgICAgIHByaW50ZigiRmFpbGVkIHRvIGltcG9ydCBhIGtleVxuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTMyNCw3ICszMjQsNyBAQAogICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcygmYXR0cmlidXRlcyk7CiAKICAgICAvKiBEZWNyeXB0IHRoZSBjaXBoZXJ0ZXh0ICovCi0gICAgc3RhdHVzID0gcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwKCZvcGVyYXRpb24sIGhhbmRsZSwgYWxnKTsKKyAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoJm9wZXJhdGlvbiwga2V5LCBhbGcpOwogICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpIHsKICAgICAgICAgcHJpbnRmKCJGYWlsZWQgdG8gYmVnaW4gY2lwaGVyIG9wZXJhdGlvblxuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTM1Miw3ICszNTIsNyBAQAogICAgIHBzYV9jaXBoZXJfYWJvcnQoJm9wZXJhdGlvbik7CiAKICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KLSAgICBwc2FfZGVzdHJveV9rZXkoaGFuZGxlKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoa2V5KTsKIAogICAgIG1iZWR0bHNfcHNhX2NyeXB0b19mcmVlKCk7CiB9CkBAIC01OTIsOCArNTkyLDggQEAKICAgICAgICAgUFNBX0tFWV9ERVJJVkFUSU9OX09QRVJBVElPTl9JTklUOwogICAgIHNpemVfdCBkZXJpdmVkX2JpdHMgPSAxMjg7CiAgICAgc2l6ZV90IGNhcGFjaXR5ID0gUFNBX0JJVFNfVE9fQllURVMoZGVyaXZlZF9iaXRzKTsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGJhc2Vfa2V5OwotICAgIHBzYV9rZXlfaGFuZGxlX3QgZGVyaXZlZF9rZXk7CisgICAgcHNhX2tleV9pZF90IGJhc2Vfa2V5OworICAgIHBzYV9rZXlfaWRfdCBkZXJpdmVkX2tleTsKIAogICAgIHByaW50ZigiRGVyaXZlIGEga2V5IChIS0RGKS4uLlx0Iik7CiAgICAgZmZsdXNoKHN0ZG91dCk7CkBAIC03MDIsNyArNzAyLDcgQEAKICAgICBzaXplX3Qgb3V0cHV0X2xlbmd0aCA9IDA7CiAgICAgc2l6ZV90IHRhZ19sZW5ndGggPSAxNjsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGU7CisgICAgcHNhX2tleV9pZF90IGtleTsKIAogICAgIHByaW50ZigiQXV0aGVudGljYXRlIGVuY3J5cHQuLi5cdCIpOwogICAgIGZmbHVzaChzdGRvdXQpOwpAQCAtNzI2LDExICs3MjYsMTEgQEAKICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oJmF0dHJpYnV0ZXMsIFBTQV9BTEdfQ0NNKTsKICAgICBwc2Ffc2V0X2tleV90eXBlKCZhdHRyaWJ1dGVzLCBQU0FfS0VZX1RZUEVfQUVTKTsKICAgICBwc2Ffc2V0X2tleV9iaXRzKCZhdHRyaWJ1dGVzLCAxMjgpOwotICAgIHN0YXR1cyA9IHBzYV9pbXBvcnRfa2V5KCZhdHRyaWJ1dGVzLCBrZXksIHNpemVvZihrZXkpLCAmaGFuZGxlKTsKKyAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleSgmYXR0cmlidXRlcywga2V5LCBzaXplb2Yoa2V5KSwgJmtleSk7CiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCZhdHRyaWJ1dGVzKTsKIAogICAgIC8qIEF1dGhlbnRpY2F0ZSBhbmQgZW5jcnlwdCAqLwotICAgIHN0YXR1cyA9IHBzYV9hZWFkX2VuY3J5cHQoaGFuZGxlLCBQU0FfQUxHX0NDTSwKKyAgICBzdGF0dXMgPSBwc2FfYWVhZF9lbmNyeXB0KGtleSwgUFNBX0FMR19DQ00sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25jZSwgc2l6ZW9mKG5vbmNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YSwgc2l6ZW9mKGFkZGl0aW9uYWxfZGF0YSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBzaXplb2YoaW5wdXRfZGF0YSksCkBAIC03NDcsNyArNzQ3LDcgQEAKICAgICBmcmVlKG91dHB1dF9kYXRhKTsKIAogICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLwotICAgIHBzYV9kZXN0cm95X2tleShoYW5kbGUpOworICAgIHBzYV9kZXN0cm95X2tleShrZXkpOwogCiAgICAgbWJlZHRsc19wc2FfY3J5cHRvX2ZyZWUoKTsKIGBgYApAQCAtNzU2LDcgKzc1Niw3IEBACiAKIGBgYEMKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwotICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGtleVtdID0geworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGtleV9kYXRhW10gPSB7CiAgICAgICAgIDB4QzAsIDB4QzEsIDB4QzIsIDB4QzMsIDB4QzQsIDB4QzUsIDB4QzYsIDB4QzcsCiAgICAgICAgIDB4QzgsIDB4QzksIDB4Q0EsIDB4Q0IsIDB4Q0MsIDB4Q0QsIDB4Q0UsIDB4Q0YgfTsKICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBub25jZVtdID0gewpAQCAtNzczLDcgKzc3Myw3IEBACiAgICAgc2l6ZV90IG91dHB1dF9zaXplID0gMDsKICAgICBzaXplX3Qgb3V0cHV0X2xlbmd0aCA9IDA7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlOworICAgIHBzYV9rZXlfaWRfdCBrZXk7CiAKICAgICBwcmludGYoIkF1dGhlbnRpY2F0ZSBkZWNyeXB0Li4uXHQiKTsKICAgICBmZmx1c2goc3Rkb3V0KTsKQEAgLTc5Nyw3ICs3OTcsNyBAQAogICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSgmYXR0cmlidXRlcywgUFNBX0FMR19DQ00pOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVFlQRV9BRVMpOwogICAgIHBzYV9zZXRfa2V5X2JpdHMoJmF0dHJpYnV0ZXMsIDEyOCk7Ci0gICAgc3RhdHVzID0gcHNhX2ltcG9ydF9rZXkoJmF0dHJpYnV0ZXMsIGtleSwgc2l6ZW9mKGtleSksICZoYW5kbGUpOworICAgIHN0YXR1cyA9IHBzYV9pbXBvcnRfa2V5KCZhdHRyaWJ1dGVzLCBrZXlfZGF0YSwgc2l6ZW9mKGtleV9kYXRhKSwgJmtleSk7CiAgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykgewogICAgICAgICBwcmludGYoIkZhaWxlZCB0byBpbXBvcnQgYSBrZXlcbiIpOwogICAgICAgICByZXR1cm47CkBAIC04MDUsNyArODA1LDcgQEAKICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoJmF0dHJpYnV0ZXMpOwogCiAgICAgLyogQXV0aGVudGljYXRlIGFuZCBkZWNyeXB0ICovCi0gICAgc3RhdHVzID0gcHNhX2FlYWRfZGVjcnlwdChoYW5kbGUsIFBTQV9BTEdfQ0NNLAorICAgIHN0YXR1cyA9IHBzYV9hZWFkX2RlY3J5cHQoa2V5LCBQU0FfQUxHX0NDTSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmNlLCBzaXplb2Yobm9uY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhLCBzaXplb2YoYWRkaXRpb25hbF9kYXRhKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIHNpemVvZihpbnB1dF9kYXRhKSwKQEAgLTgyMiw3ICs4MjIsNyBAQAogICAgIGZyZWUob3V0cHV0X2RhdGEpOwogCiAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCi0gICAgcHNhX2Rlc3Ryb3lfa2V5KGhhbmRsZSk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KGtleSk7CiAKICAgICBtYmVkdGxzX3BzYV9jcnlwdG9fZnJlZSgpOwogYGBgCkBAIC04NDgsNyArODQ4LDcgQEAKICAgICBzaXplX3QgZXhwb3J0ZWRfbGVuZ3RoID0gMDsKICAgICBzdGF0aWMgdWludDhfdCBleHBvcnRlZFtQU0FfS0VZX0VYUE9SVF9FQ0NfUFVCTElDX0tFWV9NQVhfU0laRShrZXlfYml0cyldOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZTsKKyAgICBwc2Ffa2V5X2lkX3Qga2V5OwogCiAgICAgcHJpbnRmKCJHZW5lcmF0ZSBhIGtleSBwYWlyLi4uXHQiKTsKICAgICBmZmx1c2goc3Rkb3V0KTsKQEAgLTg2NywxNCArODY3LDE0IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSgmYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgIFBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSkpOwogICAgIHBzYV9zZXRfa2V5X2JpdHMoJmF0dHJpYnV0ZXMsIGtleV9iaXRzKTsKLSAgICBzdGF0dXMgPSBwc2FfZ2VuZXJhdGVfa2V5KCZhdHRyaWJ1dGVzLCAmaGFuZGxlKTsKKyAgICBzdGF0dXMgPSBwc2FfZ2VuZXJhdGVfa2V5KCZhdHRyaWJ1dGVzLCAma2V5KTsKICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKSB7CiAgICAgICAgIHByaW50ZigiRmFpbGVkIHRvIGdlbmVyYXRlIGtleVxuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCZhdHRyaWJ1dGVzKTsKIAotICAgIHN0YXR1cyA9IHBzYV9leHBvcnRfcHVibGljX2tleShoYW5kbGUsIGV4cG9ydGVkLCBzaXplb2YoZXhwb3J0ZWQpLAorICAgIHN0YXR1cyA9IHBzYV9leHBvcnRfcHVibGljX2tleShrZXksIGV4cG9ydGVkLCBzaXplb2YoZXhwb3J0ZWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhwb3J0ZWRfbGVuZ3RoKTsKICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKSB7CiAgICAgICAgIHByaW50ZigiRmFpbGVkIHRvIGV4cG9ydCBwdWJsaWMga2V5ICVsZFxuIiwgc3RhdHVzKTsKQEAgLTg4NCw3ICs4ODQsNyBAQAogICAgIHByaW50ZigiRXhwb3J0ZWQgYSBwdWJsaWMga2V5XG4iKTsKIAogICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLwotICAgIHBzYV9kZXN0cm95X2tleShoYW5kbGUpOworICAgIHBzYV9kZXN0cm95X2tleShrZXkpOwogCiAgICAgbWJlZHRsc19wc2FfY3J5cHRvX2ZyZWUoKTsKIGBgYApkaWZmIC0tZ2l0IGEvZG9jcy9wcm9wb3NlZC9wc2EtY29uZGl0aW9uYWwtaW5jbHVzaW9uLWMubWQgYi9kb2NzL3Byb3Bvc2VkL3BzYS1jb25kaXRpb25hbC1pbmNsdXNpb24tYy5tZAppbmRleCAwODMwNmQyLi41MjEzOGIxIDEwMDY0NAotLS0gYS9kb2NzL3Byb3Bvc2VkL3BzYS1jb25kaXRpb25hbC1pbmNsdXNpb24tYy5tZAorKysgYi9kb2NzL3Byb3Bvc2VkL3BzYS1jb25kaXRpb25hbC1pbmNsdXNpb24tYy5tZApAQCAtNSw3ICs1LDcgQEAKIAogVGhpcyBpcyBjdXJyZW50bHkgYSBwcm9wb3NhbCBmb3IgTWJlZCBUTFMuIEl0IGlzIG5vdCBjdXJyZW50bHkgb24gdHJhY2sgZm9yIHN0YW5kYXJkaXphdGlvbiBpbiBQU0EuCiAKLVRpbWUtc3RhbXA6ICIyMDIwLzA5LzA3IDA4OjI3OjMyIEdNVCIKK1RpbWUtc3RhbXA6ICIyMDIwLzExLzI2IDA5OjMwOjUwIEdNVCIKIAogIyMgSW50cm9kdWN0aW9uCiAKQEAgLTUxLDI2ICs1MSwzNCBAQAogCiAjIyMgUFNBIENyeXB0byBjb25maWd1cmF0aW9uIGZpbGUKIAotVGhlIFBTQSBjcnlwdG8gY29uZmlndXJhdGlvbiBmaWxlIGBwc2EvY3J5cHRvX2NvbmZpZy5oYCBkZWZpbmVzIGEgc2VyaWVzIG9mIHN5bWJvbHMgb2YgdGhlIGZvcm0gYFBTQV9XQU5UX3h4eGAgd2hlcmUgYHh4eGAgLiBUaGUgc3ltYm9scyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgc2VjdGlvbiBb4oCcUFNBIENyeXB0byBjb25maWd1cmF0aW9uIHN5bWJvbHPigJ1dKCNwc2EtY3J5cHRvLWNvbmZpZ3VyYXRpb24tc3ltYm9scykgYmVsb3cuCitUaGUgUFNBIENyeXB0byBjb25maWd1cmF0aW9uIGZpbGUgYHBzYS9jcnlwdG9fY29uZmlnLmhgIGRlZmluZXMgYSBzZXJpZXMgb2Ygc3ltYm9scyBvZiB0aGUgZm9ybSBgUFNBX1dBTlRfeHh4YCB3aGVyZSBgeHh4YCBkZXNjcmliZXMgdGhlIGZlYXR1cmUgdGhhdCB0aGUgc3ltYm9sIGVuYWJsZXMuIFRoZSBzeW1ib2xzIGFyZSBkb2N1bWVudGVkIGluIHRoZSBzZWN0aW9uIFvigJxQU0EgQ3J5cHRvIGNvbmZpZ3VyYXRpb24gc3ltYm9sc+KAnV0oI3BzYS1jcnlwdG8tY29uZmlndXJhdGlvbi1zeW1ib2xzKSBiZWxvdy4KIAotVGhlIHN5bWJvbCBgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJR2AgaW4gYG1iZWR0bHMvY29uZmlnLmhgIGRldGVybWluZXMgd2hldGhlciBgcHNhL2NyeXB0b19jb25maWcuaGAuIGlzIHVzZWQuCitUaGUgc3ltYm9sIGBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHYCBpbiBgbWJlZHRscy9jb25maWcuaGAgZGV0ZXJtaW5lcyB3aGV0aGVyIGBwc2EvY3J5cHRvX2NvbmZpZy5oYCBpcyB1c2VkLgogCiAqIElmIGBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHYCBpcyB1bnNldCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYXQgbGVhc3QgaW4gTWJlZCBUTFMgMi54IHZlcnNpb25zLCB0aGluZ3MgYXJlIGFzIHRoZXkgYXJlIHRvZGF5OiB0aGUgUFNBIHN1YnN5c3RlbSBpbmNsdWRlcyBnZW5lcmljIGNvZGUgdW5jb25kaXRpb25hbGx5LCBhbmQgaW5jbHVkZXMgc3VwcG9ydCBmb3Igc3BlY2lmaWMgbWVjaGFuaXNtcyBjb25kaXRpb25hbGx5IGJhc2VkIG9uIHRoZSBleGlzdGluZyBgTUJFRFRMU194eHhfYCBzeW1ib2xzLgotKiBJZiBgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJR2AgaXMgc2V0LCB0aGUgbmVjZXNzYXJ5IHNvZnR3YXJlIGltcGxlbWVudGF0aW9ucyBvZiBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgYXJlIGluY2x1ZGVkIGJhc2VkIG9uIGJvdGggdGhlIGNvbnRlbnQgb2YgdGhlIFBTQSBjcnlwdG8gY29uZmlndXJhdGlvbiBmaWxlIGFuZCB0aGUgTWJlZCBUTFMgY29uZmlndXJhdGlvbiBmaWxlLiBGb3IgZXhhbXBsZSwgdGhlIGNvZGUgaW4gYGFlcy5jYCBpcyBlbmFibGVkIGlmIGVpdGhlciBgbWJlZHRscy9jb25maWcuaGAgY29udGFpbnMgYE1CRURUTFNfQUVTX0NgIG9yIGBwc2EvY3J5cHRvX2NvbmZpZy5oYCBjb250YWlucyBgUFNBX1dBTlRfS0VZX1RZUEVfQUVTYC4KKyogSWYgYE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUdgIGlzIHNldCwgdGhlIG5lY2Vzc2FyeSBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbnMgb2YgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG1zIGFyZSBpbmNsdWRlZCBiYXNlZCBvbiBib3RoIHRoZSBjb250ZW50IG9mIHRoZSBQU0EgQ3J5cHRvIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgdGhlIE1iZWQgVExTIGNvbmZpZ3VyYXRpb24gZmlsZS4gRm9yIGV4YW1wbGUsIHRoZSBjb2RlIGluIGBhZXMuY2AgaXMgZW5hYmxlZCBpZiBlaXRoZXIgYG1iZWR0bHMvY29uZmlnLmhgIGNvbnRhaW5zIGBNQkVEVExTX0FFU19DYCBvciBgcHNhL2NyeXB0b19jb25maWcuaGAgY29udGFpbnMgYFBTQV9XQU5UX0tFWV9UWVBFX0FFU2AuCiAKICMjIyBQU0EgQ3J5cHRvIGNvbmZpZ3VyYXRpb24gc3ltYm9scwogCiAjIyMjIENvbmZpZ3VyYXRpb24gc3ltYm9sIHN5bnRheAogCi1BIFBTQSBjcnlwdG8gY29uZmlndXJhdGlvbiBzeW1ib2wgaXMgYSBDIHByZXByb2Nlc3NvciBzeW1ib2wgd2hvc2UgbmFtZSBzdGFydHMgd2l0aCBgUFNBX1dBTlRfYC4KK0EgUFNBIENyeXB0byBjb25maWd1cmF0aW9uIHN5bWJvbCBpcyBhIEMgcHJlcHJvY2Vzc29yIHN5bWJvbCB3aG9zZSBuYW1lIHN0YXJ0cyB3aXRoIGBQU0FfV0FOVF9gLgogCiAqIElmIHRoZSBzeW1ib2wgaXMgbm90IGRlZmluZWQsIHRoZSBjb3JyZXNwb25kaW5nIGZlYXR1cmUgaXMgbm90IGluY2x1ZGVkLgogKiBJZiB0aGUgc3ltYm9sIGlzIGRlZmluZWQgdG8gYSBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB3aXRoIHRoZSB2YWx1ZSBgMWAsIHRoZSBjb3JyZXNwb25kaW5nIGZlYXR1cmUgaXMgaW5jbHVkZWQuCiAqIElmIHRoZSBzeW1ib2wgaXMgZGVmaW5lZCB3aXRoIGEgZGlmZmVyZW50IHZhbHVlLCB0aGUgYmVoYXZpb3IgaXMgY3VycmVudGx5IHVuZGVmaW5lZCBhbmQgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCiAKKyMjIyMgQ29uZmlndXJhdGlvbiBzeW1ib2wgdXNhZ2UKKworVGhlIHByZXNlbmNlIG9mIGEgc3ltYm9sIGBQU0FfV0FOVF94eHhgIGluIHRoZSBNYmVkIFRMUyBjb25maWd1cmF0aW9uIGRldGVybWluZXMgd2hldGhlciBhIGZlYXR1cmUgaXMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIFBTQSBBUEkuIFRoZXNlIHN5bWJvbHMgc2hvdWxkIGJlIHVzZWQgaW4gYW55IHBsYWNlIHRoYXQgcmVxdWlyZXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gdGhlIGF2YWlsYWJpbGl0eSBvZiBhIGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtIHRocm91Z2ggdGhlIFBTQSBBUEksIGluY2x1ZGluZzoKKworKiBJbiBNYmVkIFRMUyB0ZXN0IGNvZGUuCisqIEluIE1iZWQgVExTIGxpYnJhcnkgY29kZSB1c2luZyBgTUJFRFRMU19VU0VfUFNBX0NSWVBUT2AsIGZvciBleGFtcGxlIGluIFRMUyB0byBkZXRlcm1pbmUgd2hpY2ggY2lwaGVyIHN1aXRlcyB0byBlbmFibGUuCisqIEluIGFwcGxpY2F0aW9uIGNvZGUgdGhhdCBwcm92aWRlcyBhZGRpdGlvbmFsIGZlYXR1cmVzIGJhc2VkIG9uIGNyeXB0b2dyYXBoaWMgY2FwYWJpbGl0aWVzLCBmb3IgZXhhbXBsZSBhZGRpdGlvbmFsIGtleSBwYXJzaW5nIGFuZCBmb3JtYXR0aW5nIGZ1bmN0aW9ucywgb3IgY2lwaGVyIHN1aXRlIGF2YWlsYWJpbGl0eSBmb3IgbmV0d29yayBwcm90b2NvbHMuCisKICMjIyMgQ29uZmlndXJhdGlvbiBzeW1ib2wgc2VtYW50aWNzCiAKLUlmIGEgZmVhdHVyZSBpcyBub3QgcmVxdWVzdGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFBTQSBjcnlwdG8gY29uZmlndXJhdGlvbiBmaWxlLCBpdCBtYXkgc3RpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLCBlaXRoZXIgYmVjYXVzZSB0aGUgZmVhdHVyZSBoYXMgYmVlbiByZXF1ZXN0ZWQgaW4gc29tZSBvdGhlciB3YXksIG9yIGJlY2F1c2UgdGhlIGxpYnJhcnkgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZXhjbHVzaW9uIG9mIHRoaXMgZmVhdHVyZS4gTWJlZCBUTFMgc2hvdWxkIG1ha2UgYSBiZXN0IGVmZm9ydCB0byBzdXBwb3J0IHRoZSBleGNsdXNpb24gb2YgYWxsIGZlYXR1cmVzLCBidXQgaW4gc29tZSBjYXNlcyB0aGlzIG1heSBiZSBqdWRnZWQgdG9vIG11Y2ggZWZmb3J0IGZvciB0b28gbGl0dGxlIGJlbmVmaXQuCitJZiBhIGZlYXR1cmUgaXMgbm90IHJlcXVlc3RlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBQU0EgQ3J5cHRvIGNvbmZpZ3VyYXRpb24gZmlsZSwgaXQgbWF5IHN0aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBidWlsZCwgZWl0aGVyIGJlY2F1c2UgdGhlIGZlYXR1cmUgaGFzIGJlZW4gcmVxdWVzdGVkIGluIHNvbWUgb3RoZXIgd2F5LCBvciBiZWNhdXNlIHRoZSBsaWJyYXJ5IGRvZXMgbm90IHN1cHBvcnQgdGhlIGV4Y2x1c2lvbiBvZiB0aGlzIGZlYXR1cmUuIE1iZWQgVExTIHNob3VsZCBtYWtlIGEgYmVzdCBlZmZvcnQgdG8gc3VwcG9ydCB0aGUgZXhjbHVzaW9uIG9mIGFsbCBmZWF0dXJlcywgYnV0IGluIHNvbWUgY2FzZXMgdGhpcyBtYXkgYmUganVkZ2VkIHRvbyBtdWNoIGVmZm9ydCBmb3IgdG9vIGxpdHRsZSBiZW5lZml0LgogCiAjIyMjIENvbmZpZ3VyYXRpb24gc3ltYm9scyBmb3Iga2V5IHR5cGVzCiAKQEAgLTEwNyw5ICsxMTUsMzcgQEAKIAogIyMjIEFyY2hpdGVjdHVyZSBvZiBzeW1ib2wgZGVmaW5pdGlvbnMKIAotIyMjIyBEZWZpbml0aW9uIG9mIGludGVybmFsIGluY2x1c2lvbiBzeW1ib2xzCisjIyMjIE5ldy1zdHlsZSBkZWZpbml0aW9uIG9mIGNvbmZpZ3VyYXRpb24gc3ltYm9scwogCi1UaGUgaGVhZGVyIGZpbGUgYG1iZWR0bHMvY29uZmlnLmhgIG5lZWRzIHRvIGRlZmluZSBhbGwgdGhlIGBNQkVEVExTX3h4eF9DYCBjb25maWd1cmF0aW9uIHN5bWJvbHMsIGluY2x1ZGluZyB0aGUgb25lcyBkZWR1Y2VkIGZyb20gdGhlIFBTQSBjcnlwdG8gY29uZmlndXJhdGlvbi4gSXQgZG9lcyB0aGlzIGJ5IGluY2x1ZGluZyB0aGUgbmV3IGhlYWRlciBmaWxlICoqYG1iZWR0bHMvY29uZmlnX3BzYS5oYCoqLCB3aGljaCBkZWZpbmVzIHRoZSBgTUJFRFRMU19QU0FfQlVJTFRJTl94eHhgIHN5bWJvbHMgYW5kIGRlZHVjZXMgdGhlIGNvcnJlc3BvbmRpbmcgYE1CRURUTFNfeHh4X0NgIChhbmQgb3RoZXIpIHN5bWJvbHMuCitXaGVuIGBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHYCBpcyBzZXQsIHRoZSBoZWFkZXIgZmlsZSBgbWJlZHRscy9jb25maWcuaGAgbmVlZHMgdG8gZGVmaW5lIGFsbCB0aGUgYE1CRURUTFNfeHh4X0NgIGNvbmZpZ3VyYXRpb24gc3ltYm9scywgaW5jbHVkaW5nIHRoZSBvbmVzIGRlZHVjZWQgZnJvbSB0aGUgUFNBIENyeXB0byBjb25maWd1cmF0aW9uLiBJdCBkb2VzIHRoaXMgYnkgaW5jbHVkaW5nIHRoZSBuZXcgaGVhZGVyIGZpbGUgKipgbWJlZHRscy9jb25maWdfcHNhLmhgKiosIHdoaWNoIGRlZmluZXMgdGhlIGBNQkVEVExTX1BTQV9CVUlMVElOX3h4eGAgc3ltYm9scyBhbmQgZGVkdWNlcyB0aGUgY29ycmVzcG9uZGluZyBgTUJFRFRMU194eHhfQ2AgKGFuZCBvdGhlcikgc3ltYm9scy4KKworYG1iZWR0bHMvY29uZmlnX3BzYS5oYCBpbmNsdWRlcyBgcHNhL2NyeXB0b19jb25maWcuaGAsIHRoZSB1c2VyLWVkaXRhYmxlIGZpbGUgdGhhdCBkZWZpbmVzIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4KKworIyMjIyBPbGQtc3R5bGUgZGVmaW5pdGlvbiBvZiBjb25maWd1cmF0aW9uIHN5bWJvbHMKKworV2hlbiBgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJR2AgaXMgbm90IHNldCwgdGhlIGNvbmZpZ3VyYXRpb24gb2YgTWJlZCBUTFMgd29ya3MgYXMgYmVmb3JlLCBhbmQgdGhlIGluY2x1c2lvbiBvZiBub24tUFNBIGNvZGUgb25seSBkZXBlbmRzIG9uIGBNQkVEVExTX3h4eGAgc3ltYm9scyBkZWZpbmVkIChvciBub3QpIGluIGBtYmVkdGxzL2NvbmZpZy5oYC4gRnVydGhlcm1vcmUsIHRoZSBuZXcgaGVhZGVyIGZpbGUgKipgbWJlZHRscy9jb25maWdfcHNhLmhgKiogZGVkdWNlcyBQU0EgY29uZmlndXJhdGlvbiBzeW1ib2xzIChgUFNBX1dBTlRfeHh4YCwgYE1CRURUTFNfUFNBX0JVSUxUSU5feHh4YCkgZnJvbSBjbGFzc2ljIGNvbmZpZ3VyYXRpb24gc3ltYm9scyAoYE1CRURUTFNfeHh4YCkuCisKK1RoZSBgUFNBX1dBTlRfeHh4YCBkZWZpbml0aW9ucyBpbiBgbWJlZHRscy9jb25maWdfcHNhLmhgIGFyZSBuZWVkZWQgbm90IG9ubHkgdG8gYnVpbGQgdGhlIFBTQSBwYXJ0cyBvZiB0aGUgbGlicmFyeSwgYnV0IGFsc28gdG8gYnVpbGQgY29kZSB0aGF0IHVzZXMgdGhlc2UgcGFydHMuIFRoaXMgaW5jbHVkZXMgc3RydWN0dXJlIGRlZmluaXRpb25zIGluIGBwc2EvY3J5cHRvX3N0cnVjdC5oYCwgc2l6ZSBjYWxjdWxhdGlvbnMgaW4gYHBzYS9jcnlwdG9fc2l6ZXMuaGAsIGFuZCBhcHBsaWNhdGlvbiBjb2RlIHRoYXQncyBzcGVjaWZpYyB0byBhIGdpdmVuIGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtLiBJbiBNYmVkIFRMUyBpdHNlbGYsIGNvZGUgdW5kZXIgYE1CRURUTFNfVVNFX1BTQV9DUllQVE9gIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBndWFyZHMgaW4gdGVzdHMgYW5kIHNhbXBsZSBwcm9ncmFtcyBuZWVkIGBQU0FfV0FOVF94eHhgLgorCitTaW5jZSBzb21lIGV4aXN0aW5nIGFwcGxpY2F0aW9ucyB1c2UgYSBoYW5kd3JpdHRlbiBgbWJlZHRscy9jb25maWcuaGAgb3IgYW4gZWRpdGVkIGNvcHkgb2YgYG1iZWR0bHMvY29uZmlnLmhgIGZyb20gYW4gZWFybGllciB2ZXJzaW9uIG9mIE1iZWQgVExTLCBgbWJlZHRscy9jb25maWdfcHNhLmhgIG11c3QgYmUgaW5jbHVkZWQgdmlhIGFuIGFscmVhZHkgZXhpc3RpbmcgaGVhZGVyIHRoYXQgaXMgbm90IGBtYmVkdGxzL2NvbmZpZy5oYCwgc28gaXQgaXMgaW5jbHVkZWQgdmlhIGBwc2EvY3J5cHRvLmhgIChmb3IgZXhhbXBsZSBmcm9tIGBwc2EvY3J5cHRvX3BsYXRmb3JtLmhgKS4KKworIyMjIyBTdW1tYXJ5IG9mIGRlZmluaXRpb25zIG9mIGNvbmZpZ3VyYXRpb24gc3ltYm9scworCitXaGV0aGVyIGBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHYCBpcyBzZXQgb3Igbm90LCBgbWJlZHRscy9jb25maWdfcHNhLmhgIGluY2x1ZGVzIGBtYmVkdGxzL2NyeXB0b19kcml2ZXJzLmhgLCBhIGhlYWRlciBmaWxlIGdlbmVyYXRlZCBieSB0aGUgdHJhbnNwaWxhdGlvbiBvZiB0aGUgZHJpdmVyIGRlc2NyaXB0aW9ucy4gSXQgZGVmaW5lcyBgTUJFRFRMU19QU0FfQUNDRUxfeHh4YCBzeW1ib2xzIGFjY29yZGluZyB0byB0aGUgYXZhaWxhYmlsaXR5IG9mIHRyYW5zcGFyZW50IGRyaXZlcnMgd2l0aG91dCBmYWxsYmFjay4KKworVGhlIGZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHdoZXJlIHN5bWJvbHMgYXJlIGRlZmluZWQgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIG1vZGUuCisKKyogKFUpIGluZGljYXRlcyBhIHN5bWJvbCB0aGF0IGlzIGRlZmluZWQgYnkgdGhlIHVzZXIgKGFwcGxpY2F0aW9uKS4KKyogKEQpIGluZGljYXRlcyBhIHN5bWJvbCB0aGF0IGlzIGRlZHVjZWQgZnJvbSBvdGhlciBzeW1ib2xzIGJ5IGNvZGUgdGhhdCBzaGlwcyB3aXRoIE1iZWQgVExTLgorKiAoRykgaW5kaWNhdGVzIGEgc3ltYm9sIHRoYXQgaXMgZ2VuZXJhdGVkIGZyb20gZHJpdmVyIGRlc2NyaXB0aW9ucy4KKworfCBTeW1ib2xzICAgICAgICAgICAgICAgICAgIHwgV2l0aCBgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJR2AgfCBXaXRob3V0IGBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHYCB8Cit8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwKK3wgYE1CRURUTFNfeHh4X0NgICAgICAgICAgICB8IGBtYmVkdGxzL2NvbmZpZy5oYCAoVSkgb3IgICAgICAgIHwgYG1iZWR0bHMvY29uZmlnLmhgIChVKSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYG1iZWR0bHMvY29uZmlnX3BzYS5oYCAoRCkgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IGBQU0FfV0FOVF94eHhgICAgICAgICAgICAgfCBgcHNhL2NyeXB0b19jb25maWcuaGAgKFUpICAgICAgICB8IGBtYmVkdGxzL2NvbmZpZ19wc2EuaGAgKEQpICAgICAgICAgIHwKK3wgYE1CRURUTFNfUFNBX0JVSUxUSU5feHh4YCB8IGBtYmVkdGxzL2NvbmZpZ19wc2EuaGAgKEQpICAgICAgIHwgYG1iZWR0bHMvY29uZmlnX3BzYS5oYCAoRCkgICAgICAgICAgfAorfCBgTUJFRFRMU19QU0FfQUNDRUxfeHh4YCAgIHwgYG1iZWR0bHMvY3J5cHRvX2RyaXZlcnMuaGAgKEcpICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAKICMjIyMgVmlzaWJpbGl0eSBvZiBpbnRlcm5hbCBzeW1ib2xzCiAKQEAgLTEyNyw3ICsxNjMsNyBAQAogCiBBIGxvdCBvZiB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbCBtYW5pcHVsYXRpb24gaXMgc3lzdGVtYXRpYyBjYWxjdWxhdGlvbnMgdGhhdCBhbmFseXplIHRoZSBjb25maWd1cmF0aW9uLiBgbWJlZHRscy9jb25maWdfcHNhLmhgIGFuZCBgbGlicmFyeS9wc2FfY2hlY2tfY29uZmlnLmhgIHNob3VsZCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSwgaW4gdGhlIHNhbWUgbWFubmVyIGFzIGB2ZXJzaW9uX2ZlYXR1cmVzLmNgLgogCi0jIyMgU3RydWN0dXJlIG9mIFBTQSBjcnlwdG8gbGlicmFyeSBjb2RlCisjIyMgU3RydWN0dXJlIG9mIFBTQSBDcnlwdG8gbGlicmFyeSBjb2RlCiAKICMjIyMgQ29uZGl0aW9uYWwgaW5jbHVzaW9uIG9mIGxpYnJhcnkgZW50cnkgcG9pbnRzCiAKZGlmZiAtLWdpdCBhL2RvY3MvcHJvcG9zZWQvcHNhLWRyaXZlci1kZXZlbG9wZXItZ3VpZGUubWQgYi9kb2NzL3Byb3Bvc2VkL3BzYS1kcml2ZXItZGV2ZWxvcGVyLWd1aWRlLm1kCmluZGV4IGMyMjFiYjIuLjcwY2I5ZDMgMTAwNjQ0Ci0tLSBhL2RvY3MvcHJvcG9zZWQvcHNhLWRyaXZlci1kZXZlbG9wZXItZ3VpZGUubWQKKysrIGIvZG9jcy9wcm9wb3NlZC9wc2EtZHJpdmVyLWRldmVsb3Blci1ndWlkZS5tZApAQCAtMzYsMTAgKzM2LDYgQEAKIAogTWJlZCBUTFMgY2FsbHMgZHJpdmVyIGVudHJ5IHBvaW50cyBbYXMgc3BlY2lmaWVkIGluIHRoZSBQU0EgQ3J5cHRvZ3JhcGh5IERyaXZlciBJbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbl0ocHNhLWRyaXZlci1pbnRlcmZhY2UuaHRtbCNkcml2ZXItZW50cnktcG9pbnRzKSBleGNlcHQgYXMgb3RoZXJ3aXNlIGluZGljYXRlZCBpbiB0aGlzIHNlY3Rpb24uCiAKLSMjIyBLZXkgaGFuZGxlcwotCi1NYmVkIFRMUyBjdXJyZW50bHkgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlIGZvciBvcGVuaW5nIGFuZCBjbG9zaW5nIHBlcnNpc3RlbnQga2V5cyBmcm9tIHZlcnNpb24gMS4wIGJldGHCoDMgb2YgdGhlIFBTQSBDcnlwdG8gc3BlY2lmaWNhdGlvbi4gQXMgYSBjb25zZXF1ZW5jZSwgZnVuY3Rpb25zIHRoYXQgb3BlcmF0ZSBvbiBhbiBleGlzdGluZyBrZXkgdGFrZSBhbiBhcmd1bWVudCBvZiB0eXBlIGBwc2Ffa2V5X2hhbmRsZV90YCBpbnN0ZWFkIG9mIGBwc2Ffa2V5X2lkX3RgLiBGdW5jdGlvbnMgdGhhdCBjcmVhdGUgYSBuZXcga2V5IHRha2UgYW4gYXJndW1lbnQgb2YgdHlwZSBgcHNhX2tleV9oYW5kbGVfdCAqYCBpbnN0ZWFkIG9mIGBwc2Ffa2V5X2lkX3QgKmAuCi0KICMjIEJ1aWxkaW5nIGFuZCB0ZXN0aW5nIHlvdXIgZHJpdmVyCiAKIDwhLS0gVE9ETyAtLT4KZGlmZiAtLWdpdCBhL2RvY3MvcHJvcG9zZWQvcHNhLWRyaXZlci1pbnRlcmZhY2UubWQgYi9kb2NzL3Byb3Bvc2VkL3BzYS1kcml2ZXItaW50ZXJmYWNlLm1kCmluZGV4IDJlMDYxZTUuLmQ4MjU3OTQgMTAwNjQ0Ci0tLSBhL2RvY3MvcHJvcG9zZWQvcHNhLWRyaXZlci1pbnRlcmZhY2UubWQKKysrIGIvZG9jcy9wcm9wb3NlZC9wc2EtZHJpdmVyLWludGVyZmFjZS5tZApAQCAtNjY2LDggKzY2Niw4IEBACiBwc2Ffc2V0X2tleV9zaXplKCZhdHRyaWJ1dGVzLCAxMjgpOwogcHNhX3NldF9rZXlfYWxnb3JpdGhtKCZhdHRyaWJ1dGVzLCBQU0FfQUxHX0dDTSk7CiBwc2Ffc2V0X2tleV91c2FnZV9mbGFncygmYXR0cmlidXRlcywgUFNBX0tFWV9VU0FHRV9FTkNSWVBUIHwgUFNBX0tFWV9VU0FHRV9ERUNSWVBUKTsKLXBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKLXBzYV9nZW5lcmF0ZV9rZXkoJmF0dHJpYnV0ZXMsICZoYW5kbGUpOworcHNhX2tleV9pZF90IGtleTsKK3BzYV9nZW5lcmF0ZV9rZXkoJmF0dHJpYnV0ZXMsICZrZXkpOwogYGBgCiAKICMjIFVzaW5nIG9wYXF1ZSBkcml2ZXJzIGZyb20gYW4gYXBwbGljYXRpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWJlZHRscy9jaGVja19jb25maWcuaCBiL2luY2x1ZGUvbWJlZHRscy9jaGVja19jb25maWcuaAppbmRleCAxMjBjMWQzLi4xZWJiNzA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL21iZWR0bHMvY2hlY2tfY29uZmlnLmgKKysrIGIvaW5jbHVkZS9tYmVkdGxzL2NoZWNrX2NvbmZpZy5oCkBAIC02MDksNiArNjA5LDExIEBACiAjZXJyb3IgIk1CRURUTFNfUFNBX0lUU19GSUxFX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKICNlbmRpZgogCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfVVNFX1BTQV9DUllQVE8pCisjZXJyb3IgIk1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUiBkZWZpbmVkLCBidXQgaXQgY2Fubm90IGNvZXhpc3Qgd2l0aCBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPLiIKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKSAmJiAoICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICAgICAgICAgXAogICAgICFkZWZpbmVkKE1CRURUTFNfT0lEX0MpICkKICNlcnJvciAiTUJFRFRMU19SU0FfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgpAQCAtODcxLDYgKzg3NiwxMCBAQAogI2VuZGlmIC8qIE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVEICovCiAjZW5kaWYgLyogTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMICovCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkgJiYgKCAhZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKSApCisjZXJyb3IgIk1CRURUTFNfU1NMX0RUTFNfU1JUUCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKIC8qCiAgKiBBdm9pZCB3YXJuaW5nIGZyb20gLXBlZGFudGljLiBUaGlzIGlzIGEgY29udmVuaWVudCBwbGFjZSBmb3IgdGhpcwogICogd29ya2Fyb3VuZCBzaW5jZSB0aGlzIGlzIGluY2x1ZGVkIGJ5IGV2ZXJ5IHNpbmdsZSBmaWxlIGJlZm9yZSB0aGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWJlZHRscy9jaXBoZXJfaW50ZXJuYWwuaCBiL2luY2x1ZGUvbWJlZHRscy9jaXBoZXJfaW50ZXJuYWwuaAppbmRleCBkMjgzMTA4Li4yNDg0YzAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL21iZWR0bHMvY2lwaGVyX2ludGVybmFsLmgKKysrIGIvaW5jbHVkZS9tYmVkdGxzL2NpcGhlcl9pbnRlcm5hbC5oCkBAIC0xMzQsNyArMTM0LDcgQEAKIHR5cGVkZWYgc3RydWN0CiB7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZzsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IHNsb3Q7CisgICAgcHNhX2tleV9pZF90IHNsb3Q7CiAgICAgbWJlZHRsc19jaXBoZXJfcHNhX2tleV9vd25lcnNoaXAgc2xvdF9zdGF0ZTsKIH0gbWJlZHRsc19jaXBoZXJfY29udGV4dF9wc2E7CiAjZW5kaWYgLyogTUJFRFRMU19VU0VfUFNBX0NSWVBUTyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oIGIvaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oCmluZGV4IGI3N2IzNGIuLjQ2NGI2MWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWJlZHRscy9jb25maWcuaAorKysgYi9pbmNsdWRlL21iZWR0bHMvY29uZmlnLmgKQEAgLTg2NCw3ICs4NjQsNyBAQAogICogbWF5IHJlc3VsdCBpbiBhIGNvbXByb21pc2Ugb2YgdGhlIGxvbmctdGVybSBzaWduaW5nIGtleS4gVGhpcyBpcyBhdm9pZGVkIGJ5CiAgKiB0aGUgZGV0ZXJtaW5pc3RpYyB2YXJpYW50LgogICoKLSAqIFJlcXVpcmVzOiBNQkVEVExTX0hNQUNfRFJCR19DCisgKiBSZXF1aXJlczogTUJFRFRMU19ITUFDX0RSQkdfQywgTUJFRFRMU19FQ0RTQV9DCiAgKgogICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgZGV0ZXJtaW5pc3RpYyBFQ0RTQS4KICAqLwpAQCAtMTI2Niw3ICsxMjY2LDcgQEAKICAqIHdoaWNoIGlzIGN1cnJlbnRseSBoYXJkLWNvZGVkIHRvIGJlIGludDMyX3QuCiAgKgogICogTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGlzIG1lYW50IGZvciBpbnRlcm5hbCB1c2Ugb25seSBhbmQgbWF5IGJlIHJlbW92ZWQKLSAqIHdpdGhvdXQgbm90aWNlLgorICogd2l0aG91dCBub3RpY2UuIEl0IGlzIGluY29tcGF0aWJsZSB3aXRoIE1CRURUTFNfVVNFX1BTQV9DUllQVE8uCiAgKi8KIC8vI2RlZmluZSBNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIKIApAQCAtMTMzMCw3ICsxMzMwLDcgQEAKICAqCiAgKiBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIGV4cGVyaW1lbnRhbCBQU0EgY3J5cHRvIGRyaXZlciBpbnRlcmZhY2UuCiAgKgotICogUmVxdWlyZXM6IE1CRURUTFNfUFNBX0NSWVBUT19DLgorICogUmVxdWlyZXM6IE1CRURUTFNfUFNBX0NSWVBUT19DCiAgKgogICogXHdhcm5pbmcgVGhpcyBpbnRlcmZhY2UgaXMgZXhwZXJpbWVudGFsIGFuZCBtYXkgY2hhbmdlIG9yIGJlIHJlbW92ZWQKICAqIHdpdGhvdXQgbm90aWNlLgpAQCAtMTgxMyw2ICsxODEzLDM3IEBACiAjZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCiAKIC8qKgorICogXGRlZiBNQkVEVExTX1NTTF9EVExTX1NSVFAKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgbmVnb3RhdGlvbiBvZiBEVExTLVNSVFAgKFJGQyA1NzY0KQorICogdGhyb3VnaCB0aGUgdXNlX3NydHAgZXh0ZW5zaW9uLgorICoKKyAqIFxub3RlIFRoaXMgZmVhdHVyZSBwcm92aWRlcyB0aGUgbWluaW11bSBmdW5jdGlvbmFsaXR5IHJlcXVpcmVkCisgKiB0byBuZWdvdGlhdGUgdGhlIHVzZSBvZiBEVExTLVNSVFAgYW5kIHRvIGFsbG93IHRoZSBkZXJpdmF0aW9uIG9mCisgKiB0aGUgYXNzb2NpYXRlZCBTUlRQIHBhY2tldCBwcm90ZWN0aW9uIGtleSBtYXRlcmlhbC4KKyAqIEluIHBhcnRpY3VsYXIsIHRoZSBTUlRQIHBhY2tldCBwcm90ZWN0aW9uIGl0c2VsZiwgYXMgd2VsbCBhcyB0aGUKKyAqIGRlbXVsdGlwbGV4aW5nIG9mIFJUUCBhbmQgRFRMUyBwYWNrZXRzIGF0IHRoZSBkYXRhZ3JhbSBsYXllcgorICogKHNlZSBTZWN0aW9uIDUgb2YgUkZDIDU3NjQpLCBhcmUgbm90IGhhbmRsZWQgYnkgdGhpcyBmZWF0dXJlLgorICogSW5zdGVhZCwgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGEgaGFuZHNoYWtlIG5lZ290aWF0aW5nCisgKiB0aGUgdXNlIG9mIERUTFMtU1JUUCwgdGhlIGV4dGVuZGVkIGtleSBleHBvcnRlciBBUEkKKyAqIG1iZWR0bHNfc3NsX2NvbmZfZXhwb3J0X2tleXNfZXh0X2NiKCkgc2hvdWxkIGJlIHVzZWQgdG8gaW1wbGVtZW50CisgKiB0aGUga2V5IGV4cG9ydGVyIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQuMiBvZiBSRkMgNTc2NCBhbmQgUkZDIDU3MDUKKyAqICh0aGlzIGlzIGltcGxlbWVudGVkIGluIHRoZSBTU0wgZXhhbXBsZSBwcm9ncmFtcykuCisgKiBUaGUgcmVzdWx0aW5nIGtleSBzaG91bGQgdGhlbiBiZSBwYXNzZWQgdG8gYW4gU1JUUCBzdGFjay4KKyAqCisgKiBTZXR0aW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHJ1bnRpbWUgQVBJCisgKiBtYmVkdGxzX3NzbF9jb25mX2R0bHNfc3J0cF9wcm90ZWN0aW9uX3Byb2ZpbGVzKCkKKyAqIHRocm91Z2ggd2hpY2ggdGhlIHN1cHBvcnRlZCBEVExTLVNSVFAgcHJvdGVjdGlvbgorICogcHJvZmlsZXMgY2FuIGJlIGNvbmZpZ3VyZWQuIFlvdSBtdXN0IGNhbGwgdGhpcyBBUEkgYXQKKyAqIHJ1bnRpbWUgaWYgeW91IHdpc2ggdG8gbmVnb3RpYXRlIHRoZSB1c2Ugb2YgRFRMUy1TUlRQLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9QUk9UT19EVExTCisgKgorICogVW5jb21tZW50IHRoaXMgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHVzZV9zcnRwIGV4dGVuc2lvbi4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorCisvKioKICAqIFxkZWYgTUJFRFRMU19TU0xfRFRMU19DTElFTlRfUE9SVF9SRVVTRQogICoKICAqIEVuYWJsZSBzZXJ2ZXItc2lkZSBzdXBwb3J0IGZvciBjbGllbnRzIHRoYXQgcmVjb25uZWN0IGZyb20gdGhlIHNhbWUgcG9ydC4KQEAgLTIwMjAsNiArMjA1MSwyNCBAQAogLy8jZGVmaW5lIE1CRURUTFNfVVNFX1BTQV9DUllQVE8KIAogLyoqCisgKiBcZGVmIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcKKyAqCisgKiBUaGlzIHNldHRpbmcgYWxsb3dzIHN1cHBvcnQgZm9yIGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtcyB0aHJvdWdoIHRoZSBQU0EKKyAqIEFQSSB0byBiZSBjb25maWd1cmVkIHNlcGFyYXRlbHkgZnJvbSBzdXBwb3J0IHRocm91Z2ggdGhlIG1iZWR0bHMgQVBJLgorICoKKyAqIFVuY29tbWVudCB0aGlzIHRvIGVuYWJsZSB1c2Ugb2YgUFNBIENyeXB0byBjb25maWd1cmF0aW9uIHNldHRpbmdzIHdoaWNoCisgKiBjYW4gYmUgZm91bmQgaW4gaW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oLgorICoKKyAqIElmIHlvdSBlbmFibGUgdGhpcyBvcHRpb24gYW5kIHdyaXRlIHlvdXIgb3duIGNvbmZpZ3VyYXRpb24gZmlsZSwgeW91IG11c3QKKyAqIGluY2x1ZGUgbWJlZHRscy9jb25maWdfcHNhLmggaW4geW91ciBjb25maWd1cmF0aW9uIGZpbGUuIFRoZSBkZWZhdWx0CisgKiBwcm92aWRlZCBtYmVkdGxzL2NvbmZpZy5oIGNvbnRhaW5zIHRoZSBuZWNlc3NhcnkgaW5jbHVzaW9uLgorICoKKyAqIFRoaXMgZmVhdHVyZSBpcyBzdGlsbCBleHBlcmltZW50YWwgYW5kIGlzIG5vdCByZWFkeSBmb3IgcHJvZHVjdGlvbiBzaW5jZQorICogaXQgaXMgbm90IGNvbXBsZXRlZC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcKKworLyoqCiAgKiBcZGVmIE1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUwogICoKICAqIEFsbG93IHJ1bi10aW1lIGNoZWNraW5nIG9mIGNvbXBpbGUtdGltZSBlbmFibGVkIGZlYXR1cmVzLiBUaHVzIGFsbG93aW5nIHVzZXJzCkBAIC0zODExLDYgKzM4NjAsMTAgQEAKICNpbmNsdWRlIE1CRURUTFNfVVNFUl9DT05GSUdfRklMRQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWdfcHNhLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIm1iZWR0bHMvY2hlY2tfY29uZmlnLmgiCiAKICNlbmRpZiAvKiBNQkVEVExTX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21iZWR0bHMvY29uZmlnX3BzYS5oIGIvaW5jbHVkZS9tYmVkdGxzL2NvbmZpZ19wc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2YxYWE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tYmVkdGxzL2NvbmZpZ19wc2EuaApAQCAtMCwwICsxLDIzMyBAQAorLyoqCisgKiBcZmlsZSBtYmVkdGxzL2NvbmZpZ19wc2EuaAorICogXGJyaWVmIFBTQSBjcnlwdG8gY29uZmlndXJhdGlvbiBvcHRpb25zIChzZXQgb2YgZGVmaW5lcykKKyAqCisgKiAgVGhpcyBzZXQgb2YgY29tcGlsZS10aW1lIG9wdGlvbnMgdGFrZXMgc2V0dGluZ3MgZGVmaW5lZCBpbgorICogIGluY2x1ZGUvbWJlZHRscy9jb25maWcuaCBhbmQgaW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oIGFuZCB1c2VzCisgKiAgdGhvc2UgZGVmaW5pdGlvbnMgdG8gZGVmaW5lIHN5bWJvbHMgdXNlZCBpbiB0aGUgbGlicmFyeSBjb2RlLgorICoKKyAqICBVc2VycyBhbmQgaW50ZWdyYXRvcnMgc2hvdWxkIG5vdCBlZGl0IHRoaXMgZmlsZSwgcGxlYXNlIGVkaXQKKyAqICBpbmNsdWRlL21iZWR0bHMvY29uZmlnLmggZm9yIE1CRVRMU19YWFggc2V0dGluZ3Mgb3IKKyAqICBpbmNsdWRlL3BzYS9jcnlwdG9fY29uZmlnLmggZm9yIFBTQV9XQU5UX1hYWCBzZXR0aW5ncy4KKyAqLworLyoKKyAqICBDb3B5cmlnaHQgVGhlIE1iZWQgVExTIENvbnRyaWJ1dG9ycworICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIE1CRURUTFNfQ09ORklHX1BTQV9ICisjZGVmaW5lIE1CRURUTFNfQ09ORklHX1BTQV9ICisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcpCisjaW5jbHVkZSAicHNhL2NyeXB0b19jb25maWcuaCIKKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcpICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRykKKworI2lmIGRlZmluZWQoUFNBX1dBTlRfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EpCisjaWYgIWRlZmluZWQoTUJFRFRMU19QU0FfQUNDRUxfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EpCisjZGVmaW5lIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDCisjZGVmaW5lIE1CRURUTFNfRUNEU0FfQworI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19DCisjZGVmaW5lIE1CRURUTFNfTURfQworI2VuZGlmIC8qICFNQkVEVExTX1BTQV9BQ0NFTF9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSAqLworI2VuZGlmIC8qIFBTQV9XQU5UX0FMR19ERVRFUk1JTklTVElDX0VDRFNBICovCisKKyNpZiBkZWZpbmVkKFBTQV9XQU5UX0FMR19FQ0RIKQorI2lmICFkZWZpbmVkKE1CRURUTFNfUFNBX0FDQ0VMX0FMR19FQ0RIKQorI2RlZmluZSBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19FQ0RIICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1CRURUTFNfRUNESF9DCisjZGVmaW5lIE1CRURUTFNfRUNQX0MKKyNkZWZpbmUgTUJFRFRMU19CSUdOVU1fQworI2VuZGlmIC8qICFNQkVEVExTX1BTQV9BQ0NFTF9BTEdfRUNESCAqLworI2VuZGlmIC8qIFBTQV9XQU5UX0FMR19FQ0RIICovCisKKyNpZiBkZWZpbmVkKFBTQV9XQU5UX0FMR19FQ0RTQSkKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BTQV9BQ0NFTF9BTEdfRUNEU0EpCisjZGVmaW5lIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0VDRFNBICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19FQ0RTQV9DCisjZW5kaWYgLyogIU1CRURUTFNfUFNBX0FDQ0VMX0FMR19FQ0RTQSAqLworI2VuZGlmIC8qIFBTQV9XQU5UX0FMR19FQ0RTQSAqLworCisjaWYgZGVmaW5lZChQU0FfV0FOVF9BTEdfSEtERikKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BTQV9BQ0NFTF9BTEdfSEtERikKKyNkZWZpbmUgTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfSE1BQyAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19IS0RGICAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYgLyogIU1CRURUTFNfUFNBX0FDQ0VMX0FMR19IS0RGICovCisjZW5kaWYgLyogUFNBX1dBTlRfQUxHX0hLREYgKi8KKworI2lmIGRlZmluZWQoUFNBX1dBTlRfQUxHX0hNQUMpCisjaWYgIWRlZmluZWQoTUJFRFRMU19QU0FfQUNDRUxfQUxHX0hNQUMpCisjZGVmaW5lIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0hNQUMgICAgICAgICAgICAgICAgICAgIDEKKyNlbmRpZiAvKiAhTUJFRFRMU19QU0FfQUNDRUxfQUxHX0hNQUMgKi8KKyNlbmRpZiAvKiBQU0FfV0FOVF9BTEdfSE1BQyAqLworCisjaWYgZGVmaW5lZChQU0FfV0FOVF9BTEdfUlNBX09BRVApCisjaWYgIWRlZmluZWQoTUJFRFRMU19QU0FfQUNDRUxfQUxHX1JTQV9PQUVQKQorI2RlZmluZSBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfT0FFUCAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1CRURUTFNfUlNBX0MKKyNkZWZpbmUgTUJFRFRMU19CSUdOVU1fQworI2RlZmluZSBNQkVEVExTX09JRF9DCisjZGVmaW5lIE1CRURUTFNfUEtDUzFfVjIxCisjZGVmaW5lIE1CRURUTFNfTURfQworI2VuZGlmIC8qICFNQkVEVExTX1BTQV9BQ0NFTF9BTEdfUlNBX09BRVAgKi8KKyNlbmRpZiAvKiBQU0FfV0FOVF9BTEdfUlNBX09BRVAgKi8KKworI2lmIGRlZmluZWQoUFNBX1dBTlRfQUxHX1JTQV9QS0NTMVYxNV9DUllQVCkKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BTQV9BQ0NFTF9BTEdfUlNBX1BLQ1MxVjE1X0NSWVBUKQorI2RlZmluZSBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQgICAgICAxCisjZGVmaW5lIE1CRURUTFNfUlNBX0MKKyNkZWZpbmUgTUJFRFRMU19CSUdOVU1fQworI2RlZmluZSBNQkVEVExTX09JRF9DCisjZGVmaW5lIE1CRURUTFNfUEtDUzFfVjE1CisjZW5kaWYgLyogIU1CRURUTFNfUFNBX0FDQ0VMX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQgKi8KKyNlbmRpZiAvKiBQU0FfV0FOVF9BTEdfUlNBX1BLQ1MxVjE1X0NSWVBUICovCisKKyNpZiBkZWZpbmVkKFBTQV9XQU5UX0FMR19SU0FfUEtDUzFWMTVfU0lHTikKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BTQV9BQ0NFTF9BTEdfUlNBX1BLQ1MxVjE1X1NJR04pCisjZGVmaW5lIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QS0NTMVYxNV9TSUdOICAgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19SU0FfQworI2RlZmluZSBNQkVEVExTX0JJR05VTV9DCisjZGVmaW5lIE1CRURUTFNfT0lEX0MKKyNkZWZpbmUgTUJFRFRMU19QS0NTMV9WMTUKKyNkZWZpbmUgTUJFRFRMU19NRF9DCisjZW5kaWYgLyogIU1CRURUTFNfUFNBX0FDQ0VMX0FMR19SU0FfUEtDUzFWMTVfU0lHTiAqLworI2VuZGlmIC8qIFBTQV9XQU5UX0FMR19SU0FfUEtDUzFWMTVfU0lHTiAqLworCisjaWYgZGVmaW5lZChQU0FfV0FOVF9BTEdfUlNBX1BTUykKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BTQV9BQ0NFTF9BTEdfUlNBX1BTUykKKyNkZWZpbmUgTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfUlNBX1BTUyAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNQkVEVExTX1JTQV9DCisjZGVmaW5lIE1CRURUTFNfQklHTlVNX0MKKyNkZWZpbmUgTUJFRFRMU19PSURfQworI2RlZmluZSBNQkVEVExTX1BLQ1MxX1YyMQorI2RlZmluZSBNQkVEVExTX01EX0MKKyNlbmRpZiAvKiAhTUJFRFRMU19QU0FfQUNDRUxfQUxHX1JTQV9QU1MgKi8KKyNlbmRpZiAvKiBQU0FfV0FOVF9BTEdfUlNBX1BTUyAqLworCisjaWYgZGVmaW5lZChQU0FfV0FOVF9BTEdfVExTMTJfUFJGKQorI2lmICFkZWZpbmVkKE1CRURUTFNfUFNBX0FDQ0VMX0FMR19UTFMxMl9QUkYpCisjZGVmaW5lIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1RMUzEyX1BSRiAgICAgICAgICAgICAgIDEKKyNlbmRpZiAvKiAhTUJFRFRMU19QU0FfQUNDRUxfQUxHX1RMUzEyX1BSRiAqLworI2VuZGlmIC8qIFBTQV9XQU5UX0FMR19UTFMxMl9QUkYgKi8KKworI2lmIGRlZmluZWQoUFNBX1dBTlRfQUxHX1RMUzEyX1BTS19UT19NUykKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BTQV9BQ0NFTF9BTEdfVExTMTJfUFNLX1RPX01TKQorI2RlZmluZSBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19UTFMxMl9QU0tfVE9fTVMgICAgICAgICAxCisjZW5kaWYgLyogIU1CRURUTFNfUFNBX0FDQ0VMX0FMR19UTFMxMl9QU0tfVE9fTVMgKi8KKyNlbmRpZiAvKiBQU0FfV0FOVF9BTEdfVExTMTJfUFNLX1RPX01TICovCisKKyNpZiBkZWZpbmVkKFBTQV9XQU5UX0tFWV9UWVBFX0VDQ19LRVlfUEFJUikKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BTQV9BQ0NFTF9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIpCisjZGVmaW5lIE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfRUNDX0tFWV9QQUlSICAgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19FQ1BfQworI2RlZmluZSBNQkVEVExTX0JJR05VTV9DCisjZW5kaWYgLyogIU1CRURUTFNfUFNBX0FDQ0VMX0tFWV9UWVBFX0VDQ19LRVlfUEFJUiAqLworI2VuZGlmIC8qIFBTQV9XQU5UX0tFWV9UWVBFX0VDQ19LRVlfUEFJUiAqLworCisjaWYgZGVmaW5lZChQU0FfV0FOVF9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSkKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BTQV9BQ0NFTF9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSkKKyNkZWZpbmUgTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSAgICAgMQorI2RlZmluZSBNQkVEVExTX0VDUF9DCisjZGVmaW5lIE1CRURUTFNfQklHTlVNX0MKKyNlbmRpZiAvKiAhTUJFRFRMU19QU0FfQUNDRUxfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVkgKi8KKyNlbmRpZiAvKiBQU0FfV0FOVF9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSAqLworCisjaWYgZGVmaW5lZChQU0FfV0FOVF9LRVlfVFlQRV9SU0FfS0VZX1BBSVIpCisjaWYgIWRlZmluZWQoTUJFRFRMU19QU0FfQUNDRUxfS0VZX1RZUEVfUlNBX0tFWV9QQUlSKQorI2RlZmluZSBNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX1JTQV9LRVlfUEFJUiAgICAgICAxCisjZGVmaW5lIE1CRURUTFNfUlNBX0MKKyNkZWZpbmUgTUJFRFRMU19CSUdOVU1fQworI2RlZmluZSBNQkVEVExTX09JRF9DCisjZGVmaW5lIE1CRURUTFNfR0VOUFJJTUUKKyNkZWZpbmUgTUJFRFRMU19QS19QQVJTRV9DCisjZGVmaW5lIE1CRURUTFNfUEtfV1JJVEVfQworI2RlZmluZSBNQkVEVExTX1BLX0MKKyNlbmRpZiAvKiAhTUJFRFRMU19QU0FfQUNDRUxfS0VZX1RZUEVfUlNBX0tFWV9QQUlSICovCisjZW5kaWYgLyogUFNBX1dBTlRfS0VZX1RZUEVfUlNBX0tFWV9QQUlSICovCisKKyNpZiBkZWZpbmVkKFBTQV9XQU5UX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZKQorI2lmICFkZWZpbmVkKE1CRURUTFNfUFNBX0FDQ0VMX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZKQorI2RlZmluZSBNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZICAgICAxCisjZGVmaW5lIE1CRURUTFNfUlNBX0MKKyNkZWZpbmUgTUJFRFRMU19CSUdOVU1fQworI2RlZmluZSBNQkVEVExTX09JRF9DCisjZGVmaW5lIE1CRURUTFNfUEtfUEFSU0VfQworI2RlZmluZSBNQkVEVExTX1BLX1dSSVRFX0MKKyNkZWZpbmUgTUJFRFRMU19QS19DCisjZW5kaWYgLyogIU1CRURUTFNfUFNBX0FDQ0VMX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZICovCisjZW5kaWYgLyogUFNBX1dBTlRfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVkgKi8KKworI2Vsc2UgLyogTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRyAqLworCisvKgorICogRW5zdXJlIFBTQV9XQU5UXyogZGVmaW5lcyBhcmUgc2V0dXAgcHJvcGVybHkgaWYgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRworICogaXMgbm90IGRlZmluZWQKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpCisjZGVmaW5lIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0VDREggICAgICAgICAgICAgICAgICAgIDEKKyNlbmRpZiAvKiBNQkVEVExTX0VDREhfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisjZGVmaW5lIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0VDRFNBICAgICAgICAgICAgICAgICAgIDEKKworLy8gT25seSBhZGQgaW4gREVURVJNSU5JU1RJQyBzdXBwb3J0IGlmIEVDRFNBIGlzIGFsc28gZW5hYmxlZAorI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDKQorI2RlZmluZSBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19ERVRFUk1JTklTVElDX0VDRFNBICAgICAxCisjZW5kaWYgLyogTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyNkZWZpbmUgTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIgICAgICAgMQorI2RlZmluZSBNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZICAgICAxCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0hLREZfQykKKyNkZWZpbmUgTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfSE1BQyAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19IS0RGICAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYgLyogTUJFRFRMU19IS0RGX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19NRF9DKQorI2RlZmluZSBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19ITUFDICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1RMUzEyX1BSRiAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfVExTMTJfUFNLX1RPX01TICAgICAgICAgMQorI2VuZGlmIC8qIE1CRURUTFNfTURfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpCisjZGVmaW5lIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QS0NTMVYxNV9DUllQVCAgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfUlNBX1BLQ1MxVjE1X1NJR04gICAgICAgMQorI2VuZGlmIC8qIE1CRURUTFNTX1BLQ1MxX1YxNSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMjEpCisjZGVmaW5lIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9PQUVQICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfUlNBX1BTUyAgICAgICAgICAgICAgICAgMQorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzFfVjIxICovCisjZGVmaW5lIE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfUlNBX0tFWV9QQUlSICAgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSAgICAgMQorI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1CRURUTFNfQ09ORklHX1BTQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21iZWR0bHMvcGsuaCBiL2luY2x1ZGUvbWJlZHRscy9way5oCmluZGV4IDIyZmFiMTMuLjdkMGY5NzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWJlZHRscy9way5oCisrKyBiL2luY2x1ZGUvbWJlZHRscy9way5oCkBAIC0zMzEsMTIgKzMzMSwxMyBAQAogICoKICAqIFxyZXR1cm4gICAgICAgICAgXGMgMCBvbiBzdWNjZXNzLgogICogXHJldHVybiAgICAgICAgICAjTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEgb24gaW52YWxpZCBpbnB1dAotICogICAgICAgICAgICAgICAgICAoY29udGV4dCBhbHJlYWR5IHVzZWQsIGludmFsaWQga2V5IGhhbmRsZSkuCisgKiAgICAgICAgICAgICAgICAgIChjb250ZXh0IGFscmVhZHkgdXNlZCwgaW52YWxpZCBrZXkgaWRlbnRpZmllcikuCiAgKiBccmV0dXJuICAgICAgICAgICNNQkVEVExTX0VSUl9QS19GRUFUVVJFX1VOQVZBSUxBQkxFIGlmIHRoZSBrZXkgaXMgbm90IGFuCiAgKiAgICAgICAgICAgICAgICAgIEVDQyBrZXkgcGFpci4KICAqIFxyZXR1cm4gICAgICAgICAgI01CRURUTFNfRVJSX1BLX0FMTE9DX0ZBSUxFRCBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCiAgKi8KLWludCBtYmVkdGxzX3BrX3NldHVwX29wYXF1ZSggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsIGNvbnN0IHBzYV9rZXlfaGFuZGxlX3Qga2V5ICk7CitpbnQgbWJlZHRsc19wa19zZXR1cF9vcGFxdWUoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwc2Ffa2V5X2lkX3Qga2V5ICk7CiAjZW5kaWYgLyogTUJFRFRMU19VU0VfUFNBX0NSWVBUTyAqLwogCiAjaWYgZGVmaW5lZChNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCkKQEAgLTg1OCw5ICs4NTksOSBAQAogICoKICAqIFxwYXJhbSBwayAgICAgICAgSW5wdXQ6IHRoZSBFQyBrZXkgdG8gaW1wb3J0IHRvIGEgUFNBIGtleS4KICAqICAgICAgICAgICAgICAgICAgT3V0cHV0OiBhIFBLIGNvbnRleHQgd3JhcHBpbmcgdGhhdCBQU0Ega2V5LgotICogXHBhcmFtIGhhbmRsZSAgICBPdXRwdXQ6IGEgUFNBIGtleSBoYW5kbGUuCisgKiBccGFyYW0ga2V5ICAgICAgIE91dHB1dDogYSBQU0Ega2V5IGlkZW50aWZpZXIuCiAgKiAgICAgICAgICAgICAgICAgIEl0J3MgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNhbGwKLSAqICAgICAgICAgICAgICAgICAgcHNhX2Rlc3Ryb3lfa2V5KCkgb24gdGhhdCBoYW5kbGUgYWZ0ZXIgY2FsbGluZworICogICAgICAgICAgICAgICAgICBwc2FfZGVzdHJveV9rZXkoKSBvbiB0aGF0IGtleSBpZGVudGlmaWVyIGFmdGVyIGNhbGxpbmcKICAqICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19mcmVlKCkgb24gdGhlIFBLIGNvbnRleHQuCiAgKiBccGFyYW0gaGFzaF9hbGcgIFRoZSBoYXNoIGFsZ29yaXRobSB0byBhbGxvdyBmb3IgdXNlIHdpdGggdGhhdCBrZXkuCiAgKgpAQCAtODY4LDcgKzg2OSw3IEBACiAgKiBccmV0dXJuICAgICAgICAgIEFuIE1iZWQgVExTIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgogICovCiBpbnQgbWJlZHRsc19wa193cmFwX2FzX29wYXF1ZSggbWJlZHRsc19wa19jb250ZXh0ICpwaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9pZF90ICprZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGhhc2hfYWxnICk7CiAjZW5kaWYgLyogTUJFRFRMU19VU0VfUFNBX0NSWVBUTyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21iZWR0bHMvc2hhNTEyLmggYi9pbmNsdWRlL21iZWR0bHMvc2hhNTEyLmgKaW5kZXggOTAzNmVkNC4uNGE4YWI0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tYmVkdGxzL3NoYTUxMi5oCisrKyBiL2luY2x1ZGUvbWJlZHRscy9zaGE1MTIuaApAQCAtMTMxLDggKzEzMSw3IEBACiAKIC8qKgogICogXGJyaWVmICAgICAgICAgIFRoaXMgZnVuY3Rpb24gZmluaXNoZXMgdGhlIFNIQS01MTIgb3BlcmF0aW9uLCBhbmQgd3JpdGVzCi0gKiAgICAgICAgICAgICAgICAgdGhlIHJlc3VsdCB0byB0aGUgb3V0cHV0IGJ1ZmZlci4gVGhpcyBmdW5jdGlvbiBpcyBmb3IKLSAqICAgICAgICAgICAgICAgICBpbnRlcm5hbCB1c2Ugb25seS4KKyAqICAgICAgICAgICAgICAgICB0aGUgcmVzdWx0IHRvIHRoZSBvdXRwdXQgYnVmZmVyLgogICoKICAqIFxwYXJhbSBjdHggICAgICBUaGUgU0hBLTUxMiBjb250ZXh0LiBUaGlzIG11c3QgYmUgaW5pdGlhbGl6ZWQKICAqICAgICAgICAgICAgICAgICBhbmQgaGF2ZSBhIGhhc2ggb3BlcmF0aW9uIHN0YXJ0ZWQuCkBAIC0xNDgsNiArMTQ3LDcgQEAKIC8qKgogICogXGJyaWVmICAgICAgICAgIFRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIGEgc2luZ2xlIGRhdGEgYmxvY2sgd2l0aGluCiAgKiAgICAgICAgICAgICAgICAgdGhlIG9uZ29pbmcgU0hBLTUxMiBjb21wdXRhdGlvbi4KKyAqICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seS4KICAqCiAgKiBccGFyYW0gY3R4ICAgICAgVGhlIFNIQS01MTIgY29udGV4dC4gVGhpcyBtdXN0IGJlIGluaXRpYWxpemVkLgogICogXHBhcmFtIGRhdGEgICAgIFRoZSBidWZmZXIgaG9sZGluZyBvbmUgYmxvY2sgb2YgZGF0YS4gVGhpcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tYmVkdGxzL3NzbC5oIGIvaW5jbHVkZS9tYmVkdGxzL3NzbC5oCmluZGV4IGEwOTEyNjEuLjc4MTVhZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWJlZHRscy9zc2wuaAorKysgYi9pbmNsdWRlL21iZWR0bHMvc3NsLmgKQEAgLTQyLDcgKzQyLDEyIEBACiAjaW5jbHVkZSAibWJlZHRscy9kaG0uaCIKICNlbmRpZgogCi0jaWYgZGVmaW5lZChNQkVEVExTX0VDREhfQykKKy8qIEFkZGluZyBndWFyZCBmb3IgTUJFRFRMU19FQ0RTQV9DIHRvIGVuc3VyZSBubyBjb21waWxlIGVycm9ycyBkdWUKKyAqIHRvIGd1YXJkcyBhbHNvIGJlaW5nIGluIHNzbF9zcnYuYyBhbmQgc3NsX2NsaS5jLiBUaGVyZSBpcyBhIGdhcAorICogaW4gZnVuY3Rpb25hbGl0eSB0aGF0IGFjY2VzcyB0byBlY2RoX2N0eCBzdHJ1Y3R1cmUgaXMgbmVlZGVkIGZvcgorICogTUJFRFRMU19FQ0RTQV9DIHdoaWNoIGRvZXMgbm90IHNlZW0gY29ycmVjdC4KKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQogI2luY2x1ZGUgIm1iZWR0bHMvZWNkaC5oIgogI2VuZGlmCiAKQEAgLTIxNCw2ICsyMTksOSBAQAogI2RlZmluZSBNQkVEVExTX1NTTF9DRVJUX1JFUV9DQV9MSVNUX0VOQUJMRUQgICAgICAgMQogI2RlZmluZSBNQkVEVExTX1NTTF9DRVJUX1JFUV9DQV9MSVNUX0RJU0FCTEVEICAgICAgMAogCisjZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfU1JUUF9NS0lfVU5TVVBQT1JURUQgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9EVExTX1NSVFBfTUtJX1NVUFBPUlRFRCAgICAgIDEKKwogLyoKICAqIERlZmF1bHQgcmFuZ2UgZm9yIERUTFMgcmV0cmFuc21pc3Npb24gdGltZXIgdmFsdWUsIGluIG1pbGxpc2Vjb25kcy4KICAqIFJGQyA2MzQ3IDQuMi40LjEgc2F5cyBmcm9tIDEgc2Vjb25kIHRvIDYwIHNlY29uZHMuCkBAIC0zOTMsNiArNDAxLDggQEAKIAogI2RlZmluZSBNQkVEVExTX1RMU19FWFRfU0lHX0FMRyAgICAgICAgICAgICAgICAgICAgIDEzCiAKKyNkZWZpbmUgTUJFRFRMU19UTFNfRVhUX1VTRV9TUlRQICAgICAgICAgICAgICAgICAgICAxNAorCiAjZGVmaW5lIE1CRURUTFNfVExTX0VYVF9BTFBOICAgICAgICAgICAgICAgICAgICAgICAgMTYKIAogI2RlZmluZSBNQkVEVExTX1RMU19FWFRfRU5DUllQVF9USEVOX01BQyAgICAgICAgICAgIDIyIC8qIDB4MTYgKi8KQEAgLTg1MSw2ICs4NjEsNDEgQEAKICNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9XSVRIX0NFUlRfRU5BQkxFRCAmJgogICAgICAgICAgICFNQkVEVExTX1NTTF9LRUVQX1BFRVJfQ0VSVElGSUNBVEUgKi8KIAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19TUlRQKQorCisjZGVmaW5lIE1CRURUTFNfVExTX1NSVFBfTUFYX01LSV9MRU5HVEggICAgICAgICAgICAgMjU1CisjZGVmaW5lIE1CRURUTFNfVExTX1NSVFBfTUFYX1BST0ZJTEVfTElTVF9MRU5HVEggICAgNAorLyoKKyAqIEZvciBjb2RlIHJlYWRhYmlsaXR5IHVzZSBhIHR5cGVkZWYgZm9yIERUTFMtU1JUUCBwcm9maWxlcworICoKKyAqIFVzZV9zcnRwIGV4dGVuc2lvbiBwcm90ZWN0aW9uIHByb2ZpbGVzIHZhbHVlcyBhcyBkZWZpbmVkIGluCisgKiBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3NydHAtcHJvdGVjdGlvbi9zcnRwLXByb3RlY3Rpb24ueGh0bWwKKyAqCisgKiBSZW1pbmRlcjogaWYgdGhpcyBsaXN0IGlzIGV4cGFuZGVkIG1iZWR0bHNfc3NsX2NoZWNrX3NydHBfcHJvZmlsZV92YWx1ZQorICogbXVzdCBiZSB1cGRhdGVkIHRvby4KKyAqLworI2RlZmluZSBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODAgICAgICggKHVpbnQxNl90KSAweDAwMDEpCisjZGVmaW5lIE1CRURUTFNfVExTX1NSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiAgICAgKCAodWludDE2X3QpIDB4MDAwMikKKyNkZWZpbmUgTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV84MCAgICAgICAgICAoICh1aW50MTZfdCkgMHgwMDA1KQorI2RlZmluZSBNQkVEVExTX1RMU19TUlRQX05VTExfSE1BQ19TSEExXzMyICAgICAgICAgICggKHVpbnQxNl90KSAweDAwMDYpCisvKiBUaGlzIG9uZSBpcyBub3QgaWFuYSBkZWZpbmVkLCBidXQgZm9yIGNvZGUgcmVhZGFiaWxpdHkuICovCisjZGVmaW5lIE1CRURUTFNfVExTX1NSVFBfVU5TRVQgICAgICAgICAgICAgICAgICAgICAgKCAodWludDE2X3QpIDB4MDAwMCkKKwordHlwZWRlZiB1aW50MTZfdCBtYmVkdGxzX3NzbF9zcnRwX3Byb2ZpbGU7CisKK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfZHRsc19zcnRwX2luZm9fdAoreworICAgIC8qISBUaGUgU1JUUCBwcm9maWxlIHRoYXQgd2FzIG5lZ290aWF0ZWQuICovCisgICAgbWJlZHRsc19zc2xfc3J0cF9wcm9maWxlIGNob3Nlbl9kdGxzX3NydHBfcHJvZmlsZTsKKyAgICAvKiEgVGhlIGxlbmd0aCBvZiBta2lfdmFsdWUuICovCisgICAgdWludDE2X3QgbWtpX2xlbjsKKyAgICAvKiEgVGhlIG1raV92YWx1ZSB1c2VkLCB3aXRoIG1heCBzaXplIG9mIDI1NiBieXRlcy4gKi8KKyAgICB1bnNpZ25lZCBjaGFyIG1raV92YWx1ZVtNQkVEVExTX1RMU19TUlRQX01BWF9NS0lfTEVOR1RIXTsKK30KK21iZWR0bHNfZHRsc19zcnRwX2luZm87CisKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKwogLyoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIHN0b3JpbmcgY3VycmVudCBzZXNzaW9uIGRhdGEuCiAgKgpAQCAtMTAyMywxMSArMTA2OCwxMiBAQAogI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfU09NRV9QU0tfRU5BQkxFRCkKIAogI2lmIGRlZmluZWQoTUJFRFRMU19VU0VfUFNBX0NSWVBUTykKLSAgICBwc2Ffa2V5X2hhbmRsZV90IHBza19vcGFxdWU7IC8qITwgUFNBIGtleSBzbG90IGhvbGRpbmcgb3BhcXVlIFBTSy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgVGhpcyBmaWVsZCBzaG91bGQgb25seSBiZSBzZXQgdmlhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIG1iZWR0bHNfc3NsX2NvbmZfcHNrX29wYXF1ZSgpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBJZiBlaXRoZXIgbm8gUFNLIG9yIGEgcmF3IFBTSyBoYXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGJlZW4gY29uZmlndXJlZCwgdGhpcyBoYXMgdmFsdWUgXGMgMC4gKi8KKyAgICBwc2Ffa2V5X2lkX3QgcHNrX29wYXF1ZTsgLyohPCBQU0Ega2V5IHNsb3QgaG9sZGluZyBvcGFxdWUgUFNLLiBUaGlzIGZpZWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgc2hvdWxkIG9ubHkgYmUgc2V0IHZpYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIG1iZWR0bHNfc3NsX2NvbmZfcHNrX29wYXF1ZSgpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIElmIGVpdGhlciBubyBQU0sgb3IgYSByYXcgUFNLIGhhdmUgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGNvbmZpZ3VyZWQsIHRoaXMgaGFzIHZhbHVlIFxjIDAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2VuZGlmIC8qIE1CRURUTFNfVVNFX1BTQV9DUllQVE8gKi8KIAogICAgIHVuc2lnbmVkIGNoYXIgKnBzazsgICAgICAvKiE8IFRoZSByYXcgcHJlLXNoYXJlZCBrZXkuIFRoaXMgZmllbGQgc2hvdWxkCkBAIC0xMDU3LDYgKzExMDMsMTMgQEAKICAgICBjb25zdCBjaGFyICoqYWxwbl9saXN0OyAgICAgICAgIC8qITwgb3JkZXJlZCBsaXN0IG9mIHByb3RvY29scyAgICAgICAgICAqLwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKKyAgICAvKiEgb3JkZXJlZCBsaXN0IG9mIHN1cHBvcnRlZCBzcnRwIHByb2ZpbGUgKi8KKyAgICBjb25zdCBtYmVkdGxzX3NzbF9zcnRwX3Byb2ZpbGUgKmR0bHNfc3J0cF9wcm9maWxlX2xpc3Q7CisgICAgLyohIG51bWJlciBvZiBzdXBwb3J0ZWQgcHJvZmlsZXMgKi8KKyAgICBzaXplX3QgZHRsc19zcnRwX3Byb2ZpbGVfbGlzdF9sZW47CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisKICAgICAvKgogICAgICAqIE51bWVyaWNhbCBzZXR0aW5ncyAoaW50IHRoZW4gY2hhcikKICAgICAgKi8KQEAgLTExMzcsOSArMTE5MCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHJlY29yZCB3aXRoIHVuZXhwZWN0ZWQgQ0lECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgc2hvdWxkIGxlYWQgdG8gZmFpbHVyZS4gICAgKi8KICNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0NPTk5FQ1RJT05fSUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKKyAgICB1bnNpZ25lZCBpbnQgZHRsc19zcnRwX21raV9zdXBwb3J0IDogMTsgLyogc3VwcG9ydCBoYXZpbmcgbWtpX3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSB1c2Vfc3J0cCBleHRlbnNpb24gICAgICovCisjZW5kaWYKIH07CiAKLQogc3RydWN0IG1iZWR0bHNfc3NsX2NvbnRleHQKIHsKICAgICBjb25zdCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmY7IC8qITwgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiAgICAgICAgICAqLwpAQCAtMTI5OCw2ICsxMzU0LDEzIEBACiAgICAgY29uc3QgY2hhciAqYWxwbl9jaG9zZW47ICAgIC8qITwgIG5lZ290aWF0ZWQgcHJvdG9jb2wgICAgICAgICAgICAgICAgICAgKi8KICNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKKyAgICAvKgorICAgICAqIHVzZV9zcnRwIGV4dGVuc2lvbgorICAgICAqLworICAgIG1iZWR0bHNfZHRsc19zcnRwX2luZm8gZHRsc19zcnRwX2luZm87CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisKICAgICAvKgogICAgICAqIEluZm9ybWF0aW9uIGZvciBEVExTIGhlbGxvIHZlcmlmeQogICAgICAqLwpAQCAtMjAzMiw2ICsyMDk1LDggQEAKICAqICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IG5vbmUuKQogICoKICAqIFxub3RlICAgICAgICAgICAgU2VlIFxjIG1iZWR0bHNfc3NsX2V4cG9ydF9rZXlzX2V4dF90LgorICogXHdhcm5pbmcgICAgICAgICBFeHBvcnRlZCBrZXkgbWF0ZXJpYWwgbXVzdCBub3QgYmUgdXNlZCBmb3IgYW55IHB1cnBvc2UKKyAqICAgICAgICAgICAgICAgICAgYmVmb3JlIHRoZSAoRClUTFMgaGFuZHNoYWtlIGlzIGNvbXBsZXRlZAogICoKICAqIFxwYXJhbSBjb25mICAgICAgU1NMIGNvbmZpZ3VyYXRpb24gY29udGV4dAogICogXHBhcmFtIGZfZXhwb3J0X2tleXNfZXh0IENhbGxiYWNrIGZvciBleHBvcnRpbmcga2V5cwpAQCAtMjc1NSw3ICsyODIwLDcgQEAKICAqIFxyZXR1cm4gICAgICAgICBBbiBcYyBNQkVEVExTX0VSUl9TU0xfWFhYIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwogaW50IG1iZWR0bHNfc3NsX2NvbmZfcHNrX29wYXF1ZSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9oYW5kbGVfdCBwc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2lkX3QgcHNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHNrX2lkZW50aXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBza19pZGVudGl0eV9sZW4gKTsKICNlbmRpZiAvKiBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPICovCkBAIC0yODAxLDcgKzI4NjYsNyBAQAogICogXHJldHVybiAgICAgICAgIEFuIFxjIE1CRURUTFNfRVJSX1NTTF9YWFggZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCiBpbnQgbWJlZHRsc19zc2xfc2V0X2hzX3Bza19vcGFxdWUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9oYW5kbGVfdCBwc2sgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9pZF90IHBzayApOwogI2VuZGlmIC8qIE1CRURUTFNfVVNFX1BTQV9DUllQVE8gKi8KIAogLyoqCkBAIC0zMTIwLDYgKzMxODUsMTA1IEBACiBjb25zdCBjaGFyICptYmVkdGxzX3NzbF9nZXRfYWxwbl9wcm90b2NvbCggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CiAjZW5kaWYgLyogTUJFRFRMU19TU0xfQUxQTiAqLwogCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApCisjaWYgZGVmaW5lZChNQkVEVExTX0RFQlVHX0MpCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKm1iZWR0bHNfc3NsX2dldF9zcnRwX3Byb2ZpbGVfYXNfc3RyaW5nKCBtYmVkdGxzX3NzbF9zcnRwX3Byb2ZpbGUgcHJvZmlsZSApCit7CisgICAgc3dpdGNoKCBwcm9maWxlICkKKyAgICB7CisgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwOgorICAgICAgICAgICAgcmV0dXJuKCAiTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwIiApOworICAgICAgICBjYXNlIE1CRURUTFNfVExTX1NSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMjoKKyAgICAgICAgICAgIHJldHVybiggIk1CRURUTFNfVExTX1NSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiIgKTsKKyAgICAgICAgY2FzZSBNQkVEVExTX1RMU19TUlRQX05VTExfSE1BQ19TSEExXzgwOgorICAgICAgICAgICAgcmV0dXJuKCAiTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV84MCIgKTsKKyAgICAgICAgY2FzZSBNQkVEVExTX1RMU19TUlRQX05VTExfSE1BQ19TSEExXzMyOgorICAgICAgICAgICAgcmV0dXJuKCAiTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV8zMiIgKTsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAgIHJldHVybiggIiIgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0RFQlVHX0MgKi8KKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgICAgIE1hbmFnZSBzdXBwb3J0IGZvciBta2kobWFzdGVyIGtleSBpZCkgdmFsdWUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB1c2Vfc3J0cCBleHRlbnNpb24uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgTUtJIGlzIGFuIG9wdGlvbmFsIHBhcnQgb2YgU1JUUCB1c2VkIGZvciBrZXkgbWFuYWdlbWVudAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCByZS1rZXlpbmcuIFNlZSBSRkMzNzExIHNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgI01CRURUTFNfU1NMX0RUTFNfU1JUUF9NS0lfVU5TVVBQT1JURUQuCisgKgorICogXHBhcmFtIGNvbmYgICAgICAgICAgICAgIFRoZSBTU0wgY29uZmlndXJhdGlvbiB0byBtYW5hZ2UgbWtpIHN1cHBvcnQuCisgKiBccGFyYW0gc3VwcG9ydF9ta2lfdmFsdWUgRW5hYmxlIG9yIGRpc2FibGUgbWtpIHVzYWdlLiBWYWx1ZXMgYXJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgI01CRURUTFNfU1NMX0RUTFNfU1JUUF9NS0lfVU5TVVBQT1JURUQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBvciAjTUJFRFRMU19TU0xfRFRMU19TUlRQX01LSV9TVVBQT1JURUQuCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9zcnRwX21raV92YWx1ZV9zdXBwb3J0ZWQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdXBwb3J0X21raV92YWx1ZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHN1cHBvcnRlZCBEVExTLVNSVFAgcHJvdGVjdGlvbiBwcm9maWxlcy4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgICAgICAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBwcm9maWxlcyAgICAgICAgICBQb2ludGVyIHRvIGEgTGlzdCBvZiBNQkVEVExTX1RMU19TUlRQX1VOU0VUIHRlcm1pbmF0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgcHJvdGVjdGlvbiBwcm9maWxlcworICogICAgICAgICAgICAgICAgICAgICAgICAgIGluIGRlY3JlYXNpbmcgcHJlZmVyZW5jZSBvcmRlci4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcG9pbnRlciB0byB0aGUgbGlzdCBpcyByZWNvcmRlZCBieSB0aGUgbGlicmFyeQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBsYXRlciByZWZlcmVuY2UgYXMgcmVxdWlyZWQsIHNvIHRoZSBsaWZldGltZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSB0YWJsZSBtdXN0IGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMgdGhlIGxpZmV0aW1lCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIFNTTCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBtdXN0IG5vdCBob2xkIG1vcmUgdGhhbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfVExTX1NSVFBfTUFYX1BST0ZJTEVfTElTVF9MRU5HVEggZWxlbWVudHMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhjbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBNQkVEVExTX1RMU19TUlRQX1VOU0VUKS4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAgICAgMCBvbiBzdWNjZXNzCisgKiBccmV0dXJuICAgICAgICAgICAgICAgICAgI01CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSB3aGVuIHRoZSBsaXN0IG9mCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGlvbiBwcm9maWxlcyBpcyBpbmNvcnJlY3QuCisgKi8KK2ludCBtYmVkdGxzX3NzbF9jb25mX2R0bHNfc3J0cF9wcm90ZWN0aW9uX3Byb2ZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NzbF9zcnRwX3Byb2ZpbGUgKnByb2ZpbGVzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgICAgU2V0IHRoZSBta2lfdmFsdWUgZm9yIHRoZSBjdXJyZW50IERUTFMtU1JUUCBzZXNzaW9uLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICAgICAgICAgIFNTTCBjb250ZXh0IHRvIHVzZS4KKyAqIFxwYXJhbSBta2lfdmFsdWUgICAgICAgIFRoZSBNS0kgdmFsdWUgdG8gc2V0LgorICogXHBhcmFtIG1raV9sZW4gICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgTUtJIHZhbHVlLgorICoKKyAqIFxub3RlICAgICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVsZXZhbnQgb24gY2xpZW50IHNpZGUgb25seS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzZXJ2ZXIgZGlzY292ZXJzIHRoZSBta2kgdmFsdWUgZHVyaW5nIGhhbmRzaGFrZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIEEgbWtpIHZhbHVlIHNldCBvbiBzZXJ2ZXIgc2lkZSB1c2luZyB0aGlzIGZ1bmN0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBpcyBpZ25vcmVkLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgICAgIDAgb24gc3VjY2VzcworICogXHJldHVybiAgICAgICAgICAgICAgICAgI01CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQQorICogXHJldHVybiAgICAgICAgICAgICAgICAgI01CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFCisgKi8KK2ludCBtYmVkdGxzX3NzbF9kdGxzX3NydHBfc2V0X21raV92YWx1ZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpta2lfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IG1raV9sZW4gKTsKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgICAgR2V0IHRoZSBuZWdvdGlhdGVkIERUTFMtU1JUUCBpbmZvcm1hdGlvbnM6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICBQcm90ZWN0aW9uIHByb2ZpbGUgYW5kIE1LSSB2YWx1ZS4KKyAqCisgKiBcd2FybmluZyAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBoYW5kc2hha2UgaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZC4gVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdAorICogICAgICAgICAgICAgICAgICAgICAgICAgbm90IGJlIHRydXN0ZWQgb3IgYWN0ZWQgdXBvbiBiZWZvcmUgdGhlIGhhbmRzaGFrZSBjb21wbGV0ZXMuCisgKgorICogXHBhcmFtIHNzbCAgICAgICAgICAgICAgVGhlIFNTTCBjb250ZXh0IHRvIHF1ZXJ5LgorICogXHBhcmFtIGR0bHNfc3J0cF9pbmZvICAgVGhlIG5lZ290aWF0ZWQgRFRMUy1TUlRQIGluZm9ybWF0aW9uczoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gUHJvdGVjdGlvbiBwcm9maWxlIGluIHVzZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIEEgZGlyZWN0IG1hcHBpbmcgb2YgdGhlIGlhbmEgZGVmaW5lZCB2YWx1ZSBmb3IgcHJvdGVjdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZSBvbiBhbiB1aW50MTZfdC4KKyAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3NydHAtcHJvdGVjdGlvbi9zcnRwLXByb3RlY3Rpb24ueGh0bWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICNNQkVEVExTX1RMU19TUlRQX1VOU0VUIGlmIHRoZSB1c2Ugb2YgU1JUUCB3YXMgbm90IG5lZ290aWF0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHBlZXIncyBIZWxsbyBwYWNrZXQgd2FzIG5vdCBwYXJzZWQgeWV0LgorICogICAgICAgICAgICAgICAgICAgICAgICAgLSBta2kgc2l6ZSBhbmQgdmFsdWUoIGlmIHNpemUgaXMgPiAwICkuCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfZ2V0X2R0bHNfc3J0cF9uZWdvdGlhdGlvbl9yZXN1bHQoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZHRsc19zcnRwX2luZm8gKmR0bHNfc3J0cF9pbmZvICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisKIC8qKgogICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgdmVyc2lvbiBzZW50IGZyb20gdGhlIGNsaWVudCBzaWRlCiAgKiAgICAgICAgICAgICAgICAgYW5kL29yIGFjY2VwdGVkIGF0IHRoZSBzZXJ2ZXIgc2lkZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tYmVkdGxzL3NzbF9pbnRlcm5hbC5oIGIvaW5jbHVkZS9tYmVkdGxzL3NzbF9pbnRlcm5hbC5oCmluZGV4IDdiNzhjNzMuLjU3N2M5NTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWJlZHRscy9zc2xfaW50ZXJuYWwuaAorKysgYi9pbmNsdWRlL21iZWR0bHMvc3NsX2ludGVybmFsLmgKQEAgLTQzNywxNyArNDM3LDIyIEBACiAjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKQogICAgIG1iZWR0bHNfZGhtX2NvbnRleHQgZGhtX2N0eDsgICAgICAgICAgICAgICAgLyohPCAgREhNIGtleSBleGNoYW5nZSAgICAgICAgKi8KICNlbmRpZgotI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpCisvKiBBZGRpbmcgZ3VhcmQgZm9yIE1CRURUTFNfRUNEU0FfQyB0byBlbnN1cmUgbm8gY29tcGlsZSBlcnJvcnMgZHVlCisgKiB0byBndWFyZHMgYWxzbyBiZWluZyBpbiBzc2xfc3J2LmMgYW5kIHNzbF9jbGkuYy4gVGhlcmUgaXMgYSBnYXAKKyAqIGluIGZ1bmN0aW9uYWxpdHkgdGhhdCBhY2Nlc3MgdG8gZWNkaF9jdHggc3RydWN0dXJlIGlzIG5lZWRlZCBmb3IKKyAqIE1CRURUTFNfRUNEU0FfQyB3aGljaCBkb2VzIG5vdCBzZWVtIGNvcnJlY3QuCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKICAgICBtYmVkdGxzX2VjZGhfY29udGV4dCBlY2RoX2N0eDsgICAgICAgICAgICAgIC8qITwgIEVDREgga2V5IGV4Y2hhbmdlICAgICAgICovCiAKICNpZiBkZWZpbmVkKE1CRURUTFNfVVNFX1BTQV9DUllQVE8pCiAgICAgcHNhX2tleV90eXBlX3QgZWNkaF9wc2FfdHlwZTsKICAgICB1aW50MTZfdCBlY2RoX2JpdHM7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBlY2RoX3BzYV9wcml2a2V5OworICAgIHBzYV9rZXlfaWRfdCBlY2RoX3BzYV9wcml2a2V5OwogICAgIHVuc2lnbmVkIGNoYXIgZWNkaF9wc2FfcGVlcmtleVtNQkVEVExTX1BTQV9NQVhfRUNfUFVCS0VZX0xFTkdUSF07CiAgICAgc2l6ZV90IGVjZGhfcHNhX3BlZXJrZXlfbGVuOwogI2VuZGlmIC8qIE1CRURUTFNfVVNFX1BTQV9DUllQVE8gKi8KLSNlbmRpZiAvKiBNQkVEVExTX0VDREhfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfRUNESF9DIHx8IE1CRURUTFNfRUNEU0FfQyAqLwogCiAjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCiAgICAgbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgZWNqcGFrZV9jdHg7ICAgICAgICAvKiE8IEVDIEotUEFLRSBrZXkgZXhjaGFuZ2UgKi8KQEAgLTQ2Miw3ICs0NjcsNyBAQAogI2VuZGlmCiAjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9TT01FX1BTS19FTkFCTEVEKQogI2lmIGRlZmluZWQoTUJFRFRMU19VU0VfUFNBX0NSWVBUTykKLSAgICBwc2Ffa2V5X2hhbmRsZV90IHBza19vcGFxdWU7ICAgICAgICAvKiE8IE9wYXF1ZSBQU0sgZnJvbSB0aGUgY2FsbGJhY2sgICAqLworICAgIHBzYV9rZXlfaWRfdCBwc2tfb3BhcXVlOyAgICAgICAgICAgIC8qITwgT3BhcXVlIFBTSyBmcm9tIHRoZSBjYWxsYmFjayAgICovCiAjZW5kaWYgLyogTUJFRFRMU19VU0VfUFNBX0NSWVBUTyAqLwogICAgIHVuc2lnbmVkIGNoYXIgKnBzazsgICAgICAgICAgICAgICAgIC8qITwgIFBTSyBmcm9tIHRoZSBjYWxsYmFjayAgICAgICAgICovCiAgICAgc2l6ZV90IHBza19sZW47ICAgICAgICAgICAgICAgICAgICAgLyohPCAgTGVuZ3RoIG9mIFBTSyBmcm9tIGNhbGxiYWNrICAgKi8KQEAgLTEwNjEsMTYgKzEwNjYsMTYgQEAKICAqIDIuIHN0YXRpYyBQU0sgY29uZmlndXJlZCBieSBcYyBtYmVkdGxzX3NzbF9jb25mX3Bza19vcGFxdWUoKQogICogUmV0dXJuIGFuIG9wYXF1ZSBQU0sKICAqLwotc3RhdGljIGlubGluZSBwc2Ffa2V5X2hhbmRsZV90IG1iZWR0bHNfc3NsX2dldF9vcGFxdWVfcHNrKAorc3RhdGljIGlubGluZSBwc2Ffa2V5X2lkX3QgbWJlZHRsc19zc2xfZ2V0X29wYXF1ZV9wc2soCiAgICAgY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKIHsKLSAgICBpZiggc3NsLT5oYW5kc2hha2UtPnBza19vcGFxdWUgIT0gMCApCisgICAgaWYoICEgbWJlZHRsc19zdmNfa2V5X2lkX2lzX251bGwoIHNzbC0+aGFuZHNoYWtlLT5wc2tfb3BhcXVlICkgKQogICAgICAgICByZXR1cm4oIHNzbC0+aGFuZHNoYWtlLT5wc2tfb3BhcXVlICk7CiAKLSAgICBpZiggc3NsLT5jb25mLT5wc2tfb3BhcXVlICE9IDAgKQorICAgIGlmKCAhIG1iZWR0bHNfc3ZjX2tleV9pZF9pc19udWxsKCBzc2wtPmNvbmYtPnBza19vcGFxdWUgKSApCiAgICAgICAgIHJldHVybiggc3NsLT5jb25mLT5wc2tfb3BhcXVlICk7CiAKLSAgICByZXR1cm4oIDAgKTsKKyAgICByZXR1cm4oIE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUICk7CiB9CiAjZW5kaWYgLyogTUJFRFRMU19VU0VfUFNBX0NSWVBUTyAqLwogCkBAIC0xMDk1LDYgKzExMDAsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWQgKTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApCitzdGF0aWMgaW5saW5lIG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSBtYmVkdGxzX3NzbF9jaGVja19zcnRwX3Byb2ZpbGVfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGNvbnN0IHVpbnQxNl90IHNydHBfcHJvZmlsZV92YWx1ZSApCit7CisgICAgc3dpdGNoKCBzcnRwX3Byb2ZpbGVfdmFsdWUgKQorICAgIHsKKyAgICAgICAgY2FzZSBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODA6CisgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyOgorICAgICAgICBjYXNlIE1CRURUTFNfVExTX1NSVFBfTlVMTF9ITUFDX1NIQTFfODA6CisgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV8zMjoKKyAgICAgICAgICAgIHJldHVybiBzcnRwX3Byb2ZpbGVfdmFsdWU7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4oIE1CRURUTFNfVExTX1NSVFBfVU5TRVQgKTsKK30KKyNlbmRpZgorCiAjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCiBzdGF0aWMgaW5saW5lIG1iZWR0bHNfcGtfY29udGV4dCAqbWJlZHRsc19zc2xfb3duX2tleSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHNhL2NyeXB0by5oIGIvaW5jbHVkZS9wc2EvY3J5cHRvLmgKaW5kZXggNWJhMTZiOS4uYjQxYTIwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wc2EvY3J5cHRvLmgKKysrIGIvaW5jbHVkZS9wc2EvY3J5cHRvLmgKQEAgLTM2LDE2ICszNiw2IEBACiAgKiBAewogICovCiAKLS8qKiBcYnJpZWYgS2V5IGhhbmRsZS4KLSAqCi0gKiBUaGlzIHR5cGUgcmVwcmVzZW50cyBvcGVuIGhhbmRsZXMgdG8ga2V5cy4gSXQgbXVzdCBiZSBhbiB1bnNpZ25lZCBpbnRlZ3JhbAotICogdHlwZS4gVGhlIGNob2ljZSBvZiB0eXBlIGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4KLSAqCi0gKiAwIGlzIG5vdCBhIHZhbGlkIGtleSBoYW5kbGUuIEhvdyBvdGhlciBoYW5kbGUgdmFsdWVzIGFyZSBhc3NpZ25lZCBpcwotICogaW1wbGVtZW50YXRpb24tZGVwZW5kZW50LgotICovCi10eXBlZGVmIF91bnNpZ25lZF9pbnRlZ3JhbF90eXBlXyBwc2Ffa2V5X2hhbmRsZV90OwotCiAvKipAfSovCiAjZW5kaWYgLyogX19ET1hZR0VOX09OTFlfXyAqLwogCkBAIC0xNTIsNiArMTQyLDI1IEBACiBzdGF0aWMgdm9pZCBwc2Ffc2V0X2tleV9pZCggcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ICk7CiAKKyNpZmRlZiBNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIKKy8qKiBTZXQgdGhlIG93bmVyIGlkZW50aWZpZXIgb2YgYSBrZXkuCisgKgorICogV2hlbiBrZXkgaWRlbnRpZmllcnMgZW5jb2RlIGtleSBvd25lciBpZGVudGlmaWVycywgcHNhX3NldF9rZXlfaWQoKSBkb2VzCisgKiBub3QgYWxsb3cgdG8gZGVmaW5lIGluIGtleSBhdHRyaWJ1dGVzIHRoZSBvd25lciBvZiB2b2xhdGlsZSBrZXlzIGFzCisgKiBwc2Ffc2V0X2tleV9pZCgpIGVuZm9yY2VzIHRoZSBrZXkgdG8gYmUgcGVyc2lzdGVudC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byBzZXQgaW4ga2V5IGF0dHJpYnV0ZXMgdGhlIG93bmVyIGlkZW50aWZpZXIgb2YgYQorICoga2V5LiBJdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciB2b2xhdGlsZSBrZXlzLiBGb3IgcGVyc2lzdGVudCBrZXlzLAorICogaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBQU0EgQ3J5cHRvZ3JhcGh5IEFQSSBwc2Ffc2V0X2tleV9pZCgpIHRvIGRlZmluZQorICogdGhlIG93bmVyIG9mIGEga2V5LgorICoKKyAqIFxwYXJhbVtvdXRdIGF0dHJpYnV0ZXMgIFRoZSBhdHRyaWJ1dGUgc3RydWN0dXJlIHRvIHdyaXRlIHRvLgorICogXHBhcmFtIG93bmVyX2lkICAgICAgICAgVGhlIGtleSBvd25lciBpZGVudGlmaWVyLgorICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3NldF9rZXlfb3duZXJfaWQoIHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2tleV9vd25lcl9pZF90IG93bmVyX2lkICk7CisjZW5kaWYKKwogLyoqIFNldCB0aGUgbG9jYXRpb24gb2YgYSBwZXJzaXN0ZW50IGtleS4KICAqCiAgKiBUbyBtYWtlIGEga2V5IHBlcnNpc3RlbnQsIHlvdSBtdXN0IGdpdmUgaXQgYSBwZXJzaXN0ZW50IGtleSBpZGVudGlmaWVyCkBAIC0zNDgsNyArMzU3LDcgQEAKICAqICAgICAgIE9uY2UgeW91IGhhdmUgY2FsbGVkIHRoaXMgZnVuY3Rpb24gb24gYW4gYXR0cmlidXRlIHN0cnVjdHVyZSwKICAqICAgICAgIHlvdSBtdXN0IGNhbGwgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCkgdG8gZnJlZSB0aGVzZSByZXNvdXJjZXMuCiAgKgotICogXHBhcmFtW2luXSBoYW5kbGUgICAgICAgICAgICBIYW5kbGUgdG8gdGhlIGtleSB0byBxdWVyeS4KKyAqIFxwYXJhbVtpbl0ga2V5ICAgICAgICAgICAgICAgSWRlbnRpZmllciBvZiB0aGUga2V5IHRvIHF1ZXJ5LgogICogXHBhcmFtW2luLG91dF0gYXR0cmlidXRlcyAgICBPbiBzdWNjZXNzLCB0aGUgYXR0cmlidXRlcyBvZiB0aGUga2V5LgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBmYWlsdXJlLCBlcXVpdmFsZW50IHRvIGEKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlc2hseS1pbml0aWFsaXplZCBzdHJ1Y3R1cmUuCkBAIC0zNjQsNyArMzczLDcgQEAKICAqICAgICAgICAgSXQgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IHdoZXRoZXIgYSBmYWlsdXJlIHRvIGluaXRpYWxpemUKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KLXBzYV9zdGF0dXNfdCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAorcHNhX3N0YXR1c190IHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMobWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMpOwogCiAvKiogUmVzZXQgYSBrZXkgYXR0cmlidXRlIHN0cnVjdHVyZSB0byBhIGZyZXNobHkgaW5pdGlhbGl6ZWQgc3RhdGUuCkBAIC0zODcsOTMgKzM5NiwyOCBAQAogICogQHsKICAqLwogCi0vKiogT3BlbiBhIGhhbmRsZSB0byBhbiBleGlzdGluZyBwZXJzaXN0ZW50IGtleS4KKy8qKiBSZW1vdmUgbm9uLWVzc2VudGlhbCBjb3BpZXMgb2Yga2V5IG1hdGVyaWFsIGZyb20gbWVtb3J5LgogICoKLSAqIE9wZW4gYSBoYW5kbGUgdG8gYSBwZXJzaXN0ZW50IGtleS4gQSBrZXkgaXMgcGVyc2lzdGVudCBpZiBpdCB3YXMgY3JlYXRlZAotICogd2l0aCBhIGxpZmV0aW1lIG90aGVyIHRoYW4gI1BTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUuIEEgcGVyc2lzdGVudCBrZXkKLSAqIGFsd2F5cyBoYXMgYSBub256ZXJvIGtleSBpZGVudGlmaWVyLCBzZXQgd2l0aCBwc2Ffc2V0X2tleV9pZCgpIHdoZW4KLSAqIGNyZWF0aW5nIHRoZSBrZXkuIEltcGxlbWVudGF0aW9ucyBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIHByZS1wcm92aXNpb25lZAotICoga2V5cyB0aGF0IGNhbiBiZSBvcGVuZWQgd2l0aCBwc2Ffb3Blbl9rZXkoKS4gU3VjaCBrZXlzIGhhdmUgYW4gYXBwbGljYXRpb24KLSAqIGtleSBpZGVudGlmaWVyIGluIHRoZSB2ZW5kb3IgcmFuZ2UsIGFzIGRvY3VtZW50ZWQgaW4gdGhlIGRlc2NyaXB0aW9uIG9mCi0gKiAjcHNhX2tleV9pZF90LgorICogSWYgdGhlIGtleSBpZGVudGlmaWVyIGRlc2lnbmF0ZXMgYSB2b2xhdGlsZSBrZXksIHRoaXMgZnVuY3Rpb25zIGRvZXMgbm90IGRvCisgKiBhbnl0aGluZyBhbmQgcmV0dXJucyBzdWNjZXNzZnVsbHkuCiAgKgotICogVGhlIGFwcGxpY2F0aW9uIG11c3QgZXZlbnR1YWxseSBjbG9zZSB0aGUgaGFuZGxlIHdpdGggcHNhX2Nsb3NlX2tleSgpIG9yCi0gKiBwc2FfZGVzdHJveV9rZXkoKSB0byByZWxlYXNlIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBJZiB0aGUgYXBwbGljYXRpb24gZGllcwotICogd2l0aG91dCBjYWxsaW5nIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMsIHRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgcGVyZm9ybQotICogdGhlIGVxdWl2YWxlbnQgb2YgYSBjYWxsIHRvIHBzYV9jbG9zZV9rZXkoKS4KKyAqIElmIHRoZSBrZXkgaWRlbnRpZmllciBkZXNpZ25hdGVzIGEgcGVyc2lzdGVudCBrZXksIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsCisgKiBmcmVlIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkgaW4gdm9sYXRpbGUgbWVtb3J5LiBUaGUga2V5CisgKiBkYXRhIGluIHBlcnNpc3RlbnQgc3RvcmFnZSBpcyBub3QgYWZmZWN0ZWQgYW5kIHRoZSBrZXkgY2FuIHN0aWxsIGJlIHVzZWQuCiAgKgotICogU29tZSBpbXBsZW1lbnRhdGlvbnMgcGVybWl0IGFuIGFwcGxpY2F0aW9uIHRvIG9wZW4gdGhlIHNhbWUga2V5IG11bHRpcGxlCi0gKiB0aW1lcy4gSWYgdGhpcyBpcyBzdWNjZXNzZnVsLCBlYWNoIGNhbGwgdG8gcHNhX29wZW5fa2V5KCkgd2lsbCByZXR1cm4gYQotICogZGlmZmVyZW50IGtleSBoYW5kbGUuCi0gKgotICogXG5vdGUgQXBwbGljYXRpb25zIHRoYXQgcmVseSBvbiBvcGVuaW5nIGEga2V5IG11bHRpcGxlIHRpbWVzIHdpbGwgbm90IGJlCi0gKiBwb3J0YWJsZSB0byBpbXBsZW1lbnRhdGlvbnMgdGhhdCBvbmx5IHBlcm1pdCBhIHNpbmdsZSBrZXkgaGFuZGxlIHRvIGJlCi0gKiBvcGVuZWQuIFNlZSBhbHNvIDpyZWY6XGBrZXktaGFuZGxlc1xgLgotICoKLSAqIFxwYXJhbSBrZXkgICAgICAgICAgIFRoZSBwZXJzaXN0ZW50IGlkZW50aWZpZXIgb2YgdGhlIGtleS4KLSAqIFxwYXJhbVtvdXRdIGhhbmRsZSAgIE9uIHN1Y2Nlc3MsIGEgaGFuZGxlIHRvIHRoZSBrZXkuCisgKiBccGFyYW0ga2V5IElkZW50aWZpZXIgb2YgdGhlIGtleSB0byBwdXJnZS4KICAqCiAgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwotICogICAgICAgICBTdWNjZXNzLiBUaGUgYXBwbGljYXRpb24gY2FuIG5vdyB1c2UgdGhlIHZhbHVlIG9mIGAqaGFuZGxlYAotICogICAgICAgICB0byBhY2Nlc3MgdGhlIGtleS4KLSAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZCi0gKiAgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBoYXZlIHN1ZmZpY2llbnQgcmVzb3VyY2VzIHRvIG9wZW4gdGhlCi0gKiAgICAgICAgIGtleS4gVGhpcyBjYW4gYmUgZHVlIHRvIHJlYWNoaW5nIGFuIGltcGxlbWVudGF0aW9uIGxpbWl0IG9uIHRoZQotICogICAgICAgICBudW1iZXIgb2Ygb3BlbiBrZXlzLCB0aGUgbnVtYmVyIG9mIG9wZW4ga2V5IGhhbmRsZXMsIG9yIGF2YWlsYWJsZQotICogICAgICAgICBtZW1vcnkuCi0gKiBccmV0dmFsICNQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QKLSAqICAgICAgICAgVGhlcmUgaXMgbm8gcGVyc2lzdGVudCBrZXkgd2l0aCBrZXkgaWRlbnRpZmllciBccCBpZC4KKyAqICAgICAgICAgVGhlIGtleSBtYXRlcmlhbCB3aWxsIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gbWVtb3J5IGlmIGl0IGlzIG5vdAorICogICAgICAgICBjdXJyZW50bHkgcmVxdWlyZWQuCiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAotICogICAgICAgICBccCBpZCBpcyBub3QgYSB2YWxpZCBwZXJzaXN0ZW50IGtleSBpZGVudGlmaWVyLgotICogXHJldHZhbCAjUFNBX0VSUk9SX05PVF9QRVJNSVRURUQKLSAqICAgICAgICAgVGhlIHNwZWNpZmllZCBrZXkgZXhpc3RzLCBidXQgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IGhhdmUgdGhlCi0gKiAgICAgICAgIHBlcm1pc3Npb24gdG8gYWNjZXNzIGl0LiBOb3RlIHRoYXQgdGhpcyBzcGVjaWZpY2F0aW9uIGRvZXMgbm90Ci0gKiAgICAgICAgIGRlZmluZSBhbnkgd2F5IHRvIGNyZWF0ZSBzdWNoIGEga2V5LCBidXQgaXQgbWF5IGJlIHBvc3NpYmxlCi0gKiAgICAgICAgIHRocm91Z2ggaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgbWVhbnMuCi0gKiBccmV0dmFsICNQU0FfRVJST1JfQ09NTVVOSUNBVElPTl9GQUlMVVJFCi0gKiBccmV0dmFsICNQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRAotICogXHJldHZhbCAjUFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQorICogICAgICAgICBccCBrZXkgaXMgbm90IGEgdmFsaWQga2V5IGlkZW50aWZpZXIuCiAgKiBccmV0dmFsICNQU0FfRVJST1JfQkFEX1NUQVRFCiAgKiAgICAgICAgIFRoZSBsaWJyYXJ5IGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGluaXRpYWxpemVkIGJ5IHBzYV9jcnlwdG9faW5pdCgpLgogICogICAgICAgICBJdCBpcyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgd2hldGhlciBhIGZhaWx1cmUgdG8gaW5pdGlhbGl6ZQogICogICAgICAgICByZXN1bHRzIGluIHRoaXMgZXJyb3IgY29kZS4KICAqLwotcHNhX3N0YXR1c190IHBzYV9vcGVuX2tleSggbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9oYW5kbGVfdCAqaGFuZGxlICk7Ci0KLS8qKiBDbG9zZSBhIGtleSBoYW5kbGUuCi0gKgotICogSWYgdGhlIGhhbmRsZSBkZXNpZ25hdGVzIGEgdm9sYXRpbGUga2V5LCB0aGlzIHdpbGwgZGVzdHJveSB0aGUga2V5IG1hdGVyaWFsCi0gKiBhbmQgZnJlZSBhbGwgYXNzb2NpYXRlZCByZXNvdXJjZXMsIGp1c3QgbGlrZSBwc2FfZGVzdHJveV9rZXkoKS4KLSAqCi0gKiBJZiB0aGlzIGlzIHRoZSBsYXN0IG9wZW4gaGFuZGxlIHRvIGEgcGVyc2lzdGVudCBrZXksIHRoZW4gY2xvc2luZyB0aGUgaGFuZGxlCi0gKiB3aWxsIGZyZWUgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSBpbiB2b2xhdGlsZSBtZW1vcnkuIFRoZSBrZXkKLSAqIGRhdGEgaW4gcGVyc2lzdGVudCBzdG9yYWdlIGlzIG5vdCBhZmZlY3RlZCBhbmQgY2FuIGJlIG9wZW5lZCBhZ2FpbiBsYXRlcgotICogd2l0aCBhIGNhbGwgdG8gcHNhX29wZW5fa2V5KCkuCi0gKgotICogQ2xvc2luZyB0aGUga2V5IGhhbmRsZSBtYWtlcyB0aGUgaGFuZGxlIGludmFsaWQsIGFuZCB0aGUga2V5IGhhbmRsZQotICogbXVzdCBub3QgYmUgdXNlZCBhZ2FpbiBieSB0aGUgYXBwbGljYXRpb24uCi0gKgotICogXG5vdGUgSWYgdGhlIGtleSBoYW5kbGUgd2FzIHVzZWQgdG8gc2V0IHVwIGFuIGFjdGl2ZQotICogOnJlZjpcYG11bHRpcGFydCBvcGVyYXRpb24gPG11bHRpcGFydC1vcGVyYXRpb25zPlxgLCB0aGVuIGNsb3NpbmcgdGhlCi0gKiBrZXkgaGFuZGxlIGNhbiBjYXVzZSB0aGUgbXVsdGlwYXJ0IG9wZXJhdGlvbiB0byBmYWlsLiBBcHBsaWNhdGlvbnMgc2hvdWxkCi0gKiBtYWludGFpbiB0aGUga2V5IGhhbmRsZSB1bnRpbCBhZnRlciB0aGUgbXVsdGlwYXJ0IG9wZXJhdGlvbiBoYXMgZmluaXNoZWQuCi0gKgotICogXHBhcmFtIGhhbmRsZSAgICAgICAgVGhlIGtleSBoYW5kbGUgdG8gY2xvc2UuCi0gKiAgICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIFxjIDAsIGRvIG5vdGhpbmcgYW5kIHJldHVybiBcYyBQU0FfU1VDQ0VTUy4KLSAqCi0gKiBccmV0dmFsICNQU0FfU1VDQ0VTUwotICogICAgICAgICBccCBoYW5kbGUgd2FzIGEgdmFsaWQgaGFuZGxlIG9yIFxjIDAuIEl0IGlzIG5vdyBjbG9zZWQuCi0gKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKLSAqICAgICAgICAgXHAgaGFuZGxlIGlzIG5vdCBhIHZhbGlkIGhhbmRsZSBub3IgXGMgMC4KLSAqIFxyZXR2YWwgI1BTQV9FUlJPUl9DT01NVU5JQ0FUSU9OX0ZBSUxVUkUKLSAqIFxyZXR2YWwgI1BTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVECi0gKiBccmV0dmFsICNQU0FfRVJST1JfQkFEX1NUQVRFCi0gKiAgICAgICAgIFRoZSBsaWJyYXJ5IGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGluaXRpYWxpemVkIGJ5IHBzYV9jcnlwdG9faW5pdCgpLgotICogICAgICAgICBJdCBpcyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgd2hldGhlciBhIGZhaWx1cmUgdG8gaW5pdGlhbGl6ZQotICogICAgICAgICByZXN1bHRzIGluIHRoaXMgZXJyb3IgY29kZS4KLSAqLwotcHNhX3N0YXR1c190IHBzYV9jbG9zZV9rZXkocHNhX2tleV9oYW5kbGVfdCBoYW5kbGUpOworcHNhX3N0YXR1c190IHBzYV9wdXJnZV9rZXkobWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5KTsKIAogLyoqIE1ha2UgYSBjb3B5IG9mIGEga2V5LgogICoKQEAgLTUxMiw3ICs0NTYsMTAgQEAKICAqIFRoZSBlZmZlY3Qgb2YgdGhpcyBmdW5jdGlvbiBvbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGF0dHJpYnV0ZXMgaXMKICAqIGltcGxlbWVudGF0aW9uLWRlZmluZWQuCiAgKgotICogXHBhcmFtIHNvdXJjZV9oYW5kbGUgICAgIFRoZSBrZXkgdG8gY29weS4gSXQgbXVzdCBiZSBhIHZhbGlkIGtleSBoYW5kbGUuCisgKiBccGFyYW0gc291cmNlX2tleSAgICAgICAgVGhlIGtleSB0byBjb3B5LiBJdCBtdXN0IGFsbG93IHRoZSB1c2FnZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICNQU0FfS0VZX1VTQUdFX0NPUFkuIElmIGEgcHJpdmF0ZSBvciBzZWNyZXQga2V5IGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgY29waWVkIG91dHNpZGUgb2YgYSBzZWN1cmUgZWxlbWVudCBpdCBtdXN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyBhbGxvdyAjUFNBX0tFWV9VU0FHRV9FWFBPUlQuCiAgKiBccGFyYW1baW5dIGF0dHJpYnV0ZXMgICAgVGhlIGF0dHJpYnV0ZXMgZm9yIHRoZSBuZXcga2V5LgogICogICAgICAgICAgICAgICAgICAgICAgICAgIFRoZXkgYXJlIHVzZWQgYXMgZm9sbG93czoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBrZXkgdHlwZSBhbmQgc2l6ZSBtYXkgYmUgMC4gSWYgZWl0aGVyIGlzCkBAIC01MjYsMTIgKzQ3MywxNCBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBrZXkgYW5kIFxwIGF0dHJpYnV0ZXMgc28gdGhhdAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aCBzZXRzIG9mIHJlc3RyaWN0aW9ucyBhcHBseSwgYXMKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLgotICogXHBhcmFtW291dF0gdGFyZ2V0X2hhbmRsZSBPbiBzdWNjZXNzLCBhIGhhbmRsZSB0byB0aGUgbmV3bHkgY3JlYXRlZCBrZXkuCisgKiBccGFyYW1bb3V0XSB0YXJnZXRfa2V5ICAgT24gc3VjY2VzcywgYW4gaWRlbnRpZmllciBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkuIEZvciBwZXJzaXN0ZW50IGtleXMsIHRoaXMgaXMgdGhlIGtleQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgZGVmaW5lZCBpbiBccCBhdHRyaWJ1dGVzLgogICogICAgICAgICAgICAgICAgICAgICAgICAgIFxjIDAgb24gZmFpbHVyZS4KICAqCiAgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwogICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfSEFORExFCi0gKiAgICAgICAgIFxwIHNvdXJjZV9oYW5kbGUgaXMgaW52YWxpZC4KKyAqICAgICAgICAgXHAgc291cmNlX2tleSBpcyBpbnZhbGlkLgogICogXHJldHZhbCAjUFNBX0VSUk9SX0FMUkVBRFlfRVhJU1RTCiAgKiAgICAgICAgIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYSBwZXJzaXN0ZW50IGtleSwgYW5kIHRoZXJlIGlzCiAgKiAgICAgICAgIGFscmVhZHkgYSBwZXJzaXN0ZW50IGtleSB3aXRoIHRoZSBnaXZlbiBpZGVudGlmaWVyLgpAQCAtNTU5LDkgKzUwOCw5IEBACiAgKiAgICAgICAgIEl0IGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCB3aGV0aGVyIGEgZmFpbHVyZSB0byBpbml0aWFsaXplCiAgKiAgICAgICAgIHJlc3VsdHMgaW4gdGhpcyBlcnJvciBjb2RlLgogICovCi1wc2Ffc3RhdHVzX3QgcHNhX2NvcHlfa2V5KHBzYV9rZXlfaGFuZGxlX3Qgc291cmNlX2hhbmRsZSwKK3BzYV9zdGF0dXNfdCBwc2FfY29weV9rZXkobWJlZHRsc19zdmNfa2V5X2lkX3Qgc291cmNlX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgKnRhcmdldF9oYW5kbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCAqdGFyZ2V0X2tleSk7CiAKIAogLyoqCkBAIC01NzIsMjggKzUyMSwyMiBAQAogICogbWFrZSBhIGJlc3QgZWZmb3J0IHRvIGVuc3VyZSB0aGF0IHRoYXQgdGhlIGtleSBtYXRlcmlhbCBjYW5ub3QgYmUgcmVjb3ZlcmVkLgogICoKICAqIFRoaXMgZnVuY3Rpb24gYWxzbyBlcmFzZXMgYW55IG1ldGFkYXRhIHN1Y2ggYXMgcG9saWNpZXMgYW5kIGZyZWVzCi0gKiByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkuIFRvIGZyZWUgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGgKLSAqIHRoZSBrZXksIGFsbCBoYW5kbGVzIHRvIHRoZSBrZXkgbXVzdCBiZSBjbG9zZWQgb3IgZGVzdHJveWVkLgotICoKLSAqIERlc3Ryb3lpbmcgdGhlIGtleSBtYWtlcyB0aGUgaGFuZGxlIGludmFsaWQsIGFuZCB0aGUga2V5IGhhbmRsZQotICogbXVzdCBub3QgYmUgdXNlZCBhZ2FpbiBieSB0aGUgYXBwbGljYXRpb24uIFVzaW5nIG90aGVyIG9wZW4gaGFuZGxlcyB0byB0aGUKLSAqIGRlc3Ryb3llZCBrZXkgaW4gYSBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvci4KKyAqIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGtleS4KICAqCiAgKiBJZiBhIGtleSBpcyBjdXJyZW50bHkgaW4gdXNlIGluIGEgbXVsdGlwYXJ0IG9wZXJhdGlvbiwgdGhlbiBkZXN0cm95aW5nIHRoZQogICoga2V5IHdpbGwgY2F1c2UgdGhlIG11bHRpcGFydCBvcGVyYXRpb24gdG8gZmFpbC4KICAqCi0gKiBccGFyYW0gaGFuZGxlICAgICAgICBIYW5kbGUgdG8gdGhlIGtleSB0byBlcmFzZS4KLSAqICAgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgXGMgMCwgZG8gbm90aGluZyBhbmQgcmV0dXJuIFxjIFBTQV9TVUNDRVNTLgorICogXHBhcmFtIGtleSAgSWRlbnRpZmllciBvZiB0aGUga2V5IHRvIGVyYXNlLiBJZiB0aGlzIGlzIFxjIDAsIGRvIG5vdGhpbmcgYW5kCisgKiAgICAgICAgICAgICByZXR1cm4gI1BTQV9TVUNDRVNTLgogICoKICAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCi0gKiAgICAgICAgIFxwIGhhbmRsZSB3YXMgYSB2YWxpZCBoYW5kbGUgYW5kIHRoZSBrZXkgbWF0ZXJpYWwgdGhhdCBpdAotICogICAgICAgICByZWZlcnJlZCB0byBoYXMgYmVlbiBlcmFzZWQuCi0gKiAgICAgICAgIEFsdGVybmF0aXZlbHksIFxwIGhhbmRsZSBpcyBcYyAwLgorICogICAgICAgICBccCBrZXkgd2FzIGEgdmFsaWQgaWRlbnRpZmllciBhbmQgdGhlIGtleSBtYXRlcmlhbCB0aGF0IGl0CisgKiAgICAgICAgIHJlZmVycmVkIHRvIGhhcyBiZWVuIGVyYXNlZC4gQWx0ZXJuYXRpdmVseSwgXHAga2V5IGlzIFxjIDAuCiAgKiBccmV0dmFsICNQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAogICogICAgICAgICBUaGUga2V5IGNhbm5vdCBiZSBlcmFzZWQgYmVjYXVzZSBpdCBpcwogICogICAgICAgICByZWFkLW9ubHksIGVpdGhlciBkdWUgdG8gYSBwb2xpY3kgb3IgZHVlIHRvIHBoeXNpY2FsIHJlc3RyaWN0aW9ucy4KICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlZBTElEX0hBTkRMRQotICogICAgICAgICBccCBoYW5kbGUgaXMgbm90IGEgdmFsaWQgaGFuZGxlIG5vciBcYyAwLgorICogICAgICAgICBccCBrZXkgaXMgbm90IGEgdmFsaWQgaWRlbnRpZmllciBub3IgXGMgMC4KICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9DT01NVU5JQ0FUSU9OX0ZBSUxVUkUKICAqICAgICAgICAgVGhlcmUgd2FzIGFuIGZhaWx1cmUgaW4gY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBjcnlwdG9wcm9jZXNzb3IuCiAgKiAgICAgICAgIFRoZSBrZXkgbWF0ZXJpYWwgbWF5IHN0aWxsIGJlIHByZXNlbnQgaW4gdGhlIGNyeXB0b3Byb2Nlc3Nvci4KQEAgLTYxMSw3ICs1NTQsNyBAQAogICogICAgICAgICBJdCBpcyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgd2hldGhlciBhIGZhaWx1cmUgdG8gaW5pdGlhbGl6ZQogICogICAgICAgICByZXN1bHRzIGluIHRoaXMgZXJyb3IgY29kZS4KICAqLwotcHNhX3N0YXR1c190IHBzYV9kZXN0cm95X2tleShwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSk7Citwc2Ffc3RhdHVzX3QgcHNhX2Rlc3Ryb3lfa2V5KG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSk7CiAKIC8qKkB9Ki8KIApAQCAtNjQ2LDcgKzU4OSw5IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgXHAgZGF0YSBidWZmZXIuCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGtleSBzaXplIGluIFxwIGF0dHJpYnV0ZXMgaXMgbm9uemVybywKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBtdXN0IGJlIGVxdWFsIHRvIHRoZSBzaXplIGZyb20gXHAgZGF0YS4KLSAqIFxwYXJhbVtvdXRdIGhhbmRsZSAgICAgICBPbiBzdWNjZXNzLCBhIGhhbmRsZSB0byB0aGUgbmV3bHkgY3JlYXRlZCBrZXkuCisgKiBccGFyYW1bb3V0XSBrZXkgICAgICAgICAgT24gc3VjY2VzcywgYW4gaWRlbnRpZmllciB0byB0aGUgbmV3bHkgY3JlYXRlZCBrZXkuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHBlcnNpc3RlbnQga2V5cywgdGhpcyBpcyB0aGUga2V5IGlkZW50aWZpZXIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGluIFxwIGF0dHJpYnV0ZXMuCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgXGMgMCBvbiBmYWlsdXJlLgogICogXHBhcmFtW2luXSBkYXRhICAgIEJ1ZmZlciBjb250YWluaW5nIHRoZSBrZXkgZGF0YS4gVGhlIGNvbnRlbnQgb2YgdGhpcwogICogICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBpcyBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIHR5cGUgZGVjbGFyZWQKQEAgLTY5MSw3ICs2MzYsNyBAQAogcHNhX3N0YXR1c190IHBzYV9pbXBvcnRfa2V5KGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgKmhhbmRsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgKmtleSk7CiAKIAogCkBAIC03NTIsNyArNjk3LDkgQEAKICAqCiAgKiBUaGUgcG9saWN5IG9uIHRoZSBrZXkgbXVzdCBoYXZlIHRoZSB1c2FnZSBmbGFnICNQU0FfS0VZX1VTQUdFX0VYUE9SVCBzZXQuCiAgKgotICogXHBhcmFtIGhhbmRsZSAgICAgICAgICAgIEhhbmRsZSB0byB0aGUga2V5IHRvIGV4cG9ydC4KKyAqIFxwYXJhbSBrZXkgICAgICAgICAgICAgICBJZGVudGlmaWVyIG9mIHRoZSBrZXkgdG8gZXhwb3J0LiBJdCBtdXN0IGFsbG93IHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlICNQU0FfS0VZX1VTQUdFX0VYUE9SVCwgdW5sZXNzIGl0IGlzIGEgcHVibGljCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LgogICogXHBhcmFtW291dF0gZGF0YSAgICAgICAgIEJ1ZmZlciB3aGVyZSB0aGUga2V5IGRhdGEgaXMgdG8gYmUgd3JpdHRlbi4KICAqIFxwYXJhbSBkYXRhX3NpemUgICAgICAgICBTaXplIG9mIHRoZSBccCBkYXRhIGJ1ZmZlciBpbiBieXRlcy4KICAqIFxwYXJhbVtvdXRdIGRhdGFfbGVuZ3RoICBPbiBzdWNjZXNzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzCkBAIC03NzksNyArNzI2LDcgQEAKICAqICAgICAgICAgSXQgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IHdoZXRoZXIgYSBmYWlsdXJlIHRvIGluaXRpYWxpemUKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KLXBzYV9zdGF0dXNfdCBwc2FfZXhwb3J0X2tleShwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKK3BzYV9zdGF0dXNfdCBwc2FfZXhwb3J0X2tleShtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZGF0YV9sZW5ndGgpOwpAQCAtODIyLDcgKzc2OSw3IEBACiAgKiBFeHBvcnRpbmcgYSBwdWJsaWMga2V5IG9iamVjdCBvciB0aGUgcHVibGljIHBhcnQgb2YgYSBrZXkgcGFpciBpcwogICogYWx3YXlzIHBlcm1pdHRlZCwgcmVnYXJkbGVzcyBvZiB0aGUga2V5J3MgdXNhZ2UgZmxhZ3MuCiAgKgotICogXHBhcmFtIGhhbmRsZSAgICAgICAgICAgIEhhbmRsZSB0byB0aGUga2V5IHRvIGV4cG9ydC4KKyAqIFxwYXJhbSBrZXkgICAgICAgICAgICAgICBJZGVudGlmaWVyIG9mIHRoZSBrZXkgdG8gZXhwb3J0LgogICogXHBhcmFtW291dF0gZGF0YSAgICAgICAgIEJ1ZmZlciB3aGVyZSB0aGUga2V5IGRhdGEgaXMgdG8gYmUgd3JpdHRlbi4KICAqIFxwYXJhbSBkYXRhX3NpemUgICAgICAgICBTaXplIG9mIHRoZSBccCBkYXRhIGJ1ZmZlciBpbiBieXRlcy4KICAqIFxwYXJhbVtvdXRdIGRhdGFfbGVuZ3RoICBPbiBzdWNjZXNzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzCkBAIC04NDksNyArNzk2LDcgQEAKICAqICAgICAgICAgSXQgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IHdoZXRoZXIgYSBmYWlsdXJlIHRvIGluaXRpYWxpemUKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KLXBzYV9zdGF0dXNfdCBwc2FfZXhwb3J0X3B1YmxpY19rZXkocHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCitwc2Ffc3RhdHVzX3QgcHNhX2V4cG9ydF9wdWJsaWNfa2V5KG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpkYXRhX2xlbmd0aCk7CkBAIC0xMjI2LDcgKzExNzMsOCBAQAogICogICAgICAgYWJvdXQgdGhlIE1BQyB2YWx1ZSB3aGljaCBjb3VsZCBhbGxvdyBhbiBhdHRhY2tlciB0byBndWVzcwogICogICAgICAgYSB2YWxpZCBNQUMgYW5kIHRoZXJlYnkgYnlwYXNzIHNlY3VyaXR5IGNvbnRyb2xzLgogICoKLSAqIFxwYXJhbSBoYW5kbGUgICAgICAgICAgICBIYW5kbGUgdG8gdGhlIGtleSB0byB1c2UgZm9yIHRoZSBvcGVyYXRpb24uCisgKiBccGFyYW0ga2V5ICAgICAgICAgICAgICAgSWRlbnRpZmllciBvZiB0aGUga2V5IHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbi4gSXQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGFsbG93IHRoZSB1c2FnZSBQU0FfS0VZX1VTQUdFX1NJR05fTUVTU0FHRS4KICAqIFxwYXJhbSBhbGcgICAgICAgICAgICAgICBUaGUgTUFDIGFsZ29yaXRobSB0byBjb21wdXRlIChcYyBQU0FfQUxHX1hYWCB2YWx1ZQogICogICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggdGhhdCAjUFNBX0FMR19JU19NQUMoXHAgYWxnKSBpcyB0cnVlKS4KICAqIFxwYXJhbVtpbl0gaW5wdXQgICAgICAgICBCdWZmZXIgY29udGFpbmluZyB0aGUgaW5wdXQgbWVzc2FnZS4KQEAgLTEyNDEsNyArMTE4OSw3IEBACiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9OT1RfUEVSTUlUVEVECiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAotICogICAgICAgICBccCBoYW5kbGUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBccCBhbGcuCisgKiAgICAgICAgIFxwIGtleSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFxwIGFsZy4KICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9OT1RfU1VQUE9SVEVECiAgKiAgICAgICAgIFxwIGFsZyBpcyBub3Qgc3VwcG9ydGVkIG9yIGlzIG5vdCBhIE1BQyBhbGdvcml0aG0uCiAgKiBccmV0dmFsICNQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTApAQCAtMTI1Nyw3ICsxMjA1LDcgQEAKICAqICAgICAgICAgSXQgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IHdoZXRoZXIgYSBmYWlsdXJlIHRvIGluaXRpYWxpemUKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KLXBzYV9zdGF0dXNfdCBwc2FfbWFjX2NvbXB1dGUocHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCitwc2Ffc3RhdHVzX3QgcHNhX21hY19jb21wdXRlKG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dF9sZW5ndGgsCkBAIC0xMjY3LDcgKzEyMTUsOCBAQAogCiAvKiogQ2FsY3VsYXRlIHRoZSBNQUMgb2YgYSBtZXNzYWdlIGFuZCBjb21wYXJlIGl0IHdpdGggYSByZWZlcmVuY2UgdmFsdWUuCiAgKgotICogXHBhcmFtIGhhbmRsZSAgICAgICAgICAgIEhhbmRsZSB0byB0aGUga2V5IHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqIFxwYXJhbSBrZXkgICAgICAgICAgICAgICBJZGVudGlmaWVyIG9mIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uLiBJdAorICogICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYWxsb3cgdGhlIHVzYWdlIFBTQV9LRVlfVVNBR0VfVkVSSUZZX01FU1NBR0UuCiAgKiBccGFyYW0gYWxnICAgICAgICAgICAgICAgVGhlIE1BQyBhbGdvcml0aG0gdG8gY29tcHV0ZSAoXGMgUFNBX0FMR19YWFggdmFsdWUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNoIHRoYXQgI1BTQV9BTEdfSVNfTUFDKFxwIGFsZykgaXMgdHJ1ZSkuCiAgKiBccGFyYW1baW5dIGlucHV0ICAgICAgICAgQnVmZmVyIGNvbnRhaW5pbmcgdGhlIGlucHV0IG1lc3NhZ2UuCkBAIC0xMjgzLDcgKzEyMzIsNyBAQAogICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfSEFORExFCiAgKiBccmV0dmFsICNQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAogICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKLSAqICAgICAgICAgXHAgaGFuZGxlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggXHAgYWxnLgorICogICAgICAgICBccCBrZXkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBccCBhbGcuCiAgKiBccmV0dmFsICNQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAogICogICAgICAgICBccCBhbGcgaXMgbm90IHN1cHBvcnRlZCBvciBpcyBub3QgYSBNQUMgYWxnb3JpdGhtLgogICogXHJldHZhbCAjUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlkKQEAgLTEyOTcsNyArMTI0Niw3IEBACiAgKiAgICAgICAgIEl0IGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCB3aGV0aGVyIGEgZmFpbHVyZSB0byBpbml0aWFsaXplCiAgKiAgICAgICAgIHJlc3VsdHMgaW4gdGhpcyBlcnJvciBjb2RlLgogICovCi1wc2Ffc3RhdHVzX3QgcHNhX21hY192ZXJpZnkocHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCitwc2Ffc3RhdHVzX3QgcHNhX21hY192ZXJpZnkobWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0X2xlbmd0aCwKQEAgLTEzODIsOSArMTMzMSw5IEBACiAgKiBccGFyYW1baW4sb3V0XSBvcGVyYXRpb24gVGhlIG9wZXJhdGlvbiBvYmplY3QgdG8gc2V0IHVwLiBJdCBtdXN0IGhhdmUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBiZWVuIGluaXRpYWxpemVkIGFzIHBlciB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAjcHNhX21hY19vcGVyYXRpb25fdCBhbmQgbm90IHlldCBpbiB1c2UuCi0gKiBccGFyYW0gaGFuZGxlICAgICAgICAgICAgSGFuZGxlIHRvIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uLgotICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IG11c3QgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBvcGVyYXRpb24KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVzLgorICogXHBhcmFtIGtleSAgICAgICAgICAgICAgIElkZW50aWZpZXIgb2YgdGhlIGtleSB0byB1c2UgZm9yIHRoZSBvcGVyYXRpb24uIEl0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCByZW1haW4gdmFsaWQgdW50aWwgdGhlIG9wZXJhdGlvbiB0ZXJtaW5hdGVzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IG11c3QgYWxsb3cgdGhlIHVzYWdlIFBTQV9LRVlfVVNBR0VfU0lHTl9NRVNTQUdFLgogICogXHBhcmFtIGFsZyAgICAgICAgICAgICAgIFRoZSBNQUMgYWxnb3JpdGhtIHRvIGNvbXB1dGUgKFxjIFBTQV9BTEdfWFhYIHZhbHVlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCB0aGF0ICNQU0FfQUxHX0lTX01BQyhccCBhbGcpIGlzIHRydWUpLgogICoKQEAgLTEzOTMsNyArMTM0Miw3IEBACiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9OT1RfUEVSTUlUVEVECiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAotICogICAgICAgICBccCBoYW5kbGUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBccCBhbGcuCisgKiAgICAgICAgIFxwIGtleSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFxwIGFsZy4KICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9OT1RfU1VQUE9SVEVECiAgKiAgICAgICAgIFxwIGFsZyBpcyBub3Qgc3VwcG9ydGVkIG9yIGlzIG5vdCBhIE1BQyBhbGdvcml0aG0uCiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQpAQCAtMTQxMCw3ICsxMzU5LDcgQEAKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KIHBzYV9zdGF0dXNfdCBwc2FfbWFjX3NpZ25fc2V0dXAocHNhX21hY19vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnKTsKIAogLyoqIFNldCB1cCBhIG11bHRpcGFydCBNQUMgdmVyaWZpY2F0aW9uIG9wZXJhdGlvbi4KQEAgLTE0NDQsOSArMTM5MywxMCBAQAogICogXHBhcmFtW2luLG91dF0gb3BlcmF0aW9uIFRoZSBvcGVyYXRpb24gb2JqZWN0IHRvIHNldCB1cC4gSXQgbXVzdCBoYXZlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBpbml0aWFsaXplZCBhcyBwZXIgdGhlIGRvY3VtZW50YXRpb24gZm9yCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgI3BzYV9tYWNfb3BlcmF0aW9uX3QgYW5kIG5vdCB5ZXQgaW4gdXNlLgotICogXHBhcmFtIGhhbmRsZSAgICAgICAgICAgIEhhbmRsZSB0byB0aGUga2V5IHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbi4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgb3BlcmF0aW9uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlcy4KKyAqIFxwYXJhbSBrZXkgICAgICAgICAgICAgICBJZGVudGlmaWVyIG9mIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uLiBJdAorICogICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBvcGVyYXRpb24gdGVybWluYXRlcy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IGFsbG93IHRoZSB1c2FnZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9LRVlfVVNBR0VfVkVSSUZZX01FU1NBR0UuCiAgKiBccGFyYW0gYWxnICAgICAgICAgICAgICAgVGhlIE1BQyBhbGdvcml0aG0gdG8gY29tcHV0ZSAoXGMgUFNBX0FMR19YWFggdmFsdWUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNoIHRoYXQgI1BTQV9BTEdfSVNfTUFDKFxwIGFsZykgaXMgdHJ1ZSkuCiAgKgpAQCAtMTQ3Miw3ICsxNDIyLDcgQEAKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KIHBzYV9zdGF0dXNfdCBwc2FfbWFjX3ZlcmlmeV9zZXR1cChwc2FfbWFjX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcpOwogCiAvKiogQWRkIGEgbWVzc2FnZSBmcmFnbWVudCB0byBhIG11bHRpcGFydCBNQUMgb3BlcmF0aW9uLgpAQCAtMTYzOSw5ICsxNTg5LDggQEAKICAqIHZlY3RvcikuIFVzZSB0aGUgbXVsdGlwYXJ0IG9wZXJhdGlvbiBpbnRlcmZhY2Ugd2l0aCBhCiAgKiAjcHNhX2NpcGhlcl9vcGVyYXRpb25fdCBvYmplY3QgdG8gcHJvdmlkZSBvdGhlciBmb3JtcyBvZiBJVi4KICAqCi0gKiBccGFyYW0gaGFuZGxlICAgICAgICAgICAgICAgIEhhbmRsZSB0byB0aGUga2V5IHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbi4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgbXVzdCByZW1haW4gdmFsaWQgdW50aWwgdGhlIG9wZXJhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVzLgorICogXHBhcmFtIGtleSAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIG9mIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IGFsbG93IHRoZSB1c2FnZSAjUFNBX0tFWV9VU0FHRV9FTkNSWVBULgogICogXHBhcmFtIGFsZyAgICAgICAgICAgICAgICAgICBUaGUgY2lwaGVyIGFsZ29yaXRobSB0byBjb21wdXRlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcYyBQU0FfQUxHX1hYWCB2YWx1ZSBzdWNoIHRoYXQKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1BTQV9BTEdfSVNfQ0lQSEVSKFxwIGFsZykgaXMgdHJ1ZSkuCkBAIC0xNjU5LDcgKzE2MDgsNyBAQAogICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfSEFORExFCiAgKiBccmV0dmFsICNQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAogICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKLSAqICAgICAgICAgXHAgaGFuZGxlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggXHAgYWxnLgorICogICAgICAgICBccCBrZXkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBccCBhbGcuCiAgKiBccmV0dmFsICNQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAogICogICAgICAgICBccCBhbGcgaXMgbm90IHN1cHBvcnRlZCBvciBpcyBub3QgYSBjaXBoZXIgYWxnb3JpdGhtLgogICogXHJldHZhbCAjUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwKQEAgLTE2NzMsNyArMTYyMiw3IEBACiAgKiAgICAgICAgIEl0IGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCB3aGV0aGVyIGEgZmFpbHVyZSB0byBpbml0aWFsaXplCiAgKiAgICAgICAgIHJlc3VsdHMgaW4gdGhpcyBlcnJvciBjb2RlLgogICovCi1wc2Ffc3RhdHVzX3QgcHNhX2NpcGhlcl9lbmNyeXB0KHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAorcHNhX3N0YXR1c190IHBzYV9jaXBoZXJfZW5jcnlwdChtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRfbGVuZ3RoLApAQCAtMTY4NSw5ICsxNjM0LDEwIEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBkZWNyeXB0cyBhIG1lc3NhZ2UgZW5jcnlwdGVkIHdpdGggYSBzeW1tZXRyaWMgY2lwaGVyLgogICoKLSAqIFxwYXJhbSBoYW5kbGUgICAgICAgICAgICAgICAgSGFuZGxlIHRvIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uLgorICogXHBhcmFtIGtleSAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIG9mIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uLgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgb3BlcmF0aW9uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZXMuIEl0IG11c3QgYWxsb3cgdGhlIHVzYWdlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNQU0FfS0VZX1VTQUdFX0RFQ1JZUFQuCiAgKiBccGFyYW0gYWxnICAgICAgICAgICAgICAgICAgIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIGNvbXB1dGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxjIFBTQV9BTEdfWFhYIHZhbHVlIHN1Y2ggdGhhdAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUFNBX0FMR19JU19DSVBIRVIoXHAgYWxnKSBpcyB0cnVlKS4KQEAgLTE3MDUsNyArMTY1NSw3IEBACiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9OT1RfUEVSTUlUVEVECiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAotICogICAgICAgICBccCBoYW5kbGUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBccCBhbGcuCisgKiAgICAgICAgIFxwIGtleSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFxwIGFsZy4KICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9OT1RfU1VQUE9SVEVECiAgKiAgICAgICAgIFxwIGFsZyBpcyBub3Qgc3VwcG9ydGVkIG9yIGlzIG5vdCBhIGNpcGhlciBhbGdvcml0aG0uCiAgKiBccmV0dmFsICNQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTApAQCAtMTcxOSw3ICsxNjY5LDcgQEAKICAqICAgICAgICAgSXQgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IHdoZXRoZXIgYSBmYWlsdXJlIHRvIGluaXRpYWxpemUKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KLXBzYV9zdGF0dXNfdCBwc2FfY2lwaGVyX2RlY3J5cHQocHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCitwc2Ffc3RhdHVzX3QgcHNhX2NpcGhlcl9kZWNyeXB0KG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dF9sZW5ndGgsCkBAIC0xODA1LDkgKzE3NTUsMTAgQEAKICAqIFxwYXJhbVtpbixvdXRdIG9wZXJhdGlvbiAgICAgVGhlIG9wZXJhdGlvbiBvYmplY3QgdG8gc2V0IHVwLiBJdCBtdXN0IGhhdmUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBpbml0aWFsaXplZCBhcyBwZXIgdGhlIGRvY3VtZW50YXRpb24gZm9yCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNwc2FfY2lwaGVyX29wZXJhdGlvbl90IGFuZCBub3QgeWV0IGluIHVzZS4KLSAqIFxwYXJhbSBoYW5kbGUgICAgICAgICAgICAgICAgSGFuZGxlIHRvIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uLgorICogXHBhcmFtIGtleSAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIG9mIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uLgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgb3BlcmF0aW9uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZXMuIEl0IG11c3QgYWxsb3cgdGhlIHVzYWdlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNQU0FfS0VZX1VTQUdFX0VOQ1JZUFQuCiAgKiBccGFyYW0gYWxnICAgICAgICAgICAgICAgICAgIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIGNvbXB1dGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxjIFBTQV9BTEdfWFhYIHZhbHVlIHN1Y2ggdGhhdAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUFNBX0FMR19JU19DSVBIRVIoXHAgYWxnKSBpcyB0cnVlKS4KQEAgLTE4MTcsNyArMTc2OCw3IEBACiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9OT1RfUEVSTUlUVEVECiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAotICogICAgICAgICBccCBoYW5kbGUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBccCBhbGcuCisgKiAgICAgICAgIFxwIGtleSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFxwIGFsZy4KICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9OT1RfU1VQUE9SVEVECiAgKiAgICAgICAgIFxwIGFsZyBpcyBub3Qgc3VwcG9ydGVkIG9yIGlzIG5vdCBhIGNpcGhlciBhbGdvcml0aG0uCiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQpAQCAtMTgzMyw3ICsxNzg0LDcgQEAKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KIHBzYV9zdGF0dXNfdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAocHNhX2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnKTsKIAogLyoqIFNldCB0aGUga2V5IGZvciBhIG11bHRpcGFydCBzeW1tZXRyaWMgZGVjcnlwdGlvbiBvcGVyYXRpb24uCkBAIC0xODY4LDkgKzE4MTksMTAgQEAKICAqIFxwYXJhbVtpbixvdXRdIG9wZXJhdGlvbiAgICAgVGhlIG9wZXJhdGlvbiBvYmplY3QgdG8gc2V0IHVwLiBJdCBtdXN0IGhhdmUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBpbml0aWFsaXplZCBhcyBwZXIgdGhlIGRvY3VtZW50YXRpb24gZm9yCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNwc2FfY2lwaGVyX29wZXJhdGlvbl90IGFuZCBub3QgeWV0IGluIHVzZS4KLSAqIFxwYXJhbSBoYW5kbGUgICAgICAgICAgICAgICAgSGFuZGxlIHRvIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uLgorICogXHBhcmFtIGtleSAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIG9mIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uLgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgb3BlcmF0aW9uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZXMuIEl0IG11c3QgYWxsb3cgdGhlIHVzYWdlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNQU0FfS0VZX1VTQUdFX0RFQ1JZUFQuCiAgKiBccGFyYW0gYWxnICAgICAgICAgICAgICAgICAgIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIGNvbXB1dGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxjIFBTQV9BTEdfWFhYIHZhbHVlIHN1Y2ggdGhhdAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUFNBX0FMR19JU19DSVBIRVIoXHAgYWxnKSBpcyB0cnVlKS4KQEAgLTE4ODAsNyArMTgzMiw3IEBACiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9OT1RfUEVSTUlUVEVECiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAotICogICAgICAgICBccCBoYW5kbGUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBccCBhbGcuCisgKiAgICAgICAgIFxwIGtleSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFxwIGFsZy4KICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9OT1RfU1VQUE9SVEVECiAgKiAgICAgICAgIFxwIGFsZyBpcyBub3Qgc3VwcG9ydGVkIG9yIGlzIG5vdCBhIGNpcGhlciBhbGdvcml0aG0uCiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQpAQCAtMTg5Niw3ICsxODQ4LDcgQEAKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KIHBzYV9zdGF0dXNfdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAocHNhX2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnKTsKIAogLyoqIEdlbmVyYXRlIGFuIElWIGZvciBhIHN5bW1ldHJpYyBlbmNyeXB0aW9uIG9wZXJhdGlvbi4KQEAgLTIxMTAsNyArMjA2Miw5IEBACiAKIC8qKiBQcm9jZXNzIGFuIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiBvcGVyYXRpb24uCiAgKgotICogXHBhcmFtIGhhbmRsZSAgICAgICAgICAgICAgICAgIEhhbmRsZSB0byB0aGUga2V5IHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqIFxwYXJhbSBrZXkgICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIG9mIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uIEl0IG11c3QgYWxsb3cgdGhlIHVzYWdlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1BTQV9LRVlfVVNBR0VfRU5DUllQVC4KICAqIFxwYXJhbSBhbGcgICAgICAgICAgICAgICAgICAgICBUaGUgQUVBRCBhbGdvcml0aG0gdG8gY29tcHV0ZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcYyBQU0FfQUxHX1hYWCB2YWx1ZSBzdWNoIHRoYXQKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUFNBX0FMR19JU19BRUFEKFxwIGFsZykgaXMgdHJ1ZSkuCkBAIC0yMTQxLDcgKzIwOTUsNyBAQAogICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfSEFORExFCiAgKiBccmV0dmFsICNQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAogICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKLSAqICAgICAgICAgXHAgaGFuZGxlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggXHAgYWxnLgorICogICAgICAgICBccCBrZXkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBccCBhbGcuCiAgKiBccmV0dmFsICNQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAogICogICAgICAgICBccCBhbGcgaXMgbm90IHN1cHBvcnRlZCBvciBpcyBub3QgYW4gQUVBRCBhbGdvcml0aG0uCiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQpAQCAtMjE1Niw3ICsyMTEwLDcgQEAKICAqICAgICAgICAgSXQgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IHdoZXRoZXIgYSBmYWlsdXJlIHRvIGluaXRpYWxpemUKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KLXBzYV9zdGF0dXNfdCBwc2FfYWVhZF9lbmNyeXB0KHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAorcHNhX3N0YXR1c190IHBzYV9hZWFkX2VuY3J5cHQobWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKm5vbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5vbmNlX2xlbmd0aCwKQEAgLTIxNzAsNyArMjEyNCw5IEBACiAKIC8qKiBQcm9jZXNzIGFuIGF1dGhlbnRpY2F0ZWQgZGVjcnlwdGlvbiBvcGVyYXRpb24uCiAgKgotICogXHBhcmFtIGhhbmRsZSAgICAgICAgICAgICAgICAgIEhhbmRsZSB0byB0aGUga2V5IHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqIFxwYXJhbSBrZXkgICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIG9mIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uIEl0IG11c3QgYWxsb3cgdGhlIHVzYWdlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1BTQV9LRVlfVVNBR0VfREVDUllQVC4KICAqIFxwYXJhbSBhbGcgICAgICAgICAgICAgICAgICAgICBUaGUgQUVBRCBhbGdvcml0aG0gdG8gY29tcHV0ZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcYyBQU0FfQUxHX1hYWCB2YWx1ZSBzdWNoIHRoYXQKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUFNBX0FMR19JU19BRUFEKFxwIGFsZykgaXMgdHJ1ZSkuCkBAIC0yMjAxLDcgKzIxNTcsNyBAQAogICogICAgICAgICBUaGUgY2lwaGVydGV4dCBpcyBub3QgYXV0aGVudGljLgogICogXHJldHZhbCAjUFNBX0VSUk9SX05PVF9QRVJNSVRURUQKICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCi0gKiAgICAgICAgIFxwIGhhbmRsZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFxwIGFsZy4KKyAqICAgICAgICAgXHAga2V5IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggXHAgYWxnLgogICogXHJldHZhbCAjUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKICAqICAgICAgICAgXHAgYWxnIGlzIG5vdCBzdXBwb3J0ZWQgb3IgaXMgbm90IGFuIEFFQUQgYWxnb3JpdGhtLgogICogXHJldHZhbCAjUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlkKQEAgLTIyMTYsNyArMjE3Miw3IEBACiAgKiAgICAgICAgIEl0IGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCB3aGV0aGVyIGEgZmFpbHVyZSB0byBpbml0aWFsaXplCiAgKiAgICAgICAgIHJlc3VsdHMgaW4gdGhpcyBlcnJvciBjb2RlLgogICovCi1wc2Ffc3RhdHVzX3QgcHNhX2FlYWRfZGVjcnlwdChwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKK3BzYV9zdGF0dXNfdCBwc2FfYWVhZF9kZWNyeXB0KG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpub25jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBub25jZV9sZW5ndGgsCkBAIC0yMzEyLDkgKzIyNjgsMTAgQEAKICAqIFxwYXJhbVtpbixvdXRdIG9wZXJhdGlvbiAgICAgVGhlIG9wZXJhdGlvbiBvYmplY3QgdG8gc2V0IHVwLiBJdCBtdXN0IGhhdmUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBpbml0aWFsaXplZCBhcyBwZXIgdGhlIGRvY3VtZW50YXRpb24gZm9yCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNwc2FfYWVhZF9vcGVyYXRpb25fdCBhbmQgbm90IHlldCBpbiB1c2UuCi0gKiBccGFyYW0gaGFuZGxlICAgICAgICAgICAgICAgIEhhbmRsZSB0byB0aGUga2V5IHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqIFxwYXJhbSBrZXkgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciBvZiB0aGUga2V5IHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbi4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgbXVzdCByZW1haW4gdmFsaWQgdW50aWwgdGhlIG9wZXJhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVzLiBJdCBtdXN0IGFsbG93IHRoZSB1c2FnZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUFNBX0tFWV9VU0FHRV9FTkNSWVBULgogICogXHBhcmFtIGFsZyAgICAgICAgICAgICAgICAgICBUaGUgQUVBRCBhbGdvcml0aG0gdG8gY29tcHV0ZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXGMgUFNBX0FMR19YWFggdmFsdWUgc3VjaCB0aGF0CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNQU0FfQUxHX0lTX0FFQUQoXHAgYWxnKSBpcyB0cnVlKS4KQEAgLTIzMjMsMTAgKzIyODAsMTAgQEAKICAqICAgICAgICAgU3VjY2Vzcy4KICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9CQURfU1RBVEUKICAqICAgICAgICAgVGhlIG9wZXJhdGlvbiBzdGF0ZSBpcyBub3QgdmFsaWQgKGl0IG11c3QgYmUgaW5hY3RpdmUpLgotICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlZBTElEX0hBTkRMRQorICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfSEFORExFCiAgKiBccmV0dmFsICNQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAogICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKLSAqICAgICAgICAgXHAgaGFuZGxlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggXHAgYWxnLgorICogICAgICAgICBccCBrZXkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBccCBhbGcuCiAgKiBccmV0dmFsICNQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAogICogICAgICAgICBccCBhbGcgaXMgbm90IHN1cHBvcnRlZCBvciBpcyBub3QgYW4gQUVBRCBhbGdvcml0aG0uCiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQpAQCAtMjM0MCw3ICsyMjk3LDcgQEAKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KIHBzYV9zdGF0dXNfdCBwc2FfYWVhZF9lbmNyeXB0X3NldHVwKHBzYV9hZWFkX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcpOwogCiAvKiogU2V0IHRoZSBrZXkgZm9yIGEgbXVsdGlwYXJ0IGF1dGhlbnRpY2F0ZWQgZGVjcnlwdGlvbiBvcGVyYXRpb24uCkBAIC0yMzc4LDkgKzIzMzUsMTAgQEAKICAqIFxwYXJhbVtpbixvdXRdIG9wZXJhdGlvbiAgICAgVGhlIG9wZXJhdGlvbiBvYmplY3QgdG8gc2V0IHVwLiBJdCBtdXN0IGhhdmUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBpbml0aWFsaXplZCBhcyBwZXIgdGhlIGRvY3VtZW50YXRpb24gZm9yCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNwc2FfYWVhZF9vcGVyYXRpb25fdCBhbmQgbm90IHlldCBpbiB1c2UuCi0gKiBccGFyYW0gaGFuZGxlICAgICAgICAgICAgICAgIEhhbmRsZSB0byB0aGUga2V5IHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqIFxwYXJhbSBrZXkgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciBvZiB0aGUga2V5IHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbi4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgbXVzdCByZW1haW4gdmFsaWQgdW50aWwgdGhlIG9wZXJhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVzLiBJdCBtdXN0IGFsbG93IHRoZSB1c2FnZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUFNBX0tFWV9VU0FHRV9ERUNSWVBULgogICogXHBhcmFtIGFsZyAgICAgICAgICAgICAgICAgICBUaGUgQUVBRCBhbGdvcml0aG0gdG8gY29tcHV0ZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXGMgUFNBX0FMR19YWFggdmFsdWUgc3VjaCB0aGF0CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNQU0FfQUxHX0lTX0FFQUQoXHAgYWxnKSBpcyB0cnVlKS4KQEAgLTIzODksMTAgKzIzNDcsMTAgQEAKICAqICAgICAgICAgU3VjY2Vzcy4KICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9CQURfU1RBVEUKICAqICAgICAgICAgVGhlIG9wZXJhdGlvbiBzdGF0ZSBpcyBub3QgdmFsaWQgKGl0IG11c3QgYmUgaW5hY3RpdmUpLgotICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlZBTElEX0hBTkRMRQorICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfSEFORExFCiAgKiBccmV0dmFsICNQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAogICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKLSAqICAgICAgICAgXHAgaGFuZGxlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggXHAgYWxnLgorICogICAgICAgICBccCBrZXkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBccCBhbGcuCiAgKiBccmV0dmFsICNQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAogICogICAgICAgICBccCBhbGcgaXMgbm90IHN1cHBvcnRlZCBvciBpcyBub3QgYW4gQUVBRCBhbGdvcml0aG0uCiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQpAQCAtMjQwNiw3ICsyMzY0LDcgQEAKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KIHBzYV9zdGF0dXNfdCBwc2FfYWVhZF9kZWNyeXB0X3NldHVwKHBzYV9hZWFkX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcpOwogCiAvKiogR2VuZXJhdGUgYSByYW5kb20gbm9uY2UgZm9yIGFuIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiBvcGVyYXRpb24uCkBAIC0yNDMyLDcgKzIzOTAsNyBAQAogICogICAgICAgICBTdWNjZXNzLgogICogXHJldHZhbCAjUFNBX0VSUk9SX0JBRF9TVEFURQogICogICAgICAgICBUaGUgb3BlcmF0aW9uIHN0YXRlIGlzIG5vdCB2YWxpZCAoaXQgbXVzdCBiZSBhbiBhY3RpdmUgYWVhZCBlbmNyeXB0Ci0gICAgICAgICAgIG9wZXJhdGlvbiwgd2l0aCBubyBub25jZSBzZXQpLgorICogICAgICAgICBvcGVyYXRpb24sIHdpdGggbm8gbm9uY2Ugc2V0KS4KICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMCiAgKiAgICAgICAgIFRoZSBzaXplIG9mIHRoZSBccCBub25jZSBidWZmZXIgaXMgdG9vIHNtYWxsLgogICogXHJldHZhbCAjUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlkKQEAgLTI4NjQsMTAgKzI4MjIsMTEgQEAKICAqIHBhcmFtZXRlciB0byB0aGlzIGZ1bmN0aW9uLiBZb3UgY2FuIHVzZSAjUFNBX0FMR19TSUdOX0dFVF9IQVNIKFxwIGFsZykKICAqIHRvIGRldGVybWluZSB0aGUgaGFzaCBhbGdvcml0aG0gdG8gdXNlLgogICoKLSAqIFxwYXJhbSBoYW5kbGUgICAgICAgICAgICAgICAgSGFuZGxlIHRvIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IGJlIGFuIGFzeW1tZXRyaWMga2V5IHBhaXIuCisgKiBccGFyYW0ga2V5ICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgb2YgdGhlIGtleSB0byB1c2UgZm9yIHRoZSBvcGVyYXRpb24uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IG11c3QgYmUgYW4gYXN5bW1ldHJpYyBrZXkgcGFpci4gVGhlIGtleSBtdXN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93IHRoZSB1c2FnZSAjUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0guCiAgKiBccGFyYW0gYWxnICAgICAgICAgICAgICAgICAgIEEgc2lnbmF0dXJlIGFsZ29yaXRobSB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHlwZSBvZiBccCBoYW5kbGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0eXBlIG9mIFxwIGtleS4KICAqIFxwYXJhbVtpbl0gaGFzaCAgICAgICAgICAgICAgVGhlIGhhc2ggb3IgbWVzc2FnZSB0byBzaWduLgogICogXHBhcmFtIGhhc2hfbGVuZ3RoICAgICAgICAgICBTaXplIG9mIHRoZSBccCBoYXNoIGJ1ZmZlciBpbiBieXRlcy4KICAqIFxwYXJhbVtvdXRdIHNpZ25hdHVyZSAgICAgICAgQnVmZmVyIHdoZXJlIHRoZSBzaWduYXR1cmUgaXMgdG8gYmUgd3JpdHRlbi4KQEAgLTI4ODMsNyArMjg0Miw3IEBACiAgKiAgICAgICAgIGRldGVybWluZSBhIHN1ZmZpY2llbnQgYnVmZmVyIHNpemUgYnkgY2FsbGluZwogICogICAgICAgICAjUFNBX1NJR05fT1VUUFVUX1NJWkUoXGMga2V5X3R5cGUsIFxjIGtleV9iaXRzLCBccCBhbGcpCiAgKiAgICAgICAgIHdoZXJlIFxjIGtleV90eXBlIGFuZCBcYyBrZXlfYml0cyBhcmUgdGhlIHR5cGUgYW5kIGJpdC1zaXplCi0gKiAgICAgICAgIHJlc3BlY3RpdmVseSBvZiBccCBoYW5kbGUuCisgKiAgICAgICAgIHJlc3BlY3RpdmVseSBvZiBccCBrZXkuCiAgKiBccmV0dmFsICNQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAogICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZCkBAIC0yODk3LDcgKzI4NTYsNyBAQAogICogICAgICAgICBJdCBpcyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgd2hldGhlciBhIGZhaWx1cmUgdG8gaW5pdGlhbGl6ZQogICogICAgICAgICByZXN1bHRzIGluIHRoaXMgZXJyb3IgY29kZS4KICAqLwotcHNhX3N0YXR1c190IHBzYV9zaWduX2hhc2gocHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCitwc2Ffc3RhdHVzX3QgcHNhX3NpZ25faGFzaChtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBoYXNoX2xlbmd0aCwKQEAgLTI5MTQsMTAgKzI4NzMsMTIgQEAKICAqIHBhcmFtZXRlciB0byB0aGlzIGZ1bmN0aW9uLiBZb3UgY2FuIHVzZSAjUFNBX0FMR19TSUdOX0dFVF9IQVNIKFxwIGFsZykKICAqIHRvIGRldGVybWluZSB0aGUgaGFzaCBhbGdvcml0aG0gdG8gdXNlLgogICoKLSAqIFxwYXJhbSBoYW5kbGUgICAgICAgICAgICBIYW5kbGUgdG8gdGhlIGtleSB0byB1c2UgZm9yIHRoZSBvcGVyYXRpb24uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgbXVzdCBiZSBhIHB1YmxpYyBrZXkgb3IgYW4gYXN5bW1ldHJpYyBrZXkgcGFpci4KKyAqIFxwYXJhbSBrZXkgICAgICAgICAgICAgICBJZGVudGlmaWVyIG9mIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uLiBJdAorICogICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgYSBwdWJsaWMga2V5IG9yIGFuIGFzeW1tZXRyaWMga2V5IHBhaXIuIFRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGtleSBtdXN0IGFsbG93IHRoZSB1c2FnZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICNQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNILgogICogXHBhcmFtIGFsZyAgICAgICAgICAgICAgIEEgc2lnbmF0dXJlIGFsZ29yaXRobSB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aAotICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0eXBlIG9mIFxwIGhhbmRsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHlwZSBvZiBccCBrZXkuCiAgKiBccGFyYW1baW5dIGhhc2ggICAgICAgICAgVGhlIGhhc2ggb3IgbWVzc2FnZSB3aG9zZSBzaWduYXR1cmUgaXMgdG8gYmUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZC4KICAqIFxwYXJhbSBoYXNoX2xlbmd0aCAgICAgICBTaXplIG9mIHRoZSBccCBoYXNoIGJ1ZmZlciBpbiBieXRlcy4KQEAgLTI5NDMsNyArMjkwNCw3IEBACiAgKiAgICAgICAgIEl0IGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCB3aGV0aGVyIGEgZmFpbHVyZSB0byBpbml0aWFsaXplCiAgKiAgICAgICAgIHJlc3VsdHMgaW4gdGhpcyBlcnJvciBjb2RlLgogICovCi1wc2Ffc3RhdHVzX3QgcHNhX3ZlcmlmeV9oYXNoKHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAorcHNhX3N0YXR1c190IHBzYV92ZXJpZnlfaGFzaChtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmhhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBoYXNoX2xlbmd0aCwKQEAgLTI5NTMsMTEgKzI5MTQsMTIgQEAKIC8qKgogICogXGJyaWVmIEVuY3J5cHQgYSBzaG9ydCBtZXNzYWdlIHdpdGggYSBwdWJsaWMga2V5LgogICoKLSAqIFxwYXJhbSBoYW5kbGUgICAgICAgICAgICAgICAgSGFuZGxlIHRvIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IGJlIGEgcHVibGljIGtleSBvciBhbiBhc3ltbWV0cmljCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSBwYWlyLgorICogXHBhcmFtIGtleSAgICAgICAgICAgICAgICAgICBJZGVudGlmZXIgb2YgdGhlIGtleSB0byB1c2UgZm9yIHRoZSBvcGVyYXRpb24uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IG11c3QgYmUgYSBwdWJsaWMga2V5IG9yIGFuIGFzeW1tZXRyaWMga2V5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXIuIEl0IG11c3QgYWxsb3cgdGhlIHVzYWdlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNQU0FfS0VZX1VTQUdFX0VOQ1JZUFQuCiAgKiBccGFyYW0gYWxnICAgICAgICAgICAgICAgICAgIEFuIGFzeW1tZXRyaWMgZW5jcnlwdGlvbiBhbGdvcml0aG0gdGhhdCBpcwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIHR5cGUgb2YgXHAgaGFuZGxlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIHR5cGUgb2YgXHAga2V5LgogICogXHBhcmFtW2luXSBpbnB1dCAgICAgICAgICAgICBUaGUgbWVzc2FnZSB0byBlbmNyeXB0LgogICogXHBhcmFtIGlucHV0X2xlbmd0aCAgICAgICAgICBTaXplIG9mIHRoZSBccCBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCiAgKiBccGFyYW1baW5dIHNhbHQgICAgICAgICAgICAgIEEgc2FsdCBvciBsYWJlbCwgaWYgc3VwcG9ydGVkIGJ5IHRoZQpAQCAtMjk4Niw3ICsyOTQ4LDcgQEAKICAqICAgICAgICAgZGV0ZXJtaW5lIGEgc3VmZmljaWVudCBidWZmZXIgc2l6ZSBieSBjYWxsaW5nCiAgKiAgICAgICAgICNQU0FfQVNZTU1FVFJJQ19FTkNSWVBUX09VVFBVVF9TSVpFKFxjIGtleV90eXBlLCBcYyBrZXlfYml0cywgXHAgYWxnKQogICogICAgICAgICB3aGVyZSBcYyBrZXlfdHlwZSBhbmQgXGMga2V5X2JpdHMgYXJlIHRoZSB0eXBlIGFuZCBiaXQtc2l6ZQotICogICAgICAgICByZXNwZWN0aXZlbHkgb2YgXHAgaGFuZGxlLgorICogICAgICAgICByZXNwZWN0aXZlbHkgb2YgXHAga2V5LgogICogXHJldHZhbCAjUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQpAQCAtMzAwMCw3ICsyOTYyLDcgQEAKICAqICAgICAgICAgSXQgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IHdoZXRoZXIgYSBmYWlsdXJlIHRvIGluaXRpYWxpemUKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KLXBzYV9zdGF0dXNfdCBwc2FfYXN5bW1ldHJpY19lbmNyeXB0KHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAorcHNhX3N0YXR1c190IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQobWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0X2xlbmd0aCwKQEAgLTMwMTMsMTAgKzI5NzUsMTEgQEAKIC8qKgogICogXGJyaWVmIERlY3J5cHQgYSBzaG9ydCBtZXNzYWdlIHdpdGggYSBwcml2YXRlIGtleS4KICAqCi0gKiBccGFyYW0gaGFuZGxlICAgICAgICAgICAgICAgIEhhbmRsZSB0byB0aGUga2V5IHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbi4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgbXVzdCBiZSBhbiBhc3ltbWV0cmljIGtleSBwYWlyLgorICogXHBhcmFtIGtleSAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIG9mIHRoZSBrZXkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IGJlIGFuIGFzeW1tZXRyaWMga2V5IHBhaXIuIEl0IG11c3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3cgdGhlIHVzYWdlICNQU0FfS0VZX1VTQUdFX0RFQ1JZUFQuCiAgKiBccGFyYW0gYWxnICAgICAgICAgICAgICAgICAgIEFuIGFzeW1tZXRyaWMgZW5jcnlwdGlvbiBhbGdvcml0aG0gdGhhdCBpcwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIHR5cGUgb2YgXHAgaGFuZGxlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIHR5cGUgb2YgXHAga2V5LgogICogXHBhcmFtW2luXSBpbnB1dCAgICAgICAgICAgICBUaGUgbWVzc2FnZSB0byBkZWNyeXB0LgogICogXHBhcmFtIGlucHV0X2xlbmd0aCAgICAgICAgICBTaXplIG9mIHRoZSBccCBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCiAgKiBccGFyYW1baW5dIHNhbHQgICAgICAgICAgICAgIEEgc2FsdCBvciBsYWJlbCwgaWYgc3VwcG9ydGVkIGJ5IHRoZQpAQCAtMzA0NSw3ICszMDA4LDcgQEAKICAqICAgICAgICAgZGV0ZXJtaW5lIGEgc3VmZmljaWVudCBidWZmZXIgc2l6ZSBieSBjYWxsaW5nCiAgKiAgICAgICAgICNQU0FfQVNZTU1FVFJJQ19ERUNSWVBUX09VVFBVVF9TSVpFKFxjIGtleV90eXBlLCBcYyBrZXlfYml0cywgXHAgYWxnKQogICogICAgICAgICB3aGVyZSBcYyBrZXlfdHlwZSBhbmQgXGMga2V5X2JpdHMgYXJlIHRoZSB0eXBlIGFuZCBiaXQtc2l6ZQotICogICAgICAgICByZXNwZWN0aXZlbHkgb2YgXHAgaGFuZGxlLgorICogICAgICAgICByZXNwZWN0aXZlbHkgb2YgXHAga2V5LgogICogXHJldHZhbCAjUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKICAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQpAQCAtMzA2MCw3ICszMDIzLDcgQEAKICAqICAgICAgICAgSXQgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IHdoZXRoZXIgYSBmYWlsdXJlIHRvIGluaXRpYWxpemUKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KLXBzYV9zdGF0dXNfdCBwc2FfYXN5bW1ldHJpY19kZWNyeXB0KHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAorcHNhX3N0YXR1c190IHBzYV9hc3ltbWV0cmljX2RlY3J5cHQobWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0X2xlbmd0aCwKQEAgLTMzMTgsOSArMzI4MSw5IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9kZXJpdmF0aW9uX3NldHVwKCkgYW5kIG11c3Qgbm90CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBwcm9kdWNlZCBhbnkgb3V0cHV0IHlldC4KICAqIFxwYXJhbSBzdGVwICAgICAgICAgICAgICAgICAgICBXaGljaCBzdGVwIHRoZSBpbnB1dCBkYXRhIGlzIGZvci4KLSAqIFxwYXJhbSBoYW5kbGUgICAgICAgICAgICAgICAgICBIYW5kbGUgdG8gdGhlIGtleS4gSXQgbXVzdCBoYXZlIGFuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgdHlwZSBmb3IgXHAgc3RlcCBhbmQgbXVzdAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93IHRoZSB1c2FnZSAjUFNBX0tFWV9VU0FHRV9ERVJJVkUuCisgKiBccGFyYW0ga2V5ICAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciBvZiB0aGUga2V5LiBJdCBtdXN0IGhhdmUgYW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSB0eXBlIGZvciBzdGVwIGFuZCBtdXN0IGFsbG93IHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlICNQU0FfS0VZX1VTQUdFX0RFUklWRS4KICAqCiAgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwogICogICAgICAgICBTdWNjZXNzLgpAQCAtMzM0Niw3ICszMzA5LDcgQEAKIHBzYV9zdGF0dXNfdCBwc2Ffa2V5X2Rlcml2YXRpb25faW5wdXRfa2V5KAogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9zdGVwX3Qgc3RlcCwKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSk7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5KTsKIAogLyoqIFBlcmZvcm0gYSBrZXkgYWdyZWVtZW50IGFuZCB1c2UgdGhlIHNoYXJlZCBzZWNyZXQgYXMgaW5wdXQgdG8gYSBrZXkKICAqIGRlcml2YXRpb24uCkBAIC0zMzcxLDcgKzMzMzQsOCBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gbXVzdCBiZSByZWFkeSBmb3IgYW4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBvZiB0aGUgdHlwZSBnaXZlbiBieSBccCBzdGVwLgogICogXHBhcmFtIHN0ZXAgICAgICAgICAgICAgICAgICAgIFdoaWNoIHN0ZXAgdGhlIGlucHV0IGRhdGEgaXMgZm9yLgotICogXHBhcmFtIHByaXZhdGVfa2V5ICAgICAgICAgICAgIEhhbmRsZSB0byB0aGUgcHJpdmF0ZSBrZXkgdG8gdXNlLgorICogXHBhcmFtIHByaXZhdGVfa2V5ICAgICAgICAgICAgIElkZW50aWZpZXIgb2YgdGhlIHByaXZhdGUga2V5IHRvIHVzZS4gSXQgbXVzdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93IHRoZSB1c2FnZSAjUFNBX0tFWV9VU0FHRV9ERVJJVkUuCiAgKiBccGFyYW1baW5dIHBlZXJfa2V5ICAgICAgUHVibGljIGtleSBvZiB0aGUgcGVlci4gVGhlIHBlZXIga2V5IG11c3QgYmUgaW4gdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSBmb3JtYXQgdGhhdCBwc2FfaW1wb3J0X2tleSgpIGFjY2VwdHMgZm9yIHRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBrZXkgdHlwZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlIG9mCkBAIC0zNDE1LDcgKzMzNzksNyBAQAogcHNhX3N0YXR1c190IHBzYV9rZXlfZGVyaXZhdGlvbl9rZXlfYWdyZWVtZW50KAogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9zdGVwX3Qgc3RlcCwKLSAgICBwc2Ffa2V5X2hhbmRsZV90IHByaXZhdGVfa2V5LAorICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHByaXZhdGVfa2V5LAogICAgIGNvbnN0IHVpbnQ4X3QgKnBlZXJfa2V5LAogICAgIHNpemVfdCBwZWVyX2tleV9sZW5ndGgpOwogCkBAIC0zNTU5LDcgKzM1MjMsOSBAQAogICoKICAqIFxwYXJhbVtpbl0gYXR0cmlidXRlcyAgICBUaGUgYXR0cmlidXRlcyBmb3IgdGhlIG5ldyBrZXkuCiAgKiBccGFyYW1baW4sb3V0XSBvcGVyYXRpb24gVGhlIGtleSBkZXJpdmF0aW9uIG9wZXJhdGlvbiBvYmplY3QgdG8gcmVhZCBmcm9tLgotICogXHBhcmFtW291dF0gaGFuZGxlICAgICAgIE9uIHN1Y2Nlc3MsIGEgaGFuZGxlIHRvIHRoZSBuZXdseSBjcmVhdGVkIGtleS4KKyAqIFxwYXJhbVtvdXRdIGtleSAgICAgICAgICBPbiBzdWNjZXNzLCBhbiBpZGVudGlmaWVyIGZvciB0aGUgbmV3bHkgY3JlYXRlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGtleS4gRm9yIHBlcnNpc3RlbnQga2V5cywgdGhpcyBpcyB0aGUga2V5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciBkZWZpbmVkIGluIFxwIGF0dHJpYnV0ZXMuCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgXGMgMCBvbiBmYWlsdXJlLgogICoKICAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCkBAIC0zNTk5LDcgKzM1NjUsNyBAQAogcHNhX3N0YXR1c190IHBzYV9rZXlfZGVyaXZhdGlvbl9vdXRwdXRfa2V5KAogICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAotICAgIHBzYV9rZXlfaGFuZGxlX3QgKmhhbmRsZSk7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgKmtleSk7CiAKIC8qKiBBYm9ydCBhIGtleSBkZXJpdmF0aW9uIG9wZXJhdGlvbi4KICAqCkBAIC0zNjQwLDcgKzM2MDYsOCBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcYyBQU0FfQUxHX1hYWCB2YWx1ZSBzdWNoIHRoYXQKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUFNBX0FMR19JU19SQVdfS0VZX0FHUkVFTUVOVChccCBhbGcpCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdHJ1ZSkuCi0gKiBccGFyYW0gcHJpdmF0ZV9rZXkgICAgICAgICAgICAgSGFuZGxlIHRvIHRoZSBwcml2YXRlIGtleSB0byB1c2UuCisgKiBccGFyYW0gcHJpdmF0ZV9rZXkgICAgICAgICAgICAgSWRlbnRpZmllciBvZiB0aGUgcHJpdmF0ZSBrZXkgdG8gdXNlLiBJdCBtdXN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3cgdGhlIHVzYWdlICNQU0FfS0VZX1VTQUdFX0RFUklWRS4KICAqIFxwYXJhbVtpbl0gcGVlcl9rZXkgICAgICAgICAgICBQdWJsaWMga2V5IG9mIHRoZSBwZWVyLiBJdCBtdXN0IGJlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHNhbWUgZm9ybWF0IHRoYXQgcHNhX2ltcG9ydF9rZXkoKQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdHMuIFRoZSBzdGFuZGFyZCBmb3JtYXRzIGZvciBwdWJsaWMKQEAgLTM2NzgsNyArMzY0NSw3IEBACiAgKiAgICAgICAgIHJlc3VsdHMgaW4gdGhpcyBlcnJvciBjb2RlLgogICovCiBwc2Ffc3RhdHVzX3QgcHNhX3Jhd19rZXlfYWdyZWVtZW50KHBzYV9hbGdvcml0aG1fdCBhbGcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgcHJpdmF0ZV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHByaXZhdGVfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwZWVyX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBlZXJfa2V5X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqb3V0cHV0LApAQCAtMzczNCw3ICszNzAxLDkgQEAKICAqICAgYXR0cmlidXRlcy4KICAqCiAgKiBccGFyYW1baW5dIGF0dHJpYnV0ZXMgICAgVGhlIGF0dHJpYnV0ZXMgZm9yIHRoZSBuZXcga2V5LgotICogXHBhcmFtW291dF0gaGFuZGxlICAgICAgIE9uIHN1Y2Nlc3MsIGEgaGFuZGxlIHRvIHRoZSBuZXdseSBjcmVhdGVkIGtleS4KKyAqIFxwYXJhbVtvdXRdIGtleSAgICAgICAgICBPbiBzdWNjZXNzLCBhbiBpZGVudGlmaWVyIGZvciB0aGUgbmV3bHkgY3JlYXRlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGtleS4gRm9yIHBlcnNpc3RlbnQga2V5cywgdGhpcyBpcyB0aGUga2V5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciBkZWZpbmVkIGluIFxwIGF0dHJpYnV0ZXMuCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgXGMgMCBvbiBmYWlsdXJlLgogICoKICAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCkBAIC0zNzU5LDcgKzM3MjgsNyBAQAogICogICAgICAgICByZXN1bHRzIGluIHRoaXMgZXJyb3IgY29kZS4KICAqLwogcHNhX3N0YXR1c190IHBzYV9nZW5lcmF0ZV9rZXkoY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90ICpoYW5kbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgKmtleSk7CiAKIC8qKkB9Ki8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wc2EvY3J5cHRvX2FjY2VsX2RyaXZlci5oIGIvaW5jbHVkZS9wc2EvY3J5cHRvX2FjY2VsX2RyaXZlci5oCmluZGV4IDFhMTkzYzUuLjQ0ODhlYTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHNhL2NyeXB0b19hY2NlbF9kcml2ZXIuaAorKysgYi9pbmNsdWRlL3BzYS9jcnlwdG9fYWNjZWxfZHJpdmVyLmgKQEAgLTc1LDcgKzc1LDcgQEAKICAqIFxwYXJhbVtpbixvdXRdIHBfY29udGV4dCAgICAgQSBzdHJ1Y3R1cmUgdGhhdCB3aWxsIGNvbnRhaW4gdGhlCiAgKiBoYXJkd2FyZS1zcGVjaWZpYyBoYXNoIGNvbnRleHQKICAqCi0gKiBccmV0dmFsICBQU0FfU1VDQ0VTUyAgICAgU3VjY2Vzcy4KKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTICAgICBTdWNjZXNzLgogICovCiB0eXBlZGVmIHBzYV9zdGF0dXNfdCAoKnBzYV9kcnZfaGFzaF9zZXR1cF90KShwc2FfZHJ2X2hhc2hfY29udGV4dF90ICpwX2NvbnRleHQpOwogCkBAIC0xMjAsNyArMTIwLDcgQEAKICAqIFxwYXJhbVtvdXRdIHBfb3V0cHV0X2xlbmd0aCAgVGhlIG51bWJlciBvZiBieXRlcyBwbGFjZWQgaW4gYHBfb3V0cHV0YCBhZnRlcgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzCiAgKgotICogXHJldHZhbCBQU0FfU1VDQ0VTUworICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKICAqICAgICAgICAgIFN1Y2Nlc3MuCiAgKi8KIHR5cGVkZWYgcHNhX3N0YXR1c190ICgqcHNhX2Rydl9oYXNoX2ZpbmlzaF90KShwc2FfZHJ2X2hhc2hfY29udGV4dF90ICpwX2NvbnRleHQsCkBAIC0xODgsNyArMTg4LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgdXNlZCBpbiB0aGUgb3BlcmF0aW9uCiAgKiBccGFyYW1baW5dIGtleV9sZW5ndGggICAgICAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBrZXkgbWF0ZXJpYWwKICAqCi0gKiBccmV0dmFsICBQU0FfU1VDQ0VTUworICogXHJldHZhbCAgI1BTQV9TVUNDRVNTCiAgKiAgICAgICAgICBTdWNjZXNzLgogICovCiB0eXBlZGVmIHBzYV9zdGF0dXNfdCAoKnBzYV9kcnZfYWNjZWxfbWFjX3NldHVwX3QpKHBzYV9kcnZfYWNjZWxfbWFjX2NvbnRleHRfdCAqcF9jb250ZXh0LApAQCAtMjM1LDcgKzIzNSw3IEBACiAgKiBccGFyYW1baW5dIG1hY19sZW5ndGggICAgICAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBidWZmZXIgdGhhdCBoYXMgYmVlbgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWQgZm9yIHRoZSBgcF9tYWNgIGJ1ZmZlcgogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCiAgKiAgICAgICAgICBTdWNjZXNzLgogICovCiB0eXBlZGVmIHBzYV9zdGF0dXNfdCAoKnBzYV9kcnZfYWNjZWxfbWFjX2ZpbmlzaF90KShwc2FfZHJ2X2FjY2VsX21hY19jb250ZXh0X3QgKnBfY29udGV4dCwKQEAgLTI2MSw3ICsyNjEsNyBAQAogICogXHBhcmFtW2luXSBtYWNfbGVuZ3RoICAgICAgICBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgZGF0YSBpbiB0aGUgYHBfbWFjYAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIKICAqCi0gKiBccmV0dmFsIFBTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwogICogICAgICAgICAgVGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGFuZCB0aGUgY29tcGFyaXNvbiBtYXRjaGVkCiAgKi8KIHR5cGVkZWYgcHNhX3N0YXR1c190ICgqcHNhX2Rydl9hY2NlbF9tYWNfZmluaXNoX3ZlcmlmeV90KShwc2FfZHJ2X2FjY2VsX21hY19jb250ZXh0X3QgKnBfY29udGV4dCwKQEAgLTMzNSw3ICszMzUsNyBAQAogICogXHBhcmFtW2luXSBwX21hYyAgICAgICAgICBUaGUgTUFDIGRhdGEgdG8gYmUgY29tcGFyZWQKICAqIFxwYXJhbVtpbl0gbWFjX2xlbmd0aCAgICAgVGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgYHBfbWFjYCBidWZmZXIKICAqCi0gKiBccmV0dmFsIFBTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwogICogIFRoZSBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhbmQgdGhlIGNvbXBhcmlzb24gbWF0Y2hlZAogICovCiB0eXBlZGVmIHBzYV9zdGF0dXNfdCAoKnBzYV9kcnZfYWNjZWxfbWFjX3ZlcmlmeV90KShjb25zdCB1aW50OF90ICpwX2lucHV0LApAQCAtMzk2LDcgKzM5Niw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHVzZWQgaW4gdGhlIG9wZXJhdGlvbgogICogXHBhcmFtW2luXSBrZXlfZGF0YV9zaXplICAgICBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUga2V5IG1hdGVyaWFsCiAgKgotICogXHJldHZhbCBQU0FfU1VDQ0VTUworICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKICAqLwogdHlwZWRlZiBwc2Ffc3RhdHVzX3QgKCpwc2FfZHJ2X2FjY2VsX2NpcGhlcl9zZXR1cF90KShwc2FfZHJ2X2FjY2VsX2NpcGhlcl9jb250ZXh0X3QgKnBfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2VuY3J5cHRfb3JfZGVjcnlwdF90IGRpcmVjdGlvbiwKQEAgLTQxOSw3ICs0MTksNyBAQAogICogXHBhcmFtW2luXSBwX2l2ICAgICAgICAgICAgICBBIGJ1ZmZlciBjb250YWluaW5nIHRoZSBpbml0aWFsaXphdGlvbiB2ZWNvdHIKICAqIFxwYXJhbVtpbl0gaXZfbGVuZ3RoICAgICAgICAgVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNvbnRlbnRzIG9mIGBwX2l2YAogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCiAgKi8KIHR5cGVkZWYgcHNhX3N0YXR1c190ICgqcHNhX2Rydl9hY2NlbF9jaXBoZXJfc2V0X2l2X3QpKHBzYV9kcnZfYWNjZWxfY2lwaGVyX2NvbnRleHRfdCAqcF9jb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcF9pdiwKQEAgLTQ0OCw3ICs0NDgsNyBAQAogICogXHBhcmFtW291dF0gcF9vdXRwdXRfbGVuZ3RoICAgICAgQWZ0ZXIgY29tcGxldGlvbiwgd2lsbCBjb250YWluIHRoZSBudW1iZXIKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGJ5dGVzIHBsYWNlZCBpbiB0aGUgYHBfb3V0cHV0YCBidWZmZXIKICAqCi0gKiBccmV0dmFsIFBTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwogICovCiB0eXBlZGVmIHBzYV9zdGF0dXNfdCAoKnBzYV9kcnZfYWNjZWxfY2lwaGVyX3VwZGF0ZV90KShwc2FfZHJ2X2FjY2VsX2NpcGhlcl9jb250ZXh0X3QgKnBfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBfaW5wdXQsCkBAIC00NzcsNyArNDc3LDcgQEAKICAqIFxwYXJhbVtvdXRdIHBfb3V0cHV0X2xlbmd0aCAgQWZ0ZXIgY29tcGxldGlvbiwgd2lsbCBjb250YWluIHRoZSBudW1iZXIgb2YKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgcGxhY2VkIGluIHRoZSBgcF9vdXRwdXRgIGJ1ZmZlcgogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCiAgKi8KIHR5cGVkZWYgcHNhX3N0YXR1c190ICgqcHNhX2Rydl9hY2NlbF9jaXBoZXJfZmluaXNoX3QpKHBzYV9kcnZfYWNjZWxfY2lwaGVyX2NvbnRleHRfdCAqcF9jb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcF9vdXRwdXQsCkBAIC00OTksNyArNDk5LDcgQEAKICAqIFxwYXJhbVtpbixvdXRdIHBfY29udGV4dCAgICAgQSBoYXJkd2FyZS1zcGVjaWZpYyBzdHJ1Y3R1cmUgZm9yIHRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IHN0YXJ0ZWQgY2lwaGVyIG9wZXJhdGlvbgogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCiAgKi8KIHR5cGVkZWYgcHNhX3N0YXR1c190ICgqcHNhX2Rydl9hY2NlbF9jaXBoZXJfYWJvcnRfdCkocHNhX2Rydl9hY2NlbF9jaXBoZXJfY29udGV4dF90ICpwX2NvbnRleHQpOwogCkBAIC02NTksNyArNjU5LDcgQEAKICAqIFxwYXJhbVtvdXRdIHBfc2lnbmF0dXJlX2xlbmd0aCAgIE9uIHN1Y2Nlc3MsIHRoZSBudW1iZXIgb2YgYnl0ZXMKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgbWFrZSB1cCB0aGUgcmV0dXJuZWQgc2lnbmF0dXJlIHZhbHVlCiAgKgotICogXHJldHZhbCBQU0FfU1VDQ0VTUworICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKICAqLwogdHlwZWRlZiBwc2Ffc3RhdHVzX3QgKCpwc2FfZHJ2X2FjY2VsX2FzeW1tZXRyaWNfc2lnbl90KShjb25zdCB1aW50OF90ICpwX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGtleV9zaXplLApAQCAtNjk3LDcgKzY5Nyw3IEBACiAgKiBccGFyYW1baW5dIHBfc2lnbmF0dXJlICAgICAgIEJ1ZmZlciBjb250YWluaW5nIHRoZSBzaWduYXR1cmUgdG8gdmVyaWZ5CiAgKiBccGFyYW1baW5dIHNpZ25hdHVyZV9sZW5ndGggIFNpemUgb2YgdGhlIGBwX3NpZ25hdHVyZWAgYnVmZmVyIGluIGJ5dGVzCiAgKgotICogXHJldHZhbCBQU0FfU1VDQ0VTUworICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKICAqICAgICAgICAgVGhlIHNpZ25hdHVyZSBpcyB2YWxpZC4KICAqLwogdHlwZWRlZiBwc2Ffc3RhdHVzX3QgKCpwc2FfZHJ2X2FjY2VsX2FzeW1tZXRyaWNfdmVyaWZ5X3QpKGNvbnN0IHVpbnQ4X3QgKnBfa2V5LApAQCAtNzQ4LDcgKzc0OCw3IEBACiAgKiBccGFyYW1bb3V0XSBwX291dHB1dF9sZW5ndGggIE9uIHN1Y2Nlc3MsIHRoZSBudW1iZXIgb2YgYnl0ZXMKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBtYWtlIHVwIHRoZSByZXR1cm5lZCBvdXRwdXQKICAqCi0gKiBccmV0dmFsIFBTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwogICovCiB0eXBlZGVmIHBzYV9zdGF0dXNfdCAoKnBzYV9kcnZfYWNjZWxfYXN5bW1ldHJpY19lbmNyeXB0X3QpKGNvbnN0IHVpbnQ4X3QgKnBfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qga2V5X3NpemUsCkBAIC04MDAsNyArODAwLDcgQEAKICAqIFxwYXJhbVtvdXRdIHBfb3V0cHV0X2xlbmd0aCAgT24gc3VjY2VzcywgdGhlIG51bWJlciBvZiBieXRlcwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IG1ha2UgdXAgdGhlIHJldHVybmVkIG91dHB1dAogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCiAgKi8KIHR5cGVkZWYgcHNhX3N0YXR1c190ICgqcHNhX2Rydl9hY2NlbF9hc3ltbWV0cmljX2RlY3J5cHRfdCkoY29uc3QgdWludDhfdCAqcF9rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXlfc2l6ZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHNhL2NyeXB0b19jb21wYXQuaCBiL2luY2x1ZGUvcHNhL2NyeXB0b19jb21wYXQuaAppbmRleCA0YjYwN2I2Li44NmFhMjcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BzYS9jcnlwdG9fY29tcGF0LmgKKysrIGIvaW5jbHVkZS9wc2EvY3J5cHRvX2NvbXBhdC5oCkBAIC0zNCw2ICszNCwyNyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorLyoKKyAqIFRvIHN1cHBvcnQgYm90aCBvcGVubGVzcyBBUElzIGFuZCBwc2Ffb3Blbl9rZXkoKSB0ZW1wb3JhcmlseSwgZGVmaW5lCisgKiBwc2Ffa2V5X2hhbmRsZV90IHRvIGJlIGVxdWFsIHRvIG1iZWR0bHNfc3ZjX2tleV9pZF90LiBEbyBub3QgbWFyayB0aGUKKyAqIHR5cGUgYW5kIGl0cyB1dGlsaXR5IG1hY3JvcyBhbmQgZnVuY3Rpb25zIGRlcHJlY2F0ZWQgeWV0LiBUaGlzIHdpbGwgYmUgZG9uZQorICogaW4gYSBzdWJzZXF1ZW50IHBoYXNlLgorICovCit0eXBlZGVmIG1iZWR0bHNfc3ZjX2tleV9pZF90IHBzYV9rZXlfaGFuZGxlX3Q7CisKKyNkZWZpbmUgUFNBX0tFWV9IQU5ETEVfSU5JVCBNQkVEVExTX1NWQ19LRVlfSURfSU5JVAorCisvKiogQ2hlY2sgd2V0aGVyIGFuIGhhbmRsZSBpcyBudWxsLgorICoKKyAqIFxwYXJhbSBoYW5kbGUgIEhhbmRsZQorICoKKyAqIFxyZXR1cm4gTm9uLXplcm8gaWYgdGhlIGhhbmRsZSBpcyBudWxsLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHNhX2tleV9oYW5kbGVfaXNfbnVsbCggcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgKQoreworICAgIHJldHVybiggbWJlZHRsc19zdmNfa2V5X2lkX2lzX251bGwoIGhhbmRsZSApICk7Cit9CisKICNpZiAhZGVmaW5lZChNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRCkKIAogLyoKQEAgLTExMywxMCArMTM0LDYgQEAKICAgICByZXR1cm4gcHNhX3ZlcmlmeV9oYXNoKCBrZXksIGFsZywgaGFzaCwgaGFzaF9sZW5ndGgsIHNpZ25hdHVyZSwgc2lnbmF0dXJlX2xlbmd0aCApOwogfQogCi0KLQotI2VuZGlmIC8qIE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVEICovCi0KIC8qCiAgKiBTaXplLXNwZWNpZmljIGVsbGlwdGljIGN1cnZlIGZhbWlsaWVzLgogICovCkBAIC0yMjMsNiArMjQwLDEwOSBAQAogI2RlZmluZSBQU0FfREhfR1JPVVBfQ1VTVE9NIFwKICAgICBNQkVEVExTX0RFUFJFQ0FURURfQ09OU1RBTlQoIHBzYV9kaF9mYW1pbHlfdCwgUFNBX0RIX0ZBTUlMWV9DVVNUT00gKQogCisjZW5kaWYgLyogTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQgKi8KKworLyoqIE9wZW4gYSBoYW5kbGUgdG8gYW4gZXhpc3RpbmcgcGVyc2lzdGVudCBrZXkuCisgKgorICogT3BlbiBhIGhhbmRsZSB0byBhIHBlcnNpc3RlbnQga2V5LiBBIGtleSBpcyBwZXJzaXN0ZW50IGlmIGl0IHdhcyBjcmVhdGVkCisgKiB3aXRoIGEgbGlmZXRpbWUgb3RoZXIgdGhhbiAjUFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRS4gQSBwZXJzaXN0ZW50IGtleQorICogYWx3YXlzIGhhcyBhIG5vbnplcm8ga2V5IGlkZW50aWZpZXIsIHNldCB3aXRoIHBzYV9zZXRfa2V5X2lkKCkgd2hlbgorICogY3JlYXRpbmcgdGhlIGtleS4gSW1wbGVtZW50YXRpb25zIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgcHJlLXByb3Zpc2lvbmVkCisgKiBrZXlzIHRoYXQgY2FuIGJlIG9wZW5lZCB3aXRoIHBzYV9vcGVuX2tleSgpLiBTdWNoIGtleXMgaGF2ZSBhbiBhcHBsaWNhdGlvbgorICoga2V5IGlkZW50aWZpZXIgaW4gdGhlIHZlbmRvciByYW5nZSwgYXMgZG9jdW1lbnRlZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YKKyAqICNwc2Ffa2V5X2lkX3QuCisgKgorICogVGhlIGFwcGxpY2F0aW9uIG11c3QgZXZlbnR1YWxseSBjbG9zZSB0aGUgaGFuZGxlIHdpdGggcHNhX2Nsb3NlX2tleSgpIG9yCisgKiBwc2FfZGVzdHJveV9rZXkoKSB0byByZWxlYXNlIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBJZiB0aGUgYXBwbGljYXRpb24gZGllcworICogd2l0aG91dCBjYWxsaW5nIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMsIHRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgcGVyZm9ybQorICogdGhlIGVxdWl2YWxlbnQgb2YgYSBjYWxsIHRvIHBzYV9jbG9zZV9rZXkoKS4KKyAqCisgKiBTb21lIGltcGxlbWVudGF0aW9ucyBwZXJtaXQgYW4gYXBwbGljYXRpb24gdG8gb3BlbiB0aGUgc2FtZSBrZXkgbXVsdGlwbGUKKyAqIHRpbWVzLiBJZiB0aGlzIGlzIHN1Y2Nlc3NmdWwsIGVhY2ggY2FsbCB0byBwc2Ffb3Blbl9rZXkoKSB3aWxsIHJldHVybiBhCisgKiBkaWZmZXJlbnQga2V5IGhhbmRsZS4KKyAqCisgKiBcbm90ZSBUaGlzIEFQSSBpcyBub3QgcGFydCBvZiB0aGUgUFNBIENyeXB0b2dyYXBoeSBBUEkgUmVsZWFzZSAxLjAuMAorICogc3BlY2lmaWNhdGlvbi4gSXQgd2FzIGRlZmluZWQgaW4gdGhlIDEuMCBCZXRhIDMgdmVyc2lvbiBvZiB0aGUKKyAqIHNwZWNpZmljYXRpb24gYnV0IHdhcyByZW1vdmVkIGluIHRoZSAxLjAuMCByZWxlYXNlZCB2ZXJzaW9uLiBUaGlzIEFQSSBpcworICoga2VwdCBmb3IgdGhlIHRpbWUgYmVpbmcgdG8gbm90IGJyZWFrIGFwcGxpY2F0aW9ucyByZWx5aW5nIG9uIGl0LiBJdCBpcyBub3QKKyAqIGRlcHJlY2F0ZWQgeWV0IGJ1dCB3aWxsIGJlIGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAqCisgKiBcbm90ZSBBcHBsaWNhdGlvbnMgdGhhdCByZWx5IG9uIG9wZW5pbmcgYSBrZXkgbXVsdGlwbGUgdGltZXMgd2lsbCBub3QgYmUKKyAqIHBvcnRhYmxlIHRvIGltcGxlbWVudGF0aW9ucyB0aGF0IG9ubHkgcGVybWl0IGEgc2luZ2xlIGtleSBoYW5kbGUgdG8gYmUKKyAqIG9wZW5lZC4gU2VlIGFsc28gOnJlZjpcYGtleS1oYW5kbGVzXGAuCisgKgorICoKKyAqIFxwYXJhbSBrZXkgICAgICAgICAgIFRoZSBwZXJzaXN0ZW50IGlkZW50aWZpZXIgb2YgdGhlIGtleS4KKyAqIFxwYXJhbVtvdXRdIGhhbmRsZSAgIE9uIHN1Y2Nlc3MsIGEgaGFuZGxlIHRvIHRoZSBrZXkuCisgKgorICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKKyAqICAgICAgICAgU3VjY2Vzcy4gVGhlIGFwcGxpY2F0aW9uIGNhbiBub3cgdXNlIHRoZSB2YWx1ZSBvZiBgKmhhbmRsZWAKKyAqICAgICAgICAgdG8gYWNjZXNzIHRoZSBrZXkuCisgKiBccmV0dmFsICNQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQorICogICAgICAgICBUaGUgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IHJlc291cmNlcyB0byBvcGVuIHRoZQorICogICAgICAgICBrZXkuIFRoaXMgY2FuIGJlIGR1ZSB0byByZWFjaGluZyBhbiBpbXBsZW1lbnRhdGlvbiBsaW1pdCBvbiB0aGUKKyAqICAgICAgICAgbnVtYmVyIG9mIG9wZW4ga2V5cywgdGhlIG51bWJlciBvZiBvcGVuIGtleSBoYW5kbGVzLCBvciBhdmFpbGFibGUKKyAqICAgICAgICAgbWVtb3J5LgorICogXHJldHZhbCAjUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUCisgKiAgICAgICAgIFRoZXJlIGlzIG5vIHBlcnNpc3RlbnQga2V5IHdpdGgga2V5IGlkZW50aWZpZXIgXHAgaWQuCisgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorICogICAgICAgICBccCBpZCBpcyBub3QgYSB2YWxpZCBwZXJzaXN0ZW50IGtleSBpZGVudGlmaWVyLgorICogXHJldHZhbCAjUFNBX0VSUk9SX05PVF9QRVJNSVRURUQKKyAqICAgICAgICAgVGhlIHNwZWNpZmllZCBrZXkgZXhpc3RzLCBidXQgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IGhhdmUgdGhlCisgKiAgICAgICAgIHBlcm1pc3Npb24gdG8gYWNjZXNzIGl0LiBOb3RlIHRoYXQgdGhpcyBzcGVjaWZpY2F0aW9uIGRvZXMgbm90CisgKiAgICAgICAgIGRlZmluZSBhbnkgd2F5IHRvIGNyZWF0ZSBzdWNoIGEga2V5LCBidXQgaXQgbWF5IGJlIHBvc3NpYmxlCisgKiAgICAgICAgIHRocm91Z2ggaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgbWVhbnMuCisgKiBccmV0dmFsICNQU0FfRVJST1JfQ09NTVVOSUNBVElPTl9GQUlMVVJFCisgKiBccmV0dmFsICNQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRAorICogXHJldHZhbCAjUFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQorICogXHJldHZhbCAjUFNBX0VSUk9SX0JBRF9TVEFURQorICogICAgICAgICBUaGUgbGlicmFyeSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBpbml0aWFsaXplZCBieSBwc2FfY3J5cHRvX2luaXQoKS4KKyAqICAgICAgICAgSXQgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IHdoZXRoZXIgYSBmYWlsdXJlIHRvIGluaXRpYWxpemUKKyAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCisgKi8KK3BzYV9zdGF0dXNfdCBwc2Ffb3Blbl9rZXkoIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgKmhhbmRsZSApOworCisvKiogQ2xvc2UgYSBrZXkgaGFuZGxlLgorICoKKyAqIElmIHRoZSBoYW5kbGUgZGVzaWduYXRlcyBhIHZvbGF0aWxlIGtleSwgdGhpcyB3aWxsIGRlc3Ryb3kgdGhlIGtleSBtYXRlcmlhbAorICogYW5kIGZyZWUgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzLCBqdXN0IGxpa2UgcHNhX2Rlc3Ryb3lfa2V5KCkuCisgKgorICogSWYgdGhpcyBpcyB0aGUgbGFzdCBvcGVuIGhhbmRsZSB0byBhIHBlcnNpc3RlbnQga2V5LCB0aGVuIGNsb3NpbmcgdGhlIGhhbmRsZQorICogd2lsbCBmcmVlIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkgaW4gdm9sYXRpbGUgbWVtb3J5LiBUaGUga2V5CisgKiBkYXRhIGluIHBlcnNpc3RlbnQgc3RvcmFnZSBpcyBub3QgYWZmZWN0ZWQgYW5kIGNhbiBiZSBvcGVuZWQgYWdhaW4gbGF0ZXIKKyAqIHdpdGggYSBjYWxsIHRvIHBzYV9vcGVuX2tleSgpLgorICoKKyAqIENsb3NpbmcgdGhlIGtleSBoYW5kbGUgbWFrZXMgdGhlIGhhbmRsZSBpbnZhbGlkLCBhbmQgdGhlIGtleSBoYW5kbGUKKyAqIG11c3Qgbm90IGJlIHVzZWQgYWdhaW4gYnkgdGhlIGFwcGxpY2F0aW9uLgorICoKKyAqIFxub3RlIFRoaXMgQVBJIGlzIG5vdCBwYXJ0IG9mIHRoZSBQU0EgQ3J5cHRvZ3JhcGh5IEFQSSBSZWxlYXNlIDEuMC4wCisgKiBzcGVjaWZpY2F0aW9uLiBJdCB3YXMgZGVmaW5lZCBpbiB0aGUgMS4wIEJldGEgMyB2ZXJzaW9uIG9mIHRoZQorICogc3BlY2lmaWNhdGlvbiBidXQgd2FzIHJlbW92ZWQgaW4gdGhlIDEuMC4wIHJlbGVhc2VkIHZlcnNpb24uIFRoaXMgQVBJIGlzCisgKiBrZXB0IGZvciB0aGUgdGltZSBiZWluZyB0byBub3QgYnJlYWsgYXBwbGljYXRpb25zIHJlbHlpbmcgb24gaXQuIEl0IGlzIG5vdAorICogZGVwcmVjYXRlZCB5ZXQgYnV0IHdpbGwgYmUgaW4gdGhlIG5lYXIgZnV0dXJlLgorICoKKyAqIFxub3RlIElmIHRoZSBrZXkgaGFuZGxlIHdhcyB1c2VkIHRvIHNldCB1cCBhbiBhY3RpdmUKKyAqIDpyZWY6XGBtdWx0aXBhcnQgb3BlcmF0aW9uIDxtdWx0aXBhcnQtb3BlcmF0aW9ucz5cYCwgdGhlbiBjbG9zaW5nIHRoZQorICoga2V5IGhhbmRsZSBjYW4gY2F1c2UgdGhlIG11bHRpcGFydCBvcGVyYXRpb24gdG8gZmFpbC4gQXBwbGljYXRpb25zIHNob3VsZAorICogbWFpbnRhaW4gdGhlIGtleSBoYW5kbGUgdW50aWwgYWZ0ZXIgdGhlIG11bHRpcGFydCBvcGVyYXRpb24gaGFzIGZpbmlzaGVkLgorICoKKyAqIFxwYXJhbSBoYW5kbGUgICAgICAgIFRoZSBrZXkgaGFuZGxlIHRvIGNsb3NlLgorICogICAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyBcYyAwLCBkbyBub3RoaW5nIGFuZCByZXR1cm4gXGMgUFNBX1NVQ0NFU1MuCisgKgorICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKKyAqICAgICAgICAgXHAgaGFuZGxlIHdhcyBhIHZhbGlkIGhhbmRsZSBvciBcYyAwLiBJdCBpcyBub3cgY2xvc2VkLgorICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfSEFORExFCisgKiAgICAgICAgIFxwIGhhbmRsZSBpcyBub3QgYSB2YWxpZCBoYW5kbGUgbm9yIFxjIDAuCisgKiBccmV0dmFsICNQU0FfRVJST1JfQ09NTVVOSUNBVElPTl9GQUlMVVJFCisgKiBccmV0dmFsICNQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRAorICogXHJldHZhbCAjUFNBX0VSUk9SX0JBRF9TVEFURQorICogICAgICAgICBUaGUgbGlicmFyeSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBpbml0aWFsaXplZCBieSBwc2FfY3J5cHRvX2luaXQoKS4KKyAqICAgICAgICAgSXQgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IHdoZXRoZXIgYSBmYWlsdXJlIHRvIGluaXRpYWxpemUKKyAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCisgKi8KK3BzYV9zdGF0dXNfdCBwc2FfY2xvc2Vfa2V5KHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHNhL2NyeXB0b19jb25maWcuaCBiL2luY2x1ZGUvcHNhL2NyeXB0b19jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTJhNTIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qKgorICogXGZpbGUgcHNhL2NyeXB0b19jb25maWcuaAorICogXGJyaWVmIFBTQSBjcnlwdG8gY29uZmlndXJhdGlvbiBvcHRpb25zIChzZXQgb2YgZGVmaW5lcykKKyAqCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcpCisvKioKKyAqIFdoZW4gI01CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgaXMgZW5hYmxlZCBpbiBjb25maWcuaCwKKyAqIHRoaXMgZmlsZSBkZXRlcm1pbmVzIHdoaWNoIGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtcyBhcmUgZW5hYmxlZAorICogdGhyb3VnaCB0aGUgUFNBIENyeXB0b2dyYXBoeSBBUEkgKFxjIHBzYV94eHgoKSBmdW5jdGlvbnMpLgorICoKKyAqIFRvIGVuYWJsZSBhIGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtLCB1bmNvbW1lbnQgdGhlIGRlZmluaXRpb24gb2YKKyAqIHRoZSBjb3JyZXNwb25kaW5nIFxjIFBTQV9XQU5UX3h4eCBwcmVwcm9jZXNzb3Igc3ltYm9sLgorICogVG8gZGlzYWJsZSBhIGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtLCBjb21tZW50IG91dCB0aGUgZGVmaW5pdGlvbiBvZgorICogdGhlIGNvcnJlc3BvbmRpbmcgXGMgUFNBX1dBTlRfeHh4IHByZXByb2Nlc3NvciBzeW1ib2wuCisgKiBUaGUgbmFtZXMgb2YgY3J5cHRvZ3JhcGhpYyBtZWNoYW5pc21zIGNvcnJlc3BvbmQgdG8gdmFsdWVzCisgKiBkZWZpbmVkIGluIHBzYS9jcnlwdG9fdmFsdWVzLmgsIHdpdGggdGhlIHByZWZpeCBcYyBQU0FfV0FOVF8gaW5zdGVhZAorICogb2YgXGMgUFNBXy4KKyAqCisgKiBOb3RlIHRoYXQgbWFueSBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbXMgaW52b2x2ZSB0d28gc3ltYm9sczogb25lIGZvcgorICogdGhlIGtleSB0eXBlIChcYyBQU0FfV0FOVF9LRVlfVFlQRV94eHgpIGFuZCBvbmUgZm9yIHRoZSBhbGdvcml0aG0KKyAqIChcYyBQU0FfV0FOVF9BTEdfeHh4KS4gTWVjaGFuaXNtcyB3aXRoIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBtYXkgaW52b2x2ZQorICogYWRkaXRpb25hbCBzeW1ib2xzLgorICovCisjZWxzZQorLyoqCisgKiBXaGVuIFxjIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgaXMgZGlzYWJsZWQgaW4gY29uZmlnLmgsCisgKiB0aGlzIGZpbGUgaXMgbm90IHVzZWQsIGFuZCBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbXMgYXJlIHN1cHBvcnRlZAorICogdGhyb3VnaCB0aGUgUFNBIEFQSSBpZiBhbmQgb25seSBpZiB0aGV5IGFyZSBzdXBwb3J0ZWQgdGhyb3VnaCB0aGUKKyAqIG1iZWR0bHNfeHh4IEFQSS4KKyAqLworI2VuZGlmCisvKgorICogIENvcHlyaWdodCBUaGUgTWJlZCBUTFMgQ29udHJpYnV0b3JzCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgUFNBX0NSWVBUT19DT05GSUdfSAorI2RlZmluZSBQU0FfQ1JZUFRPX0NPTkZJR19ICisKKyNkZWZpbmUgUFNBX1dBTlRfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EgICAgICAgIDEKKyNkZWZpbmUgUFNBX1dBTlRfQUxHX0VDREggICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUFNBX1dBTlRfQUxHX0VDRFNBICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUFNBX1dBTlRfQUxHX0hLREYgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUFNBX1dBTlRfQUxHX0hNQUMgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUFNBX1dBTlRfQUxHX1JTQV9PQUVQICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUFNBX1dBTlRfQUxHX1JTQV9QS0NTMVYxNV9DUllQVCAgICAgICAgIDEKKyNkZWZpbmUgUFNBX1dBTlRfQUxHX1JTQV9QS0NTMVYxNV9TSUdOICAgICAgICAgIDEKKyNkZWZpbmUgUFNBX1dBTlRfQUxHX1JTQV9QU1MgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUFNBX1dBTlRfQUxHX1RMUzEyX1BSRiAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUFNBX1dBTlRfQUxHX1RMUzEyX1BTS19UT19NUyAgICAgICAgICAgIDEKKyNkZWZpbmUgUFNBX1dBTlRfS0VZX1RZUEVfRUNDX0tFWV9QQUlSICAgICAgICAgIDEKKyNkZWZpbmUgUFNBX1dBTlRfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVkgICAgICAgIDEKKyNkZWZpbmUgUFNBX1dBTlRfS0VZX1RZUEVfUlNBX0tFWV9QQUlSICAgICAgICAgIDEKKyNkZWZpbmUgUFNBX1dBTlRfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVkgICAgICAgIDEKKworI2VuZGlmIC8qIFBTQV9DUllQVE9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHNhL2NyeXB0b19lbnRyb3B5X2RyaXZlci5oIGIvaW5jbHVkZS9wc2EvY3J5cHRvX2VudHJvcHlfZHJpdmVyLmgKaW5kZXggNjE3NTA0NC4uOWI2NTQ2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wc2EvY3J5cHRvX2VudHJvcHlfZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9wc2EvY3J5cHRvX2VudHJvcHlfZHJpdmVyLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIGFueSBjb250ZXh0IGluZm9ybWF0aW9uIGZvcgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbXBsZW1lbnRhdGlvbgogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCiAgKi8KIHR5cGVkZWYgcHNhX3N0YXR1c190ICgqcHNhX2Rydl9lbnRyb3B5X2luaXRfdCkodm9pZCAqcF9jb250ZXh0KTsKIApAQCAtNzUsNyArNzUsNyBAQAogICogXHBhcmFtW291dF0gcF9yZWNlaXZlZF9lbnRyb3B5X2JpdHMgICAgICBUaGUgYW1vdW50IG9mIGVudHJvcHkgKGluIGJpdHMpCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbGx5IHByb3ZpZGVkIGluIGBwX2J1ZmZlcmAKICAqCi0gKiBccmV0dmFsIFBTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwogICovCiB0eXBlZGVmIHBzYV9zdGF0dXNfdCAoKnBzYV9kcnZfZW50cm9weV9nZXRfYml0c190KSh2b2lkICpwX2NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwX2J1ZmZlciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHNhL2NyeXB0b19leHRyYS5oIGIvaW5jbHVkZS9wc2EvY3J5cHRvX2V4dHJhLmgKaW5kZXggNzFhZGI5My4uYjI1YWRkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wc2EvY3J5cHRvX2V4dHJhLmgKKysrIGIvaW5jbHVkZS9wc2EvY3J5cHRvX2V4dHJhLmgKQEAgLTIzMSw2ICsyMzEsOCBAQAogICAgIHNpemVfdCBjYWNoZV9zbG90czsKICAgICAvKiogTnVtYmVyIG9mIHNsb3RzIHRoYXQgYXJlIG5vdCB1c2VkIGZvciBhbnl0aGluZy4gKi8KICAgICBzaXplX3QgZW1wdHlfc2xvdHM7CisgICAgLyoqIE51bWJlciBvZiBzbG90cyB0aGF0IGFyZSBsb2NrZWQuICovCisgICAgc2l6ZV90IGxvY2tlZF9zbG90czsKICAgICAvKiogTGFyZ2VzdCBrZXkgaWQgdmFsdWUgYW1vbmcgb3BlbiBrZXlzIGluIGludGVybmFsIHBlcnNpc3RlbnQgc3RvcmFnZS4gKi8KICAgICBwc2Ffa2V5X2lkX3QgbWF4X29wZW5faW50ZXJuYWxfa2V5X2lkOwogICAgIC8qKiBMYXJnZXN0IGtleSBpZCB2YWx1ZSBhbW9uZyBvcGVuIGtleXMgaW4gc2VjdXJlIGVsZW1lbnRzLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wc2EvY3J5cHRvX3BsYXRmb3JtLmggYi9pbmNsdWRlL3BzYS9jcnlwdG9fcGxhdGZvcm0uaAppbmRleCBjNjRmNjFkLi41NjczOThkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BzYS9jcnlwdG9fcGxhdGZvcm0uaAorKysgYi9pbmNsdWRlL3BzYS9jcnlwdG9fcGxhdGZvcm0uaApAQCAtNDEsNiArNDEsMTAgQEAKICNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKICNlbmRpZgogCisvKiBUcmFuc2xhdGUgYmV0d2VlbiBjbGFzc2ljIE1CRURUTFNfeHh4IGZlYXR1cmUgc3ltYm9scyBhbmQgUFNBX3h4eAorICogZmVhdHVyZSBzeW1ib2xzLiAqLworI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnX3BzYS5oIgorCiAvKiBQU0EgcmVxdWlyZXMgc2V2ZXJhbCB0eXBlcyB3aGljaCBDOTkgcHJvdmlkZXMgaW4gc3RkaW50LmguICovCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAKQEAgLTQ5LDkgKzUzLDYgQEAKICNkZWZpbmUgaW5saW5lIF9faW5saW5lCiAjZW5kaWYKIAotLyogSW50ZWdyYWwgdHlwZSByZXByZXNlbnRpbmcgYSBrZXkgaGFuZGxlLiAqLwotdHlwZWRlZiB1aW50MTZfdCBwc2Ffa2V5X2hhbmRsZV90OwotCiAjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIpCiAKIC8qIEJ1aWxkaW5nIGZvciB0aGUgUFNBIENyeXB0byBzZXJ2aWNlIG9uIGEgUFNBIHBsYXRmb3JtLCBhIGtleSBvd25lciBpcyBhIFBTQQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wc2EvY3J5cHRvX3NlX2RyaXZlci5oIGIvaW5jbHVkZS9wc2EvY3J5cHRvX3NlX2RyaXZlci5oCmluZGV4IDQ2YjJkNjQuLjFmYWU1NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHNhL2NyeXB0b19zZV9kcml2ZXIuaAorKysgYi9pbmNsdWRlL3BzYS9jcnlwdG9fc2VfZHJpdmVyLmgKQEAgLTE3OCw3ICsxNzgsNyBAQAogICogXHBhcmFtW2luXSBhbGdvcml0aG0gICAgICAgICBUaGUgYWxnb3JpdGhtIHRvIGJlIHVzZWQgdG8gdW5kZXJseSB0aGUgTUFDCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbgogICoKLSAqIFxyZXR2YWwgIFBTQV9TVUNDRVNTCisgKiBccmV0dmFsICAjUFNBX1NVQ0NFU1MKICAqICAgICAgICAgIFN1Y2Nlc3MuCiAgKi8KIHR5cGVkZWYgcHNhX3N0YXR1c190ICgqcHNhX2Rydl9zZV9tYWNfc2V0dXBfdCkocHNhX2Rydl9zZV9jb250ZXh0X3QgKmRydl9jb250ZXh0LApAQCAtMjEzLDcgKzIxMyw3IEBACiAgKiBccGFyYW1bb3V0XSBwX21hY19sZW5ndGggICAgIEFmdGVyIGNvbXBsZXRpb24sIHdpbGwgY29udGFpbiB0aGUgbnVtYmVyIG9mCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIHBsYWNlZCBpbiB0aGUgYHBfbWFjYCBidWZmZXIKICAqCi0gKiBccmV0dmFsIFBTQV9TVUNDRVNTCisgKiBccmV0dmFsICAjUFNBX1NVQ0NFU1MKICAqICAgICAgICAgIFN1Y2Nlc3MuCiAgKi8KIHR5cGVkZWYgcHNhX3N0YXR1c190ICgqcHNhX2Rydl9zZV9tYWNfZmluaXNoX3QpKHZvaWQgKm9wX2NvbnRleHQsCkBAIC0yMzAsMTAgKzIzMCwxMCBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGNvbXBhcmVkIGFnYWluc3QKICAqIFxwYXJhbVtpbl0gbWFjX2xlbmd0aCAgICAgICAgVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHZhbHVlIHN0b3JlZCBpbiBgcF9tYWNgCiAgKgotICogXHJldHZhbCBQU0FfU1VDQ0VTUworICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKICAqICAgICAgICAgVGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGFuZCB0aGUgTUFDcyBtYXRjaGVkIGVhY2gKICAqICAgICAgICAgb3RoZXIKLSAqIFxyZXR2YWwgUFNBX0VSUk9SX0lOVkFMSURfU0lHTkFUVVJFCisgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9TSUdOQVRVUkUKICAqICAgICAgICAgVGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBidXQgdGhlIGNhbGN1bGF0ZWQgTUFDIGRpZAogICogICAgICAgICBub3QgbWF0Y2ggdGhlIHByb3ZpZGVkIE1BQwogICovCkBAIC0yNjQsNyArMjY0LDcgQEAKICAqIFxwYXJhbVtvdXRdIHBfbWFjX2xlbmd0aCAgICAgQWZ0ZXIgY29tcGxldGlvbiwgd2lsbCBjb250YWluIHRoZSBudW1iZXIgb2YKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgcGxhY2VkIGluIHRoZSBgb3V0cHV0YCBidWZmZXIKICAqCi0gKiBccmV0dmFsIFBTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwogICogICAgICAgICBTdWNjZXNzLgogICovCiB0eXBlZGVmIHBzYV9zdGF0dXNfdCAoKnBzYV9kcnZfc2VfbWFjX2dlbmVyYXRlX3QpKHBzYV9kcnZfc2VfY29udGV4dF90ICpkcnZfY29udGV4dCwKQEAgLTI4OSwxMCArMjg5LDEwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgY29tcGFyZWQgYWdhaW5zdAogICogXHBhcmFtW2luXSBtYWNfbGVuZ3RoICAgVGhlIHNpemUgaW4gYnl0ZXMgb2YgYG1hY2AKICAqCi0gKiBccmV0dmFsIFBTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwogICogICAgICAgICBUaGUgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgYW5kIHRoZSBNQUNzIG1hdGNoZWQgZWFjaAogICogICAgICAgICBvdGhlcgotICogXHJldHZhbCBQU0FfRVJST1JfSU5WQUxJRF9TSUdOQVRVUkUKKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlZBTElEX1NJR05BVFVSRQogICogICAgICAgICBUaGUgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGJ1dCB0aGUgY2FsY3VsYXRlZCBNQUMgZGlkCiAgKiAgICAgICAgIG5vdCBtYXRjaCB0aGUgcHJvdmlkZWQgTUFDCiAgKi8KQEAgLTM4NCw4ICszODQsOCBAQAogICogXHBhcmFtW2luXSBkaXJlY3Rpb24gICAgICAgICBJbmRpY2F0ZXMgd2hldGhlciB0aGUgb3BlcmF0aW9uIGlzIGFuIGVuY3J5cHQKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZGVjcnlwdAogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKLSAqIFxyZXR2YWwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAogICovCiB0eXBlZGVmIHBzYV9zdGF0dXNfdCAoKnBzYV9kcnZfc2VfY2lwaGVyX3NldHVwX3QpKHBzYV9kcnZfc2VfY29udGV4dF90ICpkcnZfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3BfY29udGV4dCwKQEAgLTQwNiw3ICs0MDYsNyBAQAogICogXHBhcmFtW2luXSBwX2l2ICAgICAgICAgICAgICBBIGJ1ZmZlciBjb250YWluaW5nIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IKICAqIFxwYXJhbVtpbl0gaXZfbGVuZ3RoICAgICAgICAgVGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgYHBfaXZgIGJ1ZmZlcgogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCiAgKi8KIHR5cGVkZWYgcHNhX3N0YXR1c190ICgqcHNhX2Rydl9zZV9jaXBoZXJfc2V0X2l2X3QpKHZvaWQgKm9wX2NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwX2l2LApAQCAtNDI4LDcgKzQyOCw3IEBACiAgKiBccGFyYW1bb3V0XSBwX291dHB1dF9sZW5ndGggICAgICBBZnRlciBjb21wbGV0aW9uLCB3aWxsIGNvbnRhaW4gdGhlIG51bWJlcgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgYnl0ZXMgcGxhY2VkIGluIHRoZSBgcF9vdXRwdXRgIGJ1ZmZlcgogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCiAgKi8KIHR5cGVkZWYgcHNhX3N0YXR1c190ICgqcHNhX2Rydl9zZV9jaXBoZXJfdXBkYXRlX3QpKHZvaWQgKm9wX2NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwX2lucHV0LApAQCAtNDQ5LDcgKzQ0OSw3IEBACiAgKiBccGFyYW1bb3V0XSBwX291dHB1dF9sZW5ndGggIEFmdGVyIGNvbXBsZXRpb24sIHdpbGwgY29udGFpbiB0aGUgbnVtYmVyIG9mCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIHBsYWNlZCBpbiB0aGUgYHBfb3V0cHV0YCBidWZmZXIKICAqCi0gKiBccmV0dmFsIFBTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwogICovCiB0eXBlZGVmIHBzYV9zdGF0dXNfdCAoKnBzYV9kcnZfc2VfY2lwaGVyX2ZpbmlzaF90KSh2b2lkICpvcF9jb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcF9vdXRwdXQsCkBAIC00ODQsOCArNDg0LDggQEAKICAqIFxwYXJhbVtpbl0gb3V0cHV0X3NpemUgICAgICAgVGhlIGFsbG9jYXRlZCBzaXplIGluIGJ5dGVzIG9mIHRoZSBgcF9vdXRwdXRgCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcgogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKLSAqIFxyZXR2YWwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAogICovCiB0eXBlZGVmIHBzYV9zdGF0dXNfdCAoKnBzYV9kcnZfc2VfY2lwaGVyX2VjYl90KShwc2FfZHJ2X3NlX2NvbnRleHRfdCAqZHJ2X2NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3Nsb3RfbnVtYmVyX3Qga2V5X3Nsb3QsCkBAIC01NTMsNyArNTUzLDcgQEAKICAqIFxwYXJhbVtvdXRdIHBfc2lnbmF0dXJlX2xlbmd0aCAgIE9uIHN1Y2Nlc3MsIHRoZSBudW1iZXIgb2YgYnl0ZXMKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgbWFrZSB1cCB0aGUgcmV0dXJuZWQgc2lnbmF0dXJlIHZhbHVlCiAgKgotICogXHJldHZhbCBQU0FfU1VDQ0VTUworICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKICAqLwogdHlwZWRlZiBwc2Ffc3RhdHVzX3QgKCpwc2FfZHJ2X3NlX2FzeW1tZXRyaWNfc2lnbl90KShwc2FfZHJ2X3NlX2NvbnRleHRfdCAqZHJ2X2NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfc2xvdF9udW1iZXJfdCBrZXlfc2xvdCwKQEAgLTU3OCw3ICs1NzgsNyBAQAogICogXHBhcmFtW2luXSBwX3NpZ25hdHVyZSAgICAgICBCdWZmZXIgY29udGFpbmluZyB0aGUgc2lnbmF0dXJlIHRvIHZlcmlmeQogICogXHBhcmFtW2luXSBzaWduYXR1cmVfbGVuZ3RoICBTaXplIG9mIHRoZSBgcF9zaWduYXR1cmVgIGJ1ZmZlciBpbiBieXRlcwogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCiAgKiAgICAgICAgIFRoZSBzaWduYXR1cmUgaXMgdmFsaWQuCiAgKi8KIHR5cGVkZWYgcHNhX3N0YXR1c190ICgqcHNhX2Rydl9zZV9hc3ltbWV0cmljX3ZlcmlmeV90KShwc2FfZHJ2X3NlX2NvbnRleHRfdCAqZHJ2X2NvbnRleHQsCkBAIC02MTcsNyArNjE3LDcgQEAKICAqIFxwYXJhbVtvdXRdIHBfb3V0cHV0X2xlbmd0aCAgT24gc3VjY2VzcywgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IG1ha2UgdXAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJldHVybmVkIG91dHB1dAogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCiAgKi8KIHR5cGVkZWYgcHNhX3N0YXR1c190ICgqcHNhX2Rydl9zZV9hc3ltbWV0cmljX2VuY3J5cHRfdCkocHNhX2Rydl9zZV9jb250ZXh0X3QgKmRydl9jb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3Nsb3RfbnVtYmVyX3Qga2V5X3Nsb3QsCkBAIC02NTcsNyArNjU3LDcgQEAKICAqIFxwYXJhbVtvdXRdIHBfb3V0cHV0X2xlbmd0aCAgT24gc3VjY2VzcywgdGhlIG51bWJlciBvZiBieXRlcwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IG1ha2UgdXAgdGhlIHJldHVybmVkIG91dHB1dAogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCiAgKi8KIHR5cGVkZWYgcHNhX3N0YXR1c190ICgqcHNhX2Rydl9zZV9hc3ltbWV0cmljX2RlY3J5cHRfdCkocHNhX2Rydl9zZV9jb250ZXh0X3QgKmRydl9jb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3Nsb3RfbnVtYmVyX3Qga2V5X3Nsb3QsCkBAIC0xMTk1LDcgKzExOTUsNyBAQAogICogXHBhcmFtW2luXSBzb3VyY2Vfa2V5ICAgICAgICBUaGUga2V5IHRvIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBtYXRlcmlhbCBmb3IKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtleSBkZXJpdmF0aW9uCiAgKgotICogXHJldHZhbCBQU0FfU1VDQ0VTUworICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKICAqLwogdHlwZWRlZiBwc2Ffc3RhdHVzX3QgKCpwc2FfZHJ2X3NlX2tleV9kZXJpdmF0aW9uX3NldHVwX3QpKHBzYV9kcnZfc2VfY29udGV4dF90ICpkcnZfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvcF9jb250ZXh0LApAQCAtMTIxNSw3ICsxMjE1LDcgQEAKICAqIFxwYXJhbVtpbl0gcF9jb2xsYXRlcmFsICAgICAgQSBidWZmZXIgY29udGFpbmluZyB0aGUgY29sbGF0ZXJhbCBkYXRhCiAgKiBccGFyYW1baW5dIGNvbGxhdGVyYWxfc2l6ZSAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBjb2xsYXRlcmFsCiAgKgotICogXHJldHZhbCBQU0FfU1VDQ0VTUworICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKICAqLwogdHlwZWRlZiBwc2Ffc3RhdHVzX3QgKCpwc2FfZHJ2X3NlX2tleV9kZXJpdmF0aW9uX2NvbGxhdGVyYWxfdCkodm9pZCAqb3BfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvbGxhdGVyYWxfaWQsCkBAIC0xMjMwLDcgKzEyMzAsNyBAQAogICogXHBhcmFtW2luXSBkZXN0X2tleSAgICAgICAgICBUaGUgc2xvdCB3aGVyZSB0aGUgZ2VuZXJhdGVkIGtleSBtYXRlcmlhbAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgcGxhY2VkCiAgKgotICogXHJldHZhbCBQU0FfU1VDQ0VTUworICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKICAqLwogdHlwZWRlZiBwc2Ffc3RhdHVzX3QgKCpwc2FfZHJ2X3NlX2tleV9kZXJpdmF0aW9uX2Rlcml2ZV90KSh2b2lkICpvcF9jb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfc2xvdF9udW1iZXJfdCBkZXN0X2tleSk7CkBAIC0xMjQ0LDcgKzEyNDQsNyBAQAogICogXHBhcmFtW291dF0gcF9vdXRwdXRfbGVuZ3RoICBVcG9uIHN1Y2Nlc3MsIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5IG1hdGVyaWFsIHBsYWNlZCBpbiBgcF9vdXRwdXRgCiAgKgotICogXHJldHZhbCBQU0FfU1VDQ0VTUworICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKICAqLwogdHlwZWRlZiBwc2Ffc3RhdHVzX3QgKCpwc2FfZHJ2X3NlX2tleV9kZXJpdmF0aW9uX2V4cG9ydF90KSh2b2lkICpvcF9jb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwX291dHB1dCwKQEAgLTEzNTMsNyArMTM1Myw3IEBACiAgKiBccGFyYW0gbG9jYXRpb24gICAgICBUaGUgbG9jYXRpb24gdmFsdWUgdGhyb3VnaCB3aGljaCB0aGlzIGRyaXZlciB3aWxsCiAgKiAgICAgICAgICAgICAgICAgICAgICBiZSBleHBvc2VkIHRvIGFwcGxpY2F0aW9ucy4KICAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIHdpbGwgYmUgdXNlZCBmb3IgYWxsIGtleXMgc3VjaCB0aGF0Ci0gKiAgICAgICAgICAgICAgICAgICAgICBgbG9jYXRpb24gPT0gUFNBX0tFWV9MSUZFVElNRV9MT0NBVElPTiggbGlmZXRpbWUgKWAuCisgKiAgICAgICAgICAgICAgICAgICAgICBgbG9jYXRpb24gPT0gI1BTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKCBsaWZldGltZSApYC4KICAqICAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSAjUFNBX0tFWV9MT0NBVElPTl9MT0NBTF9TVE9SQUdFIGlzIHJlc2VydmVkCiAgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgbWF5IG5vdCBiZSB1c2VkIGZvciBkcml2ZXJzLiBJbXBsZW1lbnRhdGlvbnMKICAqICAgICAgICAgICAgICAgICAgICAgIG1heSByZXNlcnZlIG90aGVyIHZhbHVlcy4KQEAgLTEzNjIsMjIgKzEzNjIsMjIgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSBrZWVwcyBydW5uaW5nLiBJdCBpcyB0eXBpY2FsbHkgYSBnbG9iYWwKICAqICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50LgogICoKLSAqIFxyZXR1cm4gUFNBX1NVQ0NFU1MKKyAqIFxyZXR1cm4gI1BTQV9TVUNDRVNTCiAgKiAgICAgICAgIFRoZSBkcml2ZXIgd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLiBBcHBsaWNhdGlvbnMgY2FuIG5vdwogICogICAgICAgICB1c2UgXHAgbGlmZXRpbWUgdG8gYWNjZXNzIGtleXMgdGhyb3VnaCB0aGUgbWV0aG9kcyBwYXNzZWQgdG8KICAqICAgICAgICAgdGhpcyBmdW5jdGlvbi4KLSAqIFxyZXR1cm4gUFNBX0VSUk9SX0JBRF9TVEFURQorICogXHJldHVybiAjUFNBX0VSUk9SX0JBRF9TVEFURQogICogICAgICAgICBUaGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQgYWZ0ZXIgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZQogICogICAgICAgICBjcnlwdG9ncmFwaHkgbW9kdWxlLCBhbmQgdGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBzdXBwb3J0CiAgKiAgICAgICAgIGRyaXZlciByZWdpc3RyYXRpb24gYXQgdGhpcyBzdGFnZS4KLSAqIFxyZXR1cm4gUFNBX0VSUk9SX0FMUkVBRFlfRVhJU1RTCisgKiBccmV0dXJuICNQU0FfRVJST1JfQUxSRUFEWV9FWElTVFMKICAqICAgICAgICAgVGhlcmUgaXMgYWxyZWFkeSBhIHJlZ2lzdGVyZWQgZHJpdmVyIGZvciB0aGlzIHZhbHVlIG9mIFxwIGxpZmV0aW1lLgotICogXHJldHVybiBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorICogXHJldHVybiAjUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKICAqICAgICAgICAgXHAgbGlmZXRpbWUgaXMgYSByZXNlcnZlZCB2YWx1ZS4KLSAqIFxyZXR1cm4gUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKKyAqIFxyZXR1cm4gI1BTQV9FUlJPUl9OT1RfU1VQUE9SVEVECiAgKiAgICAgICAgIGBtZXRob2RzLT5oYWxfdmVyc2lvbmAgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLgotICogXHJldHVybiBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQotICogXHJldHVybiBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAorICogXHJldHVybiAjUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlkKKyAqIFxyZXR1cm4gI1BTQV9FUlJPUl9OT1RfUEVSTUlUVEVECiAgKi8KIHBzYV9zdGF0dXNfdCBwc2FfcmVnaXN0ZXJfc2VfZHJpdmVyKAogICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHNhL2NyeXB0b19zaXplcy5oIGIvaW5jbHVkZS9wc2EvY3J5cHRvX3NpemVzLmgKaW5kZXggZjYzNzNiOC4uNGRjOGFkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wc2EvY3J5cHRvX3NpemVzLmgKKysrIGIvaW5jbHVkZS9wc2EvY3J5cHRvX3NpemVzLmgKQEAgLTY1Nyw0ICs2NTcsOTEgQEAKICAgICAgUFNBX0tFWV9UWVBFX0lTX0VDQ19QVUJMSUNfS0VZKGtleV90eXBlKSA/IFBTQV9LRVlfRVhQT1JUX0VDQ19QVUJMSUNfS0VZX01BWF9TSVpFKGtleV9iaXRzKSA6IFwKICAgICAgMCkKIAorLyoqIFRoZSBkZWZhdWx0IG5vbmNlIHNpemUgZm9yIGFuIEFFQUQgYWxnb3JpdGhtLCBpbiBieXRlcy4KKyAqCisgKiBUaGlzIG1hY3JvIGNhbiBiZSB1c2VkIHRvIGFsbG9jYXRlIGEgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZSB0bworICogc3RvcmUgdGhlIG5vbmNlIG91dHB1dCBmcm9tICNwc2FfYWVhZF9nZW5lcmF0ZV9ub25jZSgpLgorICoKKyAqIFNlZSBhbHNvICNQU0FfQUVBRF9OT05DRV9NQVhfU0laRS4KKyAqCisgKiBcbm90ZSBUaGlzIGlzIG5vdCB0aGUgbWF4aW11bSBzaXplIG9mIG5vbmNlIHN1cHBvcnRlZCBhcyBpbnB1dCB0byAjcHNhX2FlYWRfc2V0X25vbmNlKCksCisgKiAgICAgICAjcHNhX2FlYWRfZW5jcnlwdCgpIG9yICNwc2FfYWVhZF9kZWNyeXB0KCksIGp1c3QgdGhlIGRlZmF1bHQgc2l6ZSB0aGF0IGlzIGdlbmVyYXRlZCBieQorICogICAgICAgI3BzYV9hZWFkX2dlbmVyYXRlX25vbmNlKCkuCisgKgorICogXHdhcm5pbmcgVGhpcyBtYWNybyBtYXkgZXZhbHVhdGUgaXRzIGFyZ3VtZW50cyBtdWx0aXBsZSB0aW1lcyBvcgorICogICAgICAgICAgemVybyB0aW1lcywgc28geW91IHNob3VsZCBub3QgcGFzcyBhcmd1bWVudHMgdGhhdCBjb250YWluCisgKiAgICAgICAgICBzaWRlIGVmZmVjdHMuCisgKgorICogXHBhcmFtIGtleV90eXBlICBBIHN5bW1ldHJpYyBrZXkgdHlwZSB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBhbGdvcml0aG0gXHAgYWxnLgorICoKKyAqIFxwYXJhbSBhbGcgICAgICAgQW4gQUVBRCBhbGdvcml0aG0gKFxjIFBTQV9BTEdfWFhYIHZhbHVlIHN1Y2ggdGhhdCAjUFNBX0FMR19JU19BRUFEKFxwIGFsZykgaXMgdHJ1ZSkuCisgKgorICogXHJldHVybiBUaGUgZGVmYXVsdCBub25jZSBzaXplIGZvciB0aGUgc3BlY2lmaWVkIGtleSB0eXBlIGFuZCBhbGdvcml0aG0uCisgKiAgICAgICAgIElmIHRoZSBrZXkgdHlwZSBvciBBRUFEIGFsZ29yaXRobSBpcyBub3QgcmVjb2duaXplZCwKKyAqICAgICAgICAgb3IgdGhlIHBhcmFtZXRlcnMgYXJlIGluY29tcGF0aWJsZSwgcmV0dXJuIDAuCisgKiAgICAgICAgIEFuIGltcGxlbWVudGF0aW9uIGNhbiByZXR1cm4gZWl0aGVyIDAgb3IgYSBjb3JyZWN0IHNpemUgZm9yIGEga2V5IHR5cGUKKyAqICAgICAgICAgYW5kIEFFQUQgYWxnb3JpdGhtIHRoYXQgaXQgcmVjb2duaXplcywgYnV0IGRvZXMgbm90IHN1cHBvcnQuCisgKi8KKyNkZWZpbmUgUFNBX0FFQURfTk9OQ0VfTEVOR1RIKGtleV90eXBlLCBhbGcpIFwKKyAgICAoUFNBX0JMT0NLX0NJUEhFUl9CTE9DS19TSVpFKGtleV90eXBlKSA9PSAxNiAmJiBcCisgICAgICAgICAoUFNBX0FMR19BRUFEX1dJVEhfREVGQVVMVF9UQUdfTEVOR1RIKGFsZykgPT0gUFNBX0FMR19DQ00gfHwgXAorICAgICAgICAgIFBTQV9BTEdfQUVBRF9XSVRIX0RFRkFVTFRfVEFHX0xFTkdUSChhbGcpID09IFBTQV9BTEdfR0NNKSA/IDEyIDogXAorICAgICAoa2V5X3R5cGUpID09IFBTQV9LRVlfVFlQRV9DSEFDSEEyMCAmJiBcCisgICAgICAgICAgUFNBX0FMR19BRUFEX1dJVEhfREVGQVVMVF9UQUdfTEVOR1RIKGFsZykgPT0gUFNBX0FMR19DSEFDSEEyMF9QT0xZMTMwNSA/IDEyIDogXAorICAgICAwKQorCisvKiogVGhlIG1heGltdW0gZGVmYXVsdCBub25jZSBzaXplIGFtb25nIGFsbCBzdXBwb3J0ZWQgcGFpcnMgb2Yga2V5IHR5cGVzIGFuZCBBRUFEIGFsZ29yaXRobXMsIGluIGJ5dGVzLgorICoKKyAqIFRoaXMgaXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIGFueSB2YWx1ZSB0aGF0ICNQU0FfQUVBRF9OT05DRV9MRU5HVEgoKSBtYXkgcmV0dXJuLgorICoKKyAqIFxub3RlIFRoaXMgaXMgbm90IHRoZSBtYXhpbXVtIHNpemUgb2Ygbm9uY2Ugc3VwcG9ydGVkIGFzIGlucHV0IHRvICNwc2FfYWVhZF9zZXRfbm9uY2UoKSwKKyAqICAgICAgICNwc2FfYWVhZF9lbmNyeXB0KCkgb3IgI3BzYV9hZWFkX2RlY3J5cHQoKSwganVzdCB0aGUgbGFyZ2VzdCBzaXplIHRoYXQgbWF5IGJlIGdlbmVyYXRlZCBieQorICogICAgICAgI3BzYV9hZWFkX2dlbmVyYXRlX25vbmNlKCkuCisgKi8KKyNkZWZpbmUgUFNBX0FFQURfTk9OQ0VfTUFYX1NJWkUgMTIKKworLyoqIFRoZSBkZWZhdWx0IElWIHNpemUgZm9yIGEgY2lwaGVyIGFsZ29yaXRobSwgaW4gYnl0ZXMuCisgKgorICogVGhlIElWIHRoYXQgaXMgZ2VuZXJhdGVkIGFzIHBhcnQgb2YgYSBjYWxsIHRvICNwc2FfY2lwaGVyX2VuY3J5cHQoKSBpcyBhbHdheXMKKyAqIHRoZSBkZWZhdWx0IElWIGxlbmd0aCBmb3IgdGhlIGFsZ29yaXRobS4KKyAqCisgKiBUaGlzIG1hY3JvIGNhbiBiZSB1c2VkIHRvIGFsbG9jYXRlIGEgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZSB0bworICogc3RvcmUgdGhlIElWIG91dHB1dCBmcm9tICNwc2FfY2lwaGVyX2dlbmVyYXRlX2l2KCkgd2hlbiB1c2luZworICogYSBtdWx0aS1wYXJ0IGNpcGhlciBvcGVyYXRpb24uCisgKgorICogU2VlIGFsc28gI1BTQV9DSVBIRVJfSVZfTUFYX1NJWkUuCisgKgorICogXHdhcm5pbmcgVGhpcyBtYWNybyBtYXkgZXZhbHVhdGUgaXRzIGFyZ3VtZW50cyBtdWx0aXBsZSB0aW1lcyBvcgorICogICAgICAgICAgemVybyB0aW1lcywgc28geW91IHNob3VsZCBub3QgcGFzcyBhcmd1bWVudHMgdGhhdCBjb250YWluCisgKiAgICAgICAgICBzaWRlIGVmZmVjdHMuCisgKgorICogXHBhcmFtIGtleV90eXBlICBBIHN5bW1ldHJpYyBrZXkgdHlwZSB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBhbGdvcml0aG0gXHAgYWxnLgorICoKKyAqIFxwYXJhbSBhbGcgICAgICAgQSBjaXBoZXIgYWxnb3JpdGhtIChcYyBQU0FfQUxHX1hYWCB2YWx1ZSBzdWNoIHRoYXQgI1BTQV9BTEdfSVNfQ0lQSEVSKFxwIGFsZykgaXMgdHJ1ZSkuCisgKgorICogXHJldHVybiBUaGUgZGVmYXVsdCBJViBzaXplIGZvciB0aGUgc3BlY2lmaWVkIGtleSB0eXBlIGFuZCBhbGdvcml0aG0uCisgKiAgICAgICAgIElmIHRoZSBhbGdvcml0aG0gZG9lcyBub3QgdXNlIGFuIElWLCByZXR1cm4gMC4KKyAqICAgICAgICAgSWYgdGhlIGtleSB0eXBlIG9yIGNpcGhlciBhbGdvcml0aG0gaXMgbm90IHJlY29nbml6ZWQsCisgKiAgICAgICAgIG9yIHRoZSBwYXJhbWV0ZXJzIGFyZSBpbmNvbXBhdGlibGUsIHJldHVybiAwLgorICogICAgICAgICBBbiBpbXBsZW1lbnRhdGlvbiBjYW4gcmV0dXJuIGVpdGhlciAwIG9yIGEgY29ycmVjdCBzaXplIGZvciBhIGtleSB0eXBlCisgKiAgICAgICAgIGFuZCBjaXBoZXIgYWxnb3JpdGhtIHRoYXQgaXQgcmVjb2duaXplcywgYnV0IGRvZXMgbm90IHN1cHBvcnQuCisgKi8KKyNkZWZpbmUgUFNBX0NJUEhFUl9JVl9MRU5HVEgoa2V5X3R5cGUsIGFsZykgXAorICAgIChQU0FfQkxPQ0tfQ0lQSEVSX0JMT0NLX1NJWkUoa2V5X3R5cGUpID4gMSAmJiBcCisgICAgICAgICgoYWxnKSA9PSBQU0FfQUxHX0NUUiB8fCBcCisgICAgICAgICAoYWxnKSA9PSBQU0FfQUxHX0NGQiB8fCBcCisgICAgICAgICAoYWxnKSA9PSBQU0FfQUxHX09GQiB8fCBcCisgICAgICAgICAoYWxnKSA9PSBQU0FfQUxHX1hUUyB8fCBcCisgICAgICAgICAoYWxnKSA9PSBQU0FfQUxHX0NCQ19OT19QQURESU5HIHx8IFwKKyAgICAgICAgIChhbGcpID09IFBTQV9BTEdfQ0JDX1BLQ1M3KSA/IFBTQV9CTE9DS19DSVBIRVJfQkxPQ0tfU0laRShrZXlfdHlwZSkgOiBcCisgICAgIChrZXlfdHlwZSkgPT0gUFNBX0tFWV9UWVBFX0NIQUNIQTIwICYmIFwKKyAgICAgICAgIChhbGcpID09IFBTQV9BTEdfQ0hBQ0hBMjAgPyAxMiA6IFwKKyAgICAgMCkKKworLyoqIFRoZSBtYXhpbXVtIElWIHNpemUgZm9yIGFsbCBzdXBwb3J0ZWQgY2lwaGVyIGFsZ29yaXRobXMsIGluIGJ5dGVzLgorICoKKyAqIFNlZSBhbHNvICNQU0FfQ0lQSEVSX0lWX0xFTkdUSCgpLgorICovCisjZGVmaW5lIFBTQV9DSVBIRVJfSVZfTUFYX1NJWkUgMTYKKwogI2VuZGlmIC8qIFBTQV9DUllQVE9fU0laRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wc2EvY3J5cHRvX3N0cnVjdC5oIGIvaW5jbHVkZS9wc2EvY3J5cHRvX3N0cnVjdC5oCmluZGV4IGJlMGUyODAuLjZhMDE4ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHNhL2NyeXB0b19zdHJ1Y3QuaAorKysgYi9pbmNsdWRlL3BzYS9jcnlwdG9fc3RydWN0LmgKQEAgLTM3NCw5ICszNzQsMTcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwc2Ffc2V0X2tleV9pZCggcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSApCiB7CisgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lID0gYXR0cmlidXRlcy0+Y29yZS5saWZldGltZTsKKwogICAgIGF0dHJpYnV0ZXMtPmNvcmUuaWQgPSBrZXk7Ci0gICAgaWYoIGF0dHJpYnV0ZXMtPmNvcmUubGlmZXRpbWUgPT0gUFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRSApCi0gICAgICAgIGF0dHJpYnV0ZXMtPmNvcmUubGlmZXRpbWUgPSBQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ7CisKKyAgICBpZiggUFNBX0tFWV9MSUZFVElNRV9JU19WT0xBVElMRSggbGlmZXRpbWUgKSApCisgICAgeworICAgICAgICBhdHRyaWJ1dGVzLT5jb3JlLmxpZmV0aW1lID0KKyAgICAgICAgICAgIFBTQV9LRVlfTElGRVRJTUVfRlJPTV9QRVJTSVNURU5DRV9BTkRfTE9DQVRJT04oCisgICAgICAgICAgICAgICAgUFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5ULAorICAgICAgICAgICAgICAgIFBTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKCBsaWZldGltZSApICk7CisgICAgfQogfQogCiBzdGF0aWMgaW5saW5lIG1iZWR0bHNfc3ZjX2tleV9pZF90IHBzYV9nZXRfa2V5X2lkKApAQCAtMzg1LDExICszOTMsMTkgQEAKICAgICByZXR1cm4oIGF0dHJpYnV0ZXMtPmNvcmUuaWQgKTsKIH0KIAorI2lmZGVmIE1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUgorc3RhdGljIGlubGluZSB2b2lkIG1iZWR0bHNfc2V0X2tleV9vd25lcl9pZCggcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2tleV9vd25lcl9pZF90IG93bmVyICkKK3sKKyAgICBhdHRyaWJ1dGVzLT5jb3JlLmlkLm93bmVyID0gb3duZXI7Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSB2b2lkIHBzYV9zZXRfa2V5X2xpZmV0aW1lKHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfbGlmZXRpbWVfdCBsaWZldGltZSkKIHsKICAgICBhdHRyaWJ1dGVzLT5jb3JlLmxpZmV0aW1lID0gbGlmZXRpbWU7Ci0gICAgaWYoIGxpZmV0aW1lID09IFBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUgKQorICAgIGlmKCBQU0FfS0VZX0xJRkVUSU1FX0lTX1ZPTEFUSUxFKCBsaWZldGltZSApICkKICAgICB7CiAjaWZkZWYgTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSCiAgICAgICAgIGF0dHJpYnV0ZXMtPmNvcmUuaWQua2V5X2lkID0gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHNhL2NyeXB0b190eXBlcy5oIGIvaW5jbHVkZS9wc2EvY3J5cHRvX3R5cGVzLmgKaW5kZXggOTIzYjAyYi4uMGEyYWU1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wc2EvY3J5cHRvX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9wc2EvY3J5cHRvX3R5cGVzLmgKQEAgLTM1Miw3ICszNTIsNyBAQAogICogLSMgQ2FsbCBhIGtleSBjcmVhdGlvbiBmdW5jdGlvbjogcHNhX2ltcG9ydF9rZXkoKSwgcHNhX2dlbmVyYXRlX2tleSgpLAogICogICAgcHNhX2tleV9kZXJpdmF0aW9uX291dHB1dF9rZXkoKSBvciBwc2FfY29weV9rZXkoKS4gVGhpcyBmdW5jdGlvbiByZWFkcwogICogICAgdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUsIGNyZWF0ZXMgYSBrZXkgd2l0aCB0aGVzZSBhdHRyaWJ1dGVzLCBhbmQKLSAqICAgIG91dHB1dHMgYSBoYW5kbGUgdG8gdGhlIG5ld2x5IGNyZWF0ZWQga2V5LgorICogICAgb3V0cHV0cyBhIGtleSBpZGVudGlmaWVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIGtleS4KICAqIC0jIFRoZSBhdHRyaWJ1dGUgc3RydWN0dXJlIGlzIG5vdyBubyBsb25nZXIgbmVjZXNzYXJ5LgogICogICAgWW91IG1heSBjYWxsIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcygpLCBhbHRob3VnaCB0aGlzIGlzIG9wdGlvbmFsCiAgKiAgICB3aXRoIHRoZSB3b3JrZmxvdyBwcmVzZW50ZWQgaGVyZSBiZWNhdXNlIHRoZSBhdHRyaWJ1dGVzIGN1cnJlbnRseQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wc2EvY3J5cHRvX3ZhbHVlcy5oIGIvaW5jbHVkZS9wc2EvY3J5cHRvX3ZhbHVlcy5oCmluZGV4IDNlYjY0ZDguLjU4MGI4OWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHNhL2NyeXB0b192YWx1ZXMuaAorKysgYi9pbmNsdWRlL3BzYS9jcnlwdG9fdmFsdWVzLmgKQEAgLTEwOCw3ICsxMDgsNyBAQAogICogYXMgYXBwbGljYWJsZS4KICAqCiAgKiBJbXBsZW1lbnRhdGlvbnMgc2hhbGwgbm90IHJldHVybiB0aGlzIGVycm9yIGNvZGUgdG8gaW5kaWNhdGUgdGhhdCBhCi0gKiBrZXkgaGFuZGxlIGlzIGludmFsaWQsIGJ1dCBzaGFsbCByZXR1cm4gI1BTQV9FUlJPUl9JTlZBTElEX0hBTkRMRQorICoga2V5IGlkZW50aWZpZXIgaXMgaW52YWxpZCwgYnV0IHNoYWxsIHJldHVybiAjUFNBX0VSUk9SX0lOVkFMSURfSEFORExFCiAgKiBpbnN0ZWFkLiAqLwogI2RlZmluZSBQU0FfRVJST1JfQkFEX1NUQVRFICAgICAgICAgICAgICgocHNhX3N0YXR1c190KS0xMzcpCiAKQEAgLTExOCw3ICsxMTgsNyBAQAogICogY29tYmluYXRpb24gb2YgcGFyYW1ldGVycyBhcmUgcmVjb2duaXplZCBhcyBpbnZhbGlkLgogICoKICAqIEltcGxlbWVudGF0aW9ucyBzaGFsbCBub3QgcmV0dXJuIHRoaXMgZXJyb3IgY29kZSB0byBpbmRpY2F0ZSB0aGF0IGEKLSAqIGtleSBoYW5kbGUgaXMgaW52YWxpZCwgYnV0IHNoYWxsIHJldHVybiAjUFNBX0VSUk9SX0lOVkFMSURfSEFORExFCisgKiBrZXkgaWRlbnRpZmllciBpcyBpbnZhbGlkLCBidXQgc2hhbGwgcmV0dXJuICNQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKICAqIGluc3RlYWQuCiAgKi8KICNkZWZpbmUgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICAoKHBzYV9zdGF0dXNfdCktMTM1KQpAQCAtMjY2LDcgKzI2Niw3IEBACiAgKiB0byByZWFkIGZyb20gYSByZXNvdXJjZS4gKi8KICNkZWZpbmUgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9EQVRBICAgICAoKHBzYV9zdGF0dXNfdCktMTQzKQogCi0vKiogVGhlIGtleSBoYW5kbGUgaXMgbm90IHZhbGlkLiBTZWUgYWxzbyA6cmVmOlxga2V5LWhhbmRsZXNcYC4KKy8qKiBUaGUga2V5IGlkZW50aWZpZXIgaXMgbm90IHZhbGlkLiBTZWUgYWxzbyA6cmVmOlxga2V5LWhhbmRsZXNcYC4KICAqLwogI2RlZmluZSBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgICgocHNhX3N0YXR1c190KS0xMzYpCiAKQEAgLTc2OSw5ICs3NjksOSBAQAogICogICBhbiBhbGdvcml0aG0gYnVpbHQgZnJvbSBgUFNBX3h4eF9TSUdOQVRVUkVgIGFuZCBhIHNwZWNpZmljIGhhc2guIEVhY2gKICAqICAgY2FsbCB0byBzaWduIG9yIHZlcmlmeSBhIG1lc3NhZ2UgbWF5IHVzZSBhIGRpZmZlcmVudCBoYXNoLgogICogICBgYGAKLSAqICAgcHNhX3NpZ25faGFzaChoYW5kbGUsIFBTQV94eHhfU0lHTkFUVVJFKFBTQV9BTEdfU0hBXzI1NiksIC4uLik7Ci0gKiAgIHBzYV9zaWduX2hhc2goaGFuZGxlLCBQU0FfeHh4X1NJR05BVFVSRShQU0FfQUxHX1NIQV81MTIpLCAuLi4pOwotICogICBwc2Ffc2lnbl9oYXNoKGhhbmRsZSwgUFNBX3h4eF9TSUdOQVRVUkUoUFNBX0FMR19TSEEzXzI1NiksIC4uLik7CisgKiAgIHBzYV9zaWduX2hhc2goa2V5LCBQU0FfeHh4X1NJR05BVFVSRShQU0FfQUxHX1NIQV8yNTYpLCAuLi4pOworICogICBwc2Ffc2lnbl9oYXNoKGtleSwgUFNBX3h4eF9TSUdOQVRVUkUoUFNBX0FMR19TSEFfNTEyKSwgLi4uKTsKKyAqICAgcHNhX3NpZ25faGFzaChrZXksIFBTQV94eHhfU0lHTkFUVVJFKFBTQV9BTEdfU0hBM18yNTYpLCAuLi4pOwogICogICBgYGAKICAqCiAgKiBUaGlzIHZhbHVlIG1heSBub3QgYmUgdXNlZCB0byBidWlsZCBvdGhlciBhbGdvcml0aG1zIHRoYXQgYXJlCkBAIC0xNDUyLDcgKzE0NTIsNyBAQAogICogYSBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbi4KICAqIFVzdWFsbHksIHJhdyBrZXkgYWdyZWVtZW50IGFsZ29yaXRobXMgYXJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IHdpdGgKICAqIGEgXGMgUFNBX0FMR194eHggbWFjcm8gd2hpbGUgbm9uLXJhdyBrZXkgYWdyZWVtZW50IGFsZ29yaXRobXMgYXJlCi0gKiBjb25zdHJ1Y3RlZCB3aXRoIFBTQV9BTEdfS0VZX0FHUkVFTUVOVCgpLgorICogY29uc3RydWN0ZWQgd2l0aCAjUFNBX0FMR19LRVlfQUdSRUVNRU5UKCkuCiAgKgogICogXHBhcmFtIGFsZyBBbiBhbGdvcml0aG0gaWRlbnRpZmllciAodmFsdWUgb2YgdHlwZSAjcHNhX2FsZ29yaXRobV90KS4KICAqCkBAIC0xNTYxLDcgKzE1NjEsNyBAQAogCiAvKiogVGhlIGRlZmF1bHQgbGlmZXRpbWUgZm9yIHZvbGF0aWxlIGtleXMuCiAgKgotICogQSB2b2xhdGlsZSBrZXkgb25seSBleGlzdHMgYXMgbG9uZyBhcyB0aGUgaGFuZGxlIHRvIGl0IGlzIG5vdCBjbG9zZWQuCisgKiBBIHZvbGF0aWxlIGtleSBvbmx5IGV4aXN0cyBhcyBsb25nIGFzIHRoZSBpZGVudGlmaWVyIHRvIGl0IGlzIG5vdCBkZXN0cm95ZWQuCiAgKiBUaGUga2V5IG1hdGVyaWFsIGlzIGd1YXJhbnRlZWQgdG8gYmUgZXJhc2VkIG9uIGEgcG93ZXIgcmVzZXQuCiAgKgogICogQSBrZXkgd2l0aCB0aGlzIGxpZmV0aW1lIGlzIHR5cGljYWxseSBzdG9yZWQgaW4gdGhlIFJBTSBhcmVhIG9mIHRoZQpAQCAtMTcwMCw2ICsxNzAwLDE3IEBACiAgICAgcmV0dXJuKCBpZDEgPT0gaWQyICk7CiB9CiAKKy8qKiBDaGVjayB3aGV0aGVyIGEga2V5IGlkZW50aWZpZXIgaXMgbnVsbC4KKyAqCisgKiBccGFyYW0ga2V5IEtleSBpZGVudGlmaWVyLgorICoKKyAqIFxyZXR1cm4gTm9uLXplcm8gaWYgdGhlIGtleSBpZGVudGlmaWVyIGlzIG51bGwsIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBtYmVkdGxzX3N2Y19rZXlfaWRfaXNfbnVsbCggbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ICkKK3sKKyAgICByZXR1cm4oIGtleSA9PSAwICk7Cit9CisKICNlbHNlIC8qIE1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUiAqLwogCiAjZGVmaW5lIE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUICggKG1iZWR0bHNfc3ZjX2tleV9pZF90KXsgMCwgMCB9ICkKQEAgLTE3MzIsNiArMTc0MywxNyBAQAogICAgICAgICAgICAgbWJlZHRsc19rZXlfb3duZXJfaWRfZXF1YWwoIGlkMS5vd25lciwgaWQyLm93bmVyICkgKTsKIH0KIAorLyoqIENoZWNrIHdoZXRoZXIgYSBrZXkgaWRlbnRpZmllciBpcyBudWxsLgorICoKKyAqIFxwYXJhbSBrZXkgS2V5IGlkZW50aWZpZXIuCisgKgorICogXHJldHVybiBOb24temVybyBpZiB0aGUga2V5IGlkZW50aWZpZXIgaXMgbnVsbCwgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1iZWR0bHNfc3ZjX2tleV9pZF9pc19udWxsKCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgKQoreworICAgIHJldHVybiggKCBrZXkua2V5X2lkID09IDAgKSAmJiAoIGtleS5vd25lciA9PSAwICkgKTsKK30KKwogI2VuZGlmIC8qICFNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIgKi8KIAogLyoqQH0qLwpkaWZmIC0tZ2l0IGEvbGlicmFyeS9DTWFrZUxpc3RzLnR4dCBiL2xpYnJhcnkvQ01ha2VMaXN0cy50eHQKaW5kZXggNDQ0NGI5OC4uODk2MjU1NSAxMDA2NDQKLS0tIGEvbGlicmFyeS9DTWFrZUxpc3RzLnR4dAorKysgYi9saWJyYXJ5L0NNYWtlTGlzdHMudHh0CkBAIC0xNTAsNDYgKzE1MCw1OSBAQAogICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIk5lZWQgdG8gY2hvb3NlIHN0YXRpYyBvciBzaGFyZWQgbWJlZHRscyBidWlsZCEiKQogZW5kaWYoTk9UIFVTRV9TVEFUSUNfTUJFRFRMU19MSUJSQVJZIEFORCBOT1QgVVNFX1NIQVJFRF9NQkVEVExTX0xJQlJBUlkpCiAKLXNldCh0YXJnZXRfbGlicmFyaWVzICJtYmVkY3J5cHRvIiAibWJlZHg1MDkiICJtYmVkdGxzIikKK3NldChtYmVkdGxzX3RhcmdldCAgICAiJHtNQkVEVExTX1RBUkdFVF9QUkVGSVh9bWJlZHRscyIpCitzZXQobWJlZHg1MDlfdGFyZ2V0ICAgIiR7TUJFRFRMU19UQVJHRVRfUFJFRklYfW1iZWR4NTA5IikKK3NldChtYmVkY3J5cHRvX3RhcmdldCAiJHtNQkVEVExTX1RBUkdFVF9QUkVGSVh9bWJlZGNyeXB0byIpCisKK3NldChtYmVkdGxzX3RhcmdldCAgICAke21iZWR0bHNfdGFyZ2V0fSAgICBQQVJFTlRfU0NPUEUpCitzZXQobWJlZHg1MDlfdGFyZ2V0ICAgJHttYmVkeDUwOV90YXJnZXR9ICAgUEFSRU5UX1NDT1BFKQorc2V0KG1iZWRjcnlwdG9fdGFyZ2V0ICR7bWJlZGNyeXB0b190YXJnZXR9IFBBUkVOVF9TQ09QRSkKKworaWYgKFVTRV9TVEFUSUNfTUJFRFRMU19MSUJSQVJZKQorICAgIHNldChtYmVkdGxzX3N0YXRpY190YXJnZXQgICAgJHttYmVkdGxzX3RhcmdldH0pCisgICAgc2V0KG1iZWR4NTA5X3N0YXRpY190YXJnZXQgICAke21iZWR4NTA5X3RhcmdldH0pCisgICAgc2V0KG1iZWRjcnlwdG9fc3RhdGljX3RhcmdldCAke21iZWRjcnlwdG9fdGFyZ2V0fSkKK2VuZGlmKCkKKworc2V0KHRhcmdldF9saWJyYXJpZXMgJHttYmVkY3J5cHRvX3RhcmdldH0gJHttYmVkeDUwOV90YXJnZXR9ICR7bWJlZHRsc190YXJnZXR9KQogCiBpZihVU0VfU1RBVElDX01CRURUTFNfTElCUkFSWSBBTkQgVVNFX1NIQVJFRF9NQkVEVExTX0xJQlJBUlkpCi0gICAgc2V0KG1iZWR0bHNfc3RhdGljX3RhcmdldCAibWJlZHRsc19zdGF0aWMiKQotICAgIHNldChtYmVkeDUwOV9zdGF0aWNfdGFyZ2V0ICJtYmVkeDUwOV9zdGF0aWMiKQotICAgIHNldChtYmVkY3J5cHRvX3N0YXRpY190YXJnZXQgIm1iZWRjcnlwdG9fc3RhdGljIikKKyAgICBzdHJpbmcoQVBQRU5EIG1iZWR0bHNfc3RhdGljX3RhcmdldCAgICAiX3N0YXRpYyIpCisgICAgc3RyaW5nKEFQUEVORCBtYmVkeDUwOV9zdGF0aWNfdGFyZ2V0ICAgIl9zdGF0aWMiKQorICAgIHN0cmluZyhBUFBFTkQgbWJlZGNyeXB0b19zdGF0aWNfdGFyZ2V0ICJfc3RhdGljIikKKwogICAgIGxpc3QoQVBQRU5EIHRhcmdldF9saWJyYXJpZXMKLSAgICAgICAgIm1iZWRjcnlwdG9fc3RhdGljIiAibWJlZHg1MDlfc3RhdGljIiAibWJlZHRsc19zdGF0aWMiKQotZWxzZWlmKFVTRV9TVEFUSUNfTUJFRFRMU19MSUJSQVJZKQotICAgIHNldChtYmVkdGxzX3N0YXRpY190YXJnZXQgIm1iZWR0bHMiKQotICAgIHNldChtYmVkeDUwOV9zdGF0aWNfdGFyZ2V0ICJtYmVkeDUwOSIpCi0gICAgc2V0KG1iZWRjcnlwdG9fc3RhdGljX3RhcmdldCAibWJlZGNyeXB0byIpCisgICAgICAgICR7bWJlZGNyeXB0b19zdGF0aWNfdGFyZ2V0fQorICAgICAgICAke21iZWR4NTA5X3N0YXRpY190YXJnZXR9CisgICAgICAgICR7bWJlZHRsc19zdGF0aWNfdGFyZ2V0fSkKIGVuZGlmKCkKIAogaWYoVVNFX1NUQVRJQ19NQkVEVExTX0xJQlJBUlkpCiAgICAgYWRkX2xpYnJhcnkoJHttYmVkY3J5cHRvX3N0YXRpY190YXJnZXR9IFNUQVRJQyAke3NyY19jcnlwdG99KQogICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke21iZWRjcnlwdG9fc3RhdGljX3RhcmdldH0gUFJPUEVSVElFUyBPVVRQVVRfTkFNRSBtYmVkY3J5cHRvKQotICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke21iZWRjcnlwdG9fc3RhdGljX3RhcmdldH0gJHtsaWJzfSkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHttYmVkY3J5cHRvX3N0YXRpY190YXJnZXR9IFBVQkxJQyAke2xpYnN9KQogCiAgICAgYWRkX2xpYnJhcnkoJHttYmVkeDUwOV9zdGF0aWNfdGFyZ2V0fSBTVEFUSUMgJHtzcmNfeDUwOX0pCiAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7bWJlZHg1MDlfc3RhdGljX3RhcmdldH0gUFJPUEVSVElFUyBPVVRQVVRfTkFNRSBtYmVkeDUwOSkKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHttYmVkeDUwOV9zdGF0aWNfdGFyZ2V0fSAke2xpYnN9ICR7bWJlZGNyeXB0b19zdGF0aWNfdGFyZ2V0fSkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHttYmVkeDUwOV9zdGF0aWNfdGFyZ2V0fSBQVUJMSUMgJHtsaWJzfSAke21iZWRjcnlwdG9fc3RhdGljX3RhcmdldH0pCiAKICAgICBhZGRfbGlicmFyeSgke21iZWR0bHNfc3RhdGljX3RhcmdldH0gU1RBVElDICR7c3JjX3Rsc30pCiAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7bWJlZHRsc19zdGF0aWNfdGFyZ2V0fSBQUk9QRVJUSUVTIE9VVFBVVF9OQU1FIG1iZWR0bHMpCi0gICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7bWJlZHRsc19zdGF0aWNfdGFyZ2V0fSAke2xpYnN9ICR7bWJlZHg1MDlfc3RhdGljX3RhcmdldH0pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7bWJlZHRsc19zdGF0aWNfdGFyZ2V0fSBQVUJMSUMgJHtsaWJzfSAke21iZWR4NTA5X3N0YXRpY190YXJnZXR9KQogZW5kaWYoVVNFX1NUQVRJQ19NQkVEVExTX0xJQlJBUlkpCiAKIGlmKFVTRV9TSEFSRURfTUJFRFRMU19MSUJSQVJZKQotICAgIGFkZF9saWJyYXJ5KG1iZWRjcnlwdG8gU0hBUkVEICR7c3JjX2NyeXB0b30pCi0gICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKG1iZWRjcnlwdG8gUFJPUEVSVElFUyBWRVJTSU9OIDIuMjQuMCBTT1ZFUlNJT04gNSkKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMobWJlZGNyeXB0byAke2xpYnN9KQorICAgIGFkZF9saWJyYXJ5KCR7bWJlZGNyeXB0b190YXJnZXR9IFNIQVJFRCAke3NyY19jcnlwdG99KQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke21iZWRjcnlwdG9fdGFyZ2V0fSBQUk9QRVJUSUVTIFZFUlNJT04gMi4yNC4wIFNPVkVSU0lPTiA1KQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke21iZWRjcnlwdG9fdGFyZ2V0fSBQVUJMSUMgJHtsaWJzfSkKIAotICAgIGFkZF9saWJyYXJ5KG1iZWR4NTA5IFNIQVJFRCAke3NyY194NTA5fSkKLSAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMobWJlZHg1MDkgUFJPUEVSVElFUyBWRVJTSU9OIDIuMjQuMCBTT1ZFUlNJT04gMSkKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMobWJlZHg1MDkgJHtsaWJzfSBtYmVkY3J5cHRvKQorICAgIGFkZF9saWJyYXJ5KCR7bWJlZHg1MDlfdGFyZ2V0fSBTSEFSRUQgJHtzcmNfeDUwOX0pCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7bWJlZHg1MDlfdGFyZ2V0fSBQUk9QRVJUSUVTIFZFUlNJT04gMi4yNC4wIFNPVkVSU0lPTiAxKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke21iZWR4NTA5X3RhcmdldH0gUFVCTElDICR7bGlic30gJHttYmVkY3J5cHRvX3RhcmdldH0pCiAKLSAgICBhZGRfbGlicmFyeShtYmVkdGxzIFNIQVJFRCAke3NyY190bHN9KQotICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhtYmVkdGxzIFBST1BFUlRJRVMgVkVSU0lPTiAyLjI0LjAgU09WRVJTSU9OIDEzKQotICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhtYmVkdGxzICR7bGlic30gbWJlZHg1MDkpCisgICAgYWRkX2xpYnJhcnkoJHttYmVkdGxzX3RhcmdldH0gU0hBUkVEICR7c3JjX3Rsc30pCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7bWJlZHRsc190YXJnZXR9IFBST1BFUlRJRVMgVkVSU0lPTiAyLjI0LjAgU09WRVJTSU9OIDEzKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke21iZWR0bHNfdGFyZ2V0fSBQVUJMSUMgJHtsaWJzfSAke21iZWR4NTA5X3RhcmdldH0pCiBlbmRpZihVU0VfU0hBUkVEX01CRURUTFNfTElCUkFSWSkKIAogZm9yZWFjaCh0YXJnZXQgSU4gTElTVFMgdGFyZ2V0X2xpYnJhcmllcykKQEAgLTIxMCw3ICsyMjMsOSBAQAogICAgICAgICAgICAgUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBPV05FUl9XUklURSBHUk9VUF9SRUFEIFdPUkxEX1JFQUQpCiBlbmRmb3JlYWNoKHRhcmdldCkKIAotYWRkX2N1c3RvbV90YXJnZXQobGliIERFUEVORFMgbWJlZGNyeXB0byBtYmVkeDUwOSBtYmVkdGxzKQorc2V0KGxpYl90YXJnZXQgIiR7TUJFRFRMU19UQVJHRVRfUFJFRklYfWxpYiIpCisKK2FkZF9jdXN0b21fdGFyZ2V0KCR7bGliX3RhcmdldH0gREVQRU5EUyAke21iZWRjcnlwdG9fdGFyZ2V0fSAke21iZWR4NTA5X3RhcmdldH0gJHttYmVkdGxzX3RhcmdldH0pCiBpZihVU0VfU1RBVElDX01CRURUTFNfTElCUkFSWSBBTkQgVVNFX1NIQVJFRF9NQkVEVExTX0xJQlJBUlkpCi0gICAgYWRkX2RlcGVuZGVuY2llcyhsaWIgbWJlZGNyeXB0b19zdGF0aWMgbWJlZHg1MDlfc3RhdGljIG1iZWR0bHNfc3RhdGljKQorICAgIGFkZF9kZXBlbmRlbmNpZXMoJHtsaWJfdGFyZ2V0fSAke21iZWRjcnlwdG9fc3RhdGljX3RhcmdldH0gJHttYmVkeDUwOV9zdGF0aWNfdGFyZ2V0fSAke21iZWR0bHNfc3RhdGljX3RhcmdldH0pCiBlbmRpZigpCmRpZmYgLS1naXQgYS9saWJyYXJ5L2Flcy5jIGIvbGlicmFyeS9hZXMuYwppbmRleCBlZDQ4YjI0Li4zZjYxNjQyIDEwMDY0NAotLS0gYS9saWJyYXJ5L2Flcy5jCisrKyBiL2xpYnJhcnkvYWVzLmMKQEAgLTczMCw2ICs3MzAsNyBAQAogCiAgICAgcmV0dXJuKCByZXQgKTsKIH0KKyNlbmRpZiAvKiAhTUJFRFRMU19BRVNfU0VUS0VZX0RFQ19BTFQgKi8KIAogI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9YVFMpCiBzdGF0aWMgaW50IG1iZWR0bHNfYWVzX3h0c19kZWNvZGVfa2V5cyggY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LApAQCAtODA4LDggKzgwOSw2IEBACiB9CiAjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9YVFMgKi8KIAotI2VuZGlmIC8qICFNQkVEVExTX0FFU19TRVRLRVlfREVDX0FMVCAqLwotCiAjZGVmaW5lIEFFU19GUk9VTkQoWDAsWDEsWDIsWDMsWTAsWTEsWTIsWTMpICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC04NjcsNjMgKzg2Niw1NiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApCiB7CiAgICAgaW50IGk7Ci0gICAgdWludDMyX3QgKlJLLCBYMCwgWDEsIFgyLCBYMywgWTAsIFkxLCBZMiwgWTM7CisgICAgdWludDMyX3QgKlJLID0gY3R4LT5yazsKKyAgICBzdHJ1Y3QKKyAgICB7CisgICAgICAgIHVpbnQzMl90IFhbNF07CisgICAgICAgIHVpbnQzMl90IFlbNF07CisgICAgfSB0OwogCi0gICAgUksgPSBjdHgtPnJrOwotCi0gICAgR0VUX1VJTlQzMl9MRSggWDAsIGlucHV0LCAgMCApOyBYMCBePSAqUksrKzsKLSAgICBHRVRfVUlOVDMyX0xFKCBYMSwgaW5wdXQsICA0ICk7IFgxIF49ICpSSysrOwotICAgIEdFVF9VSU5UMzJfTEUoIFgyLCBpbnB1dCwgIDggKTsgWDIgXj0gKlJLKys7Ci0gICAgR0VUX1VJTlQzMl9MRSggWDMsIGlucHV0LCAxMiApOyBYMyBePSAqUksrKzsKKyAgICBHRVRfVUlOVDMyX0xFKCB0LlhbMF0sIGlucHV0LCAgMCApOyB0LlhbMF0gXj0gKlJLKys7CisgICAgR0VUX1VJTlQzMl9MRSggdC5YWzFdLCBpbnB1dCwgIDQgKTsgdC5YWzFdIF49ICpSSysrOworICAgIEdFVF9VSU5UMzJfTEUoIHQuWFsyXSwgaW5wdXQsICA4ICk7IHQuWFsyXSBePSAqUksrKzsKKyAgICBHRVRfVUlOVDMyX0xFKCB0LlhbM10sIGlucHV0LCAxMiApOyB0LlhbM10gXj0gKlJLKys7CiAKICAgICBmb3IoIGkgPSAoIGN0eC0+bnIgPj4gMSApIC0gMTsgaSA+IDA7IGktLSApCiAgICAgewotICAgICAgICBBRVNfRlJPVU5EKCBZMCwgWTEsIFkyLCBZMywgWDAsIFgxLCBYMiwgWDMgKTsKLSAgICAgICAgQUVTX0ZST1VORCggWDAsIFgxLCBYMiwgWDMsIFkwLCBZMSwgWTIsIFkzICk7CisgICAgICAgIEFFU19GUk9VTkQoIHQuWVswXSwgdC5ZWzFdLCB0LllbMl0sIHQuWVszXSwgdC5YWzBdLCB0LlhbMV0sIHQuWFsyXSwgdC5YWzNdICk7CisgICAgICAgIEFFU19GUk9VTkQoIHQuWFswXSwgdC5YWzFdLCB0LlhbMl0sIHQuWFszXSwgdC5ZWzBdLCB0LllbMV0sIHQuWVsyXSwgdC5ZWzNdICk7CiAgICAgfQogCi0gICAgQUVTX0ZST1VORCggWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzICk7CisgICAgQUVTX0ZST1VORCggdC5ZWzBdLCB0LllbMV0sIHQuWVsyXSwgdC5ZWzNdLCB0LlhbMF0sIHQuWFsxXSwgdC5YWzJdLCB0LlhbM10gKTsKIAotICAgIFgwID0gKlJLKysgXiBcCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkwICAgICAgICkgJiAweEZGIF0gICAgICAgKSBeCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkxID4+ICA4ICkgJiAweEZGIF0gPDwgIDggKSBeCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkyID4+IDE2ICkgJiAweEZGIF0gPDwgMTYgKSBeCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkzID4+IDI0ICkgJiAweEZGIF0gPDwgMjQgKTsKKyAgICB0LlhbMF0gPSAqUksrKyBeIFwKKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggdC5ZWzBdICAgICAgICkgJiAweEZGIF0gICAgICAgKSBeCisgICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIHQuWVsxXSA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCB0LllbMl0gPj4gMTYgKSAmIDB4RkYgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggdC5ZWzNdID4+IDI0ICkgJiAweEZGIF0gPDwgMjQgKTsKIAotICAgIFgxID0gKlJLKysgXiBcCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkxICAgICAgICkgJiAweEZGIF0gICAgICAgKSBeCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkyID4+ICA4ICkgJiAweEZGIF0gPDwgIDggKSBeCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkzID4+IDE2ICkgJiAweEZGIF0gPDwgMTYgKSBeCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkwID4+IDI0ICkgJiAweEZGIF0gPDwgMjQgKTsKKyAgICB0LlhbMV0gPSAqUksrKyBeIFwKKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggdC5ZWzFdICAgICAgICkgJiAweEZGIF0gICAgICAgKSBeCisgICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIHQuWVsyXSA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCB0LllbM10gPj4gMTYgKSAmIDB4RkYgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggdC5ZWzBdID4+IDI0ICkgJiAweEZGIF0gPDwgMjQgKTsKIAotICAgIFgyID0gKlJLKysgXiBcCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkyICAgICAgICkgJiAweEZGIF0gICAgICAgKSBeCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkzID4+ICA4ICkgJiAweEZGIF0gPDwgIDggKSBeCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkwID4+IDE2ICkgJiAweEZGIF0gPDwgMTYgKSBeCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkxID4+IDI0ICkgJiAweEZGIF0gPDwgMjQgKTsKKyAgICB0LlhbMl0gPSAqUksrKyBeIFwKKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggdC5ZWzJdICAgICAgICkgJiAweEZGIF0gICAgICAgKSBeCisgICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIHQuWVszXSA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCB0LllbMF0gPj4gMTYgKSAmIDB4RkYgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggdC5ZWzFdID4+IDI0ICkgJiAweEZGIF0gPDwgMjQgKTsKIAotICAgIFgzID0gKlJLKysgXiBcCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkzICAgICAgICkgJiAweEZGIF0gICAgICAgKSBeCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkwID4+ICA4ICkgJiAweEZGIF0gPDwgIDggKSBeCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkxID4+IDE2ICkgJiAweEZGIF0gPDwgMTYgKSBeCi0gICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFkyID4+IDI0ICkgJiAweEZGIF0gPDwgMjQgKTsKKyAgICB0LlhbM10gPSAqUksrKyBeIFwKKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggdC5ZWzNdICAgICAgICkgJiAweEZGIF0gICAgICAgKSBeCisgICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIHQuWVswXSA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCB0LllbMV0gPj4gMTYgKSAmIDB4RkYgXSA8PCAxNiApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggdC5ZWzJdID4+IDI0ICkgJiAweEZGIF0gPDwgMjQgKTsKIAotICAgIFBVVF9VSU5UMzJfTEUoIFgwLCBvdXRwdXQsICAwICk7Ci0gICAgUFVUX1VJTlQzMl9MRSggWDEsIG91dHB1dCwgIDQgKTsKLSAgICBQVVRfVUlOVDMyX0xFKCBYMiwgb3V0cHV0LCAgOCApOwotICAgIFBVVF9VSU5UMzJfTEUoIFgzLCBvdXRwdXQsIDEyICk7CisgICAgUFVUX1VJTlQzMl9MRSggdC5YWzBdLCBvdXRwdXQsICAwICk7CisgICAgUFVUX1VJTlQzMl9MRSggdC5YWzFdLCBvdXRwdXQsICA0ICk7CisgICAgUFVUX1VJTlQzMl9MRSggdC5YWzJdLCBvdXRwdXQsICA4ICk7CisgICAgUFVUX1VJTlQzMl9MRSggdC5YWzNdLCBvdXRwdXQsIDEyICk7CiAKLSAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoICZYMCwgc2l6ZW9mKCBYMCApICk7Ci0gICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKCAmWDEsIHNpemVvZiggWDEgKSApOwotICAgIG1iZWR0bHNfcGxhdGZvcm1femVyb2l6ZSggJlgyLCBzaXplb2YoIFgyICkgKTsKLSAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoICZYMywgc2l6ZW9mKCBYMyApICk7Ci0KLSAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoICZZMCwgc2l6ZW9mKCBZMCApICk7Ci0gICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKCAmWTEsIHNpemVvZiggWTEgKSApOwotICAgIG1iZWR0bHNfcGxhdGZvcm1femVyb2l6ZSggJlkyLCBzaXplb2YoIFkyICkgKTsKLSAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoICZZMywgc2l6ZW9mKCBZMyApICk7Ci0KLSAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoICZSSywgc2l6ZW9mKCBSSyApICk7CisgICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKCAmdCwgc2l6ZW9mKCB0ICkgKTsKIAogICAgIHJldHVybiggMCApOwogfQpAQCAtOTQ3LDYzICs5MzksNTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKQogewogICAgIGludCBpOwotICAgIHVpbnQzMl90ICpSSywgWDAsIFgxLCBYMiwgWDMsIFkwLCBZMSwgWTIsIFkzOworICAgIHVpbnQzMl90ICpSSyA9IGN0eC0+cms7CisgICAgc3RydWN0CisgICAgeworICAgICAgICB1aW50MzJfdCBYWzRdOworICAgICAgICB1aW50MzJfdCBZWzRdOworICAgIH0gdDsKIAotICAgIFJLID0gY3R4LT5yazsKLQotICAgIEdFVF9VSU5UMzJfTEUoIFgwLCBpbnB1dCwgIDAgKTsgWDAgXj0gKlJLKys7Ci0gICAgR0VUX1VJTlQzMl9MRSggWDEsIGlucHV0LCAgNCApOyBYMSBePSAqUksrKzsKLSAgICBHRVRfVUlOVDMyX0xFKCBYMiwgaW5wdXQsICA4ICk7IFgyIF49ICpSSysrOwotICAgIEdFVF9VSU5UMzJfTEUoIFgzLCBpbnB1dCwgMTIgKTsgWDMgXj0gKlJLKys7CisgICAgR0VUX1VJTlQzMl9MRSggdC5YWzBdLCBpbnB1dCwgIDAgKTsgdC5YWzBdIF49ICpSSysrOworICAgIEdFVF9VSU5UMzJfTEUoIHQuWFsxXSwgaW5wdXQsICA0ICk7IHQuWFsxXSBePSAqUksrKzsKKyAgICBHRVRfVUlOVDMyX0xFKCB0LlhbMl0sIGlucHV0LCAgOCApOyB0LlhbMl0gXj0gKlJLKys7CisgICAgR0VUX1VJTlQzMl9MRSggdC5YWzNdLCBpbnB1dCwgMTIgKTsgdC5YWzNdIF49ICpSSysrOwogCiAgICAgZm9yKCBpID0gKCBjdHgtPm5yID4+IDEgKSAtIDE7IGkgPiAwOyBpLS0gKQogICAgIHsKLSAgICAgICAgQUVTX1JST1VORCggWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzICk7Ci0gICAgICAgIEFFU19SUk9VTkQoIFgwLCBYMSwgWDIsIFgzLCBZMCwgWTEsIFkyLCBZMyApOworICAgICAgICBBRVNfUlJPVU5EKCB0LllbMF0sIHQuWVsxXSwgdC5ZWzJdLCB0LllbM10sIHQuWFswXSwgdC5YWzFdLCB0LlhbMl0sIHQuWFszXSApOworICAgICAgICBBRVNfUlJPVU5EKCB0LlhbMF0sIHQuWFsxXSwgdC5YWzJdLCB0LlhbM10sIHQuWVswXSwgdC5ZWzFdLCB0LllbMl0sIHQuWVszXSApOwogICAgIH0KIAotICAgIEFFU19SUk9VTkQoIFkwLCBZMSwgWTIsIFkzLCBYMCwgWDEsIFgyLCBYMyApOworICAgIEFFU19SUk9VTkQoIHQuWVswXSwgdC5ZWzFdLCB0LllbMl0sIHQuWVszXSwgdC5YWzBdLCB0LlhbMV0sIHQuWFsyXSwgdC5YWzNdICk7CiAKLSAgICBYMCA9ICpSSysrIF4gXAotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMCAgICAgICApICYgMHhGRiBdICAgICAgICkgXgotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMyA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMiA+PiAxNiApICYgMHhGRiBdIDw8IDE2ICkgXgotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMSA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CisgICAgdC5YWzBdID0gKlJLKysgXiBcCisgICAgICAgICAgICAoICh1aW50MzJfdCkgUlNiWyAoIHQuWVswXSAgICAgICApICYgMHhGRiBdICAgICAgICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCB0LllbM10gPj4gIDggKSAmIDB4RkYgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggdC5ZWzJdID4+IDE2ICkgJiAweEZGIF0gPDwgMTYgKSBeCisgICAgICAgICAgICAoICh1aW50MzJfdCkgUlNiWyAoIHQuWVsxXSA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CiAKLSAgICBYMSA9ICpSSysrIF4gXAotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMSAgICAgICApICYgMHhGRiBdICAgICAgICkgXgotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMCA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMyA+PiAxNiApICYgMHhGRiBdIDw8IDE2ICkgXgotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMiA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CisgICAgdC5YWzFdID0gKlJLKysgXiBcCisgICAgICAgICAgICAoICh1aW50MzJfdCkgUlNiWyAoIHQuWVsxXSAgICAgICApICYgMHhGRiBdICAgICAgICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCB0LllbMF0gPj4gIDggKSAmIDB4RkYgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggdC5ZWzNdID4+IDE2ICkgJiAweEZGIF0gPDwgMTYgKSBeCisgICAgICAgICAgICAoICh1aW50MzJfdCkgUlNiWyAoIHQuWVsyXSA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CiAKLSAgICBYMiA9ICpSSysrIF4gXAotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMiAgICAgICApICYgMHhGRiBdICAgICAgICkgXgotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMSA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMCA+PiAxNiApICYgMHhGRiBdIDw8IDE2ICkgXgotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMyA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CisgICAgdC5YWzJdID0gKlJLKysgXiBcCisgICAgICAgICAgICAoICh1aW50MzJfdCkgUlNiWyAoIHQuWVsyXSAgICAgICApICYgMHhGRiBdICAgICAgICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCB0LllbMV0gPj4gIDggKSAmIDB4RkYgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggdC5ZWzBdID4+IDE2ICkgJiAweEZGIF0gPDwgMTYgKSBeCisgICAgICAgICAgICAoICh1aW50MzJfdCkgUlNiWyAoIHQuWVszXSA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CiAKLSAgICBYMyA9ICpSSysrIF4gXAotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMyAgICAgICApICYgMHhGRiBdICAgICAgICkgXgotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMiA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMSA+PiAxNiApICYgMHhGRiBdIDw8IDE2ICkgXgotICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMCA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CisgICAgdC5YWzNdID0gKlJLKysgXiBcCisgICAgICAgICAgICAoICh1aW50MzJfdCkgUlNiWyAoIHQuWVszXSAgICAgICApICYgMHhGRiBdICAgICAgICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCB0LllbMl0gPj4gIDggKSAmIDB4RkYgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICggKHVpbnQzMl90KSBSU2JbICggdC5ZWzFdID4+IDE2ICkgJiAweEZGIF0gPDwgMTYgKSBeCisgICAgICAgICAgICAoICh1aW50MzJfdCkgUlNiWyAoIHQuWVswXSA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CiAKLSAgICBQVVRfVUlOVDMyX0xFKCBYMCwgb3V0cHV0LCAgMCApOwotICAgIFBVVF9VSU5UMzJfTEUoIFgxLCBvdXRwdXQsICA0ICk7Ci0gICAgUFVUX1VJTlQzMl9MRSggWDIsIG91dHB1dCwgIDggKTsKLSAgICBQVVRfVUlOVDMyX0xFKCBYMywgb3V0cHV0LCAxMiApOworICAgIFBVVF9VSU5UMzJfTEUoIHQuWFswXSwgb3V0cHV0LCAgMCApOworICAgIFBVVF9VSU5UMzJfTEUoIHQuWFsxXSwgb3V0cHV0LCAgNCApOworICAgIFBVVF9VSU5UMzJfTEUoIHQuWFsyXSwgb3V0cHV0LCAgOCApOworICAgIFBVVF9VSU5UMzJfTEUoIHQuWFszXSwgb3V0cHV0LCAxMiApOwogCi0gICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKCAmWDAsIHNpemVvZiggWDAgKSApOwotICAgIG1iZWR0bHNfcGxhdGZvcm1femVyb2l6ZSggJlgxLCBzaXplb2YoIFgxICkgKTsKLSAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoICZYMiwgc2l6ZW9mKCBYMiApICk7Ci0gICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKCAmWDMsIHNpemVvZiggWDMgKSApOwotCi0gICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKCAmWTAsIHNpemVvZiggWTAgKSApOwotICAgIG1iZWR0bHNfcGxhdGZvcm1femVyb2l6ZSggJlkxLCBzaXplb2YoIFkxICkgKTsKLSAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoICZZMiwgc2l6ZW9mKCBZMiApICk7Ci0gICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKCAmWTMsIHNpemVvZiggWTMgKSApOwotCi0gICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKCAmUkssIHNpemVvZiggUksgKSApOworICAgIG1iZWR0bHNfcGxhdGZvcm1femVyb2l6ZSggJnQsIHNpemVvZiggdCApICk7CiAKICAgICByZXR1cm4oIDAgKTsKIH0KZGlmZiAtLWdpdCBhL2xpYnJhcnkvY2NtLmMgYi9saWJyYXJ5L2NjbS5jCmluZGV4IGU2Y2E1ODguLjQyNGVlNzcgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvY2NtLmMKKysrIGIvbGlicmFyeS9jY20uYwpAQCAtMTc1LDcgKzE3NSw3IEBACiAgICAgaWYoIGl2X2xlbiA8IDcgfHwgaXZfbGVuID4gMTMgKQogICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQgKTsKIAotICAgIGlmKCBhZGRfbGVuID4gMHhGRjAwICkKKyAgICBpZiggYWRkX2xlbiA+PSAweEZGMDAgKQogICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQgKTsKIAogICAgIHEgPSAxNiAtIDEgLSAodW5zaWduZWQgY2hhcikgaXZfbGVuOwpkaWZmIC0tZ2l0IGEvbGlicmFyeS9jaGVja19jcnlwdG9fY29uZmlnLmggYi9saWJyYXJ5L2NoZWNrX2NyeXB0b19jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWM5MGEwCi0tLSAvZGV2L251bGwKKysrIGIvbGlicmFyeS9jaGVja19jcnlwdG9fY29uZmlnLmgKQEAgLTAsMCArMSw3MiBAQAorLyoqCisgKiBcZmlsZSBjaGVja19jcnlwdG9fY29uZmlnLmgKKyAqCisgKiBcYnJpZWYgQ29uc2lzdGVuY3kgY2hlY2tzIGZvciBQU0EgY29uZmlndXJhdGlvbiBvcHRpb25zCisgKi8KKy8qCisgKiAgQ29weXJpZ2h0IFRoZSBNYmVkIFRMUyBDb250cmlidXRvcnMKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoKKyAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIGluY2x1ZGUgdGhpcyBmaWxlIGZyb20geW91ciBjcnlwdG9fY29uZmlnLmgKKyAqIGluIG9yZGVyIHRvIGNhdGNoIGRlcGVuZGVuY3kgaXNzdWVzIGVhcmx5LgorICovCisKKyNpZm5kZWYgTUJFRFRMU19DSEVDS19DUllQVE9fQ09ORklHX0gKKyNkZWZpbmUgTUJFRFRMU19DSEVDS19DUllQVE9fQ09ORklHX0gKKworI2lmIGRlZmluZWQoUFNBX1dBTlRfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EpICYmIFwKKyAgICAhKCBkZWZpbmVkKFBTQV9XQU5UX0tFWV9UWVBFX0VDQ19LRVlfUEFJUikgfHwgXAorICAgICAgIGRlZmluZWQoUFNBX1dBTlRfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVkpICkKKyNlcnJvciAiUFNBX1dBTlRfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChQU0FfV0FOVF9BTEdfRUNEU0EpICYmIFwKKyAgICAhKCBkZWZpbmVkKFBTQV9XQU5UX0tFWV9UWVBFX0VDQ19LRVlfUEFJUikgfHwgXAorICAgICAgIGRlZmluZWQoUFNBX1dBTlRfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVkpICkKKyNlcnJvciAiUFNBX1dBTlRfQUxHX0VDRFNBIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoUFNBX1dBTlRfQUxHX1JTQV9QS0NTMVYxNV9DUllQVCkgJiYgXAorICAgICEoIGRlZmluZWQoUFNBX1dBTlRfS0VZX1RZUEVfUlNBX0tFWV9QQUlSKSB8fCBcCisgICAgICAgZGVmaW5lZChQU0FfV0FOVF9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSkgKQorI2Vycm9yICJQU0FfV0FOVF9BTEdfUlNBX1BLQ1MxVjE1X0NSWVBUIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoUFNBX1dBTlRfQUxHX1JTQV9QS0NTMVYxNV9TSUdOKSAmJiBcCisgICAgISggZGVmaW5lZChQU0FfV0FOVF9LRVlfVFlQRV9SU0FfS0VZX1BBSVIpIHx8IFwKKyAgICAgICBkZWZpbmVkKFBTQV9XQU5UX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZKSApCisjZXJyb3IgIlBTQV9XQU5UX0FMR19SU0FfUEtDUzFWMTVfU0lHTiBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBTQV9XQU5UX0FMR19SU0FfT0FFUCkgJiYgXAorICAgICEoIGRlZmluZWQoUFNBX1dBTlRfS0VZX1RZUEVfUlNBX0tFWV9QQUlSKSB8fCBcCisgICAgICAgZGVmaW5lZChQU0FfV0FOVF9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSkgKQorI2Vycm9yICJQU0FfV0FOVF9BTEdfUlNBX09BRVAgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChQU0FfV0FOVF9BTEdfUlNBX1BTUykgJiYgXAorICAgICEoIGRlZmluZWQoUFNBX1dBTlRfS0VZX1RZUEVfUlNBX0tFWV9QQUlSKSB8fCBcCisgICAgICAgZGVmaW5lZChQU0FfV0FOVF9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSkgKQorI2Vycm9yICJQU0FfV0FOVF9BTEdfUlNBX1BTUyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBTQV9XQU5UX0tFWV9UWVBFX0VDQ19LRVlfUEFJUikgJiYgXAorICAgICFkZWZpbmVkKFBTQV9XQU5UX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKQorI2Vycm9yICJQU0FfV0FOVF9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjZW5kaWYgLyogTUJFRFRMU19DSEVDS19DUllQVE9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnJhcnkvY2lwaGVyX3dyYXAuYyBiL2xpYnJhcnkvY2lwaGVyX3dyYXAuYwppbmRleCA4ZWIyZWMwLi41N2ViM2NiIDEwMDY0NAotLS0gYS9saWJyYXJ5L2NpcGhlcl93cmFwLmMKKysrIGIvbGlicmFyeS9jaXBoZXJfd3JhcC5jCkBAIC03NTMsNyArNzUzLDcgQEAKICAgICBNQkVEVExTX01PREVfRUNCLAogICAgIDEyOCwKICAgICAiQ0FNRUxMSUEtMTI4LUVDQiIsCi0gICAgMTYsCisgICAgMCwKICAgICAwLAogICAgIDE2LAogICAgICZjYW1lbGxpYV9pbmZvCkBAIC03NjQsNyArNzY0LDcgQEAKICAgICBNQkVEVExTX01PREVfRUNCLAogICAgIDE5MiwKICAgICAiQ0FNRUxMSUEtMTkyLUVDQiIsCi0gICAgMTYsCisgICAgMCwKICAgICAwLAogICAgIDE2LAogICAgICZjYW1lbGxpYV9pbmZvCkBAIC03NzUsNyArNzc1LDcgQEAKICAgICBNQkVEVExTX01PREVfRUNCLAogICAgIDI1NiwKICAgICAiQ0FNRUxMSUEtMjU2LUVDQiIsCi0gICAgMTYsCisgICAgMCwKICAgICAwLAogICAgIDE2LAogICAgICZjYW1lbGxpYV9pbmZvCkBAIC0xMTI5LDcgKzExMjksNyBAQAogICAgIE1CRURUTFNfTU9ERV9FQ0IsCiAgICAgMTI4LAogICAgICJBUklBLTEyOC1FQ0IiLAotICAgIDE2LAorICAgIDAsCiAgICAgMCwKICAgICAxNiwKICAgICAmYXJpYV9pbmZvCkBAIC0xMTQwLDcgKzExNDAsNyBAQAogICAgIE1CRURUTFNfTU9ERV9FQ0IsCiAgICAgMTkyLAogICAgICJBUklBLTE5Mi1FQ0IiLAotICAgIDE2LAorICAgIDAsCiAgICAgMCwKICAgICAxNiwKICAgICAmYXJpYV9pbmZvCkBAIC0xMTUxLDcgKzExNTEsNyBAQAogICAgIE1CRURUTFNfTU9ERV9FQ0IsCiAgICAgMjU2LAogICAgICJBUklBLTI1Ni1FQ0IiLAotICAgIDE2LAorICAgIDAsCiAgICAgMCwKICAgICAxNiwKICAgICAmYXJpYV9pbmZvCkBAIC0xNTUzLDcgKzE1NTMsNyBAQAogICAgIE1CRURUTFNfTU9ERV9FQ0IsCiAgICAgTUJFRFRMU19LRVlfTEVOR1RIX0RFUywKICAgICAiREVTLUVDQiIsCi0gICAgOCwKKyAgICAwLAogICAgIDAsCiAgICAgOCwKICAgICAmZGVzX2luZm8KQEAgLTE2MDQsNyArMTYwNCw3IEBACiAgICAgTUJFRFRMU19NT0RFX0VDQiwKICAgICBNQkVEVExTX0tFWV9MRU5HVEhfREVTX0VERSwKICAgICAiREVTLUVERS1FQ0IiLAotICAgIDgsCisgICAgMCwKICAgICAwLAogICAgIDgsCiAgICAgJmRlc19lZGVfaW5mbwpAQCAtMTY1NSw3ICsxNjU1LDcgQEAKICAgICBNQkVEVExTX01PREVfRUNCLAogICAgIE1CRURUTFNfS0VZX0xFTkdUSF9ERVNfRURFMywKICAgICAiREVTLUVERTMtRUNCIiwKLSAgICA4LAorICAgIDAsCiAgICAgMCwKICAgICA4LAogICAgICZkZXNfZWRlM19pbmZvCkBAIC0xNzcwLDcgKzE3NzAsNyBAQAogICAgIE1CRURUTFNfTU9ERV9FQ0IsCiAgICAgMTI4LAogICAgICJCTE9XRklTSC1FQ0IiLAotICAgIDgsCisgICAgMCwKICAgICBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9LRVlfTEVOLAogICAgIDgsCiAgICAgJmJsb3dmaXNoX2luZm8KZGlmZiAtLWdpdCBhL2xpYnJhcnkvZWNwLmMgYi9saWJyYXJ5L2VjcC5jCmluZGV4IDVkMDBkZTUuLjA1YTBiMDEgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvZWNwLmMKKysrIGIvbGlicmFyeS9lY3AuYwpAQCAtNTQ2LDkgKzU0NiwxMiBAQAogI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQpCiAgICAgeyBNQkVEVExTX0VDUF9EUF9TRUNQMTkySzEsICAgIDE4LCAgICAgMTkyLCAgICAic2VjcDE5MmsxIiAgICAgICAgIH0sCiAjZW5kaWYKLSNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRCkgJiYgZGVmaW5lZChNQkVEVExTX0VDREhfVkFSSUFOVF9FVkVSRVNUX0VOQUJMRUQpCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQpCiAgICAgeyBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5LCAgIDI5LCAgICAgMjU2LCAgICAieDI1NTE5IiAgICAgICAgICAgIH0sCiAjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0NVUlZFNDQ4X0VOQUJMRUQpCisgICAgeyBNQkVEVExTX0VDUF9EUF9DVVJWRTQ0OCwgICAgIDMwLCAgICAgNDQ4LCAgICAieDQ0OCIgICAgICAgICAgICAgIH0sCisjZW5kaWYKICAgICB7IE1CRURUTFNfRUNQX0RQX05PTkUsICAgICAgICAgIDAsICAgICAwLCAgICAgIE5VTEwgICAgICAgICAgICAgICAgfSwKIH07CiAKZGlmZiAtLWdpdCBhL2xpYnJhcnkvZW50cm9weV9wb2xsLmMgYi9saWJyYXJ5L2VudHJvcHlfcG9sbC5jCmluZGV4IDRiZjY2MGUuLjUyNTBhN2IgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvZW50cm9weV9wb2xsLmMKKysrIGIvbGlicmFyeS9lbnRyb3B5X3BvbGwuYwpAQCAtMTcsNyArMTcsNyBAQAogICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLSNpZiBkZWZpbmVkKF9fbGludXhfXykKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgIWRlZmluZWQoX0dOVV9TT1VSQ0UpCiAvKiBFbnN1cmUgdGhhdCBzeXNjYWxsKCkgaXMgYXZhaWxhYmxlIGV2ZW4gd2hlbiBjb21waWxpbmcgd2l0aCAtc3RkPWM5OSAqLwogI2RlZmluZSBfR05VX1NPVVJDRQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJyYXJ5L2Vycm9yLmMgYi9saWJyYXJ5L2Vycm9yLmMKaW5kZXggY2JhNjFlOS4uOTAxYTM2OSAxMDA2NDQKLS0tIGEvbGlicmFyeS9lcnJvci5jCisrKyBiL2xpYnJhcnkvZXJyb3IuYwpAQCAtMTksMjAgKzE5LDIwIEBACiAKICNpbmNsdWRlICJjb21tb24uaCIKIAotI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWSkKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbmRpZgorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkpCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfQykKIAogI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQogI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKICNlbHNlCiAjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgc25wcmludGYKLSNkZWZpbmUgbWJlZHRsc190aW1lX3QgICB0aW1lX3QKICNlbmRpZgogCi0jaWYgZGVmaW5lZChNQkVEVExTX0VSUk9SX0MpCi0KICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQogI2luY2x1ZGUgIm1iZWR0bHMvYWVzLmgiCkBAIC05NjAsOCArOTYwLDYgQEAKIAogI2Vsc2UgLyogTUJFRFRMU19FUlJPUl9DICovCiAKLSNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkpCi0KIC8qCiAgKiBQcm92aWRlIGFuIG5vbi1mdW5jdGlvbiBpbiBjYXNlIE1CRURUTFNfRVJST1JfQyBpcyBub3QgZGVmaW5lZAogICovCkBAIC05NzMsNiArOTcxLDYgQEAKICAgICAgICAgYnVmWzBdID0gJ1wwJzsKIH0KIAotI2VuZGlmIC8qIE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkgKi8KLQogI2VuZGlmIC8qIE1CRURUTFNfRVJST1JfQyAqLworCisjZW5kaWYgLyogTUJFRFRMU19FUlJPUl9DIHx8IE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkgKi8KZGlmZiAtLWdpdCBhL2xpYnJhcnkvbmV0X3NvY2tldHMuYyBiL2xpYnJhcnkvbmV0X3NvY2tldHMuYwppbmRleCAzZjk2Y2FiLi41NGMyYjQ3IDEwMDY0NAotLS0gYS9saWJyYXJ5L25ldF9zb2NrZXRzLmMKKysrIGIvbGlicmFyeS9uZXRfc29ja2V0cy5jCkBAIC0zMTgsNyArMzE4LDcgQEAKIAogI2lmIGRlZmluZWQoX19zb2NrbGVuX3RfZGVmaW5lZCkgfHwgZGVmaW5lZChfU09DS0xFTl9UKSB8fCAgXAogICAgIGRlZmluZWQoX1NPQ0tMRU5fVF9ERUNMQVJFRCkgfHwgZGVmaW5lZChfX0RFRklORURfc29ja2xlbl90KSB8fCBcCi0gICAgZGVmaW5lZChzb2NrbGVuX3QpCisgICAgZGVmaW5lZChzb2NrbGVuX3QpIHx8IChkZWZpbmVkKF9QT1NJWF9WRVJTSU9OKSAmJiBfUE9TSVhfVkVSU0lPTiA+PSAyMDAxMTJMKQogICAgIHNvY2tsZW5fdCBuID0gKHNvY2tsZW5fdCkgc2l6ZW9mKCBjbGllbnRfYWRkciApOwogICAgIHNvY2tsZW5fdCB0eXBlX2xlbiA9IChzb2NrbGVuX3QpIHNpemVvZiggdHlwZSApOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2xpYnJhcnkvcGsuYyBiL2xpYnJhcnkvcGsuYwppbmRleCA5YTNiY2IwLi5lY2YwMDJkIDEwMDY0NAotLS0gYS9saWJyYXJ5L3BrLmMKKysrIGIvbGlicmFyeS9way5jCkBAIC0xNTAsMTEgKzE1MCwxMiBAQAogLyoKICAqIEluaXRpYWxpc2UgYSBQU0Etd3JhcHBpbmcgY29udGV4dAogICovCi1pbnQgbWJlZHRsc19wa19zZXR1cF9vcGFxdWUoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCBjb25zdCBwc2Ffa2V5X2hhbmRsZV90IGtleSApCitpbnQgbWJlZHRsc19wa19zZXR1cF9vcGFxdWUoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwc2Ffa2V5X2lkX3Qga2V5ICkKIHsKICAgICBjb25zdCBtYmVkdGxzX3BrX2luZm9fdCAqIGNvbnN0IGluZm8gPSAmbWJlZHRsc19wa19vcGFxdWVfaW5mbzsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCAqcGtfY3R4OworICAgIHBzYV9rZXlfaWRfdCAqcGtfY3R4OwogICAgIHBzYV9rZXlfdHlwZV90IHR5cGU7CiAKICAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5wa19pbmZvICE9IE5VTEwgKQpAQCAtMTc0LDcgKzE3NSw3IEBACiAKICAgICBjdHgtPnBrX2luZm8gPSBpbmZvOwogCi0gICAgcGtfY3R4ID0gKHBzYV9rZXlfaGFuZGxlX3QgKikgY3R4LT5wa19jdHg7CisgICAgcGtfY3R4ID0gKHBzYV9rZXlfaWRfdCAqKSBjdHgtPnBrX2N0eDsKICAgICAqcGtfY3R4ID0ga2V5OwogCiAgICAgcmV0dXJuKCAwICk7CkBAIC01ODcsMTIgKzU4OCwxMiBAQAogICogQ3VycmVudGx5IG9ubHkgd29ya3MgZm9yIEVDIHByaXZhdGUga2V5cy4KICAqLwogaW50IG1iZWR0bHNfcGtfd3JhcF9hc19vcGFxdWUoIG1iZWR0bHNfcGtfY29udGV4dCAqcGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaWRfdCAqa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBoYXNoX2FsZyApCiB7CiAjaWYgIWRlZmluZWQoTUJFRFRMU19FQ1BfQykKICAgICAoKHZvaWQpIHBrKTsKLSAgICAoKHZvaWQpIGhhbmRsZSk7CisgICAgKCh2b2lkKSBrZXkpOwogICAgICgodm9pZCkgaGFzaF9hbGcpOwogICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfVFlQRV9NSVNNQVRDSCApOwogI2Vsc2UKQEAgLTYyNCwxNCArNjI1LDE0IEBACiAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgUFNBX0FMR19FQ0RTQShoYXNoX2FsZykgKTsKIAogICAgIC8qIGltcG9ydCBwcml2YXRlIGtleSBpbnRvIFBTQSAqLwotICAgIGlmKCBQU0FfU1VDQ0VTUyAhPSBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGQsIGRfbGVuLCBoYW5kbGUgKSApCisgICAgaWYoIFBTQV9TVUNDRVNTICE9IHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywgZCwgZF9sZW4sIGtleSApICkKICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19IV19BQ0NFTF9GQUlMRUQgKTsKIAogICAgIC8qIG1ha2UgUEsgY29udGV4dCB3cmFwIHRoZSBrZXkgc2xvdCAqLwogICAgIG1iZWR0bHNfcGtfZnJlZSggcGsgKTsKICAgICBtYmVkdGxzX3BrX2luaXQoIHBrICk7CiAKLSAgICByZXR1cm4oIG1iZWR0bHNfcGtfc2V0dXBfb3BhcXVlKCBwaywgKmhhbmRsZSApICk7CisgICAgcmV0dXJuKCBtYmVkdGxzX3BrX3NldHVwX29wYXF1ZSggcGssICprZXkgKSApOwogI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KIH0KICNlbmRpZiAvKiBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPICovCmRpZmYgLS1naXQgYS9saWJyYXJ5L3BrX3dyYXAuYyBiL2xpYnJhcnkvcGtfd3JhcC5jCmluZGV4IDkwM2M1M2IuLjEwN2U5MTIgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvcGtfd3JhcC5jCisrKyBiL2xpYnJhcnkvcGtfd3JhcC5jCkBAIC01NDMsNyArNTQzLDcgQEAKICAgICBtYmVkdGxzX2VjZHNhX2NvbnRleHQgKmN0eCA9IGN0eF9hcmc7CiAgICAgaW50IHJldCA9IE1CRURUTFNfRVJSX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQ7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwotICAgIHBzYV9rZXlfaGFuZGxlX3Qga2V5X2hhbmRsZSA9IDA7CisgICAgcHNhX2tleV9pZF90IGtleV9pZCA9IDA7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1czsKICAgICBtYmVkdGxzX3BrX2NvbnRleHQga2V5OwogICAgIGludCBrZXlfbGVuOwpAQCAtNTc2LDcgKzU3Niw3IEBACiAKICAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArIHNpemVvZiggYnVmICkgLSBrZXlfbGVuLCBrZXlfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5X2hhbmRsZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5X2lkICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgewogICAgICAgICByZXQgPSBtYmVkdGxzX3BzYV9lcnJfdHJhbnNsYXRlX3BrKCBzdGF0dXMgKTsKQEAgLTU5OCw3ICs1OTgsNyBAQAogICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgfQogCi0gICAgaWYoIHBzYV92ZXJpZnlfaGFzaCgga2V5X2hhbmRsZSwgcHNhX3NpZ19tZCwKKyAgICBpZiggcHNhX3ZlcmlmeV9oYXNoKCBrZXlfaWQsIHBzYV9zaWdfbWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgaGFzaF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCAyICogc2lnbmF0dXJlX3BhcnRfc2l6ZSApCiAgICAgICAgICAhPSBQU0FfU1VDQ0VTUyApCkBAIC02MTUsNyArNjE1LDcgQEAKICAgICByZXQgPSAwOwogCiBjbGVhbnVwOgotICAgIHBzYV9kZXN0cm95X2tleSgga2V5X2hhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5X2lkICk7CiAgICAgcmV0dXJuKCByZXQgKTsKIH0KICNlbHNlIC8qIE1CRURUTFNfVVNFX1BTQV9DUllQVE8gKi8KQEAgLTg3MCw3ICs4NzAsNyBAQAogCiBzdGF0aWMgdm9pZCAqcGtfb3BhcXVlX2FsbG9jX3dyYXAoIHZvaWQgKQogewotICAgIHZvaWQgKmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIHBzYV9rZXlfaGFuZGxlX3QgKSApOworICAgIHZvaWQgKmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIHBzYV9rZXlfaWRfdCApICk7CiAKICAgICAvKiBubyBfaW5pdCgpIGZ1bmN0aW9uIHRvIGNhbGwsIGFuIGNhbGxvYygpIGFscmVhZHkgemVyb2l6ZWQgKi8KIApAQCAtODc5LDEzICs4NzksMTMgQEAKIAogc3RhdGljIHZvaWQgcGtfb3BhcXVlX2ZyZWVfd3JhcCggdm9pZCAqY3R4ICkKIHsKLSAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoIGN0eCwgc2l6ZW9mKCBwc2Ffa2V5X2hhbmRsZV90ICkgKTsKKyAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoIGN0eCwgc2l6ZW9mKCBwc2Ffa2V5X2lkX3QgKSApOwogICAgIG1iZWR0bHNfZnJlZSggY3R4ICk7CiB9CiAKIHN0YXRpYyBzaXplX3QgcGtfb3BhcXVlX2dldF9iaXRsZW4oIGNvbnN0IHZvaWQgKmN0eCApCiB7Ci0gICAgY29uc3QgcHNhX2tleV9oYW5kbGVfdCAqa2V5ID0gKGNvbnN0IHBzYV9rZXlfaGFuZGxlX3QgKikgY3R4OworICAgIGNvbnN0IHBzYV9rZXlfaWRfdCAqa2V5ID0gKGNvbnN0IHBzYV9rZXlfaWRfdCAqKSBjdHg7CiAgICAgc2l6ZV90IGJpdHM7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogCkBAIC0xMDA4LDcgKzEwMDgsNyBAQAogICAgICgodm9pZCkgcF9ybmcpOwogICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfRkVBVFVSRV9VTkFWQUlMQUJMRSApOwogI2Vsc2UgLyogIU1CRURUTFNfRUNEU0FfQyAqLwotICAgIGNvbnN0IHBzYV9rZXlfaGFuZGxlX3QgKmtleSA9IChjb25zdCBwc2Ffa2V5X2hhbmRsZV90ICopIGN0eDsKKyAgICBjb25zdCBwc2Ffa2V5X2lkX3QgKmtleSA9IChjb25zdCBwc2Ffa2V5X2lkX3QgKikgY3R4OwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gUFNBX0FMR19FQ0RTQSggbWJlZHRsc19wc2FfdHJhbnNsYXRlX21kKCBtZF9hbGcgKSApOwogICAgIHNpemVfdCBidWZfbGVuOwpkaWZmIC0tZ2l0IGEvbGlicmFyeS9wa3BhcnNlLmMgYi9saWJyYXJ5L3BrcGFyc2UuYwppbmRleCBhMTA2ZGJlLi4wNTkwZjJiIDEwMDY0NAotLS0gYS9saWJyYXJ5L3BrcGFyc2UuYworKysgYi9saWJyYXJ5L3BrcGFyc2UuYwpAQCAtNjYyLDcgKzY2Miw3IEBACiAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHOwogCiAgICAgaWYoIHJldCA9PSAwICYmICpwICE9IGVuZCApCi0gICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZCisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZICsKICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0g7CiAKICAgICBpZiggcmV0ICE9IDAgKQpkaWZmIC0tZ2l0IGEvbGlicmFyeS9wa3dyaXRlLmMgYi9saWJyYXJ5L3Brd3JpdGUuYwppbmRleCBiMzE3Y2NmLi4wZGEzNjk4IDEwMDY0NAotLS0gYS9saWJyYXJ5L3Brd3JpdGUuYworKysgYi9saWJyYXJ5L3Brd3JpdGUuYwpAQCAtMTk4LDEzICsxOTgsMTMgQEAKICAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSgga2V5ICkgPT0gTUJFRFRMU19QS19PUEFRVUUgKQogICAgIHsKICAgICAgICAgc2l6ZV90IGJ1ZmZlcl9zaXplOwotICAgICAgICBwc2Ffa2V5X2hhbmRsZV90KiBrZXlfc2xvdCA9IChwc2Ffa2V5X2hhbmRsZV90Kikga2V5LT5wa19jdHg7CisgICAgICAgIHBzYV9rZXlfaWRfdCoga2V5X2lkID0gKHBzYV9rZXlfaWRfdCopIGtleS0+cGtfY3R4OwogCiAgICAgICAgIGlmICggKnAgPCBzdGFydCApCiAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBICk7CiAKICAgICAgICAgYnVmZmVyX3NpemUgPSAoc2l6ZV90KSggKnAgLSBzdGFydCApOwotICAgICAgICBpZiAoIHBzYV9leHBvcnRfcHVibGljX2tleSggKmtleV9zbG90LCBzdGFydCwgYnVmZmVyX3NpemUsICZsZW4gKQorICAgICAgICBpZiAoIHBzYV9leHBvcnRfcHVibGljX2tleSggKmtleV9pZCwgc3RhcnQsIGJ1ZmZlcl9zaXplLCAmbGVuICkKICAgICAgICAgICAgICAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEgKTsKQEAgLTI2NSwxMiArMjY1LDEyIEBACiAgICAgewogICAgICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlOwotICAgICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZTsKKyAgICAgICAgcHNhX2tleV9pZF90IGtleV9pZDsKICAgICAgICAgcHNhX2VjY19mYW1pbHlfdCBjdXJ2ZTsKICAgICAgICAgc2l6ZV90IGJpdHM7CiAKLSAgICAgICAgaGFuZGxlID0gKigocHNhX2tleV9oYW5kbGVfdCopIGtleS0+cGtfY3R4ICk7Ci0gICAgICAgIGlmKCBQU0FfU1VDQ0VTUyAhPSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKQorICAgICAgICBrZXlfaWQgPSAqKChwc2Ffa2V5X2lkX3QqKSBrZXktPnBrX2N0eCApOworICAgICAgICBpZiggUFNBX1NVQ0NFU1MgIT0gcHNhX2dldF9rZXlfYXR0cmlidXRlcygga2V5X2lkLCAmYXR0cmlidXRlcyApICkKICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfSFdfQUNDRUxfRkFJTEVEICk7CiAgICAgICAgIGtleV90eXBlID0gcHNhX2dldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMgKTsKICAgICAgICAgYml0cyA9IHBzYV9nZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzICk7CmRpZmYgLS1naXQgYS9saWJyYXJ5L3BsYXRmb3JtX3V0aWwuYyBiL2xpYnJhcnkvcGxhdGZvcm1fdXRpbC5jCmluZGV4IDRlMWQ2MTcuLjk4ZmU1ZGUgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvcGxhdGZvcm1fdXRpbC5jCisrKyBiL2xpYnJhcnkvcGxhdGZvcm1fdXRpbC5jCkBAIC04NCw3ICs4NCw3IEBACiAKICNpZiAhKCAoIGRlZmluZWQoX1BPU0lYX1ZFUlNJT04pICYmIF9QT1NJWF9WRVJTSU9OID49IDIwMDgwOUwgKSB8fCAgICAgXAogICAgICAgICggZGVmaW5lZChfUE9TSVhfVEhSRUFEX1NBRkVfRlVOQ1RJT05TICkgJiYgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICBfUE9TSVhfVEhSRUFEX1NBRkVfRlVOQ1RJT05TID49IDIwMTEyTCApICkKKyAgICAgICAgIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMgPj0gMjAwMTEyTCApICkKIC8qCiAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2Ugc2hvcnRoYW5kIG1hY3JvIHRvIGF2b2lkIGNoZWNraW5nIHRoZSBsb25nCiAgKiBwcmVwcm9jZXNzb3IgY29uZGl0aW9ucyBhYm92ZS4gSWRlYWxseSwgd2UgY291bGQgZXhwb3NlIHRoaXMgbWFjcm8gaW4KQEAgLTk4LDcgKzk4LDcgQEAKIAogI2VuZGlmIC8qICEoICggZGVmaW5lZChfUE9TSVhfVkVSU0lPTikgJiYgX1BPU0lYX1ZFUlNJT04gPj0gMjAwODA5TCApIHx8ICAgICBcCiAgICAgICAgICAgICAgKCBkZWZpbmVkKF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMgKSAmJiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBfUE9TSVhfVEhSRUFEX1NBRkVfRlVOQ1RJT05TID49IDIwMTEyTCApICkgKi8KKyAgICAgICAgICAgICAgICBfUE9TSVhfVEhSRUFEX1NBRkVfRlVOQ1RJT05TID49IDIwMDExMkwgKSApICovCiAKIHN0cnVjdCB0bSAqbWJlZHRsc19wbGF0Zm9ybV9nbXRpbWVfciggY29uc3QgbWJlZHRsc190aW1lX3QgKnR0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnRtX2J1ZiApCmRpZmYgLS1naXQgYS9saWJyYXJ5L3BzYV9jcnlwdG8uYyBiL2xpYnJhcnkvcHNhX2NyeXB0by5jCmluZGV4IDkzMWUyZTkuLjY2YzhmNjUgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvcHNhX2NyeXB0by5jCisrKyBiL2xpYnJhcnkvcHNhX2NyeXB0by5jCkBAIC0yMiw2ICsyMiwxMCBAQAogCiAjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fQykKIAorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRykKKyNpbmNsdWRlICJjaGVja19jcnlwdG9fY29uZmlnLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgInBzYV9jcnlwdG9fc2VydmljZV9pbnRlZ3JhdGlvbi5oIgogI2luY2x1ZGUgInBzYS9jcnlwdG8uaCIKIApAQCAtMTk5LDcgKzIwMyw3IEBACiAgICAgICAgIGNhc2UgTUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORzoKICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfUEFERElORyApOwogICAgICAgICBjYXNlIE1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVEOgotICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CiAgICAgICAgIGNhc2UgTUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVEOgogICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9TSUdOQVRVUkUgKTsKICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9DT05URVhUOgpAQCAtMzcwLDcgKzM3NCwxNSBAQAogfQogI2VuZGlmIC8qIE1CRURUTFNfUFNBX0NSWVBUT19TRV9DICovCiAKLSNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisvKiBGb3Igbm93IHRoZSBNQkVEVExTX1BTQV9BQ0NFTF8gZ3VhcmRzIGFyZSBhbHNvIHVzZWQgaGVyZSBzaW5jZSB0aGUKKyAqIGN1cnJlbnQgdGVzdCBkcml2ZXIgaW4ga2V5X21hbmFnZW1lbnQuYyBpcyB1c2luZyB0aGlzIGZ1bmN0aW9uCisgKiB3aGVuIGFjY2VsZXJhdG9ycyBhcmUgdXNlZCBmb3IgRUNDIGtleSBwYWlyIGFuZCBwdWJsaWMga2V5LgorICogT25jZSB0aGF0IGRlcGVuZGVuY3kgaXMgcmVzb2x2ZWQgdGhlc2UgZ3VhcmRzIGNhbiBiZSByZW1vdmVkLgorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX0VDQ19LRVlfUEFJUikgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQUNDRUxfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1BTQV9BQ0NFTF9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSkKIG1iZWR0bHNfZWNwX2dyb3VwX2lkIG1iZWR0bHNfZWNjX2dyb3VwX29mX3BzYSggcHNhX2VjY19mYW1pbHlfdCBjdXJ2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ5dGVfbGVuZ3RoICkKIHsKQEAgLTQzOCw3ICs0NTAsMTAgQEAKICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FQ1BfRFBfTk9ORSApOwogICAgIH0KIH0KLSNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpICovCisjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX0VDQ19LRVlfUEFJUikgfHwKKyAgICAgICAgKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVkpIHx8CisgICAgICAgICogZGVmaW5lZChNQkVEVExTX1BTQV9BQ0NFTF9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIpIHx8CisgICAgICAgICogZGVmaW5lZChNQkVEVExTX1BTQV9BQ0NFTF9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSkgKi8KIAogc3RhdGljIHBzYV9zdGF0dXNfdCB2YWxpZGF0ZV91bnN0cnVjdHVyZWRfa2V5X2JpdF9zaXplKCBwc2Ffa2V5X3R5cGVfdCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYml0cyApCkBAIC00NDcsOSArNDYyLDcgQEAKICAgICBzd2l0Y2goIHR5cGUgKQogICAgIHsKICAgICAgICAgY2FzZSBQU0FfS0VZX1RZUEVfUkFXX0RBVEE6Ci0jaWYgZGVmaW5lZChNQkVEVExTX01EX0MpCiAgICAgICAgIGNhc2UgUFNBX0tFWV9UWVBFX0hNQUM6Ci0jZW5kaWYKICAgICAgICAgY2FzZSBQU0FfS0VZX1RZUEVfREVSSVZFOgogICAgICAgICAgICAgYnJlYWs7CiAjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQpAQCAtNDkxLDkgKzUwNCwxMyBAQAogICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKIH0KIAotI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QS0NTMVYxNV9DUllQVCkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfUlNBX1BLQ1MxVjE1X1NJR04pIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9PQUVQKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUFNTKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX1JTQV9LRVlfUEFJUikgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSkKIAotI2lmIGRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9DKQogLyogTWJlZCBUTFMgZG9lc24ndCBzdXBwb3J0IG5vbi1ieXRlLWFsaWduZWQga2V5IHNpemVzIChpLmUuIGtleSBzaXplcwogICogdGhhdCBhcmUgbm90IGEgbXVsdGlwbGUgb2YgOCkgd2VsbC4gRm9yIGV4YW1wbGUsIHRoZXJlIGlzIG9ubHkKICAqIG1iZWR0bHNfcnNhX2dldF9sZW4oKSwgd2hpY2ggcmV0dXJucyBhIG51bWJlciBvZiBieXRlcywgYW5kIG5vCkBAIC01MTUsNyArNTMyLDYgQEAKICAgICBtYmVkdGxzX21waV9mcmVlKCAmbiApOwogICAgIHJldHVybiggc3RhdHVzICk7CiB9Ci0jZW5kaWYgLyogTUJFRFRMU19QS19QQVJTRV9DICovCiAKIC8qKiBMb2FkIHRoZSBjb250ZW50cyBvZiBhIGtleSBidWZmZXIgaW50byBhbiBpbnRlcm5hbCBSU0EgcmVwcmVzZW50YXRpb24KICAqCkBAIC01MzIsNyArNTQ4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19yc2FfY29udGV4dCAqKnBfcnNhICkKIHsKLSNpZiBkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwogICAgIG1iZWR0bHNfcGtfY29udGV4dCBjdHg7CiAgICAgc2l6ZV90IGJpdHM7CkBAIC01NzcsMTUgKzU5MiwxOCBAQAogZXhpdDoKICAgICBtYmVkdGxzX3BrX2ZyZWUoICZjdHggKTsKICAgICByZXR1cm4oIHN0YXR1cyApOwotI2Vsc2UKLSAgICAodm9pZCkgZGF0YTsKLSAgICAodm9pZCkgZGF0YV9sZW5ndGg7Ci0gICAgKHZvaWQpIHR5cGU7Ci0gICAgKHZvaWQpIHJzYTsKLSAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7Ci0jZW5kaWYgLyogTUJFRFRMU19QS19QQVJTRV9DICovCiB9CiAKKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QS0NTMVYxNV9DUllQVCkgfHwKKyAgICAgICAgKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QS0NTMVYxNV9TSUdOKSB8fAorICAgICAgICAqIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfUlNBX09BRVApIHx8CisgICAgICAgICogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUFNTKSB8fAorICAgICAgICAqIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9SU0FfS0VZX1BBSVIpIHx8CisgICAgICAgICogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZKSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX1JTQV9LRVlfUEFJUikgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSkKKwogLyoqIEV4cG9ydCBhbiBSU0Ega2V5IHRvIGV4cG9ydCByZXByZXNlbnRhdGlvbgogICoKICAqIFxwYXJhbVtpbl0gdHlwZSAgICAgICAgICBUaGUgdHlwZSBvZiBrZXkgKHB1YmxpYy9wcml2YXRlKSB0byBleHBvcnQKQEAgLTcwOSw5ICs3MjcsMTUgQEAKIAogICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKIH0KLSNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpICovCiAKLSNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX1JTQV9LRVlfUEFJUikgfHwKKyAgICAgICAgKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVkpICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfRUNDX0tFWV9QQUlSKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19FQ0RTQSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfRUNESCkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSkKIC8qKiBMb2FkIHRoZSBjb250ZW50cyBvZiBhIGtleSBidWZmZXIgaW50byBhbiBpbnRlcm5hbCBFQ1AgcmVwcmVzZW50YXRpb24KICAqCiAgKiBccGFyYW1baW5dIHR5cGUgICAgICAgICAgVGhlIHR5cGUgb2Yga2V5IGNvbnRhaW5lZCBpbiBccCBkYXRhLgpAQCAtNzM5LDcgKzc2Myw3IEBACiAgICAgICAgICAqIC0gVGhlIGJ5dGUgMHgwNDsKICAgICAgICAgICogLSBgeF9QYCBhcyBhIGBjZWlsaW5nKG0vOClgLWJ5dGUgc3RyaW5nLCBiaWctZW5kaWFuOwogICAgICAgICAgKiAtIGB5X1BgIGFzIGEgYGNlaWxpbmcobS84KWAtYnl0ZSBzdHJpbmcsIGJpZy1lbmRpYW4uCi0gICAgICAgICAqIFNvIGl0cyBkYXRhIGxlbmd0aCBpcyAybSsxIHdoZXJlIG4gaXMgdGhlIGtleSBzaXplIGluIGJpdHMuCisgICAgICAgICAqIFNvIGl0cyBkYXRhIGxlbmd0aCBpcyAybSsxIHdoZXJlIG0gaXMgdGhlIGN1cnZlIHNpemUgaW4gYml0cy4KICAgICAgICAgICovCiAgICAgICAgIGlmKCAoIGRhdGFfbGVuZ3RoICYgMSApID09IDAgKQogICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCApOwpAQCAtODExLDcgKzgzNSwxNCBAQAogCiAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIH0KKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfRUNDX0tFWV9QQUlSKSB8fAorICAgICAgICAqIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSkgfHwKKyAgICAgICAgKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0VDRFNBKSB8fAorICAgICAgICAqIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfRUNESCkgfHwKKyAgICAgICAgKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EpICovCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfRUNDX0tFWV9QQUlSKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKQogLyoqIEV4cG9ydCBhbiBFQ1Aga2V5IHRvIGV4cG9ydCByZXByZXNlbnRhdGlvbgogICoKICAqIFxwYXJhbVtpbl0gdHlwZSAgICAgICAgICBUaGUgdHlwZSBvZiBrZXkgKHB1YmxpYy9wcml2YXRlKSB0byBleHBvcnQKQEAgLTkzMCw3ICs5NjEsOCBAQAogCiAgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOwogfQotI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19FQ1BfQykgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfRUNDX0tFWV9QQUlSKSB8fAorICAgICAgICAqIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSkgKi8KIAogLyoqIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUga2V5IGluIHRoZSBnaXZlbiBzbG90LCBpbiBiaXRzLgogICoKQEAgLTk2OSwxNCArMTAwMSw0NSBAQAogICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKIH0KIAotLyoqIEltcG9ydCBrZXkgZGF0YSBpbnRvIGEgc2xvdC4gYHNsb3QtPmF0dHIudHlwZWAgbXVzdCBoYXZlIGJlZW4gc2V0Ci0gKiBwcmV2aW91c2x5LiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgc2xvdCBkb2VzIG5vdCBjb250YWluCi0gKiBhbnkga2V5IG1hdGVyaWFsIHlldC4gT24gZmFpbHVyZSwgdGhlIHNsb3QgY29udGVudCBpcyB1bmNoYW5nZWQuICovCi1wc2Ffc3RhdHVzX3QgcHNhX2ltcG9ydF9rZXlfaW50b19zbG90KCBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YV9sZW5ndGggKQorcHNhX3N0YXR1c190IHBzYV9jb3B5X2tleV9tYXRlcmlhbF9pbnRvX3Nsb3QoIHBzYV9rZXlfc2xvdF90ICpzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFfbGVuZ3RoICkKK3sKKyAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gcHNhX2FsbG9jYXRlX2J1ZmZlcl90b19zbG90KCBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbGVuZ3RoICk7CisgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCisgICAgICAgIHJldHVybiggc3RhdHVzICk7CisKKyAgICBtZW1jcHkoIHNsb3QtPmRhdGEua2V5LmRhdGEsIGRhdGEsIGRhdGFfbGVuZ3RoICk7CisgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOworfQorCisvKiogSW1wb3J0IGtleSBkYXRhIGludG8gYSBzbG90LgorICoKKyAqIGBzbG90LT50eXBlYCBtdXN0IGhhdmUgYmVlbiBzZXQgcHJldmlvdXNseS4KKyAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBzbG90IGRvZXMgbm90IGNvbnRhaW4gYW55IGtleSBtYXRlcmlhbCB5ZXQuCisgKiBPbiBmYWlsdXJlLCB0aGUgc2xvdCBjb250ZW50IGlzIHVuY2hhbmdlZC4KKyAqCisgKiBQZXJzaXN0ZW50IHN0b3JhZ2UgaXMgbm90IGFmZmVjdGVkLgorICoKKyAqIFxwYXJhbVtpbixvdXRdIHNsb3QgIFRoZSBrZXkgc2xvdCB0byBpbXBvcnQgZGF0YSBpbnRvLgorICogICAgICAgICAgICAgICAgICAgICAgSXRzIGB0eXBlYCBmaWVsZCBtdXN0IGhhdmUgcHJldmlvdXNseSBiZWVuIHNldCB0bworICogICAgICAgICAgICAgICAgICAgICAgdGhlIGRlc2lyZWQga2V5IHR5cGUuCisgKiAgICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IG5vdCBjb250YWluIGFueSBrZXkgbWF0ZXJpYWwgeWV0LgorICogXHBhcmFtW2luXSBkYXRhICAgICAgQnVmZmVyIGNvbnRhaW5pbmcgdGhlIGtleSBtYXRlcmlhbCB0byBwYXJzZSBhbmQgaW1wb3J0LgorICogXHBhcmFtIGRhdGFfbGVuZ3RoICAgU2l6ZSBvZiBccCBkYXRhIGluIGJ5dGVzLgorICoKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorICogXHJldHZhbCAjUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZCisgKi8KK3N0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX2ltcG9ydF9rZXlfaW50b19zbG90KCBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhX2xlbmd0aCApCiB7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9TVUNDRVNTOworICAgIHNpemVfdCBiaXRfc2l6ZTsKIAogICAgIC8qIHplcm8tbGVuZ3RoIGtleXMgYXJlIG5ldmVyIHN1cHBvcnRlZC4gKi8KICAgICBpZiggZGF0YV9sZW5ndGggPT0gMCApCkBAIC05ODQsNyArMTA0Nyw3IEBACiAKICAgICBpZigga2V5X3R5cGVfaXNfcmF3X2J5dGVzKCBzbG90LT5hdHRyLnR5cGUgKSApCiAgICAgewotICAgICAgICBzaXplX3QgYml0X3NpemUgPSBQU0FfQllURVNfVE9fQklUUyggZGF0YV9sZW5ndGggKTsKKyAgICAgICAgYml0X3NpemUgPSBQU0FfQllURVNfVE9fQklUUyggZGF0YV9sZW5ndGggKTsKIAogICAgICAgICAvKiBFbnN1cmUgdGhhdCB0aGUgYnl0ZXMtdG8tYml0cyBjb252ZXJzaW9uIGhhc24ndCBvdmVyZmxvd24uICovCiAgICAgICAgIGlmKCBkYXRhX2xlbmd0aCA+IFNJWkVfTUFYIC8gOCApCkBAIC0xMDAwLDQ3ICsxMDYzLDY5IEBACiAgICAgICAgICAgICByZXR1cm4oIHN0YXR1cyApOwogCiAgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGtleSAqLwotICAgICAgICBzdGF0dXMgPSBwc2FfYWxsb2NhdGVfYnVmZmVyX3RvX3Nsb3QoIHNsb3QsIGRhdGFfbGVuZ3RoICk7CisgICAgICAgIHN0YXR1cyA9IHBzYV9jb3B5X2tleV9tYXRlcmlhbF9pbnRvX3Nsb3QoIHNsb3QsIGRhdGEsIGRhdGFfbGVuZ3RoICk7CiAgICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIAotICAgICAgICAvKiBjb3B5IGtleSBpbnRvIGFsbG9jYXRlZCBidWZmZXIgKi8KLSAgICAgICAgbWVtY3B5KCBzbG90LT5kYXRhLmtleS5kYXRhLCBkYXRhLCBkYXRhX2xlbmd0aCApOwotCiAgICAgICAgIC8qIFdyaXRlIHRoZSBhY3R1YWwga2V5IHNpemUgdG8gdGhlIHNsb3QuCiAgICAgICAgICAqIHBzYV9zdGFydF9rZXlfY3JlYXRpb24oKSB3cm90ZSB0aGUgc2l6ZSBkZWNsYXJlZCBieSB0aGUKICAgICAgICAgICogY2FsbGVyLCB3aGljaCBtYXkgYmUgMCAobWVhbmluZyB1bnNwZWNpZmllZCkgb3Igd3JvbmcuICovCiAgICAgICAgIHNsb3QtPmF0dHIuYml0cyA9IChwc2Ffa2V5X2JpdHNfdCkgYml0X3NpemU7CisKKyAgICAgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOwogICAgIH0KLSAgICBlbHNlIGlmKCBQU0FfS0VZX1RZUEVfSVNfRUNDKCBzbG90LT5hdHRyLnR5cGUgKSApCisgICAgZWxzZSBpZiggUFNBX0tFWV9UWVBFX0lTX0FTWU1NRVRSSUMoIHNsb3QtPmF0dHIudHlwZSApICkKICAgICB7Ci0jaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQotICAgICAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2VjcF9rZXkoIHNsb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgZGF0YV9sZW5ndGggKTsKLSNlbHNlCi0gICAgICAgIC8qIE5vIGRyaXZlcnMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIHlldCwgc28gd2l0aG91dCBtYmVkIFRMUyBiYWNraW5nCi0gICAgICAgICAqIHRoZXJlJ3Mgbm8gd2F5IHRvIGRvIEVDUCB3aXRoIHRoZSBjdXJyZW50IGxpYnJhcnkuICovCisgICAgICAgIC8qIFRyeSB2YWxpZGF0aW9uIHRocm91Z2ggYWNjZWxlcmF0b3JzIGZpcnN0LiAqLworICAgICAgICBiaXRfc2l6ZSA9IHNsb3QtPmF0dHIuYml0czsKKyAgICAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IHsKKyAgICAgICAgICAuY29yZSA9IHNsb3QtPmF0dHIKKyAgICAgICAgfTsKKyAgICAgICAgc3RhdHVzID0gcHNhX2RyaXZlcl93cmFwcGVyX3ZhbGlkYXRlX2tleSggJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYml0X3NpemUgKTsKKyAgICAgICAgaWYoIHN0YXR1cyA9PSBQU0FfU1VDQ0VTUyApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEtleSBoYXMgYmVlbiB2YWxpZGF0ZWQgc3VjY2Vzc2Z1bGx5IGJ5IGFuIGFjY2VsZXJhdG9yLgorICAgICAgICAgICAgICogQ29weSBrZXkgbWF0ZXJpYWwgaW50byBzbG90LiAqLworICAgICAgICAgICAgc3RhdHVzID0gcHNhX2NvcHlfa2V5X21hdGVyaWFsX2ludG9fc2xvdCggc2xvdCwgZGF0YSwgZGF0YV9sZW5ndGggKTsKKyAgICAgICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICAgICAgICAgIHJldHVybiggc3RhdHVzICk7CisKKyAgICAgICAgICAgIHNsb3QtPmF0dHIuYml0cyA9IChwc2Ffa2V5X2JpdHNfdCkgYml0X3NpemU7CisgICAgICAgICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RhdHVzICE9IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICkKKyAgICAgICAgICAgIHJldHVybiggc3RhdHVzICk7CisKKyAgICAgICAgLyogS2V5IGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFueSBhY2NlbGVyYXRvciwgdHJ5IHNvZnR3YXJlIGZhbGxiYWNrCisgICAgICAgICAqIGlmIHByZXNlbnQuICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX0VDQ19LRVlfUEFJUikgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSkKKyAgICAgICAgaWYoIFBTQV9LRVlfVFlQRV9JU19FQ0MoIHNsb3QtPmF0dHIudHlwZSApICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCBwc2FfaW1wb3J0X2VjcF9rZXkoIHNsb3QsIGRhdGEsIGRhdGFfbGVuZ3RoICkgKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIpIHx8CisgICAgICAgICogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9SU0FfS0VZX1BBSVIpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVkpCisgICAgICAgIGlmKCBQU0FfS0VZX1RZUEVfSVNfUlNBKCBzbG90LT5hdHRyLnR5cGUgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggcHNhX2ltcG9ydF9yc2Ffa2V5KCBzbG90LCBkYXRhLCBkYXRhX2xlbmd0aCApICk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfUlNBX0tFWV9QQUlSKSB8fAorICAgICAgICAqIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSkgKi8KKworICAgICAgICAvKiBGZWxsIHRocm91Z2ggdGhlIGZhbGxiYWNrIGFzIHdlbGwsIHNvIGhhdmUgbm90aGluZyBlbHNlIHRvIHRyeS4gKi8KICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOwotI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19FQ1BfQykgKi8KLSAgICB9Ci0gICAgZWxzZSBpZiggUFNBX0tFWV9UWVBFX0lTX1JTQSggc2xvdC0+YXR0ci50eXBlICkgKQotICAgIHsKLSNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCi0gICAgICAgIHN0YXR1cyA9IHBzYV9pbXBvcnRfcnNhX2tleSggc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCBkYXRhX2xlbmd0aCApOwotI2Vsc2UKLSAgICAgICAgLyogTm8gZHJpdmVycyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgeWV0LCBzbyB3aXRob3V0IG1iZWQgVExTIGJhY2tpbmcKLSAgICAgICAgICogdGhlcmUncyBubyB3YXkgdG8gZG8gUlNBIHdpdGggdGhlIGN1cnJlbnQgbGlicmFyeS4gKi8KLSAgICAgICAgc3RhdHVzID0gUFNBX0VSUk9SX05PVF9TVVBQT1JURUQ7Ci0jZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1JTQV9DKSAqLwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICAvKiBVbmtub3duIGtleSB0eXBlICovCiAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKICAgICB9Ci0KLSAgICByZXR1cm4oIHN0YXR1cyApOwogfQogCiAvKiogQ2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gb2YgdHdvIGFsZ29yaXRobSB1c2FnZSBwb2xpY2llcy4KQEAgLTEwODQsNiArMTE2OSwxNSBAQAogICAgICAgICByZXR1cm4oICggcG9saWN5X2FsZyAmIH5QU0FfQUxHX0hBU0hfTUFTSyApID09CiAgICAgICAgICAgICAgICAgKCByZXF1ZXN0ZWRfYWxnICYgflBTQV9BTEdfSEFTSF9NQVNLICkgKTsKICAgICB9CisgICAgLyogSWYgcG9saWN5X2FsZyBpcyBhIGdlbmVyaWMga2V5IGFncmVlbWVudCBvcGVyYXRpb24sIHRoZW4gdXNpbmcgaXQgZm9yCisgICAgICogYSBrZXkgZGVyaXZhdGlvbiB3aXRoIHRoYXQga2V5IGFncmVlbWVudCBzaG91bGQgYWxzbyBiZSBhbGxvd2VkLiBUaGlzCisgICAgICogYmVoYXZpb3VyIGlzIGV4cGVjdGVkIHRvIGJlIGRlZmluZWQgaW4gYSBmdXR1cmUgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uLiAqLworICAgIGlmKCBQU0FfQUxHX0lTX1JBV19LRVlfQUdSRUVNRU5UKCBwb2xpY3lfYWxnICkgJiYKKyAgICAgICAgUFNBX0FMR19JU19LRVlfQUdSRUVNRU5UKCByZXF1ZXN0ZWRfYWxnICkgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBQU0FfQUxHX0tFWV9BR1JFRU1FTlRfR0VUX0JBU0UoIHJlcXVlc3RlZF9hbGcgKSA9PQorICAgICAgICAgICAgICAgIHBvbGljeV9hbGcgKTsKKyAgICB9CiAgICAgLyogSWYgaXQgaXNuJ3QgcGVybWl0dGVkLCBpdCdzIGZvcmJpZGRlbi4gKi8KICAgICByZXR1cm4oIDAgKTsKIH0KQEAgLTExMjksMjIgKzEyMjMsMzEgQEAKICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CiB9CiAKLS8qKiBSZXRyaWV2ZSBhIHNsb3Qgd2hpY2ggbXVzdCBjb250YWluIGEga2V5LiBUaGUga2V5IG11c3QgaGF2ZSBhbGxvdyBhbGwgdGhlCi0gKiB1c2FnZSBmbGFncyBzZXQgaW4gXHAgdXNhZ2UuIElmIFxwIGFsZyBpcyBub256ZXJvLCB0aGUga2V5IG11c3QgYWxsb3cKLSAqIG9wZXJhdGlvbnMgd2l0aCB0aGlzIGFsZ29yaXRobS4gKi8KLXN0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX2dldF9rZXlfZnJvbV9zbG90KCBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3Nsb3RfdCAqKnBfc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3VzYWdlX3QgdXNhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZyApCisvKiogR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiBhIGtleSBnaXZlbiBpdHMgaWRlbnRpZmllciBhbmQgcG9saWN5IGNvbnN0cmFpbnRzCisgKiAgYW5kIGxvY2sgaXQuCisgKgorICogVGhlIGtleSBtdXN0IGhhdmUgYWxsb3cgYWxsIHRoZSB1c2FnZSBmbGFncyBzZXQgaW4gXHAgdXNhZ2UuIElmIFxwIGFsZyBpcworICogbm9uemVybywgdGhlIGtleSBtdXN0IGFsbG93IG9wZXJhdGlvbnMgd2l0aCB0aGlzIGFsZ29yaXRobS4KKyAqCisgKiBJbiBjYXNlIG9mIGEgcGVyc2lzdGVudCBrZXksIHRoZSBmdW5jdGlvbiBsb2FkcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGtleQorICogaW50byBhIGtleSBzbG90IGlmIG5vdCBhbHJlYWR5IGRvbmUuCisgKgorICogT24gc3VjY2VzcywgdGhlIHJldHVybmVkIGtleSBzbG90IGlzIGxvY2tlZC4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mCisgKiB0aGUgY2FsbGVyIHRvIHVubG9jayB0aGUga2V5IHNsb3Qgd2hlbiBpdCBkb2VzIG5vdCBhY2Nlc3MgaXQgYW55bW9yZS4KKyAqLworc3RhdGljIHBzYV9zdGF0dXNfdCBwc2FfZ2V0X2FuZF9sb2NrX2tleV9zbG90X3dpdGhfcG9saWN5KAorICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKKyAgICBwc2Ffa2V5X3Nsb3RfdCAqKnBfc2xvdCwKKyAgICBwc2Ffa2V5X3VzYWdlX3QgdXNhZ2UsCisgICAgcHNhX2FsZ29yaXRobV90IGFsZyApCiB7Ci0gICAgcHNhX3N0YXR1c190IHN0YXR1czsKLSAgICBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCA9IE5VTEw7CisgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOworICAgIHBzYV9rZXlfc2xvdF90ICpzbG90OwogCi0gICAgKnBfc2xvdCA9IE5VTEw7Ci0KLSAgICBzdGF0dXMgPSBwc2FfZ2V0X2tleV9zbG90KCBoYW5kbGUsICZzbG90ICk7CisgICAgc3RhdHVzID0gcHNhX2dldF9hbmRfbG9ja19rZXlfc2xvdCgga2V5LCBwX3Nsb3QgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKyAgICBzbG90ID0gKnBfc2xvdDsKIAogICAgIC8qIEVuZm9yY2UgdGhhdCB1c2FnZSBwb2xpY3kgZm9yIHRoZSBrZXkgc2xvdCBjb250YWlucyBhbGwgdGhlIGZsYWdzCiAgICAgICogcmVxdWlyZWQgYnkgdGhlIHVzYWdlIHBhcmFtZXRlci4gVGhlcmUgaXMgb25lIGV4Y2VwdGlvbjogcHVibGljCkBAIC0xMTUyLDQ1ICsxMjU1LDYxIEBACiAgICAgICogaWYgdGhleSBoYWQgdGhlIGV4cG9ydCBmbGFnLiAqLwogICAgIGlmKCBQU0FfS0VZX1RZUEVfSVNfUFVCTElDX0tFWSggc2xvdC0+YXR0ci50eXBlICkgKQogICAgICAgICB1c2FnZSAmPSB+UFNBX0tFWV9VU0FHRV9FWFBPUlQ7CisKKyAgICBzdGF0dXMgPSBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRDsKICAgICBpZiggKCBzbG90LT5hdHRyLnBvbGljeS51c2FnZSAmIHVzYWdlICkgIT0gdXNhZ2UgKQotICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICk7CisgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICAvKiBFbmZvcmNlIHRoYXQgdGhlIHVzYWdlIHBvbGljeSBwZXJtaXRzIHRoZSByZXF1ZXN0ZWQgYWxnb3J0aWhtLiAqLwogICAgIGlmKCBhbGcgIT0gMCAmJiAhIHBzYV9rZXlfcG9saWN5X3Blcm1pdHMoICZzbG90LT5hdHRyLnBvbGljeSwgYWxnICkgKQotICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICk7CisgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICAqcF9zbG90ID0gc2xvdDsKICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CisKK2Vycm9yOgorICAgICpwX3Nsb3QgPSBOVUxMOworICAgIHBzYV91bmxvY2tfa2V5X3Nsb3QoIHNsb3QgKTsKKworICAgIHJldHVybiggc3RhdHVzICk7CiB9CiAKLS8qKiBSZXRyaWV2ZSBhIHNsb3Qgd2hpY2ggbXVzdCBjb250YWluIGEgdHJhbnNwYXJlbnQga2V5LgorLyoqIEdldCBhIGtleSBzbG90IGNvbnRhaW5pbmcgYSB0cmFuc3BhcmVudCBrZXkgYW5kIGxvY2sgaXQuCiAgKgogICogQSB0cmFuc3BhcmVudCBrZXkgaXMgYSBrZXkgZm9yIHdoaWNoIHRoZSBrZXkgbWF0ZXJpYWwgaXMgZGlyZWN0bHkKICAqIGF2YWlsYWJsZSwgYXMgb3Bwb3NlZCB0byBhIGtleSBpbiBhIHNlY3VyZSBlbGVtZW50LgogICoKLSAqIFRoaXMgaXMgYSB0ZW1wb3JhcnkgZnVuY3Rpb24gdG8gdXNlIGluc3RlYWQgb2YgcHNhX2dldF9rZXlfZnJvbV9zbG90KCkKLSAqIHVudGlsIHNlY3VyZSBlbGVtZW50IHN1cHBvcnQgaXMgZnVsbHkgaW1wbGVtZW50ZWQuCisgKiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGZ1bmN0aW9uIHRvIHVzZSBpbnN0ZWFkIG9mCisgKiBwc2FfZ2V0X2FuZF9sb2NrX2tleV9zbG90X3dpdGhfcG9saWN5KCkgdW50aWwgc2VjdXJlIGVsZW1lbnQgc3VwcG9ydCBpcworICogZnVsbHkgaW1wbGVtZW50ZWQuCisgKgorICogT24gc3VjY2VzcywgdGhlIHJldHVybmVkIGtleSBzbG90IGlzIGxvY2tlZC4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZQorICogY2FsbGVyIHRvIHVubG9jayB0aGUga2V5IHNsb3Qgd2hlbiBpdCBkb2VzIG5vdCBhY2Nlc3MgaXQgYW55bW9yZS4KICAqLwogI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX1NFX0MpCi1zdGF0aWMgcHNhX3N0YXR1c190IHBzYV9nZXRfdHJhbnNwYXJlbnRfa2V5KCBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfc2xvdF90ICoqcF9zbG90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV91c2FnZV90IHVzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZyApCitzdGF0aWMgcHNhX3N0YXR1c190IHBzYV9nZXRfYW5kX2xvY2tfdHJhbnNwYXJlbnRfa2V5X3Nsb3Rfd2l0aF9wb2xpY3koCisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAorICAgIHBzYV9rZXlfc2xvdF90ICoqcF9zbG90LAorICAgIHBzYV9rZXlfdXNhZ2VfdCB1c2FnZSwKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnICkKIHsKLSAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gcHNhX2dldF9rZXlfZnJvbV9zbG90KCBoYW5kbGUsIHBfc2xvdCwgdXNhZ2UsIGFsZyApOworICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBwc2FfZ2V0X2FuZF9sb2NrX2tleV9zbG90X3dpdGhfcG9saWN5KCBrZXksIHBfc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UsIGFsZyApOwogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICByZXR1cm4oIHN0YXR1cyApOworCiAgICAgaWYoIHBzYV9rZXlfc2xvdF9pc19leHRlcm5hbCggKnBfc2xvdCApICkKICAgICB7CisgICAgICAgIHBzYV91bmxvY2tfa2V5X3Nsb3QoICpwX3Nsb3QgKTsKICAgICAgICAgKnBfc2xvdCA9IE5VTEw7CiAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKICAgICB9CisKICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CiB9CiAjZWxzZSAvKiBNQkVEVExTX1BTQV9DUllQVE9fU0VfQyAqLwogLyogV2l0aCBubyBzZWN1cmUgZWxlbWVudCBzdXBwb3J0LCBhbGwga2V5cyBhcmUgdHJhbnNwYXJlbnQuICovCi0jZGVmaW5lIHBzYV9nZXRfdHJhbnNwYXJlbnRfa2V5KCBoYW5kbGUsIHBfc2xvdCwgdXNhZ2UsIGFsZyApICAgXAotICAgIHBzYV9nZXRfa2V5X2Zyb21fc2xvdCggaGFuZGxlLCBwX3Nsb3QsIHVzYWdlLCBhbGcgKQorI2RlZmluZSBwc2FfZ2V0X2FuZF9sb2NrX3RyYW5zcGFyZW50X2tleV9zbG90X3dpdGhfcG9saWN5KCBrZXksIHBfc2xvdCwgdXNhZ2UsIGFsZyApICAgXAorICAgIHBzYV9nZXRfYW5kX2xvY2tfa2V5X3Nsb3Rfd2l0aF9wb2xpY3koIGtleSwgcF9zbG90LCB1c2FnZSwgYWxnICkKICNlbmRpZiAvKiBNQkVEVExTX1BTQV9DUllQVE9fU0VfQyAqLwogCiAvKiogV2lwZSBrZXkgZGF0YSBmcm9tIGEgc2xvdC4gUHJlc2VydmUgbWV0YWRhdGEgc3VjaCBhcyB0aGUgcG9saWN5LiAqLwpAQCAtMTIyMSw2ICsxMzQwLDIyIEBACiBwc2Ffc3RhdHVzX3QgcHNhX3dpcGVfa2V5X3Nsb3QoIHBzYV9rZXlfc2xvdF90ICpzbG90ICkKIHsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gcHNhX3JlbW92ZV9rZXlfZGF0YV9mcm9tX21lbW9yeSggc2xvdCApOworCisgICAgLyoKKyAgICAgKiBBcyB0aGUgcmV0dXJuIGVycm9yIGNvZGUgbWF5IG5vdCBiZSBoYW5kbGVkIGluIGNhc2Ugb2YgbXVsdGlwbGUgZXJyb3JzLAorICAgICAqIGRvIG91ciBiZXN0IHRvIHJlcG9ydCBhbiB1bmV4cGVjdGVkIGxvY2sgY291bnRlcjogaWYgYXZhaWxhYmxlCisgICAgICogY2FsbCBNQkVEVExTX1BBUkFNX0ZBSUxFRCB0aGF0IG1heSB0ZXJtaW5hdGUgZXhlY3V0aW9uIChpZiBjYWxsZWQgYXMKKyAgICAgKiBwYXJ0IG9mIHRoZSBleGVjdXRpb24gb2YgYSB0ZXN0IHN1aXRlIHRoaXMgd2lsbCBzdG9wIHRoZSB0ZXN0IHN1aXRlCisgICAgICogZXhlY3V0aW9uKS4KKyAgICAgKi8KKyAgICBpZiggc2xvdC0+bG9ja19jb3VudCAhPSAxICkKKyAgICB7CisjaWZkZWYgTUJFRFRMU19DSEVDS19QQVJBTVMKKyAgICAgICAgTUJFRFRMU19QQVJBTV9GQUlMRUQoIHNsb3QtPmxvY2tfY291bnQgPT0gMSApOworI2VuZGlmCisgICAgICAgIHN0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOworICAgIH0KKwogICAgIC8qIE11bHRpcGFydCBvcGVyYXRpb25zIG1heSBzdGlsbCBiZSB1c2luZyB0aGUga2V5LiBUaGlzIGlzIHNhZmUKICAgICAgKiBiZWNhdXNlIGFsbCBtdWx0aXBhcnQgb3BlcmF0aW9uIG9iamVjdHMgYXJlIGluZGVwZW5kZW50IGZyb20KICAgICAgKiB0aGUga2V5IHNsb3Q6IGlmIHRoZXkgbmVlZCB0byBhY2Nlc3MgdGhlIGtleSBhZnRlciB0aGUgc2V0dXAKQEAgLTEyMzMsNyArMTM2OCw3IEBACiAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIH0KIAotcHNhX3N0YXR1c190IHBzYV9kZXN0cm95X2tleSggcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgKQorcHNhX3N0YXR1c190IHBzYV9kZXN0cm95X2tleSggbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ICkKIHsKICAgICBwc2Ffa2V5X3Nsb3RfdCAqc2xvdDsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOyAvKiBzdGF0dXMgb2YgdGhlIGxhc3Qgb3BlcmF0aW9uICovCkBAIC0xMjQyLDEzICsxMzc3LDMzIEBACiAgICAgcHNhX3NlX2Rydl90YWJsZV9lbnRyeV90ICpkcml2ZXI7CiAjZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX1NFX0MgKi8KIAotICAgIGlmKCBoYW5kbGUgPT0gMCApCisgICAgaWYoIG1iZWR0bHNfc3ZjX2tleV9pZF9pc19udWxsKCBrZXkgKSApCiAgICAgICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKIAotICAgIHN0YXR1cyA9IHBzYV9nZXRfa2V5X3Nsb3QoIGhhbmRsZSwgJnNsb3QgKTsKKyAgICAvKgorICAgICAqIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGtleSBpbiBhIGtleSBzbG90LiBJbiBjYXNlIG9mIGEgcGVyc2lzdGVudAorICAgICAqIGtleSwgdGhpcyB3aWxsIGxvYWQgdGhlIGtleSBkZXNjcmlwdGlvbiBmcm9tIHBlcnNpc3RlbnQgbWVtb3J5IGlmIG5vdAorICAgICAqIGRvbmUgeWV0LiBXZSBjYW5ub3QgYXZvaWQgdGhpcyBsb2FkaW5nIGFzIHdpdGhvdXQgaXQgd2UgZG9uJ3Qga25vdyBpZgorICAgICAqIHRoZSBrZXkgaXMgb3BlcmF0ZWQgYnkgYW4gU0Ugb3Igbm90IGFuZCB0aGlzIGluZm9ybWF0aW9uIGlzIG5lZWRlZCBieQorICAgICAqIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLgorICAgICAqLworICAgIHN0YXR1cyA9IHBzYV9nZXRfYW5kX2xvY2tfa2V5X3Nsb3QoIGtleSwgJnNsb3QgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIAorICAgIC8qCisgICAgICogSWYgdGhlIGtleSBzbG90IGNvbnRhaW5pbmcgdGhlIGtleSBkZXNjcmlwdGlvbiBpcyB1bmRlciBhY2Nlc3MgYnkgdGhlCisgICAgICogbGlicmFyeSAoYXBhcnQgZnJvbSB0aGUgcHJlc2VudCBhY2Nlc3MpLCB0aGUga2V5IGNhbm5vdCBiZSBkZXN0cm95ZWQKKyAgICAgKiB5ZXQuIEZvciB0aGUgdGltZSBiZWluZywganVzdCByZXR1cm4gaW4gZXJyb3IuIEV2ZW50dWFsbHkgKHRvIGJlCisgICAgICogaW1wbGVtZW50ZWQpLCB0aGUga2V5IHNob3VsZCBiZSBkZXN0cm95ZWQgd2hlbiBhbGwgYWNjZXNzZXMgaGF2ZQorICAgICAqIHN0b3BwZWQuCisgICAgICovCisgICAgaWYoIHNsb3QtPmxvY2tfY291bnQgPiAxICkKKyAgICB7CisgICAgICAgcHNhX3VubG9ja19rZXlfc2xvdCggc2xvdCApOworICAgICAgIHJldHVybiggUFNBX0VSUk9SX0dFTkVSSUNfRVJST1IgKTsKKyAgICB9CisKICNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19TRV9DKQogICAgIGRyaXZlciA9IHBzYV9nZXRfc2VfZHJpdmVyX2VudHJ5KCBzbG90LT5hdHRyLmxpZmV0aW1lICk7CiAgICAgaWYoIGRyaXZlciAhPSBOVUxMICkKQEAgLTEyODQsNyArMTQzOSw3IEBACiAjZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX1NFX0MgKi8KIAogI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQykKLSAgICBpZiggc2xvdC0+YXR0ci5saWZldGltZSAhPSBQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFICkKKyAgICBpZiggISBQU0FfS0VZX0xJRkVUSU1FX0lTX1ZPTEFUSUxFKCBzbG90LT5hdHRyLmxpZmV0aW1lICkgKQogICAgIHsKICAgICAgICAgc3RhdHVzID0gcHNhX2Rlc3Ryb3lfcGVyc2lzdGVudF9rZXkoIHNsb3QtPmF0dHIuaWQgKTsKICAgICAgICAgaWYoIG92ZXJhbGxfc3RhdHVzID09IFBTQV9TVUNDRVNTICkKQEAgLTEzNjgsNyArMTUyMyw4IEBACiAgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOwogfQogCi0jaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9SU0FfS0VZX1BBSVIpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVkpCiBzdGF0aWMgcHNhX3N0YXR1c190IHBzYV9nZXRfcnNhX3B1YmxpY19leHBvbmVudCgKICAgICBjb25zdCBtYmVkdGxzX3JzYV9jb250ZXh0ICpyc2EsCiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMgKQpAQCAtMTQwOCwxOSArMTU2NCwyMSBAQAogICAgICAgICBtYmVkdGxzX2ZyZWUoIGJ1ZmZlciApOwogICAgIHJldHVybiggbWJlZHRsc190b19wc2FfZXJyb3IoIHJldCApICk7CiB9Ci0jZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9SU0FfS0VZX1BBSVIpIHx8CisgICAgICAgICogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZKSAqLwogCiAvKiogUmV0cmlldmUgYWxsIHRoZSBwdWJsaWNseS1hY2Nlc3NpYmxlIGF0dHJpYnV0ZXMgb2YgYSBrZXkuCiAgKi8KLXBzYV9zdGF0dXNfdCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKK3BzYV9zdGF0dXNfdCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMgKQogeworICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRDsKKyAgICBwc2Ffc3RhdHVzX3QgdW5sb2NrX3N0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOwogICAgIHBzYV9rZXlfc2xvdF90ICpzbG90OwotICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAKICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoIGF0dHJpYnV0ZXMgKTsKIAotICAgIHN0YXR1cyA9IHBzYV9nZXRfa2V5X2Zyb21fc2xvdCggaGFuZGxlLCAmc2xvdCwgMCwgMCApOworICAgIHN0YXR1cyA9IHBzYV9nZXRfYW5kX2xvY2tfa2V5X3Nsb3Rfd2l0aF9wb2xpY3koIGtleSwgJnNsb3QsIDAsIDAgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIApAQCAtMTQzNSw3ICsxNTkzLDggQEAKIAogICAgIHN3aXRjaCggc2xvdC0+YXR0ci50eXBlICkKICAgICB7Ci0jaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9SU0FfS0VZX1BBSVIpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVkpCiAgICAgICAgIGNhc2UgUFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUjoKICAgICAgICAgY2FzZSBQU0FfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVk6CiAjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fU0VfQykKQEAgLTE0NjIsNyArMTYyMSw4IEBACiAgICAgICAgICAgICAgICAgbWJlZHRsc19mcmVlKCByc2EgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfUlNBX0tFWV9QQUlSKSB8fAorICAgICAgICAqIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSkgKi8KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8qIE5vdGhpbmcgZWxzZSB0byBkby4gKi8KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTQ3MCw3ICsxNjMwLDEwIEBACiAKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCBhdHRyaWJ1dGVzICk7Ci0gICAgcmV0dXJuKCBzdGF0dXMgKTsKKworICAgIHVubG9ja19zdGF0dXMgPSBwc2FfdW5sb2NrX2tleV9zbG90KCBzbG90ICk7CisKKyAgICByZXR1cm4oICggc3RhdHVzID09IFBTQV9TVUNDRVNTICkgPyB1bmxvY2tfc3RhdHVzIDogc3RhdHVzICk7CiB9CiAKICNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19TRV9DKQpAQCAtMTU1OCwxMyArMTcyMSwyNCBAQAogICAgICAgICAgICAgLyogRXhwb3J0aW5nIHByaXZhdGUgLT4gcHJpdmF0ZSAqLwogICAgICAgICAgICAgcmV0dXJuKCBwc2FfaW50ZXJuYWxfZXhwb3J0X2tleV9idWZmZXIoIHNsb3QsIGRhdGEsIGRhdGFfc2l6ZSwgZGF0YV9sZW5ndGggKSApOwogICAgICAgICB9CisKICAgICAgICAgLyogTmVlZCB0byBleHBvcnQgdGhlIHB1YmxpYyBwYXJ0IG9mIGEgcHJpdmF0ZSBrZXksCi0gICAgICAgICAqIHNvIGNvbnZlcnNpb24gaXMgbmVlZGVkICovCisgICAgICAgICAqIHNvIGNvbnZlcnNpb24gaXMgbmVlZGVkLiBUcnkgdGhlIGFjY2VsZXJhdG9ycyBmaXJzdC4gKi8KKyAgICAgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IHBzYV9kcml2ZXJfd3JhcHBlcl9leHBvcnRfcHVibGljX2tleSggc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2xlbmd0aCApOworCisgICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgfHwKKyAgICAgICAgICAgIHBzYV9rZXlfbGlmZXRpbWVfaXNfZXh0ZXJuYWwoIHNsb3QtPmF0dHIubGlmZXRpbWUgKSApCisgICAgICAgICAgICByZXR1cm4oIHN0YXR1cyApOworCiAgICAgICAgIGlmKCBQU0FfS0VZX1RZUEVfSVNfUlNBKCBzbG90LT5hdHRyLnR5cGUgKSApCiAgICAgICAgIHsKLSNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX1JTQV9LRVlfUEFJUikgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSkKICAgICAgICAgICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgKnJzYSA9IE5VTEw7Ci0gICAgICAgICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gcHNhX2xvYWRfcnNhX3JlcHJlc2VudGF0aW9uKAorICAgICAgICAgICAgc3RhdHVzID0gcHNhX2xvYWRfcnNhX3JlcHJlc2VudGF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+YXR0ci50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzLApAQCAtMTU4NSwxMyArMTc1OSwxNSBAQAogI2Vsc2UKICAgICAgICAgICAgIC8qIFdlIGRvbid0IGtub3cgaG93IHRvIGNvbnZlcnQgYSBwcml2YXRlIFJTQSBrZXkgdG8gcHVibGljLiAqLwogICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOwotI2VuZGlmCisjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX1JTQV9LRVlfUEFJUikgfHwKKyAgICAgICAgKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVkpICovCiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0jaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVkpCiAgICAgICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyICplY3AgPSBOVUxMOwotICAgICAgICAgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IHBzYV9sb2FkX2VjcF9yZXByZXNlbnRhdGlvbigKKyAgICAgICAgICAgIHN0YXR1cyA9IHBzYV9sb2FkX2VjcF9yZXByZXNlbnRhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmF0dHIudHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5kYXRhLmtleS5ieXRlcywKQEAgLTE2MTMsNyArMTc4OSw4IEBACiAjZWxzZQogICAgICAgICAgICAgLyogV2UgZG9uJ3Qga25vdyBob3cgdG8gY29udmVydCBhIHByaXZhdGUgRUNDIGtleSB0byBwdWJsaWMgKi8KICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKLSNlbmRpZgorI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIpIHx8CisgICAgICAgICogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKSAqLwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKQEAgLTE2MjUsMTMgKzE4MDIsMTQgQEAKICAgICB9CiB9CiAKLXBzYV9zdGF0dXNfdCBwc2FfZXhwb3J0X2tleSggcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCitwc2Ffc3RhdHVzX3QgcHNhX2V4cG9ydF9rZXkoIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpkYXRhX2xlbmd0aCApCiB7CisgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOworICAgIHBzYV9zdGF0dXNfdCB1bmxvY2tfc3RhdHVzID0gUFNBX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQ7CiAgICAgcHNhX2tleV9zbG90X3QgKnNsb3Q7Ci0gICAgcHNhX3N0YXR1c190IHN0YXR1czsKIAogICAgIC8qIFNldCB0aGUga2V5IHRvIGVtcHR5IG5vdywgc28gdGhhdCBldmVuIHdoZW4gdGhlcmUgYXJlIGVycm9ycywgd2UgYWx3YXlzCiAgICAgICogc2V0IGRhdGFfbGVuZ3RoIHRvIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCBkYXRhX3NpemUuIE9uIGVycm9yLCBzZXR0aW5nCkBAIC0xNjQwLDIyICsxODE4LDI4IEBACiAgICAgKmRhdGFfbGVuZ3RoID0gMDsKIAogICAgIC8qIEV4cG9ydCByZXF1aXJlcyB0aGUgRVhQT1JUIGZsYWcuIFRoZXJlIGlzIGFuIGV4Y2VwdGlvbiBmb3IgcHVibGljIGtleXMsCi0gICAgICogd2hpY2ggZG9uJ3QgcmVxdWlyZSBhbnkgZmxhZywgYnV0IHBzYV9nZXRfa2V5X2Zyb21fc2xvdCB0YWtlcwotICAgICAqIGNhcmUgb2YgdGhpcy4gKi8KLSAgICBzdGF0dXMgPSBwc2FfZ2V0X2tleV9mcm9tX3Nsb3QoIGhhbmRsZSwgJnNsb3QsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCAwICk7CisgICAgICogd2hpY2ggZG9uJ3QgcmVxdWlyZSBhbnkgZmxhZywgYnV0CisgICAgICogcHNhX2dldF9hbmRfbG9ja19rZXlfc2xvdF93aXRoX3BvbGljeSgpIHRha2VzIGNhcmUgb2YgdGhpcy4KKyAgICAgKi8KKyAgICBzdGF0dXMgPSBwc2FfZ2V0X2FuZF9sb2NrX2tleV9zbG90X3dpdGhfcG9saWN5KCBrZXksICZzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9LRVlfVVNBR0VfRVhQT1JULCAwICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIHJldHVybiggc3RhdHVzICk7Ci0gICAgcmV0dXJuKCBwc2FfaW50ZXJuYWxfZXhwb3J0X2tleSggc2xvdCwgZGF0YSwgZGF0YV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbGVuZ3RoLCAwICkgKTsKKworICAgIHN0YXR1cyA9IHBzYV9pbnRlcm5hbF9leHBvcnRfa2V5KCBzbG90LCBkYXRhLCBkYXRhX3NpemUsIGRhdGFfbGVuZ3RoLCAwICk7CisgICAgdW5sb2NrX3N0YXR1cyA9IHBzYV91bmxvY2tfa2V5X3Nsb3QoIHNsb3QgKTsKKworICAgIHJldHVybiggKCBzdGF0dXMgPT0gUFNBX1NVQ0NFU1MgKSA/IHVubG9ja19zdGF0dXMgOiBzdGF0dXMgKTsKIH0KIAotcHNhX3N0YXR1c190IHBzYV9leHBvcnRfcHVibGljX2tleSggcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCitwc2Ffc3RhdHVzX3QgcHNhX2V4cG9ydF9wdWJsaWNfa2V5KCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZGF0YV9sZW5ndGggKQogeworICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRDsKKyAgICBwc2Ffc3RhdHVzX3QgdW5sb2NrX3N0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOwogICAgIHBzYV9rZXlfc2xvdF90ICpzbG90OwotICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAKICAgICAvKiBTZXQgdGhlIGtleSB0byBlbXB0eSBub3csIHNvIHRoYXQgZXZlbiB3aGVuIHRoZXJlIGFyZSBlcnJvcnMsIHdlIGFsd2F5cwogICAgICAqIHNldCBkYXRhX2xlbmd0aCB0byBhIHZhbHVlIGJldHdlZW4gMCBhbmQgZGF0YV9zaXplLiBPbiBlcnJvciwgc2V0dGluZwpAQCAtMTY2NCwxMSArMTg0OCwxNCBAQAogICAgICpkYXRhX2xlbmd0aCA9IDA7CiAKICAgICAvKiBFeHBvcnRpbmcgYSBwdWJsaWMga2V5IGRvZXNuJ3QgcmVxdWlyZSBhIHVzYWdlIGZsYWcuICovCi0gICAgc3RhdHVzID0gcHNhX2dldF9rZXlfZnJvbV9zbG90KCBoYW5kbGUsICZzbG90LCAwLCAwICk7CisgICAgc3RhdHVzID0gcHNhX2dldF9hbmRfbG9ja19rZXlfc2xvdF93aXRoX3BvbGljeSgga2V5LCAmc2xvdCwgMCwgMCApOwogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICByZXR1cm4oIHN0YXR1cyApOwotICAgIHJldHVybiggcHNhX2ludGVybmFsX2V4cG9ydF9rZXkoIHNsb3QsIGRhdGEsIGRhdGFfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2xlbmd0aCwgMSApICk7CisKKyAgICBzdGF0dXMgPSBwc2FfaW50ZXJuYWxfZXhwb3J0X2tleSggc2xvdCwgZGF0YSwgZGF0YV9zaXplLCBkYXRhX2xlbmd0aCwgMSApOworICAgIHVubG9ja19zdGF0dXMgPSBwc2FfdW5sb2NrX2tleV9zbG90KCBzbG90ICk7CisKKyAgICByZXR1cm4oICggc3RhdHVzID09IFBTQV9TVUNDRVNTICkgPyB1bmxvY2tfc3RhdHVzIDogc3RhdHVzICk7CiB9CiAKICNpZiBkZWZpbmVkKHN0YXRpY19hc3NlcnQpCkBAIC0xNzE4LDE3ICsxOTA1LDI5IEBACiAgICAgcHNhX3NlX2Rydl90YWJsZV9lbnRyeV90ICoqcF9kcnYgKQogewogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVDsKKyAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUgPSBwc2FfZ2V0X2tleV9saWZldGltZSggYXR0cmlidXRlcyApOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IHBzYV9nZXRfa2V5X2lkKCBhdHRyaWJ1dGVzICk7CiAKLSAgICBzdGF0dXMgPSBwc2FfdmFsaWRhdGVfa2V5X2xvY2F0aW9uKCBwc2FfZ2V0X2tleV9saWZldGltZSggYXR0cmlidXRlcyApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfZHJ2ICk7CisgICAgc3RhdHVzID0gcHNhX3ZhbGlkYXRlX2tleV9sb2NhdGlvbiggbGlmZXRpbWUsIHBfZHJ2ICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIHJldHVybiggc3RhdHVzICk7CiAKLSAgICBzdGF0dXMgPSBwc2FfdmFsaWRhdGVfa2V5X3BlcnNpc3RlbmNlKCBwc2FfZ2V0X2tleV9saWZldGltZSggYXR0cmlidXRlcyApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2lkKCBhdHRyaWJ1dGVzICkgKTsKKyAgICBzdGF0dXMgPSBwc2FfdmFsaWRhdGVfa2V5X3BlcnNpc3RlbmNlKCBsaWZldGltZSApOwogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICByZXR1cm4oIHN0YXR1cyApOwogCisgICAgaWYgKCBQU0FfS0VZX0xJRkVUSU1FX0lTX1ZPTEFUSUxFKCBsaWZldGltZSApICkKKyAgICB7CisgICAgICAgIGlmKCBNQkVEVExTX1NWQ19LRVlfSURfR0VUX0tFWV9JRCgga2V5ICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IHBzYV92YWxpZGF0ZV9rZXlfaWQoIHBzYV9nZXRfa2V5X2lkKCBhdHRyaWJ1dGVzICksIDAgKTsKKyAgICAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCisgICAgICAgICAgICByZXR1cm4oIHN0YXR1cyApOworICAgIH0KKwogICAgIHN0YXR1cyA9IHBzYV92YWxpZGF0ZV9rZXlfcG9saWN5KCAmYXR0cmlidXRlcy0+Y29yZS5wb2xpY3kgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKQEAgLTE3NTYsMTUgKzE5NTUsMTggQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgZm9sbG93czoKICAqIC0jIENhbGwgcHNhX3N0YXJ0X2tleV9jcmVhdGlvbigpIHRvIGFsbG9jYXRlIGEga2V5IHNsb3QsIHByZXBhcmUKLSAqICAgIGl0IHdpdGggdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGVzLCBhbmQgYXNzaWduIGl0IGEgaGFuZGxlLgorICogICAgaXQgd2l0aCB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZXMsIGFuZCBpbiBjYXNlIG9mIGEgdm9sYXRpbGUga2V5IGFzc2lnbiBpdAorICogICAgYSB2b2xhdGlsZSBrZXkgaWRlbnRpZmllci4KICAqIC0jIFBvcHVsYXRlIHRoZSBzbG90IHdpdGggdGhlIGtleSBtYXRlcmlhbC4KICAqIC0jIENhbGwgcHNhX2ZpbmlzaF9rZXlfY3JlYXRpb24oKSB0byBmaW5hbGl6ZSB0aGUgY3JlYXRpb24gb2YgdGhlIHNsb3QuCiAgKiBJbiBjYXNlIG9mIGZhaWx1cmUgYXQgYW55IHN0ZXAsIHN0b3AgdGhlIHNlcXVlbmNlIGFuZCBjYWxsCiAgKiBwc2FfZmFpbF9rZXlfY3JlYXRpb24oKS4KICAqCisgKiBPbiBzdWNjZXNzLCB0aGUga2V5IHNsb3QgaXMgbG9ja2VkLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlcgorICogdG8gdW5sb2NrIHRoZSBrZXkgc2xvdCB3aGVuIGl0IGRvZXMgbm90IGFjY2VzcyBpdCBhbnltb3JlLgorICoKICAqIFxwYXJhbSBtZXRob2QgICAgICAgICAgICBBbiBpZGVudGlmaWNhdGlvbiBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbi4KICAqIFxwYXJhbVtpbl0gYXR0cmlidXRlcyAgICBLZXkgYXR0cmlidXRlcyBmb3IgdGhlIG5ldyBrZXkuCi0gKiBccGFyYW1bb3V0XSBoYW5kbGUgICAgICAgT24gc3VjY2VzcywgYSBoYW5kbGUgZm9yIHRoZSBhbGxvY2F0ZWQgc2xvdC4KICAqIFxwYXJhbVtvdXRdIHBfc2xvdCAgICAgICBPbiBzdWNjZXNzLCBhIHBvaW50ZXIgdG8gdGhlIHByZXBhcmVkIHNsb3QuCiAgKiBccGFyYW1bb3V0XSBwX2RydiAgICAgICAgT24gYW55IHJldHVybiwgdGhlIGRyaXZlciBmb3IgdGhlIGtleSwgaWYgYW55LgogICogICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgZm9yIGEgdHJhbnNwYXJlbnQga2V5LgpAQCAtMTc3NywxMSArMTk3OSwxMSBAQAogc3RhdGljIHBzYV9zdGF0dXNfdCBwc2Ffc3RhcnRfa2V5X2NyZWF0aW9uKAogICAgIHBzYV9rZXlfY3JlYXRpb25fbWV0aG9kX3QgbWV0aG9kLAogICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAotICAgIHBzYV9rZXlfaGFuZGxlX3QgKmhhbmRsZSwKICAgICBwc2Ffa2V5X3Nsb3RfdCAqKnBfc2xvdCwKICAgICBwc2Ffc2VfZHJ2X3RhYmxlX2VudHJ5X3QgKipwX2RydiApCiB7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1czsKKyAgICBwc2Ffa2V5X2lkX3Qgdm9sYXRpbGVfa2V5X2lkOwogICAgIHBzYV9rZXlfc2xvdF90ICpzbG90OwogCiAgICAgKHZvaWQpIG1ldGhvZDsKQEAgLTE3OTEsNyArMTk5Myw3IEBACiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIHJldHVybiggc3RhdHVzICk7CiAKLSAgICBzdGF0dXMgPSBwc2FfZ2V0X2VtcHR5X2tleV9zbG90KCBoYW5kbGUsIHBfc2xvdCApOworICAgIHN0YXR1cyA9IHBzYV9nZXRfZW1wdHlfa2V5X3Nsb3QoICZ2b2xhdGlsZV9rZXlfaWQsIHBfc2xvdCApOwogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICByZXR1cm4oIHN0YXR1cyApOwogICAgIHNsb3QgPSAqcF9zbG90OwpAQCAtMTgwMCw5ICsyMDAyLDE5IEBACiAgICAgICogY3JlYXRpb24gbWVjaGFuaXNtIHRvIHZlcmlmeSB0aGF0IHRoaXMgaW5mb3JtYXRpb24gaXMgY29ycmVjdC4KICAgICAgKiBJdCdzIGF1dG9tYXRpY2FsbHkgY29ycmVjdCBmb3IgbWVjaGFuaXNtcyB0aGF0IHVzZSB0aGUgYml0LXNpemUgYXMKICAgICAgKiBhbiBpbnB1dCAoZ2VuZXJhdGUsIGRldmljZSkgYnV0IG5vdCBmb3IgdGhvc2Ugd2hlcmUgdGhlIGJpdC1zaXplCi0gICAgICogaXMgb3B0aW9uYWwgKGltcG9ydCwgY29weSkuICovCisgICAgICogaXMgb3B0aW9uYWwgKGltcG9ydCwgY29weSkuIEluIGNhc2Ugb2YgYSB2b2xhdGlsZSBrZXksIGFzc2lnbiBpdCB0aGUKKyAgICAgKiB2b2xhdGlsZSBrZXkgaWRlbnRpZmllciBhc3NvY2lhdGVkIHRvIHRoZSBzbG90IHJldHVybmVkIHRvIGNvbnRhaW4gaXRzCisgICAgICogZGVmaW5pdGlvbi4gKi8KIAogICAgIHNsb3QtPmF0dHIgPSBhdHRyaWJ1dGVzLT5jb3JlOworICAgIGlmKCBQU0FfS0VZX0xJRkVUSU1FX0lTX1ZPTEFUSUxFKCBzbG90LT5hdHRyLmxpZmV0aW1lICkgKQorICAgIHsKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIpCisgICAgICAgIHNsb3QtPmF0dHIuaWQgPSB2b2xhdGlsZV9rZXlfaWQ7CisjZWxzZQorICAgICAgICBzbG90LT5hdHRyLmlkLmtleV9pZCA9IHZvbGF0aWxlX2tleV9pZDsKKyNlbmRpZgorICAgIH0KIAogICAgIC8qIEVyYXNlIGV4dGVybmFsLW9ubHkgZmxhZ3MgZnJvbSB0aGUgaW50ZXJuYWwgY29weS4gVG8gYWNjZXNzCiAgICAgICogZXh0ZXJuYWwtb25seSBmbGFncywgcXVlcnkgYGF0dHJpYnV0ZXNgLiBUaGFua3MgdG8gdGhlIGNoZWNrCkBAIC0xODU4LDcgKzIwNzAsNyBAQAogICAgIH0KICNlbmRpZiAvKiBNQkVEVExTX1BTQV9DUllQVE9fU0VfQyAqLwogCi0gICAgcmV0dXJuKCBzdGF0dXMgKTsKKyAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CiB9CiAKIC8qKiBGaW5hbGl6ZSB0aGUgY3JlYXRpb24gb2YgYSBrZXkgb25jZSBpdHMga2V5IG1hdGVyaWFsIGhhcyBiZWVuIHNldC4KQEAgLTE4NjksMTggKzIwODEsMjUgQEAKICAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiBwc2Ffc3RhcnRfa2V5X2NyZWF0aW9uKCkgZm9yIHRoZSBpbnRlbmRlZCB1c2UKICAqIG9mIHRoaXMgZnVuY3Rpb24uCiAgKgorICogSWYgdGhlIGZpbmFsaXphdGlvbiBzdWNjZWVkcywgdGhlIGZ1bmN0aW9uIHVubG9ja3MgdGhlIGtleSBzbG90IChpdCB3YXMKKyAqIGxvY2tlZCBieSBwc2Ffc3RhcnRfa2V5X2NyZWF0aW9uKCkpIGFuZCB0aGUga2V5IHNsb3QgY2Fubm90IGJlIGFjY2Vzc2VkCisgKiBhbnltb3JlIGFzIHBhcnQgb2YgdGhlIGtleSBjcmVhdGlvbiBwcm9jZXNzLgorICoKICAqIFxwYXJhbVtpbixvdXRdIHNsb3QgIFBvaW50ZXIgdG8gdGhlIHNsb3Qgd2l0aCBrZXkgbWF0ZXJpYWwuCiAgKiBccGFyYW1baW5dIGRyaXZlciAgICBUaGUgc2VjdXJlIGVsZW1lbnQgZHJpdmVyIGZvciB0aGUga2V5LAogICogICAgICAgICAgICAgICAgICAgICAgb3IgTlVMTCBmb3IgYSB0cmFuc3BhcmVudCBrZXkuCisgKiBccGFyYW1bb3V0XSBrZXkgICAgICBPbiBzdWNjZXNzLCBpZGVudGlmaWVyIG9mIHRoZSBrZXkuIE5vdGUgdGhhdCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGtleSBpZGVudGlmaWVyIGlzIGFsc28gc3RvcmVkIGluIHRoZSBrZXkgc2xvdC4KICAqCiAgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwotICogICAgICAgICBUaGUga2V5IHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZC4gVGhlIGhhbmRsZSBpcyBub3cgdmFsaWQuCisgKiAgICAgICAgIFRoZSBrZXkgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLgogICogXHJldHVybiBJZiB0aGlzIGZ1bmN0aW9uIGZhaWxzLCB0aGUga2V5IHNsb3QgaXMgYW4gaW52YWxpZCBzdGF0ZS4KICAqICAgICAgICAgWW91IG11c3QgY2FsbCBwc2FfZmFpbF9rZXlfY3JlYXRpb24oKSB0byB3aXBlIGFuZCBmcmVlIHRoZSBzbG90LgogICovCiBzdGF0aWMgcHNhX3N0YXR1c190IHBzYV9maW5pc2hfa2V5X2NyZWF0aW9uKAogICAgIHBzYV9rZXlfc2xvdF90ICpzbG90LAotICAgIHBzYV9zZV9kcnZfdGFibGVfZW50cnlfdCAqZHJpdmVyICkKKyAgICBwc2Ffc2VfZHJ2X3RhYmxlX2VudHJ5X3QgKmRyaXZlciwKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCAqa2V5KQogewogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfU1VDQ0VTUzsKICAgICAodm9pZCkgc2xvdDsKQEAgLTE4OTcsMTMgKzIxMTYsOSBAQAogICAgICAgICAgICAgc3RhdGljX2Fzc2VydCggc2l6ZW9mKCBzbG90LT5kYXRhLnNlLnNsb3RfbnVtYmVyICkgPT0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiggZGF0YS5zbG90X251bWJlciApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNsb3QgbnVtYmVyIHNpemUgZG9lcyBub3QgbWF0Y2ggcHNhX3NlX2tleV9kYXRhX3N0b3JhZ2VfdCIgKTsKLSAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoIHNpemVvZiggc2xvdC0+YXR0ci5iaXRzICkgPT0gc2l6ZW9mKCBkYXRhLmJpdHMgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJCaXQtc2l6ZSBzaXplIGRvZXMgbm90IG1hdGNoIHBzYV9zZV9rZXlfZGF0YV9zdG9yYWdlX3QiICk7CiAjZW5kaWYKICAgICAgICAgICAgIG1lbWNweSggJmRhdGEuc2xvdF9udW1iZXIsICZzbG90LT5kYXRhLnNlLnNsb3RfbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICBzaXplb2YoIHNsb3QtPmRhdGEuc2Uuc2xvdF9udW1iZXIgKSApOwotICAgICAgICAgICAgbWVtY3B5KCAmZGF0YS5iaXRzLCAmc2xvdC0+YXR0ci5iaXRzLAotICAgICAgICAgICAgICAgICAgICBzaXplb2YoIHNsb3QtPmF0dHIuYml0cyApICk7CiAgICAgICAgICAgICBzdGF0dXMgPSBwc2Ffc2F2ZV9wZXJzaXN0ZW50X2tleSggJnNsb3QtPmF0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QqKSAmZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIGRhdGEgKSApOwpAQCAtMTkxMSwyMiArMjEyNiwxMSBAQAogICAgICAgICBlbHNlCiAjZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX1NFX0MgKi8KICAgICAgICAgewotICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcl9zaXplID0KLSAgICAgICAgICAgICAgICBQU0FfS0VZX0VYUE9SVF9NQVhfU0laRSggc2xvdC0+YXR0ci50eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5hdHRyLmJpdHMgKTsKLSAgICAgICAgICAgIHVpbnQ4X3QgKmJ1ZmZlciA9IG1iZWR0bHNfY2FsbG9jKCAxLCBidWZmZXJfc2l6ZSApOwotICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IDA7Ci0gICAgICAgICAgICBpZiggYnVmZmVyID09IE5VTEwgKQotICAgICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlkgKTsKLSAgICAgICAgICAgIHN0YXR1cyA9IHBzYV9pbnRlcm5hbF9leHBvcnRfa2V5KCBzbG90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCApOwotICAgICAgICAgICAgaWYoIHN0YXR1cyA9PSBQU0FfU1VDQ0VTUyApCi0gICAgICAgICAgICAgICAgc3RhdHVzID0gcHNhX3NhdmVfcGVyc2lzdGVudF9rZXkoICZzbG90LT5hdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCApOwotCi0gICAgICAgICAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoIGJ1ZmZlciwgYnVmZmVyX3NpemUgKTsKLSAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggYnVmZmVyICk7CisgICAgICAgICAgICAvKiBLZXkgbWF0ZXJpYWwgaXMgc2F2ZWQgaW4gZXhwb3J0IHJlcHJlc2VudGF0aW9uIGluIHRoZSBzbG90LCBzbworICAgICAgICAgICAgICoganVzdCBwYXNzIHRoZSBzbG90IGJ1ZmZlciBmb3Igc3RvcmFnZS4gKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHBzYV9zYXZlX3BlcnNpc3RlbnRfa2V5KCAmc2xvdC0+YXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5kYXRhLmtleS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzICk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fU1RPUkFHRV9DKSAqLwpAQCAtMTk0NywxMSArMjE1MSwxNyBAQAogICAgICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKICAgICAgICAgfQogICAgICAgICBzdGF0dXMgPSBwc2FfY3J5cHRvX3N0b3BfdHJhbnNhY3Rpb24oICk7Ci0gICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQotICAgICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKICAgICB9CiAjZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX1NFX0MgKi8KIAorICAgIGlmKCBzdGF0dXMgPT0gUFNBX1NVQ0NFU1MgKQorICAgIHsKKyAgICAgICAgKmtleSA9IHNsb3QtPmF0dHIuaWQ7CisgICAgICAgIHN0YXR1cyA9IHBzYV91bmxvY2tfa2V5X3Nsb3QoIHNsb3QgKTsKKyAgICAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCisgICAgICAgICAgICAqa2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CisgICAgfQorCiAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIH0KIApAQCAtMjAxNiw3ICsyMjI2LDggQEAKIAogICAgIGlmKCBhdHRyaWJ1dGVzLT5kb21haW5fcGFyYW1ldGVyc19zaXplICE9IDAgKQogICAgIHsKLSNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX1JTQV9LRVlfUEFJUikgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSkKICAgICAgICAgaWYoIFBTQV9LRVlfVFlQRV9JU19SU0EoIHNsb3QtPmF0dHIudHlwZSApICkKICAgICAgICAgewogICAgICAgICAgICAgbWJlZHRsc19yc2FfY29udGV4dCAqcnNhID0gTlVMTDsKQEAgLTIwNTMsNyArMjI2NCw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuKCBtYmVkdGxzX3RvX3BzYV9lcnJvciggcmV0ICkgKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCi0jZW5kaWYKKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfUlNBX0tFWV9QQUlSKSB8fAorICAgICAgICAqIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSkgKi8KICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCApOwogICAgICAgICB9CkBAIC0yMDcxLDEyICsyMjgzLDE0IEBACiBwc2Ffc3RhdHVzX3QgcHNhX2ltcG9ydF9rZXkoIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YV9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgKmhhbmRsZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90ICprZXkgKQogewogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAgICAgcHNhX2tleV9zbG90X3QgKnNsb3QgPSBOVUxMOwogICAgIHBzYV9zZV9kcnZfdGFibGVfZW50cnlfdCAqZHJpdmVyID0gTlVMTDsKIAorICAgICprZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKKwogICAgIC8qIFJlamVjdCB6ZXJvLWxlbmd0aCBzeW1tZXRyaWMga2V5cyAoaW5jbHVkaW5nIHJhdyBkYXRhIGtleSBvYmplY3RzKS4KICAgICAgKiBUaGlzIGFsc28gcmVqZWN0cyBhbnkga2V5IHdoaWNoIG1pZ2h0IGJlIGVuY29kZWQgYXMgYW4gZW1wdHkgc3RyaW5nLAogICAgICAqIHdoaWNoIGlzIG5ldmVyIHZhbGlkLiAqLwpAQCAtMjA4NCw3ICsyMjk4LDcgQEAKICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCApOwogCiAgICAgc3RhdHVzID0gcHNhX3N0YXJ0X2tleV9jcmVhdGlvbiggUFNBX0tFWV9DUkVBVElPTl9JTVBPUlQsIGF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCAmc2xvdCwgJmRyaXZlciApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzbG90LCAmZHJpdmVyICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIGdvdG8gZXhpdDsKIApAQCAtMjEyNSwxMyArMjMzOSwxMSBAQAogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICBnb3RvIGV4aXQ7CiAKLSAgICBzdGF0dXMgPSBwc2FfZmluaXNoX2tleV9jcmVhdGlvbiggc2xvdCwgZHJpdmVyICk7CisgICAgc3RhdHVzID0gcHNhX2ZpbmlzaF9rZXlfY3JlYXRpb24oIHNsb3QsIGRyaXZlciwga2V5ICk7CiBleGl0OgogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQotICAgIHsKICAgICAgICAgcHNhX2ZhaWxfa2V5X2NyZWF0aW9uKCBzbG90LCBkcml2ZXIgKTsKLSAgICAgICAgKmhhbmRsZSA9IDA7Ci0gICAgfQorCiAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIH0KIApAQCAtMjE0Miw3ICsyMzU0LDcgQEAKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwogICAgIHBzYV9rZXlfc2xvdF90ICpzbG90ID0gTlVMTDsKICAgICBwc2Ffc2VfZHJ2X3RhYmxlX2VudHJ5X3QgKmRyaXZlciA9IE5VTEw7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogCiAgICAgLyogTGVhdmluZyBhdHRyaWJ1dGVzIHVuc3BlY2lmaWVkIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgogICAgICAqIEl0IGNvdWxkIG1ha2Ugc2Vuc2UgdG8gcXVlcnkgdGhlIGtleSB0eXBlIGFuZCBzaXplIGZyb20gdGhlCkBAIC0yMTU0LDE5ICsyMzY2LDE4IEBACiAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKIAogICAgIHN0YXR1cyA9IHBzYV9zdGFydF9rZXlfY3JlYXRpb24oIFBTQV9LRVlfQ1JFQVRJT05fUkVHSVNURVIsIGF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJnNsb3QsICZkcml2ZXIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2xvdCwgJmRyaXZlciApOwogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICBnb3RvIGV4aXQ7CiAKLSAgICBzdGF0dXMgPSBwc2FfZmluaXNoX2tleV9jcmVhdGlvbiggc2xvdCwgZHJpdmVyICk7CisgICAgc3RhdHVzID0gcHNhX2ZpbmlzaF9rZXlfY3JlYXRpb24oIHNsb3QsIGRyaXZlciwgJmtleSApOwogCiBleGl0OgogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQotICAgIHsKICAgICAgICAgcHNhX2ZhaWxfa2V5X2NyZWF0aW9uKCBzbG90LCBkcml2ZXIgKTsKLSAgICB9CisKICAgICAvKiBSZWdpc3RyYXRpb24gZG9lc24ndCBrZWVwIHRoZSBrZXkgaW4gUkFNLiAqLwotICAgIHBzYV9jbG9zZV9rZXkoIGhhbmRsZSApOworICAgIHBzYV9jbG9zZV9rZXkoIGtleSApOwogICAgIHJldHVybiggc3RhdHVzICk7CiB9CiAjZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX1NFX0MgKi8KQEAgLTIxNzQsNDAgKzIzODUsMzMgQEAKIHN0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX2NvcHlfa2V5X21hdGVyaWFsKCBjb25zdCBwc2Ffa2V5X3Nsb3RfdCAqc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfc2xvdF90ICp0YXJnZXQgKQogewotICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7Ci0gICAgdWludDhfdCAqYnVmZmVyID0gTlVMTDsKLSAgICBzaXplX3QgYnVmZmVyX3NpemUgPSAwOwotICAgIHNpemVfdCBsZW5ndGg7Ci0KLSAgICBidWZmZXJfc2l6ZSA9IFBTQV9LRVlfRVhQT1JUX01BWF9TSVpFKCBzb3VyY2UtPmF0dHIudHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfZ2V0X2tleV9zbG90X2JpdHMoIHNvdXJjZSApICk7Ci0gICAgYnVmZmVyID0gbWJlZHRsc19jYWxsb2MoIDEsIGJ1ZmZlcl9zaXplICk7Ci0gICAgaWYoIGJ1ZmZlciA9PSBOVUxMICkKLSAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWSApOwotICAgIHN0YXR1cyA9IHBzYV9pbnRlcm5hbF9leHBvcnRfa2V5KCBzb3VyY2UsIGJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsIDAgKTsKKyAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gcHNhX2NvcHlfa2V5X21hdGVyaWFsX2ludG9fc2xvdCggdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UtPmRhdGEua2V5LmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+ZGF0YS5rZXkuYnl0ZXMgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKLSAgICAgICAgZ290byBleGl0OwotICAgIHRhcmdldC0+YXR0ci50eXBlID0gc291cmNlLT5hdHRyLnR5cGU7Ci0gICAgc3RhdHVzID0gcHNhX2ltcG9ydF9rZXlfaW50b19zbG90KCB0YXJnZXQsIGJ1ZmZlciwgbGVuZ3RoICk7CisgICAgICAgIHJldHVybiggc3RhdHVzICk7CiAKLWV4aXQ6Ci0gICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKCBidWZmZXIsIGJ1ZmZlcl9zaXplICk7Ci0gICAgbWJlZHRsc19mcmVlKCBidWZmZXIgKTsKLSAgICByZXR1cm4oIHN0YXR1cyApOworICAgIHRhcmdldC0+YXR0ci50eXBlID0gc291cmNlLT5hdHRyLnR5cGU7CisgICAgdGFyZ2V0LT5hdHRyLmJpdHMgPSBzb3VyY2UtPmF0dHIuYml0czsKKworICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKIH0KIAotcHNhX3N0YXR1c190IHBzYV9jb3B5X2tleSggcHNhX2tleV9oYW5kbGVfdCBzb3VyY2VfaGFuZGxlLAorcHNhX3N0YXR1c190IHBzYV9jb3B5X2tleSggbWJlZHRsc19zdmNfa2V5X2lkX3Qgc291cmNlX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICpzcGVjaWZpZWRfYXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgKnRhcmdldF9oYW5kbGUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgKnRhcmdldF9rZXkgKQogewotICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CisgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOworICAgIHBzYV9zdGF0dXNfdCB1bmxvY2tfc3RhdHVzID0gUFNBX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQ7CiAgICAgcHNhX2tleV9zbG90X3QgKnNvdXJjZV9zbG90ID0gTlVMTDsKICAgICBwc2Ffa2V5X3Nsb3RfdCAqdGFyZ2V0X3Nsb3QgPSBOVUxMOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGFjdHVhbF9hdHRyaWJ1dGVzID0gKnNwZWNpZmllZF9hdHRyaWJ1dGVzOwogICAgIHBzYV9zZV9kcnZfdGFibGVfZW50cnlfdCAqZHJpdmVyID0gTlVMTDsKIAotICAgIHN0YXR1cyA9IHBzYV9nZXRfdHJhbnNwYXJlbnRfa2V5KCBzb3VyY2VfaGFuZGxlLCAmc291cmNlX3Nsb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9LRVlfVVNBR0VfQ09QWSwgMCApOworICAgICp0YXJnZXRfa2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CisKKyAgICBzdGF0dXMgPSBwc2FfZ2V0X2FuZF9sb2NrX3RyYW5zcGFyZW50X2tleV9zbG90X3dpdGhfcG9saWN5KAorICAgICAgICAgICAgICAgICBzb3VyY2Vfa2V5LCAmc291cmNlX3Nsb3QsIFBTQV9LRVlfVVNBR0VfQ09QWSwgMCApOwogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICBnb3RvIGV4aXQ7CiAKQEAgLTIyMjEsOSArMjQyNSw4IEBACiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIGdvdG8gZXhpdDsKIAotICAgIHN0YXR1cyA9IHBzYV9zdGFydF9rZXlfY3JlYXRpb24oIFBTQV9LRVlfQ1JFQVRJT05fQ09QWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWN0dWFsX2F0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2hhbmRsZSwgJnRhcmdldF9zbG90LCAmZHJpdmVyICk7CisgICAgc3RhdHVzID0gcHNhX3N0YXJ0X2tleV9jcmVhdGlvbiggUFNBX0tFWV9DUkVBVElPTl9DT1BZLCAmYWN0dWFsX2F0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhcmdldF9zbG90LCAmZHJpdmVyICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIGdvdG8gZXhpdDsKIApAQCAtMjI0MCwxNCArMjQ0MywxNCBAQAogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICBnb3RvIGV4aXQ7CiAKLSAgICBzdGF0dXMgPSBwc2FfZmluaXNoX2tleV9jcmVhdGlvbiggdGFyZ2V0X3Nsb3QsIGRyaXZlciApOworICAgIHN0YXR1cyA9IHBzYV9maW5pc2hfa2V5X2NyZWF0aW9uKCB0YXJnZXRfc2xvdCwgZHJpdmVyLCB0YXJnZXRfa2V5ICk7CiBleGl0OgogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQotICAgIHsKICAgICAgICAgcHNhX2ZhaWxfa2V5X2NyZWF0aW9uKCB0YXJnZXRfc2xvdCwgZHJpdmVyICk7Ci0gICAgICAgICp0YXJnZXRfaGFuZGxlID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuKCBzdGF0dXMgKTsKKworICAgIHVubG9ja19zdGF0dXMgPSBwc2FfdW5sb2NrX2tleV9zbG90KCBzb3VyY2Vfc2xvdCApOworCisgICAgcmV0dXJuKCAoIHN0YXR1cyA9PSBQU0FfU1VDQ0VTUyApID8gdW5sb2NrX3N0YXR1cyA6IHN0YXR1cyApOwogfQogCiAKQEAgLTIyNTYsNyArMjQ1OSwxMCBAQAogLyogTWVzc2FnZSBkaWdlc3RzICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgZGVmaW5lZChNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUEtDUzFWMTVfU0lHTikgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfUlNBX09BRVApIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QU1MpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EpCiBzdGF0aWMgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1iZWR0bHNfbWRfaW5mb19mcm9tX3BzYSggcHNhX2FsZ29yaXRobV90IGFsZyApCiB7CiAgICAgc3dpdGNoKCBhbGcgKQpAQCAtMjI5OSw3ICsyNTA1LDEwIEBACiAgICAgICAgICAgICByZXR1cm4oIE5VTEwgKTsKICAgICB9CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QS0NTMVYxNV9TSUdOKSB8fAorICAgICAgICAqIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfUlNBX09BRVApIHx8CisgICAgICAgICogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUFNTKSB8fAorICAgICAgICAqIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSkgKi8KIAogcHNhX3N0YXR1c190IHBzYV9oYXNoX2Fib3J0KCBwc2FfaGFzaF9vcGVyYXRpb25fdCAqb3BlcmF0aW9uICkKIHsKQEAgLTI4MTYsNyArMzAyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSBrZXlfYml0cywgbW9kZSApICk7CiB9CiAKLSNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0hNQUMpCiBzdGF0aWMgc2l6ZV90IHBzYV9nZXRfaGFzaF9ibG9ja19zaXplKCBwc2FfYWxnb3JpdGhtX3QgYWxnICkKIHsKICAgICBzd2l0Y2goIGFsZyApCkBAIC0yODQzLDcgKzMwNTIsNyBAQAogICAgICAgICAgICAgcmV0dXJuKCAwICk7CiAgICAgfQogfQotI2VuZGlmIC8qIE1CRURUTFNfTURfQyAqLworI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfSE1BQykgKi8KIAogLyogSW5pdGlhbGl6ZSB0aGUgTUFDIG9wZXJhdGlvbiBzdHJ1Y3R1cmUuIE9uY2UgdGhpcyBmdW5jdGlvbiBoYXMgYmVlbgogICogY2FsbGVkLCBwc2FfbWFjX2Fib3J0IGNhbiBydW4gYW5kIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nLiAqLwpAQCAtMjg2OCw3ICszMDc3LDcgQEAKICAgICB9CiAgICAgZWxzZQogI2VuZGlmIC8qIE1CRURUTFNfQ01BQ19DICovCi0jaWYgZGVmaW5lZChNQkVEVExTX01EX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19ITUFDKQogICAgIGlmKCBQU0FfQUxHX0lTX0hNQUMoIG9wZXJhdGlvbi0+YWxnICkgKQogICAgIHsKICAgICAgICAgLyogV2UnbGwgc2V0IHVwIHRoZSBoYXNoIG9wZXJhdGlvbiBsYXRlciBpbiBwc2FfaG1hY19zZXR1cF9pbnRlcm5hbC4gKi8KQEAgLTI4NzYsNyArMzA4NSw3IEBACiAgICAgICAgIHN0YXR1cyA9IFBTQV9TVUNDRVNTOwogICAgIH0KICAgICBlbHNlCi0jZW5kaWYgLyogTUJFRFRMU19NRF9DICovCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfSE1BQyAqLwogICAgIHsKICAgICAgICAgaWYoICEgUFNBX0FMR19JU19NQUMoIGFsZyApICkKICAgICAgICAgICAgIHN0YXR1cyA9IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UOwpAQCAtMjg4NywxMyArMzA5NiwxMyBAQAogICAgIHJldHVybiggc3RhdHVzICk7CiB9CiAKLSNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0hNQUMpCiBzdGF0aWMgcHNhX3N0YXR1c190IHBzYV9obWFjX2Fib3J0X2ludGVybmFsKCBwc2FfaG1hY19pbnRlcm5hbF9kYXRhICpobWFjICkKIHsKICAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoIGhtYWMtPm9wYWQsIHNpemVvZiggaG1hYy0+b3BhZCApICk7CiAgICAgcmV0dXJuKCBwc2FfaGFzaF9hYm9ydCggJmhtYWMtPmhhc2hfY3R4ICkgKTsKIH0KLSNlbmRpZiAvKiBNQkVEVExTX01EX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19ITUFDICovCiAKIHBzYV9zdGF0dXNfdCBwc2FfbWFjX2Fib3J0KCBwc2FfbWFjX29wZXJhdGlvbl90ICpvcGVyYXRpb24gKQogewpAQCAtMjkxMiwxMyArMzEyMSwxMyBAQAogICAgIH0KICAgICBlbHNlCiAjZW5kaWYgLyogTUJFRFRMU19DTUFDX0MgKi8KLSNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0hNQUMpCiAgICAgaWYoIFBTQV9BTEdfSVNfSE1BQyggb3BlcmF0aW9uLT5hbGcgKSApCiAgICAgewogICAgICAgICBwc2FfaG1hY19hYm9ydF9pbnRlcm5hbCggJm9wZXJhdGlvbi0+Y3R4LmhtYWMgKTsKICAgICB9CiAgICAgZWxzZQotI2VuZGlmIC8qIE1CRURUTFNfTURfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0hNQUMgKi8KICAgICB7CiAgICAgICAgIC8qIFNhbml0eSBjaGVjayAoc2hvdWxkbid0IGhhcHBlbjogb3BlcmF0aW9uLT5hbGcgc2hvdWxkCiAgICAgICAgICAqIGFsd2F5cyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgdG8gYSB2YWxpZCB2YWx1ZSkuICovCkBAIC0yOTY0LDcgKzMxNzMsNyBAQAogfQogI2VuZGlmIC8qIE1CRURUTFNfQ01BQ19DICovCiAKLSNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0hNQUMpCiBzdGF0aWMgcHNhX3N0YXR1c190IHBzYV9obWFjX3NldHVwX2ludGVybmFsKCBwc2FfaG1hY19pbnRlcm5hbF9kYXRhICpobWFjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGtleV9sZW5ndGgsCkBAIC0zMDI2LDE0ICszMjM1LDE1IEBACiAKICAgICByZXR1cm4oIHN0YXR1cyApOwogfQotI2VuZGlmIC8qIE1CRURUTFNfTURfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0hNQUMgKi8KIAogc3RhdGljIHBzYV9zdGF0dXNfdCBwc2FfbWFjX3NldHVwKCBwc2FfbWFjX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpc19zaWduICkKIHsKLSAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOworICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRDsKKyAgICBwc2Ffc3RhdHVzX3QgdW5sb2NrX3N0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOwogICAgIHBzYV9rZXlfc2xvdF90ICpzbG90OwogICAgIHNpemVfdCBrZXlfYml0czsKICAgICBwc2Ffa2V5X3VzYWdlX3QgdXNhZ2UgPQpAQCAtMzA1Myw3ICszMjYzLDggQEAKICAgICBpZiggaXNfc2lnbiApCiAgICAgICAgIG9wZXJhdGlvbi0+aXNfc2lnbiA9IDE7CiAKLSAgICBzdGF0dXMgPSBwc2FfZ2V0X3RyYW5zcGFyZW50X2tleSggaGFuZGxlLCAmc2xvdCwgdXNhZ2UsIGFsZyApOworICAgIHN0YXR1cyA9IHBzYV9nZXRfYW5kX2xvY2tfdHJhbnNwYXJlbnRfa2V5X3Nsb3Rfd2l0aF9wb2xpY3koCisgICAgICAgICAgICAgICAgIGtleSwgJnNsb3QsIHVzYWdlLCBhbGcgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgZ290byBleGl0OwogICAgIGtleV9iaXRzID0gcHNhX2dldF9rZXlfc2xvdF9iaXRzKCBzbG90ICk7CkBAIC0zMDc2LDcgKzMyODcsNyBAQAogICAgIH0KICAgICBlbHNlCiAjZW5kaWYgLyogTUJFRFRMU19DTUFDX0MgKi8KLSNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0hNQUMpCiAgICAgaWYoIFBTQV9BTEdfSVNfSE1BQyggZnVsbF9sZW5ndGhfYWxnICkgKQogICAgIHsKICAgICAgICAgcHNhX2FsZ29yaXRobV90IGhhc2hfYWxnID0gUFNBX0FMR19ITUFDX0dFVF9IQVNIKCBhbGcgKTsKQEAgLTMxMDcsNyArMzMxOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2FsZyApOwogICAgIH0KICAgICBlbHNlCi0jZW5kaWYgLyogTUJFRFRMU19NRF9DICovCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfSE1BQyAqLwogICAgIHsKICAgICAgICAgKHZvaWQpIGtleV9iaXRzOwogICAgICAgICBzdGF0dXMgPSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRDsKQEAgLTMxNDIsMjEgKzMzNTMsMjQgQEAKICAgICB7CiAgICAgICAgIG9wZXJhdGlvbi0+a2V5X3NldCA9IDE7CiAgICAgfQotICAgIHJldHVybiggc3RhdHVzICk7CisKKyAgICB1bmxvY2tfc3RhdHVzID0gcHNhX3VubG9ja19rZXlfc2xvdCggc2xvdCApOworCisgICAgcmV0dXJuKCAoIHN0YXR1cyA9PSBQU0FfU1VDQ0VTUyApID8gdW5sb2NrX3N0YXR1cyA6IHN0YXR1cyApOwogfQogCiBwc2Ffc3RhdHVzX3QgcHNhX21hY19zaWduX3NldHVwKCBwc2FfbWFjX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgKQogewotICAgIHJldHVybiggcHNhX21hY19zZXR1cCggb3BlcmF0aW9uLCBoYW5kbGUsIGFsZywgMSApICk7CisgICAgcmV0dXJuKCBwc2FfbWFjX3NldHVwKCBvcGVyYXRpb24sIGtleSwgYWxnLCAxICkgKTsKIH0KIAogcHNhX3N0YXR1c190IHBzYV9tYWNfdmVyaWZ5X3NldHVwKCBwc2FfbWFjX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgKQogewotICAgIHJldHVybiggcHNhX21hY19zZXR1cCggb3BlcmF0aW9uLCBoYW5kbGUsIGFsZywgMCApICk7CisgICAgcmV0dXJuKCBwc2FfbWFjX3NldHVwKCBvcGVyYXRpb24sIGtleSwgYWxnLCAwICkgKTsKIH0KIAogcHNhX3N0YXR1c190IHBzYV9tYWNfdXBkYXRlKCBwc2FfbWFjX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCkBAIC0zMTc5LDE0ICszMzkzLDE0IEBACiAgICAgfQogICAgIGVsc2UKICNlbmRpZiAvKiBNQkVEVExTX0NNQUNfQyAqLwotI2lmIGRlZmluZWQoTUJFRFRMU19NRF9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfSE1BQykKICAgICBpZiggUFNBX0FMR19JU19ITUFDKCBvcGVyYXRpb24tPmFsZyApICkKICAgICB7CiAgICAgICAgIHN0YXR1cyA9IHBzYV9oYXNoX3VwZGF0ZSggJm9wZXJhdGlvbi0+Y3R4LmhtYWMuaGFzaF9jdHgsIGlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2xlbmd0aCApOwogICAgIH0KICAgICBlbHNlCi0jZW5kaWYgLyogTUJFRFRMU19NRF9DICovCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfSE1BQyAqLwogICAgIHsKICAgICAgICAgLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGlmIGBvcGVyYXRpb25gIHdhcyBpbml0aWFsaXplZCBieQogICAgICAgICAgKiBhIHNldHVwIGZ1bmN0aW9uLiAqLwpAQCAtMzE5OCw3ICszNDEyLDcgQEAKICAgICByZXR1cm4oIHN0YXR1cyApOwogfQogCi0jaWYgZGVmaW5lZChNQkVEVExTX01EX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19ITUFDKQogc3RhdGljIHBzYV9zdGF0dXNfdCBwc2FfaG1hY19maW5pc2hfaW50ZXJuYWwoIHBzYV9obWFjX2ludGVybmFsX2RhdGEgKmhtYWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqbWFjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYWNfc2l6ZSApCkBAIC0zMjM2LDcgKzM0NTAsNyBAQAogICAgIG1iZWR0bHNfcGxhdGZvcm1femVyb2l6ZSggdG1wLCBoYXNoX3NpemUgKTsKICAgICByZXR1cm4oIHN0YXR1cyApOwogfQotI2VuZGlmIC8qIE1CRURUTFNfTURfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0hNQUMgKi8KIAogc3RhdGljIHBzYV9zdGF0dXNfdCBwc2FfbWFjX2ZpbmlzaF9pbnRlcm5hbCggcHNhX21hY19vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqbWFjLApAQCAtMzI2MiwxNCArMzQ3NiwxNCBAQAogICAgIH0KICAgICBlbHNlCiAjZW5kaWYgLyogTUJFRFRMU19DTUFDX0MgKi8KLSNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0hNQUMpCiAgICAgaWYoIFBTQV9BTEdfSVNfSE1BQyggb3BlcmF0aW9uLT5hbGcgKSApCiAgICAgewogICAgICAgICByZXR1cm4oIHBzYV9obWFjX2ZpbmlzaF9pbnRlcm5hbCggJm9wZXJhdGlvbi0+Y3R4LmhtYWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWMsIG9wZXJhdGlvbi0+bWFjX3NpemUgKSApOwogICAgIH0KICAgICBlbHNlCi0jZW5kaWYgLyogTUJFRFRMU19NRF9DICovCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfSE1BQyAqLwogICAgIHsKICAgICAgICAgLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGlmIGBvcGVyYXRpb25gIHdhcyBpbml0aWFsaXplZCBieQogICAgICAgICAgKiBhIHNldHVwIGZ1bmN0aW9uLiAqLwpAQCAtMzM2NSw3ICszNTc5LDggQEAKIC8qIEFzeW1tZXRyaWMgY3J5cHRvZ3JhcGh5ICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QS0NTMVYxNV9TSUdOKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUFNTKQogLyogRGVjb2RlIHRoZSBoYXNoIGFsZ29yaXRobSBmcm9tIGFsZyBhbmQgc3RvcmUgdGhlIG1iZWR0bHMgZW5jb2RpbmcgaW4KICAqIG1kX2FsZy4gVmVyaWZ5IHRoYXQgdGhlIGhhc2ggbGVuZ3RoIGlzIGFjY2VwdGFibGUuICovCiBzdGF0aWMgcHNhX3N0YXR1c190IHBzYV9yc2FfZGVjb2RlX21kX3R5cGUoIHBzYV9hbGdvcml0aG1fdCBhbGcsCkBAIC0zMzg0LDcgKzM1OTksNyBAQAogICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUEtDUzFWMTVfU0lHTikKICAgICAvKiBGb3IgUEtDUyMxIHYxLjUgc2lnbmF0dXJlLCBpZiB1c2luZyBhIGhhc2gsIHRoZSBoYXNoIGxlbmd0aAogICAgICAqIG11c3QgYmUgY29ycmVjdC4gKi8KICAgICBpZiggUFNBX0FMR19JU19SU0FfUEtDUzFWMTVfU0lHTiggYWxnICkgJiYKQEAgLTMzOTUsMTYgKzM2MTAsMTYgQEAKICAgICAgICAgaWYoIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSAhPSBoYXNoX2xlbmd0aCApCiAgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CiAgICAgfQotI2VuZGlmIC8qIE1CRURUTFNfUEtDUzFfVjE1ICovCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfUlNBX1BLQ1MxVjE1X1NJR04gKi8KIAotI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMjEpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUFNTKQogICAgIC8qIFBTUyByZXF1aXJlcyBhIGhhc2ggaW50ZXJuYWxseS4gKi8KICAgICBpZiggUFNBX0FMR19JU19SU0FfUFNTKCBhbGcgKSApCiAgICAgewogICAgICAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKICAgICB9Ci0jZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMjEgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUFNTICovCiAKICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CiB9CkBAIC0zNDI4LDcgKzM2NDMsNyBAQAogICAgIGlmKCBzaWduYXR1cmVfc2l6ZSA8IG1iZWR0bHNfcnNhX2dldF9sZW4oIHJzYSApICkKICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCApOwogCi0jaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YxNSkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QS0NTMVYxNV9TSUdOKQogICAgIGlmKCBQU0FfQUxHX0lTX1JTQV9QS0NTMVYxNV9TSUdOKCBhbGcgKSApCiAgICAgewogICAgICAgICBtYmVkdGxzX3JzYV9zZXRfcGFkZGluZyggcnNhLCBNQkVEVExTX1JTQV9QS0NTX1YxNSwKQEAgLTM0NDMsOCArMzY1OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSApOwogICAgIH0KICAgICBlbHNlCi0jZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMTUgKi8KLSNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjIxKQorI2VuZGlmIC8qIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QS0NTMVYxNV9TSUdOICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUFNTKQogICAgIGlmKCBQU0FfQUxHX0lTX1JTQV9QU1MoIGFsZyApICkKICAgICB7CiAgICAgICAgIG1iZWR0bHNfcnNhX3NldF9wYWRkaW5nKCByc2EsIE1CRURUTFNfUlNBX1BLQ1NfVjIxLCBtZF9hbGcgKTsKQEAgLTM0NTgsNyArMzY3Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlICk7CiAgICAgfQogICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxX1YyMSAqLworI2VuZGlmIC8qIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QU1MgKi8KICAgICB7CiAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKICAgICB9CkBAIC0zNDg2LDcgKzM3MDEsNyBAQAogICAgIGlmKCBzaWduYXR1cmVfbGVuZ3RoICE9IG1iZWR0bHNfcnNhX2dldF9sZW4oIHJzYSApICkKICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9TSUdOQVRVUkUgKTsKIAotI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUEtDUzFWMTVfU0lHTikKICAgICBpZiggUFNBX0FMR19JU19SU0FfUEtDUzFWMTVfU0lHTiggYWxnICkgKQogICAgIHsKICAgICAgICAgbWJlZHRsc19yc2Ffc2V0X3BhZGRpbmcoIHJzYSwgTUJFRFRMU19SU0FfUEtDU19WMTUsCkBAIC0zNTAxLDggKzM3MTYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSApOwogICAgIH0KICAgICBlbHNlCi0jZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMTUgKi8KLSNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjIxKQorI2VuZGlmIC8qIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QS0NTMVYxNV9TSUdOICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUFNTKQogICAgIGlmKCBQU0FfQUxHX0lTX1JTQV9QU1MoIGFsZyApICkKICAgICB7CiAgICAgICAgIG1iZWR0bHNfcnNhX3NldF9wYWRkaW5nKCByc2EsIE1CRURUTFNfUlNBX1BLQ1NfVjIxLCBtZF9hbGcgKTsKQEAgLTM1MTYsNyArMzczMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgKTsKICAgICB9CiAgICAgZWxzZQotI2VuZGlmIC8qIE1CRURUTFNfUEtDUzFfVjIxICovCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfUlNBX1BTUyAqLwogICAgIHsKICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCApOwogICAgIH0KQEAgLTM1MjgsOSArMzc0MywxMSBAQAogICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX1NJR05BVFVSRSApOwogICAgIHJldHVybiggbWJlZHRsc190b19wc2FfZXJyb3IoIHJldCApICk7CiB9Ci0jZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfUlNBX1BLQ1MxVjE1X1NJR04pIHx8CisgICAgICAgICogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUFNTKSAqLwogCi0jaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19FQ0RTQSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSkKIC8qIGBlY3BgIGNhbm5vdCBiZSBjb25zdCBiZWNhdXNlIGBlY3AtPmdycGAgbmVlZHMgdG8gYmUgbm9uLWNvbnN0CiAgKiBmb3IgbWJlZHRsc19lY2RzYV9zaWduKCkgYW5kIG1iZWR0bHNfZWNkc2Ffc2lnbl9kZXQoKQogICogKGV2ZW4gdGhvdWdoIHRoZXNlIGZ1bmN0aW9ucyBkb24ndCBtb2RpZnkgaXQpLiAqLwpAQCAtMzU1NCw3ICszNzcxLDcgQEAKICAgICAgICAgZ290byBjbGVhbnVwOwogICAgIH0KIAotI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSkKICAgICBpZiggUFNBX0FMR19EU0FfSVNfREVURVJNSU5JU1RJQyggYWxnICkgKQogICAgIHsKICAgICAgICAgcHNhX2FsZ29yaXRobV90IGhhc2hfYWxnID0gUFNBX0FMR19TSUdOX0dFVF9IQVNIKCBhbGcgKTsKQEAgLTM1NjcsNyArMzc4NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbG9iYWxfZGF0YS5jdHJfZHJiZyApICk7CiAgICAgfQogICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EpICovCiAgICAgewogICAgICAgICAodm9pZCkgYWxnOwogICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNkc2Ffc2lnbiggJmVjcC0+Z3JwLCAmciwgJnMsICZlY3AtPmQsCkBAIC0zNjI5LDkgKzM4NDYsMTAgQEAKICAgICBtYmVkdGxzX21waV9mcmVlKCAmcyApOwogICAgIHJldHVybiggbWJlZHRsc190b19wc2FfZXJyb3IoIHJldCApICk7CiB9Ci0jZW5kaWYgLyogTUJFRFRMU19FQ0RTQV9DICovCisjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19FQ0RTQSkgfHwKKyAgICAgICAgKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EpICovCiAKLXBzYV9zdGF0dXNfdCBwc2Ffc2lnbl9oYXNoKCBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKK3BzYV9zdGF0dXNfdCBwc2Ffc2lnbl9oYXNoKCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpoYXNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBoYXNoX2xlbmd0aCwKQEAgLTM2MzksOCArMzg1Nyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpZ25hdHVyZV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqc2lnbmF0dXJlX2xlbmd0aCApCiB7CisgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOworICAgIHBzYV9zdGF0dXNfdCB1bmxvY2tfc3RhdHVzID0gUFNBX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQ7CiAgICAgcHNhX2tleV9zbG90X3QgKnNsb3Q7Ci0gICAgcHNhX3N0YXR1c190IHN0YXR1czsKIAogICAgICpzaWduYXR1cmVfbGVuZ3RoID0gc2lnbmF0dXJlX3NpemU7CiAgICAgLyogSW1tZWRpYXRlbHkgcmVqZWN0IGEgemVyby1sZW5ndGggc2lnbmF0dXJlIGJ1ZmZlci4gVGhpcyBndWFyYW50ZWVzCkBAIC0zNjUwLDcgKzM4NjksOSBAQAogICAgIGlmKCBzaWduYXR1cmVfc2l6ZSA9PSAwICkKICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCApOwogCi0gICAgc3RhdHVzID0gcHNhX2dldF9rZXlfZnJvbV9zbG90KCBoYW5kbGUsICZzbG90LCBQU0FfS0VZX1VTQUdFX1NJR05fSEFTSCwgYWxnICk7CisgICAgc3RhdHVzID0gcHNhX2dldF9hbmRfbG9ja19rZXlfc2xvdF93aXRoX3BvbGljeSgga2V5LCAmc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfS0VZX1VTQUdFX1NJR05fSEFTSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGcgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgZ290byBleGl0OwogICAgIGlmKCAhIFBTQV9LRVlfVFlQRV9JU19LRVlfUEFJUiggc2xvdC0+YXR0ci50eXBlICkgKQpAQCAtMzY3Miw3ICszODkzLDggQEAKICAgICAgICAgZ290byBleGl0OwogCiAgICAgLyogSWYgdGhlIG9wZXJhdGlvbiB3YXMgbm90IHN1cHBvcnRlZCBieSBhbnkgYWNjZWxlcmF0b3IsIHRyeSBmYWxsYmFjay4gKi8KLSNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUEtDUzFWMTVfU0lHTikgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfUlNBX1BTUykKICAgICBpZiggc2xvdC0+YXR0ci50eXBlID09IFBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVIgKQogICAgIHsKICAgICAgICAgbWJlZHRsc19yc2FfY29udGV4dCAqcnNhID0gTlVMTDsKQEAgLTM2OTQsMTMgKzM5MTYsMTQgQEAKICAgICAgICAgbWJlZHRsc19mcmVlKCByc2EgKTsKICAgICB9CiAgICAgZWxzZQotI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19SU0FfQykgKi8KLSNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUEtDUzFWMTVfU0lHTikgfHwKKyAgICAgICAgKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QU1MpICovCiAgICAgaWYoIFBTQV9LRVlfVFlQRV9JU19FQ0MoIHNsb3QtPmF0dHIudHlwZSApICkKICAgICB7Ci0jaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19FQ0RTQSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSkKICAgICAgICAgaWYoCi0jaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19ERVRFUk1JTklTVElDX0VDRFNBKQogICAgICAgICAgICAgUFNBX0FMR19JU19FQ0RTQSggYWxnICkKICNlbHNlCiAgICAgICAgICAgICBQU0FfQUxHX0lTX1JBTkRPTUlaRURfRUNEU0EoIGFsZyApCkBAIC0zNzIzLDEzICszOTQ2LDEzIEBACiAgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIGVjcCApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0VDRFNBKSB8fAorICAgICAgICAqIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSkgKi8KICAgICAgICAgewogICAgICAgICAgICAgc3RhdHVzID0gUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQotI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19FQ1BfQykgKi8KICAgICB7CiAgICAgICAgIHN0YXR1cyA9IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEOwogICAgIH0KQEAgLTM3NDYsMjAgKzM5NjksMjYgQEAKICAgICAgICAgbWVtc2V0KCBzaWduYXR1cmUsICchJywgc2lnbmF0dXJlX3NpemUgKTsKICAgICAvKiBJZiBzaWduYXR1cmVfc2l6ZSBpcyAwIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLiBXZSBtdXN0IG5vdCBjYWxsCiAgICAgICogbWVtc2V0IGJlY2F1c2Ugc2lnbmF0dXJlIG1heSBiZSBOVUxMIGluIHRoaXMgY2FzZS4gKi8KLSAgICByZXR1cm4oIHN0YXR1cyApOworCisgICAgdW5sb2NrX3N0YXR1cyA9IHBzYV91bmxvY2tfa2V5X3Nsb3QoIHNsb3QgKTsKKworICAgIHJldHVybiggKCBzdGF0dXMgPT0gUFNBX1NVQ0NFU1MgKSA/IHVubG9ja19zdGF0dXMgOiBzdGF0dXMgKTsKIH0KIAotcHNhX3N0YXR1c190IHBzYV92ZXJpZnlfaGFzaCggcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCitwc2Ffc3RhdHVzX3QgcHNhX3ZlcmlmeV9oYXNoKCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBoYXNoX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaWduYXR1cmVfbGVuZ3RoICkKIHsKKyAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gUFNBX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQ7CisgICAgcHNhX3N0YXR1c190IHVubG9ja19zdGF0dXMgPSBQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRDsKICAgICBwc2Ffa2V5X3Nsb3RfdCAqc2xvdDsKLSAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwogCi0gICAgc3RhdHVzID0gcHNhX2dldF9rZXlfZnJvbV9zbG90KCBoYW5kbGUsICZzbG90LCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNILCBhbGcgKTsKKyAgICBzdGF0dXMgPSBwc2FfZ2V0X2FuZF9sb2NrX2tleV9zbG90X3dpdGhfcG9saWN5KCBrZXksICZzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9LRVlfVVNBR0VfVkVSSUZZX0hBU0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIHJldHVybiggc3RhdHVzICk7CiAKQEAgLTM3NzIsOSArNDAwMSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlX2xlbmd0aCApOwogICAgIGlmKCBzdGF0dXMgIT0gUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgfHwKICAgICAgICAgcHNhX2tleV9saWZldGltZV9pc19leHRlcm5hbCggc2xvdC0+YXR0ci5saWZldGltZSApICkKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgZ290byBleGl0OwogCi0jaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfUlNBX1BLQ1MxVjE1X1NJR04pIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QU1MpCiAgICAgaWYoIFBTQV9LRVlfVFlQRV9JU19SU0EoIHNsb3QtPmF0dHIudHlwZSApICkKICAgICB7CiAgICAgICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgKnJzYSA9IE5VTEw7CkBAIC0zNzg0LDcgKzQwMTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyc2EgKTsKICAgICAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCi0gICAgICAgICAgICByZXR1cm4oIHN0YXR1cyApOworICAgICAgICAgICAgZ290byBleGl0OwogCiAgICAgICAgIHN0YXR1cyA9IHBzYV9yc2FfdmVyaWZ5KCByc2EsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGcsCkBAIC0zNzkyLDE0ICs0MDIyLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpZ25hdHVyZV9sZW5ndGggKTsKICAgICAgICAgbWJlZHRsc19yc2FfZnJlZSggcnNhICk7CiAgICAgICAgIG1iZWR0bHNfZnJlZSggcnNhICk7Ci0gICAgICAgIHJldHVybiggc3RhdHVzICk7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgZWxzZQotI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19SU0FfQykgKi8KLSNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUEtDUzFWMTVfU0lHTikgfHwKKyAgICAgICAgKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QU1MpICovCiAgICAgaWYoIFBTQV9LRVlfVFlQRV9JU19FQ0MoIHNsb3QtPmF0dHIudHlwZSApICkKICAgICB7Ci0jaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19FQ0RTQSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSkKICAgICAgICAgaWYoIFBTQV9BTEdfSVNfRUNEU0EoIGFsZyApICkKICAgICAgICAgewogICAgICAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpciAqZWNwID0gTlVMTDsKQEAgLTM4MDgsMjggKzQwMzksMzQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlY3AgKTsKICAgICAgICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQotICAgICAgICAgICAgICAgIHJldHVybiggc3RhdHVzICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgICAgc3RhdHVzID0gcHNhX2VjZHNhX3ZlcmlmeSggZWNwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgaGFzaF9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpZ25hdHVyZV9sZW5ndGggKTsKICAgICAgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfZnJlZSggZWNwICk7CiAgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIGVjcCApOwotICAgICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgICAgICBlbHNlCi0jZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpICovCisjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19FQ0RTQSkgfHwKKyAgICAgICAgKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EpICovCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKKyAgICAgICAgICAgIHN0YXR1cyA9ICBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVDsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCi0jZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX0VDUF9DKSAqLwogICAgIHsKLSAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworICAgICAgICBzdGF0dXMgPSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRDsKICAgICB9CisKK2V4aXQ6CisgICAgdW5sb2NrX3N0YXR1cyA9IHBzYV91bmxvY2tfa2V5X3Nsb3QoIHNsb3QgKTsKKworICAgIHJldHVybiggKCBzdGF0dXMgPT0gUFNBX1NVQ0NFU1MgKSA/IHVubG9ja19zdGF0dXMgOiBzdGF0dXMgKTsKIH0KIAotI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykgJiYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YyMSkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9PQUVQKQogc3RhdGljIHZvaWQgcHNhX3JzYV9vYWVwX3NldF9wYWRkaW5nX21vZGUoIHBzYV9hbGdvcml0aG1fdCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19yc2FfY29udGV4dCAqcnNhICkKIHsKQEAgLTM4MzgsOSArNDA3NSw5IEBACiAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnID0gbWJlZHRsc19tZF9nZXRfdHlwZSggbWRfaW5mbyApOwogICAgIG1iZWR0bHNfcnNhX3NldF9wYWRkaW5nKCByc2EsIE1CRURUTFNfUlNBX1BLQ1NfVjIxLCBtZF9hbGcgKTsKIH0KLSNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpICYmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMjEpICovCisjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfT0FFUCkgKi8KIAotcHNhX3N0YXR1c190IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQoIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAorcHNhX3N0YXR1c190IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQoIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dF9sZW5ndGgsCkBAIC0zODUwLDggKzQwODcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRwdXRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm91dHB1dF9sZW5ndGggKQogeworICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRDsKKyAgICBwc2Ffc3RhdHVzX3QgdW5sb2NrX3N0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOwogICAgIHBzYV9rZXlfc2xvdF90ICpzbG90OwotICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAKICAgICAodm9pZCkgaW5wdXQ7CiAgICAgKHZvaWQpIGlucHV0X2xlbmd0aDsKQEAgLTM4NjQsMTQgKzQxMDIsMTkgQEAKICAgICBpZiggISBQU0FfQUxHX0lTX1JTQV9PQUVQKCBhbGcgKSAmJiBzYWx0X2xlbmd0aCAhPSAwICkKICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCApOwogCi0gICAgc3RhdHVzID0gcHNhX2dldF90cmFuc3BhcmVudF9rZXkoIGhhbmRsZSwgJnNsb3QsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgYWxnICk7CisgICAgc3RhdHVzID0gcHNhX2dldF9hbmRfbG9ja190cmFuc3BhcmVudF9rZXlfc2xvdF93aXRoX3BvbGljeSgKKyAgICAgICAgICAgICAgICAga2V5LCAmc2xvdCwgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBhbGcgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKICAgICBpZiggISAoIFBTQV9LRVlfVFlQRV9JU19QVUJMSUNfS0VZKCBzbG90LT5hdHRyLnR5cGUgKSB8fAogICAgICAgICAgICAgUFNBX0tFWV9UWVBFX0lTX0tFWV9QQUlSKCBzbG90LT5hdHRyLnR5cGUgKSApICkKLSAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCApOworICAgIHsKKyAgICAgICAgc3RhdHVzID0gUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQ7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CiAKLSNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9PQUVQKQogICAgIGlmKCBQU0FfS0VZX1RZUEVfSVNfUlNBKCBzbG90LT5hdHRyLnR5cGUgKSApCiAgICAgewogICAgICAgICBtYmVkdGxzX3JzYV9jb250ZXh0ICpyc2EgPSBOVUxMOwpAQCAtMzg4Nyw3ICs0MTMwLDcgQEAKICAgICAgICAgICAgIHN0YXR1cyA9IFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMOwogICAgICAgICAgICAgZ290byByc2FfZXhpdDsKICAgICAgICAgfQotI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQpCiAgICAgICAgIGlmKCBhbGcgPT0gUFNBX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQgKQogICAgICAgICB7CiAgICAgICAgICAgICBzdGF0dXMgPSBtYmVkdGxzX3RvX3BzYV9lcnJvcigKQEAgLTM5MDAsOCArNDE0Myw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCApICk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQotI2VuZGlmIC8qIE1CRURUTFNfUEtDUzFfVjE1ICovCi0jaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YyMSkKKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9PQUVQKQogICAgICAgICBpZiggUFNBX0FMR19JU19SU0FfT0FFUCggYWxnICkgKQogICAgICAgICB7CiAgICAgICAgICAgICBwc2FfcnNhX29hZXBfc2V0X3BhZGRpbmdfbW9kZSggYWxnLCByc2EgKTsKQEAgLTM5MTYsNyArNDE1OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKSApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxX1YyMSAqLworI2VuZGlmIC8qIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9PQUVQICovCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0YXR1cyA9IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UOwogICAgICAgICAgICAgZ290byByc2FfZXhpdDsKQEAgLTM5MjcsMTYgKzQxNzAsMjEgQEAKIAogICAgICAgICBtYmVkdGxzX3JzYV9mcmVlKCByc2EgKTsKICAgICAgICAgbWJlZHRsc19mcmVlKCByc2EgKTsKLSAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKICAgICB9CiAgICAgZWxzZQotI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19SU0FfQykgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9QS0NTMVYxNV9DUllQVCkgfHwKKyAgICAgICAgKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9PQUVQKSAqLwogICAgIHsKLSAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworICAgICAgICBzdGF0dXMgPSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRDsKICAgICB9CisKK2V4aXQ6CisgICAgdW5sb2NrX3N0YXR1cyA9IHBzYV91bmxvY2tfa2V5X3Nsb3QoIHNsb3QgKTsKKworICAgIHJldHVybiggKCBzdGF0dXMgPT0gUFNBX1NVQ0NFU1MgKSA/IHVubG9ja19zdGF0dXMgOiBzdGF0dXMgKTsKIH0KIAotcHNhX3N0YXR1c190IHBzYV9hc3ltbWV0cmljX2RlY3J5cHQoIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAorcHNhX3N0YXR1c190IHBzYV9hc3ltbWV0cmljX2RlY3J5cHQoIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dF9sZW5ndGgsCkBAIC0zOTQ2LDggKzQxOTQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRwdXRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm91dHB1dF9sZW5ndGggKQogeworICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRDsKKyAgICBwc2Ffc3RhdHVzX3QgdW5sb2NrX3N0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOwogICAgIHBzYV9rZXlfc2xvdF90ICpzbG90OwotICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAKICAgICAodm9pZCkgaW5wdXQ7CiAgICAgKHZvaWQpIGlucHV0X2xlbmd0aDsKQEAgLTM5NjAsMTMgKzQyMDksMTggQEAKICAgICBpZiggISBQU0FfQUxHX0lTX1JTQV9PQUVQKCBhbGcgKSAmJiBzYWx0X2xlbmd0aCAhPSAwICkKICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCApOwogCi0gICAgc3RhdHVzID0gcHNhX2dldF90cmFuc3BhcmVudF9rZXkoIGhhbmRsZSwgJnNsb3QsIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgYWxnICk7CisgICAgc3RhdHVzID0gcHNhX2dldF9hbmRfbG9ja190cmFuc3BhcmVudF9rZXlfc2xvdF93aXRoX3BvbGljeSgKKyAgICAgICAgICAgICAgICAga2V5LCAmc2xvdCwgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBhbGcgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKICAgICBpZiggISBQU0FfS0VZX1RZUEVfSVNfS0VZX1BBSVIoIHNsb3QtPmF0dHIudHlwZSApICkKLSAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCApOworICAgIHsKKyAgICAgICAgc3RhdHVzID0gUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQ7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CiAKLSNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9PQUVQKQogICAgIGlmKCBzbG90LT5hdHRyLnR5cGUgPT0gUFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUiApCiAgICAgewogICAgICAgICBtYmVkdGxzX3JzYV9jb250ZXh0ICpyc2EgPSBOVUxMOwpAQCAtMzk3NSw3ICs0MjI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5kYXRhLmtleS5ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcnNhICk7CiAgICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQotICAgICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKIAogICAgICAgICBpZiggaW5wdXRfbGVuZ3RoICE9IG1iZWR0bHNfcnNhX2dldF9sZW4oIHJzYSApICkKICAgICAgICAgewpAQCAtMzk4Myw3ICs0MjM3LDcgQEAKICAgICAgICAgICAgIGdvdG8gcnNhX2V4aXQ7CiAgICAgICAgIH0KIAotI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQpCiAgICAgICAgIGlmKCBhbGcgPT0gUFNBX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQgKQogICAgICAgICB7CiAgICAgICAgICAgICBzdGF0dXMgPSBtYmVkdGxzX3RvX3BzYV9lcnJvcigKQEAgLTM5OTcsOCArNDI1MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemUgKSApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxX1YxNSAqLwotI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMjEpCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfUlNBX1BLQ1MxVjE1X0NSWVBUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfT0FFUCkKICAgICAgICAgaWYoIFBTQV9BTEdfSVNfUlNBX09BRVAoIGFsZyApICkKICAgICAgICAgewogICAgICAgICAgICAgcHNhX3JzYV9vYWVwX3NldF9wYWRkaW5nX21vZGUoIGFsZywgcnNhICk7CkBAIC00MDE0LDcgKzQyNjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemUgKSApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxX1YyMSAqLworI2VuZGlmIC8qIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1JTQV9PQUVQICovCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0YXR1cyA9IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UOwogICAgICAgICB9CkBAIC00MDIyLDEzICs0Mjc2LDE4IEBACiByc2FfZXhpdDoKICAgICAgICAgbWJlZHRsc19yc2FfZnJlZSggcnNhICk7CiAgICAgICAgIG1iZWR0bHNfZnJlZSggcnNhICk7Ci0gICAgICAgIHJldHVybiggc3RhdHVzICk7CiAgICAgfQogICAgIGVsc2UKLSNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpICovCisjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQpIHx8CisgICAgICAgICogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19SU0FfT0FFUCkgKi8KICAgICB7Ci0gICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyAgICAgICAgc3RhdHVzID0gUFNBX0VSUk9SX05PVF9TVVBQT1JURUQ7CiAgICAgfQorCitleGl0OgorICAgIHVubG9ja19zdGF0dXMgPSBwc2FfdW5sb2NrX2tleV9zbG90KCBzbG90ICk7CisKKyAgICByZXR1cm4oICggc3RhdHVzID09IFBTQV9TVUNDRVNTICkgPyB1bmxvY2tfc3RhdHVzIDogc3RhdHVzICk7CiB9CiAKIApAQCAtNDAzOCwxMiArNDI5NywxMyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX2NpcGhlcl9zZXR1cCggcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX29wZXJhdGlvbl90IGNpcGhlcl9vcGVyYXRpb24gKQogeworICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRDsKKyAgICBwc2Ffc3RhdHVzX3QgdW5sb2NrX3N0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOwogICAgIGludCByZXQgPSAwOwotICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfR0VORVJJQ19FUlJPUjsKICAgICBwc2Ffa2V5X3Nsb3RfdCAqc2xvdDsKICAgICBzaXplX3Qga2V5X2JpdHM7CiAgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbyA9IE5VTEw7CkBAIC00MDYwLDcgKzQzMjAsNyBAQAogICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CiAKICAgICAvKiBGZXRjaCBrZXkgbWF0ZXJpYWwgZnJvbSBrZXkgc3RvcmFnZS4gKi8KLSAgICBzdGF0dXMgPSBwc2FfZ2V0X2tleV9mcm9tX3Nsb3QoIGhhbmRsZSwgJnNsb3QsIHVzYWdlLCBhbGcgKTsKKyAgICBzdGF0dXMgPSBwc2FfZ2V0X2FuZF9sb2NrX2tleV9zbG90X3dpdGhfcG9saWN5KCBrZXksICZzbG90LCB1c2FnZSwgYWxnICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIGdvdG8gZXhpdDsKIApAQCAtNDE4NywyMSArNDQ0NywyNCBAQAogICAgIH0KICAgICBlbHNlCiAgICAgICAgIHBzYV9jaXBoZXJfYWJvcnQoIG9wZXJhdGlvbiApOwotICAgIHJldHVybiggc3RhdHVzICk7CisKKyAgICB1bmxvY2tfc3RhdHVzID0gcHNhX3VubG9ja19rZXlfc2xvdCggc2xvdCApOworCisgICAgcmV0dXJuKCAoIHN0YXR1cyA9PSBQU0FfU1VDQ0VTUyApID8gdW5sb2NrX3N0YXR1cyA6IHN0YXR1cyApOwogfQogCiBwc2Ffc3RhdHVzX3QgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCBwc2FfY2lwaGVyX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgKQogewotICAgIHJldHVybiggcHNhX2NpcGhlcl9zZXR1cCggb3BlcmF0aW9uLCBoYW5kbGUsIGFsZywgTUJFRFRMU19FTkNSWVBUICkgKTsKKyAgICByZXR1cm4oIHBzYV9jaXBoZXJfc2V0dXAoIG9wZXJhdGlvbiwga2V5LCBhbGcsIE1CRURUTFNfRU5DUllQVCApICk7CiB9CiAKIHBzYV9zdGF0dXNfdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZyApCiB7Ci0gICAgcmV0dXJuKCBwc2FfY2lwaGVyX3NldHVwKCBvcGVyYXRpb24sIGhhbmRsZSwgYWxnLCBNQkVEVExTX0RFQ1JZUFQgKSApOworICAgIHJldHVybiggcHNhX2NpcGhlcl9zZXR1cCggb3BlcmF0aW9uLCBrZXksIGFsZywgTUJFRFRMU19ERUNSWVBUICkgKTsKIH0KIAogcHNhX3N0YXR1c190IHBzYV9jaXBoZXJfZ2VuZXJhdGVfaXYoIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKQEAgLTQ0NzMsOCArNDczNiw3IEBACiAgICAgaWYoIG9wZXJhdGlvbi0+Y3R4LmNpcGhlci51bnByb2Nlc3NlZF9sZW4gIT0gMCApCiAgICAgewogICAgICAgICBpZiggb3BlcmF0aW9uLT5hbGcgPT0gUFNBX0FMR19FQ0JfTk9fUEFERElORyB8fAotICAgICAgICAgICAgKCBvcGVyYXRpb24tPmFsZyA9PSBQU0FfQUxHX0NCQ19OT19QQURESU5HICYmCi0gICAgICAgICAgICAgIG9wZXJhdGlvbi0+Y3R4LmNpcGhlci5vcGVyYXRpb24gPT0gTUJFRFRMU19FTkNSWVBUICkgKQorICAgICAgICAgICAgb3BlcmF0aW9uLT5hbGcgPT0gUFNBX0FMR19DQkNfTk9fUEFERElORyApCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0YXR1cyA9IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UOwogICAgICAgICAgICAgZ290byBleGl0OwpAQCAtNDU1NCw2ICs0ODE2LDcgQEAKICAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOwogICAgIHVuaW9uCiAgICAgeworICAgICAgICB1bnNpZ25lZCBkdW1teTsgLyogTWFrZSB0aGUgdW5pb24gbm9uLWVtcHR5IGV2ZW4gd2l0aCBubyBzdXBwb3J0ZWQgYWxnb3JpdGhtcy4gKi8KICNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCiAgICAgICAgIG1iZWR0bHNfY2NtX2NvbnRleHQgY2NtOwogI2VuZGlmIC8qIE1CRURUTFNfQ0NNX0MgKi8KQEAgLTQ1NjksNiArNDgzMiw4IEBACiAgICAgdWludDhfdCB0YWdfbGVuZ3RoOwogfSBhZWFkX29wZXJhdGlvbl90OwogCisjZGVmaW5lIEFFQURfT1BFUkFUSU9OX0lOSVQgezAsIDAsIHswfSwgMCwgMCwgMH0KKwogc3RhdGljIHZvaWQgcHNhX2FlYWRfYWJvcnRfaW50ZXJuYWwoIGFlYWRfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiApCiB7CiAgICAgc3dpdGNoKCBvcGVyYXRpb24tPmNvcmVfYWxnICkKQEAgLTQ1ODQsMTAgKzQ4NDksMTIgQEAKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KICAgICB9CisKKyAgICBwc2FfdW5sb2NrX2tleV9zbG90KCBvcGVyYXRpb24tPnNsb3QgKTsKIH0KIAogc3RhdGljIHBzYV9zdGF0dXNfdCBwc2FfYWVhZF9zZXR1cCggYWVhZF9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3VzYWdlX3QgdXNhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnICkKIHsKQEAgLTQ1OTUsNyArNDg2Miw4IEBACiAgICAgc2l6ZV90IGtleV9iaXRzOwogICAgIG1iZWR0bHNfY2lwaGVyX2lkX3QgY2lwaGVyX2lkOwogCi0gICAgc3RhdHVzID0gcHNhX2dldF90cmFuc3BhcmVudF9rZXkoIGhhbmRsZSwgJm9wZXJhdGlvbi0+c2xvdCwgdXNhZ2UsIGFsZyApOworICAgIHN0YXR1cyA9IHBzYV9nZXRfYW5kX2xvY2tfdHJhbnNwYXJlbnRfa2V5X3Nsb3Rfd2l0aF9wb2xpY3koCisgICAgICAgICAgICAgICAgIGtleSwgJm9wZXJhdGlvbi0+c2xvdCwgdXNhZ2UsIGFsZyApOwogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICByZXR1cm4oIHN0YXR1cyApOwogCkBAIC00NjA1LDcgKzQ4NzMsMTAgQEAKICAgICAgICAgbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3BzYSggYWxnLCBvcGVyYXRpb24tPnNsb3QtPmF0dHIudHlwZSwga2V5X2JpdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaXBoZXJfaWQgKTsKICAgICBpZiggb3BlcmF0aW9uLT5jaXBoZXJfaW5mbyA9PSBOVUxMICkKLSAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworICAgIHsKKyAgICAgICAgc3RhdHVzID0gUFNBX0VSUk9SX05PVF9TVVBQT1JURUQ7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CiAKICAgICBzd2l0Y2goIFBTQV9BTEdfQUVBRF9XSVRIX1RBR19MRU5HVEgoIGFsZywgMCApICkKICAgICB7CkBAIC00NjE3LDcgKzQ4ODgsMTAgQEAKICAgICAgICAgICAgICAqIFRoZSBjYWxsIHRvIG1iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZyBvcgogICAgICAgICAgICAgICogbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0IHdpbGwgdmFsaWRhdGUgdGhlIHRhZyBsZW5ndGguICovCiAgICAgICAgICAgICBpZiggUFNBX0JMT0NLX0NJUEhFUl9CTE9DS19TSVpFKCBvcGVyYXRpb24tPnNsb3QtPmF0dHIudHlwZSApICE9IDE2ICkKLSAgICAgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQ7CisgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbWJlZHRsc19jY21faW5pdCggJm9wZXJhdGlvbi0+Y3R4LmNjbSApOwogICAgICAgICAgICAgc3RhdHVzID0gbWJlZHRsc190b19wc2FfZXJyb3IoCiAgICAgICAgICAgICAgICAgbWJlZHRsc19jY21fc2V0a2V5KCAmb3BlcmF0aW9uLT5jdHguY2NtLCBjaXBoZXJfaWQsCkBAIC00NjM2LDcgKzQ5MTAsMTAgQEAKICAgICAgICAgICAgICAqIFRoZSBjYWxsIHRvIG1iZWR0bHNfZ2NtX2NyeXB0X2FuZF90YWcgb3IKICAgICAgICAgICAgICAqIG1iZWR0bHNfZ2NtX2F1dGhfZGVjcnlwdCB3aWxsIHZhbGlkYXRlIHRoZSB0YWcgbGVuZ3RoLiAqLwogICAgICAgICAgICAgaWYoIFBTQV9CTE9DS19DSVBIRVJfQkxPQ0tfU0laRSggb3BlcmF0aW9uLT5zbG90LT5hdHRyLnR5cGUgKSAhPSAxNiApCi0gICAgICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCApOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UOworICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1iZWR0bHNfZ2NtX2luaXQoICZvcGVyYXRpb24tPmN0eC5nY20gKTsKICAgICAgICAgICAgIHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKAogICAgICAgICAgICAgICAgIG1iZWR0bHNfZ2NtX3NldGtleSggJm9wZXJhdGlvbi0+Y3R4LmdjbSwgY2lwaGVyX2lkLApAQCAtNDY1Myw3ICs0OTMwLDEwIEBACiAgICAgICAgICAgICBvcGVyYXRpb24tPmZ1bGxfdGFnX2xlbmd0aCA9IDE2OwogICAgICAgICAgICAgLyogV2Ugb25seSBzdXBwb3J0IHRoZSBkZWZhdWx0IHRhZyBsZW5ndGguICovCiAgICAgICAgICAgICBpZiggYWxnICE9IFBTQV9BTEdfQ0hBQ0hBMjBfUE9MWTEzMDUgKQotICAgICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtYmVkdGxzX2NoYWNoYXBvbHlfaW5pdCggJm9wZXJhdGlvbi0+Y3R4LmNoYWNoYXBvbHkgKTsKICAgICAgICAgICAgIHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKAogICAgICAgICAgICAgICAgIG1iZWR0bHNfY2hhY2hhcG9seV9zZXRrZXkoICZvcGVyYXRpb24tPmN0eC5jaGFjaGFwb2x5LApAQCAtNDY2NCw3ICs0OTQ0LDggQEAKICNlbmRpZiAvKiBNQkVEVExTX0NIQUNIQVBPTFlfQyAqLwogCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisgICAgICAgICAgICBzdGF0dXMgPSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKICAgICB9CiAKICAgICBpZiggUFNBX0FFQURfVEFHX0xFTkdUSCggYWxnICkgPiBvcGVyYXRpb24tPmZ1bGxfdGFnX2xlbmd0aCApCkBAIC00NjgxLDcgKzQ5NjIsNyBAQAogICAgIHJldHVybiggc3RhdHVzICk7CiB9CiAKLXBzYV9zdGF0dXNfdCBwc2FfYWVhZF9lbmNyeXB0KCBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKK3BzYV9zdGF0dXNfdCBwc2FfYWVhZF9lbmNyeXB0KCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpub25jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbm9uY2VfbGVuZ3RoLApAQCAtNDY5NCwxMiArNDk3NSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqY2lwaGVydGV4dF9sZW5ndGggKQogewogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7Ci0gICAgYWVhZF9vcGVyYXRpb25fdCBvcGVyYXRpb247CisgICAgYWVhZF9vcGVyYXRpb25fdCBvcGVyYXRpb24gPSBBRUFEX09QRVJBVElPTl9JTklUOwogICAgIHVpbnQ4X3QgKnRhZzsKIAogICAgICpjaXBoZXJ0ZXh0X2xlbmd0aCA9IDA7CiAKLSAgICBzdGF0dXMgPSBwc2FfYWVhZF9zZXR1cCggJm9wZXJhdGlvbiwgaGFuZGxlLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIGFsZyApOworICAgIHN0YXR1cyA9IHBzYV9hZWFkX3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgYWxnICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIHJldHVybiggc3RhdHVzICk7CiAKQEAgLTQ3OTUsNyArNTA3Niw3IEBACiAgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOwogfQogCi1wc2Ffc3RhdHVzX3QgcHNhX2FlYWRfZGVjcnlwdCggcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCitwc2Ffc3RhdHVzX3QgcHNhX2FlYWRfZGVjcnlwdCggbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqbm9uY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5vbmNlX2xlbmd0aCwKQEAgLTQ4MDgsMTIgKzUwODksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnBsYWludGV4dF9sZW5ndGggKQogewogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7Ci0gICAgYWVhZF9vcGVyYXRpb25fdCBvcGVyYXRpb247CisgICAgYWVhZF9vcGVyYXRpb25fdCBvcGVyYXRpb24gPSBBRUFEX09QRVJBVElPTl9JTklUOwogICAgIGNvbnN0IHVpbnQ4X3QgKnRhZyA9IE5VTEw7CiAKICAgICAqcGxhaW50ZXh0X2xlbmd0aCA9IDA7CiAKLSAgICBzdGF0dXMgPSBwc2FfYWVhZF9zZXR1cCggJm9wZXJhdGlvbiwgaGFuZGxlLCBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIGFsZyApOworICAgIHN0YXR1cyA9IHBzYV9hZWFkX3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgYWxnICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIHJldHVybiggc3RhdHVzICk7CiAKQEAgLTQ4OTEsNiArNTE3MiwxMiBAQAogLyogR2VuZXJhdG9ycyAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0hLREYpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1RMUzEyX1BSRikgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfVExTMTJfUFNLX1RPX01TKQorI2RlZmluZSBBVF9MRUFTVF9PTkVfQlVJTFRJTl9LREYKKyNlbmRpZgorCiAjZGVmaW5lIEhLREZfU1RBVEVfSU5JVCAwIC8qIG5vIGlucHV0IHlldCAqLwogI2RlZmluZSBIS0RGX1NUQVRFX1NUQVJURUQgMSAvKiBnb3Qgc2FsdCAqLwogI2RlZmluZSBIS0RGX1NUQVRFX0tFWUVEIDIgLyogZ290IGtleSAqLwpAQCAtNDkwNSw3ICs1MTkyLDYgQEAKICAgICAgICAgcmV0dXJuKCBvcGVyYXRpb24tPmFsZyApOwogfQogCi0KIHBzYV9zdGF0dXNfdCBwc2Ffa2V5X2Rlcml2YXRpb25fYWJvcnQoIHBzYV9rZXlfZGVyaXZhdGlvbl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uICkKIHsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gUFNBX1NVQ0NFU1M7CkBAIC00OTE3LDEzICs1MjAzLDE3IEBACiAgICAgICAgICAqIG5vdGhpbmcgdG8gZG8uICovCiAgICAgfQogICAgIGVsc2UKLSNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0hLREYpCiAgICAgaWYoIFBTQV9BTEdfSVNfSEtERigga2RmX2FsZyApICkKICAgICB7CiAgICAgICAgIG1iZWR0bHNfZnJlZSggb3BlcmF0aW9uLT5jdHguaGtkZi5pbmZvICk7CiAgICAgICAgIHN0YXR1cyA9IHBzYV9obWFjX2Fib3J0X2ludGVybmFsKCAmb3BlcmF0aW9uLT5jdHguaGtkZi5obWFjICk7CiAgICAgfQotICAgIGVsc2UgaWYoIFBTQV9BTEdfSVNfVExTMTJfUFJGKCBrZGZfYWxnICkgfHwKKyAgICBlbHNlCisjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19IS0RGICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19UTFMxMl9QUkYpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1RMUzEyX1BTS19UT19NUykKKyAgICBpZiggUFNBX0FMR19JU19UTFMxMl9QUkYoIGtkZl9hbGcgKSB8fAogICAgICAgICAgICAgIC8qIFRMUy0xLjIgUFNLLXRvLU1TIEtERiB1c2VzIHRoZSBzYW1lIGNvcmUgYXMgVExTLTEuMiBQUkYgKi8KICAgICAgICAgICAgICBQU0FfQUxHX0lTX1RMUzEyX1BTS19UT19NUygga2RmX2FsZyApICkKICAgICB7CkBAIC00OTQ3LDcgKzUyMzcsOCBAQAogICAgICAgICAgKiBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoKSBpbiB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24uICovCiAgICAgfQogICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX01EX0MgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1RMUzEyX1BSRikgfHwKKyAgICAgICAgKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1RMUzEyX1BTS19UT19NUykgKi8KICAgICB7CiAgICAgICAgIHN0YXR1cyA9IFBTQV9FUlJPUl9CQURfU1RBVEU7CiAgICAgfQpAQCAtNDk3OSw3ICs1MjcwLDcgQEAKICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CiB9CiAKLSNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0hLREYpCiAvKiBSZWFkIHNvbWUgYnl0ZXMgZnJvbSBhbiBIS0RGLWJhc2VkIG9wZXJhdGlvbi4gVGhpcyBwZXJmb3JtcyBhIGNodW5rCiAgKiBvZiB0aGUgZXhwYW5kIHBoYXNlIG9mIHRoZSBIS0RGIGFsZ29yaXRobS4gKi8KIHN0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX2tleV9kZXJpdmF0aW9uX2hrZGZfcmVhZCggcHNhX2hrZGZfa2V5X2Rlcml2YXRpb25fdCAqaGtkZiwKQEAgLTUwNDgsNyArNTMzOSwxMCBAQAogCiAgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOwogfQorI2VuZGlmIC8qIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0hLREYgKi8KIAorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfVExTMTJfUFJGKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19UTFMxMl9QU0tfVE9fTVMpCiBzdGF0aWMgcHNhX3N0YXR1c190IHBzYV9rZXlfZGVyaXZhdGlvbl90bHMxMl9wcmZfZ2VuZXJhdGVfbmV4dF9ibG9jaygKICAgICBwc2FfdGxzMTJfcHJmX2tleV9kZXJpdmF0aW9uX3QgKnRsczEyX3ByZiwKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnICkKQEAgLTUxOTUsNyArNTQ4OSw4IEBACiAKICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CiB9Ci0jZW5kaWYgLyogTUJFRFRMU19NRF9DICovCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfVExTMTJfUFJGIHx8CisgICAgICAgICogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfVExTMTJfUFNLX1RPX01TICovCiAKIHBzYV9zdGF0dXNfdCBwc2Ffa2V5X2Rlcml2YXRpb25fb3V0cHV0X2J5dGVzKAogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLApAQCAtNTIzMSw3ICs1NTI2LDcgQEAKICAgICB9CiAgICAgb3BlcmF0aW9uLT5jYXBhY2l0eSAtPSBvdXRwdXRfbGVuZ3RoOwogCi0jaWYgZGVmaW5lZChNQkVEVExTX01EX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19IS0RGKQogICAgIGlmKCBQU0FfQUxHX0lTX0hLREYoIGtkZl9hbGcgKSApCiAgICAgewogICAgICAgICBwc2FfYWxnb3JpdGhtX3QgaGFzaF9hbGcgPSBQU0FfQUxHX0hLREZfR0VUX0hBU0goIGtkZl9hbGcgKTsKQEAgLTUyMzksMTUgKzU1MzQsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgb3V0cHV0X2xlbmd0aCApOwogICAgIH0KICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfSEtERiAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfVExTMTJfUFJGKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19UTFMxMl9QU0tfVE9fTVMpCiAgICAgaWYoIFBTQV9BTEdfSVNfVExTMTJfUFJGKCBrZGZfYWxnICkgfHwKLSAgICAgICAgICAgICBQU0FfQUxHX0lTX1RMUzEyX1BTS19UT19NUygga2RmX2FsZyApICkKKyAgICAgICAgUFNBX0FMR19JU19UTFMxMl9QU0tfVE9fTVMoIGtkZl9hbGcgKSApCiAgICAgewogICAgICAgICBzdGF0dXMgPSBwc2Ffa2V5X2Rlcml2YXRpb25fdGxzMTJfcHJmX3JlYWQoICZvcGVyYXRpb24tPmN0eC50bHMxMl9wcmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtkZl9hbGcsIG91dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2xlbmd0aCApOwogICAgIH0KICAgICBlbHNlCi0jZW5kaWYgLyogTUJFRFRMU19NRF9DICovCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfVExTMTJfUFJGIHx8CisgICAgICAgICogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfVExTMTJfUFNLX1RPX01TICovCiAgICAgewogICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9CQURfU1RBVEUgKTsKICAgICB9CkBAIC01MzEyLDEyICs1NjExLDE0IEBACiAKIHBzYV9zdGF0dXNfdCBwc2Ffa2V5X2Rlcml2YXRpb25fb3V0cHV0X2tleSggY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgKmhhbmRsZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCAqa2V5ICkKIHsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwogICAgIHBzYV9rZXlfc2xvdF90ICpzbG90ID0gTlVMTDsKICAgICBwc2Ffc2VfZHJ2X3RhYmxlX2VudHJ5X3QgKmRyaXZlciA9IE5VTEw7CiAKKyAgICAqa2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CisKICAgICAvKiBSZWplY3QgYW55IGF0dGVtcHQgdG8gY3JlYXRlIGEgemVyby1sZW5ndGgga2V5IHNvIHRoYXQgd2UgZG9uJ3QKICAgICAgKiByaXNrIHRyaXBwaW5nIHVwIGxhdGVyLCBlLmcuIG9uIGEgbWFsbG9jKDApIHRoYXQgcmV0dXJucyBOVUxMLiAqLwogICAgIGlmKCBwc2FfZ2V0X2tleV9iaXRzKCBhdHRyaWJ1dGVzICkgPT0gMCApCkBAIC01MzI2LDggKzU2MjcsOCBAQAogICAgIGlmKCAhIG9wZXJhdGlvbi0+Y2FuX291dHB1dF9rZXkgKQogICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICk7CiAKLSAgICBzdGF0dXMgPSBwc2Ffc3RhcnRfa2V5X2NyZWF0aW9uKCBQU0FfS0VZX0NSRUFUSU9OX0RFUklWRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLCBoYW5kbGUsICZzbG90LCAmZHJpdmVyICk7CisgICAgc3RhdHVzID0gcHNhX3N0YXJ0X2tleV9jcmVhdGlvbiggUFNBX0tFWV9DUkVBVElPTl9ERVJJVkUsIGF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNsb3QsICZkcml2ZXIgKTsKICNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19TRV9DKQogICAgIGlmKCBkcml2ZXIgIT0gTlVMTCApCiAgICAgewpAQCAtNTM0MiwxMiArNTY0MywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiApOwogICAgIH0KICAgICBpZiggc3RhdHVzID09IFBTQV9TVUNDRVNTICkKLSAgICAgICAgc3RhdHVzID0gcHNhX2ZpbmlzaF9rZXlfY3JlYXRpb24oIHNsb3QsIGRyaXZlciApOworICAgICAgICBzdGF0dXMgPSBwc2FfZmluaXNoX2tleV9jcmVhdGlvbiggc2xvdCwgZHJpdmVyLCBrZXkgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKLSAgICB7CiAgICAgICAgIHBzYV9mYWlsX2tleV9jcmVhdGlvbiggc2xvdCwgZHJpdmVyICk7Ci0gICAgICAgICpoYW5kbGUgPSAwOwotICAgIH0KKwogICAgIHJldHVybiggc3RhdHVzICk7CiB9CiAKQEAgLTUzNTcsMTkgKzU2NTYsMzYgQEAKIC8qIEtleSBkZXJpdmF0aW9uICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmZGVmIEFUX0xFQVNUX09ORV9CVUlMVElOX0tERgogc3RhdGljIHBzYV9zdGF0dXNfdCBwc2Ffa2V5X2Rlcml2YXRpb25fc2V0dXBfa2RmKAogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAogICAgIHBzYV9hbGdvcml0aG1fdCBrZGZfYWxnICkKIHsKKyAgICBpbnQgaXNfa2RmX2FsZ19zdXBwb3J0ZWQ7CisKICAgICAvKiBNYWtlIHN1cmUgdGhhdCBvcGVyYXRpb24tPmN0eCBpcyBwcm9wZXJseSB6ZXJvLWluaXRpYWxpc2VkLiAoTWFjcm8KICAgICAgKiBpbml0aWFsaXNlcnMgZm9yIHRoaXMgdW5pb24gbGVhdmUgc29tZSBieXRlcyB1bnNwZWNpZmllZC4pICovCiAgICAgbWVtc2V0KCAmb3BlcmF0aW9uLT5jdHgsIDAsIHNpemVvZiggb3BlcmF0aW9uLT5jdHggKSApOwogCiAgICAgLyogTWFrZSBzdXJlIHRoYXQga2RmX2FsZyBpcyBhIHN1cHBvcnRlZCBrZXkgZGVyaXZhdGlvbiBhbGdvcml0aG0uICovCi0jaWYgZGVmaW5lZChNQkVEVExTX01EX0MpCi0gICAgaWYoIFBTQV9BTEdfSVNfSEtERigga2RmX2FsZyApIHx8Ci0gICAgICAgIFBTQV9BTEdfSVNfVExTMTJfUFJGKCBrZGZfYWxnICkgfHwKLSAgICAgICAgUFNBX0FMR19JU19UTFMxMl9QU0tfVE9fTVMoIGtkZl9hbGcgKSApCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19IS0RGKQorICAgIGlmKCBQU0FfQUxHX0lTX0hLREYoIGtkZl9hbGcgKSApCisgICAgICAgIGlzX2tkZl9hbGdfc3VwcG9ydGVkID0gMTsKKyAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1RMUzEyX1BSRikKKyAgICBpZiggUFNBX0FMR19JU19UTFMxMl9QUkYoIGtkZl9hbGcgKSApCisgICAgICAgIGlzX2tkZl9hbGdfc3VwcG9ydGVkID0gMTsKKyAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1RMUzEyX1BTS19UT19NUykKKyAgICBpZiggUFNBX0FMR19JU19UTFMxMl9QU0tfVE9fTVMoIGtkZl9hbGcgKSApCisgICAgICAgIGlzX2tkZl9hbGdfc3VwcG9ydGVkID0gMTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICBpc19rZGZfYWxnX3N1cHBvcnRlZCA9IDA7CisKKyAgICBpZiggaXNfa2RmX2FsZ19zdXBwb3J0ZWQgKQogICAgIHsKICAgICAgICAgcHNhX2FsZ29yaXRobV90IGhhc2hfYWxnID0gUFNBX0FMR19IS0RGX0dFVF9IQVNIKCBrZGZfYWxnICk7CiAgICAgICAgIHNpemVfdCBoYXNoX3NpemUgPSBQU0FfSEFTSF9TSVpFKCBoYXNoX2FsZyApOwpAQCAtNTM4NCwxMCArNTcwMCwxMCBAQAogICAgICAgICBvcGVyYXRpb24tPmNhcGFjaXR5ID0gMjU1ICogaGFzaF9zaXplOwogICAgICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CiAgICAgfQotI2VuZGlmIC8qIE1CRURUTFNfTURfQyAqLwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworCisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOwogfQorI2VuZGlmIC8qIEFUX0xFQVNUX09ORV9CVUlMVElOX0tERiAqLwogCiBwc2Ffc3RhdHVzX3QgcHNhX2tleV9kZXJpdmF0aW9uX3NldHVwKCBwc2Ffa2V5X2Rlcml2YXRpb25fb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgKQpAQCAtNTM5OSw2ICs1NzE1LDcgQEAKIAogICAgIGlmKCBQU0FfQUxHX0lTX1JBV19LRVlfQUdSRUVNRU5UKCBhbGcgKSApCiAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKKyNpZmRlZiBBVF9MRUFTVF9PTkVfQlVJTFRJTl9LREYKICAgICBlbHNlIGlmKCBQU0FfQUxHX0lTX0tFWV9BR1JFRU1FTlQoIGFsZyApICkKICAgICB7CiAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBrZGZfYWxnID0gUFNBX0FMR19LRVlfQUdSRUVNRU5UX0dFVF9LREYoIGFsZyApOwpAQCAtNTQwOCw2ICs1NzI1LDcgQEAKICAgICB7CiAgICAgICAgIHN0YXR1cyA9IHBzYV9rZXlfZGVyaXZhdGlvbl9zZXR1cF9rZGYoIG9wZXJhdGlvbiwgYWxnICk7CiAgICAgfQorI2VuZGlmCiAgICAgZWxzZQogICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CiAKQEAgLTU0MTYsNyArNTczNCw3IEBACiAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIH0KIAotI2lmIGRlZmluZWQoTUJFRFRMU19NRF9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfSEtERikKIHN0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX2hrZGZfaW5wdXQoIHBzYV9oa2RmX2tleV9kZXJpdmF0aW9uX3QgKmhrZGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgaGFzaF9hbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fc3RlcF90IHN0ZXAsCkBAIC01NDgxLDcgKzU3OTksMTAgQEAKICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKICAgICB9CiB9CisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfSEtERiAqLwogCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19UTFMxMl9QUkYpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1RMUzEyX1BTS19UT19NUykKIHN0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX3RsczEyX3ByZl9zZXRfc2VlZCggcHNhX3RsczEyX3ByZl9rZXlfZGVyaXZhdGlvbl90ICpwcmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhX2xlbmd0aCApCkBAIC01NTIyLDQxICs1ODQzLDYgQEAKICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CiB9CiAKLXN0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX3RsczEyX3ByZl9wc2tfdG9fbXNfc2V0X2tleSgKLSAgICBwc2FfdGxzMTJfcHJmX2tleV9kZXJpdmF0aW9uX3QgKnByZiwKLSAgICBwc2FfYWxnb3JpdGhtX3QgaGFzaF9hbGcsCi0gICAgY29uc3QgdWludDhfdCAqZGF0YSwKLSAgICBzaXplX3QgZGF0YV9sZW5ndGggKQotewotICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7Ci0gICAgdWludDhfdCBwbXNbIDQgKyAyICogUFNBX0FMR19UTFMxMl9QU0tfVE9fTVNfTUFYX1BTS19MRU4gXTsKLSAgICB1aW50OF90ICpjdXIgPSBwbXM7Ci0KLSAgICBpZiggZGF0YV9sZW5ndGggPiBQU0FfQUxHX1RMUzEyX1BTS19UT19NU19NQVhfUFNLX0xFTiApCi0gICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKLQotICAgIC8qIFF1b3RpbmcgUkZDIDQyNzksIFNlY3Rpb24gMjoKLSAgICAgKgotICAgICAqIFRoZSBwcmVtYXN0ZXIgc2VjcmV0IGlzIGZvcm1lZCBhcyBmb2xsb3dzOiBpZiB0aGUgUFNLIGlzIE4gb2N0ZXRzCi0gICAgICogbG9uZywgY29uY2F0ZW5hdGUgYSB1aW50MTYgd2l0aCB0aGUgdmFsdWUgTiwgTiB6ZXJvIG9jdGV0cywgYSBzZWNvbmQKLSAgICAgKiB1aW50MTYgd2l0aCB0aGUgdmFsdWUgTiwgYW5kIHRoZSBQU0sgaXRzZWxmLgotICAgICAqLwotCi0gICAgKmN1cisrID0gKCBkYXRhX2xlbmd0aCA+PiA4ICkgJiAweGZmOwotICAgICpjdXIrKyA9ICggZGF0YV9sZW5ndGggPj4gMCApICYgMHhmZjsKLSAgICBtZW1zZXQoIGN1ciwgMCwgZGF0YV9sZW5ndGggKTsKLSAgICBjdXIgKz0gZGF0YV9sZW5ndGg7Ci0gICAgKmN1cisrID0gcG1zWzBdOwotICAgICpjdXIrKyA9IHBtc1sxXTsKLSAgICBtZW1jcHkoIGN1ciwgZGF0YSwgZGF0YV9sZW5ndGggKTsKLSAgICBjdXIgKz0gZGF0YV9sZW5ndGg7Ci0KLSAgICBzdGF0dXMgPSBwc2FfdGxzMTJfcHJmX3NldF9rZXkoIHByZiwgaGFzaF9hbGcsIHBtcywgY3VyIC0gcG1zICk7Ci0KLSAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoIHBtcywgc2l6ZW9mKCBwbXMgKSApOwotICAgIHJldHVybiggc3RhdHVzICk7Ci19Ci0KIHN0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX3RsczEyX3ByZl9zZXRfbGFiZWwoIHBzYV90bHMxMl9wcmZfa2V5X2Rlcml2YXRpb25fdCAqcHJmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhX2xlbmd0aCApCkBAIC01NTk3LDYgKzU4ODMsNDQgQEAKICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKICAgICB9CiB9CisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfVExTMTJfUFJGKSB8fAorICAgICAgICAqIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1RMUzEyX1BTS19UT19NUyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19UTFMxMl9QU0tfVE9fTVMpCitzdGF0aWMgcHNhX3N0YXR1c190IHBzYV90bHMxMl9wcmZfcHNrX3RvX21zX3NldF9rZXkoCisgICAgcHNhX3RsczEyX3ByZl9rZXlfZGVyaXZhdGlvbl90ICpwcmYsCisgICAgcHNhX2FsZ29yaXRobV90IGhhc2hfYWxnLAorICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCisgICAgc2l6ZV90IGRhdGFfbGVuZ3RoICkKK3sKKyAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOworICAgIHVpbnQ4X3QgcG1zWyA0ICsgMiAqIFBTQV9BTEdfVExTMTJfUFNLX1RPX01TX01BWF9QU0tfTEVOIF07CisgICAgdWludDhfdCAqY3VyID0gcG1zOworCisgICAgaWYoIGRhdGFfbGVuZ3RoID4gUFNBX0FMR19UTFMxMl9QU0tfVE9fTVNfTUFYX1BTS19MRU4gKQorICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CisKKyAgICAvKiBRdW90aW5nIFJGQyA0Mjc5LCBTZWN0aW9uIDI6CisgICAgICoKKyAgICAgKiBUaGUgcHJlbWFzdGVyIHNlY3JldCBpcyBmb3JtZWQgYXMgZm9sbG93czogaWYgdGhlIFBTSyBpcyBOIG9jdGV0cworICAgICAqIGxvbmcsIGNvbmNhdGVuYXRlIGEgdWludDE2IHdpdGggdGhlIHZhbHVlIE4sIE4gemVybyBvY3RldHMsIGEgc2Vjb25kCisgICAgICogdWludDE2IHdpdGggdGhlIHZhbHVlIE4sIGFuZCB0aGUgUFNLIGl0c2VsZi4KKyAgICAgKi8KKworICAgICpjdXIrKyA9ICggZGF0YV9sZW5ndGggPj4gOCApICYgMHhmZjsKKyAgICAqY3VyKysgPSAoIGRhdGFfbGVuZ3RoID4+IDAgKSAmIDB4ZmY7CisgICAgbWVtc2V0KCBjdXIsIDAsIGRhdGFfbGVuZ3RoICk7CisgICAgY3VyICs9IGRhdGFfbGVuZ3RoOworICAgICpjdXIrKyA9IHBtc1swXTsKKyAgICAqY3VyKysgPSBwbXNbMV07CisgICAgbWVtY3B5KCBjdXIsIGRhdGEsIGRhdGFfbGVuZ3RoICk7CisgICAgY3VyICs9IGRhdGFfbGVuZ3RoOworCisgICAgc3RhdHVzID0gcHNhX3RsczEyX3ByZl9zZXRfa2V5KCBwcmYsIGhhc2hfYWxnLCBwbXMsIGN1ciAtIHBtcyApOworCisgICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKCBwbXMsIHNpemVvZiggcG1zICkgKTsKKyAgICByZXR1cm4oIHN0YXR1cyApOworfQogCiBzdGF0aWMgcHNhX3N0YXR1c190IHBzYV90bHMxMl9wcmZfcHNrX3RvX21zX2lucHV0KAogICAgIHBzYV90bHMxMl9wcmZfa2V5X2Rlcml2YXRpb25fdCAqcHJmLApAQCAtNTYxMyw3ICs1OTM3LDcgQEAKIAogICAgIHJldHVybiggcHNhX3RsczEyX3ByZl9pbnB1dCggcHJmLCBoYXNoX2FsZywgc3RlcCwgZGF0YSwgZGF0YV9sZW5ndGggKSApOwogfQotI2VuZGlmIC8qIE1CRURUTFNfTURfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX1RMUzEyX1BTS19UT19NUyAqLwogCiAvKiogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4ga2V5IHR5cGUgaXMgYWNjZXB0YWJsZSBmb3IgdGhlIGdpdmVuCiAgKiBpbnB1dCBzdGVwIG9mIGEga2V5IGRlcml2YXRpb24uCkBAIC01NjYzLDI3ICs1OTg3LDMzIEBACiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIGdvdG8gZXhpdDsKIAotI2lmIGRlZmluZWQoTUJFRFRMU19NRF9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfSEtERikKICAgICBpZiggUFNBX0FMR19JU19IS0RGKCBrZGZfYWxnICkgKQogICAgIHsKICAgICAgICAgc3RhdHVzID0gcHNhX2hrZGZfaW5wdXQoICZvcGVyYXRpb24tPmN0eC5oa2RmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0FMR19IS0RGX0dFVF9IQVNIKCBrZGZfYWxnICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwLCBkYXRhLCBkYXRhX2xlbmd0aCApOwogICAgIH0KLSAgICBlbHNlIGlmKCBQU0FfQUxHX0lTX1RMUzEyX1BSRigga2RmX2FsZyApICkKKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfSEtERiAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfVExTMTJfUFJGKQorICAgIGlmKCBQU0FfQUxHX0lTX1RMUzEyX1BSRigga2RmX2FsZyApICkKICAgICB7CiAgICAgICAgIHN0YXR1cyA9IHBzYV90bHMxMl9wcmZfaW5wdXQoICZvcGVyYXRpb24tPmN0eC50bHMxMl9wcmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9BTEdfSEtERl9HRVRfSEFTSCgga2RmX2FsZyApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwLCBkYXRhLCBkYXRhX2xlbmd0aCApOwogICAgIH0KLSAgICBlbHNlIGlmKCBQU0FfQUxHX0lTX1RMUzEyX1BTS19UT19NUygga2RmX2FsZyApICkKKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfVExTMTJfUFJGICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19UTFMxMl9QU0tfVE9fTVMpCisgICAgaWYoIFBTQV9BTEdfSVNfVExTMTJfUFNLX1RPX01TKCBrZGZfYWxnICkgKQogICAgIHsKICAgICAgICAgc3RhdHVzID0gcHNhX3RsczEyX3ByZl9wc2tfdG9fbXNfaW5wdXQoICZvcGVyYXRpb24tPmN0eC50bHMxMl9wcmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfQUxHX0hLREZfR0VUX0hBU0goIGtkZl9hbGcgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXAsIGRhdGEsIGRhdGFfbGVuZ3RoICk7CiAgICAgfQogICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX01EX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19UTFMxMl9QU0tfVE9fTVMgKi8KICAgICB7CiAgICAgICAgIC8qIFRoaXMgY2FuJ3QgaGFwcGVuIHVubGVzcyB0aGUgb3BlcmF0aW9uIG9iamVjdCB3YXMgbm90IGluaXRpYWxpemVkICovCiAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JBRF9TVEFURSApOwpAQCAtNTcwOSwxNCArNjAzOSwxNCBAQAogcHNhX3N0YXR1c190IHBzYV9rZXlfZGVyaXZhdGlvbl9pbnB1dF9rZXkoCiAgICAgcHNhX2tleV9kZXJpdmF0aW9uX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCiAgICAgcHNhX2tleV9kZXJpdmF0aW9uX3N0ZXBfdCBzdGVwLAotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlICkKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgKQogeworICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRDsKKyAgICBwc2Ffc3RhdHVzX3QgdW5sb2NrX3N0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOwogICAgIHBzYV9rZXlfc2xvdF90ICpzbG90OwotICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAKLSAgICBzdGF0dXMgPSBwc2FfZ2V0X3RyYW5zcGFyZW50X2tleSggaGFuZGxlLCAmc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0tFWV9VU0FHRV9ERVJJVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi0+YWxnICk7CisgICAgc3RhdHVzID0gcHNhX2dldF9hbmRfbG9ja190cmFuc3BhcmVudF9rZXlfc2xvdF93aXRoX3BvbGljeSgKKyAgICAgICAgICAgICAgICAga2V5LCAmc2xvdCwgUFNBX0tFWV9VU0FHRV9ERVJJVkUsIG9wZXJhdGlvbi0+YWxnICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgewogICAgICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fYWJvcnQoIG9wZXJhdGlvbiApOwpAQCAtNTcyOCwxMCArNjA1OCwxNCBAQAogICAgIGlmKCBzdGVwID09IFBTQV9LRVlfREVSSVZBVElPTl9JTlBVVF9TRUNSRVQgKQogICAgICAgICBvcGVyYXRpb24tPmNhbl9vdXRwdXRfa2V5ID0gMTsKIAotICAgIHJldHVybiggcHNhX2tleV9kZXJpdmF0aW9uX2lucHV0X2ludGVybmFsKCBvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXAsIHNsb3QtPmF0dHIudHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuYnl0ZXMgKSApOworICAgIHN0YXR1cyA9IHBzYV9rZXlfZGVyaXZhdGlvbl9pbnB1dF9pbnRlcm5hbCggb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcCwgc2xvdC0+YXR0ci50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzICk7CisKKyAgICB1bmxvY2tfc3RhdHVzID0gcHNhX3VubG9ja19rZXlfc2xvdCggc2xvdCApOworCisgICAgcmV0dXJuKCAoIHN0YXR1cyA9PSBQU0FfU1VDQ0VTUyApID8gdW5sb2NrX3N0YXR1cyA6IHN0YXR1cyApOwogfQogCiAKQEAgLTU3NDAsNyArNjA3NCw3IEBACiAvKiBLZXkgYWdyZWVtZW50ICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19FQ0RIKQogc3RhdGljIHBzYV9zdGF0dXNfdCBwc2Ffa2V5X2FncmVlbWVudF9lY2RoKCBjb25zdCB1aW50OF90ICpwZWVyX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBlZXJfa2V5X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3Bfa2V5cGFpciAqb3VyX2tleSwKQEAgLTU3OTEsNyArNjEyNSw3IEBACiAKICAgICByZXR1cm4oIHN0YXR1cyApOwogfQotI2VuZGlmIC8qIE1CRURUTFNfRUNESF9DICovCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfRUNESCAqLwogCiAjZGVmaW5lIFBTQV9LRVlfQUdSRUVNRU5UX01BWF9TSEFSRURfU0VDUkVUX1NJWkUgTUJFRFRMU19FQ1BfTUFYX0JZVEVTCiAKQEAgLTU4MDUsNyArNjEzOSw3IEBACiB7CiAgICAgc3dpdGNoKCBhbGcgKQogICAgIHsKLSNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfRUNESCkKICAgICAgICAgY2FzZSBQU0FfQUxHX0VDREg6CiAgICAgICAgICAgICBpZiggISBQU0FfS0VZX1RZUEVfSVNfRUNDX0tFWV9QQUlSKCBwcml2YXRlX2tleS0+YXR0ci50eXBlICkgKQogICAgICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKQEAgLTU4MjQsNyArNjE1OCw3IEBACiAgICAgICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoIGVjcCApOwogICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBlY3AgKTsKICAgICAgICAgICAgIHJldHVybiggc3RhdHVzICk7Ci0jZW5kaWYgLyogTUJFRFRMU19FQ0RIX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19FQ0RIICovCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAodm9pZCkgcHJpdmF0ZV9rZXk7CiAgICAgICAgICAgICAodm9pZCkgcGVlcl9rZXk7CkBAIC01ODY4LDcgKzYyMDIsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0tFWV9UWVBFX0RFUklWRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZF9zZWNyZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfc2VjcmV0X2xlbmd0aCApOwotCiBleGl0OgogICAgIG1iZWR0bHNfcGxhdGZvcm1femVyb2l6ZSggc2hhcmVkX3NlY3JldCwgc2hhcmVkX3NlY3JldF9sZW5ndGggKTsKICAgICByZXR1cm4oIHN0YXR1cyApOwpAQCAtNTg3NiwxNiArNjIwOSwxOCBAQAogCiBwc2Ffc3RhdHVzX3QgcHNhX2tleV9kZXJpdmF0aW9uX2tleV9hZ3JlZW1lbnQoIHBzYV9rZXlfZGVyaXZhdGlvbl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fc3RlcF90IHN0ZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgcHJpdmF0ZV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHByaXZhdGVfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwZWVyX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBlZXJfa2V5X2xlbmd0aCApCiB7CisgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOworICAgIHBzYV9zdGF0dXNfdCB1bmxvY2tfc3RhdHVzID0gUFNBX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQ7CiAgICAgcHNhX2tleV9zbG90X3QgKnNsb3Q7Ci0gICAgcHNhX3N0YXR1c190IHN0YXR1czsKKwogICAgIGlmKCAhIFBTQV9BTEdfSVNfS0VZX0FHUkVFTUVOVCggb3BlcmF0aW9uLT5hbGcgKSApCiAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKLSAgICBzdGF0dXMgPSBwc2FfZ2V0X3RyYW5zcGFyZW50X2tleSggcHJpdmF0ZV9rZXksICZzbG90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfS0VZX1VTQUdFX0RFUklWRSwgb3BlcmF0aW9uLT5hbGcgKTsKKyAgICBzdGF0dXMgPSBwc2FfZ2V0X2FuZF9sb2NrX3RyYW5zcGFyZW50X2tleV9zbG90X3dpdGhfcG9saWN5KAorICAgICAgICAgICAgICAgICBwcml2YXRlX2tleSwgJnNsb3QsIFBTQV9LRVlfVVNBR0VfREVSSVZFLCBvcGVyYXRpb24tPmFsZyApOwogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICByZXR1cm4oIHN0YXR1cyApOwogICAgIHN0YXR1cyA9IHBzYV9rZXlfYWdyZWVtZW50X2ludGVybmFsKCBvcGVyYXRpb24sIHN0ZXAsCkBAIC01ODkzLDI3ICs2MjI4LDM4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJfa2V5LCBwZWVyX2tleV9sZW5ndGggKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgcHNhX2tleV9kZXJpdmF0aW9uX2Fib3J0KCBvcGVyYXRpb24gKTsKLSAgICByZXR1cm4oIHN0YXR1cyApOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIElmIGEgcHJpdmF0ZSBrZXkgaGFzIGJlZW4gYWRkZWQgYXMgU0VDUkVULCB3ZSBhbGxvdyB0aGUgZGVyaXZlZAorICAgICAgICAgKiBrZXkgbWF0ZXJpYWwgdG8gYmUgdXNlZCBhcyBhIGtleSBpbiBQU0EgQ3J5cHRvLiAqLworICAgICAgICBpZiggc3RlcCA9PSBQU0FfS0VZX0RFUklWQVRJT05fSU5QVVRfU0VDUkVUICkKKyAgICAgICAgICAgIG9wZXJhdGlvbi0+Y2FuX291dHB1dF9rZXkgPSAxOworICAgIH0KKworICAgIHVubG9ja19zdGF0dXMgPSBwc2FfdW5sb2NrX2tleV9zbG90KCBzbG90ICk7CisKKyAgICByZXR1cm4oICggc3RhdHVzID09IFBTQV9TVUNDRVNTICkgPyB1bmxvY2tfc3RhdHVzIDogc3RhdHVzICk7CiB9CiAKIHBzYV9zdGF0dXNfdCBwc2FfcmF3X2tleV9hZ3JlZW1lbnQoIHBzYV9hbGdvcml0aG1fdCBhbGcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90IHByaXZhdGVfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgcHJpdmF0ZV9rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwZWVyX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwZWVyX2tleV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpvdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm91dHB1dF9sZW5ndGggKQogewotICAgIHBzYV9rZXlfc2xvdF90ICpzbG90OwotICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CisgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOworICAgIHBzYV9zdGF0dXNfdCB1bmxvY2tfc3RhdHVzID0gUFNBX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQ7CisgICAgcHNhX2tleV9zbG90X3QgKnNsb3QgPSBOVUxMOwogCiAgICAgaWYoICEgUFNBX0FMR19JU19LRVlfQUdSRUVNRU5UKCBhbGcgKSApCiAgICAgewogICAgICAgICBzdGF0dXMgPSBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVDsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KLSAgICBzdGF0dXMgPSBwc2FfZ2V0X3RyYW5zcGFyZW50X2tleSggcHJpdmF0ZV9rZXksICZzbG90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfS0VZX1VTQUdFX0RFUklWRSwgYWxnICk7CisgICAgc3RhdHVzID0gcHNhX2dldF9hbmRfbG9ja190cmFuc3BhcmVudF9rZXlfc2xvdF93aXRoX3BvbGljeSgKKyAgICAgICAgICAgICAgICAgcHJpdmF0ZV9rZXksICZzbG90LCBQU0FfS0VZX1VTQUdFX0RFUklWRSwgYWxnICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIGdvdG8gZXhpdDsKIApAQCAtNTkzNSw3ICs2MjgxLDEwIEBACiAgICAgICAgIHBzYV9nZW5lcmF0ZV9yYW5kb20oIG91dHB1dCwgb3V0cHV0X3NpemUgKTsKICAgICAgICAgKm91dHB1dF9sZW5ndGggPSBvdXRwdXRfc2l6ZTsKICAgICB9Ci0gICAgcmV0dXJuKCBzdGF0dXMgKTsKKworICAgIHVubG9ja19zdGF0dXMgPSBwc2FfdW5sb2NrX2tleV9zbG90KCBzbG90ICk7CisKKyAgICByZXR1cm4oICggc3RhdHVzID09IFBTQV9TVUNDRVNTICkgPyB1bmxvY2tfc3RhdHVzIDogc3RhdHVzICk7CiB9CiAKIApAQCAtNTk4Miw3ICs2MzMxLDcgQEAKIH0KICNlbmRpZiAvKiBNQkVEVExTX1BTQV9JTkpFQ1RfRU5UUk9QWSAqLwogCi0jaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfR0VOUFJJTUUpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX1JTQV9LRVlfUEFJUikKIHN0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX3JlYWRfcnNhX2V4cG9uZW50KCBjb25zdCB1aW50OF90ICpkb21haW5fcGFyYW1ldGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZG9tYWluX3BhcmFtZXRlcnNfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmV4cG9uZW50ICkKQEAgLTYwMDgsNyArNjM1Nyw3IEBACiAgICAgKmV4cG9uZW50ID0gYWNjOwogICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKIH0KLSNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICYmIE1CRURUTFNfR0VOUFJJTUUgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfUlNBX0tFWV9QQUlSKSAqLwogCiBzdGF0aWMgcHNhX3N0YXR1c190IHBzYV9nZW5lcmF0ZV9rZXlfaW50ZXJuYWwoCiAgICAgcHNhX2tleV9zbG90X3QgKnNsb3QsIHNpemVfdCBiaXRzLApAQCAtNjA0Niw3ICs2Mzk1LDcgQEAKICAgICB9CiAgICAgZWxzZQogCi0jaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfR0VOUFJJTUUpCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX1JTQV9LRVlfUEFJUikKICAgICBpZiAoIHR5cGUgPT0gUFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUiApCiAgICAgewogICAgICAgICBtYmVkdGxzX3JzYV9jb250ZXh0IHJzYTsKQEAgLTYwOTQsOSArNjQ0Myw5IEBACiAgICAgICAgIHJldHVybiggc3RhdHVzICk7CiAgICAgfQogICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICYmIE1CRURUTFNfR0VOUFJJTUUgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fS0VZX1RZUEVfUlNBX0tFWV9QQUlSKSAqLwogCi0jaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIpCiAgICAgaWYgKCBQU0FfS0VZX1RZUEVfSVNfRUNDKCB0eXBlICkgJiYgUFNBX0tFWV9UWVBFX0lTX0tFWV9QQUlSKCB0eXBlICkgKQogICAgIHsKICAgICAgICAgcHNhX2VjY19mYW1pbHlfdCBjdXJ2ZSA9IFBTQV9LRVlfVFlQRV9FQ0NfR0VUX0ZBTUlMWSggdHlwZSApOwpAQCAtNjExMCw4ICs2NDU5LDYgQEAKICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKICAgICAgICAgaWYoIGdycF9pZCA9PSBNQkVEVExTX0VDUF9EUF9OT05FIHx8IGN1cnZlX2luZm8gPT0gTlVMTCApCiAgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7Ci0gICAgICAgIGlmKCBjdXJ2ZV9pbmZvLT5iaXRfc2l6ZSAhPSBiaXRzICkKLSAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKICAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9pbml0KCAmZWNwICk7CiAgICAgICAgIHJldCA9IG1iZWR0bHNfZWNwX2dlbl9rZXkoIGdycF9pZCwgJmVjcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sCkBAIC02MTQzLDcgKzY0OTAsNyBAQAogICAgICAgICByZXR1cm4oIHN0YXR1cyApOwogICAgIH0KICAgICBlbHNlCi0jZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIpICovCiAgICAgewogICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CiAgICAgfQpAQCAtNjE1MiwxOSArNjQ5OSwyMSBAQAogfQogCiBwc2Ffc3RhdHVzX3QgcHNhX2dlbmVyYXRlX2tleSggY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9oYW5kbGVfdCAqaGFuZGxlICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCAqa2V5ICkKIHsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwogICAgIHBzYV9rZXlfc2xvdF90ICpzbG90ID0gTlVMTDsKICAgICBwc2Ffc2VfZHJ2X3RhYmxlX2VudHJ5X3QgKmRyaXZlciA9IE5VTEw7CiAKKyAgICAqa2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CisKICAgICAvKiBSZWplY3QgYW55IGF0dGVtcHQgdG8gY3JlYXRlIGEgemVyby1sZW5ndGgga2V5IHNvIHRoYXQgd2UgZG9uJ3QKICAgICAgKiByaXNrIHRyaXBwaW5nIHVwIGxhdGVyLCBlLmcuIG9uIGEgbWFsbG9jKDApIHRoYXQgcmV0dXJucyBOVUxMLiAqLwogICAgIGlmKCBwc2FfZ2V0X2tleV9iaXRzKCBhdHRyaWJ1dGVzICkgPT0gMCApCiAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKIAotICAgIHN0YXR1cyA9IHBzYV9zdGFydF9rZXlfY3JlYXRpb24oIFBTQV9LRVlfQ1JFQVRJT05fR0VORVJBVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcywgaGFuZGxlLCAmc2xvdCwgJmRyaXZlciApOworICAgIHN0YXR1cyA9IHBzYV9zdGFydF9rZXlfY3JlYXRpb24oIFBTQV9LRVlfQ1JFQVRJT05fR0VORVJBVEUsIGF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNsb3QsICZkcml2ZXIgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgZ290byBleGl0OwogCkBAIC02MTgwLDEyICs2NTI5LDEwIEBACiAKIGV4aXQ6CiAgICAgaWYoIHN0YXR1cyA9PSBQU0FfU1VDQ0VTUyApCi0gICAgICAgIHN0YXR1cyA9IHBzYV9maW5pc2hfa2V5X2NyZWF0aW9uKCBzbG90LCBkcml2ZXIgKTsKKyAgICAgICAgc3RhdHVzID0gcHNhX2ZpbmlzaF9rZXlfY3JlYXRpb24oIHNsb3QsIGRyaXZlciwga2V5ICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCi0gICAgewogICAgICAgICBwc2FfZmFpbF9rZXlfY3JlYXRpb24oIHNsb3QsIGRyaXZlciApOwotICAgICAgICAqaGFuZGxlID0gMDsKLSAgICB9CisKICAgICByZXR1cm4oIHN0YXR1cyApOwogfQogCmRpZmYgLS1naXQgYS9saWJyYXJ5L3BzYV9jcnlwdG9fY29yZS5oIGIvbGlicmFyeS9wc2FfY3J5cHRvX2NvcmUuaAppbmRleCA2ZWUxN2ZjLi5mNjFlZjk1IDEwMDY0NAotLS0gYS9saWJyYXJ5L3BzYV9jcnlwdG9fY29yZS5oCisrKyBiL2xpYnJhcnkvcHNhX2NyeXB0b19jb3JlLmgKQEAgLTM2LDYgKzM2LDMyIEBACiB0eXBlZGVmIHN0cnVjdAogewogICAgIHBzYV9jb3JlX2tleV9hdHRyaWJ1dGVzX3QgYXR0cjsKKworICAgIC8qCisgICAgICogTnVtYmVyIG9mIGxvY2tzIG9uIHRoZSBrZXkgc2xvdCBoZWxkIGJ5IHRoZSBsaWJyYXJ5LgorICAgICAqCisgICAgICogVGhpcyBjb3VudGVyIGlzIGluY3JlbWVudGVkIGJ5IG9uZSBlYWNoIHRpbWUgYSBsaWJyYXJ5IGZ1bmN0aW9uCisgICAgICogcmV0cmlldmVzIHRocm91Z2ggb25lIG9mIHRoZSBkZWRpY2F0ZWQgaW50ZXJuYWwgQVBJIGEgcG9pbnRlciB0byB0aGUKKyAgICAgKiBrZXkgc2xvdC4KKyAgICAgKgorICAgICAqIFRoaXMgY291bnRlciBpcyBkZWNyZW1lbnRlZCBieSBvbmUgZWFjaCB0aW1lIGEgbGlicmFyeSBmdW5jdGlvbiBzdG9wcworICAgICAqIGFjY2Vzc2luZyB0aGUga2V5IHNsb3QgYW5kIHN0YXRlcyBpdCBieSBjYWxsaW5nIHRoZQorICAgICAqIHBzYV91bmxvY2tfa2V5X3Nsb3QoKSBBUEkuCisgICAgICoKKyAgICAgKiBUaGlzIGNvdW50ZXIgaXMgdXNlZCB0byBwcmV2ZW50IHJlc2V0dGluZyB0aGUga2V5IHNsb3Qgd2hpbGUgdGhlIGxpYnJhcnkKKyAgICAgKiBtYXkgYWNjZXNzIGl0LiBGb3IgZXhhbXBsZSwgc3VjaCBjb250cm9sIGlzIG5lZWRlZCBpbiB0aGUgZm9sbG93aW5nCisgICAgICogc2NlbmFyaW9zOgorICAgICAqIC4gSW4gY2FzZSBvZiBrZXkgc2xvdCBzdGFydmF0aW9uLCBhbGwga2V5IHNsb3RzIGNvbnRhaW4gdGhlIGRlc2NyaXB0aW9uCisgICAgICogICBvZiBhIGtleSwgYW5kIHRoZSBsaWJyYXJ5IGFza3MgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiBhIHBlcnNpc3RlbnQKKyAgICAgKiAgIGtleSBub3QgcHJlc2VudCBpbiB0aGUga2V5IHNsb3RzLCB0aGUga2V5IHNsb3RzIGN1cnJlbnRseSBhY2Nlc3NlZCBieQorICAgICAqICAgdGhlIGxpYnJhcnkgY2Fubm90IGJlIHJlY2xhaW1lZCB0byBmcmVlIGEga2V5IHNsb3QgdG8gbG9hZCB0aGUKKyAgICAgKiAgIHBlcnNpc3RlbnQga2V5LgorICAgICAqIC4gSW4gY2FzZSBvZiBhIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9uIHdoZXJlIG9uZSB0aHJlYWQgYXNrcyB0byBjbG9zZQorICAgICAqICAgb3IgcHVyZ2Ugb3IgZGVzdHJveSBhIGtleSB3aGlsZSBpdCBpcyBpbiB1c2VkIGJ5IHRoZSBsaWJyYXJ5IHRocm91Z2gKKyAgICAgKiAgIGFub3RoZXIgdGhyZWFkLgorICAgICAqLworICAgIHNpemVfdCBsb2NrX2NvdW50OworCiAgICAgdW5pb24KICAgICB7CiAgICAgICAgIC8qIER5bmFtaWNhbGx5IGFsbG9jYXRlZCBrZXkgZGF0YSBidWZmZXIuCkBAIC03NCw2ICsxMDAsMTkgQEAKICAgICByZXR1cm4oIHNsb3QtPmF0dHIudHlwZSAhPSAwICk7CiB9CiAKKy8qKiBUZXN0IHdoZXRoZXIgYSBrZXkgc2xvdCBpcyBsb2NrZWQuCisgKgorICogQSBrZXkgc2xvdCBpcyBsb2NrZWQgaWZmIGl0cyBsb2NrIGNvdW50ZXIgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDAuCisgKgorICogXHBhcmFtW2luXSBzbG90ICBUaGUga2V5IHNsb3QgdG8gdGVzdC4KKyAqCisgKiBccmV0dXJuIDEgaWYgdGhlIHNsb3QgaXMgbG9ja2VkLCAwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHNhX2lzX2tleV9zbG90X2xvY2tlZCggY29uc3QgcHNhX2tleV9zbG90X3QgKnNsb3QgKQoreworICAgIHJldHVybiggc2xvdC0+bG9ja19jb3VudCA+IDAgKTsKK30KKwogLyoqIFJldHJpZXZlIGZsYWdzIGZyb20gcHNhX2tleV9zbG90X3Q6OmF0dHI6OmNvcmU6OmZsYWdzLgogICoKICAqIFxwYXJhbVtpbl0gc2xvdCAgICAgIFRoZSBrZXkgc2xvdCB0byBxdWVyeS4KQEAgLTEzMCwzNyArMTY5LDMzIEBACiAgKgogICogXHBhcmFtW2luLG91dF0gc2xvdCAgVGhlIGtleSBzbG90IHRvIHdpcGUuCiAgKgotICogXHJldHZhbCBQU0FfU1VDQ0VTUworICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKICAqICAgICAgICAgU3VjY2Vzcy4gVGhpcyBpbmNsdWRlcyB0aGUgY2FzZSBvZiBhIGtleSBzbG90IHRoYXQgd2FzCiAgKiAgICAgICAgIGFscmVhZHkgZnVsbHkgd2lwZWQuCi0gKiBccmV0dmFsIFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVECisgKiBccmV0dmFsICNQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRAogICovCiBwc2Ffc3RhdHVzX3QgcHNhX3dpcGVfa2V5X3Nsb3QoIHBzYV9rZXlfc2xvdF90ICpzbG90ICk7CiAKLS8qKiBJbXBvcnQga2V5IGRhdGEgaW50byBhIHNsb3QuCisvKiogQ29weSBrZXkgZGF0YSAoaW4gZXhwb3J0IGZvcm1hdCkgaW50byBhbiBlbXB0eSBrZXkgc2xvdC4KICAqCi0gKiBgc2xvdC0+dHlwZWAgbXVzdCBoYXZlIGJlZW4gc2V0IHByZXZpb3VzbHkuCi0gKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgc2xvdCBkb2VzIG5vdCBjb250YWluIGFueSBrZXkgbWF0ZXJpYWwgeWV0LgotICogT24gZmFpbHVyZSwgdGhlIHNsb3QgY29udGVudCBpcyB1bmNoYW5nZWQuCisgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgc2xvdCBkb2VzIG5vdCBjb250YWluCisgKiBhbnkga2V5IG1hdGVyaWFsIHlldC4gT24gZmFpbHVyZSwgdGhlIHNsb3QgY29udGVudCBpcyB1bmNoYW5nZWQuCiAgKgotICogUGVyc2lzdGVudCBzdG9yYWdlIGlzIG5vdCBhZmZlY3RlZC4KKyAqIFxwYXJhbVtpbixvdXRdIHNsb3QgICAgICAgICAgS2V5IHNsb3QgdG8gY29weSB0aGUga2V5IGludG8uCisgKiBccGFyYW1baW5dIGRhdGEgICAgICAgICAgICAgIEJ1ZmZlciBjb250YWluaW5nIHRoZSBrZXkgbWF0ZXJpYWwuCisgKiBccGFyYW0gZGF0YV9sZW5ndGggICAgICAgICAgIFNpemUgb2YgdGhlIGtleSBidWZmZXIuCiAgKgotICogXHBhcmFtW2luLG91dF0gc2xvdCAgVGhlIGtleSBzbG90IHRvIGltcG9ydCBkYXRhIGludG8uCi0gKiAgICAgICAgICAgICAgICAgICAgICBJdHMgYHR5cGVgIGZpZWxkIG11c3QgaGF2ZSBwcmV2aW91c2x5IGJlZW4gc2V0IHRvCi0gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVzaXJlZCBrZXkgdHlwZS4KLSAqICAgICAgICAgICAgICAgICAgICAgIEl0IG11c3Qgbm90IGNvbnRhaW4gYW55IGtleSBtYXRlcmlhbCB5ZXQuCi0gKiBccGFyYW1baW5dIGRhdGEgICAgICBCdWZmZXIgY29udGFpbmluZyB0aGUga2V5IG1hdGVyaWFsIHRvIHBhcnNlIGFuZCBpbXBvcnQuCi0gKiBccGFyYW0gZGF0YV9sZW5ndGggICBTaXplIG9mIFxwIGRhdGEgaW4gYnl0ZXMuCi0gKgotICogXHJldHZhbCBQU0FfU1VDQ0VTUwotICogXHJldHZhbCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAotICogXHJldHZhbCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAotICogXHJldHZhbCBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQorICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKKyAqICAgICAgICAgVGhlIGtleSBoYXMgYmVlbiBjb3BpZWQgc3VjY2Vzc2Z1bGx5LgorICogXHJldHZhbCAjUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlkKKyAqICAgICAgICAgTm90IGVub3VnaCBtZW1vcnkgd2FzIGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbiBvZiB0aGUKKyAqICAgICAgICAgY29weSBidWZmZXIuCisgKiBccmV0dmFsICNQU0FfRVJST1JfQUxSRUFEWV9FWElTVFMKKyAqICAgICAgICAgVGhlcmUgd2FzIG90aGVyIGtleSBtYXRlcmlhbCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHNsb3QuCiAgKi8KLXBzYV9zdGF0dXNfdCBwc2FfaW1wb3J0X2tleV9pbnRvX3Nsb3QoIHBzYV9rZXlfc2xvdF90ICpzbG90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhX2xlbmd0aCApOwotCitwc2Ffc3RhdHVzX3QgcHNhX2NvcHlfa2V5X21hdGVyaWFsX2ludG9fc2xvdCggcHNhX2tleV9zbG90X3QgKnNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YV9sZW5ndGggKTsKIAogLyoqIENvbnZlcnQgYW4gbWJlZCBUTFMgZXJyb3IgY29kZSB0byBhIFBTQSBlcnJvciBjb2RlCiAgKgpkaWZmIC0tZ2l0IGEvbGlicmFyeS9wc2FfY3J5cHRvX2RyaXZlcl93cmFwcGVycy5jIGIvbGlicmFyeS9wc2FfY3J5cHRvX2RyaXZlcl93cmFwcGVycy5jCmluZGV4IGQ0MTIwOWIuLmMzZWE2ZjEgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvcHNhX2NyeXB0b19kcml2ZXJfd3JhcHBlcnMuYworKysgYi9saWJyYXJ5L3BzYV9jcnlwdG9fZHJpdmVyX3dyYXBwZXJzLmMKQEAgLTI1NiwyNiArMjU2LDYwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpleHBlY3RlZF9zaXplICkKIHsKICAgICBzaXplX3QgYnVmZmVyX3NpemUgPSAwOwotICAgIGlmKCBQU0FfS0VZX0xJRkVUSU1FX0dFVF9MT0NBVElPTiggYXR0cmlidXRlcy0+Y29yZS5saWZldGltZSApID09IFBTQV9LRVlfTE9DQVRJT05fTE9DQUxfU1RPUkFHRSApCi0gICAgewotICAgICAgICBidWZmZXJfc2l6ZSA9IFBTQV9LRVlfRVhQT1JUX01BWF9TSVpFKCBhdHRyaWJ1dGVzLT5jb3JlLnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMtPmNvcmUuYml0cyApOworICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbiA9IFBTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKCBhdHRyaWJ1dGVzLT5jb3JlLmxpZmV0aW1lICk7CisgICAgcHNhX2tleV90eXBlX3Qga2V5X3R5cGUgPSBhdHRyaWJ1dGVzLT5jb3JlLnR5cGU7CisgICAgc2l6ZV90IGtleV9iaXRzID0gYXR0cmlidXRlcy0+Y29yZS5iaXRzOwogCi0gICAgICAgIGlmKCBidWZmZXJfc2l6ZSA9PSAwICkKKyAgICBzd2l0Y2goIGxvY2F0aW9uICkKKyAgICB7CisgICAgICAgIGNhc2UgUFNBX0tFWV9MT0NBVElPTl9MT0NBTF9TVE9SQUdFOgorICAgICAgICAgICAgYnVmZmVyX3NpemUgPSBQU0FfS0VZX0VYUE9SVF9NQVhfU0laRSgga2V5X3R5cGUsIGtleV9iaXRzICk7CisKKyAgICAgICAgICAgIGlmKCBidWZmZXJfc2l6ZSA9PSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisKKyAgICAgICAgICAgICpleHBlY3RlZF9zaXplID0gYnVmZmVyX3NpemU7CisgICAgICAgICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CisKKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisgICAgICAgIGNhc2UgUFNBX0NSWVBUT19URVNUX0RSSVZFUl9MSUZFVElNRToKKyNpZmRlZiBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9TSVpFX0ZVTkNUSU9OCisgICAgICAgICAgICAqZXhwZWN0ZWRfc2l6ZSA9IHRlc3Rfc2l6ZV9mdW5jdGlvbigga2V5X3R5cGUsIGtleV9iaXRzICk7CisgICAgICAgICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CisjZWxzZSAvKiBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9TSVpFX0ZVTkNUSU9OICovCisgICAgICAgICAgICBpZiggUFNBX0tFWV9UWVBFX0lTX0tFWV9QQUlSKCBrZXlfdHlwZSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgcHVibGljX2tleV9vdmVyaGVhZCA9ICggKCBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9TVE9SRV9QVUJMSUNfS0VZID09IDEgKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0tFWV9FWFBPUlRfTUFYX1NJWkUoIGtleV90eXBlLCBrZXlfYml0cyApIDogMCApOworICAgICAgICAgICAgICAgICpleHBlY3RlZF9zaXplID0gVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfQkFTRV9TSVpFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFRFU1RfRFJJVkVSX0tFWV9DT05URVhUX1BVQkxJQ19LRVlfU0laRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBwdWJsaWNfa2V5X292ZXJoZWFkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggUFNBX0tFWV9UWVBFX0lTX1BVQkxJQ19LRVkoIGF0dHJpYnV0ZXMtPmNvcmUudHlwZSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqZXhwZWN0ZWRfc2l6ZSA9IFRFU1RfRFJJVkVSX0tFWV9DT05URVhUX0JBU0VfU0laRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9QVUJMSUNfS0VZX1NJWkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICggIVBTQV9LRVlfVFlQRV9JU19LRVlfUEFJUigga2V5X3R5cGUgKSAmJgorICAgICAgICAgICAgICAgICAgICAgICFQU0FfS0VZX1RZUEVfSVNfUFVCTElDX0tFWSAoIGF0dHJpYnV0ZXMtPmNvcmUudHlwZSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqZXhwZWN0ZWRfc2l6ZSA9IFRFU1RfRFJJVkVSX0tFWV9DT05URVhUX0JBU0VfU0laRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9TWU1NRVRSSUNfRkFDVE9SCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICggKCBrZXlfYml0cyArIDcgKSAvIDggKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CisjZW5kaWYgLyogVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfU0laRV9GVU5DVElPTiAqLworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKworICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOwotCi0gICAgICAgICpleHBlY3RlZF9zaXplID0gYnVmZmVyX3NpemU7Ci0gICAgICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLyogVEJEOiBvcGFxdWUgZHJpdmVyIHN1cHBvcnQ6IG5lZWQgdG8gY2FsY3VsYXRlIHNpemUgdGhyb3VnaCBhCi0gICAgICAgICAqIGRyaXZlci1kZWZpbmVkIHNpemUgZnVuY3Rpb24sIHNpbmNlIHRoZSBzaXplIG9mIGFuIG9wYXF1ZSAod3JhcHBlZCkKLSAgICAgICAgICoga2V5IHdpbGwgYmUgZGlmZmVyZW50IGZvciBlYWNoIGltcGxlbWVudGF0aW9uLiAqLwotICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CiAgICAgfQogfQotI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX0FDQ0VMRVJBVE9SX0RSSVZFUl9QUkVTRU5UICovCiAKIHBzYV9zdGF0dXNfdCBwc2FfZHJpdmVyX3dyYXBwZXJfZ2VuZXJhdGVfa2V5KCBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCApCkBAIC0zNzYsNiArNDEwLDg3IEBACiAjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfUFJFU0VOVCAqLwogfQogCitwc2Ffc3RhdHVzX3QgcHNhX2RyaXZlcl93cmFwcGVyX3ZhbGlkYXRlX2tleSggY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpiaXRzICkKK3sKKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fQUNDRUxFUkFUT1JfRFJJVkVSX1BSRVNFTlQpCisgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOworICAgIC8qIFRyeSBhY2NlbGVyYXRvcnMgaW4gdHVybiAqLworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyAgICBzdGF0dXMgPSB0ZXN0X3RyYW5zcGFyZW50X3ZhbGlkYXRlX2tleSggYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKTsKKyAgICAvKiBEZWNsYXJlZCB3aXRoIGZhbGxiYWNrID09IHRydWUgKi8KKyAgICBpZiggc3RhdHVzICE9IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICkKKyAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9URVNUICovCisKKyAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisjZWxzZSAvKiBQU0FfQ1JZUFRPX0FDQ0VMRVJBVE9SX0RSSVZFUl9QUkVTRU5UICovCisgICAgKHZvaWQpIGF0dHJpYnV0ZXM7CisgICAgKHZvaWQpIGRhdGE7CisgICAgKHZvaWQpIGRhdGFfbGVuZ3RoOworICAgICh2b2lkKSBiaXRzOworICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9QUkVTRU5UICovCit9CisKK3BzYV9zdGF0dXNfdCBwc2FfZHJpdmVyX3dyYXBwZXJfZXhwb3J0X3B1YmxpY19rZXkoIGNvbnN0IHBzYV9rZXlfc2xvdF90ICpzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmRhdGFfbGVuZ3RoICkKK3sKKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fQUNDRUxFUkFUT1JfRFJJVkVSX1BSRVNFTlQpCisgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UOworICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbiA9IFBTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKHNsb3QtPmF0dHIubGlmZXRpbWUpOworICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSB7CisgICAgICAuY29yZSA9IHNsb3QtPmF0dHIKKyAgICB9OworCisgICAgc3dpdGNoKCBsb2NhdGlvbiApCisgICAgeworICAgICAgICBjYXNlIFBTQV9LRVlfTE9DQVRJT05fTE9DQUxfU1RPUkFHRToKKyAgICAgICAgICAgIC8qIEtleSBpcyBzdG9yZWQgaW4gdGhlIHNsb3QgaW4gZXhwb3J0IHJlcHJlc2VudGF0aW9uLCBzbworICAgICAgICAgICAgICogY3ljbGUgdGhyb3VnaCBhbGwga25vd24gdHJhbnNwYXJlbnQgYWNjZWxlcmF0b3JzICovCisjaWYgZGVmaW5lZChQU0FfQ1JZUFRPX0RSSVZFUl9URVNUKQorICAgICAgICAgICAgc3RhdHVzID0gdGVzdF90cmFuc3BhcmVudF9leHBvcnRfcHVibGljX2tleSggJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5kYXRhLmtleS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sZW5ndGggKTsKKyAgICAgICAgICAgIC8qIERlY2xhcmVkIHdpdGggZmFsbGJhY2sgPT0gdHJ1ZSAqLworICAgICAgICAgICAgaWYoIHN0YXR1cyAhPSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9URVNUICovCisgICAgICAgICAgICAvKiBGZWxsIHRocm91Z2gsIG1lYW5pbmcgbm8gYWNjZWxlcmF0b3Igc3VwcG9ydHMgdGhpcyBvcGVyYXRpb24gKi8KKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyAgICAgICAgLyogQWRkIGNhc2VzIGZvciBvcGFxdWUgZHJpdmVyIGhlcmUgKi8KKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisgICAgICAgIGNhc2UgUFNBX0NSWVBUT19URVNUX0RSSVZFUl9MSUZFVElNRToKKyAgICAgICAgICAgIHJldHVybiggdGVzdF9vcGFxdWVfZXhwb3J0X3B1YmxpY19rZXkoICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbGVuZ3RoICkgKTsKKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9URVNUICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvKiBLZXkgaXMgZGVjbGFyZWQgd2l0aCBhIGxpZmV0aW1lIG5vdCBrbm93biB0byB1cyAqLworICAgICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKyAgICB9CisjZWxzZSAvKiBQU0FfQ1JZUFRPX0FDQ0VMRVJBVE9SX0RSSVZFUl9QUkVTRU5UICovCisgICAgKHZvaWQpIHNsb3Q7CisgICAgKHZvaWQpIGRhdGE7CisgICAgKHZvaWQpIGRhdGFfc2l6ZTsKKyAgICAodm9pZCkgZGF0YV9sZW5ndGg7CisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fQUNDRUxFUkFUT1JfRFJJVkVSX1BSRVNFTlQgKi8KK30KKwogLyoKICAqIENpcGhlciBmdW5jdGlvbnMKICAqLwpAQCAtNTgzLDcgKzY5OCw3IEBACiAjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfVEVTVCAqLwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLyogS2V5IGlzIGRlY2xhcmVkIHdpdGggYSBsaWZldGltZSBub3Qga25vd24gdG8gdXMgKi8KLSAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JBRF9TVEFURSApOworICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOwogICAgIH0KICNlbHNlIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KICAgICAodm9pZClzbG90OwpAQCAtNjY0LDcgKzc3OSw3IEBACiAjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfVEVTVCAqLwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLyogS2V5IGlzIGRlY2xhcmVkIHdpdGggYSBsaWZldGltZSBub3Qga25vd24gdG8gdXMgKi8KLSAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JBRF9TVEFURSApOworICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOwogICAgIH0KICNlbHNlIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KICAgICAodm9pZClzbG90OwpkaWZmIC0tZ2l0IGEvbGlicmFyeS9wc2FfY3J5cHRvX2RyaXZlcl93cmFwcGVycy5oIGIvbGlicmFyeS9wc2FfY3J5cHRvX2RyaXZlcl93cmFwcGVycy5oCmluZGV4IDBkYjE1ZDYuLjZiNTE0MzcgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvcHNhX2NyeXB0b19kcml2ZXJfd3JhcHBlcnMuaAorKysgYi9saWJyYXJ5L3BzYV9jcnlwdG9fZHJpdmVyX3dyYXBwZXJzLmgKQEAgLTQzLDkgKzQzLDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2lnbmF0dXJlX2xlbmd0aCApOwogCisvKgorICogS2V5IGhhbmRsaW5nIGZ1bmN0aW9ucworICovCisKIHBzYV9zdGF0dXNfdCBwc2FfZHJpdmVyX3dyYXBwZXJfZ2VuZXJhdGVfa2V5KCBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCApOwogCitwc2Ffc3RhdHVzX3QgcHNhX2RyaXZlcl93cmFwcGVyX3ZhbGlkYXRlX2tleSggY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpiaXRzICk7CisKK3BzYV9zdGF0dXNfdCBwc2FfZHJpdmVyX3dyYXBwZXJfZXhwb3J0X3B1YmxpY19rZXkoIGNvbnN0IHBzYV9rZXlfc2xvdF90ICpzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmRhdGFfbGVuZ3RoICk7CisKIC8qCiAgKiBDaXBoZXIgZnVuY3Rpb25zCiAgKi8KZGlmZiAtLWdpdCBhL2xpYnJhcnkvcHNhX2NyeXB0b19pbnZhc2l2ZS5oIGIvbGlicmFyeS9wc2FfY3J5cHRvX2ludmFzaXZlLmgKaW5kZXggYzYwOWM3Ny4uMmI0ZWUxZiAxMDA2NDQKLS0tIGEvbGlicmFyeS9wc2FfY3J5cHRvX2ludmFzaXZlLmgKKysrIGIvbGlicmFyeS9wc2FfY3J5cHRvX2ludmFzaXZlLmgKQEAgLTYyLDEyICs2MiwxMiBAQAogICogICAgICAgICAgICAgICAgICAgICAgSXQgaXMgY2FsbGVkIGJ5IG1iZWR0bHNfcHNhX2NyeXB0b19mcmVlKCkuCiAgKiAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0IHRoaXMgaXMgbWJlZHRsc19lbnRyb3B5X2ZyZWUoKS4KICAqCi0gKiBccmV0dmFsIFBTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwogICogICAgICAgICBTdWNjZXNzLgotICogXHJldHZhbCBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAorICogXHJldHZhbCAjUFNBX0VSUk9SX05PVF9QRVJNSVRURUQKICAqICAgICAgICAgVGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIHRoZSBwZXJtaXNzaW9uIHRvIGNvbmZpZ3VyZQogICogICAgICAgICBlbnRyb3B5IHNvdXJjZXMuCi0gKiBccmV0dmFsIFBTQV9FUlJPUl9CQURfU1RBVEUKKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9CQURfU1RBVEUKICAqICAgICAgICAgVGhlIGxpYnJhcnkgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KICAqLwogcHNhX3N0YXR1c190IG1iZWR0bHNfcHNhX2NyeXB0b19jb25maWd1cmVfZW50cm9weV9zb3VyY2VzKApkaWZmIC0tZ2l0IGEvbGlicmFyeS9wc2FfY3J5cHRvX2l0cy5oIGIvbGlicmFyeS9wc2FfY3J5cHRvX2l0cy5oCmluZGV4IDkzYzRjZTkuLjExNzAzYTAgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvcHNhX2NyeXB0b19pdHMuaAorKysgYi9saWJyYXJ5L3BzYV9jcnlwdG9faXRzLmgKQEAgLTcyLDEyICs3MiwxMiBAQAogICoKICAqIFxyZXR1cm4gICAgICBBIHN0YXR1cyBpbmRpY2F0aW5nIHRoZSBzdWNjZXNzL2ZhaWx1cmUgb2YgdGhlIG9wZXJhdGlvbgogICoKLSAqIFxyZXR2YWwgICAgICBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLSAqIFxyZXR2YWwgICAgICBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRCAgICAgICAgICBUaGUgb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBwcm92aWRlZCBgdWlkYCB2YWx1ZSB3YXMgYWxyZWFkeSBjcmVhdGVkIHdpdGggUFNBX1NUT1JBR0VfV1JJVEVfT05DRV9GTEFHCi0gKiBccmV0dmFsICAgICAgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgICAgICAgICAgVGhlIG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSBvbmUgb3IgbW9yZSBvZiB0aGUgZmxhZ3MgcHJvdmlkZWQgaW4gYGNyZWF0ZV9mbGFnc2AgaXMgbm90IHN1cHBvcnRlZCBvciBpcyBub3QgdmFsaWQKLSAqIFxyZXR2YWwgICAgICBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX1NUT1JBR0UgICBUaGUgb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgc3BhY2Ugb24gdGhlIHN0b3JhZ2UgbWVkaXVtCi0gKiBccmV0dmFsICAgICAgUFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRSAgICAgICAgVGhlIG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgcGh5c2ljYWwgc3RvcmFnZSBoYXMgZmFpbGVkIChGYXRhbCBlcnJvcikKLSAqIFxyZXR2YWwgICAgICBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCAgICAgICBUaGUgb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIG9uZSBvZiB0aGUgcHJvdmlkZWQgcG9pbnRlcnMoYHBfZGF0YWApCisgKiBccmV0dmFsICAgICAjUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CisgKiBccmV0dmFsICAgICAjUFNBX0VSUk9SX05PVF9QRVJNSVRURUQgICAgICAgICAgVGhlIG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgcHJvdmlkZWQgYHVpZGAgdmFsdWUgd2FzIGFscmVhZHkgY3JlYXRlZCB3aXRoIFBTQV9TVE9SQUdFX1dSSVRFX09OQ0VfRkxBRworICogXHJldHZhbCAgICAgI1BTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICAgICAgICAgIFRoZSBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2Ugb25lIG9yIG1vcmUgb2YgdGhlIGZsYWdzIHByb3ZpZGVkIGluIGBjcmVhdGVfZmxhZ3NgIGlzIG5vdCBzdXBwb3J0ZWQgb3IgaXMgbm90IHZhbGlkCisgKiBccmV0dmFsICAgICAjUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9TVE9SQUdFICAgVGhlIG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGVyZSB3YXMgaW5zdWZmaWNpZW50IHNwYWNlIG9uIHRoZSBzdG9yYWdlIG1lZGl1bQorICogXHJldHZhbCAgICAgI1BTQV9FUlJPUl9TVE9SQUdFX0ZBSUxVUkUgICAgICAgIFRoZSBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIHBoeXNpY2FsIHN0b3JhZ2UgaGFzIGZhaWxlZCAoRmF0YWwgZXJyb3IpCisgKiBccmV0dmFsICAgICAjUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICAgVGhlIG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSBvbmUgb2YgdGhlIHByb3ZpZGVkIHBvaW50ZXJzKGBwX2RhdGFgKQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGludmFsaWQsIGZvciBleGFtcGxlIGlzIGBOVUxMYCBvciByZWZlcmVuY2VzIG1lbW9yeSB0aGUgY2FsbGVyIGNhbm5vdCBhY2Nlc3MKICAqLwogcHNhX3N0YXR1c190IHBzYV9pdHNfc2V0KHBzYV9zdG9yYWdlX3VpZF90IHVpZCwKQEAgLTk3LDExICs5NywxMSBAQAogICoKICAqIFxyZXR1cm4gICAgICBBIHN0YXR1cyBpbmRpY2F0aW5nIHRoZSBzdWNjZXNzL2ZhaWx1cmUgb2YgdGhlIG9wZXJhdGlvbgogICoKLSAqIFxyZXR2YWwgICAgICBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQotICogXHJldHZhbCAgICAgIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCAgICAgVGhlIG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgcHJvdmlkZWQgYHVpZGAgdmFsdWUgd2FzIG5vdCBmb3VuZCBpbiB0aGUgc3RvcmFnZQotICogXHJldHZhbCAgICAgIFBTQV9FUlJPUl9JTlZBTElEX1NJWkUgICAgICAgVGhlIG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggcHJvdmlkZWQgdWlkIGlzIGxhcmdlciB0aGFuIGBkYXRhX3NpemVgCi0gKiBccmV0dmFsICAgICAgUFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRSAgICBUaGUgb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBwaHlzaWNhbCBzdG9yYWdlIGhhcyBmYWlsZWQgKEZhdGFsIGVycm9yKQotICogXHJldHZhbCAgICAgIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgVGhlIG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSBvbmUgb2YgdGhlIHByb3ZpZGVkIHBvaW50ZXJzKGBwX2RhdGFgLCBgcF9kYXRhX2xlbmd0aGApCisgKiBccmV0dmFsICAgICAjUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKKyAqIFxyZXR2YWwgICAgICNQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgICAgIFRoZSBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIHByb3ZpZGVkIGB1aWRgIHZhbHVlIHdhcyBub3QgZm91bmQgaW4gdGhlIHN0b3JhZ2UKKyAqIFxyZXR2YWwgICAgICNQU0FfRVJST1JfSU5WQUxJRF9TSVpFICAgICAgIFRoZSBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHByb3ZpZGVkIHVpZCBpcyBsYXJnZXIgdGhhbiBgZGF0YV9zaXplYAorICogXHJldHZhbCAgICAgI1BTQV9FUlJPUl9TVE9SQUdFX0ZBSUxVUkUgICAgVGhlIG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgcGh5c2ljYWwgc3RvcmFnZSBoYXMgZmFpbGVkIChGYXRhbCBlcnJvcikKKyAqIFxyZXR2YWwgICAgICNQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCAgIFRoZSBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2Ugb25lIG9mIHRoZSBwcm92aWRlZCBwb2ludGVycyhgcF9kYXRhYCwgYHBfZGF0YV9sZW5ndGhgKQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgaW52YWxpZC4gRm9yIGV4YW1wbGUgaXMgYE5VTExgIG9yIHJlZmVyZW5jZXMgbWVtb3J5IHRoZSBjYWxsZXIgY2Fubm90IGFjY2Vzcy4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uLCB0aGlzIGNhbiBhbHNvIGhhcHBlbiBpZiBhbiBpbnZhbGlkIG9mZnNldCB3YXMgcHJvdmlkZWQuCiAgKi8KQEAgLTExOSwxMCArMTE5LDEwIEBACiAgKgogICogXHJldHVybiAgICAgIEEgc3RhdHVzIGluZGljYXRpbmcgdGhlIHN1Y2Nlc3MvZmFpbHVyZSBvZiB0aGUgb3BlcmF0aW9uCiAgKgotICogXHJldHZhbCAgICAgIFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Ci0gKiBccmV0dmFsICAgICAgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICAgICBUaGUgb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBwcm92aWRlZCB1aWQgdmFsdWUgd2FzIG5vdCBmb3VuZCBpbiB0aGUgc3RvcmFnZQotICogXHJldHZhbCAgICAgIFBTQV9FUlJPUl9TVE9SQUdFX0ZBSUxVUkUgICAgVGhlIG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgcGh5c2ljYWwgc3RvcmFnZSBoYXMgZmFpbGVkIChGYXRhbCBlcnJvcikKLSAqIFxyZXR2YWwgICAgICBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCAgIFRoZSBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2Ugb25lIG9mIHRoZSBwcm92aWRlZCBwb2ludGVycyhgcF9pbmZvYCkKKyAqIFxyZXR2YWwgICAgICNQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQorICogXHJldHZhbCAgICAgI1BTQV9FUlJPUl9ET0VTX05PVF9FWElTVCAgICAgVGhlIG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgcHJvdmlkZWQgdWlkIHZhbHVlIHdhcyBub3QgZm91bmQgaW4gdGhlIHN0b3JhZ2UKKyAqIFxyZXR2YWwgICAgICNQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFICAgIFRoZSBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIHBoeXNpY2FsIHN0b3JhZ2UgaGFzIGZhaWxlZCAoRmF0YWwgZXJyb3IpCisgKiBccmV0dmFsICAgICAjUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICBUaGUgb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIG9uZSBvZiB0aGUgcHJvdmlkZWQgcG9pbnRlcnMoYHBfaW5mb2ApCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBpbnZhbGlkLCBmb3IgZXhhbXBsZSBpcyBgTlVMTGAgb3IgcmVmZXJlbmNlcyBtZW1vcnkgdGhlIGNhbGxlciBjYW5ub3QgYWNjZXNzCiAgKi8KIHBzYV9zdGF0dXNfdCBwc2FfaXRzX2dldF9pbmZvKHBzYV9zdG9yYWdlX3VpZF90IHVpZCwKQEAgLTEzNSwxMSArMTM1LDE1IEBACiAgKgogICogXHJldHVybiAgQSBzdGF0dXMgaW5kaWNhdGluZyB0aGUgc3VjY2Vzcy9mYWlsdXJlIG9mIHRoZSBvcGVyYXRpb24KICAqCi0gKiBccmV0dmFsICAgICAgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLSAqIFxyZXR2YWwgICAgICBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgICAgIFRoZSBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIHByb3ZpZGVkIGtleSB2YWx1ZSB3YXMgbm90IGZvdW5kIGluIHRoZSBzdG9yYWdlCi0gKiBccmV0dmFsICAgICAgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQgICAgICBUaGUgb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBwcm92aWRlZCBrZXkgdmFsdWUgd2FzIGNyZWF0ZWQgd2l0aCBQU0FfU1RPUkFHRV9XUklURV9PTkNFX0ZMQUcKLSAqIFxyZXR2YWwgICAgICBQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFICAgIFRoZSBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIHBoeXNpY2FsIHN0b3JhZ2UgaGFzIGZhaWxlZCAoRmF0YWwgZXJyb3IpCisgKiBccmV0dmFsICAgICAjUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKKyAqIFxyZXR2YWwgICAgICNQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgICAgIFRoZSBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIHByb3ZpZGVkIGtleSB2YWx1ZSB3YXMgbm90IGZvdW5kIGluIHRoZSBzdG9yYWdlCisgKiBccmV0dmFsICAgICAjUFNBX0VSUk9SX05PVF9QRVJNSVRURUQgICAgICBUaGUgb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBwcm92aWRlZCBrZXkgdmFsdWUgd2FzIGNyZWF0ZWQgd2l0aCBQU0FfU1RPUkFHRV9XUklURV9PTkNFX0ZMQUcKKyAqIFxyZXR2YWwgICAgICNQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFICAgIFRoZSBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIHBoeXNpY2FsIHN0b3JhZ2UgaGFzIGZhaWxlZCAoRmF0YWwgZXJyb3IpCiAgKi8KIHBzYV9zdGF0dXNfdCBwc2FfaXRzX3JlbW92ZShwc2Ffc3RvcmFnZV91aWRfdCB1aWQpOwogCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCiAjZW5kaWYgLyogUFNBX0NSWVBUT19JVFNfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicmFyeS9wc2FfY3J5cHRvX3NlLmggYi9saWJyYXJ5L3BzYV9jcnlwdG9fc2UuaAppbmRleCA1NjkxNzM4Li42N2ZhZGY4IDEwMDY0NAotLS0gYS9saWJyYXJ5L3BzYV9jcnlwdG9fc2UuaAorKysgYi9saWJyYXJ5L3BzYV9jcnlwdG9fc2UuaApAQCAtMTgyLDcgKzE4Miw2IEBACiB0eXBlZGVmIHN0cnVjdAogewogICAgIHVpbnQ4X3Qgc2xvdF9udW1iZXJbc2l6ZW9mKCBwc2Ffa2V5X3Nsb3RfbnVtYmVyX3QgKV07Ci0gICAgdWludDhfdCBiaXRzW3NpemVvZiggcHNhX2tleV9iaXRzX3QgKV07CiB9IHBzYV9zZV9rZXlfZGF0YV9zdG9yYWdlX3Q7CiAKICNlbmRpZiAvKiBQU0FfQ1JZUFRPX1NFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnJhcnkvcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuYyBiL2xpYnJhcnkvcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuYwppbmRleCBlNTI2NTYwLi40YzRhZDAzIDEwMDY0NAotLS0gYS9saWJyYXJ5L3BzYV9jcnlwdG9fc2xvdF9tYW5hZ2VtZW50LmMKKysrIGIvbGlicmFyeS9wc2FfY3J5cHRvX3Nsb3RfbWFuYWdlbWVudC5jCkBAIC01MSwzMCArNTEsMTAxIEBACiAKIHN0YXRpYyBwc2FfZ2xvYmFsX2RhdGFfdCBnbG9iYWxfZGF0YTsKIAotLyogQWNjZXNzIGEga2V5IHNsb3QgYXQgdGhlIGdpdmVuIGhhbmRsZS4gVGhlIGhhbmRsZSBvZiBhIGtleSBzbG90IGlzCi0gKiB0aGUgaW5kZXggb2YgdGhlIHNsb3QgaW4gdGhlIGdsb2JhbCBzbG90IGFycmF5LCBwbHVzIG9uZSBzbyB0aGF0IGhhbmRsZXMKLSAqIHN0YXJ0IGF0IDEgYW5kIG5vdCAwLiAqLwotcHNhX3N0YXR1c190IHBzYV9nZXRfa2V5X3Nsb3QoIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfc2xvdF90ICoqcF9zbG90ICkKK3BzYV9zdGF0dXNfdCBwc2FfdmFsaWRhdGVfa2V5X2lkKAorICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwgaW50IHZlbmRvcl9vayApCiB7CisgICAgcHNhX2tleV9pZF90IGtleV9pZCA9IE1CRURUTFNfU1ZDX0tFWV9JRF9HRVRfS0VZX0lEKCBrZXkgKTsKKworICAgIGlmKCAoIFBTQV9LRVlfSURfVVNFUl9NSU4gPD0ga2V5X2lkICkgJiYKKyAgICAgICAgKCBrZXlfaWQgPD0gUFNBX0tFWV9JRF9VU0VSX01BWCApICkKKyAgICAgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOworCisgICAgaWYoIHZlbmRvcl9vayAmJgorICAgICAgICAoIFBTQV9LRVlfSURfVkVORE9SX01JTiA8PSBrZXlfaWQgKSAmJgorICAgICAgICAoIGtleV9pZCA8PSBQU0FfS0VZX0lEX1ZFTkRPUl9NQVggKSApCisgICAgICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKKworICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICk7Cit9CisKKy8qKiBHZXQgdGhlIGRlc2NyaXB0aW9uIGluIG1lbW9yeSBvZiBhIGtleSBnaXZlbiBpdHMgaWRlbnRpZmllciBhbmQgbG9jayBpdC4KKyAqCisgKiBUaGUgZGVzY3JpcHRpb25zIG9mIHZvbGF0aWxlIGtleXMgYW5kIGxvYWRlZCBwZXJzaXN0ZW50IGtleXMgYXJlCisgKiBzdG9yZWQgaW4ga2V5IHNsb3RzLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBrZXkgc2xvdAorICogY29udGFpbmluZyB0aGUgZGVzY3JpcHRpb24gb2YgYSBrZXkgZ2l2ZW4gaXRzIGlkZW50aWZpZXIuCisgKgorICogVGhlIGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSBrZXkgc2xvdHMgY29udGFpbmluZyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGtleQorICogd2l0aCBccCBrZXkgaWRlbnRpZmllci4gVGhlIGZ1bmN0aW9uIGRvZXMgb25seSByZWFkIGFjY2Vzc2VzIHRvIHRoZSBrZXkKKyAqIHNsb3RzLiBUaGUgZnVuY3Rpb24gZG9lcyBub3QgbG9hZCBhbnkgcGVyc2lzdGVudCBrZXkgdGh1cyBkb2VzIG5vdCBhY2Nlc3MKKyAqIGFueSBzdG9yYWdlLgorICoKKyAqIEZvciB2b2xhdGlsZSBrZXkgaWRlbnRpZmllcnMsIG9ubHkgb25lIGtleSBzbG90IGlzIHF1ZXJpZWQgYXMgYSB2b2xhdGlsZQorICoga2V5IHdpdGggaWRlbnRpZmllciBrZXlfaWQgY2FuIG9ubHkgYmUgc3RvcmVkIGluIHNsb3Qgb2YgaW5kZXgKKyAqICgga2V5X2lkIC0gI1BTQV9LRVlfSURfVk9MQVRJTEVfTUlOICkuCisgKgorICogT24gc3VjY2VzcywgdGhlIGZ1bmN0aW9uIGxvY2tzIHRoZSBrZXkgc2xvdC4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mCisgKiB0aGUgY2FsbGVyIHRvIHVubG9jayB0aGUga2V5IHNsb3Qgd2hlbiBpdCBkb2VzIG5vdCBhY2Nlc3MgaXQgYW55bW9yZS4KKyAqCisgKiBccGFyYW0ga2V5ICAgICAgICAgICBLZXkgaWRlbnRpZmllciB0byBxdWVyeS4KKyAqIFxwYXJhbVtvdXRdIHBfc2xvdCAgIE9uIHN1Y2Nlc3MsIGAqcF9zbG90YCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBrZXkgc2xvdCBjb250YWluaW5nIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUga2V5CisgKiAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVkIGJ5IFxwIGtleS4KKyAqCisgKiBccmV0dmFsICNQU0FfU1VDQ0VTUworICogICAgICAgICBUaGUgcG9pbnRlciB0byB0aGUga2V5IHNsb3QgY29udGFpbmluZyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGtleQorICogICAgICAgICBpZGVudGlmaWVkIGJ5IFxwIGtleSB3YXMgcmV0dXJuZWQuCisgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKKyAqICAgICAgICAgXHAga2V5IGlzIG5vdCBhIHZhbGlkIGtleSBpZGVudGlmaWVyLgorICogXHJldHZhbCAjUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUCisgKiAgICAgICAgIFRoZXJlIGlzIG5vIGtleSB3aXRoIGtleSBpZGVudGlmaWVyIFxwIGtleSBpbiB0aGUga2V5IHNsb3RzLgorICovCitzdGF0aWMgcHNhX3N0YXR1c190IHBzYV9nZXRfYW5kX2xvY2tfa2V5X3Nsb3RfaW5fbWVtb3J5KAorICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwgcHNhX2tleV9zbG90X3QgKipwX3Nsb3QgKQoreworICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRDsKKyAgICBwc2Ffa2V5X2lkX3Qga2V5X2lkID0gTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9LRVlfSUQoIGtleSApOworICAgIHNpemVfdCBzbG90X2lkeDsKICAgICBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCA9IE5VTEw7CiAKLSAgICBpZiggISBnbG9iYWxfZGF0YS5rZXlfc2xvdHNfaW5pdGlhbGl6ZWQgKQotICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9CQURfU1RBVEUgKTsKKyAgICBpZiggcHNhX2tleV9pZF9pc192b2xhdGlsZSgga2V5X2lkICkgKQorICAgIHsKKyAgICAgICAgc2xvdCA9ICZnbG9iYWxfZGF0YS5rZXlfc2xvdHNbIGtleV9pZCAtIFBTQV9LRVlfSURfVk9MQVRJTEVfTUlOIF07CiAKLSAgICAvKiAwIGlzIG5vdCBhIHZhbGlkIGhhbmRsZSB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlLiBUaGlzCi0gICAgICogaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgc2xvdHMgbnVtYmVyIDEgdG8gTiB3aGVyZSBOIGlzIHRoZQotICAgICAqIG51bWJlciBvZiBhdmFpbGFibGUgc2xvdHMuICovCi0gICAgaWYoIGhhbmRsZSA9PSAwIHx8IGhhbmRsZSA+IEFSUkFZX0xFTkdUSCggZ2xvYmFsX2RhdGEua2V5X3Nsb3RzICkgKQotICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSApOwotICAgIHNsb3QgPSAmZ2xvYmFsX2RhdGEua2V5X3Nsb3RzW2hhbmRsZSAtIDFdOworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBpZiBib3RoIHRoZSBQU0Ega2V5IGlkZW50aWZpZXIga2V5X2lkIGFuZCB0aGUgb3duZXIKKyAgICAgICAgICogaWRlbnRpZmllciBvZiBrZXkgbWF0Y2ggdGhvc2Ugb2YgdGhlIGtleSBzbG90LgorICAgICAgICAgKgorICAgICAgICAgKiBOb3RlIHRoYXQsIGlmIHRoZSBrZXkgc2xvdCBpcyBub3Qgb2NjdXBpZWQsIGl0cyBQU0Ega2V5IGlkZW50aWZpZXIKKyAgICAgICAgICogaXMgZXF1YWwgdG8gemVyby4gVGhpcyBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciBhIFBTQSBrZXkgaWRlbnRpZmllcgorICAgICAgICAgKiBhbmQgdGh1cyBjYW5ub3QgYmUgZXF1YWwgdG8gdGhlIHZhbGlkIFBTQSBrZXkgaWRlbnRpZmllciBrZXlfaWQuCisgICAgICAgICAqLworICAgICAgICBzdGF0dXMgPSBtYmVkdGxzX3N2Y19rZXlfaWRfZXF1YWwoIGtleSwgc2xvdC0+YXR0ci5pZCApID8KKyAgICAgICAgICAgICAgICAgUFNBX1NVQ0NFU1MgOiBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1Q7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IHBzYV92YWxpZGF0ZV9rZXlfaWQoIGtleSwgMSApOworICAgICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICAgICAgICAgIHJldHVybiggc3RhdHVzICk7CiAKLSAgICAvKiBJZiB0aGUgc2xvdCBpc24ndCBvY2N1cGllZCwgdGhlIGhhbmRsZSBpcyBpbnZhbGlkLiAqLwotICAgIGlmKCAhIHBzYV9pc19rZXlfc2xvdF9vY2N1cGllZCggc2xvdCApICkKLSAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgKTsKKyAgICAgICAgZm9yKCBzbG90X2lkeCA9IDA7IHNsb3RfaWR4IDwgUFNBX0tFWV9TTE9UX0NPVU5UOyBzbG90X2lkeCsrICkKKyAgICAgICAgeworICAgICAgICAgICAgc2xvdCA9ICZnbG9iYWxfZGF0YS5rZXlfc2xvdHNbIHNsb3RfaWR4IF07CisgICAgICAgICAgICBpZiggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKCBrZXksIHNsb3QtPmF0dHIuaWQgKSApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gKCBzbG90X2lkeCA8IFBTQV9LRVlfU0xPVF9DT1VOVCApID8KKyAgICAgICAgICAgICAgICAgUFNBX1NVQ0NFU1MgOiBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1Q7CisgICAgfQogCi0gICAgKnBfc2xvdCA9IHNsb3Q7Ci0gICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOworICAgIGlmKCBzdGF0dXMgPT0gUFNBX1NVQ0NFU1MgKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gcHNhX2xvY2tfa2V5X3Nsb3QoIHNsb3QgKTsKKyAgICAgICAgaWYoIHN0YXR1cyA9PSBQU0FfU1VDQ0VTUyApCisgICAgICAgICAgICAqcF9zbG90ID0gc2xvdDsKKyAgICB9CisKKyAgICByZXR1cm4oIHN0YXR1cyApOwogfQogCiBwc2Ffc3RhdHVzX3QgcHNhX2luaXRpYWxpemVfa2V5X3Nsb3RzKCB2b2lkICkKQEAgLTg4LDI5ICsxNTksODAgQEAKIAogdm9pZCBwc2Ffd2lwZV9hbGxfa2V5X3Nsb3RzKCB2b2lkICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGtleTsKLSAgICBmb3IoIGtleSA9IDE7IGtleSA8PSBQU0FfS0VZX1NMT1RfQ09VTlQ7IGtleSsrICkKKyAgICBzaXplX3Qgc2xvdF9pZHg7CisKKyAgICBmb3IoIHNsb3RfaWR4ID0gMDsgc2xvdF9pZHggPCBQU0FfS0VZX1NMT1RfQ09VTlQ7IHNsb3RfaWR4KysgKQogICAgIHsKLSAgICAgICAgcHNhX2tleV9zbG90X3QgKnNsb3QgPSAmZ2xvYmFsX2RhdGEua2V5X3Nsb3RzW2tleSAtIDFdOworICAgICAgICBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCA9ICZnbG9iYWxfZGF0YS5rZXlfc2xvdHNbIHNsb3RfaWR4IF07CisgICAgICAgIHNsb3QtPmxvY2tfY291bnQgPSAxOwogICAgICAgICAodm9pZCkgcHNhX3dpcGVfa2V5X3Nsb3QoIHNsb3QgKTsKICAgICB9CiAgICAgZ2xvYmFsX2RhdGEua2V5X3Nsb3RzX2luaXRpYWxpemVkID0gMDsKIH0KIAotcHNhX3N0YXR1c190IHBzYV9nZXRfZW1wdHlfa2V5X3Nsb3QoIHBzYV9rZXlfaGFuZGxlX3QgKmhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfc2xvdF90ICoqcF9zbG90ICkKK3BzYV9zdGF0dXNfdCBwc2FfZ2V0X2VtcHR5X2tleV9zbG90KCBwc2Ffa2V5X2lkX3QgKnZvbGF0aWxlX2tleV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3Nsb3RfdCAqKnBfc2xvdCApCiB7Ci0gICAgaWYoICEgZ2xvYmFsX2RhdGEua2V5X3Nsb3RzX2luaXRpYWxpemVkICkKLSAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CisgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOworICAgIHNpemVfdCBzbG90X2lkeDsKKyAgICBwc2Ffa2V5X3Nsb3RfdCAqc2VsZWN0ZWRfc2xvdCwgKnVubG9ja2VkX3BlcnNpc3RlbnRfa2V5X3Nsb3Q7CiAKLSAgICBmb3IoICpoYW5kbGUgPSBQU0FfS0VZX1NMT1RfQ09VTlQ7ICpoYW5kbGUgIT0gMDsgLS0oICpoYW5kbGUgKSApCisgICAgaWYoICEgZ2xvYmFsX2RhdGEua2V5X3Nsb3RzX2luaXRpYWxpemVkICkKICAgICB7Ci0gICAgICAgICpwX3Nsb3QgPSAmZ2xvYmFsX2RhdGEua2V5X3Nsb3RzWypoYW5kbGUgLSAxXTsKLSAgICAgICAgaWYoICEgcHNhX2lzX2tleV9zbG90X29jY3VwaWVkKCAqcF9zbG90ICkgKQotICAgICAgICAgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOworICAgICAgICBzdGF0dXMgPSBQU0FfRVJST1JfQkFEX1NUQVRFOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KKworICAgIHNlbGVjdGVkX3Nsb3QgPSB1bmxvY2tlZF9wZXJzaXN0ZW50X2tleV9zbG90ID0gTlVMTDsKKyAgICBmb3IoIHNsb3RfaWR4ID0gMDsgc2xvdF9pZHggPCBQU0FfS0VZX1NMT1RfQ09VTlQ7IHNsb3RfaWR4KysgKQorICAgIHsKKyAgICAgICAgcHNhX2tleV9zbG90X3QgKnNsb3QgPSAmZ2xvYmFsX2RhdGEua2V5X3Nsb3RzWyBzbG90X2lkeCBdOworICAgICAgICBpZiggISBwc2FfaXNfa2V5X3Nsb3Rfb2NjdXBpZWQoIHNsb3QgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlbGVjdGVkX3Nsb3QgPSBzbG90OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCB1bmxvY2tlZF9wZXJzaXN0ZW50X2tleV9zbG90ID09IE5VTEwgKSAmJgorICAgICAgICAgICAgKCAhIFBTQV9LRVlfTElGRVRJTUVfSVNfVk9MQVRJTEUoIHNsb3QtPmF0dHIubGlmZXRpbWUgKSApICYmCisgICAgICAgICAgICAoICEgcHNhX2lzX2tleV9zbG90X2xvY2tlZCggc2xvdCApICkgKQorICAgICAgICAgICAgdW5sb2NrZWRfcGVyc2lzdGVudF9rZXlfc2xvdCA9IHNsb3Q7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiB0aGVyZSBpcyBubyB1bnVzZWQga2V5IHNsb3QgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB1bmxvY2tlZCBrZXkKKyAgICAgKiBzbG90IGNvbnRhaW5pbmcgdGhlIGRlc2NyaXB0aW9uIG9mIGEgcGVyc2lzdGVudCBrZXksIHJlY3ljbGUgdGhlIGZpcnN0CisgICAgICogc3VjaCBrZXkgc2xvdCB3ZSBlbmNvdW50ZXJlZC4gSWYgd2UgbGF0ZXIgbmVlZCB0byBvcGVyYXRlIG9uIHRoZQorICAgICAqIHBlcnNpc3RlbnQga2V5IHdlIGFyZSBldmljdGluZyBub3csIHdlIHdpbGwgcmVsb2FkIGl0cyBkZXNjcmlwdGlvbiBmcm9tCisgICAgICogc3RvcmFnZS4KKyAgICAgKi8KKyAgICBpZiggKCBzZWxlY3RlZF9zbG90ID09IE5VTEwgKSAmJgorICAgICAgICAoIHVubG9ja2VkX3BlcnNpc3RlbnRfa2V5X3Nsb3QgIT0gTlVMTCApICkKKyAgICB7CisgICAgICAgIHNlbGVjdGVkX3Nsb3QgPSB1bmxvY2tlZF9wZXJzaXN0ZW50X2tleV9zbG90OworICAgICAgICBzZWxlY3RlZF9zbG90LT5sb2NrX2NvdW50ID0gMTsKKyAgICAgICAgcHNhX3dpcGVfa2V5X3Nsb3QoIHNlbGVjdGVkX3Nsb3QgKTsKKyAgICB9CisKKyAgICBpZiggc2VsZWN0ZWRfc2xvdCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgc3RhdHVzID0gcHNhX2xvY2tfa2V5X3Nsb3QoIHNlbGVjdGVkX3Nsb3QgKTsKKyAgICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAqdm9sYXRpbGVfa2V5X2lkID0gUFNBX0tFWV9JRF9WT0xBVElMRV9NSU4gKworICAgICAgICAgICAgKCAocHNhX2tleV9pZF90KSggc2VsZWN0ZWRfc2xvdCAtIGdsb2JhbF9kYXRhLmtleV9zbG90cyApICk7CisgICAgICAgICpwX3Nsb3QgPSBzZWxlY3RlZF9zbG90OworCisgICAgICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKKyAgICB9CisgICAgc3RhdHVzID0gUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlk7CisKK2Vycm9yOgogICAgICpwX3Nsb3QgPSBOVUxMOwotICAgIHJldHVybiggUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlkgKTsKKyAgICAqdm9sYXRpbGVfa2V5X2lkID0gMDsKKworICAgIHJldHVybiggc3RhdHVzICk7CiB9CiAKICNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19TVE9SQUdFX0MpCkBAIC0xMzcsNDYgKzI1OSw4NCBAQAogICAgICAgICBkYXRhID0gKHBzYV9zZV9rZXlfZGF0YV9zdG9yYWdlX3QgKikga2V5X2RhdGE7CiAgICAgICAgIG1lbWNweSggJnNsb3QtPmRhdGEuc2Uuc2xvdF9udW1iZXIsICZkYXRhLT5zbG90X251bWJlciwKICAgICAgICAgICAgICAgICBzaXplb2YoIHNsb3QtPmRhdGEuc2Uuc2xvdF9udW1iZXIgKSApOwotICAgICAgICBtZW1jcHkoICZzbG90LT5hdHRyLmJpdHMsICZkYXRhLT5iaXRzLAotICAgICAgICAgICAgICAgIHNpemVvZiggc2xvdC0+YXR0ci5iaXRzICkgKTsKICAgICB9CiAgICAgZWxzZQogI2VuZGlmIC8qIE1CRURUTFNfUFNBX0NSWVBUT19TRV9DICovCiAgICAgewotICAgICAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleV9pbnRvX3Nsb3QoIHNsb3QsIGtleV9kYXRhLCBrZXlfZGF0YV9sZW5ndGggKTsKKyAgICAgICAgc3RhdHVzID0gcHNhX2NvcHlfa2V5X21hdGVyaWFsX2ludG9fc2xvdCggc2xvdCwga2V5X2RhdGEsIGtleV9kYXRhX2xlbmd0aCApOworICAgICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKIGV4aXQ6CiAgICAgcHNhX2ZyZWVfcGVyc2lzdGVudF9rZXlfZGF0YSgga2V5X2RhdGEsIGtleV9kYXRhX2xlbmd0aCApOwogICAgIHJldHVybiggc3RhdHVzICk7CiB9CisjZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQyAqLwogCi0vKiogQ2hlY2sgd2hldGhlciBhIGtleSBpZGVudGlmaWVyIGlzIGFjY2VwdGFibGUuCi0gKgotICogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGtleSBpZGVudGlmaWVycyB0aGF0IHdlcmUgdmFsaWQgaW4gYQotICogcGFzdCByZWxlYXNlZCB2ZXJzaW9uIG11c3QgcmVtYWluIHZhbGlkLCB1bmxlc3MgYSBtaWdyYXRpb24gcGF0aAotICogaXMgcHJvdmlkZWQuCi0gKgotICogXHBhcmFtIGtleSAgICAgICAgVGhlIGtleSBpZGVudGlmaWVyIHRvIGNoZWNrLgotICogXHBhcmFtIHZlbmRvcl9vayAgTm9uemVybyB0byBhbGxvdyBrZXkgaWRzIGluIHRoZSB2ZW5kb3IgcmFuZ2UuCi0gKiAgICAgICAgICAgICAgICAgICAwIHRvIGFsbG93IG9ubHkga2V5IGlkcyBpbiB0aGUgYXBwbGljYXRpb24gcmFuZ2UuCi0gKgotICogXHJldHVybiAgICAgICAgICAgMSBpZiBccCBrZXkgaXMgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIDAuCi0gKi8KLXN0YXRpYyBpbnQgcHNhX2lzX2tleV9pZF92YWxpZCggbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LCBpbnQgdmVuZG9yX29rICkKK3BzYV9zdGF0dXNfdCBwc2FfZ2V0X2FuZF9sb2NrX2tleV9zbG90KCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9zbG90X3QgKipwX3Nsb3QgKQogewotICAgIHBzYV9rZXlfaWRfdCBrZXlfaWQgPSBNQkVEVExTX1NWQ19LRVlfSURfR0VUX0tFWV9JRCgga2V5ICk7Ci0gICAgaWYoIFBTQV9LRVlfSURfVVNFUl9NSU4gPD0ga2V5X2lkICYmIGtleV9pZCA8PSBQU0FfS0VZX0lEX1VTRVJfTUFYICkKLSAgICAgICAgcmV0dXJuKCAxICk7Ci0gICAgZWxzZSBpZiggdmVuZG9yX29rICYmCi0gICAgICAgICAgICAgUFNBX0tFWV9JRF9WRU5ET1JfTUlOIDw9IGtleV9pZCAmJgotICAgICAgICAgICAgIGtleV9pZCA8PSBQU0FfS0VZX0lEX1ZFTkRPUl9NQVggKQotICAgICAgICByZXR1cm4oIDEgKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiggMCApOwotfQorICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRDsKKworICAgICpwX3Nsb3QgPSBOVUxMOworICAgIGlmKCAhIGdsb2JhbF9kYXRhLmtleV9zbG90c19pbml0aWFsaXplZCApCisgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JBRF9TVEFURSApOworCisgICAgLyoKKyAgICAgKiBPbiBzdWNjZXNzLCB0aGUgcG9pbnRlciB0byB0aGUgc2xvdCBpcyBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIGNhbGxlcgorICAgICAqIHRodXMgbm8gbmVlZCB0byB1bmxvY2sgdGhlIGtleSBzbG90IGhlcmUuCisgICAgICovCisgICAgc3RhdHVzID0gcHNhX2dldF9hbmRfbG9ja19rZXlfc2xvdF9pbl9tZW1vcnkoIGtleSwgcF9zbG90ICk7CisgICAgaWYoIHN0YXR1cyAhPSBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgKQorICAgICAgICByZXR1cm4oIHN0YXR1cyApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fU1RPUkFHRV9DKQorICAgIHBzYV9rZXlfaWRfdCB2b2xhdGlsZV9rZXlfaWQ7CisKKyAgICBzdGF0dXMgPSBwc2FfZ2V0X2VtcHR5X2tleV9zbG90KCAmdm9sYXRpbGVfa2V5X2lkLCBwX3Nsb3QgKTsKKyAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKworICAgICgqcF9zbG90KS0+YXR0ci5saWZldGltZSA9IFBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDsKKyAgICAoKnBfc2xvdCktPmF0dHIuaWQgPSBrZXk7CisKKyAgICBzdGF0dXMgPSBwc2FfbG9hZF9wZXJzaXN0ZW50X2tleV9pbnRvX3Nsb3QoICpwX3Nsb3QgKTsKKyAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICAgICAgcHNhX3dpcGVfa2V5X3Nsb3QoICpwX3Nsb3QgKTsKKworICAgIHJldHVybiggc3RhdHVzICk7CisjZWxzZQorICAgIHJldHVybiggUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICk7CiAjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fU1RPUkFHRV9DKSAqLwogCit9CisKK3BzYV9zdGF0dXNfdCBwc2FfdW5sb2NrX2tleV9zbG90KCBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCApCit7CisgICAgaWYoIHNsb3QgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKKworICAgIGlmKCBzbG90LT5sb2NrX2NvdW50ID4gMCApCisgICAgeworICAgICAgICBzbG90LT5sb2NrX2NvdW50LS07CisgICAgICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEFzIHRoZSByZXR1cm4gZXJyb3IgY29kZSBtYXkgbm90IGJlIGhhbmRsZWQgaW4gY2FzZSBvZiBtdWx0aXBsZSBlcnJvcnMsCisgICAgICogZG8gb3VyIGJlc3QgdG8gcmVwb3J0IGlmIHRoZSBsb2NrIGNvdW50ZXIgaXMgZXF1YWwgdG8gemVybzogaWYKKyAgICAgKiBhdmFpbGFibGUgY2FsbCBNQkVEVExTX1BBUkFNX0ZBSUxFRCB0aGF0IG1heSB0ZXJtaW5hdGUgZXhlY3V0aW9uIChpZgorICAgICAqIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBleGVjdXRpb24gb2YgYSB1bml0IHRlc3Qgc3VpdGUgdGhpcyB3aWxsIHN0b3AgdGhlCisgICAgICogdGVzdCBzdWl0ZSBleGVjdXRpb24pLgorICAgICAqLworI2lmZGVmIE1CRURUTFNfQ0hFQ0tfUEFSQU1TCisgICAgTUJFRFRMU19QQVJBTV9GQUlMRUQoIHNsb3QtPmxvY2tfY291bnQgPiAwICk7CisjZW5kaWYKKworICAgIHJldHVybiggUFNBX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQgKTsKK30KKwogcHNhX3N0YXR1c190IHBzYV92YWxpZGF0ZV9rZXlfbG9jYXRpb24oIHBzYV9rZXlfbGlmZXRpbWVfdCBsaWZldGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffc2VfZHJ2X3RhYmxlX2VudHJ5X3QgKipwX2RydiApCiB7CkBAIC0yMDIsOCArMzYyLDcgQEAKICAgICAgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOwogfQogCi1wc2Ffc3RhdHVzX3QgcHNhX3ZhbGlkYXRlX2tleV9wZXJzaXN0ZW5jZSggcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSApCitwc2Ffc3RhdHVzX3QgcHNhX3ZhbGlkYXRlX2tleV9wZXJzaXN0ZW5jZSggcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lICkKIHsKICAgICBpZiAoIFBTQV9LRVlfTElGRVRJTUVfSVNfVk9MQVRJTEUoIGxpZmV0aW1lICkgKQogICAgIHsKQEAgLTIxNCwxMyArMzczLDggQEAKICAgICB7CiAgICAgICAgIC8qIFBlcnNpc3RlbnQga2V5cyByZXF1aXJlIHN0b3JhZ2Ugc3VwcG9ydCAqLwogI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQykKLSAgICAgICAgaWYoIHBzYV9pc19rZXlfaWRfdmFsaWQoIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfbGlmZXRpbWVfaXNfZXh0ZXJuYWwoIGxpZmV0aW1lICkgKSApCi0gICAgICAgICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKKyAgICAgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOwogI2Vsc2UgLyogTUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQyAqLwotICAgICAgICAodm9pZCkga2V5OwogICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CiAjZW5kaWYgLyogIU1CRURUTFNfUFNBX0NSWVBUT19TVE9SQUdFX0MgKi8KICAgICB9CkBAIC0yMzIsMjkgKzM4NiwyMCBAQAogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAgICAgcHNhX2tleV9zbG90X3QgKnNsb3Q7CiAKLSAgICAqaGFuZGxlID0gMDsKLQotICAgIGlmKCAhIHBzYV9pc19rZXlfaWRfdmFsaWQoIGtleSwgMSApICkKLSAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCApOwotCi0gICAgc3RhdHVzID0gcHNhX2dldF9lbXB0eV9rZXlfc2xvdCggaGFuZGxlLCAmc2xvdCApOwotICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQotICAgICAgICByZXR1cm4oIHN0YXR1cyApOwotCi0gICAgc2xvdC0+YXR0ci5saWZldGltZSA9IFBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDsKLSAgICBzbG90LT5hdHRyLmlkID0ga2V5OwotCi0gICAgc3RhdHVzID0gcHNhX2xvYWRfcGVyc2lzdGVudF9rZXlfaW50b19zbG90KCBzbG90ICk7CisgICAgc3RhdHVzID0gcHNhX2dldF9hbmRfbG9ja19rZXlfc2xvdCgga2V5LCAmc2xvdCApOwogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgIHsKLSAgICAgICAgcHNhX3dpcGVfa2V5X3Nsb3QoIHNsb3QgKTsKLSAgICAgICAgKmhhbmRsZSA9IDA7CisgICAgICAgICpoYW5kbGUgPSBQU0FfS0VZX0hBTkRMRV9JTklUOworICAgICAgICByZXR1cm4oIHN0YXR1cyApOwogICAgIH0KLSAgICByZXR1cm4oIHN0YXR1cyApOworCisgICAgKmhhbmRsZSA9IGtleTsKKworICAgIHJldHVybiggcHNhX3VubG9ja19rZXlfc2xvdCggc2xvdCApICk7CiAKICNlbHNlIC8qIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQykgKi8KICAgICAodm9pZCkga2V5OwotICAgICpoYW5kbGUgPSAwOworICAgICpoYW5kbGUgPSBQU0FfS0VZX0hBTkRMRV9JTklUOwogICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKICNlbmRpZiAvKiAhZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fU1RPUkFHRV9DKSAqLwogfQpAQCAtMjY0LDIzICs0MDksNDggQEAKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwogICAgIHBzYV9rZXlfc2xvdF90ICpzbG90OwogCi0gICAgaWYoIGhhbmRsZSA9PSAwICkKKyAgICBpZiggcHNhX2tleV9oYW5kbGVfaXNfbnVsbCggaGFuZGxlICkgKQogICAgICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CiAKLSAgICBzdGF0dXMgPSBwc2FfZ2V0X2tleV9zbG90KCBoYW5kbGUsICZzbG90ICk7CisgICAgc3RhdHVzID0gcHNhX2dldF9hbmRfbG9ja19rZXlfc2xvdF9pbl9tZW1vcnkoIGhhbmRsZSwgJnNsb3QgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIAotICAgIHJldHVybiggcHNhX3dpcGVfa2V5X3Nsb3QoIHNsb3QgKSApOworICAgIGlmKCBzbG90LT5sb2NrX2NvdW50IDw9IDEgKQorICAgICAgICByZXR1cm4oIHBzYV93aXBlX2tleV9zbG90KCBzbG90ICkgKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiggcHNhX3VubG9ja19rZXlfc2xvdCggc2xvdCApICk7Cit9CisKK3BzYV9zdGF0dXNfdCBwc2FfcHVyZ2Vfa2V5KCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgKQoreworICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CisgICAgcHNhX2tleV9zbG90X3QgKnNsb3Q7CisKKyAgICBzdGF0dXMgPSBwc2FfZ2V0X2FuZF9sb2NrX2tleV9zbG90X2luX21lbW9yeSgga2V5LCAmc2xvdCApOworICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICByZXR1cm4oIHN0YXR1cyApOworCisgICAgaWYoICggISBQU0FfS0VZX0xJRkVUSU1FX0lTX1ZPTEFUSUxFKCBzbG90LT5hdHRyLmxpZmV0aW1lICkgKSAmJgorICAgICAgICAoIHNsb3QtPmxvY2tfY291bnQgPD0gMSApICkKKyAgICAgICAgcmV0dXJuKCBwc2Ffd2lwZV9rZXlfc2xvdCggc2xvdCApICk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4oIHBzYV91bmxvY2tfa2V5X3Nsb3QoIHNsb3QgKSApOwogfQogCiB2b2lkIG1iZWR0bHNfcHNhX2dldF9zdGF0cyggbWJlZHRsc19wc2Ffc3RhdHNfdCAqc3RhdHMgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3Qga2V5OworICAgIHNpemVfdCBzbG90X2lkeDsKKwogICAgIG1lbXNldCggc3RhdHMsIDAsIHNpemVvZiggKnN0YXRzICkgKTsKLSAgICBmb3IoIGtleSA9IDE7IGtleSA8PSBQU0FfS0VZX1NMT1RfQ09VTlQ7IGtleSsrICkKKworICAgIGZvciggc2xvdF9pZHggPSAwOyBzbG90X2lkeCA8IFBTQV9LRVlfU0xPVF9DT1VOVDsgc2xvdF9pZHgrKyApCiAgICAgewotICAgICAgICBjb25zdCBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCA9ICZnbG9iYWxfZGF0YS5rZXlfc2xvdHNba2V5IC0gMV07CisgICAgICAgIGNvbnN0IHBzYV9rZXlfc2xvdF90ICpzbG90ID0gJmdsb2JhbF9kYXRhLmtleV9zbG90c1sgc2xvdF9pZHggXTsKKyAgICAgICAgaWYoIHBzYV9pc19rZXlfc2xvdF9sb2NrZWQoIHNsb3QgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgICsrc3RhdHMtPmxvY2tlZF9zbG90czsKKyAgICAgICAgfQogICAgICAgICBpZiggISBwc2FfaXNfa2V5X3Nsb3Rfb2NjdXBpZWQoIHNsb3QgKSApCiAgICAgICAgIHsKICAgICAgICAgICAgICsrc3RhdHMtPmVtcHR5X3Nsb3RzOwpkaWZmIC0tZ2l0IGEvbGlicmFyeS9wc2FfY3J5cHRvX3Nsb3RfbWFuYWdlbWVudC5oIGIvbGlicmFyeS9wc2FfY3J5cHRvX3Nsb3RfbWFuYWdlbWVudC5oCmluZGV4IGM2ZmVjYmIuLmVmMDgxNGEgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuaAorKysgYi9saWJyYXJ5L3BzYV9jcnlwdG9fc2xvdF9tYW5hZ2VtZW50LmgKQEAgLTIyLDMyICsyMiw4NiBAQAogI2RlZmluZSBQU0FfQ1JZUFRPX1NMT1RfTUFOQUdFTUVOVF9ICiAKICNpbmNsdWRlICJwc2EvY3J5cHRvLmgiCisjaW5jbHVkZSAicHNhX2NyeXB0b19jb3JlLmgiCiAjaW5jbHVkZSAicHNhX2NyeXB0b19zZS5oIgogCiAvKiBOdW1iZXIgb2Yga2V5IHNsb3RzIChwbHVzIG9uZSBiZWNhdXNlIDAgaXMgbm90IHVzZWQpLgogICogVGhlIHZhbHVlIGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IGZvciBub3csIGZvciBzaW1wbGljaXR5LiAqLwogI2RlZmluZSBQU0FfS0VZX1NMT1RfQ09VTlQgMzIKIAotLyoqIEFjY2VzcyBhIGtleSBzbG90IGF0IHRoZSBnaXZlbiBoYW5kbGUuCisvKiogUmFuZ2Ugb2Ygdm9sYXRpbGUga2V5IGlkZW50aWZpZXJzLgogICoKLSAqIFxwYXJhbSBoYW5kbGUgICAgICAgIEtleSBoYW5kbGUgdG8gcXVlcnkuCi0gKiBccGFyYW1bb3V0XSBwX3Nsb3QgICBPbiBzdWNjZXNzLCBgKnBfc2xvdGAgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZQotICogICAgICAgICAgICAgICAgICAgICAga2V5IHNsb3QgaW4gbWVtb3J5IGRlc2lnbmF0ZWQgYnkgXHAgaGFuZGxlLgotICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKLSAqICAgICAgICAgU3VjY2VzczogXHAgaGFuZGxlIGlzIGEgaGFuZGxlIHRvIGAqcF9zbG90YC4gTm90ZSB0aGF0IGAqcF9zbG90YAotICogICAgICAgICBtYXkgYmUgZW1wdHkgb3Igb2NjdXBpZWQuCi0gKiBccmV0dmFsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRQotICogICAgICAgICBccCBoYW5kbGUgaXMgb3V0IG9mIHJhbmdlIG9yIGlzIG5vdCBpbiB1c2UuCi0gKiBccmV0dmFsIFBTQV9FUlJPUl9CQURfU1RBVEUKLSAqICAgICAgICAgVGhlIGxpYnJhcnkgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLgorICogIFRoZSBsYXN0IFBTQV9LRVlfU0xPVF9DT1VOVCBpZGVudGlmaWVycyBvZiB0aGUgaW1wbGVtZW50YXRpb24gcmFuZ2UKKyAqICBvZiBrZXkgaWRlbnRpZmllcnMgYXJlIHJlc2VydmVkIGZvciB2b2xhdGlsZSBrZXkgaWRlbnRpZmllcnMuCisgKiAgQSB2b2xhdGlsZSBrZXkgaWRlbnRpZmllciBpcyBlcXVhbCB0byAjUFNBX0tFWV9JRF9WT0xBVElMRV9NSU4gcGx1cyB0aGUKKyAqICBpbmRleCBvZiB0aGUga2V5IHNsb3QgY29udGFpbmluZyB0aGUgdm9sYXRpbGUga2V5IGRlZmluaXRpb24uCiAgKi8KLXBzYV9zdGF0dXNfdCBwc2FfZ2V0X2tleV9zbG90KCBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3Nsb3RfdCAqKnBfc2xvdCApOworCisvKiogVGhlIG1pbmltdW0gdmFsdWUgZm9yIGEgdm9sYXRpbGUga2V5IGlkZW50aWZpZXIuCisgKi8KKyNkZWZpbmUgUFNBX0tFWV9JRF9WT0xBVElMRV9NSU4gICggUFNBX0tFWV9JRF9WRU5ET1JfTUFYIC0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfS0VZX1NMT1RfQ09VTlQgKyAxICkKKworLyoqIFRoZSBtYXhpbXVtIHZhbHVlIGZvciBhIHZvbGF0aWxlIGtleSBpZGVudGlmaWVyLgorICovCisjZGVmaW5lIFBTQV9LRVlfSURfVk9MQVRJTEVfTUFYICBQU0FfS0VZX0lEX1ZFTkRPUl9NQVgKKworLyoqIFRlc3Qgd2hldGhlciBhIGtleSBpZGVudGlmaWVyIGlzIGEgdm9sYXRpbGUga2V5IGlkZW50aWZpZXIuCisgKgorICogXHBhcmFtIGtleV9pZCAgS2V5IGlkZW50aWZpZXIgdG8gdGVzdC4KKyAqCisgKiBccmV0dmFsIDEKKyAqICAgICAgICAgVGhlIGtleSBpZGVudGlmaWVyIGlzIGEgdm9sYXRpbGUga2V5IGlkZW50aWZpZXIuCisgKiBccmV0dmFsIDAKKyAqICAgICAgICAgVGhlIGtleSBpZGVudGlmaWVyIGlzIG5vdCBhIHZvbGF0aWxlIGtleSBpZGVudGlmaWVyLgorICovCitzdGF0aWMgaW5saW5lIGludCBwc2Ffa2V5X2lkX2lzX3ZvbGF0aWxlKCBwc2Ffa2V5X2lkX3Qga2V5X2lkICkKK3sKKyAgICByZXR1cm4oICgga2V5X2lkID49IFBTQV9LRVlfSURfVk9MQVRJTEVfTUlOICkgJiYKKyAgICAgICAgICAgICgga2V5X2lkIDw9IFBTQV9LRVlfSURfVk9MQVRJTEVfTUFYICkgKTsKK30KKworLyoqIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgYSBrZXkgZ2l2ZW4gaXRzIGlkZW50aWZpZXIgYW5kIGxvY2sgaXQuCisgKgorICogVGhlIGRlc2NyaXB0aW9ucyBvZiB2b2xhdGlsZSBrZXlzIGFuZCBsb2FkZWQgcGVyc2lzdGVudCBrZXlzIGFyZSBzdG9yZWQgaW4KKyAqIGtleSBzbG90cy4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUga2V5IHNsb3QgY29udGFpbmluZyB0aGUKKyAqIGRlc2NyaXB0aW9uIG9mIGEga2V5IGdpdmVuIGl0cyBpZGVudGlmaWVyLgorICoKKyAqIEluIGNhc2Ugb2YgYSBwZXJzaXN0ZW50IGtleSwgdGhlIGZ1bmN0aW9uIGxvYWRzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUga2V5CisgKiBpbnRvIGEga2V5IHNsb3QgaWYgbm90IGFscmVhZHkgZG9uZS4KKyAqCisgKiBPbiBzdWNjZXNzLCB0aGUgcmV0dXJuZWQga2V5IHNsb3QgaXMgbG9ja2VkLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YKKyAqIHRoZSBjYWxsZXIgdG8gdW5sb2NrIHRoZSBrZXkgc2xvdCB3aGVuIGl0IGRvZXMgbm90IGFjY2VzcyBpdCBhbnltb3JlLgorICoKKyAqIFxwYXJhbSBrZXkgICAgICAgICAgIEtleSBpZGVudGlmaWVyIHRvIHF1ZXJ5LgorICogXHBhcmFtW291dF0gcF9zbG90ICAgT24gc3VjY2VzcywgYCpwX3Nsb3RgIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGtleSBzbG90IGNvbnRhaW5pbmcgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBrZXkKKyAqICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZWQgYnkgXHAga2V5LgorICoKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCisgKiAgICAgICAgIFxwICpwX3Nsb3QgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBrZXkgc2xvdCBjb250YWluaW5nIHRoZQorICogICAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUga2V5IGlkZW50aWZpZWQgYnkgXHAga2V5LgorICogICAgICAgICBUaGUga2V5IHNsb3QgY291bnRlciBoYXMgYmVlbiBpbmNyZW1lbnRlZC4KKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9CQURfU1RBVEUKKyAqICAgICAgICAgVGhlIGxpYnJhcnkgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLgorICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfSEFORExFCisgKiAgICAgICAgIFxwIGtleSBpcyBub3QgYSB2YWxpZCBrZXkgaWRlbnRpZmllci4KKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZCisgKiAgICAgICAgIFxwIGtleSBpcyBhIHBlcnNpc3RlbnQga2V5IGlkZW50aWZpZXIuIFRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdAorICogICAgICAgICBoYXZlIHN1ZmZpY2llbnQgcmVzb3VyY2VzIHRvIGxvYWQgdGhlIHBlcnNpc3RlbnQga2V5LiBUaGlzIGNhbiBiZQorICogICAgICAgICBkdWUgdG8gYSBsYWNrIG9mIGVtcHR5IGtleSBzbG90LCBvciBhdmFpbGFibGUgbWVtb3J5LgorICogXHJldHZhbCAjUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUCisgKiAgICAgICAgIFRoZXJlIGlzIG5vIGtleSB3aXRoIGtleSBpZGVudGlmaWVyIFxwIGtleS4KKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVECisgKiBccmV0dmFsICNQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCisgKiBccmV0dmFsICNQU0FfRVJST1JfREFUQV9DT1JSVVBUCisgKi8KK3BzYV9zdGF0dXNfdCBwc2FfZ2V0X2FuZF9sb2NrX2tleV9zbG90KCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9zbG90X3QgKipwX3Nsb3QgKTsKIAogLyoqIEluaXRpYWxpemUgdGhlIGtleSBzbG90IHN0cnVjdHVyZXMuCiAgKgotICogXHJldHZhbCBQU0FfU1VDQ0VTUworICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKICAqICAgICAgICAgQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24gYWx3YXlzIHN1Y2NlZWRzLgogICovCiBwc2Ffc3RhdHVzX3QgcHNhX2luaXRpYWxpemVfa2V5X3Nsb3RzKCB2b2lkICk7CkBAIC02MCwxOSArMTE0LDYxIEBACiAvKiogRmluZCBhIGZyZWUga2V5IHNsb3QuCiAgKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEga2V5IHNsb3QgdGhhdCBpcyBhdmFpbGFibGUgZm9yIHVzZSBhbmQgaXMgaW4gaXRzCi0gKiBncm91bmQgc3RhdGUgKGFsbC1iaXRzLXplcm8pLgorICogZ3JvdW5kIHN0YXRlIChhbGwtYml0cy16ZXJvKS4gT24gc3VjY2VzcywgdGhlIGtleSBzbG90IGlzIGxvY2tlZC4gSXQgaXMKKyAqIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyIHRvIHVubG9jayB0aGUga2V5IHNsb3Qgd2hlbiBpdCBkb2VzIG5vdAorICogYWNjZXNzIGl0IGFueW1vcmUuCiAgKgotICogXHBhcmFtW291dF0gaGFuZGxlICAgT24gc3VjY2VzcywgYSBzbG90IG51bWJlciB0aGF0IGNhbiBiZSB1c2VkIGFzIGEKLSAqICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSB0byB0aGUgc2xvdC4KLSAqIFxwYXJhbVtvdXRdIHBfc2xvdCAgIE9uIHN1Y2Nlc3MsIGEgcG9pbnRlciB0byB0aGUgc2xvdC4KKyAqIFxwYXJhbVtvdXRdIHZvbGF0aWxlX2tleV9pZCAgIE9uIHN1Y2Nlc3MsIHZvbGF0aWxlIGtleSBpZGVudGlmaWVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHRvIHRoZSByZXR1cm5lZCBzbG90LgorICogXHBhcmFtW291dF0gcF9zbG90ICAgICAgICAgICAgT24gc3VjY2VzcywgYSBwb2ludGVyIHRvIHRoZSBzbG90LgogICoKICAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCiAgKiBccmV0dmFsICNQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQogICogXHJldHZhbCAjUFNBX0VSUk9SX0JBRF9TVEFURQogICovCi1wc2Ffc3RhdHVzX3QgcHNhX2dldF9lbXB0eV9rZXlfc2xvdCggcHNhX2tleV9oYW5kbGVfdCAqaGFuZGxlLAorcHNhX3N0YXR1c190IHBzYV9nZXRfZW1wdHlfa2V5X3Nsb3QoIHBzYV9rZXlfaWRfdCAqdm9sYXRpbGVfa2V5X2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfc2xvdF90ICoqcF9zbG90ICk7CiAKKy8qKiBMb2NrIGEga2V5IHNsb3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbmNyZW1lbnRzIHRoZSBrZXkgc2xvdCBsb2NrIGNvdW50ZXIgYnkgb25lLgorICoKKyAqIFxwYXJhbVtpbl0gc2xvdCAgVGhlIGtleSBzbG90LgorICoKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCisgICAgICAgICAgICAgICBUaGUga2V5IHNsb3QgbG9jayBjb3VudGVyIHdhcyBpbmNyZW1lbnRlZC4KKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVECisgKiAgICAgICAgICAgICBUaGUgbG9jayBjb3VudGVyIGFscmVhZHkgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSBhbmQgd2FzIG5vdAorICogICAgICAgICAgICAgaW5jcmVhc2VkLgorICovCitzdGF0aWMgaW5saW5lIHBzYV9zdGF0dXNfdCBwc2FfbG9ja19rZXlfc2xvdCggcHNhX2tleV9zbG90X3QgKnNsb3QgKQoreworICAgIGlmKCBzbG90LT5sb2NrX2NvdW50ID49IFNJWkVfTUFYICkKKyAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRCApOworCisgICAgc2xvdC0+bG9ja19jb3VudCsrOworCisgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOworfQorCisvKiogVW5sb2NrIGEga2V5IHNsb3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBkZWNyZW1lbnRzIHRoZSBrZXkgc2xvdCBsb2NrIGNvdW50ZXIgYnkgb25lLgorICoKKyAqIFxub3RlIFRvIGVhc2UgdGhlIGhhbmRsaW5nIG9mIGVycm9ycyBpbiByZXRyaWV2aW5nIGEga2V5IHNsb3QKKyAqICAgICAgIGEgTlVMTCBpbnB1dCBwb2ludGVyIGlzIHZhbGlkLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqICAgICAgIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGRvaW5nIGFueXRoaW5nIGluIHRoYXQgY2FzZS4KKyAqCisgKiBccGFyYW1baW5dIHNsb3QgIFRoZSBrZXkgc2xvdC4KKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCisgKiAgICAgICAgICAgICBccCBzbG90IGlzIE5VTEwgb3IgdGhlIGtleSBzbG90IGxvY2sgY291bnRlciBoYXMgYmVlbgorICogICAgICAgICAgICAgZGVjcmVtZW50ZWQgc3VjY2Vzc2Z1bGx5LgorICogXHJldHZhbCAjUFNBX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQKKyAqICAgICAgICAgICAgIFRoZSBsb2NrIGNvdW50ZXIgd2FzIGVxdWFsIHRvIDAuCisgKgorICovCitwc2Ffc3RhdHVzX3QgcHNhX3VubG9ja19rZXlfc2xvdCggcHNhX2tleV9zbG90X3QgKnNsb3QgKTsKKwogLyoqIFRlc3Qgd2hldGhlciBhIGxpZmV0aW1lIGRlc2lnbmF0ZXMgYSBrZXkgaW4gYW4gZXh0ZXJuYWwgY3J5cHRvcHJvY2Vzc29yLgogICoKICAqIFxwYXJhbSBsaWZldGltZSAgICAgIFRoZSBsaWZldGltZSB0byB0ZXN0LgpAQCAtMTA4LDE4ICsyMDQsMjYgQEAKIHBzYV9zdGF0dXNfdCBwc2FfdmFsaWRhdGVfa2V5X2xvY2F0aW9uKCBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX3NlX2Rydl90YWJsZV9lbnRyeV90ICoqcF9kcnYgKTsKIAotLyoqIFZhbGlkYXRlIHRoYXQgYSBrZXkncyBwZXJzaXN0ZW5jZSBhdHRyaWJ1dGVzIGFyZSB2YWxpZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIGEga2V5J3MgZGVjbGFyZWQgcGVyc2lzdGVuY2UgbGV2ZWwgYW5kIGtleSBJRAotICogYXR0cmlidXRlcyBhcmUgdmFsaWQgYW5kIGtub3duIHRvIHRoZSBQU0EgQ29yZSBpbiBpdHMgYWN0dWFsIGNvbmZpZ3VyYXRpb24uCisvKiogVmFsaWRhdGUgdGhlIHBlcnNpc3RlbmNlIG9mIGEga2V5LgogICoKICAqIFxwYXJhbVtpbl0gbGlmZXRpbWUgIFRoZSBrZXkgbGlmZXRpbWUgYXR0cmlidXRlLgotICogXHBhcmFtW2luXSBrZXkgICAgICAgVGhlIGtleSBpZGVudGlmaWVyLgogICoKICAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCi0gKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgVGhlIGtleSBpcyBwZXJzaXN0ZW50IGJ1dCBwZXJzaXN0ZW50CisgKiAgICAgICAgIGtleXMgYXJlIG5vdCBzdXBwb3J0ZWQuCiAgKi8KLXBzYV9zdGF0dXNfdCBwc2FfdmFsaWRhdGVfa2V5X3BlcnNpc3RlbmNlKCBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ICk7Citwc2Ffc3RhdHVzX3QgcHNhX3ZhbGlkYXRlX2tleV9wZXJzaXN0ZW5jZSggcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lICk7CisKKy8qKiBWYWxpZGF0ZSBhIGtleSBpZGVudGlmaWVyLgorICoKKyAqIFxwYXJhbVtpbl0ga2V5ICAgICAgICAgICBUaGUga2V5IGlkZW50aWZpZXIuCisgKiBccGFyYW1baW5dIHZlbmRvcl9vayAgICAgTm9uLXplcm8gdG8gaW5kaWNhdGUgdGhhdCBrZXkgaWRlbnRpZmllcnMgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdmVuZG9yIHJhbmdlIGFyZSBhbGxvd2VkLCB2b2xhdGlsZSBrZXkgaWRlbnRpZmllcnMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRlZCBcYyAwIG90aGVyd2lzZS4KKyAqCisgKiBccmV0dmFsICNQU0FfU1VDQ0VTUyBUaGUgaWRlbnRpZmllciBpcyB2YWxpZC4KKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UIFRoZSBrZXkgaWRlbnRpZmllciBpcyBub3QgdmFsaWQuCisgKi8KK3BzYV9zdGF0dXNfdCBwc2FfdmFsaWRhdGVfa2V5X2lkKCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksIGludCB2ZW5kb3Jfb2sgKTsKIAogI2VuZGlmIC8qIFBTQV9DUllQVE9fU0xPVF9NQU5BR0VNRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnJhcnkvcHNhX2NyeXB0b19zdG9yYWdlLmMgYi9saWJyYXJ5L3BzYV9jcnlwdG9fc3RvcmFnZS5jCmluZGV4IDQ2ZDBiNjUuLjFlYmQyMGUgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvcHNhX2NyeXB0b19zdG9yYWdlLmMKKysrIGIvbGlicmFyeS9wc2FfY3J5cHRvX3N0b3JhZ2UuYwpAQCAtOTAsOSArOTAsOSBAQAogICogXHBhcmFtW291dF0gZGF0YSAgICAgICAgIEJ1ZmZlciB3aGVyZSB0aGUgZGF0YSBpcyB0byBiZSB3cml0dGVuLgogICogXHBhcmFtIGRhdGFfc2l6ZSAgICAgICAgIFNpemUgb2YgdGhlIFxjIGRhdGEgYnVmZmVyIGluIGJ5dGVzLgogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKLSAqIFxyZXR2YWwgUFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQotICogXHJldHZhbCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCisgKiBccmV0dmFsICNQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QKICAqLwogc3RhdGljIHBzYV9zdGF0dXNfdCBwc2FfY3J5cHRvX3N0b3JhZ2VfbG9hZCgKICAgICBjb25zdCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBkYXRhX3NpemUgKQpAQCAtMTM3LDEwICsxMzcsMTAgQEAKICAqIFxwYXJhbSBkYXRhX2xlbmd0aCAgIFRoZSBudW1iZXIgb2YgYnl0ZXMKICAqICAgICAgICAgICAgICAgICAgICAgIHRoYXQgbWFrZSB1cCB0aGUgZGF0YS4KICAqCi0gKiBccmV0dmFsIFBTQV9TVUNDRVNTCi0gKiBccmV0dmFsIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfU1RPUkFHRQotICogXHJldHZhbCBQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCi0gKiBccmV0dmFsIFBTQV9FUlJPUl9BTFJFQURZX0VYSVNUUworICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfU1RPUkFHRQorICogXHJldHZhbCAjUFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQorICogXHJldHZhbCAjUFNBX0VSUk9SX0FMUkVBRFlfRVhJU1RTCiAgKi8KIHN0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX2NyeXB0b19zdG9yYWdlX3N0b3JlKCBjb25zdCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwKQEAgLTIxMCw4ICsyMTAsOCBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvIGJlIG9idGFpbmVkLgogICogXHBhcmFtW291dF0gZGF0YV9sZW5ndGggIFRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtYWtlIHVwIHRoZSBkYXRhLgogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKLSAqIFxyZXR2YWwgUFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQorICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9TVE9SQUdFX0ZBSUxVUkUKICAqLwogc3RhdGljIHBzYV9zdGF0dXNfdCBwc2FfY3J5cHRvX3N0b3JhZ2VfZ2V0X2RhdGFfbGVuZ3RoKAogICAgIGNvbnN0IG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKQEAgLTI1Myw2ICsyNTMsMjUgQEAKIH0KICNlbmRpZgogCisvKgorICogMTYtYml0IGludGVnZXIgbWFuaXB1bGF0aW9uIG1hY3JvcyAobGl0dGxlIGVuZGlhbikKKyAqLworI2lmbmRlZiBHRVRfVUlOVDE2X0xFCisjZGVmaW5lIEdFVF9VSU5UMTZfTEUoIG4sIGIsIGkgKSAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChuKSA9ICggKHVpbnQxNl90KSAoYilbKGkpICAgIF0gICAgICAgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDE2X3QpIChiKVsoaSkgKyAxXSA8PCAgOCApOyAgICAgICAgICAgIFwKK30KKyNlbmRpZgorCisjaWZuZGVmIFBVVF9VSU5UMTZfTEUKKyNkZWZpbmUgUFVUX1VJTlQxNl9MRSggbiwgYiwgaSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChiKVsoaSkgICAgXSA9ICh1bnNpZ25lZCBjaGFyKSAoICggKG4pICAgICAgICkgJiAweEZGICk7ICAgIFwKKyAgICAoYilbKGkpICsgMV0gPSAodW5zaWduZWQgY2hhcikgKCAoIChuKSA+PiAgOCApICYgMHhGRiApOyAgICBcCit9CisjZW5kaWYKKwogLyoqCiAgKiBQZXJzaXN0ZW50IGtleSBzdG9yYWdlIG1hZ2ljIGhlYWRlci4KICAqLwpAQCAtMjYzLDkgKzI4Miw4IEBACiAgICAgdWludDhfdCBtYWdpY1tQU0FfS0VZX1NUT1JBR0VfTUFHSUNfSEVBREVSX0xFTkdUSF07CiAgICAgdWludDhfdCB2ZXJzaW9uWzRdOwogICAgIHVpbnQ4X3QgbGlmZXRpbWVbc2l6ZW9mKCBwc2Ffa2V5X2xpZmV0aW1lX3QgKV07Ci0gICAgdWludDhfdCB0eXBlWzRdOyAvKiBTaXplPTQgZm9yIGEgMi1ieXRlIHR5cGUgdG8ga2VlcCB0aGUgc3RydWN0dXJlIG1vcmUKLSAgICAgICAgICAgICAgICAgICAgICAqIHJlZ3VsYXIgYW5kIGFsaWduZWQgYW5kIHRvIG1ha2UgcG90ZW50aWFsIGZ1dHVyZQotICAgICAgICAgICAgICAgICAgICAgICogZXh0ZW5zaWJpbGl0eSBlYXNpZXIuICovCisgICAgdWludDhfdCB0eXBlWzJdOworICAgIHVpbnQ4X3QgYml0c1syXTsKICAgICB1aW50OF90IHBvbGljeVtzaXplb2YoIHBzYV9rZXlfcG9saWN5X3QgKV07CiAgICAgdWludDhfdCBkYXRhX2xlbls0XTsKICAgICB1aW50OF90IGtleV9kYXRhW107CkBAIC0yODIsNyArMzAwLDggQEAKICAgICBtZW1jcHkoIHN0b3JhZ2VfZm9ybWF0LT5tYWdpYywgUFNBX0tFWV9TVE9SQUdFX01BR0lDX0hFQURFUiwgUFNBX0tFWV9TVE9SQUdFX01BR0lDX0hFQURFUl9MRU5HVEggKTsKICAgICBQVVRfVUlOVDMyX0xFKCAwLCBzdG9yYWdlX2Zvcm1hdC0+dmVyc2lvbiwgMCApOwogICAgIFBVVF9VSU5UMzJfTEUoIGF0dHItPmxpZmV0aW1lLCBzdG9yYWdlX2Zvcm1hdC0+bGlmZXRpbWUsIDAgKTsKLSAgICBQVVRfVUlOVDMyX0xFKCAodWludDMyX3QpIGF0dHItPnR5cGUsIHN0b3JhZ2VfZm9ybWF0LT50eXBlLCAwICk7CisgICAgUFVUX1VJTlQxNl9MRSggKHVpbnQxNl90KSBhdHRyLT50eXBlLCBzdG9yYWdlX2Zvcm1hdC0+dHlwZSwgMCApOworICAgIFBVVF9VSU5UMTZfTEUoICh1aW50MTZfdCkgYXR0ci0+Yml0cywgc3RvcmFnZV9mb3JtYXQtPmJpdHMsIDAgKTsKICAgICBQVVRfVUlOVDMyX0xFKCBhdHRyLT5wb2xpY3kudXNhZ2UsIHN0b3JhZ2VfZm9ybWF0LT5wb2xpY3ksIDAgKTsKICAgICBQVVRfVUlOVDMyX0xFKCBhdHRyLT5wb2xpY3kuYWxnLCBzdG9yYWdlX2Zvcm1hdC0+cG9saWN5LCBzaXplb2YoIHVpbnQzMl90ICkgKTsKICAgICBQVVRfVUlOVDMyX0xFKCBhdHRyLT5wb2xpY3kuYWxnMiwgc3RvcmFnZV9mb3JtYXQtPnBvbGljeSwgMiAqIHNpemVvZiggdWludDMyX3QgKSApOwpAQCAtMzA4LDcgKzMyNyw2IEBACiAgICAgY29uc3QgcHNhX3BlcnNpc3RlbnRfa2V5X3N0b3JhZ2VfZm9ybWF0ICpzdG9yYWdlX2Zvcm1hdCA9CiAgICAgICAgIChjb25zdCBwc2FfcGVyc2lzdGVudF9rZXlfc3RvcmFnZV9mb3JtYXQgKilzdG9yYWdlX2RhdGE7CiAgICAgdWludDMyX3QgdmVyc2lvbjsKLSAgICB1aW50MzJfdCB0eXBlOwogCiAgICAgaWYoIHN0b3JhZ2VfZGF0YV9sZW5ndGggPCBzaXplb2YoKnN0b3JhZ2VfZm9ybWF0KSApCiAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRSApOwpAQCAtMzM5LDExICszNTcsOCBAQAogICAgIH0KIAogICAgIEdFVF9VSU5UMzJfTEUoIGF0dHItPmxpZmV0aW1lLCBzdG9yYWdlX2Zvcm1hdC0+bGlmZXRpbWUsIDAgKTsKLSAgICBHRVRfVUlOVDMyX0xFKCB0eXBlLCBzdG9yYWdlX2Zvcm1hdC0+dHlwZSwgMCApOwotICAgIGlmKCB0eXBlIDw9IChwc2Ffa2V5X3R5cGVfdCkgLTEgKQotICAgICAgICBhdHRyLT50eXBlID0gKHBzYV9rZXlfdHlwZV90KSB0eXBlOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFICk7CisgICAgR0VUX1VJTlQxNl9MRSggYXR0ci0+dHlwZSwgc3RvcmFnZV9mb3JtYXQtPnR5cGUsIDAgKTsKKyAgICBHRVRfVUlOVDE2X0xFKCBhdHRyLT5iaXRzLCBzdG9yYWdlX2Zvcm1hdC0+Yml0cywgMCApOwogICAgIEdFVF9VSU5UMzJfTEUoIGF0dHItPnBvbGljeS51c2FnZSwgc3RvcmFnZV9mb3JtYXQtPnBvbGljeSwgMCApOwogICAgIEdFVF9VSU5UMzJfTEUoIGF0dHItPnBvbGljeS5hbGcsIHN0b3JhZ2VfZm9ybWF0LT5wb2xpY3ksIHNpemVvZiggdWludDMyX3QgKSApOwogICAgIEdFVF9VSU5UMzJfTEUoIGF0dHItPnBvbGljeS5hbGcyLCBzdG9yYWdlX2Zvcm1hdC0+cG9saWN5LCAyICogc2l6ZW9mKCB1aW50MzJfdCApICk7CmRpZmYgLS1naXQgYS9saWJyYXJ5L3BzYV9jcnlwdG9fc3RvcmFnZS5oIGIvbGlicmFyeS9wc2FfY3J5cHRvX3N0b3JhZ2UuaAppbmRleCBkZTg0NWE3Li5mYmM5NGZjIDEwMDY0NAotLS0gYS9saWJyYXJ5L3BzYV9jcnlwdG9fc3RvcmFnZS5oCisrKyBiL2xpYnJhcnkvcHNhX2NyeXB0b19zdG9yYWdlLmgKQEAgLTgxLDkgKzgxLDEwIEBACiAgKiBUaGlzIGZ1bmN0aW9uIGZvcm1hdHMgdGhlIGtleSBkYXRhIGFuZCBtZXRhZGF0YSBhbmQgc2F2ZXMgaXQgdG8gYQogICogcGVyc2lzdGVudCBzdG9yYWdlIGJhY2tlbmQuIFRoZSBzdG9yYWdlIGxvY2F0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlCiAgKiBrZXkgc2xvdCBtdXN0IGJlIGVtcHR5LCBvdGhlcndpc2UgdGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwuIFRoaXMgZnVuY3Rpb24KLSAqIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcHNhX2ltcG9ydF9rZXlfaW50b19zbG90KCkgdG8gZW5zdXJlIHRoZQorICogc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBsb2FkaW5nIHRoZSBrZXkgaW50byBhbiBpbnRlcm5hbCBzbG90IHRvIGVuc3VyZSB0aGUKICAqIHBlcnNpc3RlbnQga2V5IGlzIG5vdCBzYXZlZCBpbnRvIGEgc3RvcmFnZSBsb2NhdGlvbiBjb3JyZXNwb25kaW5nIHRvIGFuCi0gKiBhbHJlYWR5IG9jY3VwaWVkIG5vbi1wZXJzaXN0ZW50IGtleSwgYXMgd2VsbCBhcyB2YWxpZGF0aW5nIHRoZSBrZXkgZGF0YS4KKyAqIGFscmVhZHkgb2NjdXBpZWQgbm9uLXBlcnNpc3RlbnQga2V5LCBhcyB3ZWxsIGFzIGVuc3VyaW5nIHRoZSBrZXkgZGF0YSBpcworICogdmFsaWRhdGVkLgogICoKICAqCiAgKiBccGFyYW1baW5dIGF0dHIgICAgICAgICAgVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGtleSB0byBzYXZlLgpAQCAtOTIsMTEgKzkzLDExIEBACiAgKiBccGFyYW1baW5dIGRhdGEgICAgICAgICAgQnVmZmVyIGNvbnRhaW5pbmcgdGhlIGtleSBkYXRhLgogICogXHBhcmFtIGRhdGFfbGVuZ3RoICAgICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtYWtlIHVwIHRoZSBrZXkgZGF0YS4KICAqCi0gKiBccmV0dmFsIFBTQV9TVUNDRVNTCi0gKiBccmV0dmFsIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZCi0gKiBccmV0dmFsIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfU1RPUkFHRQotICogXHJldHZhbCBQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCi0gKiBccmV0dmFsIFBTQV9FUlJPUl9BTFJFQURZX0VYSVNUUworICogXHJldHZhbCAjUFNBX1NVQ0NFU1MKKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZCisgKiBccmV0dmFsICNQU0FfRVJST1JfSU5TVUZGSUNJRU5UX1NUT1JBR0UKKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9TVE9SQUdFX0ZBSUxVUkUKKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9BTFJFQURZX0VYSVNUUwogICovCiBwc2Ffc3RhdHVzX3QgcHNhX3NhdmVfcGVyc2lzdGVudF9rZXkoIGNvbnN0IHBzYV9jb3JlX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCkBAIC0xMjEsMTAgKzEyMiwxMCBAQAogICogXHBhcmFtW291dF0gZGF0YSAgICAgICAgIFBvaW50ZXIgdG8gYW4gYWxsb2NhdGVkIGtleSBkYXRhIGJ1ZmZlciBvbiByZXR1cm4uCiAgKiBccGFyYW1bb3V0XSBkYXRhX2xlbmd0aCAgVGhlIG51bWJlciBvZiBieXRlcyB0aGF0IG1ha2UgdXAgdGhlIGtleSBkYXRhLgogICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKLSAqIFxyZXR2YWwgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlkKLSAqIFxyZXR2YWwgUFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQotICogXHJldHZhbCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQorICogXHJldHZhbCAjUFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQorICogXHJldHZhbCAjUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUCiAgKi8KIHBzYV9zdGF0dXNfdCBwc2FfbG9hZF9wZXJzaXN0ZW50X2tleSggcHNhX2NvcmVfa2V5X2F0dHJpYnV0ZXNfdCAqYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqKmRhdGEsCkBAIC0xMzYsMTAgKzEzNywxMCBAQAogICogXHBhcmFtIGtleSAgICAgICAgICAgUGVyc2lzdGVudCBpZGVudGlmaWVyIG9mIHRoZSBrZXkgdG8gcmVtb3ZlCiAgKiAgICAgICAgICAgICAgICAgICAgICBmcm9tIHBlcnNpc3RlbnQgc3RvcmFnZS4KICAqCi0gKiBccmV0dmFsIFBTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwogICogICAgICAgICBUaGUga2V5IHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCwKICAqICAgICAgICAgb3IgdGhlIGtleSBkaWQgbm90IGV4aXN0LgotICogXHJldHZhbCBQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCisgKiBccmV0dmFsICNQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCiAgKi8KIHBzYV9zdGF0dXNfdCBwc2FfZGVzdHJveV9wZXJzaXN0ZW50X2tleSggY29uc3QgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ICk7CiAKQEAgLTE4MSwxMCArMTgyLDEwIEBACiAgKiBccGFyYW1bb3V0XSBhdHRyICAgICAgICAgICAgT24gc3VjY2VzcywgdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgaXMgZmlsbGVkCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgbG9hZGVkIGtleSBtZXRhZGF0YS4KICAqCi0gKiBccmV0dmFsIFBTQV9TVUNDRVNTCi0gKiBccmV0dmFsIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfU1RPUkFHRQotICogXHJldHZhbCBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQotICogXHJldHZhbCBQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCisgKiBccmV0dmFsICNQU0FfU1VDQ0VTUworICogXHJldHZhbCAjUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9TVE9SQUdFCisgKiBccmV0dmFsICNQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWQorICogXHJldHZhbCAjUFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQogICovCiBwc2Ffc3RhdHVzX3QgcHNhX3BhcnNlX2tleV9kYXRhX2Zyb21fc3RvcmFnZSggY29uc3QgdWludDhfdCAqc3RvcmFnZV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdG9yYWdlX2RhdGFfbGVuZ3RoLApkaWZmIC0tZ2l0IGEvbGlicmFyeS9yc2EuYyBiL2xpYnJhcnkvcnNhLmMKaW5kZXggODRkODdkZS4uZDZhYmQ2NSAxMDA2NDQKLS0tIGEvbGlicmFyeS9yc2EuYworKysgYi9saWJyYXJ5L3JzYS5jCkBAIC04MTEsMTUgKzgxMSwxNCBAQAogICAgICAgICAgKiB3aGljaCBvbmUsIHdlIGp1c3QgbG9vcCBhbmQgY2hvb3NlIG5ldyB2YWx1ZXMgZm9yIGJvdGggb2YgdGhlbS4KICAgICAgICAgICogKEVhY2ggaXRlcmF0aW9uIHN1Y2NlZWRzIHdpdGggb3ZlcndoZWxtaW5nIHByb2JhYmlsaXR5LikgKi8KICAgICAgICAgcmV0ID0gbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC0+VmksICZjdHgtPlZpLCAmY3R4LT5OICk7Ci0gICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFICkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICBpZiggcmV0ICE9IDAgJiYgcmV0ICE9IE1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRSApCiAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CiAKLSAgICAgICAgLyogRmluaXNoIHRoZSBjb21wdXRhdGlvbiBvZiBWZl4tMSA9IFIgKiAoUiBWZileLTEgKi8KLSAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmY3R4LT5WaSwgJmN0eC0+VmksICZSICkgKTsKLSAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LT5WaSwgJmN0eC0+VmksICZjdHgtPk4gKSApOwotICAgIH0gd2hpbGUoIDAgKTsKKyAgICB9IHdoaWxlKCByZXQgPT0gTUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFICk7CisKKyAgICAvKiBGaW5pc2ggdGhlIGNvbXB1dGF0aW9uIG9mIFZmXi0xID0gUiAqIChSIFZmKV4tMSAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJmN0eC0+VmksICZjdHgtPlZpLCAmUiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LT5WaSwgJmN0eC0+VmksICZjdHgtPk4gKSApOwogCiAgICAgLyogQmxpbmRpbmcgdmFsdWU6IFZpID0gVmZeKC1lKSBtb2QgTgogICAgICAqIChWaSBhbHJlYWR5IGNvbnRhaW5zIFZmXi0xIGF0IHRoaXMgcG9pbnQpICovCmRpZmYgLS1naXQgYS9saWJyYXJ5L3NzbF9jbGkuYyBiL2xpYnJhcnkvc3NsX2NsaS5jCmluZGV4IDA4M2I3MjAuLmE4MzMxZDkgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvc3NsX2NsaS5jCisrKyBiL2xpYnJhcnkvc3NsX2NsaS5jCkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIHJldHVybiggMSApOwogCiAjaWYgZGVmaW5lZChNQkVEVExTX1VTRV9QU0FfQ1JZUFRPKQotICAgIGlmKCBjb25mLT5wc2tfb3BhcXVlICE9IDAgKQorICAgIGlmKCAhIG1iZWR0bHNfc3ZjX2tleV9pZF9pc19udWxsKCBjb25mLT5wc2tfb3BhcXVlICkgKQogICAgICAgICByZXR1cm4oIDEgKTsKICNlbmRpZiAvKiBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPICovCiAKQEAgLTc1Niw2ICs3NTYsMTI2IEBACiB9CiAjZW5kaWYgLyogTUJFRFRMU19TU0xfQUxQTiAqLwogCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApCitzdGF0aWMgaW50IHNzbF93cml0ZV91c2Vfc3J0cF9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBzaXplX3QgcHJvdGVjdGlvbl9wcm9maWxlc19pbmRleCA9IDAsIGV4dF9sZW4gPSAwOworICAgIHVpbnQxNl90IG1raV9sZW4gPSAwLCBwcm9maWxlX3ZhbHVlID0gMDsKKworICAgICpvbGVuID0gMDsKKworICAgIGlmKCAoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ICE9IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApIHx8CisgICAgICAgICggc3NsLT5jb25mLT5kdGxzX3NydHBfcHJvZmlsZV9saXN0ID09IE5VTEwgKSB8fAorICAgICAgICAoIHNzbC0+Y29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdF9sZW4gPT0gMCApICkKKyAgICB7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIC8qIFJGQyA1NzY0IHNlY3Rpb24gNC4xLjEKKyAgICAgKiB1aW50OCBTUlRQUHJvdGVjdGlvblByb2ZpbGVbMl07CisgICAgICoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgU1JUUFByb3RlY3Rpb25Qcm9maWxlcyBTUlRQUHJvdGVjdGlvblByb2ZpbGVzOworICAgICAqICAgb3BhcXVlIHNydHBfbWtpPDAuLjI1NT47CisgICAgICogfSBVc2VTUlRQRGF0YTsKKyAgICAgKiBTUlRQUHJvdGVjdGlvblByb2ZpbGUgU1JUUFByb3RlY3Rpb25Qcm9maWxlczwyLi4yXjE2LTE+OworICAgICAqLworICAgIGlmKCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9ta2lfc3VwcG9ydCA9PSBNQkVEVExTX1NTTF9EVExTX1NSVFBfTUtJX1NVUFBPUlRFRCApCisgICAgeworICAgICAgICBta2lfbGVuID0gc3NsLT5kdGxzX3NydHBfaW5mby5ta2lfbGVuOworICAgIH0KKyAgICAvKiBFeHRlbnNpb24gbGVuZ3RoID0gMiBieXRlcyBmb3IgcHJvZmlsZXMgbGVuZ3RoLAorICAgICAqICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RfbGVuICogMiAoZWFjaCBwcm9maWxlIGlzIDIgYnl0ZXMgbGVuZ3RoICksCisgICAgICogICAgICAgICAgICAgICAgICAgIDEgYnl0ZSBmb3Igc3J0cF9ta2kgdmVjdG9yIGxlbmd0aCBhbmQgdGhlIG1raV9sZW4gdmFsdWUKKyAgICAgKi8KKyAgICBleHRfbGVuID0gMiArIDIgKiAoIHNzbC0+Y29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdF9sZW4gKSArIDEgKyBta2lfbGVuOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iICkgKTsKKworICAgIC8qIENoZWNrIHRoZXJlIGlzIHJvb20gaW4gdGhlIGJ1ZmZlciBmb3IgdGhlIGV4dGVuc2lvbiArIDQgYnl0ZXMKKyAgICAgKiAtIHRoZSBleHRlbnNpb24gdGFnICgyIGJ5dGVzKQorICAgICAqIC0gdGhlIGV4dGVuc2lvbiBsZW5ndGggKDIgYnl0ZXMpCisgICAgICovCisgICAgTUJFRFRMU19TU0xfQ0hLX0JVRl9QVFIoIHAsIGVuZCwgZXh0X2xlbiArIDQgKTsKKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1VTRV9TUlRQID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9VU0VfU1JUUCAgICAgICkgJiAweEZGICk7CisKKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggKCBleHRfbGVuICYgMHhGRjAwICkgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIGV4dF9sZW4gJiAweEZGICk7CisKKyAgICAvKiBwcm90ZWN0aW9uIHByb2ZpbGUgbGVuZ3RoOiAyKihzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RfbGVuKSAqLworICAgIC8qIG1pY3JvLW9wdGltaXphdGlvbjoKKyAgICAgKiB0aGUgbGlzdCBzaXplIGlzIGxpbWl0ZWQgdG8gTUJFRFRMU19UTFNfU1JUUF9NQVhfUFJPRklMRV9MSVNUX0xFTkdUSAorICAgICAqIHdoaWNoIGlzIGxvd2VyIHRoYW4gMTI3LCBzbyB0aGUgdXBwZXIgYnl0ZSBvZiB0aGUgbGVuZ3RoIGlzIGFsd2F5cyAwCisgICAgICogRm9yIHRoZSBkb2N1bWVudGF0aW9uLCB0aGUgbW9yZSBnZW5lcmljIGNvZGUgaXMgbGVmdCBpbiBjb21tZW50cworICAgICAqICpwKysgPSAodW5zaWduZWQgY2hhcikoICggKCAyICogc3NsLT5jb25mLT5kdGxzX3NydHBfcHJvZmlsZV9saXN0X2xlbiApCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICA+PiA4ICkgJiAweEZGICk7CisgICAgICovCisgICAgKnArKyA9IDA7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCAyICogc3NsLT5jb25mLT5kdGxzX3NydHBfcHJvZmlsZV9saXN0X2xlbiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAweEZGICk7CisKKyAgICBmb3IoIHByb3RlY3Rpb25fcHJvZmlsZXNfaW5kZXg9MDsKKyAgICAgICAgIHByb3RlY3Rpb25fcHJvZmlsZXNfaW5kZXggPCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RfbGVuOworICAgICAgICAgcHJvdGVjdGlvbl9wcm9maWxlc19pbmRleCsrICkKKyAgICB7CisgICAgICAgIHByb2ZpbGVfdmFsdWUgPSBtYmVkdGxzX3NzbF9jaGVja19zcnRwX3Byb2ZpbGVfdmFsdWUKKyAgICAgICAgICAgICAgICAoIHNzbC0+Y29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdFtwcm90ZWN0aW9uX3Byb2ZpbGVzX2luZGV4XSApOworICAgICAgICBpZiggcHJvZmlsZV92YWx1ZSAhPSBNQkVEVExTX1RMU19TUlRQX1VOU0VUICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzc2xfd3JpdGVfdXNlX3NydHBfZXh0LCBhZGQgcHJvZmlsZTogJTA0eCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZV92YWx1ZSApICk7CisgICAgICAgICAgICAqcCsrID0gKCAoIHByb2ZpbGVfdmFsdWUgPj4gOCApICYgMHhGRiApOworICAgICAgICAgICAgKnArKyA9ICggcHJvZmlsZV92YWx1ZSAmIDB4RkYgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBOb3RlOiB3ZSBzaGFsbCBuZXZlciBhcnJpdmUgaGVyZSBhcyBwcm90ZWN0aW9uIHByb2ZpbGVzCisgICAgICAgICAgICAgKiBpcyBjaGVja2VkIGJ5IG1iZWR0bHNfc3NsX2NvbmZfZHRsc19zcnRwX3Byb3RlY3Rpb25fcHJvZmlsZXMgZnVuY3Rpb24KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLAorICAgICAgICAgICAgICAgICAgICAoICJjbGllbnQgaGVsbG8sICIKKyAgICAgICAgICAgICAgICAgICAgICAiaWxsZWdhbCBEVExTLVNSVFAgcHJvdGVjdGlvbiBwcm9maWxlICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RbcHJvdGVjdGlvbl9wcm9maWxlc19pbmRleF0KKyAgICAgICAgICAgICAgICAgICAgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqcCsrID0gbWtpX2xlbiAmIDB4RkY7CisKKyAgICBpZiggbWtpX2xlbiAhPSAwICkKKyAgICB7CisgICAgICAgIG1lbWNweSggcCwgc3NsLT5kdGxzX3NydHBfaW5mby5ta2lfdmFsdWUsIG1raV9sZW4gKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogSW5jcmVtZW50IHAgdG8gcG9pbnQgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgICAqLworICAgICAgICBwICs9IG1raV9sZW47CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgInNlbmRpbmcgbWtpIiwgIHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX2xlbiApOworICAgIH0KKworICAgIC8qCisgICAgICogdG90YWwgZXh0ZW5zaW9uIGxlbmd0aDogZXh0ZW5zaW9uIHR5cGUgKDIgYnl0ZXMpCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgKyBleHRlbnNpb24gbGVuZ3RoICgyIGJ5dGVzKQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICsgcHJvdGVjdGlvbiBwcm9maWxlIGxlbmd0aCAoMiBieXRlcykKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICArIDIgKiBudW1iZXIgb2YgcHJvdGVjdGlvbiBwcm9maWxlcworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICsgc3J0cF9ta2kgdmVjdG9yIGxlbmd0aCgxIGJ5dGUpCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgKyBta2kgdmFsdWUKKyAgICAgKi8KKyAgICAqb2xlbiA9IHAgLSBidWY7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKwogLyoKICAqIEdlbmVyYXRlIHJhbmRvbSBieXRlcyBmb3IgQ2xpZW50SGVsbG8KICAqLwpAQCAtMTI3Nyw2ICsxMzk3LDE2IEBACiAgICAgZXh0X2xlbiArPSBvbGVuOwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKKyAgICBpZiggKCByZXQgPSBzc2xfd3JpdGVfdXNlX3NydHBfZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQsICZvbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInNzbF93cml0ZV91c2Vfc3J0cF9leHQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKICAgICBpZiggKCByZXQgPSBzc2xfd3JpdGVfc2Vzc2lvbl90aWNrZXRfZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQsICZvbGVuICkgKSAhPSAwICkKQEAgLTE3MTAsNiArMTg0MCwxMjMgQEAKIH0KICNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX3VzZV9zcnRwX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSBzZXJ2ZXJfcHJvdGVjdGlvbiA9IE1CRURUTFNfVExTX1NSVFBfVU5TRVQ7CisgICAgc2l6ZV90IGksIG1raV9sZW4gPSAwOworICAgIHVpbnQxNl90IHNlcnZlcl9wcm90ZWN0aW9uX3Byb2ZpbGVfdmFsdWUgPSAwOworCisgICAgLyogSWYgdXNlX3NydHAgaXMgbm90IGNvbmZpZ3VyZWQsIGp1c3QgaWdub3JlIHRoZSBleHRlbnNpb24gKi8KKyAgICBpZiggKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCAhPSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKSB8fAorICAgICAgICAoIHNzbC0+Y29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdCA9PSBOVUxMICkgfHwKKyAgICAgICAgKCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RfbGVuID09IDAgKSApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgLyogUkZDIDU3NjQgc2VjdGlvbiA0LjEuMQorICAgICAqIHVpbnQ4IFNSVFBQcm90ZWN0aW9uUHJvZmlsZVsyXTsKKyAgICAgKgorICAgICAqIHN0cnVjdCB7CisgICAgICogICBTUlRQUHJvdGVjdGlvblByb2ZpbGVzIFNSVFBQcm90ZWN0aW9uUHJvZmlsZXM7CisgICAgICogICBvcGFxdWUgc3J0cF9ta2k8MC4uMjU1PjsKKyAgICAgKiB9IFVzZVNSVFBEYXRhOworCisgICAgICogU1JUUFByb3RlY3Rpb25Qcm9maWxlIFNSVFBQcm90ZWN0aW9uUHJvZmlsZXM8Mi4uMl4xNi0xPjsKKyAgICAgKgorICAgICAqLworICAgIGlmKCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9ta2lfc3VwcG9ydCA9PSBNQkVEVExTX1NTTF9EVExTX1NSVFBfTUtJX1NVUFBPUlRFRCApCisgICAgeworICAgICAgICBta2lfbGVuID0gc3NsLT5kdGxzX3NydHBfaW5mby5ta2lfbGVuOworICAgIH0KKworICAgIC8qCisgICAgICogTGVuZ3RoIGlzIDUgKyBvcHRpb25hbCBta2lfdmFsdWUgOiBvbmUgcHJvdGVjdGlvbiBwcm9maWxlIGxlbmd0aCAoMiBieXRlcykKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBwcm90ZWN0aW9uIHByb2ZpbGUgKDIgYnl0ZXMpCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbWtpX2xlbigxIGJ5dGUpCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvcHRpb25hbCBzcnRwX21raQorICAgICAqLworICAgIGlmKCAoIGxlbiA8IDUgKSB8fCAoIGxlbiAhPSAoIGJ1Zls0XSArIDV1ICkgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKworICAgIC8qCisgICAgICogZ2V0IHRoZSBzZXJ2ZXIgcHJvdGVjdGlvbiBwcm9maWxlCisgICAgICovCisKKyAgICAvKgorICAgICAqIHByb3RlY3Rpb24gcHJvZmlsZSBsZW5ndGggbXVzdCBiZSAweDAwMDIgYXMgd2UgbXVzdCBoYXZlIG9ubHkKKyAgICAgKiBvbmUgcHJvdGVjdGlvbiBwcm9maWxlIGluIHNlcnZlciBIZWxsbworICAgICAqLworICAgIGlmKCAoICBidWZbMF0gIT0gMCApIHx8ICggYnVmWzFdICE9IDIgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKworICAgIHNlcnZlcl9wcm90ZWN0aW9uX3Byb2ZpbGVfdmFsdWUgPSAoIGJ1ZlsyXSA8PCA4ICkgfCBidWZbM107CisgICAgc2VydmVyX3Byb3RlY3Rpb24gPSBtYmVkdGxzX3NzbF9jaGVja19zcnRwX3Byb2ZpbGVfdmFsdWUoCisgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9wcm90ZWN0aW9uX3Byb2ZpbGVfdmFsdWUgKTsKKyAgICBpZiggc2VydmVyX3Byb3RlY3Rpb24gIT0gTUJFRFRMU19UTFNfU1JUUF9VTlNFVCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIHNydHAgcHJvZmlsZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9nZXRfc3J0cF9wcm9maWxlX2FzX3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfcHJvdGVjdGlvbiApICkgKTsKKyAgICB9CisKKyAgICBzc2wtPmR0bHNfc3J0cF9pbmZvLmNob3Nlbl9kdGxzX3NydHBfcHJvZmlsZSA9IE1CRURUTFNfVExTX1NSVFBfVU5TRVQ7CisKKyAgICAvKgorICAgICAqIENoZWNrIHdlIGhhdmUgdGhlIHNlcnZlciBwcm9maWxlIGluIG91ciBsaXN0CisgICAgICovCisgICAgZm9yKCBpPTA7IGkgPCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RfbGVuOyBpKyspCisgICAgeworICAgICAgICBpZiggc2VydmVyX3Byb3RlY3Rpb24gPT0gc3NsLT5jb25mLT5kdGxzX3NydHBfcHJvZmlsZV9saXN0W2ldICkKKyAgICAgICAgeworICAgICAgICAgICAgc3NsLT5kdGxzX3NydHBfaW5mby5jaG9zZW5fZHRsc19zcnRwX3Byb2ZpbGUgPSBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RbaV07CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlbGVjdGVkIHNydHAgcHJvZmlsZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9nZXRfc3J0cF9wcm9maWxlX2FzX3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfcHJvdGVjdGlvbiApICkgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLyogSWYgbm8gbWF0Y2ggd2FzIGZvdW5kIDogc2VydmVyIHByb2JsZW0sIGl0IHNoYWxsIG5ldmVyIGFuc3dlciB3aXRoIGluY29tcGF0aWJsZSBwcm9maWxlICovCisgICAgaWYoIHNzbC0+ZHRsc19zcnRwX2luZm8uY2hvc2VuX2R0bHNfc3J0cF9wcm9maWxlID09IE1CRURUTFNfVExTX1NSVFBfVU5TRVQgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlKCBzc2wsIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19IQU5EU0hBS0VfRkFJTFVSRSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisgICAgfQorCisgICAgLyogSWYgc2VydmVyIGRvZXMgbm90IHVzZSBta2kgaW4gaXRzIHJlcGx5LCBtYWtlIHN1cmUgdGhlIGNsaWVudCB3b24ndCBrZWVwCisgICAgICogb25lIGFzIG5lZ290aWF0ZWQgKi8KKyAgICBpZiggbGVuID09IDUgKQorICAgIHsKKyAgICAgICAgc3NsLT5kdGxzX3NydHBfaW5mby5ta2lfbGVuID0gMDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJGQzU3NjQ6CisgICAgICogIElmIHRoZSBjbGllbnQgZGV0ZWN0cyBhIG5vbnplcm8tbGVuZ3RoIE1LSSBpbiB0aGUgc2VydmVyJ3MgcmVzcG9uc2UKKyAgICAgKiAgdGhhdCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgb25lIHRoZSBjbGllbnQgb2ZmZXJlZCwgdGhlbiB0aGUgY2xpZW50CisgICAgICogIE1VU1QgYWJvcnQgdGhlIGhhbmRzaGFrZSBhbmQgU0hPVUxEIHNlbmQgYW4gaW52YWxpZF9wYXJhbWV0ZXIgYWxlcnQuCisgICAgICovCisgICAgaWYoIGxlbiA+IDUgICYmICggYnVmWzRdICE9IG1raV9sZW4gfHwKKyAgICAgICAgKCBtZW1jbXAoIHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX3ZhbHVlLCAmYnVmWzVdLCBta2lfbGVuICkgKSApICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLCBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSUxMRUdBTF9QQVJBTUVURVIgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgIH0KKyNpZiBkZWZpbmVkIChNQkVEVExTX0RFQlVHX0MpCisgICAgaWYoIGxlbiA+IDUgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAicmVjZWl2ZWQgbWtpIiwgc3NsLT5kdGxzX3NydHBfaW5mby5ta2lfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX2xlbiApOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLworCiAvKgogICogUGFyc2UgSGVsbG9WZXJpZnlSZXF1ZXN0LiAgT25seSBjYWxsZWQgYWZ0ZXIgdmVyaWZ5aW5nIHRoZSBIUyB0eXBlLgogICovCkBAIC0yMjc4LDYgKzI1MjUsMTYgQEAKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmIC8qIE1CRURUTFNfU1NMX0FMUE4gKi8KIAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19TUlRQKQorICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9VU0VfU1JUUDoKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiApICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IHNzbF9wYXJzZV91c2Vfc3J0cF9leHQoIHNzbCwgZXh0ICsgNCwgZXh0X3NpemUgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLworCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsCiAgICAgICAgICAgICAgICAgKCAidW5rbm93biBleHRlbnNpb24gZm91bmQ6ICVkIChpZ25vcmluZykiLCBleHRfaWQgKSApOwpAQCAtMzU0NSw3ICszODAyLDcgQEAKICAgICAgICAgc3RhdHVzID0gcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kc2hha2UtPmVjZGhfcHNhX3ByaXZrZXkgKTsKICAgICAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUlMRUQgKTsKLSAgICAgICAgaGFuZHNoYWtlLT5lY2RoX3BzYV9wcml2a2V5ID0gMDsKKyAgICAgICAgaGFuZHNoYWtlLT5lY2RoX3BzYV9wcml2a2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgfQogICAgIGVsc2UKICNlbmRpZiAvKiBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPICYmCmRpZmYgLS1naXQgYS9saWJyYXJ5L3NzbF9tc2cuYyBiL2xpYnJhcnkvc3NsX21zZy5jCmluZGV4IDJlYTM1ODAuLmJkZjg4MmQgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvc3NsX21zZy5jCisrKyBiL2xpYnJhcnkvc3NsX21zZy5jCkBAIC0xMDQ1LDIxICsxMDQ1LDg2IEBACiAKICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NPTUVfU1VJVEVTX1VTRV9UTFNfQ0JDKQogLyoKLSAqIENvbnN0YW50LWZsb3cgY29uZGl0aW9uYWwgbWVtY3B5OgotICogIC0gaWYgYzEgPT0gYzIsIGVxdWl2YWxlbnQgdG8gbWVtY3B5KGRzdCwgc3JjLCBsZW4pLAotICogIC0gb3RoZXJ3aXNlLCBhIG5vLW9wLAotICogYnV0IHdpdGggZXhlY3V0aW9uIGZsb3cgaW5kZXBlbmRlbnQgb2YgdGhlIHZhbHVlcyBvZiBjMSBhbmQgYzIuCisgKiBUdXJuIGEgYml0IGludG8gYSBtYXNrOgorICogLSBpZiBiaXQgPT0gMSwgcmV0dXJuIHRoZSBhbGwtYml0cyAxIG1hc2ssIGFrYSAoc2l6ZV90KSAtMQorICogLSBpZiBiaXQgPT0gMCwgcmV0dXJuIHRoZSBhbGwtYml0cyAwIG1hc2ssIGFrYSAwCiAgKgotICogVXNlIG9ubHkgYml0IG9wZXJhdGlvbnMgdG8gYXZvaWQgYnJhbmNoZXMgdGhhdCBjb3VsZCBiZSB1c2VkIGJ5IHNvbWUKLSAqIGNvbXBpbGVycyBvbiBzb21lIHBsYXRmb3JtcyB0byB0cmFuc2xhdGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHdyaXRlIGNvbnN0YW50LXRpbWUgY29kZSBieSByZXBsYWNpbmcgYnJhbmNoZXMKKyAqIHdpdGggYml0IG9wZXJhdGlvbnMgdXNpbmcgbWFza3MuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB3aXRob3V0IHVzaW5nIGNvbXBhcmlzb24gb3BlcmF0b3JzLCBhcyB0aG9zZQorICogbWlnaHQgYmUgdHJhbnNsYXRlZCB0byBicmFuY2hlcyBieSBzb21lIGNvbXBpbGVycyBvbiBzb21lIHBsYXRmb3Jtcy4KICAqLwotc3RhdGljIHZvaWQgbWJlZHRsc19zc2xfY2ZfbWVtY3B5X2lmX2VxKCB1bnNpZ25lZCBjaGFyICpkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGMxLCBzaXplX3QgYzIgKQorc3RhdGljIHNpemVfdCBtYmVkdGxzX3NzbF9jZl9tYXNrX2Zyb21fYml0KCBzaXplX3QgYml0ICkKIHsKLSAgICAvKiBkaWZmID0gMCBpZiBjMSA9PSBjMiwgbm9uLXplcm8gb3RoZXJ3aXNlICovCi0gICAgY29uc3Qgc2l6ZV90IGRpZmYgPSBjMSBeIGMyOworICAgIC8qIE1TVkMgaGFzIGEgd2FybmluZyBhYm91dCB1bmFyeSBtaW51cyBvbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGVzLAorICAgICAqIGJ1dCB0aGlzIGlzIHdlbGwtZGVmaW5lZCBhbmQgcHJlY2lzZWx5IHdoYXQgd2Ugd2FudCB0byBkbyBoZXJlLiAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdhcm5pbmcoIHB1c2ggKQorI3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlIDogNDE0NiApCisjZW5kaWYKKyAgICByZXR1cm4gLWJpdDsKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKCBwb3AgKQorI2VuZGlmCit9CisKKy8qCisgKiBDb25zdGFudC1mbG93IG1hc2sgZ2VuZXJhdGlvbiBmb3IgImxlc3MgdGhhbiIgY29tcGFyaXNvbjoKKyAqIC0gaWYgeCA8IHksICByZXR1cm4gYWxsIGJpdHMgMSwgdGhhdCBpcyAoc2l6ZV90KSAtMQorICogLSBvdGhlcndpc2UsIHJldHVybiBhbGwgYml0cyAwLCB0aGF0IGlzIDAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHdyaXRlIGNvbnN0YW50LXRpbWUgY29kZSBieSByZXBsYWNpbmcgYnJhbmNoZXMKKyAqIHdpdGggYml0IG9wZXJhdGlvbnMgdXNpbmcgbWFza3MuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB3aXRob3V0IHVzaW5nIGNvbXBhcmlzb24gb3BlcmF0b3JzLCBhcyB0aG9zZQorICogbWlnaHQgYmUgdHJhbnNsYXRlZCB0byBicmFuY2hlcyBieSBzb21lIGNvbXBpbGVycyBvbiBzb21lIHBsYXRmb3Jtcy4KKyAqLworc3RhdGljIHNpemVfdCBtYmVkdGxzX3NzbF9jZl9tYXNrX2x0KCBzaXplX3QgeCwgc2l6ZV90IHkgKQoreworICAgIC8qIFRoaXMgaGFzIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQgaWYgYW5kIG9ubHkgaWYgeCA8IHkgKi8KKyAgICBjb25zdCBzaXplX3Qgc3ViID0geCAtIHk7CisKKyAgICAvKiBzdWIxID0gKHggPCB5KSA/IDEgOiAwICovCisgICAgY29uc3Qgc2l6ZV90IHN1YjEgPSBzdWIgPj4gKCBzaXplb2YoIHN1YiApICogOCAtIDEgKTsKKworICAgIC8qIG1hc2sgPSAoeCA8IHkpID8gMHhmZi4uLiA6IDB4MDAuLi4gKi8KKyAgICBjb25zdCBzaXplX3QgbWFzayA9IG1iZWR0bHNfc3NsX2NmX21hc2tfZnJvbV9iaXQoIHN1YjEgKTsKKworICAgIHJldHVybiggbWFzayApOworfQorCisvKgorICogQ29uc3RhbnQtZmxvdyBtYXNrIGdlbmVyYXRpb24gZm9yICJncmVhdGVyIG9yIGVxdWFsIiBjb21wYXJpc29uOgorICogLSBpZiB4ID49IHksIHJldHVybiBhbGwgYml0cyAxLCB0aGF0IGlzIChzaXplX3QpIC0xCisgKiAtIG90aGVyd2lzZSwgcmV0dXJuIGFsbCBiaXRzIDAsIHRoYXQgaXMgMAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gd3JpdGUgY29uc3RhbnQtdGltZSBjb2RlIGJ5IHJlcGxhY2luZyBicmFuY2hlcworICogd2l0aCBiaXQgb3BlcmF0aW9ucyB1c2luZyBtYXNrcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHdpdGhvdXQgdXNpbmcgY29tcGFyaXNvbiBvcGVyYXRvcnMsIGFzIHRob3NlCisgKiBtaWdodCBiZSB0cmFuc2xhdGVkIHRvIGJyYW5jaGVzIGJ5IHNvbWUgY29tcGlsZXJzIG9uIHNvbWUgcGxhdGZvcm1zLgorICovCitzdGF0aWMgc2l6ZV90IG1iZWR0bHNfc3NsX2NmX21hc2tfZ2UoIHNpemVfdCB4LCBzaXplX3QgeSApCit7CisgICAgcmV0dXJuKCB+bWJlZHRsc19zc2xfY2ZfbWFza19sdCggeCwgeSApICk7Cit9CisKKy8qCisgKiBDb25zdGFudC1mbG93IGJvb2xlYW4gImVxdWFsIiBjb21wYXJpc29uOgorICogcmV0dXJuIHggPT0geQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gd3JpdGUgY29uc3RhbnQtdGltZSBjb2RlIGJ5IHJlcGxhY2luZyBicmFuY2hlcworICogd2l0aCBiaXQgb3BlcmF0aW9ucyAtIGl0IGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKKyAqIG1iZWR0bHNfc3NsX2NmX21hc2tfZnJvbV9iaXQoKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHdpdGhvdXQgdXNpbmcgY29tcGFyaXNvbiBvcGVyYXRvcnMsIGFzIHRob3NlCisgKiBtaWdodCBiZSB0cmFuc2xhdGVkIHRvIGJyYW5jaGVzIGJ5IHNvbWUgY29tcGlsZXJzIG9uIHNvbWUgcGxhdGZvcm1zLgorICovCitzdGF0aWMgc2l6ZV90IG1iZWR0bHNfc3NsX2NmX2Jvb2xfZXEoIHNpemVfdCB4LCBzaXplX3QgeSApCit7CisgICAgLyogZGlmZiA9IDAgaWYgeCA9PSB5LCBub24temVybyBvdGhlcndpc2UgKi8KKyAgICBjb25zdCBzaXplX3QgZGlmZiA9IHggXiB5OwogCiAgICAgLyogTVNWQyBoYXMgYSB3YXJuaW5nIGFib3V0IHVuYXJ5IG1pbnVzIG9uIHVuc2lnbmVkIGludGVnZXIgdHlwZXMsCiAgICAgICogYnV0IHRoaXMgaXMgd2VsbC1kZWZpbmVkIGFuZCBwcmVjaXNlbHkgd2hhdCB3ZSB3YW50IHRvIGRvIGhlcmUuICovCkBAIC0xMDY4LDIyICsxMTMzLDQwIEBACiAjcHJhZ21hIHdhcm5pbmcoIGRpc2FibGUgOiA0MTQ2ICkKICNlbmRpZgogCi0gICAgLyogZGlmZl9tc2IncyBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyBlcXVhbCB0byBjMSAhPSBjMiAqLworICAgIC8qIGRpZmZfbXNiJ3MgbW9zdCBzaWduaWZpY2FudCBiaXQgaXMgZXF1YWwgdG8geCAhPSB5ICovCiAgICAgY29uc3Qgc2l6ZV90IGRpZmZfbXNiID0gKCBkaWZmIHwgLWRpZmYgKTsKIAotICAgIC8qIGRpZmYxID0gYzEgIT0gYzIgKi8KLSAgICBjb25zdCBzaXplX3QgZGlmZjEgPSBkaWZmX21zYiA+PiAoIHNpemVvZiggZGlmZl9tc2IgKSAqIDggLSAxICk7Ci0KLSAgICAvKiBtYXNrID0gYzEgIT0gYzIgPyAweGZmIDogMHgwMCAqLwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWFzayA9ICh1bnNpZ25lZCBjaGFyKSAtZGlmZjE7Ci0KICNpZiBkZWZpbmVkKF9NU0NfVkVSKQogI3ByYWdtYSB3YXJuaW5nKCBwb3AgKQogI2VuZGlmCiAKLSAgICAvKiBkc3RbaV0gPSBjMSAhPSBjMiA/IGRzdFtpXSA6IHNyY1tpXSAqLworICAgIC8qIGRpZmYxID0gKHggIT0geSkgPyAxIDogMCAqLworICAgIGNvbnN0IHNpemVfdCBkaWZmMSA9IGRpZmZfbXNiID4+ICggc2l6ZW9mKCBkaWZmX21zYiApICogOCAtIDEgKTsKKworICAgIHJldHVybiggMSBeIGRpZmYxICk7Cit9CisKKy8qCisgKiBDb25zdGFudC1mbG93IGNvbmRpdGlvbmFsIG1lbWNweToKKyAqICAtIGlmIGMxID09IGMyLCBlcXVpdmFsZW50IHRvIG1lbWNweShkc3QsIHNyYywgbGVuKSwKKyAqICAtIG90aGVyd2lzZSwgYSBuby1vcCwKKyAqIGJ1dCB3aXRoIGV4ZWN1dGlvbiBmbG93IGluZGVwZW5kZW50IG9mIHRoZSB2YWx1ZXMgb2YgYzEgYW5kIGMyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgd2l0aG91dCB1c2luZyBjb21wYXJpc29uIG9wZXJhdG9ycywgYXMgdGhvc2UKKyAqIG1pZ2h0IGJlIHRyYW5zbGF0ZWQgdG8gYnJhbmNoZXMgYnkgc29tZSBjb21waWxlcnMgb24gc29tZSBwbGF0Zm9ybXMuCisgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfc3NsX2NmX21lbWNweV9pZl9lcSggdW5zaWduZWQgY2hhciAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjMSwgc2l6ZV90IGMyICkKK3sKKyAgICAvKiBtYXNrID0gYzEgPT0gYzIgPyAweGZmIDogMHgwMCAqLworICAgIGNvbnN0IHNpemVfdCBlcXVhbCA9IG1iZWR0bHNfc3NsX2NmX2Jvb2xfZXEoIGMxLCBjMiApOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWFzayA9ICh1bnNpZ25lZCBjaGFyKSBtYmVkdGxzX3NzbF9jZl9tYXNrX2Zyb21fYml0KCBlcXVhbCApOworCisgICAgLyogZHN0W2ldID0gYzEgPT0gYzIgPyBzcmNbaV0gOiBkc3RbaV0gKi8KICAgICBmb3IoIHNpemVfdCBpID0gMDsgaSA8IGxlbjsgaSsrICkKLSAgICAgICAgZHN0W2ldID0gKCBkc3RbaV0gJiBtYXNrICkgfCAoIHNyY1tpXSAmIH5tYXNrICk7CisgICAgICAgIGRzdFtpXSA9ICggc3JjW2ldICYgbWFzayApIHwgKCBkc3RbaV0gJiB+bWFzayApOwogfQogCiAvKgpAQCAtMTUyOCw4ICsxNjExLDExIEBACiAKICAgICAgICAgaWYoIGF1dGhfZG9uZSA9PSAxICkKICAgICAgICAgewotICAgICAgICAgICAgY29ycmVjdCAqPSAoIHJlYy0+ZGF0YV9sZW4gPj0gcGFkbGVuICsgMSApOwotICAgICAgICAgICAgcGFkbGVuICAqPSAoIHJlYy0+ZGF0YV9sZW4gPj0gcGFkbGVuICsgMSApOworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG1hc2sgPSBtYmVkdGxzX3NzbF9jZl9tYXNrX2dlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWMtPmRhdGFfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRsZW4gKyAxICk7CisgICAgICAgICAgICBjb3JyZWN0ICY9IG1hc2s7CisgICAgICAgICAgICBwYWRsZW4gICY9IG1hc2s7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CkBAIC0xNTQzLDggKzE2MjksMTEgQEAKICAgICAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgICAgICBjb3JyZWN0ICo9ICggcmVjLT5kYXRhX2xlbiA+PSB0cmFuc2Zvcm0tPm1hY2xlbiArIHBhZGxlbiArIDEgKTsKLSAgICAgICAgICAgIHBhZGxlbiAgKj0gKCByZWMtPmRhdGFfbGVuID49IHRyYW5zZm9ybS0+bWFjbGVuICsgcGFkbGVuICsgMSApOworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG1hc2sgPSBtYmVkdGxzX3NzbF9jZl9tYXNrX2dlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWMtPmRhdGFfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPm1hY2xlbiArIHBhZGxlbiArIDEgKTsKKyAgICAgICAgICAgIGNvcnJlY3QgJj0gbWFzazsKKyAgICAgICAgICAgIHBhZGxlbiAgJj0gbWFzazsKICAgICAgICAgfQogCiAgICAgICAgIHBhZGxlbisrOwpAQCAtMTU1NSw2ICsxNjQ0LDEwIEBACiAjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQogICAgICAgICBpZiggdHJhbnNmb3JtLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKICAgICAgICAgeworICAgICAgICAgICAgLyogVGhpcyBpcyB0aGUgU1NMIDMuMCBwYXRoLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IEx1Y2t5CisgICAgICAgICAgICAgKiAxMywgYmVjYXVzZSB0aGVyZSdzIGEgc3RyaWN0bHkgd29yc2UgcGFkZGluZyBhdHRhY2sgYnVpbHQgaW4KKyAgICAgICAgICAgICAqIHRoZSBwcm90b2NvbCAoa25vd24gYXMgcGFydCBvZiBQT09ETEUpLCBzbyB3ZSBkb24ndCBjYXJlIGlmIHRoZQorICAgICAgICAgICAgICogY29kZSBpcyBub3QgY29uc3RhbnQtdGltZSwgaW4gcGFydGljdWxhciBicmFuY2hlcyBhcmUgT0suICovCiAgICAgICAgICAgICBpZiggcGFkbGVuID4gdHJhbnNmb3JtLT5pdmxlbiApCiAgICAgICAgICAgICB7CiAjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9ERUJVR19BTEwpCkBAIC0xNTc4LDcgKzE2NzEsNiBAQAogICAgICAgICAgICAgICogYG1pbigyNTYscGxhaW50ZXh0X2xlbilgIHJlYWRzIChidXQgdGFrZSBpbnRvIGFjY291bnQKICAgICAgICAgICAgICAqIG9ubHkgdGhlIGxhc3QgYHBhZGxlbmAgYnl0ZXMgZm9yIHRoZSBwYWRkaW5nIGNoZWNrKS4gKi8KICAgICAgICAgICAgIHNpemVfdCBwYWRfY291bnQgPSAwOwotICAgICAgICAgICAgc2l6ZV90IHJlYWxfY291bnQgPSAwOwogICAgICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciogY29uc3QgY2hlY2sgPSBkYXRhOwogCiAgICAgICAgICAgICAvKiBJbmRleCBvZiBmaXJzdCBwYWRkaW5nIGJ5dGU7IGl0IGhhcyBiZWVuIGVuc3VyZWQgYWJvdmUKQEAgLTE1OTAsMTYgKzE2ODIsMjEgQEAKIAogICAgICAgICAgICAgZm9yKCBpZHggPSBzdGFydF9pZHg7IGlkeCA8IHJlYy0+ZGF0YV9sZW47IGlkeCsrICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWFsX2NvdW50IHw9ICggaWR4ID49IHBhZGRpbmdfaWR4ICk7Ci0gICAgICAgICAgICAgICAgcGFkX2NvdW50ICs9IHJlYWxfY291bnQgKiAoIGNoZWNrW2lkeF0gPT0gcGFkbGVuIC0gMSApOworICAgICAgICAgICAgICAgIC8qIHBhZF9jb3VudCArPSAoaWR4ID49IHBhZGRpbmdfaWR4KSAmJgorICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAoY2hlY2tbaWR4XSA9PSBwYWRsZW4gLSAxKTsKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbWFzayA9IG1iZWR0bHNfc3NsX2NmX21hc2tfZ2UoIGlkeCwgcGFkZGluZ19pZHggKTsKKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgZXF1YWwgPSBtYmVkdGxzX3NzbF9jZl9ib29sX2VxKCBjaGVja1tpZHhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGxlbiAtIDEgKTsKKyAgICAgICAgICAgICAgICBwYWRfY291bnQgKz0gbWFzayAmIGVxdWFsOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY29ycmVjdCAmPSAoIHBhZF9jb3VudCA9PSBwYWRsZW4gKTsKKyAgICAgICAgICAgIGNvcnJlY3QgJj0gbWJlZHRsc19zc2xfY2ZfYm9vbF9lcSggcGFkX2NvdW50LCBwYWRsZW4gKTsKIAogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfREVCVUdfQUxMKQogICAgICAgICAgICAgaWYoIHBhZGxlbiA+IDAgJiYgY29ycmVjdCA9PSAwICkKICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBwYWRkaW5nIGJ5dGUgZGV0ZWN0ZWQiICkgKTsKICNlbmRpZgotICAgICAgICAgICAgcGFkbGVuICY9IGNvcnJlY3QgKiAweDFGRjsKKyAgICAgICAgICAgIHBhZGxlbiAmPSBtYmVkdGxzX3NzbF9jZl9tYXNrX2Zyb21fYml0KCBjb3JyZWN0ICk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzEgfHwgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xIHx8IFwKQEAgLTE5MjEsMTQgKzIwMTgsNiBAQAogICAgIHsKICAgICAgICAgdWludDMyX3QgdGltZW91dDsKIAotICAgICAgICAvKiBKdXN0IHRvIGJlIHN1cmUgKi8KLSAgICAgICAgaWYoIHNzbC0+Zl9zZXRfdGltZXIgPT0gTlVMTCB8fCBzc2wtPmZfZ2V0X3RpbWVyID09IE5VTEwgKQotICAgICAgICB7Ci0gICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIllvdSBtdXN0IHVzZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAibWJlZHRsc19zc2xfc2V0X3RpbWVyX2NiKCkgZm9yIERUTFMiICkgKTsKLSAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7Ci0gICAgICAgIH0KLQogICAgICAgICAvKgogICAgICAgICAgKiBUaGUgcG9pbnQgaXMsIHdlIG5lZWQgdG8gYWx3YXlzIHJlYWQgYSBmdWxsIGRhdGFncmFtIGF0IG9uY2UsIHNvIHdlCiAgICAgICAgICAqIHNvbWV0aW1lcyByZWFkIG1vcmUgdGhlbiByZXF1ZXN0ZWQsIGFuZCBoYW5kbGUgdGhlIGFkZGl0aW9uYWwgZGF0YS4KZGlmZiAtLWdpdCBhL2xpYnJhcnkvc3NsX3Nydi5jIGIvbGlicmFyeS9zc2xfc3J2LmMKaW5kZXggMmU2M2ZjZS4uZTMzYjgyOCAxMDA2NDQKLS0tIGEvbGlicmFyeS9zc2xfc3J2LmMKKysrIGIvbGlicmFyeS9zc2xfc3J2LmMKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICAgICAgICByZXR1cm4oIDEgKTsKIAogI2lmIGRlZmluZWQoTUJFRFRMU19VU0VfUFNBX0NSWVBUTykKLSAgICBpZiggY29uZi0+cHNrX29wYXF1ZSAhPSAwICkKKyAgICBpZiggISBtYmVkdGxzX3N2Y19rZXlfaWRfaXNfbnVsbCggY29uZi0+cHNrX29wYXF1ZSApICkKICAgICAgICAgcmV0dXJuKCAxICk7CiAjZW5kaWYgLyogTUJFRFRMU19VU0VfUFNBX0NSWVBUTyAqLwogCkBAIC0xNzIsMTMgKzE3MiwxMyBAQAogICAgICAgICAvKiBJZiB3ZSd2ZSB1c2VkIGEgY2FsbGJhY2sgdG8gc2VsZWN0IHRoZSBQU0ssCiAgICAgICAgICAqIHRoZSBzdGF0aWMgY29uZmlndXJhdGlvbiBpcyBpcnJlbGV2YW50LiAqLwogCi0gICAgICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+cHNrX29wYXF1ZSAhPSAwICkKKyAgICAgICAgaWYoICEgbWJlZHRsc19zdmNfa2V5X2lkX2lzX251bGwoIHNzbC0+aGFuZHNoYWtlLT5wc2tfb3BhcXVlICkgKQogICAgICAgICAgICAgcmV0dXJuKCAxICk7CiAKICAgICAgICAgcmV0dXJuKCAwICk7CiAgICAgfQogCi0gICAgaWYoIHNzbC0+Y29uZi0+cHNrX29wYXF1ZSAhPSAwICkKKyAgICBpZiggISBtYmVkdGxzX3N2Y19rZXlfaWRfaXNfbnVsbCggc3NsLT5jb25mLT5wc2tfb3BhcXVlICkgKQogICAgICAgICByZXR1cm4oIDEgKTsKIAogICAgIHJldHVybiggMCApOwpAQCAtNzc2LDYgKzc3NiwxMjYgQEAKIH0KICNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX3VzZV9zcnRwX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSBjbGllbnRfcHJvdGVjdGlvbiA9IE1CRURUTFNfVExTX1NSVFBfVU5TRVQ7CisgICAgc2l6ZV90IGksajsKKyAgICBzaXplX3QgcHJvZmlsZV9sZW5ndGg7CisgICAgdWludDE2X3QgbWtpX2xlbmd0aDsKKyAgICAvKiEgMiBieXRlcyBmb3IgcHJvZmlsZSBsZW5ndGggYW5kIDEgYnl0ZSBmb3IgbWtpIGxlbiAqLworICAgIGNvbnN0IHNpemVfdCBzaXplX29mX2xlbmd0aHMgPSAzOworCisgICAgLyogSWYgdXNlX3NydHAgaXMgbm90IGNvbmZpZ3VyZWQsIGp1c3QgaWdub3JlIHRoZSBleHRlbnNpb24gKi8KKyAgICBpZiggKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCAhPSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKSB8fAorICAgICAgICAoIHNzbC0+Y29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdCA9PSBOVUxMICkgfHwKKyAgICAgICAgKCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RfbGVuID09IDAgKSApCisgICAgeworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICAvKiBSRkM1NzY0IHNlY3Rpb24gNC4xLjEKKyAgICAgKiB1aW50OCBTUlRQUHJvdGVjdGlvblByb2ZpbGVbMl07CisgICAgICoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgU1JUUFByb3RlY3Rpb25Qcm9maWxlcyBTUlRQUHJvdGVjdGlvblByb2ZpbGVzOworICAgICAqICAgb3BhcXVlIHNydHBfbWtpPDAuLjI1NT47CisgICAgICogfSBVc2VTUlRQRGF0YTsKKworICAgICAqIFNSVFBQcm90ZWN0aW9uUHJvZmlsZSBTUlRQUHJvdGVjdGlvblByb2ZpbGVzPDIuLjJeMTYtMT47CisgICAgICovCisKKyAgICAvKgorICAgICAqIE1pbiBsZW5ndGggaXMgNTogYXQgbGVhc3Qgb25lIHByb3RlY3Rpb24gcHJvZmlsZSgyIGJ5dGVzKQorICAgICAqICAgICAgICAgICAgICAgICAgYW5kIGxlbmd0aCgyIGJ5dGVzKSArIHNydHBfbWtpIGxlbmd0aCgxIGJ5dGUpCisgICAgICogQ2hlY2sgaGVyZSB0aGF0IHdlIGhhdmUgYXQgbGVhc3QgMiBieXRlcyBvZiBwcm90ZWN0aW9uIHByb2ZpbGVzIGxlbmd0aAorICAgICAqIGFuZCBvbmUgb2Ygc3J0cF9ta2kgbGVuZ3RoCisgICAgICovCisgICAgaWYoIGxlbiA8IHNpemVfb2ZfbGVuZ3RocyApCisgICAgeworICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0hBTkRTSEFLRV9GQUlMVVJFICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgIHNzbC0+ZHRsc19zcnRwX2luZm8uY2hvc2VuX2R0bHNfc3J0cF9wcm9maWxlID0gTUJFRFRMU19UTFNfU1JUUF9VTlNFVDsKKworICAgIC8qIGZpcnN0IDIgYnl0ZXMgYXJlIHByb3RlY3Rpb24gcHJvZmlsZSBsZW5ndGgoaW4gYnl0ZXMpICovCisgICAgcHJvZmlsZV9sZW5ndGggPSAoIGJ1ZlswXSA8PCA4ICkgfCBidWZbMV07CisgICAgYnVmICs9IDI7CisKKyAgICAvKiBUaGUgcHJvZmlsZSBsZW5ndGggY2Fubm90IGJlIGJpZ2dlciB0aGFuIGlucHV0IGJ1ZmZlciBzaXplIC0gbGVuZ3RocyBmaWVsZHMgKi8KKyAgICBpZiggcHJvZmlsZV9sZW5ndGggPiBsZW4gLSBzaXplX29mX2xlbmd0aHMgfHwKKyAgICAgICAgcHJvZmlsZV9sZW5ndGggJSAyICE9IDAgKSAvKiBwcm9maWxlcyBhcmUgMiBieXRlcyBsb25nLCBzbyB0aGUgbGVuZ3RoIG11c3QgYmUgZXZlbiAqLworICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlKCBzc2wsIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19IQU5EU0hBS0VfRkFJTFVSRSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorICAgIC8qCisgICAgICogcGFyc2UgdGhlIGV4dGVuc2lvbiBsaXN0IHZhbHVlcyBhcmUgZGVmaW5lZCBpbgorICAgICAqIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvc3J0cC1wcm90ZWN0aW9uL3NydHAtcHJvdGVjdGlvbi54aHRtbAorICAgICAqLworICAgIGZvciggaiA9IDA7IGogPCBwcm9maWxlX2xlbmd0aDsgaiArPSAyICkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IHByb3RlY3Rpb25fcHJvZmlsZV92YWx1ZSA9IGJ1ZltqXSA8PCA4IHwgYnVmW2ogKyAxXTsKKyAgICAgICAgY2xpZW50X3Byb3RlY3Rpb24gPSBtYmVkdGxzX3NzbF9jaGVja19zcnRwX3Byb2ZpbGVfdmFsdWUoIHByb3RlY3Rpb25fcHJvZmlsZV92YWx1ZSApOworCisgICAgICAgIGlmKCBjbGllbnRfcHJvdGVjdGlvbiAhPSBNQkVEVExTX1RMU19TUlRQX1VOU0VUICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBzcnRwIHByb2ZpbGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF9zcnRwX3Byb2ZpbGVfYXNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfcHJvdGVjdGlvbiApICkgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8qIGNoZWNrIGlmIHN1Z2dlc3RlZCBwcm9maWxlIGlzIGluIG91ciBsaXN0ICovCisgICAgICAgIGZvciggaSA9IDA7IGkgPCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RfbGVuOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBjbGllbnRfcHJvdGVjdGlvbiA9PSBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RbaV0gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNzbC0+ZHRsc19zcnRwX2luZm8uY2hvc2VuX2R0bHNfc3J0cF9wcm9maWxlID0gc3NsLT5jb25mLT5kdGxzX3NydHBfcHJvZmlsZV9saXN0W2ldOworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VsZWN0ZWQgc3J0cCBwcm9maWxlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF9zcnRwX3Byb2ZpbGVfYXNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9wcm90ZWN0aW9uICkgKSApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKCBzc2wtPmR0bHNfc3J0cF9pbmZvLmNob3Nlbl9kdGxzX3NydHBfcHJvZmlsZSAhPSBNQkVEVExTX1RMU19TUlRQX1VOU0VUICkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBidWYgKz0gcHJvZmlsZV9sZW5ndGg7IC8qIGJ1ZiBwb2ludHMgdG8gdGhlIG1raSBsZW5ndGggKi8KKyAgICBta2lfbGVuZ3RoID0gKmJ1ZjsKKyAgICBidWYrKzsKKworICAgIGlmKCBta2lfbGVuZ3RoID4gTUJFRFRMU19UTFNfU1JUUF9NQVhfTUtJX0xFTkdUSCB8fAorICAgICAgICBta2lfbGVuZ3RoICsgcHJvZmlsZV9sZW5ndGggKyBzaXplX29mX2xlbmd0aHMgIT0gbGVuICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLCBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSEFORFNIQUtFX0ZBSUxVUkUgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIC8qIFBhcnNlIHRoZSBta2kgb25seSBpZiBwcmVzZW50IGFuZCBta2kgaXMgc3VwcG9ydGVkIGxvY2FsbHkgKi8KKyAgICBpZiggc3NsLT5jb25mLT5kdGxzX3NydHBfbWtpX3N1cHBvcnQgPT0gTUJFRFRMU19TU0xfRFRMU19TUlRQX01LSV9TVVBQT1JURUQgJiYKKyAgICAgICAgICBta2lfbGVuZ3RoID4gMCApCisgICAgeworICAgICAgICBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV9sZW4gPSBta2lfbGVuZ3RoOworCisgICAgICAgIG1lbWNweSggc3NsLT5kdGxzX3NydHBfaW5mby5ta2lfdmFsdWUsIGJ1ZiwgbWtpX2xlbmd0aCApOworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgInVzaW5nIG1raSIsICBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX2xlbiApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLworCiAvKgogICogQXV4aWxpYXJ5IGZ1bmN0aW9ucyBmb3IgU2VydmVySGVsbG8gcGFyc2luZyBhbmQgcmVsYXRlZCBhY3Rpb25zCiAgKi8KQEAgLTE5NDIsNiArMjA2MiwxNiBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLwogCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9VU0VfU1JUUDoKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgKSApOworCisgICAgICAgICAgICAgICAgcmV0ID0gc3NsX3BhcnNlX3VzZV9zcnRwX2V4dCggc3NsLCBleHQgKyA0LCBleHRfc2l6ZSApOworICAgICAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJ1bmtub3duIGV4dGVuc2lvbiBmb3VuZDogJWQgKGlnbm9yaW5nKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X2lkICkgKTsKQEAgLTI1MDAsNiArMjYzMCw3OCBAQAogfQogI2VuZGlmIC8qIE1CRURUTFNfRUNESF9DIHx8IE1CRURUTFNfRUNEU0FfQyAqLwogCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFAgKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfdXNlX3NydHBfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4gKQoreworICAgIHNpemVfdCBta2lfbGVuID0gMCwgZXh0X2xlbiA9IDA7CisgICAgdWludDE2X3QgcHJvZmlsZV92YWx1ZSA9IDA7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gc3NsLT5vdXRfbXNnICsgTUJFRFRMU19TU0xfT1VUX0NPTlRFTlRfTEVOOworCisgICAgKm9sZW4gPSAwOworCisgICAgaWYoICggc3NsLT5jb25mLT50cmFuc3BvcnQgIT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkgfHwKKyAgICAgICAgKCBzc2wtPmR0bHNfc3J0cF9pbmZvLmNob3Nlbl9kdGxzX3NydHBfcHJvZmlsZSA9PSBNQkVEVExTX1RMU19TUlRQX1VOU0VUICkgKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiApICk7CisKKyAgICBpZiggc3NsLT5jb25mLT5kdGxzX3NydHBfbWtpX3N1cHBvcnQgPT0gTUJFRFRMU19TU0xfRFRMU19TUlRQX01LSV9TVVBQT1JURUQgKQorICAgIHsKKyAgICAgICAgbWtpX2xlbiA9IHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX2xlbjsKKyAgICB9CisKKyAgICAvKiBUaGUgZXh0ZW5zaW9uIHRvdGFsIHNpemUgaXMgOSBieXRlcyA6CisgICAgICogLSAyIGJ5dGVzIGZvciB0aGUgZXh0ZW5zaW9uIHRhZworICAgICAqIC0gMiBieXRlcyBmb3IgdGhlIHRvdGFsIHNpemUKKyAgICAgKiAtIDIgYnl0ZXMgZm9yIHRoZSBwcm90ZWN0aW9uIHByb2ZpbGUgbGVuZ3RoCisgICAgICogLSAyIGJ5dGVzIGZvciB0aGUgcHJvdGVjdGlvbiBwcm9maWxlCisgICAgICogLSAxIGJ5dGUgZm9yIHRoZSBta2kgbGVuZ3RoCisgICAgICogKyAgdGhlIGFjdHVhbCBta2kgbGVuZ3RoCisgICAgICogQ2hlY2sgd2UgaGF2ZSBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciAqLworICAgIGlmKCAoc2l6ZV90KSggZW5kIC0gYnVmICkgPCBta2lfbGVuICsgOSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwiICkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIGV4dGVuc2lvbiAqLworICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfVVNFX1NSVFAgPj4gOCApICYgMHhGRiApOworICAgIGJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfVVNFX1NSVFAgICAgICApICYgMHhGRiApOworICAgIC8qCisgICAgICogdG90YWwgbGVuZ3RoIDUgYW5kIG1raSB2YWx1ZTogb25seSBvbmUgcHJvZmlsZSgyIGJ5dGVzKQorICAgICAqICAgICAgICAgICAgICBhbmQgbGVuZ3RoKDIgYnl0ZXMpIGFuZCBzcnRwX21raSAgKQorICAgICAqLworICAgIGV4dF9sZW4gPSA1ICsgbWtpX2xlbjsKKyAgICBidWZbMl0gPSAodW5zaWduZWQgY2hhcikoICggZXh0X2xlbiA+PiA4ICkgJiAweEZGICk7CisgICAgYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpKCBleHRfbGVuICYgMHhGRiApOworCisgICAgLyogcHJvdGVjdGlvbiBwcm9maWxlIGxlbmd0aDogMiAqLworICAgIGJ1Zls0XSA9IDB4MDA7CisgICAgYnVmWzVdID0gMHgwMjsKKyAgICBwcm9maWxlX3ZhbHVlID0gbWJlZHRsc19zc2xfY2hlY2tfc3J0cF9wcm9maWxlX3ZhbHVlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmR0bHNfc3J0cF9pbmZvLmNob3Nlbl9kdGxzX3NydHBfcHJvZmlsZSApOworICAgIGlmKCBwcm9maWxlX3ZhbHVlICE9IE1CRURUTFNfVExTX1NSVFBfVU5TRVQgKQorICAgIHsKKyAgICAgICAgYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpKCAoIHByb2ZpbGVfdmFsdWUgPj4gOCApICYgMHhGRiApOworICAgICAgICBidWZbN10gPSAodW5zaWduZWQgY2hhcikoIHByb2ZpbGVfdmFsdWUgJiAweEZGICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAidXNlX3NydHAgZXh0ZW5zaW9uIGludmFsaWQgcHJvZmlsZSIgKSApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYnVmWzhdID0gbWtpX2xlbiAmIDB4RkY7CisgICAgbWVtY3B5KCAmYnVmWzldLCBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV92YWx1ZSwgbWtpX2xlbiApOworCisgICAgKm9sZW4gPSA5ICsgbWtpX2xlbjsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKwogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkpCiBzdGF0aWMgaW50IHNzbF93cml0ZV9oZWxsb192ZXJpZnlfcmVxdWVzdCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKIHsKQEAgLTI3ODgsNiArMjk5MCwxMSBAQAogICAgIGV4dF9sZW4gKz0gb2xlbjsKICNlbmRpZgogCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApCisgICAgc3NsX3dyaXRlX3VzZV9zcnRwX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgdG90YWwgZXh0ZW5zaW9uIGxlbmd0aDogJWQiLCBleHRfbGVuICkgKTsKIAogICAgIGlmKCBleHRfbGVuID4gMCApCkBAIC0zNzIyLDExICszOTI5LDEyIEBACiAgICAgLyogSW4gY2FzZSBvZiBhIGZhaWx1cmUgaW4gZGVjcnlwdGlvbiwgdGhlIGRlY3J5cHRpb24gbWF5IHdyaXRlIGxlc3MgdGhhbgogICAgICAqIDIgYnl0ZXMgb2Ygb3V0cHV0LCBidXQgd2UgYWx3YXlzIHJlYWQgdGhlIGZpcnN0IHR3byBieXRlcy4gSXQgZG9lc24ndAogICAgICAqIG1hdHRlciBpbiB0aGUgZW5kIGJlY2F1c2UgZGlmZiB3aWxsIGJlIG5vbnplcm8gaW4gdGhhdCBjYXNlIGR1ZSB0bwotICAgICAqIHBlZXJfcG1zbGVuIGJlaW5nIGxlc3MgdGhhbiA0OCwgYW5kIHdlIG9ubHkgY2FyZSB3aGV0aGVyIGRpZmYgaXMgMC4KLSAgICAgKiBCdXQgZG8gaW5pdGlhbGl6ZSBwZWVyX3BtcyBmb3Igcm9idXN0bmVzcyBhbnl3YXkuIFRoaXMgYWxzbyBtYWtlcwotICAgICAqIG1lbW9yeSBhbmFseXplcnMgaGFwcHkgKGRvbid0IGFjY2VzcyB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXZlbgotICAgICAqIGlmIGl0J3MgYW4gdW5zaWduZWQgY2hhcikuICovCisgICAgICogcmV0IGJlaW5nIG5vbnplcm8sIGFuZCB3ZSBvbmx5IGNhcmUgd2hldGhlciBkaWZmIGlzIDAuCisgICAgICogQnV0IGRvIGluaXRpYWxpemUgcGVlcl9wbXMgYW5kIHBlZXJfcG1zbGVuIGZvciByb2J1c3RuZXNzIGFueXdheS4gVGhpcworICAgICAqIGFsc28gbWFrZXMgbWVtb3J5IGFuYWx5emVycyBoYXBweSAoZG9uJ3QgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LAorICAgICAqIGV2ZW4gaWYgaXQncyBhbiB1bnNpZ25lZCBjaGFyKS4gKi8KICAgICBwZWVyX3Btc1swXSA9IHBlZXJfcG1zWzFdID0gfjA7CisgICAgcGVlcl9wbXNsZW4gPSAwOwogCiAgICAgcmV0ID0gc3NsX2RlY3J5cHRfZW5jcnlwdGVkX3Btcyggc3NsLCBwLCBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlcl9wbXMsCmRpZmYgLS1naXQgYS9saWJyYXJ5L3NzbF90bHMuYyBiL2xpYnJhcnkvc3NsX3Rscy5jCmluZGV4IDcwNjJkNTMuLjA0MTU3OGUgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvc3NsX3Rscy5jCisrKyBiL2xpYnJhcnkvc3NsX3Rscy5jCkBAIC00NDYsNyArNDQ2LDcgQEAKICNpZiBkZWZpbmVkKE1CRURUTFNfVVNFX1BTQV9DUllQVE8pCiAKIHN0YXRpYyBwc2Ffc3RhdHVzX3Qgc2V0dXBfcHNhX2tleV9kZXJpdmF0aW9uKCBwc2Ffa2V5X2Rlcml2YXRpb25fb3BlcmF0aW9uX3QqIGRlcml2YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9oYW5kbGVfdCBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzZWVkLCBzaXplX3Qgc2VlZF9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogbGFiZWwsIHNpemVfdCBsYWJlbF9sZW5ndGgsCkBAIC00NjYsNyArNDY2LDcgQEAKICAgICAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgICAgICByZXR1cm4oIHN0YXR1cyApOwogCi0gICAgICAgIGlmKCBzbG90ID09IDAgKQorICAgICAgICBpZiggbWJlZHRsc19zdmNfa2V5X2lkX2lzX251bGwoIGtleSApICkKICAgICAgICAgewogICAgICAgICAgICAgc3RhdHVzID0gcHNhX2tleV9kZXJpdmF0aW9uX2lucHV0X2J5dGVzKAogICAgICAgICAgICAgICAgIGRlcml2YXRpb24sIFBTQV9LRVlfREVSSVZBVElPTl9JTlBVVF9TRUNSRVQsCkBAIC00NzUsOCArNDc1LDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgICBzdGF0dXMgPSBwc2Ffa2V5X2Rlcml2YXRpb25faW5wdXRfa2V5KAotICAgICAgICAgICAgICAgIGRlcml2YXRpb24sIFBTQV9LRVlfREVSSVZBVElPTl9JTlBVVF9TRUNSRVQsCi0gICAgICAgICAgICAgICAgc2xvdCApOworICAgICAgICAgICAgICAgIGRlcml2YXRpb24sIFBTQV9LRVlfREVSSVZBVElPTl9JTlBVVF9TRUNSRVQsIGtleSApOwogICAgICAgICB9CiAgICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKQEAgLTUwNyw3ICs1MDYsNyBAQAogewogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZzsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IG1hc3Rlcl9zbG90ID0gMDsKKyAgICBwc2Ffa2V5X2lkX3QgbWFzdGVyX2tleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9vcGVyYXRpb25fdCBkZXJpdmF0aW9uID0KICAgICAgICAgUFNBX0tFWV9ERVJJVkFUSU9OX09QRVJBVElPTl9JTklUOwogCkBAIC01MjEsNyArNTIwLDcgQEAKICAgICAgKiB0aGlzIFBSRiBpcyBhbHNvIHVzZWQgdG8gZGVyaXZlIGFuIElWLCBpbiBwYXJ0aWN1bGFyIGluIEVBUC1UTFMsCiAgICAgICogYW5kIGZvciB0aGlzIHVzZSBjYXNlIGl0IG1ha2VzIHNlbnNlIHRvIGhhdmUgYSAwLWxlbmd0aCAic2VjcmV0Ii4KICAgICAgKiBTaW5jZSB0aGUga2V5IEFQSSBkb2Vzbid0IGFsbG93IGltcG9ydGluZyBhIGtleSBvZiBsZW5ndGggMCwKLSAgICAgKiBrZWVwIG1hc3Rlcl9zbG90PTAsIHdoaWNoIHNldHVwX3BzYV9rZXlfZGVyaXZhdGlvbigpIHVuZGVyc3RhbmRzCisgICAgICoga2VlcCBtYXN0ZXJfa2V5PTAsIHdoaWNoIHNldHVwX3BzYV9rZXlfZGVyaXZhdGlvbigpIHVuZGVyc3RhbmRzCiAgICAgICogdG8gbWVhbiBhIDAtbGVuZ3RoICJzZWNyZXQiIGlucHV0LiAqLwogICAgIGlmKCBzbGVuICE9IDAgKQogICAgIHsKQEAgLTUzMCwxMyArNTI5LDEzIEBACiAgICAgICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmtleV9hdHRyaWJ1dGVzLCBhbGcgKTsKICAgICAgICAgcHNhX3NldF9rZXlfdHlwZSggJmtleV9hdHRyaWJ1dGVzLCBQU0FfS0VZX1RZUEVfREVSSVZFICk7CiAKLSAgICAgICAgc3RhdHVzID0gcHNhX2ltcG9ydF9rZXkoICZrZXlfYXR0cmlidXRlcywgc2VjcmV0LCBzbGVuLCAmbWFzdGVyX3Nsb3QgKTsKKyAgICAgICAgc3RhdHVzID0gcHNhX2ltcG9ydF9rZXkoICZrZXlfYXR0cmlidXRlcywgc2VjcmV0LCBzbGVuLCAmbWFzdGVyX2tleSApOwogICAgICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0hXX0FDQ0VMX0ZBSUxFRCApOwogICAgIH0KIAogICAgIHN0YXR1cyA9IHNldHVwX3BzYV9rZXlfZGVyaXZhdGlvbiggJmRlcml2YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJfc2xvdCwgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyX2tleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tLCBybGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgY29uc3QgKikgbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KSBzdHJsZW4oIGxhYmVsICksCkBAIC01NDQsNyArNTQzLDcgQEAKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICB7CiAgICAgICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9hYm9ydCggJmRlcml2YXRpb24gKTsKLSAgICAgICAgcHNhX2Rlc3Ryb3lfa2V5KCBtYXN0ZXJfc2xvdCApOworICAgICAgICBwc2FfZGVzdHJveV9rZXkoIG1hc3Rlcl9rZXkgKTsKICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSFdfQUNDRUxfRkFJTEVEICk7CiAgICAgfQogCkBAIC01NTIsMTkgKzU1MSwxOSBAQAogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgIHsKICAgICAgICAgcHNhX2tleV9kZXJpdmF0aW9uX2Fib3J0KCAmZGVyaXZhdGlvbiApOwotICAgICAgICBwc2FfZGVzdHJveV9rZXkoIG1hc3Rlcl9zbG90ICk7CisgICAgICAgIHBzYV9kZXN0cm95X2tleSggbWFzdGVyX2tleSApOwogICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUlMRUQgKTsKICAgICB9CiAKICAgICBzdGF0dXMgPSBwc2Ffa2V5X2Rlcml2YXRpb25fYWJvcnQoICZkZXJpdmF0aW9uICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgewotICAgICAgICBwc2FfZGVzdHJveV9rZXkoIG1hc3Rlcl9zbG90ICk7CisgICAgICAgIHBzYV9kZXN0cm95X2tleSggbWFzdGVyX2tleSApOwogICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUlMRUQgKTsKICAgICB9CiAKLSAgICBpZiggbWFzdGVyX3Nsb3QgIT0gMCApCi0gICAgICAgIHN0YXR1cyA9IHBzYV9kZXN0cm95X2tleSggbWFzdGVyX3Nsb3QgKTsKKyAgICBpZiggISBtYmVkdGxzX3N2Y19rZXlfaWRfaXNfbnVsbCggbWFzdGVyX2tleSApICkKKyAgICAgICAgc3RhdHVzID0gcHNhX2Rlc3Ryb3lfa2V5KCBtYXN0ZXJfa2V5ICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0hXX0FDQ0VMX0ZBSUxFRCApOwogCkBAIC03MDcsMTMgKzcwNiwxMyBAQAogICAgIHsKICAgICAgICAgLyogSWYgd2UndmUgdXNlZCBhIGNhbGxiYWNrIHRvIHNlbGVjdCB0aGUgUFNLLAogICAgICAgICAgKiB0aGUgc3RhdGljIGNvbmZpZ3VyYXRpb24gaXMgaXJyZWxldmFudC4gKi8KLSAgICAgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5wc2tfb3BhcXVlICE9IDAgKQorICAgICAgICBpZiggISBtYmVkdGxzX3N2Y19rZXlfaWRfaXNfbnVsbCggc3NsLT5oYW5kc2hha2UtPnBza19vcGFxdWUgKSApCiAgICAgICAgICAgICByZXR1cm4oIDEgKTsKIAogICAgICAgICByZXR1cm4oIDAgKTsKICAgICB9CiAKLSAgICBpZiggc3NsLT5jb25mLT5wc2tfb3BhcXVlICE9IDAgKQorICAgIGlmKCAhIG1iZWR0bHNfc3ZjX2tleV9pZF9pc19udWxsKCBzc2wtPmNvbmYtPnBza19vcGFxdWUgKSApCiAgICAgICAgIHJldHVybiggMSApOwogCiAgICAgcmV0dXJuKCAwICk7CkBAIC0xNTE0LDcgKzE1MTMsNyBAQAogICAgICAgICAvKiBQZXJmb3JtIFBTSy10by1NUyBleHBhbnNpb24gaW4gYSBzaW5nbGUgc3RlcC4gKi8KICAgICAgICAgcHNhX3N0YXR1c190IHN0YXR1czsKICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZzsKLSAgICAgICAgcHNhX2tleV9oYW5kbGVfdCBwc2s7CisgICAgICAgIHBzYV9rZXlfaWRfdCBwc2s7CiAgICAgICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9vcGVyYXRpb25fdCBkZXJpdmF0aW9uID0KICAgICAgICAgICAgIFBTQV9LRVlfREVSSVZBVElPTl9PUEVSQVRJT05fSU5JVDsKICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgaGFzaF9hbGcgPSBoYW5kc2hha2UtPmNpcGhlcnN1aXRlX2luZm8tPm1hYzsKQEAgLTM4NTksNiArMzg1OCwxMCBAQAogCiAgICAgbWJlZHRsc19zc2xfcmVzZXRfaW5fb3V0X3BvaW50ZXJzKCBzc2wgKTsKIAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19TUlRQKQorICAgIG1lbXNldCggJnNzbC0+ZHRsc19zcnRwX2luZm8sIDAsIHNpemVvZihzc2wtPmR0bHNfc3J0cF9pbmZvKSApOworI2VuZGlmCisKICAgICBpZiggKCByZXQgPSBzc2xfaGFuZHNoYWtlX2luaXQoIHNzbCApICkgIT0gMCApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTQzNDAsMTEgKzQzNDMsMTEgQEAKIHsKICAgICAvKiBSZW1vdmUgcmVmZXJlbmNlIHRvIGV4aXN0aW5nIFBTSywgaWYgYW55LiAqLwogI2lmIGRlZmluZWQoTUJFRFRMU19VU0VfUFNBX0NSWVBUTykKLSAgICBpZiggY29uZi0+cHNrX29wYXF1ZSAhPSAwICkKKyAgICBpZiggISBtYmVkdGxzX3N2Y19rZXlfaWRfaXNfbnVsbCggY29uZi0+cHNrX29wYXF1ZSApICkKICAgICB7CiAgICAgICAgIC8qIFRoZSBtYWludGVuYW5jZSBvZiB0aGUgUFNLIGtleSBzbG90IGlzIHRoZQogICAgICAgICAgKiB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuICovCi0gICAgICAgIGNvbmYtPnBza19vcGFxdWUgPSAwOworICAgICAgICBjb25mLT5wc2tfb3BhcXVlID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgfQogICAgIC8qIFRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgYnJhbmNoIHNob3VsZCBuZXZlcgogICAgICAqIGJlIHRha2VuIHNpbXVsdGFlbm91c2x5IGFzIHdlIG1haW50YWluIHRoZQpAQCAtNDQyOCw5ICs0NDMxLDkgQEAKIHN0YXRpYyB2b2lkIHNzbF9yZW1vdmVfcHNrKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQogewogI2lmIGRlZmluZWQoTUJFRFRMU19VU0VfUFNBX0NSWVBUTykKLSAgICBpZiggc3NsLT5oYW5kc2hha2UtPnBza19vcGFxdWUgIT0gMCApCisgICAgaWYoICEgbWJlZHRsc19zdmNfa2V5X2lkX2lzX251bGwoIHNzbC0+aGFuZHNoYWtlLT5wc2tfb3BhcXVlICkgKQogICAgIHsKLSAgICAgICAgc3NsLT5oYW5kc2hha2UtPnBza19vcGFxdWUgPSAwOworICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cHNrX29wYXF1ZSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIH0KICAgICBlbHNlCiAjZW5kaWYgLyogTUJFRFRMU19VU0VfUFNBX0NSWVBUTyAqLwpAQCAtNDQ2NSw3ICs0NDY4LDcgQEAKIAogI2lmIGRlZmluZWQoTUJFRFRMU19VU0VfUFNBX0NSWVBUTykKIGludCBtYmVkdGxzX3NzbF9jb25mX3Bza19vcGFxdWUoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgcHNrX3Nsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2lkX3QgcHNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHNrX2lkZW50aXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBza19pZGVudGl0eV9sZW4gKQogewpAQCAtNDQ3NCw5ICs0NDc3LDkgQEAKICAgICBzc2xfY29uZl9yZW1vdmVfcHNrKCBjb25mICk7CiAKICAgICAvKiBDaGVjayBhbmQgc2V0IG9wYXF1ZSBQU0sgKi8KLSAgICBpZiggcHNrX3Nsb3QgPT0gMCApCisgICAgaWYoIG1iZWR0bHNfc3ZjX2tleV9pZF9pc19udWxsKCBwc2sgKSApCiAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7Ci0gICAgY29uZi0+cHNrX29wYXF1ZSA9IHBza19zbG90OworICAgIGNvbmYtPnBza19vcGFxdWUgPSBwc2s7CiAKICAgICAvKiBDaGVjayBhbmQgc2V0IFBTSyBJZGVudGl0eSAqLwogICAgIHJldCA9IHNzbF9jb25mX3NldF9wc2tfaWRlbnRpdHkoIGNvbmYsIHBza19pZGVudGl0eSwKQEAgLTQ0ODgsMTMgKzQ0OTEsMTQgQEAKIH0KIAogaW50IG1iZWR0bHNfc3NsX3NldF9oc19wc2tfb3BhcXVlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgcHNrX3Nsb3QgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2lkX3QgcHNrICkKIHsKLSAgICBpZiggcHNrX3Nsb3QgPT0gMCB8fCBzc2wtPmhhbmRzaGFrZSA9PSBOVUxMICkKKyAgICBpZiggKCBtYmVkdGxzX3N2Y19rZXlfaWRfaXNfbnVsbCggcHNrICkgKSB8fAorICAgICAgICAoIHNzbC0+aGFuZHNoYWtlID09IE5VTEwgKSApCiAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CiAKICAgICBzc2xfcmVtb3ZlX3Bzayggc3NsICk7Ci0gICAgc3NsLT5oYW5kc2hha2UtPnBza19vcGFxdWUgPSBwc2tfc2xvdDsKKyAgICBzc2wtPmhhbmRzaGFrZS0+cHNrX29wYXF1ZSA9IHBzazsKICAgICByZXR1cm4oIDAgKTsKIH0KICNlbmRpZiAvKiBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPICovCkBAIC00Njg1LDYgKzQ2ODksODYgQEAKIH0KICNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9zcnRwX21raV92YWx1ZV9zdXBwb3J0ZWQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdXBwb3J0X21raV92YWx1ZSApCit7CisgICAgY29uZi0+ZHRsc19zcnRwX21raV9zdXBwb3J0ID0gc3VwcG9ydF9ta2lfdmFsdWU7Cit9CisKK2ludCBtYmVkdGxzX3NzbF9kdGxzX3NydHBfc2V0X21raV92YWx1ZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpta2lfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IG1raV9sZW4gKQoreworICAgIGlmKCBta2lfbGVuID4gTUJFRFRMU19UTFNfU1JUUF9NQVhfTUtJX0xFTkdUSCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIGlmKCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9ta2lfc3VwcG9ydCA9PSBNQkVEVExTX1NTTF9EVExTX1NSVFBfTUtJX1VOU1VQUE9SVEVEICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKyAgICB9CisKKyAgICBtZW1jcHkoIHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX3ZhbHVlLCBta2lfdmFsdWUsIG1raV9sZW4gKTsKKyAgICBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV9sZW4gPSBta2lfbGVuOworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19zc2xfY29uZl9kdGxzX3NydHBfcHJvdGVjdGlvbl9wcm9maWxlcyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSAqcHJvZmlsZXMgKQoreworICAgIGNvbnN0IG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSAqcDsKKyAgICBzaXplX3QgbGlzdF9zaXplID0gMDsKKworICAgIC8qIGNoZWNrIHRoZSBwcm9maWxlcyBsaXN0OiBhbGwgZW50cnkgbXVzdCBiZSB2YWxpZCwKKyAgICAgKiBpdHMgc2l6ZSBjYW5ub3QgYmUgbW9yZSB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2Ygc3VwcG9ydGVkIHByb2ZpbGVzLCBjdXJyZW50bHkgNCAqLworICAgIGZvciggcCA9IHByb2ZpbGVzOyAqcCAhPSBNQkVEVExTX1RMU19TUlRQX1VOU0VUICYmCisgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rfc2l6ZSA8PSBNQkVEVExTX1RMU19TUlRQX01BWF9QUk9GSUxFX0xJU1RfTEVOR1RIOworICAgICAgICAgcCsrICkKKyAgICB7CisgICAgICAgIGlmKCBtYmVkdGxzX3NzbF9jaGVja19zcnRwX3Byb2ZpbGVfdmFsdWUoICpwICkgIT0gTUJFRFRMU19UTFNfU1JUUF9VTlNFVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGxpc3Rfc2l6ZSsrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogdW5zdXBwb3J0ZWQgdmFsdWUsIHN0b3AgcGFyc2luZyBhbmQgc2V0IHRoZSBzaXplIHRvIGFuIGVycm9yIHZhbHVlICovCisgICAgICAgICAgICBsaXN0X3NpemUgPSBNQkVEVExTX1RMU19TUlRQX01BWF9QUk9GSUxFX0xJU1RfTEVOR1RIICsgMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBsaXN0X3NpemUgPiBNQkVEVExTX1RMU19TUlRQX01BWF9QUk9GSUxFX0xJU1RfTEVOR1RIICkKKyAgICB7CisgICAgICAgICAgICAgICAgY29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdCA9IE5VTEw7CisgICAgICAgICAgICAgICAgY29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdF9sZW4gPSAwOworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgY29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdCA9IHByb2ZpbGVzOworICAgIGNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RfbGVuID0gbGlzdF9zaXplOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfZ2V0X2R0bHNfc3J0cF9uZWdvdGlhdGlvbl9yZXN1bHQoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZHRsc19zcnRwX2luZm8gKmR0bHNfc3J0cF9pbmZvICkKK3sKKyAgICBkdGxzX3NydHBfaW5mby0+Y2hvc2VuX2R0bHNfc3J0cF9wcm9maWxlID0gc3NsLT5kdGxzX3NydHBfaW5mby5jaG9zZW5fZHRsc19zcnRwX3Byb2ZpbGU7CisgICAgLyogZG8gbm90IGNvcHkgdGhlIG1raSB2YWx1ZSBpZiB0aGVyZSBpcyBubyBjaG9zZW4gcHJvZmlsZSAqLworICAgIGlmKCBkdGxzX3NydHBfaW5mby0+Y2hvc2VuX2R0bHNfc3J0cF9wcm9maWxlID09IE1CRURUTFNfVExTX1NSVFBfVU5TRVQgKQorICAgIHsKKyAgICAgICAgZHRsc19zcnRwX2luZm8tPm1raV9sZW4gPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBkdGxzX3NydHBfaW5mby0+bWtpX2xlbiA9IHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX2xlbjsKKyAgICAgICAgbWVtY3B5KCBkdGxzX3NydHBfaW5mby0+bWtpX3ZhbHVlLCBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV92YWx1ZSwKKyAgICAgICAgICAgICAgICBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV9sZW4gKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisKIHZvaWQgbWJlZHRsc19zc2xfY29uZl9tYXhfdmVyc2lvbiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgbWFqb3IsIGludCBtaW5vciApCiB7CiAgICAgY29uZi0+bWF4X21ham9yX3ZlciA9IG1ham9yOwpAQCAtNTY4MiwxMSArNTc2NiwyNCBAQAogewogICAgIGludCByZXQgPSAwOwogCisgICAgLyogU2FuaXR5IGNoZWNrcyAqLworCiAgICAgaWYoIHNzbCA9PSBOVUxMIHx8IHNzbC0+Y29uZiA9PSBOVUxMICkKICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKIAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICYmCisgICAgICAgICggc3NsLT5mX3NldF90aW1lciA9PSBOVUxMIHx8IHNzbC0+Zl9nZXRfdGltZXIgPT0gTlVMTCApICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiWW91IG11c3QgdXNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWJlZHRsc19zc2xfc2V0X3RpbWVyX2NiKCkgZm9yIERUTFMiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworCiAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBoYW5kc2hha2UiICkgKTsKIAorICAgIC8qIE1haW4gaGFuZHNoYWtlIGxvb3AgKi8KICAgICB3aGlsZSggc3NsLT5zdGF0ZSAhPSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUiApCiAgICAgewogICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9oYW5kc2hha2Vfc3RlcCggc3NsICk7CmRpZmYgLS1naXQgYS9saWJyYXJ5L3RocmVhZGluZy5jIGIvbGlicmFyeS90aHJlYWRpbmcuYwppbmRleCA5MjY4ZGExLi4yYmI5MzJkIDEwMDY0NAotLS0gYS9saWJyYXJ5L3RocmVhZGluZy5jCisrKyBiL2xpYnJhcnkvdGhyZWFkaW5nLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAogI2lmICEoICggZGVmaW5lZChfUE9TSVhfVkVSU0lPTikgJiYgX1BPU0lYX1ZFUlNJT04gPj0gMjAwODA5TCApIHx8ICAgICBcCiAgICAgICAgKCBkZWZpbmVkKF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMgKSAmJiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMgPj0gMjAxMTJMICkgKQorICAgICAgICAgX1BPU0lYX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUyA+PSAyMDAxMTJMICkgKQogLyoKICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBzaG9ydGhhbmQgbWFjcm8gdG8gYXZvaWQgY2hlY2tpbmcgdGhlIGxvbmcKICAqIHByZXByb2Nlc3NvciBjb25kaXRpb25zIGFib3ZlLiBJZGVhbGx5LCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBtYWNybyBpbgpAQCAtNTcsNyArNTcsNyBAQAogCiAjZW5kaWYgLyogISggKCBkZWZpbmVkKF9QT1NJWF9WRVJTSU9OKSAmJiBfUE9TSVhfVkVSU0lPTiA+PSAyMDA4MDlMICkgfHwgICAgIFwKICAgICAgICAgICAgICAoIGRlZmluZWQoX1BPU0lYX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUyApICYmICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMgPj0gMjAxMTJMICkgKSAqLworICAgICAgICAgICAgICAgIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMgPj0gMjAwMTEyTCApICkgKi8KIAogI2VuZGlmIC8qIE1CRURUTFNfSEFWRV9USU1FX0RBVEUgJiYgIU1CRURUTFNfUExBVEZPUk1fR01USU1FX1JfQUxUICovCiAKZGlmZiAtLWdpdCBhL2xpYnJhcnkvdmVyc2lvbl9mZWF0dXJlcy5jIGIvbGlicmFyeS92ZXJzaW9uX2ZlYXR1cmVzLmMKaW5kZXggNDc4ZDhmYS4uNDJjY2FmOSAxMDA2NDQKLS0tIGEvbGlicmFyeS92ZXJzaW9uX2ZlYXR1cmVzLmMKKysrIGIvbGlicmFyeS92ZXJzaW9uX2ZlYXR1cmVzLmMKQEAgLTUzNCw2ICs1MzQsOSBAQAogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkpCiAgICAgIk1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZIiwKICNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19TUlRQKQorICAgICJNQkVEVExTX1NTTF9EVExTX1NSVFAiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLwogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19DTElFTlRfUE9SVF9SRVVTRSkKICAgICAiTUJFRFRMU19TU0xfRFRMU19DTElFTlRfUE9SVF9SRVVTRSIsCiAjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19DTElFTlRfUE9SVF9SRVVTRSAqLwpAQCAtNTc2LDYgKzU3OSw5IEBACiAjaWYgZGVmaW5lZChNQkVEVExTX1VTRV9QU0FfQ1JZUFRPKQogICAgICJNQkVEVExTX1VTRV9QU0FfQ1JZUFRPIiwKICNlbmRpZiAvKiBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHKQorICAgICJNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHICovCiAjaWYgZGVmaW5lZChNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMpCiAgICAgIk1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUyIsCiAjZW5kaWYgLyogTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTICovCmRpZmYgLS1naXQgYS9wcm9ncmFtcy8uZ2l0aWdub3JlIGIvcHJvZ3JhbXMvLmdpdGlnbm9yZQppbmRleCA1M2MxZWQ3Li44OGZiOWQ1IDEwMDY0NAotLS0gYS9wcm9ncmFtcy8uZ2l0aWdub3JlCisrKyBiL3Byb2dyYW1zLy5naXRpZ25vcmUKQEAgLTMyLDcgKzMyLDYgQEAKIHBzYS9jcnlwdG9fZXhhbXBsZXMKIHBzYS9rZXlfbGFkZGVyX2RlbW8KIHBzYS9wc2FfY29uc3RhbnRfbmFtZXMKLXBzYS9wc2FfY29uc3RhbnRfbmFtZXNfZ2VuZXJhdGVkLmMKIHJhbmRvbS9nZW5fZW50cm9weQogcmFuZG9tL2dlbl9yYW5kb21fY3RyX2RyYmcKIHJhbmRvbS9nZW5fcmFuZG9tX2hhdmVnZQpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvTWFrZWZpbGUgYi9wcm9ncmFtcy9NYWtlZmlsZQppbmRleCBkZmUwNTU1Li45Y2JjNDcxIDEwMDY0NAotLS0gYS9wcm9ncmFtcy9NYWtlZmlsZQorKysgYi9wcm9ncmFtcy9NYWtlZmlsZQpAQCAtMTE4LDggKzExOCw2IEBACiBBUFBTICs9IHRlc3QvY3BwX2R1bW15X2J1aWxkJChFWEVYVCkKIGVuZGlmCiAKLUVYVFJBX0dFTkVSQVRFRCA9Ci0KIC5TSUxFTlQ6CiAKIC5QSE9OWTogYWxsIGNsZWFuIGxpc3QgZnV6egpAQCAtMTQxLDE2ICsxMzksNiBAQAogJHtNQkVEVExTX1RFU1RfT0JKU306CiAJJChNQUtFKSAtQyAuLi90ZXN0cyBtYmVkdGxzX3Rlc3QKIAotaWZkZWYgV0lORE9XUwotRVhUUkFfR0VORVJBVEVEICs9IHBzYVxwc2FfY29uc3RhbnRfbmFtZXNfZ2VuZXJhdGVkLmMKLWVsc2UKLUVYVFJBX0dFTkVSQVRFRCArPSBwc2EvcHNhX2NvbnN0YW50X25hbWVzX2dlbmVyYXRlZC5jCi1lbmRpZgotCi1wc2EvcHNhX2NvbnN0YW50X25hbWVzJChFWEVYVCk6IHBzYS9wc2FfY29uc3RhbnRfbmFtZXNfZ2VuZXJhdGVkLmMKLXBzYS9wc2FfY29uc3RhbnRfbmFtZXNfZ2VuZXJhdGVkLmM6IC4uL3NjcmlwdHMvZ2VuZXJhdGVfcHNhX2NvbnN0YW50cy5weSAuLi9pbmNsdWRlL3BzYS9jcnlwdG9fdmFsdWVzLmggLi4vaW5jbHVkZS9wc2EvY3J5cHRvX2V4dHJhLmgKLQkuLi9zY3JpcHRzL2dlbmVyYXRlX3BzYV9jb25zdGFudHMucHkKLQogYWVzL2Flc2NyeXB0MiQoRVhFWFQpOiBhZXMvYWVzY3J5cHQyLmMgJChERVApCiAJZWNobyAiICBDQyAgICBhZXMvYWVzY3J5cHQyLmMiCiAJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBhZXMvYWVzY3J5cHQyLmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACkBAIC0zNzEsMTIgKzM1OSwxMCBAQAogaWZuZGVmIFdJTkRPV1MKIAlybSAtZiAkKEFQUFMpCiAJLXJtIC1mIHNzbC9zc2xfcHRocmVhZF9zZXJ2ZXIkKEVYRVhUKQotCXJtIC1mICQoRVhUUkFfR0VORVJBVEVEKQogCS1ybSAtZiB0ZXN0L2NwcF9kdW1teV9idWlsZCQoRVhFWFQpCiBlbHNlCiAJaWYgZXhpc3QgKi5vIGRlbCAvUSAvRiAqLm8KIAlpZiBleGlzdCAqLmV4ZSBkZWwgL1EgL0YgKi5leGUKLQlkZWwgL1MgL1EgL0YgJChFWFRSQV9HRU5FUkFURUQpCiBlbmRpZgogCSQoTUFLRSkgLUMgZnV6eiBjbGVhbgogCmRpZmYgLS1naXQgYS9wcm9ncmFtcy9hZXMvQ01ha2VMaXN0cy50eHQgYi9wcm9ncmFtcy9hZXMvQ01ha2VMaXN0cy50eHQKaW5kZXggMjMwOTc4OS4uNmI4Y2UyYSAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvYWVzL0NNYWtlTGlzdHMudHh0CisrKyBiL3Byb2dyYW1zL2Flcy9DTWFrZUxpc3RzLnR4dApAQCAtNSw3ICs1LDcgQEAKIAogZm9yZWFjaChleGUgSU4gTElTVFMgZXhlY3V0YWJsZXMpCiAgICAgYWRkX2V4ZWN1dGFibGUoJHtleGV9ICR7ZXhlfS5jICQ8VEFSR0VUX09CSkVDVFM6bWJlZHRsc190ZXN0PikKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtleGV9IG1iZWRjcnlwdG8pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7ZXhlfSAke21iZWRjcnlwdG9fdGFyZ2V0fSkKIGVuZGZvcmVhY2goKQogCiBpbnN0YWxsKFRBUkdFVFMgJHtleGVjdXRhYmxlc30KZGlmZiAtLWdpdCBhL3Byb2dyYW1zL2Z1enovQ01ha2VMaXN0cy50eHQgYi9wcm9ncmFtcy9mdXp6L0NNYWtlTGlzdHMudHh0CmluZGV4IGUyYjBlYWMuLmYwZTU3MDUgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL2Z1enovQ01ha2VMaXN0cy50eHQKKysrIGIvcHJvZ3JhbXMvZnV6ei9DTWFrZUxpc3RzLnR4dApAQCAtMSw1ICsxLDUgQEAKIHNldChsaWJzCi0gICAgbWJlZHRscworICAgICR7bWJlZHRsc190YXJnZXR9CiApCiAKIGlmKFVTRV9QS0NTMTFfSEVMUEVSX0xJQlJBUlkpCkBAIC0zNiw3ICszNiw3IEBACiAKICAgICBpZiAoTk9UIEZVWlpJTkdFTkdJTkVfTElCKQogICAgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtleGV9ICR7bGlic30pCi0gICAgICAgIHRhcmdldF9zb3VyY2VzKCR7ZXhlfSBQUklWQVRFIG9uZWZpbGUuYykKKyAgICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke2V4ZX0gQVBQRU5EIFBST1BFUlRZIFNPVVJDRVMgb25lZmlsZS5jKQogICAgIGVsc2UoKQogICAgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtleGV9ICR7bGlic30gRnV6emluZ0VuZ2luZSkKICAgICAgICAgU0VUX1RBUkdFVF9QUk9QRVJUSUVTKCR7ZXhlfSBQUk9QRVJUSUVTIExJTktFUl9MQU5HVUFHRSBDWFgpCkBAIC00NSw3ICs0NSw3IEBACiAgICAgIyBUaGlzIGVtdWxhdGVzICJpZiAoIC4uLiBJTl9MSVNUIC4uLiApIiB3aGljaCBiZWNvbWVzIGF2YWlsYWJsZSBpbiBDTWFrZSAzLjMKICAgICBsaXN0KEZJTkQgZXhlY3V0YWJsZXNfd2l0aF9jb21tb25fYyAke2V4ZX0gZXhlX2luZGV4KQogICAgIGlmICgke2V4ZV9pbmRleH0gR1JFQVRFUiAtMSkKLSAgICAgICAgdGFyZ2V0X3NvdXJjZXMoJHtleGV9IFBSSVZBVEUgY29tbW9uLmMpCisgICAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtleGV9IEFQUEVORCBQUk9QRVJUWSBTT1VSQ0VTIGNvbW1vbi5jKQogICAgIGVuZGlmKCkKIAogZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9wcm9ncmFtcy9oYXNoL0NNYWtlTGlzdHMudHh0IGIvcHJvZ3JhbXMvaGFzaC9DTWFrZUxpc3RzLnR4dAppbmRleCBhZTI5NDc5Li5iMmYyYTFmIDEwMDY0NAotLS0gYS9wcm9ncmFtcy9oYXNoL0NNYWtlTGlzdHMudHh0CisrKyBiL3Byb2dyYW1zL2hhc2gvQ01ha2VMaXN0cy50eHQKQEAgLTUsNyArNSw3IEBACiAKIGZvcmVhY2goZXhlIElOIExJU1RTIGV4ZWN1dGFibGVzKQogICAgIGFkZF9leGVjdXRhYmxlKCR7ZXhlfSAke2V4ZX0uYyAkPFRBUkdFVF9PQkpFQ1RTOm1iZWR0bHNfdGVzdD4pCi0gICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7ZXhlfSBtYmVkY3J5cHRvKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke2V4ZX0gJHttYmVkY3J5cHRvX3RhcmdldH0pCiBlbmRmb3JlYWNoKCkKIAogaW5zdGFsbChUQVJHRVRTICR7ZXhlY3V0YWJsZXN9CmRpZmYgLS1naXQgYS9wcm9ncmFtcy9wa2V5L0NNYWtlTGlzdHMudHh0IGIvcHJvZ3JhbXMvcGtleS9DTWFrZUxpc3RzLnR4dAppbmRleCBiNGIzZDMwLi45YzZmZTdkIDEwMDY0NAotLS0gYS9wcm9ncmFtcy9wa2V5L0NNYWtlTGlzdHMudHh0CisrKyBiL3Byb2dyYW1zL3BrZXkvQ01ha2VMaXN0cy50eHQKQEAgLTUsNyArNSw3IEBACiAKIGZvcmVhY2goZXhlIElOIExJU1RTIGV4ZWN1dGFibGVzX21iZWR0bHMpCiAgICAgYWRkX2V4ZWN1dGFibGUoJHtleGV9ICR7ZXhlfS5jICQ8VEFSR0VUX09CSkVDVFM6bWJlZHRsc190ZXN0PikKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtleGV9IG1iZWR0bHMpCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7ZXhlfSAke21iZWR0bHNfdGFyZ2V0fSkKIGVuZGZvcmVhY2goKQogCiBzZXQoZXhlY3V0YWJsZXNfbWJlZGNyeXB0bwpAQCAtMzEsNyArMzEsNyBAQAogCiBmb3JlYWNoKGV4ZSBJTiBMSVNUUyBleGVjdXRhYmxlc19tYmVkY3J5cHRvKQogICAgIGFkZF9leGVjdXRhYmxlKCR7ZXhlfSAke2V4ZX0uYyAkPFRBUkdFVF9PQkpFQ1RTOm1iZWR0bHNfdGVzdD4pCi0gICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7ZXhlfSBtYmVkY3J5cHRvKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke2V4ZX0gJHttYmVkY3J5cHRvX3RhcmdldH0pCiBlbmRmb3JlYWNoKCkKIAogaW5zdGFsbChUQVJHRVRTICR7ZXhlY3V0YWJsZXNfbWJlZHRsc30gJHtleGVjdXRhYmxlc19tYmVkY3J5cHRvfQpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvcHNhL0NNYWtlTGlzdHMudHh0IGIvcHJvZ3JhbXMvcHNhL0NNYWtlTGlzdHMudHh0CmluZGV4IGU1MTk2OTYuLjIzZTg1ZmUgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3BzYS9DTWFrZUxpc3RzLnR4dAorKysgYi9wcm9ncmFtcy9wc2EvQ01ha2VMaXN0cy50eHQKQEAgLTYsMTkgKzYsMTIgQEAKIAogZm9yZWFjaChleGUgSU4gTElTVFMgZXhlY3V0YWJsZXMpCiAgICAgYWRkX2V4ZWN1dGFibGUoJHtleGV9ICR7ZXhlfS5jICQ8VEFSR0VUX09CSkVDVFM6bWJlZHRsc190ZXN0PikKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtleGV9IG1iZWRjcnlwdG8pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7ZXhlfSAke21iZWRjcnlwdG9fdGFyZ2V0fSkKICAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcygke2V4ZX0gUFJJVkFURSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vLi4vdGVzdHMvaW5jbHVkZSkKIGVuZGZvcmVhY2goKQogCiB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcyhwc2FfY29uc3RhbnRfbmFtZXMgUFJJVkFURSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0pCiAKLWFkZF9jdXN0b21fdGFyZ2V0KAotICAgIHBzYV9jb25zdGFudF9uYW1lc19nZW5lcmF0ZWQKLSAgICBDT01NQU5EICR7TUJFRFRMU19QWVRIT05fRVhFQ1VUQUJMRX0gc2NyaXB0cy9nZW5lcmF0ZV9wc2FfY29uc3RhbnRzLnB5ICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfQotICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi8uLi8KLSkKLWFkZF9kZXBlbmRlbmNpZXMocHNhX2NvbnN0YW50X25hbWVzIHBzYV9jb25zdGFudF9uYW1lc19nZW5lcmF0ZWQpCi0KIGluc3RhbGwoVEFSR0VUUyAke2V4ZWN1dGFibGVzfQogICAgICAgICBERVNUSU5BVElPTiAiYmluIgogICAgICAgICBQRVJNSVNTSU9OUyBPV05FUl9SRUFEIE9XTkVSX1dSSVRFIE9XTkVSX0VYRUNVVEUgR1JPVVBfUkVBRCBHUk9VUF9FWEVDVVRFIFdPUkxEX1JFQUQgV09STERfRVhFQ1VURSkKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3BzYS9jcnlwdG9fZXhhbXBsZXMuYyBiL3Byb2dyYW1zL3BzYS9jcnlwdG9fZXhhbXBsZXMuYwppbmRleCA2MjNhMDkwLi5kMTY1ZDJlIDEwMDY0NAotLS0gYS9wcm9ncmFtcy9wc2EvY3J5cHRvX2V4YW1wbGVzLmMKKysrIGIvcHJvZ3JhbXMvcHNhL2NyeXB0b19leGFtcGxlcy5jCkBAIC00NSwxMyArNDUsMTUgQEAKIAogI2lmICFkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19DKSB8fCAhZGVmaW5lZChNQkVEVExTX0FFU19DKSB8fCBcCiAgICAgIWRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpIHx8ICFkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKSB8fCBcCi0gICAgIWRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcpCisgICAgIWRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUikKIGludCBtYWluKCB2b2lkICkKIHsKICAgICBwcmludGYoICJNQkVEVExTX1BTQV9DUllQVE9fQyBhbmQvb3IgTUJFRFRMU19BRVNfQyBhbmQvb3IgIgogICAgICAgICAgICAgIk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDIGFuZC9vciBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAiCiAgICAgICAgICAgICAiYW5kL29yIE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HICIKLSAgICAgICAgICAgICJub3QgZGVmaW5lZC5cclxuIiApOworICAgICAgICAgICAgIm5vdCBkZWZpbmVkIGFuZC9vciBNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIiCisgICAgICAgICAgICAiIGRlZmluZWQuXHJcbiIgKTsKICAgICByZXR1cm4oIDAgKTsKIH0KICNlbHNlCkBAIC05Miw3ICs5NCw3IEBACiAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIH0KIAotc3RhdGljIHBzYV9zdGF0dXNfdCBjaXBoZXJfZW5jcnlwdCggcHNhX2tleV9oYW5kbGVfdCBrZXlfaGFuZGxlLAorc3RhdGljIHBzYV9zdGF0dXNfdCBjaXBoZXJfZW5jcnlwdCggcHNhX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICogaXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaXZfc2l6ZSwKQEAgLTEwOCw3ICsxMTAsNyBAQAogICAgIHNpemVfdCBpdl9sZW4gPSAwOwogCiAgICAgbWVtc2V0KCAmb3BlcmF0aW9uLCAwLCBzaXplb2YoIG9wZXJhdGlvbiApICk7Ci0gICAgc3RhdHVzID0gcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBrZXlfaGFuZGxlLCBhbGcgKTsKKyAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICk7CiAgICAgQVNTRVJUX1NUQVRVUyggc3RhdHVzLCBQU0FfU1VDQ0VTUyApOwogCiAgICAgc3RhdHVzID0gcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiggJm9wZXJhdGlvbiwgaXYsIGl2X3NpemUsICZpdl9sZW4gKTsKQEAgLTEyMyw3ICsxMjUsNyBAQAogICAgIHJldHVybiggc3RhdHVzICk7CiB9CiAKLXN0YXRpYyBwc2Ffc3RhdHVzX3QgY2lwaGVyX2RlY3J5cHQoIHBzYV9rZXlfaGFuZGxlX3Qga2V5X2hhbmRsZSwKK3N0YXRpYyBwc2Ffc3RhdHVzX3QgY2lwaGVyX2RlY3J5cHQoIHBzYV9rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqIGl2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGl2X3NpemUsCkBAIC0xMzgsNyArMTQwLDcgQEAKICAgICBwc2FfY2lwaGVyX29wZXJhdGlvbl90IG9wZXJhdGlvbiA9IFBTQV9DSVBIRVJfT1BFUkFUSU9OX0lOSVQ7CiAKICAgICBtZW1zZXQoICZvcGVyYXRpb24sIDAsIHNpemVvZiggb3BlcmF0aW9uICkgKTsKLSAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGtleV9oYW5kbGUsIGFsZyApOworICAgIHN0YXR1cyA9IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwga2V5LCBhbGcgKTsKICAgICBBU1NFUlRfU1RBVFVTKCBzdGF0dXMsIFBTQV9TVUNDRVNTICk7CiAKICAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX3NldF9pdiggJm9wZXJhdGlvbiwgaXYsIGl2X3NpemUgKTsKQEAgLTE2NSw3ICsxNjcsNyBAQAogCiAgICAgcHNhX3N0YXR1c190IHN0YXR1czsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBrZXlfaGFuZGxlID0gMDsKKyAgICBwc2Ffa2V5X2lkX3Qga2V5ID0gMDsKICAgICBzaXplX3Qgb3V0cHV0X2xlbiA9IDA7CiAgICAgdWludDhfdCBpdltibG9ja19zaXplXTsKICAgICB1aW50OF90IGlucHV0W2Jsb2NrX3NpemVdOwpAQCAtMTgxLDE1ICsxODMsMTUgQEAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywgUFNBX0tFWV9UWVBFX0FFUyApOwogICAgIHBzYV9zZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzLCBrZXlfYml0cyApOwogCi0gICAgc3RhdHVzID0gcHNhX2dlbmVyYXRlX2tleSggJmF0dHJpYnV0ZXMsICZrZXlfaGFuZGxlICk7CisgICAgc3RhdHVzID0gcHNhX2dlbmVyYXRlX2tleSggJmF0dHJpYnV0ZXMsICZrZXkgKTsKICAgICBBU1NFUlRfU1RBVFVTKCBzdGF0dXMsIFBTQV9TVUNDRVNTICk7CiAKLSAgICBzdGF0dXMgPSBjaXBoZXJfZW5jcnlwdCgga2V5X2hhbmRsZSwgYWxnLCBpdiwgc2l6ZW9mKCBpdiApLAorICAgIHN0YXR1cyA9IGNpcGhlcl9lbmNyeXB0KCBrZXksIGFsZywgaXYsIHNpemVvZiggaXYgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIHNpemVvZiggaW5wdXQgKSwgcGFydF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0LCBzaXplb2YoIGVuY3J5cHQgKSwgJm91dHB1dF9sZW4gKTsKICAgICBBU1NFUlRfU1RBVFVTKCBzdGF0dXMsIFBTQV9TVUNDRVNTICk7CiAKLSAgICBzdGF0dXMgPSBjaXBoZXJfZGVjcnlwdCgga2V5X2hhbmRsZSwgYWxnLCBpdiwgc2l6ZW9mKCBpdiApLAorICAgIHN0YXR1cyA9IGNpcGhlcl9kZWNyeXB0KCBrZXksIGFsZywgaXYsIHNpemVvZiggaXYgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jcnlwdCwgb3V0cHV0X2xlbiwgcGFydF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyeXB0LCBzaXplb2YoIGRlY3J5cHQgKSwgJm91dHB1dF9sZW4gKTsKICAgICBBU1NFUlRfU1RBVFVTKCBzdGF0dXMsIFBTQV9TVUNDRVNTICk7CkBAIC0xOTgsNyArMjAwLDcgQEAKICAgICBBU1NFUlRfU1RBVFVTKCBzdGF0dXMsIFBTQV9TVUNDRVNTICk7CiAKIGV4aXQ6Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXlfaGFuZGxlICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICByZXR1cm4oIHN0YXR1cyApOwogfQogCkBAIC0yMTUsNyArMjE3LDcgQEAKIAogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwotICAgIHBzYV9rZXlfaGFuZGxlX3Qga2V5X2hhbmRsZSA9IDA7CisgICAgcHNhX2tleV9pZF90IGtleSA9IDA7CiAgICAgc2l6ZV90IG91dHB1dF9sZW4gPSAwOwogICAgIHVpbnQ4X3QgaXZbYmxvY2tfc2l6ZV0sIGlucHV0W2lucHV0X3NpemVdLAogICAgICAgICAgICAgZW5jcnlwdFtpbnB1dF9zaXplICsgYmxvY2tfc2l6ZV0sIGRlY3J5cHRbaW5wdXRfc2l6ZSArIGJsb2NrX3NpemVdOwpAQCAtMjI5LDE1ICsyMzEsMTUgQEAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywgUFNBX0tFWV9UWVBFX0FFUyApOwogICAgIHBzYV9zZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzLCBrZXlfYml0cyApOwogCi0gICAgc3RhdHVzID0gcHNhX2dlbmVyYXRlX2tleSggJmF0dHJpYnV0ZXMsICZrZXlfaGFuZGxlICk7CisgICAgc3RhdHVzID0gcHNhX2dlbmVyYXRlX2tleSggJmF0dHJpYnV0ZXMsICZrZXkgKTsKICAgICBBU1NFUlRfU1RBVFVTKCBzdGF0dXMsIFBTQV9TVUNDRVNTICk7CiAKLSAgICBzdGF0dXMgPSBjaXBoZXJfZW5jcnlwdCgga2V5X2hhbmRsZSwgYWxnLCBpdiwgc2l6ZW9mKCBpdiApLAorICAgIHN0YXR1cyA9IGNpcGhlcl9lbmNyeXB0KCBrZXksIGFsZywgaXYsIHNpemVvZiggaXYgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIHNpemVvZiggaW5wdXQgKSwgcGFydF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0LCBzaXplb2YoIGVuY3J5cHQgKSwgJm91dHB1dF9sZW4gKTsKICAgICBBU1NFUlRfU1RBVFVTKCBzdGF0dXMsIFBTQV9TVUNDRVNTICk7CiAKLSAgICBzdGF0dXMgPSBjaXBoZXJfZGVjcnlwdCgga2V5X2hhbmRsZSwgYWxnLCBpdiwgc2l6ZW9mKCBpdiApLAorICAgIHN0YXR1cyA9IGNpcGhlcl9kZWNyeXB0KCBrZXksIGFsZywgaXYsIHNpemVvZiggaXYgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jcnlwdCwgb3V0cHV0X2xlbiwgcGFydF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyeXB0LCBzaXplb2YoIGRlY3J5cHQgKSwgJm91dHB1dF9sZW4gKTsKICAgICBBU1NFUlRfU1RBVFVTKCBzdGF0dXMsIFBTQV9TVUNDRVNTICk7CkBAIC0yNDYsNyArMjQ4LDcgQEAKICAgICBBU1NFUlRfU1RBVFVTKCBzdGF0dXMsIFBTQV9TVUNDRVNTICk7CiAKIGV4aXQ6Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXlfaGFuZGxlICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICByZXR1cm4oIHN0YXR1cyApOwogfQogCkBAIC0yNjIsNyArMjY0LDcgQEAKIAogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwotICAgIHBzYV9rZXlfaGFuZGxlX3Qga2V5X2hhbmRsZSA9IDA7CisgICAgcHNhX2tleV9pZF90IGtleSA9IDA7CiAgICAgc2l6ZV90IG91dHB1dF9sZW4gPSAwOwogICAgIHVpbnQ4X3QgaXZbYmxvY2tfc2l6ZV0sIGlucHV0W2lucHV0X3NpemVdLCBlbmNyeXB0W2lucHV0X3NpemVdLAogICAgICAgICAgICAgZGVjcnlwdFtpbnB1dF9zaXplXTsKQEAgLTI3NiwxNSArMjc4LDE1IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVFlQRV9BRVMgKTsKICAgICBwc2Ffc2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcywga2V5X2JpdHMgKTsKIAotICAgIHN0YXR1cyA9IHBzYV9nZW5lcmF0ZV9rZXkoICZhdHRyaWJ1dGVzLCAma2V5X2hhbmRsZSApOworICAgIHN0YXR1cyA9IHBzYV9nZW5lcmF0ZV9rZXkoICZhdHRyaWJ1dGVzLCAma2V5ICk7CiAgICAgQVNTRVJUX1NUQVRVUyggc3RhdHVzLCBQU0FfU1VDQ0VTUyApOwogCi0gICAgc3RhdHVzID0gY2lwaGVyX2VuY3J5cHQoIGtleV9oYW5kbGUsIGFsZywgaXYsIHNpemVvZiggaXYgKSwKKyAgICBzdGF0dXMgPSBjaXBoZXJfZW5jcnlwdCgga2V5LCBhbGcsIGl2LCBzaXplb2YoIGl2ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBzaXplb2YoIGlucHV0ICksIHBhcnRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jcnlwdCwgc2l6ZW9mKCBlbmNyeXB0ICksICZvdXRwdXRfbGVuICk7CiAgICAgQVNTRVJUX1NUQVRVUyggc3RhdHVzLCBQU0FfU1VDQ0VTUyApOwogCi0gICAgc3RhdHVzID0gY2lwaGVyX2RlY3J5cHQoIGtleV9oYW5kbGUsIGFsZywgaXYsIHNpemVvZiggaXYgKSwKKyAgICBzdGF0dXMgPSBjaXBoZXJfZGVjcnlwdCgga2V5LCBhbGcsIGl2LCBzaXplb2YoIGl2ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHQsIG91dHB1dF9sZW4sIHBhcnRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdCwgc2l6ZW9mKCBkZWNyeXB0ICksICZvdXRwdXRfbGVuICk7CiAgICAgQVNTRVJUX1NUQVRVUyggc3RhdHVzLCBQU0FfU1VDQ0VTUyApOwpAQCAtMjkzLDcgKzI5NSw3IEBACiAgICAgQVNTRVJUX1NUQVRVUyggc3RhdHVzLCBQU0FfU1VDQ0VTUyApOwogCiBleGl0OgotICAgIHBzYV9kZXN0cm95X2tleSgga2V5X2hhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIH0KIApAQCAtMzE3LDE4ICszMTksNiBAQAogICAgICAgICBwcmludGYoICJcdHN1Y2Nlc3MhXHJcbiIgKTsKIH0KIAotI2lmIGRlZmluZWQoTUJFRFRMU19DSEVDS19QQVJBTVMpCi0jaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybV91dGlsLmgiCi12b2lkIG1iZWR0bHNfcGFyYW1fZmFpbGVkKCBjb25zdCBjaGFyICpmYWlsdXJlX2NvbmRpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSApCi17Ci0gICAgcHJpbnRmKCAiJXM6JWk6IElucHV0IHBhcmFtIGZhaWxlZCAtICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBmaWxlLCBsaW5lLCBmYWlsdXJlX2NvbmRpdGlvbiApOwotICAgIGV4aXQoIEVYSVRfRkFJTFVSRSApOwotfQotI2VuZGlmCi0KIGludCBtYWluKCB2b2lkICkKIHsKICAgICBBU1NFUlQoIHBzYV9jcnlwdG9faW5pdCggKSA9PSBQU0FfU1VDQ0VTUyApOwpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvcHNhL2tleV9sYWRkZXJfZGVtby5jIGIvcHJvZ3JhbXMvcHNhL2tleV9sYWRkZXJfZGVtby5jCmluZGV4IGFlMjQ0MmUuLjQ3ZDVkZTYgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3BzYS9rZXlfbGFkZGVyX2RlbW8uYworKysgYi9wcm9ncmFtcy9wc2Eva2V5X2xhZGRlcl9kZW1vLmMKQEAgLTY1LDE1ICs2NSwxNyBAQAogI2luY2x1ZGUgPHBzYS9jcnlwdG8uaD4KIAogLyogSWYgdGhlIGJ1aWxkIG9wdGlvbnMgd2UgbmVlZCBhcmUgbm90IGVuYWJsZWQsIGNvbXBpbGUgYSBwbGFjZWhvbGRlci4gKi8KLSNpZiAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKSB8fCAhZGVmaW5lZChNQkVEVExTX01EX0MpIHx8ICAgICBcCi0gICAgIWRlZmluZWQoTUJFRFRMU19BRVNfQykgfHwgIWRlZmluZWQoTUJFRFRMU19DQ01fQykgfHwgICAgICAgXAotICAgICFkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19DKSB8fCAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2lmICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfTURfQykgfHwgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19BRVNfQykgfHwgIWRlZmluZWQoTUJFRFRMU19DQ01fQykgfHwgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fQykgfHwgIWRlZmluZWQoTUJFRFRMU19GU19JTykgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSKQogaW50IG1haW4oIHZvaWQgKQogewotICAgIHByaW50ZigiTUJFRFRMU19TSEEyNTZfQyBhbmQvb3IgTUJFRFRMU19NRF9DIGFuZC9vciAiCi0gICAgICAgICAgICJNQkVEVExTX0FFU19DIGFuZC9vciBNQkVEVExTX0NDTV9DIGFuZC9vciAiCi0gICAgICAgICAgICJNQkVEVExTX1BTQV9DUllQVE9fQyBhbmQvb3IgTUJFRFRMU19GU19JTyAiCi0gICAgICAgICAgICJub3QgZGVmaW5lZC5cbiIpOworICAgIHByaW50ZiggIk1CRURUTFNfU0hBMjU2X0MgYW5kL29yIE1CRURUTFNfTURfQyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfQUVTX0MgYW5kL29yIE1CRURUTFNfQ0NNX0MgYW5kL29yICIKKyAgICAgICAgICAgICJNQkVEVExTX1BTQV9DUllQVE9fQyBhbmQvb3IgTUJFRFRMU19GU19JTyAiCisgICAgICAgICAgICAibm90IGRlZmluZWQgYW5kL29yIE1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUiAiCisgICAgICAgICAgICAiZGVmaW5lZC5cbiIgKTsKICAgICByZXR1cm4oIDAgKTsKIH0KICNlbHNlCkBAIC0xNjcsNyArMTY5LDcgQEAKIAogLyogU2F2ZSBhIGtleSB0byBhIGZpbGUuIEluIHRoZSByZWFsIHdvcmxkLCB5b3UgbWF5IHdhbnQgdG8gZXhwb3J0IGEgZGVyaXZlZAogICoga2V5IHNvbWV0aW1lcywgdG8gc2hhcmUgaXQgd2l0aCBhbm90aGVyIHBhcnR5LiAqLwotc3RhdGljIHBzYV9zdGF0dXNfdCBzYXZlX2tleSggcHNhX2tleV9oYW5kbGVfdCBrZXlfaGFuZGxlLAorc3RhdGljIHBzYV9zdGF0dXNfdCBzYXZlX2tleSggcHNhX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm91dHB1dF9maWxlX25hbWUgKQogewogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfU1VDQ0VTUzsKQEAgLTE3NSw3ICsxNzcsNyBAQAogICAgIHNpemVfdCBrZXlfc2l6ZTsKICAgICBGSUxFICprZXlfZmlsZSA9IE5VTEw7CiAKLSAgICBQU0FfQ0hFQ0soIHBzYV9leHBvcnRfa2V5KCBrZXlfaGFuZGxlLAorICAgIFBTQV9DSEVDSyggcHNhX2V4cG9ydF9rZXkoIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSwgc2l6ZW9mKCBrZXlfZGF0YSApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlfc2l6ZSApICk7CiAgICAgU1lTX0NIRUNLKCAoIGtleV9maWxlID0gZm9wZW4oIG91dHB1dF9maWxlX25hbWUsICJ3YiIgKSApICE9IE5VTEwgKTsKQEAgLTE5Nyw3ICsxOTksNyBAQAogc3RhdGljIHBzYV9zdGF0dXNfdCBnZW5lcmF0ZSggY29uc3QgY2hhciAqa2V5X2ZpbGVfbmFtZSApCiB7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9TVUNDRVNTOwotICAgIHBzYV9rZXlfaGFuZGxlX3Qga2V5X2hhbmRsZSA9IDA7CisgICAgcHNhX2tleV9pZF90IGtleSA9IDA7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogCiAgICAgcHNhX3NldF9rZXlfdXNhZ2VfZmxhZ3MoICZhdHRyaWJ1dGVzLApAQCAtMjA2LDEyICsyMDgsMTIgQEAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywgUFNBX0tFWV9UWVBFX0RFUklWRSApOwogICAgIHBzYV9zZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzLCBQU0FfQllURVNfVE9fQklUUyggS0VZX1NJWkVfQllURVMgKSApOwogCi0gICAgUFNBX0NIRUNLKCBwc2FfZ2VuZXJhdGVfa2V5KCAmYXR0cmlidXRlcywgJmtleV9oYW5kbGUgKSApOworICAgIFBTQV9DSEVDSyggcHNhX2dlbmVyYXRlX2tleSggJmF0dHJpYnV0ZXMsICZrZXkgKSApOwogCi0gICAgUFNBX0NIRUNLKCBzYXZlX2tleSgga2V5X2hhbmRsZSwga2V5X2ZpbGVfbmFtZSApICk7CisgICAgUFNBX0NIRUNLKCBzYXZlX2tleSgga2V5LCBrZXlfZmlsZV9uYW1lICkgKTsKIAogZXhpdDoKLSAgICAodm9pZCkgcHNhX2Rlc3Ryb3lfa2V5KCBrZXlfaGFuZGxlICk7CisgICAgKHZvaWQpIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIH0KIApAQCAtMjIzLDcgKzIyNSw3IEBACiBzdGF0aWMgcHNhX3N0YXR1c190IGltcG9ydF9rZXlfZnJvbV9maWxlKCBwc2Ffa2V5X3VzYWdlX3QgdXNhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2V5X2ZpbGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgKm1hc3Rlcl9rZXlfaGFuZGxlICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaWRfdCAqbWFzdGVyX2tleSApCiB7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9TVUNDRVNTOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKQEAgLTIzMiw4ICsyMzQsNiBAQAogICAgIEZJTEUgKmtleV9maWxlID0gTlVMTDsKICAgICB1bnNpZ25lZCBjaGFyIGV4dHJhX2J5dGU7CiAKLSAgICAqbWFzdGVyX2tleV9oYW5kbGUgPSAwOwotCiAgICAgU1lTX0NIRUNLKCAoIGtleV9maWxlID0gZm9wZW4oIGtleV9maWxlX25hbWUsICJyYiIgKSApICE9IE5VTEwgKTsKICAgICBTWVNfQ0hFQ0soICgga2V5X3NpemUgPSBmcmVhZCgga2V5X2RhdGEsIDEsIHNpemVvZigga2V5X2RhdGEgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2ZpbGUgKSApICE9IDAgKTsKQEAgLTI1MCw4ICsyNTAsNyBAQAogICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywgdXNhZ2UgKTsKICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCBhbGcgKTsKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywgUFNBX0tFWV9UWVBFX0RFUklWRSApOwotICAgIFBTQV9DSEVDSyggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXlfZGF0YSwga2V5X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyX2tleV9oYW5kbGUgKSApOworICAgIFBTQV9DSEVDSyggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXlfZGF0YSwga2V5X3NpemUsIG1hc3Rlcl9rZXkgKSApOwogZXhpdDoKICAgICBpZigga2V5X2ZpbGUgIT0gTlVMTCApCiAgICAgICAgIGZjbG9zZSgga2V5X2ZpbGUgKTsKQEAgLTI1OSwyMSArMjU4LDIyIEBACiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgewogICAgICAgICAvKiBJZiB0aGUga2V5IGNyZWF0aW9uIGhhc24ndCBoYXBwZW5lZCB5ZXQgb3IgaGFzIGZhaWxlZCwKLSAgICAgICAgICogKm1hc3Rlcl9rZXlfaGFuZGxlIGlzIDAuIHBzYV9kZXN0cm95X2tleSgwKSBpcyBndWFyYW50ZWVkIHRvIGRvCi0gICAgICAgICAqIG5vdGhpbmcgYW5kIHJldHVybiBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUuICovCi0gICAgICAgICh2b2lkKSBwc2FfZGVzdHJveV9rZXkoICptYXN0ZXJfa2V5X2hhbmRsZSApOwotICAgICAgICAqbWFzdGVyX2tleV9oYW5kbGUgPSAwOworICAgICAgICAgKiAqbWFzdGVyX2tleSBpcyBudWxsLiBwc2FfZGVzdHJveV9rZXkoIDAgKSBpcworICAgICAgICAgKiBndWFyYW50ZWVkIHRvIGRvIG5vdGhpbmcgYW5kIHJldHVybiBQU0FfU1VDQ0VTUy4gKi8KKyAgICAgICAgKHZvaWQpIHBzYV9kZXN0cm95X2tleSggKm1hc3Rlcl9rZXkgKTsKKyAgICAgICAgKm1hc3Rlcl9rZXkgPSAwOwogICAgIH0KICAgICByZXR1cm4oIHN0YXR1cyApOwogfQogCiAvKiBEZXJpdmUgdGhlIGludGVybWVkaWF0ZSBrZXlzLCB1c2luZyB0aGUgbGlzdCBvZiBsYWJlbHMgcHJvdmlkZWQgb24KLSAqIHRoZSBjb21tYW5kIGxpbmUuIE9uIGlucHV0LCAqa2V5X2hhbmRsZSBpcyBhIGhhbmRsZSB0byB0aGUgbWFzdGVyIGtleS4KLSAqIFRoaXMgZnVuY3Rpb24gY2xvc2VzIHRoZSBtYXN0ZXIga2V5LiBPbiBzdWNjZXNzZnVsIG91dHB1dCwgKmtleV9oYW5kbGUKLSAqIGlzIGEgaGFuZGxlIHRvIHRoZSBmaW5hbCBkZXJpdmVkIGtleS4gKi8KKyAqIHRoZSBjb21tYW5kIGxpbmUuIE9uIGlucHV0LCAqa2V5IGlzIHRoZSBtYXN0ZXIga2V5IGlkZW50aWZpZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGRlc3Ryb3lzIHRoZSBtYXN0ZXIga2V5LiBPbiBzdWNjZXNzZnVsIG91dHB1dCwgKmtleQorICogaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGZpbmFsIGRlcml2ZWQga2V5LgorICovCiBzdGF0aWMgcHNhX3N0YXR1c190IGRlcml2ZV9rZXlfbGFkZGVyKCBjb25zdCBjaGFyICpsYWRkZXJbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsYWRkZXJfZGVwdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90ICprZXlfaGFuZGxlICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaWRfdCAqa2V5ICkKIHsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gUFNBX1NVQ0NFU1M7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwpAQCAtMjk3LDE3ICsyOTcsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgREVSSVZFX0tFWV9TQUxULCBERVJJVkVfS0VZX1NBTFRfTEVOR1RIICkgKTsKICAgICAgICAgUFNBX0NIRUNLKCBwc2Ffa2V5X2Rlcml2YXRpb25faW5wdXRfa2V5KAogICAgICAgICAgICAgICAgICAgICAgICAmb3BlcmF0aW9uLCBQU0FfS0VZX0RFUklWQVRJT05fSU5QVVRfU0VDUkVULAotICAgICAgICAgICAgICAgICAgICAgICAqa2V5X2hhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICprZXkgKSApOwogICAgICAgICBQU0FfQ0hFQ0soIHBzYV9rZXlfZGVyaXZhdGlvbl9pbnB1dF9ieXRlcygKICAgICAgICAgICAgICAgICAgICAgICAgJm9wZXJhdGlvbiwgUFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX0lORk8sCiAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90KikgbGFkZGVyW2ldLCBzdHJsZW4oIGxhZGRlcltpXSApICkgKTsKICAgICAgICAgLyogV2hlbiB0aGUgcGFyZW50IGtleSBpcyBub3QgdGhlIG1hc3RlciBrZXksIGRlc3Ryb3kgaXQsCiAgICAgICAgICAqIHNpbmNlIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuICovCi0gICAgICAgIFBTQV9DSEVDSyggcHNhX2Nsb3NlX2tleSggKmtleV9oYW5kbGUgKSApOwotICAgICAgICAqa2V5X2hhbmRsZSA9IDA7CisgICAgICAgIFBTQV9DSEVDSyggcHNhX2Rlc3Ryb3lfa2V5KCAqa2V5ICkgKTsKKyAgICAgICAgKmtleSA9IDA7CiAgICAgICAgIC8qIERlcml2ZSB0aGUgbmV4dCBpbnRlcm1lZGlhdGUga2V5IGZyb20gdGhlIHBhcmVudCBrZXkuICovCiAgICAgICAgIFBTQV9DSEVDSyggcHNhX2tleV9kZXJpdmF0aW9uX291dHB1dF9rZXkoICZhdHRyaWJ1dGVzLCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ICkgKTsKICAgICAgICAgUFNBX0NIRUNLKCBwc2Ffa2V5X2Rlcml2YXRpb25fYWJvcnQoICZvcGVyYXRpb24gKSApOwogICAgIH0KIApAQCAtMzE1LDIyICszMTUsMjIgQEAKICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fYWJvcnQoICZvcGVyYXRpb24gKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICB7Ci0gICAgICAgIHBzYV9jbG9zZV9rZXkoICprZXlfaGFuZGxlICk7Ci0gICAgICAgICprZXlfaGFuZGxlID0gMDsKKyAgICAgICAgcHNhX2Rlc3Ryb3lfa2V5KCAqa2V5ICk7CisgICAgICAgICprZXkgPSAwOwogICAgIH0KICAgICByZXR1cm4oIHN0YXR1cyApOwogfQogCiAvKiBEZXJpdmUgYSB3cmFwcGluZyBrZXkgZnJvbSB0aGUgbGFzdCBpbnRlcm1lZGlhdGUga2V5LiAqLwogc3RhdGljIHBzYV9zdGF0dXNfdCBkZXJpdmVfd3JhcHBpbmdfa2V5KCBwc2Ffa2V5X3VzYWdlX3QgdXNhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgZGVyaXZlZF9rZXlfaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90ICp3cmFwcGluZ19rZXlfaGFuZGxlICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9pZF90IGRlcml2ZWRfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2lkX3QgKndyYXBwaW5nX2tleSApCiB7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9TVUNDRVNTOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fb3BlcmF0aW9uX3Qgb3BlcmF0aW9uID0gUFNBX0tFWV9ERVJJVkFUSU9OX09QRVJBVElPTl9JTklUOwogCi0gICAgKndyYXBwaW5nX2tleV9oYW5kbGUgPSAwOworICAgICp3cmFwcGluZ19rZXkgPSAwOwogCiAgICAgLyogU2V0IHVwIGEga2V5IGRlcml2YXRpb24gb3BlcmF0aW9uIGZyb20gdGhlIGtleSBkZXJpdmVkIGZyb20KICAgICAgKiB0aGUgbWFzdGVyIGtleS4gKi8KQEAgLTM0MCw3ICszNDAsNyBAQAogICAgICAgICAgICAgICAgICAgIFdSQVBQSU5HX0tFWV9TQUxULCBXUkFQUElOR19LRVlfU0FMVF9MRU5HVEggKSApOwogICAgIFBTQV9DSEVDSyggcHNhX2tleV9kZXJpdmF0aW9uX2lucHV0X2tleSgKICAgICAgICAgICAgICAgICAgICAmb3BlcmF0aW9uLCBQU0FfS0VZX0RFUklWQVRJT05fSU5QVVRfU0VDUkVULAotICAgICAgICAgICAgICAgICAgIGRlcml2ZWRfa2V5X2hhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgZGVyaXZlZF9rZXkgKSApOwogICAgIFBTQV9DSEVDSyggcHNhX2tleV9kZXJpdmF0aW9uX2lucHV0X2J5dGVzKAogICAgICAgICAgICAgICAgICAgICZvcGVyYXRpb24sIFBTQV9LRVlfREVSSVZBVElPTl9JTlBVVF9JTkZPLAogICAgICAgICAgICAgICAgICAgIE5VTEwsIDAgKSApOwpAQCAtMzUxLDcgKzM1MSw3IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVFlQRV9BRVMgKTsKICAgICBwc2Ffc2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcywgV1JBUFBJTkdfS0VZX0JJVFMgKTsKICAgICBQU0FfQ0hFQ0soIHBzYV9rZXlfZGVyaXZhdGlvbl9vdXRwdXRfa2V5KCAmYXR0cmlidXRlcywgJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGluZ19rZXlfaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGluZ19rZXkgKSApOwogCiBleGl0OgogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9hYm9ydCggJm9wZXJhdGlvbiApOwpAQCAtMzYwLDcgKzM2MCw3IEBACiAKIHN0YXRpYyBwc2Ffc3RhdHVzX3Qgd3JhcF9kYXRhKCBjb25zdCBjaGFyICppbnB1dF9maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3V0cHV0X2ZpbGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90IHdyYXBwaW5nX2tleV9oYW5kbGUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaWRfdCB3cmFwcGluZ19rZXkgKQogewogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAgICAgRklMRSAqaW5wdXRfZmlsZSA9IE5VTEw7CkBAIC00MDgsNyArNDA4LDcgQEAKIAogICAgIC8qIFdyYXAgdGhlIGRhdGEuICovCiAgICAgUFNBX0NIRUNLKCBwc2FfZ2VuZXJhdGVfcmFuZG9tKCBoZWFkZXIuaXYsIFdSQVBQSU5HX0lWX1NJWkUgKSApOwotICAgIFBTQV9DSEVDSyggcHNhX2FlYWRfZW5jcnlwdCggd3JhcHBpbmdfa2V5X2hhbmRsZSwgV1JBUFBJTkdfQUxHLAorICAgIFBTQV9DSEVDSyggcHNhX2FlYWRfZW5jcnlwdCggd3JhcHBpbmdfa2V5LCBXUkFQUElOR19BTEcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuaXYsIFdSQVBQSU5HX0lWX1NJWkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKSAmaGVhZGVyLCBzaXplb2YoIGhlYWRlciApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBpbnB1dF9zaXplLApAQCAtNDM3LDcgKzQzNyw3IEBACiAKIHN0YXRpYyBwc2Ffc3RhdHVzX3QgdW53cmFwX2RhdGEoIGNvbnN0IGNoYXIgKmlucHV0X2ZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm91dHB1dF9maWxlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90IHdyYXBwaW5nX2tleV9oYW5kbGUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9pZF90IHdyYXBwaW5nX2tleSApCiB7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1czsKICAgICBGSUxFICppbnB1dF9maWxlID0gTlVMTDsKQEAgLTQ4OSw3ICs0ODksNyBAQAogICAgIGlucHV0X2ZpbGUgPSBOVUxMOwogCiAgICAgLyogVW53cmFwIHRoZSBkYXRhLiAqLwotICAgIFBTQV9DSEVDSyggcHNhX2FlYWRfZGVjcnlwdCggd3JhcHBpbmdfa2V5X2hhbmRsZSwgV1JBUFBJTkdfQUxHLAorICAgIFBTQV9DSEVDSyggcHNhX2FlYWRfZGVjcnlwdCggd3JhcHBpbmdfa2V5LCBXUkFQUElOR19BTEcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuaXYsIFdSQVBQSU5HX0lWX1NJWkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKSAmaGVhZGVyLCBzaXplb2YoIGhlYWRlciApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBjaXBoZXJ0ZXh0X3NpemUsCkBAIC01MjcsOCArNTI3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvdXRwdXRfZmlsZV9uYW1lICkKIHsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gUFNBX1NVQ0NFU1M7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBkZXJpdmF0aW9uX2tleV9oYW5kbGUgPSAwOwotICAgIHBzYV9rZXlfaGFuZGxlX3Qgd3JhcHBpbmdfa2V5X2hhbmRsZSA9IDA7CisgICAgcHNhX2tleV9pZF90IGRlcml2YXRpb25fa2V5ID0gMDsKKyAgICBwc2Ffa2V5X2lkX3Qgd3JhcHBpbmdfa2V5ID0gMDsKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeS4gKi8KICAgICBQU0FfQ0hFQ0soIHBzYV9jcnlwdG9faW5pdCggKSApOwpAQCAtNTQxLDMwICs1NDEsMzAgQEAKICAgICBQU0FfQ0hFQ0soIGltcG9ydF9rZXlfZnJvbV9maWxlKCBQU0FfS0VZX1VTQUdFX0RFUklWRSB8IFBTQV9LRVlfVVNBR0VfRVhQT1JULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtERl9BTEcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2ZpbGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVyaXZhdGlvbl9rZXlfaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVyaXZhdGlvbl9rZXkgKSApOwogCiAgICAgLyogQ2FsY3VsYXRlIHRoZSBkZXJpdmVkIGtleSBmb3IgdGhpcyBzZXNzaW9uLiAqLwogICAgIFBTQV9DSEVDSyggZGVyaXZlX2tleV9sYWRkZXIoIGxhZGRlciwgbGFkZGVyX2RlcHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZXJpdmF0aW9uX2tleV9oYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZXJpdmF0aW9uX2tleSApICk7CiAKICAgICBzd2l0Y2goIG1vZGUgKQogICAgIHsKICAgICAgICAgY2FzZSBNT0RFX1NBVkU6Ci0gICAgICAgICAgICBQU0FfQ0hFQ0soIHNhdmVfa2V5KCBkZXJpdmF0aW9uX2tleV9oYW5kbGUsIG91dHB1dF9maWxlX25hbWUgKSApOworICAgICAgICAgICAgUFNBX0NIRUNLKCBzYXZlX2tleSggZGVyaXZhdGlvbl9rZXksIG91dHB1dF9maWxlX25hbWUgKSApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTU9ERV9VTldSQVA6CiAgICAgICAgICAgICBQU0FfQ0hFQ0soIGRlcml2ZV93cmFwcGluZ19rZXkoIFBTQV9LRVlfVVNBR0VfREVDUllQVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVyaXZhdGlvbl9rZXlfaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd3JhcHBpbmdfa2V5X2hhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcml2YXRpb25fa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd3JhcHBpbmdfa2V5ICkgKTsKICAgICAgICAgICAgIFBTQV9DSEVDSyggdW53cmFwX2RhdGEoIGlucHV0X2ZpbGVfbmFtZSwgb3V0cHV0X2ZpbGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwaW5nX2tleV9oYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBpbmdfa2V5ICkgKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1PREVfV1JBUDoKICAgICAgICAgICAgIFBTQV9DSEVDSyggZGVyaXZlX3dyYXBwaW5nX2tleSggUFNBX0tFWV9VU0FHRV9FTkNSWVBULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXJpdmF0aW9uX2tleV9oYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3cmFwcGluZ19rZXlfaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVyaXZhdGlvbl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3cmFwcGluZ19rZXkgKSApOwogICAgICAgICAgICAgUFNBX0NIRUNLKCB3cmFwX2RhdGEoIGlucHV0X2ZpbGVfbmFtZSwgb3V0cHV0X2ZpbGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGluZ19rZXlfaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGluZ19rZXkgKSApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvKiBVbnJlYWNoYWJsZSBidXQgc29tZSBjb21waWxlcnMgZG9uJ3QgcmVhbGl6ZSBpdC4gKi8KQEAgLTU3MiwxMSArNTcyLDExIEBACiAgICAgfQogCiBleGl0OgotICAgIC8qIENsb3NlIGFueSByZW1haW5pbmcga2V5LiBEZWluaXRpYWxpemluZyB0aGUgY3J5cHRvIGxpYnJhcnkgd291bGQgZG8KLSAgICAgKiB0aGlzIGFueXdheSwgYnV0IGV4cGxpY2l0bHkgY2xvc2luZyBoYW5kbGVzIG1ha2VzIHRoZSBjb2RlIGVhc2llcgotICAgICAqIHRvIHJldXNlLiAqLwotICAgICh2b2lkKSBwc2FfY2xvc2Vfa2V5KCBkZXJpdmF0aW9uX2tleV9oYW5kbGUgKTsKLSAgICAodm9pZCkgcHNhX2Nsb3NlX2tleSggd3JhcHBpbmdfa2V5X2hhbmRsZSApOworICAgIC8qIERlc3Ryb3kgYW55IHJlbWFpbmluZyBrZXkuIERlaW5pdGlhbGl6aW5nIHRoZSBjcnlwdG8gbGlicmFyeSB3b3VsZCBkbworICAgICAqIHRoaXMgYW55d2F5IHNpbmNlIHRoZXkgYXJlIHZvbGF0aWxlIGtleXMsIGJ1dCBleHBsaWNpdGx5IGRlc3Ryb3lpbmcKKyAgICAgKiBrZXlzIG1ha2VzIHRoZSBjb2RlIGVhc2llciB0byByZXVzZS4gKi8KKyAgICAodm9pZCkgcHNhX2Rlc3Ryb3lfa2V5KCBkZXJpdmF0aW9uX2tleSApOworICAgICh2b2lkKSBwc2FfZGVzdHJveV9rZXkoIHdyYXBwaW5nX2tleSApOwogICAgIC8qIERlaW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5LiAqLwogICAgIG1iZWR0bHNfcHNhX2NyeXB0b19mcmVlKCApOwogICAgIHJldHVybiggc3RhdHVzICk7CkBAIC02MDMsMTggKzYwMyw2IEBACiAgICAgcHJpbnRmKCAiICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHNhbWUgc2VxdWVuY2Ugb2YgbGFiZWxzLlxuIiApOwogfQogCi0jaWYgZGVmaW5lZChNQkVEVExTX0NIRUNLX1BBUkFNUykKLSNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtX3V0aWwuaCIKLXZvaWQgbWJlZHRsc19wYXJhbV9mYWlsZWQoIGNvbnN0IGNoYXIgKmZhaWx1cmVfY29uZGl0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lICkKLXsKLSAgICBwcmludGYoICIlczolaTogSW5wdXQgcGFyYW0gZmFpbGVkIC0gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIGZpbGUsIGxpbmUsIGZhaWx1cmVfY29uZGl0aW9uICk7Ci0gICAgZXhpdCggRVhJVF9GQUlMVVJFICk7Ci19Ci0jZW5kaWYKLQogaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQogewogICAgIGNvbnN0IGNoYXIgKmtleV9maWxlX25hbWUgPSAibWFzdGVyLmtleSI7CmRpZmYgLS1naXQgYS9wcm9ncmFtcy9wc2EvcHNhX2NvbnN0YW50X25hbWVzX2dlbmVyYXRlZC5jIGIvcHJvZ3JhbXMvcHNhL3BzYV9jb25zdGFudF9uYW1lc19nZW5lcmF0ZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTU2OGYzCi0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3JhbXMvcHNhL3BzYV9jb25zdGFudF9uYW1lc19nZW5lcmF0ZWQuYwpAQCAtMCwwICsxLDQwMCBAQAorLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcHNhX2NvbnN0YW50LnB5LiBETyBOT1QgRURJVC4gKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKnBzYV9zdHJlcnJvcihwc2Ffc3RhdHVzX3Qgc3RhdHVzKQoreworICAgIHN3aXRjaCAoc3RhdHVzKSB7CisgICAgY2FzZSBQU0FfRVJST1JfQUxSRUFEWV9FWElTVFM6IHJldHVybiAiUFNBX0VSUk9SX0FMUkVBRFlfRVhJU1RTIjsKKyAgICBjYXNlIFBTQV9FUlJPUl9CQURfU1RBVEU6IHJldHVybiAiUFNBX0VSUk9SX0JBRF9TVEFURSI7CisgICAgY2FzZSBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTDogcmV0dXJuICJQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCI7CisgICAgY2FzZSBQU0FfRVJST1JfQ09NTVVOSUNBVElPTl9GQUlMVVJFOiByZXR1cm4gIlBTQV9FUlJPUl9DT01NVU5JQ0FUSU9OX0ZBSUxVUkUiOworICAgIGNhc2UgUFNBX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQ6IHJldHVybiAiUFNBX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQiOworICAgIGNhc2UgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUOiByZXR1cm4gIlBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCI7CisgICAgY2FzZSBQU0FfRVJST1JfR0VORVJJQ19FUlJPUjogcmV0dXJuICJQU0FfRVJST1JfR0VORVJJQ19FUlJPUiI7CisgICAgY2FzZSBQU0FfRVJST1JfSEFSRFdBUkVfRkFJTFVSRTogcmV0dXJuICJQU0FfRVJST1JfSEFSRFdBUkVfRkFJTFVSRSI7CisgICAgY2FzZSBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX0RBVEE6IHJldHVybiAiUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9EQVRBIjsKKyAgICBjYXNlIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfRU5UUk9QWTogcmV0dXJuICJQU0FfRVJST1JfSU5TVUZGSUNJRU5UX0VOVFJPUFkiOworICAgIGNhc2UgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlk6IHJldHVybiAiUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlkiOworICAgIGNhc2UgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9TVE9SQUdFOiByZXR1cm4gIlBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfU1RPUkFHRSI7CisgICAgY2FzZSBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVDogcmV0dXJuICJQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCI7CisgICAgY2FzZSBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEU6IHJldHVybiAiUFNBX0VSUk9SX0lOVkFMSURfSEFORExFIjsKKyAgICBjYXNlIFBTQV9FUlJPUl9JTlZBTElEX1BBRERJTkc6IHJldHVybiAiUFNBX0VSUk9SX0lOVkFMSURfUEFERElORyI7CisgICAgY2FzZSBQU0FfRVJST1JfSU5WQUxJRF9TSUdOQVRVUkU6IHJldHVybiAiUFNBX0VSUk9SX0lOVkFMSURfU0lHTkFUVVJFIjsKKyAgICBjYXNlIFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEOiByZXR1cm4gIlBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEIjsKKyAgICBjYXNlIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEOiByZXR1cm4gIlBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEIjsKKyAgICBjYXNlIFBTQV9FUlJPUl9TVE9SQUdFX0ZBSUxVUkU6IHJldHVybiAiUFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRSI7CisgICAgY2FzZSBQU0FfU1VDQ0VTUzogcmV0dXJuICJQU0FfU1VDQ0VTUyI7CisgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqcHNhX2VjY19mYW1pbHlfbmFtZShwc2FfZWNjX2ZhbWlseV90IGN1cnZlKQoreworICAgIHN3aXRjaCAoY3VydmUpIHsKKyAgICBjYXNlIFBTQV9FQ0NfRkFNSUxZX0JSQUlOUE9PTF9QX1IxOiByZXR1cm4gIlBTQV9FQ0NfRkFNSUxZX0JSQUlOUE9PTF9QX1IxIjsKKyAgICBjYXNlIFBTQV9FQ0NfRkFNSUxZX01PTlRHT01FUlk6IHJldHVybiAiUFNBX0VDQ19GQU1JTFlfTU9OVEdPTUVSWSI7CisgICAgY2FzZSBQU0FfRUNDX0ZBTUlMWV9TRUNQX0sxOiByZXR1cm4gIlBTQV9FQ0NfRkFNSUxZX1NFQ1BfSzEiOworICAgIGNhc2UgUFNBX0VDQ19GQU1JTFlfU0VDUF9SMTogcmV0dXJuICJQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxIjsKKyAgICBjYXNlIFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjI6IHJldHVybiAiUFNBX0VDQ19GQU1JTFlfU0VDUF9SMiI7CisgICAgY2FzZSBQU0FfRUNDX0ZBTUlMWV9TRUNUX0sxOiByZXR1cm4gIlBTQV9FQ0NfRkFNSUxZX1NFQ1RfSzEiOworICAgIGNhc2UgUFNBX0VDQ19GQU1JTFlfU0VDVF9SMTogcmV0dXJuICJQU0FfRUNDX0ZBTUlMWV9TRUNUX1IxIjsKKyAgICBjYXNlIFBTQV9FQ0NfRkFNSUxZX1NFQ1RfUjI6IHJldHVybiAiUFNBX0VDQ19GQU1JTFlfU0VDVF9SMiI7CisgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqcHNhX2RoX2ZhbWlseV9uYW1lKHBzYV9kaF9mYW1pbHlfdCBncm91cCkKK3sKKyAgICBzd2l0Y2ggKGdyb3VwKSB7CisgICAgY2FzZSBQU0FfREhfRkFNSUxZX0NVU1RPTTogcmV0dXJuICJQU0FfREhfRkFNSUxZX0NVU1RPTSI7CisgICAgY2FzZSBQU0FfREhfRkFNSUxZX1JGQzc5MTk6IHJldHVybiAiUFNBX0RIX0ZBTUlMWV9SRkM3OTE5IjsKKyAgICBkZWZhdWx0OiByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwc2FfaGFzaF9hbGdvcml0aG1fbmFtZShwc2FfYWxnb3JpdGhtX3QgaGFzaF9hbGcpCit7CisgICAgc3dpdGNoIChoYXNoX2FsZykgeworICAgIGNhc2UgUFNBX0FMR19BTllfSEFTSDogcmV0dXJuICJQU0FfQUxHX0FOWV9IQVNIIjsKKyAgICBjYXNlIFBTQV9BTEdfQ0FURUdPUllfSEFTSDogcmV0dXJuICJQU0FfQUxHX0NBVEVHT1JZX0hBU0giOworICAgIGNhc2UgUFNBX0FMR19NRDI6IHJldHVybiAiUFNBX0FMR19NRDIiOworICAgIGNhc2UgUFNBX0FMR19NRDQ6IHJldHVybiAiUFNBX0FMR19NRDQiOworICAgIGNhc2UgUFNBX0FMR19NRDU6IHJldHVybiAiUFNBX0FMR19NRDUiOworICAgIGNhc2UgUFNBX0FMR19SSVBFTUQxNjA6IHJldHVybiAiUFNBX0FMR19SSVBFTUQxNjAiOworICAgIGNhc2UgUFNBX0FMR19TSEEzXzIyNDogcmV0dXJuICJQU0FfQUxHX1NIQTNfMjI0IjsKKyAgICBjYXNlIFBTQV9BTEdfU0hBM18yNTY6IHJldHVybiAiUFNBX0FMR19TSEEzXzI1NiI7CisgICAgY2FzZSBQU0FfQUxHX1NIQTNfMzg0OiByZXR1cm4gIlBTQV9BTEdfU0hBM18zODQiOworICAgIGNhc2UgUFNBX0FMR19TSEEzXzUxMjogcmV0dXJuICJQU0FfQUxHX1NIQTNfNTEyIjsKKyAgICBjYXNlIFBTQV9BTEdfU0hBXzE6IHJldHVybiAiUFNBX0FMR19TSEFfMSI7CisgICAgY2FzZSBQU0FfQUxHX1NIQV8yMjQ6IHJldHVybiAiUFNBX0FMR19TSEFfMjI0IjsKKyAgICBjYXNlIFBTQV9BTEdfU0hBXzI1NjogcmV0dXJuICJQU0FfQUxHX1NIQV8yNTYiOworICAgIGNhc2UgUFNBX0FMR19TSEFfMzg0OiByZXR1cm4gIlBTQV9BTEdfU0hBXzM4NCI7CisgICAgY2FzZSBQU0FfQUxHX1NIQV81MTI6IHJldHVybiAiUFNBX0FMR19TSEFfNTEyIjsKKyAgICBjYXNlIFBTQV9BTEdfU0hBXzUxMl8yMjQ6IHJldHVybiAiUFNBX0FMR19TSEFfNTEyXzIyNCI7CisgICAgY2FzZSBQU0FfQUxHX1NIQV81MTJfMjU2OiByZXR1cm4gIlBTQV9BTEdfU0hBXzUxMl8yNTYiOworICAgIGRlZmF1bHQ6IHJldHVybiBOVUxMOworICAgIH0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBzYV9rYV9hbGdvcml0aG1fbmFtZShwc2FfYWxnb3JpdGhtX3Qga2FfYWxnKQoreworICAgIHN3aXRjaCAoa2FfYWxnKSB7CisgICAgY2FzZSBQU0FfQUxHX0NBVEVHT1JZX0tFWV9BR1JFRU1FTlQ6IHJldHVybiAiUFNBX0FMR19DQVRFR09SWV9LRVlfQUdSRUVNRU5UIjsKKyAgICBjYXNlIFBTQV9BTEdfRUNESDogcmV0dXJuICJQU0FfQUxHX0VDREgiOworICAgIGNhc2UgUFNBX0FMR19GRkRIOiByZXR1cm4gIlBTQV9BTEdfRkZESCI7CisgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitzdGF0aWMgaW50IHBzYV9zbnByaW50X2tleV90eXBlKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3R5cGVfdCB0eXBlKQoreworICAgIHNpemVfdCByZXF1aXJlZF9zaXplID0gMDsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9BRVM6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfQUVTIiwgMTYpOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9BUkM0OiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX0FSQzQiLCAxNyk7IGJyZWFrOworICAgIGNhc2UgUFNBX0tFWV9UWVBFX0NBTUVMTElBOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX0NBTUVMTElBIiwgMjEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9DQVRFR09SWV9GTEFHX1BBSVI6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfQ0FURUdPUllfRkxBR19QQUlSIiwgMzEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9DQVRFR09SWV9LRVlfUEFJUjogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVFlQRV9DQVRFR09SWV9LRVlfUEFJUiIsIDMwKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfQ0FURUdPUllfUFVCTElDX0tFWTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVFlQRV9DQVRFR09SWV9QVUJMSUNfS0VZIiwgMzIpOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9DQVRFR09SWV9SQVc6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfQ0FURUdPUllfUkFXIiwgMjUpOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9DQVRFR09SWV9TWU1NRVRSSUM6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfQ0FURUdPUllfU1lNTUVUUklDIiwgMzEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9DSEFDSEEyMDogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVFlQRV9DSEFDSEEyMCIsIDIxKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfREVSSVZFOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX0RFUklWRSIsIDE5KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfREVTOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX0RFUyIsIDE2KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfREhfS0VZX1BBSVJfQkFTRTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVFlQRV9ESF9LRVlfUEFJUl9CQVNFIiwgMjkpOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9ESF9QVUJMSUNfS0VZX0JBU0U6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfREhfUFVCTElDX0tFWV9CQVNFIiwgMzEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9EU0FfS0VZX1BBSVI6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfRFNBX0tFWV9QQUlSIiwgMjUpOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9EU0FfUFVCTElDX0tFWTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVFlQRV9EU0FfUFVCTElDX0tFWSIsIDI3KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSX0JBU0U6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSX0JBU0UiLCAzMCk7IGJyZWFrOworICAgIGNhc2UgUFNBX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZX0JBU0U6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVlfQkFTRSIsIDMyKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfSE1BQzogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVFlQRV9ITUFDIiwgMTcpOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9OT05FOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX05PTkUiLCAxNyk7IGJyZWFrOworICAgIGNhc2UgUFNBX0tFWV9UWVBFX1JBV19EQVRBOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX1JBV19EQVRBIiwgMjEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSIiwgMjUpOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSIsIDI3KTsgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKFBTQV9LRVlfVFlQRV9JU19FQ0NfS0VZX1BBSVIodHlwZSkpIHsKKyAgICAgICAgICAgIGFwcGVuZF93aXRoX2N1cnZlKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSIiwgMjUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfS0VZX1RZUEVfRUNDX0dFVF9GQU1JTFkodHlwZSkpOworICAgICAgICB9IGVsc2UgaWYgKFBTQV9LRVlfVFlQRV9JU19FQ0NfUFVCTElDX0tFWSh0eXBlKSkgeworICAgICAgICAgICAgYXBwZW5kX3dpdGhfY3VydmUoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSIsIDI3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0tFWV9UWVBFX0VDQ19HRVRfRkFNSUxZKHR5cGUpKTsKKyAgICAgICAgfSBlbHNlIGlmIChQU0FfS0VZX1RZUEVfSVNfREhfS0VZX1BBSVIodHlwZSkpIHsKKyAgICAgICAgICAgIGFwcGVuZF93aXRoX2dyb3VwKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQU0FfS0VZX1RZUEVfREhfS0VZX1BBSVIiLCAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9LRVlfVFlQRV9ESF9HRVRfRkFNSUxZKHR5cGUpKTsKKyAgICAgICAgfSBlbHNlIGlmIChQU0FfS0VZX1RZUEVfSVNfREhfUFVCTElDX0tFWSh0eXBlKSkgeworICAgICAgICAgICAgYXBwZW5kX3dpdGhfZ3JvdXAoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBTQV9LRVlfVFlQRV9ESF9QVUJMSUNfS0VZIiwgMjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfS0VZX1RZUEVfREhfR0VUX0ZBTUlMWSh0eXBlKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gc25wcmludGYoYnVmZmVyLCBidWZmZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMHglMDR4IiwgKHVuc2lnbmVkKSB0eXBlKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgYnVmZmVyWzBdID0gMDsKKyAgICByZXR1cm4gKGludCkgcmVxdWlyZWRfc2l6ZTsKK30KKworI2RlZmluZSBOT19MRU5HVEhfTU9ESUZJRVIgMHhmZmZmZmZmZmx1CitzdGF0aWMgaW50IHBzYV9zbnByaW50X2FsZ29yaXRobShjaGFyICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcpCit7CisgICAgc2l6ZV90IHJlcXVpcmVkX3NpemUgPSAwOworICAgIHBzYV9hbGdvcml0aG1fdCBjb3JlX2FsZyA9IGFsZzsKKyAgICB1bnNpZ25lZCBsb25nIGxlbmd0aF9tb2RpZmllciA9IE5PX0xFTkdUSF9NT0RJRklFUjsKKyAgICBpZiAoUFNBX0FMR19JU19NQUMoYWxnKSkgeworICAgICAgICBjb3JlX2FsZyA9IFBTQV9BTEdfVFJVTkNBVEVEX01BQyhhbGcsIDApOworICAgICAgICBpZiAoY29yZV9hbGcgIT0gYWxnKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICJQU0FfQUxHX1RSVU5DQVRFRF9NQUMoIiwgMjIpOworICAgICAgICAgICAgbGVuZ3RoX21vZGlmaWVyID0gUFNBX01BQ19UUlVOQ0FURURfTEVOR1RIKGFsZyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKFBTQV9BTEdfSVNfQUVBRChhbGcpKSB7CisgICAgICAgIGNvcmVfYWxnID0gUFNBX0FMR19BRUFEX1dJVEhfREVGQVVMVF9UQUdfTEVOR1RIKGFsZyk7CisgICAgICAgIGlmIChjb3JlX2FsZyA9PSAwKSB7CisgICAgICAgICAgICAvKiBGb3IgdW5rbm93biBBRUFEIGFsZ29yaXRobXMsIHRoZXJlIGlzIG5vICJkZWZhdWx0IHRhZyBsZW5ndGgiLiAqLworICAgICAgICAgICAgY29yZV9hbGcgPSBhbGc7CisgICAgICAgIH0gZWxzZSBpZiAoY29yZV9hbGcgIT0gYWxnKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICJQU0FfQUxHX0FFQURfV0lUSF9UQUdfTEVOR1RIKCIsIDI5KTsKKyAgICAgICAgICAgIGxlbmd0aF9tb2RpZmllciA9IFBTQV9BRUFEX1RBR19MRU5HVEgoYWxnKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoUFNBX0FMR19JU19LRVlfQUdSRUVNRU5UKGFsZykgJiYKKyAgICAgICAgICAgICAgICFQU0FfQUxHX0lTX1JBV19LRVlfQUdSRUVNRU5UKGFsZykpIHsKKyAgICAgICAgY29yZV9hbGcgPSBQU0FfQUxHX0tFWV9BR1JFRU1FTlRfR0VUX0tERihhbGcpOworICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgIlBTQV9BTEdfS0VZX0FHUkVFTUVOVCgiLCAyMik7CisgICAgICAgIGFwcGVuZF93aXRoX2FsZygmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2FfYWxnb3JpdGhtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBQU0FfQUxHX0tFWV9BR1JFRU1FTlRfR0VUX0JBU0UoYWxnKSk7CisgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIsICIsIDIpOworICAgIH0KKyAgICBzd2l0Y2ggKGNvcmVfYWxnKSB7CisgICAgY2FzZSBQU0FfQUxHX0FOWV9IQVNIOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19BTllfSEFTSCIsIDE2KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0FSQzQ6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0FSQzQiLCAxMik7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19DQVRFR09SWV9BRUFEOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19DQVRFR09SWV9BRUFEIiwgMjEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19DQVRFR09SWV9BU1lNTUVUUklDX0VOQ1JZUFRJT04iLCAzOCk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19DQVRFR09SWV9DSVBIRVI6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0NBVEVHT1JZX0NJUEhFUiIsIDIzKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0NBVEVHT1JZX0hBU0g6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0NBVEVHT1JZX0hBU0giLCAyMSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19DQVRFR09SWV9LRVlfQUdSRUVNRU5UOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19DQVRFR09SWV9LRVlfQUdSRUVNRU5UIiwgMzApOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfQ0FURUdPUllfS0VZX0RFUklWQVRJT046IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0NBVEVHT1JZX0tFWV9ERVJJVkFUSU9OIiwgMzEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfQ0FURUdPUllfTUFDOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19DQVRFR09SWV9NQUMiLCAyMCk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19DQVRFR09SWV9TSUdOOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19DQVRFR09SWV9TSUdOIiwgMjEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfQ0JDX01BQzogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQ0JDX01BQyIsIDE1KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0NCQ19OT19QQURESU5HOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19DQkNfTk9fUEFERElORyIsIDIyKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0NCQ19QS0NTNzogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQ0JDX1BLQ1M3IiwgMTcpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfQ0NNOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19DQ00iLCAxMSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19DRkI6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0NGQiIsIDExKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0NIQUNIQTIwOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19DSEFDSEEyMCIsIDE2KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0NIQUNIQTIwX1BPTFkxMzA1OiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19DSEFDSEEyMF9QT0xZMTMwNSIsIDI1KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0NJUEhFUl9NQUNfQkFTRTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQ0lQSEVSX01BQ19CQVNFIiwgMjMpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfQ01BQzogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQ01BQyIsIDEyKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0NUUjogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQ1RSIiwgMTEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfREVURVJNSU5JU1RJQ19EU0FfQkFTRTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfREVURVJNSU5JU1RJQ19EU0FfQkFTRSIsIDMwKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0FfQkFTRTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQV9CQVNFIiwgMzIpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfRFNBX0JBU0U6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0RTQV9CQVNFIiwgMTYpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfRUNCX05PX1BBRERJTkc6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0VDQl9OT19QQURESU5HIiwgMjIpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfRUNESDogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfRUNESCIsIDEyKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0VDRFNBX0FOWTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfRUNEU0FfQU5ZIiwgMTcpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfRkZESDogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfRkZESCIsIDEyKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0dDTTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfR0NNIiwgMTEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfSEtERl9CQVNFOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19IS0RGX0JBU0UiLCAxNyk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19ITUFDX0JBU0U6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0hNQUNfQkFTRSIsIDE3KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX01EMjogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfTUQyIiwgMTEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfTUQ0OiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19NRDQiLCAxMSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19NRDU6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX01ENSIsIDExKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX09GQjogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfT0ZCIiwgMTEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfUklQRU1EMTYwOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19SSVBFTUQxNjAiLCAxNyk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19SU0FfT0FFUF9CQVNFOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19SU0FfT0FFUF9CQVNFIiwgMjEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X0NSWVBUOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQiLCAyNik7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVc6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOX1JBVyIsIDI5KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1JTQV9QU1NfQkFTRTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfUlNBX1BTU19CQVNFIiwgMjApOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfU0hBM18yMjQ6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX1NIQTNfMjI0IiwgMTYpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfU0hBM18yNTY6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX1NIQTNfMjU2IiwgMTYpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfU0hBM18zODQ6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX1NIQTNfMzg0IiwgMTYpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfU0hBM181MTI6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX1NIQTNfNTEyIiwgMTYpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfU0hBXzE6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX1NIQV8xIiwgMTMpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfU0hBXzIyNDogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfU0hBXzIyNCIsIDE1KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1NIQV8yNTY6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX1NIQV8yNTYiLCAxNSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19TSEFfMzg0OiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19TSEFfMzg0IiwgMTUpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfU0hBXzUxMjogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfU0hBXzUxMiIsIDE1KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1NIQV81MTJfMjI0OiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19TSEFfNTEyXzIyNCIsIDE5KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1NIQV81MTJfMjU2OiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19TSEFfNTEyXzI1NiIsIDE5KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1RMUzEyX1BSRl9CQVNFOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19UTFMxMl9QUkZfQkFTRSIsIDIyKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1RMUzEyX1BTS19UT19NU19CQVNFOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19UTFMxMl9QU0tfVE9fTVNfQkFTRSIsIDI4KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1hUUzogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfWFRTIiwgMTEpOyBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoUFNBX0FMR19JU19ERVRFUk1JTklTVElDX0RTQShjb3JlX2FsZykpIHsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgIlBTQV9BTEdfREVURVJNSU5JU1RJQ19EU0EoIiwgMjUgKyAxKTsKKyAgICAgICAgICAgIGFwcGVuZF93aXRoX2FsZygmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2hhc2hfYWxnb3JpdGhtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0FMR19HRVRfSEFTSChjb3JlX2FsZykpOworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIikiLCAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChQU0FfQUxHX0lTX0RFVEVSTUlOSVNUSUNfRUNEU0EoY29yZV9hbGcpKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICJQU0FfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EoIiwgMjcgKyAxKTsKKyAgICAgICAgICAgIGFwcGVuZF93aXRoX2FsZygmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2hhc2hfYWxnb3JpdGhtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0FMR19HRVRfSEFTSChjb3JlX2FsZykpOworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIikiLCAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChQU0FfQUxHX0lTX1JBTkRPTUlaRURfRFNBKGNvcmVfYWxnKSkgeworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAiUFNBX0FMR19EU0EoIiwgMTEgKyAxKTsKKyAgICAgICAgICAgIGFwcGVuZF93aXRoX2FsZygmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2hhc2hfYWxnb3JpdGhtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0FMR19HRVRfSEFTSChjb3JlX2FsZykpOworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIikiLCAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChQU0FfQUxHX0lTX1JBTkRPTUlaRURfRUNEU0EoY29yZV9hbGcpKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICJQU0FfQUxHX0VDRFNBKCIsIDEzICsgMSk7CisgICAgICAgICAgICBhcHBlbmRfd2l0aF9hbGcoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9oYXNoX2FsZ29yaXRobV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9BTEdfR0VUX0hBU0goY29yZV9hbGcpKTsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIpIiwgMSk7CisgICAgICAgIH0gZWxzZSBpZiAoUFNBX0FMR19JU19IS0RGKGNvcmVfYWxnKSkgeworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAiUFNBX0FMR19IS0RGKCIsIDEyICsgMSk7CisgICAgICAgICAgICBhcHBlbmRfd2l0aF9hbGcoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9oYXNoX2FsZ29yaXRobV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9BTEdfR0VUX0hBU0goY29yZV9hbGcpKTsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIpIiwgMSk7CisgICAgICAgIH0gZWxzZSBpZiAoUFNBX0FMR19JU19ITUFDKGNvcmVfYWxnKSkgeworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAiUFNBX0FMR19ITUFDKCIsIDEyICsgMSk7CisgICAgICAgICAgICBhcHBlbmRfd2l0aF9hbGcoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9oYXNoX2FsZ29yaXRobV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9BTEdfR0VUX0hBU0goY29yZV9hbGcpKTsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIpIiwgMSk7CisgICAgICAgIH0gZWxzZSBpZiAoUFNBX0FMR19JU19SU0FfT0FFUChjb3JlX2FsZykpIHsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgIlBTQV9BTEdfUlNBX09BRVAoIiwgMTYgKyAxKTsKKyAgICAgICAgICAgIGFwcGVuZF93aXRoX2FsZygmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2hhc2hfYWxnb3JpdGhtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0FMR19HRVRfSEFTSChjb3JlX2FsZykpOworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIikiLCAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChQU0FfQUxHX0lTX1JTQV9QS0NTMVYxNV9TSUdOKGNvcmVfYWxnKSkgeworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAiUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTigiLCAyNSArIDEpOworICAgICAgICAgICAgYXBwZW5kX3dpdGhfYWxnKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfaGFzaF9hbGdvcml0aG1fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfQUxHX0dFVF9IQVNIKGNvcmVfYWxnKSk7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiKSIsIDEpOworICAgICAgICB9IGVsc2UgaWYgKFBTQV9BTEdfSVNfUlNBX1BTUyhjb3JlX2FsZykpIHsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgIlBTQV9BTEdfUlNBX1BTUygiLCAxNSArIDEpOworICAgICAgICAgICAgYXBwZW5kX3dpdGhfYWxnKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfaGFzaF9hbGdvcml0aG1fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfQUxHX0dFVF9IQVNIKGNvcmVfYWxnKSk7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiKSIsIDEpOworICAgICAgICB9IGVsc2UgaWYgKFBTQV9BTEdfSVNfVExTMTJfUFJGKGNvcmVfYWxnKSkgeworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAiUFNBX0FMR19UTFMxMl9QUkYoIiwgMTcgKyAxKTsKKyAgICAgICAgICAgIGFwcGVuZF93aXRoX2FsZygmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2hhc2hfYWxnb3JpdGhtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0FMR19HRVRfSEFTSChjb3JlX2FsZykpOworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIikiLCAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChQU0FfQUxHX0lTX1RMUzEyX1BTS19UT19NUyhjb3JlX2FsZykpIHsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgIlBTQV9BTEdfVExTMTJfUFNLX1RPX01TKCIsIDIzICsgMSk7CisgICAgICAgICAgICBhcHBlbmRfd2l0aF9hbGcoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9oYXNoX2FsZ29yaXRobV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9BTEdfR0VUX0hBU0goY29yZV9hbGcpKTsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIpIiwgMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhcHBlbmRfaW50ZWdlcigmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiMHglMDhseCIsICh1bnNpZ25lZCBsb25nKSBjb3JlX2FsZyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChjb3JlX2FsZyAhPSBhbGcpIHsKKyAgICAgICAgaWYgKGxlbmd0aF9tb2RpZmllciAhPSBOT19MRU5HVEhfTU9ESUZJRVIpIHsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIsICIsIDIpOworICAgICAgICAgICAgYXBwZW5kX2ludGVnZXIoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVsdSIsIGxlbmd0aF9tb2RpZmllcik7CisgICAgICAgIH0KKyAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIikiLCAxKTsKKyAgICB9CisgICAgYnVmZmVyWzBdID0gMDsKKyAgICByZXR1cm4gKGludCkgcmVxdWlyZWRfc2l6ZTsKK30KKworc3RhdGljIGludCBwc2Ffc25wcmludF9rZXlfdXNhZ2UoY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3VzYWdlX3QgdXNhZ2UpCit7CisgICAgc2l6ZV90IHJlcXVpcmVkX3NpemUgPSAwOworICAgIGlmICh1c2FnZSA9PSAwKSB7CisgICAgICAgIGlmIChidWZmZXJfc2l6ZSA+IDEpIHsKKyAgICAgICAgICAgIGJ1ZmZlclswXSA9ICcwJzsKKyAgICAgICAgICAgIGJ1ZmZlclsxXSA9IDA7CisgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyX3NpemUgPT0gMSkgeworICAgICAgICAgICAgYnVmZmVyWzBdID0gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYgKHVzYWdlICYgUFNBX0tFWV9VU0FHRV9DT1BZKSB7CisgICAgICAgIGlmIChyZXF1aXJlZF9zaXplICE9IDApIHsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIgfCAiLCAzKTsKKyAgICAgICAgfQorICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9VU0FHRV9DT1BZIiwgMTgpOworICAgICAgICB1c2FnZSBePSBQU0FfS0VZX1VTQUdFX0NPUFk7CisgICAgfQorICAgIGlmICh1c2FnZSAmIFBTQV9LRVlfVVNBR0VfREVDUllQVCkgeworICAgICAgICBpZiAocmVxdWlyZWRfc2l6ZSAhPSAwKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiIHwgIiwgMyk7CisgICAgICAgIH0KKyAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVVNBR0VfREVDUllQVCIsIDIxKTsKKyAgICAgICAgdXNhZ2UgXj0gUFNBX0tFWV9VU0FHRV9ERUNSWVBUOworICAgIH0KKyAgICBpZiAodXNhZ2UgJiBQU0FfS0VZX1VTQUdFX0RFUklWRSkgeworICAgICAgICBpZiAocmVxdWlyZWRfc2l6ZSAhPSAwKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiIHwgIiwgMyk7CisgICAgICAgIH0KKyAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVVNBR0VfREVSSVZFIiwgMjApOworICAgICAgICB1c2FnZSBePSBQU0FfS0VZX1VTQUdFX0RFUklWRTsKKyAgICB9CisgICAgaWYgKHVzYWdlICYgUFNBX0tFWV9VU0FHRV9FTkNSWVBUKSB7CisgICAgICAgIGlmIChyZXF1aXJlZF9zaXplICE9IDApIHsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIgfCAiLCAzKTsKKyAgICAgICAgfQorICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9VU0FHRV9FTkNSWVBUIiwgMjEpOworICAgICAgICB1c2FnZSBePSBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQ7CisgICAgfQorICAgIGlmICh1c2FnZSAmIFBTQV9LRVlfVVNBR0VfRVhQT1JUKSB7CisgICAgICAgIGlmIChyZXF1aXJlZF9zaXplICE9IDApIHsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIgfCAiLCAzKTsKKyAgICAgICAgfQorICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9VU0FHRV9FWFBPUlQiLCAyMCk7CisgICAgICAgIHVzYWdlIF49IFBTQV9LRVlfVVNBR0VfRVhQT1JUOworICAgIH0KKyAgICBpZiAodXNhZ2UgJiBQU0FfS0VZX1VTQUdFX1NJR05fSEFTSCkgeworICAgICAgICBpZiAocmVxdWlyZWRfc2l6ZSAhPSAwKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiIHwgIiwgMyk7CisgICAgICAgIH0KKyAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIIiwgMjMpOworICAgICAgICB1c2FnZSBePSBQU0FfS0VZX1VTQUdFX1NJR05fSEFTSDsKKyAgICB9CisgICAgaWYgKHVzYWdlICYgUFNBX0tFWV9VU0FHRV9WRVJJRllfSEFTSCkgeworICAgICAgICBpZiAocmVxdWlyZWRfc2l6ZSAhPSAwKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiIHwgIiwgMyk7CisgICAgICAgIH0KKyAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVVNBR0VfVkVSSUZZX0hBU0giLCAyNSk7CisgICAgICAgIHVzYWdlIF49IFBTQV9LRVlfVVNBR0VfVkVSSUZZX0hBU0g7CisgICAgfQorICAgIGlmICh1c2FnZSAhPSAwKSB7CisgICAgICAgIGlmIChyZXF1aXJlZF9zaXplICE9IDApIHsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIgfCAiLCAzKTsKKyAgICAgICAgfQorICAgICAgICBhcHBlbmRfaW50ZWdlcigmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICIweCUwOGx4IiwgKHVuc2lnbmVkIGxvbmcpIHVzYWdlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZmZXJbMF0gPSAwOworICAgIH0KKyAgICByZXR1cm4gKGludCkgcmVxdWlyZWRfc2l6ZTsKK30KKworLyogRW5kIG9mIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGUuICovCmRpZmYgLS1naXQgYS9wcm9ncmFtcy9yYW5kb20vQ01ha2VMaXN0cy50eHQgYi9wcm9ncmFtcy9yYW5kb20vQ01ha2VMaXN0cy50eHQKaW5kZXggOTVhY2I3ZS4uOGRmODM2NSAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvcmFuZG9tL0NNYWtlTGlzdHMudHh0CisrKyBiL3Byb2dyYW1zL3JhbmRvbS9DTWFrZUxpc3RzLnR4dApAQCAtNiw3ICs2LDcgQEAKIAogZm9yZWFjaChleGUgSU4gTElTVFMgZXhlY3V0YWJsZXMpCiAgICAgYWRkX2V4ZWN1dGFibGUoJHtleGV9ICR7ZXhlfS5jICQ8VEFSR0VUX09CSkVDVFM6bWJlZHRsc190ZXN0PikKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtleGV9IG1iZWRjcnlwdG8pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7ZXhlfSAke21iZWRjcnlwdG9fdGFyZ2V0fSkKIGVuZGZvcmVhY2goKQogCiBpbnN0YWxsKFRBUkdFVFMgJHtleGVjdXRhYmxlc30KZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3NzbC9DTWFrZUxpc3RzLnR4dCBiL3Byb2dyYW1zL3NzbC9DTWFrZUxpc3RzLnR4dAppbmRleCAyOGZiZmM1Li4xNDlhYTMwIDEwMDY0NAotLS0gYS9wcm9ncmFtcy9zc2wvQ01ha2VMaXN0cy50eHQKKysrIGIvcHJvZ3JhbXMvc3NsL0NNYWtlTGlzdHMudHh0CkBAIC0yLDcgKzIsNyBAQAogZmluZF9wYWNrYWdlKFRocmVhZHMpCiAKIHNldChsaWJzCi0gICAgbWJlZHRscworICAgICR7bWJlZHRsc190YXJnZXR9CiApCiAKIGlmKFVTRV9QS0NTMTFfSEVMUEVSX0xJQlJBUlkpCkBAIC0zMiw4ICszMiw4IEBACiAgICAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtleGV9IFBSSVZBVEUgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4uLy4uL3Rlc3RzL2luY2x1ZGUpCiBlbmRmb3JlYWNoKCkKIAotdGFyZ2V0X3NvdXJjZXMoc3NsX2NsaWVudDIgUFVCTElDICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi90ZXN0L3F1ZXJ5X2NvbmZpZy5jKQotdGFyZ2V0X3NvdXJjZXMoc3NsX3NlcnZlcjIgUFVCTElDICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi90ZXN0L3F1ZXJ5X2NvbmZpZy5jKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBzc2xfY2xpZW50MiBBUFBFTkQgUFJPUEVSVFkgU09VUkNFUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vdGVzdC9xdWVyeV9jb25maWcuYykKK3NldF9wcm9wZXJ0eShUQVJHRVQgc3NsX3NlcnZlcjIgQVBQRU5EIFBST1BFUlRZIFNPVVJDRVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4uL3Rlc3QvcXVlcnlfY29uZmlnLmMpCiAKIGlmKFRIUkVBRFNfRk9VTkQpCiAgICAgYWRkX2V4ZWN1dGFibGUoc3NsX3B0aHJlYWRfc2VydmVyIHNzbF9wdGhyZWFkX3NlcnZlci5jICQ8VEFSR0VUX09CSkVDVFM6bWJlZHRsc190ZXN0PikKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3NzbC9zc2xfY2xpZW50Mi5jIGIvcHJvZ3JhbXMvc3NsL3NzbF9jbGllbnQyLmMKaW5kZXggYTI2ZGQ1MS4uZmM2OTA2MSAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvc3NsL3NzbF9jbGllbnQyLmMKKysrIGIvcHJvZ3JhbXMvc3NsL3NzbF9jbGllbnQyLmMKQEAgLTQyLDEyICs0MiwxNCBAQAogCiAjaWYgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8IFwKICAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9UTFNfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpIHx8IFwKLSAgICAhZGVmaW5lZChNQkVEVExTX05FVF9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCisgICAgIWRlZmluZWQoTUJFRFRMU19ORVRfQykgfHwgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIpCiBpbnQgbWFpbiggdm9pZCApCiB7Ci0gICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciAiCisgICAgbWJlZHRsc19wcmludGYoICJNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgIgogICAgICAgICAgICAiTUJFRFRMU19TU0xfVExTX0MgYW5kL29yIE1CRURUTFNfU1NMX0NMSV9DIGFuZC9vciAiCi0gICAgICAgICAgICJNQkVEVExTX05FVF9DIGFuZC9vciBNQkVEVExTX0NUUl9EUkJHX0MgYW5kL29yIG5vdCBkZWZpbmVkLlxuIik7CisgICAgICAgICAgICJNQkVEVExTX05FVF9DIGFuZC9vciBNQkVEVExTX0NUUl9EUkJHX0MgYW5kL29yIG5vdCBkZWZpbmVkICIKKyAgICAgICAgICAgIiBhbmQvb3IgTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSIGRlZmluZWQuXG4iICk7CiAgICAgbWJlZHRsc19leGl0KCAwICk7CiB9CiAjZWxzZQpAQCAtMTQ5LDYgKzE1MSwxMCBAQAogI2RlZmluZSBERkxfTlNTX0tFWUxPRyAgICAgICAgICAwCiAjZGVmaW5lIERGTF9OU1NfS0VZTE9HX0ZJTEUgICAgIE5VTEwKICNkZWZpbmUgREZMX1NLSVBfQ0xPU0VfTk9USUZZICAgMAorI2RlZmluZSBERkxfUVVFUllfQ09ORklHX01PREUgICAwCisjZGVmaW5lIERGTF9VU0VfU1JUUCAgICAgICAgICAgIDAKKyNkZWZpbmUgREZMX1NSVFBfRk9SQ0VfUFJPRklMRSAgMAorI2RlZmluZSBERkxfU1JUUF9NS0kgICAgICAgICAgICAiIgogCiAjZGVmaW5lIEdFVF9SRVFVRVNUICJHRVQgJXMgSFRUUC8xLjBcclxuRXh0cmEtaGVhZGVyOiAiCiAjZGVmaW5lIEdFVF9SRVFVRVNUX0VORCAiXHJcblxyXG4iCkBAIC0yNTMsMTAgKzI1OSwyNiBAQAogICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY2Fubm90IGJlIHVzZWQgd2l0aCBlYXBfdGxzPTFcbiIKICNkZWZpbmUgVVNBR0VfTlNTX0tFWUxPR19GSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAiICAgIG5zc19rZXlsb2dfZmlsZT0lJXNcbiIKLSNlbHNlCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApCisjZGVmaW5lIFVTQUdFX1NSVFAgXAorICAgICIgICAgdXNlX3NydHA9JSVkICAgICAgICAgZGVmYXVsdDogMCAoZGlzYWJsZWQpXG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNhbm5vdCBiZSB1c2VkIHdpdGggZWFwX3Rscz0xIG9yICJcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNzX2tleWxvZz0xXG4iICAgICAgICAgICAgIFwKKyAgICAiICAgIHNydHBfZm9yY2VfcHJvZmlsZT0lJWQgIGRlZmF1bHQ6IDAgKGFsbCBlbmFibGVkKVxuIiAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIHByb2ZpbGVzOlxuIiAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBTUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODBcbiIgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgMiAtIFNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMlxuIiAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAzIC0gU1JUUF9OVUxMX0hNQUNfU0hBMV84MFxuIiAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIDQgLSBTUlRQX05VTExfSE1BQ19TSEExXzMyXG4iICAgICAgIFwKKyAgICAiICAgIG1raT0lJXMgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIgKGluIGhleCwgd2l0aG91dCAweClcbiIKKyNlbHNlIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLworI2RlZmluZSBVU0FHRV9TUlRQICIiCisjZW5kaWYKKyNlbHNlIC8qIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTICovCiAjZGVmaW5lIFVTQUdFX0VBUF9UTFMgIiIKICNkZWZpbmUgVVNBR0VfTlNTX0tFWUxPRyAiIgogI2RlZmluZSBVU0FHRV9OU1NfS0VZTE9HX0ZJTEUgIiIKKyNkZWZpbmUgVVNBR0VfU1JUUCAiIgogI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTICovCiAKICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQpAQCAtNDA2LDYgKzQyOCw3IEBACiAgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVVNBR0VfRFRMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVVNBR0VfQ0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfU1JUUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIlxuIgogI2RlZmluZSBVU0FHRTIgXAogICAgICIgICAgYXV0aF9tb2RlPSUlcyAgICAgICAgZGVmYXVsdDogKGxpYnJhcnkgZGVmYXVsdDogbm9uZSlcbiIgXApAQCAtNTM5LDYgKzU2MiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhZnRlciByZW5lZ290aWF0aW9uICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgaW50IHJlcHJvZHVjaWJsZTsgICAgICAgICAgIC8qIG1ha2UgY29tbXVuaWNhdGlvbiByZXByb2R1Y2libGUgICAgICAgICAgKi8KICAgICBpbnQgc2tpcF9jbG9zZV9ub3RpZnk7ICAgICAgLyogc2tpcCBzZW5kaW5nIHRoZSBjbG9zZV9ub3RpZnkgYWxlcnQgICAgICAqLworICAgIGludCBxdWVyeV9jb25maWdfbW9kZTsgICAgICAvKiB3aGV0aGVyIHRvIHJlYWQgY29uZmlnICAgICAgICAgICAgICAgICAgICovCisgICAgaW50IHVzZV9zcnRwOyAgICAgICAgICAgICAgIC8qIFN1cHBvcnQgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgZm9yY2Vfc3J0cF9wcm9maWxlOyAgICAgLyogU1JUUCBwcm90ZWN0aW9uIHByb2ZpbGUgdG8gdXNlIG9yIGFsbCAgICAqLworICAgIGNvbnN0IGNoYXIgKm1raTsgICAgICAgICAgICAvKiBUaGUgZHRscyBta2kgdmFsdWUgdG8gdXNlICAgICAgICAgICAgICAgICovCiB9IG9wdDsKIAogaW50IHF1ZXJ5X2NvbmZpZyggY29uc3QgY2hhciAqY29uZmlnICk7CkBAIC02NTMsNyArNjgwLDQ5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIG5zc19rZXlsb2dfbGluZSApICk7CiAgICAgcmV0dXJuKCByZXQgKTsKIH0KLSNlbmRpZgorCisjaWYgZGVmaW5lZCggTUJFRFRMU19TU0xfRFRMU19TUlRQICkKKy8qIFN1cHBvcnRlZCBTUlRQIG1vZGUgbmVlZHMgYSBtYXhpbXVtIG9mIDoKKyAqIC0gMTYgYnl0ZXMgZm9yIGtleSAoQUVTLTEyOCkKKyAqIC0gMTQgYnl0ZXMgU0FMVAorICogT25lIGZvciBzZW5kZXIsIG9uZSBmb3IgcmVjZWl2ZXIgY29udGV4dAorICovCisjZGVmaW5lIE1CRURUTFNfVExTX1NSVFBfTUFYX0tFWV9NQVRFUklBTF9MRU5HVEggICAgNjAKK3R5cGVkZWYgc3RydWN0IGR0bHNfc3J0cF9rZXlzCit7CisgICAgdW5zaWduZWQgY2hhciBtYXN0ZXJfc2VjcmV0WzQ4XTsKKyAgICB1bnNpZ25lZCBjaGFyIHJhbmRieXRlc1s2NF07CisgICAgbWJlZHRsc190bHNfcHJmX3R5cGVzIHRsc19wcmZfdHlwZTsKK30gZHRsc19zcnRwX2tleXM7CisKK3N0YXRpYyBpbnQgZHRsc19zcnRwX2tleV9kZXJpdmF0aW9uKCB2b2lkICpwX2V4cGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWFjbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGl2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2xpZW50X3JhbmRvbVszMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzZXJ2ZXJfcmFuZG9tWzMyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rsc19wcmZfdHlwZXMgdGxzX3ByZl90eXBlICkKK3sKKyAgICBkdGxzX3NydHBfa2V5cyAqa2V5cyA9IChkdGxzX3NydHBfa2V5cyAqKXBfZXhwa2V5OworCisgICAgKCAoIHZvaWQgKSBrYiApOworICAgIG1lbWNweSgga2V5cy0+bWFzdGVyX3NlY3JldCwgbXMsIHNpemVvZigga2V5cy0+bWFzdGVyX3NlY3JldCApICk7CisgICAgbWVtY3B5KCBrZXlzLT5yYW5kYnl0ZXMsIGNsaWVudF9yYW5kb20sIDMyICk7CisgICAgbWVtY3B5KCBrZXlzLT5yYW5kYnl0ZXMgKyAzMiwgc2VydmVyX3JhbmRvbSwgMzIgKTsKKyAgICBrZXlzLT50bHNfcHJmX3R5cGUgPSB0bHNfcHJmX3R5cGU7CisKKyAgICBpZiggb3B0LmRlYnVnX2xldmVsID4gMiApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggImV4cG9ydGVkIG1hY2xlbiBpcyAldVxuIiwgKHVuc2lnbmVkKSBtYWNsZW4gKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJleHBvcnRlZCBrZXlsZW4gaXMgJXVcbiIsICh1bnNpZ25lZCkga2V5bGVuICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZXhwb3J0ZWQgaXZsZW4gaXMgJXVcbiIsICh1bnNpZ25lZCkgaXZsZW4gKTsKKyAgICB9CisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMgKi8KIAogc3RhdGljIHZvaWQgbXlfZGVidWcoIHZvaWQgKmN0eCwgaW50IGxldmVsLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLApAQCAtMTEwMiw2ICsxMTcxLDcgQEAKIGludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKIHsKICAgICBpbnQgcmV0ID0gMCwgbGVuLCB0YWlsX2xlbiwgaSwgd3JpdHRlbiwgZnJhZ3MsIHJldHJ5X2xlZnQ7CisgICAgaW50IHF1ZXJ5X2NvbmZpZ19yZXQgPSAwOwogICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgc2VydmVyX2ZkOwogICAgIGlvX2N0eF90IGlvX2N0eDsKIApAQCAtMTEzMSwxMSArMTIwMSwxNSBAQAogICAgIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGN1cnZlX2xpc3RbQ1VSVkVfTElTVF9TSVpFXTsKICAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICpjdXJ2ZV9jdXI7CiAjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKKyAgICB1bnNpZ25lZCBjaGFyIG1raVtNQkVEVExTX1RMU19TUlRQX01BWF9NS0lfTEVOR1RIXTsKKyAgICBzaXplX3QgbWtpX2xlbj0wOworI2VuZGlmCiAKICAgICBjb25zdCBjaGFyICpwZXJzID0gInNzbF9jbGllbnQyIjsKIAogI2lmIGRlZmluZWQoTUJFRFRMU19VU0VfUFNBX0NSWVBUTykKLSAgICBwc2Ffa2V5X2hhbmRsZV90IHNsb3QgPSAwOworICAgIHBzYV9rZXlfaWRfdCBzbG90ID0gMDsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gMDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBrZXlfYXR0cmlidXRlczsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwpAQCAtMTE2MCw3ICsxMjM0LDcgQEAKICAgICBtYmVkdGxzX3g1MDlfY3J0IGNsaWNlcnQ7CiAgICAgbWJlZHRsc19wa19jb250ZXh0IHBrZXk7CiAjaWYgZGVmaW5lZChNQkVEVExTX1VTRV9QU0FfQ1JZUFRPKQotICAgIHBzYV9rZXlfaGFuZGxlX3Qga2V5X3Nsb3QgPSAwOyAvKiBpbnZhbGlkIGtleSBzbG90ICovCisgICAgcHNhX2tleV9pZF90IGtleV9zbG90ID0gMDsgLyogaW52YWxpZCBrZXkgc2xvdCAqLwogI2VuZGlmCiAjZW5kaWYKICAgICBjaGFyICpwLCAqcTsKQEAgLTExNzQsNyArMTI0OCwyMCBAQAogICAgIHVuc2lnbmVkIGNoYXIgZWFwX3Rsc19pdls4XTsKICAgICBjb25zdCBjaGFyKiBlYXBfdGxzX2xhYmVsID0gImNsaWVudCBFQVAgZW5jcnlwdGlvbiI7CiAgICAgZWFwX3Rsc19rZXlzIGVhcF90bHNfa2V5aW5nOwotI2VuZGlmCisjaWYgZGVmaW5lZCggTUJFRFRMU19TU0xfRFRMU19TUlRQICkKKyAgICAvKiEgbWFzdGVyIGtleXMgYW5kIG1hc3RlciBzYWx0IGZvciBTUlRQIGdlbmVyYXRlZCBkdXJpbmcgaGFuZHNoYWtlICovCisgICAgdW5zaWduZWQgY2hhciBkdGxzX3NydHBfa2V5X21hdGVyaWFsW01CRURUTFNfVExTX1NSVFBfTUFYX0tFWV9NQVRFUklBTF9MRU5HVEhdOworICAgIGNvbnN0IGNoYXIqIGR0bHNfc3J0cF9sYWJlbCA9ICJFWFRSQUNUT1ItZHRsc19zcnRwIjsKKyAgICBkdGxzX3NydHBfa2V5cyBkdGxzX3NydHBfa2V5aW5nOworICAgIGNvbnN0IG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSBkZWZhdWx0X3Byb2ZpbGVzW10gPSB7CisgICAgICAgIE1CRURUTFNfVExTX1NSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV84MCwKKyAgICAgICAgTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyLAorICAgICAgICBNQkVEVExTX1RMU19TUlRQX05VTExfSE1BQ19TSEExXzgwLAorICAgICAgICBNQkVEVExTX1RMU19TUlRQX05VTExfSE1BQ19TSEExXzMyLAorICAgICAgICBNQkVEVExTX1RMU19TUlRQX1VOU0VUCisgICAgfTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FWFBPUlRfS0VZUyAqLwogCiAjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKICAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCggYWxsb2NfYnVmLCBzaXplb2YoYWxsb2NfYnVmKSApOwpAQCAtMTMwMCw2ICsxMzg3LDEwIEBACiAgICAgb3B0Lm5zc19rZXlsb2cgICAgICAgICAgPSBERkxfTlNTX0tFWUxPRzsKICAgICBvcHQubnNzX2tleWxvZ19maWxlICAgICA9IERGTF9OU1NfS0VZTE9HX0ZJTEU7CiAgICAgb3B0LnNraXBfY2xvc2Vfbm90aWZ5ICAgPSBERkxfU0tJUF9DTE9TRV9OT1RJRlk7CisgICAgb3B0LnF1ZXJ5X2NvbmZpZ19tb2RlICAgPSBERkxfUVVFUllfQ09ORklHX01PREU7CisgICAgb3B0LnVzZV9zcnRwICAgICAgICAgICAgPSBERkxfVVNFX1NSVFA7CisgICAgb3B0LmZvcmNlX3NydHBfcHJvZmlsZSAgPSBERkxfU1JUUF9GT1JDRV9QUk9GSUxFOworICAgIG9wdC5ta2kgICAgICAgICAgICAgICAgID0gREZMX1NSVFBfTUtJOwogCiAgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCiAgICAgewpAQCAtMTY4Niw3ICsxNzc3LDkgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJxdWVyeV9jb25maWciICkgPT0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1iZWR0bHNfZXhpdCggcXVlcnlfY29uZmlnKCBxICkgKTsKKyAgICAgICAgICAgIG9wdC5xdWVyeV9jb25maWdfbW9kZSA9IDE7CisgICAgICAgICAgICBxdWVyeV9jb25maWdfcmV0ID0gcXVlcnlfY29uZmlnKCBxICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic2VyaWFsaXplIikgPT0gMCApCiAgICAgICAgIHsKQEAgLTE3MjQsNiArMTgxNywxOCBAQAogICAgICAgICAgICAgaWYoIG9wdC5za2lwX2Nsb3NlX25vdGlmeSA8IDAgfHwgb3B0LnNraXBfY2xvc2Vfbm90aWZ5ID4gMSApCiAgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJ1c2Vfc3J0cCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnVzZV9zcnRwID0gYXRvaSAoIHEgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJzcnRwX2ZvcmNlX3Byb2ZpbGUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5mb3JjZV9zcnRwX3Byb2ZpbGUgPSBhdG9pKCBxICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibWtpIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQubWtpID0gcTsKKyAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBnb3RvIHVzYWdlOwogICAgIH0KQEAgLTE4MzEsNyArMTkzNiw2IEBACiAgICAgICAgICAgICBvcHQuYXJjNCA9IE1CRURUTFNfU1NMX0FSQzRfRU5BQkxFRDsKICAgICAgICAgfQogCi0KICNpZiBkZWZpbmVkKE1CRURUTFNfVVNFX1BTQV9DUllQVE8pCiAgICAgICAgIGlmKCBvcHQucHNrX29wYXF1ZSAhPSAwICkKICAgICAgICAgewpAQCAtMjIzNCw2ICsyMzM4LDM2IEBACiAgICAgfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKKyAgICBpZiggb3B0LnVzZV9zcnRwID09IDEgKQorICAgIHsKKyAgICAgICAgaWYoIG9wdC5mb3JjZV9zcnRwX3Byb2ZpbGUgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSBmb3JjZWRfcHJvZmlsZVtdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG9wdC5mb3JjZV9zcnRwX3Byb2ZpbGUsIE1CRURUTFNfVExTX1NSVFBfVU5TRVQgfTsKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZfZHRsc19zcnRwX3Byb3RlY3Rpb25fcHJvZmlsZXMgKCAmY29uZiwgZm9yY2VkX3Byb2ZpbGUgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZfZHRsc19zcnRwX3Byb3RlY3Rpb25fcHJvZmlsZXMgKCAmY29uZiwgZGVmYXVsdF9wcm9maWxlcyApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYmVkdGxzX3NzbF9jb25mX2R0bHNfc3J0cF9wcm90ZWN0aW9uX3Byb2ZpbGVzIHJldHVybmVkICVkXG5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgIH0KKyAgICBlbHNlIGlmKCBvcHQuZm9yY2Vfc3J0cF9wcm9maWxlICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbXVzdCBlbmFibGUgdXNlX3NydHAgdG8gZm9yY2Ugc3J0cCBwcm9maWxlXG5cbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKwogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMpCiAgICAgaWYoIG9wdC50cnVuY19obWFjICE9IERGTF9UUlVOQ19ITUFDICkKICAgICAgICAgbWJlZHRsc19zc2xfY29uZl90cnVuY2F0ZWRfaG1hYyggJmNvbmYsIG9wdC50cnVuY19obWFjICk7CkBAIC0yMjYxLDcgKzIzOTUsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zc19rZXlsb2dfZXhwb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCApOwogICAgIH0KLSNlbmRpZgorI2lmIGRlZmluZWQoIE1CRURUTFNfU1NMX0RUTFNfU1JUUCApCisgICAgZWxzZSBpZiggb3B0LnVzZV9zcnRwICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9leHBvcnRfa2V5c19leHRfY2IoICZjb25mLCBkdGxzX3NydHBfa2V5X2Rlcml2YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHRsc19zcnRwX2tleWluZyApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FWFBPUlRfS0VZUyAqLwogCiAjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORykKICAgICBpZiggb3B0LnJlY3NwbGl0ICE9IERGTF9SRUNTUExJVCApCkBAIC0yNDcwLDYgKzI2MTEsMjYgQEAKICAgICAgICAgbWJlZHRsc19lY3Bfc2V0X21heF9vcHMoIG9wdC5lY19tYXhfb3BzICk7CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19TUlRQKQorICAgIGlmKCBvcHQudXNlX3NydHAgIT0gMCAmJiBzdHJsZW4oIG9wdC5ta2kgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCBtYmVkdGxzX3Rlc3RfdW5oZXhpZnkoIG1raSwgc2l6ZW9mKCBta2kgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0Lm1raSwmbWtpX2xlbiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIm1raSB2YWx1ZSBub3QgdmFsaWQgaGV4XG4iICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3NzbF9jb25mX3NydHBfbWtpX3ZhbHVlX3N1cHBvcnRlZCggJmNvbmYsIE1CRURUTFNfU1NMX0RUTFNfU1JUUF9NS0lfU1VQUE9SVEVEICk7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2R0bHNfc3J0cF9zZXRfbWtpX3ZhbHVlKCAmc3NsLCBta2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpIHN0cmxlbiggb3B0Lm1raSApIC8gMiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2R0bHNfc3J0cF9zZXRfbWtpX3ZhbHVlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOwogCiAgICAgLyoKQEAgLTI1OTEsNyArMjc1Miw3NCBAQAogICAgICAgICB9CiAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJcbiIpOwogICAgIH0KLSNlbmRpZgorCisjaWYgZGVmaW5lZCggTUJFRFRMU19TU0xfRFRMU19TUlRQICkKKyAgICBlbHNlIGlmKCBvcHQudXNlX3NydHAgIT0gMCAgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGogPSAwOworICAgICAgICBtYmVkdGxzX2R0bHNfc3J0cF9pbmZvIGR0bHNfc3J0cF9uZWdvdGlhdGlvbl9yZXN1bHQ7CisgICAgICAgIG1iZWR0bHNfc3NsX2dldF9kdGxzX3NydHBfbmVnb3RpYXRpb25fcmVzdWx0KCAmc3NsLCAmZHRsc19zcnRwX25lZ290aWF0aW9uX3Jlc3VsdCApOworCisgICAgICAgIGlmKCBkdGxzX3NydHBfbmVnb3RpYXRpb25fcmVzdWx0LmNob3Nlbl9kdGxzX3NydHBfcHJvZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX1RMU19TUlRQX1VOU0VUICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICAgVW5hYmxlIHRvIG5lZ290aWF0ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSB1c2Ugb2YgRFRMUy1TUlRQXG4iICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF90bHNfcHJmKCBkdGxzX3NydHBfa2V5aW5nLnRsc19wcmZfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0bHNfc3J0cF9rZXlpbmcubWFzdGVyX3NlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiggZHRsc19zcnRwX2tleWluZy5tYXN0ZXJfc2VjcmV0ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdGxzX3NydHBfbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdGxzX3NydHBfa2V5aW5nLnJhbmRieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiggZHRsc19zcnRwX2tleWluZy5yYW5kYnl0ZXMgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0bHNfc3J0cF9rZXlfbWF0ZXJpYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIGR0bHNfc3J0cF9rZXlfbWF0ZXJpYWwgKSApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3Rsc19wcmYgcmV0dXJuZWQgLTB4JXhcblxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgLXJldCApOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICAgRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpczoiICk7CisgICAgICAgICAgICBmb3IoIGogPSAwOyBqIDwgc2l6ZW9mKCBkdGxzX3NydHBfa2V5X21hdGVyaWFsICk7IGorKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIGogJSA4ID09IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAgICIgKTsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiUwMnggIiwgZHRsc19zcnRwX2tleV9tYXRlcmlhbFtqXSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworICAgICAgICAgICAgLyogcHJvZHVjZSBhIGxlc3MgcmVhZGFibGUgb3V0cHV0IHVzZWQgdG8gcGVyZm9ybSBhdXRvbWF0aWMgY2hlY2tzCisgICAgICAgICAgICAgKiAtIGNvbXBhcmUgY2xpZW50IGFuZCBzZXJ2ZXIgb3V0cHV0CisgICAgICAgICAgICAgKiAtIGludGVyb3AgdGVzdCB3aXRoIG9wZW5zc2wgd2hpY2ggY2xpZW50IHByb2R1Y2VzIHRoaXMga2luZCBvZiBvdXRwdXQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICAgS2V5aW5nIG1hdGVyaWFsOiAiICk7CisgICAgICAgICAgICBmb3IoIGogPSAwOyBqIDwgc2l6ZW9mKCBkdGxzX3NydHBfa2V5X21hdGVyaWFsICk7IGorKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIlMDJYIiwgZHRsc19zcnRwX2tleV9tYXRlcmlhbFtqXSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworICAgICAgICAgICAgaWYgKCBkdGxzX3NydHBfbmVnb3RpYXRpb25fcmVzdWx0Lm1raV9sZW4gPiAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgICBEVExTLVNSVFAgbWtpIHZhbHVlOiAiICk7CisgICAgICAgICAgICAgICAgZm9yKCBqID0gMDsgaiA8IGR0bHNfc3J0cF9uZWdvdGlhdGlvbl9yZXN1bHQubWtpX2xlbjsgaisrICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJTAyWCIsIGR0bHNfc3J0cF9uZWdvdGlhdGlvbl9yZXN1bHQubWtpX3ZhbHVlW2pdICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAgIERUTFMtU1JUUCBubyBta2kgdmFsdWUgbmVnb3RpYXRlZCIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMgKi8KICAgICBpZiggb3B0LnJlY29ubmVjdCAhPSAwICkKICAgICB7CiAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCIgIC4gU2F2aW5nIHNlc3Npb24gZm9yIHJldXNlLi4uIiApOwpAQCAtMjY4NSw3ICsyOTEzLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfc2V0X2NpZCByZXR1cm5lZCAlZFxuXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCApOwotICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgIH0KICNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0NPTk5FQ1RJT05fSUQgKi8KQEAgLTMzNDgsNyArMzU3Niw4IEBACiAgICAgICAgICAqIGltbWVkaWF0ZWx5IGJlY2F1c2Ugb2YgYmFkIGNtZCBsaW5lIHBhcmFtcywKICAgICAgICAgICogZm9yIGV4YW1wbGUpLiAqLwogICAgICAgICBzdGF0dXMgPSBwc2FfZGVzdHJveV9rZXkoIHNsb3QgKTsKLSAgICAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCisgICAgICAgIGlmKCAoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApICYmCisgICAgICAgICAgICAoIG9wdC5xdWVyeV9jb25maWdfbW9kZSA9PSBERkxfUVVFUllfQ09ORklHX01PREUgKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiRmFpbGVkIHRvIGRlc3Ryb3kga2V5IHNsb3QgJXUgLSBlcnJvciB3YXMgJWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCkgc2xvdCwgKGludCkgc3RhdHVzICk7CkBAIC0zMzY3LDE1ICszNTk2LDIxIEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoX1dJTjMyKQotICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOwotICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyAgICBpZiggb3B0LnF1ZXJ5X2NvbmZpZ19tb2RlID09IERGTF9RVUVSWV9DT05GSUdfTU9ERSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworICAgIH0KICNlbmRpZgogCiAgICAgLy8gU2hlbGwgY2FuIG5vdCBoYW5kbGUgbGFyZ2UgZXhpdCBudW1iZXJzIC0+IDEgZm9yIGVycm9ycwogICAgIGlmKCByZXQgPCAwICkKICAgICAgICAgcmV0ID0gMTsKIAotICAgIG1iZWR0bHNfZXhpdCggcmV0ICk7CisgICAgaWYoIG9wdC5xdWVyeV9jb25maWdfbW9kZSA9PSBERkxfUVVFUllfQ09ORklHX01PREUgKQorICAgICAgICBtYmVkdGxzX2V4aXQoIHJldCApOworICAgIGVsc2UKKyAgICAgICAgbWJlZHRsc19leGl0KCBxdWVyeV9jb25maWdfcmV0ICk7CiB9CiAjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJiBNQkVEVExTX1NTTF9UTFNfQyAmJgogICAgICAgICAgIE1CRURUTFNfU1NMX0NMSV9DICYmIE1CRURUTFNfTkVUX0MgJiYgTUJFRFRMU19SU0FfQyAmJgpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvc3NsL3NzbF9jb250ZXh0X2luZm8uYyBiL3Byb2dyYW1zL3NzbC9zc2xfY29udGV4dF9pbmZvLmMKaW5kZXggZGY4ODE5YS4uYTIwNGQ5ZSAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvc3NsL3NzbF9jb250ZXh0X2luZm8uYworKysgYi9wcm9ncmFtcy9zc2wvc3NsX2NvbnRleHRfaW5mby5jCkBAIC0yNiwxMCArMjYsMTIgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0jaWYgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0VSUk9SX0MpCisjaWYgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0VSUk9SX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9UTFNfQykKIGludCBtYWluKCB2b2lkICkKIHsKLSAgICBwcmludGYoIk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyBhbmQvb3IgTUJFRFRMU19FUlJPUl9DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcHJpbnRmKCJNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgYW5kL29yIE1CRURUTFNfRVJST1JfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19TU0xfVExTX0Mgbm90IGRlZmluZWQuXG4iKTsKICAgICByZXR1cm4oIDAgKTsKIH0KICNlbHNlCkBAIC0zNzcsMTMgKzM3OSwxMyBAQAogICAgIGludCB2YWxpZF9iYWxhbmNlID0gMDsgIC8qIGJhbGFuY2UgYmV0d2VlbiB2YWxpZCBhbmQgaW52YWxpZCBjaGFyYWN0ZXJzICovCiAgICAgc2l6ZV90IGxlbiA9IDA7CiAgICAgY2hhciBwYWQgPSAwOwotICAgIGNoYXIgYyA9IDA7CisgICAgaW50IGMgPSAwOwogCiAgICAgd2hpbGUoIEVPRiAhPSBjICkKICAgICB7CiAgICAgICAgIGNoYXIgY192YWxpZCA9IDA7CiAKLSAgICAgICAgYyA9IChjaGFyKSBmZ2V0YyggYjY0X2ZpbGUgKTsKKyAgICAgICAgYyA9IGZnZXRjKCBiNjRfZmlsZSApOwogCiAgICAgICAgIGlmKCBwYWQgPiAwICkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvc3NsL3NzbF9zZXJ2ZXIyLmMgYi9wcm9ncmFtcy9zc2wvc3NsX3NlcnZlcjIuYwppbmRleCBjNDQ1ZGRiLi5jZWViMjI0IDEwMDY0NAotLS0gYS9wcm9ncmFtcy9zc2wvc3NsX3NlcnZlcjIuYworKysgYi9wcm9ncmFtcy9zc2wvc3NsX3NlcnZlcjIuYwpAQCAtNDIsMTIgKzQyLDE0IEBACiAKICNpZiAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgXAogICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1RMU19DKSB8fCAhZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykgfHwgXAotICAgICFkZWZpbmVkKE1CRURUTFNfTkVUX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKKyAgICAhZGVmaW5lZChNQkVEVExTX05FVF9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUikKIGludCBtYWluKCB2b2lkICkKIHsKLSAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19FTlRST1BZX0MgYW5kL29yICIKKyAgICBtYmVkdGxzX3ByaW50ZiggIk1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciAiCiAgICAgICAgICAgICJNQkVEVExTX1NTTF9UTFNfQyBhbmQvb3IgTUJFRFRMU19TU0xfU1JWX0MgYW5kL29yICIKLSAgICAgICAgICAgIk1CRURUTFNfTkVUX0MgYW5kL29yIE1CRURUTFNfQ1RSX0RSQkdfQyBhbmQvb3Igbm90IGRlZmluZWQuXG4iKTsKKyAgICAgICAgICAgIk1CRURUTFNfTkVUX0MgYW5kL29yIE1CRURUTFNfQ1RSX0RSQkdfQyBhbmQvb3Igbm90IGRlZmluZWQgIgorICAgICAgICAgICAiIGFuZC9vciBNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIgZGVmaW5lZC5cbiIgKTsKICAgICBtYmVkdGxzX2V4aXQoIDAgKTsKIH0KICNlbHNlCkBAIC0xODIsNiArMTg0LDEwIEBACiAjZGVmaW5lIERGTF9SRVBST0RVQ0lCTEUgICAgICAgIDAKICNkZWZpbmUgREZMX05TU19LRVlMT0cgICAgICAgICAgMAogI2RlZmluZSBERkxfTlNTX0tFWUxPR19GSUxFICAgICBOVUxMCisjZGVmaW5lIERGTF9RVUVSWV9DT05GSUdfTU9ERSAgIDAKKyNkZWZpbmUgREZMX1VTRV9TUlRQICAgICAgICAgICAgMAorI2RlZmluZSBERkxfU1JUUF9GT1JDRV9QUk9GSUxFICAwCisjZGVmaW5lIERGTF9TUlRQX1NVUFBPUlRfTUtJICAgIDAKIAogI2RlZmluZSBMT05HX1JFU1BPTlNFICI8cD4wMS1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaFxyXG4iIFwKICAgICAiMDItYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaFxyXG4iICBcCkBAIC0zMjQsMTAgKzMzMCwyNCBAQAogICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY2Fubm90IGJlIHVzZWQgd2l0aCBlYXBfdGxzPTFcbiIKICNkZWZpbmUgVVNBR0VfTlNTX0tFWUxPR19GSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAiICAgIG5zc19rZXlsb2dfZmlsZT0lJXNcbiIKLSNlbHNlCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApCisjZGVmaW5lIFVTQUdFX1NSVFAgXAorICAgICIgICAgdXNlX3NydHA9JSVkICAgICAgICAgZGVmYXVsdDogMCAoZGlzYWJsZWQpXG4iIFwKKyAgICAiICAgIHNydHBfZm9yY2VfcHJvZmlsZT0lJWQgIGRlZmF1bHQ6IDAgKGFsbCBlbmFibGVkKVxuIiAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIHByb2ZpbGVzOlxuIiAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBTUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODBcbiIgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgMiAtIFNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMlxuIiAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAzIC0gU1JUUF9OVUxMX0hNQUNfU0hBMV84MFxuIiAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIDQgLSBTUlRQX05VTExfSE1BQ19TSEExXzMyXG4iICAgICAgIFwKKyAgICAiICAgIHN1cHBvcnRfbWtpPSUlZCAgICAgZGVmYXVsdDogMCAobm90IHN1cHBvcnRlZClcbiIKKyNlbHNlIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLworI2RlZmluZSBVU0FHRV9TUlRQICIiCisjZW5kaWYKKyNlbHNlIC8qIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTICovCiAjZGVmaW5lIFVTQUdFX0VBUF9UTFMgIiIKICNkZWZpbmUgVVNBR0VfTlNTX0tFWUxPRyAiIgogI2RlZmluZSBVU0FHRV9OU1NfS0VZTE9HX0ZJTEUgIiIKKyNkZWZpbmUgVVNBR0VfU1JUUCAiIgogI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTICovCiAKICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCkBAIC00ODksNiArNTA5LDcgQEAKICAgICAiICAgIHJlYWRfdGltZW91dD0lJWQgICAgIGRlZmF1bHQ6IDAgbXMgKG5vIHRpbWVvdXQpXG4iICAgIFwKICAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBVU0FHRV9EVExTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9TUlRQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBVU0FHRV9DT09LSUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBVU0FHRV9BTlRJX1JFUExBWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBVU0FHRV9CQURNQUNfTElNSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTY0Myw2ICs2NjQsMTAgQEAKICAgICBjb25zdCBjaGFyICpjaWRfdmFsX3JlbmVnbzsgLyogdGhlIENJRCB0byB1c2UgZm9yIGluY29taW5nIG1lc3NhZ2VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFmdGVyIHJlbmVnb3RpYXRpb24gICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpbnQgcmVwcm9kdWNpYmxlOyAgICAgICAgICAgLyogbWFrZSBjb21tdW5pY2F0aW9uIHJlcHJvZHVjaWJsZSAgICAgICAgICAqLworICAgIGludCBxdWVyeV9jb25maWdfbW9kZTsgICAgICAvKiB3aGV0aGVyIHRvIHJlYWQgY29uZmlnICAgICAgICAgICAgICAgICAgICovCisgICAgaW50IHVzZV9zcnRwOyAgICAgICAgICAgICAgIC8qIFN1cHBvcnQgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgZm9yY2Vfc3J0cF9wcm9maWxlOyAgICAgLyogU1JUUCBwcm90ZWN0aW9uIHByb2ZpbGUgdG8gdXNlIG9yIGFsbCAgICAqLworICAgIGludCBzdXBwb3J0X21raTsgICAgICAgICAgICAvKiBUaGUgZHRscyBta2kgbWtpIHN1cHBvcnQgICAgICAgICAgICAgICAgICovCiB9IG9wdDsKIAogaW50IHF1ZXJ5X2NvbmZpZyggY29uc3QgY2hhciAqY29uZmlnICk7CkBAIC03NTgsNyArNzgzLDQ5IEBACiAgICAgcmV0dXJuKCByZXQgKTsKIH0KIAotI2VuZGlmCisjaWYgZGVmaW5lZCggTUJFRFRMU19TU0xfRFRMU19TUlRQICkKKy8qIFN1cHBvcnRlZCBTUlRQIG1vZGUgbmVlZHMgYSBtYXhpbXVtIG9mIDoKKyAqIC0gMTYgYnl0ZXMgZm9yIGtleSAoQUVTLTEyOCkKKyAqIC0gMTQgYnl0ZXMgU0FMVAorICogT25lIGZvciBzZW5kZXIsIG9uZSBmb3IgcmVjZWl2ZXIgY29udGV4dAorICovCisjZGVmaW5lIE1CRURUTFNfVExTX1NSVFBfTUFYX0tFWV9NQVRFUklBTF9MRU5HVEggICAgNjAKK3R5cGVkZWYgc3RydWN0IGR0bHNfc3J0cF9rZXlzCit7CisgICAgdW5zaWduZWQgY2hhciBtYXN0ZXJfc2VjcmV0WzQ4XTsKKyAgICB1bnNpZ25lZCBjaGFyIHJhbmRieXRlc1s2NF07CisgICAgbWJlZHRsc190bHNfcHJmX3R5cGVzIHRsc19wcmZfdHlwZTsKK30gZHRsc19zcnRwX2tleXM7CisKK3N0YXRpYyBpbnQgZHRsc19zcnRwX2tleV9kZXJpdmF0aW9uKCB2b2lkICpwX2V4cGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWFjbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGl2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2xpZW50X3JhbmRvbVszMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzZXJ2ZXJfcmFuZG9tWzMyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rsc19wcmZfdHlwZXMgdGxzX3ByZl90eXBlICkKK3sKKyAgICBkdGxzX3NydHBfa2V5cyAqa2V5cyA9IChkdGxzX3NydHBfa2V5cyAqKXBfZXhwa2V5OworCisgICAgKCAoIHZvaWQgKSBrYiApOworICAgIG1lbWNweSgga2V5cy0+bWFzdGVyX3NlY3JldCwgbXMsIHNpemVvZigga2V5cy0+bWFzdGVyX3NlY3JldCApICk7CisgICAgbWVtY3B5KCBrZXlzLT5yYW5kYnl0ZXMsIGNsaWVudF9yYW5kb20sIDMyICk7CisgICAgbWVtY3B5KCBrZXlzLT5yYW5kYnl0ZXMgKyAzMiwgc2VydmVyX3JhbmRvbSwgMzIgKTsKKyAgICBrZXlzLT50bHNfcHJmX3R5cGUgPSB0bHNfcHJmX3R5cGU7CisKKyAgICBpZiggb3B0LmRlYnVnX2xldmVsID4gMiApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggImV4cG9ydGVkIG1hY2xlbiBpcyAldVxuIiwgKHVuc2lnbmVkKSBtYWNsZW4gKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJleHBvcnRlZCBrZXlsZW4gaXMgJXVcbiIsICh1bnNpZ25lZCkga2V5bGVuICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZXhwb3J0ZWQgaXZsZW4gaXMgJXVcbiIsICh1bnNpZ25lZCkgaXZsZW4gKTsKKyAgICB9CisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FWFBPUlRfS0VZUyAqLwogCiBzdGF0aWMgdm9pZCBteV9kZWJ1Zyggdm9pZCAqY3R4LCBpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCkBAIC0xMjIwLDcgKzEyODcsNyBAQAogICAgIHNpemVfdCBrZXlfbGVuOwogICAgIHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfUFNLX01BWF9MRU5dOwogI2lmIGRlZmluZWQoTUJFRFRMU19VU0VfUFNBX0NSWVBUTykKLSAgICBwc2Ffa2V5X2hhbmRsZV90IHNsb3Q7CisgICAgcHNhX2tleV9pZF90IHNsb3Q7CiAjZW5kaWYgLyogTUJFRFRMU19VU0VfUFNBX0NSWVBUTyAqLwogICAgIHBza19lbnRyeSAqbmV4dDsKIH07CkBAIC0xMjM2LDcgKzEzMDMsNyBAQAogICAgIHsKICNpZiBkZWZpbmVkKE1CRURUTFNfVVNFX1BTQV9DUllQVE8pCiAgICAgICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7Ci0gICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgY29uc3Qgc2xvdCA9IGhlYWQtPnNsb3Q7CisgICAgICAgIHBzYV9rZXlfaWRfdCBjb25zdCBzbG90ID0gaGVhZC0+c2xvdDsKIAogICAgICAgICBpZiggc2xvdCAhPSAwICkKICAgICAgICAgewpAQCAtMTY0Niw3ICsxNzEzLDcgQEAKIH0KIAogI2lmIGRlZmluZWQoTUJFRFRMU19VU0VfUFNBX0NSWVBUTykKLXN0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX3NldHVwX3Bza19rZXlfc2xvdCggcHNhX2tleV9oYW5kbGVfdCAqc2xvdCwKK3N0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX3NldHVwX3Bza19rZXlfc2xvdCggcHNhX2tleV9pZF90ICpzbG90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwc2tfbGVuICkKQEAgLTE3MjMsMTMgKzE3OTAsMTQgQEAKIGludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKIHsKICAgICBpbnQgcmV0ID0gMCwgbGVuLCB3cml0dGVuLCBmcmFncywgZXhjaGFuZ2VzX2xlZnQ7CisgICAgaW50IHF1ZXJ5X2NvbmZpZ19yZXQgPSAwOwogICAgIGludCB2ZXJzaW9uX3N1aXRlc1s0XVsyXTsKICAgICBpb19jdHhfdCBpb19jdHg7CiAgICAgdW5zaWduZWQgY2hhciogYnVmID0gMDsKICNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1NPTUVfUFNLX0VOQUJMRUQpCiAjaWYgZGVmaW5lZChNQkVEVExTX1VTRV9QU0FfQ1JZUFRPKQogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSAwOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgcHNrX3Nsb3QgPSAwOworICAgIHBzYV9rZXlfaWRfdCBwc2tfc2xvdCA9IDA7CiAjZW5kaWYgLyogTUJFRFRMU19VU0VfUFNBX0NSWVBUTyAqLwogICAgIHVuc2lnbmVkIGNoYXIgcHNrW01CRURUTFNfUFNLX01BWF9MRU5dOwogICAgIHNpemVfdCBwc2tfbGVuID0gMDsKQEAgLTE3ODksNyArMTg1Nyw2IEBACiAjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKICAgICB1bnNpZ25lZCBjaGFyIGFsbG9jX2J1ZltNRU1PUllfSEVBUF9TSVpFXTsKICNlbmRpZgotCiAjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0NPTk5FQ1RJT05fSUQpCiAgICAgdW5zaWduZWQgY2hhciBjaWRbTUJFRFRMU19TU0xfQ0lEX0lOX0xFTl9NQVhdOwogICAgIHVuc2lnbmVkIGNoYXIgY2lkX3JlbmVnb1tNQkVEVExTX1NTTF9DSURfSU5fTEVOX01BWF07CkBAIC0xODEyLDcgKzE4NzksMjAgQEAKICAgICB1bnNpZ25lZCBjaGFyIGVhcF90bHNfaXZbOF07CiAgICAgY29uc3QgY2hhciogZWFwX3Rsc19sYWJlbCA9ICJjbGllbnQgRUFQIGVuY3J5cHRpb24iOwogICAgIGVhcF90bHNfa2V5cyBlYXBfdGxzX2tleWluZzsKLSNlbmRpZgorI2lmIGRlZmluZWQoIE1CRURUTFNfU1NMX0RUTFNfU1JUUCApCisgICAgLyohIG1hc3RlciBrZXlzIGFuZCBtYXN0ZXIgc2FsdCBmb3IgU1JUUCBnZW5lcmF0ZWQgZHVyaW5nIGhhbmRzaGFrZSAqLworICAgICB1bnNpZ25lZCBjaGFyIGR0bHNfc3J0cF9rZXlfbWF0ZXJpYWxbTUJFRFRMU19UTFNfU1JUUF9NQVhfS0VZX01BVEVSSUFMX0xFTkdUSF07CisgICAgIGNvbnN0IGNoYXIqIGR0bHNfc3J0cF9sYWJlbCA9ICJFWFRSQUNUT1ItZHRsc19zcnRwIjsKKyAgICAgZHRsc19zcnRwX2tleXMgZHRsc19zcnRwX2tleWluZzsKKyAgICAgY29uc3QgbWJlZHRsc19zc2xfc3J0cF9wcm9maWxlIGRlZmF1bHRfcHJvZmlsZXNbXSA9IHsKKyAgICAgICAgIE1CRURUTFNfVExTX1NSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV84MCwKKyAgICAgICAgIE1CRURUTFNfVExTX1NSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiwKKyAgICAgICAgIE1CRURUTFNfVExTX1NSVFBfTlVMTF9ITUFDX1NIQTFfODAsCisgICAgICAgICBNQkVEVExTX1RMU19TUlRQX05VTExfSE1BQ19TSEExXzMyLAorICAgICAgICAgTUJFRFRMU19UTFNfU1JUUF9VTlNFVAorICAgICB9OworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTICovCiAKICNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQogICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19pbml0KCBhbGxvY19idWYsIHNpemVvZihhbGxvY19idWYpICk7CkBAIC0xOTcyLDYgKzIwNTIsMTAgQEAKICAgICBvcHQucmVwcm9kdWNpYmxlICAgICAgICA9IERGTF9SRVBST0RVQ0lCTEU7CiAgICAgb3B0Lm5zc19rZXlsb2cgICAgICAgICAgPSBERkxfTlNTX0tFWUxPRzsKICAgICBvcHQubnNzX2tleWxvZ19maWxlICAgICA9IERGTF9OU1NfS0VZTE9HX0ZJTEU7CisgICAgb3B0LnF1ZXJ5X2NvbmZpZ19tb2RlICAgPSBERkxfUVVFUllfQ09ORklHX01PREU7CisgICAgb3B0LnVzZV9zcnRwICAgICAgICAgICAgPSBERkxfVVNFX1NSVFA7CisgICAgb3B0LmZvcmNlX3NydHBfcHJvZmlsZSAgPSBERkxfU1JUUF9GT1JDRV9QUk9GSUxFOworICAgIG9wdC5zdXBwb3J0X21raSAgICAgICAgID0gREZMX1NSVFBfU1VQUE9SVF9NS0k7CiAKICAgICBmb3IoIGkgPSAxOyBpIDwgYXJnYzsgaSsrICkKICAgICB7CkBAIC0yMzg2LDcgKzI0NzAsOSBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInF1ZXJ5X2NvbmZpZyIgKSA9PSAwICkKICAgICAgICAgewotICAgICAgICAgICAgbWJlZHRsc19leGl0KCBxdWVyeV9jb25maWcoIHEgKSApOworICAgICAgICAgICAgb3B0LnF1ZXJ5X2NvbmZpZ19tb2RlID0gMTsKKyAgICAgICAgICAgIHF1ZXJ5X2NvbmZpZ19yZXQgPSBxdWVyeV9jb25maWcoIHEgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJzZXJpYWxpemUiKSA9PSAwICkKICAgICAgICAgewpAQCAtMjQxOCw2ICsyNTA0LDE4IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIG9wdC5uc3Nfa2V5bG9nX2ZpbGUgPSBxOwogICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInVzZV9zcnRwIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQudXNlX3NydHAgPSBhdG9pICggcSApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInNydHBfZm9yY2VfcHJvZmlsZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmZvcmNlX3NydHBfcHJvZmlsZSA9IGF0b2koIHEgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJzdXBwb3J0X21raSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnN1cHBvcnRfbWtpID0gYXRvaSggcSApOworICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CiAgICAgfQpAQCAtMzAyMiw3ICszMTIwLDcgQEAKICAgICB7CiAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZfbWF4X2ZyYWdfbGVuIHJldHVybmVkICVkXG5cbiIsIHJldCApOwogICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfTsKKyAgICB9CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19DT05ORUNUSU9OX0lEKQpAQCAtMzA1Miw2ICszMTUwLDM4IEBACiAgICAgfQogI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfQ09OTkVDVElPTl9JRCAqLwogCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApCisgICAgaWYoIG9wdC51c2Vfc3J0cCA9PSAxICkKKyAgICB7CisgICAgICAgIGlmKCBvcHQuZm9yY2Vfc3J0cF9wcm9maWxlICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NzbF9zcnRwX3Byb2ZpbGUgZm9yY2VkX3Byb2ZpbGVbXSA9IHsgb3B0LmZvcmNlX3NydHBfcHJvZmlsZSwgTUJFRFRMU19UTFNfU1JUUF9VTlNFVCB9OworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfY29uZl9kdGxzX3NydHBfcHJvdGVjdGlvbl9wcm9maWxlcyggJmNvbmYsIGZvcmNlZF9wcm9maWxlICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9jb25mX2R0bHNfc3J0cF9wcm90ZWN0aW9uX3Byb2ZpbGVzKCAmY29uZiwgZGVmYXVsdF9wcm9maWxlcyApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY29uZl9kdGxzX3NydHBfcHJvdGVjdGlvbl9wcm9maWxlcyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfc3J0cF9ta2lfdmFsdWVfc3VwcG9ydGVkKCAmY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5zdXBwb3J0X21raSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9EVExTX1NSVFBfTUtJX1NVUFBPUlRFRCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9EVExTX1NSVFBfTUtJX1VOU1VQUE9SVEVEICk7CisKKyAgICB9CisgICAgZWxzZSBpZiggb3B0LmZvcmNlX3NydHBfcHJvZmlsZSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG11c3QgZW5hYmxlIHVzZV9zcnRwIHRvIGZvcmNlIHNydHAgcHJvZmlsZVxuXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisKICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQogICAgIGlmKCBvcHQudHJ1bmNfaG1hYyAhPSBERkxfVFJVTkNfSE1BQyApCiAgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfdHJ1bmNhdGVkX2htYWMoICZjb25mLCBvcHQudHJ1bmNfaG1hYyApOwpAQCAtMzA3OSw3ICszMjA5LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3Nfa2V5bG9nX2V4cG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgKTsKICAgICB9Ci0jZW5kaWYKKyNpZiBkZWZpbmVkKCBNQkVEVExTX1NTTF9EVExTX1NSVFAgKQorICAgIGVsc2UgaWYoIG9wdC51c2Vfc3J0cCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfZXhwb3J0X2tleXNfZXh0X2NiKCAmY29uZiwgZHRsc19zcnRwX2tleV9kZXJpdmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR0bHNfc3J0cF9rZXlpbmcgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMgKi8KIAogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKICAgICBpZiggb3B0LmFscG5fc3RyaW5nICE9IE5VTEwgKQpAQCAtMzcyNSw3ICszODYyLDc1IEBACiAgICAgICAgIH0KICAgICAgICAgbWJlZHRsc19wcmludGYoIlxuIik7CiAgICAgfQotI2VuZGlmCisKKyNpZiBkZWZpbmVkKCBNQkVEVExTX1NTTF9EVExTX1NSVFAgKQorICAgIGVsc2UgaWYoIG9wdC51c2Vfc3J0cCAhPSAwICApCisgICAgeworICAgICAgICBzaXplX3QgaiA9IDA7CisgICAgICAgIG1iZWR0bHNfZHRsc19zcnRwX2luZm8gZHRsc19zcnRwX25lZ290aWF0aW9uX3Jlc3VsdDsKKyAgICAgICAgbWJlZHRsc19zc2xfZ2V0X2R0bHNfc3J0cF9uZWdvdGlhdGlvbl9yZXN1bHQoICZzc2wsICZkdGxzX3NydHBfbmVnb3RpYXRpb25fcmVzdWx0ICk7CisKKyAgICAgICAgaWYoIGR0bHNfc3J0cF9uZWdvdGlhdGlvbl9yZXN1bHQuY2hvc2VuX2R0bHNfc3J0cF9wcm9maWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IE1CRURUTFNfVExTX1NSVFBfVU5TRVQgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgICBVbmFibGUgdG8gbmVnb3RpYXRlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIHVzZSBvZiBEVExTLVNSVFBcbiIgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3Rsc19wcmYoIGR0bHNfc3J0cF9rZXlpbmcudGxzX3ByZl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHRsc19zcnRwX2tleWluZy5tYXN0ZXJfc2VjcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBkdGxzX3NydHBfa2V5aW5nLm1hc3Rlcl9zZWNyZXQgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0bHNfc3J0cF9sYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0bHNfc3J0cF9rZXlpbmcucmFuZGJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBkdGxzX3NydHBfa2V5aW5nLnJhbmRieXRlcyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHRsc19zcnRwX2tleV9tYXRlcmlhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiggZHRsc19zcnRwX2tleV9tYXRlcmlhbCApICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfdGxzX3ByZiByZXR1cm5lZCAtMHgleFxuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSAtcmV0ICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgICBEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzOiIgKTsKKyAgICAgICAgICAgIGZvciggaiA9IDA7IGogPCBzaXplb2YoIGR0bHNfc3J0cF9rZXlfbWF0ZXJpYWwgKTsgaisrICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggaiAlIDggPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gICAgIiApOworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJTAyeCAiLCBkdGxzX3NydHBfa2V5X21hdGVyaWFsW2pdICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisgICAgICAgICAgICAvKiBwcm9kdWNlIGEgbGVzcyByZWFkYWJsZSBvdXRwdXQgdXNlZCB0byBwZXJmb3JtIGF1dG9tYXRpYyBjaGVja3MKKyAgICAgICAgICAgICAqIC0gY29tcGFyZSBjbGllbnQgYW5kIHNlcnZlciBvdXRwdXQKKyAgICAgICAgICAgICAqIC0gaW50ZXJvcCB0ZXN0IHdpdGggb3BlbnNzbCB3aGljaCBjbGllbnQgcHJvZHVjZXMgdGhpcyBraW5kIG9mIG91dHB1dAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgICBLZXlpbmcgbWF0ZXJpYWw6ICIgKTsKKyAgICAgICAgICAgIGZvciggaiA9IDA7IGogPCBzaXplb2YoIGR0bHNfc3J0cF9rZXlfbWF0ZXJpYWwgKTsgaisrICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiUwMlgiLCBkdGxzX3NydHBfa2V5X21hdGVyaWFsW2pdICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisgICAgICAgICAgICBpZiAoIGR0bHNfc3J0cF9uZWdvdGlhdGlvbl9yZXN1bHQubWtpX2xlbiA+IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAgIERUTFMtU1JUUCBta2kgdmFsdWU6ICIgKTsKKyAgICAgICAgICAgICAgICBmb3IoIGogPSAwOyBqIDwgZHRsc19zcnRwX25lZ290aWF0aW9uX3Jlc3VsdC5ta2lfbGVuOyBqKysgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIlMDJYIiwgZHRsc19zcnRwX25lZ290aWF0aW9uX3Jlc3VsdC5ta2lfdmFsdWVbal0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICAgRFRMUy1TUlRQIG5vIG1raSB2YWx1ZSBuZWdvdGlhdGVkIiApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTICovCiAKICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQ09OTkVDVElPTl9JRCkKICAgICByZXQgPSByZXBvcnRfY2lkX3VzYWdlKCAmc3NsLCAiaW5pdGlhbCBoYW5kc2hha2UiICk7CkBAIC00MjYxLDggKzQ0NjYsMTEgQEAKICAgICB9CiAjZW5kaWYKIAotICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIENsZWFuaW5nIHVwLi4uIiApOwotICAgIGZmbHVzaCggc3Rkb3V0ICk7CisgICAgaWYoIG9wdC5xdWVyeV9jb25maWdfbW9kZSA9PSBERkxfUVVFUllfQ09ORklHX01PREUgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gQ2xlYW5pbmcgdXAuLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisgICAgfQogCiAgICAgbWJlZHRsc19uZXRfZnJlZSggJmNsaWVudF9mZCApOwogICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZsaXN0ZW5fZmQgKTsKQEAgLTQyOTIsNyArNDUwMCw4IEBACiAgICAgc25pX2ZyZWUoIHNuaV9pbmZvICk7CiAjZW5kaWYKICNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1NPTUVfUFNLX0VOQUJMRUQpCi0gICAgaWYoICggcmV0ID0gcHNrX2ZyZWUoIHBza19pbmZvICkgKSAhPSAwICkKKyAgICByZXQgPSBwc2tfZnJlZSggcHNrX2luZm8gKTsKKyAgICBpZiggKCByZXQgIT0gMCApICYmICggb3B0LnF1ZXJ5X2NvbmZpZ19tb2RlID09IERGTF9RVUVSWV9DT05GSUdfTU9ERSApICkKICAgICAgICAgbWJlZHRsc19wcmludGYoICJGYWlsZWQgdG8gbGlzdCBvZiBvcGFxdWUgUFNLcyAtIGVycm9yIHdhcyAlZFxuIiwgcmV0ICk7CiAjZW5kaWYKICNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpICYmIGRlZmluZWQoTUJFRFRMU19GU19JTykKQEAgLTQzMDgsNyArNDUxNyw4IEBACiAgICAgICAgICAqIGltbWVkaWF0ZWx5IGJlY2F1c2Ugb2YgYmFkIGNtZCBsaW5lIHBhcmFtcywKICAgICAgICAgICogZm9yIGV4YW1wbGUpLiAqLwogICAgICAgICBzdGF0dXMgPSBwc2FfZGVzdHJveV9rZXkoIHBza19zbG90ICk7Ci0gICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICBpZiggKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKSAmJgorICAgICAgICAgICAgKCBvcHQucXVlcnlfY29uZmlnX21vZGUgPT0gREZMX1FVRVJZX0NPTkZJR19NT0RFICkgKQogICAgICAgICB7CiAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkZhaWxlZCB0byBkZXN0cm95IGtleSBzbG90ICV1IC0gZXJyb3Igd2FzICVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQpIHBza19zbG90LCAoaW50KSBzdGF0dXMgKTsKQEAgLTQzNDcsMTggKzQ1NTcsMjQgQEAKICAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZSgpOwogI2VuZGlmCiAKLSAgICBtYmVkdGxzX3ByaW50ZiggIiBkb25lLlxuIiApOworICAgIGlmKCBvcHQucXVlcnlfY29uZmlnX21vZGUgPT0gREZMX1FVRVJZX0NPTkZJR19NT0RFICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGRvbmUuXG4iICk7CiAKICNpZiBkZWZpbmVkKF9XSU4zMikKLSAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKLSAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CiAjZW5kaWYKKyAgICB9CiAKICAgICAvLyBTaGVsbCBjYW4gbm90IGhhbmRsZSBsYXJnZSBleGl0IG51bWJlcnMgLT4gMSBmb3IgZXJyb3JzCiAgICAgaWYoIHJldCA8IDAgKQogICAgICAgICByZXQgPSAxOwogCi0gICAgbWJlZHRsc19leGl0KCByZXQgKTsKKyAgICBpZiggb3B0LnF1ZXJ5X2NvbmZpZ19tb2RlID09IERGTF9RVUVSWV9DT05GSUdfTU9ERSApCisgICAgICAgIG1iZWR0bHNfZXhpdCggcmV0ICk7CisgICAgZWxzZQorICAgICAgICBtYmVkdGxzX2V4aXQoIHF1ZXJ5X2NvbmZpZ19yZXQgKTsKIH0KICNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfRU5UUk9QWV9DICYmIE1CRURUTFNfU1NMX1RMU19DICYmCiAgICAgICAgICAgTUJFRFRMU19TU0xfU1JWX0MgJiYgTUJFRFRMU19ORVRfQyAmJiBNQkVEVExTX1JTQV9DICYmCmRpZmYgLS1naXQgYS9wcm9ncmFtcy90ZXN0L0NNYWtlTGlzdHMudHh0IGIvcHJvZ3JhbXMvdGVzdC9DTWFrZUxpc3RzLnR4dAppbmRleCAwZGYwYmVjLi40OWI0NGU3IDEwMDY0NAotLS0gYS9wcm9ncmFtcy90ZXN0L0NNYWtlTGlzdHMudHh0CisrKyBiL3Byb2dyYW1zL3Rlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTEsNSArMSw1IEBACiBzZXQobGlicwotICAgIG1iZWR0bHMKKyAgICAke21iZWR0bHNfdGFyZ2V0fQogKQogCiBpZihVU0VfUEtDUzExX0hFTFBFUl9MSUJSQVJZKQpAQCAtMzMsMTEgKzMzLDEyIEBACiAgICAgaWYgKCR7ZXhlX2luZGV4fSBHUkVBVEVSIC0xKQogICAgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtleGV9ICR7bGlic30pCiAgICAgZWxzZSgpCi0gICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke2V4ZX0gbWJlZGNyeXB0bykKKyAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7ZXhlfSAke21iZWRjcnlwdG9fdGFyZ2V0fSkKICAgICBlbmRpZigpCiBlbmRmb3JlYWNoKCkKIAotdGFyZ2V0X3NvdXJjZXMocXVlcnlfY29tcGlsZV90aW1lX2NvbmZpZyBQVUJMSUMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3F1ZXJ5X2NvbmZpZy5jKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBxdWVyeV9jb21waWxlX3RpbWVfY29uZmlnIEFQUEVORCBQUk9QRVJUWSBTT1VSQ0VTCisgICAgICAgICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3F1ZXJ5X2NvbmZpZy5jKQogCiBpbnN0YWxsKFRBUkdFVFMgJHtleGVjdXRhYmxlc19saWJzfSAke2V4ZWN1dGFibGVzX21iZWRjcnlwdG99CiAgICAgICAgIERFU1RJTkFUSU9OICJiaW4iCmRpZmYgLS1naXQgYS9wcm9ncmFtcy90ZXN0L2NtYWtlX3N1YnByb2plY3QvQ01ha2VMaXN0cy50eHQgYi9wcm9ncmFtcy90ZXN0L2NtYWtlX3N1YnByb2plY3QvQ01ha2VMaXN0cy50eHQKaW5kZXggM2UzMmM1Zi4uYTlmY2ZkZSAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvdGVzdC9jbWFrZV9zdWJwcm9qZWN0L0NNYWtlTGlzdHMudHh0CisrKyBiL3Byb2dyYW1zL3Rlc3QvY21ha2Vfc3VicHJvamVjdC9DTWFrZUxpc3RzLnR4dApAQCAtMSw1ICsxLDggQEAKIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjYpCiAKKyMgVGVzdCB0aGUgdGFyZ2V0IHJlbmFtaW5nIHN1cHBvcnQgYnkgYWRkaW5nIGEgcHJlZml4IHRvIHRoZSB0YXJnZXRzIGJ1aWx0CitzZXQoTUJFRFRMU19UQVJHRVRfUFJFRklYIHN1YnByb2plY3RfdGVzdF8pCisKICMgV2UgdXNlIHRoZSBwYXJlbnQgTWJlZCBUTFMgZGlyZWN0b3J5IGFzIHRoZSBNQkVEVExTX0RJUiBmb3IgdGhpcyB0ZXN0LiBPdGhlcgogIyBwcm9qZWN0cyB0aGF0IHVzZSBNYmVkIFRMUyBhcyBhIHN1YnByb2plY3QgYXJlIGxpa2VseSB0byBhZGQgYnkgdGhlaXIgb3duCiAjIHJlbGF0aXZlIHBhdGhzLgpAQCAtOCwxMSArMTEsMTIgQEAKICMgQWRkIE1iZWQgVExTIGFzIGEgc3ViZGlyZWN0b3J5LgogYWRkX3N1YmRpcmVjdG9yeSgke01CRURUTFNfRElSfSBidWlsZCkKIAotIyBMaW5rIGFnYWluc3QgYWxsIHRoZSBNYmVkIFRMUyBsaWJyYXJpZXMuCisjIExpbmsgYWdhaW5zdCBhbGwgdGhlIE1iZWQgVExTIGxpYnJhcmllcy4gVmVyaWZpZXMgdGhhdCB0aGUgdGFyZ2V0cyBoYXZlIGJlZW4KKyMgY3JlYXRlZCB1c2luZyB0aGUgc3BlY2lmaWVkIHByZWZpeAogc2V0KGxpYnMKLSAgICBtYmVkY3J5cHRvCi0gICAgbWJlZHg1MDkKLSAgICBtYmVkdGxzCisgICAgc3VicHJvamVjdF90ZXN0X21iZWRjcnlwdG8KKyAgICBzdWJwcm9qZWN0X3Rlc3RfbWJlZHg1MDkKKyAgICBzdWJwcm9qZWN0X3Rlc3RfbWJlZHRscwogKQogCiBhZGRfZXhlY3V0YWJsZShjbWFrZV9zdWJwcm9qZWN0IGNtYWtlX3N1YnByb2plY3QuYykKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3Rlc3QvY3BwX2R1bW15X2J1aWxkLmNwcCBiL3Byb2dyYW1zL3Rlc3QvY3BwX2R1bW15X2J1aWxkLmNwcAppbmRleCAwOWM1MjczLi5jNjljZDJiIDEwMDY0NAotLS0gYS9wcm9ncmFtcy90ZXN0L2NwcF9kdW1teV9idWlsZC5jcHAKKysrIGIvcHJvZ3JhbXMvdGVzdC9jcHBfZHVtbXlfYnVpbGQuY3BwCkBAIC0xMDksNiArMTA5LDEyIEBACiAjaW5jbHVkZSAibWJlZHRscy9tZW1vcnlfYnVmZmVyX2FsbG9jLmgiCiAjZW5kaWYKIAorI2luY2x1ZGUgInBzYS9jcnlwdG8uaCIKKyNpbmNsdWRlICJwc2EvY3J5cHRvX3NlX2RyaXZlci5oIgorI2luY2x1ZGUgInBzYS9jcnlwdG9fZW50cm9weV9kcml2ZXIuaCIKKyNpbmNsdWRlICJwc2EvY3J5cHRvX2FjY2VsX2RyaXZlci5oIgorI2luY2x1ZGUgIi4uL2xpYnJhcnkvcHNhX2NyeXB0b19pdHMuaCIKKwogaW50IG1haW4oKQogewogICAgIG1iZWR0bHNfcGxhdGZvcm1fY29udGV4dCAqY3R4ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3Rlc3QvcXVlcnlfY29uZmlnLmMgYi9wcm9ncmFtcy90ZXN0L3F1ZXJ5X2NvbmZpZy5jCmluZGV4IDg4NzM3MzQuLjEzNDViMTEgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3Rlc3QvcXVlcnlfY29uZmlnLmMKKysrIGIvcHJvZ3JhbXMvdGVzdC9xdWVyeV9jb25maWcuYwpAQCAtMTQ4MCw2ICsxNDgwLDE0IEBACiAgICAgfQogI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZICovCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKKyAgICBpZiggc3RyY21wKCAiTUJFRFRMU19TU0xfRFRMU19TUlRQIiwgY29uZmlnICkgPT0gMCApCisgICAgeworICAgICAgICBNQUNST19FWFBBTlNJT05fVE9fU1RSKCBNQkVEVExTX1NTTF9EVExTX1NSVFAgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLworCiAjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFKQogICAgIGlmKCBzdHJjbXAoICJNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFIiwgY29uZmlnICkgPT0gMCApCiAgICAgewpAQCAtMTU5Miw2ICsxNjAwLDE0IEBACiAgICAgfQogI2VuZGlmIC8qIE1CRURUTFNfVVNFX1BTQV9DUllQVE8gKi8KIAorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRykKKyAgICBpZiggc3RyY21wKCAiTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRyIsIGNvbmZpZyApID09IDAgKQorICAgIHsKKyAgICAgICAgTUFDUk9fRVhQQU5TSU9OX1RPX1NUUiggTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRyApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRyAqLworCiAjaWYgZGVmaW5lZChNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMpCiAgICAgaWYoIHN0cmNtcCggIk1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUyIsIGNvbmZpZyApID09IDAgKQogICAgIHsKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3V0aWwvQ01ha2VMaXN0cy50eHQgYi9wcm9ncmFtcy91dGlsL0NNYWtlTGlzdHMudHh0CmluZGV4IGNiMTRhM2UuLjJhMTEyMTIgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3V0aWwvQ01ha2VMaXN0cy50eHQKKysrIGIvcHJvZ3JhbXMvdXRpbC9DTWFrZUxpc3RzLnR4dApAQCAtMSw1ICsxLDUgQEAKIHNldChsaWJzCi0gICAgbWJlZGNyeXB0bworICAgICR7bWJlZGNyeXB0b190YXJnZXR9CiApCiAKIHNldChleGVjdXRhYmxlcwpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMveDUwOS9DTWFrZUxpc3RzLnR4dCBiL3Byb2dyYW1zL3g1MDkvQ01ha2VMaXN0cy50eHQKaW5kZXggZjdiNWZlMS4uMjljYmViOCAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMveDUwOS9DTWFrZUxpc3RzLnR4dAorKysgYi9wcm9ncmFtcy94NTA5L0NNYWtlTGlzdHMudHh0CkBAIC0xLDUgKzEsNSBAQAogc2V0KGxpYnMKLSAgICBtYmVkeDUwOQorICAgICR7bWJlZHg1MDlfdGFyZ2V0fQogKQogCiBpZihVU0VfUEtDUzExX0hFTFBFUl9MSUJSQVJZKQpAQCAtMjMsNyArMjMsNyBAQAogICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke2V4ZX0gJHtsaWJzfSkKIGVuZGZvcmVhY2goKQogCi10YXJnZXRfbGlua19saWJyYXJpZXMoY2VydF9hcHAgbWJlZHRscykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhjZXJ0X2FwcCAke21iZWR0bHNfdGFyZ2V0fSkKIAogaW5zdGFsbChUQVJHRVRTICR7ZXhlY3V0YWJsZXN9CiAgICAgICAgIERFU1RJTkFUSU9OICJiaW4iCmRpZmYgLS1naXQgYS9wcm9ncmFtcy94NTA5L2NlcnRfcmVxLmMgYi9wcm9ncmFtcy94NTA5L2NlcnRfcmVxLmMKaW5kZXggYWRlNjdlMi4uZTgyNDFhMyAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMveDUwOS9jZXJ0X3JlcS5jCisrKyBiL3Byb2dyYW1zL3g1MDkvY2VydF9yZXEuYwpAQCAtMTAwLDkgKzEwMCw4IEBACiAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIE5zQ2VydFR5cGUgZXZlbiBpZiBpdCBpcyBlbXB0eVxuIiAgICBcCiAgICAgIiAgICBtZD0lJXMgICAgICAgICAgICAgICBkZWZhdWx0OiBTSEEyNTZcbiIgICAgICAgXAogICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlIHZhbHVlczpcbiIgICAgIFwKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBNRDIsIE1ENCwgTUQ1LCBTSEExXG4iICBcCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgU0hBMjI0LCBTSEEyNTZcbiIgICAgICAgXAotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIFNIQTM4NCwgU0hBNTEyXG4iICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBNRDIsIE1ENCwgTUQ1LCBSSVBFTUQxNjAsIFNIQTEsXG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBTSEEyMjQsIFNIQTI1NiwgU0hBMzg0LCBTSEE1MTJcbiIgXAogICAgICJcbiIKIAogCkBAIC0yMTcsNTggKzIxNiwxNCBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm1kIiApID09IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiggc3RyY21wKCBxLCAiU0hBMjU2IiApID09IDAgKQorICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8gPQorICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfaW5mb19mcm9tX3N0cmluZyggcSApOworICAgICAgICAgICAgaWYoIG1kX2luZm8gPT0gTlVMTCApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3B0Lm1kX2FsZyA9IE1CRURUTFNfTURfU0hBMjU2OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAiU0hBMjI0IiApID09IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9wdC5tZF9hbGcgPSBNQkVEVExTX01EX1NIQTIyNDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCi0gICAgICAgICAgICBpZiggc3RyY21wKCBxLCAiTUQ1IiApID09IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9wdC5tZF9hbGcgPSBNQkVEVExTX01EX01ENTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX01ENV9DICovCi0jaWYgZGVmaW5lZChNQkVEVExTX01ENF9DKQotICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgIk1ENCIgKSA9PSAwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvcHQubWRfYWxnID0gTUJFRFRMU19NRF9NRDQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogTUJFRFRMU19NRDVfQyAqLwotI2lmIGRlZmluZWQoTUJFRFRMU19NRDJfQykKLSAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJNRDIiICkgPT0gMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3B0Lm1kX2FsZyA9IE1CRURUTFNfTURfTUQyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotI2VuZGlmIC8qIE1CRURUTFNfTUQyX0MgKi8KLSNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQotICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgIlNIQTEiICkgPT0gMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3B0Lm1kX2FsZyA9IE1CRURUTFNfTURfU0hBMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLwotI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKLSAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJTSEEzODQiICkgPT0gMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3B0Lm1kX2FsZyA9IE1CRURUTFNfTURfU0hBMzg0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgIlNIQTUxMiIgKSA9PSAwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvcHQubWRfYWxnID0gTUJFRFRMU19NRF9TSEE1MTI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLwotICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiSW52YWxpZCBhcmd1bWVudCBmb3Igb3B0aW9uICVzXG4iLCBwICk7CiAgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9wdC5tZF9hbGcgPSBtYmVkdGxzX21kX2dldF90eXBlKCBtZF9pbmZvICk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAia2V5X3VzYWdlIiApID09IDAgKQogICAgICAgICB7CmRpZmYgLS1naXQgYS9wcm9ncmFtcy94NTA5L2NlcnRfd3JpdGUuYyBiL3Byb2dyYW1zL3g1MDkvY2VydF93cml0ZS5jCmluZGV4IDFlZWI4NjEuLjE4MTc0ZDggMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3g1MDkvY2VydF93cml0ZS5jCisrKyBiL3Byb2dyYW1zL3g1MDkvY2VydF93cml0ZS5jCkBAIC0xMTgsOCArMTE4LDkgQEAKICAgICAiICAgIGlzX2NhPSUlZCAgICAgICAgICAgICAgICBkZWZhdWx0OiAwIChkaXNhYmxlZClcbiIgIFwKICAgICAiICAgIG1heF9wYXRobGVuPSUlZCAgICAgICAgICBkZWZhdWx0OiAtMSAobm9uZSlcbiIgICAgIFwKICAgICAiICAgIG1kPSUlcyAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBTSEEyNTZcbiIgICAgICAgIFwKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnRlZCB2YWx1ZXM6XG4iICAgICAgIFwKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EMiwgTUQ0LCBNRDUsIFNIQTEsIFNIQTI1NiwgU0hBNTEyXG4iXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkIHZhbHVlcyAoaWYgZW5hYmxlZCk6XG4iICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUQyLCBNRDQsIE1ENSwgUklQRU1EMTYwLCBTSEExLFxuIiBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSEEyMjQsIFNIQTI1NiwgU0hBMzg0LCBTSEE1MTJcbiIgXAogICAgICIgICAgdmVyc2lvbj0lJWQgICAgICAgICAgICAgIGRlZmF1bHQ6IDNcbiIgICAgICAgICAgICBcCiAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZSB2YWx1ZXM6IDEsIDIsIDNcbiJcCiAgICAgIiAgICBzdWJqZWN0X2lkZW50aWZpZXI9JSVzICAgZGVmYXVsdDogMVxuIiAgICAgICAgICAgICBcCkBAIC0zNTMsMjcgKzM1NCwxNCBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm1kIiApID09IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiggc3RyY21wKCBxLCAiU0hBMSIgKSA9PSAwICkKLSAgICAgICAgICAgICAgICBvcHQubWQgPSBNQkVEVExTX01EX1NIQTE7Ci0gICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJTSEEyMjQiICkgPT0gMCApCi0gICAgICAgICAgICAgICAgb3B0Lm1kID0gTUJFRFRMU19NRF9TSEEyMjQ7Ci0gICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJTSEEyNTYiICkgPT0gMCApCi0gICAgICAgICAgICAgICAgb3B0Lm1kID0gTUJFRFRMU19NRF9TSEEyNTY7Ci0gICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJTSEEzODQiICkgPT0gMCApCi0gICAgICAgICAgICAgICAgb3B0Lm1kID0gTUJFRFRMU19NRF9TSEEzODQ7Ci0gICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJTSEE1MTIiICkgPT0gMCApCi0gICAgICAgICAgICAgICAgb3B0Lm1kID0gTUJFRFRMU19NRF9TSEE1MTI7Ci0gICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJNRDIiICkgPT0gMCApCi0gICAgICAgICAgICAgICAgb3B0Lm1kID0gTUJFRFRMU19NRF9NRDI7Ci0gICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJNRDQiICkgPT0gMCApCi0gICAgICAgICAgICAgICAgb3B0Lm1kID0gTUJFRFRMU19NRF9NRDQ7Ci0gICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJNRDUiICkgPT0gMCApCi0gICAgICAgICAgICAgICAgb3B0Lm1kID0gTUJFRFRMU19NRF9NRDU7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyA9CisgICAgICAgICAgICAgICAgbWJlZHRsc19tZF9pbmZvX2Zyb21fc3RyaW5nKCBxICk7CisgICAgICAgICAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkludmFsaWQgYXJndW1lbnQgZm9yIG9wdGlvbiAlc1xuIiwgcCApOwogICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBvcHQubWQgPSBtYmVkdGxzX21kX2dldF90eXBlKCBtZF9pbmZvICk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAidmVyc2lvbiIgKSA9PSAwICkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jb25maWcucHkgYi9zY3JpcHRzL2NvbmZpZy5weQppbmRleCAwMTdiYmEwLi5hZTA2MTRhIDEwMDc1NQotLS0gYS9zY3JpcHRzL2NvbmZpZy5weQorKysgYi9zY3JpcHRzL2NvbmZpZy5weQpAQCAtMTg0LDYgKzE4NCw4IEBACiAgICAgJ01CRURUTFNfTk9fVURCTF9ESVZJU0lPTicsICMgaW5mbHVlbmNlcyBhbnl0aGluZyB0aGF0IHVzZXMgYmlnbnVtCiAgICAgJ01CRURUTFNfUEtDUzExX0MnLCAjIGJ1aWxkIGRlcGVuZGVuY3kgKGxpYnBrY3MxMS1oZWxwZXIpCiAgICAgJ01CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUycsICMgcmVtb3ZlcyBhIGZlYXR1cmUKKyAgICAnTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRycsICMgdG9nZ2xlcyBvbGQvbmV3IHN0eWxlIFBTQSBjb25maWcKKyAgICAnTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSJywgIyBpbmNvbXBhdGlibGUgd2l0aCBVU0VfUFNBX0NSWVBUTwogICAgICdNQkVEVExTX1BTQV9DUllQVE9fU1BNJywgIyBwbGF0Zm9ybSBkZXBlbmRlbmN5IChQU0EgU1BNKQogICAgICdNQkVEVExTX1BTQV9JTkpFQ1RfRU5UUk9QWScsICMgYnVpbGQgZGVwZW5kZW5jeSAoaG9vayBmdW5jdGlvbnMpCiAgICAgJ01CRURUTFNfUkVNT1ZFXzNERVNfQ0lQSEVSU1VJVEVTJywgIyByZW1vdmVzIGEgZmVhdHVyZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9kYXRhX2ZpbGVzL2Vycm9yLmZtdCBiL3NjcmlwdHMvZGF0YV9maWxlcy9lcnJvci5mbXQKaW5kZXggZmQ3MmY4Yi4uOWU0NzliYiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9kYXRhX2ZpbGVzL2Vycm9yLmZtdAorKysgYi9zY3JpcHRzL2RhdGFfZmlsZXMvZXJyb3IuZm10CkBAIC0xOSwyMCArMTksMjAgQEAKIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCi0jaWYgZGVmaW5lZChNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZKQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2VuZGlmCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VSUk9SX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWSkKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKQogCiAjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCiAjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgogI2Vsc2UKICNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiBzbnByaW50ZgotI2RlZmluZSBtYmVkdGxzX3RpbWVfdCAgIHRpbWVfdAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfQykKLQogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIEhFQURFUl9JTkNMVURFRAogCkBAIC0xNDksOCArMTQ5LDYgQEAKIAogI2Vsc2UgLyogTUJFRFRMU19FUlJPUl9DICovCiAKLSNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkpCi0KIC8qCiAgKiBQcm92aWRlIGFuIG5vbi1mdW5jdGlvbiBpbiBjYXNlIE1CRURUTFNfRVJST1JfQyBpcyBub3QgZGVmaW5lZAogICovCkBAIC0xNjIsNiArMTYwLDYgQEAKICAgICAgICAgYnVmWzBdID0gJ1wwJzsKIH0KIAotI2VuZGlmIC8qIE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkgKi8KLQogI2VuZGlmIC8qIE1CRURUTFNfRVJST1JfQyAqLworCisjZW5kaWYgLyogTUJFRFRMU19FUlJPUl9DIHx8IE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkgKi8KZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2VuZXJhdGVfcHNhX2NvbnN0YW50cy5weSBiL3NjcmlwdHMvZ2VuZXJhdGVfcHNhX2NvbnN0YW50cy5weQppbmRleCA5NWRjNGRiLi40MDFjMmZjIDEwMDc1NQotLS0gYS9zY3JpcHRzL2dlbmVyYXRlX3BzYV9jb25zdGFudHMucHkKKysrIGIvc2NyaXB0cy9nZW5lcmF0ZV9wc2FfY29uc3RhbnRzLnB5CkBAIC00MTEsNyArNDExLDcgQEAKICAgICB0ZW1wX2ZpbGVfbmFtZSA9IG91dHB1dF9maWxlX25hbWUgKyAnLnRtcCcKICAgICB3aXRoIG9wZW4odGVtcF9maWxlX25hbWUsICd3JykgYXMgb3V0cHV0X2ZpbGU6CiAgICAgICAgIGNvbGxlY3Rvci53cml0ZV9maWxlKG91dHB1dF9maWxlKQotICAgIG9zLnJlbmFtZSh0ZW1wX2ZpbGVfbmFtZSwgb3V0cHV0X2ZpbGVfbmFtZSkKKyAgICBvcy5yZXBsYWNlKHRlbXBfZmlsZV9uYW1lLCBvdXRwdXRfZmlsZV9uYW1lKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKCdwcm9ncmFtcycpIGFuZCBvcy5wYXRoLmlzZGlyKCcuLi9wcm9ncmFtcycpOgpkaWZmIC0tZ2l0IGEvdGVzdHMvQ01ha2VMaXN0cy50eHQgYi90ZXN0cy9DTWFrZUxpc3RzLnR4dAppbmRleCBjYzY4NjYzLi5mOGNlOTI1IDEwMDY0NAotLS0gYS90ZXN0cy9DTWFrZUxpc3RzLnR4dAorKysgYi90ZXN0cy9DTWFrZUxpc3RzLnR4dApAQCAtMSw1ICsxLDUgQEAKIHNldChsaWJzCi0gICAgbWJlZHRscworICAgICR7bWJlZHRsc190YXJnZXR9CiApCiAKICMgU2V0IHRoZSBwcm9qZWN0IHJvb3QgZGlyZWN0b3J5IGlmIGl0J3Mgbm90IGFscmVhZHkgZGVmaW5lZCwgYXMgbWF5IGhhcHBlbiBpZgpAQCAtNDMsNyArNDMsNyBAQAogICAgIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICAgICAgT1VUUFVUIHRlc3Rfc3VpdGVfJHtkYXRhX25hbWV9LmMKICAgICAgICAgQ09NTUFORCAke01CRURUTFNfUFlUSE9OX0VYRUNVVEFCTEV9ICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zY3JpcHRzL2dlbmVyYXRlX3Rlc3RfY29kZS5weSAtZiAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3VpdGVzL3Rlc3Rfc3VpdGVfJHtzdWl0ZV9uYW1lfS5mdW5jdGlvbiAtZCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3VpdGVzL3Rlc3Rfc3VpdGVfJHtkYXRhX25hbWV9LmRhdGEgLXQgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3N1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24gLXAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3N1aXRlcy9ob3N0X3Rlc3QuZnVuY3Rpb24gLXMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3N1aXRlcyAtLWhlbHBlcnMtZmlsZSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gLW8gLgotICAgICAgICBERVBFTkRTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zY3JpcHRzL2dlbmVyYXRlX3Rlc3RfY29kZS5weSBtYmVkdGxzICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zdWl0ZXMvaGVscGVycy5mdW5jdGlvbiAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbiAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3VpdGVzL2hvc3RfdGVzdC5mdW5jdGlvbiAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3VpdGVzL3Rlc3Rfc3VpdGVfJHtzdWl0ZV9uYW1lfS5mdW5jdGlvbiAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3VpdGVzL3Rlc3Rfc3VpdGVfJHtkYXRhX25hbWV9LmRhdGEKKyAgICAgICAgREVQRU5EUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc2NyaXB0cy9nZW5lcmF0ZV90ZXN0X2NvZGUucHkgJHttYmVkdGxzX3RhcmdldH0gJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3N1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zdWl0ZXMvaG9zdF90ZXN0LmZ1bmN0aW9uICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zdWl0ZXMvdGVzdF9zdWl0ZV8ke3N1aXRlX25hbWV9LmZ1bmN0aW9uICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zdWl0ZXMvdGVzdF9zdWl0ZV8ke2RhdGFfbmFtZX0uZGF0YQogICAgICkKIAogICAgIGFkZF9leGVjdXRhYmxlKHRlc3Rfc3VpdGVfJHtkYXRhX25hbWV9IHRlc3Rfc3VpdGVfJHtkYXRhX25hbWV9LmMgJDxUQVJHRVRfT0JKRUNUUzptYmVkdGxzX3Rlc3Q+KQpAQCAtMTY2LDYgKzE2Niw3IEBACiAgICAgICAgIGxpbmtfdG9fc291cmNlKHNlZWRmaWxlKQogICAgIGVuZGlmKCkKICAgICBsaW5rX3RvX3NvdXJjZShjb21wYXQuc2gpCisgICAgbGlua190b19zb3VyY2UoY29udGV4dC1pbmZvLnNoKQogICAgIGxpbmtfdG9fc291cmNlKGRhdGFfZmlsZXMpCiAgICAgbGlua190b19zb3VyY2Uoc2NyaXB0cykKICAgICBsaW5rX3RvX3NvdXJjZShzc2wtb3B0LnNoKQpkaWZmIC0tZ2l0IGEvdGVzdHMvY29tcGF0LnNoIGIvdGVzdHMvY29tcGF0LnNoCmluZGV4IDY4YjlmNzQuLjZlMGE4ZjkgMTAwNzU1Ci0tLSBhL3Rlc3RzL2NvbXBhdC5zaAorKysgYi90ZXN0cy9jb21wYXQuc2gKQEAgLTkwLDEyICs5MCwxMiBAQAogcHJpbnRfdXNhZ2UoKSB7CiAgICAgZWNobyAiVXNhZ2U6ICQwIgogICAgIHByaW50ZiAiICAtaHwtLWhlbHBcdFByaW50IHRoaXMgaGVscC5cbiIKLSAgICBwcmludGYgIiAgLWZ8LS1maWx0ZXJcdE9ubHkgbWF0Y2hpbmcgY2lwaGVyc3VpdGVzIGFyZSB0ZXN0ZWQgKERlZmF1bHQ6ICckRklMVEVSJylcbiIKLSAgICBwcmludGYgIiAgLWV8LS1leGNsdWRlXHRNYXRjaGluZyBjaXBoZXJzdWl0ZXMgYXJlIGV4Y2x1ZGVkIChEZWZhdWx0OiAnJEVYQ0xVREUnKVxuIgotICAgIHByaW50ZiAiICAtbXwtLW1vZGVzXHRXaGljaCBtb2RlcyB0byBwZXJmb3JtIChEZWZhdWx0OiAnJE1PREVTJylcbiIKLSAgICBwcmludGYgIiAgLXR8LS10eXBlc1x0V2hpY2gga2V5IGV4Y2hhbmdlIHR5cGUgdG8gcGVyZm9ybSAoRGVmYXVsdDogJyRUWVBFUycpXG4iCi0gICAgcHJpbnRmICIgIC1WfC0tdmVyaWZ5XHRXaGljaCB2ZXJpZmljYXRpb24gbW9kZXMgdG8gcGVyZm9ybSAoRGVmYXVsdDogJyRWRVJJRklFUycpXG4iCi0gICAgcHJpbnRmICIgIC1wfC0tcGVlcnNcdFdoaWNoIHBlZXJzIHRvIHVzZSAoRGVmYXVsdDogJyRQRUVSUycpXG4iCisgICAgcHJpbnRmICIgIC1mfC0tZmlsdGVyXHRPbmx5IG1hdGNoaW5nIGNpcGhlcnN1aXRlcyBhcmUgdGVzdGVkIChEZWZhdWx0OiAnJXMnKVxuIiAiJEZJTFRFUiIKKyAgICBwcmludGYgIiAgLWV8LS1leGNsdWRlXHRNYXRjaGluZyBjaXBoZXJzdWl0ZXMgYXJlIGV4Y2x1ZGVkIChEZWZhdWx0OiAnJXMnKVxuIiAiJEVYQ0xVREUiCisgICAgcHJpbnRmICIgIC1tfC0tbW9kZXNcdFdoaWNoIG1vZGVzIHRvIHBlcmZvcm0gKERlZmF1bHQ6ICclcycpXG4iICIkTU9ERVMiCisgICAgcHJpbnRmICIgIC10fC0tdHlwZXNcdFdoaWNoIGtleSBleGNoYW5nZSB0eXBlIHRvIHBlcmZvcm0gKERlZmF1bHQ6ICclcycpXG4iICIkVFlQRVMiCisgICAgcHJpbnRmICIgIC1WfC0tdmVyaWZ5XHRXaGljaCB2ZXJpZmljYXRpb24gbW9kZXMgdG8gcGVyZm9ybSAoRGVmYXVsdDogJyVzJylcbiIgIiRWRVJJRklFUyIKKyAgICBwcmludGYgIiAgLXB8LS1wZWVyc1x0V2hpY2ggcGVlcnMgdG8gdXNlIChEZWZhdWx0OiAnJXMnKVxuIiAiJFBFRVJTIgogICAgIHByaW50ZiAiICAgICAgICAgICAgXHRBbHNvIGF2YWlsYWJsZTogR251VExTIChuZWVkcyB2My4yLjE1IG9yIGhpZ2hlcilcbiIKICAgICBwcmludGYgIiAgLU18LS1tZW1jaGVja1x0Q2hlY2sgbWVtb3J5IGxlYWtzIGFuZCBlcnJvcnMuXG4iCiAgICAgcHJpbnRmICIgIC12fC0tdmVyYm9zZVx0U2V0IHZlcmJvc2Ugb3V0cHV0LlxuIgpAQCAtMTEwNyw3ICsxMTA3LDcgQEAKICAgICBWRVJJRj0kKGVjaG8gJFZFUklGWSB8IHRyICdbOnVwcGVyOl0nICdbOmxvd2VyOl0nKQogICAgIFRJVExFPSJgZWNobyAkMSB8IGhlYWQgLWMxYC0+YGVjaG8gJFNFUlZFUl9OQU1FIHwgaGVhZCAtYzFgIgogICAgIFRJVExFPSIkVElUTEUgJE1PREUsJFZFUklGICQyIgotICAgIHByaW50ZiAiJFRJVExFICIKKyAgICBwcmludGYgIiVzICIgIiRUSVRMRSIKICAgICBMRU49JCgoIDcyIC0gYGVjaG8gIiRUSVRMRSIgfCB3YyAtY2AgKSkKICAgICBmb3IgaSBpbiBgc2VxIDEgJExFTmA7IGRvIHByaW50ZiAnLic7IGRvbmU7IHByaW50ZiAnICcKIApkaWZmIC0tZ2l0IGEvdGVzdHMvY29udGV4dC1pbmZvLnNoIGIvdGVzdHMvY29udGV4dC1pbmZvLnNoCmluZGV4IDE1MDU4NGIuLjM0NjUyOTggMTAwNzU1Ci0tLSBhL3Rlc3RzL2NvbnRleHQtaW5mby5zaAorKysgYi90ZXN0cy9jb250ZXh0LWluZm8uc2gKQEAgLTQzMCwxMyArNDMwLDE5IEBACiAgICAgICAgICAtdSAiVG9vIG1hbnkgYmFkIHN5bWJvbHMgZGV0ZWN0ZWQuIEZpbGUgY2hlY2sgYWJvcnRlZCIgXAogICAgICAgICAgLW4gIkRlc2VyaWFsaXppbmciCiAKK3J1bl90ZXN0ICJEZWNvZGVyIGNvbnRpbnVlcyBwYXN0IDB4ZmYgY2hhcmFjdGVyIiBcCisgICAgICAgICAiZGVmX2I2NF9mZi5iaW4iIFwKKyAgICAgICAgIC1uICJObyB2YWxpZCBiYXNlNjQiIFwKKyAgICAgICAgIC11ICJjaXBoZXJzdWl0ZS4qIFRMUy0iCisKIAogIyBFbmQgb2YgdGVzdHMKIAorZWNobwogaWYgWyAkVF9GQUlMRUQgLWVxIDAgXTsgdGhlbgotICAgIHByaW50ZiAiXG5QQVNTRUQgKCAkVF9DT1VOVCB0ZXN0cyApXG4iCisgICAgZWNobyAiUEFTU0VEICggJFRfQ09VTlQgdGVzdHMgKSIKIGVsc2UKLSAgICBwcmludGYgIlxuRkFJTEVEICggJFRfRkFJTEVEIC8gJFRfQ09VTlQgdGVzdHMgKVxuIgorICAgIGVjaG8gIkZBSUxFRCAoICRUX0ZBSUxFRCAvICRUX0NPVU5UIHRlc3RzICkiCiBmaQogCiBleGl0ICRUX0ZBSUxFRApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YV9maWxlcy9NYWtlZmlsZSBiL3Rlc3RzL2RhdGFfZmlsZXMvTWFrZWZpbGUKaW5kZXggODhmMjY1Yy4uYmYyZjUzOCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YV9maWxlcy9NYWtlZmlsZQorKysgYi90ZXN0cy9kYXRhX2ZpbGVzL01ha2VmaWxlCkBAIC0xMyw4ICsxMywxMCBAQAogIyMgVG9vbHMKIE9QRU5TU0wgPz0gb3BlbnNzbAogRkFLRVRJTUUgPz0gZmFrZXRpbWUKLU1CRURUTFNfQ0VSVF9XUklURSA/PSAkKFBXRCkvLi4vLi4vcHJvZ3JhbXMveDUwOS9jZXJ0X3dyaXRlCi1NQkVEVExTX0NFUlRfUkVRID89ICQoUFdEKS8uLi8uLi9wcm9ncmFtcy94NTA5L2NlcnRfcmVxCisKK1RPUF9ESVIgPSAuLi8uLgorTUJFRFRMU19DRVJUX1dSSVRFID89ICQoVE9QX0RJUikvcHJvZ3JhbXMveDUwOS9jZXJ0X3dyaXRlCitNQkVEVExTX0NFUlRfUkVRID89ICQoVE9QX0RJUikvcHJvZ3JhbXMveDUwOS9jZXJ0X3JlcQogCiAKICMjIEJ1aWxkIHRoZSBnZW5lcmF0ZWQgdGVzdCBkYXRhLiBOb3RlIHRoYXQgc2luY2UgdGhlIGZpbmFsIG91dHB1dHMKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGFfZmlsZXMvYmFzZTY0L2RlZl9iNjRfZmYuYmluIGIvdGVzdHMvZGF0YV9maWxlcy9iYXNlNjQvZGVmX2I2NF9mZi5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhYTgyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGFfZmlsZXMvYmFzZTY0L2RlZl9iNjRfZmYuYmluCkBAIC0wLDAgKzEsNSBAQAorLy8gRW5zdXJlIHRoYXQgdGhlIGI2NCBwYXJzZXIgY29udGludWVzIGFmdGVyIGVuY291bnRlcmluZyBhIDB4RkYKKy8vIGNoYXJhY3Rlci4gIE5vdGUgdGhhdCB0aGlzIGJ5dGUgaXMgaW52YWxpZCBVVEYtOCwgbWFraW5nIHRoaXMKKy8vIGVudGlyZSBmaWxlIGludmFsaWQgVVRGLTguICBVc2UgY2FyZSB3aGVuIGVkaXRpbmcuCisvLyAtPiD/IDwtCitBaFVBQUg4QUFBNEFBQUJ0QUFBQUFGNkhReDNNcUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNHMlFiSGJVajhlR3BkeDVLVkllYml3azBqdlJqOS8zbTZCT1N6cEE3cUJYZUV1bmhxcjNEMTFORTdjaUdqZUhNQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQVY2SFF4MjQ4TDc3UkgwWjk3M3RTWU5ROHpCc3o4NjFDWkc1L1QwOVRKejNYb2RESGUvaUorY2dYYjVBbjN6VGRuVEJ0dzNFV0FiNjhUK2dDRTMzR044QUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUF3QUFBUUFBQUFBQUFnQUFBQT09CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQyLmNzciBiL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9tZDIuY3NyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YzM5YmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQyLmNzcgpAQCAtMCwwICsxLDE2IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQ2dUQ0NBV2tDQVFBd1BERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9NQ0ZCdmJHRnlVMU5NTVJvdworR0FZRFZRUUREQkZRYjJ4aGNsTlRUQ0JEWlhKMElFMUVNakNDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUAorQURDQ0FRb0NnZ0VCQU1oMHhNeTUrYlY1NlVYWkZHQ3dmYnVUOG1zZW56T3REWStLUEZabDVkeEUyY3htaFFmVgorK0Nld1NqWFFZNTRLYmh1MzJ2QitxKzRNRUpPR1NSZzA4NmdxMGxmMUx0UXZkeW1FWVUyQ1VJK25sVWh3OVc1Tgorc3RVVHc5SWE3ZVpENmtJVTYzVHF3TzBmMUZkT3FmT283ZExnd1RCeE1ESXcxZFAyQ05CV1QwYU84bC81UFdlUgoraURBdVFyTGZmZnZsREhmLzdESEFlSSsvd24vS3JXd2gxbzNaaTJxT2IrQ2IrQkJXekxPT0V4WG1OQVJteCs3NQorTmc1cWxmWUptZ1puOUdWeCtNcWtzU1hnL2p5TE5RUm51dUJQZG9YOGYvdzJhN1hwelMwRFlrNnpQUURQcjNhZworYVZhRGF0S28xT2RRY2VhMU5nVjNCVzE3eU9URS9VelZJVjhDQXdFQUFhQUFNQTBHQ1NxR1NJYjNEUUVCQWdVQQorQTRJQkFRQlBVcW9kUmNIMlpVYThBM2ZRWC9ueHJJd1dpTG1ROUJhT0k2Rzd2ekVXVkUxc3hta3JIUCtwWGdpOQorMWVGY2VOOXhVQktFZCtMbVVQbUhwT2JaNG53UlNwckZqM0RlSVhwbjlhU0JyK2pHWThSYWFDOWNNa2FTcTVNYgorcTY1VEhFSjF4ZW1JZlp2Ymhqdk5pL3ljWFh1L3YxR3BqNjJkcElGR2JtK280QVhRRjJvY1lHRU0rWDF1MmVWbgorbW51dXZQQUhUbGxHakIwZGFUU1lvUXRNeTNsdVBVRWowWWN0M2lWUjFwVWVUckhjaE9zOXA1QUNEWmNmNkQzeAorc205YXRIMlpJYVhvMWM5U3FIemRrL3VMdC9Dd3hRcm4xV1UxaW53T2t6amltMllxOXZXZ3BReXBmR1pkU2NYVgorb0hPbXVHRzkwMVdNTWVtelpYam9MaSs4WnBWTAorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQ0LmNzciBiL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9tZDQuY3NyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YTNkYmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQ0LmNzcgpAQCAtMCwwICsxLDE2IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQ2dUQ0NBV2tDQVFBd1BERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9NQ0ZCdmJHRnlVMU5NTVJvdworR0FZRFZRUUREQkZRYjJ4aGNsTlRUQ0JEWlhKMElFMUVORENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUAorQURDQ0FRb0NnZ0VCQU1oMHhNeTUrYlY1NlVYWkZHQ3dmYnVUOG1zZW56T3REWStLUEZabDVkeEUyY3htaFFmVgorK0Nld1NqWFFZNTRLYmh1MzJ2QitxKzRNRUpPR1NSZzA4NmdxMGxmMUx0UXZkeW1FWVUyQ1VJK25sVWh3OVc1Tgorc3RVVHc5SWE3ZVpENmtJVTYzVHF3TzBmMUZkT3FmT283ZExnd1RCeE1ESXcxZFAyQ05CV1QwYU84bC81UFdlUgoraURBdVFyTGZmZnZsREhmLzdESEFlSSsvd24vS3JXd2gxbzNaaTJxT2IrQ2IrQkJXekxPT0V4WG1OQVJteCs3NQorTmc1cWxmWUptZ1puOUdWeCtNcWtzU1hnL2p5TE5RUm51dUJQZG9YOGYvdzJhN1hwelMwRFlrNnpQUURQcjNhZworYVZhRGF0S28xT2RRY2VhMU5nVjNCVzE3eU9URS9VelZJVjhDQXdFQUFhQUFNQTBHQ1NxR1NJYjNEUUVCQXdVQQorQTRJQkFRQXp0UmIrdkFlY3ZoZWxoc3p6Q2N0em1oR3M0VEdtcjloNHpkZFpvUThkVGR5MU9Dc25tVSt5ejNvaAorb2lRank3VVBMdDhEUzJaS2hHaHZ3UHZ0d0ZoNWljTVdRVm52MmtFNEV2ejh4SlQxMlZSdytVNkw1cmZLbWYvTAorbVZOeHN1azE3TUR5QmNNbHd1TmsrQ0hyWVZkclhoU1dVSDNVQ1FRVUgxaXFxQk1LbU5pUGExVUdVMGJ1ZFo5WAorSFpqbjl1cXl5T0d5OGwzaGZmcWpEeHNEalp5QkRmNWFxS0lkbnZ1a2RyVWlhY1BkVVlWRjBmd0s4ZDEvMVBBOQorZEE0SmpUdnordFRLNm1MOUljOVB2KzY0djF2d01VNFF1OElKSGs1eDNJMGU3S3VLMkEvbEs2YXoyVmI2RkFoNgorTWtHcFdCNjhUOEZSQm9WcldMT2grYTl5Tnd5cAorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQ1LmNzciBiL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9tZDUuY3NyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNjc5MmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQ1LmNzcgpAQCAtMCwwICsxLDE2IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQ2dUQ0NBV2tDQVFBd1BERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9NQ0ZCdmJHRnlVMU5NTVJvdworR0FZRFZRUUREQkZRYjJ4aGNsTlRUQ0JEWlhKMElFMUVOVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUAorQURDQ0FRb0NnZ0VCQU1oMHhNeTUrYlY1NlVYWkZHQ3dmYnVUOG1zZW56T3REWStLUEZabDVkeEUyY3htaFFmVgorK0Nld1NqWFFZNTRLYmh1MzJ2QitxKzRNRUpPR1NSZzA4NmdxMGxmMUx0UXZkeW1FWVUyQ1VJK25sVWh3OVc1Tgorc3RVVHc5SWE3ZVpENmtJVTYzVHF3TzBmMUZkT3FmT283ZExnd1RCeE1ESXcxZFAyQ05CV1QwYU84bC81UFdlUgoraURBdVFyTGZmZnZsREhmLzdESEFlSSsvd24vS3JXd2gxbzNaaTJxT2IrQ2IrQkJXekxPT0V4WG1OQVJteCs3NQorTmc1cWxmWUptZ1puOUdWeCtNcWtzU1hnL2p5TE5RUm51dUJQZG9YOGYvdzJhN1hwelMwRFlrNnpQUURQcjNhZworYVZhRGF0S28xT2RRY2VhMU5nVjNCVzE3eU9URS9VelZJVjhDQXdFQUFhQUFNQTBHQ1NxR1NJYjNEUUVCQkFVQQorQTRJQkFRQk5FdnhnbjNQYzYyaHNNZ016MzNJZGVOcGF6ZUszYWUyZ3dRUUZnTDdxTXAva3NrZnBJS0Y0bThlQgorWXJtaktuOWNxc3pSRDYwNi9adFdZRHdJTlVVYzZPN2JRR21wR0lGZDdiU1BtL3Bic2FqYzZSN2t6QS90RC9iaworRzV6cXU5QmoweDkyaEV3ZGt1MHpZK0h4OVBnVDJkSzhNNzJpRnlsSEJ3VDNYMXROeVhoaDd4V0o5UmxBZlN2TgorS2RTNnMza1JqSzRxY2lyME1uZmxWNWYySEQ2cjF2OWNTVnltZTZlVkx2T211cDg5ejBjaWhIN05Ed0RKYVliaQorb3FjS1hGYnJvOC8ycnVFelBVUzZVOE5BOWNqbFg5RFc4YnVJdTRjUUFDVng1WWV2bHdLb2F5WWZYY1JSdklGbworT0xpUHExNFR1WmozYzArSEZPeFdqNFVCQWp2SQorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9pbmNsdWRlL3Rlc3QvZHJpdmVycy9rZXlfbWFuYWdlbWVudC5oIGIvdGVzdHMvaW5jbHVkZS90ZXN0L2RyaXZlcnMva2V5X21hbmFnZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGY4YzU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaW5jbHVkZS90ZXN0L2RyaXZlcnMva2V5X21hbmFnZW1lbnQuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogVGVzdCBkcml2ZXIgZm9yIGdlbmVyYXRpbmcgYW5kIHZlcmlmeWluZyBrZXlzLgorICovCisvKiAgQ29weXJpZ2h0IFRoZSBNYmVkIFRMUyBDb250cmlidXRvcnMKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBQU0FfQ1JZUFRPX1RFU1RfRFJJVkVSU19LRVlfTUFOQUdFTUVOVF9ICisjZGVmaW5lIFBTQV9DUllQVE9fVEVTVF9EUklWRVJTX0tFWV9NQU5BR0VNRU5UX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyNpbmNsdWRlIDxwc2EvY3J5cHRvX2RyaXZlcl9jb21tb24uaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIElmIG5vbi1udWxsLCBvbiBzdWNjZXNzLCBjb3B5IHRoaXMgdG8gdGhlIG91dHB1dC4gKi8KKyAgICB2b2lkICpmb3JjZWRfb3V0cHV0OworICAgIHNpemVfdCBmb3JjZWRfb3V0cHV0X2xlbmd0aDsKKyAgICAvKiBJZiBub3QgUFNBX1NVQ0NFU1MsIHJldHVybiB0aGlzIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBwcm9jZXNzaW5nIHRoZQorICAgICAqIGZ1bmN0aW9uIGNhbGwuICovCisgICAgcHNhX3N0YXR1c190IGZvcmNlZF9zdGF0dXM7CisgICAgLyogQ291bnQgdGhlIGFtb3VudCBvZiB0aW1lcyBvbmUgb2YgdGhlIGtleSBtYW5hZ2VtZW50IGRyaXZlciBmdW5jdGlvbnMKKyAgICAgKiBpcyBjYWxsZWQuICovCisgICAgdW5zaWduZWQgbG9uZyBoaXRzOworfSB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rc190OworCisjZGVmaW5lIFRFU1RfRFJJVkVSX0tFWV9NQU5BR0VNRU5UX0lOSVQgeyBOVUxMLCAwLCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCwgMCB9CitzdGF0aWMgaW5saW5lIHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzX3QgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3NfaW5pdCggdm9pZCApCit7CisgICAgY29uc3QgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3NfdCB2ID0gVEVTVF9EUklWRVJfS0VZX01BTkFHRU1FTlRfSU5JVDsKKyAgICByZXR1cm4oIHYgKTsKK30KKworZXh0ZXJuIHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzX3QgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3M7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X3RyYW5zcGFyZW50X2dlbmVyYXRlX2tleSgKKyAgICBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICB1aW50OF90ICprZXksIHNpemVfdCBrZXlfc2l6ZSwgc2l6ZV90ICprZXlfbGVuZ3RoICk7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X29wYXF1ZV9nZW5lcmF0ZV9rZXkoCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X3NpemUsIHNpemVfdCAqa2V5X2xlbmd0aCApOworCitwc2Ffc3RhdHVzX3QgdGVzdF90cmFuc3BhcmVudF92YWxpZGF0ZV9rZXkoCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgY29uc3QgdWludDhfdCAqZGF0YSwKKyAgICBzaXplX3QgZGF0YV9sZW5ndGgsCisgICAgc2l6ZV90ICpiaXRzKTsKKworcHNhX3N0YXR1c190IHRlc3RfdHJhbnNwYXJlbnRfZXhwb3J0X3B1YmxpY19rZXkoCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgY29uc3QgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X2xlbmd0aCwKKyAgICB1aW50OF90ICpkYXRhLCBzaXplX3QgZGF0YV9zaXplLCBzaXplX3QgKmRhdGFfbGVuZ3RoICk7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X29wYXF1ZV9leHBvcnRfcHVibGljX2tleSgKKyAgICBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICBjb25zdCB1aW50OF90ICprZXksIHNpemVfdCBrZXlfbGVuZ3RoLAorICAgIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBkYXRhX3NpemUsIHNpemVfdCAqZGF0YV9sZW5ndGggKTsKKworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX1RFU1RfRFJJVkVSU19LRVlfTUFOQUdFTUVOVF9IICovCmRpZmYgLS1naXQgYS90ZXN0cy9pbmNsdWRlL3Rlc3QvZHJpdmVycy9rZXlnZW4uaCBiL3Rlc3RzL2luY2x1ZGUvdGVzdC9kcml2ZXJzL2tleWdlbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzJjNjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2luY2x1ZGUvdGVzdC9kcml2ZXJzL2tleWdlbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIFRlc3QgZHJpdmVyIGZvciBnZW5lcmF0aW5nIGtleXMuCi0gKi8KLS8qICBDb3B5cmlnaHQgVGhlIE1iZWQgVExTIENvbnRyaWJ1dG9ycwotICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0gKgotICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5Ci0gKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi0gKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIFBTQV9DUllQVE9fVEVTVF9EUklWRVJTX0tFWUdFTl9ICi0jZGVmaW5lIFBTQV9DUllQVE9fVEVTVF9EUklWRVJTX0tFWUdFTl9ICi0KLSNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQotI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCi0jZWxzZQotI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCi0jaW5jbHVkZSA8cHNhL2NyeXB0b19kcml2ZXJfY29tbW9uLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICAvKiBJZiBub24tbnVsbCwgb24gc3VjY2VzcywgY29weSB0aGlzIHRvIHRoZSBvdXRwdXQuICovCi0gICAgdm9pZCAqZm9yY2VkX291dHB1dDsKLSAgICBzaXplX3QgZm9yY2VkX291dHB1dF9sZW5ndGg7Ci0gICAgLyogSWYgbm90IFBTQV9TVUNDRVNTLCByZXR1cm4gdGhpcyBlcnJvciBjb2RlIGluc3RlYWQgb2YgcHJvY2Vzc2luZyB0aGUKLSAgICAgKiBmdW5jdGlvbiBjYWxsLiAqLwotICAgIHBzYV9zdGF0dXNfdCBmb3JjZWRfc3RhdHVzOwotICAgIC8qIENvdW50IHRoZSBhbW91bnQgb2YgdGltZXMgb25lIG9mIHRoZSBrZXlnZW4gZHJpdmVyIGZ1bmN0aW9ucyBpcyBjYWxsZWQuICovCi0gICAgdW5zaWduZWQgbG9uZyBoaXRzOwotfSB0ZXN0X2RyaXZlcl9rZXlnZW5faG9va3NfdDsKLQotI2RlZmluZSBURVNUX0RSSVZFUl9LRVlHRU5fSU5JVCB7IE5VTEwsIDAsIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVELCAwIH0KLXN0YXRpYyBpbmxpbmUgdGVzdF9kcml2ZXJfa2V5Z2VuX2hvb2tzX3QgdGVzdF9kcml2ZXJfa2V5Z2VuX2hvb2tzX2luaXQoIHZvaWQgKQotewotICAgIGNvbnN0IHRlc3RfZHJpdmVyX2tleWdlbl9ob29rc190IHYgPSBURVNUX0RSSVZFUl9LRVlHRU5fSU5JVDsKLSAgICByZXR1cm4oIHYgKTsKLX0KLQotZXh0ZXJuIHRlc3RfZHJpdmVyX2tleWdlbl9ob29rc190IHRlc3RfZHJpdmVyX2tleWdlbl9ob29rczsKLQotcHNhX3N0YXR1c190IHRlc3RfdHJhbnNwYXJlbnRfZ2VuZXJhdGVfa2V5KAotICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAotICAgIHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9zaXplLCBzaXplX3QgKmtleV9sZW5ndGggKTsKLQotcHNhX3N0YXR1c190IHRlc3Rfb3BhcXVlX2dlbmVyYXRlX2tleSgKLSAgICBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKLSAgICB1aW50OF90ICprZXksIHNpemVfdCBrZXlfc2l6ZSwgc2l6ZV90ICprZXlfbGVuZ3RoICk7Ci0KLSNlbmRpZiAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9URVNUICovCi0jZW5kaWYgLyogUFNBX0NSWVBUT19URVNUX0RSSVZFUlNfS0VZR0VOX0ggKi8KZGlmZiAtLWdpdCBhL3Rlc3RzL2luY2x1ZGUvdGVzdC9kcml2ZXJzL3NpZ25hdHVyZS5oIGIvdGVzdHMvaW5jbHVkZS90ZXN0L2RyaXZlcnMvc2lnbmF0dXJlLmgKaW5kZXggZTQxODkyZS4uOGFiY2IxMSAxMDA2NDQKLS0tIGEvdGVzdHMvaW5jbHVkZS90ZXN0L2RyaXZlcnMvc2lnbmF0dXJlLmgKKysrIGIvdGVzdHMvaW5jbHVkZS90ZXN0L2RyaXZlcnMvc2lnbmF0dXJlLmgKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAvKiBJZiBub3QgUFNBX1NVQ0NFU1MsIHJldHVybiB0aGlzIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBwcm9jZXNzaW5nIHRoZQogICAgICAqIGZ1bmN0aW9uIGNhbGwuICovCiAgICAgcHNhX3N0YXR1c190IGZvcmNlZF9zdGF0dXM7Ci0gICAgLyogQ291bnQgdGhlIGFtb3VudCBvZiB0aW1lcyBvbmUgb2YgdGhlIGtleWdlbiBkcml2ZXIgZnVuY3Rpb25zIGlzIGNhbGxlZC4gKi8KKyAgICAvKiBDb3VudCB0aGUgYW1vdW50IG9mIHRpbWVzIG9uZSBvZiB0aGUgc2lnbmF0dXJlIGRyaXZlciBmdW5jdGlvbnMgaXMgY2FsbGVkLiAqLwogICAgIHVuc2lnbmVkIGxvbmcgaGl0czsKIH0gdGVzdF9kcml2ZXJfc2lnbmF0dXJlX2hvb2tzX3Q7CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL2luY2x1ZGUvdGVzdC9kcml2ZXJzL3NpemUuaCBiL3Rlc3RzL2luY2x1ZGUvdGVzdC9kcml2ZXJzL3NpemUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZlOTg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaW5jbHVkZS90ZXN0L2RyaXZlcnMvc2l6ZS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBUZXN0IGRyaXZlciBmb3IgY29udGV4dCBzaXplIGZ1bmN0aW9ucworICovCisvKiAgQ29weXJpZ2h0IFRoZSBNYmVkIFRMUyBDb250cmlidXRvcnMKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBQU0FfQ1JZUFRPX1RFU1RfRFJJVkVSU19TSVpFX0gKKyNkZWZpbmUgUFNBX0NSWVBUT19URVNUX0RSSVZFUlNfU0laRV9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisjaW5jbHVkZSA8cHNhL2NyeXB0b19kcml2ZXJfY29tbW9uLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQgY29udGV4dDsKK30gdGVzdF9kcml2ZXJfa2V5X2NvbnRleHRfdDsKKworLyoqIFxkZWYgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfQkFTRV9TSVpFCisgKgorICogVGhpcyBtYWNybyByZXR1cm5zIHRoZSBiYXNlIHNpemUgZm9yIHRoZSBrZXkgY29udGV4dC4gSXQgaXMgdGhlIHNpemUgb2YgdGhlCisgKiBkcml2ZXIgc3BlY2lmaWMgaW5mb3JtYXRpb24gc3RvcmVkIGluIGVhY2gga2V5IGNvbnRleHQuCisgKi8KKyNkZWZpbmUgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfQkFTRV9TSVpFICAgICAgICAgIHNpemVvZiggdGVzdF9kcml2ZXJfa2V5X2NvbnRleHRfdCApCisKKy8qKiBcZGVmIFRFU1RfRFJJVkVSX0tFWV9DT05URVhUX0tFWV9QQUlSX1NJWkUKKyAqCisgKiBOdW1iZXIgb2YgYnl0ZXMgaW5jbHVkZWQgaW4gZXZlcnkga2V5IGNvbnRleHQgZm9yIGEga2V5IHBhaXIuCisgKgorICogVGhpcyBwYWlyIHNpemUgaXMgZm9yIGFuIEVDQyAyNTYtYml0IHByaXZhdGUvcHVibGljIGtleSBwYWlyLgorICogQmFzZWQgb24gdGhpcyB2YWx1ZSwgdGhlIHNpemUgb2YgdGhlIHByaXZhdGUga2V5IGNhbiBiZSBkZXJpdmVkIGJ5CisgKiBzdWJ0cmFjdGluZyB0aGUgcHVibGljIGtleSBzaXplIGJlbG93IGZyb20gdGhpcyBvbmUuCisgKi8KKworI2RlZmluZSBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9LRVlfUEFJUl9TSVpFICAgICAgNjUKKworLyoqIFxkZWYgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfUFVCTElDX0tFWV9TSVpFCisgKgorICogTnVtYmVyIG9mIGJ5dGVzIGluY2x1ZGVkIGluIGV2ZXJ5IGtleSBjb250ZXh0IGZvciBhIHB1YmxpYyBrZXkuCisgKgorICogRm9yIEVDQyBwdWJsaWMga2V5cywgaXQgbmVlZHMgMjU3IGJpdHMgc28gMzMgYnl0ZXMuCisgKi8KKyNkZWZpbmUgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfUFVCTElDX0tFWV9TSVpFICAgIDMzCisKKy8qKiBcZGVmIFRFU1RfRFJJVkVSX0tFWV9DT05URVhUX1NZTU1FVFJJQ19GQUNUT1IKKyAqCisgKiBFdmVyeSBrZXkgY29udGV4dCBmb3IgYSBzeW1tZXRyaWMga2V5IGluY2x1ZGVzIHRoaXMgbWFueSB0aW1lcyB0aGUga2V5IHNpemUuCisgKi8KKyNkZWZpbmUgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfU1lNTUVUUklDX0ZBQ1RPUiAgIDAKKworLyoqIFxkZWYgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfU1RPUkVfUFVCTElDX0tFWQorICoKKyAqIElmIHRoaXMgaXMgdHJ1ZSBmb3IgYSBrZXkgcGFpciwgdGhlIGtleSBjb250ZXh0IGluY2x1ZGVzIHNwYWNlIGZvciB0aGUgcHVibGljIGtleS4KKyAqIElmIHRoaXMgaXMgZmFsc2UsIG5vIGFkZGl0aW9uYWwgc3BhY2UgaXMgYWRkZWQgZm9yIHRoZSBwdWJsaWMga2V5LgorICoKKyAqIEZvciB0aGlzIGluc3RhbmNlLCBzdG9yZSB0aGUgcHVibGljIGtleSB3aXRoIHRoZSBwcml2YXRlIG9uZS4KKyAqLworI2RlZmluZSBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9TVE9SRV9QVUJMSUNfS0VZICAgMQorCisvKiogXGRlZiBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9TSVpFX0ZVTkNUSU9OCisgKgorICogSWYgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfU0laRV9GVU5DVElPTiBpcyBkZWZpbmVkLCB0aGUgdGVzdCBkcml2ZXIKKyAqIHByb3ZpZGVzIGEgc2l6ZV9mdW5jdGlvbiBlbnRyeSBwb2ludCwgb3RoZXJ3aXNlLCBpdCBkb2VzIG5vdC4KKyAqCisgKiBTb21lIG9wYXF1ZSBkcml2ZXJzIGhhdmUgdGhlIG5lZWQgdG8gc3VwcG9ydCBhIGN1c3RvbSBzaXplIGZvciB0aGUgc3RvcmFnZQorICogb2Yga2V5IGFuZCBjb250ZXh0IGluZm9ybWF0aW9uLiBUaGUgc2l6ZV9mdW5jdGlvbiBwcm92aWRlcyB0aGUgYWJpbGl0eSB0bworICogcHJvdmlkZSB0aGF0IGN1c3RvbWl6YXRpb24uCisgKi8KKy8vI2RlZmluZSBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9TSVpFX0ZVTkNUSU9OCisKKyNpZmRlZiBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9TSVpFX0ZVTkNUSU9OCitzaXplX3QgdGVzdF9zaXplX2Z1bmN0aW9uKAorICAgIGNvbnN0IHBzYV9rZXlfdHlwZV90IGtleV90eXBlLAorICAgIGNvbnN0IHNpemVfdCBrZXlfYml0cyApOworI2VuZGlmIC8qIFRFU1RfRFJJVkVSX0tFWV9DT05URVhUX1NJWkVfRlVOQ1RJT04gKi8KKworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX1RFU1RfRFJJVkVSU19TSVpFX0ggKi8KZGlmZiAtLWdpdCBhL3Rlc3RzL2luY2x1ZGUvdGVzdC9kcml2ZXJzL3Rlc3RfZHJpdmVyLmggYi90ZXN0cy9pbmNsdWRlL3Rlc3QvZHJpdmVycy90ZXN0X2RyaXZlci5oCmluZGV4IDdlZThlNWUuLmYyNmI3OTUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2luY2x1ZGUvdGVzdC9kcml2ZXJzL3Rlc3RfZHJpdmVyLmgKKysrIGIvdGVzdHMvaW5jbHVkZS90ZXN0L2RyaXZlcnMvdGVzdF9kcml2ZXIuaApAQCAtMjMsNyArMjMsOCBAQAogI2RlZmluZSBQU0FfQ1JZUFRPX1RFU1RfRFJJVkVSX0xJRkVUSU1FIDB4N2ZmZmZmCiAKICNpbmNsdWRlICJ0ZXN0L2RyaXZlcnMvc2lnbmF0dXJlLmgiCi0jaW5jbHVkZSAidGVzdC9kcml2ZXJzL2tleWdlbi5oIgorI2luY2x1ZGUgInRlc3QvZHJpdmVycy9rZXlfbWFuYWdlbWVudC5oIgogI2luY2x1ZGUgInRlc3QvZHJpdmVycy9jaXBoZXIuaCIKKyNpbmNsdWRlICJ0ZXN0L2RyaXZlcnMvc2l6ZS5oIgogCiAjZW5kaWYgLyogUFNBX0NSWVBUT19URVNUX0RSSVZFUl9IICovCmRpZmYgLS1naXQgYS90ZXN0cy9pbmNsdWRlL3Rlc3QvaGVscGVycy5oIGIvdGVzdHMvaW5jbHVkZS90ZXN0L2hlbHBlcnMuaAppbmRleCBjNDk3OWNjLi4yYzdiMTc5IDEwMDY0NAotLS0gYS90ZXN0cy9pbmNsdWRlL3Rlc3QvaGVscGVycy5oCisrKyBiL3Rlc3RzL2luY2x1ZGUvdGVzdC9oZWxwZXJzLmgKQEAgLTUzLDEwICs1Myw4IEBACiB2b2lkIG1iZWR0bHNfdGVzdF9wbGF0Zm9ybV90ZWFyZG93biggdm9pZCApOwogCiAvKioKLSAqIFxicmllZiAgICAgICAgICBUaGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgYW4gQVNDSUkgc3RyaW5nIGVuY29kaW5nIGFuCi0gKiAgICAgICAgICAgICAgICAgaGV4YWRlY2ltYWwgbnVtYmVyIGludG8gdGhlIGVuY29kZWQgaGV4YWRlY2ltYWwgbnVtYmVyLiBUaGUKLSAqICAgICAgICAgICAgICAgICBoZXhhZGVjaW1hbCBudW1iZXIgaXMgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgb2YKLSAqICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyLgorICogXGJyaWVmICAgICAgICAgIFRoaXMgZnVuY3Rpb24gZGVjb2RlcyB0aGUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YKKyAqICAgICAgICAgICAgICAgICBkYXRhLgogICoKICAqIFxub3RlICAgICAgICAgICBUaGUgb3V0cHV0IGJ1ZmZlciBjYW4gYmUgdGhlIHNhbWUgYXMgdGhlIGlucHV0IGJ1ZmZlci4gRm9yCiAgKiAgICAgICAgICAgICAgICAgYW55IG90aGVyIG92ZXJsYXBwaW5nIG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMsIHRoZQpAQCAtNzAsNyArNjgsNyBAQAogICoKICAqIFxyZXR1cm4gICAgICAgICBcYyAwIG9uIHN1Y2Nlc3MuCiAgKiBccmV0dXJuICAgICAgICAgXGMgLTEgaWYgdGhlIG91dHB1dCBidWZmZXIgaXMgdG9vIHNtYWxsIG9yIHRoZSBpbnB1dCBzdHJpbmcKLSAqICAgICAgICAgICAgICAgICBpcyBub3QgYSB2YWxpZCBBU0NJSSBlbmNvZGluZyBvZiBhbiBoZXhhZGVjaW1hbCBudW1iZXIuCisgKiAgICAgICAgICAgICAgICAgaXMgbm90IGEgdmFsaWQgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uCiAgKi8KIGludCBtYmVkdGxzX3Rlc3RfdW5oZXhpZnkoIHVuc2lnbmVkIGNoYXIgKm9idWYsIHNpemVfdCBvYnVmbWF4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaWJ1Ziwgc2l6ZV90ICpsZW4gKTsKQEAgLTEwMyw0ICsxMDEsOTMgQEAKIGludCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCB1aW50OF90ICogYSwgdWludDhfdCAqIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYV9sZW4sIHVpbnQzMl90IGJfbGVuICk7CiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0hFQ0tfUEFSQU1TKQorCit0eXBlZGVmIHN0cnVjdAoreworICAgIGNvbnN0IGNoYXIgKmZhaWx1cmVfY29uZGl0aW9uOworICAgIGNvbnN0IGNoYXIgKmZpbGU7CisgICAgaW50IGxpbmU7Cit9CittYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2xvY2F0aW9uX3JlY29yZF90OworCisvKioKKyAqIFxicmllZiAgIEdldCB0aGUgbG9jYXRpb24gcmVjb3JkIG9mIHRoZSBsYXN0IGNhbGwgdG8KKyAqICAgICAgICAgIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWQoKS4KKyAqCisgKiBcbm90ZSAgICBUaGUgY2FsbCBleHBlY3RhdGlvbiBpcyBzZXQgdXAgYW5kIGFjdGl2ZSB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvCisgKiAgICAgICAgICBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2NoZWNrX2V4cGVjdGVkX2NhbGwoKSBvcgorICogICAgICAgICAgbWJlZHRsc19wYXJhbV9mYWlsZWQoKSB0aGF0IGNhbmNlbHMgaXQuCisgKi8KK3ZvaWQgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9nZXRfbG9jYXRpb25fcmVjb3JkKAorICAgICAgICAgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9sb2NhdGlvbl9yZWNvcmRfdCAqbG9jYXRpb25fcmVjb3JkICk7CisKKy8qKgorICogXGJyaWVmICAgU3RhdGUgdGhhdCBhIGNhbGwgdG8gbWJlZHRsc19wYXJhbV9mYWlsZWQoKSBpcyBleHBlY3RlZC4KKyAqCisgKiBcbm90ZSAgICBUaGUgY2FsbCBleHBlY3RhdGlvbiBpcyBzZXQgdXAgYW5kIGFjdGl2ZSB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvCisgKiAgICAgICAgICBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2NoZWNrX2V4cGVjdGVkX2NhbGwoKSBvcgorICogICAgICAgICAgbWJlZHRsc19wYXJhbV9mYWlsZWQgdGhhdCBjYW5jZWwgaXQuCisgKi8KK3ZvaWQgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9leHBlY3RfY2FsbCggdm9pZCApOworCisvKioKKyAqIFxicmllZiAgIENoZWNrIHdoZXRoZXIgbWJlZHRsc19wYXJhbV9mYWlsZWQoKSBoYXMgYmVlbiBjYWxsZWQgYXMgZXhwZWN0ZWQuCisgKgorICogXG5vdGUgICAgQ2hlY2sgd2hldGhlciBtYmVkdGxzX3BhcmFtX2ZhaWxlZCgpIGhhcyBiZWVuIGNhbGxlZCBiZXR3ZWVuIHRoZQorICogICAgICAgICAgbGFzdCBjYWxsIHRvIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfZXhwZWN0X2NhbGwoKSBhbmQgdGhlIGNhbGwKKyAqICAgICAgICAgIHRvIHRoaXMgZnVuY3Rpb24uCisgKgorICogXHJldHVybiAgXGMgMCBTaW5jZSB0aGUgbGFzdCBjYWxsIHRvIG1iZWR0bHNfcGFyYW1fZmFpbGVkX2V4cGVjdF9jYWxsKCksCisgKiAgICAgICAgICAgICAgIG1iZWR0bHNfcGFyYW1fZmFpbGVkKCkgaGFzIGJlZW4gY2FsbGVkLgorICogICAgICAgICAgXGMgLTEgT3RoZXJ3aXNlLgorICovCitpbnQgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9jaGVja19leHBlY3RlZF9jYWxsKCB2b2lkICk7CisKKy8qKgorICogXGJyaWVmICAgR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBvYmplY3Qgb2YgdHlwZSBqbXBfYnVmIGhvbGRpbmcgdGhlIGV4ZWN1dGlvbgorICogICAgICAgICAgc3RhdGUgaW5mb3JtYXRpb24gdXNlZCBieSBtYmVkdGxzX3BhcmFtX2ZhaWxlZCgpIHRvIGRvIGEgbG9uZyBqdW1wLgorICoKKyAqIFxub3RlICAgIElmIGEgY2FsbCB0byBtYmVkdGxzX3BhcmFtX2ZhaWxlZCgpIGlzIG5vdCBleHBlY3RlZCBpbiB0aGUgc2Vuc2UKKyAqICAgICAgICAgIHRoYXQgdGhlcmUgaXMgbm8gY2FsbCB0byBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2V4cGVjdF9jYWxsKCkKKyAqICAgICAgICAgIHByZWNlZGluZyBpdCwgdGhlbiBtYmVkdGxzX3BhcmFtX2ZhaWxlZCgpIHdpbGwgdHJ5IHRvIHJlc3RvcmUgdGhlCisgKiAgICAgICAgICBleGVjdXRpb24gdG8gdGhlIHN0YXRlIHN0b3JlZCBpbiB0aGUgam1wX2J1ZiBvYmplY3Qgd2hvc2UgYWRkcmVzcworICogICAgICAgICAgaXMgcmV0dXJuZWQgYnkgdGhlIHByZXNlbnQgZnVuY3Rpb24uCisgKgorICogXG5vdGUgICAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHRoZSBwYXJhbWV0ZXIgb2YgdGhlCisgKiAgICAgICAgICBzZXRqbXAoKSBmdW5jdGlvbiB0byBzZXQtdXAgd2hlcmUgbWJlZHRsc19wYXJhbV9mYWlsZWQoKSBzaG91bGQKKyAqICAgICAgICAgIGxvbmctanVtcCBpZiBpdCBoYXMgdG8uIEl0IGlzIGZvcmVzZWVuIHRvIGJlIHVzZWQgYXM6CisgKgorICogICAgICAgICAgc2V0am1wKCBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2dldF9zdGF0ZV9idWYoKSApLgorICoKKyAqIFxub3RlICAgIFRoZSB0eXBlIG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBub3Qgam1wX2J1ZiBhcyBqbXBfYnVmIGlzIGFuCisgKiAgICAgICAgICBhbiBhcnJheSB0eXBlIChDIHNwZWNpZmljYXRpb24pIGFuZCBhIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYW4KKyAqICAgICAgICAgIGFycmF5IHR5cGUuCisgKgorICogXG5vdGUgICAgVGhlIHR5cGUgb2YgdGhlIHJldHVybmVkIHZhbHVlIGlzIG5vdCBqbXBfYnVmKiBhcyB0aGVuIHRoZSByZXR1cm4KKyAqICAgICAgICAgIHZhbHVlIGNvdWxkbid0IGJlIHVzZWQgYnkgc2V0am1wKCksIGFzIGl0cyBwYXJhbWV0ZXIncyB0eXBlIGlzCisgKiAgICAgICAgICBqbXBfYnVmLgorICoKKyAqIFxyZXR1cm4gIEFkZHJlc3Mgb2YgdGhlIG9iamVjdCBvZiB0eXBlIGptcF9idWYgaG9sZGluZyB0aGUgZXhlY3V0aW9uIHN0YXRlCisgKiAgICAgICAgICBpbmZvcm1hdGlvbiB1c2VkIGJ5IG1iZWR0bHNfcGFyYW1fZmFpbGVkKCkgdG8gZG8gYSBsb25nIGp1bXAuCisgKi8KK3ZvaWQqIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfZ2V0X3N0YXRlX2J1Ziggdm9pZCApOworCisvKioKKyAqIFxicmllZiAgIFJlc2V0IHRoZSBleGVjdXRpb24gc3RhdGUgdXNlZCBieSBtYmVkdGxzX3BhcmFtX2ZhaWxlZCgpIHRvIGRvIGEKKyAqICAgICAgICAgIGxvbmcganVtcC4KKyAqCisgKiBcbm90ZSAgICBJZiBhIGNhbGwgdG8gbWJlZHRsc19wYXJhbV9mYWlsZWQoKSBpcyBub3QgZXhwZWN0ZWQgaW4gdGhlIHNlbnNlCisgKiAgICAgICAgICB0aGF0IHRoZXJlIGlzIG5vIGNhbGwgdG8gbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9leHBlY3RfY2FsbCgpCisgKiAgICAgICAgICBwcmVjZWRpbmcgaXQsIHRoZW4gbWJlZHRsc19wYXJhbV9mYWlsZWQoKSB3aWxsIHRyeSB0byByZXN0b3JlIHRoZQorICogICAgICAgICAgZXhlY3V0aW9uIHN0YXRlIHRoYXQgdGhpcyBmdW5jdGlvbiByZXNldC4KKyAqCisgKiBcbm90ZSAgICBJdCBpcyByZWNvbW1lbmRlZCB0byByZXNldCB0aGUgZXhlY3V0aW9uIHN0YXRlIHdoZW4gdGhlIHN0YXRlCisgKiAgICAgICAgICBpcyBub3QgcmVsZXZhbnQgYW55bW9yZS4gVGhhdCB3YXkgYW4gdW5leHBlY3RlZCBjYWxsIHRvCisgKiAgICAgICAgICBtYmVkdGxzX3BhcmFtX2ZhaWxlZCgpIHdpbGwgbm90IHRyaWdnZXIgYSBsb25nIGp1bXAgd2l0aAorICogICAgICAgICAgdW5kZWZpbmVkIGJlaGF2aW9yIGJ1dCByYXRoZXIgYSBsb25nIGp1bXAgdGhhdCB3aWxsIHJhdGhlciBmYXVsdC4KKyAqLwordm9pZCBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX3Jlc2V0X3N0YXRlKCB2b2lkICk7CisjZW5kaWYgLyogTUJFRFRMU19DSEVDS19QQVJBTVMgKi8KKwogI2VuZGlmIC8qIFRFU1RfSEVMUEVSU19IICovCmRpZmYgLS1naXQgYS90ZXN0cy9pbmNsdWRlL3Rlc3QvcHNhX2NyeXB0b19oZWxwZXJzLmggYi90ZXN0cy9pbmNsdWRlL3Rlc3QvcHNhX2NyeXB0b19oZWxwZXJzLmgKaW5kZXggYzgwMTNhMS4uMDFiMDU0NyAxMDA2NDQKLS0tIGEvdGVzdHMvaW5jbHVkZS90ZXN0L3BzYV9jcnlwdG9faGVscGVycy5oCisrKyBiL3Rlc3RzL2luY2x1ZGUvdGVzdC9wc2FfY3J5cHRvX2hlbHBlcnMuaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgInRlc3QvcHNhX2hlbHBlcnMuaCIKIAogI2luY2x1ZGUgPHBzYS9jcnlwdG8uaD4KKyNpbmNsdWRlIDxwc2FfY3J5cHRvX3Nsb3RfbWFuYWdlbWVudC5oPgogCiBzdGF0aWMgaW50IHRlc3RfaGVscGVyX2lzX3BzYV9wcmlzdGluZSggaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZpbGUgKQogewpAQCAtNDAsNiArNDEsMTAgQEAKICAgICAgICAgbXNnID0gIkFuIGV4dGVybmFsIHNsb3QgaGFzIG5vdCBiZWVuIGNsb3NlZCBwcm9wZXJseS4iOwogICAgIGVsc2UgaWYoIHN0YXRzLmhhbGZfZmlsbGVkX3Nsb3RzICE9IDAgKQogICAgICAgICBtc2cgPSAiQSBoYWxmLWZpbGxlZCBzbG90IGhhcyBub3QgYmVlbiBjbGVhcmVkIHByb3Blcmx5LiI7CisgICAgZWxzZSBpZiggc3RhdHMubG9ja2VkX3Nsb3RzICE9IDAgKQorICAgIHsKKyAgICAgICAgbXNnID0gIlNvbWUgc2xvdHMgYXJlIHN0aWxsIG1hcmtlZCBhcyBsb2NrZWQuIjsKKyAgICB9CiAKICAgICAvKiBJZiB0aGUgdGVzdCBoYXMgYWxyZWFkeSBmYWlsZWQsIGRvbid0IG92ZXJ3cml0ZSB0aGUgZmFpbHVyZQogICAgICAqIGluZm9ybWF0aW9uLiBEbyBrZWVwIHRoZSBzdGF0cyBsb29rdXAgYWJvdmUsIGJlY2F1c2UgaXQgY2FuIGJlCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL2FsbC5zaCBiL3Rlc3RzL3NjcmlwdHMvYWxsLnNoCmluZGV4IDU3OGQwM2UuLjJiYjIyMTYgMTAwNzU1Ci0tLSBhL3Rlc3RzL3NjcmlwdHMvYWxsLnNoCisrKyBiL3Rlc3RzL3NjcmlwdHMvYWxsLnNoCkBAIC0xMjcsNiArMTI3LDggQEAKIHByZV9pbml0aWFsaXplX3ZhcmlhYmxlcyAoKSB7CiAgICAgQ09ORklHX0g9J2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCcKICAgICBDT05GSUdfQkFLPSIkQ09ORklHX0guYmFrIgorICAgIENSWVBUT19DT05GSUdfSD0naW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oJworICAgIENSWVBUT19DT05GSUdfQkFLPSIkQ1JZUFRPX0NPTkZJR19ILmJhayIKIAogICAgIGFwcGVuZF9vdXRjb21lPTAKICAgICBNRU1PUlk9MApAQCAtMjg1LDYgKzI4NywxMCBAQAogICAgIGlmIFsgLWYgIiRDT05GSUdfQkFLIiBdOyB0aGVuCiAgICAgICAgIG12ICIkQ09ORklHX0JBSyIgIiRDT05GSUdfSCIKICAgICBmaQorCisgICAgaWYgWyAtZiAiJENSWVBUT19DT05GSUdfQkFLIiBdOyB0aGVuCisgICAgICAgIG12ICIkQ1JZUFRPX0NPTkZJR19CQUsiICIkQ1JZUFRPX0NPTkZJR19IIgorICAgIGZpCiB9CiAKICMgRXhlY3V0ZWQgb24gZXhpdC4gTWF5IGJlIHJlZGVmaW5lZCBkZXBlbmRpbmcgb24gY29tbWFuZCBsaW5lIG9wdGlvbnMuCkBAIC03ODAsNiArNzg2LDE4IEBACiAgICAgaWZfYnVpbGRfc3VjY2VlZGVkIHRlc3RzL2NvbnRleHQtaW5mby5zaAogfQogCitjb21wb25lbnRfdGVzdF9wc2FfY3J5cHRvX2tleV9pZF9lbmNvZGVzX293bmVyICgpIHsKKyAgICBtc2cgImJ1aWxkOiBmdWxsIGNvbmZpZyAtIFVTRV9QU0FfQ1JZUFRPICsgUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUiwgY21ha2UsIGdjYywgQVNhbiIKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBmdWxsCisgICAgc2NyaXB0cy9jb25maWcucHkgdW5zZXQgTUJFRFRMU19VU0VfUFNBX0NSWVBUTworICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIKKyAgICBDQz1nY2MgY21ha2UgLUQgQ01BS0VfQlVJTERfVFlQRTpTdHJpbmc9QXNhbiAuCisgICAgbWFrZQorCisgICAgbXNnICJ0ZXN0OiBmdWxsIGNvbmZpZyAtIFVTRV9QU0FfQ1JZUFRPICsgUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUiwgY21ha2UsIGdjYywgQVNhbiIKKyAgICBtYWtlIHRlc3QKK30KKwogY29tcG9uZW50X3Rlc3RfemxpYl9tYWtlKCkgewogICAgIG1zZyAiYnVpbGQ6IHpsaWIgZW5hYmxlZCwgbWFrZSIKICAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19aTElCX1NVUFBPUlQKQEAgLTEyOTAsMTQgKzEzMDgsMjI0IEBACiAgICAgaWZfYnVpbGRfc3VjY2VlZGVkIGVudiBPUEVOU1NMX0NNRD0iJE9QRU5TU0xfTkVYVCIgdGVzdHMvY29tcGF0LnNoIC1lICdeJCcgLWYgJ0FSSUFcfENIQUNIQScKIH0KIAorY29tcG9uZW50X3Rlc3RfcHNhX2NyeXB0b19jb25maWdfYmFzaWMoKSB7CisgICAgIyBmdWxsIHBsdXMgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRworICAgIG1zZyAiYnVpbGQ6IGZ1bGwgKyBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHIgorICAgIHNjcmlwdHMvY29uZmlnLnB5IGZ1bGwKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRworICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUworICAgIHNjcmlwdHMvY29uZmlnLnB5IHVuc2V0IE1CRURUTFNfVVNFX1BTQV9DUllQVE8KKyAgICAjIE5lZWQgdG8gZGVmaW5lIHRoZSBjb3JyZWN0IHN5bWJvbCBhbmQgaW5jbHVkZSB0aGUgdGVzdCBkcml2ZXIgaGVhZGVyIHBhdGggaW4gb3JkZXIgdG8gYnVpbGQgd2l0aCB0aGUgdGVzdCBkcml2ZXIKKyAgICBtYWtlIENDPWdjYyBDRkxBR1M9IiRBU0FOX0NGTEFHUyAtRFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgLUkuLi90ZXN0cy9pbmNsdWRlIC1PMiIgTERGTEFHUz0iJEFTQU5fQ0ZMQUdTIgorCisgICAgbXNnICJ0ZXN0OiBmdWxsICsgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRyIKKyAgICBtYWtlIHRlc3QKK30KKworY29tcG9uZW50X3Rlc3RfcHNhX2NyeXB0b19jb25maWdfbm9fZHJpdmVyKCkgeworICAgICMgZnVsbCBwbHVzIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcKKyAgICBtc2cgImJ1aWxkOiBmdWxsICsgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRyBtaW51cyBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUyIKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBmdWxsCisgICAgc2NyaXB0cy9jb25maWcucHkgc2V0IE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcKKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUworICAgIHNjcmlwdHMvY29uZmlnLnB5IHVuc2V0IE1CRURUTFNfVVNFX1BTQV9DUllQVE8KKyAgICBtYWtlIENDPWdjYyBDRkxBR1M9IiRBU0FOX0NGTEFHUyAtTzIiIExERkxBR1M9IiRBU0FOX0NGTEFHUyIKKworICAgIG1zZyAidGVzdDogZnVsbCArIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgbWludXMgTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMiCisgICAgbWFrZSB0ZXN0Cit9CisKKyMgVGhpcyBzaG91bGQgYmUgcmVuYW1lZCB0byB0ZXN0IGFuZCB1cGRhdGVkIG9uY2UgdGhlIGFjY2VsZXJhdG9yIEVDRFNBIGNvZGUgaXMgaW4gcGxhY2UgYW5kIHJlYWR5IHRvIHRlc3QuCitjb21wb25lbnRfYnVpbGRfcHNhX2FjY2VsX2FsZ19lY2RzYSgpIHsKKyAgICAjIGZ1bGwgcGx1cyBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHIHdpdGggUFNBX1dBTlRfQUxHX0VDRFNBCisgICAgIyB3aXRob3V0IE1CRURUTFNfRUNEU0FfQworICAgICMgUFNBX1dBTlRfQUxHX0VDRFNBIGFuZCBQU0FfV0FOVF9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSBhcmUgYWxyZWFkeQorICAgICMgc2V0IGluIGluY2x1ZGUvcHNhL2NyeXB0b19jb25maWcuaAorICAgIG1zZyAiYnVpbGQ6IGZ1bGwgKyBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHICsgUFNBX1dBTlRfQUxHX0VDRFNBIHdpdGhvdXQgTUJFRFRMU19FQ0RTQV9DIgorICAgIHNjcmlwdHMvY29uZmlnLnB5IGZ1bGwKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRworICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUworICAgIHNjcmlwdHMvY29uZmlnLnB5IHVuc2V0IE1CRURUTFNfVVNFX1BTQV9DUllQVE8KKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX0VDRFNBX0MKKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQKKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVECisgICAgIyBOZWVkIHRvIGRlZmluZSB0aGUgY29ycmVjdCBzeW1ib2wgYW5kIGluY2x1ZGUgdGhlIHRlc3QgZHJpdmVyIGhlYWRlciBwYXRoIGluIG9yZGVyIHRvIGJ1aWxkIHdpdGggdGhlIHRlc3QgZHJpdmVyCisgICAgbWFrZSBDQz1nY2MgQ0ZMQUdTPSIkQVNBTl9DRkxBR1MgLURQU0FfQ1JZUFRPX0RSSVZFUl9URVNUIC1ETUJFRFRMU19QU0FfQUNDRUxfQUxHX0VDRFNBIC1ETUJFRFRMU19QU0FfQUNDRUxfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EgLUkuLi90ZXN0cy9pbmNsdWRlIC1PMiIgTERGTEFHUz0iJEFTQU5fQ0ZMQUdTIgorfQorCisjIFRoaXMgc2hvdWxkIGJlIHJlbmFtZWQgdG8gdGVzdCBhbmQgdXBkYXRlZCBvbmNlIHRoZSBhY2NlbGVyYXRvciBFQ0RIIGNvZGUgaXMgaW4gcGxhY2UgYW5kIHJlYWR5IHRvIHRlc3QuCitjb21wb25lbnRfYnVpbGRfcHNhX2FjY2VsX2FsZ19lY2RoKCkgeworICAgICMgZnVsbCBwbHVzIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgd2l0aCBQU0FfV0FOVF9BTEdfRUNESAorICAgICMgd2l0aG91dCBNQkVEVExTX0VDREhfQworICAgIG1zZyAiYnVpbGQ6IGZ1bGwgKyBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHICsgUFNBX1dBTlRfQUxHX0VDREggd2l0aG91dCBNQkVEVExTX0VDREhfQyIKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBmdWxsCisgICAgc2NyaXB0cy9jb25maWcucHkgc2V0IE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMKKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPCisgICAgc2NyaXB0cy9jb25maWcucHkgdW5zZXQgTUJFRFRMU19FQ0RIX0MKKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVECisgICAgc2NyaXB0cy9jb25maWcucHkgdW5zZXQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVECisgICAgc2NyaXB0cy9jb25maWcucHkgdW5zZXQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRAorICAgIHNjcmlwdHMvY29uZmlnLnB5IHVuc2V0IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVECisgICAgc2NyaXB0cy9jb25maWcucHkgdW5zZXQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQKKyAgICAjIE5lZWQgdG8gZGVmaW5lIHRoZSBjb3JyZWN0IHN5bWJvbCBhbmQgaW5jbHVkZSB0aGUgdGVzdCBkcml2ZXIgaGVhZGVyIHBhdGggaW4gb3JkZXIgdG8gYnVpbGQgd2l0aCB0aGUgdGVzdCBkcml2ZXIKKyAgICBtYWtlIENDPWdjYyBDRkxBR1M9IiRBU0FOX0NGTEFHUyAtRFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgLURNQkVEVExTX1BTQV9BQ0NFTF9BTEdfRUNESCAtSS4uL3Rlc3RzL2luY2x1ZGUgLU8yIiBMREZMQUdTPSIkQVNBTl9DRkxBR1MiCit9CisKKyMgVGhpcyBzaG91bGQgYmUgcmVuYW1lZCB0byB0ZXN0IGFuZCB1cGRhdGVkIG9uY2UgdGhlIGFjY2VsZXJhdG9yIEVDQyBrZXkgcGFpciBjb2RlIGlzIGluIHBsYWNlIGFuZCByZWFkeSB0byB0ZXN0LgorY29tcG9uZW50X2J1aWxkX3BzYV9hY2NlbF9rZXlfdHlwZV9lY2Nfa2V5X3BhaXIoKSB7CisgICAgIyBmdWxsIHBsdXMgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRyB3aXRoIFBTQV9XQU5UX0tFWV9UWVBFX0VDQ19LRVlfUEFJUgorICAgIG1zZyAiYnVpbGQ6IGZ1bGwgKyBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHICsgUFNBX1dBTlRfS0VZX1RZUEVfRUNDX0tFWV9QQUlSIgorICAgIHNjcmlwdHMvY29uZmlnLnB5IGZ1bGwKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRworICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUworICAgIHNjcmlwdHMvY29uZmlnLnB5IHVuc2V0IE1CRURUTFNfVVNFX1BTQV9DUllQVE8KKyAgICBzY3JpcHRzL2NvbmZpZy5weSAtZiBpbmNsdWRlL3BzYS9jcnlwdG9fY29uZmlnLmggc2V0IFBTQV9XQU5UX0tFWV9UWVBFX0VDQ19LRVlfUEFJUiAxCisgICAgc2NyaXB0cy9jb25maWcucHkgLWYgaW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oIHNldCBQU0FfV0FOVF9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSAxCisgICAgIyBOZWVkIHRvIGRlZmluZSB0aGUgY29ycmVjdCBzeW1ib2wgYW5kIGluY2x1ZGUgdGhlIHRlc3QgZHJpdmVyIGhlYWRlciBwYXRoIGluIG9yZGVyIHRvIGJ1aWxkIHdpdGggdGhlIHRlc3QgZHJpdmVyCisgICAgbWFrZSBDQz1nY2MgQ0ZMQUdTPSIkQVNBTl9DRkxBR1MgLURQU0FfQ1JZUFRPX0RSSVZFUl9URVNUIC1ETUJFRFRMU19QU0FfQUNDRUxfS0VZX1RZUEVfRUNDX0tFWV9QQUlSIC1JLi4vdGVzdHMvaW5jbHVkZSAtTzIiIExERkxBR1M9IiRBU0FOX0NGTEFHUyIKK30KKworIyBUaGlzIHNob3VsZCBiZSByZW5hbWVkIHRvIHRlc3QgYW5kIHVwZGF0ZWQgb25jZSB0aGUgYWNjZWxlcmF0b3IgRUNDIHB1YmxpYyBrZXkgY29kZSBpcyBpbiBwbGFjZSBhbmQgcmVhZHkgdG8gdGVzdC4KK2NvbXBvbmVudF9idWlsZF9wc2FfYWNjZWxfa2V5X3R5cGVfZWNjX3B1YmxpY19rZXkoKSB7CisgICAgIyBmdWxsIHBsdXMgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRyB3aXRoIFBTQV9XQU5UX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZCisgICAgbXNnICJidWlsZDogZnVsbCArIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgKyBQU0FfV0FOVF9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSIKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBmdWxsCisgICAgc2NyaXB0cy9jb25maWcucHkgc2V0IE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMKKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPCisgICAgc2NyaXB0cy9jb25maWcucHkgLWYgaW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oIHNldCBQU0FfV0FOVF9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSAxCisgICAgc2NyaXB0cy9jb25maWcucHkgLWYgaW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oIHVuc2V0IFBTQV9XQU5UX0tFWV9UWVBFX0VDQ19LRVlfUEFJUgorICAgICMgTmVlZCB0byBkZWZpbmUgdGhlIGNvcnJlY3Qgc3ltYm9sIGFuZCBpbmNsdWRlIHRoZSB0ZXN0IGRyaXZlciBoZWFkZXIgcGF0aCBpbiBvcmRlciB0byBidWlsZCB3aXRoIHRoZSB0ZXN0IGRyaXZlcgorICAgIG1ha2UgQ0M9Z2NjIENGTEFHUz0iJEFTQU5fQ0ZMQUdTIC1EUFNBX0NSWVBUT19EUklWRVJfVEVTVCAtRE1CRURUTFNfUFNBX0FDQ0VMX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZIC1JLi4vdGVzdHMvaW5jbHVkZSAtTzIiIExERkxBR1M9IiRBU0FOX0NGTEFHUyIKK30KKworIyBUaGlzIHNob3VsZCBiZSByZW5hbWVkIHRvIHRlc3QgYW5kIHVwZGF0ZWQgb25jZSB0aGUgYWNjZWxlcmF0b3IgSE1BQyBjb2RlIGlzIGluIHBsYWNlIGFuZCByZWFkeSB0byB0ZXN0LgorY29tcG9uZW50X2J1aWxkX3BzYV9hY2NlbF9hbGdfaG1hYygpIHsKKyAgICAjIGZ1bGwgcGx1cyBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHIHdpdGggUFNBX1dBTlRfQUxHX0hNQUMKKyAgICBtc2cgImJ1aWxkOiBmdWxsICsgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRyArIFBTQV9XQU5UX0FMR19ITUFDIgorICAgIHNjcmlwdHMvY29uZmlnLnB5IGZ1bGwKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRworICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUworICAgIHNjcmlwdHMvY29uZmlnLnB5IHVuc2V0IE1CRURUTFNfVVNFX1BTQV9DUllQVE8KKyAgICAjIE5lZWQgdG8gZGVmaW5lIHRoZSBjb3JyZWN0IHN5bWJvbCBhbmQgaW5jbHVkZSB0aGUgdGVzdCBkcml2ZXIgaGVhZGVyIHBhdGggaW4gb3JkZXIgdG8gYnVpbGQgd2l0aCB0aGUgdGVzdCBkcml2ZXIKKyAgICBtYWtlIENDPWdjYyBDRkxBR1M9IiRBU0FOX0NGTEFHUyAtRFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgLURNQkVEVExTX1BTQV9BQ0NFTF9BTEdfSE1BQyAtSS4uL3Rlc3RzL2luY2x1ZGUgLU8yIiBMREZMQUdTPSIkQVNBTl9DRkxBR1MiCit9CisKKyMgVGhpcyBzaG91bGQgYmUgcmVuYW1lZCB0byB0ZXN0IGFuZCB1cGRhdGVkIG9uY2UgdGhlIGFjY2VsZXJhdG9yIEhLREYgY29kZSBpcyBpbiBwbGFjZSBhbmQgcmVhZHkgdG8gdGVzdC4KK2NvbXBvbmVudF9idWlsZF9wc2FfYWNjZWxfYWxnX2hrZGYoKSB7CisgICAgIyBmdWxsIHBsdXMgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRyB3aXRoIFBTQV9XQU5UX0FMR19IS0RGCisgICAgIyB3aXRob3V0IE1CRURUTFNfSEtERl9DCisgICAgbXNnICJidWlsZDogZnVsbCArIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgKyBQU0FfV0FOVF9BTEdfSEtERiB3aXRob3V0IE1CRURUTFNfSEtERl9DIgorICAgIHNjcmlwdHMvY29uZmlnLnB5IGZ1bGwKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRworICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUworICAgIHNjcmlwdHMvY29uZmlnLnB5IHVuc2V0IE1CRURUTFNfVVNFX1BTQV9DUllQVE8KKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX0hLREZfQworICAgICMgTWFrZSBzdXJlIHRvIHVuc2V0IFRMUzFfM19FWFBFUklNRU5UQUwgc2luY2UgaXQgcmVxdWlyZXMgSEtERl9DIGFuZCB3aWxsIG5vdCBidWlsZCBwcm9wZXJseSB3aXRob3V0IGl0LgorICAgIHNjcmlwdHMvY29uZmlnLnB5IHVuc2V0IE1CRURUTFNfU1NMX1BST1RPX1RMUzFfM19FWFBFUklNRU5UQUwKKyAgICAjIE5lZWQgdG8gZGVmaW5lIHRoZSBjb3JyZWN0IHN5bWJvbCBhbmQgaW5jbHVkZSB0aGUgdGVzdCBkcml2ZXIgaGVhZGVyIHBhdGggaW4gb3JkZXIgdG8gYnVpbGQgd2l0aCB0aGUgdGVzdCBkcml2ZXIKKyAgICBtYWtlIENDPWdjYyBDRkxBR1M9IiRBU0FOX0NGTEFHUyAtRFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgLURNQkVEVExTX1BTQV9BQ0NFTF9BTEdfSEtERiAtSS4uL3Rlc3RzL2luY2x1ZGUgLU8yIiBMREZMQUdTPSIkQVNBTl9DRkxBR1MiCit9CisKKyMgVGhpcyBzaG91bGQgYmUgcmVuYW1lZCB0byB0ZXN0IGFuZCB1cGRhdGVkIG9uY2UgdGhlIGFjY2VsZXJhdG9yIFJTQSBjb2RlIGlzIGluIHBsYWNlIGFuZCByZWFkeSB0byB0ZXN0LgorY29tcG9uZW50X2J1aWxkX3BzYV9hY2NlbF9hbGdfcnNhX3BrY3MxdjE1X2NyeXB0KCkgeworICAgICMgZnVsbCBwbHVzIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgd2l0aCBQU0FfV0FOVF9BTEdfUlNBX1BLQ1MxVjE1X0NSWVBUCisgICAgbXNnICJidWlsZDogZnVsbCArIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgKyBQU0FfV0FOVF9BTEdfUlNBX1BLQ1MxVjE1X0NSWVBUICsgUFNBX1dBTlRfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVkiCisgICAgc2NyaXB0cy9jb25maWcucHkgZnVsbAorICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHCisgICAgc2NyaXB0cy9jb25maWcucHkgc2V0IE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTCisgICAgc2NyaXB0cy9jb25maWcucHkgdW5zZXQgTUJFRFRMU19VU0VfUFNBX0NSWVBUTworICAgIHNjcmlwdHMvY29uZmlnLnB5IC1mIGluY2x1ZGUvcHNhL2NyeXB0b19jb25maWcuaCBzZXQgUFNBX1dBTlRfQUxHX1JTQV9QS0NTMVYxNV9DUllQVCAxCisgICAgc2NyaXB0cy9jb25maWcucHkgLWYgaW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oIHVuc2V0IFBTQV9XQU5UX0FMR19SU0FfUEtDUzFWMTVfU0lHTgorICAgIHNjcmlwdHMvY29uZmlnLnB5IC1mIGluY2x1ZGUvcHNhL2NyeXB0b19jb25maWcuaCB1bnNldCBQU0FfV0FOVF9BTEdfUlNBX09BRVAKKyAgICBzY3JpcHRzL2NvbmZpZy5weSAtZiBpbmNsdWRlL3BzYS9jcnlwdG9fY29uZmlnLmggdW5zZXQgUFNBX1dBTlRfQUxHX1JTQV9QU1MKKyAgICAjIE5lZWQgdG8gZGVmaW5lIHRoZSBjb3JyZWN0IHN5bWJvbCBhbmQgaW5jbHVkZSB0aGUgdGVzdCBkcml2ZXIgaGVhZGVyIHBhdGggaW4gb3JkZXIgdG8gYnVpbGQgd2l0aCB0aGUgdGVzdCBkcml2ZXIKKyAgICBtYWtlIENDPWdjYyBDRkxBR1M9IiRBU0FOX0NGTEFHUyAtRFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgLURNQkVEVExTX1BTQV9BQ0NFTF9BTEdfUlNBX1BLQ1MxVjE1X0NSWVBUIC1JLi4vdGVzdHMvaW5jbHVkZSAtTzIiIExERkxBR1M9IiRBU0FOX0NGTEFHUyIKK30KKworIyBUaGlzIHNob3VsZCBiZSByZW5hbWVkIHRvIHRlc3QgYW5kIHVwZGF0ZWQgb25jZSB0aGUgYWNjZWxlcmF0b3IgUlNBIGNvZGUgaXMgaW4gcGxhY2UgYW5kIHJlYWR5IHRvIHRlc3QuCitjb21wb25lbnRfYnVpbGRfcHNhX2FjY2VsX2FsZ19yc2FfcGtjczF2MTVfc2lnbigpIHsKKyAgICAjIGZ1bGwgcGx1cyBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHIHdpdGggUFNBX1dBTlRfQUxHX1JTQV9QS0NTMVYxNV9TSUdOIGFuZCBQU0FfV0FOVF9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWQorICAgIG1zZyAiYnVpbGQ6IGZ1bGwgKyBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHICsgUFNBX1dBTlRfQUxHX1JTQV9QS0NTMVYxNV9TSUdOICsgUFNBX1dBTlRfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVkiCisgICAgc2NyaXB0cy9jb25maWcucHkgZnVsbAorICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHCisgICAgc2NyaXB0cy9jb25maWcucHkgc2V0IE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTCisgICAgc2NyaXB0cy9jb25maWcucHkgdW5zZXQgTUJFRFRMU19VU0VfUFNBX0NSWVBUTworICAgIHNjcmlwdHMvY29uZmlnLnB5IC1mIGluY2x1ZGUvcHNhL2NyeXB0b19jb25maWcuaCBzZXQgUFNBX1dBTlRfQUxHX1JTQV9QS0NTMVYxNV9TSUdOIDEKKyAgICBzY3JpcHRzL2NvbmZpZy5weSAtZiBpbmNsdWRlL3BzYS9jcnlwdG9fY29uZmlnLmggdW5zZXQgUFNBX1dBTlRfQUxHX1JTQV9QS0NTMVYxNV9DUllQVAorICAgIHNjcmlwdHMvY29uZmlnLnB5IC1mIGluY2x1ZGUvcHNhL2NyeXB0b19jb25maWcuaCB1bnNldCBQU0FfV0FOVF9BTEdfUlNBX09BRVAKKyAgICBzY3JpcHRzL2NvbmZpZy5weSAtZiBpbmNsdWRlL3BzYS9jcnlwdG9fY29uZmlnLmggdW5zZXQgUFNBX1dBTlRfQUxHX1JTQV9QU1MKKyAgICAjIE5lZWQgdG8gZGVmaW5lIHRoZSBjb3JyZWN0IHN5bWJvbCBhbmQgaW5jbHVkZSB0aGUgdGVzdCBkcml2ZXIgaGVhZGVyIHBhdGggaW4gb3JkZXIgdG8gYnVpbGQgd2l0aCB0aGUgdGVzdCBkcml2ZXIKKyAgICBtYWtlIENDPWdjYyBDRkxBR1M9IiRBU0FOX0NGTEFHUyAtRFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgLURNQkVEVExTX1BTQV9BQ0NFTF9BTEdfUlNBX1BLQ1MxVjE1X1NJR04gLUkuLi90ZXN0cy9pbmNsdWRlIC1PMiIgTERGTEFHUz0iJEFTQU5fQ0ZMQUdTIgorfQorCisjIFRoaXMgc2hvdWxkIGJlIHJlbmFtZWQgdG8gdGVzdCBhbmQgdXBkYXRlZCBvbmNlIHRoZSBhY2NlbGVyYXRvciBSU0EgY29kZSBpcyBpbiBwbGFjZSBhbmQgcmVhZHkgdG8gdGVzdC4KK2NvbXBvbmVudF9idWlsZF9wc2FfYWNjZWxfYWxnX3JzYV9vYWVwKCkgeworICAgICMgZnVsbCBwbHVzIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgd2l0aCBQU0FfV0FOVF9BTEdfUlNBX09BRVAgYW5kIFBTQV9XQU5UX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZCisgICAgbXNnICJidWlsZDogZnVsbCArIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgKyBQU0FfV0FOVF9BTEdfUlNBX09BRVAgKyBQU0FfV0FOVF9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSIKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBmdWxsCisgICAgc2NyaXB0cy9jb25maWcucHkgc2V0IE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMKKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPCisgICAgc2NyaXB0cy9jb25maWcucHkgLWYgaW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oIHNldCBQU0FfV0FOVF9BTEdfUlNBX09BRVAgMQorICAgIHNjcmlwdHMvY29uZmlnLnB5IC1mIGluY2x1ZGUvcHNhL2NyeXB0b19jb25maWcuaCB1bnNldCBQU0FfV0FOVF9BTEdfUlNBX1BLQ1MxVjE1X0NSWVBUCisgICAgc2NyaXB0cy9jb25maWcucHkgLWYgaW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oIHVuc2V0IFBTQV9XQU5UX0FMR19SU0FfUEtDUzFWMTVfU0lHTgorICAgIHNjcmlwdHMvY29uZmlnLnB5IC1mIGluY2x1ZGUvcHNhL2NyeXB0b19jb25maWcuaCB1bnNldCBQU0FfV0FOVF9BTEdfUlNBX1BTUworICAgICMgTmVlZCB0byBkZWZpbmUgdGhlIGNvcnJlY3Qgc3ltYm9sIGFuZCBpbmNsdWRlIHRoZSB0ZXN0IGRyaXZlciBoZWFkZXIgcGF0aCBpbiBvcmRlciB0byBidWlsZCB3aXRoIHRoZSB0ZXN0IGRyaXZlcgorICAgIG1ha2UgQ0M9Z2NjIENGTEFHUz0iJEFTQU5fQ0ZMQUdTIC1EUFNBX0NSWVBUT19EUklWRVJfVEVTVCAtRE1CRURUTFNfUFNBX0FDQ0VMX0FMR19SU0FfT0FFUCAtSS4uL3Rlc3RzL2luY2x1ZGUgLU8yIiBMREZMQUdTPSIkQVNBTl9DRkxBR1MiCit9CisKKyMgVGhpcyBzaG91bGQgYmUgcmVuYW1lZCB0byB0ZXN0IGFuZCB1cGRhdGVkIG9uY2UgdGhlIGFjY2VsZXJhdG9yIFJTQSBjb2RlIGlzIGluIHBsYWNlIGFuZCByZWFkeSB0byB0ZXN0LgorY29tcG9uZW50X2J1aWxkX3BzYV9hY2NlbF9hbGdfcnNhX3BzcygpIHsKKyAgICAjIGZ1bGwgcGx1cyBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHIHdpdGggUFNBX1dBTlRfQUxHX1JTQV9QU1MgYW5kIFBTQV9XQU5UX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZCisgICAgbXNnICJidWlsZDogZnVsbCArIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgKyBQU0FfV0FOVF9BTEdfUlNBX1BTUyArIFBTQV9XQU5UX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZIgorICAgIHNjcmlwdHMvY29uZmlnLnB5IGZ1bGwKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRworICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUworICAgIHNjcmlwdHMvY29uZmlnLnB5IHVuc2V0IE1CRURUTFNfVVNFX1BTQV9DUllQVE8KKyAgICBzY3JpcHRzL2NvbmZpZy5weSAtZiBpbmNsdWRlL3BzYS9jcnlwdG9fY29uZmlnLmggc2V0IFBTQV9XQU5UX0FMR19SU0FfUFNTIDEKKyAgICBzY3JpcHRzL2NvbmZpZy5weSAtZiBpbmNsdWRlL3BzYS9jcnlwdG9fY29uZmlnLmggdW5zZXQgUFNBX1dBTlRfQUxHX1JTQV9QS0NTMVYxNV9DUllQVAorICAgIHNjcmlwdHMvY29uZmlnLnB5IC1mIGluY2x1ZGUvcHNhL2NyeXB0b19jb25maWcuaCB1bnNldCBQU0FfV0FOVF9BTEdfUlNBX1BLQ1MxVjE1X1NJR04KKyAgICBzY3JpcHRzL2NvbmZpZy5weSAtZiBpbmNsdWRlL3BzYS9jcnlwdG9fY29uZmlnLmggdW5zZXQgUFNBX1dBTlRfQUxHX1JTQV9PQUVQCisgICAgIyBOZWVkIHRvIGRlZmluZSB0aGUgY29ycmVjdCBzeW1ib2wgYW5kIGluY2x1ZGUgdGhlIHRlc3QgZHJpdmVyIGhlYWRlciBwYXRoIGluIG9yZGVyIHRvIGJ1aWxkIHdpdGggdGhlIHRlc3QgZHJpdmVyCisgICAgbWFrZSBDQz1nY2MgQ0ZMQUdTPSIkQVNBTl9DRkxBR1MgLURQU0FfQ1JZUFRPX0RSSVZFUl9URVNUIC1ETUJFRFRMU19QU0FfQUNDRUxfQUxHX1JTQV9QU1MgLUkuLi90ZXN0cy9pbmNsdWRlIC1PMiIgTERGTEFHUz0iJEFTQU5fQ0ZMQUdTIgorfQorCisjIFRoaXMgc2hvdWxkIGJlIHJlbmFtZWQgdG8gdGVzdCBhbmQgdXBkYXRlZCBvbmNlIHRoZSBhY2NlbGVyYXRvciBSU0EgY29kZSBpcyBpbiBwbGFjZSBhbmQgcmVhZHkgdG8gdGVzdC4KK2NvbXBvbmVudF9idWlsZF9wc2FfYWNjZWxfa2V5X3R5cGVfcnNhX2tleV9wYWlyKCkgeworICAgICMgZnVsbCBwbHVzIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgd2l0aCBQU0FfV0FOVF9LRVlfVFlQRV9SU0FfS0VZX1BBSVIgYW5kIFBTQV9XQU5UX0FMR19SU0FfUFNTCisgICAgbXNnICJidWlsZDogZnVsbCArIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgKyBQU0FfV0FOVF9LRVlfVFlQRV9SU0FfS0VZX1BBSVIgKyBQU0FfV0FOVF9BTEdfUlNBX1BTUyIKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBmdWxsCisgICAgc2NyaXB0cy9jb25maWcucHkgc2V0IE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMKKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPCisgICAgc2NyaXB0cy9jb25maWcucHkgLWYgaW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oIHNldCBQU0FfV0FOVF9BTEdfUlNBX1BTUyAxCisgICAgc2NyaXB0cy9jb25maWcucHkgLWYgaW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oIHNldCBQU0FfV0FOVF9LRVlfVFlQRV9SU0FfS0VZX1BBSVIgMQorICAgICMgTmVlZCB0byBkZWZpbmUgdGhlIGNvcnJlY3Qgc3ltYm9sIGFuZCBpbmNsdWRlIHRoZSB0ZXN0IGRyaXZlciBoZWFkZXIgcGF0aCBpbiBvcmRlciB0byBidWlsZCB3aXRoIHRoZSB0ZXN0IGRyaXZlcgorICAgIG1ha2UgQ0M9Z2NjIENGTEFHUz0iJEFTQU5fQ0ZMQUdTIC1EUFNBX0NSWVBUT19EUklWRVJfVEVTVCAtRE1CRURUTFNfUFNBX0FDQ0VMX0tFWV9UWVBFX1JTQV9LRVlfUEFJUiAtSS4uL3Rlc3RzL2luY2x1ZGUgLU8yIiBMREZMQUdTPSIkQVNBTl9DRkxBR1MiCit9CisKKyMgVGhpcyBzaG91bGQgYmUgcmVuYW1lZCB0byB0ZXN0IGFuZCB1cGRhdGVkIG9uY2UgdGhlIGFjY2VsZXJhdG9yIFJTQSBjb2RlIGlzIGluIHBsYWNlIGFuZCByZWFkeSB0byB0ZXN0LgorY29tcG9uZW50X2J1aWxkX3BzYV9hY2NlbF9rZXlfdHlwZV9yc2FfcHVibGljX2tleSgpIHsKKyAgICAjIGZ1bGwgcGx1cyBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHIHdpdGggUFNBX1dBTlRfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVkgYW5kIFBTQV9XQU5UX0FMR19SU0FfUFNTCisgICAgbXNnICJidWlsZDogZnVsbCArIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgKyBQU0FfV0FOVF9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSArIFBTQV9XQU5UX0FMR19SU0FfUFNTIgorICAgIHNjcmlwdHMvY29uZmlnLnB5IGZ1bGwKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRworICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUworICAgIHNjcmlwdHMvY29uZmlnLnB5IHVuc2V0IE1CRURUTFNfVVNFX1BTQV9DUllQVE8KKyAgICBzY3JpcHRzL2NvbmZpZy5weSAtZiBpbmNsdWRlL3BzYS9jcnlwdG9fY29uZmlnLmggc2V0IFBTQV9XQU5UX0FMR19SU0FfUFNTIDEKKyAgICBzY3JpcHRzL2NvbmZpZy5weSAtZiBpbmNsdWRlL3BzYS9jcnlwdG9fY29uZmlnLmggc2V0IFBTQV9XQU5UX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZIDEKKyAgICAjIE5lZWQgdG8gZGVmaW5lIHRoZSBjb3JyZWN0IHN5bWJvbCBhbmQgaW5jbHVkZSB0aGUgdGVzdCBkcml2ZXIgaGVhZGVyIHBhdGggaW4gb3JkZXIgdG8gYnVpbGQgd2l0aCB0aGUgdGVzdCBkcml2ZXIKKyAgICBtYWtlIENDPWdjYyBDRkxBR1M9IiRBU0FOX0NGTEFHUyAtRFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgLURNQkVEVExTX1BTQV9BQ0NFTF9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSAtSS4uL3Rlc3RzL2luY2x1ZGUgLU8yIiBMREZMQUdTPSIkQVNBTl9DRkxBR1MiCit9CisKIGNvbXBvbmVudF90ZXN0X2NoZWNrX3BhcmFtc19mdW5jdGlvbmFsaXR5ICgpIHsKICAgICBtc2cgImJ1aWxkK3Rlc3Q6IE1CRURUTFNfQ0hFQ0tfUEFSQU1TIGZ1bmN0aW9uYWxpdHkiCiAgICAgc2NyaXB0cy9jb25maWcucHkgZnVsbCAjIGluY2x1ZGVzIENIRUNLX1BBUkFNUwogICAgICMgTWFrZSBNQkVEVExTX1BBUkFNX0ZBSUxFRCBjYWxsIG1iZWR0bHNfcGFyYW1fZmFpbGVkKCkuCiAgICAgc2NyaXB0cy9jb25maWcucHkgdW5zZXQgTUJFRFRMU19DSEVDS19QQVJBTVNfQVNTRVJUCi0gICAgIyBPbmx5IGJ1aWxkIGFuZCBydW4gdGVzdHMuIERvIG5vdCBidWlsZCBzYW1wbGUgcHJvZ3JhbXMsIGJlY2F1c2UKLSAgICAjIHRoZXkgZG9uJ3QgaGF2ZSBhIG1iZWR0bHNfcGFyYW1fZmFpbGVkKCkgZnVuY3Rpb24uCi0gICAgbWFrZSBDQz1nY2MgQ0ZMQUdTPSctV2Vycm9yIC1PMScgbGliIHRlc3QKKyAgICBtYWtlIENDPWdjYyBDRkxBR1M9Jy1XZXJyb3IgLU8xJyBhbGwgdGVzdAogfQogCiBjb21wb25lbnRfdGVzdF9jaGVja19wYXJhbXNfd2l0aG91dF9wbGF0Zm9ybSAoKSB7CkBAIC0xODUyLDYgKzIwODAsMjAgQEAKICAgICBtYWtlIHRlc3QKIH0KIAorY29tcG9uZW50X3Rlc3Rfbm9fc3RyaW5ncyAoKSB7CisgICAgbXNnICJidWlsZDogbm8gc3RyaW5ncyIgIyB+MTBzCisgICAgc2NyaXB0cy9jb25maWcucHkgZnVsbAorICAgICMgRGlzYWJsZSBvcHRpb25zIHRoYXQgYWN0aXZhdGUgYSBsYXJnZSBhbW91bnQgb2Ygc3RyaW5nIGNvbnN0YW50cy4KKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX0RFQlVHX0MKKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX0VSUk9SX0MKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWQorICAgIHNjcmlwdHMvY29uZmlnLnB5IHVuc2V0IE1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUworICAgIG1ha2UgQ0ZMQUdTPSctV2Vycm9yIC1PcycKKworICAgIG1zZyAidGVzdDogbm8gc3RyaW5ncyIgIyB+IDEwcworICAgIG1ha2UgdGVzdAorfQorCiBjb21wb25lbnRfYnVpbGRfYXJtX25vbmVfZWFiaV9nY2MgKCkgewogICAgIG1zZyAiYnVpbGQ6ICR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWdjYyAtTzEiICMgfiAxMHMKICAgICBzY3JpcHRzL2NvbmZpZy5weSBiYXJlbWV0YWwKQEAgLTIxMjIsNiArMjM2NCw3IEBACiAgICAgIyBCYWNrIHVwIHRoZSBjb25maWd1cmF0aW9uIGluIGNhc2UgdGhlIGNvbXBvbmVudCBtb2RpZmllcyBpdC4KICAgICAjIFRoZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwgcmVzdG9yZSBpdC4KICAgICBjcCAtcCAiJENPTkZJR19IIiAiJENPTkZJR19CQUsiCisgICAgY3AgLXAgIiRDUllQVE9fQ09ORklHX0giICIkQ1JZUFRPX0NPTkZJR19CQUsiCiAgICAgY3VycmVudF9jb21wb25lbnQ9IiQxIgogICAgIGV4cG9ydCBNQkVEVExTX1RFU1RfQ09ORklHVVJBVElPTj0iJGN1cnJlbnRfY29tcG9uZW50IgogCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL2NoZWNrLWdlbmVyYXRlZC1maWxlcy5zaCBiL3Rlc3RzL3NjcmlwdHMvY2hlY2stZ2VuZXJhdGVkLWZpbGVzLnNoCmluZGV4IDNhYjYyZjguLjg0NWQxYzYgMTAwNzU1Ci0tLSBhL3Rlc3RzL3NjcmlwdHMvY2hlY2stZ2VuZXJhdGVkLWZpbGVzLnNoCisrKyBiL3Rlc3RzL3NjcmlwdHMvY2hlY2stZ2VuZXJhdGVkLWZpbGVzLnNoCkBAIC0xMDUsMyArMTA1LDQgQEAKIGNoZWNrIHNjcmlwdHMvZ2VuZXJhdGVfcXVlcnlfY29uZmlnLnBsIHByb2dyYW1zL3Rlc3QvcXVlcnlfY29uZmlnLmMKIGNoZWNrIHNjcmlwdHMvZ2VuZXJhdGVfZmVhdHVyZXMucGwgbGlicmFyeS92ZXJzaW9uX2ZlYXR1cmVzLmMKIGNoZWNrIHNjcmlwdHMvZ2VuZXJhdGVfdmlzdWFsY19maWxlcy5wbCB2aXN1YWxjL1ZTMjAxMAorY2hlY2sgc2NyaXB0cy9nZW5lcmF0ZV9wc2FfY29uc3RhbnRzLnB5IHByb2dyYW1zL3BzYS9wc2FfY29uc3RhbnRfbmFtZXNfZ2VuZXJhdGVkLmMKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvY2hlY2stbmFtZXMuc2ggYi90ZXN0cy9zY3JpcHRzL2NoZWNrLW5hbWVzLnNoCmluZGV4IDZjOTE5NWIuLjU1Zjc2ZGEgMTAwNzU1Ci0tLSBhL3Rlc3RzL3NjcmlwdHMvY2hlY2stbmFtZXMuc2gKKysrIGIvdGVzdHMvc2NyaXB0cy9jaGVjay1uYW1lcy5zaApAQCAtNjUsNyArNjUsNyBAQAogZGlmZiBtYWNyb3MgaWRlbnRpZmllcnMgfCBzZWQgLW4gLWUgJ3MvPCAvL3AnID4gYWN0dWFsLW1hY3JvcwogCiBmb3IgVEhJTkcgaW4gYWN0dWFsLW1hY3JvcyBlbnVtLWNvbnN0czsgZG8KLSAgICBwcmludGYgIk5hbWVzIG9mICRUSElORzogIgorICAgIHByaW50ZiAnTmFtZXMgb2YgJXM6ICcgIiRUSElORyIKICAgICB0ZXN0IC1yICRUSElORwogICAgIEJBRD0kKCBncmVwIC1FIC12ICdeKE1CRURUTFN8UFNBKV9bMC05QS1aX10qWzAtOUEtWl0kJyAkVEhJTkcgfHwgdHJ1ZSApCiAgICAgVU5ERVJTQ09SRVM9JCggZ3JlcCAtRSAnLipfXy4qJyAkVEhJTkcgfHwgdHJ1ZSApCkBAIC04MSw3ICs4MSw3IEBACiBkb25lCiAKIGZvciBUSElORyBpbiBpZGVudGlmaWVyczsgZG8KLSAgICBwcmludGYgIk5hbWVzIG9mICRUSElORzogIgorICAgIHByaW50ZiAnTmFtZXMgb2YgJXM6ICcgIiRUSElORyIKICAgICB0ZXN0IC1yICRUSElORwogICAgIEJBRD0kKCBncmVwIC1FIC12ICdeKG1iZWR0bHN8cHNhKV9bMC05YS16X10qWzAtOWEtel0kJyAkVEhJTkcgfHwgdHJ1ZSApCiAgICAgaWYgWyAieCRCQUQiID0gIngiIF07IHRoZW4KZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvbGlzdC1tYWNyb3Muc2ggYi90ZXN0cy9zY3JpcHRzL2xpc3QtbWFjcm9zLnNoCmluZGV4IDE1ZDI1OTAuLmE4NjE3YTAgMTAwNzU1Ci0tLSBhL3Rlc3RzL3NjcmlwdHMvbGlzdC1tYWNyb3Muc2gKKysrIGIvdGVzdHMvc2NyaXB0cy9saXN0LW1hY3Jvcy5zaApAQCAtMzAsNCArMzAsMTAgQEAKICAgICB8IGVncmVwIC12ICdeKGFzbXxpbmxpbmV8RU1JVHxfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUpJHxeTVVMQUREQ18nIFwKICAgICB8IHNvcnQgLXUgPiBtYWNyb3MKIAorIyBGb3IgaW5jbHVkZS9tYmVkdGxzL2NvbmZpZ19wc2EuaCBuZWVkIHRvIGlnbm9yZSB0aGUgTUJFRFRMU194eHggZGVmaW5lCisjIGluIHRoYXQgZmlsZSBzaW5jZSB0aGV5IG1heSBub3QgYmUgZGVmaW5lZCBpbiBpbmNsdWRlL3BzYS9jcnlwdG9fY29uZmlnLmgKKyMgVGhpcyBsaW5lIHJlbmFtZXMgdGhlIHBvdGVudGlhbGx5IG1pc3NpbmcgZGVmaW5lcyB0byBvbmVzIHRoYXQgc2hvdWxkCisjIGJlIHByZXNlbnQuCitzZWQgLW5lICdzL15NQkVEVExTX1BTQV9CVUlMVElOXy9NQkVEVExTX1BTQV9BQ0NFTF8vcCcgPG1hY3JvcyA+Pm1hY3JvcworCiB3YyAtbCBtYWNyb3MKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGVzdC1yZWYtY29uZmlncy5wbCBiL3Rlc3RzL3NjcmlwdHMvdGVzdC1yZWYtY29uZmlncy5wbAppbmRleCAwMWVkZmUyLi5jZjQxNzVhIDEwMDc1NQotLS0gYS90ZXN0cy9zY3JpcHRzL3Rlc3QtcmVmLWNvbmZpZ3MucGwKKysrIGIvdGVzdHMvc2NyaXB0cy90ZXN0LXJlZi1jb25maWdzLnBsCkBAIC0yOCwxNyArMjgsMjEgQEAKIHVzZSBzdHJpY3Q7CiAKIG15ICVjb25maWdzID0gKAorICAgICdjb25maWctY2NtLXBzay10bHMxXzIuaCcgPT4geworICAgICAgICAnY29tcGF0JyA9PiAnLW0gdGxzMV8yIC1mIFwnXlRMUy1QU0stV0lUSC1BRVMtLi4uLUNDTS04XCcnLAorICAgIH0sCiAgICAgJ2NvbmZpZy1taW5pLXRsczFfMS5oJyA9PiB7CiAgICAgICAgICdjb21wYXQnID0+ICctbSB0bHMxXzEgLWYgXCdeREVTLUNCQzMtU0hBJFx8XlRMUy1SU0EtV0lUSC0zREVTLUVERS1DQkMtU0hBJFwnJywgIycKICAgICB9LAorICAgICdjb25maWctbm8tZW50cm9weS5oJyA9PiB7CisgICAgfSwKKyAgICAnY29uZmlnLXBzYS1jcnlwdG8uaCcgPT4geworICAgIH0sCiAgICAgJ2NvbmZpZy1zdWl0ZS1iLmgnID0+IHsKICAgICAgICAgJ2NvbXBhdCcgPT4gIi1tIHRsczFfMiAtZiAnRUNESEUtRUNEU0EuKkFFUy4qR0NNJyAtcCBtYmVkVExTIiwKICAgICB9LAogICAgICdjb25maWctc3ltbWV0cmljLW9ubHkuaCcgPT4gewogICAgIH0sCi0gICAgJ2NvbmZpZy1jY20tcHNrLXRsczFfMi5oJyA9PiB7Ci0gICAgICAgICdjb21wYXQnID0+ICctbSB0bHMxXzIgLWYgXCdeVExTLVBTSy1XSVRILUFFUy0uLi4tQ0NNLThcJycsCi0gICAgfSwKICAgICAnY29uZmlnLXRocmVhZC5oJyA9PiB7CiAgICAgICAgICdvcHQnID0+ICctZiBFQ0pQQUtFLipub2xvZycsCiAgICAgfSwKZGlmZiAtLWdpdCBhL3Rlc3RzL3NyYy9kcml2ZXJzL2tleV9tYW5hZ2VtZW50LmMgYi90ZXN0cy9zcmMvZHJpdmVycy9rZXlfbWFuYWdlbWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZDJiNDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zcmMvZHJpdmVycy9rZXlfbWFuYWdlbWVudC5jCkBAIC0wLDAgKzEsMzU1IEBACisvKgorICogVGVzdCBkcml2ZXIgZm9yIGdlbmVyYXRpbmcgYW5kIHZlcmlmeWluZyBrZXlzLgorICogQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgZ2VuZXJhdGluZyBhbmQgdmVyaWZ5aW5nIEVDQyBrZXlzLgorICovCisvKiAgQ29weXJpZ2h0IFRoZSBNYmVkIFRMUyBDb250cmlidXRvcnMKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMpICYmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyNpbmNsdWRlICJwc2EvY3J5cHRvLmgiCisjaW5jbHVkZSAicHNhX2NyeXB0b19jb3JlLmgiCisjaW5jbHVkZSAibWJlZHRscy9lY3AuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisKKyNpbmNsdWRlICJ0ZXN0L2RyaXZlcnMva2V5X21hbmFnZW1lbnQuaCIKKworI2luY2x1ZGUgInRlc3QvcmFuZG9tLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwordGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3NfdCB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcyA9CisgICAgVEVTVF9EUklWRVJfS0VZX01BTkFHRU1FTlRfSU5JVDsKKworcHNhX3N0YXR1c190IHRlc3RfdHJhbnNwYXJlbnRfZ2VuZXJhdGVfa2V5KAorICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgIHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9zaXplLCBzaXplX3QgKmtleV9sZW5ndGggKQoreworI2lmICFkZWZpbmVkKE1CRURUTFNfUFNBX0FDQ0VMX0tFWV9UWVBFX0VDQ19LRVlfUEFJUikgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUFNBX0FDQ0VMX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKQorICAgICh2b2lkKWF0dHJpYnV0ZXM7CisjZW5kaWYgLyogIU1CRURUTFNfUFNBX0FDQ0VMX0tFWV9UWVBFX0VDQ19LRVlfUEFJUiAmJgorICAgICAgICAqICFNQkVEVExTX1BTQV9BQ0NFTF9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSAqLworICAgICsrdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuaGl0czsKKworICAgIGlmKCB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICAgICAgcmV0dXJuKCB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfc3RhdHVzICk7CisKKyAgICBpZiggdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX291dHB1dCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGlmKCB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfb3V0cHV0X2xlbmd0aCA+IGtleV9zaXplICkKKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwgKTsKKyAgICAgICAgbWVtY3B5KCBrZXksIHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzLmZvcmNlZF9vdXRwdXQsCisgICAgICAgICAgICAgICAgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX291dHB1dF9sZW5ndGggKTsKKyAgICAgICAgKmtleV9sZW5ndGggPSB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfb3V0cHV0X2xlbmd0aDsKKyAgICAgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOworICAgIH0KKworICAgIC8qIENvcGllZCBmcm9tIHBzYV9jcnlwdG8uYyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQUNDRUxfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1BTQV9BQ0NFTF9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSkKKyAgICBpZiAoIFBTQV9LRVlfVFlQRV9JU19FQ0MoIHBzYV9nZXRfa2V5X3R5cGUoIGF0dHJpYnV0ZXMgKSApCisgICAgICAgICAmJiBQU0FfS0VZX1RZUEVfSVNfS0VZX1BBSVIoIHBzYV9nZXRfa2V5X3R5cGUoIGF0dHJpYnV0ZXMgKSApICkKKyAgICB7CisgICAgICAgIHBzYV9lY2NfZmFtaWx5X3QgY3VydmUgPSBQU0FfS0VZX1RZUEVfRUNDX0dFVF9GQU1JTFkoCisgICAgICAgICAgICBwc2FfZ2V0X2tleV90eXBlKCBhdHRyaWJ1dGVzICkgKTsKKyAgICAgICAgbWJlZHRsc19lY3BfZ3JvdXBfaWQgZ3JwX2lkID0KKyAgICAgICAgICAgIG1iZWR0bHNfZWNjX2dyb3VwX29mX3BzYSgKKyAgICAgICAgICAgICAgICBjdXJ2ZSwKKyAgICAgICAgICAgICAgICBQU0FfQklUU19UT19CWVRFUyggcHNhX2dldF9rZXlfYml0cyggYXR0cmlidXRlcyApICkgKTsKKyAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqY3VydmVfaW5mbyA9CisgICAgICAgICAgICBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fZ3JwX2lkKCBncnBfaWQgKTsKKyAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpciBlY3A7CisgICAgICAgIG1iZWR0bHNfdGVzdF9ybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisgICAgICAgIG1lbXNldCggJnJuZF9pbmZvLCAweDVBLCBzaXplb2YoIG1iZWR0bHNfdGVzdF9ybmRfcHNldWRvX2luZm8gKSApOworCisgICAgICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOworICAgICAgICBpZiggYXR0cmlidXRlcy0+ZG9tYWluX3BhcmFtZXRlcnNfc2l6ZSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyAgICAgICAgaWYoIGdycF9pZCA9PSBNQkVEVExTX0VDUF9EUF9OT05FIHx8IGN1cnZlX2luZm8gPT0gTlVMTCApCisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisgICAgICAgIGlmKCBjdXJ2ZV9pbmZvLT5iaXRfc2l6ZSAhPSBwc2FfZ2V0X2tleV9iaXRzKCBhdHRyaWJ1dGVzICkgKQorICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCApOworICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2luaXQoICZlY3AgKTsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19lY3BfZ2VuX2tleSggZ3JwX2lkLCAmZWNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWJlZHRsc190ZXN0X3JuZF9wc2V1ZG9fcmFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJuZF9pbmZvICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfZnJlZSggJmVjcCApOworICAgICAgICAgICAgcmV0dXJuKCBtYmVkdGxzX3RvX3BzYV9lcnJvciggcmV0ICkgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIE1ha2Ugc3VyZSB0byB1c2UgZXhwb3J0IHJlcHJlc2VudGF0aW9uICovCisgICAgICAgIHNpemVfdCBieXRlcyA9IFBTQV9CSVRTX1RPX0JZVEVTKCBwc2FfZ2V0X2tleV9iaXRzKCBhdHRyaWJ1dGVzICkgKTsKKyAgICAgICAgaWYoIGtleV9zaXplIDwgYnl0ZXMgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoICZlY3AgKTsKKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwgKTsKKyAgICAgICAgfQorICAgICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gbWJlZHRsc190b19wc2FfZXJyb3IoCisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoICZlY3AuZCwga2V5LCBieXRlcyApICk7CisKKyAgICAgICAgaWYoIHN0YXR1cyA9PSBQU0FfU1VDQ0VTUyApCisgICAgICAgIHsKKyAgICAgICAgICAgICprZXlfbGVuZ3RoID0gYnl0ZXM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtZW1zZXQoIGtleSwgMCwgYnl0ZXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfZnJlZSggJmVjcCApOworICAgICAgICByZXR1cm4oIHN0YXR1cyApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQUNDRUxfS0VZX1RZUEVfRUNDX0tFWV9QQUlSIHx8CisgICAgICAgICogTUJFRFRMU19QU0FfQUNDRUxfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVkgKi8KKyAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7Cit9CisKK3BzYV9zdGF0dXNfdCB0ZXN0X29wYXF1ZV9nZW5lcmF0ZV9rZXkoCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X3NpemUsIHNpemVfdCAqa2V5X2xlbmd0aCApCit7CisgICAgKHZvaWQpIGF0dHJpYnV0ZXM7CisgICAgKHZvaWQpIGtleTsKKyAgICAodm9pZCkga2V5X3NpemU7CisgICAgKHZvaWQpIGtleV9sZW5ndGg7CisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworfQorCitwc2Ffc3RhdHVzX3QgdGVzdF90cmFuc3BhcmVudF92YWxpZGF0ZV9rZXkoCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgY29uc3QgdWludDhfdCAqZGF0YSwKKyAgICBzaXplX3QgZGF0YV9sZW5ndGgsCisgICAgc2l6ZV90ICpiaXRzICkKK3sKKyAgICArK3Rlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzLmhpdHM7CisKKyAgICBpZiggdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX3N0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCisgICAgICAgIHJldHVybiggdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX3N0YXR1cyApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9BQ0NFTF9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0FDQ0VMX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKQorICAgIHBzYV9rZXlfdHlwZV90IHR5cGUgPSBwc2FfZ2V0X2tleV90eXBlKCBhdHRyaWJ1dGVzICk7CisgICAgaWYgKCBQU0FfS0VZX1RZUEVfSVNfRUNDKCB0eXBlICkgKQorICAgIHsKKyAgICAgICAgLy8gQ29kZSBtb3N0bHkgY29waWVkIGZyb20gcHNhX2xvYWRfZWNwX3JlcHJlc2VudGF0aW9uCisgICAgICAgIHBzYV9lY2NfZmFtaWx5X3QgY3VydmUgPSBQU0FfS0VZX1RZUEVfRUNDX0dFVF9GQU1JTFkoIHR5cGUgKTsKKyAgICAgICAgbWJlZHRsc19lY3BfZ3JvdXBfaWQgZ3JwX2lkOworICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyIGVjcDsKKyAgICAgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOworCisgICAgICAgIGlmKCBwc2FfZ2V0X2tleV9iaXRzKCBhdHRyaWJ1dGVzICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEF0dGVtcHQgYXV0by1kZXRlY3Qgb2YgY3VydmUgYml0IHNpemUKKyAgICAgICAgICAgIHNpemVfdCBjdXJ2ZV9zaXplID0gZGF0YV9sZW5ndGg7CisKKyAgICAgICAgICAgIGlmKCBQU0FfS0VZX1RZUEVfSVNfUFVCTElDX0tFWSggdHlwZSApICYmCisgICAgICAgICAgICAgICAgUFNBX0tFWV9UWVBFX0VDQ19HRVRfRkFNSUxZKCB0eXBlICkgIT0gUFNBX0VDQ19GQU1JTFlfTU9OVEdPTUVSWSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQSBXZWllcnN0cmFzcyBwdWJsaWMga2V5IGlzIHJlcHJlc2VudGVkIGFzOgorICAgICAgICAgICAgICAgICAqIC0gVGhlIGJ5dGUgMHgwNDsKKyAgICAgICAgICAgICAgICAgKiAtIGB4X1BgIGFzIGEgYGNlaWxpbmcobS84KWAtYnl0ZSBzdHJpbmcsIGJpZy1lbmRpYW47CisgICAgICAgICAgICAgICAgICogLSBgeV9QYCBhcyBhIGBjZWlsaW5nKG0vOClgLWJ5dGUgc3RyaW5nLCBiaWctZW5kaWFuLgorICAgICAgICAgICAgICAgICAqIFNvIGl0cyBkYXRhIGxlbmd0aCBpcyAybSsxIHdoZXJlIG0gaXMgdGhlIGN1cnZlIHNpemUgaW4gYml0cy4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiggKCBkYXRhX2xlbmd0aCAmIDEgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCApOworICAgICAgICAgICAgICAgIGN1cnZlX3NpemUgPSBkYXRhX2xlbmd0aCAvIDI7CisKKyAgICAgICAgICAgICAgICAvKiBNb250Z29tZXJ5IHB1YmxpYyBrZXlzIGFyZSByZXByZXNlbnRlZCBpbiBjb21wcmVzc2VkIGZvcm1hdCwgbWVhbmluZworICAgICAgICAgICAgICAgICAqIHRoZWlyIGN1cnZlX3NpemUgaXMgZXF1YWwgdG8gdGhlIGFtb3VudCBvZiBpbnB1dC4gKi8KKworICAgICAgICAgICAgICAgIC8qIFByaXZhdGUga2V5cyBhcmUgcmVwcmVzZW50ZWQgaW4gdW5jb21wcmVzc2VkIHByaXZhdGUgcmFuZG9tIGludGVnZXIKKyAgICAgICAgICAgICAgICAgKiBmb3JtYXQsIG1lYW5pbmcgdGhlaXIgY3VydmVfc2l6ZSBpcyBlcXVhbCB0byB0aGUgYW1vdW50IG9mIGlucHV0LiAqLworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBncnBfaWQgPSBtYmVkdGxzX2VjY19ncm91cF9vZl9wc2EoIGN1cnZlLCBjdXJ2ZV9zaXplICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBncnBfaWQgPSBtYmVkdGxzX2VjY19ncm91cF9vZl9wc2EoIGN1cnZlLAorICAgICAgICAgICAgICAgIFBTQV9CSVRTX1RPX0JZVEVTKCBwc2FfZ2V0X2tleV9iaXRzKCBhdHRyaWJ1dGVzICkgKSApOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqY3VydmVfaW5mbyA9CisgICAgICAgICAgICBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fZ3JwX2lkKCBncnBfaWQgKTsKKworICAgICAgICBpZiggYXR0cmlidXRlcy0+ZG9tYWluX3BhcmFtZXRlcnNfc2l6ZSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyAgICAgICAgaWYoIGdycF9pZCA9PSBNQkVEVExTX0VDUF9EUF9OT05FIHx8IGN1cnZlX2luZm8gPT0gTlVMTCApCisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisKKyAgICAgICAgKmJpdHMgPSBjdXJ2ZV9pbmZvLT5iaXRfc2l6ZTsKKworICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2luaXQoICZlY3AgKTsKKworICAgICAgICBzdGF0dXMgPSBtYmVkdGxzX3RvX3BzYV9lcnJvcigKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmVjcC5ncnAsIGdycF9pZCApICk7CisgICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICAgICAgZ290byBlY3BfZXhpdDsKKworICAgICAgICAvKiBMb2FkIHRoZSBrZXkgbWF0ZXJpYWwuICovCisgICAgICAgIGlmKCBQU0FfS0VZX1RZUEVfSVNfUFVCTElDX0tFWSggdHlwZSApICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogTG9hZCB0aGUgcHVibGljIHZhbHVlLiAqLworICAgICAgICAgICAgc3RhdHVzID0gbWJlZHRsc190b19wc2FfZXJyb3IoCisgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9iaW5hcnkoICZlY3AuZ3JwLCAmZWNwLlEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbGVuZ3RoICkgKTsKKyAgICAgICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICAgICAgICAgIGdvdG8gZWNwX2V4aXQ7CisKKyAgICAgICAgICAgIC8qIENoZWNrIHRoYXQgdGhlIHBvaW50IGlzIG9uIHRoZSBjdXJ2ZS4gKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKAorICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggJmVjcC5ncnAsICZlY3AuUSApICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBMb2FkIGFuZCB2YWxpZGF0ZSB0aGUgc2VjcmV0IHZhbHVlLiAqLworICAgICAgICAgICAgc3RhdHVzID0gbWJlZHRsc190b19wc2FfZXJyb3IoCisgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfcmVhZF9rZXkoIGVjcC5ncnAuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlY3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbGVuZ3RoICkgKTsKKyAgICAgICAgfQorCitlY3BfZXhpdDoKKyAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9mcmVlKCAmZWNwICk7CisgICAgICAgIHJldHVybiggc3RhdHVzICk7CisgICAgfQorICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyNlbHNlCisgICAgKHZvaWQpIGF0dHJpYnV0ZXM7CisgICAgKHZvaWQpIGRhdGE7CisgICAgKHZvaWQpIGRhdGFfbGVuZ3RoOworICAgICh2b2lkKSBiaXRzOworICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9BQ0NFTF9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIgfHwKKyAgICAgICAgKiBNQkVEVExTX1BTQV9BQ0NFTF9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSAqLworfQorCitwc2Ffc3RhdHVzX3QgdGVzdF90cmFuc3BhcmVudF9leHBvcnRfcHVibGljX2tleSgKKyAgICBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICBjb25zdCB1aW50OF90ICprZXksIHNpemVfdCBrZXlfbGVuZ3RoLAorICAgIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBkYXRhX3NpemUsIHNpemVfdCAqZGF0YV9sZW5ndGggKQoreworICAgICsrdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuaGl0czsKKworICAgIGlmKCB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICAgICAgcmV0dXJuKCB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfc3RhdHVzICk7CisKKyAgICBpZiggdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX291dHB1dCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGlmKCB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfb3V0cHV0X2xlbmd0aCA+IGRhdGFfc2l6ZSApCisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICk7CisgICAgICAgIG1lbWNweSggZGF0YSwgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX291dHB1dCwKKyAgICAgICAgICAgICAgICB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfb3V0cHV0X2xlbmd0aCApOworICAgICAgICAqZGF0YV9sZW5ndGggPSB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfb3V0cHV0X2xlbmd0aDsKKyAgICAgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOworICAgIH0KKworICAgIGlmKCBrZXkgPT0gTlVMTCB8fCBrZXlfbGVuZ3RoID09IDAgKQorICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CisKKyAgICBwc2Ffa2V5X3R5cGVfdCBrZXl0eXBlID0gcHNhX2dldF9rZXlfdHlwZSggYXR0cmlidXRlcyApOworICAgICh2b2lkKSBrZXl0eXBlOworCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9BQ0NFTF9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUFNBX0FDQ0VMX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKQorICAgIGlmKCBQU0FfS0VZX1RZUEVfSVNfRUNDKCBrZXl0eXBlICkgKQorICAgIHsKKyAgICAgICAgaWYoICFQU0FfS0VZX1RZUEVfSVNfS0VZX1BBSVIoIGtleXR5cGUgKSApCisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CisKKyAgICAgICAgLyogTW9zdGx5IGNvcGllZCBmcm9tIHBzYV9jcnlwdG8uYyAqLworICAgICAgICBtYmVkdGxzX2VjcF9ncm91cF9pZCBncnBfaWQgPSBNQkVEVExTX0VDUF9EUF9OT05FOworICAgICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gUFNBX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQ7CisgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgZWNwOworICAgICAgICBtYmVkdGxzX3Rlc3Rfcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworICAgICAgICBtZW1zZXQoICZybmRfaW5mbywgMHg1QSwgc2l6ZW9mKCBtYmVkdGxzX3Rlc3Rfcm5kX3BzZXVkb19pbmZvICkgKTsKKworICAgICAgICBpZiggYXR0cmlidXRlcy0+ZG9tYWluX3BhcmFtZXRlcnNfc2l6ZSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKworICAgICAgICBncnBfaWQgPSBtYmVkdGxzX2VjY19ncm91cF9vZl9wc2EoIFBTQV9LRVlfVFlQRV9FQ0NfR0VUX0ZBTUlMWSgga2V5dHlwZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9CSVRTX1RPX0JZVEVTKCBwc2FfZ2V0X2tleV9iaXRzKCBhdHRyaWJ1dGVzICkgKSApOworICAgICAgICBpZiggZ3JwX2lkID09IE1CRURUTFNfRUNQX0RQX05PTkUgKQorICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworCisgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfaW5pdCggJmVjcCApOworCisgICAgICAgIHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZWNwLmdycCwgZ3JwX2lkICkgKTsKKyAgICAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCisgICAgICAgICAgICBnb3RvIGVjcF9leGl0OworCisgICAgICAgIHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKAorICAgICAgICAgICAgbWJlZHRsc19lY3BfcmVhZF9rZXkoIGVjcC5ncnAuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVjcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2xlbmd0aCApICk7CisgICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICAgICAgZ290byBlY3BfZXhpdDsKKworICAgICAgICAvKiBDYWxjdWxhdGUgdGhlIHB1YmxpYyBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gbWJlZHRsc190b19wc2FfZXJyb3IoCisgICAgICAgICAgICBtYmVkdGxzX2VjcF9tdWwoICZlY3AuZ3JwLCAmZWNwLlEsICZlY3AuZCwgJmVjcC5ncnAuRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1iZWR0bHNfdGVzdF9ybmRfcHNldWRvX3JhbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZybmRfaW5mbyApICk7CisgICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICAgICAgZ290byBlY3BfZXhpdDsKKworICAgICAgICBzdGF0dXMgPSBtYmVkdGxzX3RvX3BzYV9lcnJvcigKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfcG9pbnRfd3JpdGVfYmluYXJ5KCAmZWNwLmdycCwgJmVjcC5RLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRUNQX1BGX1VOQ09NUFJFU1NFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfc2l6ZSApICk7CisgICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICAgICAgbWVtc2V0KCBkYXRhLCAwLCBkYXRhX3NpemUgKTsKK2VjcF9leGl0OgorICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoICZlY3AgKTsKKyAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19QU0FfQUNDRUxfS0VZX1RZUEVfRUNDX0tFWV9QQUlSIHx8CisgICAgICAgICogTUJFRFRMU19QU0FfQUNDRUxfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVkgKi8KKworICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKK30KKworcHNhX3N0YXR1c190IHRlc3Rfb3BhcXVlX2V4cG9ydF9wdWJsaWNfa2V5KAorICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9sZW5ndGgsCisgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSwgc2l6ZV90ICpkYXRhX2xlbmd0aCApCit7CisgICAgKHZvaWQpIGF0dHJpYnV0ZXM7CisgICAgKHZvaWQpIGtleTsKKyAgICAodm9pZCkga2V5X2xlbmd0aDsKKyAgICAodm9pZCkgZGF0YTsKKyAgICAodm9pZCkgZGF0YV9zaXplOworICAgICh2b2lkKSBkYXRhX2xlbmd0aDsKKyAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUyAmJiBQU0FfQ1JZUFRPX0RSSVZFUl9URVNUICovCmRpZmYgLS1naXQgYS90ZXN0cy9zcmMvZHJpdmVycy9rZXlnZW4uYyBiL3Rlc3RzL3NyYy9kcml2ZXJzL2tleWdlbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTVhNGJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL3NyYy9kcml2ZXJzL2tleWdlbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8qCi0gKiBUZXN0IGRyaXZlciBmb3IgZ2VuZXJhdGluZyBrZXlzLgotICogQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgZ2VuZXJhdGluZyBFQ0Mga2V5cy4KLSAqLwotLyogIENvcHlyaWdodCBUaGUgTWJlZCBUTFMgQ29udHJpYnV0b3JzCi0gKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLSAqCi0gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKLSAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLSAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQotI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCi0jZWxzZQotI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTKSAmJiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCi0jaW5jbHVkZSAicHNhL2NyeXB0by5oIgotI2luY2x1ZGUgInBzYV9jcnlwdG9fY29yZS5oIgotI2luY2x1ZGUgIm1iZWR0bHMvZWNwLmgiCi0jaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgotCi0jaW5jbHVkZSAidGVzdC9kcml2ZXJzL2tleWdlbi5oIgotCi0jaW5jbHVkZSAidGVzdC9yYW5kb20uaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi10ZXN0X2RyaXZlcl9rZXlnZW5faG9va3NfdCB0ZXN0X2RyaXZlcl9rZXlnZW5faG9va3MgPSBURVNUX0RSSVZFUl9LRVlHRU5fSU5JVDsKLQotcHNhX3N0YXR1c190IHRlc3RfdHJhbnNwYXJlbnRfZ2VuZXJhdGVfa2V5KAotICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAotICAgIHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9zaXplLCBzaXplX3QgKmtleV9sZW5ndGggKQotewotICAgICsrdGVzdF9kcml2ZXJfa2V5Z2VuX2hvb2tzLmhpdHM7Ci0KLSAgICBpZiggdGVzdF9kcml2ZXJfa2V5Z2VuX2hvb2tzLmZvcmNlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQotICAgICAgICByZXR1cm4oIHRlc3RfZHJpdmVyX2tleWdlbl9ob29rcy5mb3JjZWRfc3RhdHVzICk7Ci0KLSAgICBpZiggdGVzdF9kcml2ZXJfa2V5Z2VuX2hvb2tzLmZvcmNlZF9vdXRwdXQgIT0gTlVMTCApCi0gICAgewotICAgICAgICBpZiggdGVzdF9kcml2ZXJfa2V5Z2VuX2hvb2tzLmZvcmNlZF9vdXRwdXRfbGVuZ3RoID4ga2V5X3NpemUgKQotICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCApOwotICAgICAgICBtZW1jcHkoIGtleSwgdGVzdF9kcml2ZXJfa2V5Z2VuX2hvb2tzLmZvcmNlZF9vdXRwdXQsCi0gICAgICAgICAgICAgICAgdGVzdF9kcml2ZXJfa2V5Z2VuX2hvb2tzLmZvcmNlZF9vdXRwdXRfbGVuZ3RoICk7Ci0gICAgICAgICprZXlfbGVuZ3RoID0gdGVzdF9kcml2ZXJfa2V5Z2VuX2hvb2tzLmZvcmNlZF9vdXRwdXRfbGVuZ3RoOwotICAgICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7Ci0gICAgfQotCi0gICAgLyogQ29waWVkIGZyb20gcHNhX2NyeXB0by5jICovCi0jaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQotICAgIGlmICggUFNBX0tFWV9UWVBFX0lTX0VDQyggcHNhX2dldF9rZXlfdHlwZSggYXR0cmlidXRlcyApICkKLSAgICAgICAgICYmIFBTQV9LRVlfVFlQRV9JU19LRVlfUEFJUiggcHNhX2dldF9rZXlfdHlwZSggYXR0cmlidXRlcyApICkgKQotICAgIHsKLSAgICAgICAgcHNhX2VjY19mYW1pbHlfdCBjdXJ2ZSA9IFBTQV9LRVlfVFlQRV9FQ0NfR0VUX0ZBTUlMWSggcHNhX2dldF9rZXlfdHlwZSggYXR0cmlidXRlcyApICk7Ci0gICAgICAgIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGdycF9pZCA9Ci0gICAgICAgICAgICBtYmVkdGxzX2VjY19ncm91cF9vZl9wc2EoIGN1cnZlLCBQU0FfQklUU19UT19CWVRFUyggcHNhX2dldF9rZXlfYml0cyggYXR0cmlidXRlcyApICkgKTsKLSAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqY3VydmVfaW5mbyA9Ci0gICAgICAgICAgICBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fZ3JwX2lkKCBncnBfaWQgKTsKLSAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpciBlY3A7Ci0gICAgICAgIG1iZWR0bHNfdGVzdF9ybmRfcHNldWRvX2luZm8gcm5kX2luZm87Ci0gICAgICAgIG1lbXNldCggJnJuZF9pbmZvLCAweDVBLCBzaXplb2YoIG1iZWR0bHNfdGVzdF9ybmRfcHNldWRvX2luZm8gKSApOwotCi0gICAgICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOwotICAgICAgICBpZiggYXR0cmlidXRlcy0+ZG9tYWluX3BhcmFtZXRlcnNfc2l6ZSAhPSAwICkKLSAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKLSAgICAgICAgaWYoIGdycF9pZCA9PSBNQkVEVExTX0VDUF9EUF9OT05FIHx8IGN1cnZlX2luZm8gPT0gTlVMTCApCi0gICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7Ci0gICAgICAgIGlmKCBjdXJ2ZV9pbmZvLT5iaXRfc2l6ZSAhPSBwc2FfZ2V0X2tleV9iaXRzKCBhdHRyaWJ1dGVzICkgKQotICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCApOwotICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2luaXQoICZlY3AgKTsKLSAgICAgICAgcmV0ID0gbWJlZHRsc19lY3BfZ2VuX2tleSggZ3JwX2lkLCAmZWNwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWJlZHRsc190ZXN0X3JuZF9wc2V1ZG9fcmFuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJuZF9pbmZvICk7Ci0gICAgICAgIGlmKCByZXQgIT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfZnJlZSggJmVjcCApOwotICAgICAgICAgICAgcmV0dXJuKCBtYmVkdGxzX3RvX3BzYV9lcnJvciggcmV0ICkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE1ha2Ugc3VyZSB0byB1c2UgZXhwb3J0IHJlcHJlc2VudGF0aW9uICovCi0gICAgICAgIHNpemVfdCBieXRlcyA9IFBTQV9CSVRTX1RPX0JZVEVTKCBwc2FfZ2V0X2tleV9iaXRzKCBhdHRyaWJ1dGVzICkgKTsKLSAgICAgICAgaWYoIGtleV9zaXplIDwgYnl0ZXMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoICZlY3AgKTsKLSAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwgKTsKLSAgICAgICAgfQotICAgICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gbWJlZHRsc190b19wc2FfZXJyb3IoCi0gICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoICZlY3AuZCwga2V5LCBieXRlcyApICk7Ci0KLSAgICAgICAgaWYoIHN0YXR1cyA9PSBQU0FfU1VDQ0VTUyApCi0gICAgICAgIHsKLSAgICAgICAgICAgICprZXlfbGVuZ3RoID0gYnl0ZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoICZlY3AgKTsKLSAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKLSAgICB9Ci0gICAgZWxzZQotI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KLSAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7Ci19Ci0KLXBzYV9zdGF0dXNfdCB0ZXN0X29wYXF1ZV9nZW5lcmF0ZV9rZXkoCi0gICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCi0gICAgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X3NpemUsIHNpemVfdCAqa2V5X2xlbmd0aCApCi17Ci0gICAgKHZvaWQpIGF0dHJpYnV0ZXM7Ci0gICAgKHZvaWQpIGtleTsKLSAgICAodm9pZCkga2V5X3NpemU7Ci0gICAgKHZvaWQpIGtleV9sZW5ndGg7Ci0gICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOwotfQotCi0jZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMgJiYgUFNBX0NSWVBUT19EUklWRVJfVEVTVCAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3JjL2RyaXZlcnMvc2lnbmF0dXJlLmMgYi90ZXN0cy9zcmMvZHJpdmVycy9zaWduYXR1cmUuYwppbmRleCAwMjhkMjRhLi5jZWEwMzUxIDEwMDY0NAotLS0gYS90ZXN0cy9zcmMvZHJpdmVycy9zaWduYXR1cmUuYworKysgYi90ZXN0cy9zcmMvZHJpdmVycy9zaWduYXR1cmUuYwpAQCAtMjYyLDYgKzI2Miw4IEBACiAgICAgKHZvaWQpIGFsZzsKICAgICAodm9pZCkgaGFzaDsKICAgICAodm9pZCkgaGFzaF9sZW5ndGg7CisgICAgKHZvaWQpIHNpZ25hdHVyZTsKKyAgICAodm9pZCkgc2lnbmF0dXJlX2xlbmd0aDsKICNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgJiYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMpICYmIFwKICAgICAgICAgICBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpICovCiAKZGlmZiAtLWdpdCBhL3Rlc3RzL3NyYy9kcml2ZXJzL3NpemUuYyBiL3Rlc3RzL3NyYy9kcml2ZXJzL3NpemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmE4NjkyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3JjL2RyaXZlcnMvc2l6ZS5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBUZXN0IGRyaXZlciBmb3IgcmV0cmlldmluZyBrZXkgY29udGV4dCBzaXplLgorICogT25seSB1c2VkIGJ5IG9wYXF1ZSBkcml2ZXJzLgorICovCisvKiAgQ29weXJpZ2h0IFRoZSBNYmVkIFRMUyBDb250cmlidXRvcnMKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMpICYmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKworI2luY2x1ZGUgInRlc3QvZHJpdmVycy9zaXplLmgiCisKKyNpZmRlZiBURVNUX0tFWV9DT05URVhUX1NJWkVfRlVOQ1RJT04KK3NpemVfdCB0ZXN0X3NpemVfZnVuY3Rpb24oCisgICAgY29uc3QgcHNhX2tleV90eXBlX3Qga2V5X3R5cGUsCisgICAgY29uc3Qgc2l6ZV90IGtleV9iaXRzICkKK3sKKyAgICAodm9pZCkga2V5X3R5cGU7CisgICAgKHZvaWQpIGtleV9iaXRzOworICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qVEVTVF9LRVlfQ09OVEVYVF9TSVpFX0ZVTkNUSU9OICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUyAmJiBQU0FfQ1JZUFRPX0RSSVZFUl9URVNUICovCmRpZmYgLS1naXQgYS90ZXN0cy9zcmMvaGVscGVycy5jIGIvdGVzdHMvc3JjL2hlbHBlcnMuYwppbmRleCBmMzg1MDc5Li5hMThmMWQ0IDEwMDY0NAotLS0gYS90ZXN0cy9zcmMvaGVscGVycy5jCisrKyBiL3Rlc3RzL3NyYy9oZWxwZXJzLmMKQEAgLTE5LDEwICsxOSwzNCBAQAogI2luY2x1ZGUgPHRlc3QvbWFjcm9zLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0hFQ0tfUEFSQU1TKQorI2luY2x1ZGUgPHNldGptcC5oPgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBTdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NIRUNLX1BBUkFNUykKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDhfdCBleHBlY3RlZF9jYWxsOworICAgIHVpbnQ4X3QgZXhwZWN0ZWRfY2FsbF9oYXBwZW5lZDsKKworICAgIGptcF9idWYgc3RhdGU7CisKKyAgICBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2xvY2F0aW9uX3JlY29yZF90IGxvY2F0aW9uX3JlY29yZDsKK30KK3BhcmFtX2ZhaWxlZF9jdHhfdDsKK3N0YXRpYyBwYXJhbV9mYWlsZWRfY3R4X3QgcGFyYW1fZmFpbGVkX2N0eDsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCiBzdGF0aWMgbWJlZHRsc19wbGF0Zm9ybV9jb250ZXh0IHBsYXRmb3JtX2N0eDsKICNlbmRpZgogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogSGVscGVyIEZ1bmN0aW9ucyAqLworCiBpbnQgbWJlZHRsc190ZXN0X3BsYXRmb3JtX3NldHVwKCB2b2lkICkKIHsKICAgICBpbnQgcmV0ID0gMDsKQEAgLTE1OSwzICsxODMsNjQgQEAKICAgICB9CiAgICAgcmV0dXJuIHJldDsKIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSEVDS19QQVJBTVMpCit2b2lkIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfZ2V0X2xvY2F0aW9uX3JlY29yZCgKKyAgICAgICAgIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfbG9jYXRpb25fcmVjb3JkX3QgKmxvY2F0aW9uX3JlY29yZCApCit7CisgICAgKmxvY2F0aW9uX3JlY29yZCA9IHBhcmFtX2ZhaWxlZF9jdHgubG9jYXRpb25fcmVjb3JkOworfQorCit2b2lkIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfZXhwZWN0X2NhbGwoIHZvaWQgKQoreworICAgIHBhcmFtX2ZhaWxlZF9jdHguZXhwZWN0ZWRfY2FsbF9oYXBwZW5lZCA9IDA7CisgICAgcGFyYW1fZmFpbGVkX2N0eC5leHBlY3RlZF9jYWxsID0gMTsKK30KKworaW50IG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfY2hlY2tfZXhwZWN0ZWRfY2FsbCggdm9pZCApCit7CisgICAgcGFyYW1fZmFpbGVkX2N0eC5leHBlY3RlZF9jYWxsID0gMDsKKworICAgIGlmKCBwYXJhbV9mYWlsZWRfY3R4LmV4cGVjdGVkX2NhbGxfaGFwcGVuZWQgIT0gMCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgcmV0dXJuKCAtMSApOworfQorCit2b2lkKiBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2dldF9zdGF0ZV9idWYoIHZvaWQgKQoreworICAgIHJldHVybiAmcGFyYW1fZmFpbGVkX2N0eC5zdGF0ZTsKK30KKwordm9pZCBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX3Jlc2V0X3N0YXRlKCB2b2lkICkKK3sKKyAgICBtZW1zZXQoIHBhcmFtX2ZhaWxlZF9jdHguc3RhdGUsIDAsIHNpemVvZiggcGFyYW1fZmFpbGVkX2N0eC5zdGF0ZSApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19wYXJhbV9mYWlsZWQoIGNvbnN0IGNoYXIgKmZhaWx1cmVfY29uZGl0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lICkKK3sKKyAgICAvKiBSZWNvcmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBmYWlsdXJlICovCisgICAgcGFyYW1fZmFpbGVkX2N0eC5sb2NhdGlvbl9yZWNvcmQuZmFpbHVyZV9jb25kaXRpb24gPSBmYWlsdXJlX2NvbmRpdGlvbjsKKyAgICBwYXJhbV9mYWlsZWRfY3R4LmxvY2F0aW9uX3JlY29yZC5maWxlID0gZmlsZTsKKyAgICBwYXJhbV9mYWlsZWRfY3R4LmxvY2F0aW9uX3JlY29yZC5saW5lID0gbGluZTsKKworICAgIC8qIElmIHdlIGFyZSB0ZXN0aW5nIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4uLiAgKi8KKyAgICBpZiggcGFyYW1fZmFpbGVkX2N0eC5leHBlY3RlZF9jYWxsICE9IDAgKQorICAgIHsKKyAgICAgICAgcGFyYW1fZmFpbGVkX2N0eC5leHBlY3RlZF9jYWxsID0gMDsKKyAgICAgICAgcGFyYW1fZmFpbGVkX2N0eC5leHBlY3RlZF9jYWxsX2hhcHBlbmVkID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogLi4uZWxzZSB0cnkgYSBsb25nIGp1bXAuIElmIHRoZSBleGVjdXRpb24gc3RhdGUgaGFzIG5vdCBiZWVuIHNldC11cAorICAgICAgICAgKiBvciByZXNldCB0aGVuIHRoZSBsb25nIGp1bXAgYnVmZmVyIGlzIGFsbCB6ZXJvJ3MgYW5kIHRoZSBjYWxsIHdpbGwKKyAgICAgICAgICogd2l0aCBoaWdoIHByb2JhYmlsaXR5IGZhdWx0LCBlbXBoYXNpemluZyB0aGVyZSBpcyBzb21ldGhpbmcgdG8gbG9vaworICAgICAgICAgKiBhdC4KKyAgICAgICAgICovCisKKyAgICAgICAgbG9uZ2ptcCggcGFyYW1fZmFpbGVkX2N0eC5zdGF0ZSwgMSApOworICAgIH0KK30KKyNlbmRpZiAvKiBNQkVEVExTX0NIRUNLX1BBUkFNUyAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3JjL3JhbmRvbS5jIGIvdGVzdHMvc3JjL3JhbmRvbS5jCmluZGV4IGFmODhkOTguLmUwMWJkNGQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3NyYy9yYW5kb20uYworKysgYi90ZXN0cy9zcmMvcmFuZG9tLmMKQEAgLTIyLDYgKzIyLDE1IEBACiAgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAorLyoKKyAqIGZvciBhcmM0cmFuZG9tX2J1ZigpIGZyb20gPHN0ZGxpYi5oPgorICovCisjaWYgZGVmaW5lZChfX05ldEJTRF9fKQorI2RlZmluZSBfTkVUQlNEX1NPVVJDRSAxCisjZWxpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKQorI2RlZmluZSBfQlNEX1NPVVJDRSAxCisjZW5kaWYKKwogI2luY2x1ZGUgPHRlc3QvbWFjcm9zLmg+CiAjaW5jbHVkZSA8dGVzdC9yYW5kb20uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KZGlmZiAtLWdpdCBhL3Rlc3RzL3NzbC1vcHQuc2ggYi90ZXN0cy9zc2wtb3B0LnNoCmluZGV4IDY1M2Q4OGQuLmZjZDczZjIgMTAwNzU1Ci0tLSBhL3Rlc3RzL3NzbC1vcHQuc2gKKysrIGIvdGVzdHMvc3NsLW9wdC5zaApAQCAtMTE0LDggKzExNCw4IEBACiAgICAgZWNobyAiVXNhZ2U6ICQwIFtvcHRpb25zXSIKICAgICBwcmludGYgIiAgLWh8LS1oZWxwXHRQcmludCB0aGlzIGhlbHAuXG4iCiAgICAgcHJpbnRmICIgIC1tfC0tbWVtY2hlY2tcdENoZWNrIG1lbW9yeSBsZWFrcyBhbmQgZXJyb3JzLlxuIgotICAgIHByaW50ZiAiICAtZnwtLWZpbHRlclx0T25seSBtYXRjaGluZyB0ZXN0cyBhcmUgZXhlY3V0ZWQgKEJSRTsgZGVmYXVsdDogJyRGSUxURVInKVxuIgotICAgIHByaW50ZiAiICAtZXwtLWV4Y2x1ZGVcdE1hdGNoaW5nIHRlc3RzIGFyZSBleGNsdWRlZCAoQlJFOyBkZWZhdWx0OiAnJEVYQ0xVREUnKVxuIgorICAgIHByaW50ZiAiICAtZnwtLWZpbHRlclx0T25seSBtYXRjaGluZyB0ZXN0cyBhcmUgZXhlY3V0ZWQgKEJSRSlcbiIKKyAgICBwcmludGYgIiAgLWV8LS1leGNsdWRlXHRNYXRjaGluZyB0ZXN0cyBhcmUgZXhjbHVkZWQgKEJSRSlcbiIKICAgICBwcmludGYgIiAgLW58LS1udW1iZXJcdEV4ZWN1dGUgb25seSBudW1iZXJlZCB0ZXN0IChjb21tYS1zZXBhcmF0ZWQsIGUuZy4gJzI0NSwyNTYnKVxuIgogICAgIHByaW50ZiAiICAtc3wtLXNob3ctbnVtYmVyc1x0U2hvdyB0ZXN0IG51bWJlcnMgaW4gZnJvbnQgb2YgdGVzdCBuYW1lc1xuIgogICAgIHByaW50ZiAiICAtcHwtLXByZXNlcnZlLWxvZ3NcdFByZXNlcnZlIGxvZ3Mgb2Ygc3VjY2Vzc2Z1bCB0ZXN0cyBhcyB3ZWxsXG4iCkBAIC00MTEsNyArNDExLDcgQEAKICAgICBmaQogCiAgICAgTElORT0iJExJTkUkMSIKLSAgICBwcmludGYgIiRMSU5FICIKKyAgICBwcmludGYgIiVzICIgIiRMSU5FIgogICAgIExFTj0kKCggNzIgLSBgZWNobyAiJExJTkUiIHwgd2MgLWNgICkpCiAgICAgZm9yIGkgaW4gYHNlcSAxICRMRU5gOyBkbyBwcmludGYgJy4nOyBkb25lCiAgICAgcHJpbnRmICcgJwpAQCAtNjM0LDYgKzYzNCwyMyBAQAogICAgIGZpCiB9CiAKKyMgQ29tcGFyZSBmaWxlIGNvbnRlbnQKKyMgVXNhZ2U6IGZpbmRfaW5fYm90aCBwYXR0ZXJuIGZpbGUxIGZpbGUyCisjIGV4dHJhY3QgZnJvbSBmaWxlMSB0aGUgZmlyc3QgbGluZSBtYXRjaGluZyB0aGUgcGF0dGVybgorIyBjaGVjayBpbiBmaWxlMiB0aGF0IHRoZSBzYW1lIGxpbmUgY2FuIGJlIGZvdW5kCitmaW5kX2luX2JvdGgoKSB7CisgICAgICAgIHNydl9wYXR0ZXJuPSQoZ3JlcCAtbSAxICIkMSIgIiQyIik7CisgICAgICAgIGlmIFsgLXogIiRzcnZfcGF0dGVybiIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBmaQorCisgICAgICAgIGlmIGdyZXAgIiRzcnZfcGF0dGVybiIgJDMgPi9kZXYvbnVsbDsgdGhlbiA6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZmkKK30KKwogIyBVc2FnZTogcnVuX3Rlc3QgbmFtZSBbLXAgcHJveHlfY21kXSBzcnZfY21kIGNsaV9jbWQgY2xpX2V4aXQgW29wdGlvbiBbLi4uXV0KICMgT3B0aW9uczogIC1zIHBhdHRlcm4gIHBhdHRlcm4gdGhhdCBtdXN0IGJlIHByZXNlbnQgaW4gc2VydmVyIG91dHB1dAogIyAgICAgICAgICAgLWMgcGF0dGVybiAgcGF0dGVybiB0aGF0IG11c3QgYmUgcHJlc2VudCBpbiBjbGllbnQgb3V0cHV0CkBAIC02NDMsNiArNjYwLDcgQEAKICMgICAgICAgICAgIC1DIHBhdHRlcm4gIHBhdHRlcm4gdGhhdCBtdXN0IGJlIGFic2VudCBpbiBjbGllbnQgb3V0cHV0CiAjICAgICAgICAgICAtVSBwYXR0ZXJuICBsaW5lcyBhZnRlciBwYXR0ZXJuIG11c3QgYmUgdW5pcXVlIGluIHNlcnZlciBvdXRwdXQKICMgICAgICAgICAgIC1GIGNhbGwgc2hlbGwgZnVuY3Rpb24gb24gc2VydmVyIG91dHB1dAorIyAgICAgICAgICAgLWcgY2FsbCBzaGVsbCBmdW5jdGlvbiBvbiBzZXJ2ZXIgYW5kIGNsaWVudCBvdXRwdXQKIHJ1bl90ZXN0KCkgewogICAgIE5BTUU9IiQxIgogICAgIHNoaWZ0IDEKQEAgLTczOCwxMiArNzU2LDEyIEBACiAgICAgICAgIGZpCiAKICAgICAgICAgY2hlY2tfb3Nydl9kdGxzCi0gICAgICAgIHByaW50ZiAiIyAkTkFNRVxuJFNSVl9DTURcbiIgPiAkU1JWX09VVAorICAgICAgICBwcmludGYgJyMgJXNcbiVzXG4nICIkTkFNRSIgIiRTUlZfQ01EIiA+ICRTUlZfT1VUCiAgICAgICAgIHByb3ZpZGVfaW5wdXQgfCAkU1JWX0NNRCA+PiAkU1JWX09VVCAyPiYxICYKICAgICAgICAgU1JWX1BJRD0kIQogICAgICAgICB3YWl0X3NlcnZlcl9zdGFydCAiJFNSVl9QT1JUIiAiJFNSVl9QSUQiCiAKLSAgICAgICAgcHJpbnRmICIjICROQU1FXG4kQ0xJX0NNRFxuIiA+ICRDTElfT1VUCisgICAgICAgIHByaW50ZiAnIyAlc1xuJXNcbicgIiROQU1FIiAiJENMSV9DTUQiID4gJENMSV9PVVQKICAgICAgICAgZXZhbCAiJENMSV9DTUQiID4+ICRDTElfT1VUIDI+JjEgJgogICAgICAgICB3YWl0X2NsaWVudF9kb25lCiAKQEAgLTg2NSw2ICs4ODMsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgIi1nIikKKyAgICAgICAgICAgICAgICBpZiAhIGV2YWwgIiQyICckU1JWX09VVCcgJyRDTElfT1VUJyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZmFpbCAiZnVuY3Rpb24gY2FsbCB0byAnJDInIGZhaWxlZCBvbiBTZXJ2ZXIgYW5kIENsaWVudCBvdXRwdXQiCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgOzsKIAogICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgICBlY2hvICJVbmtub3duIHRlc3Q6ICQxIiA+JjIKQEAgLTMwMjMsMTIgKzMwNDcsMTIgQEAKICMgVGVzdHMgZm9yIE1heCBGcmFnbWVudCBMZW5ndGggZXh0ZW5zaW9uCiAKIGlmIFsgIiRNQVhfQ09OVEVOVF9MRU4iIC1sdCAiNDA5NiIgXTsgdGhlbgotICAgIHByaW50ZiAiJHtDT05GSUdfSH0gZGVmaW5lcyBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gdG8gYmUgbGVzcyB0aGFuIDQwOTYuIEZyYWdtZW50IGxlbmd0aCB0ZXN0cyB3aWxsIGZhaWwuXG4iCisgICAgcHJpbnRmICclcyBkZWZpbmVzIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiB0byBiZSBsZXNzIHRoYW4gNDA5Ni4gRnJhZ21lbnQgbGVuZ3RoIHRlc3RzIHdpbGwgZmFpbC5cbicgIiR7Q09ORklHX0h9IgogICAgIGV4aXQgMQogZmkKIAogaWYgWyAkTUFYX0NPTlRFTlRfTEVOIC1uZSAxNjM4NCBdOyB0aGVuCi0gICAgcHJpbnRmICJVc2luZyBub24tZGVmYXVsdCBtYXhpbXVtIGNvbnRlbnQgbGVuZ3RoICRNQVhfQ09OVEVOVF9MRU5cbiIKKyAgICBlY2hvICJVc2luZyBub24tZGVmYXVsdCBtYXhpbXVtIGNvbnRlbnQgbGVuZ3RoICRNQVhfQ09OVEVOVF9MRU4iCiBmaQogCiByZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RICkBAIC00MTgyLDE0ICs0MjA2LDE0IEBACiBNQVhfSU1fQ0FfQ09ORklHPSQoIC4uL3NjcmlwdHMvY29uZmlnLnB5IGdldCBNQkVEVExTX1g1MDlfTUFYX0lOVEVSTUVESUFURV9DQSkKIAogaWYgWyAtbiAiJE1BWF9JTV9DQV9DT05GSUciIF0gJiYgWyAiJE1BWF9JTV9DQV9DT05GSUciIC1uZSAiJE1BWF9JTV9DQSIgXTsgdGhlbgotICAgIHByaW50ZiAiVGhlICR7Q09ORklHX0h9IGZpbGUgY29udGFpbnMgYSB2YWx1ZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2ZcbiIKLSAgICBwcmludGYgIk1CRURUTFNfWDUwOV9NQVhfSU5URVJNRURJQVRFX0NBIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIHNjcmlwdOKAmXNcbiIKLSAgICBwcmludGYgInRlc3QgdmFsdWUgb2YgJHtNQVhfSU1fQ0F9LiBcbiIKLSAgICBwcmludGYgIlxuIgotICAgIHByaW50ZiAiVGhlIHRlc3RzIGFzc3VtZSB0aGlzIHZhbHVlIGFuZCBpZiBpdCBjaGFuZ2VzLCB0aGUgdGVzdHMgaW4gdGhpc1xuIgotICAgIHByaW50ZiAic2NyaXB0IHNob3VsZCBhbHNvIGJlIGFkanVzdGVkLlxuIgotICAgIHByaW50ZiAiXG4iCisgICAgY2F0IDw8RU9GCiske0NPTkZJR19IfSBjb250YWlucyBhIHZhbHVlIGZvciB0aGUgY29uZmlndXJhdGlvbiBvZgorTUJFRFRMU19YNTA5X01BWF9JTlRFUk1FRElBVEVfQ0EgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc2NyaXB0J3MKK3Rlc3QgdmFsdWUgb2YgJHtNQVhfSU1fQ0F9LgogCitUaGUgdGVzdHMgYXNzdW1lIHRoaXMgdmFsdWUgYW5kIGlmIGl0IGNoYW5nZXMsIHRoZSB0ZXN0cyBpbiB0aGlzCitzY3JpcHQgc2hvdWxkIGFsc28gYmUgYWRqdXN0ZWQuCitFT0YKICAgICBleGl0IDEKIGZpCiAKQEAgLTg3MTMsNiArODczNyw1MzkgQEAKICAgICAgICAgICAgIDAgXAogICAgICAgICAgICAgLXMgImZyYWdtZW50aW5nIGhhbmRzaGFrZSBtZXNzYWdlIgogCisjIFRlc3RzIGZvciBEVExTLVNSVFAgKFJGQyA1NzY0KQorcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCitydW5fdGVzdCAgIkRUTFMtU1JUUCBhbGwgcHJvZmlsZXMgc3VwcG9ydGVkIiBcCisgICAgICAgICAgIiRQX1NSViBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtcyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLWMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1nICJmaW5kX2luX2JvdGggJ14gKktleWluZyBtYXRlcmlhbDogWzAtOUEtRl0qJCciXAorICAgICAgICAgIC1DICJlcnJvciIKKworCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBzdXBwb3J0cyBhbGwgcHJvZmlsZXMuIENsaWVudCBzdXBwb3J0cyBvbmUgcHJvZmlsZS4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT01IGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV84MCIgXAorICAgICAgICAgIC1zICJzZWxlY3RlZCBzcnRwIHByb2ZpbGU6IE1CRURUTFNfVExTX1NSVFBfTlVMTF9ITUFDX1NIQTFfODAiIFwKKyAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV84MCIgXAorICAgICAgICAgIC1jICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWcgImZpbmRfaW5fYm90aCAnXiAqS2V5aW5nIG1hdGVyaWFsOiBbMC05QS1GXSokJyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBzdXBwb3J0cyBvbmUgcHJvZmlsZS4gQ2xpZW50IHN1cHBvcnRzIGFsbCBwcm9maWxlcy4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT02IGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSB1c2Vfc3J0cD0xIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZWxlY3RlZCBzcnRwIHByb2ZpbGU6IE1CRURUTFNfVExTX1NSVFBfTlVMTF9ITUFDX1NIQTFfMzIiIFwKKyAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV8zMiIgXAorICAgICAgICAgIC1jICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWcgImZpbmRfaW5fYm90aCAnXiAqS2V5aW5nIG1hdGVyaWFsOiBbMC05QS1GXSokJyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBhbmQgQ2xpZW50IHN1cHBvcnQgb25seSBvbmUgbWF0Y2hpbmcgcHJvZmlsZS4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT0yIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT0yIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiBcCisgICAgICAgICAgLXMgInNlbGVjdGVkIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiBcCisgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCBzcnRwIHByb2ZpbGU6IE1CRURUTFNfVExTX1NSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiIgXAorICAgICAgICAgIC1jICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWcgImZpbmRfaW5fYm90aCAnXiAqS2V5aW5nIG1hdGVyaWFsOiBbMC05QS1GXSokJyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBhbmQgQ2xpZW50IHN1cHBvcnQgb25seSBvbmUgZGlmZmVyZW50IHByb2ZpbGUuIiBcCisgICAgICAgICAgIiRQX1NSViBkdGxzPTEgdXNlX3NydHA9MSBzcnRwX2ZvcmNlX3Byb2ZpbGU9MiBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgdXNlX3NydHA9MSBzcnRwX2ZvcmNlX3Byb2ZpbGU9NiBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJmb3VuZCBzcnRwIHByb2ZpbGU6IE1CRURUTFNfVExTX1NSVFBfTlVMTF9ITUFDX1NIQTFfMzIiIFwKKyAgICAgICAgICAtUyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1TICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLUMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1DICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtQyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLUMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1DICJlcnJvciIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCitydW5fdGVzdCAgIkRUTFMtU1JUUCBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHVzZV9zcnRwIGV4dGVuc2lvbi4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtUyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1DICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtQyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLUMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1DICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcnVuX3Rlc3QgICJEVExTLVNSVFAgYWxsIHByb2ZpbGVzIHN1cHBvcnRlZC4gbWtpIHVzZWQiIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIHN1cHBvcnRfbWtpPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgbWtpPTU0MjMxMGFiMzQyOTA0ODEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1zICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiZHVtcGluZyAndXNpbmcgbWtpJyAoOCBieXRlcykiIFwKKyAgICAgICAgICAtcyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJkdW1waW5nICdzZW5kaW5nIG1raScgKDggYnl0ZXMpIiBcCisgICAgICAgICAgLWMgImR1bXBpbmcgJ3JlY2VpdmVkIG1raScgKDggYnl0ZXMpIiBcCisgICAgICAgICAgLWMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1nICJmaW5kX2luX2JvdGggJ14gKktleWluZyBtYXRlcmlhbDogWzAtOUEtRl0qJCciXAorICAgICAgICAgIC1nICJmaW5kX2luX2JvdGggJ14gKkRUTFMtU1JUUCBta2kgdmFsdWU6IFswLTlBLUZdKiQnIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcnVuX3Rlc3QgICJEVExTLVNSVFAgYWxsIHByb2ZpbGVzIHN1cHBvcnRlZC4gc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBta2kuIiBcCisgICAgICAgICAgIiRQX1NSViBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgdXNlX3NydHA9MSBta2k9NTQyMzEwYWIzNDI5MDQ4MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtcyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtcyAiRFRMUy1TUlRQIG5vIG1raSB2YWx1ZSBuZWdvdGlhdGVkIlwKKyAgICAgICAgICAtUyAiZHVtcGluZyAndXNpbmcgbWtpJyAoOCBieXRlcykiIFwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLWMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1jICJEVExTLVNSVFAgbm8gbWtpIHZhbHVlIG5lZ290aWF0ZWQiXAorICAgICAgICAgIC1nICJmaW5kX2luX2JvdGggJ14gKktleWluZyBtYXRlcmlhbDogWzAtOUEtRl0qJCciXAorICAgICAgICAgIC1jICJkdW1waW5nICdzZW5kaW5nIG1raScgKDggYnl0ZXMpIiBcCisgICAgICAgICAgLUMgImR1bXBpbmcgJ3JlY2VpdmVkIG1raScgKDggYnl0ZXMpIiBcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIGFsbCBwcm9maWxlcyBzdXBwb3J0ZWQuIG9wZW5zc2wgY2xpZW50LiIgXAorICAgICAgICAgICIkUF9TUlYgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICIkT19DTEkgLWR0bHMxIC11c2Vfc3J0cCBTUlRQX0FFUzEyOF9DTV9TSEExXzgwOlNSVFBfQUVTMTI4X0NNX1NIQTFfMzIgLWtleW1hdGV4cG9ydCAnRVhUUkFDVE9SLWR0bHNfc3J0cCcgLWtleW1hdGV4cG9ydGxlbiA2MCIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1zICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWcgImZpbmRfaW5fYm90aCAnXiAqS2V5aW5nIG1hdGVyaWFsOiBbMC05QS1GXSokJyJcCisgICAgICAgICAgLWMgIlNSVFAgRXh0ZW5zaW9uIG5lZ290aWF0ZWQsIHByb2ZpbGU9U1JUUF9BRVMxMjhfQ01fU0hBMV84MCIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCitydW5fdGVzdCAgIkRUTFMtU1JUUCBzZXJ2ZXIgc3VwcG9ydHMgYWxsIHByb2ZpbGVzLiBDbGllbnQgc3VwcG9ydHMgYWxsIHByb2ZpbGVzLCBpbiBkaWZmZXJlbnQgb3JkZXIuIG9wZW5zc2wgY2xpZW50LiIgXAorICAgICAgICAgICIkUF9TUlYgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICIkT19DTEkgLWR0bHMxIC11c2Vfc3J0cCBTUlRQX0FFUzEyOF9DTV9TSEExXzMyOlNSVFBfQUVTMTI4X0NNX1NIQTFfODAgLWtleW1hdGV4cG9ydCAnRVhUUkFDVE9SLWR0bHNfc3J0cCcgLWtleW1hdGV4cG9ydGxlbiA2MCIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1zICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWcgImZpbmRfaW5fYm90aCAnXiAqS2V5aW5nIG1hdGVyaWFsOiBbMC05QS1GXSokJyJcCisgICAgICAgICAgLWMgIlNSVFAgRXh0ZW5zaW9uIG5lZ290aWF0ZWQsIHByb2ZpbGU9U1JUUF9BRVMxMjhfQ01fU0hBMV8zMiIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCitydW5fdGVzdCAgIkRUTFMtU1JUUCBzZXJ2ZXIgc3VwcG9ydHMgYWxsIHByb2ZpbGVzLiBDbGllbnQgc3VwcG9ydHMgb25lIHByb2ZpbGUuIG9wZW5zc2wgY2xpZW50LiIgXAorICAgICAgICAgICIkUF9TUlYgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICIkT19DTEkgLWR0bHMxIC11c2Vfc3J0cCBTUlRQX0FFUzEyOF9DTV9TSEExXzMyIC1rZXltYXRleHBvcnQgJ0VYVFJBQ1RPUi1kdGxzX3NydHAnIC1rZXltYXRleHBvcnRsZW4gNjAiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1nICJmaW5kX2luX2JvdGggJ14gKktleWluZyBtYXRlcmlhbDogWzAtOUEtRl0qJCciXAorICAgICAgICAgIC1jICJTUlRQIEV4dGVuc2lvbiBuZWdvdGlhdGVkLCBwcm9maWxlPVNSVFBfQUVTMTI4X0NNX1NIQTFfMzIiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIHN1cHBvcnRzIG9uZSBwcm9maWxlLiBDbGllbnQgc3VwcG9ydHMgYWxsIHByb2ZpbGVzLiBvcGVuc3NsIGNsaWVudC4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT0yIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJE9fQ0xJIC1kdGxzMSAtdXNlX3NydHAgU1JUUF9BRVMxMjhfQ01fU0hBMV84MDpTUlRQX0FFUzEyOF9DTV9TSEExXzMyIC1rZXltYXRleHBvcnQgJ0VYVFJBQ1RPUi1kdGxzX3NydHAnIC1rZXltYXRleHBvcnRsZW4gNjAiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1nICJmaW5kX2luX2JvdGggJ14gKktleWluZyBtYXRlcmlhbDogWzAtOUEtRl0qJCciXAorICAgICAgICAgIC1jICJTUlRQIEV4dGVuc2lvbiBuZWdvdGlhdGVkLCBwcm9maWxlPVNSVFBfQUVTMTI4X0NNX1NIQTFfMzIiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGFuZCBDbGllbnQgc3VwcG9ydCBvbmx5IG9uZSBtYXRjaGluZyBwcm9maWxlLiBvcGVuc3NsIGNsaWVudC4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT0yIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJE9fQ0xJIC1kdGxzMSAtdXNlX3NydHAgU1JUUF9BRVMxMjhfQ01fU0hBMV8zMiAta2V5bWF0ZXhwb3J0ICdFWFRSQUNUT1ItZHRsc19zcnRwJyAta2V5bWF0ZXhwb3J0bGVuIDYwIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtcyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtZyAiZmluZF9pbl9ib3RoICdeICpLZXlpbmcgbWF0ZXJpYWw6IFswLTlBLUZdKiQnIlwKKyAgICAgICAgICAtYyAiU1JUUCBFeHRlbnNpb24gbmVnb3RpYXRlZCwgcHJvZmlsZT1TUlRQX0FFUzEyOF9DTV9TSEExXzMyIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBhbmQgQ2xpZW50IHN1cHBvcnQgb25seSBvbmUgZGlmZmVyZW50IHByb2ZpbGUuIG9wZW5zc2wgY2xpZW50LiIgXAorICAgICAgICAgICIkUF9TUlYgZHRscz0xIHVzZV9zcnRwPTEgc3J0cF9mb3JjZV9wcm9maWxlPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICIkT19DTEkgLWR0bHMxIC11c2Vfc3J0cCBTUlRQX0FFUzEyOF9DTV9TSEExXzMyIC1rZXltYXRleHBvcnQgJ0VYVFJBQ1RPUi1kdGxzX3NydHAnIC1rZXltYXRleHBvcnRsZW4gNjAiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1TICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLVMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1DICJTUlRQIEV4dGVuc2lvbiBuZWdvdGlhdGVkLCBwcm9maWxlIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgdXNlX3NydHAgZXh0ZW5zaW9uLiBvcGVuc3NsIGNsaWVudCIgXAorICAgICAgICAgICIkUF9TUlYgZHRscz0xIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJE9fQ0xJIC1kdGxzMSAtdXNlX3NydHAgU1JUUF9BRVMxMjhfQ01fU0hBMV84MDpTUlRQX0FFUzEyOF9DTV9TSEExXzMyIC1rZXltYXRleHBvcnQgJ0VYVFJBQ1RPUi1kdGxzX3NydHAnIC1rZXltYXRleHBvcnRsZW4gNjAiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1TICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiU1JUUCBFeHRlbnNpb24gbmVnb3RpYXRlZCwgcHJvZmlsZSIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCitydW5fdGVzdCAgIkRUTFMtU1JUUCBhbGwgcHJvZmlsZXMgc3VwcG9ydGVkLiBvcGVuc3NsIHNlcnZlciIgXAorICAgICAgICAgICIkT19TUlYgLWR0bHMxIC12ZXJpZnkgMCAtdXNlX3NydHAgU1JUUF9BRVMxMjhfQ01fU0hBMV84MDpTUlRQX0FFUzEyOF9DTV9TSEExXzMyIC1rZXltYXRleHBvcnQgJ0VYVFJBQ1RPUi1kdGxzX3NydHAnIC1rZXltYXRleHBvcnRsZW4gNjAiIFwKKyAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSB1c2Vfc3J0cD0xIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlOiBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODAiIFwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBzdXBwb3J0cyBhbGwgcHJvZmlsZXMuIENsaWVudCBzdXBwb3J0cyBhbGwgcHJvZmlsZXMsIGluIGRpZmZlcmVudCBvcmRlci4gb3BlbnNzbCBzZXJ2ZXIuIiBcCisgICAgICAgICAgIiRPX1NSViAtZHRsczEgLXZlcmlmeSAwIC11c2Vfc3J0cCBTUlRQX0FFUzEyOF9DTV9TSEExXzMyOlNSVFBfQUVTMTI4X0NNX1NIQTFfODAgLWtleW1hdGV4cG9ydCAnRVhUUkFDVE9SLWR0bHNfc3J0cCcgLWtleW1hdGV4cG9ydGxlbiA2MCIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBzdXBwb3J0cyBhbGwgcHJvZmlsZXMuIENsaWVudCBzdXBwb3J0cyBvbmUgcHJvZmlsZS4gb3BlbnNzbCBzZXJ2ZXIuIiBcCisgICAgICAgICAgIiRPX1NSViAtZHRsczEgLXZlcmlmeSAwIC11c2Vfc3J0cCBTUlRQX0FFUzEyOF9DTV9TSEExXzgwOlNSVFBfQUVTMTI4X0NNX1NIQTFfMzIgLWtleW1hdGV4cG9ydCAnRVhUUkFDVE9SLWR0bHNfc3J0cCcgLWtleW1hdGV4cG9ydGxlbiA2MCIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgc3J0cF9mb3JjZV9wcm9maWxlPTIgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIHN1cHBvcnRzIG9uZSBwcm9maWxlLiBDbGllbnQgc3VwcG9ydHMgYWxsIHByb2ZpbGVzLiBvcGVuc3NsIHNlcnZlci4iIFwKKyAgICAgICAgICAiJE9fU1JWIC1kdGxzMSAtdmVyaWZ5IDAgLXVzZV9zcnRwIFNSVFBfQUVTMTI4X0NNX1NIQTFfMzIgLWtleW1hdGV4cG9ydCAnRVhUUkFDVE9SLWR0bHNfc3J0cCcgLWtleW1hdGV4cG9ydGxlbiA2MCIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGFuZCBDbGllbnQgc3VwcG9ydCBvbmx5IG9uZSBtYXRjaGluZyBwcm9maWxlLiBvcGVuc3NsIHNlcnZlci4iIFwKKyAgICAgICAgICAiJE9fU1JWIC1kdGxzMSAtdmVyaWZ5IDAgLXVzZV9zcnRwIFNSVFBfQUVTMTI4X0NNX1NIQTFfMzIgLWtleW1hdGV4cG9ydCAnRVhUUkFDVE9SLWR0bHNfc3J0cCcgLWtleW1hdGV4cG9ydGxlbiA2MCIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgc3J0cF9mb3JjZV9wcm9maWxlPTIgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGFuZCBDbGllbnQgc3VwcG9ydCBvbmx5IG9uZSBkaWZmZXJlbnQgcHJvZmlsZS4gb3BlbnNzbCBzZXJ2ZXIuIiBcCisgICAgICAgICAgIiRPX1NSViAtZHRsczEgLXZlcmlmeSAwIC11c2Vfc3J0cCBTUlRQX0FFUzEyOF9DTV9TSEExXzMyIC1rZXltYXRleHBvcnQgJ0VYVFJBQ1RPUi1kdGxzX3NydHAnIC1rZXltYXRleHBvcnRsZW4gNjAiIFwKKyAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT02IGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLUMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1DICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtQyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLUMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1DICJlcnJvciIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCitydW5fdGVzdCAgIkRUTFMtU1JUUCBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHVzZV9zcnRwIGV4dGVuc2lvbi4gb3BlbnNzbCBzZXJ2ZXIiIFwKKyAgICAgICAgICAiJE9fU1JWIC1kdGxzMSIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtQyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLUMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1DICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtQyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIGFsbCBwcm9maWxlcyBzdXBwb3J0ZWQuIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgbWtpLiBvcGVuc3NsIHNlcnZlci4iIFwKKyAgICAgICAgICAiJE9fU1JWIC1kdGxzMSAtdmVyaWZ5IDAgLXVzZV9zcnRwIFNSVFBfQUVTMTI4X0NNX1NIQTFfODA6U1JUUF9BRVMxMjhfQ01fU0hBMV8zMiAta2V5bWF0ZXhwb3J0ICdFWFRSQUNUT1ItZHRsc19zcnRwJyAta2V5bWF0ZXhwb3J0bGVuIDYwIiBcCisgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgdXNlX3NydHA9MSBta2k9NTQyMzEwYWIzNDI5MDQ4MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIG5vIG1raSB2YWx1ZSBuZWdvdGlhdGVkIlwKKyAgICAgICAgICAtYyAiZHVtcGluZyAnc2VuZGluZyBta2knICg4IGJ5dGVzKSIgXAorICAgICAgICAgIC1DICJkdW1waW5nICdyZWNlaXZlZCBta2knICg4IGJ5dGVzKSIgXAorICAgICAgICAgIC1DICJlcnJvciIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIGFsbCBwcm9maWxlcyBzdXBwb3J0ZWQuIGdudXRscyBjbGllbnQuIiBcCisgICAgICAgICAgIiRQX1NSViBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgIiRHX0NMSSAtdSAtLXNydHAtcHJvZmlsZXM9U1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwOlNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMjpTUlRQX05VTExfSE1BQ19TSEExXzgwOlNSVFBfTlVMTF9TSEExXzMyIC0taW5zZWN1cmUgMTI3LjAuMC4xIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtcyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtYyAiU1JUUCBwcm9maWxlOiBTUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODAiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgIkRUTFMtU1JUUCBzZXJ2ZXIgc3VwcG9ydHMgYWxsIHByb2ZpbGVzLiBDbGllbnQgc3VwcG9ydHMgYWxsIHByb2ZpbGVzLCBpbiBkaWZmZXJlbnQgb3JkZXIuIGdudXRscyBjbGllbnQuIiBcCisgICAgICAgICAgIiRQX1NSViBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgIiRHX0NMSSAtdSAtLXNydHAtcHJvZmlsZXM9U1JUUF9OVUxMX0hNQUNfU0hBMV84MDpTUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODA6U1JUUF9OVUxMX1NIQTFfMzI6U1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIC0taW5zZWN1cmUgMTI3LjAuMC4xIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtcyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtYyAiU1JUUCBwcm9maWxlOiBTUlRQX05VTExfSE1BQ19TSEExXzgwIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIHN1cHBvcnRzIGFsbCBwcm9maWxlcy4gQ2xpZW50IHN1cHBvcnRzIG9uZSBwcm9maWxlLiBnbnV0bHMgY2xpZW50LiIgXAorICAgICAgICAgICIkUF9TUlYgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICIkR19DTEkgLXUgLS1zcnRwLXByb2ZpbGVzPVNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiAtLWluc2VjdXJlIDEyNy4wLjAuMSIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1zICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiZm91bmQgc3J0cCBwcm9maWxlOiBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfMzIiIFwKKyAgICAgICAgICAtcyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlOiBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfMzIiIFwKKyAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1jICJTUlRQIHByb2ZpbGU6IFNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBzdXBwb3J0cyBvbmUgcHJvZmlsZS4gQ2xpZW50IHN1cHBvcnRzIGFsbCBwcm9maWxlcy4gZ251dGxzIGNsaWVudC4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT02IGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJEdfQ0xJIC11IC0tc3J0cC1wcm9maWxlcz1TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODA6U1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyOlNSVFBfTlVMTF9ITUFDX1NIQTFfODA6U1JUUF9OVUxMX1NIQTFfMzIgLS1pbnNlY3VyZSAxMjcuMC4wLjEiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZWxlY3RlZCBzcnRwIHByb2ZpbGU6IE1CRURUTFNfVExTX1NSVFBfTlVMTF9ITUFDX1NIQTFfMzIiIFwKKyAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1jICJTUlRQIHByb2ZpbGU6IFNSVFBfTlVMTF9TSEExXzMyIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGFuZCBDbGllbnQgc3VwcG9ydCBvbmx5IG9uZSBtYXRjaGluZyBwcm9maWxlLiBnbnV0bHMgY2xpZW50LiIgXAorICAgICAgICAgICIkUF9TUlYgZHRscz0xIHVzZV9zcnRwPTEgc3J0cF9mb3JjZV9wcm9maWxlPTIgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICIkR19DTEkgLXUgLS1zcnRwLXByb2ZpbGVzPVNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiAtLWluc2VjdXJlIDEyNy4wLjAuMSIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1zICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWMgIlNSVFAgcHJvZmlsZTogU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGFuZCBDbGllbnQgc3VwcG9ydCBvbmx5IG9uZSBkaWZmZXJlbnQgcHJvZmlsZS4gZ251dGxzIGNsaWVudC4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT0xIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJEdfQ0xJIC11IC0tc3J0cC1wcm9maWxlcz1TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfMzIgLS1pbnNlY3VyZSAxMjcuMC4wLjEiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1TICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLVMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1DICJTUlRQIHByb2ZpbGU6IgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCB1c2Vfc3J0cCBleHRlbnNpb24uIGdudXRscyBjbGllbnQiIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgIiRHX0NMSSAtdSAtLXNydHAtcHJvZmlsZXM9U1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwOlNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMjpTUlRQX05VTExfSE1BQ19TSEExXzgwOlNSVFBfTlVMTF9TSEExXzMyIC0taW5zZWN1cmUgMTI3LjAuMC4xIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtUyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLUMgIlNSVFAgcHJvZmlsZToiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgIkRUTFMtU1JUUCBhbGwgcHJvZmlsZXMgc3VwcG9ydGVkLiBnbnV0bHMgc2VydmVyIiBcCisgICAgICAgICAgIiRHX1NSViAtdSAtLXNydHAtcHJvZmlsZXM9U1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwOlNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMjpTUlRQX05VTExfSE1BQ19TSEExXzgwOlNSVFBfTlVMTF9TSEExXzMyIiBcCisgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwIiBcCisgICAgICAgICAgLWMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1DICJlcnJvciIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBzdXBwb3J0cyBhbGwgcHJvZmlsZXMuIENsaWVudCBzdXBwb3J0cyBhbGwgcHJvZmlsZXMsIGluIGRpZmZlcmVudCBvcmRlci4gZ251dGxzIHNlcnZlci4iIFwKKyAgICAgICAgICAiJEdfU1JWIC11IC0tc3J0cC1wcm9maWxlcz1TUlRQX05VTExfU0hBMV8zMjpTUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfMzI6U1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwOlNSVFBfTlVMTF9ITUFDX1NIQTFfODA6U1JUUF9OVUxMX1NIQTFfMzIiIFwKKyAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSB1c2Vfc3J0cD0xIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlOiBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODAiIFwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIHN1cHBvcnRzIGFsbCBwcm9maWxlcy4gQ2xpZW50IHN1cHBvcnRzIG9uZSBwcm9maWxlLiBnbnV0bHMgc2VydmVyLiIgXAorICAgICAgICAgICIkR19TUlYgLXUgLS1zcnRwLXByb2ZpbGVzPVNSVFBfTlVMTF9TSEExXzMyOlNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMjpTUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODA6U1JUUF9OVUxMX0hNQUNfU0hBMV84MDpTUlRQX05VTExfU0hBMV8zMiIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgc3J0cF9mb3JjZV9wcm9maWxlPTIgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgIkRUTFMtU1JUUCBzZXJ2ZXIgc3VwcG9ydHMgb25lIHByb2ZpbGUuIENsaWVudCBzdXBwb3J0cyBhbGwgcHJvZmlsZXMuIGdudXRscyBzZXJ2ZXIuIiBcCisgICAgICAgICAgIiRHX1NSViAtdSAtLXNydHAtcHJvZmlsZXM9U1JUUF9OVUxMX0hNQUNfU0hBMV84MCIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV84MCIgXAorICAgICAgICAgIC1jICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGFuZCBDbGllbnQgc3VwcG9ydCBvbmx5IG9uZSBtYXRjaGluZyBwcm9maWxlLiBnbnV0bHMgc2VydmVyLiIgXAorICAgICAgICAgICIkR19TUlYgLXUgLS1zcnRwLXByb2ZpbGVzPVNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgc3J0cF9mb3JjZV9wcm9maWxlPTIgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgIkRUTFMtU1JUUCBzZXJ2ZXIgYW5kIENsaWVudCBzdXBwb3J0IG9ubHkgb25lIGRpZmZlcmVudCBwcm9maWxlLiBnbnV0bHMgc2VydmVyLiIgXAorICAgICAgICAgICIkR19TUlYgLXUgLS1zcnRwLXByb2ZpbGVzPVNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgc3J0cF9mb3JjZV9wcm9maWxlPTYgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtQyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLUMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1DICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtQyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCB1c2Vfc3J0cCBleHRlbnNpb24uIGdudXRscyBzZXJ2ZXIiIFwKKyAgICAgICAgICAiJEdfU1JWIC11IiBcCisgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1DICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtQyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLUMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1DICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgIkRUTFMtU1JUUCBhbGwgcHJvZmlsZXMgc3VwcG9ydGVkLiBta2kgdXNlZC4gZ251dGxzIHNlcnZlci4iIFwKKyAgICAgICAgICAiJEdfU1JWIC11IC0tc3J0cC1wcm9maWxlcz1TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODA6U1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyOlNSVFBfTlVMTF9ITUFDX1NIQTFfODA6U1JUUF9OVUxMX1NIQTFfMzIiIFwKKyAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSB1c2Vfc3J0cD0xIG1raT01NDIzMTBhYjM0MjkwNDgxIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLWMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1jICJEVExTLVNSVFAgbWtpIHZhbHVlOiJcCisgICAgICAgICAgLWMgImR1bXBpbmcgJ3NlbmRpbmcgbWtpJyAoOCBieXRlcykiIFwKKyAgICAgICAgICAtYyAiZHVtcGluZyAncmVjZWl2ZWQgbWtpJyAoOCBieXRlcykiIFwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKICMgVGVzdHMgZm9yIHNwZWNpZmljIHRoaW5ncyB3aXRoICJ1bnJlbGlhYmxlIiBVRFAgY29ubmVjdGlvbgogCiBub3Rfd2l0aF92YWxncmluZCAjIHNwdXJpb3VzIHJlc2VuZCBkdWUgdG8gdGltZW91dApkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvaGVscGVycy5mdW5jdGlvbgppbmRleCBlYzQzZDEzLi5hYWZjZjVjIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvaGVscGVycy5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvaGVscGVycy5mdW5jdGlvbgpAQCAtNzQsMTYgKzc0LDYgQEAKICNkZWZpbmUgRElTUEFUQ0hfVU5TVVBQT1JURURfU1VJVEUgICAgICAtNSAgLyogVGVzdCBzdWl0ZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCAqLwogCi10eXBlZGVmIGVudW0KLXsKLSAgICBQQVJBTUZBSUxfVEVTVFNUQVRFX0lETEUgPSAwLCAgICAgICAgICAgLyogTm8gcGFyYW1ldGVyIGZhaWx1cmUgY2FsbCB0ZXN0ICovCi0gICAgUEFSQU1GQUlMX1RFU1RTVEFURV9QRU5ESU5HLCAgICAgICAgICAgIC8qIFRlc3QgY2FsbCB0byB0aGUgcGFyYW1ldGVyIGZhaWx1cmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaXMgcGVuZGluZyAqLwotICAgIFBBUkFNRkFJTF9URVNUU1RBVEVfQ0FMTEVEICAgICAgICAgICAgICAvKiBUaGUgdGVzdCBjYWxsIHRvIHRoZSBwYXJhbWV0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZmFpbHVyZSBmdW5jdGlvbiBoYXMgYmVlbiBtYWRlICovCi19IHBhcmFtZmFpbF90ZXN0X3N0YXRlX3Q7Ci0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIE1hY3JvcyAqLwogCkBAIC0xMzEsNiArMTIxLDcgQEAKICAgICBURVNUX0FTU0VSVCggKCBleHByMSApID09ICggZXhwcjIgKSApCiAKIC8qKiBBbGxvY2F0ZSBtZW1vcnkgZHluYW1pY2FsbHkgYW5kIGZhaWwgdGhlIHRlc3QgY2FzZSBpZiB0aGlzIGZhaWxzLgorICogVGhlIGFsbG9jYXRlZCBtZW1vcnkgd2lsbCBiZSBmaWxsZWQgd2l0aCB6ZXJvcy4KICAqCiAgKiBZb3UgbXVzdCBzZXQgXHAgcG9pbnRlciB0byBcYyBOVUxMIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWFjcm8gYW5kCiAgKiBwdXQgYG1iZWR0bHNfZnJlZSggcG9pbnRlciApYCBpbiB0aGUgdGVzdCdzIGNsZWFudXAgY29kZS4KQEAgLTIzNywxNSArMjI4LDE2IEBACiAgKgogICogXHBhcmFtICAgVEVTVCAgICAgICAgICAgICAgICBUaGUgdGVzdCBleHByZXNzaW9uIHRvIGJlIHRlc3RlZC4KICAqLwotI2RlZmluZSBURVNUX0lOVkFMSURfUEFSQU1fUkVUKCBQQVJBTV9FUlJfVkFMVUUsIFRFU1QgKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHRlc3RfaW5mby5wYXJhbWZhaWxfdGVzdF9zdGF0ZSA9IFBBUkFNRkFJTF9URVNUU1RBVEVfUEVORElORzsgICAgICAgXAotICAgICAgICBpZiggKFRFU1QpICE9IChQQVJBTV9FUlJfVkFMVUUpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRlc3RfaW5mby5wYXJhbWZhaWxfdGVzdF9zdGF0ZSAhPSBQQVJBTUZBSUxfVEVTVFNUQVRFX0NBTExFRCApICBcCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGVzdF9mYWlsKCAjVEVTVCwgX19MSU5FX18sIF9fRklMRV9fICk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGdvdG8gZXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBURVNUX0lOVkFMSURfUEFSQU1fUkVUKCBQQVJBTV9FUlJfVkFMVUUsIFRFU1QgKSAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2V4cGVjdF9jYWxsKCApOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiggKCAoIFRFU1QgKSAhPSAoIFBBUkFNX0VSUl9WQUxVRSApICkgfHwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKCBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2NoZWNrX2V4cGVjdGVkX2NhbGwoICkgIT0gMCApICkgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdGVzdF9mYWlsKCAjVEVTVCwgX19MSU5FX18sIF9fRklMRV9fICk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZ290byBleGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2NoZWNrX2V4cGVjdGVkX2NhbGwoICk7ICAgICAgICAgICAgICAgXAogICAgfSB3aGlsZSggMCApCiAKIC8qKgpAQCAtMjY4LDE2ICsyNjAsMTcgQEAKICAqCiAgKiBccGFyYW0gICBURVNUICAgICAgICAgICAgICAgIFRoZSB0ZXN0IGV4cHJlc3Npb24gdG8gYmUgdGVzdGVkLgogICovCi0jZGVmaW5lIFRFU1RfSU5WQUxJRF9QQVJBTSggVEVTVCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgbWVtY3B5KGptcF90bXAsIHBhcmFtX2ZhaWxfam1wLCBzaXplb2Yoam1wX2J1ZikpOyAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmKCBzZXRqbXAoIHBhcmFtX2ZhaWxfam1wICkgPT0gMCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFRFU1Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0ZXN0X2ZhaWwoICNURVNULCBfX0xJTkVfXywgX19GSUxFX18gKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZ290byBleGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIG1lbWNweShwYXJhbV9mYWlsX2ptcCwgam1wX3RtcCwgc2l6ZW9mKGptcF9idWYpKTsgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBURVNUX0lOVkFMSURfUEFSQU0oIFRFU1QgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1lbWNweSggam1wX3RtcCwgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9nZXRfc3RhdGVfYnVmKCApLCAgICAgXAorICAgICAgICAgICAgICAgIHNpemVvZiggam1wX3RtcCApICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoIHNldGptcCggIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfZ2V0X3N0YXRlX2J1ZiggKSApID09IDAgKSBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgVEVTVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRlc3RfZmFpbCggI1RFU1QsIF9fTElORV9fLCBfX0ZJTEVfXyApOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBnb3RvIGV4aXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9yZXNldF9zdGF0ZSggKTsgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSggMCApCiAjZW5kaWYgLyogTUJFRFRMU19DSEVDS19QQVJBTVMgJiYgIU1CRURUTFNfUEFSQU1fRkFJTEVEX0FMVCAqLwogCkBAIC0zNTksNyArMzUyLDYgQEAKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKLSAgICBwYXJhbWZhaWxfdGVzdF9zdGF0ZV90IHBhcmFtZmFpbF90ZXN0X3N0YXRlOwogICAgIHRlc3RfcmVzdWx0X3QgcmVzdWx0OwogICAgIGNvbnN0IGNoYXIgKnRlc3Q7CiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWU7CkBAIC0zNzAsNyArMzYyLDYgQEAKIHN0YXRpYyB0ZXN0X2luZm9fdCB0ZXN0X2luZm87CiAKICNpZiBkZWZpbmVkKE1CRURUTFNfQ0hFQ0tfUEFSQU1TKQotam1wX2J1ZiBwYXJhbV9mYWlsX2ptcDsKIGptcF9idWYgam1wX3RtcDsKICNlbmRpZgogCkBAIC00MjcsMzAgKzQxOCw2IEBACiAgICAgdGVzdF9pbmZvLmZpbGVuYW1lID0gZmlsZW5hbWU7CiB9CiAKLSNpZiBkZWZpbmVkKE1CRURUTFNfQ0hFQ0tfUEFSQU1TKQotdm9pZCBtYmVkdGxzX3BhcmFtX2ZhaWxlZCggY29uc3QgY2hhciAqZmFpbHVyZV9jb25kaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmUgKQotewotICAgIC8qIElmIHdlIGFyZSB0ZXN0aW5nIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4uLiAgKi8KLSAgICBpZiggdGVzdF9pbmZvLnBhcmFtZmFpbF90ZXN0X3N0YXRlID09IFBBUkFNRkFJTF9URVNUU1RBVEVfUEVORElORyApCi0gICAgewotICAgICAgICB0ZXN0X2luZm8ucGFyYW1mYWlsX3Rlc3Rfc3RhdGUgPSBQQVJBTUZBSUxfVEVTVFNUQVRFX0NBTExFRDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLyogLi4uZWxzZSB3ZSB0cmVhdCB0aGlzIGFzIGFuIGVycm9yICovCi0KLSAgICAgICAgLyogUmVjb3JkIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmFpbHVyZSwgYnV0IG5vdCBhcyBhIGZhaWx1cmUgeWV0LCBpbiBjYXNlCi0gICAgICAgICAqIGl0IHdhcyBwYXJ0IG9mIHRoZSB0ZXN0ICovCi0gICAgICAgIHRlc3RfZmFpbCggZmFpbHVyZV9jb25kaXRpb24sIGxpbmUsIGZpbGUgKTsKLSAgICAgICAgdGVzdF9pbmZvLnJlc3VsdCA9IFRFU1RfUkVTVUxUX1NVQ0NFU1M7Ci0KLSAgICAgICAgbG9uZ2ptcCggcGFyYW1fZmFpbF9qbXAsIDEgKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoX191bml4X18pIHx8IChkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX01BQ0hfXykpCiBzdGF0aWMgaW50IHJlZGlyZWN0X291dHB1dCggRklMRSogb3V0X3N0cmVhbSwgY29uc3QgY2hhciogcGF0aCApCiB7CmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvaG9zdF90ZXN0LmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL2hvc3RfdGVzdC5mdW5jdGlvbgppbmRleCBjY2UyODk5Li5kYjUzZTk3IDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvaG9zdF90ZXN0LmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy9ob3N0X3Rlc3QuZnVuY3Rpb24KQEAgLTY4Myw3ICs2ODMsNiBAQAogICAgICAgICAgICAgaWYoIHVubWV0X2RlcF9jb3VudCA9PSAwICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0ZXN0X2luZm8ucmVzdWx0ID0gVEVTVF9SRVNVTFRfU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICB0ZXN0X2luZm8ucGFyYW1mYWlsX3Rlc3Rfc3RhdGUgPSBQQVJBTUZBSUxfVEVTVFNUQVRFX0lETEU7CiAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLnN0ZXAgPSAodW5zaWduZWQgbG9uZykoIC0xICk7CiAKICNpZiBkZWZpbmVkKF9fdW5peF9fKSB8fCAoZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19NQUNIX18pKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KaW5kZXggNjkwMTI1Ni4uMjU2MjI0ZSAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCkBAIC0xNjUsMTcgKzE2NSwyMyBAQAogdm9pZCBleGVjdXRlX2Z1bmN0aW9uX3B0cihUZXN0V3JhcHBlcl90IGZwLCB2b2lkICoqcGFyYW1zKQogewogI2lmIGRlZmluZWQoTUJFRFRMU19DSEVDS19QQVJBTVMpCi0gICAgaWYgKCBzZXRqbXAoIHBhcmFtX2ZhaWxfam1wICkgPT0gMCApCisgICAgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9sb2NhdGlvbl9yZWNvcmRfdCBsb2NhdGlvbl9yZWNvcmQ7CisKKyAgICBpZiAoIHNldGptcCggbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9nZXRfc3RhdGVfYnVmKCApICkgPT0gMCApCiAgICAgewogICAgICAgICBmcCggcGFyYW1zICk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAgIC8qIFVuZXhwZWN0ZWQgcGFyYW1ldGVyIHZhbGlkYXRpb24gZXJyb3IgKi8KKyAgICAgICAgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9nZXRfbG9jYXRpb25fcmVjb3JkKCAmbG9jYXRpb25fcmVjb3JkICk7CisgICAgICAgIHRlc3RfZmFpbCggbG9jYXRpb25fcmVjb3JkLmZhaWx1cmVfY29uZGl0aW9uLAorICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX3JlY29yZC5saW5lLAorICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX3JlY29yZC5maWxlICk7CiAgICAgICAgIHRlc3RfaW5mby5yZXN1bHQgPSBURVNUX1JFU1VMVF9GQUlMRUQ7CiAgICAgfQogCi0gICAgbWVtc2V0KCBwYXJhbV9mYWlsX2ptcCwgMCwgc2l6ZW9mKGptcF9idWYpICk7CisgICAgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9yZXNldF9zdGF0ZSggKTsKICNlbHNlCiAgICAgZnAoIHBhcmFtcyApOwogI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuZnVuY3Rpb24KaW5kZXggMWQ0NTNkYi4uNzU0YTE2NyAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Flcy5mdW5jdGlvbgpAQCAtOSw3ICs5LDcgQEAKIAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBhZXNfZW5jcnlwdF9lY2IoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIHNyY19zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcsIGludCBzZXRrZXlfcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBkc3QsIGludCBzZXRrZXlfcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgY3R4OwpAQCAtMjMsOCArMjMsNyBAQAogICAgIHsKICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggJmN0eCwgTUJFRFRMU19BRVNfRU5DUllQVCwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgMTYsIGRzdC0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTM0LDcgKzMzLDcgQEAKIAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBhZXNfZGVjcnlwdF9lY2IoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIHNyY19zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcsIGludCBzZXRrZXlfcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBkc3QsIGludCBzZXRrZXlfcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgY3R4OwpAQCAtNDgsOCArNDcsNyBAQAogICAgIHsKICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggJmN0eCwgTUJFRFRMU19BRVNfREVDUllQVCwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgMTYsIGRzdC0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTU5LDcgKzU3LDcgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCiB2b2lkIGFlc19lbmNyeXB0X2NiYyggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2JjX3Jlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKQEAgLTc0LDkgKzcyLDggQEAKICAgICBpZiggY2JjX3Jlc3VsdCA9PSAwICkKICAgICB7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sIGRzdC0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTg2LDcgKzgzLDcgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCiB2b2lkIGFlc19kZWNyeXB0X2NiYyggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2JjX3Jlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKQEAgLTEwMCw5ICs5Nyw4IEBACiAgICAgaWYoIGNiY19yZXN1bHQgPT0gMCkKICAgICB7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sIGRzdC0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTIzNiw3ICsyMzIsNyBAQAogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KIHZvaWQgYWVzX2VuY3J5cHRfY2ZiMTI4KCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBpdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcgKQorICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX2Flc19jb250ZXh0IGN0eDsKQEAgLTI0OSw4ICsyNDUsNyBAQAogICAgIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZjdHgsIGtleV9zdHItPngsIGtleV9zdHItPmxlbiAqIDggKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hZXNfY3J5cHRfY2ZiMTI4KCAmY3R4LCBNQkVEVExTX0FFU19FTkNSWVBULCAxNiwgJml2X29mZnNldCwgaXZfc3RyLT54LCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LCAxNiwgZHN0LT5sZW4gKSA9PSAwICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19hZXNfZnJlZSggJmN0eCApOwpAQCAtMjU5LDcgKzI1NCw3IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwogdm9pZCBhZXNfZGVjcnlwdF9jZmIxMjgoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIGl2X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZyApCisgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogZHN0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgY3R4OwpAQCAtMjcyLDggKzI2Nyw3IEBACiAgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmN0eCwga2V5X3N0ci0+eCwga2V5X3N0ci0+bGVuICogOCApOwogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Flc19jcnlwdF9jZmIxMjgoICZjdHgsIE1CRURUTFNfQUVTX0RFQ1JZUFQsIDE2LCAmaXZfb2Zmc2V0LCBpdl9zdHItPngsIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIDE2LCBkc3QtPmxlbiApID09IDAgKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2Flc19mcmVlKCAmY3R4ICk7CkBAIC0yODIsNyArMjc2LDcgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCiB2b2lkIGFlc19lbmNyeXB0X2NmYjgoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIGl2X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcgKQorICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CiAgICAgbWJlZHRsc19hZXNfY29udGV4dCBjdHg7CkBAIC0yOTQsOSArMjg4LDggQEAKICAgICBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmY3R4LCBrZXlfc3RyLT54LCBrZXlfc3RyLT5sZW4gKiA4ICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NyeXB0X2NmYjgoICZjdHgsIE1CRURUTFNfQUVTX0VOQ1JZUFQsIHNyY19zdHItPmxlbiwgaXZfc3RyLT54LCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLCBkc3QtPmxlbiApID09IDAgKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2Flc19mcmVlKCAmY3R4ICk7CkBAIC0zMDUsNyArMjk4LDcgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCiB2b2lkIGFlc19kZWNyeXB0X2NmYjgoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIGl2X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcgKQorICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CiAgICAgbWJlZHRsc19hZXNfY29udGV4dCBjdHg7CkBAIC0zMTcsOSArMzEwLDggQEAKICAgICBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmY3R4LCBrZXlfc3RyLT54LCBrZXlfc3RyLT5sZW4gKiA4ICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NyeXB0X2NmYjgoICZjdHgsIE1CRURUTFNfQUVTX0RFQ1JZUFQsIHNyY19zdHItPmxlbiwgaXZfc3RyLT54LCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLCBkc3QtPmxlbiApID09IDAgKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2Flc19mcmVlKCAmY3R4ICk7CkBAIC0zMjksMTcgKzMyMSwxNSBAQAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfT0ZCICovCiB2b2lkIGFlc19lbmNyeXB0X29mYiggaW50IGZyYWdtZW50X3NpemUsIGRhdGFfdCAqa2V5X3N0ciwKICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKml2X3N0ciwgZGF0YV90ICpzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmV4cGVjdGVkX291dHB1dF9zdHJpbmcpCisgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpleHBlY3RlZF9vdXRwdXQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzMyXTsKLSAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9zdHJpbmdbNjVdOwogICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgY3R4OwogICAgIHNpemVfdCBpdl9vZmZzZXQgPSAwOwogICAgIGludCBpbl9idWZmZXJfbGVuOwogICAgIHVuc2lnbmVkIGNoYXIqIHNyY19zdHJfbmV4dDsKIAogICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCBzaXplb2YoIG91dHB1dCApICk7Ci0gICAgbWVtc2V0KCBvdXRwdXRfc3RyaW5nLCAweDAwLCBzaXplb2YoIG91dHB1dF9zdHJpbmcgKSApOwogICAgIG1iZWR0bHNfYWVzX2luaXQoICZjdHggKTsKIAogICAgIFRFU1RfQVNTRVJUKCAoc2l6ZV90KWZyYWdtZW50X3NpemUgPCBzaXplb2YoIG91dHB1dCApICk7CkBAIC0zNTQsMTIgKzM0NCwxMCBAQAogICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hZXNfY3J5cHRfb2ZiKCAmY3R4LCBmcmFnbWVudF9zaXplLCAmaXZfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdl9zdHItPngsIHNyY19zdHJfbmV4dCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgICAgIG1iZWR0bHNfdGVzdF9oZXhpZnkoIG91dHB1dF9zdHJpbmcsIG91dHB1dCwgZnJhZ21lbnRfc2l6ZSApOwotICAgICAgICBURVNUX0FTU0VSVCggc3RybmNtcCggKGNoYXIgKikgb3V0cHV0X3N0cmluZywgZXhwZWN0ZWRfb3V0cHV0X3N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMiAqIGZyYWdtZW50X3NpemUgKSApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggb3V0cHV0LCBleHBlY3RlZF9vdXRwdXQtPngsIGZyYWdtZW50X3NpemUgKSA9PSAwICk7CiAKICAgICAgICAgaW5fYnVmZmVyX2xlbiAtPSBmcmFnbWVudF9zaXplOwotICAgICAgICBleHBlY3RlZF9vdXRwdXRfc3RyaW5nICs9ICggZnJhZ21lbnRfc2l6ZSAqIDIgKTsKKyAgICAgICAgZXhwZWN0ZWRfb3V0cHV0LT54ICs9IGZyYWdtZW50X3NpemU7CiAgICAgICAgIHNyY19zdHJfbmV4dCArPSBmcmFnbWVudF9zaXplOwogCiAgICAgICAgIGlmKCBpbl9idWZmZXJfbGVuIDwgZnJhZ21lbnRfc2l6ZSApCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hcmM0LmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYXJjNC5mdW5jdGlvbgppbmRleCA5YWE0OTEzLi5jMWUyMzg2IDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hcmM0LmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2FyYzQuZnVuY3Rpb24KQEAgLTgsOCArOCw3IEBACiAgKi8KIAogLyogQkVHSU5fQ0FTRSAqLwotdm9pZCBtYmVkdGxzX2FyYzRfY3J5cHQoIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGtleV9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcgKQordm9pZCBtYmVkdGxzX2FyYzRfY3J5cHQoIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIGRzdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMDBdOwogICAgIG1iZWR0bHNfYXJjNF9jb250ZXh0IGN0eDsKQEAgLTE5LDExICsxOCwxMSBAQAogCiAKICAgICBtYmVkdGxzX2FyYzRfc2V0dXAoJmN0eCwga2V5X3N0ci0+eCwga2V5X3N0ci0+bGVuKTsKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hcmM0X2NyeXB0KCZjdHgsIHNyY19zdHItPmxlbiwgc3JjX3N0ci0+eCwgZHN0X3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hcmM0X2NyeXB0KCZjdHgsIHNyY19zdHItPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPngsIGRzdF9zdHIgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggZHN0X3N0ciwgZHN0LT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sIGRzdC0+bGVuICkgPT0gMCApOwogCiBleGl0OgogICAgIG1iZWR0bHNfYXJjNF9mcmVlKCAmY3R4ICk7CmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hcmlhLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYXJpYS5mdW5jdGlvbgppbmRleCBkMDhjMzlkLi42ZDZhMjAzIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hcmlhLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2FyaWEuZnVuY3Rpb24KQEAgLTIwNywxNCArMjA3LDEyIEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgYXJpYV9lbmNyeXB0X2VjYiggZGF0YV90ICprZXlfc3RyLCBkYXRhX3QgKnNyY19zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9kc3Rfc3RyaW5nLCBpbnQgc2V0a2V5X3Jlc3VsdCApCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0LCBpbnQgc2V0a2V5X3Jlc3VsdCApCiB7Ci0gICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyW0FSSUFfTUFYX0RBVEFfU1RSXTsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFtBUklBX01BWF9EQVRBU0laRV07CiAgICAgbWJlZHRsc19hcmlhX2NvbnRleHQgY3R4OwogICAgIHNpemVfdCBpOwogCi0gICAgbWVtc2V0KCBkc3Rfc3RyLCAweDAwLCBzaXplb2YoIGRzdF9zdHIgKSApOwogICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCBzaXplb2YoIG91dHB1dCApICk7CiAgICAgbWJlZHRsc19hcmlhX2luaXQoICZjdHggKTsKIApAQCAtMjI3LDkgKzIyNSw5IEBACiAgICAgICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hcmlhX2NyeXB0X2VjYiggJmN0eCwgc3JjX3N0ci0+eCArIGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICsgaSApID09IDAgKTsKICAgICAgICAgfQotICAgICAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHNyY19zdHItPmxlbiApOwogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICAgICAgQVNTRVJUX0NPTVBBUkUoIG91dHB1dCwgZXhwZWN0ZWRfb3V0cHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXQtPngsIGV4cGVjdGVkX291dHB1dC0+bGVuICk7CiAgICAgfQogCiBleGl0OgpAQCAtMjM5LDE0ICsyMzcsMTIgQEAKIAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBhcmlhX2RlY3J5cHRfZWNiKCBkYXRhX3QgKmtleV9zdHIsIGRhdGFfdCAqc3JjX3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2RzdF9zdHJpbmcsIGludCBzZXRrZXlfcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpleHBlY3RlZF9vdXRwdXQsIGludCBzZXRrZXlfcmVzdWx0ICkKIHsKLSAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbQVJJQV9NQVhfREFUQV9TVFJdOwogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0W0FSSUFfTUFYX0RBVEFTSVpFXTsKICAgICBtYmVkdGxzX2FyaWFfY29udGV4dCBjdHg7CiAgICAgc2l6ZV90IGk7CiAKLSAgICBtZW1zZXQoIGRzdF9zdHIsIDB4MDAsIHNpemVvZiggZHN0X3N0ciApICk7CiAgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIHNpemVvZiggb3V0cHV0ICkgKTsKICAgICBtYmVkdGxzX2FyaWFfaW5pdCggJmN0eCApOwogCkBAIC0yNTksOSArMjU1LDkgQEAKICAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2FyaWFfY3J5cHRfZWNiKCAmY3R4LCBzcmNfc3RyLT54ICsgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKyBpICkgPT0gMCApOwogICAgICAgICB9Ci0gICAgICAgIG1iZWR0bHNfdGVzdF9oZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgc3JjX3N0ci0+bGVuICk7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgICAgICBBU1NFUlRfQ09NUEFSRSggb3V0cHV0LCBleHBlY3RlZF9vdXRwdXQtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dC0+eCwgZXhwZWN0ZWRfb3V0cHV0LT5sZW4gKTsKICAgICB9CiAKIGV4aXQ6CkBAIC0yNzEsMTQgKzI2NywxMiBAQAogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KIHZvaWQgYXJpYV9lbmNyeXB0X2NiYyggZGF0YV90ICprZXlfc3RyLCBkYXRhX3QgKml2X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpzcmNfc3RyLCBjaGFyICpoZXhfZHN0X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpzcmNfc3RyLCBkYXRhX3QgKmV4cGVjdGVkX291dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNiY19yZXN1bHQgKQogewotICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0cltBUklBX01BWF9EQVRBX1NUUl07CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbQVJJQV9NQVhfREFUQVNJWkVdOwogICAgIG1iZWR0bHNfYXJpYV9jb250ZXh0IGN0eDsKIAotICAgIG1lbXNldCggZHN0X3N0ciwgMHgwMCwgc2l6ZW9mKCBkc3Rfc3RyICkgKTsKICAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgc2l6ZW9mKCBvdXRwdXQgKSApOwogICAgIG1iZWR0bHNfYXJpYV9pbml0KCAmY3R4ICk7CiAKQEAgLTI4OCw5ICsyODIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKSA9PSBjYmNfcmVzdWx0ICk7CiAgICAgaWYoIGNiY19yZXN1bHQgPT0gMCApCiAgICAgewotICAgICAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHNyY19zdHItPmxlbiApOwotCi0gICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICAgICAgQVNTRVJUX0NPTVBBUkUoIG91dHB1dCwgZXhwZWN0ZWRfb3V0cHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXQtPngsIGV4cGVjdGVkX291dHB1dC0+bGVuICk7CiAgICAgfQogCiBleGl0OgpAQCAtMzAwLDE0ICsyOTMsMTIgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCiB2b2lkIGFyaWFfZGVjcnlwdF9jYmMoIGRhdGFfdCAqa2V5X3N0ciwgZGF0YV90ICppdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqc3JjX3N0ciwgY2hhciAqaGV4X2RzdF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqc3JjX3N0ciwgZGF0YV90ICpleHBlY3RlZF9vdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYmNfcmVzdWx0ICkKIHsKLSAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbQVJJQV9NQVhfREFUQV9TVFJdOwogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0W0FSSUFfTUFYX0RBVEFTSVpFXTsKICAgICBtYmVkdGxzX2FyaWFfY29udGV4dCBjdHg7CiAKLSAgICBtZW1zZXQoIGRzdF9zdHIsIDB4MDAsIHNpemVvZiggZHN0X3N0ciApICk7CiAgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIHNpemVvZiggb3V0cHV0ICkgKTsKICAgICBtYmVkdGxzX2FyaWFfaW5pdCggJmN0eCApOwogCkBAIC0zMTcsOSArMzA4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICkgPT0gY2JjX3Jlc3VsdCApOwogICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQogICAgIHsKLSAgICAgICAgbWJlZHRsc190ZXN0X2hleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBzcmNfc3RyLT5sZW4gKTsKLQotICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgICAgIEFTU0VSVF9DT01QQVJFKCBvdXRwdXQsIGV4cGVjdGVkX291dHB1dC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfb3V0cHV0LT54LCBleHBlY3RlZF9vdXRwdXQtPmxlbiApOwogICAgIH0KIAogZXhpdDoKQEAgLTMyOSwxNSArMzE5LDEzIEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwogdm9pZCBhcmlhX2VuY3J5cHRfY2ZiMTI4KCBkYXRhX3QgKmtleV9zdHIsIGRhdGFfdCAqaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKnNyY19zdHIsIGNoYXIgKmhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKnNyY19zdHIsIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ICkKIHsKLSAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbQVJJQV9NQVhfREFUQV9TVFJdOwogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0W0FSSUFfTUFYX0RBVEFTSVpFXTsKICAgICBtYmVkdGxzX2FyaWFfY29udGV4dCBjdHg7CiAgICAgc2l6ZV90IGl2X29mZnNldCA9IDA7CiAKLSAgICBtZW1zZXQoIGRzdF9zdHIsIDB4MDAsIHNpemVvZiggZHN0X3N0ciApICk7CiAgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIHNpemVvZiggb3V0cHV0ICkgKTsKICAgICBtYmVkdGxzX2FyaWFfaW5pdCggJmN0eCApOwogCkBAIC0zNDYsOSArMzM0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLCAmaXZfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdl9zdHItPngsIHNyY19zdHItPngsIG91dHB1dCApCiAgICAgICAgICAgICAgICAgID09IHJlc3VsdCApOwotICAgIG1iZWR0bHNfdGVzdF9oZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgc3JjX3N0ci0+bGVuICk7CiAKLSAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgQVNTRVJUX0NPTVBBUkUoIG91dHB1dCwgZXhwZWN0ZWRfb3V0cHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dC0+eCwgZXhwZWN0ZWRfb3V0cHV0LT5sZW4gKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2FyaWFfZnJlZSggJmN0eCApOwpAQCAtMzU3LDE1ICszNDUsMTMgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCiB2b2lkIGFyaWFfZGVjcnlwdF9jZmIxMjgoIGRhdGFfdCAqa2V5X3N0ciwgZGF0YV90ICppdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqc3JjX3N0ciwgY2hhciAqaGV4X2RzdF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqc3JjX3N0ciwgZGF0YV90ICpleHBlY3RlZF9vdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgICkKIHsKLSAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbQVJJQV9NQVhfREFUQV9TVFJdOwogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0W0FSSUFfTUFYX0RBVEFTSVpFXTsKICAgICBtYmVkdGxzX2FyaWFfY29udGV4dCBjdHg7CiAgICAgc2l6ZV90IGl2X29mZnNldCA9IDA7CiAKLSAgICBtZW1zZXQoIGRzdF9zdHIsIDB4MDAsIHNpemVvZiggZHN0X3N0ciApICk7CiAgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIHNpemVvZiggb3V0cHV0ICkgKTsKICAgICBtYmVkdGxzX2FyaWFfaW5pdCggJmN0eCApOwogCkBAIC0zNzQsOSArMzYwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLCAmaXZfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdl9zdHItPngsIHNyY19zdHItPngsIG91dHB1dCApCiAgICAgICAgICAgICAgICAgID09IHJlc3VsdCApOwotICAgIG1iZWR0bHNfdGVzdF9oZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgc3JjX3N0ci0+bGVuICk7CiAKLSAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgQVNTRVJUX0NPTVBBUkUoIG91dHB1dCwgZXhwZWN0ZWRfb3V0cHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dC0+eCwgZXhwZWN0ZWRfb3V0cHV0LT5sZW4gKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2FyaWFfZnJlZSggJmN0eCApOwpAQCAtMzg1LDE2ICszNzEsMTQgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCiB2b2lkIGFyaWFfZW5jcnlwdF9jdHIoIGRhdGFfdCAqa2V5X3N0ciwgZGF0YV90ICppdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqc3JjX3N0ciwgY2hhciAqaGV4X2RzdF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqc3JjX3N0ciwgZGF0YV90ICpleHBlY3RlZF9vdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgKQogewotICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0cltBUklBX01BWF9EQVRBX1NUUl07CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbQVJJQV9NQVhfREFUQVNJWkVdOwogICAgIHVuc2lnbmVkIGNoYXIgYmxrW01CRURUTFNfQVJJQV9CTE9DS1NJWkVdOwogICAgIG1iZWR0bHNfYXJpYV9jb250ZXh0IGN0eDsKICAgICBzaXplX3QgaXZfb2Zmc2V0ID0gMDsKIAotICAgIG1lbXNldCggZHN0X3N0ciwgMHgwMCwgc2l6ZW9mKCBkc3Rfc3RyICkgKTsKICAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgc2l6ZW9mKCBvdXRwdXQgKSApOwogICAgIG1iZWR0bHNfYXJpYV9pbml0KCAmY3R4ICk7CiAKQEAgLTQwMiw5ICszODYsOSBAQAogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2FyaWFfY3J5cHRfY3RyKCAmY3R4LCBzcmNfc3RyLT5sZW4sICZpdl9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2X3N0ci0+eCwgYmxrLCBzcmNfc3RyLT54LCBvdXRwdXQgKQogICAgICAgICAgICAgICAgICA9PSByZXN1bHQgKTsKLSAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHNyY19zdHItPmxlbiApOwogCi0gICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgIEFTU0VSVF9DT01QQVJFKCBvdXRwdXQsIGV4cGVjdGVkX291dHB1dC0+bGVuLAorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXQtPngsIGV4cGVjdGVkX291dHB1dC0+bGVuICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19hcmlhX2ZyZWUoICZjdHggKTsKQEAgLTQxMywxNiArMzk3LDE0IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLwogdm9pZCBhcmlhX2RlY3J5cHRfY3RyKCBkYXRhX3QgKmtleV9zdHIsIGRhdGFfdCAqaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKnNyY19zdHIsIGNoYXIgKmhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKnNyY19zdHIsIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ICkKIHsKLSAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbQVJJQV9NQVhfREFUQV9TVFJdOwogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0W0FSSUFfTUFYX0RBVEFTSVpFXTsKICAgICB1bnNpZ25lZCBjaGFyIGJsa1tNQkVEVExTX0FSSUFfQkxPQ0tTSVpFXTsKICAgICBtYmVkdGxzX2FyaWFfY29udGV4dCBjdHg7CiAgICAgc2l6ZV90IGl2X29mZnNldCA9IDA7CiAKLSAgICBtZW1zZXQoIGRzdF9zdHIsIDB4MDAsIHNpemVvZiggZHN0X3N0ciApICk7CiAgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIHNpemVvZiggb3V0cHV0ICkgKTsKICAgICBtYmVkdGxzX2FyaWFfaW5pdCggJmN0eCApOwogCkBAIC00MzAsOSArNDEyLDkgQEAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hcmlhX2NyeXB0X2N0ciggJmN0eCwgc3JjX3N0ci0+bGVuLCAmaXZfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdl9zdHItPngsIGJsaywgc3JjX3N0ci0+eCwgb3V0cHV0ICkKICAgICAgICAgICAgICAgICAgPT0gcmVzdWx0ICk7Ci0gICAgbWJlZHRsc190ZXN0X2hleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBzcmNfc3RyLT5sZW4gKTsKIAotICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICBBU1NFUlRfQ09NUEFSRSggb3V0cHV0LCBleHBlY3RlZF9vdXRwdXQtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfb3V0cHV0LT54LCBleHBlY3RlZF9vdXRwdXQtPmxlbiApOwogCiBleGl0OgogICAgIG1iZWR0bHNfYXJpYV9mcmVlKCAmY3R4ICk7CmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9ibG93ZmlzaC5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Jsb3dmaXNoLmZ1bmN0aW9uCmluZGV4IGViNjg5MWMuLmY4OTM1M2MgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Jsb3dmaXNoLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Jsb3dmaXNoLmZ1bmN0aW9uCkBAIC0xNjcsNyArMTY3LDcgQEAKIAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBibG93ZmlzaF9lbmNyeXB0X2VjYiggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogc3JjX3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nLCBpbnQgc2V0a2V5X3Jlc3VsdCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBkc3QsIGludCBzZXRrZXlfcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCBjdHg7CkBAIC0xODEsOCArMTgxLDcgQEAKICAgICB7CiAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2VjYiggJmN0eCwgTUJFRFRMU19CTE9XRklTSF9FTkNSWVBULCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIDgsIGRzdC0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTE5Miw3ICsxOTEsNyBAQAogCiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIGJsb3dmaXNoX2RlY3J5cHRfZWNiKCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcsIGludCBzZXRrZXlfcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGRzdCwgaW50IHNldGtleV9yZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CiAgICAgbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0IGN0eDsKQEAgLTIwNiw4ICsyMDUsNyBAQAogICAgIHsKICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfZWNiKCAmY3R4LCBNQkVEVExTX0JMT1dGSVNIX0RFQ1JZUFQsIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgOCwgZHN0LT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpAQCAtMjE3LDcgKzIxNSw3IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLwogdm9pZCBibG93ZmlzaF9lbmNyeXB0X2NiYyggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2JjX3Jlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKQEAgLTIzMyw5ICsyMzEsOCBAQAogICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwgZHN0LT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpAQCAtMjQ1LDcgKzI0Miw3IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLwogdm9pZCBibG93ZmlzaF9kZWNyeXB0X2NiYyggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2JjX3Jlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKQEAgLTI2MCw5ICsyNTcsOCBAQAogICAgIGlmKCBjYmNfcmVzdWx0ID09IDApCiAgICAgewogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LCBzcmNfc3RyLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QtPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC0yNzIsOCArMjY4LDcgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCiB2b2lkIGJsb3dmaXNoX2VuY3J5cHRfY2ZiNjQoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIGl2X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CiAgICAgbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0IGN0eDsKQEAgLTI4Niw5ICsyODEsOCBAQAogICAgIG1iZWR0bHNfYmxvd2Zpc2hfc2V0a2V5KCAmY3R4LCBrZXlfc3RyLT54LCBrZXlfc3RyLT5sZW4gKiA4ICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY2ZiNjQoICZjdHgsIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVCwgc3JjX3N0ci0+bGVuLCAmaXZfb2Zmc2V0LCBpdl9zdHItPngsIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LCBzcmNfc3RyLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdC0+bGVuICkgPT0gMCApOwogCiBleGl0OgogICAgIG1iZWR0bHNfYmxvd2Zpc2hfZnJlZSggJmN0eCApOwpAQCAtMjk3LDggKzI5MSw3IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwogdm9pZCBibG93ZmlzaF9kZWNyeXB0X2NmYjY0KCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBpdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogZHN0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCBjdHg7CkBAIC0zMTEsOSArMzA0LDggQEAKICAgICBtYmVkdGxzX2Jsb3dmaXNoX3NldGtleSggJmN0eCwga2V5X3N0ci0+eCwga2V5X3N0ci0+bGVuICogOCApOwogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NmYjY0KCAmY3R4LCBNQkVEVExTX0JMT1dGSVNIX0RFQ1JZUFQsIHNyY19zdHItPmxlbiwgJml2X29mZnNldCwgaXZfc3RyLT54LCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgc3JjX3N0ci0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QtPmxlbiApID09IDAgKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2Jsb3dmaXNoX2ZyZWUoICZjdHggKTsKQEAgLTMyMiw3ICszMTQsNyBAQAogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIgKi8KIHZvaWQgYmxvd2Zpc2hfZW5jcnlwdF9jdHIoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIGl2X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBzdHJlYW1fc3RyWzEwMF07CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKQEAgLTMzNyw5ICszMjksOCBAQAogICAgIG1iZWR0bHNfYmxvd2Zpc2hfc2V0a2V5KCAmY3R4LCBrZXlfc3RyLT54LCBrZXlfc3RyLT5sZW4gKiA4ICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY3RyKCAmY3R4LCBzcmNfc3RyLT5sZW4sICZpdl9vZmZzZXQsIGl2X3N0ci0+eCwgc3RyZWFtX3N0ciwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIHNyY19zdHItPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0LT5sZW4gKSA9PSAwICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19ibG93ZmlzaF9mcmVlKCAmY3R4ICk7CmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jYW1lbGxpYS5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NhbWVsbGlhLmZ1bmN0aW9uCmluZGV4IDQ5NDlmZWIuLjMxMjQ5NWMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NhbWVsbGlhLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NhbWVsbGlhLmZ1bmN0aW9uCkBAIC0xNzUsNyArMTc1LDcgQEAKIAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBjYW1lbGxpYV9lbmNyeXB0X2VjYiggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogc3JjX3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nLCBpbnQgc2V0a2V5X3Jlc3VsdCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBkc3QsIGludCBzZXRrZXlfcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCBjdHg7CkBAIC0xODksOCArMTg5LDcgQEAKICAgICB7CiAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2VjYiggJmN0eCwgTUJFRFRMU19DQU1FTExJQV9FTkNSWVBULCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LCAxNiwgZHN0LT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpAQCAtMjAwLDcgKzE5OSw3IEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgY2FtZWxsaWFfZGVjcnlwdF9lY2IoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIHNyY19zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZywgaW50IHNldGtleV9yZXN1bHQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogZHN0LCBpbnQgc2V0a2V5X3Jlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgY3R4OwpAQCAtMjE0LDggKzIxMyw3IEBACiAgICAgewogICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9lY2IoICZjdHgsIE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVCwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgMTYsIGRzdC0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTIyNSw4ICsyMjMsNyBAQAogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KIHZvaWQgY2FtZWxsaWFfZW5jcnlwdF9jYmMoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIGl2X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNiY19yZXN1bHQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogZHN0LCBpbnQgY2JjX3Jlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgY3R4OwpAQCAtMjQwLDkgKzIzNyw4IEBACiAgICAgaWYoIGNiY19yZXN1bHQgPT0gMCApCiAgICAgewogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LCBzcmNfc3RyLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QtPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC0yNTIsNyArMjQ4LDcgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCiB2b2lkIGNhbWVsbGlhX2RlY3J5cHRfY2JjKCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBpdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYmNfcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwpAQCAtMjY3LDkgKzI2Myw4IEBACiAgICAgaWYoIGNiY19yZXN1bHQgPT0gMCApCiAgICAgewogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LCBzcmNfc3RyLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QtPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC0yNzksOCArMjc0LDcgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCiB2b2lkIGNhbWVsbGlhX2VuY3J5cHRfY2ZiMTI4KCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBpdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogZHN0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCBjdHg7CkBAIC0yOTMsOCArMjg3LDcgQEAKICAgICBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9lbmMoICZjdHgsIGtleV9zdHItPngsIGtleV9zdHItPmxlbiAqIDggKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jZmIxMjgoICZjdHgsIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCwgMTYsICZpdl9vZmZzZXQsIGl2X3N0ci0+eCwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgMTYsIGRzdC0+bGVuICkgPT0gMCApOwogCiBleGl0OgogICAgIG1iZWR0bHNfY2FtZWxsaWFfZnJlZSggJmN0eCApOwpAQCAtMzA0LDcgKzI5Nyw3IEBACiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KIHZvaWQgY2FtZWxsaWFfZGVjcnlwdF9jZmIxMjgoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIGl2X3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBkc3QgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CiAgICAgbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0IGN0eDsKQEAgLTMxNyw4ICszMTAsNyBAQAogICAgIG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2VuYyggJmN0eCwga2V5X3N0ci0+eCwga2V5X3N0ci0+bGVuICogOCApOwogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2NmYjEyOCggJmN0eCwgTUJFRFRMU19DQU1FTExJQV9ERUNSWVBULCAxNiwgJml2X29mZnNldCwgaXZfc3RyLT54LCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LCAxNiwgZHN0LT5sZW4gKSA9PSAwICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19jYW1lbGxpYV9mcmVlKCAmY3R4ICk7CmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jY20uZGF0YSBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NjbS5kYXRhCmluZGV4IDQ2YzE3MmIuLjRmODM0NjggMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NjbS5kYXRhCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NjbS5kYXRhCkBAIC00MSw5ICs0MSw5IEBACiBDQ00gbGVuZ3RocyAjNiB0YWcgbGVuZ3RoIG5vdCBldmVuCiBjY21fbGVuZ3Roczo1OjEwOjU6NzpNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUCiAKLUNDTSBsZW5ndGhzICM3IEFEIHRvbyBsb25nICgyXjE2IC0gMl44ICsgMSkKK0NDTSBsZW5ndGhzICM3IEFEIHRvbyBsb25nICgyXjE2IC0gMl44KQogZGVwZW5kc19vbjohTUJFRFRMU19DQ01fQUxUCi1jY21fbGVuZ3Roczo1OjEwOjY1MjgxOjg6TUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVAorY2NtX2xlbmd0aHM6NToxMDo2NTI4MDo4Ok1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQKIAogQ0NNIGxlbmd0aHMgIzggbXNnIHRvbyBsb25nIGZvciB0aGlzIElWIGxlbmd0aCAoMl4xNiwgcSA9IDIpCiBjY21fbGVuZ3Roczo2NTUzNjoxMzo1Ojg6TUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVApAQCAtNTEsNiArNTEsOSBAQAogQ0NNIGxlbmd0aHMgIzkgdGFnIGxlbmd0aCAwCiBjY21fbGVuZ3Roczo1OjEwOjU6MDpNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUCiAKK0NDTSBsZW5ndGhzICMxMCBMYXJnZSBBRAorY2NtX2xlbmd0aHM6NToxMDozMjc2ODo4OjAKKwogQ0NNKiBmaXhlZCB0YWcgbGVuZ3RocyAjMSBhbGwgT0sKIGNjbV9zdGFyX2xlbmd0aHM6NToxMDo1Ojg6MAogCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jY20uZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jY20uZnVuY3Rpb24KaW5kZXggNTcyNGQ4Yi4uZmFhN2UxMyAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2NtLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NjbS5mdW5jdGlvbgpAQCAtNDEsMTcgKzQxLDE3IEBACiAgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdOwogICAgIHVuc2lnbmVkIGNoYXIgbXNnWzEwXTsKICAgICB1bnNpZ25lZCBjaGFyIGl2WzE0XTsKLSAgICB1bnNpZ25lZCBjaGFyIGFkZFsxMF07CisgICAgdW5zaWduZWQgY2hhciAqYWRkID0gTlVMTDsKICAgICB1bnNpZ25lZCBjaGFyIG91dFsxMF07CiAgICAgdW5zaWduZWQgY2hhciB0YWdbMThdOwogICAgIGludCBkZWNyeXB0X3JldDsKIAogICAgIG1iZWR0bHNfY2NtX2luaXQoICZjdHggKTsKIAorICAgIEFTU0VSVF9BTExPQ19XRUFLKCBhZGQsIGFkZF9sZW4gKTsKICAgICBtZW1zZXQoIGtleSwgMCwgc2l6ZW9mKCBrZXkgKSApOwogICAgIG1lbXNldCggbXNnLCAwLCBzaXplb2YoIG1zZyApICk7CiAgICAgbWVtc2V0KCBpdiwgMCwgc2l6ZW9mKCBpdiApICk7Ci0gICAgbWVtc2V0KCBhZGQsIDAsIHNpemVvZiggYWRkICkgKTsKICAgICBtZW1zZXQoIG91dCwgMCwgc2l6ZW9mKCBvdXQgKSApOwogICAgIG1lbXNldCggdGFnLCAwLCBzaXplb2YoIHRhZyApICk7CiAKQEAgLTcwLDYgKzcwLDcgQEAKICAgICAgICAgVEVTVF9BU1NFUlQoIGRlY3J5cHRfcmV0ID09IHJlcyApOwogCiBleGl0OgorICAgIG1iZWR0bHNfZnJlZSggYWRkICk7CiAgICAgbWJlZHRsc19jY21fZnJlZSggJmN0eCApOwogfQogLyogRU5EX0NBU0UgKi8KQEAgLTE1Miw3ICsxNTMsNyBAQAogdm9pZCBtYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQoIGludCBjaXBoZXJfaWQsIGRhdGFfdCAqIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBtc2csIGRhdGFfdCAqIGl2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGFkZCwgaW50IHRhZ19sZW4sIGludCByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X21zZyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogZXhwZWN0ZWRfbXNnICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIHRhZ1sxNl07CiAgICAgbWJlZHRsc19jY21fY29udGV4dCBjdHg7CkBAIC0xNzIsNyArMTczLDcgQEAKIAogICAgIGlmKCByZXN1bHQgPT0gMCApCiAgICAgewotICAgICAgICBURVNUX0FTU0VSVCggbWVtY21wKCBtc2ctPngsIGhleF9tc2ctPngsIGhleF9tc2ctPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggbXNnLT54LCBleHBlY3RlZF9tc2ctPngsIGV4cGVjdGVkX21zZy0+bGVuICkgPT0gMCApOwogICAgIH0KICAgICBlbHNlCiAgICAgewpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2hhY2hhMjAuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaGFjaGEyMC5mdW5jdGlvbgppbmRleCBhZmUyNDE4Li42N2M4ZGUyIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaGFjaGEyMC5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaGFjaGEyMC5mdW5jdGlvbgpAQCAtMTcsMTMgKzE3LDYgQEAKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFszNzVdOwogICAgIG1iZWR0bHNfY2hhY2hhMjBfY29udGV4dCBjdHg7CiAKLSAgICAvKgotICAgICAqIEJ1ZmZlcnMgdG8gc3RvcmUgdGhlIEFTQ0lJIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBvdXRwdXQgYW5kCi0gICAgICogZXhwZWN0ZWRfb3V0cHV0X3N0ci4KLSAgICAgKi8KLSAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9zdHJpbmdbNzUxXSA9IHsgJ1wwJyB9OwotICAgIHVuc2lnbmVkIGNoYXIgZXhwZWN0ZWRfb3V0cHV0X3N0cmluZ1s3NTFdID0geyAnXDAnIH07Ci0KICAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgc2l6ZW9mKCBvdXRwdXQgKSApOwogCiAgICAgVEVTVF9BU1NFUlQoIHNyY19zdHItPmxlbiAgID09IGV4cGVjdGVkX291dHB1dF9zdHItPmxlbiApOwpAQCAtMzUsMTIgKzI4LDggQEAKICAgICAgKi8KICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaGFjaGEyMF9jcnlwdCgga2V5X3N0ci0+eCwgbm9uY2Vfc3RyLT54LCBjb3VudGVyLCBzcmNfc3RyLT5sZW4sIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgIG1iZWR0bHNfdGVzdF9oZXhpZnkoIGV4cGVjdGVkX291dHB1dF9zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfb3V0cHV0X3N0ci0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXRfc3RyLT5sZW4pOwotICAgIG1iZWR0bHNfdGVzdF9oZXhpZnkoIG91dHB1dF9zdHJpbmcsIG91dHB1dCwgc3JjX3N0ci0+bGVuICk7Ci0gICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKilvdXRwdXRfc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopZXhwZWN0ZWRfb3V0cHV0X3N0cmluZyApID09IDAgKTsKKyAgICBBU1NFUlRfQ09NUEFSRSggb3V0cHV0LCBleHBlY3RlZF9vdXRwdXRfc3RyLT5sZW4sCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dF9zdHItPngsIGV4cGVjdGVkX291dHB1dF9zdHItPmxlbiApOwogCiAgICAgLyoKICAgICAgKiBUZXN0IHRoZSBzdHJlYW1pbmcgQVBJCkBAIC01NCw5ICs0Myw4IEBACiAgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIHNpemVvZiggb3V0cHV0ICkgKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaGFjaGEyMF91cGRhdGUoICZjdHgsIHNyY19zdHItPmxlbiwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgbWJlZHRsc190ZXN0X2hleGlmeSggb3V0cHV0X3N0cmluZywgb3V0cHV0LCBzcmNfc3RyLT5sZW4gKTsKLSAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKW91dHB1dF9zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilleHBlY3RlZF9vdXRwdXRfc3RyaW5nICkgPT0gMCApOworICAgIEFTU0VSVF9DT01QQVJFKCBvdXRwdXQsIGV4cGVjdGVkX291dHB1dF9zdHItPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfb3V0cHV0X3N0ci0+eCwgZXhwZWN0ZWRfb3V0cHV0X3N0ci0+bGVuICk7CiAKICAgICAvKgogICAgICAqIFRlc3QgdGhlIHN0cmVhbWluZyBBUEkgYWdhaW4sIHBpZWNld2lzZQpAQCAtNzEsOSArNTksOCBAQAogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NoYWNoYTIwX3VwZGF0ZSggJmN0eCwgc3JjX3N0ci0+bGVuIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPnggKyAxLCBvdXRwdXQgKyAxICkgPT0gMCApOwogCi0gICAgbWJlZHRsc190ZXN0X2hleGlmeSggb3V0cHV0X3N0cmluZywgb3V0cHV0LCBzcmNfc3RyLT5sZW4gKTsKLSAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKW91dHB1dF9zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilleHBlY3RlZF9vdXRwdXRfc3RyaW5nICkgPT0gMCApOworICAgIEFTU0VSVF9DT01QQVJFKCBvdXRwdXQsIGV4cGVjdGVkX291dHB1dF9zdHItPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfb3V0cHV0X3N0ci0+eCwgZXhwZWN0ZWRfb3V0cHV0X3N0ci0+bGVuICk7CiAKICAgICBtYmVkdGxzX2NoYWNoYTIwX2ZyZWUoICZjdHggKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Rlcy5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Rlcy5mdW5jdGlvbgppbmRleCA2MjVjODdhLi41YjI0OTM1IDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9kZXMuZnVuY3Rpb24KKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGVzLmZ1bmN0aW9uCkBAIC0xNSw4ICsxNSw3IEBACiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFICovCi12b2lkIGRlc19lbmNyeXB0X2VjYiggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogc3JjX3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZyApCit2b2lkIGRlc19lbmNyeXB0X2VjYiggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogZHN0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfZGVzX2NvbnRleHQgY3R4OwpAQCAtMjgsOCArMjcsNyBAQAogICAgIG1iZWR0bHNfZGVzX3NldGtleV9lbmMoICZjdHgsIGtleV9zdHItPnggKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kZXNfY3J5cHRfZWNiKCAmY3R4LCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIDgsIGRzdC0+bGVuICkgPT0gMCApOwogCiBleGl0OgogICAgIG1iZWR0bHNfZGVzX2ZyZWUoICZjdHggKTsKQEAgLTM3LDggKzM1LDcgQEAKIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgKi8KLXZvaWQgZGVzX2RlY3J5cHRfZWNiKCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nICkKK3ZvaWQgZGVzX2RlY3J5cHRfZWNiKCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CiAgICAgbWJlZHRsc19kZXNfY29udGV4dCBjdHg7CkBAIC01MCw4ICs0Nyw3IEBACiAgICAgbWJlZHRsc19kZXNfc2V0a2V5X2RlYyggJmN0eCwga2V5X3N0ci0+eCApOwogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Rlc19jcnlwdF9lY2IoICZjdHgsIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgOCwgZHN0LT5sZW4gKSA9PSAwICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19kZXNfZnJlZSggJmN0eCApOwpAQCAtNjAsOCArNTYsNyBAQAogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KIHZvaWQgZGVzX2VuY3J5cHRfY2JjKCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBpdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgaW50IGNiY19yZXN1bHQgKQorICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCwgaW50IGNiY19yZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CiAgICAgbWJlZHRsc19kZXNfY29udGV4dCBjdHg7CkBAIC03NSw5ICs3MCw4IEBACiAgICAgaWYoIGNiY19yZXN1bHQgPT0gMCApCiAgICAgewogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LCBzcmNfc3RyLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QtPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC04Nyw3ICs4MSw3IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLwogdm9pZCBkZXNfZGVjcnlwdF9jYmMoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIGl2X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IGNiY19yZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CkBAIC0xMDIsOSArOTYsOCBAQAogICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgc3JjX3N0ci0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0LT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpAQCAtMTE0LDcgKzEwNyw3IEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgZGVzM19lbmNyeXB0X2VjYiggaW50IGtleV9jb3VudCwgZGF0YV90ICoga2V5X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcgKQorICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CiAgICAgbWJlZHRsc19kZXMzX2NvbnRleHQgY3R4OwpAQCAtMTMyLDggKzEyNSw3IEBACiAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kZXMzX2NyeXB0X2VjYiggJmN0eCwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LCA4LCBkc3QtPmxlbiApID09IDAgKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2RlczNfZnJlZSggJmN0eCApOwpAQCAtMTQyLDcgKzEzNCw3IEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgZGVzM19kZWNyeXB0X2VjYiggaW50IGtleV9jb3VudCwgZGF0YV90ICoga2V5X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcgKQorICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CiAgICAgbWJlZHRsc19kZXMzX2NvbnRleHQgY3R4OwpAQCAtMTYwLDggKzE1Miw3IEBACiAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kZXMzX2NyeXB0X2VjYiggJmN0eCwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LCA4LCBkc3QtPmxlbiApID09IDAgKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2RlczNfZnJlZSggJmN0eCApOwpAQCAtMTcxLDcgKzE2Miw3IEBACiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KIHZvaWQgZGVzM19lbmNyeXB0X2NiYyggaW50IGtleV9jb3VudCwgZGF0YV90ICoga2V5X3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaXZfc3RyLCBkYXRhX3QgKiBzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZywgaW50IGNiY19yZXN1bHQgKQorICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBkc3QsIGludCBjYmNfcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfZGVzM19jb250ZXh0IGN0eDsKQEAgLTE5Miw5ICsxODMsOCBAQAogICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwgZHN0LT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpAQCAtMjA1LDcgKzE5NSw3IEBACiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KIHZvaWQgZGVzM19kZWNyeXB0X2NiYyggaW50IGtleV9jb3VudCwgZGF0YV90ICoga2V5X3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaXZfc3RyLCBkYXRhX3QgKiBzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZywgaW50IGNiY19yZXN1bHQgKQorICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBkc3QsIGludCBjYmNfcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfZGVzM19jb250ZXh0IGN0eDsKQEAgLTIyNiw5ICsyMTYsOCBAQAogICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgc3JjX3N0ci0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0LT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmZ1bmN0aW9uCmluZGV4IGIyOGQ5MThiYS4uOWI3YjBlZSAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5mdW5jdGlvbgpAQCAtMzUsOCArMzUsOCBAQAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBnY21fZW5jcnlwdF9hbmRfdGFnKCBpbnQgY2lwaGVyX2lkLCBkYXRhX3QgKiBrZXlfc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBpdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGFkZF9zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnX2xlbl9iaXRzLCBkYXRhX3QgKiBoZXhfdGFnX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogYWRkX3N0ciwgZGF0YV90ICogZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnX2xlbl9iaXRzLCBkYXRhX3QgKiB0YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbml0X3Jlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTI4XTsKQEAgLTU1LDExICs1NSwxMCBAQAogICAgIHsKICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZ2NtX2NyeXB0X2FuZF90YWcoICZjdHgsIE1CRURUTFNfR0NNX0VOQ1JZUFQsIHNyY19zdHItPmxlbiwgaXZfc3RyLT54LCBpdl9zdHItPmxlbiwgYWRkX3N0ci0+eCwgYWRkX3N0ci0+bGVuLCBzcmNfc3RyLT54LCBvdXRwdXQsIHRhZ19sZW4sIHRhZ19vdXRwdXQgKSA9PSAwICk7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOwotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggdGFnX291dHB1dCwgaGV4X3RhZ19zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdfbGVuLCBoZXhfdGFnX3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sIGRzdC0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggdGFnX291dHB1dCwgdGFnLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnX2xlbiwgdGFnLT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfaGtkZi5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2hrZGYuZnVuY3Rpb24KaW5kZXggOTY3ZGYzNi4uNGM1OTdjMyAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfaGtkZi5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9oa2RmLmZ1bmN0aW9uCkBAIC0xNCwxMyArMTQsNiBAQAogewogICAgIGludCByZXQ7CiAgICAgdW5zaWduZWQgY2hhciBva21bMTI4XSA9IHsgJ1wwJyB9OwotICAgIC8qCi0gICAgICogb2ttX3N0cmluZyBhbmQgZXhwZWN0ZWRfb2ttX3N0cmluZyBhcmUgdGhlIEFTQ0lJIHN0cmluZyByZXByZXNlbnRhdGlvbnMKLSAgICAgKiBvZiBrbSBhbmQgZXhwZWN0ZWRfb2ttLCBzbyB0aGVpciBzaXplIHNob3VsZCBiZSB0d2ljZSB0aGUgc2l6ZSBvZgotICAgICAqIG9rbSBhbmQgZXhwZWN0ZWRfb2ttLCBhbmQgYW4gZXh0cmEgbnVsbC10ZXJtaW5hdGlvbi4KLSAgICAgKi8KLSAgICB1bnNpZ25lZCBjaGFyIG9rbV9zdHJpbmdbMjU3XSA9IHsgJ1wwJyB9OwotICAgIHVuc2lnbmVkIGNoYXIgZXhwZWN0ZWRfb2ttX3N0cmluZ1syNTddID0geyAnXDAnIH07CiAKICAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWQgPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF9hbGcgKTsKICAgICBURVNUX0FTU0VSVCggbWQgIT0gTlVMTCApOwpAQCAtMzEsMTQgKzI0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPngsIGluZm8tPmxlbiwgb2ttLCBleHBlY3RlZF9va20tPmxlbiApOwogICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOwogCi0gICAgLyoKLSAgICAgKiBSdW4gbWJlZHRsc190ZXN0X2hleGlmeSBvbiBva20gYW5kIGV4cGVjdGVkX29rbSBzbyB0aGF0IGl0IGxvb2tzIG5pY2VyCi0gICAgICogaWYgdGhlIGFzc2VydGlvbiBmYWlscy4KLSAgICAgKi8KLSAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBva21fc3RyaW5nLCBva20sIGV4cGVjdGVkX29rbS0+bGVuICk7Ci0gICAgbWJlZHRsc190ZXN0X2hleGlmeSggZXhwZWN0ZWRfb2ttX3N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9va20tPngsIGV4cGVjdGVkX29rbS0+bGVuICk7Ci0gICAgVEVTVF9BU1NFUlQoICFzdHJjbXAoIChjaGFyICopb2ttX3N0cmluZywgKGNoYXIgKilleHBlY3RlZF9va21fc3RyaW5nICkgKTsKKyAgICBBU1NFUlRfQ09NUEFSRSggb2ttICAgICAgICAgICAgLCBleHBlY3RlZF9va20tPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfb2ttLT54LCBleHBlY3RlZF9va20tPmxlbiApOwogfQogLyogRU5EX0NBU0UgKi8KIApAQCAtNjIsMTIgKzQ5LDExIEBACiAgICAgaWttID0gbWJlZHRsc190ZXN0X3VuaGV4aWZ5X2FsbG9jKCBoZXhfaWttX3N0cmluZywgJmlrbV9sZW4gKTsKICAgICBzYWx0ID0gbWJlZHRsc190ZXN0X3VuaGV4aWZ5X2FsbG9jKCBoZXhfc2FsdF9zdHJpbmcsICZzYWx0X2xlbiApOwogICAgIHByayA9IG1iZWR0bHNfdGVzdF91bmhleGlmeV9hbGxvYyggaGV4X3Bya19zdHJpbmcsICZwcmtfbGVuICk7Ci0gICAgVEVTVF9BU1NFUlQoIHBya19sZW4gPT0gb3V0cHV0X3Bya19sZW4gKTsKIAogICAgIHJldCA9IG1iZWR0bHNfaGtkZl9leHRyYWN0KCBtZCwgc2FsdCwgc2FsdF9sZW4sIGlrbSwgaWttX2xlbiwgb3V0cHV0X3ByayApOwogICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoICFtZW1jbXAoIG91dHB1dF9wcmssIHByaywgcHJrX2xlbiApICk7CisgICAgQVNTRVJUX0NPTVBBUkUoIG91dHB1dF9wcmssIG91dHB1dF9wcmtfbGVuLCBwcmssIHBya19sZW4gKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2ZyZWUoaWttKTsKQEAgLTEwMyw3ICs4OSw3IEBACiAgICAgcmV0ID0gbWJlZHRsc19oa2RmX2V4cGFuZCggbWQsIHByaywgcHJrX2xlbiwgaW5mbywgaW5mb19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X29rbSwgT0tNX0xFTiApOwogICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOwotICAgIFRFU1RfQVNTRVJUKCAhbWVtY21wKCBvdXRwdXRfb2ttLCBva20sIG9rbV9sZW4gKSApOworICAgIEFTU0VSVF9DT01QQVJFKCBvdXRwdXRfb2ttLCBva21fbGVuLCBva20sIG9rbV9sZW4gKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2ZyZWUoaW5mbyk7CmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZC5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21kLmZ1bmN0aW9uCmluZGV4IGJlNTc4MjkuLmQ5MThjZTMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21kLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21kLmZ1bmN0aW9uCkBAIC0xMjcsNyArMTI3LDcgQEAKIAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBtZF90ZXh0KCBjaGFyICogdGV4dF9tZF9uYW1lLCBjaGFyICogdGV4dF9zcmNfc3RyaW5nLAotICAgICAgICAgICAgICBkYXRhX3QgKiBoZXhfaGFzaF9zdHJpbmcgKQorICAgICAgICAgICAgICBkYXRhX3QgKiBoYXNoICkKIHsKICAgICBjaGFyIG1kX25hbWVbMTAwXTsKICAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwMF07CkBAIC0xNDUsMTUgKzE0NSwxNCBAQAogCiAgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWQoIG1kX2luZm8sIHNyY19zdHIsIHN0cmxlbiggKGNoYXIgKikgc3JjX3N0ciApLCBvdXRwdXQgKSApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAorICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhhc2gtPngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gtPmxlbiApID09IDAgKTsKIH0KIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgKi8KLXZvaWQgbWRfaGV4KCBjaGFyICogdGV4dF9tZF9uYW1lLCBkYXRhX3QgKiBzcmNfc3RyLAotICAgICAgICAgICAgIGRhdGFfdCAqIGhleF9oYXNoX3N0cmluZyApCit2b2lkIG1kX2hleCggY2hhciAqIHRleHRfbWRfbmFtZSwgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGFzaCApCiB7CiAgICAgY2hhciBtZF9uYW1lWzEwMF07CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKQEAgLTE2OSwxNSArMTY4LDE1IEBACiAgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWQoIG1kX2luZm8sIHNyY19zdHItPngsIHNyY19zdHItPmxlbiwgb3V0cHV0ICkgKTsKIAogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAorICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhhc2gtPngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gtPmxlbiApID09IDAgKTsKIH0KIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgbWRfdGV4dF9tdWx0aSggY2hhciAqIHRleHRfbWRfbmFtZSwgY2hhciAqIHRleHRfc3JjX3N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2hhc2hfc3RyaW5nICkKKyAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGFzaCApCiB7CiAgICAgY2hhciBtZF9uYW1lWzEwMF07CiAgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMDBdOwpAQCAtMjExLDE4ICsyMTAsMTggQEAKIAogICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX3VwZGF0ZSggJmN0eCwgc3JjX3N0ciArIGhhbGZ3YXksIGxlbiAtIGhhbGZ3YXkgKSApOwogICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICkgKTsKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfaGFzaF9zdHJpbmctPngsCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfaGFzaF9zdHJpbmctPmxlbikgPT0gMCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLT5sZW4pID09IDAgKTsKIAogICAgIC8qIFRlc3QgY2xvbmUgKi8KICAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwICk7CiAKICAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF91cGRhdGUoICZjdHhfY29weSwgc3JjX3N0ciArIGhhbGZ3YXksIGxlbiAtIGhhbGZ3YXkgKSApOwogICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2ZpbmlzaCggJmN0eF9jb3B5LCBvdXRwdXQgKSApOwotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9oYXNoX3N0cmluZy0+eCwKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoYXNoLT54LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9oYXNoX3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLT5sZW4gKSA9PSAwICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19tZF9mcmVlKCAmY3R4ICk7CkBAIC0yMzEsOCArMjMwLDcgQEAKIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgKi8KLXZvaWQgbWRfaGV4X211bHRpKCBjaGFyICogdGV4dF9tZF9uYW1lLCBkYXRhX3QgKiBzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGhleF9oYXNoX3N0cmluZyApCit2b2lkIG1kX2hleF9tdWx0aSggY2hhciAqIHRleHRfbWRfbmFtZSwgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGFzaCApCiB7CiAgICAgY2hhciBtZF9uYW1lWzEwMF07CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKQEAgLTI2MSwxOCArMjU5LDE4IEBACiAKICAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF91cGRhdGUoICZjdHgsIHNyY19zdHItPnggKyBoYWxmd2F5LCBzcmNfc3RyLT5sZW4gLSBoYWxmd2F5KSApOwogICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICkgKTsKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfaGFzaF9zdHJpbmctPngsCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfaGFzaF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaC0+bGVuICkgPT0gMCApOwogCiAgICAgLyogVGVzdCBjbG9uZSAqLwogICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAgKTsKIAogICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX3VwZGF0ZSggJmN0eF9jb3B5LCBzcmNfc3RyLT54ICsgaGFsZndheSwgc3JjX3N0ci0+bGVuIC0gaGFsZndheSApICk7CiAgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfZmluaXNoKCAmY3R4X2NvcHksIG91dHB1dCApICk7Ci0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAorICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhhc2gtPngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gtPmxlbiApID09IDAgKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX21kX2ZyZWUoICZjdHggKTsKQEAgLTI4Myw3ICsyODEsNyBAQAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBtYmVkdGxzX21kX2htYWMoIGNoYXIgKiB0ZXh0X21kX25hbWUsIGludCB0cnVuY19zaXplLAogICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIHNyY19zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2hhc2hfc3RyaW5nICkKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBoYXNoICkKIHsKICAgICBjaGFyIG1kX25hbWVbMTAwXTsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwpAQCAtMjk5LDE0ICsyOTcsMTQgQEAKIAogICAgIFRFU1RfQVNTRVJUICggbWJlZHRsc19tZF9obWFjKCBtZF9pbmZvLCBrZXlfc3RyLT54LCBrZXlfc3RyLT5sZW4sIHNyY19zdHItPngsIHNyY19zdHItPmxlbiwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVuY19zaXplLCBoZXhfaGFzaF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoYXNoLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVuY19zaXplLCBoYXNoLT5sZW4gKSA9PSAwICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIG1kX2htYWNfbXVsdGkoIGNoYXIgKiB0ZXh0X21kX25hbWUsIGludCB0cnVuY19zaXplLCBkYXRhX3QgKiBrZXlfc3RyLAotICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfaGFzaF9zdHJpbmcgKQorICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoYXNoICkKIHsKICAgICBjaGFyIG1kX25hbWVbMTAwXTsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwpAQCAtMzMyLDggKzMzMCw4IEBACiAgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZjdHgsIHNyY19zdHItPnggKyBoYWxmd2F5LCBzcmNfc3RyLT5sZW4gLSBoYWxmd2F5ICkgKTsKICAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICkgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9oYXNoX3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNfc2l6ZSwgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNfc2l6ZSwgaGFzaC0+bGVuICkgPT0gMCApOwogCiAgICAgLyogVGVzdCBhZ2FpbiwgZm9yIHJlc2V0KCkgKi8KICAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwICk7CkBAIC0zNDMsOCArMzQxLDggQEAKICAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJmN0eCwgc3JjX3N0ci0+eCArIGhhbGZ3YXksIHNyY19zdHItPmxlbiAtIGhhbGZ3YXkgKSApOwogICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmY3R4LCBvdXRwdXQgKSApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVuY19zaXplLCBoZXhfaGFzaF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoYXNoLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVuY19zaXplLCBoYXNoLT5sZW4gKSA9PSAwICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19tZF9mcmVlKCAmY3R4ICk7CkBAIC0zNTMsNyArMzUxLDcgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRlNfSU8gKi8KIHZvaWQgbWJlZHRsc19tZF9maWxlKCBjaGFyICogdGV4dF9tZF9uYW1lLCBjaGFyICogZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2hhc2hfc3RyaW5nICkKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBoYXNoICkKIHsKICAgICBjaGFyIG1kX25hbWVbMTAwXTsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwpAQCAtMzY4LDggKzM2Niw4IEBACiAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9maWxlKCBtZF9pbmZvLCBmaWxlbmFtZSwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAorICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhhc2gtPngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gtPmxlbiApID09IDAgKTsKIH0KIC8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZHguZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZHguZnVuY3Rpb24KaW5kZXggZWQyYWU1OC4uYWEzNWM1OCAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWR4LmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21keC5mdW5jdGlvbgpAQCAtNiw3ICs2LDcgQEAKIC8qIEVORF9IRUFERVIgKi8KIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MgKi8KLXZvaWQgbWQyX3RleHQoIGNoYXIgKiB0ZXh0X3NyY19zdHJpbmcsIGRhdGFfdCAqIGhleF9oYXNoX3N0cmluZyApCit2b2lkIG1kMl90ZXh0KCBjaGFyICogdGV4dF9zcmNfc3RyaW5nLCBkYXRhX3QgKiBoYXNoICkKIHsKICAgICBpbnQgcmV0OwogICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOwpAQCAtMjAsMTQgKzIwLDEzIEBACiAgICAgcmV0ID0gbWJlZHRsc19tZDJfcmV0KCBzcmNfc3RyLCBzdHJsZW4oIChjaGFyICopIHNyY19zdHIgKSwgb3V0cHV0ICk7CiAgICAgVEVTVF9BU1NFUlQoIHJldCA9PSAwICkgOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICBvdXRwdXQsIGhhc2gtPmxlbiApID09IDAgKTsKIH0KIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX01ENF9DICovCi12b2lkIG1kNF90ZXh0KCBjaGFyICogdGV4dF9zcmNfc3RyaW5nLCBkYXRhX3QgKiBoZXhfaGFzaF9zdHJpbmcgKQordm9pZCBtZDRfdGV4dCggY2hhciAqIHRleHRfc3JjX3N0cmluZywgZGF0YV90ICogaGFzaCApCiB7CiAgICAgaW50IHJldDsKICAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKQEAgLTQxLDE0ICs0MCwxMyBAQAogICAgIHJldCA9IG1iZWR0bHNfbWQ0X3JldCggc3JjX3N0ciwgc3RybGVuKCAoY2hhciAqKSBzcmNfc3RyICksIG91dHB1dCApOwogICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICBvdXRwdXQsIGhhc2gtPmxlbiApID09IDAgKTsKIH0KIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX01ENV9DICovCi12b2lkIG1kNV90ZXh0KCBjaGFyICogdGV4dF9zcmNfc3RyaW5nLCBkYXRhX3QgKiBoZXhfaGFzaF9zdHJpbmcgKQordm9pZCBtZDVfdGV4dCggY2hhciAqIHRleHRfc3JjX3N0cmluZywgZGF0YV90ICogaGFzaCApCiB7CiAgICAgaW50IHJldDsKICAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKQEAgLTYyLDE0ICs2MCwxMyBAQAogICAgIHJldCA9IG1iZWR0bHNfbWQ1X3JldCggc3JjX3N0ciwgc3RybGVuKCAoY2hhciAqKSBzcmNfc3RyICksIG91dHB1dCApOwogICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICBvdXRwdXQsIGhhc2gtPmxlbiApID09IDAgKTsKIH0KIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DICovCi12b2lkIHJpcGVtZDE2MF90ZXh0KCBjaGFyICogdGV4dF9zcmNfc3RyaW5nLCBkYXRhX3QgKiBoZXhfaGFzaF9zdHJpbmcgKQordm9pZCByaXBlbWQxNjBfdGV4dCggY2hhciAqIHRleHRfc3JjX3N0cmluZywgZGF0YV90ICogaGFzaCApCiB7CiAgICAgaW50IHJldDsKICAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKQEAgLTgzLDkgKzgwLDggQEAKICAgICByZXQgPSBtYmVkdGxzX3JpcGVtZDE2MF9yZXQoIHNyY19zdHIsIHN0cmxlbiggKGNoYXIgKikgc3JjX3N0ciApLCBvdXRwdXQgKTsKICAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9oYXNoX3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIG91dHB1dCwgaGFzaC0+bGVuICkgPT0gMCApOwogfQogLyogRU5EX0NBU0UgKi8KIApkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGsuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9way5mdW5jdGlvbgppbmRleCBjNjA0MWIyLi45ODAxNmM2IDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9way5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9way5mdW5jdGlvbgpAQCAtMTAwLDEzICsxMDAsMTMgQEAKICNpZiBkZWZpbmVkKE1CRURUTFNfVVNFX1BTQV9DUllQVE8pCiAKIC8qCi0gKiBHZW5lcmF0ZSBhIGtleSB1c2luZyBQU0EgYW5kIHJldHVybiBhIGhhbmRsZSB0byB0aGF0IGtleSwKKyAqIEdlbmVyYXRlIGEga2V5IHVzaW5nIFBTQSBhbmQgcmV0dXJuIHRoZSBrZXkgaWRlbnRpZmllciBvZiB0aGF0IGtleSwKICAqIG9yIDAgaWYgdGhlIGtleSBnZW5lcmF0aW9uIGZhaWxlZC4KICAqIFRoZSBrZXkgdXNlcyBOSVNUIFAtMjU2IGFuZCBpcyB1c2FibGUgZm9yIHNpZ25pbmcgd2l0aCBTSEEtMjU2LgogICovCi1wc2Ffa2V5X2hhbmRsZV90IHBrX3BzYV9nZW5rZXkoIHZvaWQgKQorbWJlZHRsc19zdmNfa2V5X2lkX3QgcGtfcHNhX2dlbmtleSggdm9pZCApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBrZXk7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5OwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBjb25zdCBwc2Ffa2V5X3R5cGVfdCB0eXBlID0KICAgICAgICAgUFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUiggUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSApOwpAQCAtMTMzLDcgKzEzMyw3IEBACiB2b2lkIHBrX3BzYV91dGlscyggICkKIHsKICAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGssIHBrMjsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGtleTsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXk7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogCiAgICAgY29uc3QgY2hhciAqIGNvbnN0IG5hbWUgPSAiT3BhcXVlIjsKQEAgLTE1MSwxNCArMTUxLDE0IEBACiAKICAgICBURVNUX0FTU0VSVCggcHNhX2NyeXB0b19pbml0KCApID09IFBTQV9TVUNDRVNTICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19zZXR1cF9vcGFxdWUoICZwaywgMCApID09CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfc2V0dXBfb3BhcXVlKCAmcGssIE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUICkgPT0KICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEgKTsKIAogICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrICk7CiAgICAgbWJlZHRsc19wa19pbml0KCAmcGsgKTsKIAogICAgIGtleSA9IHBrX3BzYV9nZW5rZXkoKTsKLSAgICBpZigga2V5ID09IDAgKQorICAgIGlmKCBtYmVkdGxzX3N2Y19rZXlfaWRfaXNfbnVsbCgga2V5ICkgKQogICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19zZXR1cF9vcGFxdWUoICZwaywga2V5ICkgPT0gMCApOwpAQCAtMjAwLDYgKzIwMCwxMiBAQAogICAgIFRFU1RfQVNTRVJUKCBQU0FfU1VDQ0VTUyA9PSBwc2FfZGVzdHJveV9rZXkoIGtleSApICk7CiAKIGV4aXQ6CisgICAgLyoKKyAgICAgKiBLZXkgYXR0cmlidXRlcyBtYXkgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoKQorICAgICAqIHRodXMgcmVzZXQgdGhlbSBhcyByZXF1aXJlZC4KKyAgICAgKi8KKyAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7CisKICAgICBtYmVkdGxzX3BrX2ZyZWUoICZwayApOyAvKiByZWR1bmRhbnQgZXhjZXB0IHVwb24gZXJyb3IgKi8KICAgICBtYmVkdGxzX3BrX2ZyZWUoICZwazIgKTsKICAgICBQU0FfRE9ORSggKTsKQEAgLTEyMjAsNyArMTIyNiw3IEBACiAgICAgdW5zaWduZWQgY2hhciAqcGtleV9sZWdhY3lfc3RhcnQsICpwa2V5X3BzYV9zdGFydDsKICAgICBzaXplX3Qgc2lnX2xlbiwga2xlbl9sZWdhY3ksIGtsZW5fcHNhOwogICAgIGludCByZXQ7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGU7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5X2lkOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCBleHBlY3RlZF90eXBlID0gUFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUiggcHNhX2N1cnZlX2FyZyApOwogICAgIHNpemVfdCBleHBlY3RlZF9iaXRzID0gZXhwZWN0ZWRfYml0c19hcmc7CkBAIC0xMjUyLDEwICsxMjU4LDEwIEBACiAgICAgcGtleV9sZWdhY3lfc3RhcnQgPSBwa2V5X2xlZ2FjeSArIHNpemVvZiggcGtleV9sZWdhY3kgKSAtIGtsZW5fbGVnYWN5OwogCiAgICAgLyogVHVybiBQSyBjb250ZXh0IGludG8gYW4gb3BhcXVlIG9uZS4gKi8KLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa193cmFwX2FzX29wYXF1ZSggJnBrLCAmaGFuZGxlLAorICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3dyYXBfYXNfb3BhcXVlKCAmcGssICZrZXlfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9BTEdfU0hBXzI1NiApID09IDAgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmF0dHJpYnV0ZXMgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGtleV9pZCwgJmF0dHJpYnV0ZXMgKSApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzICksIGV4cGVjdGVkX3R5cGUgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcyApLCBleHBlY3RlZF9iaXRzICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfbGlmZXRpbWUoICZhdHRyaWJ1dGVzICksCkBAIC0xMjgwLDcgKzEyODYsNyBAQAogICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIHBrZXlfcHNhX3N0YXJ0LCBwa2V5X2xlZ2FjeV9zdGFydCwga2xlbl9wc2EgKSA9PSAwICk7CiAKICAgICBtYmVkdGxzX3BrX2ZyZWUoICZwayApOwotICAgIFRFU1RfQVNTRVJUKCBQU0FfU1VDQ0VTUyA9PSBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApICk7CisgICAgVEVTVF9BU1NFUlQoIFBTQV9TVUNDRVNTID09IHBzYV9kZXN0cm95X2tleSgga2V5X2lkICkgKTsKIAogICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleSggJnBrLCBwa2V5X2xlZ2FjeV9zdGFydCwKQEAgLTEyODksNiArMTI5NSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gsIHNpemVvZiBoYXNoLCBzaWcsIHNpZ19sZW4gKSA9PSAwICk7CiAKIGV4aXQ6CisgICAgLyoKKyAgICAgKiBLZXkgYXR0cmlidXRlcyBtYXkgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoKQorICAgICAqIHRodXMgcmVzZXQgdGhlbSBhcyByZXF1aXJlZC4KKyAgICAgKi8KKyAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7CisKICAgICBtYmVkdGxzX3BrX2ZyZWUoICZwayApOwogICAgIFBTQV9ET05FKCApOwogfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjE1LmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjE1LmZ1bmN0aW9uCmluZGV4IDhhNDIxODAuLjA2ODAyN2IgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3MxX3YxNS5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa2NzMV92MTUuZnVuY3Rpb24KQEAgLTEyLDcgKzEyLDcgQEAKIHZvaWQgcGtjczFfcnNhZXNfdjE1X2VuY3J5cHQoIGludCBtb2QsIGludCByYWRpeF9OLCBjaGFyICogaW5wdXRfTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9FLCBjaGFyICogaW5wdXRfRSwgaW50IGhhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBtZXNzYWdlX3N0ciwgZGF0YV90ICogcm5kX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHJlc3VsdF9zdHIsIGludCByZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEyOF07CiAgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CkBAIC00Miw4ICs0Miw4IEBACiAKICAgICBpZiggcmVzdWx0ID09IDAgKQogICAgIHsKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X2hleF9zdHItPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGVuLCByZXN1bHRfaGV4X3N0ci0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfc3RyLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwgcmVzdWx0X3N0ci0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTU2LDcgKzU2LDcgQEAKIHZvaWQgcGtjczFfcnNhZXNfdjE1X2RlY3J5cHQoIGludCBtb2QsIGludCByYWRpeF9QLCBjaGFyICogaW5wdXRfUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9RLCBjaGFyICogaW5wdXRfUSwgaW50IHJhZGl4X04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogaW5wdXRfTiwgaW50IHJhZGl4X0UsIGNoYXIgKiBpbnB1dF9FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhhc2gsIGRhdGFfdCAqIHJlc3VsdF9oZXhfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhhc2gsIGRhdGFfdCAqIHJlc3VsdF9zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogc2VlZCwgZGF0YV90ICogbWVzc2FnZV9zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ICkKIHsKQEAgLTg0LDcgKzg0LDcgQEAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY29tcGxldGUoICZjdHggKSA9PSAwICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoICZjdHggKSA9PSAwICk7CiAKLSAgICBpZiggcmVzdWx0X2hleF9zdHItPmxlbiA9PSAwICkKKyAgICBpZiggcmVzdWx0X3N0ci0+bGVuID09IDAgKQogICAgIHsKICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3BrY3MxX2RlY3J5cHQoICZjdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWJlZHRsc190ZXN0X3JuZF9wc2V1ZG9fcmFuZCwKQEAgLTEwMiw5ICsxMDIsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAxMDAwICkgPT0gcmVzdWx0ICk7CiAgICAgICAgIGlmKCByZXN1bHQgPT0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9oZXhfc3RyLT54LAorICAgICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9oZXhfc3RyLT5sZW4pID09IDAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3RyLT5sZW4pID09IDAgKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjY3LDcgKzI2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGlucHV0X1EsIGludCByYWRpeF9OLCBjaGFyICogaW5wdXRfTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfRSwgY2hhciAqIGlucHV0X0UsIGludCBkaWdlc3QsIGludCBoYXNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIG1lc3NhZ2Vfc3RyLCBkYXRhX3QgKiBybmRfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiByZXN1bHRfc3RyLCBpbnQgcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIGhhc2hfcmVzdWx0W01CRURUTFNfTURfTUFYX1NJWkVdOwogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEyOF07CkBAIC0zMDUsOCArMzA1LDggQEAKICAgICBpZiggcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfaGV4X3N0ci0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sIHJlc3VsdF9oZXhfc3RyLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9zdHItPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGVuLCByZXN1bHRfc3RyLT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjIxLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjIxLmZ1bmN0aW9uCmluZGV4IGM5ZTkxYzguLmMyOGNmMDggMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3MxX3YyMS5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa2NzMV92MjEuZnVuY3Rpb24KQEAgLTEyLDcgKzEyLDcgQEAKIHZvaWQgcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0KCBpbnQgbW9kLCBpbnQgcmFkaXhfTiwgY2hhciAqIGlucHV0X04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0UsIGNoYXIgKiBpbnB1dF9FLCBpbnQgaGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBtZXNzYWdlX3N0ciwgZGF0YV90ICogcm5kX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiByZXN1bHRfaGV4X3N0ciwgaW50IHJlc3VsdCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogcmVzdWx0X3N0ciwgaW50IHJlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjU2XTsKICAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eDsKQEAgLTQxLDggKzQxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICkgPT0gcmVzdWx0ICk7CiAgICAgaWYoIHJlc3VsdCA9PSAwICkKICAgICB7Ci0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9oZXhfc3RyLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwgcmVzdWx0X2hleF9zdHItPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sIHJlc3VsdF9zdHItPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC01NSw3ICs1NSw3IEBACiB2b2lkIHBrY3MxX3JzYWVzX29hZXBfZGVjcnlwdCggaW50IG1vZCwgaW50IHJhZGl4X1AsIGNoYXIgKiBpbnB1dF9QLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9RLCBjaGFyICogaW5wdXRfUSwgaW50IHJhZGl4X04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGlucHV0X04sIGludCByYWRpeF9FLCBjaGFyICogaW5wdXRfRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGFzaCwgZGF0YV90ICogcmVzdWx0X2hleF9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhhc2gsIGRhdGFfdCAqIHJlc3VsdF9zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHNlZWQsIGRhdGFfdCAqIG1lc3NhZ2Vfc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgKQogewpAQCAtODQsNyArODQsNyBAQAogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jb21wbGV0ZSggJmN0eCApID09IDAgKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSggJmN0eCApID09IDAgKTsKIAotICAgIGlmKCByZXN1bHRfaGV4X3N0ci0+bGVuID09IDAgKQorICAgIGlmKCByZXN1bHRfc3RyLT5sZW4gPT0gMCApCiAgICAgewogICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcGtjczFfZGVjcnlwdCggJmN0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYmVkdGxzX3Rlc3Rfcm5kX3BzZXVkb19yYW5kLApAQCAtMTA0LDkgKzEwNCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIG91dHB1dCApICkgPT0gcmVzdWx0ICk7CiAgICAgICAgIGlmKCByZXN1bHQgPT0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9oZXhfc3RyLT54LAorICAgICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9oZXhfc3RyLT5sZW4gKSA9PSAwICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N0ci0+bGVuICkgPT0gMCApOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogaW5wdXRfUSwgaW50IHJhZGl4X04sIGNoYXIgKiBpbnB1dF9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9FLCBjaGFyICogaW5wdXRfRSwgaW50IGRpZ2VzdCwgaW50IGhhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogbWVzc2FnZV9zdHIsIGRhdGFfdCAqIHJuZF9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogcmVzdWx0X2hleF9zdHIsIGludCByZXN1bHQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHJlc3VsdF9zdHIsIGludCByZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9yZXN1bHRbTUJFRFRMU19NRF9NQVhfU0laRV07CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjU2XTsKQEAgLTE2MCw4ICsxNjAsOCBAQAogICAgIGlmKCByZXN1bHQgPT0gMCApCiAgICAgewogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9oZXhfc3RyLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwgcmVzdWx0X2hleF9zdHItPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sIHJlc3VsdF9zdHItPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wb2x5MTMwNS5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BvbHkxMzA1LmZ1bmN0aW9uCmluZGV4IDQ0NjE3ZDkuLjRiODk5NWIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BvbHkxMzA1LmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BvbHkxMzA1LmZ1bmN0aW9uCkBAIC05LDE0ICs5LDEyIEBACiAgKi8KIAogLyogQkVHSU5fQ0FTRSAqLwotdm9pZCBtYmVkdGxzX3BvbHkxMzA1KCBkYXRhX3QgKmtleSwgY2hhciAqaGV4X21hY19zdHJpbmcsIGRhdGFfdCAqc3JjX3N0ciApCit2b2lkIG1iZWR0bHNfcG9seTEzMDUoIGRhdGFfdCAqa2V5LCBkYXRhX3QgKmV4cGVjdGVkX21hYywgZGF0YV90ICpzcmNfc3RyICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG1hY1sxNl07IC8qIHNpemUgc2V0IGJ5IHRoZSBzdGFuZGFyZCAqLwotICAgIHVuc2lnbmVkIGNoYXIgbWFjX3N0clszM107IC8qIGhleCBleHBhbnNpb24gb2YgdGhlIGFib3ZlICovCiAgICAgbWJlZHRsc19wb2x5MTMwNV9jb250ZXh0IGN0eDsKIAotICAgIG1lbXNldCggbWFjX3N0ciwgMHgwMCwgc2l6ZW9mKCBtYWNfc3RyICkgKTsKLSAgICBtZW1zZXQoIG1hYywgICAgIDB4MDAsIHNpemVvZiggbWFjICkgKTsKKyAgICBtZW1zZXQoIG1hYywgMHgwMCwgc2l6ZW9mKCBtYWMgKSApOwogCiAgICAgLyoKICAgICAgKiBUZXN0IHRoZSBpbnRlZ3JhdGVkIEFQSQpAQCAtMjQsOCArMjIsOCBAQAogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BvbHkxMzA1X21hYygga2V5LT54LCBzcmNfc3RyLT54LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLCBtYWMgKSA9PSAwICk7CiAKLSAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBtYWNfc3RyLCBtYWMsIDE2ICk7Ci0gICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgbWFjX3N0ciwgaGV4X21hY19zdHJpbmcgKSA9PSAwICk7CisgICAgQVNTRVJUX0NPTVBBUkUoIG1hYywgZXhwZWN0ZWRfbWFjLT5sZW4sCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX21hYy0+eCwgZXhwZWN0ZWRfbWFjLT5sZW4gKTsKIAogICAgIC8qCiAgICAgICogVGVzdCB0aGUgc3RyZWFtaW5nIEFQSQpAQCAtMzgsOCArMzYsOCBAQAogCiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcG9seTEzMDVfZmluaXNoKCAmY3R4LCBtYWMgKSA9PSAwICk7CiAKLSAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBtYWNfc3RyLCBtYWMsIDE2ICk7Ci0gICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgbWFjX3N0ciwgaGV4X21hY19zdHJpbmcgKSA9PSAwICk7CisgICAgQVNTRVJUX0NPTVBBUkUoIG1hYywgZXhwZWN0ZWRfbWFjLT5sZW4sCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX21hYy0+eCwgZXhwZWN0ZWRfbWFjLT5sZW4gKTsKIAogICAgIC8qCiAgICAgICogVGVzdCB0aGUgc3RyZWFtaW5nIEFQSSBhZ2FpbiwgcGllY2V3aXNlCkBAIC01Niw4ICs1NCw4IEBACiAKICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcG9seTEzMDVfZmluaXNoKCAmY3R4LCBtYWMgKSA9PSAwICk7CiAKLSAgICAgICAgbWJlZHRsc190ZXN0X2hleGlmeSggbWFjX3N0ciwgbWFjLCAxNiApOwotICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBtYWNfc3RyLCBoZXhfbWFjX3N0cmluZyApID09IDAgKTsKKyAgICAgICAgQVNTRVJUX0NPTVBBUkUoIG1hYywgZXhwZWN0ZWRfbWFjLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9tYWMtPngsIGV4cGVjdGVkX21hYy0+bGVuICk7CiAgICAgfQogCiAgICAgLyoKQEAgLTczLDggKzcxLDggQEAKIAogICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wb2x5MTMwNV9maW5pc2goICZjdHgsIG1hYyApID09IDAgKTsKIAotICAgICAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBtYWNfc3RyLCBtYWMsIDE2ICk7Ci0gICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIG1hY19zdHIsIGhleF9tYWNfc3RyaW5nICkgPT0gMCApOworICAgICAgICBBU1NFUlRfQ09NUEFSRSggbWFjLCBleHBlY3RlZF9tYWMtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX21hYy0+eCwgZXhwZWN0ZWRfbWFjLT5sZW4gKTsKICAgICB9CiAKICAgICBtYmVkdGxzX3BvbHkxMzA1X2ZyZWUoICZjdHggKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG8uZGF0YSBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG8uZGF0YQppbmRleCAyYzY5MjRhLi5kM2RjYTdiIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvLmRhdGEKKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0by5kYXRhCkBAIC0xMywxMiArMTMsMTggQEAKIFBTQSBrZXkgYXR0cmlidXRlczogaWQgdGhlbiBiYWNrIHRvIHZvbGF0aWxlCiBwZXJzaXN0ZW5jZV9hdHRyaWJ1dGVzOjB4MTIzNDoweDU2Nzg6UFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRTotMTowOjA6MHg1Njc4OlBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUKIAorUFNBIGtleSBhdHRyaWJ1dGVzOiBpZCB0aGVuIGJhY2sgdG8gbm9uIGxvY2FsIHZvbGF0aWxlCitwZXJzaXN0ZW5jZV9hdHRyaWJ1dGVzOjB4MTIzNDoweDU2Nzg6UFNBX0tFWV9MSUZFVElNRV9GUk9NX1BFUlNJU1RFTkNFX0FORF9MT0NBVElPTihQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFLDEpOi0xOjA6MDoweDU2Nzg6UFNBX0tFWV9MSUZFVElNRV9GUk9NX1BFUlNJU1RFTkNFX0FORF9MT0NBVElPTihQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFLDEpCisKIFBTQSBrZXkgYXR0cmlidXRlczogaWQgdGhlbiBsaWZldGltZQogcGVyc2lzdGVuY2VfYXR0cmlidXRlczoweDEyMzQ6MHg1Njc4OjM6LTE6MDoweDEyMzQ6MHg1Njc4OjMKIAogUFNBIGtleSBhdHRyaWJ1dGVzOiBsaWZldGltZSB0aGVuIGlkCiBwZXJzaXN0ZW5jZV9hdHRyaWJ1dGVzOjB4MTIzNDoweDU2Nzg6MzoweDEyMzU6MHg1Njc5OjB4MTIzNToweDU2Nzk6MwogCitQU0Ega2V5IGF0dHJpYnV0ZXM6IG5vbiBsb2NhbCB2b2xhdGlsZSBsaWZldGltZSB0aGVuIGlkCitwZXJzaXN0ZW5jZV9hdHRyaWJ1dGVzOjB4MTIzNDoweDU2Nzg6UFNBX0tFWV9MSUZFVElNRV9GUk9NX1BFUlNJU1RFTkNFX0FORF9MT0NBVElPTihQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFLDMpOjB4MTIzNToweDU2Nzk6MHgxMjM1OjB4NTY3OTpQU0FfS0VZX0xJRkVUSU1FX0ZST01fUEVSU0lTVEVOQ0VfQU5EX0xPQ0FUSU9OKFBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVCwzKQorCiBQU0Ega2V5IGF0dHJpYnV0ZXM6IHNsb3QgbnVtYmVyCiBzbG90X251bWJlcl9hdHRyaWJ1dGU6CiAKQEAgLTU2MywzOSArNTY5LDQzIEBACiAKIFBTQSBrZXkgcG9saWN5OiBhZ3JlZW1lbnQgKyBLREYsIHBlcm1pdHRlZAogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQzpNQkVEVExTX1NIQTI1Nl9DCi1hZ3JlZW1lbnRfa2V5X3BvbGljeTpQU0FfS0VZX1VTQUdFX0RFUklWRTpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpCithZ3JlZW1lbnRfa2V5X3BvbGljeTpQU0FfS0VZX1VTQUdFX0RFUklWRTpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9TVUNDRVNTCiAKIFBTQSBrZXkgcG9saWN5OiBhZ3JlZW1lbnQgKyBLREYsIG5vdCBwZXJtaXR0ZWQKIGRlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ0RIX0M6TUJFRFRMU19TSEEyNTZfQwotYWdyZWVtZW50X2tleV9wb2xpY3k6MDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpCithZ3JlZW1lbnRfa2V5X3BvbGljeTowOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0VSUk9SX05PVF9QRVJNSVRURUQKIAogUFNBIGtleSBwb2xpY3k6IGFncmVlbWVudCArIEtERiwgd3JvbmcgYWdyZWVtZW50IGFsZ29yaXRobQogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQzpNQkVEVExTX1NIQTI1Nl9DCi1hZ3JlZW1lbnRfa2V5X3BvbGljeTpQU0FfS0VZX1VTQUdFX0RFUklWRTpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRkZESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpCithZ3JlZW1lbnRfa2V5X3BvbGljeTpQU0FfS0VZX1VTQUdFX0RFUklWRTpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRkZESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9FUlJPUl9OT1RfUEVSTUlUVEVECiAKIFBTQSBrZXkgcG9saWN5OiBhZ3JlZW1lbnQgKyBLREYsIHdyb25nIEtERiBhbGdvcml0aG0KIGRlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ0RIX0M6TUJFRFRMU19TSEEyNTZfQwotYWdyZWVtZW50X2tleV9wb2xpY3k6UFNBX0tFWV9VU0FHRV9ERVJJVkU6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yMjQpKQorYWdyZWVtZW50X2tleV9wb2xpY3k6UFNBX0tFWV9VU0FHRV9ERVJJVkU6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yMjQpKTpQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAogCi1QU0Ega2V5IHBvbGljeTogYWdyZWVtZW50ICsgS0RGLCBrZXkgb25seSBwZXJtaXRzIHJhdyBhZ3JlZW1lbnQKK1BTQSBrZXkgcG9saWN5OiBhZ3JlZW1lbnQgKyBLREYsIGtleSBwZXJtaXRzIHJhdyBhZ3JlZW1lbnQKIGRlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ0RIX0M6TUJFRFRMU19TSEEyNTZfQwotYWdyZWVtZW50X2tleV9wb2xpY3k6UFNBX0tFWV9VU0FHRV9ERVJJVkU6UFNBX0FMR19FQ0RIOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKQorYWdyZWVtZW50X2tleV9wb2xpY3k6UFNBX0tFWV9VU0FHRV9ERVJJVkU6UFNBX0FMR19FQ0RIOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfU1VDQ0VTUwogCiBQU0Ega2V5IHBvbGljeTogcmF3IGFncmVlbWVudCwgcGVybWl0dGVkCiBkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DCi1yYXdfYWdyZWVtZW50X2tleV9wb2xpY3k6UFNBX0tFWV9VU0FHRV9ERVJJVkU6UFNBX0FMR19FQ0RIOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9BTEdfRUNESAorcmF3X2FncmVlbWVudF9rZXlfcG9saWN5OlBTQV9LRVlfVVNBR0VfREVSSVZFOlBTQV9BTEdfRUNESDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpQU0FfQUxHX0VDREg6UFNBX1NVQ0NFU1MKIAogUFNBIGtleSBwb2xpY3k6IHJhdyBhZ3JlZW1lbnQsIG5vdCBwZXJtaXR0ZWQKIGRlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ0RIX0MKLXJhd19hZ3JlZW1lbnRfa2V5X3BvbGljeTowOlBTQV9BTEdfRUNESDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpQU0FfQUxHX0VDREgKK3Jhd19hZ3JlZW1lbnRfa2V5X3BvbGljeTowOlBTQV9BTEdfRUNESDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpQU0FfQUxHX0VDREg6UFNBX0VSUk9SX05PVF9QRVJNSVRURUQKIAogUFNBIGtleSBwb2xpY3k6IHJhdyBhZ3JlZW1lbnQsIHdyb25nIGFsZ29yaXRobQogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQwotcmF3X2FncmVlbWVudF9rZXlfcG9saWN5OlBTQV9LRVlfVVNBR0VfREVSSVZFOlBTQV9BTEdfRUNESDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpQU0FfQUxHX0ZGREgKK3Jhd19hZ3JlZW1lbnRfa2V5X3BvbGljeTpQU0FfS0VZX1VTQUdFX0RFUklWRTpQU0FfQUxHX0VDREg6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0FMR19GRkRIOlBTQV9FUlJPUl9OT1RfUEVSTUlUVEVECiAKLVBTQSBrZXkgcG9saWN5OiByYXcgYWdyZWVtZW50LCBrZXkgb25seSBwZXJtaXRzIGEgS0RGCitQU0Ega2V5IHBvbGljeTogcmF3IGFncmVlbWVudCwga2V5IHBlcm1pdHMgcmF3IGFncmVlbWVudCwgYnV0IGFsZ29yaXRobSBpcyBub3QgcmF3CiBkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DCi1yYXdfYWdyZWVtZW50X2tleV9wb2xpY3k6UFNBX0tFWV9VU0FHRV9ERVJJVkU6UFNBX0FMR19FQ0RIOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKQorcmF3X2FncmVlbWVudF9rZXlfcG9saWN5OlBTQV9LRVlfVVNBR0VfREVSSVZFOlBTQV9BTEdfRUNESDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0VSUk9SX05PVF9TVVBQT1JURUQKKworUFNBIGtleSBwb2xpY3k6IHJhdyBhZ3JlZW1lbnQsIGtleSBzcGVjaWZpZXMgS0RGCitkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DCityYXdfYWdyZWVtZW50X2tleV9wb2xpY3k6UFNBX0tFWV9VU0FHRV9ERVJJVkU6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9BTEdfRUNESDpQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAogCiBQU0Ega2V5IHBvbGljeSBhbGdvcml0aG0yOiBDVFIsIENCQwogZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCkBAIC0xMjQwLDcgKzEyNTAsNyBAQAogCiBQU0Egc3ltbWV0cmljIGRlY3J5cHQ6IEFFUy1DQkMtUEtDUyM3LCBpbnB1dCB0b28gc2hvcnQgKDE1IGJ5dGVzKQogZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCi1jaXBoZXJfZGVjcnlwdDpQU0FfQUxHX0NCQ19QS0NTNzpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3IjoiNDllNGU2NmM4OWE4NmI2Nzc1OGRmODlkYjlhZDY5NTUiOlBTQV9FUlJPUl9CQURfU1RBVEUKK2NpcGhlcl9kZWNyeXB0OlBTQV9BTEdfQ0JDX1BLQ1M3OlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTciOiI0OWU0ZTY2Yzg5YTg2YjY3NzU4ZGY4OWRiOWFkNjk1NSI6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKIAogUFNBIHN5bW1ldHJpYyBkZWNyeXB0OiBBRVMtQ1RSLCAxNiBieXRlcywgZ29vZAogZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCkBAIC0xMjUyLDcgKzEyNjIsNyBAQAogCiBQU0Egc3ltbWV0cmljIGRlY3J5cHQ6IEFFUy1DQkMtbm9wYWQsIGlucHV0IHRvbyBzaG9ydCAoNSBieXRlcykKIGRlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQwotY2lwaGVyX2RlY3J5cHQ6UFNBX0FMR19DQkNfTk9fUEFERElORzpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyMyI6IjZiYzFiZWUyMjMiOlBTQV9FUlJPUl9CQURfU1RBVEUKK2NpcGhlcl9kZWNyeXB0OlBTQV9BTEdfQ0JDX05PX1BBRERJTkc6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYSI6IjZiYzFiZWUyMjMiOiI2YmMxYmVlMjIzIjpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAogCiBQU0Egc3ltbWV0cmljIGRlY3J5cHQ6IERFUy1DQkMtbm9wYWQsIDggYnl0ZXMsIGdvb2QKIGRlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQwpAQCAtMTY1NCw2ICsxNjY0LDEwIEBACiBkZXBlbmRzX29uOk1CRURUTFNfQ0hBQ0hBUE9MWV9DCiBhZWFkX2VuY3J5cHQ6UFNBX0tFWV9UWVBFX0NIQUNIQTIwOiI4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmIjpQU0FfQUxHX0NIQUNIQTIwX1BPTFkxMzA1OiIwNzAwMDAwMDQwNDE0MjQzNDQ0NTQ2NDciOiI1MDUxNTI1M2MwYzFjMmMzYzRjNWM2YzciOiI0YzYxNjQ2OTY1NzMyMDYxNmU2NDIwNDc2NTZlNzQ2YzY1NmQ2NTZlMjA2ZjY2MjA3NDY4NjUyMDYzNmM2MTczNzMyMDZmNjYyMDI3MzkzOTNhMjA0OTY2MjA0OTIwNjM2Zjc1NmM2NDIwNmY2NjY2NjU3MjIwNzk2Zjc1MjA2ZjZlNmM3OTIwNmY2ZTY1MjA3NDY5NzAyMDY2NmY3MjIwNzQ2ODY1MjA2Njc1NzQ3NTcyNjUyYzIwNzM3NTZlNzM2MzcyNjU2NTZlMjA3NzZmNzU2YzY0MjA2MjY1MjA2OTc0MmUiOiJkMzFhOGQzNDY0OGU2MGRiN2I4NmFmYmM1M2VmN2VjMmE0YWRlZDUxMjk2ZTA4ZmVhOWUyYjVhNzM2ZWU2MmQ2M2RiZWE0NWU4Y2E5NjcxMjgyZmFmYjY5ZGE5MjcyOGIxYTcxZGUwYTllMDYwYjI5MDVkNmE1YjY3ZWNkM2IzNjkyZGRiZDdmMmQ3NzhiOGM5ODAzYWVlMzI4MDkxYjU4ZmFiMzI0ZTRmYWQ2NzU5NDU1ODU4MDhiNDgzMWQ3YmMzZmY0ZGVmMDhlNGI3YTlkZTU3NmQyNjU4NmNlYzY0YjYxMTYxYWUxMGI1OTRmMDllMjZhN2U5MDJlY2JkMDYwMDY5MSIKIAorUFNBIEFFQUQgZW5jcnlwdDogQ2hhQ2hhMjAtUG9seTEzMDUgKHplcm8tbGVuZ3RoIGlucHV0KQorZGVwZW5kc19vbjpNQkVEVExTX0NIQUNIQVBPTFlfQworYWVhZF9lbmNyeXB0OlBTQV9LRVlfVFlQRV9DSEFDSEEyMDoiODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZiI6UFNBX0FMR19DSEFDSEEyMF9QT0xZMTMwNToiMDcwMDAwMDA0MDQxNDI0MzQ0NDU0NjQ3IjoiIjoiIjoiYTA3ODRkN2E0NzE2ZjNmZWI0ZjY0ZTdmNGIzOWJmMDQiCisKIFBTQSBBRUFEIGRlY3J5cHQ6IENoYUNoYTIwLVBvbHkxMzA1IChSRkM3NTM5LCBnb29kIHRhZykKIGRlcGVuZHNfb246TUJFRFRMU19DSEFDSEFQT0xZX0MKIGFlYWRfZGVjcnlwdDpQU0FfS0VZX1RZUEVfQ0hBQ0hBMjA6IjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWYiOlBTQV9BTEdfQ0hBQ0hBMjBfUE9MWTEzMDU6IjA3MDAwMDAwNDA0MTQyNDM0NDQ1NDY0NyI6IjUwNTE1MjUzYzBjMWMyYzNjNGM1YzZjNyI6ImQzMWE4ZDM0NjQ4ZTYwZGI3Yjg2YWZiYzUzZWY3ZWMyYTRhZGVkNTEyOTZlMDhmZWE5ZTJiNWE3MzZlZTYyZDYzZGJlYTQ1ZThjYTk2NzEyODJmYWZiNjlkYTkyNzI4YjFhNzFkZTBhOWUwNjBiMjkwNWQ2YTViNjdlY2QzYjM2OTJkZGJkN2YyZDc3OGI4Yzk4MDNhZWUzMjgwOTFiNThmYWIzMjRlNGZhZDY3NTk0NTU4NTgwOGI0ODMxZDdiYzNmZjRkZWYwOGU0YjdhOWRlNTc2ZDI2NTg2Y2VjNjRiNjExNjFhZTEwYjU5NGYwOWUyNmE3ZTkwMmVjYmQwNjAwNjkxIjoiNGM2MTY0Njk2NTczMjA2MTZlNjQyMDQ3NjU2ZTc0NmM2NTZkNjU2ZTIwNmY2NjIwNzQ2ODY1MjA2MzZjNjE3MzczMjA2ZjY2MjAyNzM5MzkzYTIwNDk2NjIwNDkyMDYzNmY3NTZjNjQyMDZmNjY2NjY1NzIyMDc5NmY3NTIwNmY2ZTZjNzkyMDZmNmU2NTIwNzQ2OTcwMjA2NjZmNzIyMDc0Njg2NTIwNjY3NTc0NzU3MjY1MmMyMDczNzU2ZTczNjM3MjY1NjU2ZTIwNzc2Zjc1NmM2NDIwNjI2NTIwNjk3NDJlIjpQU0FfU1VDQ0VTUwpAQCAtMTY2Miw2ICsxNjc2LDEwIEBACiBkZXBlbmRzX29uOk1CRURUTFNfQ0hBQ0hBUE9MWV9DCiBhZWFkX2RlY3J5cHQ6UFNBX0tFWV9UWVBFX0NIQUNIQTIwOiI4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmIjpQU0FfQUxHX0NIQUNIQTIwX1BPTFkxMzA1OiIwNzAwMDAwMDQwNDE0MjQzNDQ0NTQ2NDciOiI1MDUxNTI1M2MwYzFjMmMzYzRjNWM2YzciOiJkMzFhOGQzNDY0OGU2MGRiN2I4NmFmYmM1M2VmN2VjMmE0YWRlZDUxMjk2ZTA4ZmVhOWUyYjVhNzM2ZWU2MmQ2M2RiZWE0NWU4Y2E5NjcxMjgyZmFmYjY5ZGE5MjcyOGIxYTcxZGUwYTllMDYwYjI5MDVkNmE1YjY3ZWNkM2IzNjkyZGRiZDdmMmQ3NzhiOGM5ODAzYWVlMzI4MDkxYjU4ZmFiMzI0ZTRmYWQ2NzU5NDU1ODU4MDhiNDgzMWQ3YmMzZmY0ZGVmMDhlNGI3YTlkZTU3NmQyNjU4NmNlYzY0YjYxMTYxYWUxMGI1OTRmMDllMjZhN2U5MDJlY2JkMDYwMDY5MCI6IjRjNjE2NDY5NjU3MzIwNjE2ZTY0MjA0NzY1NmU3NDZjNjU2ZDY1NmUyMDZmNjYyMDc0Njg2NTIwNjM2YzYxNzM3MzIwNmY2NjIwMjczOTM5M2EyMDQ5NjYyMDQ5MjA2MzZmNzU2YzY0MjA2ZjY2NjY2NTcyMjA3OTZmNzUyMDZmNmU2Yzc5MjA2ZjZlNjUyMDc0Njk3MDIwNjY2ZjcyMjA3NDY4NjUyMDY2NzU3NDc1NzI2NTJjMjA3Mzc1NmU3MzYzNzI2NTY1NmUyMDc3NmY3NTZjNjQyMDYyNjUyMDY5NzQyZSI6UFNBX0VSUk9SX0lOVkFMSURfU0lHTkFUVVJFCiAKK1BTQSBBRUFEIGRlY3J5cHQ6IENoYUNoYTIwLVBvbHkxMzA1IChnb29kIHRhZywgemVyby1sZW5ndGggaW5wdXQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0hBQ0hBUE9MWV9DCithZWFkX2RlY3J5cHQ6UFNBX0tFWV9UWVBFX0NIQUNIQTIwOiI4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmIjpQU0FfQUxHX0NIQUNIQTIwX1BPTFkxMzA1OiIwNzAwMDAwMDQwNDE0MjQzNDQ0NTQ2NDciOiIiOiJhMDc4NGQ3YTQ3MTZmM2ZlYjRmNjRlN2Y0YjM5YmYwNCI6IiI6UFNBX1NVQ0NFU1MKKwogUFNBIEFFQUQgZW5jcnlwdC9kZWNyeXB0OiBpbnZhbGlkIGFsZ29yaXRobSAoQ1RSKQogZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKIGFlYWRfZW5jcnlwdF9kZWNyeXB0OlBTQV9LRVlfVFlQRV9BRVM6IkQ3ODI4RDEzQjJCMEJEQzMyNUE3NjIzNkRGOTNDQzZCIjpQU0FfQUxHX0NUUjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOiIiOiIiOlBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECkBAIC0yMjE3LDYgKzIyMzUsMTQgQEAKIGRlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQwogZGVyaXZlX2lucHV0OlBTQV9BTEdfVExTMTJfUFNLX1RPX01TKFBTQV9BTEdfU0hBXzI1Nik6UFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX1NFRUQ6UFNBX0tFWV9UWVBFX05PTkU6IiI6UFNBX1NVQ0NFU1M6UFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX1NFQ1JFVDpQU0FfS0VZX1RZUEVfREVSSVZFOiIwMTAyMDMwNDA1MDYwNzA4MDEwMjAzMDQwNTA2MDcwODAxMDIwMzA0MDUwNjA3MDgwMTAyMDMwNDA1MDYwNzA4MDEwMjAzMDQwNTA2MDcwODAxMDIwMzA0MDUwNjA3MDgwMTAyMDMwNDA1MDYwNzA4MDEwMjAzMDQwNTA2MDcwODAxMDIwMzA0MDUwNjA3MDgwMTAyMDMwNDA1MDYwNzA4MDEwMjAzMDQwNTA2MDcwODAxMDIwMzA0MDUwNjA3MDgwMTAyMDMwNDA1MDYwNzA4MDEwMjAzMDQwNTA2MDcwODAxMDIwMzA0MDUwNjA3MDgwMTAyMDMwNDA1MDYwNzA4MDEwMjAzMDQwNTA2MDcwODAxMDIwMzA0MDUwNjA3MDgwMTAyMDMwNDA1MDYwNzA4MDEwMjAzMDQwNTA2MDcwOCI6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQ6UFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX0xBQkVMOlBTQV9LRVlfVFlQRV9OT05FOiIiOlBTQV9FUlJPUl9CQURfU1RBVEU6UFNBX0tFWV9UWVBFX05PTkU6UFNBX0VSUk9SX0JBRF9TVEFURQogCitQU0Ega2V5IGRlcml2YXRpb246IEVDREggb24gUDI1NiB3aXRoIEhLREYtU0hBMjU2LCByYXcgb3V0cHV0CitkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0MKK2Rlcml2ZV9pbnB1dDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX1NBTFQ6UFNBX0tFWV9UWVBFX05PTkU6IiI6UFNBX1NVQ0NFU1M6UFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX1NFQ1JFVDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjpQU0FfU1VDQ0VTUzpQU0FfS0VZX0RFUklWQVRJT05fSU5QVVRfSU5GTzpQU0FfS0VZX1RZUEVfTk9ORToiIjpQU0FfU1VDQ0VTUzpQU0FfS0VZX1RZUEVfTk9ORTpQU0FfU1VDQ0VTUworCitQU0Ega2V5IGRlcml2YXRpb246IEVDREggb24gUDI1NiB3aXRoIEhLREYtU0hBMjU2LCBrZXkgb3V0cHV0CitkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0MKK2Rlcml2ZV9pbnB1dDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX1NBTFQ6UFNBX0tFWV9UWVBFX05PTkU6IiI6UFNBX1NVQ0NFU1M6UFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX1NFQ1JFVDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjpQU0FfU1VDQ0VTUzpQU0FfS0VZX0RFUklWQVRJT05fSU5QVVRfSU5GTzpQU0FfS0VZX1RZUEVfTk9ORToiIjpQU0FfU1VDQ0VTUzpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6UFNBX1NVQ0NFU1MKKwogUFNBIGtleSBkZXJpdmF0aW9uOiBIS0RGIGludmFsaWQgc3RhdGUgKGRvdWJsZSBnZW5lcmF0ZSArIHJlYWQgcGFzdCBjYXBhY2l0eSkKIGRlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQwogdGVzdF9kZXJpdmVfaW52YWxpZF9rZXlfZGVyaXZhdGlvbl9zdGF0ZTpQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KQpAQCAtMjQ5OSwzMSArMjUyNSwzOSBAQAogCiBQU0Ega2V5IGFncmVlbWVudCBzZXR1cDogRUNESCArIEhLREYtU0hBLTI1NjogZ29vZAogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQzpNQkVEVExTX1NIQTI1Nl9DCi1rZXlfYWdyZWVtZW50X3NldHVwOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjoiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6UFNBX1NVQ0NFU1MKK2tleV9hZ3JlZW1lbnRfc2V0dXA6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjoiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6UFNBX1NVQ0NFU1MKKworUFNBIGtleSBhZ3JlZW1lbnQgc2V0dXA6IEVDREggKyBIS0RGLVNIQS0yNTY6IGdvb2QsIGtleSBhbGdvcml0aG0gYnJvYWRlciB0aGFuIHJlcXVpcmVkCitkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0MKK2tleV9hZ3JlZW1lbnRfc2V0dXA6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6UFNBX0FMR19FQ0RIOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjoiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6UFNBX1NVQ0NFU1MKKworUFNBIGtleSBhZ3JlZW1lbnQgc2V0dXA6IEVDREggKyBIS0RGLVNIQS0yNTY6IGtleSBhbGdvcml0aG0gS0RGIG1pc21hdGNoCitkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0MKK2tleV9hZ3JlZW1lbnRfc2V0dXA6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzUxMikpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjoiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6UFNBX0VSUk9SX05PVF9QRVJNSVRURUQKIAogUFNBIGtleSBhZ3JlZW1lbnQgc2V0dXA6IEVDREggKyBIS0RGLVNIQS0yNTY6IHB1YmxpYyBrZXkgbm90IG9uIGN1cnZlCiBkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0MKLWtleV9hZ3JlZW1lbnRfc2V0dXA6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6ImM4OGYwMWY1MTBkOWFjM2Y3MGEyOTJkYWEyMzE2ZGU1NDRlOWFhYjhhZmU4NDA0OWM2MmE5YzU3ODYyZDE0MzMiOiIwNGQxMmRmYjUyODljOGQ0ZjgxMjA4YjcwMjcwMzk4YzM0MjI5Njk3MGEwYmNjYjc0YzczNmZjNzU1NDQ5NGJmNjM1NmZiZjNjYTM2NmNjMjNlODE1Nzg1NGMxM2M1OGQ2YWFjMjNmMDQ2YWRhMzBmODM1M2U3NGYzMzAzOTg3MmZmIjpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAora2V5X2FncmVlbWVudF9zZXR1cDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKTpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6ImM4OGYwMWY1MTBkOWFjM2Y3MGEyOTJkYWEyMzE2ZGU1NDRlOWFhYjhhZmU4NDA0OWM2MmE5YzU3ODYyZDE0MzMiOiIwNGQxMmRmYjUyODljOGQ0ZjgxMjA4YjcwMjcwMzk4YzM0MjI5Njk3MGEwYmNjYjc0YzczNmZjNzU1NDQ5NGJmNjM1NmZiZjNjYTM2NmNjMjNlODE1Nzg1NGMxM2M1OGQ2YWFjMjNmMDQ2YWRhMzBmODM1M2U3NGYzMzAzOTg3MmZmIjpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAogCiBQU0Ega2V5IGFncmVlbWVudCBzZXR1cDogRUNESCArIEhLREYtU0hBLTI1NjogcHVibGljIGtleSBvbiBkaWZmZXJlbnQgY3VydmUKIGRlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19FQ0RIX0M6TUJFRFRMU19TSEEyNTZfQwota2V5X2FncmVlbWVudF9zZXR1cDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiYzg4ZjAxZjUxMGQ5YWMzZjcwYTI5MmRhYTIzMTZkZTU0NGU5YWFiOGFmZTg0MDQ5YzYyYTljNTc4NjJkMTQzMyI6IjA0ZTU1OGRiZWY1M2VlY2RlM2QzZmNjZmMxYWVhMDhhODlhOTg3NDc1ZDEyZmQ5NTBkODNjZmE0MTczMmJjNTA5ZDBkMWFjNDNhMDMzNmRlZjk2ZmRhNDFkMDc3NGEzNTcxZGNmYmVjN2FhY2YzMTk2NDcyMTY5ZTgzODQzMDM2N2Y2NmVlYmUzYzZlNzBjNDE2ZGQ1ZjBjNjg3NTlkZDFmZmY4M2ZhNDAxNDIyMDlkZmY1ZWFhZDk2ZGI5ZTYzODZjIjpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAora2V5X2FncmVlbWVudF9zZXR1cDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKTpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6ImM4OGYwMWY1MTBkOWFjM2Y3MGEyOTJkYWEyMzE2ZGU1NDRlOWFhYjhhZmU4NDA0OWM2MmE5YzU3ODYyZDE0MzMiOiIwNGU1NThkYmVmNTNlZWNkZTNkM2ZjY2ZjMWFlYTA4YTg5YTk4NzQ3NWQxMmZkOTUwZDgzY2ZhNDE3MzJiYzUwOWQwZDFhYzQzYTAzMzZkZWY5NmZkYTQxZDA3NzRhMzU3MWRjZmJlYzdhYWNmMzE5NjQ3MjE2OWU4Mzg0MzAzNjdmNjZlZWJlM2M2ZTcwYzQxNmRkNWYwYzY4NzU5ZGQxZmZmODNmYTQwMTQyMjA5ZGZmNWVhYWQ5NmRiOWU2Mzg2YyI6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKIAogUFNBIGtleSBhZ3JlZW1lbnQgc2V0dXA6IEVDREggKyBIS0RGLVNIQS0yNTY6IHB1YmxpYyBrZXkgaW5zdGVhZCBvZiBwcml2YXRlIGtleQogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQzpNQkVEVExTX1NIQTI1Nl9DCi1rZXlfYWdyZWVtZW50X3NldHVwOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVkoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjA0ZDEyZGZiNTI4OWM4ZDRmODEyMDhiNzAyNzAzOThjMzQyMjk2OTcwYTBiY2NiNzRjNzM2ZmM3NTU0NDk0YmY2MzU2ZmJmM2NhMzY2Y2MyM2U4MTU3ODU0YzEzYzU4ZDZhYWMyM2YwNDZhZGEzMGY4MzUzZTc0ZjMzMDM5ODcyYWIiOiIwNGQxMmRmYjUyODljOGQ0ZjgxMjA4YjcwMjcwMzk4YzM0MjI5Njk3MGEwYmNjYjc0YzczNmZjNzU1NDQ5NGJmNjM1NmZiZjNjYTM2NmNjMjNlODE1Nzg1NGMxM2M1OGQ2YWFjMjNmMDQ2YWRhMzBmODM1M2U3NGYzMzAzOTg3MmFiIjpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAora2V5X2FncmVlbWVudF9zZXR1cDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKToiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6IjA0ZDEyZGZiNTI4OWM4ZDRmODEyMDhiNzAyNzAzOThjMzQyMjk2OTcwYTBiY2NiNzRjNzM2ZmM3NTU0NDk0YmY2MzU2ZmJmM2NhMzY2Y2MyM2U4MTU3ODU0YzEzYzU4ZDZhYWMyM2YwNDZhZGEzMGY4MzUzZTc0ZjMzMDM5ODcyYWIiOlBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCiAKIFBTQSBrZXkgYWdyZWVtZW50IHNldHVwOiBFQ0RILCB1bmtub3duIEtERgogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQwota2V5X2FncmVlbWVudF9zZXR1cDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoMCkpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6ImM4OGYwMWY1MTBkOWFjM2Y3MGEyOTJkYWEyMzE2ZGU1NDRlOWFhYjhhZmU4NDA0OWM2MmE5YzU3ODYyZDE0MzMiOiIwNGQxMmRmYjUyODljOGQ0ZjgxMjA4YjcwMjcwMzk4YzM0MjI5Njk3MGEwYmNjYjc0YzczNmZjNzU1NDQ5NGJmNjM1NmZiZjNjYTM2NmNjMjNlODE1Nzg1NGMxM2M1OGQ2YWFjMjNmMDQ2YWRhMzBmODM1M2U3NGYzMzAzOTg3MmFiIjpQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAora2V5X2FncmVlbWVudF9zZXR1cDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoMCkpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKDApKToiYzg4ZjAxZjUxMGQ5YWMzZjcwYTI5MmRhYTIzMTZkZTU0NGU5YWFiOGFmZTg0MDQ5YzYyYTljNTc4NjJkMTQzMyI6IjA0ZDEyZGZiNTI4OWM4ZDRmODEyMDhiNzAyNzAzOThjMzQyMjk2OTcwYTBiY2NiNzRjNzM2ZmM3NTU0NDk0YmY2MzU2ZmJmM2NhMzY2Y2MyM2U4MTU3ODU0YzEzYzU4ZDZhYWMyM2YwNDZhZGEzMGY4MzUzZTc0ZjMzMDM5ODcyYWIiOlBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECiAKIFBTQSBrZXkgYWdyZWVtZW50IHNldHVwOiBiYWQga2V5IGFncmVlbWVudCBhbGdvcml0aG0KIGRlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ0RIX0MKLWtleV9hZ3JlZW1lbnRfc2V0dXA6UFNBX0FMR19LRVlfQUdSRUVNRU5UKDAsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjoiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK2tleV9hZ3JlZW1lbnRfc2V0dXA6UFNBX0FMR19LRVlfQUdSRUVNRU5UKDAsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOlBTQV9BTEdfS0VZX0FHUkVFTUVOVCgwLCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6ImM4OGYwMWY1MTBkOWFjM2Y3MGEyOTJkYWEyMzE2ZGU1NDRlOWFhYjhhZmU4NDA0OWM2MmE5YzU3ODYyZDE0MzMiOiIwNGQxMmRmYjUyODljOGQ0ZjgxMjA4YjcwMjcwMzk4YzM0MjI5Njk3MGEwYmNjYjc0YzczNmZjNzU1NDQ5NGJmNjM1NmZiZjNjYTM2NmNjMjNlODE1Nzg1NGMxM2M1OGQ2YWFjMjNmMDQ2YWRhMzBmODM1M2U3NGYzMzAzOTg3MmFiIjpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAogCiBQU0Ega2V5IGFncmVlbWVudCBzZXR1cDogS0RGIGluc3RlYWQgb2YgYSBrZXkgYWdyZWVtZW50IGFsZ29yaXRobQogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQwota2V5X2FncmVlbWVudF9zZXR1cDpQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjoiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK2tleV9hZ3JlZW1lbnRfc2V0dXA6UFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1Nik6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKTpQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KToiYzg4ZjAxZjUxMGQ5YWMzZjcwYTI5MmRhYTIzMTZkZTU0NGU5YWFiOGFmZTg0MDQ5YzYyYTljNTc4NjJkMTQzMyI6IjA0ZDEyZGZiNTI4OWM4ZDRmODEyMDhiNzAyNzAzOThjMzQyMjk2OTcwYTBiY2NiNzRjNzM2ZmM3NTU0NDk0YmY2MzU2ZmJmM2NhMzY2Y2MyM2U4MTU3ODU0YzEzYzU4ZDZhYWMyM2YwNDZhZGEzMGY4MzUzZTc0ZjMzMDM5ODcyYWIiOlBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCiAKIFBTQSByYXcga2V5IGFncmVlbWVudDogRUNESCBTRUNQMjU2UjEgKFJGQyA1OTAzKQogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQwpAQCAtMjU0OSw2ICsyNTgzLDE0IEBACiBkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQwogcmF3X2tleV9hZ3JlZW1lbnQ6UFNBX0FMR19FQ0RIOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfQlJBSU5QT09MX1BfUjEpOiIxNjMwMmZmMGRiYmI1YThkNzMzZGFiNzE0MWMxYjQ1YWNiYzg3MTU5Mzk2NzdmNmE1Njg1MGEzOGJkODdiZDU5YjA5ZTgwMjc5NjA5ZmYzMzNlYjlkNGMwNjEyMzFmYjI2ZjkyZWViMDQ5ODJhNWYxZDE3NjRjYWQ1NzY2NTQyMiI6IjA0OWQ0NWY2NmRlNWQ2N2UyZTZkYjZlOTNhNTljZTBiYjQ4MTA2MDk3ZmY3OGEwODFkZTc4MWNkYjMxZmNlOGNjYmFhZWE4ZGQ0MzIwYzQxMTlmMWU5Y2Q0MzdhMmVhYjM3MzFmYTk2NjhhYjI2OGQ4NzFkZWRhNTVhNTQ3MzE5OWYyZmRjMzEzMDk1YmNkZDVmYjNhOTE2MzZmMDdhOTU5YzhlODZiNTYzNmExZTkzMGU4Mzk2MDQ5Y2I0ODE5NjFkMzY1Y2MxMTQ1M2EwNmM3MTk4MzU0NzViMTJjYjUyZmMzYzM4M2JjZTM1ZTI3ZWYxOTQ1MTJiNzE4NzYyODVmYSI6ImE3OTI3MDk4NjU1ZjFmOTk3NmZhNTBhOWQ1NjY4NjVkYzUzMDMzMTg0NjM4MWM4NzI1NmJhZjMyMjYyNDRiNzZkMzY0MDNjMDI0ZDdiYmYwYWEwODAzZWFmZjQwNWQzZDI0ZjExYTliNWMwYmVmNjc5ZmUxNDU0YjIxYzRjZDFmIgogCitQU0EgcmF3IGtleSBhZ3JlZW1lbnQ6IFgyNTUxOSAoUkZDIDc3NDg6IEFsaWNlKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRDpNQkVEVExTX0VDREhfQworcmF3X2tleV9hZ3JlZW1lbnQ6UFNBX0FMR19FQ0RIOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfTU9OVEdPTUVSWSk6Ijc3MDc2ZDBhNzMxOGE1N2QzYzE2YzE3MjUxYjI2NjQ1ZGY0YzJmODdlYmMwOTkyYWIxNzdmYmE1MWRiOTJjMmEiOiJkZTllZGI3ZDdiN2RjMWI0ZDM1YjYxYzJlY2U0MzUzNzNmODM0M2M4NWI3ODY3NGRhZGZjN2UxNDZmODgyYjRmIjoiNGE1ZDlkNWJhNGNlMmRlMTcyOGUzYmY0ODAzNTBmMjVlMDdlMjFjOTQ3ZDE5ZTMzNzZmMDliM2MxZTE2MTc0MiIKKworUFNBIHJhdyBrZXkgYWdyZWVtZW50OiBYMjU1MTkgKFJGQyA3NzQ4OiBCb2IpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEOk1CRURUTFNfRUNESF9DCityYXdfa2V5X2FncmVlbWVudDpQU0FfQUxHX0VDREg6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9NT05UR09NRVJZKToiNWRhYjA4N2U2MjRhOGE0Yjc5ZTE3ZjhiODM4MDBlZTY2ZjNiYjEyOTI2MThiNmZkMWMyZjhiMjdmZjg4ZTBlYiI6Ijg1MjBmMDA5ODkzMGE3NTQ3NDhiN2RkY2I0M2VmNzVhMGRiZjNhMGQyNjM4MWFmNGViYTRhOThlYWE5YjRlNmEiOiI0YTVkOWQ1YmE0Y2UyZGUxNzI4ZTNiZjQ4MDM1MGYyNWUwN2UyMWM5NDdkMTllMzM3NmYwOWIzYzFlMTYxNzQyIgorCiBQU0Ega2V5IGFncmVlbWVudDogRUNESCBTRUNQMjU2UjEgKFJGQyA1OTAzKSArIEhLREYtU0hBLTI1NjogY2FwYWNpdHk9ODE2MAogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQzpNQkVEVExTX1NIQTI1Nl9DCiBrZXlfYWdyZWVtZW50X2NhcGFjaXR5OlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjoiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6ODE2MApAQCAtMjcxMCw2ICsyNzUyLDEwIEBACiAjIGRvZXNuJ3QgZnVsbHkgcmVsYXRlIHRoZSBjdXJ2ZSB3aXRoIGl0cyBzaXplLgogZ2VuZXJhdGVfa2V5OlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6MTI4OlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0ggfCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIOlBTQV9BTEdfRUNEU0FfQU5ZOlBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECiAKK1BTQSBnZW5lcmF0ZSBrZXk6IEVDQywgQ3VydmUyNTUxOSwgZ29vZAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRDpNQkVEVExTX0VDREhfQworZ2VuZXJhdGVfa2V5OlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfTU9OVEdPTUVSWSk6MjU1OlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9ERVJJVkU6UFNBX0FMR19FQ0RIOlBTQV9TVUNDRVNTCisKIFBTQSBnZW5lcmF0ZSBrZXk6IFJTQSwgZGVmYXVsdCBlCiBnZW5lcmF0ZV9rZXlfcnNhOjUxMjoiIjpQU0FfU1VDQ0VTUwogCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0by5mdW5jdGlvbgppbmRleCA0NTkxNmI5Li44ZTcxNjEwIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG8uZnVuY3Rpb24KQEAgLTE5LDYgKzE5LDcgQEAKICNkZWZpbmUgSEFWRV9SQU1fQVZBSUxBQkxFXzEyOEsKIAogI2luY2x1ZGUgInBzYS9jcnlwdG8uaCIKKyNpbmNsdWRlICJwc2FfY3J5cHRvX3Nsb3RfbWFuYWdlbWVudC5oIgogCiAvKiogQW4gaW52YWxpZCBleHBvcnQgbGVuZ3RoIHRoYXQgd2lsbCBuZXZlciBiZSBzZXQgYnkgcHNhX2V4cG9ydF9rZXkoKS4gKi8KIHN0YXRpYyBjb25zdCBzaXplX3QgSU5WQUxJRF9FWFBPUlRfTEVOR1RIID0gfjBVOwpAQCAtMTA3LDEyICsxMDgsMTAgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fU0VfQykKLWludCBsaWZldGltZV9pc19zZWN1cmVfZWxlbWVudCggcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lICkKK2ludCBsaWZldGltZV9pc19keW5hbWljX3NlY3VyZV9lbGVtZW50KCBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUgKQogewotICAgIC8qIEF0IHRoZSBtb21lbnQsIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBidWlsdC1pbiBsaWZldGltZSBpcyBlaXRoZXIKLSAgICAgKiBhIHNlY3VyZSBlbGVtZW50IG9yIHVuYXNzaWduZWQuICovCi0gICAgcmV0dXJuKCBsaWZldGltZSAhPSBQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFICYmCi0gICAgICAgICAgICBsaWZldGltZSAhPSBQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQgKTsKKyAgICByZXR1cm4oIFBTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKCBsaWZldGltZSApICE9CisgICAgICAgICAgICBQU0FfS0VZX0xPQ0FUSU9OX0xPQ0FMX1NUT1JBR0UgKTsKIH0KICNlbHNlCiBpbnQgbGlmZXRpbWVfaXNfc2VjdXJlX2VsZW1lbnQoIHBzYV9rZXlfbGlmZXRpbWVfdCBsaWZldGltZSApCkBAIC0yMjgsNyArMjI3LDcgQEAKICAgICByZXR1cm4oIGxlbiApOwogfQogCi1pbnQgY2hlY2tfa2V5X2F0dHJpYnV0ZXNfc2FuaXR5KCBwc2Ffa2V5X2hhbmRsZV90IGtleSApCitpbnQgY2hlY2tfa2V5X2F0dHJpYnV0ZXNfc2FuaXR5KCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgKQogewogICAgIGludCBvayA9IDA7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwpAQCAtMjQ0LDggKzI0MywxNCBAQAogICAgIGJpdHMgPSBwc2FfZ2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcyApOwogCiAgICAgLyogUGVyc2lzdGVuY2UgKi8KLSAgICBpZiggbGlmZXRpbWUgPT0gUFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRSApCi0gICAgICAgIFRFU1RfQVNTRVJUKCBNQkVEVExTX1NWQ19LRVlfSURfR0VUX0tFWV9JRCggaWQgKSA9PSAwICk7CisgICAgaWYoIFBTQV9LRVlfTElGRVRJTUVfSVNfVk9MQVRJTEUoIGxpZmV0aW1lICkgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoCisgICAgICAgICAgICAoIFBTQV9LRVlfSURfVk9MQVRJTEVfTUlOIDw9CisgICAgICAgICAgICAgIE1CRURUTFNfU1ZDX0tFWV9JRF9HRVRfS0VZX0lEKCBpZCApICkgJiYKKyAgICAgICAgICAgICggTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9LRVlfSUQoIGlkICkgPD0KKyAgICAgICAgICAgICAgUFNBX0tFWV9JRF9WT0xBVElMRV9NQVggKSApOworICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICBURVNUX0FTU0VSVCgKQEAgLTI1Niw3ICsyNjEsNyBAQAogICAgIC8qIHJhbmRvbWx5LWdlbmVyYXRlZCA2NC1iaXQgY29uc3RhbnQsIHNob3VsZCBuZXZlciBhcHBlYXIgaW4gdGVzdCBkYXRhICovCiAgICAgcHNhX2tleV9zbG90X251bWJlcl90IHNsb3RfbnVtYmVyID0gMHhlYzk0ZDRhNTA1OGExYTIxOwogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBwc2FfZ2V0X2tleV9zbG90X251bWJlciggJmF0dHJpYnV0ZXMsICZzbG90X251bWJlciApOwotICAgIGlmKCBsaWZldGltZV9pc19zZWN1cmVfZWxlbWVudCggbGlmZXRpbWUgKSApCisgICAgaWYoIGxpZmV0aW1lX2lzX2R5bmFtaWNfc2VjdXJlX2VsZW1lbnQoIGxpZmV0aW1lICkgKQogICAgIHsKICAgICAgICAgLyogTWJlZCBDcnlwdG8gY3VycmVudGx5IGFsd2F5cyBleHBvc2VzIHRoZSBzbG90IG51bWJlciB0bwogICAgICAgICAgKiBhcHBsaWNhdGlvbnMuIFRoaXMgaXMgbm90IG1hbmRhdGVkIGJ5IHRoZSBQU0Egc3BlY2lmaWNhdGlvbgpAQCAtMjg3LDcgKzI5MiwxMiBAQAogICAgIG9rID0gMTsKIAogZXhpdDoKKyAgICAvKgorICAgICAqIEtleSBhdHRyaWJ1dGVzIG1heSBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgcHNhX2dldF9rZXlfYXR0cmlidXRlcygpCisgICAgICogdGh1cyByZXNldCB0aGVtIGFzIHJlcXVpcmVkLgorICAgICAqLwogICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKKwogICAgIHJldHVybiggb2sgKTsKIH0KIApAQCAtMjk4LDMxICszMDgsMjkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9tYWNfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9zdGF0dXNfdCAqc3RhdHVzICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogCiAgICAgcHNhX3NldF9rZXlfdXNhZ2VfZmxhZ3MoICZhdHRyaWJ1dGVzLCBQU0FfS0VZX1VTQUdFX1NJR05fSEFTSCApOwogICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIGFsZyApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwotICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2J5dGVzLCBrZXlfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9ieXRlcywga2V5X2xlbmd0aCwgJmtleSApICk7CiAKLSAgICAqc3RhdHVzID0gcHNhX21hY19zaWduX3NldHVwKCBvcGVyYXRpb24sIGhhbmRsZSwgYWxnICk7CisgICAgKnN0YXR1cyA9IHBzYV9tYWNfc2lnbl9zZXR1cCggb3BlcmF0aW9uLCBrZXksIGFsZyApOwogICAgIC8qIFdoZXRoZXIgc2V0dXAgc3VjY2VlZGVkIG9yIGZhaWxlZCwgYWJvcnQgbXVzdCBzdWNjZWVkLiAqLwogICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfYWJvcnQoIG9wZXJhdGlvbiApICk7CiAgICAgLyogSWYgc2V0dXAgZmFpbGVkLCByZXByb2R1Y2UgdGhlIGZhaWx1cmUsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4KICAgICAgKiB0ZXN0IHRoZSByZXN1bHRpbmcgc3RhdGUgb2YgdGhlIG9wZXJhdGlvbiBvYmplY3QuICovCiAgICAgaWYoICpzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgIHsKLSAgICAgICAgVEVTVF9FUVVBTCggcHNhX21hY19zaWduX3NldHVwKCBvcGVyYXRpb24sIGhhbmRsZSwgYWxnICksCi0gICAgICAgICAgICAgICAgICAgICpzdGF0dXMgKTsKKyAgICAgICAgVEVTVF9FUVVBTCggcHNhX21hY19zaWduX3NldHVwKCBvcGVyYXRpb24sIGtleSwgYWxnICksICpzdGF0dXMgKTsKICAgICB9CiAKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgcmV0dXJuKCAxICk7CiAKIGV4aXQ6Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIHJldHVybiggMCApOwogfQogCkBAIC0zMzMsMzUgKzM0MSwzNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX3N0YXR1c190ICpzdGF0dXMgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAKICAgICBwc2Ffc2V0X2tleV91c2FnZV9mbGFncyggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCApOwogICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIGFsZyApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwotICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2J5dGVzLCBrZXlfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9ieXRlcywga2V5X2xlbmd0aCwgJmtleSApICk7CiAKLSAgICAqc3RhdHVzID0gcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCBvcGVyYXRpb24sIGhhbmRsZSwgYWxnICk7CisgICAgKnN0YXR1cyA9IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggb3BlcmF0aW9uLCBrZXksIGFsZyApOwogICAgIC8qIFdoZXRoZXIgc2V0dXAgc3VjY2VlZGVkIG9yIGZhaWxlZCwgYWJvcnQgbXVzdCBzdWNjZWVkLiAqLwogICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfYWJvcnQoIG9wZXJhdGlvbiApICk7CiAgICAgLyogSWYgc2V0dXAgZmFpbGVkLCByZXByb2R1Y2UgdGhlIGZhaWx1cmUsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4KICAgICAgKiB0ZXN0IHRoZSByZXN1bHRpbmcgc3RhdGUgb2YgdGhlIG9wZXJhdGlvbiBvYmplY3QuICovCiAgICAgaWYoICpzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgIHsKLSAgICAgICAgVEVTVF9FUVVBTCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCBvcGVyYXRpb24sIGhhbmRsZSwgYWxnICksCisgICAgICAgIFRFU1RfRVFVQUwoIHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggb3BlcmF0aW9uLCBrZXksIGFsZyApLAogICAgICAgICAgICAgICAgICAgICAqc3RhdHVzICk7CiAgICAgfQogCi0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIHJldHVybiggMSApOwogCiBleGl0OgotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICByZXR1cm4oIDAgKTsKIH0KIAotc3RhdGljIGludCBleGVyY2lzZV9tYWNfa2V5KCBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKK3N0YXRpYyBpbnQgZXhlcmNpc2VfbWFjX2tleSggbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3VzYWdlX3QgdXNhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgKQogewpAQCAtMzcyLDggKzM3OSw3IEBACiAKICAgICBpZiggdXNhZ2UgJiBQU0FfS0VZX1VTQUdFX1NJR05fSEFTSCApCiAgICAgewotICAgICAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3NpZ25fc2V0dXAoICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOworICAgICAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3NpZ25fc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICkgKTsKICAgICAgICAgUFNBX0FTU0VSVCggcHNhX21hY191cGRhdGUoICZvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgc2l6ZW9mKCBpbnB1dCApICkgKTsKICAgICAgICAgUFNBX0FTU0VSVCggcHNhX21hY19zaWduX2ZpbmlzaCggJm9wZXJhdGlvbiwKQEAgLTM4Nyw4ICszOTMsNyBAQAogICAgICAgICAgICAgKCB1c2FnZSAmIFBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIID8KICAgICAgICAgICAgICAgUFNBX1NVQ0NFU1MgOgogICAgICAgICAgICAgICBQU0FfRVJST1JfSU5WQUxJRF9TSUdOQVRVUkUgKTsKLSAgICAgICAgUFNBX0FTU0VSVCggcHNhX21hY192ZXJpZnlfc2V0dXAoICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFsZyApICk7CisgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfdmVyaWZ5X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApICk7CiAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfdXBkYXRlKCAmb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIHNpemVvZiggaW5wdXQgKSApICk7CiAgICAgICAgIFRFU1RfRVFVQUwoIHBzYV9tYWNfdmVyaWZ5X2ZpbmlzaCggJm9wZXJhdGlvbiwgbWFjLCBtYWNfbGVuZ3RoICksCkBAIC00MDIsNyArNDA3LDcgQEAKICAgICByZXR1cm4oIDAgKTsKIH0KIAotc3RhdGljIGludCBleGVyY2lzZV9jaXBoZXJfa2V5KCBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKK3N0YXRpYyBpbnQgZXhlcmNpc2VfY2lwaGVyX2tleSggbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3VzYWdlX3QgdXNhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgKQogewpAQCAtNDE3LDggKzQyMiw3IEBACiAKICAgICBpZiggdXNhZ2UgJiBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQgKQogICAgIHsKLSAgICAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYWxnICkgKTsKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApICk7CiAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZ2VuZXJhdGVfaXYoICZvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LCBzaXplb2YoIGl2ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpdl9sZW5ndGggKSApOwpAQCAtNDQwLDE1ICs0NDQsMTUgQEAKICAgICAgICAgaWYoICEgKCB1c2FnZSAmIFBTQV9LRVlfVVNBR0VfRU5DUllQVCApICkKICAgICAgICAgewogICAgICAgICAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwotICAgICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggaGFuZGxlLCAmYXR0cmlidXRlcyApICk7CisgICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBrZXksICZhdHRyaWJ1dGVzICkgKTsKICAgICAgICAgICAgIC8qIFRoaXMgc2hvdWxkIGJlIFBTQV9DSVBIRVJfR0VUX0lWX1NJWkUgYnV0IHRoZSBBUEkgZG9lc24ndAogICAgICAgICAgICAgICogaGF2ZSB0aGlzIG1hY3JvIHlldC4gKi8KICAgICAgICAgICAgIGl2X2xlbmd0aCA9IFBTQV9CTE9DS19DSVBIRVJfQkxPQ0tfU0laRSgKICAgICAgICAgICAgICAgICBwc2FfZ2V0X2tleV90eXBlKCAmYXR0cmlidXRlcyApICk7CiAgICAgICAgICAgICBtYXliZV9pbnZhbGlkX3BhZGRpbmcgPSAhIFBTQV9BTEdfSVNfU1RSRUFNX0NJUEhFUiggYWxnICk7CisgICAgICAgICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7CiAgICAgICAgIH0KLSAgICAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYWxnICkgKTsKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApICk7CiAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfc2V0X2l2KCAmb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXYsIGl2X2xlbmd0aCApICk7CiAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfdXBkYXRlKCAmb3BlcmF0aW9uLApAQCAtNDc2LDcgKzQ4MCw3IEBACiAgICAgcmV0dXJuKCAwICk7CiB9CiAKLXN0YXRpYyBpbnQgZXhlcmNpc2VfYWVhZF9rZXkoIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAorc3RhdGljIGludCBleGVyY2lzZV9hZWFkX2tleSggbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV91c2FnZV90IHVzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZyApCiB7CkBAIC00ODksNyArNDkzLDcgQEAKIAogICAgIGlmKCB1c2FnZSAmIFBTQV9LRVlfVVNBR0VfRU5DUllQVCApCiAgICAgewotICAgICAgICBQU0FfQVNTRVJUKCBwc2FfYWVhZF9lbmNyeXB0KCBoYW5kbGUsIGFsZywKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2FlYWRfZW5jcnlwdCgga2V5LCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmNlLCBub25jZV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWludGV4dCwgc2l6ZW9mKCBwbGFpbnRleHQgKSwKQEAgLTUwMyw3ICs1MDcsNyBAQAogICAgICAgICAgICAgKCB1c2FnZSAmIFBTQV9LRVlfVVNBR0VfRU5DUllQVCA/CiAgICAgICAgICAgICAgIFBTQV9TVUNDRVNTIDoKICAgICAgICAgICAgICAgUFNBX0VSUk9SX0lOVkFMSURfU0lHTkFUVVJFICk7Ci0gICAgICAgIFRFU1RfRVFVQUwoIHBzYV9hZWFkX2RlY3J5cHQoIGhhbmRsZSwgYWxnLAorICAgICAgICBURVNUX0VRVUFMKCBwc2FfYWVhZF9kZWNyeXB0KCBrZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uY2UsIG5vbmNlX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVydGV4dCwgY2lwaGVydGV4dF9sZW5ndGgsCkBAIC01MTgsNyArNTIyLDcgQEAKICAgICByZXR1cm4oIDAgKTsKIH0KIAotc3RhdGljIGludCBleGVyY2lzZV9zaWduYXR1cmVfa2V5KCBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKK3N0YXRpYyBpbnQgZXhlcmNpc2Vfc2lnbmF0dXJlX2tleSggbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3VzYWdlX3QgdXNhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgKQogewpAQCAtNTQ3LDcgKzU1MSw3IEBACiAgICAgICAgICAqIGV2ZW4gZm9yIGFsZ29yaXRobXMgdGhhdCBhbGxvdyBvdGhlciBpbnB1dCBzaXplcy4gKi8KICAgICAgICAgaWYoIGhhc2hfYWxnICE9IDAgKQogICAgICAgICAgICAgcGF5bG9hZF9sZW5ndGggPSBQU0FfSEFTSF9TSVpFKCBoYXNoX2FsZyApOwotICAgICAgICBQU0FfQVNTRVJUKCBwc2Ffc2lnbl9oYXNoKCBoYW5kbGUsIGFsZywKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX3NpZ25faGFzaCgga2V5LCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQsIHBheWxvYWRfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpemVvZiggc2lnbmF0dXJlICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWduYXR1cmVfbGVuZ3RoICkgKTsKQEAgLTU1OSw3ICs1NjMsNyBAQAogICAgICAgICAgICAgKCB1c2FnZSAmIFBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIID8KICAgICAgICAgICAgICAgUFNBX1NVQ0NFU1MgOgogICAgICAgICAgICAgICBQU0FfRVJST1JfSU5WQUxJRF9TSUdOQVRVUkUgKTsKLSAgICAgICAgVEVTVF9FUVVBTCggcHNhX3ZlcmlmeV9oYXNoKCBoYW5kbGUsIGFsZywKKyAgICAgICAgVEVTVF9FUVVBTCggcHNhX3ZlcmlmeV9oYXNoKCBrZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLCBwYXlsb2FkX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpZ25hdHVyZV9sZW5ndGggKSwKICAgICAgICAgICAgICAgICAgICAgdmVyaWZ5X3N0YXR1cyApOwpAQCAtNTcxLDcgKzU3NSw3IEBACiAgICAgcmV0dXJuKCAwICk7CiB9CiAKLXN0YXRpYyBpbnQgZXhlcmNpc2VfYXN5bW1ldHJpY19lbmNyeXB0aW9uX2tleSggcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCitzdGF0aWMgaW50IGV4ZXJjaXNlX2FzeW1tZXRyaWNfZW5jcnlwdGlvbl9rZXkoIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV91c2FnZV90IHVzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnICkKIHsKQEAgLTU4Miw3ICs1ODYsNyBAQAogCiAgICAgaWYoIHVzYWdlICYgUFNBX0tFWV9VU0FHRV9FTkNSWVBUICkKICAgICB7Ci0gICAgICAgIFBTQV9BU1NFUlQoIHBzYV9hc3ltbWV0cmljX2VuY3J5cHQoIGhhbmRsZSwgYWxnLAorICAgICAgICBQU0FfQVNTRVJUKCBwc2FfYXN5bW1ldHJpY19lbmNyeXB0KCBrZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW50ZXh0LCBwbGFpbnRleHRfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0LCBzaXplb2YoIGNpcGhlcnRleHQgKSwKQEAgLTU5Miw3ICs1OTYsNyBAQAogICAgIGlmKCB1c2FnZSAmIFBTQV9LRVlfVVNBR0VfREVDUllQVCApCiAgICAgewogICAgICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0KLSAgICAgICAgICAgIHBzYV9hc3ltbWV0cmljX2RlY3J5cHQoIGhhbmRsZSwgYWxnLAorICAgICAgICAgICAgcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCgga2V5LCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbnRleHQsIHNpemVvZiggcGxhaW50ZXh0ICksCkBAIC02MTAsNyArNjE0LDcgQEAKIH0KIAogc3RhdGljIGludCBzZXR1cF9rZXlfZGVyaXZhdGlvbl93cmFwKCBwc2Ffa2V5X2Rlcml2YXRpb25fb3BlcmF0aW9uX3QqIG9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogaW5wdXQxLCBzaXplX3QgaW5wdXQxX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogaW5wdXQyLCBzaXplX3QgaW5wdXQyX2xlbmd0aCwKQEAgLTYyNCw3ICs2MjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0MSwgaW5wdXQxX2xlbmd0aCApICk7CiAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9rZXlfZGVyaXZhdGlvbl9pbnB1dF9rZXkoIG9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX1NFQ1JFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ICkgKTsKICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2tleV9kZXJpdmF0aW9uX2lucHV0X2J5dGVzKCBvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX0lORk8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQyLApAQCAtNjM4LDcgKzY0Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQxLCBpbnB1dDFfbGVuZ3RoICkgKTsKICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2tleV9kZXJpdmF0aW9uX2lucHV0X2tleSggb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfS0VZX0RFUklWQVRJT05fSU5QVVRfU0VDUkVULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgKSApOwogICAgICAgICBQU0FfQVNTRVJUKCBwc2Ffa2V5X2Rlcml2YXRpb25faW5wdXRfYnl0ZXMoIG9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfS0VZX0RFUklWQVRJT05fSU5QVVRfTEFCRUwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQyLCBpbnB1dDJfbGVuZ3RoICkgKTsKQEAgLTY1OCw3ICs2NjIsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgZXhlcmNpc2Vfa2V5X2Rlcml2YXRpb25fa2V5KCBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKK3N0YXRpYyBpbnQgZXhlcmNpc2Vfa2V5X2Rlcml2YXRpb25fa2V5KCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV91c2FnZV90IHVzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgKQogewpAQCAtNjcyLDcgKzY3Niw3IEBACiAKICAgICBpZiggdXNhZ2UgJiBQU0FfS0VZX1VTQUdFX0RFUklWRSApCiAgICAgewotICAgICAgICBpZiggIXNldHVwX2tleV9kZXJpdmF0aW9uX3dyYXAoICZvcGVyYXRpb24sIGhhbmRsZSwgYWxnLAorICAgICAgICBpZiggIXNldHVwX2tleV9kZXJpdmF0aW9uX3dyYXAoICZvcGVyYXRpb24sIGtleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0MSwgaW5wdXQxX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDIsIGlucHV0Ml9sZW5ndGgsIGNhcGFjaXR5ICkgKQogICAgICAgICAgICAgZ290byBleGl0OwpAQCAtNjkzLDcgKzY5Nyw3IEBACiAgKiBwcml2YXRlIGtleSBhZ2FpbnN0IGl0cyBvd24gcHVibGljIGtleS4gKi8KIHN0YXRpYyBwc2Ffc3RhdHVzX3Qga2V5X2FncmVlbWVudF93aXRoX3NlbGYoCiAgICAgcHNhX2tleV9kZXJpdmF0aW9uX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCi0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgKQorICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSApCiB7CiAgICAgcHNhX2tleV90eXBlX3QgcHJpdmF0ZV9rZXlfdHlwZTsKICAgICBwc2Ffa2V5X3R5cGVfdCBwdWJsaWNfa2V5X3R5cGU7CkBAIC03MDYsMjkgKzcxMCwzMyBAQAogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfR0VORVJJQ19FUlJPUjsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBrZXksICZhdHRyaWJ1dGVzICkgKTsKICAgICBwcml2YXRlX2tleV90eXBlID0gcHNhX2dldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMgKTsKICAgICBrZXlfYml0cyA9IHBzYV9nZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzICk7CiAgICAgcHVibGljX2tleV90eXBlID0gUFNBX0tFWV9UWVBFX1BVQkxJQ19LRVlfT0ZfS0VZX1BBSVIoIHByaXZhdGVfa2V5X3R5cGUgKTsKICAgICBwdWJsaWNfa2V5X2xlbmd0aCA9IFBTQV9LRVlfRVhQT1JUX01BWF9TSVpFKCBwdWJsaWNfa2V5X3R5cGUsIGtleV9iaXRzICk7CiAgICAgQVNTRVJUX0FMTE9DKCBwdWJsaWNfa2V5LCBwdWJsaWNfa2V5X2xlbmd0aCApOwotICAgIFBTQV9BU1NFUlQoIHBzYV9leHBvcnRfcHVibGljX2tleSggaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljX2tleSwgcHVibGljX2tleV9sZW5ndGgsCisgICAgUFNBX0FTU0VSVCggcHNhX2V4cG9ydF9wdWJsaWNfa2V5KCBrZXksIHB1YmxpY19rZXksIHB1YmxpY19rZXlfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnB1YmxpY19rZXlfbGVuZ3RoICkgKTsKIAogICAgIHN0YXR1cyA9IHBzYV9rZXlfZGVyaXZhdGlvbl9rZXlfYWdyZWVtZW50KAotICAgICAgICBvcGVyYXRpb24sIFBTQV9LRVlfREVSSVZBVElPTl9JTlBVVF9TRUNSRVQsIGhhbmRsZSwKKyAgICAgICAgb3BlcmF0aW9uLCBQU0FfS0VZX0RFUklWQVRJT05fSU5QVVRfU0VDUkVULCBrZXksCiAgICAgICAgIHB1YmxpY19rZXksIHB1YmxpY19rZXlfbGVuZ3RoICk7CiBleGl0OgotICAgIG1iZWR0bHNfZnJlZSggcHVibGljX2tleSApOworICAgIC8qCisgICAgICogS2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCkKKyAgICAgKiB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOworCisgICAgbWJlZHRsc19mcmVlKCBwdWJsaWNfa2V5ICk7CiAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIH0KIAogLyogV2UgbmVlZCB0d28ga2V5cyB0byBleGVyY2lzZSBrZXkgYWdyZWVtZW50LiBFeGVyY2lzZSB0aGUKICAqIHByaXZhdGUga2V5IGFnYWluc3QgaXRzIG93biBwdWJsaWMga2V5LiAqLwogc3RhdGljIHBzYV9zdGF0dXNfdCByYXdfa2V5X2FncmVlbWVudF93aXRoX3NlbGYoIHBzYV9hbGdvcml0aG1fdCBhbGcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSApCiB7CiAgICAgcHNhX2tleV90eXBlX3QgcHJpdmF0ZV9rZXlfdHlwZTsKICAgICBwc2Ffa2V5X3R5cGVfdCBwdWJsaWNfa2V5X3R5cGU7CkBAIC03NDMsMjYgKzc1MSwzMSBAQAogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfR0VORVJJQ19FUlJPUjsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBrZXksICZhdHRyaWJ1dGVzICkgKTsKICAgICBwcml2YXRlX2tleV90eXBlID0gcHNhX2dldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMgKTsKICAgICBrZXlfYml0cyA9IHBzYV9nZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzICk7CiAgICAgcHVibGljX2tleV90eXBlID0gUFNBX0tFWV9UWVBFX1BVQkxJQ19LRVlfT0ZfS0VZX1BBSVIoIHByaXZhdGVfa2V5X3R5cGUgKTsKICAgICBwdWJsaWNfa2V5X2xlbmd0aCA9IFBTQV9LRVlfRVhQT1JUX01BWF9TSVpFKCBwdWJsaWNfa2V5X3R5cGUsIGtleV9iaXRzICk7CiAgICAgQVNTRVJUX0FMTE9DKCBwdWJsaWNfa2V5LCBwdWJsaWNfa2V5X2xlbmd0aCApOwotICAgIFBTQV9BU1NFUlQoIHBzYV9leHBvcnRfcHVibGljX2tleSggaGFuZGxlLAorICAgIFBTQV9BU1NFUlQoIHBzYV9leHBvcnRfcHVibGljX2tleSgga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljX2tleSwgcHVibGljX2tleV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHVibGljX2tleV9sZW5ndGggKSApOwogCi0gICAgc3RhdHVzID0gcHNhX3Jhd19rZXlfYWdyZWVtZW50KCBhbGcsIGhhbmRsZSwKKyAgICBzdGF0dXMgPSBwc2FfcmF3X2tleV9hZ3JlZW1lbnQoIGFsZywga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljX2tleSwgcHVibGljX2tleV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIHNpemVvZiggb3V0cHV0ICksICZvdXRwdXRfbGVuZ3RoICk7CiBleGl0OgotICAgIG1iZWR0bHNfZnJlZSggcHVibGljX2tleSApOworICAgIC8qCisgICAgICogS2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCkKKyAgICAgKiB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOworCisgICAgbWJlZHRsc19mcmVlKCBwdWJsaWNfa2V5ICk7CiAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIH0KIAotc3RhdGljIGludCBleGVyY2lzZV9yYXdfa2V5X2FncmVlbWVudF9rZXkoIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAorc3RhdGljIGludCBleGVyY2lzZV9yYXdfa2V5X2FncmVlbWVudF9rZXkoIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3VzYWdlX3QgdXNhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZyApCiB7CkBAIC03NzIsNyArNzg1LDcgQEAKICAgICB7CiAgICAgICAgIC8qIFdlIG5lZWQgdHdvIGtleXMgdG8gZXhlcmNpc2Uga2V5IGFncmVlbWVudC4gRXhlcmNpc2UgdGhlCiAgICAgICAgICAqIHByaXZhdGUga2V5IGFnYWluc3QgaXRzIG93biBwdWJsaWMga2V5LiAqLwotICAgICAgICBQU0FfQVNTRVJUKCByYXdfa2V5X2FncmVlbWVudF93aXRoX3NlbGYoIGFsZywgaGFuZGxlICkgKTsKKyAgICAgICAgUFNBX0FTU0VSVCggcmF3X2tleV9hZ3JlZW1lbnRfd2l0aF9zZWxmKCBhbGcsIGtleSApICk7CiAgICAgfQogICAgIG9rID0gMTsKIApAQCAtNzgwLDcgKzc5Myw3IEBACiAgICAgcmV0dXJuKCBvayApOwogfQogCi1zdGF0aWMgaW50IGV4ZXJjaXNlX2tleV9hZ3JlZW1lbnRfa2V5KCBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKK3N0YXRpYyBpbnQgZXhlcmNpc2Vfa2V5X2FncmVlbWVudF9rZXkoIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfdXNhZ2VfdCB1c2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgKQogewpAQCAtNzkzLDcgKzgwNiw3IEBACiAgICAgICAgIC8qIFdlIG5lZWQgdHdvIGtleXMgdG8gZXhlcmNpc2Uga2V5IGFncmVlbWVudC4gRXhlcmNpc2UgdGhlCiAgICAgICAgICAqIHByaXZhdGUga2V5IGFnYWluc3QgaXRzIG93biBwdWJsaWMga2V5LiAqLwogICAgICAgICBQU0FfQVNTRVJUKCBwc2Ffa2V5X2Rlcml2YXRpb25fc2V0dXAoICZvcGVyYXRpb24sIGFsZyApICk7Ci0gICAgICAgIFBTQV9BU1NFUlQoIGtleV9hZ3JlZW1lbnRfd2l0aF9zZWxmKCAmb3BlcmF0aW9uLCBoYW5kbGUgKSApOworICAgICAgICBQU0FfQVNTRVJUKCBrZXlfYWdyZWVtZW50X3dpdGhfc2VsZiggJm9wZXJhdGlvbiwga2V5ICkgKTsKICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2tleV9kZXJpdmF0aW9uX291dHB1dF9ieXRlcyggJm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIG91dHB1dCApICkgKTsKQEAgLTEwMDQsNyArMTAxNyw3IEBACiAgICAgcmV0dXJuKCAwICk7CiB9CiAKLXN0YXRpYyBpbnQgZXhlcmNpc2VfZXhwb3J0X2tleSggcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCitzdGF0aWMgaW50IGV4ZXJjaXNlX2V4cG9ydF9rZXkoIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV91c2FnZV90IHVzYWdlICkKIHsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CkBAIC0xMDEzLDEyICsxMDI2LDEyIEBACiAgICAgc2l6ZV90IGV4cG9ydGVkX2xlbmd0aCA9IDA7CiAgICAgaW50IG9rID0gMDsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmF0dHJpYnV0ZXMgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGtleSwgJmF0dHJpYnV0ZXMgKSApOwogCiAgICAgaWYoICggdXNhZ2UgJiBQU0FfS0VZX1VTQUdFX0VYUE9SVCApID09IDAgJiYKICAgICAgICAgISBQU0FfS0VZX1RZUEVfSVNfUFVCTElDX0tFWSggcHNhX2dldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMgKSApICkKICAgICB7Ci0gICAgICAgIFRFU1RfRVFVQUwoIHBzYV9leHBvcnRfa2V5KCBoYW5kbGUsIE5VTEwsIDAsICZleHBvcnRlZF9sZW5ndGggKSwKKyAgICAgICAgVEVTVF9FUVVBTCggcHNhX2V4cG9ydF9rZXkoIGtleSwgTlVMTCwgMCwgJmV4cG9ydGVkX2xlbmd0aCApLAogICAgICAgICAgICAgICAgICAgICBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRCApOwogICAgICAgICBvayA9IDE7CiAgICAgICAgIGdvdG8gZXhpdDsKQEAgLTEwMjgsNyArMTA0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfZ2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcyApICk7CiAgICAgQVNTRVJUX0FMTE9DKCBleHBvcnRlZCwgZXhwb3J0ZWRfc2l6ZSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2V4cG9ydF9rZXkoIGhhbmRsZSwKKyAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSgga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRlZCwgZXhwb3J0ZWRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4cG9ydGVkX2xlbmd0aCApICk7CiAgICAgb2sgPSBleHBvcnRlZF9rZXlfc2FuaXR5X2NoZWNrKCBwc2FfZ2V0X2tleV90eXBlKCAmYXR0cmlidXRlcyApLApAQCAtMTAzNiwxMiArMTA0OSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWQsIGV4cG9ydGVkX2xlbmd0aCApOwogCiBleGl0OgotICAgIG1iZWR0bHNfZnJlZSggZXhwb3J0ZWQgKTsKKyAgICAvKgorICAgICAqIEtleSBhdHRyaWJ1dGVzIG1heSBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgcHNhX2dldF9rZXlfYXR0cmlidXRlcygpCisgICAgICogdGh1cyByZXNldCB0aGVtIGFzIHJlcXVpcmVkLgorICAgICAqLwogICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKKworICAgIG1iZWR0bHNfZnJlZSggZXhwb3J0ZWQgKTsKICAgICByZXR1cm4oIG9rICk7CiB9CiAKLXN0YXRpYyBpbnQgZXhlcmNpc2VfZXhwb3J0X3B1YmxpY19rZXkoIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlICkKK3N0YXRpYyBpbnQgZXhlcmNpc2VfZXhwb3J0X3B1YmxpY19rZXkoIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSApCiB7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IHB1YmxpY190eXBlOwpAQCAtMTA1MCwxMCArMTA2OCwxMCBAQAogICAgIHNpemVfdCBleHBvcnRlZF9sZW5ndGggPSAwOwogICAgIGludCBvayA9IDA7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBrZXksICZhdHRyaWJ1dGVzICkgKTsKICAgICBpZiggISBQU0FfS0VZX1RZUEVfSVNfQVNZTU1FVFJJQyggcHNhX2dldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMgKSApICkKICAgICB7Ci0gICAgICAgIFRFU1RfRVFVQUwoIHBzYV9leHBvcnRfcHVibGljX2tleSggaGFuZGxlLCBOVUxMLCAwLCAmZXhwb3J0ZWRfbGVuZ3RoICksCisgICAgICAgIFRFU1RfRVFVQUwoIHBzYV9leHBvcnRfcHVibGljX2tleSgga2V5LCBOVUxMLCAwLCAmZXhwb3J0ZWRfbGVuZ3RoICksCiAgICAgICAgICAgICAgICAgICAgIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CiAgICAgICAgIHJldHVybiggMSApOwogICAgIH0KQEAgLTEwNjQsNyArMTA4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfZ2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcyApICk7CiAgICAgQVNTRVJUX0FMTE9DKCBleHBvcnRlZCwgZXhwb3J0ZWRfc2l6ZSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2V4cG9ydF9wdWJsaWNfa2V5KCBoYW5kbGUsCisgICAgUFNBX0FTU0VSVCggcHNhX2V4cG9ydF9wdWJsaWNfa2V5KCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRlZCwgZXhwb3J0ZWRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHBvcnRlZF9sZW5ndGggKSApOwogICAgIG9rID0gZXhwb3J0ZWRfa2V5X3Nhbml0eV9jaGVjayggcHVibGljX3R5cGUsCkBAIC0xMDcyLDggKzEwOTAsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkLCBleHBvcnRlZF9sZW5ndGggKTsKIAogZXhpdDoKLSAgICBtYmVkdGxzX2ZyZWUoIGV4cG9ydGVkICk7CisgICAgLyoKKyAgICAgKiBLZXkgYXR0cmlidXRlcyBtYXkgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoKQorICAgICAqIHRodXMgcmVzZXQgdGhlbSBhcyByZXF1aXJlZC4KKyAgICAgKi8KICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7CisKKyAgICBtYmVkdGxzX2ZyZWUoIGV4cG9ydGVkICk7CiAgICAgcmV0dXJuKCBvayApOwogfQogCkBAIC0xMDk2LDcgKzExMTksNyBAQAogICogaWYoICEgZXhlcmNpc2Vfa2V5KCAuLi4gKSApIGdvdG8gZXhpdDsKICAqIGBgYAogICoKLSAqIFxwYXJhbSBoYW5kbGUgICAgVGhlIGtleSB0byBleGVyY2lzZS4gSXQgc2hvdWxkIGJlIGNhcGFibGUgb2YgcGVyZm9ybWluZworICogXHBhcmFtIGtleSAgICAgICBUaGUga2V5IHRvIGV4ZXJjaXNlLiBJdCBzaG91bGQgYmUgY2FwYWJsZSBvZiBwZXJmb3JtaW5nCiAgKiAgICAgICAgICAgICAgICAgIFxwIGFsZy4KICAqIFxwYXJhbSB1c2FnZSAgICAgVGhlIHVzYWdlIGZsYWdzIHRvIGFzc3VtZS4KICAqIFxwYXJhbSBhbGcgICAgICAgVGhlIGFsZ29yaXRobSB0byBleGVyY2lzZS4KQEAgLTExMDQsMzMgKzExMjcsMzMgQEAKICAqIFxyZXR2YWwgMCBUaGUga2V5IGZhaWxlZCB0aGUgc21va2UgdGVzdHMuCiAgKiBccmV0dmFsIDEgVGhlIGtleSBwYXNzZWQgdGhlIHNtb2tlIHRlc3RzLgogICovCi1zdGF0aWMgaW50IGV4ZXJjaXNlX2tleSggcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUsCitzdGF0aWMgaW50IGV4ZXJjaXNlX2tleSggbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfdXNhZ2VfdCB1c2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnICkKIHsKICAgICBpbnQgb2s7CiAKLSAgICBpZiggISBjaGVja19rZXlfYXR0cmlidXRlc19zYW5pdHkoIGhhbmRsZSApICkKKyAgICBpZiggISBjaGVja19rZXlfYXR0cmlidXRlc19zYW5pdHkoIGtleSApICkKICAgICAgICAgcmV0dXJuKCAwICk7CiAKICAgICBpZiggYWxnID09IDAgKQogICAgICAgICBvayA9IDE7IC8qIElmIG5vIGFsZ29yaWhtLCBkbyBub3RoaW5nICh1c2VkIGZvciByYXcgZGF0YSAia2V5cyIpLiAqLwogICAgIGVsc2UgaWYoIFBTQV9BTEdfSVNfTUFDKCBhbGcgKSApCi0gICAgICAgIG9rID0gZXhlcmNpc2VfbWFjX2tleSggaGFuZGxlLCB1c2FnZSwgYWxnICk7CisgICAgICAgIG9rID0gZXhlcmNpc2VfbWFjX2tleSgga2V5LCB1c2FnZSwgYWxnICk7CiAgICAgZWxzZSBpZiggUFNBX0FMR19JU19DSVBIRVIoIGFsZyApICkKLSAgICAgICAgb2sgPSBleGVyY2lzZV9jaXBoZXJfa2V5KCBoYW5kbGUsIHVzYWdlLCBhbGcgKTsKKyAgICAgICAgb2sgPSBleGVyY2lzZV9jaXBoZXJfa2V5KCBrZXksIHVzYWdlLCBhbGcgKTsKICAgICBlbHNlIGlmKCBQU0FfQUxHX0lTX0FFQUQoIGFsZyApICkKLSAgICAgICAgb2sgPSBleGVyY2lzZV9hZWFkX2tleSggaGFuZGxlLCB1c2FnZSwgYWxnICk7CisgICAgICAgIG9rID0gZXhlcmNpc2VfYWVhZF9rZXkoIGtleSwgdXNhZ2UsIGFsZyApOwogICAgIGVsc2UgaWYoIFBTQV9BTEdfSVNfU0lHTiggYWxnICkgKQotICAgICAgICBvayA9IGV4ZXJjaXNlX3NpZ25hdHVyZV9rZXkoIGhhbmRsZSwgdXNhZ2UsIGFsZyApOworICAgICAgICBvayA9IGV4ZXJjaXNlX3NpZ25hdHVyZV9rZXkoIGtleSwgdXNhZ2UsIGFsZyApOwogICAgIGVsc2UgaWYoIFBTQV9BTEdfSVNfQVNZTU1FVFJJQ19FTkNSWVBUSU9OKCBhbGcgKSApCi0gICAgICAgIG9rID0gZXhlcmNpc2VfYXN5bW1ldHJpY19lbmNyeXB0aW9uX2tleSggaGFuZGxlLCB1c2FnZSwgYWxnICk7CisgICAgICAgIG9rID0gZXhlcmNpc2VfYXN5bW1ldHJpY19lbmNyeXB0aW9uX2tleSgga2V5LCB1c2FnZSwgYWxnICk7CiAgICAgZWxzZSBpZiggUFNBX0FMR19JU19LRVlfREVSSVZBVElPTiggYWxnICkgKQotICAgICAgICBvayA9IGV4ZXJjaXNlX2tleV9kZXJpdmF0aW9uX2tleSggaGFuZGxlLCB1c2FnZSwgYWxnICk7CisgICAgICAgIG9rID0gZXhlcmNpc2Vfa2V5X2Rlcml2YXRpb25fa2V5KCBrZXksIHVzYWdlLCBhbGcgKTsKICAgICBlbHNlIGlmKCBQU0FfQUxHX0lTX1JBV19LRVlfQUdSRUVNRU5UKCBhbGcgKSApCi0gICAgICAgIG9rID0gZXhlcmNpc2VfcmF3X2tleV9hZ3JlZW1lbnRfa2V5KCBoYW5kbGUsIHVzYWdlLCBhbGcgKTsKKyAgICAgICAgb2sgPSBleGVyY2lzZV9yYXdfa2V5X2FncmVlbWVudF9rZXkoIGtleSwgdXNhZ2UsIGFsZyApOwogICAgIGVsc2UgaWYoIFBTQV9BTEdfSVNfS0VZX0FHUkVFTUVOVCggYWxnICkgKQotICAgICAgICBvayA9IGV4ZXJjaXNlX2tleV9hZ3JlZW1lbnRfa2V5KCBoYW5kbGUsIHVzYWdlLCBhbGcgKTsKKyAgICAgICAgb2sgPSBleGVyY2lzZV9rZXlfYWdyZWVtZW50X2tleSgga2V5LCB1c2FnZSwgYWxnICk7CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgY2hhciBtZXNzYWdlWzQwXTsKQEAgLTExNDEsOCArMTE2NCw4IEBACiAgICAgICAgIG9rID0gMDsKICAgICB9CiAKLSAgICBvayA9IG9rICYmIGV4ZXJjaXNlX2V4cG9ydF9rZXkoIGhhbmRsZSwgdXNhZ2UgKTsKLSAgICBvayA9IG9rICYmIGV4ZXJjaXNlX2V4cG9ydF9wdWJsaWNfa2V5KCBoYW5kbGUgKTsKKyAgICBvayA9IG9rICYmIGV4ZXJjaXNlX2V4cG9ydF9rZXkoIGtleSwgdXNhZ2UgKTsKKyAgICBvayA9IG9rICYmIGV4ZXJjaXNlX2V4cG9ydF9wdWJsaWNfa2V5KCBrZXkgKTsKIAogICAgIHJldHVybiggb2sgKTsKIH0KQEAgLTExNzUsNyArMTE5OCw3IEBACiAKIH0KIAotc3RhdGljIGludCB0ZXN0X29wZXJhdGlvbnNfb25faW52YWxpZF9oYW5kbGUoIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlICkKK3N0YXRpYyBpbnQgdGVzdF9vcGVyYXRpb25zX29uX2ludmFsaWRfa2V5KCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgKQogewogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXlfaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgMHg2OTY0ICk7CkBAIC0xMTg3LDggKzEyMTAsOCBAQAogICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywgUFNBX0tFWV9VU0FHRV9FTkNSWVBUICk7CiAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgUFNBX0FMR19DVFIgKTsKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywgUFNBX0tFWV9UWVBFX0FFUyApOwotICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmF0dHJpYnV0ZXMgKSwKLSAgICAgICAgICAgICAgICBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgKTsKKyAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBrZXksICZhdHRyaWJ1dGVzICksCisgICAgICAgICAgICAgICAgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICk7CiAgICAgVEVTVF9FUVVBTCgKICAgICAgICAgTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9LRVlfSUQoIHBzYV9nZXRfa2V5X2lkKCAmYXR0cmlidXRlcyApICksIDAgKTsKICAgICBURVNUX0VRVUFMKApAQCAtMTE5OSwxNyArMTIyMiwyMSBAQAogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzICksIDAgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcyApLCAwICk7CiAKLSAgICBURVNUX0VRVUFMKCBwc2FfZXhwb3J0X2tleSggaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIHNpemVvZiggYnVmZmVyICksICZsZW5ndGggKSwKLSAgICAgICAgICAgICAgICBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgKTsKLSAgICBURVNUX0VRVUFMKCBwc2FfZXhwb3J0X3B1YmxpY19rZXkoIGhhbmRsZSwKKyAgICBURVNUX0VRVUFMKCBwc2FfZXhwb3J0X2tleSgga2V5LCBidWZmZXIsIHNpemVvZiggYnVmZmVyICksICZsZW5ndGggKSwKKyAgICAgICAgICAgICAgICBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgKTsKKyAgICBURVNUX0VRVUFMKCBwc2FfZXhwb3J0X3B1YmxpY19rZXkoIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZW9mKCBidWZmZXIgKSwgJmxlbmd0aCApLAotICAgICAgICAgICAgICAgIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSApOworICAgICAgICAgICAgICAgIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCApOwogCiAgICAgb2sgPSAxOwogCiBleGl0OgorICAgIC8qCisgICAgICogS2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCkKKyAgICAgKiB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOworCiAgICAgcmV0dXJuKCBvayApOwogfQogCkBAIC0xNDUyLDcgKzE0NzksNyBAQAogewogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBnb3RfYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCB0eXBlID0gdHlwZV9hcmc7CiAgICAgcHNhX2tleV91c2FnZV90IHVzYWdlID0gdXNhZ2VfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwpAQCAtMTQ2OCwyMyArMTQ5NSwyOCBAQAogCiAgICAgc3RhdHVzID0gcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfbWF0ZXJpYWwsIHNpemVvZigga2V5X21hdGVyaWFsICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApOwogICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgZXhwZWN0ZWRfc3RhdHVzICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIGdvdG8gZXhpdDsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmdvdF9hdHRyaWJ1dGVzICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBrZXksICZnb3RfYXR0cmlidXRlcyApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdHlwZSggJmdvdF9hdHRyaWJ1dGVzICksIHR5cGUgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV91c2FnZV9mbGFncyggJmdvdF9hdHRyaWJ1dGVzICksIHVzYWdlICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfYWxnb3JpdGhtKCAmZ290X2F0dHJpYnV0ZXMgKSwgYWxnICk7CiAgICAgQVNTRVJUX05PX1NMT1RfTlVNQkVSKCAmZ290X2F0dHJpYnV0ZXMgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICkgKTsKLSAgICB0ZXN0X29wZXJhdGlvbnNfb25faW52YWxpZF9oYW5kbGUoIGhhbmRsZSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSgga2V5ICkgKTsKKyAgICB0ZXN0X29wZXJhdGlvbnNfb25faW52YWxpZF9rZXkoIGtleSApOwogCiBleGl0OgotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgLyoKKyAgICAgKiBLZXkgYXR0cmlidXRlcyBtYXkgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoKQorICAgICAqIHRodXMgcmVzZXQgdGhlbSBhcyByZXF1aXJlZC4KKyAgICAgKi8KICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZnb3RfYXR0cmlidXRlcyApOworCisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KIC8qIEVORF9DQVNFICovCkBAIC0xNDk2LDcgKzE1MjgsNyBAQAogewogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBnb3RfYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCB0eXBlID0gdHlwZV9hcmc7CiAgICAgc2l6ZV90IGF0dHJfYml0cyA9IGF0dHJfYml0c19hcmc7CiAgICAgcHNhX3N0YXR1c190IGV4cGVjdGVkX3N0YXR1cyA9IGV4cGVjdGVkX3N0YXR1c19hcmc7CkBAIC0xNTA3LDIzICsxNTM5LDI4IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIHR5cGUgKTsKICAgICBwc2Ffc2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcywgYXR0cl9iaXRzICk7CiAKLSAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGRhdGEtPngsIGRhdGEtPmxlbiwgJmhhbmRsZSApOworICAgIHN0YXR1cyA9IHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywgZGF0YS0+eCwgZGF0YS0+bGVuLCAma2V5ICk7CiAgICAgVEVTVF9FUVVBTCggc3RhdHVzLCBleHBlY3RlZF9zdGF0dXMgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgZ290byBleGl0OwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggaGFuZGxlLCAmZ290X2F0dHJpYnV0ZXMgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGtleSwgJmdvdF9hdHRyaWJ1dGVzICkgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV90eXBlKCAmZ290X2F0dHJpYnV0ZXMgKSwgdHlwZSApOwogICAgIGlmKCBhdHRyX2JpdHMgIT0gMCApCiAgICAgICAgIFRFU1RfRVFVQUwoIGF0dHJfYml0cywgcHNhX2dldF9rZXlfYml0cyggJmdvdF9hdHRyaWJ1dGVzICkgKTsKICAgICBBU1NFUlRfTk9fU0xPVF9OVU1CRVIoICZnb3RfYXR0cmlidXRlcyApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKSApOwotICAgIHRlc3Rfb3BlcmF0aW9uc19vbl9pbnZhbGlkX2hhbmRsZSggaGFuZGxlICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKSApOworICAgIHRlc3Rfb3BlcmF0aW9uc19vbl9pbnZhbGlkX2tleSgga2V5ICk7CiAKIGV4aXQ6Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICAvKgorICAgICAqIEtleSBhdHRyaWJ1dGVzIG1heSBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgcHNhX2dldF9rZXlfYXR0cmlidXRlcygpCisgICAgICogdGh1cyByZXNldCB0aGVtIGFzIHJlcXVpcmVkLgorICAgICAqLwogICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmdvdF9hdHRyaWJ1dGVzICk7CisKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogfQogLyogRU5EX0NBU0UgKi8KQEAgLTE1MzYsNyArMTU3Myw3IEBACiAgICAgc2l6ZV90IGJ5dGVfc2l6ZSA9IGJ5dGVfc2l6ZV9hcmc7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIHBzYV9zdGF0dXNfdCBleHBlY3RlZF9zdGF0dXMgPSBleHBlY3RlZF9zdGF0dXNfYXJnOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwogICAgIHVpbnQ4X3QgKmJ1ZmZlciA9IE5VTEw7CiAgICAgc2l6ZV90IGJ1ZmZlcl9zaXplID0gYnl0ZV9zaXplICsgMTsKQEAgLTE1NTIsMTggKzE1ODksMTggQEAKICAgICAvKiBUcnkgaW1wb3J0aW5nIHRoZSBrZXkgKi8KICAgICBwc2Ffc2V0X2tleV91c2FnZV9mbGFncyggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVVNBR0VfRVhQT1JUICk7CiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIHR5cGUgKTsKLSAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGJ1ZmZlciwgYnl0ZV9zaXplLCAmaGFuZGxlICk7CisgICAgc3RhdHVzID0gcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBidWZmZXIsIGJ5dGVfc2l6ZSwgJmtleSApOwogICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgZXhwZWN0ZWRfc3RhdHVzICk7CiAKICAgICBpZiggc3RhdHVzID09IFBTQV9TVUNDRVNTICkKICAgICB7Ci0gICAgICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmF0dHJpYnV0ZXMgKSApOworICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBrZXksICZhdHRyaWJ1dGVzICkgKTsKICAgICAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMgKSwgdHlwZSApOwogICAgICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcyApLAogICAgICAgICAgICAgICAgICAgICBQU0FfQllURVNfVE9fQklUUyggYnl0ZV9zaXplICkgKTsKICAgICAgICAgQVNTRVJUX05PX1NMT1RfTlVNQkVSKCAmYXR0cmlidXRlcyApOwogICAgICAgICBtZW1zZXQoIGJ1ZmZlciwgMCwgYnl0ZV9zaXplICsgMSApOwotICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSggaGFuZGxlLCBidWZmZXIsIGJ5dGVfc2l6ZSwgJm4gKSApOworICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSgga2V5LCBidWZmZXIsIGJ5dGVfc2l6ZSwgJm4gKSApOwogICAgICAgICBmb3IoIG4gPSAwOyBuIDwgYnl0ZV9zaXplOyBuKysgKQogICAgICAgICAgICAgVEVTVF9FUVVBTCggYnVmZmVyW25dLCAnSycgKTsKICAgICAgICAgZm9yKCBuID0gYnl0ZV9zaXplOyBuIDwgYnVmZmVyX3NpemU7IG4rKyApCkBAIC0xNTcxLDcgKzE2MDgsMTMgQEAKICAgICB9CiAKIGV4aXQ6Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICAvKgorICAgICAqIEtleSBhdHRyaWJ1dGVzIG1heSBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgcHNhX2dldF9rZXlfYXR0cmlidXRlcygpCisgICAgICogdGh1cyByZXNldCB0aGVtIGFzIHJlcXVpcmVkLgorICAgICAqLworICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKKworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgUFNBX0RPTkUoICk7CiAgICAgbWJlZHRsc19mcmVlKCBidWZmZXIgKTsKIH0KQEAgLTE1ODAsNyArMTYyMyw3IEBACiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIGltcG9ydF9yc2FfbWFkZV91cCggaW50IGJpdHNfYXJnLCBpbnQga2V5cGFpciwgaW50IGV4cGVjdGVkX3N0YXR1c19hcmcgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBzaXplX3QgYml0cyA9IGJpdHNfYXJnOwogICAgIHBzYV9zdGF0dXNfdCBleHBlY3RlZF9zdGF0dXMgPSBleHBlY3RlZF9zdGF0dXNfYXJnOwogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CkBAIC0xNjAzLDExICsxNjQ2LDExIEBACiAKICAgICAvKiBUcnkgaW1wb3J0aW5nIHRoZSBrZXkgKi8KICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywgdHlwZSApOwotICAgIHN0YXR1cyA9IHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywgcCwgbGVuZ3RoLCAmaGFuZGxlICk7CisgICAgc3RhdHVzID0gcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBwLCBsZW5ndGgsICZrZXkgKTsKICAgICBURVNUX0VRVUFMKCBzdGF0dXMsIGV4cGVjdGVkX3N0YXR1cyApOwogCiAgICAgaWYoIHN0YXR1cyA9PSBQU0FfU1VDQ0VTUyApCi0gICAgICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICkgKTsKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKSApOwogCiBleGl0OgogICAgIG1iZWR0bHNfZnJlZSggYnVmZmVyICk7CkBAIC0xNjI0LDcgKzE2NjcsNyBAQAogICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfZXhwb3J0X3N0YXR1c19hcmcsCiAgICAgICAgICAgICAgICAgICAgIGludCBjYW5vbmljYWxfaW5wdXQgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCB0eXBlID0gdHlwZV9hcmc7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IGFsZ19hcmc7CiAgICAgcHNhX3N0YXR1c190IGV4cGVjdGVkX2V4cG9ydF9zdGF0dXMgPSBleHBlY3RlZF9leHBvcnRfc3RhdHVzX2FyZzsKQEAgLTE2NDgsMTggKzE2OTEsMTYgQEAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywgdHlwZSApOwogCiAgICAgLyogSW1wb3J0IHRoZSBrZXkgKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGRhdGEtPngsIGRhdGEtPmxlbiwgJmhhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBkYXRhLT54LCBkYXRhLT5sZW4sICZrZXkgKSApOwogCiAgICAgLyogVGVzdCB0aGUga2V5IGluZm9ybWF0aW9uICovCi0gICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggaGFuZGxlLCAmZ290X2F0dHJpYnV0ZXMgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGtleSwgJmdvdF9hdHRyaWJ1dGVzICkgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV90eXBlKCAmZ290X2F0dHJpYnV0ZXMgKSwgdHlwZSApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2JpdHMoICZnb3RfYXR0cmlidXRlcyApLCAoc2l6ZV90KSBleHBlY3RlZF9iaXRzICk7CiAgICAgQVNTRVJUX05PX1NMT1RfTlVNQkVSKCAmZ290X2F0dHJpYnV0ZXMgKTsKIAogICAgIC8qIEV4cG9ydCB0aGUga2V5ICovCi0gICAgc3RhdHVzID0gcHNhX2V4cG9ydF9rZXkoIGhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWQsIGV4cG9ydF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhwb3J0ZWRfbGVuZ3RoICk7CisgICAgc3RhdHVzID0gcHNhX2V4cG9ydF9rZXkoIGtleSwgZXhwb3J0ZWQsIGV4cG9ydF9zaXplLCAmZXhwb3J0ZWRfbGVuZ3RoICk7CiAgICAgVEVTVF9FUVVBTCggc3RhdHVzLCBleHBlY3RlZF9leHBvcnRfc3RhdHVzICk7CiAKICAgICAvKiBUaGUgZXhwb3J0ZWQgbGVuZ3RoIG11c3QgYmUgc2V0IGJ5IHBzYV9leHBvcnRfa2V5KCkgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAKQEAgLTE2NzYsMzUgKzE3MTcsNDAgQEAKICAgICAgICAgZ290byBkZXN0cm95OwogICAgIH0KIAotICAgIGlmKCAhIGV4ZXJjaXNlX2V4cG9ydF9rZXkoIGhhbmRsZSwgdXNhZ2VfYXJnICkgKQorICAgIGlmKCAhIGV4ZXJjaXNlX2V4cG9ydF9rZXkoIGtleSwgdXNhZ2VfYXJnICkgKQogICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICBpZiggY2Fub25pY2FsX2lucHV0ICkKICAgICAgICAgQVNTRVJUX0NPTVBBUkUoIGRhdGEtPngsIGRhdGEtPmxlbiwgZXhwb3J0ZWQsIGV4cG9ydGVkX2xlbmd0aCApOwogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlMjsKKyAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5MiA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGV4cG9ydGVkLCBleHBvcnRlZF9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlMiApICk7Ci0gICAgICAgIFBTQV9BU1NFUlQoIHBzYV9leHBvcnRfa2V5KCBoYW5kbGUyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleTIgKSApOworICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSgga2V5MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZXhwb3J0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWV4cG9ydGVkX2xlbmd0aCApICk7CiAgICAgICAgIEFTU0VSVF9DT01QQVJFKCBleHBvcnRlZCwgZXhwb3J0ZWRfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgcmVleHBvcnRlZCwgcmVleHBvcnRlZF9sZW5ndGggKTsKLSAgICAgICAgUFNBX0FTU0VSVCggcHNhX2Nsb3NlX2tleSggaGFuZGxlMiApICk7CisgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSgga2V5MiApICk7CiAgICAgfQogICAgIFRFU1RfQVNTRVJUKCBleHBvcnRlZF9sZW5ndGggPD0gUFNBX0tFWV9FWFBPUlRfTUFYX1NJWkUoIHR5cGUsIHBzYV9nZXRfa2V5X2JpdHMoICZnb3RfYXR0cmlidXRlcyApICkgKTsKIAogZGVzdHJveToKICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApICk7Ci0gICAgdGVzdF9vcGVyYXRpb25zX29uX2ludmFsaWRfaGFuZGxlKCBoYW5kbGUgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIGtleSApICk7CisgICAgdGVzdF9vcGVyYXRpb25zX29uX2ludmFsaWRfa2V5KCBrZXkgKTsKIAogZXhpdDoKKyAgICAvKgorICAgICAqIEtleSBhdHRyaWJ1dGVzIG1heSBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgcHNhX2dldF9rZXlfYXR0cmlidXRlcygpCisgICAgICogdGh1cyByZXNldCB0aGVtIGFzIHJlcXVpcmVkLgorICAgICAqLworICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmdvdF9hdHRyaWJ1dGVzICk7CisKICAgICBtYmVkdGxzX2ZyZWUoIGV4cG9ydGVkICk7CiAgICAgbWJlZHRsc19mcmVlKCByZWV4cG9ydGVkICk7Ci0gICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmZ290X2F0dHJpYnV0ZXMgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KIC8qIEVORF9DQVNFICovCkBAIC0xNzE3LDcgKzE3NjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9leHBvcnRfc3RhdHVzX2FyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmV4cGVjdGVkX3B1YmxpY19rZXkgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCB0eXBlID0gdHlwZV9hcmc7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IGFsZ19hcmc7CiAgICAgcHNhX3N0YXR1c190IGV4cGVjdGVkX2V4cG9ydF9zdGF0dXMgPSBleHBlY3RlZF9leHBvcnRfc3RhdHVzX2FyZzsKQEAgLTE3MzQsMTEgKzE3ODAsMTEgQEAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywgdHlwZSApOwogCiAgICAgLyogSW1wb3J0IHRoZSBrZXkgKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGRhdGEtPngsIGRhdGEtPmxlbiwgJmhhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBkYXRhLT54LCBkYXRhLT5sZW4sICZrZXkgKSApOwogCiAgICAgLyogRXhwb3J0IHRoZSBwdWJsaWMga2V5ICovCiAgICAgQVNTRVJUX0FMTE9DKCBleHBvcnRlZCwgZXhwb3J0X3NpemUgKTsKLSAgICBzdGF0dXMgPSBwc2FfZXhwb3J0X3B1YmxpY19rZXkoIGhhbmRsZSwKKyAgICBzdGF0dXMgPSBwc2FfZXhwb3J0X3B1YmxpY19rZXkoIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkLCBleHBvcnRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHBvcnRlZF9sZW5ndGggKTsKICAgICBURVNUX0VRVUFMKCBzdGF0dXMsIGV4cGVjdGVkX2V4cG9ydF9zdGF0dXMgKTsKQEAgLTE3NDYsNyArMTc5Miw3IEBACiAgICAgewogICAgICAgICBwc2Ffa2V5X3R5cGVfdCBwdWJsaWNfdHlwZSA9IFBTQV9LRVlfVFlQRV9QVUJMSUNfS0VZX09GX0tFWV9QQUlSKCB0eXBlICk7CiAgICAgICAgIHNpemVfdCBiaXRzOwotICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKTsKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcygga2V5LCAmYXR0cmlidXRlcyApICk7CiAgICAgICAgIGJpdHMgPSBwc2FfZ2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcyApOwogICAgICAgICBURVNUX0FTU0VSVCggZXhwZWN0ZWRfcHVibGljX2tleS0+bGVuIDw9CiAgICAgICAgICAgICAgICAgICAgICBQU0FfS0VZX0VYUE9SVF9NQVhfU0laRSggcHVibGljX3R5cGUsIGJpdHMgKSApOwpAQCAtMTc1NSw5ICsxODAxLDE0IEBACiAgICAgfQogCiBleGl0OgotICAgIG1iZWR0bHNfZnJlZSggZXhwb3J0ZWQgKTsKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIC8qCisgICAgICogS2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCkKKyAgICAgKiB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOworCisgICAgbWJlZHRsc19mcmVlKCBleHBvcnRlZCApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgUFNBX0RPTkUoICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwpAQCAtMTc2OCw3ICsxODE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRzX2FyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGdfYXJnICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2tleV90eXBlX3QgdHlwZSA9IHR5cGVfYXJnOwogICAgIHNpemVfdCBiaXRzID0gYml0c19hcmc7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IGFsZ19hcmc7CkBAIC0xNzgzLDIzICsxODM0LDI5IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIHR5cGUgKTsKIAogICAgIC8qIEltcG9ydCB0aGUga2V5ICovCi0gICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBkYXRhLT54LCBkYXRhLT5sZW4sICZoYW5kbGUgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywgZGF0YS0+eCwgZGF0YS0+bGVuLCAma2V5ICkgKTsKIAogICAgIC8qIFRlc3QgdGhlIGtleSBpbmZvcm1hdGlvbiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmdvdF9hdHRyaWJ1dGVzICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBrZXksICZnb3RfYXR0cmlidXRlcyApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdHlwZSggJmdvdF9hdHRyaWJ1dGVzICksIHR5cGUgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9iaXRzKCAmZ290X2F0dHJpYnV0ZXMgKSwgYml0cyApOwogCiAgICAgLyogRG8gc29tZXRoaW5nIHdpdGggdGhlIGtleSBhY2NvcmRpbmcgdG8gaXRzIHR5cGUgYW5kIHBlcm1pdHRlZCB1c2FnZS4gKi8KLSAgICBpZiggISBleGVyY2lzZV9rZXkoIGhhbmRsZSwgdXNhZ2UsIGFsZyApICkKKyAgICBpZiggISBleGVyY2lzZV9rZXkoIGtleSwgdXNhZ2UsIGFsZyApICkKICAgICAgICAgZ290byBleGl0OwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKSApOwotICAgIHRlc3Rfb3BlcmF0aW9uc19vbl9pbnZhbGlkX2hhbmRsZSggaGFuZGxlICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKSApOworICAgIHRlc3Rfb3BlcmF0aW9uc19vbl9pbnZhbGlkX2tleSgga2V5ICk7CiAKIGV4aXQ6Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICAvKgorICAgICAqIEtleSBhdHRyaWJ1dGVzIG1heSBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgcHNhX2dldF9rZXlfYXR0cmlidXRlcygpCisgICAgICogdGh1cyByZXNldCB0aGVtIGFzIHJlcXVpcmVkLgorICAgICAqLwogICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmdvdF9hdHRyaWJ1dGVzICk7CisKKyAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KIC8qIEVORF9DQVNFICovCkBAIC0xODEwLDcgKzE4NjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1c2FnZV9hcmcsIGludCBleHBlY3RlZF91c2FnZV9hcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsZ19hcmcsIGludCBleHBlY3RlZF9hbGdfYXJnICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2tleV90eXBlX3Qga2V5X3R5cGUgPSB0eXBlX2FyZzsKICAgICBwc2Ffa2V5X3R5cGVfdCBleHBlY3RlZF9rZXlfdHlwZSA9IGV4cGVjdGVkX3R5cGVfYXJnOwogICAgIHNpemVfdCBiaXRzID0gYml0c19hcmc7CkBAIC0xODI4LDE4ICsxODg1LDIzIEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CiAgICAgcHNhX3NldF9rZXlfYml0cyggJmF0dHJpYnV0ZXMsIGJpdHMgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9nZW5lcmF0ZV9rZXkoICZhdHRyaWJ1dGVzLCAmaGFuZGxlICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2VuZXJhdGVfa2V5KCAmYXR0cmlidXRlcywgJmtleSApICk7CiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggaGFuZGxlLCAmYXR0cmlidXRlcyApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcygga2V5LCAmYXR0cmlidXRlcyApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMgKSwgZXhwZWN0ZWRfa2V5X3R5cGUgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcyApLCBleHBlY3RlZF9iaXRzICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdXNhZ2VfZmxhZ3MoICZhdHRyaWJ1dGVzICksIGV4cGVjdGVkX3VzYWdlICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcyApLCBleHBlY3RlZF9hbGcgKTsKIAogZXhpdDoKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIC8qCisgICAgICogS2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCkKKyAgICAgKiB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOworCisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KIC8qIEVORF9DQVNFICovCkBAIC0xODk2LDcgKzE5NTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICprZXlfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIGludCBleGVyY2lzZV9hbGcgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgcHNhX21hY19vcGVyYXRpb25fdCBvcGVyYXRpb24gPSBQU0FfTUFDX09QRVJBVElPTl9JTklUOwogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CkBAIC0xOTA5LDkgKzE5NzEsOSBAQAogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwogCiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXlfZGF0YS0+eCwga2V5X2RhdGEtPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkgKSApOwogCi0gICAgc3RhdHVzID0gcHNhX21hY19zaWduX3NldHVwKCAmb3BlcmF0aW9uLCBoYW5kbGUsIGV4ZXJjaXNlX2FsZyApOworICAgIHN0YXR1cyA9IHBzYV9tYWNfc2lnbl9zZXR1cCggJm9wZXJhdGlvbiwga2V5LCBleGVyY2lzZV9hbGcgKTsKICAgICBpZiggcG9saWN5X2FsZyA9PSBleGVyY2lzZV9hbGcgJiYKICAgICAgICAgKCBwb2xpY3lfdXNhZ2UgJiBQU0FfS0VZX1VTQUdFX1NJR05fSEFTSCApICE9IDAgKQogICAgICAgICBQU0FfQVNTRVJUKCBzdGF0dXMgKTsKQEAgLTE5MjAsNyArMTk4Miw3IEBACiAgICAgcHNhX21hY19hYm9ydCggJm9wZXJhdGlvbiApOwogCiAgICAgbWVtc2V0KCBtYWMsIDAsIHNpemVvZiggbWFjICkgKTsKLSAgICBzdGF0dXMgPSBwc2FfbWFjX3ZlcmlmeV9zZXR1cCggJm9wZXJhdGlvbiwgaGFuZGxlLCBleGVyY2lzZV9hbGcgKTsKKyAgICBzdGF0dXMgPSBwc2FfbWFjX3ZlcmlmeV9zZXR1cCggJm9wZXJhdGlvbiwga2V5LCBleGVyY2lzZV9hbGcgKTsKICAgICBpZiggcG9saWN5X2FsZyA9PSBleGVyY2lzZV9hbGcgJiYKICAgICAgICAgKCBwb2xpY3lfdXNhZ2UgJiBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIICkgIT0gMCApCiAgICAgICAgIFBTQV9BU1NFUlQoIHN0YXR1cyApOwpAQCAtMTkyOSw3ICsxOTkxLDcgQEAKIAogZXhpdDoKICAgICBwc2FfbWFjX2Fib3J0KCAmb3BlcmF0aW9uICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogfQogLyogRU5EX0NBU0UgKi8KQEAgLTE5NDEsNyArMjAwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmtleV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4ZXJjaXNlX2FsZyApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2FfY2lwaGVyX29wZXJhdGlvbl90IG9wZXJhdGlvbiA9IFBTQV9DSVBIRVJfT1BFUkFUSU9OX0lOSVQ7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1czsKQEAgLTE5NTMsOSArMjAxNSw5IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CiAKLSAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGhhbmRsZSwgZXhlcmNpc2VfYWxnICk7CisgICAgc3RhdHVzID0gcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGV4ZXJjaXNlX2FsZyApOwogICAgIGlmKCBwb2xpY3lfYWxnID09IGV4ZXJjaXNlX2FsZyAmJgogICAgICAgICAoIHBvbGljeV91c2FnZSAmIFBTQV9LRVlfVVNBR0VfRU5DUllQVCApICE9IDAgKQogICAgICAgICBQU0FfQVNTRVJUKCBzdGF0dXMgKTsKQEAgLTE5NjMsNyArMjAyNSw3IEBACiAgICAgICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQgKTsKICAgICBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICk7CiAKLSAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGhhbmRsZSwgZXhlcmNpc2VfYWxnICk7CisgICAgc3RhdHVzID0gcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGV4ZXJjaXNlX2FsZyApOwogICAgIGlmKCBwb2xpY3lfYWxnID09IGV4ZXJjaXNlX2FsZyAmJgogICAgICAgICAoIHBvbGljeV91c2FnZSAmIFBTQV9LRVlfVVNBR0VfREVDUllQVCApICE9IDAgKQogICAgICAgICBQU0FfQVNTRVJUKCBzdGF0dXMgKTsKQEAgLTE5NzIsNyArMjAzNCw3IEBACiAKIGV4aXQ6CiAgICAgcHNhX2NpcGhlcl9hYm9ydCggJm9wZXJhdGlvbiApOwotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KIC8qIEVORF9DQVNFICovCkBAIC0xOTg2LDcgKzIwNDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIGludCB0YWdfbGVuZ3RoX2FyZywKICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhlcmNpc2VfYWxnICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAgICAgdW5zaWduZWQgY2hhciBub25jZVsxNl0gPSB7MH07CkBAIC0yMDA1LDkgKzIwNjcsOSBAQAogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwogCiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXlfZGF0YS0+eCwga2V5X2RhdGEtPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkgKSApOwogCi0gICAgc3RhdHVzID0gcHNhX2FlYWRfZW5jcnlwdCggaGFuZGxlLCBleGVyY2lzZV9hbGcsCisgICAgc3RhdHVzID0gcHNhX2FlYWRfZW5jcnlwdCgga2V5LCBleGVyY2lzZV9hbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uY2UsIG5vbmNlX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCkBAIC0yMDIwLDcgKzIwODIsNyBAQAogICAgICAgICBURVNUX0VRVUFMKCBzdGF0dXMsIFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICk7CiAKICAgICBtZW1zZXQoIHRhZywgMCwgc2l6ZW9mKCB0YWcgKSApOwotICAgIHN0YXR1cyA9IHBzYV9hZWFkX2RlY3J5cHQoIGhhbmRsZSwgZXhlcmNpc2VfYWxnLAorICAgIHN0YXR1cyA9IHBzYV9hZWFkX2RlY3J5cHQoIGtleSwgZXhlcmNpc2VfYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmNlLCBub25jZV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcsIHRhZ19sZW5ndGgsCkBAIC0yMDMzLDcgKzIwOTUsNyBAQAogICAgICAgICBURVNUX0VRVUFMKCBzdGF0dXMsIFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICk7CiAKIGV4aXQ6Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogfQogLyogRU5EX0NBU0UgKi8KQEAgLTIwNDUsNyArMjEwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmtleV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4ZXJjaXNlX2FsZyApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwogICAgIHNpemVfdCBrZXlfYml0czsKQEAgLTIwNjAsMTUgKzIxMjIsMTUgQEAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywga2V5X3R5cGUgKTsKIAogICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2RhdGEtPngsIGtleV9kYXRhLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ICkgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmF0dHJpYnV0ZXMgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGtleSwgJmF0dHJpYnV0ZXMgKSApOwogICAgIGtleV9iaXRzID0gcHNhX2dldF9rZXlfYml0cyggJmF0dHJpYnV0ZXMgKTsKICAgICBidWZmZXJfbGVuZ3RoID0gUFNBX0FTWU1NRVRSSUNfRU5DUllQVF9PVVRQVVRfU0laRSgga2V5X3R5cGUsIGtleV9iaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVyY2lzZV9hbGcgKTsKICAgICBBU1NFUlRfQUxMT0MoIGJ1ZmZlciwgYnVmZmVyX2xlbmd0aCApOwogCi0gICAgc3RhdHVzID0gcHNhX2FzeW1tZXRyaWNfZW5jcnlwdCggaGFuZGxlLCBleGVyY2lzZV9hbGcsCisgICAgc3RhdHVzID0gcHNhX2FzeW1tZXRyaWNfZW5jcnlwdCgga2V5LCBleGVyY2lzZV9hbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmVyX2xlbmd0aCwKQEAgLTIwODEsNyArMjE0Myw3IEBACiAKICAgICBpZiggYnVmZmVyX2xlbmd0aCAhPSAwICkKICAgICAgICAgbWVtc2V0KCBidWZmZXIsIDAsIGJ1ZmZlcl9sZW5ndGggKTsKLSAgICBzdGF0dXMgPSBwc2FfYXN5bW1ldHJpY19kZWNyeXB0KCBoYW5kbGUsIGV4ZXJjaXNlX2FsZywKKyAgICBzdGF0dXMgPSBwc2FfYXN5bW1ldHJpY19kZWNyeXB0KCBrZXksIGV4ZXJjaXNlX2FsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGJ1ZmZlcl9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGJ1ZmZlcl9sZW5ndGgsCkBAIC0yMDkzLDggKzIxNTUsMTMgQEAKICAgICAgICAgVEVTVF9FUVVBTCggc3RhdHVzLCBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRCApOwogCiBleGl0OgotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgLyoKKyAgICAgKiBLZXkgYXR0cmlidXRlcyBtYXkgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoKQorICAgICAqIHRodXMgcmVzZXQgdGhlbSBhcyByZXF1aXJlZC4KKyAgICAgKi8KICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7CisKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogICAgIG1iZWR0bHNfZnJlZSggYnVmZmVyICk7CiB9CkBAIC0yMTA4LDcgKzIxNzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhlcmNpc2VfYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGF5bG9hZF9sZW5ndGhfYXJnICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAgICAgdW5zaWduZWQgY2hhciBwYXlsb2FkW1BTQV9IQVNIX01BWF9TSVpFXSA9IHsxfTsKQEAgLTIxMjgsOSArMjE5NSw5IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CiAKLSAgICBzdGF0dXMgPSBwc2Ffc2lnbl9oYXNoKCBoYW5kbGUsIGV4ZXJjaXNlX2FsZywKKyAgICBzdGF0dXMgPSBwc2Ffc2lnbl9oYXNoKCBrZXksIGV4ZXJjaXNlX2FsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLCBwYXlsb2FkX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpemVvZiggc2lnbmF0dXJlICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpZ25hdHVyZV9sZW5ndGggKTsKQEAgLTIxNDAsNyArMjIwNyw3IEBACiAgICAgICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQgKTsKIAogICAgIG1lbXNldCggc2lnbmF0dXJlLCAwLCBzaXplb2YoIHNpZ25hdHVyZSApICk7Ci0gICAgc3RhdHVzID0gcHNhX3ZlcmlmeV9oYXNoKCBoYW5kbGUsIGV4ZXJjaXNlX2FsZywKKyAgICBzdGF0dXMgPSBwc2FfdmVyaWZ5X2hhc2goIGtleSwgZXhlcmNpc2VfYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCwgcGF5bG9hZF9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpemVvZiggc2lnbmF0dXJlICkgKTsKICAgICBpZiggY29tcGF0aWJsZV9hbGcgJiYgKCBwb2xpY3lfdXNhZ2UgJiBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIICkgIT0gMCApCkBAIC0yMTQ5LDcgKzIyMTYsNyBAQAogICAgICAgICBURVNUX0VRVUFMKCBzdGF0dXMsIFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICk7CiAKIGV4aXQ6Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogfQogLyogRU5EX0NBU0UgKi8KQEAgLTIxNjEsNyArMjIyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmtleV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4ZXJjaXNlX2FsZyApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fb3BlcmF0aW9uX3Qgb3BlcmF0aW9uID0gUFNBX0tFWV9ERVJJVkFUSU9OX09QRVJBVElPTl9JTklUOwogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CkBAIC0yMTczLDcgKzIyNDAsNyBAQAogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwogCiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXlfZGF0YS0+eCwga2V5X2RhdGEtPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkgKSApOwogCiAgICAgUFNBX0FTU0VSVCggcHNhX2tleV9kZXJpdmF0aW9uX3NldHVwKCAmb3BlcmF0aW9uLCBleGVyY2lzZV9hbGcgKSApOwogCkBAIC0yMTg4LDcgKzIyNTUsNyBAQAogCiAgICAgc3RhdHVzID0gcHNhX2tleV9kZXJpdmF0aW9uX2lucHV0X2tleSggJm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfS0VZX0RFUklWQVRJT05fSU5QVVRfU0VDUkVULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSApOwogCiAgICAgaWYoIHBvbGljeV9hbGcgPT0gZXhlcmNpc2VfYWxnICYmCiAgICAgICAgICggcG9saWN5X3VzYWdlICYgUFNBX0tFWV9VU0FHRV9ERVJJVkUgKSAhPSAwICkKQEAgLTIxOTgsNyArMjI2NSw3IEBACiAKIGV4aXQ6CiAgICAgcHNhX2tleV9kZXJpdmF0aW9uX2Fib3J0KCAmb3BlcmF0aW9uICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogfQogLyogRU5EX0NBU0UgKi8KQEAgLTIyMDgsMTMgKzIyNzUsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb2xpY3lfYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleV90eXBlX2FyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhlcmNpc2VfYWxnICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleGVyY2lzZV9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfc3RhdHVzX2FyZyApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCBrZXlfdHlwZSA9IGtleV90eXBlX2FyZzsKICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fb3BlcmF0aW9uX3Qgb3BlcmF0aW9uID0gUFNBX0tFWV9ERVJJVkFUSU9OX09QRVJBVElPTl9JTklUOwogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CisgICAgcHNhX3N0YXR1c190IGV4cGVjdGVkX3N0YXR1cyA9IGV4cGVjdGVkX3N0YXR1c19hcmc7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKIApAQCAtMjIyMywyMCArMjI5MiwxNiBAQAogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwogCiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXlfZGF0YS0+eCwga2V5X2RhdGEtPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkgKSApOwogCiAgICAgUFNBX0FTU0VSVCggcHNhX2tleV9kZXJpdmF0aW9uX3NldHVwKCAmb3BlcmF0aW9uLCBleGVyY2lzZV9hbGcgKSApOwotICAgIHN0YXR1cyA9IGtleV9hZ3JlZW1lbnRfd2l0aF9zZWxmKCAmb3BlcmF0aW9uLCBoYW5kbGUgKTsKKyAgICBzdGF0dXMgPSBrZXlfYWdyZWVtZW50X3dpdGhfc2VsZiggJm9wZXJhdGlvbiwga2V5ICk7CiAKLSAgICBpZiggcG9saWN5X2FsZyA9PSBleGVyY2lzZV9hbGcgJiYKLSAgICAgICAgKCBwb2xpY3lfdXNhZ2UgJiBQU0FfS0VZX1VTQUdFX0RFUklWRSApICE9IDAgKQotICAgICAgICBQU0FfQVNTRVJUKCBzdGF0dXMgKTsKLSAgICBlbHNlCi0gICAgICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQgKTsKKyAgICBURVNUX0VRVUFMKCBzdGF0dXMsIGV4cGVjdGVkX3N0YXR1cyApOwogCiBleGl0OgogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9hYm9ydCggJm9wZXJhdGlvbiApOwotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KIC8qIEVORF9DQVNFICovCkBAIC0yMjQ1LDcgKzIzMTAsNyBAQAogdm9pZCBrZXlfcG9saWN5X2FsZzIoIGludCBrZXlfdHlwZV9hcmcsIGRhdGFfdCAqa2V5X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IHVzYWdlX2FyZywgaW50IGFsZ19hcmcsIGludCBhbGcyX2FyZyApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBnb3RfYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwpAQCAtMjI2MCwyMCArMjMyNSwyNiBAQAogICAgIHBzYV9zZXRfa2V5X2Vucm9sbG1lbnRfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnMiApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2RhdGEtPngsIGtleV9kYXRhLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ICkgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmdvdF9hdHRyaWJ1dGVzICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBrZXksICZnb3RfYXR0cmlidXRlcyApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdXNhZ2VfZmxhZ3MoICZnb3RfYXR0cmlidXRlcyApLCB1c2FnZSApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2FsZ29yaXRobSggJmdvdF9hdHRyaWJ1dGVzICksIGFsZyApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2Vucm9sbG1lbnRfYWxnb3JpdGhtKCAmZ290X2F0dHJpYnV0ZXMgKSwgYWxnMiApOwogCi0gICAgaWYoICEgZXhlcmNpc2Vfa2V5KCBoYW5kbGUsIHVzYWdlLCBhbGcgKSApCisgICAgaWYoICEgZXhlcmNpc2Vfa2V5KCBrZXksIHVzYWdlLCBhbGcgKSApCiAgICAgICAgIGdvdG8gZXhpdDsKLSAgICBpZiggISBleGVyY2lzZV9rZXkoIGhhbmRsZSwgdXNhZ2UsIGFsZzIgKSApCisgICAgaWYoICEgZXhlcmNpc2Vfa2V5KCBrZXksIHVzYWdlLCBhbGcyICkgKQogICAgICAgICBnb3RvIGV4aXQ7CiAKIGV4aXQ6Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICAvKgorICAgICAqIEtleSBhdHRyaWJ1dGVzIG1heSBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgcHNhX2dldF9rZXlfYXR0cmlidXRlcygpCisgICAgICogdGh1cyByZXNldCB0aGVtIGFzIHJlcXVpcmVkLgorICAgICAqLworICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmdvdF9hdHRyaWJ1dGVzICk7CisKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogfQogLyogRU5EX0NBU0UgKi8KQEAgLTIyODMsMTMgKzIzNTQsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9saWN5X2FsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X3R5cGVfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4ZXJjaXNlX2FsZyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4ZXJjaXNlX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfc3RhdHVzX2FyZyApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCBrZXlfdHlwZSA9IGtleV90eXBlX2FyZzsKICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fb3BlcmF0aW9uX3Qgb3BlcmF0aW9uID0gUFNBX0tFWV9ERVJJVkFUSU9OX09QRVJBVElPTl9JTklUOwogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CisgICAgcHNhX3N0YXR1c190IGV4cGVjdGVkX3N0YXR1cyA9IGV4cGVjdGVkX3N0YXR1c19hcmc7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKIApAQCAtMjI5OCwxOSArMjM3MSwxNSBAQAogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwogCiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXlfZGF0YS0+eCwga2V5X2RhdGEtPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkgKSApOwogCi0gICAgc3RhdHVzID0gcmF3X2tleV9hZ3JlZW1lbnRfd2l0aF9zZWxmKCBleGVyY2lzZV9hbGcsIGhhbmRsZSApOworICAgIHN0YXR1cyA9IHJhd19rZXlfYWdyZWVtZW50X3dpdGhfc2VsZiggZXhlcmNpc2VfYWxnLCBrZXkgKTsKIAotICAgIGlmKCBwb2xpY3lfYWxnID09IGV4ZXJjaXNlX2FsZyAmJgotICAgICAgICAoIHBvbGljeV91c2FnZSAmIFBTQV9LRVlfVVNBR0VfREVSSVZFICkgIT0gMCApCi0gICAgICAgIFBTQV9BU1NFUlQoIHN0YXR1cyApOwotICAgIGVsc2UKLSAgICAgICAgVEVTVF9FUVVBTCggc3RhdHVzLCBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRCApOworICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgZXhwZWN0ZWRfc3RhdHVzICk7CiAKIGV4aXQ6CiAgICAgcHNhX2tleV9kZXJpdmF0aW9uX2Fib3J0KCAmb3BlcmF0aW9uICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogfQogLyogRU5EX0NBU0UgKi8KQEAgLTIzMzAsOCArMjM5OSw4IEBACiAgICAgcHNhX2tleV91c2FnZV90IGV4cGVjdGVkX3VzYWdlID0gZXhwZWN0ZWRfdXNhZ2VfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBleHBlY3RlZF9hbGcgPSBleHBlY3RlZF9hbGdfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBleHBlY3RlZF9hbGcyID0gZXhwZWN0ZWRfYWxnMl9hcmc7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBzb3VyY2VfaGFuZGxlID0gMDsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IHRhcmdldF9oYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHNvdXJjZV9rZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCB0YXJnZXRfa2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgdWludDhfdCAqZXhwb3J0X2J1ZmZlciA9IE5VTEw7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKQEAgLTIzNDMsMTIgKzI0MTIsMTcgQEAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmc291cmNlX2F0dHJpYnV0ZXMsIHR5cGVfYXJnICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZzb3VyY2VfYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwtPngsIG1hdGVyaWFsLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzb3VyY2VfaGFuZGxlICkgKTsKLSAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBzb3VyY2VfaGFuZGxlLCAmc291cmNlX2F0dHJpYnV0ZXMgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc291cmNlX2tleSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggc291cmNlX2tleSwgJnNvdXJjZV9hdHRyaWJ1dGVzICkgKTsKIAogICAgIC8qIFByZXBhcmUgdGhlIHRhcmdldCBhdHRyaWJ1dGVzLiAqLwogICAgIGlmKCBjb3B5X2F0dHJpYnV0ZXMgKQorICAgIHsKICAgICAgICAgdGFyZ2V0X2F0dHJpYnV0ZXMgPSBzb3VyY2VfYXR0cmlidXRlczsKKyAgICAgICAgLyogU2V0IHZvbGF0aWxlIGxpZmV0aW1lIHRvIHJlc2V0IHRoZSBrZXkgaWRlbnRpZmllciB0byAwLiAqLworICAgICAgICBwc2Ffc2V0X2tleV9saWZldGltZSggJnRhcmdldF9hdHRyaWJ1dGVzLCBQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFICk7CisgICAgfQorCiAgICAgaWYoIHRhcmdldF91c2FnZV9hcmcgIT0gLTEgKQogICAgICAgICBwc2Ffc2V0X2tleV91c2FnZV9mbGFncyggJnRhcmdldF9hdHRyaWJ1dGVzLCB0YXJnZXRfdXNhZ2VfYXJnICk7CiAgICAgaWYoIHRhcmdldF9hbGdfYXJnICE9IC0xICkKQEAgLTIzNTcsMTQgKzI0MzEsMTQgQEAKICAgICAgICAgcHNhX3NldF9rZXlfZW5yb2xsbWVudF9hbGdvcml0aG0oICZ0YXJnZXRfYXR0cmlidXRlcywgdGFyZ2V0X2FsZzJfYXJnICk7CiAKICAgICAvKiBDb3B5IHRoZSBrZXkuICovCi0gICAgUFNBX0FTU0VSVCggcHNhX2NvcHlfa2V5KCBzb3VyY2VfaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhcmdldF9hdHRyaWJ1dGVzLCAmdGFyZ2V0X2hhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2NvcHlfa2V5KCBzb3VyY2Vfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhcmdldF9hdHRyaWJ1dGVzLCAmdGFyZ2V0X2tleSApICk7CiAKICAgICAvKiBEZXN0cm95IHRoZSBzb3VyY2UgdG8gZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IGFmZmVjdCB0aGUgdGFyZ2V0LiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggc291cmNlX2hhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBzb3VyY2Vfa2V5ICkgKTsKIAogICAgIC8qIFRlc3QgdGhhdCB0aGUgdGFyZ2V0IHNsb3QgaGFzIHRoZSBleHBlY3RlZCBjb250ZW50IGFuZCBwb2xpY3kuICovCi0gICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggdGFyZ2V0X2hhbmRsZSwgJnRhcmdldF9hdHRyaWJ1dGVzICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCB0YXJnZXRfa2V5LCAmdGFyZ2V0X2F0dHJpYnV0ZXMgKSApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X3R5cGUoICZzb3VyY2VfYXR0cmlidXRlcyApLAogICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X3R5cGUoICZ0YXJnZXRfYXR0cmlidXRlcyApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfYml0cyggJnNvdXJjZV9hdHRyaWJ1dGVzICksCkBAIC0yMzc3LDIxICsyNDUxLDI2IEBACiAgICAgewogICAgICAgICBzaXplX3QgbGVuZ3RoOwogICAgICAgICBBU1NFUlRfQUxMT0MoIGV4cG9ydF9idWZmZXIsIG1hdGVyaWFsLT5sZW4gKTsKLSAgICAgICAgUFNBX0FTU0VSVCggcHNhX2V4cG9ydF9rZXkoIHRhcmdldF9oYW5kbGUsIGV4cG9ydF9idWZmZXIsCisgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9leHBvcnRfa2V5KCB0YXJnZXRfa2V5LCBleHBvcnRfYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwtPmxlbiwgJmxlbmd0aCApICk7CiAgICAgICAgIEFTU0VSVF9DT01QQVJFKCBtYXRlcmlhbC0+eCwgbWF0ZXJpYWwtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydF9idWZmZXIsIGxlbmd0aCApOwogICAgIH0KLSAgICBpZiggISBleGVyY2lzZV9rZXkoIHRhcmdldF9oYW5kbGUsIGV4cGVjdGVkX3VzYWdlLCBleHBlY3RlZF9hbGcgKSApCisgICAgaWYoICEgZXhlcmNpc2Vfa2V5KCB0YXJnZXRfa2V5LCBleHBlY3RlZF91c2FnZSwgZXhwZWN0ZWRfYWxnICkgKQogICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgaWYoICEgZXhlcmNpc2Vfa2V5KCB0YXJnZXRfaGFuZGxlLCBleHBlY3RlZF91c2FnZSwgZXhwZWN0ZWRfYWxnMiApICkKKyAgICBpZiggISBleGVyY2lzZV9rZXkoIHRhcmdldF9rZXksIGV4cGVjdGVkX3VzYWdlLCBleHBlY3RlZF9hbGcyICkgKQogICAgICAgICBnb3RvIGV4aXQ7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfY2xvc2Vfa2V5KCB0YXJnZXRfaGFuZGxlICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIHRhcmdldF9rZXkgKSApOwogCiBleGl0OgorICAgIC8qCisgICAgICogU291cmNlIGFuZCB0YXJnZXQga2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieQorICAgICAqIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoKSB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmc291cmNlX2F0dHJpYnV0ZXMgKTsKICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZ0YXJnZXRfYXR0cmlidXRlcyApOworCiAgICAgUFNBX0RPTkUoICk7CiAgICAgbWJlZHRsc19mcmVlKCBleHBvcnRfYnVmZmVyICk7CiB9CkBAIC0yNDA4LDggKzI0ODcsOCBAQAogewogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IHNvdXJjZV9hdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgdGFyZ2V0X2F0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IHNvdXJjZV9oYW5kbGUgPSAwOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgdGFyZ2V0X2hhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qgc291cmNlX2tleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHRhcmdldF9rZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKIAogICAgIFBTQV9BU1NFUlQoIHBzYV9jcnlwdG9faW5pdCggKSApOwogCkBAIC0yNDIwLDcgKzI0OTksNyBAQAogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZzb3VyY2VfYXR0cmlidXRlcywgdHlwZV9hcmcgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJnNvdXJjZV9hdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC0+eCwgbWF0ZXJpYWwtPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNvdXJjZV9oYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc291cmNlX2tleSApICk7CiAKICAgICAvKiBQcmVwYXJlIHRoZSB0YXJnZXQgYXR0cmlidXRlcy4gKi8KICAgICBwc2Ffc2V0X2tleV90eXBlKCAmdGFyZ2V0X2F0dHJpYnV0ZXMsIHRhcmdldF90eXBlX2FyZyApOwpAQCAtMjQzMCwxMSArMjUwOSwxMSBAQAogICAgIHBzYV9zZXRfa2V5X2Vucm9sbG1lbnRfYWxnb3JpdGhtKCAmdGFyZ2V0X2F0dHJpYnV0ZXMsIHRhcmdldF9hbGcyX2FyZyApOwogCiAgICAgLyogVHJ5IHRvIGNvcHkgdGhlIGtleS4gKi8KLSAgICBURVNUX0VRVUFMKCBwc2FfY29weV9rZXkoIHNvdXJjZV9oYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFyZ2V0X2F0dHJpYnV0ZXMsICZ0YXJnZXRfaGFuZGxlICksCisgICAgVEVTVF9FUVVBTCggcHNhX2NvcHlfa2V5KCBzb3VyY2Vfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhcmdldF9hdHRyaWJ1dGVzLCAmdGFyZ2V0X2tleSApLAogICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1c19hcmcgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggc291cmNlX2hhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBzb3VyY2Vfa2V5ICkgKTsKIAogZXhpdDoKICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZzb3VyY2VfYXR0cmlidXRlcyApOwpAQCAtMjkxMywxMCArMjk5MiwxMCBAQAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBtYWNfYmFkX29yZGVyKCApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0gUFNBX0tFWV9UWVBFX0hNQUM7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IFBTQV9BTEdfSE1BQyhQU0FfQUxHX1NIQV8yNTYpOwotICAgIGNvbnN0IHVpbnQ4X3Qga2V5W10gPSB7CisgICAgY29uc3QgdWludDhfdCBrZXlfZGF0YVtdID0gewogICAgICAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAogICAgICAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAogICAgICAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhIH07CkBAIC0yOTM1LDcgKzMwMTQsOCBAQAogICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIGFsZyApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXksIHNpemVvZigga2V5ICksICZoYW5kbGUgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2RhdGEsIHNpemVvZigga2V5X2RhdGEgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CiAKICAgICAvKiBDYWxsIHVwZGF0ZSB3aXRob3V0IGNhbGxpbmcgc2V0dXAgYmVmb3JlaGFuZC4gKi8KICAgICBURVNUX0VRVUFMKCBwc2FfbWFjX3VwZGF0ZSggJm9wZXJhdGlvbiwgaW5wdXQsIHNpemVvZiggaW5wdXQgKSApLApAQCAtMjk1NSwxNiArMzAzNSwxMyBAQAogICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfYWJvcnQoICZvcGVyYXRpb24gKSApOwogCiAgICAgLyogQ2FsbCBzZXR1cCB0d2ljZSBpbiBhIHJvdy4gKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3NpZ25fc2V0dXAoICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFsZyApICk7Ci0gICAgVEVTVF9FUVVBTCggcHNhX21hY19zaWduX3NldHVwKCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSwKKyAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3NpZ25fc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICkgKTsKKyAgICBURVNUX0VRVUFMKCBwc2FfbWFjX3NpZ25fc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICksCiAgICAgICAgICAgICAgICAgUFNBX0VSUk9SX0JBRF9TVEFURSApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfYWJvcnQoICZvcGVyYXRpb24gKSApOwogCiAgICAgLyogQ2FsbCB1cGRhdGUgYWZ0ZXIgc2lnbiBmaW5pc2guICovCi0gICAgUFNBX0FTU0VSVCggcHNhX21hY19zaWduX3NldHVwKCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfc2lnbl9zZXR1cCggJm9wZXJhdGlvbiwga2V5LCBhbGcgKSApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfdXBkYXRlKCAmb3BlcmF0aW9uLCBpbnB1dCwgc2l6ZW9mKCBpbnB1dCApICkgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3NpZ25fZmluaXNoKCAmb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25fbWFjLCBzaXplb2YoIHNpZ25fbWFjICksCkBAIC0yOTc0LDggKzMwNTEsNyBAQAogICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfYWJvcnQoICZvcGVyYXRpb24gKSApOwogCiAgICAgLyogQ2FsbCB1cGRhdGUgYWZ0ZXIgdmVyaWZ5IGZpbmlzaC4gKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3ZlcmlmeV9zZXR1cCggJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfdmVyaWZ5X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX21hY191cGRhdGUoICZvcGVyYXRpb24sIGlucHV0LCBzaXplb2YoIGlucHV0ICkgKSApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfdmVyaWZ5X2ZpbmlzaCggJm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmeV9tYWMsIHNpemVvZiggdmVyaWZ5X21hYyApICkgKTsKQEAgLTI5ODQsOCArMzA2MCw3IEBACiAgICAgUFNBX0FTU0VSVCggcHNhX21hY19hYm9ydCggJm9wZXJhdGlvbiApICk7CiAKICAgICAvKiBDYWxsIHNpZ24gZmluaXNoIHR3aWNlIGluIGEgcm93LiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfc2lnbl9zZXR1cCggJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYWxnICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3NpZ25fc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICkgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3VwZGF0ZSggJm9wZXJhdGlvbiwgaW5wdXQsIHNpemVvZiggaW5wdXQgKSApICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX21hY19zaWduX2ZpbmlzaCggJm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduX21hYywgc2l6ZW9mKCBzaWduX21hYyApLApAQCAtMjk5Nyw4ICszMDcyLDcgQEAKICAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX2Fib3J0KCAmb3BlcmF0aW9uICkgKTsKIAogICAgIC8qIENhbGwgdmVyaWZ5IGZpbmlzaCB0d2ljZSBpbiBhIHJvdy4gKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3ZlcmlmeV9zZXR1cCggJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfdmVyaWZ5X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX21hY191cGRhdGUoICZvcGVyYXRpb24sIGlucHV0LCBzaXplb2YoIGlucHV0ICkgKSApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfdmVyaWZ5X2ZpbmlzaCggJm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmeV9tYWMsIHNpemVvZiggdmVyaWZ5X21hYyApICkgKTsKQEAgLTMwMDgsOCArMzA4Miw3IEBACiAgICAgUFNBX0FTU0VSVCggcHNhX21hY19hYm9ydCggJm9wZXJhdGlvbiApICk7CiAKICAgICAvKiBTZXR1cCBzaWduIGJ1dCB0cnkgdmVyaWZ5LiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfc2lnbl9zZXR1cCggJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYWxnICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3NpZ25fc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICkgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3VwZGF0ZSggJm9wZXJhdGlvbiwgaW5wdXQsIHNpemVvZiggaW5wdXQgKSApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX21hY192ZXJpZnlfZmluaXNoKCAmb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyaWZ5X21hYywgc2l6ZW9mKCB2ZXJpZnlfbWFjICkgKSwKQEAgLTMwMTcsOCArMzA5MCw3IEBACiAgICAgUFNBX0FTU0VSVCggcHNhX21hY19hYm9ydCggJm9wZXJhdGlvbiApICk7CiAKICAgICAvKiBTZXR1cCB2ZXJpZnkgYnV0IHRyeSBzaWduLiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfdmVyaWZ5X3NldHVwKCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFsZyApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX21hY192ZXJpZnlfc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICkgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3VwZGF0ZSggJm9wZXJhdGlvbiwgaW5wdXQsIHNpemVvZiggaW5wdXQgKSApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX21hY19zaWduX2ZpbmlzaCggJm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduX21hYywgc2l6ZW9mKCBzaWduX21hYyApLApAQCAtMzAyNiw3ICszMDk4LDcgQEAKICAgICAgICAgICAgICAgICBQU0FfRVJST1JfQkFEX1NUQVRFICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX21hY19hYm9ydCggJm9wZXJhdGlvbiApICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKSApOwogCiBleGl0OgogICAgIFBTQV9ET05FKCApOwpAQCAtMzAzNSwxOSArMzEwNywxOSBAQAogCiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIG1hY19zaWduKCBpbnQga2V5X3R5cGVfYXJnLAotICAgICAgICAgICAgICAgZGF0YV90ICprZXksCisgICAgICAgICAgICAgICBkYXRhX3QgKmtleV9kYXRhLAogICAgICAgICAgICAgICAgaW50IGFsZ19hcmcsCiAgICAgICAgICAgICAgICBkYXRhX3QgKmlucHV0LAogICAgICAgICAgICAgICAgZGF0YV90ICpleHBlY3RlZF9tYWMgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCBrZXlfdHlwZSA9IGtleV90eXBlX2FyZzsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gYWxnX2FyZzsKICAgICBwc2FfbWFjX29wZXJhdGlvbl90IG9wZXJhdGlvbiA9IFBTQV9NQUNfT1BFUkFUSU9OX0lOSVQ7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIHVpbnQ4X3QgKmFjdHVhbF9tYWMgPSBOVUxMOwogICAgIHNpemVfdCBtYWNfYnVmZmVyX3NpemUgPQotICAgICAgICBQU0FfTUFDX0ZJTkFMX1NJWkUoIGtleV90eXBlLCBQU0FfQllURVNfVE9fQklUUygga2V5LT5sZW4gKSwgYWxnICk7CisgICAgICAgIFBTQV9NQUNfRklOQUxfU0laRSgga2V5X3R5cGUsIFBTQV9CWVRFU19UT19CSVRTKCBrZXlfZGF0YS0+bGVuICksIGFsZyApOwogICAgIHNpemVfdCBtYWNfbGVuZ3RoID0gMDsKICAgICBjb25zdCBzaXplX3Qgb3V0cHV0X3NpemVzX3RvX3Rlc3RbXSA9IHsKICAgICAgICAgMCwKQEAgLTMwNjcsNyArMzEzOSw4IEBACiAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnICk7CiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleS0+eCwga2V5LT5sZW4sICZoYW5kbGUgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2RhdGEtPngsIGtleV9kYXRhLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkgKSApOwogCiAgICAgZm9yKCBzaXplX3QgaSA9IDA7IGkgPCBBUlJBWV9MRU5HVEgoIG91dHB1dF9zaXplc190b190ZXN0ICk7IGkrKyApCiAgICAgewpAQCAtMzA4MCw4ICszMTUzLDcgQEAKICAgICAgICAgQVNTRVJUX0FMTE9DKCBhY3R1YWxfbWFjLCBvdXRwdXRfc2l6ZSApOwogCiAgICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgTUFDLiAqLwotICAgICAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3NpZ25fc2V0dXAoICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOworICAgICAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3NpZ25fc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICkgKTsKICAgICAgICAgUFNBX0FTU0VSVCggcHNhX21hY191cGRhdGUoICZvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC0+eCwgaW5wdXQtPmxlbiApICk7CiAgICAgICAgIFRFU1RfRVFVQUwoIHBzYV9tYWNfc2lnbl9maW5pc2goICZvcGVyYXRpb24sCkBAIC0zMTAxLDcgKzMxNzMsNyBAQAogCiBleGl0OgogICAgIHBzYV9tYWNfYWJvcnQoICZvcGVyYXRpb24gKTsKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgUFNBX0RPTkUoICk7CiAgICAgbWJlZHRsc19mcmVlKCBhY3R1YWxfbWFjICk7CiB9CkBAIC0zMTA5LDEyICszMTgxLDEyIEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgbWFjX3ZlcmlmeSggaW50IGtleV90eXBlX2FyZywKLSAgICAgICAgICAgICAgICAgZGF0YV90ICprZXksCisgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5X2RhdGEsCiAgICAgICAgICAgICAgICAgIGludCBhbGdfYXJnLAogICAgICAgICAgICAgICAgICBkYXRhX3QgKmlucHV0LAogICAgICAgICAgICAgICAgICBkYXRhX3QgKmV4cGVjdGVkX21hYyApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHBzYV9tYWNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uID0gUFNBX01BQ19PUEVSQVRJT05fSU5JVDsKQEAgLTMxMjksMTEgKzMyMDEsMTEgQEAKICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCBhbGcgKTsKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywga2V5X3R5cGUgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5LT54LCBrZXktPmxlbiwgJmhhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXlfZGF0YS0+eCwga2V5X2RhdGEtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CiAKICAgICAvKiBUZXN0IHRoZSBjb3JyZWN0IE1BQy4gKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3ZlcmlmeV9zZXR1cCggJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfdmVyaWZ5X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX21hY191cGRhdGUoICZvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LT54LCBpbnB1dC0+bGVuICkgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3ZlcmlmeV9maW5pc2goICZvcGVyYXRpb24sCkBAIC0zMTQxLDggKzMyMTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbWFjLT5sZW4gKSApOwogCiAgICAgLyogVGVzdCBhIE1BQyB0aGF0J3MgdG9vIHNob3J0LiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfdmVyaWZ5X3NldHVwKCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFsZyApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX21hY192ZXJpZnlfc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICkgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3VwZGF0ZSggJm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQtPngsIGlucHV0LT5sZW4gKSApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9tYWNfdmVyaWZ5X2ZpbmlzaCggJm9wZXJhdGlvbiwKQEAgLTMxNTMsOCArMzIyNCw3IEBACiAgICAgLyogVGVzdCBhIE1BQyB0aGF0J3MgdG9vIGxvbmcuICovCiAgICAgQVNTRVJUX0FMTE9DKCBwZXJ0dXJiZWRfbWFjLCBleHBlY3RlZF9tYWMtPmxlbiArIDEgKTsKICAgICBtZW1jcHkoIHBlcnR1cmJlZF9tYWMsIGV4cGVjdGVkX21hYy0+eCwgZXhwZWN0ZWRfbWFjLT5sZW4gKTsKLSAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3ZlcmlmeV9zZXR1cCggJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfdmVyaWZ5X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX21hY191cGRhdGUoICZvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LT54LCBpbnB1dC0+bGVuICkgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfbWFjX3ZlcmlmeV9maW5pc2goICZvcGVyYXRpb24sCkBAIC0zMTY3LDggKzMyMzcsNyBAQAogICAgIHsKICAgICAgICAgdGVzdF9zZXRfc3RlcCggaSApOwogICAgICAgICBwZXJ0dXJiZWRfbWFjW2ldIF49IDE7Ci0gICAgICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfdmVyaWZ5X3NldHVwKCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOworICAgICAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3ZlcmlmeV9zZXR1cCggJm9wZXJhdGlvbiwga2V5LCBhbGcgKSApOwogICAgICAgICBQU0FfQVNTRVJUKCBwc2FfbWFjX3VwZGF0ZSggJm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LT54LCBpbnB1dC0+bGVuICkgKTsKICAgICAgICAgVEVTVF9FUVVBTCggcHNhX21hY192ZXJpZnlfZmluaXNoKCAmb3BlcmF0aW9uLApAQCAtMzE4MCw3ICszMjQ5LDcgQEAKIAogZXhpdDoKICAgICBwc2FfbWFjX2Fib3J0KCAmb3BlcmF0aW9uICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogICAgIG1iZWR0bHNfZnJlZSggcGVydHVyYmVkX21hYyApOwogfQpAQCAtMzI2OCwxMyArMzMzNywxMyBAQAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBjaXBoZXJfYmFkX29yZGVyKCApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0gUFNBX0tFWV9UWVBFX0FFUzsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gUFNBX0FMR19DQkNfUEtDUzc7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uID0gUFNBX0NJUEhFUl9PUEVSQVRJT05fSU5JVDsKICAgICB1bnNpZ25lZCBjaGFyIGl2W1BTQV9CTE9DS19DSVBIRVJfQkxPQ0tfU0laRShQU0FfS0VZX1RZUEVfQUVTKV0gPSB7IDAgfTsKLSAgICBjb25zdCB1aW50OF90IGtleVtdID0geworICAgIGNvbnN0IHVpbnQ4X3Qga2V5X2RhdGFbXSA9IHsKICAgICAgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKICAgICAgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSB9OwogICAgIGNvbnN0IHVpbnQ4X3QgdGV4dFtdID0gewpAQCAtMzI4NywxOCArMzM1NiwxOCBAQAogICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywgUFNBX0tFWV9VU0FHRV9FTkNSWVBUIHwgUFNBX0tFWV9VU0FHRV9ERUNSWVBUICk7CiAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnICk7CiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7Ci0gICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXksIHNpemVvZigga2V5ICksICZoYW5kbGUgKSApOwotCisgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXlfZGF0YSwgc2l6ZW9mKCBrZXlfZGF0YSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ICkgKTsKIAogICAgIC8qIENhbGwgZW5jcnlwdCBzZXR1cCB0d2ljZSBpbiBhIHJvdy4gKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGhhbmRsZSwgYWxnICkgKTsKLSAgICBURVNUX0VRVUFMKCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGhhbmRsZSwgYWxnICksCisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApICk7CisgICAgVEVTVF9FUVVBTCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApLAogICAgICAgICAgICAgICAgIFBTQV9FUlJPUl9CQURfU1RBVEUgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICkgKTsKIAogICAgIC8qIENhbGwgZGVjcnlwdCBzZXR1cCB0d2ljZSBpbiBhIHJvdy4gKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGhhbmRsZSwgYWxnICkgKTsKLSAgICBURVNUX0VRVUFMKCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGhhbmRsZSwgYWxnICksCisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApICk7CisgICAgVEVTVF9FUVVBTCggcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApLAogICAgICAgICAgICAgICAgIFBTQV9FUlJPUl9CQURfU1RBVEUgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICkgKTsKIApAQCAtMzMxMCw3ICszMzc5LDcgQEAKICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICkgKTsKIAogICAgIC8qIEdlbmVyYXRlIGFuIElWIHR3aWNlIGluIGEgcm93LiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwgaGFuZGxlLCBhbGcgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwga2V5LCBhbGcgKSApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZ2VuZXJhdGVfaXYoICZvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBzaXplb2YoIGJ1ZmZlciApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW5ndGggKSApOwpAQCAtMzMyMSw3ICszMzkwLDcgQEAKICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICkgKTsKIAogICAgIC8qIEdlbmVyYXRlIGFuIElWIGFmdGVyIGl0J3MgYWxyZWFkeSBzZXQuICovCi0gICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBoYW5kbGUsIGFsZyApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LCBzaXplb2YoIGl2ICkgKSApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9jaXBoZXJfZ2VuZXJhdGVfaXYoICZvcGVyYXRpb24sCkBAIC0zMzM3LDcgKzM0MDYsNyBAQAogICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfYWJvcnQoICZvcGVyYXRpb24gKSApOwogCiAgICAgLyogU2V0IGFuIElWIGFmdGVyIGl0J3MgYWxyZWFkeSBzZXQuICovCi0gICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBoYW5kbGUsIGFsZyApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LCBzaXplb2YoIGl2ICkgKSApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9jaXBoZXJfc2V0X2l2KCAmb3BlcmF0aW9uLApAQCAtMzM0Niw3ICszNDE1LDcgQEAKICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICkgKTsKIAogICAgIC8qIFNldCBhbiBJViBhZnRlciBpdCdzIGFscmVhZHkgZ2VuZXJhdGVkLiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwgaGFuZGxlLCBhbGcgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwga2V5LCBhbGcgKSApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZ2VuZXJhdGVfaXYoICZvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBzaXplb2YoIGJ1ZmZlciApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW5ndGggKSApOwpAQCAtMzM3Miw3ICszNDQxLDcgQEAKICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICkgKTsKIAogICAgIC8qIENhbGwgdXBkYXRlIGFmdGVyIGZpbmlzaC4gKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGhhbmRsZSwgYWxnICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICkgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX3NldF9pdiggJm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXYsIHNpemVvZiggaXYgKSApICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9maW5pc2goICZvcGVyYXRpb24sCkBAIC0zMzkxLDcgKzM0NjAsNyBAQAogICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfYWJvcnQoICZvcGVyYXRpb24gKSApOwogCiAgICAgLyogQ2FsbCBmaW5pc2ggd2l0aG91dCBhbiBJViB3aGVyZSBhbiBJViBpcyByZXF1aXJlZC4gKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGhhbmRsZSwgYWxnICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICkgKTsKICAgICAvKiBOb3QgY2FsbGluZyB1cGRhdGUgbWVhbnMgd2UgYXJlIGVuY3J5cHRpbmcgYW4gZW1wdHkgYnVmZmVyLCB3aGljaCBpcyBPSwogICAgICAqIGZvciBjaXBoZXIgbW9kZXMgd2l0aCBwYWRkaW5nLiAqLwogICAgIFRFU1RfRVFVQUwoIHBzYV9jaXBoZXJfZmluaXNoKCAmb3BlcmF0aW9uLApAQCAtMzQwMCw3ICszNDY5LDcgQEAKICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICkgKTsKIAogICAgIC8qIENhbGwgZmluaXNoIHR3aWNlIGluIGEgcm93LiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwgaGFuZGxlLCBhbGcgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwga2V5LCBhbGcgKSApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfc2V0X2l2KCAmb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwgc2l6ZW9mKCBpdiApICkgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2ZpbmlzaCggJm9wZXJhdGlvbiwKQEAgLTM0MTAsNyArMzQ3OSw3IEBACiAgICAgICAgICAgICAgICAgUFNBX0VSUk9SX0JBRF9TVEFURSApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfYWJvcnQoICZvcGVyYXRpb24gKSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSgga2V5ICkgKTsKIAogZXhpdDoKICAgICBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICk7CkBAIC0zNDIwLDExICszNDg5LDExIEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgY2lwaGVyX2VuY3J5cHQoIGludCBhbGdfYXJnLCBpbnQga2V5X3R5cGVfYXJnLAotICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICprZXksIGRhdGFfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmtleV9kYXRhLCBkYXRhX3QgKml2LAogICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICppbnB1dCwgZGF0YV90ICpleHBlY3RlZF9vdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfc3RhdHVzX2FyZyApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAgICAgcHNhX2tleV90eXBlX3Qga2V5X3R5cGUgPSBrZXlfdHlwZV9hcmc7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IGFsZ19hcmc7CkBAIC0zNDQyLDEwICszNTExLDEwIEBACiAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnICk7CiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleS0+eCwga2V5LT5sZW4sICZoYW5kbGUgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2RhdGEtPngsIGtleV9kYXRhLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkgKSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwga2V5LCBhbGcgKSApOwogCiAgICAgaWYoIGl2LT5sZW4gPiAwICkKICAgICB7CkBAIC0zNDc4LDIwICszNTQ3LDIwIEBACiBleGl0OgogICAgIHBzYV9jaXBoZXJfYWJvcnQoICZvcGVyYXRpb24gKTsKICAgICBtYmVkdGxzX2ZyZWUoIG91dHB1dCApOwotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgY2lwaGVyX2VuY3J5cHRfbXVsdGlwYXJ0KCBpbnQgYWxnX2FyZywgaW50IGtleV90eXBlX2FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmtleSwgZGF0YV90ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmtleV9kYXRhLCBkYXRhX3QgKml2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpcnN0X3BhcnRfc2l6ZV9hcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG91dHB1dDFfbGVuZ3RoX2FyZywgaW50IG91dHB1dDJfbGVuZ3RoX2FyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmV4cGVjdGVkX291dHB1dCApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHNpemVfdCBmaXJzdF9wYXJ0X3NpemUgPSBmaXJzdF9wYXJ0X3NpemVfYXJnOwpAQCAtMzUxMCwxMCArMzU3OSwxMCBAQAogICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIGFsZyApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXktPngsIGtleS0+bGVuLCAmaGFuZGxlICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ICkgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYWxnICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICkgKTsKIAogICAgIGlmKCBpdi0+bGVuID4gMCApCiAgICAgewpAQCAtMzU1MSwyMSArMzYyMCwyMCBAQAogZXhpdDoKICAgICBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICk7CiAgICAgbWJlZHRsc19mcmVlKCBvdXRwdXQgKTsKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgUFNBX0RPTkUoICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIGNpcGhlcl9kZWNyeXB0X211bHRpcGFydCggaW50IGFsZ19hcmcsIGludCBrZXlfdHlwZV9hcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICprZXksIGRhdGFfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICprZXlfZGF0YSwgZGF0YV90ICppdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaXJzdF9wYXJ0X3NpemVfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvdXRwdXQxX2xlbmd0aF9hcmcsIGludCBvdXRwdXQyX2xlbmd0aF9hcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpleHBlY3RlZF9vdXRwdXQgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKLQorICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHNpemVfdCBmaXJzdF9wYXJ0X3NpemUgPSBmaXJzdF9wYXJ0X3NpemVfYXJnOwpAQCAtMzU4NCwxMCArMzY1MiwxMCBAQAogICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIGFsZyApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXktPngsIGtleS0+bGVuLCAmaGFuZGxlICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ICkgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYWxnICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICkgKTsKIAogICAgIGlmKCBpdi0+bGVuID4gMCApCiAgICAgewpAQCAtMzYyNiwxOCArMzY5NCwxOCBAQAogZXhpdDoKICAgICBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICk7CiAgICAgbWJlZHRsc19mcmVlKCBvdXRwdXQgKTsKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgUFNBX0RPTkUoICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIGNpcGhlcl9kZWNyeXB0KCBpbnQgYWxnX2FyZywgaW50IGtleV90eXBlX2FyZywKLSAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5LCBkYXRhX3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICprZXlfZGF0YSwgZGF0YV90ICppdiwKICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqaW5wdXQsIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX3N0YXR1c19hcmcgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwpAQCAtMzY1NSwxMCArMzcyMywxMCBAQAogICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIGFsZyApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXktPngsIGtleS0+bGVuLCAmaGFuZGxlICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ICkgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYWxnICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICkgKTsKIAogICAgIGlmKCBpdi0+bGVuID4gMCApCiAgICAgewpAQCAtMzY5MSwxNyArMzc1OSwxNyBAQAogZXhpdDoKICAgICBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICk7CiAgICAgbWJlZHRsc19mcmVlKCBvdXRwdXQgKTsKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgUFNBX0RPTkUoICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIGNpcGhlcl92ZXJpZnlfb3V0cHV0KCBpbnQgYWxnX2FyZywgaW50IGtleV90eXBlX2FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICprZXlfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqaW5wdXQgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCBrZXlfdHlwZSA9IGtleV90eXBlX2FyZzsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gYWxnX2FyZzsKICAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XSA9IHswfTsKQEAgLTM3MjQsMTIgKzM3OTIsMTEgQEAKICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCBhbGcgKTsKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywga2V5X3R5cGUgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5LT54LCBrZXktPmxlbiwgJmhhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXlfZGF0YS0+eCwga2V5X2RhdGEtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOwotICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCggJm9wZXJhdGlvbjIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFsZyApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uMSwga2V5LCBhbGcgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCggJm9wZXJhdGlvbjIsIGtleSwgYWxnICkgKTsKIAogICAgIGlmKCBhbGcgIT0gUFNBX0FMR19FQ0JfTk9fUEFERElORyApCiAgICAgewpAQCAtMzc4Miw3ICszODQ5LDcgQEAKICAgICBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uMiApOwogICAgIG1iZWR0bHNfZnJlZSggb3V0cHV0MSApOwogICAgIG1iZWR0bHNfZnJlZSggb3V0cHV0MiApOwotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KIC8qIEVORF9DQVNFICovCkBAIC0zNzkwLDExICszODU3LDExIEBACiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIGNpcGhlcl92ZXJpZnlfb3V0cHV0X211bHRpcGFydCggaW50IGFsZ19hcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleV90eXBlX2FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmtleV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpcnN0X3BhcnRfc2l6ZV9hcmcgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCBrZXlfdHlwZSA9IGtleV90eXBlX2FyZzsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gYWxnX2FyZzsKICAgICBzaXplX3QgZmlyc3RfcGFydF9zaXplID0gZmlyc3RfcGFydF9zaXplX2FyZzsKQEAgLTM4MTgsMTIgKzM4ODUsMTEgQEAKICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCBhbGcgKTsKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywga2V5X3R5cGUgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5LT54LCBrZXktPmxlbiwgJmhhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXlfZGF0YS0+eCwga2V5X2RhdGEtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOwotICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCggJm9wZXJhdGlvbjIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFsZyApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uMSwga2V5LCBhbGcgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCggJm9wZXJhdGlvbjIsIGtleSwgYWxnICkgKTsKIAogICAgIGlmKCBhbGcgIT0gUFNBX0FMR19FQ0JfTk9fUEFERElORyApCiAgICAgewpAQCAtMzg5NCw3ICszOTYwLDcgQEAKICAgICBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uMiApOwogICAgIG1iZWR0bHNfZnJlZSggb3V0cHV0MSApOwogICAgIG1iZWR0bHNfZnJlZSggb3V0cHV0MiApOwotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KIC8qIEVORF9DQVNFICovCkBAIC0zOTA3LDcgKzM5NzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICppbnB1dF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX3Jlc3VsdF9hcmcgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCBrZXlfdHlwZSA9IGtleV90eXBlX2FyZzsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gYWxnX2FyZzsKICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXRfZGF0YSA9IE5VTEw7CkBAIC0zOTM0LDkgKzQwMDAsOSBAQAogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwogCiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXlfZGF0YS0+eCwga2V5X2RhdGEtPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkgKSApOwogCi0gICAgVEVTVF9FUVVBTCggcHNhX2FlYWRfZW5jcnlwdCggaGFuZGxlLCBhbGcsCisgICAgVEVTVF9FUVVBTCggcHNhX2FlYWRfZW5jcnlwdCgga2V5LCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uY2UtPngsIG5vbmNlLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhLT54LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YS0+bGVuLApAQCAtMzk1NCw3ICs0MDIwLDcgQEAKICAgICAgICAgVEVTVF9FUVVBTCggaW5wdXRfZGF0YS0+bGVuLAogICAgICAgICAgICAgICAgICAgICBQU0FfQUVBRF9ERUNSWVBUX09VVFBVVF9TSVpFKCBhbGcsIG91dHB1dF9sZW5ndGggKSApOwogCi0gICAgICAgIFRFU1RfRVFVQUwoIHBzYV9hZWFkX2RlY3J5cHQoIGhhbmRsZSwgYWxnLAorICAgICAgICBURVNUX0VRVUFMKCBwc2FfYWVhZF9kZWNyeXB0KCBrZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uY2UtPngsIG5vbmNlLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YS0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhLT5sZW4sCkBAIC0zOTY4LDcgKzQwMzQsNyBAQAogICAgIH0KIAogZXhpdDoKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgbWJlZHRsc19mcmVlKCBvdXRwdXRfZGF0YSApOwogICAgIG1iZWR0bHNfZnJlZSggb3V0cHV0X2RhdGEyICk7CiAgICAgUFNBX0RPTkUoICk7CkBAIC0zOTgzLDcgKzQwNDksNyBAQAogICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqaW5wdXRfZGF0YSwKICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmV4cGVjdGVkX3Jlc3VsdCApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dF9kYXRhID0gTlVMTDsKQEAgLTQwMDYsOSArNDA3Miw5IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfYWVhZF9lbmNyeXB0KCBoYW5kbGUsIGFsZywKKyAgICBQU0FfQVNTRVJUKCBwc2FfYWVhZF9lbmNyeXB0KCBrZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25jZS0+eCwgbm9uY2UtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGEtPngsIGFkZGl0aW9uYWxfZGF0YS0+bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEtPngsIGlucHV0X2RhdGEtPmxlbiwKQEAgLTQwMTksNyArNDA4NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kYXRhLCBvdXRwdXRfbGVuZ3RoICk7CiAKIGV4aXQ6Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIG1iZWR0bHNfZnJlZSggb3V0cHV0X2RhdGEgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KQEAgLTQwMzQsNyArNDEwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpleHBlY3RlZF9kYXRhLAogICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9yZXN1bHRfYXJnICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2tleV90eXBlX3Qga2V5X3R5cGUgPSBrZXlfdHlwZV9hcmc7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IGFsZ19hcmc7CiAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0X2RhdGEgPSBOVUxMOwpAQCAtNDA1OSw5ICs0MTI1LDkgQEAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywga2V5X3R5cGUgKTsKIAogICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2RhdGEtPngsIGtleV9kYXRhLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ICkgKTsKIAotICAgIFRFU1RfRVFVQUwoIHBzYV9hZWFkX2RlY3J5cHQoIGhhbmRsZSwgYWxnLAorICAgIFRFU1RfRVFVQUwoIHBzYV9hZWFkX2RlY3J5cHQoIGtleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmNlLT54LCBub25jZS0+bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YS0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGEtPmxlbiwKQEAgLTQwNzUsNyArNDE0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGF0YSwgb3V0cHV0X2xlbmd0aCApOwogCiBleGl0OgotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICBtYmVkdGxzX2ZyZWUoIG91dHB1dF9kYXRhICk7CiAgICAgUFNBX0RPTkUoICk7CiB9CkBAIC00MTA3LDcgKzQxNzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGdfYXJnLCBkYXRhX3QgKmlucHV0X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpvdXRwdXRfZGF0YSApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHNpemVfdCBrZXlfYml0czsKQEAgLTQxMjMsOCArNDE4OSw4IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKLSAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcygga2V5LCAmYXR0cmlidXRlcyApICk7CiAgICAga2V5X2JpdHMgPSBwc2FfZ2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcyApOwogCiAgICAgLyogQWxsb2NhdGUgYSBidWZmZXIgd2hpY2ggaGFzIHRoZSBzaXplIGFkdmVydGl6ZWQgYnkgdGhlCkBAIC00MTM2LDcgKzQyMDIsNyBAQAogICAgIEFTU0VSVF9BTExPQyggc2lnbmF0dXJlLCBzaWduYXR1cmVfc2l6ZSApOwogCiAgICAgLyogUGVyZm9ybSB0aGUgc2lnbmF0dXJlLiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9zaWduX2hhc2goIGhhbmRsZSwgYWxnLAorICAgIFBTQV9BU1NFUlQoIHBzYV9zaWduX2hhc2goIGtleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEtPngsIGlucHV0X2RhdGEtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpZ25hdHVyZV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWduYXR1cmVfbGVuZ3RoICkgKTsKQEAgLTQxNDcsNyArNDIxMyw3IEBACiAjaWYgZGVmaW5lZChNQkVEVExTX1RFU1RfREVQUkVDQVRFRCkKICAgICBtZW1zZXQoIHNpZ25hdHVyZSwgMCwgc2lnbmF0dXJlX3NpemUgKTsKICAgICBzaWduYXR1cmVfbGVuZ3RoID0gSU5WQUxJRF9FWFBPUlRfTEVOR1RIOwotICAgIFBTQV9BU1NFUlQoIHBzYV9hc3ltbWV0cmljX3NpZ24oIGhhbmRsZSwgYWxnLAorICAgIFBTQV9BU1NFUlQoIHBzYV9hc3ltbWV0cmljX3NpZ24oIGtleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEtPngsIGlucHV0X2RhdGEtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpZ25hdHVyZV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWduYXR1cmVfbGVuZ3RoICkgKTsKQEAgLTQxNTYsOCArNDIyMiwxMyBAQAogI2VuZGlmIC8qIE1CRURUTFNfVEVTVF9ERVBSRUNBVEVEICovCiAKIGV4aXQ6CisgICAgLyoKKyAgICAgKiBLZXkgYXR0cmlidXRlcyBtYXkgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoKQorICAgICAqIHRodXMgcmVzZXQgdGhlbSBhcyByZXF1aXJlZC4KKyAgICAgKi8KICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgbWJlZHRsc19mcmVlKCBzaWduYXR1cmUgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KQEAgLTQxNjgsNyArNDIzOSw3IEBACiAgICAgICAgICAgICAgICAgaW50IGFsZ19hcmcsIGRhdGFfdCAqaW5wdXRfZGF0YSwKICAgICAgICAgICAgICAgICBpbnQgc2lnbmF0dXJlX3NpemVfYXJnLCBpbnQgZXhwZWN0ZWRfc3RhdHVzX2FyZyApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHNpemVfdCBzaWduYXR1cmVfc2l6ZSA9IHNpZ25hdHVyZV9zaXplX2FyZzsKQEAgLTQxODcsOSArNDI1OCw5IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CiAKLSAgICBhY3R1YWxfc3RhdHVzID0gcHNhX3NpZ25faGFzaCggaGFuZGxlLCBhbGcsCisgICAgYWN0dWFsX3N0YXR1cyA9IHBzYV9zaWduX2hhc2goIGtleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLT54LCBpbnB1dF9kYXRhLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgc2lnbmF0dXJlX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWduYXR1cmVfbGVuZ3RoICk7CkBAIC00MjAyLDcgKzQyNzMsNyBAQAogCiAjaWYgZGVmaW5lZChNQkVEVExTX1RFU1RfREVQUkVDQVRFRCkKICAgICBzaWduYXR1cmVfbGVuZ3RoID0gSU5WQUxJRF9FWFBPUlRfTEVOR1RIOwotICAgIFRFU1RfRVFVQUwoIHBzYV9hc3ltbWV0cmljX3NpZ24oIGhhbmRsZSwgYWxnLAorICAgIFRFU1RfRVFVQUwoIHBzYV9hc3ltbWV0cmljX3NpZ24oIGtleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEtPngsIGlucHV0X2RhdGEtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpZ25hdHVyZV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWduYXR1cmVfbGVuZ3RoICksCkBAIC00MjEyLDcgKzQyODMsNyBAQAogCiBleGl0OgogICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgbWJlZHRsc19mcmVlKCBzaWduYXR1cmUgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KQEAgLTQyMjIsNyArNDI5Myw3IEBACiB2b2lkIHNpZ25fdmVyaWZ5KCBpbnQga2V5X3R5cGVfYXJnLCBkYXRhX3QgKmtleV9kYXRhLAogICAgICAgICAgICAgICAgICAgaW50IGFsZ19hcmcsIGRhdGFfdCAqaW5wdXRfZGF0YSApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHNpemVfdCBrZXlfYml0czsKQEAgLTQyMzgsOCArNDMwOSw4IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKLSAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcygga2V5LCAmYXR0cmlidXRlcyApICk7CiAgICAga2V5X2JpdHMgPSBwc2FfZ2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcyApOwogCiAgICAgLyogQWxsb2NhdGUgYSBidWZmZXIgd2hpY2ggaGFzIHRoZSBzaXplIGFkdmVydGl6ZWQgYnkgdGhlCkBAIC00MjUxLDcgKzQzMjIsNyBAQAogICAgIEFTU0VSVF9BTExPQyggc2lnbmF0dXJlLCBzaWduYXR1cmVfc2l6ZSApOwogCiAgICAgLyogUGVyZm9ybSB0aGUgc2lnbmF0dXJlLiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9zaWduX2hhc2goIGhhbmRsZSwgYWxnLAorICAgIFBTQV9BU1NFUlQoIHBzYV9zaWduX2hhc2goIGtleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEtPngsIGlucHV0X2RhdGEtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpZ25hdHVyZV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWduYXR1cmVfbGVuZ3RoICkgKTsKQEAgLTQyNjAsNyArNDMzMSw3IEBACiAgICAgVEVTVF9BU1NFUlQoIHNpZ25hdHVyZV9sZW5ndGggPiAwICk7CiAKICAgICAvKiBVc2UgdGhlIGxpYnJhcnkgdG8gdmVyaWZ5IHRoYXQgdGhlIHNpZ25hdHVyZSBpcyBjb3JyZWN0LiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV92ZXJpZnlfaGFzaCggaGFuZGxlLCBhbGcsCisgICAgUFNBX0FTU0VSVCggcHNhX3ZlcmlmeV9oYXNoKCBrZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEtPngsIGlucHV0X2RhdGEtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgc2lnbmF0dXJlX2xlbmd0aCApICk7CiAKQEAgLTQyNzAsMTUgKzQzNDEsMjAgQEAKICAgICAgICAgICogZGV0ZWN0ZWQgYXMgaW52YWxpZC4gRmxpcCBhIGJpdCBhdCB0aGUgYmVnaW5uaW5nLCBub3QgYXQgdGhlIGVuZCwKICAgICAgICAgICogYmVjYXVzZSBFQ0RTQSBtYXkgaWdub3JlIHRoZSBsYXN0IGZldyBiaXRzIG9mIHRoZSBpbnB1dC4gKi8KICAgICAgICAgaW5wdXRfZGF0YS0+eFswXSBePSAxOwotICAgICAgICBURVNUX0VRVUFMKCBwc2FfdmVyaWZ5X2hhc2goIGhhbmRsZSwgYWxnLAorICAgICAgICBURVNUX0VRVUFMKCBwc2FfdmVyaWZ5X2hhc2goIGtleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEtPngsIGlucHV0X2RhdGEtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpZ25hdHVyZV9sZW5ndGggKSwKICAgICAgICAgICAgICAgICAgICAgUFNBX0VSUk9SX0lOVkFMSURfU0lHTkFUVVJFICk7CiAgICAgfQogCiBleGl0OgorICAgIC8qCisgICAgICogS2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCkKKyAgICAgKiB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOwotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIG1iZWR0bHNfZnJlZSggc2lnbmF0dXJlICk7CiAgICAgUFNBX0RPTkUoICk7CiB9CkBAIC00Mjg5LDcgKzQzNjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsZ19hcmcsIGRhdGFfdCAqaGFzaF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpzaWduYXR1cmVfZGF0YSApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKQEAgLTQzMDMsMTQgKzQzNzksMTQgQEAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywga2V5X3R5cGUgKTsKIAogICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2RhdGEtPngsIGtleV9kYXRhLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ICkgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV92ZXJpZnlfaGFzaCggaGFuZGxlLCBhbGcsCisgICAgUFNBX0FTU0VSVCggcHNhX3ZlcmlmeV9oYXNoKCBrZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfZGF0YS0+eCwgaGFzaF9kYXRhLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfZGF0YS0+eCwgc2lnbmF0dXJlX2RhdGEtPmxlbiApICk7CiAKICNpZiBkZWZpbmVkKE1CRURUTFNfVEVTVF9ERVBSRUNBVEVEKQotICAgIFBTQV9BU1NFUlQoIHBzYV9hc3ltbWV0cmljX3ZlcmlmeSggaGFuZGxlLCBhbGcsCisgICAgUFNBX0FTU0VSVCggcHNhX2FzeW1tZXRyaWNfdmVyaWZ5KCBrZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfZGF0YS0+eCwgaGFzaF9kYXRhLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfZGF0YS0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZV9kYXRhLT5sZW4gKSApOwpAQCAtNDMxOSw3ICs0Mzk1LDcgQEAKIAogZXhpdDoKICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogfQogLyogRU5EX0NBU0UgKi8KQEAgLTQzMzAsNyArNDQwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqc2lnbmF0dXJlX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9zdGF0dXNfYXJnICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2tleV90eXBlX3Qga2V5X3R5cGUgPSBrZXlfdHlwZV9hcmc7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IGFsZ19hcmc7CiAgICAgcHNhX3N0YXR1c190IGFjdHVhbF9zdGF0dXM7CkBAIC00MzQ0LDE1ICs0NDIwLDE1IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CiAKLSAgICBhY3R1YWxfc3RhdHVzID0gcHNhX3ZlcmlmeV9oYXNoKCBoYW5kbGUsIGFsZywKKyAgICBhY3R1YWxfc3RhdHVzID0gcHNhX3ZlcmlmeV9oYXNoKCBrZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2RhdGEtPngsIGhhc2hfZGF0YS0+bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZV9kYXRhLT54LCBzaWduYXR1cmVfZGF0YS0+bGVuICk7CiAgICAgVEVTVF9FUVVBTCggYWN0dWFsX3N0YXR1cywgZXhwZWN0ZWRfc3RhdHVzICk7CiAKICNpZiBkZWZpbmVkKE1CRURUTFNfVEVTVF9ERVBSRUNBVEVEKQotICAgIFRFU1RfRVFVQUwoIHBzYV9hc3ltbWV0cmljX3ZlcmlmeSggaGFuZGxlLCBhbGcsCisgICAgVEVTVF9FUVVBTCggcHNhX2FzeW1tZXRyaWNfdmVyaWZ5KCBrZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfZGF0YS0+eCwgaGFzaF9kYXRhLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfZGF0YS0+eCwgc2lnbmF0dXJlX2RhdGEtPmxlbiApLAogICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1cyApOwpAQCAtNDM2MCw3ICs0NDM2LDcgQEAKIAogZXhpdDoKICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogfQogLyogRU5EX0NBU0UgKi8KQEAgLTQzNzQsNyArNDQ1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX291dHB1dF9sZW5ndGhfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9zdGF0dXNfYXJnICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2tleV90eXBlX3Qga2V5X3R5cGUgPSBrZXlfdHlwZV9hcmc7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IGFsZ19hcmc7CiAgICAgc2l6ZV90IGV4cGVjdGVkX291dHB1dF9sZW5ndGggPSBleHBlY3RlZF9vdXRwdXRfbGVuZ3RoX2FyZzsKQEAgLTQzOTMsMTYgKzQ0NjksMTYgQEAKICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCBhbGcgKTsKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywga2V5X3R5cGUgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CiAKICAgICAvKiBEZXRlcm1pbmUgdGhlIG1heGltdW0gb3V0cHV0IGxlbmd0aCAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmF0dHJpYnV0ZXMgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGtleSwgJmF0dHJpYnV0ZXMgKSApOwogICAgIGtleV9iaXRzID0gcHNhX2dldF9rZXlfYml0cyggJmF0dHJpYnV0ZXMgKTsKICAgICBvdXRwdXRfc2l6ZSA9IFBTQV9BU1lNTUVUUklDX0VOQ1JZUFRfT1VUUFVUX1NJWkUoIGtleV90eXBlLCBrZXlfYml0cywgYWxnICk7CiAgICAgQVNTRVJUX0FMTE9DKCBvdXRwdXQsIG91dHB1dF9zaXplICk7CiAKICAgICAvKiBFbmNyeXB0IHRoZSBpbnB1dCAqLwotICAgIGFjdHVhbF9zdGF0dXMgPSBwc2FfYXN5bW1ldHJpY19lbmNyeXB0KCBoYW5kbGUsIGFsZywKKyAgICBhY3R1YWxfc3RhdHVzID0gcHNhX2FzeW1tZXRyaWNfZW5jcnlwdCgga2V5LCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEtPngsIGlucHV0X2RhdGEtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwtPngsIGxhYmVsLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgb3V0cHV0X3NpemUsCkBAIC00NDE3LDcgKzQ0OTMsNyBAQAogICAgICAgICBvdXRwdXRfbGVuZ3RoID0gfjA7CiAgICAgICAgIGlmKCBvdXRwdXRfc2l6ZSAhPSAwICkKICAgICAgICAgICAgIG1lbXNldCggb3V0cHV0LCAwLCBvdXRwdXRfc2l6ZSApOwotICAgICAgICBhY3R1YWxfc3RhdHVzID0gcHNhX2FzeW1tZXRyaWNfZW5jcnlwdCggaGFuZGxlLCBhbGcsCisgICAgICAgIGFjdHVhbF9zdGF0dXMgPSBwc2FfYXN5bW1ldHJpY19lbmNyeXB0KCBrZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEtPngsIGlucHV0X2RhdGEtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGxhYmVsLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIG91dHB1dF9zaXplLApAQCAtNDQyNyw4ICs0NTAzLDEzIEBACiAgICAgfQogCiBleGl0OgorICAgIC8qCisgICAgICogS2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCkKKyAgICAgKiB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOwotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIG1iZWR0bHNfZnJlZSggb3V0cHV0ICk7CiAgICAgUFNBX0RPTkUoICk7CiB9CkBAIC00NDQxLDcgKzQ1MjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICppbnB1dF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpsYWJlbCApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHNpemVfdCBrZXlfYml0czsKQEAgLTQ0NjAsMTAgKzQ1NDEsMTAgQEAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywga2V5X3R5cGUgKTsKIAogICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2RhdGEtPngsIGtleV9kYXRhLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ICkgKTsKIAogICAgIC8qIERldGVybWluZSB0aGUgbWF4aW11bSBjaXBoZXJ0ZXh0IGxlbmd0aCAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmF0dHJpYnV0ZXMgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGtleSwgJmF0dHJpYnV0ZXMgKSApOwogICAgIGtleV9iaXRzID0gcHNhX2dldF9rZXlfYml0cyggJmF0dHJpYnV0ZXMgKTsKICAgICBvdXRwdXRfc2l6ZSA9IFBTQV9BU1lNTUVUUklDX0VOQ1JZUFRfT1VUUFVUX1NJWkUoIGtleV90eXBlLCBrZXlfYml0cywgYWxnICk7CiAgICAgQVNTRVJUX0FMTE9DKCBvdXRwdXQsIG91dHB1dF9zaXplICk7CkBAIC00NDczLDcgKzQ1NTQsNyBAQAogICAgIC8qIFdlIHRlc3QgZW5jcnlwdGlvbiBieSBjaGVja2luZyB0aGF0IGVuY3J5cHQtdGhlbi1kZWNyeXB0IGdpdmVzIGJhY2sKICAgICAgKiB0aGUgb3JpZ2luYWwgcGxhaW50ZXh0IGJlY2F1c2Ugb2YgdGhlIG5vbi1vcHRpb25hbCByYW5kb20KICAgICAgKiBwYXJ0IG9mIGVuY3J5cHRpb24gcHJvY2VzcyB3aGljaCBwcmV2ZW50cyB1c2luZyBmaXhlZCB2ZWN0b3JzLiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9hc3ltbWV0cmljX2VuY3J5cHQoIGhhbmRsZSwgYWxnLAorICAgIFBTQV9BU1NFUlQoIHBzYV9hc3ltbWV0cmljX2VuY3J5cHQoIGtleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEtPngsIGlucHV0X2RhdGEtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC0+eCwgbGFiZWwtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIG91dHB1dF9zaXplLApAQCAtNDQ4Miw3ICs0NTYzLDcgQEAKICAgICAgKiBpdCBsb29rcyBzZW5zaWJsZS4gKi8KICAgICBURVNUX0FTU0VSVCggb3V0cHV0X2xlbmd0aCA8PSBvdXRwdXRfc2l6ZSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCggaGFuZGxlLCBhbGcsCisgICAgUFNBX0FTU0VSVCggcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCgga2V5LCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBvdXRwdXRfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLT54LCBsYWJlbC0+bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dDIsIG91dHB1dDJfc2l6ZSwKQEAgLTQ0OTEsOCArNDU3MiwxMyBAQAogICAgICAgICAgICAgICAgICAgICBvdXRwdXQyLCBvdXRwdXQyX2xlbmd0aCApOwogCiBleGl0OgorICAgIC8qCisgICAgICogS2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCkKKyAgICAgKiB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOwotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIG1iZWR0bHNfZnJlZSggb3V0cHV0ICk7CiAgICAgbWJlZHRsc19mcmVlKCBvdXRwdXQyICk7CiAgICAgUFNBX0RPTkUoICk7CkBAIC00NTA3LDcgKzQ1OTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpleHBlY3RlZF9kYXRhICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2tleV90eXBlX3Qga2V5X3R5cGUgPSBrZXlfdHlwZV9hcmc7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IGFsZ19hcmc7CiAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ID0gTlVMTDsKQEAgLTQ1MjUsOSArNDYxMSw5IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfYXN5bW1ldHJpY19kZWNyeXB0KCBoYW5kbGUsIGFsZywKKyAgICBQU0FfQVNTRVJUKCBwc2FfYXN5bW1ldHJpY19kZWNyeXB0KCBrZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLT54LCBpbnB1dF9kYXRhLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwtPngsIGxhYmVsLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LApAQCAtNDU0Myw3ICs0NjI5LDcgQEAKICAgICAgICAgb3V0cHV0X2xlbmd0aCA9IH4wOwogICAgICAgICBpZiggb3V0cHV0X3NpemUgIT0gMCApCiAgICAgICAgICAgICBtZW1zZXQoIG91dHB1dCwgMCwgb3V0cHV0X3NpemUgKTsKLSAgICAgICAgUFNBX0FTU0VSVCggcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCggaGFuZGxlLCBhbGcsCisgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9hc3ltbWV0cmljX2RlY3J5cHQoIGtleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLT54LCBpbnB1dF9kYXRhLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGxhYmVsLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwKQEAgLTQ1NTUsNyArNDY0MSw3IEBACiAKIGV4aXQ6CiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOwotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICBtYmVkdGxzX2ZyZWUoIG91dHB1dCApOwogICAgIFBTQV9ET05FKCApOwogfQpAQCAtNDU3MCw3ICs0NjU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvdXRwdXRfc2l6ZV9hcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfc3RhdHVzX2FyZyAgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCBrZXlfdHlwZSA9IGtleV90eXBlX2FyZzsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gYWxnX2FyZzsKICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgPSBOVUxMOwpAQCAtNDU4OSw5ICs0Njc1LDkgQEAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywga2V5X3R5cGUgKTsKIAogICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2RhdGEtPngsIGtleV9kYXRhLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ICkgKTsKIAotICAgIGFjdHVhbF9zdGF0dXMgPSBwc2FfYXN5bW1ldHJpY19kZWNyeXB0KCBoYW5kbGUsIGFsZywKKyAgICBhY3R1YWxfc3RhdHVzID0gcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCgga2V5LCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEtPngsIGlucHV0X2RhdGEtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwtPngsIGxhYmVsLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgb3V0cHV0X3NpemUsCkBAIC00NjA2LDcgKzQ2OTIsNyBAQAogICAgICAgICBvdXRwdXRfbGVuZ3RoID0gfjA7CiAgICAgICAgIGlmKCBvdXRwdXRfc2l6ZSAhPSAwICkKICAgICAgICAgICAgIG1lbXNldCggb3V0cHV0LCAwLCBvdXRwdXRfc2l6ZSApOwotICAgICAgICBhY3R1YWxfc3RhdHVzID0gcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCggaGFuZGxlLCBhbGcsCisgICAgICAgIGFjdHVhbF9zdGF0dXMgPSBwc2FfYXN5bW1ldHJpY19kZWNyeXB0KCBrZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEtPngsIGlucHV0X2RhdGEtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGxhYmVsLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIG91dHB1dF9zaXplLApAQCAtNDYxNyw3ICs0NzAzLDcgQEAKIAogZXhpdDoKICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIG1iZWR0bHNfZnJlZSggb3V0cHV0ICk7CiAgICAgUFNBX0RPTkUoICk7CiB9CkBAIC00NzA5LDEyICs0Nzk1LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzX2FyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzX2FyZzN9OwogICAgIGRhdGFfdCAqaW5wdXRzW10gPSB7aW5wdXQxLCBpbnB1dDIsIGlucHV0M307Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGVzW10gPSB7MCwgMCwgMH07CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5c1tdID0geyBNQkVEVExTX1NWQ19LRVlfSURfSU5JVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1ZDX0tFWV9JRF9JTklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQgfTsKICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fb3BlcmF0aW9uX3Qgb3BlcmF0aW9uID0gUFNBX0tFWV9ERVJJVkFUSU9OX09QRVJBVElPTl9JTklUOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBzaXplX3QgaTsKICAgICBwc2Ffa2V5X3R5cGVfdCBvdXRwdXRfa2V5X3R5cGUgPSBvdXRwdXRfa2V5X3R5cGVfYXJnOwotICAgIHBzYV9rZXlfaGFuZGxlX3Qgb3V0cHV0X2hhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qgb3V0cHV0X2tleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9zdGF0dXNfdCBleHBlY3RlZF9vdXRwdXRfc3RhdHVzID0gZXhwZWN0ZWRfb3V0cHV0X3N0YXR1c19hcmc7CiAgICAgcHNhX3N0YXR1c190IGFjdHVhbF9vdXRwdXRfc3RhdHVzOwogCkBAIC00NzMyLDEwICs0ODIwLDIxIEBACiAgICAgICAgICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywga2V5X3R5cGVzW2ldICk7CiAgICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzW2ldLT54LCBpbnB1dHNbaV0tPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlc1tpXSApICk7Ci0gICAgICAgICAgICBURVNUX0VRVUFMKCBwc2Ffa2V5X2Rlcml2YXRpb25faW5wdXRfa2V5KCAmb3BlcmF0aW9uLCBzdGVwc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXNbaV0gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1c2VzW2ldICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleXNbaV0gKSApOworICAgICAgICAgICAgaWYoIFBTQV9LRVlfVFlQRV9JU19LRVlfUEFJUigga2V5X3R5cGVzW2ldICkgJiYKKyAgICAgICAgICAgICAgICBzdGVwc1tpXSA9PSBQU0FfS0VZX0RFUklWQVRJT05fSU5QVVRfU0VDUkVUICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRha2luZyBhIHByaXZhdGUga2V5IGFzIHNlY3JldCBpbnB1dCwgdXNlIGtleSBhZ3JlZW1lbnQKKyAgICAgICAgICAgICAgICAvLyB0byBhZGQgdGhlIHNoYXJlZCBzZWNyZXQgdG8gdGhlIGRlcml2YXRpb24KKyAgICAgICAgICAgICAgICBURVNUX0VRVUFMKCBrZXlfYWdyZWVtZW50X3dpdGhfc2VsZiggJm9wZXJhdGlvbiwga2V5c1tpXSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1c2VzW2ldICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEVTVF9FUVVBTCggcHNhX2tleV9kZXJpdmF0aW9uX2lucHV0X2tleSggJm9wZXJhdGlvbiwgc3RlcHNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5c1tpXSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1c2VzW2ldICk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CkBAIC00NzUzLDcgKzQ4NTIsNyBAQAogICAgICAgICBwc2Ffc2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcywgOCApOwogICAgICAgICBhY3R1YWxfb3V0cHV0X3N0YXR1cyA9CiAgICAgICAgICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fb3V0cHV0X2tleSggJmF0dHJpYnV0ZXMsICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB1dF9oYW5kbGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHV0X2tleSApOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtNDc2Niw5ICs0ODY1LDkgQEAKIAogZXhpdDoKICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fYWJvcnQoICZvcGVyYXRpb24gKTsKLSAgICBmb3IoIGkgPSAwOyBpIDwgQVJSQVlfTEVOR1RIKCBoYW5kbGVzICk7IGkrKyApCi0gICAgICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlc1tpXSApOwotICAgIHBzYV9kZXN0cm95X2tleSggb3V0cHV0X2hhbmRsZSApOworICAgIGZvciggaSA9IDA7IGkgPCBBUlJBWV9MRU5HVEgoIGtleXMgKTsgaSsrICkKKyAgICAgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXlzW2ldICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBvdXRwdXRfa2V5ICk7CiAgICAgUFNBX0RPTkUoICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwpAQCAtNDc3Nyw3ICs0ODc2LDcgQEAKIHZvaWQgdGVzdF9kZXJpdmVfaW52YWxpZF9rZXlfZGVyaXZhdGlvbl9zdGF0ZSggaW50IGFsZ19hcmcgKQogewogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBzaXplX3Qga2V5X3R5cGUgPSBQU0FfS0VZX1RZUEVfREVSSVZFOwogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9vcGVyYXRpb25fdCBvcGVyYXRpb24gPSBQU0FfS0VZX0RFUklWQVRJT05fT1BFUkFUSU9OX0lOSVQ7CiAgICAgdW5zaWduZWQgY2hhciBpbnB1dDFbXSA9ICJJbnB1dCAxIjsKQEAgLTQ3OTksMTAgKzQ4OTgsMTAgQEAKIAogICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEsIHNpemVvZigga2V5X2RhdGEgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkgKSApOwogCiAgICAgLyogdmFsaWQga2V5IGRlcml2YXRpb24gKi8KLSAgICBpZiggIXNldHVwX2tleV9kZXJpdmF0aW9uX3dyYXAoICZvcGVyYXRpb24sIGhhbmRsZSwgYWxnLAorICAgIGlmKCAhc2V0dXBfa2V5X2Rlcml2YXRpb25fd3JhcCggJm9wZXJhdGlvbiwga2V5LCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDEsIGlucHV0MV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDIsIGlucHV0Ml9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhY2l0eSApICkKQEAgLTQ4MTksNyArNDkxOCw3IEBACiAKIGV4aXQ6CiAgICAgcHNhX2tleV9kZXJpdmF0aW9uX2Fib3J0KCAmb3BlcmF0aW9uICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogfQogLyogRU5EX0NBU0UgKi8KQEAgLTQ4NjUsNyArNDk2NCw5IEBACiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IGFsZ19hcmc7CiAgICAgcHNhX2tleV9kZXJpdmF0aW9uX3N0ZXBfdCBzdGVwc1tdID0ge3N0ZXAxX2FyZywgc3RlcDJfYXJnLCBzdGVwM19hcmd9OwogICAgIGRhdGFfdCAqaW5wdXRzW10gPSB7aW5wdXQxLCBpbnB1dDIsIGlucHV0M307Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGVzW10gPSB7MCwgMCwgMH07CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5c1tdID0geyBNQkVEVExTX1NWQ19LRVlfSURfSU5JVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1ZDX0tFWV9JRF9JTklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQgfTsKICAgICBzaXplX3QgcmVxdWVzdGVkX2NhcGFjaXR5ID0gcmVxdWVzdGVkX2NhcGFjaXR5X2FyZzsKICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fb3BlcmF0aW9uX3Qgb3BlcmF0aW9uID0gUFNBX0tFWV9ERVJJVkFUSU9OX09QRVJBVElPTl9JTklUOwogICAgIHVpbnQ4X3QgKmV4cGVjdGVkX291dHB1dHNbMl0gPQpAQCAtNDkwNywxMCArNTAwOCw5IEBACiAgICAgICAgICAgICBjYXNlIFBTQV9LRVlfREVSSVZBVElPTl9JTlBVVF9TRUNSRVQ6CiAgICAgICAgICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHNbaV0tPngsIGlucHV0c1tpXS0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlc1tpXSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlzW2ldICkgKTsKICAgICAgICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2Ffa2V5X2Rlcml2YXRpb25faW5wdXRfa2V5KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BlcmF0aW9uLCBzdGVwc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlc1tpXSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcGVyYXRpb24sIHN0ZXBzW2ldLCBrZXlzW2ldICkgKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2tleV9kZXJpdmF0aW9uX2lucHV0X2J5dGVzKApAQCAtNDk2Miw4ICs1MDYyLDggQEAKIGV4aXQ6CiAgICAgbWJlZHRsc19mcmVlKCBvdXRwdXRfYnVmZmVyICk7CiAgICAgcHNhX2tleV9kZXJpdmF0aW9uX2Fib3J0KCAmb3BlcmF0aW9uICk7Ci0gICAgZm9yKCBpID0gMDsgaSA8IEFSUkFZX0xFTkdUSCggaGFuZGxlcyApOyBpKysgKQotICAgICAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZXNbaV0gKTsKKyAgICBmb3IoIGkgPSAwOyBpIDwgQVJSQVlfTEVOR1RIKCBrZXlzICk7IGkrKyApCisgICAgICAgIHBzYV9kZXN0cm95X2tleSgga2V5c1tpXSApOwogICAgIFBTQV9ET05FKCApOwogfQogLyogRU5EX0NBU0UgKi8KQEAgLTQ5NzUsNyArNTA3NSw3IEBACiAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmlucHV0MiwKICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfY2FwYWNpdHlfYXJnICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IGFsZ19hcmc7CiAgICAgc2l6ZV90IHJlcXVlc3RlZF9jYXBhY2l0eSA9IHJlcXVlc3RlZF9jYXBhY2l0eV9hcmc7CiAgICAgcHNhX2tleV9kZXJpdmF0aW9uX29wZXJhdGlvbl90IG9wZXJhdGlvbiA9IFBTQV9LRVlfREVSSVZBVElPTl9PUEVSQVRJT05fSU5JVDsKQEAgLTQ5OTEsOSArNTA5MSw5IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVFlQRV9ERVJJVkUgKTsKIAogICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2RhdGEtPngsIGtleV9kYXRhLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ICkgKTsKIAotICAgIGlmKCAhc2V0dXBfa2V5X2Rlcml2YXRpb25fd3JhcCggJm9wZXJhdGlvbiwgaGFuZGxlLCBhbGcsCisgICAgaWYoICFzZXR1cF9rZXlfZGVyaXZhdGlvbl93cmFwKCAmb3BlcmF0aW9uLCBrZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0MS0+eCwgaW5wdXQxLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDItPngsIGlucHV0Mi0+bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkX2NhcGFjaXR5ICkgKQpAQCAtNTAyNiw3ICs1MTI2LDcgQEAKIAogZXhpdDoKICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fYWJvcnQoICZvcGVyYXRpb24gKTsKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgUFNBX0RPTkUoICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwpAQCAtNTA0MSw4ICs1MTQxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlcml2ZWRfdXNhZ2VfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVyaXZlZF9hbGdfYXJnICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGJhc2VfaGFuZGxlID0gMDsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGRlcml2ZWRfaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBiYXNlX2tleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGRlcml2ZWRfa2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IGFsZ19hcmc7CiAgICAgcHNhX2tleV90eXBlX3QgZGVyaXZlZF90eXBlID0gZGVyaXZlZF90eXBlX2FyZzsKICAgICBzaXplX3QgZGVyaXZlZF9iaXRzID0gZGVyaXZlZF9iaXRzX2FyZzsKQEAgLTUwNTksMTAgKzUxNTksMTAgQEAKICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCBhbGcgKTsKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywgUFNBX0tFWV9UWVBFX0RFUklWRSApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2RhdGEtPngsIGtleV9kYXRhLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiYXNlX2hhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiYXNlX2tleSApICk7CiAKICAgICAvKiBEZXJpdmUgYSBrZXkuICovCi0gICAgaWYgKCBzZXR1cF9rZXlfZGVyaXZhdGlvbl93cmFwKCAmb3BlcmF0aW9uLCBiYXNlX2hhbmRsZSwgYWxnLAorICAgIGlmICggc2V0dXBfa2V5X2Rlcml2YXRpb25fd3JhcCggJm9wZXJhdGlvbiwgYmFzZV9rZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0MS0+eCwgaW5wdXQxLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDItPngsIGlucHV0Mi0+bGVuLCBjYXBhY2l0eSApICkKICAgICAgICAgZ290byBleGl0OwpAQCAtNTA3MiwyMiArNTE3MiwyNyBAQAogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBkZXJpdmVkX3R5cGUgKTsKICAgICBwc2Ffc2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcywgZGVyaXZlZF9iaXRzICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX2tleV9kZXJpdmF0aW9uX291dHB1dF9rZXkoICZhdHRyaWJ1dGVzLCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVyaXZlZF9oYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVyaXZlZF9rZXkgKSApOwogCiAgICAgLyogVGVzdCB0aGUga2V5IGluZm9ybWF0aW9uICovCi0gICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggZGVyaXZlZF9oYW5kbGUsICZnb3RfYXR0cmlidXRlcyApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggZGVyaXZlZF9rZXksICZnb3RfYXR0cmlidXRlcyApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdHlwZSggJmdvdF9hdHRyaWJ1dGVzICksIGRlcml2ZWRfdHlwZSApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2JpdHMoICZnb3RfYXR0cmlidXRlcyApLCBkZXJpdmVkX2JpdHMgKTsKIAogICAgIC8qIEV4ZXJjaXNlIHRoZSBkZXJpdmVkIGtleS4gKi8KLSAgICBpZiggISBleGVyY2lzZV9rZXkoIGRlcml2ZWRfaGFuZGxlLCBkZXJpdmVkX3VzYWdlLCBkZXJpdmVkX2FsZyApICkKKyAgICBpZiggISBleGVyY2lzZV9rZXkoIGRlcml2ZWRfa2V5LCBkZXJpdmVkX3VzYWdlLCBkZXJpdmVkX2FsZyApICkKICAgICAgICAgZ290byBleGl0OwogCiBleGl0OgotICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9hYm9ydCggJm9wZXJhdGlvbiApOworICAgIC8qCisgICAgICogS2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCkKKyAgICAgKiB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmZ290X2F0dHJpYnV0ZXMgKTsKLSAgICBwc2FfZGVzdHJveV9rZXkoIGJhc2VfaGFuZGxlICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBkZXJpdmVkX2hhbmRsZSApOworCisgICAgcHNhX2tleV9kZXJpdmF0aW9uX2Fib3J0KCAmb3BlcmF0aW9uICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBiYXNlX2tleSApOworICAgIHBzYV9kZXN0cm95X2tleSggZGVyaXZlZF9rZXkgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KIC8qIEVORF9DQVNFICovCkBAIC01MTAwLDggKzUyMDUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVzMV9hcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnl0ZXMyX2FyZyApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBiYXNlX2hhbmRsZSA9IDA7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBkZXJpdmVkX2hhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgYmFzZV9rZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBkZXJpdmVkX2tleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHNpemVfdCBieXRlczEgPSBieXRlczFfYXJnOwogICAgIHNpemVfdCBieXRlczIgPSBieXRlczJfYXJnOwpAQCAtNTEyMSwxMCArNTIyNiwxMCBAQAogICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmJhc2VfYXR0cmlidXRlcywgYWxnICk7CiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmJhc2VfYXR0cmlidXRlcywgUFNBX0tFWV9UWVBFX0RFUklWRSApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYmFzZV9hdHRyaWJ1dGVzLCBrZXlfZGF0YS0+eCwga2V5X2RhdGEtPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJhc2VfaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJhc2Vfa2V5ICkgKTsKIAogICAgIC8qIERlcml2ZSBzb21lIG1hdGVyaWFsIGFuZCBvdXRwdXQgaXQuICovCi0gICAgaWYoICFzZXR1cF9rZXlfZGVyaXZhdGlvbl93cmFwKCAmb3BlcmF0aW9uLCBiYXNlX2hhbmRsZSwgYWxnLAorICAgIGlmKCAhc2V0dXBfa2V5X2Rlcml2YXRpb25fd3JhcCggJm9wZXJhdGlvbiwgYmFzZV9rZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0MS0+eCwgaW5wdXQxLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDItPngsIGlucHV0Mi0+bGVuLCBjYXBhY2l0eSApICkKICAgICAgICAgZ290byBleGl0OwpAQCAtNTEzNSw3ICs1MjQwLDcgQEAKICAgICBQU0FfQVNTRVJUKCBwc2Ffa2V5X2Rlcml2YXRpb25fYWJvcnQoICZvcGVyYXRpb24gKSApOwogCiAgICAgLyogRGVyaXZlIHRoZSBzYW1lIG91dHB1dCBhZ2FpbiwgYnV0IHRoaXMgdGltZSBzdG9yZSBpdCBpbiBrZXkgb2JqZWN0cy4gKi8KLSAgICBpZiggIXNldHVwX2tleV9kZXJpdmF0aW9uX3dyYXAoICZvcGVyYXRpb24sIGJhc2VfaGFuZGxlLCBhbGcsCisgICAgaWYoICFzZXR1cF9rZXlfZGVyaXZhdGlvbl93cmFwKCAmb3BlcmF0aW9uLCBiYXNlX2tleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQxLT54LCBpbnB1dDEtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Mi0+eCwgaW5wdXQyLT5sZW4sIGNhcGFjaXR5ICkgKQogICAgICAgICBnb3RvIGV4aXQ7CkBAIC01MTQ1LDE2ICs1MjUwLDE2IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmRlcml2ZWRfYXR0cmlidXRlcywgUFNBX0tFWV9UWVBFX1JBV19EQVRBICk7CiAgICAgcHNhX3NldF9rZXlfYml0cyggJmRlcml2ZWRfYXR0cmlidXRlcywgUFNBX0JZVEVTX1RPX0JJVFMoIGJ5dGVzMSApICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX2tleV9kZXJpdmF0aW9uX291dHB1dF9rZXkoICZkZXJpdmVkX2F0dHJpYnV0ZXMsICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZXJpdmVkX2hhbmRsZSApICk7Ci0gICAgUFNBX0FTU0VSVCggcHNhX2V4cG9ydF9rZXkoIGRlcml2ZWRfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVyaXZlZF9rZXkgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9leHBvcnRfa2V5KCBkZXJpdmVkX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0X2J1ZmZlciwgYnl0ZXMxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuZ3RoICkgKTsKICAgICBURVNUX0VRVUFMKCBsZW5ndGgsIGJ5dGVzMSApOwotICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggZGVyaXZlZF9oYW5kbGUgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggZGVyaXZlZF9rZXkgKSApOwogICAgIHBzYV9zZXRfa2V5X2JpdHMoICZkZXJpdmVkX2F0dHJpYnV0ZXMsIFBTQV9CWVRFU19UT19CSVRTKCBieXRlczIgKSApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9rZXlfZGVyaXZhdGlvbl9vdXRwdXRfa2V5KCAmZGVyaXZlZF9hdHRyaWJ1dGVzLCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVyaXZlZF9oYW5kbGUgKSApOwotICAgIFBTQV9BU1NFUlQoIHBzYV9leHBvcnRfa2V5KCBkZXJpdmVkX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlcml2ZWRfa2V5ICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSggZGVyaXZlZF9rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydF9idWZmZXIgKyBieXRlczEsIGJ5dGVzMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbmd0aCApICk7CiAgICAgVEVTVF9FUVVBTCggbGVuZ3RoLCBieXRlczIgKTsKQEAgLTUxNjcsOCArNTI3Miw4IEBACiAgICAgbWJlZHRsc19mcmVlKCBvdXRwdXRfYnVmZmVyICk7CiAgICAgbWJlZHRsc19mcmVlKCBleHBvcnRfYnVmZmVyICk7CiAgICAgcHNhX2tleV9kZXJpdmF0aW9uX2Fib3J0KCAmb3BlcmF0aW9uICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBiYXNlX2hhbmRsZSApOwotICAgIHBzYV9kZXN0cm95X2tleSggZGVyaXZlZF9oYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGJhc2Vfa2V5ICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBkZXJpdmVkX2tleSApOwogICAgIFBTQV9ET05FKCApOwogfQogLyogRU5EX0NBU0UgKi8KQEAgLTUxNzksOCArNTI4NCw4IEBACiAgICAgICAgICAgICAgICAgIGludCB0eXBlX2FyZywgaW50IGJpdHNfYXJnLAogICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfc3RhdHVzX2FyZyApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBiYXNlX2hhbmRsZSA9IDA7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBkZXJpdmVkX2hhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgYmFzZV9rZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBkZXJpdmVkX2tleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHBzYV9rZXlfdHlwZV90IHR5cGUgPSB0eXBlX2FyZzsKICAgICBzaXplX3QgYml0cyA9IGJpdHNfYXJnOwpAQCAtNTE5NSw5ICs1MzAwLDkgQEAKICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZiYXNlX2F0dHJpYnV0ZXMsIGFsZyApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZiYXNlX2F0dHJpYnV0ZXMsIFBTQV9LRVlfVFlQRV9ERVJJVkUgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmJhc2VfYXR0cmlidXRlcywga2V5X2RhdGEtPngsIGtleV9kYXRhLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiYXNlX2hhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiYXNlX2tleSApICk7CiAKLSAgICBpZiggIXNldHVwX2tleV9kZXJpdmF0aW9uX3dyYXAoICZvcGVyYXRpb24sIGJhc2VfaGFuZGxlLCBhbGcsCisgICAgaWYoICFzZXR1cF9rZXlfZGVyaXZhdGlvbl93cmFwKCAmb3BlcmF0aW9uLCBiYXNlX2tleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQxLT54LCBpbnB1dDEtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Mi0+eCwgaW5wdXQyLT5sZW4sIFNJWkVfTUFYICkgKQogICAgICAgICBnb3RvIGV4aXQ7CkBAIC01MjA3LDI1ICs1MzEyLDI2IEBACiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmRlcml2ZWRfYXR0cmlidXRlcywgdHlwZSApOwogICAgIHBzYV9zZXRfa2V5X2JpdHMoICZkZXJpdmVkX2F0dHJpYnV0ZXMsIGJpdHMgKTsKICAgICBURVNUX0VRVUFMKCBwc2Ffa2V5X2Rlcml2YXRpb25fb3V0cHV0X2tleSggJmRlcml2ZWRfYXR0cmlidXRlcywgJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlcml2ZWRfaGFuZGxlICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZXJpdmVkX2tleSApLAogICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1cyApOwogCiBleGl0OgogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9hYm9ydCggJm9wZXJhdGlvbiApOwotICAgIHBzYV9kZXN0cm95X2tleSggYmFzZV9oYW5kbGUgKTsKLSAgICBwc2FfZGVzdHJveV9rZXkoIGRlcml2ZWRfaGFuZGxlICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBiYXNlX2tleSApOworICAgIHBzYV9kZXN0cm95X2tleSggZGVyaXZlZF9rZXkgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQga2V5X2FncmVlbWVudF9zZXR1cCggaW50IGFsZ19hcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvdXJfa2V5X3R5cGVfYXJnLCBkYXRhX3QgKm91cl9rZXlfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpwZWVyX2tleV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3VyX2tleV90eXBlX2FyZywgaW50IG91cl9rZXlfYWxnX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpvdXJfa2V5X2RhdGEsIGRhdGFfdCAqcGVlcl9rZXlfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX3N0YXR1c19hcmcgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3Qgb3VyX2tleSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qgb3VyX2tleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOworICAgIHBzYV9hbGdvcml0aG1fdCBvdXJfa2V5X2FsZyA9IG91cl9rZXlfYWxnX2FyZzsKICAgICBwc2Ffa2V5X3R5cGVfdCBvdXJfa2V5X3R5cGUgPSBvdXJfa2V5X3R5cGVfYXJnOwogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9vcGVyYXRpb25fdCBvcGVyYXRpb24gPSBQU0FfS0VZX0RFUklWQVRJT05fT1BFUkFUSU9OX0lOSVQ7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwpAQCAtNTIzNSw3ICs1MzQxLDcgQEAKICAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKIAogICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywgUFNBX0tFWV9VU0FHRV9ERVJJVkUgKTsKLSAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCBhbGcgKTsKKyAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCBvdXJfa2V5X2FsZyApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBvdXJfa2V5X3R5cGUgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91cl9rZXlfZGF0YS0+eCwgb3VyX2tleV9kYXRhLT5sZW4sCkBAIC01MjcyLDcgKzUzNzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpwZWVyX2tleV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpleHBlY3RlZF9vdXRwdXQgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3Qgb3VyX2tleSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qgb3VyX2tleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHBzYV9rZXlfdHlwZV90IG91cl9rZXlfdHlwZSA9IG91cl9rZXlfdHlwZV9hcmc7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwpAQCAtNTMwOSw3ICs1NDE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpwZWVyX2tleV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfY2FwYWNpdHlfYXJnICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IG91cl9rZXkgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IG91cl9rZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gYWxnX2FyZzsKICAgICBwc2Ffa2V5X3R5cGVfdCBvdXJfa2V5X3R5cGUgPSBvdXJfa2V5X3R5cGVfYXJnOwogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9vcGVyYXRpb25fdCBvcGVyYXRpb24gPSBQU0FfS0VZX0RFUklWQVRJT05fT1BFUkFUSU9OX0lOSVQ7CkBAIC01MzY5LDcgKzU0NzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpwZWVyX2tleV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpleHBlY3RlZF9vdXRwdXQxLCBkYXRhX3QgKmV4cGVjdGVkX291dHB1dDIgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3Qgb3VyX2tleSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qgb3VyX2tleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHBzYV9rZXlfdHlwZV90IG91cl9rZXlfdHlwZSA9IG91cl9rZXlfdHlwZV9hcmc7CiAgICAgcHNhX2tleV9kZXJpdmF0aW9uX29wZXJhdGlvbl90IG9wZXJhdGlvbiA9IFBTQV9LRVlfREVSSVZBVElPTl9PUEVSQVRJT05fSU5JVDsKQEAgLTU0ODMsNyArNTU4OSw3IEBACiAgICAgICAgICAgICAgICAgICAgaW50IGFsZ19hcmcsCiAgICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX3N0YXR1c19hcmcgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCB0eXBlID0gdHlwZV9hcmc7CiAgICAgcHNhX2tleV91c2FnZV90IHVzYWdlID0gdXNhZ2VfYXJnOwogICAgIHNpemVfdCBiaXRzID0gYml0c19hcmc7CkBAIC01NTAwLDIyICs1NjA2LDI3IEBACiAgICAgcHNhX3NldF9rZXlfYml0cyggJmF0dHJpYnV0ZXMsIGJpdHMgKTsKIAogICAgIC8qIEdlbmVyYXRlIGEga2V5ICovCi0gICAgVEVTVF9FUVVBTCggcHNhX2dlbmVyYXRlX2tleSggJmF0dHJpYnV0ZXMsICZoYW5kbGUgKSwgZXhwZWN0ZWRfc3RhdHVzICk7CisgICAgVEVTVF9FUVVBTCggcHNhX2dlbmVyYXRlX2tleSggJmF0dHJpYnV0ZXMsICZrZXkgKSwgZXhwZWN0ZWRfc3RhdHVzICk7CiAgICAgaWYoIGV4cGVjdGVkX3N0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIGdvdG8gZXhpdDsKIAogICAgIC8qIFRlc3QgdGhlIGtleSBpbmZvcm1hdGlvbiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmdvdF9hdHRyaWJ1dGVzICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBrZXksICZnb3RfYXR0cmlidXRlcyApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdHlwZSggJmdvdF9hdHRyaWJ1dGVzICksIHR5cGUgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9iaXRzKCAmZ290X2F0dHJpYnV0ZXMgKSwgYml0cyApOwogCiAgICAgLyogRG8gc29tZXRoaW5nIHdpdGggdGhlIGtleSBhY2NvcmRpbmcgdG8gaXRzIHR5cGUgYW5kIHBlcm1pdHRlZCB1c2FnZS4gKi8KLSAgICBpZiggISBleGVyY2lzZV9rZXkoIGhhbmRsZSwgdXNhZ2UsIGFsZyApICkKKyAgICBpZiggISBleGVyY2lzZV9rZXkoIGtleSwgdXNhZ2UsIGFsZyApICkKICAgICAgICAgZ290byBleGl0OwogCiBleGl0OgorICAgIC8qCisgICAgICogS2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCkKKyAgICAgKiB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmZ290X2F0dHJpYnV0ZXMgKTsKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworCisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KIC8qIEVORF9DQVNFICovCkBAIC01NTI1LDcgKzU2MzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmVfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfc3RhdHVzX2FyZyApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IHR5cGUgPSBQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSOwogICAgIHNpemVfdCBiaXRzID0gYml0c19hcmc7CiAgICAgcHNhX2tleV91c2FnZV90IHVzYWdlID0gUFNBX0tFWV9VU0FHRV9FTkNSWVBUIHwgUFNBX0tFWV9VU0FHRV9ERUNSWVBUOwpAQCAtNTU2MCwxMiArNTY3MSwxMiBAQAogICAgIHBzYV9zZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzLCBiaXRzICk7CiAKICAgICAvKiBHZW5lcmF0ZSBhIGtleSAqLwotICAgIFRFU1RfRVFVQUwoIHBzYV9nZW5lcmF0ZV9rZXkoICZhdHRyaWJ1dGVzLCAmaGFuZGxlICksIGV4cGVjdGVkX3N0YXR1cyApOworICAgIFRFU1RfRVFVQUwoIHBzYV9nZW5lcmF0ZV9rZXkoICZhdHRyaWJ1dGVzLCAma2V5ICksIGV4cGVjdGVkX3N0YXR1cyApOwogICAgIGlmKCBleHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICAvKiBUZXN0IHRoZSBrZXkgaW5mb3JtYXRpb24gKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBrZXksICZhdHRyaWJ1dGVzICkgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV90eXBlKCAmYXR0cmlidXRlcyApLCB0eXBlICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfYml0cyggJmF0dHJpYnV0ZXMgKSwgYml0cyApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2RvbWFpbl9wYXJhbWV0ZXJzKCAmYXR0cmlidXRlcywKQEAgLTU1NzcsMTEgKzU2ODgsMTEgQEAKICAgICAgICAgQVNTRVJUX0NPTVBBUkUoIGVfcmVhZF9idWZmZXIsIGVfcmVhZF9sZW5ndGgsIGVfYXJnLT54LCBlX2FyZy0+bGVuICk7CiAKICAgICAvKiBEbyBzb21ldGhpbmcgd2l0aCB0aGUga2V5IGFjY29yZGluZyB0byBpdHMgdHlwZSBhbmQgcGVybWl0dGVkIHVzYWdlLiAqLwotICAgIGlmKCAhIGV4ZXJjaXNlX2tleSggaGFuZGxlLCB1c2FnZSwgYWxnICkgKQorICAgIGlmKCAhIGV4ZXJjaXNlX2tleSgga2V5LCB1c2FnZSwgYWxnICkgKQogICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICAvKiBFeHBvcnQgdGhlIGtleSBhbmQgY2hlY2sgdGhlIHB1YmxpYyBleHBvbmVudC4gKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X3B1YmxpY19rZXkoIGhhbmRsZSwKKyAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X3B1YmxpY19rZXkoIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkLCBleHBvcnRlZF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4cG9ydGVkX2xlbmd0aCApICk7CiAgICAgewpAQCAtNTYxNSw4ICs1NzI2LDEzIEBACiAgICAgfQogCiBleGl0OgorICAgIC8qCisgICAgICogS2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCkgb3IKKyAgICAgKiBzZXQgYnkgcHNhX3NldF9rZXlfZG9tYWluX3BhcmFtZXRlcnMoKSB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOwotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogICAgIG1iZWR0bHNfZnJlZSggZV9yZWFkX2J1ZmZlciApOwogICAgIG1iZWR0bHNfZnJlZSggZXhwb3J0ZWQgKTsKQEAgLTU2MzEsOCArNTc0Nyw4IEBACiB7CiAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5X2lkID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDEsIDEgKTsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgYmFzZV9rZXkgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGJhc2Vfa2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2tleV90eXBlX3QgdHlwZSA9IHR5cGVfYXJnOwogICAgIHNpemVfdCBiaXRzID0gYml0c19hcmc7CiAgICAgcHNhX2tleV91c2FnZV90IHVzYWdlX2ZsYWdzID0gdXNhZ2VfZmxhZ3NfYXJnOwpAQCAtNTY2MywxMiArNTc3OSwxMiBAQAogICAgICAgICBjYXNlIElNUE9SVF9LRVk6CiAgICAgICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSAqLwogICAgICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBkYXRhLT54LCBkYXRhLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEdFTkVSQVRFX0tFWToKICAgICAgICAgICAgIC8qIEdlbmVyYXRlIGEga2V5ICovCi0gICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZ2VuZXJhdGVfa2V5KCAmYXR0cmlidXRlcywgJmhhbmRsZSApICk7CisgICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZ2VuZXJhdGVfa2V5KCAmYXR0cmlidXRlcywgJmtleSApICk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIERFUklWRV9LRVk6CkBAIC01NjkzLDEwICs1ODA5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAgKSApOwogICAgICAgICAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9rZXlfZGVyaXZhdGlvbl9vdXRwdXRfa2V5KCAmYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkgKSApOwogICAgICAgICAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9rZXlfZGVyaXZhdGlvbl9hYm9ydCggJm9wZXJhdGlvbiApICk7CiAgICAgICAgICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBiYXNlX2tleSApICk7Ci0gICAgICAgICAgICAgICAgYmFzZV9rZXkgPSAwOworICAgICAgICAgICAgICAgIGJhc2Vfa2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU3MDUsNyArNTgyMSw3IEBACiAgICAgLyogRXhwb3J0IHRoZSBrZXkgaWYgcGVybWl0dGVkIGJ5IHRoZSBrZXkgcG9saWN5LiAqLwogICAgIGlmKCB1c2FnZV9mbGFncyAmIFBTQV9LRVlfVVNBR0VfRVhQT1JUICkKICAgICB7Ci0gICAgICAgIFBTQV9BU1NFUlQoIHBzYV9leHBvcnRfa2V5KCBoYW5kbGUsCisgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9leHBvcnRfa2V5KCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9leHBvcnQsIGV4cG9ydF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpcnN0X2V4cG9ydGVkX2xlbmd0aCApICk7CiAgICAgICAgIGlmKCBnZW5lcmF0aW9uX21ldGhvZCA9PSBJTVBPUlRfS0VZICkKQEAgLTU3MTQsMTMgKzU4MzAsMTIgQEAKICAgICB9CiAKICAgICAvKiBTaHV0ZG93biBhbmQgcmVzdGFydCAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9jbG9zZV9rZXkoIGhhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX3B1cmdlX2tleSgga2V5ICkgKTsKICAgICBQU0FfRE9ORSgpOwogICAgIFBTQV9BU1NFUlQoIHBzYV9jcnlwdG9faW5pdCgpICk7CiAKICAgICAvKiBDaGVjayBrZXkgc2xvdCBzdGlsbCBjb250YWlucyBrZXkgZGF0YSAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9vcGVuX2tleSgga2V5X2lkLCAmaGFuZGxlICkgKTsKLSAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBrZXksICZhdHRyaWJ1dGVzICkgKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKAogICAgICAgICAgICAgICAgICAgICAgcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzICksIGtleV9pZCApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfbGlmZXRpbWUoICZhdHRyaWJ1dGVzICksCkBAIC01NzMzLDcgKzU4NDgsNyBAQAogICAgIC8qIEV4cG9ydCB0aGUga2V5IGFnYWluIGlmIHBlcm1pdHRlZCBieSB0aGUga2V5IHBvbGljeS4gKi8KICAgICBpZiggdXNhZ2VfZmxhZ3MgJiBQU0FfS0VZX1VTQUdFX0VYUE9SVCApCiAgICAgewotICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSggaGFuZGxlLAorICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSgga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kX2V4cG9ydCwgZXhwb3J0X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Vjb25kX2V4cG9ydGVkX2xlbmd0aCApICk7CiAgICAgICAgIEFTU0VSVF9DT01QQVJFKCBmaXJzdF9leHBvcnQsIGZpcnN0X2V4cG9ydGVkX2xlbmd0aCwKQEAgLTU3NDEsMjMgKzU4NTYsMjEgQEAKICAgICB9CiAKICAgICAvKiBEbyBzb21ldGhpbmcgd2l0aCB0aGUga2V5IGFjY29yZGluZyB0byBpdHMgdHlwZSBhbmQgcGVybWl0dGVkIHVzYWdlLiAqLwotICAgIGlmKCAhIGV4ZXJjaXNlX2tleSggaGFuZGxlLCB1c2FnZV9mbGFncywgYWxnICkgKQorICAgIGlmKCAhIGV4ZXJjaXNlX2tleSgga2V5LCB1c2FnZV9mbGFncywgYWxnICkgKQogICAgICAgICBnb3RvIGV4aXQ7CiAKIGV4aXQ6CisgICAgLyoKKyAgICAgKiBLZXkgYXR0cmlidXRlcyBtYXkgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoKQorICAgICAqIHRodXMgcmVzZXQgdGhlbSBhcyByZXF1aXJlZC4KKyAgICAgKi8KICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7CisKICAgICBtYmVkdGxzX2ZyZWUoIGZpcnN0X2V4cG9ydCApOwogICAgIG1iZWR0bHNfZnJlZSggc2Vjb25kX2V4cG9ydCApOwogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9hYm9ydCggJm9wZXJhdGlvbiApOwogICAgIHBzYV9kZXN0cm95X2tleSggYmFzZV9rZXkgKTsKLSAgICBpZiggaGFuZGxlID09IDAgKQotICAgIHsKLSAgICAgICAgLyogSW4gY2FzZSB0aGVyZSB3YXMgYSB0ZXN0IGZhaWx1cmUgYWZ0ZXIgY3JlYXRpbmcgdGhlIHBlcnNpc3RlbnQga2V5Ci0gICAgICAgICAqIGJ1dCB3aGlsZSBpdCB3YXMgbm90IG9wZW4sIHRyeSB0byByZS1vcGVuIHRoZSBwZXJzaXN0ZW50IGtleQotICAgICAgICAgKiB0byBkZWxldGUgaXQuICovCi0gICAgICAgICh2b2lkKSBwc2Ffb3Blbl9rZXkoIGtleV9pZCwgJmhhbmRsZSApOwotICAgIH0KLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgUFNBX0RPTkUoKTsKIH0KIC8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX2RyaXZlcl93cmFwcGVycy5kYXRhIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19kcml2ZXJfd3JhcHBlcnMuZGF0YQppbmRleCA3YWJjMjU2Li4yYjE0MDBiIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX2RyaXZlcl93cmFwcGVycy5kYXRhCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fZHJpdmVyX3dyYXBwZXJzLmRhdGEKQEAgLTQwLDYgKzQwLDQxIEBACiBnZW5lcmF0ZV9rZXkgdGhyb3VnaCB0cmFuc3BhcmVudCBkcml2ZXI6IGVycm9yCiBnZW5lcmF0ZV9rZXk6UFNBX0VSUk9SX0dFTkVSSUNfRVJST1I6IiI6UFNBX0VSUk9SX0dFTkVSSUNfRVJST1IKIAordmFsaWRhdGUga2V5IHRocm91Z2ggdHJhbnNwYXJlbnQgZHJpdmVyOiBnb29kIHByaXZhdGUga2V5CitkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX1BLX1dSSVRFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAordmFsaWRhdGVfa2V5OlBTQV9TVUNDRVNTOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9TVUNDRVNTCisKK3ZhbGlkYXRlIGtleSB0aHJvdWdoIHRyYW5zcGFyZW50IGRyaXZlcjogZ29vZCBwdWJsaWMga2V5CitkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX1BLX1dSSVRFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAordmFsaWRhdGVfa2V5OlBTQV9TVUNDRVNTOlBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWShQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiMDRkZWE1ZTQ1ZDBlYTM3ZmM1NjYyMzJhNTA4ZjRhZDIwZWExM2Q0N2U0YmY1ZmE0ZDU0YTU3YTBiYTAxMjA0MjA4NzA5NzQ5NmVmYzU4M2ZlZDhiMjRhNWI5YmU5YTUxZGUwNjNmNWEwMGE4YjY5OGExNmZkN2YyOWI1NDg1ZjMyMCI6UFNBX1NVQ0NFU1MKKwordmFsaWRhdGUga2V5IHRocm91Z2ggdHJhbnNwYXJlbnQgZHJpdmVyOiBmYWxsYmFjayBwcml2YXRlIGtleQorZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19QS19XUklURV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK3ZhbGlkYXRlX2tleTpQU0FfRVJST1JfTk9UX1NVUFBPUlRFRDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpQU0FfU1VDQ0VTUworCit2YWxpZGF0ZSBrZXkgdGhyb3VnaCB0cmFuc3BhcmVudCBkcml2ZXI6IGZhbGxiYWNrIHB1YmxpYyBrZXkKK2RlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfUEtfV1JJVEVfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECit2YWxpZGF0ZV9rZXk6UFNBX0VSUk9SX05PVF9TVVBQT1JURUQ6UFNBX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiIwNGRlYTVlNDVkMGVhMzdmYzU2NjIzMmE1MDhmNGFkMjBlYTEzZDQ3ZTRiZjVmYTRkNTRhNTdhMGJhMDEyMDQyMDg3MDk3NDk2ZWZjNTgzZmVkOGIyNGE1YjliZTlhNTFkZTA2M2Y1YTAwYThiNjk4YTE2ZmQ3ZjI5YjU0ODVmMzIwIjpQU0FfU1VDQ0VTUworCit2YWxpZGF0ZSBrZXkgdGhyb3VnaCB0cmFuc3BhcmVudCBkcml2ZXI6IGVycm9yCit2YWxpZGF0ZV9rZXk6UFNBX0VSUk9SX0dFTkVSSUNfRVJST1I6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0VSUk9SX0dFTkVSSUNfRVJST1IKKworZXhwb3J0X2tleSBwcml2YXRlIHRvIHB1YmxpYyB0aHJvdWdoIGRyaXZlcjogZmFrZQorZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19QS19XUklURV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK2V4cG9ydF9rZXk6UFNBX1NVQ0NFU1M6IjAxMDIwMzA0MDUiOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWShQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiIjpQU0FfU1VDQ0VTUworCitleHBvcnRfa2V5IHByaXZhdGUgdG8gcHVibGljIHRocm91Z2ggZHJpdmVyOiBpbi1kcml2ZXIKK2RlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfUEtfV1JJVEVfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECitleHBvcnRfa2V5OlBTQV9TVUNDRVNTOiIiOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWShQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiMDQ3NzcyNjU2ZjgxNGIzOTkyNzlkNWUxZjE3ODFmYWM2ZjA5OWEzYzVjYTFiMGUzNTM1MTgzNGIwOGI2NWUwYjU3MjU5MGNkYWY4Zjc2OTM2MWJjZjM0YWNmYzExZTVlMDc0ZTg0MjZiZGRlMDRiZTZlNjUzOTQ1NDQ5NjE3ZGU0NSI6UFNBX1NVQ0NFU1MKKworZXhwb3J0X2tleSBwcml2YXRlIHRvIHB1YmxpYyB0aHJvdWdoIGRyaXZlcjogZmFsbGJhY2sKK2RlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfUEtfV1JJVEVfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECitleHBvcnRfa2V5OlBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEOiIiOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWShQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiMDQ3NzcyNjU2ZjgxNGIzOTkyNzlkNWUxZjE3ODFmYWM2ZjA5OWEzYzVjYTFiMGUzNTM1MTgzNGIwOGI2NWUwYjU3MjU5MGNkYWY4Zjc2OTM2MWJjZjM0YWNmYzExZTVlMDc0ZTg0MjZiZGRlMDRiZTZlNjUzOTQ1NDQ5NjE3ZGU0NSI6UFNBX1NVQ0NFU1MKKworZXhwb3J0X2tleSBwcml2YXRlIHRvIHB1YmxpYyB0aHJvdWdoIGRyaXZlcjogZXJyb3IKK2RlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfUEtfV1JJVEVfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECitleHBvcnRfa2V5OlBTQV9FUlJPUl9HRU5FUklDX0VSUk9SOiIiOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWShQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiIjpQU0FfRVJST1JfR0VORVJJQ19FUlJPUgorCiBQU0Egc3ltbWV0cmljIGVuY3J5cHQ6IEFFUy1DVFIsIDE2IGJ5dGVzLCBnb29kCiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKIGNpcGhlcl9lbmNyeXB0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYSI6IjhmOTQwOGZlODBhODFkM2U4MTNkYTNjN2IwYjJiZDMyIjowOlBTQV9TVUNDRVNTOlBTQV9TVUNDRVNTCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX2RyaXZlcl93cmFwcGVycy5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fZHJpdmVyX3dyYXBwZXJzLmZ1bmN0aW9uCmluZGV4IDk1MTY3MGQuLjZkMjBlZmYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fZHJpdmVyX3dyYXBwZXJzLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fZHJpdmVyX3dyYXBwZXJzLmZ1bmN0aW9uCkBAIC0xOSw3ICsxOSw3IEBACiB7CiAgICAgcHNhX3N0YXR1c190IGZvcmNlX3N0YXR1cyA9IGZvcmNlX3N0YXR1c19hcmc7CiAgICAgcHNhX3N0YXR1c190IGV4cGVjdGVkX3N0YXR1cyA9IGV4cGVjdGVkX3N0YXR1c19hcmc7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gUFNBX0FMR19ERVRFUk1JTklTVElDX0VDRFNBKCBQU0FfQUxHX1NIQV8yNTYgKTsKICAgICB1aW50OF90IHNpZ25hdHVyZVs2NF07CkBAIC0zNCw3ICszNCw3IEBACiAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnICk7CiAgICAgcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICBrZXlfaW5wdXQtPngsIGtleV9pbnB1dC0+bGVuLAotICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICk7CisgICAgICAgICAgICAgICAgICAgICZrZXkgKTsKIAogICAgIHRlc3RfZHJpdmVyX3NpZ25hdHVyZV9zaWduX2hvb2tzLmZvcmNlZF9zdGF0dXMgPSBmb3JjZV9zdGF0dXM7CiAgICAgaWYoIGZha2Vfb3V0cHV0ID09IDEgKQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICB0ZXN0X2RyaXZlcl9zaWduYXR1cmVfc2lnbl9ob29rcy5mb3JjZWRfb3V0cHV0X2xlbmd0aCA9IGV4cGVjdGVkX291dHB1dC0+bGVuOwogICAgIH0KIAotICAgIGFjdHVhbF9zdGF0dXMgPSBwc2Ffc2lnbl9oYXNoKCBoYW5kbGUsIGFsZywKKyAgICBhY3R1YWxfc3RhdHVzID0gcHNhX3NpZ25faGFzaCgga2V5LCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfaW5wdXQtPngsIGRhdGFfaW5wdXQtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLCBzaXplb2YoIHNpZ25hdHVyZSApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2lnbmF0dXJlX2xlbmd0aCApOwpAQCAtNTcsNyArNTcsNyBAQAogCiBleGl0OgogICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgUFNBX0RPTkUoICk7CiAgICAgdGVzdF9kcml2ZXJfc2lnbmF0dXJlX3NpZ25faG9va3MgPSB0ZXN0X2RyaXZlcl9zaWduYXR1cmVfaG9va3NfaW5pdCgpOwogfQpAQCAtNzMsNyArNzMsNyBAQAogewogICAgIHBzYV9zdGF0dXNfdCBmb3JjZV9zdGF0dXMgPSBmb3JjZV9zdGF0dXNfYXJnOwogICAgIHBzYV9zdGF0dXNfdCBleHBlY3RlZF9zdGF0dXMgPSBleHBlY3RlZF9zdGF0dXNfYXJnOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IFBTQV9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSggUFNBX0FMR19TSEFfMjU2ICk7CiAgICAgcHNhX3N0YXR1c190IGFjdHVhbF9zdGF0dXM7CkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIGFsZyApOwogICAgICAgICBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfaW5wdXQtPngsIGtleV9pbnB1dC0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApOworICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtOTgsMTIgKzk4LDEyIEBACiAgICAgICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIGFsZyApOwogICAgICAgICBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfaW5wdXQtPngsIGtleV9pbnB1dC0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApOworICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApOwogICAgIH0KIAogICAgIHRlc3RfZHJpdmVyX3NpZ25hdHVyZV92ZXJpZnlfaG9va3MuZm9yY2VkX3N0YXR1cyA9IGZvcmNlX3N0YXR1czsKIAotICAgIGFjdHVhbF9zdGF0dXMgPSBwc2FfdmVyaWZ5X2hhc2goIGhhbmRsZSwgYWxnLAorICAgIGFjdHVhbF9zdGF0dXMgPSBwc2FfdmVyaWZ5X2hhc2goIGtleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfaW5wdXQtPngsIGRhdGFfaW5wdXQtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfaW5wdXQtPngsIHNpZ25hdHVyZV9pbnB1dC0+bGVuICk7CiAgICAgVEVTVF9FUVVBTCggYWN0dWFsX3N0YXR1cywgZXhwZWN0ZWRfc3RhdHVzICk7CkBAIC0xMTEsNyArMTExLDcgQEAKIAogZXhpdDoKICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogICAgIHRlc3RfZHJpdmVyX3NpZ25hdHVyZV92ZXJpZnlfaG9va3MgPSB0ZXN0X2RyaXZlcl9zaWduYXR1cmVfaG9va3NfaW5pdCgpOwogfQpAQCAtMTI0LDcgKzEyNCw3IEBACiB7CiAgICAgcHNhX3N0YXR1c190IGZvcmNlX3N0YXR1cyA9IGZvcmNlX3N0YXR1c19hcmc7CiAgICAgcHNhX3N0YXR1c190IGV4cGVjdGVkX3N0YXR1cyA9IGV4cGVjdGVkX3N0YXR1c19hcmc7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gUFNBX0FMR19FQ0RTQSggUFNBX0FMR19TSEFfMjU2ICk7CiAgICAgY29uc3QgdWludDhfdCAqZXhwZWN0ZWRfb3V0cHV0ID0gTlVMTDsKQEAgLTEzMiw3ICsxMzIsNyBAQAogICAgIHBzYV9zdGF0dXNfdCBhY3R1YWxfc3RhdHVzOwogICAgIHVpbnQ4X3QgYWN0dWFsX291dHB1dFtQU0FfS0VZX0VYUE9SVF9FQ0NfS0VZX1BBSVJfTUFYX1NJWkUoMjU2KV0gPSB7MH07CiAgICAgc2l6ZV90IGFjdHVhbF9vdXRwdXRfbGVuZ3RoOwotICAgIHRlc3RfZHJpdmVyX2tleWdlbl9ob29rcyA9IHRlc3RfZHJpdmVyX2tleWdlbl9ob29rc19pbml0KCk7CisgICAgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MgPSB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rc19pbml0KCk7CiAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICBQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKCBQU0FfRUNDX0NVUlZFX1NFQ1BfUjEgKSApOwpAQCAtMTQyLDIzICsxNDIsMjMgQEAKIAogICAgIGlmKCBmYWtlX291dHB1dC0+bGVuID4gMCApCiAgICAgewotICAgICAgICBleHBlY3RlZF9vdXRwdXQgPSB0ZXN0X2RyaXZlcl9rZXlnZW5faG9va3MuZm9yY2VkX291dHB1dCA9IGZha2Vfb3V0cHV0LT54OwotICAgICAgICBleHBlY3RlZF9vdXRwdXRfbGVuZ3RoID0gdGVzdF9kcml2ZXJfa2V5Z2VuX2hvb2tzLmZvcmNlZF9vdXRwdXRfbGVuZ3RoID0KKyAgICAgICAgZXhwZWN0ZWRfb3V0cHV0ID0gdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX291dHB1dCA9IGZha2Vfb3V0cHV0LT54OworICAgICAgICBleHBlY3RlZF9vdXRwdXRfbGVuZ3RoID0gdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX291dHB1dF9sZW5ndGggPQogICAgICAgICAgICAgZmFrZV9vdXRwdXQtPmxlbjsKICAgICB9CiAKLSAgICB0ZXN0X2RyaXZlcl9rZXlnZW5faG9va3MuaGl0cyA9IDA7Ci0gICAgdGVzdF9kcml2ZXJfa2V5Z2VuX2hvb2tzLmZvcmNlZF9zdGF0dXMgPSBmb3JjZV9zdGF0dXM7CisgICAgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuaGl0cyA9IDA7CisgICAgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX3N0YXR1cyA9IGZvcmNlX3N0YXR1czsKIAogICAgIFBTQV9BU1NFUlQoIHBzYV9jcnlwdG9faW5pdCggKSApOwogCi0gICAgYWN0dWFsX3N0YXR1cyA9IHBzYV9nZW5lcmF0ZV9rZXkoICZhdHRyaWJ1dGVzLCAmaGFuZGxlICk7Ci0gICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfa2V5Z2VuX2hvb2tzLmhpdHMsIDEgKTsKKyAgICBhY3R1YWxfc3RhdHVzID0gcHNhX2dlbmVyYXRlX2tleSggJmF0dHJpYnV0ZXMsICZrZXkgKTsKKyAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5oaXRzLCAxICk7CiAgICAgVEVTVF9FUVVBTCggYWN0dWFsX3N0YXR1cywgZXhwZWN0ZWRfc3RhdHVzICk7CiAKICAgICBpZiggYWN0dWFsX3N0YXR1cyA9PSBQU0FfU1VDQ0VTUyApCiAgICAgewotICAgICAgICBwc2FfZXhwb3J0X2tleSggaGFuZGxlLCBhY3R1YWxfb3V0cHV0LCBzaXplb2YoYWN0dWFsX291dHB1dCksICZhY3R1YWxfb3V0cHV0X2xlbmd0aCApOworICAgICAgICBwc2FfZXhwb3J0X2tleSgga2V5LCBhY3R1YWxfb3V0cHV0LCBzaXplb2YoYWN0dWFsX291dHB1dCksICZhY3R1YWxfb3V0cHV0X2xlbmd0aCApOwogCiAgICAgICAgIGlmKCBmYWtlX291dHB1dC0+bGVuID4gMCApCiAgICAgICAgIHsKQEAgLTE3OCwyMSArMTc4LDEyMiBAQAogICAgIH0KIGV4aXQ6CiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CisgICAgUFNBX0RPTkUoICk7CisgICAgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MgPSB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rc19pbml0KCk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEICovCit2b2lkIHZhbGlkYXRlX2tleSggaW50IGZvcmNlX3N0YXR1c19hcmcsCisgICAgICAgICAgICAgICAgICAgaW50IGtleV90eXBlX2FyZywKKyAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmtleV9pbnB1dCwKKyAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfc3RhdHVzX2FyZyApCit7CisgICAgcHNhX3N0YXR1c190IGZvcmNlX3N0YXR1cyA9IGZvcmNlX3N0YXR1c19hcmc7CisgICAgcHNhX3N0YXR1c190IGV4cGVjdGVkX3N0YXR1cyA9IGV4cGVjdGVkX3N0YXR1c19hcmc7CisgICAgcHNhX2tleV90eXBlX3Qga2V5X3R5cGUgPSBrZXlfdHlwZV9hcmc7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CisgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOworICAgIHBzYV9zdGF0dXNfdCBhY3R1YWxfc3RhdHVzOworICAgIHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzID0gdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3NfaW5pdCgpOworCisgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAga2V5X3R5cGUgKTsKKyAgICBwc2Ffc2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcywgMCApOworICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywgUFNBX0tFWV9VU0FHRV9FWFBPUlQgKTsKKworICAgIHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzLmZvcmNlZF9zdGF0dXMgPSBmb3JjZV9zdGF0dXM7CisKKyAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKKworICAgIGFjdHVhbF9zdGF0dXMgPSBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9pbnB1dC0+eCwga2V5X2lucHV0LT5sZW4sICZrZXkgKTsKKyAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5oaXRzLCAxICk7CisgICAgVEVTVF9FUVVBTCggYWN0dWFsX3N0YXR1cywgZXhwZWN0ZWRfc3RhdHVzICk7CitleGl0OgorICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOworICAgIFBTQV9ET05FKCApOworICAgIHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzID0gdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3NfaW5pdCgpOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCAqLwordm9pZCBleHBvcnRfa2V5KCBpbnQgZm9yY2Vfc3RhdHVzX2FyZywKKyAgICAgICAgICAgICAgICAgZGF0YV90ICpmYWtlX291dHB1dCwKKyAgICAgICAgICAgICAgICAgaW50IGtleV9pbl90eXBlX2FyZywKKyAgICAgICAgICAgICAgICAgZGF0YV90ICprZXlfaW4sCisgICAgICAgICAgICAgICAgIGludCBrZXlfb3V0X3R5cGVfYXJnLAorICAgICAgICAgICAgICAgICBkYXRhX3QgKmV4cGVjdGVkX291dHB1dCwKKyAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX3N0YXR1c19hcmcgKQoreworICAgIHBzYV9zdGF0dXNfdCBmb3JjZV9zdGF0dXMgPSBmb3JjZV9zdGF0dXNfYXJnOworICAgIHBzYV9zdGF0dXNfdCBleHBlY3RlZF9zdGF0dXMgPSBleHBlY3RlZF9zdGF0dXNfYXJnOworICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CisgICAgcHNhX2tleV90eXBlX3QgaW5wdXRfa2V5X3R5cGUgPSBrZXlfaW5fdHlwZV9hcmc7CisgICAgcHNhX2tleV90eXBlX3Qgb3V0cHV0X2tleV90eXBlID0ga2V5X291dF90eXBlX2FyZzsKKyAgICBjb25zdCB1aW50OF90ICpleHBlY3RlZF9vdXRwdXRfcHRyID0gTlVMTDsKKyAgICBzaXplX3QgZXhwZWN0ZWRfb3V0cHV0X2xlbmd0aCA9IDA7CisgICAgcHNhX3N0YXR1c190IGFjdHVhbF9zdGF0dXM7CisgICAgdWludDhfdCBhY3R1YWxfb3V0cHV0W1BTQV9LRVlfRVhQT1JUX0VDQ19QVUJMSUNfS0VZX01BWF9TSVpFKDI1NildID0gezB9OworICAgIHNpemVfdCBhY3R1YWxfb3V0cHV0X2xlbmd0aDsKKyAgICB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcyA9IHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzX2luaXQoKTsKKworICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBpbnB1dF9rZXlfdHlwZSApOworICAgIHBzYV9zZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzLCAyNTYgKTsKKyAgICBwc2Ffc2V0X2tleV91c2FnZV9mbGFncyggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVVNBR0VfRVhQT1JUICk7CisKKyAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9pbi0+eCwga2V5X2luLT5sZW4sICZoYW5kbGUgKSApOworCisgICAgaWYoIGZha2Vfb3V0cHV0LT5sZW4gPiAwICkKKyAgICB7CisgICAgICAgIGV4cGVjdGVkX291dHB1dF9wdHIgPSB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfb3V0cHV0ID0gZmFrZV9vdXRwdXQtPng7CisgICAgICAgIGV4cGVjdGVkX291dHB1dF9sZW5ndGggPSB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfb3V0cHV0X2xlbmd0aCA9CisgICAgICAgICAgICBmYWtlX291dHB1dC0+bGVuOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBleHBlY3RlZF9vdXRwdXRfcHRyID0gZXhwZWN0ZWRfb3V0cHV0LT54OworICAgICAgICBleHBlY3RlZF9vdXRwdXRfbGVuZ3RoID0gZXhwZWN0ZWRfb3V0cHV0LT5sZW47CisgICAgfQorCisgICAgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuaGl0cyA9IDA7CisgICAgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX3N0YXR1cyA9IGZvcmNlX3N0YXR1czsKKworICAgIGlmKCBQU0FfS0VZX1RZUEVfSVNfRUNDX1BVQkxJQ19LRVkoIG91dHB1dF9rZXlfdHlwZSApICkKKyAgICAgICAgYWN0dWFsX3N0YXR1cyA9IHBzYV9leHBvcnRfcHVibGljX2tleSggaGFuZGxlLCBhY3R1YWxfb3V0cHV0LCBzaXplb2YoYWN0dWFsX291dHB1dCksICZhY3R1YWxfb3V0cHV0X2xlbmd0aCApOworICAgIGVsc2UKKyAgICAgICAgYWN0dWFsX3N0YXR1cyA9IHBzYV9leHBvcnRfa2V5KCBoYW5kbGUsIGFjdHVhbF9vdXRwdXQsIHNpemVvZihhY3R1YWxfb3V0cHV0KSwgJmFjdHVhbF9vdXRwdXRfbGVuZ3RoICk7CisgICAgVEVTVF9FUVVBTCggYWN0dWFsX3N0YXR1cywgZXhwZWN0ZWRfc3RhdHVzICk7CisKKyAgICBpZiggUFNBX0tFWV9UWVBFX0lTX0VDQ19QVUJMSUNfS0VZKCBvdXRwdXRfa2V5X3R5cGUgKSAmJgorICAgICAgICAhUFNBX0tFWV9UWVBFX0lTX0VDQ19QVUJMSUNfS0VZKCBpbnB1dF9rZXlfdHlwZSApICkKKyAgICAgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuaGl0cywgMSApOworCisgICAgaWYoIGFjdHVhbF9zdGF0dXMgPT0gUFNBX1NVQ0NFU1MgKQorICAgIHsKKyAgICAgICAgQVNTRVJUX0NPTVBBUkUoIGFjdHVhbF9vdXRwdXQsIGFjdHVhbF9vdXRwdXRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfb3V0cHV0X3B0ciwgZXhwZWN0ZWRfb3V0cHV0X2xlbmd0aCApOworICAgIH0KK2V4aXQ6CisgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOwogICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CiAgICAgUFNBX0RPTkUoICk7Ci0gICAgdGVzdF9kcml2ZXJfa2V5Z2VuX2hvb2tzID0gdGVzdF9kcml2ZXJfa2V5Z2VuX2hvb2tzX2luaXQoKTsKKyAgICB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcyA9IHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzX2luaXQoKTsKIH0KIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgY2lwaGVyX2VuY3J5cHQoIGludCBhbGdfYXJnLCBpbnQga2V5X3R5cGVfYXJnLAotICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICprZXksIGRhdGFfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmtleV9kYXRhLCBkYXRhX3QgKml2LAogICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICppbnB1dCwgZGF0YV90ICpleHBlY3RlZF9vdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9ja19vdXRwdXRfYXJnLAogICAgICAgICAgICAgICAgICAgICAgaW50IGZvcmNlX3N0YXR1c19hcmcsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfc3RhdHVzX2FyZyApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAgICAgcHNhX2tleV90eXBlX3Qga2V5X3R5cGUgPSBrZXlfdHlwZV9hcmc7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IGFsZ19hcmc7CkBAIC0yMTMsMTAgKzMxNCwxMCBAQAogICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIGFsZyApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXktPngsIGtleS0+bGVuLCAmaGFuZGxlICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ICkgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYWxnICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICkgKTsKICAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cywgMSApOwogICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzID0gMDsKIApAQCAtMjcxLDcgKzM3Miw3IEBACiBleGl0OgogICAgIHBzYV9jaXBoZXJfYWJvcnQoICZvcGVyYXRpb24gKTsKICAgICBtYmVkdGxzX2ZyZWUoIG91dHB1dCApOwotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICBQU0FfRE9ORSggKTsKICAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MgPSB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3NfaW5pdCgpOwogfQpAQCAtMjc5LDEzICszODAsMTMgQEAKIAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBjaXBoZXJfZW5jcnlwdF9tdWx0aXBhcnQoIGludCBhbGdfYXJnLCBpbnQga2V5X3R5cGVfYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5LCBkYXRhX3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5X2RhdGEsIGRhdGFfdCAqaXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlyc3RfcGFydF9zaXplX2FyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3V0cHV0MV9sZW5ndGhfYXJnLCBpbnQgb3V0cHV0Ml9sZW5ndGhfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0ICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2tleV90eXBlX3Qga2V5X3R5cGUgPSBrZXlfdHlwZV9hcmc7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IGFsZ19hcmc7CiAgICAgc2l6ZV90IGZpcnN0X3BhcnRfc2l6ZSA9IGZpcnN0X3BhcnRfc2l6ZV9hcmc7CkBAIC0zMDUsMTAgKzQwNiwxMCBAQAogICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIGFsZyApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXktPngsIGtleS0+bGVuLCAmaGFuZGxlICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ICkgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYWxnICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICkgKTsKICAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cywgMSApOwogICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzID0gMDsKIApAQCAtMzU2LDcgKzQ1Nyw3IEBACiBleGl0OgogICAgIHBzYV9jaXBoZXJfYWJvcnQoICZvcGVyYXRpb24gKTsKICAgICBtYmVkdGxzX2ZyZWUoIG91dHB1dCApOwotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICBQU0FfRE9ORSggKTsKICAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MgPSB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3NfaW5pdCgpOwogfQpAQCAtMzY0LDE0ICs0NjUsMTMgQEAKIAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBjaXBoZXJfZGVjcnlwdF9tdWx0aXBhcnQoIGludCBhbGdfYXJnLCBpbnQga2V5X3R5cGVfYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5LCBkYXRhX3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5X2RhdGEsIGRhdGFfdCAqaXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlyc3RfcGFydF9zaXplX2FyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3V0cHV0MV9sZW5ndGhfYXJnLCBpbnQgb3V0cHV0Ml9sZW5ndGhfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0ICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7Ci0KKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCBrZXlfdHlwZSA9IGtleV90eXBlX2FyZzsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gYWxnX2FyZzsKICAgICBzaXplX3QgZmlyc3RfcGFydF9zaXplID0gZmlyc3RfcGFydF9zaXplX2FyZzsKQEAgLTM5MSwxMCArNDkxLDEwIEBACiAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnICk7CiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleS0+eCwga2V5LT5sZW4sICZoYW5kbGUgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2RhdGEtPngsIGtleV9kYXRhLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkgKSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwga2V5LCBhbGcgKSApOwogICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAxICk7CiAgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOwogCkBAIC00NDQsNyArNTQ0LDcgQEAKIGV4aXQ6CiAgICAgcHNhX2NpcGhlcl9hYm9ydCggJm9wZXJhdGlvbiApOwogICAgIG1iZWR0bHNfZnJlZSggb3V0cHV0ICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGtleSApOwogICAgIFBTQV9ET05FKCApOwogICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcyA9IHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rc19pbml0KCk7CiB9CkBAIC00NTIsMTMgKzU1MiwxMyBAQAogCiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIGNpcGhlcl9kZWNyeXB0KCBpbnQgYWxnX2FyZywgaW50IGtleV90eXBlX2FyZywKLSAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5LCBkYXRhX3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICprZXlfZGF0YSwgZGF0YV90ICppdiwKICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqaW5wdXQsIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgaW50IG1vY2tfb3V0cHV0X2FyZywKICAgICAgICAgICAgICAgICAgICAgIGludCBmb3JjZV9zdGF0dXNfYXJnLAogICAgICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX3N0YXR1c19hcmcgKQogewotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwpAQCAtNDc5LDEwICs1NzksMTAgQEAKICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCBhbGcgKTsKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywga2V5X3R5cGUgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5LT54LCBrZXktPmxlbiwgJmhhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXlfZGF0YS0+eCwga2V5X2RhdGEtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFsZyApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApICk7CiAgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDEgKTsKICAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cyA9IDA7CiAKQEAgLTUzNiw3ICs2MzYsNyBAQAogZXhpdDoKICAgICBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICk7CiAgICAgbWJlZHRsc19mcmVlKCBvdXRwdXQgKTsKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgUFNBX0RPTkUoICk7CiAgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzID0gdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzX2luaXQoKTsKIH0KQEAgLTU0NCwxMCArNjQ0LDEwIEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgY2lwaGVyX2VudHJ5X3BvaW50cyggaW50IGFsZ19hcmcsIGludCBrZXlfdHlwZV9hcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5LCBkYXRhX3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmtleV9kYXRhLCBkYXRhX3QgKml2LAogICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmlucHV0ICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1czsKICAgICBwc2Ffa2V5X3R5cGVfdCBrZXlfdHlwZSA9IGtleV90eXBlX2FyZzsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gYWxnX2FyZzsKQEAgLTU2NywxMiArNjY3LDEyIEBACiAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnICk7CiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleS0+eCwga2V5LT5sZW4sICZoYW5kbGUgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2RhdGEtPngsIGtleV9kYXRhLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkgKSApOwogCiAgICAgLyogVGVzdCBzZXR1cCBjYWxsLCBlbmNyeXB0ICovCiAgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgPSBQU0FfRVJST1JfR0VORVJJQ19FUlJPUjsKLSAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFsZyApOworICAgIHN0YXR1cyA9IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwga2V5LCBhbGcgKTsKICAgICAvKiBXaGVuIHNldHVwIGZhaWxzLCBpdCBzaG91bGRuJ3QgY2FsbCBhbnkgZnVydGhlciBlbnRyeSBwb2ludHMgKi8KICAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cywgMSApOwogICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgKTsKQEAgLTU4Miw4ICs2ODIsNyBAQAogICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAwICk7CiAKICAgICAvKiBUZXN0IHNldHVwIGNhbGwgZmFpbHVyZSwgZGVjcnlwdCAqLwotICAgIHN0YXR1cyA9IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYWxnICk7CisgICAgc3RhdHVzID0gcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApOwogICAgIC8qIFdoZW4gc2V0dXAgZmFpbHMsIGl0IHNob3VsZG4ndCBjYWxsIGFueSBmdXJ0aGVyIGVudHJ5IHBvaW50cyAqLwogICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAxICk7CiAgICAgVEVTVF9FUVVBTCggc3RhdHVzLCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyApOwpAQCAtNTk0LDggKzY5Myw3IEBACiAKICAgICAvKiBUZXN0IElWIHNldHRpbmcgZmFpbHVyZSAqLwogICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzID0gUFNBX1NVQ0NFU1M7Ci0gICAgc3RhdHVzID0gcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKTsKKyAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICk7CiAgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDEgKTsKICAgICBURVNUX0VRVUFMKCBzdGF0dXMsIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICk7CiAgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOwpAQCAtNjE3LDggKzcxNSw3IEBACiAKICAgICAvKiBUZXN0IElWIGdlbmVyYXRpb24gZmFpbHVyZSAqLwogICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzID0gUFNBX1NVQ0NFU1M7Ci0gICAgc3RhdHVzID0gcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKTsKKyAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sIGtleSwgYWxnICk7CiAgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDEgKTsKICAgICBURVNUX0VRVUFMKCBzdGF0dXMsIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICk7CiAgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOwpAQCAtNjQwLDggKzczNyw3IEBACiAKICAgICAvKiBUZXN0IHVwZGF0ZSBmYWlsdXJlICovCiAgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgPSBQU0FfU1VDQ0VTUzsKLSAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFsZyApOworICAgIHN0YXR1cyA9IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwga2V5LCBhbGcgKTsKICAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cywgMSApOwogICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgKTsKICAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cyA9IDA7CkBAIC02NzEsOCArNzY3LDcgQEAKIAogICAgIC8qIFRlc3QgZmluaXNoIGZhaWx1cmUgKi8KICAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyA9IFBTQV9TVUNDRVNTOwotICAgIHN0YXR1cyA9IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYWxnICk7CisgICAgc3RhdHVzID0gcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLCBrZXksIGFsZyApOwogICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAxICk7CiAgICAgVEVTVF9FUVVBTCggc3RhdHVzLCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyApOwogICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzID0gMDsKQEAgLTcxMSw3ICs4MDYsNyBAQAogZXhpdDoKICAgICBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICk7CiAgICAgbWJlZHRsc19mcmVlKCBvdXRwdXQgKTsKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgUFNBX0RPTkUoICk7CiAgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzID0gdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9faW5pdC5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9faW5pdC5mdW5jdGlvbgppbmRleCBmZDRmZjIxLi42MmVmNmUyIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX2luaXQuZnVuY3Rpb24KKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19pbml0LmZ1bmN0aW9uCkBAIC0xODUsNyArMTg1LDcgQEAKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwogICAgIHVpbnQ4X3QgZGF0YVsxMF0gPSB7IDAgfTsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAweGRlYWQ7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDB4ZGVhZCwgMHhkZWFkICk7CiAgICAgaW50IGk7CiAKICAgICBmb3IoIGkgPSAwOyBpIDwgY291bnQ7IGkrKyApCkBAIC0xOTUsOSArMTk1LDkgQEAKICAgICAgICAgUFNBX0RPTkUoICk7CiAgICAgfQogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBQU0FfS0VZX1RZUEVfUkFXX0RBVEEgKTsKLSAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGRhdGEsIHNpemVvZiggZGF0YSApLCAmaGFuZGxlICk7CisgICAgc3RhdHVzID0gcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBkYXRhLCBzaXplb2YoIGRhdGEgKSwgJmtleSApOwogICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSApOwotICAgIFRFU1RfRVFVQUwoIGhhbmRsZSwgMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3N2Y19rZXlfaWRfaXNfbnVsbCgga2V5ICkgKTsKIH0KIC8qIEVORF9DQVNFICovCiAKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fcGVyc2lzdGVudF9rZXkuZGF0YSBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fcGVyc2lzdGVudF9rZXkuZGF0YQppbmRleCBmNjVlNTdlLi45M2YwZmMwIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3BlcnNpc3RlbnRfa2V5LmRhdGEKKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19wZXJzaXN0ZW50X2tleS5kYXRhCkBAIC0xLDI2ICsxLDI2IEBACiBGb3JtYXQgZm9yIHN0b3JhZ2U6IFJTQSBwcml2YXRlIGtleQotZm9ybWF0X3N0b3JhZ2VfZGF0YV9jaGVjazoiMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOiI1MDUzNDEwMDRiNDU1OTAwMDAwMDAwMDAwMTAwMDAwMDAxNzAwMDAwMDEwMDAwMDAwMDAwMDAxMjAwMDAwMDEwNjIwMjAwMDAzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6UFNBX0FMR19DQVRFR09SWV9BU1lNTUVUUklDX0VOQ1JZUFRJT046UFNBX0FMR19DQVRFR09SWV9TSUdOCitmb3JtYXRfc3RvcmFnZV9kYXRhX2NoZWNrOiIzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6IjUwNTM0MTAwNGI0NTU5MDAwMDAwMDAwMDAxMDAwMDAwMDE3MDAwMDQwMTAwMDAwMDAwMDAwMDEyMDAwMDAwMTA2MjAyMDAwMDMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUjoxMDI0OlBTQV9LRVlfVVNBR0VfRVhQT1JUOlBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OOlBTQV9BTEdfQ0FURUdPUllfU0lHTgorCitGb3JtYXQgZm9yIHN0b3JhZ2U6IEFFUy0xMjgga2V5Citmb3JtYXRfc3RvcmFnZV9kYXRhX2NoZWNrOiI0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZiI6IjUwNTM0MTAwNGI0NTU5MDAwMDAwMDAwMDAxMDAwMDAwMDAyNDgwMDAwMDAzMDAwMDAyMTA0MDA2MDAwMDAwMDAxMDAwMDAwMDQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmIjpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9UWVBFX0FFUzoxMjg6UFNBX0tFWV9VU0FHRV9ERUNSWVBUIHwgUFNBX0tFWV9VU0FHRV9FTkNSWVBUOlBTQV9BTEdfR0NNOjAKIAogUGFyc2Ugc3RvcmFnZTogUlNBIHByaXZhdGUga2V5Ci1wYXJzZV9zdG9yYWdlX2RhdGFfY2hlY2s6IjUwNTM0MTAwNGI0NTU5MDAwMDAwMDAwMDAxMDAwMDAwMDE3MDAwMDAwMTAwMDAwMDAwMDAwMDEyMDAwMDAwMTA2MjAyMDAwMDMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjoiMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSOlBTQV9LRVlfVVNBR0VfRVhQT1JUOlBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OOlBTQV9BTEdfQ0FURUdPUllfU0lHTjpQU0FfU1VDQ0VTUworcGFyc2Vfc3RvcmFnZV9kYXRhX2NoZWNrOiI1MDUzNDEwMDRiNDU1OTAwMDAwMDAwMDAwMTAwMDAwMDAxNzAwMDA0MDEwMDAwMDAwMDAwMDAxMjAwMDAwMDEwNjIwMjAwMDAzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6IjMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUjoxMDI0OlBTQV9LRVlfVVNBR0VfRVhQT1JUOlBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OOlBTQV9BTEdfQ0FURUdPUllfU0lHTjpQU0FfU1VDQ0VTUwogCiBQYXJzZSBzdG9yYWdlOiBBRVMtMTI4IGtleQotcGFyc2Vfc3RvcmFnZV9kYXRhX2NoZWNrOiI1MDUzNDEwMDRiNDU1OTAwMDAwMDAwMDAwMTAwMDAwMDAwMjQwMDAwMDAwMzAwMDAwMjEwNDAwNjAwMDAwMDAwMTAwMDAwMDA0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZiI6IjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmIjpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9UWVBFX0FFUzpQU0FfS0VZX1VTQUdFX0RFQ1JZUFQgfCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQ6UFNBX0FMR19HQ006MDpQU0FfU1VDQ0VTUwotCi1QYXJzZSBzdG9yYWdlOiB0eXBlIG91dCBvZiByYW5nZQotcGFyc2Vfc3RvcmFnZV9kYXRhX2NoZWNrOiI1MDUzNDEwMDRiNDU1OTAwMDAwMDAwMDAwMTAwMDAwMDAwMjQwMTAwMDAwMzAwMDAwMjEwNDAwNjAwMDAwMDAwMTAwMDAwMDA0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZiI6IjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmIjpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MDpQU0FfS0VZX1VTQUdFX0RFQ1JZUFQgfCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQ6UFNBX0FMR19HQ006MDpQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCitwYXJzZV9zdG9yYWdlX2RhdGFfY2hlY2s6IjUwNTM0MTAwNGI0NTU5MDAwMDAwMDAwMDAxMDAwMDAwMDAyNDgwMDAwMDAzMDAwMDAyMTA0MDA2MDAwMDAwMDAxMDAwMDAwMDQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmIjoiNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGYiOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX1RZUEVfQUVTOjEyODpQU0FfS0VZX1VTQUdFX0RFQ1JZUFQgfCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQ6UFNBX0FMR19HQ006MDpQU0FfU1VDQ0VTUwogCiBQYXJzZSBzdG9yYWdlOiB3cm9uZyB2ZXJzaW9uCi1wYXJzZV9zdG9yYWdlX2RhdGFfY2hlY2s6IjUwNTM0MTAwNGI0NTU5MDBmZmZmZmZmZjAxMDAwMDAwMDE3MDAwMDAwMTAwMDAwMDAwMDAwMDEyMDAwMDAwMTA2MjAyMDAwMDMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjoiMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSOlBTQV9LRVlfVVNBR0VfRVhQT1JUOlBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OOlBTQV9BTEdfQ0FURUdPUllfU0lHTjpQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCitwYXJzZV9zdG9yYWdlX2RhdGFfY2hlY2s6IjUwNTM0MTAwNGI0NTU5MDBmZmZmZmZmZjAxMDAwMDAwMDE3MDAwMDQwMTAwMDAwMDAwMDAwMDEyMDAwMDAwMTA2MjAyMDAwMDMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjoiMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSOjEwMjQ6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6UFNBX0FMR19DQVRFR09SWV9BU1lNTUVUUklDX0VOQ1JZUFRJT046UFNBX0FMR19DQVRFR09SWV9TSUdOOlBTQV9FUlJPUl9TVE9SQUdFX0ZBSUxVUkUKIAogUGFyc2Ugc3RvcmFnZTogZGF0YSB0b28gYmlnCi1wYXJzZV9zdG9yYWdlX2RhdGFfY2hlY2s6IjUwNTM0MTAwNGI0NTU5MDAwMDAwMDAwMDAxMDAwMDAwMDE3MDAwMDAwMTAwMDAwMDAwMDAwMDEyMDAwMDAwMTBmZmZmZmZmZjMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjoiIjpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUjpQU0FfS0VZX1VTQUdFX0VYUE9SVDpQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTjpQU0FfQUxHX0NBVEVHT1JZX1NJR046UFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQorcGFyc2Vfc3RvcmFnZV9kYXRhX2NoZWNrOiI1MDUzNDEwMDRiNDU1OTAwMDAwMDAwMDAwMTAwMDAwMDAxNzAwMDAwMDEwMDAwMDAwMDAwMDAxMjAwMDAwMDEwZmZmZmZmZmYzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6IiI6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6MDpQU0FfS0VZX1VTQUdFX0VYUE9SVDpQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTjpQU0FfQUxHX0NBVEVHT1JZX1NJR046UFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQogCiBQYXJzZSBzdG9yYWdlOiBiYWQgbWFnaWMKLXBhcnNlX3N0b3JhZ2VfZGF0YV9jaGVjazoiNjQ1MzQxMDA0YjQ1NTkwMDAwMDAwMDAwMDEwMDAwMDAwMTcwMDAwMDAxMDAwMDAwMDAwMDAwMTIwMDAwMDAxMDYyMDIwMDAwMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOiIzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6UFNBX0FMR19DQVRFR09SWV9BU1lNTUVUUklDX0VOQ1JZUFRJT046UFNBX0FMR19DQVRFR09SWV9TSUdOOlBTQV9FUlJPUl9TVE9SQUdFX0ZBSUxVUkUKK3BhcnNlX3N0b3JhZ2VfZGF0YV9jaGVjazoiNjQ1MzQxMDA0YjQ1NTkwMDAwMDAwMDAwMDEwMDAwMDAwMTcwMDAwNDAxMDAwMDAwMDAwMDAwMTIwMDAwMDAxMDYyMDIwMDAwMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOiIzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6MTAyNDpQU0FfS0VZX1VTQUdFX0VYUE9SVDpQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTjpQU0FfQUxHX0NBVEVHT1JZX1NJR046UFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQogCiBQYXJzZSBzdG9yYWdlOiB0cnVuY2F0ZWQgbWFnaWMKLXBhcnNlX3N0b3JhZ2VfZGF0YV9jaGVjazoiNTA1MzQxMDA0YjQ1NTkiOiIiOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSOlBTQV9LRVlfVVNBR0VfRVhQT1JUOlBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OOlBTQV9BTEdfQ0FURUdPUllfU0lHTjpQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCitwYXJzZV9zdG9yYWdlX2RhdGFfY2hlY2s6IjUwNTM0MTAwNGI0NTU5IjoiIjpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUjowOlBTQV9LRVlfVVNBR0VfRVhQT1JUOlBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OOlBTQV9BTEdfQ0FURUdPUllfU0lHTjpQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCiAKICMgTm90IHNwZWNpZmljIHRvIGZpbGVzLCBidXQgb25seSBydW4gdGhpcyB0ZXN0IGluIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZSBtYXhpbXVtIHNpemUgY291bGQgYmUgcmVhY2hlZC4KIFNhdmUgbWF4aW11bS1zaXplIHBlcnNpc3RlbnQgcmF3IGtleQpAQCAtNDYsNiArNDYsMTggQEAKIGRlcGVuZHNfb246TUJFRFRMU19QS19DOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX1JTQV9DCiBwZXJzaXN0ZW50X2tleV9pbXBvcnQ6MjU2OjE6UFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUjoiMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOjE6UFNBX1NVQ0NFU1MKIAorUGVyc2lzdGVudCBrZXkgaW1wb3J0IChSU0EpIGludmFsaWQga2V5IGlkIChWRU5ET1JfTUlOKQorZGVwZW5kc19vbjpNQkVEVExTX1BLX0M6TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfUlNBX0MKK3BlcnNpc3RlbnRfa2V5X2ltcG9ydDoyNTY6UFNBX0tFWV9JRF9WRU5ET1JfTUlOOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6IjMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjowOlBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRQorCitQZXJzaXN0ZW50IGtleSBpbXBvcnQgKFJTQSkgaW52YWxpZCBrZXkgaWQgKFZPTEFUSUxFX01JTikKK2RlcGVuZHNfb246TUJFRFRMU19QS19DOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX1JTQV9DCitwZXJzaXN0ZW50X2tleV9pbXBvcnQ6MjU2OlBTQV9LRVlfSURfVk9MQVRJTEVfTUlOOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6IjMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjowOlBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRQorCitQZXJzaXN0ZW50IGtleSBpbXBvcnQgKFJTQSkgaW52YWxpZCBrZXkgaWQgKFZFTkRPUl9NQVgpCitkZXBlbmRzX29uOk1CRURUTFNfUEtfQzpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19SU0FfQworcGVyc2lzdGVudF9rZXlfaW1wb3J0OjI1NjpQU0FfS0VZX0lEX1ZFTkRPUl9NQVg6UFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUjoiMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOjA6UFNBX0VSUk9SX0lOVkFMSURfSEFORExFCisKIFBlcnNpc3RlbnQga2V5IGltcG9ydCBnYXJiYWdlIGRhdGEsIHNob3VsZCBmYWlsCiBkZXBlbmRzX29uOk1CRURUTFNfUEtfQzpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19SU0FfQwogcGVyc2lzdGVudF9rZXlfaW1wb3J0OjI1NjoxOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6IjExMTExMTExIjowOlBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3BlcnNpc3RlbnRfa2V5LmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19wZXJzaXN0ZW50X2tleS5mdW5jdGlvbgppbmRleCA5ZTJmYmY2Li44ZTEwMTU4IDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3BlcnNpc3RlbnRfa2V5LmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fcGVyc2lzdGVudF9rZXkuZnVuY3Rpb24KQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KIAogI2luY2x1ZGUgInRlc3QvcHNhX2NyeXB0b19oZWxwZXJzLmgiCisjaW5jbHVkZSAicHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuaCIKICNpbmNsdWRlICJwc2FfY3J5cHRvX3N0b3JhZ2UuaCIKIAogI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKQEAgLTQxLDcgKzQyLDcgQEAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgZm9ybWF0X3N0b3JhZ2VfZGF0YV9jaGVjayggZGF0YV90ICprZXlfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpleHBlY3RlZF9maWxlX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfbGlmZXRpbWUsIGludCBrZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleV9saWZldGltZSwgaW50IGtleV90eXBlLCBpbnQga2V5X2JpdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfdXNhZ2UsIGludCBrZXlfYWxnLCBpbnQga2V5X2FsZzIgKQogewogICAgIHVpbnQ4X3QgKmZpbGVfZGF0YSA9IE5VTEw7CkBAIC01MSw2ICs1Miw3IEBACiAKICAgICBwc2Ffc2V0X2tleV9saWZldGltZSggJmF0dHJpYnV0ZXMsIGtleV9saWZldGltZSApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOworICAgIHBzYV9zZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzLCBrZXlfYml0cyApOwogICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywga2V5X3VzYWdlICk7CiAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywga2V5X2FsZyApOwogICAgIHBzYV9zZXRfa2V5X2Vucm9sbG1lbnRfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywga2V5X2FsZzIgKTsKQEAgLTczLDYgKzc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmV4cGVjdGVkX2tleV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9rZXlfbGlmZXRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX2tleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9rZXlfYml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfa2V5X3VzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9rZXlfYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9rZXlfYWxnMiwKQEAgLTk1LDYgKzk4LDggQEAKICAgICAgICAgICAgICAgICAocHNhX2tleV90eXBlX3QpIGV4cGVjdGVkX2tleV9saWZldGltZSApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzICksCiAgICAgICAgICAgICAgICAgKHBzYV9rZXlfdHlwZV90KSBleHBlY3RlZF9rZXlfdHlwZSApOworICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzICksCisgICAgICAgICAgICAgICAgKHBzYV9rZXlfYml0c190KSBleHBlY3RlZF9rZXlfYml0cyApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcyApLAogICAgICAgICAgICAgICAgICh1aW50MzJfdCkgZXhwZWN0ZWRfa2V5X3VzYWdlICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcyApLApAQCAtMTEzLDcgKzExOCw2IEBACiB2b2lkIHNhdmVfbGFyZ2VfcGVyc2lzdGVudF9rZXkoIGludCBkYXRhX2xlbmd0aF9hcmcsIGludCBleHBlY3RlZF9zdGF0dXMgKQogewogICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleV9pZCA9IG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCAxLCA0MiApOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKICAgICB1aW50OF90ICpkYXRhID0gTlVMTDsKICAgICBzaXplX3QgZGF0YV9sZW5ndGggPSBkYXRhX2xlbmd0aF9hcmc7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwpAQCAtMTI1LDExICsxMjksMTEgQEAKICAgICBwc2Ffc2V0X2tleV9pZCggJmF0dHJpYnV0ZXMsIGtleV9pZCApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBQU0FfS0VZX1RZUEVfUkFXX0RBVEEgKTsKIAotICAgIFRFU1RfRVFVQUwoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywgZGF0YSwgZGF0YV9sZW5ndGgsICZoYW5kbGUgKSwKKyAgICBURVNUX0VRVUFMKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGRhdGEsIGRhdGFfbGVuZ3RoLCAma2V5X2lkICksCiAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzICk7CiAKICAgICBpZiggZXhwZWN0ZWRfc3RhdHVzID09IFBTQV9TVUNDRVNTICkKLSAgICAgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKSApOworICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIGtleV9pZCApICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19mcmVlKCBkYXRhICk7CkBAIC0xNDUsNyArMTQ5LDcgQEAKIHsKICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXlfaWQgPQogICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggb3duZXJfaWRfYXJnLCBrZXlfaWRfYXJnICk7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHJldHVybmVkX2tleV9pZCA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IGZpcnN0X3R5cGUgPSAocHNhX2tleV90eXBlX3QpIGZpcnN0X3R5cGVfYXJnOwogICAgIHBzYV9rZXlfdHlwZV90IHNlY29uZF90eXBlID0gKHBzYV9rZXlfdHlwZV90KSBzZWNvbmRfdHlwZV9hcmc7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwpAQCAtMTU2LDI0ICsxNjAsMjEgQEAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywgZmlyc3RfdHlwZSApOwogCiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBmaXJzdF9kYXRhLT54LCBmaXJzdF9kYXRhLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmV0dXJuZWRfa2V5X2lkICkgKTsKIAogICAgIGlmKCByZXN0YXJ0ICkKICAgICB7Ci0gICAgICAgIHBzYV9jbG9zZV9rZXkoIGhhbmRsZSApOworICAgICAgICBwc2FfY2xvc2Vfa2V5KCBrZXlfaWQgKTsKICAgICAgICAgUFNBX0RPTkUoKTsKICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2NyeXB0b19pbml0KCkgKTsKLSAgICAgICAgUFNBX0FTU0VSVCggcHNhX29wZW5fa2V5KCBrZXlfaWQsICZoYW5kbGUgKSApOwogICAgIH0KICAgICBURVNUX0VRVUFMKCBwc2FfaXNfa2V5X3ByZXNlbnRfaW5fc3RvcmFnZSgga2V5X2lkICksIDEgKTsKIAogICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIGtleV9pZCApICk7CiAKICAgICAvKiBDaGVjayBrZXkgc2xvdCBzdG9yYWdlIGlzIHJlbW92ZWQgKi8KICAgICBURVNUX0VRVUFMKCBwc2FfaXNfa2V5X3ByZXNlbnRfaW5fc3RvcmFnZSgga2V5X2lkICksIDAgKTsKLSAgICBURVNUX0VRVUFMKCBwc2Ffb3Blbl9rZXkoIGtleV9pZCwgJmhhbmRsZSApLCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgKTsKLSAgICBURVNUX0VRVUFMKCBoYW5kbGUsIDAgKTsKIAogICAgIC8qIFNodXRkb3duIGFuZCByZXN0YXJ0ICovCiAgICAgUFNBX0RPTkUoKTsKQEAgLTE4Myw5ICsxODQsOSBAQAogICAgIHBzYV9zZXRfa2V5X2lkKCAmYXR0cmlidXRlcywga2V5X2lkICk7CiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIHNlY29uZF90eXBlICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBzZWNvbmRfZGF0YS0+eCwgc2Vjb25kX2RhdGEtPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXR1cm5lZF9rZXlfaWQgKSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSgga2V5X2lkICkgKTsKIAogZXhpdDoKICAgICBQU0FfRE9ORSgpOwpAQCAtMTk5LDQ1ICsyMDAsNTIgQEAKIHsKICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXlfaWQgPQogICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggb3duZXJfaWRfYXJnLCBrZXlfaWRfYXJnICk7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgcmV0dXJuZWRfa2V5X2lkOwogICAgIHBzYV9rZXlfdHlwZV90IHR5cGUgPSAocHNhX2tleV90eXBlX3QpIHR5cGVfYXJnOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoKSApOwogCiAgICAgcHNhX3NldF9rZXlfaWQoICZhdHRyaWJ1dGVzLCBrZXlfaWQgKTsKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywgdHlwZSApOwotICAgIFRFU1RfRVFVQUwoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywgZGF0YS0+eCwgZGF0YS0+bGVuLCAmaGFuZGxlICksCisgICAgVEVTVF9FUVVBTCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBkYXRhLT54LCBkYXRhLT5sZW4sICZyZXR1cm5lZF9rZXlfaWQgKSwKICAgICAgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXMgKTsKIAogICAgIGlmKCBleHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3ZjX2tleV9pZF9pc19udWxsKCByZXR1cm5lZF9rZXlfaWQgKSApOwogICAgICAgICBURVNUX0VRVUFMKCBwc2FfaXNfa2V5X3ByZXNlbnRfaW5fc3RvcmFnZSgga2V5X2lkICksIDAgKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAorICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3N2Y19rZXlfaWRfZXF1YWwoIHJldHVybmVkX2tleV9pZCwga2V5X2lkICkgKTsKKwogICAgIGlmKCByZXN0YXJ0ICkKICAgICB7Ci0gICAgICAgIHBzYV9jbG9zZV9rZXkoIGhhbmRsZSApOworICAgICAgICBQU0FfQVNTRVJUKCBwc2FfcHVyZ2Vfa2V5KCBrZXlfaWQgKSApOwogICAgICAgICBQU0FfRE9ORSgpOwogICAgICAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoKSApOwotICAgICAgICBQU0FfQVNTRVJUKCBwc2Ffb3Blbl9rZXkoIGtleV9pZCwgJmhhbmRsZSApICk7CiAgICAgfQogCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOwotICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmF0dHJpYnV0ZXMgKSApOwotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3N2Y19rZXlfaWRfZXF1YWwoCi0gICAgICAgICAgICAgICAgICAgICBwc2FfZ2V0X2tleV9pZCggJmF0dHJpYnV0ZXMgKSwga2V5X2lkICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBrZXlfaWQsICZhdHRyaWJ1dGVzICkgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKCBwc2FfZ2V0X2tleV9pZCggJmF0dHJpYnV0ZXMgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfaWQgKSApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2xpZmV0aW1lKCAmYXR0cmlidXRlcyApLAogICAgICAgICAgICAgICAgIFBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVCApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzICksIHR5cGUgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV91c2FnZV9mbGFncyggJmF0dHJpYnV0ZXMgKSwgMCApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMgKSwgMCApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSgga2V5X2lkICkgKTsKIAogZXhpdDoKKyAgICAvKgorICAgICAqIEtleSBhdHRyaWJ1dGVzIG1heSBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgcHNhX2dldF9rZXlfYXR0cmlidXRlcygpCisgICAgICogdGh1cyByZXNldCB0aGVtIGFzIHJlcXVpcmVkLgorICAgICAqLwogICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKKwogICAgIHBzYV9kZXN0cm95X3BlcnNpc3RlbnRfa2V5KCBrZXlfaWQgKTsKICAgICBQU0FfRE9ORSgpOwogfQpAQCAtMjUwLDcgKzI1OCw3IEBACiB7CiAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5X2lkID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDEsIDQyICk7CiAgICAgcHNhX2tleV90eXBlX3QgdHlwZSA9IChwc2Ffa2V5X3R5cGVfdCkgdHlwZV9hcmc7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHJldHVybmVkX2tleV9pZCA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHVuc2lnbmVkIGNoYXIgKmV4cG9ydGVkID0gTlVMTDsKICAgICBzaXplX3QgZXhwb3J0X3NpemUgPSBkYXRhLT5sZW47CiAgICAgc2l6ZV90IGV4cG9ydGVkX2xlbmd0aDsKQEAgLTI2NSwyMCArMjczLDIwIEBACiAgICAgcHNhX3NldF9rZXlfdXNhZ2VfZmxhZ3MoICZhdHRyaWJ1dGVzLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCApOwogCiAgICAgLyogSW1wb3J0IHRoZSBrZXkgKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGRhdGEtPngsIGRhdGEtPmxlbiwgJmhhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBkYXRhLT54LCBkYXRhLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXR1cm5lZF9rZXlfaWQgKSApOwogCiAKICAgICBpZiggcmVzdGFydCApCiAgICAgewotICAgICAgICBwc2FfY2xvc2Vfa2V5KCBoYW5kbGUgKTsKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX3B1cmdlX2tleSgga2V5X2lkICkgKTsKICAgICAgICAgUFNBX0RPTkUoKTsKICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2NyeXB0b19pbml0KCkgKTsKLSAgICAgICAgUFNBX0FTU0VSVCggcHNhX29wZW5fa2V5KCBrZXlfaWQsICZoYW5kbGUgKSApOwogICAgIH0KIAogICAgIC8qIFRlc3QgdGhlIGtleSBpbmZvcm1hdGlvbiAqLwogICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKLSAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBrZXlfaWQsICZhdHRyaWJ1dGVzICkgKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKAogICAgICAgICAgICAgICAgICAgICAgcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzICksIGtleV9pZCApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfbGlmZXRpbWUoICZhdHRyaWJ1dGVzICksCkBAIC0yOTUsMTcgKzMwMywyMiBAQAogICAgICAgICBwc2FfZGVzdHJveV9wZXJzaXN0ZW50X2tleSgga2V5X2lkICk7CiAgICAgfQogICAgIC8qIEV4cG9ydCB0aGUga2V5ICovCi0gICAgUFNBX0FTU0VSVCggcHNhX2V4cG9ydF9rZXkoIGhhbmRsZSwgZXhwb3J0ZWQsIGV4cG9ydF9zaXplLAorICAgIFBTQV9BU1NFUlQoIHBzYV9leHBvcnRfa2V5KCBrZXlfaWQsIGV4cG9ydGVkLCBleHBvcnRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4cG9ydGVkX2xlbmd0aCApICk7CiAKICAgICBBU1NFUlRfQ09NUEFSRSggZGF0YS0+eCwgZGF0YS0+bGVuLCBleHBvcnRlZCwgZXhwb3J0ZWRfbGVuZ3RoICk7CiAKICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBrZXlfaWQgKSApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9pc19rZXlfcHJlc2VudF9pbl9zdG9yYWdlKCBrZXlfaWQgKSwgMCApOwogCiBleGl0OgorICAgIC8qCisgICAgICogS2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCkKKyAgICAgKiB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOworCiAgICAgbWJlZHRsc19mcmVlKCBleHBvcnRlZCApOwogICAgIFBTQV9ET05FKCApOwogICAgIHBzYV9kZXN0cm95X3BlcnNpc3RlbnRfa2V5KCBrZXlfaWQgKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fc2VfZHJpdmVyX2hhbC5kYXRhIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zZV9kcml2ZXJfaGFsLmRhdGEKaW5kZXggZTVlZWU1OC4uMThkMWQ3NCAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zZV9kcml2ZXJfaGFsLmRhdGEKKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zZV9kcml2ZXJfaGFsLmRhdGEKQEAgLTE0OCwxMCArMTQ4LDE5IEBACiByZWdpc3Rlcl9rZXlfc21va2VfdGVzdDpURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU6NzoxOi0xOlBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECiAKIEtleSByZWdpc3RyYXRpb246IGtleSBpZCBvdXQgb2YgcmFuZ2UKLXJlZ2lzdGVyX2tleV9zbW9rZV90ZXN0OlRFU1RfU0VfUEVSU0lTVEVOVF9MSUZFVElNRTo3OlBTQV9LRVlfSURfVkVORE9SX01BWCsxOi0xOlBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCityZWdpc3Rlcl9rZXlfc21va2VfdGVzdDpURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU6NzpQU0FfS0VZX0lEX1ZFTkRPUl9NQVgrMTotMTpQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKIAotS2V5IHJlZ2lzdHJhdGlvbjoga2V5IGlkIGluIHZlbmRvciByYW5nZQotcmVnaXN0ZXJfa2V5X3Ntb2tlX3Rlc3Q6VEVTVF9TRV9QRVJTSVNURU5UX0xJRkVUSU1FOjc6UFNBX0tFWV9JRF9WRU5ET1JfTUFYOjE6UFNBX1NVQ0NFU1MKK0tleSByZWdpc3RyYXRpb246IGtleSBpZCBtaW4gdmVuZG9yCityZWdpc3Rlcl9rZXlfc21va2VfdGVzdDpURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU6NzpQU0FfS0VZX0lEX1ZFTkRPUl9NSU46MTpQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKKworS2V5IHJlZ2lzdHJhdGlvbjoga2V5IGlkIG1heCB2ZW5kb3IgZXhjZXB0IHZvbGF0aWxlCityZWdpc3Rlcl9rZXlfc21va2VfdGVzdDpURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU6NzpQU0FfS0VZX0lEX1ZPTEFUSUxFX01JTi0xOjE6UFNBX0VSUk9SX0lOVkFMSURfSEFORExFCisKK0tleSByZWdpc3RyYXRpb246IGtleSBpZCBtaW4gdm9sYXRpbGUKK3JlZ2lzdGVyX2tleV9zbW9rZV90ZXN0OlRFU1RfU0VfUEVSU0lTVEVOVF9MSUZFVElNRTo3OlBTQV9LRVlfSURfVk9MQVRJTEVfTUlOOjE6UFNBX0VSUk9SX0lOVkFMSURfSEFORExFCisKK0tleSByZWdpc3RyYXRpb246IGtleSBpZCBtYXggdm9sYXRpbGUKK3JlZ2lzdGVyX2tleV9zbW9rZV90ZXN0OlRFU1RfU0VfUEVSU0lTVEVOVF9MSUZFVElNRTo3OlBTQV9LRVlfSURfVk9MQVRJTEVfTUFYOjE6UFNBX0VSUk9SX0lOVkFMSURfSEFORExFCiAKIEltcG9ydC1zaWduLXZlcmlmeTogc2lnbiBpbiBkcml2ZXIsIEVDRFNBCiBkZXBlbmRzX29uOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3NlX2RyaXZlcl9oYWwuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3NlX2RyaXZlcl9oYWwuZnVuY3Rpb24KaW5kZXggODU4NGU1ZS4uMWFkZDliNCAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zZV9kcml2ZXJfaGFsLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fc2VfZHJpdmVyX2hhbC5mdW5jdGlvbgpAQCAtMyw2ICszLDcgQEAKICNpbmNsdWRlICJwc2EvY3J5cHRvX3NlX2RyaXZlci5oIgogCiAjaW5jbHVkZSAicHNhX2NyeXB0b19zZS5oIgorI2luY2x1ZGUgInBzYV9jcnlwdG9fc2xvdF9tYW5hZ2VtZW50LmgiCiAjaW5jbHVkZSAicHNhX2NyeXB0b19zdG9yYWdlLmgiCiAKIC8qIEludmFzaXZlIHBlZWtpbmc6IGNoZWNrIHRoZSBwZXJzaXN0ZW50IGRhdGEgKi8KQEAgLTM2Nyw3ICszNjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpkYXRhX2xlbmd0aCApCiB7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1czsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZTsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAKICAgICAodm9pZCkgY29udGV4dDsKQEAgLTM3OSwxMSArMzgwLDExIEBACiAgICAgc3RhdHVzID0gcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW1fc2xvdHNbc2xvdF9udW1iZXJdLmNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9CSVRTX1RPX0JZVEVTKCByYW1fc2xvdHNbc2xvdF9udW1iZXJdLmJpdHMgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ICk7CiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIHJldHVybiggc3RhdHVzICk7Ci0gICAgc3RhdHVzID0gcHNhX2V4cG9ydF9wdWJsaWNfa2V5KCBoYW5kbGUsIGRhdGEsIGRhdGFfc2l6ZSwgZGF0YV9sZW5ndGggKTsKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIHN0YXR1cyA9IHBzYV9leHBvcnRfcHVibGljX2tleSgga2V5LCBkYXRhLCBkYXRhX3NpemUsIGRhdGFfbGVuZ3RoICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CiB9CiAKQEAgLTQ1MCw3ICs0NTEsNyBAQAogewogICAgIHJhbV9zbG90X3QgKnNsb3Q7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gUFNBX0VSUk9SX0dFTkVSSUNfRVJST1I7CiAKICAgICAodm9pZCkgY29udGV4dDsKQEAgLTQ2MywxMyArNDY0LDEzIEBACiAgICAgRFJJVkVSX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5jb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfQklUU19UT19CWVRFUyggc2xvdC0+Yml0cyApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgPT0gUFNBX1NVQ0NFU1MgKTsKLSAgICBzdGF0dXMgPSBwc2Ffc2lnbl9oYXNoKCBoYW5kbGUsIGFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApID09IFBTQV9TVUNDRVNTICk7CisgICAgc3RhdHVzID0gcHNhX3NpZ25faGFzaCgga2V5LCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgaGFzaF9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLCBzaWduYXR1cmVfc2l6ZSwgc2lnbmF0dXJlX2xlbmd0aCApOwogCiBleGl0OgotICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKTsKICAgICByZXR1cm4oIHN0YXR1cyApOwogfQogCkBAIC00ODMsNyArNDg0LDcgQEAKIHsKICAgICByYW1fc2xvdF90ICpzbG90OwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9HRU5FUklDX0VSUk9SOwogCiAgICAgKHZvaWQpIGNvbnRleHQ7CkBAIC00OTYsMjAgKzQ5NywxOCBAQAogICAgIERSSVZFUl9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+Y29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0JJVFNfVE9fQllURVMoIHNsb3QtPmJpdHMgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkgKSA9PQogICAgICAgICAgICAgICAgICAgIFBTQV9TVUNDRVNTICk7Ci0gICAgc3RhdHVzID0gcHNhX3ZlcmlmeV9oYXNoKCBoYW5kbGUsIGFsZywKKyAgICBzdGF0dXMgPSBwc2FfdmVyaWZ5X2hhc2goIGtleSwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgaGFzaF9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpZ25hdHVyZV9sZW5ndGggKTsKIAogZXhpdDoKLSAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIHBzYV9kZXN0cm95X2tleSgga2V5ICk7CiAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIH0KIAogCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBPdGhlciB0ZXN0IGhlbHBlciBmdW5jdGlvbnMgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTI0LDEzICs1MjMsMTMgQEAKIC8qIENoZWNrIHRoYXQgdGhlIGF0dHJpYnV0ZXMgb2YgYSBrZXkgcmVwb3J0ZWQgYnkgcHNhX2dldF9rZXlfYXR0cmlidXRlcygpCiAgKiBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBhdHRyaWJ1dGVzIHVzZWQgd2hlbiBjcmVhdGluZyB0aGUga2V5LiAqLwogc3RhdGljIGludCBjaGVja19rZXlfYXR0cmlidXRlcygKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCiAgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKnJlZmVyZW5jZV9hdHRyaWJ1dGVzICkKIHsKICAgICBpbnQgb2sgPSAwOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGFjdHVhbF9hdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhY3R1YWxfYXR0cmlidXRlcyApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcygga2V5LCAmYWN0dWFsX2F0dHJpYnV0ZXMgKSApOwogCiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3ZjX2tleV9pZF9lcXVhbCgKICAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2lkKCAmYWN0dWFsX2F0dHJpYnV0ZXMgKSwKQEAgLTU3OSw2ICs1NzgsMTIgQEAKICAgICBvayA9IDE7CiAKIGV4aXQ6CisgICAgLyoKKyAgICAgKiBBY3R1YWwga2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCkKKyAgICAgKiB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCisgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYWN0dWFsX2F0dHJpYnV0ZXMgKTsKKwogICAgIHJldHVybiggb2sgKTsKIH0KIApAQCAtNjU0LDcgKzY1OSw3IEBACiAgKiBtb3N0bHkgYm9ndXMgcGFyYW1ldGVyczogdGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gbWVtb3J5CiAgKiBjb3JydXB0aW9uIG9yIGNyYXNoLiBUaGlzIHRlc3QgZnVuY3Rpb24gaXMgbW9zdCB1c2VmdWwgd2hlbiBydW4gdW5kZXIKICAqIGFuIGVudmlyb25tZW50IHdpdGggc2FuaXR5IGNoZWNrcyBzdWNoIGFzIEFTYW4gb3IgTVNhbi4gKi8KLXN0YXRpYyBpbnQgc21va2VfdGVzdF9rZXkoIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlICkKK3N0YXRpYyBpbnQgc21va2VfdGVzdF9rZXkoIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSApCiB7CiAgICAgaW50IG9rID0gMDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CkBAIC02NjQsNTQgKzY2OSw1NCBAQAogICAgICAgICBQU0FfS0VZX0RFUklWQVRJT05fT1BFUkFUSU9OX0lOSVQ7CiAgICAgdWludDhfdCBidWZmZXJbODBdOyAvKiBsYXJnZSBlbm91Z2ggZm9yIGEgcHVibGljIGtleSBmb3IgRUNESCAqLwogICAgIHNpemVfdCBsZW5ndGg7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUyID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkyID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAKLSAgICBTTU9LRV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmF0dHJpYnV0ZXMgKSApOworICAgIFNNT0tFX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcygga2V5LCAmYXR0cmlidXRlcyApICk7CiAKLSAgICBTTU9LRV9BU1NFUlQoIHBzYV9leHBvcnRfa2V5KCBoYW5kbGUsCisgICAgU01PS0VfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSgga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZW9mKCBidWZmZXIgKSwgJmxlbmd0aCApICk7Ci0gICAgU01PS0VfQVNTRVJUKCBwc2FfZXhwb3J0X3B1YmxpY19rZXkoIGhhbmRsZSwKKyAgICBTTU9LRV9BU1NFUlQoIHBzYV9leHBvcnRfcHVibGljX2tleSgga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIHNpemVvZiggYnVmZmVyICksICZsZW5ndGggKSApOwogCi0gICAgU01PS0VfQVNTRVJUKCBwc2FfY29weV9rZXkoIGhhbmRsZSwgJmF0dHJpYnV0ZXMsICZoYW5kbGUyICkgKTsKLSAgICBpZiggaGFuZGxlMiAhPSAwICkKLSAgICAgICAgUFNBX0FTU0VSVCggcHNhX2Nsb3NlX2tleSggaGFuZGxlMiApICk7CisgICAgU01PS0VfQVNTRVJUKCBwc2FfY29weV9rZXkoIGtleSwgJmF0dHJpYnV0ZXMsICZrZXkyICkgKTsKKyAgICBpZiggISBtYmVkdGxzX3N2Y19rZXlfaWRfaXNfbnVsbCgga2V5MiApICkKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBrZXkyICkgKTsKIAotICAgIFNNT0tFX0FTU0VSVCggcHNhX21hY19zaWduX3NldHVwKCAmbWFjX29wZXJhdGlvbiwgaGFuZGxlLCBQU0FfQUxHX0NNQUMgKSApOworICAgIFNNT0tFX0FTU0VSVCggcHNhX21hY19zaWduX3NldHVwKCAmbWFjX29wZXJhdGlvbiwga2V5LCBQU0FfQUxHX0NNQUMgKSApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9tYWNfYWJvcnQoICZtYWNfb3BlcmF0aW9uICkgKTsKLSAgICBTTU9LRV9BU1NFUlQoIHBzYV9tYWNfdmVyaWZ5X3NldHVwKCAmbWFjX29wZXJhdGlvbiwgaGFuZGxlLAorICAgIFNNT0tFX0FTU0VSVCggcHNhX21hY192ZXJpZnlfc2V0dXAoICZtYWNfb3BlcmF0aW9uLCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0FMR19ITUFDKCBQU0FfQUxHX1NIQV8yNTYgKSApICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX21hY19hYm9ydCggJm1hY19vcGVyYXRpb24gKSApOwogCi0gICAgU01PS0VfQVNTRVJUKCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZjaXBoZXJfb3BlcmF0aW9uLCBoYW5kbGUsCisgICAgU01PS0VfQVNTRVJUKCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZjaXBoZXJfb3BlcmF0aW9uLCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9BTEdfQ1RSICkgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2Fib3J0KCAmY2lwaGVyX29wZXJhdGlvbiApICk7Ci0gICAgU01PS0VfQVNTRVJUKCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoICZjaXBoZXJfb3BlcmF0aW9uLCBoYW5kbGUsCisgICAgU01PS0VfQVNTRVJUKCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoICZjaXBoZXJfb3BlcmF0aW9uLCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9BTEdfQ1RSICkgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2Fib3J0KCAmY2lwaGVyX29wZXJhdGlvbiApICk7CiAKLSAgICBTTU9LRV9BU1NFUlQoIHBzYV9hZWFkX2VuY3J5cHQoIGhhbmRsZSwgUFNBX0FMR19DQ00sCisgICAgU01PS0VfQVNTRVJUKCBwc2FfYWVhZF9lbmNyeXB0KCBrZXksIFBTQV9BTEdfQ0NNLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBzaXplb2YoIGJ1ZmZlciApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZW9mKCBidWZmZXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBzaXplb2YoIGJ1ZmZlciksICZsZW5ndGggKSApOwotICAgIFNNT0tFX0FTU0VSVCggcHNhX2FlYWRfZGVjcnlwdCggaGFuZGxlLCBQU0FfQUxHX0NDTSwKKyAgICBTTU9LRV9BU1NFUlQoIHBzYV9hZWFkX2RlY3J5cHQoIGtleSwgUFNBX0FMR19DQ00sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIHNpemVvZiggYnVmZmVyICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBzaXplb2YoIGJ1ZmZlciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIHNpemVvZiggYnVmZmVyKSwgJmxlbmd0aCApICk7CiAKLSAgICBTTU9LRV9BU1NFUlQoIHBzYV9zaWduX2hhc2goIGhhbmRsZSwgUFNBX0FMR19FQ0RTQV9BTlksCisgICAgU01PS0VfQVNTRVJUKCBwc2Ffc2lnbl9oYXNoKCBrZXksIFBTQV9BTEdfRUNEU0FfQU5ZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCAzMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZW9mKCBidWZmZXIgKSwgJmxlbmd0aCApICk7Ci0gICAgU01PS0VfQVNTRVJUKCBwc2FfdmVyaWZ5X2hhc2goIGhhbmRsZSwgUFNBX0FMR19FQ0RTQV9BTlksCisgICAgU01PS0VfQVNTRVJUKCBwc2FfdmVyaWZ5X2hhc2goIGtleSwgUFNBX0FMR19FQ0RTQV9BTlksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgMzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZW9mKCBidWZmZXIgKSApICk7CiAKLSAgICBTTU9LRV9BU1NFUlQoIHBzYV9hc3ltbWV0cmljX2VuY3J5cHQoIGhhbmRsZSwgUFNBX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQsCisgICAgU01PS0VfQVNTRVJUKCBwc2FfYXN5bW1ldHJpY19lbmNyeXB0KCBrZXksIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X0NSWVBULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCAxMCwgTlVMTCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZW9mKCBidWZmZXIgKSwgJmxlbmd0aCApICk7Ci0gICAgU01PS0VfQVNTRVJUKCBwc2FfYXN5bW1ldHJpY19kZWNyeXB0KCBoYW5kbGUsIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X0NSWVBULAorICAgIFNNT0tFX0FTU0VSVCggcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCgga2V5LCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9DUllQVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZW9mKCBidWZmZXIgKSwgTlVMTCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZW9mKCBidWZmZXIgKSwgJmxlbmd0aCApICk7CiAKQEAgLTcyNCwxMiArNzI5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwICkgKTsKICAgICBTTU9LRV9BU1NFUlQoIHBzYV9rZXlfZGVyaXZhdGlvbl9pbnB1dF9rZXkoICZkZXJpdmF0aW9uX29wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9LRVlfREVSSVZBVElPTl9JTlBVVF9TRUNSRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ICkgKTsKICAgICBQU0FfQVNTRVJUKCBwc2Ffa2V5X2Rlcml2YXRpb25fYWJvcnQoICZkZXJpdmF0aW9uX29wZXJhdGlvbiApICk7CiAKICAgICAvKiBJZiB0aGUga2V5IGlzIGFzeW1tZXRyaWMsIHRyeSBpdCBpbiBhIGtleSBhZ3JlZW1lbnQsIGJvdGggYXMKICAgICAgKiBwYXJ0IG9mIGEgZGVyaXZhdGlvbiBvcGVyYXRpb24gYW5kIHN0YW5kYWxvbmUuICovCi0gICAgaWYoIHBzYV9leHBvcnRfcHVibGljX2tleSggaGFuZGxlLCBidWZmZXIsIHNpemVvZiggYnVmZmVyICksICZsZW5ndGggKSA9PQorICAgIGlmKCBwc2FfZXhwb3J0X3B1YmxpY19rZXkoIGtleSwgYnVmZmVyLCBzaXplb2YoIGJ1ZmZlciApLCAmbGVuZ3RoICkgPT0KICAgICAgICAgUFNBX1NVQ0NFU1MgKQogICAgIHsKICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9CkBAIC03NDIsMTEgKzc0NywxMSBAQAogICAgICAgICBTTU9LRV9BU1NFUlQoIHBzYV9rZXlfZGVyaXZhdGlvbl9rZXlfYWdyZWVtZW50KAogICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVyaXZhdGlvbl9vcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9LRVlfREVSSVZBVElPTl9JTlBVVF9TRUNSRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYnVmZmVyLCBsZW5ndGggKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIGJ1ZmZlciwgbGVuZ3RoICkgKTsKICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2tleV9kZXJpdmF0aW9uX2Fib3J0KCAmZGVyaXZhdGlvbl9vcGVyYXRpb24gKSApOwogCiAgICAgICAgIFNNT0tFX0FTU0VSVCggcHNhX3Jhd19rZXlfYWdyZWVtZW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICBhbGcsIGhhbmRsZSwgYnVmZmVyLCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZywga2V5LCBidWZmZXIsIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBzaXplb2YoIGJ1ZmZlciApLCAmbGVuZ3RoICkgKTsKICAgICB9CiAjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLwpAQCAtNzU0LDcgKzc1OSwxMiBAQAogICAgIG9rID0gMTsKIAogZXhpdDoKKyAgICAvKgorICAgICAqIEtleSBhdHRyaWJ1dGVzIG1heSBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgcHNhX2dldF9rZXlfYXR0cmlidXRlcygpCisgICAgICogdGh1cyByZXNldCB0aGVtIGFzIHJlcXVpcmVkLgorICAgICAqLwogICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKKwogICAgIHJldHVybiggb2sgKTsKIH0KIApAQCAtODgwLDcgKzg5MCw4IEBACiAgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lID0gKHBzYV9rZXlfbGlmZXRpbWVfdCkgbGlmZXRpbWVfYXJnOwogICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbiA9IFBTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKCBsaWZldGltZSApOwogICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGlkID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDEsIDEgKTsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgcmV0dXJuZWRfaWQgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKKyAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZTsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgY29uc3QgdWludDhfdCBrZXlfbWF0ZXJpYWxbM10gPSB7MHhmYSwgMHhjYSwgMHhkZX07CiAgICAgdWludDhfdCBleHBvcnRlZFtzaXplb2YoIGtleV9tYXRlcmlhbCApXTsKQEAgLTkwOSw4ICs5MjAsNyBAQAogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBQU0FfS0VZX1RZUEVfUkFXX0RBVEEgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9tYXRlcmlhbCwgc2l6ZW9mKCBrZXlfbWF0ZXJpYWwgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApICk7Ci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJldHVybmVkX2lkICkgKTsKIAogICAgIGlmKCBQU0FfS0VZX0xJRkVUSU1FX0lTX1ZPTEFUSUxFKCBsaWZldGltZSApICkKICAgICB7CkBAIC05NDAsNyArOTUwLDggQEAKICAgICAgICAgaWYoIFBTQV9LRVlfTElGRVRJTUVfSVNfVk9MQVRJTEUoIGxpZmV0aW1lICkgKQogICAgICAgICB7CiAgICAgICAgICAgICAvKiBDaGVjayB0aGF0IHRoZSBQU0EgY29yZSBoYXMgbm8ga25vd2xlZGdlIG9mIHRoZSB2b2xhdGlsZSBrZXkgKi8KLSAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBwc2Ffb3Blbl9rZXkoIGlkLCAmaGFuZGxlICkgPT0gUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICk7CisgICAgICAgICAgICBURVNUX0FTU0VSVCggcHNhX29wZW5fa2V5KCByZXR1cm5lZF9pZCwgJmhhbmRsZSApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICk7CiAKICAgICAgICAgICAgIC8qIERyb3AgZGF0YSBmcm9tIG91ciBtb2NrdXAgZHJpdmVyICovCiAgICAgICAgICAgICByYW1fc2xvdHNfcmVzZXQoKTsKQEAgLTk0OCwyMCArOTU5LDE2IEBACiAKICAgICAgICAgICAgIC8qIFJlLWltcG9ydCBrZXkgKi8KICAgICAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X21hdGVyaWFsLCBzaXplb2YoIGtleV9tYXRlcmlhbCApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfbWF0ZXJpYWwsIHNpemVvZigga2V5X21hdGVyaWFsICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJldHVybmVkX2lkICkgKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLQotICAgICAgICAgICAgLyogQ2hlY2sgd2UgY2FuIHJlLW9wZW4gdGhlIHBlcnNpc3RlbnQga2V5ICovCisgICAgICAgICAgICAvKiBDaGVjayB0aGUgcGVyc2lzdGVudCBrZXkgZmlsZSAqLwogICAgICAgICAgICAgaWYoICEgY2hlY2tfcGVyc2lzdGVudF9kYXRhKCBsb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJhbV9zaGFkb3dfc2xvdF91c2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCByYW1fc2hhZG93X3Nsb3RfdXNhZ2UgKSApICkKICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICAgICAgICAgIC8qIENoZWNrIHRoYXQgdGhlIFBTQSBjb3JlIHN0aWxsIGtub3dzIGFib3V0IHRoZSBrZXkgKi8KLSAgICAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9vcGVuX2tleSggaWQsICZoYW5kbGUgKSApOwogICAgICAgICB9CiAgICAgfQogCkBAIC05NzIsMjMgKzk3OSwyOCBAQAogICAgIHBzYV9zZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgIFBTQV9CWVRFU19UT19CSVRTKCBzaXplb2YoIGtleV9tYXRlcmlhbCApICkgKTsKICAgICBwc2Ffc2V0X2tleV9zbG90X251bWJlciggJmF0dHJpYnV0ZXMsIG1pbl9zbG90ICk7Ci0gICAgaWYoICEgY2hlY2tfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmF0dHJpYnV0ZXMgKSApCisKKyAgICBpZiggUFNBX0tFWV9MSUZFVElNRV9JU19WT0xBVElMRSggbGlmZXRpbWUgKSApCisgICAgICAgIGF0dHJpYnV0ZXMuY29yZS5pZCA9IHJldHVybmVkX2lkOworICAgIGVsc2UKKyAgICAgICAgcHNhX3NldF9rZXlfaWQoICZhdHRyaWJ1dGVzLCByZXR1cm5lZF9pZCApOworCisgICAgaWYoICEgY2hlY2tfa2V5X2F0dHJpYnV0ZXMoIHJldHVybmVkX2lkLCAmYXR0cmlidXRlcyApICkKICAgICAgICAgZ290byBleGl0OwogCiAgICAgLyogVGVzdCB0aGUga2V5IGRhdGEuICovCi0gICAgUFNBX0FTU0VSVCggcHNhX2V4cG9ydF9rZXkoIGhhbmRsZSwKKyAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSggcmV0dXJuZWRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkLCBzaXplb2YoIGV4cG9ydGVkICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHBvcnRlZF9sZW5ndGggKSApOwogICAgIEFTU0VSVF9DT01QQVJFKCBrZXlfbWF0ZXJpYWwsIHNpemVvZigga2V5X21hdGVyaWFsICksCiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkLCBleHBvcnRlZF9sZW5ndGggKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICkgKTsKLSAgICBoYW5kbGUgPSAwOworICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggcmV0dXJuZWRfaWQgKSApOwogICAgIGlmKCAhIGNoZWNrX3BlcnNpc3RlbnRfZGF0YSggbG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmFtX3NoYWRvd19zbG90X3VzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCByYW1fc2hhZG93X3Nsb3RfdXNhZ2UgKSApICkKICAgICAgICAgZ290byBleGl0OwotICAgIFRFU1RfRVFVQUwoIHBzYV9vcGVuX2tleSggaWQsICZoYW5kbGUgKSwKKyAgICBURVNUX0VRVUFMKCBwc2Ffb3Blbl9rZXkoIHJldHVybmVkX2lkLCAmaGFuZGxlICksCiAgICAgICAgICAgICAgICAgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICk7CiAKICAgICAvKiBUZXN0IHRoYXQgdGhlIGtleSBoYXMgYmVlbiBlcmFzZWQgZnJvbSB0aGUgZGVzaWduYXRlZCBzbG90LiAqLwpAQCAtMTAxNCw3ICsxMDI2LDggQEAKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUgPSBURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU7CiAgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oIGxpZmV0aW1lICk7CiAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgMSApOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCByZXR1cm5lZF9pZDsKKyAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZTsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgY29uc3QgdWludDhfdCBrZXlfbWF0ZXJpYWxbM10gPSB7MHhmYSwgMHhjYSwgMHhkZX07CiAKQEAgLTEwNDEsNyArMTA1NCw3IEBACiAgICAgcHNhX3NldF9rZXlfc2xvdF9udW1iZXIoICZhdHRyaWJ1dGVzLCB3YW50ZWRfc2xvdCApOwogICAgIHN0YXR1cyA9IHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X21hdGVyaWFsLCBzaXplb2YoIGtleV9tYXRlcmlhbCApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXR1cm5lZF9pZCApOwogICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgZXhwZWN0ZWRfc3RhdHVzICk7CiAKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKQEAgLTEwNjEsNyArMTA3NCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJhbV9zaGFkb3dfc2xvdF91c2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIHJhbV9zaGFkb3dfc2xvdF91c2FnZSApICkgKQogICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICBQU0FfQVNTRVJUKCBwc2Ffb3Blbl9rZXkoIGlkLCAmaGFuZGxlICkgKTsKICAgICB9CiAKICAgICAvKiBUZXN0IHRoYXQgdGhlIGtleSB3YXMgY3JlYXRlZCBpbiB0aGUgZXhwZWN0ZWQgc2xvdC4gKi8KQEAgLTEwNjksMTggKzEwODEsMjIgQEAKIAogICAgIC8qIFRlc3QgdGhhdCB0aGUga2V5IGlzIHJlcG9ydGVkIHdpdGggdGhlIGNvcnJlY3QgYXR0cmlidXRlcywKICAgICAgKiBpbmNsdWRpbmcgdGhlIGV4cGVjdGVkIHNsb3QuICovCi0gICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggaGFuZGxlLCAmYXR0cmlidXRlcyApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggaWQsICZhdHRyaWJ1dGVzICkgKTsKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICkgKTsKLSAgICBoYW5kbGUgPSAwOworICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggaWQgKSApOwogICAgIGlmKCAhIGNoZWNrX3BlcnNpc3RlbnRfZGF0YSggbG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmFtX3NoYWRvd19zbG90X3VzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCByYW1fc2hhZG93X3Nsb3RfdXNhZ2UgKSApICkKICAgICAgICAgZ290byBleGl0OwotICAgIFRFU1RfRVFVQUwoIHBzYV9vcGVuX2tleSggaWQsICZoYW5kbGUgKSwKLSAgICAgICAgICAgICAgICBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgKTsKKyAgICBURVNUX0VRVUFMKCBwc2Ffb3Blbl9rZXkoIGlkLCAmaGFuZGxlICksIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCApOwogCiBleGl0OgorICAgIC8qCisgICAgICogS2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCkKKyAgICAgKiB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCisgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOworCiAgICAgUFNBX0RPTkUoICk7CiAgICAgcmFtX3Nsb3RzX3Jlc2V0KCApOwogICAgIHBzYV9wdXJnZV9zdG9yYWdlKCApOwpAQCAtMTA5OCw3ICsxMTE0LDggQEAKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUgPSBURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU7CiAgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oIGxpZmV0aW1lICk7CiAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgMSApOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCByZXR1cm5lZF9pZDsKKyAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZTsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAKICAgICBURVNUX1VTRVNfS0VZX0lEKCBpZCApOwpAQCAtMTEyNiwxMyArMTE0MywxMyBAQAogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCB0eXBlICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfbWF0ZXJpYWwtPngsIGtleV9tYXRlcmlhbC0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJldHVybmVkX2lkICkgKTsKICAgICBpZiggISBjaGVja19wZXJzaXN0ZW50X2RhdGEoIGxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYWRvd19jb3VudGVyLCBzaXplb2YoIHNoYWRvd19jb3VudGVyICkgKSApCiAgICAgICAgIGdvdG8gZXhpdDsKIAogICAgIC8qIERvIHN0dWZmIHdpdGggdGhlIGtleS4gKi8KLSAgICBpZiggISBzbW9rZV90ZXN0X2tleSggaGFuZGxlICkgKQorICAgIGlmKCAhIHNtb2tlX3Rlc3Rfa2V5KCBpZCApICkKICAgICAgICAgZ290byBleGl0OwogCiAgICAgLyogUmVzdGFydCBhbmQgdHJ5IGFnYWluLiAqLwpAQCAtMTE0MiwxOCArMTE1OSwxNSBAQAogICAgIGlmKCAhIGNoZWNrX3BlcnNpc3RlbnRfZGF0YSggbG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhZG93X2NvdW50ZXIsIHNpemVvZiggc2hhZG93X2NvdW50ZXIgKSApICkKICAgICAgICAgZ290byBleGl0OwotICAgIFBTQV9BU1NFUlQoIHBzYV9vcGVuX2tleSggaWQsICZoYW5kbGUgKSApOwotICAgIGlmKCAhIHNtb2tlX3Rlc3Rfa2V5KCBoYW5kbGUgKSApCisgICAgaWYoICEgc21va2VfdGVzdF9rZXkoIGlkICkgKQogICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICAvKiBXZSdyZSBkb25lLiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICkgKTsKLSAgICBoYW5kbGUgPSAwOworICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggaWQgKSApOwogICAgIGlmKCAhIGNoZWNrX3BlcnNpc3RlbnRfZGF0YSggbG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhZG93X2NvdW50ZXIsIHNpemVvZiggc2hhZG93X2NvdW50ZXIgKSApICkKICAgICAgICAgZ290byBleGl0OwotICAgIFRFU1RfRVFVQUwoIHBzYV9vcGVuX2tleSggaWQsICZoYW5kbGUgKSwKLSAgICAgICAgICAgICAgICBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgKTsKKyAgICBURVNUX0VRVUFMKCBwc2Ffb3Blbl9rZXkoIGlkLCAmaGFuZGxlICksIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCApOwogCiBleGl0OgogICAgIFBTQV9ET05FKCApOwpAQCAtMTE3Miw3ICsxMTg2LDcgQEAKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUgPSBURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU7CiAgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oIGxpZmV0aW1lICk7CiAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgMSApOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCByZXR1cm5lZF9pZDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAKICAgICBURVNUX1VTRVNfS0VZX0lEKCBpZCApOwpAQCAtMTE5Miw3ICsxMjA2LDcgQEAKICAgICBwc2Ffc2V0X2tleV9saWZldGltZSggJmF0dHJpYnV0ZXMsIGxpZmV0aW1lICk7CiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIHR5cGUgKTsKICAgICBwc2Ffc2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcywgYml0cyApOwotICAgIFRFU1RfRVFVQUwoIHBzYV9nZW5lcmF0ZV9rZXkoICZhdHRyaWJ1dGVzLCAmaGFuZGxlICksCisgICAgVEVTVF9FUVVBTCggcHNhX2dlbmVyYXRlX2tleSggJmF0dHJpYnV0ZXMsICZyZXR1cm5lZF9pZCApLAogICAgICAgICAgICAgICAgIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CiAKIGV4aXQ6CkBAIC0xMjEzLDcgKzEyMjcsOCBAQAogICAgIHBzYV9rZXlfbGlmZXRpbWVfdCBsaWZldGltZSA9IFRFU1RfU0VfUEVSU0lTVEVOVF9MSUZFVElNRTsKICAgICBwc2Ffa2V5X2xvY2F0aW9uX3QgbG9jYXRpb24gPSBQU0FfS0VZX0xJRkVUSU1FX0dFVF9MT0NBVElPTiggbGlmZXRpbWUgKTsKICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBpZCA9IG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCAxLCAxICk7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHJldHVybmVkX2lkOworICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKIAogICAgIFRFU1RfVVNFU19LRVlfSUQoIGlkICk7CkBAIC0xMjQwLDEzICsxMjU1LDEzIEBACiAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnICk7CiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIHR5cGUgKTsKICAgICBwc2Ffc2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcywgYml0cyApOwotICAgIFBTQV9BU1NFUlQoIHBzYV9nZW5lcmF0ZV9rZXkoICZhdHRyaWJ1dGVzLCAmaGFuZGxlICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2VuZXJhdGVfa2V5KCAmYXR0cmlidXRlcywgJnJldHVybmVkX2lkICkgKTsKICAgICBpZiggISBjaGVja19wZXJzaXN0ZW50X2RhdGEoIGxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYWRvd19jb3VudGVyLCBzaXplb2YoIHNoYWRvd19jb3VudGVyICkgKSApCiAgICAgICAgIGdvdG8gZXhpdDsKIAogICAgIC8qIERvIHN0dWZmIHdpdGggdGhlIGtleS4gKi8KLSAgICBpZiggISBzbW9rZV90ZXN0X2tleSggaGFuZGxlICkgKQorICAgIGlmKCAhIHNtb2tlX3Rlc3Rfa2V5KCBpZCApICkKICAgICAgICAgZ290byBleGl0OwogCiAgICAgLyogUmVzdGFydCBhbmQgdHJ5IGFnYWluLiAqLwpAQCAtMTI1NiwxOCArMTI3MSwxNSBAQAogICAgIGlmKCAhIGNoZWNrX3BlcnNpc3RlbnRfZGF0YSggbG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhZG93X2NvdW50ZXIsIHNpemVvZiggc2hhZG93X2NvdW50ZXIgKSApICkKICAgICAgICAgZ290byBleGl0OwotICAgIFBTQV9BU1NFUlQoIHBzYV9vcGVuX2tleSggaWQsICZoYW5kbGUgKSApOwotICAgIGlmKCAhIHNtb2tlX3Rlc3Rfa2V5KCBoYW5kbGUgKSApCisgICAgaWYoICEgc21va2VfdGVzdF9rZXkoIGlkICkgKQogICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICAvKiBXZSdyZSBkb25lLiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICkgKTsKLSAgICBoYW5kbGUgPSAwOworICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggaWQgKSApOwogICAgIGlmKCAhIGNoZWNrX3BlcnNpc3RlbnRfZGF0YSggbG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhZG93X2NvdW50ZXIsIHNpemVvZiggc2hhZG93X2NvdW50ZXIgKSApICkKICAgICAgICAgZ290byBleGl0OwotICAgIFRFU1RfRVFVQUwoIHBzYV9vcGVuX2tleSggaWQsICZoYW5kbGUgKSwKLSAgICAgICAgICAgICAgICBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgKTsKKyAgICBURVNUX0VRVUFMKCBwc2Ffb3Blbl9rZXkoIGlkLCAmaGFuZGxlICksIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCApOwogCiBleGl0OgogICAgIFBTQV9ET05FKCApOwpAQCAtMTI5NSw4ICsxMzA3LDggQEAKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUgPSBURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU7CiAgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oIGxpZmV0aW1lICk7CiAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgMSApOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgZHJ2X2hhbmRsZSA9IDA7IC8qIGtleSBtYW5hZ2VkIGJ5IHRoZSBkcml2ZXIgKi8KLSAgICBwc2Ffa2V5X2hhbmRsZV90IHN3X2hhbmRsZSA9IDA7IC8qIHRyYW5zcGFyZW50IGtleSAqLworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHJldHVybmVkX2lkOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHN3X2tleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IHN3X2F0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBkcnZfYXR0cmlidXRlczsKICAgICB1aW50OF90IHNpZ25hdHVyZVtQU0FfU0lHTkFUVVJFX01BWF9TSVpFXTsKQEAgLTEzNTEsMTEgKzEzNjMsMTEgQEAKICAgICBpZiggZ2VuZXJhdGluZyApCiAgICAgewogICAgICAgICBwc2Ffc2V0X2tleV9iaXRzKCAmZHJ2X2F0dHJpYnV0ZXMsIGJpdHMgKTsKLSAgICAgICAgUFNBX0FTU0VSVCggcHNhX2dlbmVyYXRlX2tleSggJmRydl9hdHRyaWJ1dGVzLCAmZHJ2X2hhbmRsZSApICk7CisgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9nZW5lcmF0ZV9rZXkoICZkcnZfYXR0cmlidXRlcywgJnJldHVybmVkX2lkICkgKTsKICAgICAgICAgLyogU2luY2Ugd2UgY2FsbGVkIGEgZ2VuZXJhdGUgbWV0aG9kIHRoYXQgZG9lcyBub3QgYWN0dWFsbHkKICAgICAgICAgICogZ2VuZXJhdGUgbWF0ZXJpYWwsIHN0b3JlIHRoZSBkZXNpcmVkIHJlc3VsdCBvZiBnZW5lcmF0aW9uIGluCiAgICAgICAgICAqIHRoZSBtb2NrIHNlY3VyZSBlbGVtZW50IHN0b3JhZ2UuICovCi0gICAgICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGRydl9oYW5kbGUsICZkcnZfYXR0cmlidXRlcyApICk7CisgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGlkLCAmZHJ2X2F0dHJpYnV0ZXMgKSApOwogICAgICAgICBURVNUX0VRVUFMKCBrZXlfbWF0ZXJpYWwtPmxlbiwgUFNBX0JJVFNfVE9fQllURVMoIGJpdHMgKSApOwogICAgICAgICBtZW1jcHkoIHJhbV9zbG90c1tyYW1fbWluX3Nsb3RdLmNvbnRlbnQsIGtleV9tYXRlcmlhbC0+eCwKICAgICAgICAgICAgICAgICBrZXlfbWF0ZXJpYWwtPmxlbiApOwpAQCAtMTM2NCw3ICsxMzc2LDcgQEAKICAgICB7CiAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmZHJ2X2F0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfbWF0ZXJpYWwtPngsIGtleV9tYXRlcmlhbC0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRydl9oYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJldHVybmVkX2lkICkgKTsKICAgICB9CiAKICAgICAvKiBFaXRoZXIgaW1wb3J0IHRoZSBzYW1lIGtleSBpbiBzb2Z0d2FyZSwgb3IgZXhwb3J0IHRoZSBkcml2ZXIncwpAQCAtMTM3NSwyMCArMTM4NywyMCBAQAogICAgICAgICBjYXNlIFNJR05fSU5fRFJJVkVSX0FORF9QQVJBTExFTF9DUkVBVElPTjoKICAgICAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmc3dfYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfbWF0ZXJpYWwtPngsIGtleV9tYXRlcmlhbC0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzd19oYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzd19rZXkgKSApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU0lHTl9JTl9EUklWRVJfVEhFTl9FWFBPUlRfUFVCTElDOgogICAgICAgICB7CiAgICAgICAgICAgICB1aW50OF90IHB1YmxpY19rZXlbUFNBX0tFWV9FWFBPUlRfRUNDX1BVQkxJQ19LRVlfTUFYX1NJWkUoIFBTQV9WRU5ET1JfRUNDX01BWF9DVVJWRV9CSVRTICldOwogICAgICAgICAgICAgc2l6ZV90IHB1YmxpY19rZXlfbGVuZ3RoOwotICAgICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2V4cG9ydF9wdWJsaWNfa2V5KCBkcnZfaGFuZGxlLAorICAgICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2V4cG9ydF9wdWJsaWNfa2V5KCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljX2tleSwgc2l6ZW9mKCBwdWJsaWNfa2V5ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwdWJsaWNfa2V5X2xlbmd0aCApICk7CiAgICAgICAgICAgICBwc2Ffc2V0X2tleV90eXBlKCAmc3dfYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9LRVlfVFlQRV9QVUJMSUNfS0VZX09GX0tFWV9QQUlSKCB0eXBlICkgKTsKICAgICAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmc3dfYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWNfa2V5LCBwdWJsaWNfa2V5X2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3dfaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3dfa2V5ICkgKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTM5OSwxNiArMTQxMSwxNCBAQAogICAgICAgICBjYXNlIFNJR05fSU5fRFJJVkVSX0FORF9QQVJBTExFTF9DUkVBVElPTjoKICAgICAgICAgY2FzZSBTSUdOX0lOX0RSSVZFUl9USEVOX0VYUE9SVF9QVUJMSUM6CiAgICAgICAgICAgICBQU0FfQVNTRVJUX1ZJQV9EUklWRVIoCi0gICAgICAgICAgICAgICAgcHNhX3NpZ25faGFzaCggZHJ2X2hhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGcsCisgICAgICAgICAgICAgICAgcHNhX3NpZ25faGFzaCggaWQsIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC0+eCwgaW5wdXQtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpemVvZiggc2lnbmF0dXJlICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpZ25hdHVyZV9sZW5ndGggKSwKICAgICAgICAgICAgICAgICBQU0FfU1VDQ0VTUyApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU0lHTl9JTl9TT0ZUV0FSRV9BTkRfUEFSQUxMRUxfQ1JFQVRJT046Ci0gICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2Ffc2lnbl9oYXNoKCBzd19oYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGcsCisgICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2Ffc2lnbl9oYXNoKCBzd19rZXksIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LT54LCBpbnB1dC0+bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLCBzaXplb2YoIHNpZ25hdHVyZSApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpZ25hdHVyZV9sZW5ndGggKSApOwpAQCAtMTQxNiwzMCArMTQyNiwzNiBAQAogICAgIH0KIAogICAgIC8qIFZlcmlmeSB3aXRoIGJvdGgga2V5cy4gKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfdmVyaWZ5X2hhc2goIHN3X2hhbmRsZSwgYWxnLAorICAgIFBTQV9BU1NFUlQoIHBzYV92ZXJpZnlfaGFzaCggc3dfa2V5LCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC0+eCwgaW5wdXQtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgc2lnbmF0dXJlX2xlbmd0aCApICk7CiAgICAgUFNBX0FTU0VSVF9WSUFfRFJJVkVSKAotICAgICAgICBwc2FfdmVyaWZ5X2hhc2goIGRydl9oYW5kbGUsIGFsZywKKyAgICAgICAgcHNhX3ZlcmlmeV9oYXNoKCBpZCwgYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LT54LCBpbnB1dC0+bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgc2lnbmF0dXJlX2xlbmd0aCApLAogICAgICAgICBQU0FfU1VDQ0VTUyApOwogCiAgICAgLyogQ2hhbmdlIHRoZSBzaWduYXR1cmUgYW5kIHZlcmlmeSBhZ2Fpbi4gKi8KICAgICBzaWduYXR1cmVbMF0gXj0gMTsKLSAgICBURVNUX0VRVUFMKCBwc2FfdmVyaWZ5X2hhc2goIHN3X2hhbmRsZSwgYWxnLAorICAgIFRFU1RfRVFVQUwoIHBzYV92ZXJpZnlfaGFzaCggc3dfa2V5LCBhbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC0+eCwgaW5wdXQtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgc2lnbmF0dXJlX2xlbmd0aCApLAogICAgICAgICAgICAgICAgIFBTQV9FUlJPUl9JTlZBTElEX1NJR05BVFVSRSApOwogICAgIFBTQV9BU1NFUlRfVklBX0RSSVZFUigKLSAgICAgICAgcHNhX3ZlcmlmeV9oYXNoKCBkcnZfaGFuZGxlLCBhbGcsCisgICAgICAgIHBzYV92ZXJpZnlfaGFzaCggaWQsIGFsZywKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC0+eCwgaW5wdXQtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpZ25hdHVyZV9sZW5ndGggKSwKICAgICAgICAgUFNBX0VSUk9SX0lOVkFMSURfU0lHTkFUVVJFICk7CiAKIGV4aXQ6Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBkcnZfaGFuZGxlICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBzd19oYW5kbGUgKTsKKyAgICAvKgorICAgICAqIERyaXZlciBrZXkgYXR0cmlidXRlcyBtYXkgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoKQorICAgICAqIHRodXMgcmVzZXQgdGhlbSBhcyByZXF1aXJlZC4KKyAgICAgKi8KKyAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZkcnZfYXR0cmlidXRlcyApOworCisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBpZCApOworICAgIHBzYV9kZXN0cm95X2tleSggc3dfa2V5ICk7CiAgICAgUFNBX0RPTkUoICk7CiAgICAgcmFtX3Nsb3RzX3Jlc2V0KCApOwogICAgIHBzYV9wdXJnZV9zdG9yYWdlKCApOwpAQCAtMTQ2MCw5ICsxNDc2LDkgQEAKICAgICBwc2FfZHJ2X3NlX2tleV9tYW5hZ2VtZW50X3Qga2V5X21hbmFnZW1lbnQ7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGlkID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIG93bmVyX2lkX2FyZywgaWRfYXJnICk7CisgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGU7CiAgICAgc2l6ZV90IGJpdF9zaXplID0gNDg7CiAgICAgcHNhX2tleV9zbG90X251bWJlcl90IHdhbnRlZF9zbG90ID0gMHgxMjM0NTY3ODk7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOwogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CiAKICAgICBURVNUX1VTRVNfS0VZX0lEKCBpZCApOwpAQCAtMTQ5OCwxMCArMTUxNCw4IEBACiAgICAgICAgIGdvdG8gZXhpdDsKIAogICAgIC8qIFRlc3QgdGhhdCB0aGUga2V5IGV4aXN0cyBhbmQgaGFzIHRoZSBleHBlY3RlZCBhdHRyaWJ1dGVzLiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9vcGVuX2tleSggaWQsICZoYW5kbGUgKSApOwotICAgIGlmKCAhIGNoZWNrX2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKQorICAgIGlmKCAhIGNoZWNrX2tleV9hdHRyaWJ1dGVzKCBpZCwgJmF0dHJpYnV0ZXMgKSApCiAgICAgICAgIGdvdG8gZXhpdDsKLSAgICBQU0FfQVNTRVJUKCBwc2FfY2xvc2Vfa2V5KCBoYW5kbGUgKSApOwogCiAjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIpCiAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaW52YWxpZF9pZCA9CkBAIC0xNTA5LDIyICsxNTIzLDIxIEBACiAgICAgVEVTVF9FUVVBTCggcHNhX29wZW5fa2V5KCBpbnZhbGlkX2lkLCAmaGFuZGxlICksIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCApOwogI2VuZGlmCiAKKyAgICBQU0FfQVNTRVJUKCBwc2FfcHVyZ2Vfa2V5KCBpZCApICk7CisKICAgICAvKiBSZXN0YXJ0IGFuZCB0cnkgYWdhaW4uICovCiAgICAgUFNBX0RPTkUoICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX3JlZ2lzdGVyX3NlX2RyaXZlciggbG9jYXRpb24sICZkcml2ZXIgKSApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9jcnlwdG9faW5pdCggKSApOwotICAgIFBTQV9BU1NFUlQoIHBzYV9vcGVuX2tleSggaWQsICZoYW5kbGUgKSApOwotICAgIGlmKCAhIGNoZWNrX2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKQorICAgIGlmKCAhIGNoZWNrX2tleV9hdHRyaWJ1dGVzKCBpZCwgJmF0dHJpYnV0ZXMgKSApCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICAvKiBUaGlzIHRpbWUsIGRlc3Ryb3kgdGhlIGtleS4gKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApICk7Ci0gICAgaGFuZGxlID0gMDsKLSAgICBURVNUX0VRVUFMKCBwc2Ffb3Blbl9rZXkoIGlkLCAmaGFuZGxlICksCi0gICAgICAgICAgICAgICAgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBpZCApICk7CisgICAgVEVTVF9FUVVBTCggcHNhX29wZW5fa2V5KCBpZCwgJmhhbmRsZSApLCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgKTsKIAogZXhpdDoKICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGlkICk7CiAgICAgUFNBX0RPTkUoICk7CiAgICAgcHNhX3B1cmdlX3N0b3JhZ2UoICk7CiAgICAgbWVtc2V0KCAmdmFsaWRhdGVfc2xvdF9udW1iZXJfZGlyZWN0aW9ucywgMCwKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fc2VfZHJpdmVyX2hhbF9tb2Nrcy5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fc2VfZHJpdmVyX2hhbF9tb2Nrcy5mdW5jdGlvbgppbmRleCA3ZDRhNTkxLi42MjljOTI0IDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3NlX2RyaXZlcl9oYWxfbW9ja3MuZnVuY3Rpb24KKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zZV9kcml2ZXJfaGFsX21vY2tzLmZ1bmN0aW9uCkBAIC0zMzMsNyArMzMzLDcgQEAKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUgPSBURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU7CiAgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oIGxpZmV0aW1lICk7CiAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgMSApOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCByZXR1cm5lZF9pZDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgY29uc3QgdWludDhfdCBrZXlfbWF0ZXJpYWxbM10gPSB7MHhmYSwgMHhjYSwgMHhkZX07CiAKQEAgLTM1Nyw3ICszNTcsNyBAQAogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBQU0FfS0VZX1RZUEVfUkFXX0RBVEEgKTsKICAgICBURVNUX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X21hdGVyaWFsLCBzaXplb2YoIGtleV9tYXRlcmlhbCApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApID09IGV4cGVjdGVkX3Jlc3VsdCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJldHVybmVkX2lkICkgPT0gZXhwZWN0ZWRfcmVzdWx0ICk7CiAKICAgICBURVNUX0FTU0VSVCggbW9ja19hbGxvY2F0ZV9kYXRhLmNhbGxlZCA9PSAxICk7CiAgICAgVEVTVF9BU1NFUlQoIG1vY2tfaW1wb3J0X2RhdGEuY2FsbGVkID09CkBAIC0zODUsNyArMzg1LDcgQEAKIAogICAgIGlmKCBleHBlY3RlZF9yZXN1bHQgPT0gUFNBX1NVQ0NFU1MgKQogICAgIHsKLSAgICAgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKSApOworICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIGlkICkgKTsKICAgICAgICAgVEVTVF9BU1NFUlQoIG1vY2tfZGVzdHJveV9kYXRhLmNhbGxlZCA9PSAxICk7CiAgICAgfQogZXhpdDoKQEAgLTQwMiw3ICs0MDIsNyBAQAogICAgIHBzYV9rZXlfbGlmZXRpbWVfdCBsaWZldGltZSA9IFRFU1RfU0VfUEVSU0lTVEVOVF9MSUZFVElNRTsKICAgICBwc2Ffa2V5X2xvY2F0aW9uX3QgbG9jYXRpb24gPSBQU0FfS0VZX0xJRkVUSU1FX0dFVF9MT0NBVElPTiggbGlmZXRpbWUgKTsKICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBpZCA9IG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCAxLCAxICk7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHJldHVybmVkX2lkOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBjb25zdCB1aW50OF90IGtleV9tYXRlcmlhbFszXSA9IHsweGZhLCAweGNhLCAweGRlfTsKICAgICB1aW50OF90IGV4cG9ydGVkW3NpemVvZigga2V5X21hdGVyaWFsICldOwpAQCAtNDI4LDE1ICs0MjgsMTUgQEAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywgUFNBX0tFWV9UWVBFX1JBV19EQVRBICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfbWF0ZXJpYWwsIHNpemVvZigga2V5X21hdGVyaWFsICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmV0dXJuZWRfaWQgKSApOwogCi0gICAgVEVTVF9BU1NFUlQoIHBzYV9leHBvcnRfa2V5KCBoYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkLCBzaXplb2YoIGV4cG9ydGVkICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHBvcnRlZF9sZW5ndGggKSA9PSBleHBlY3RlZF9yZXN1bHQgKTsKKyAgICBURVNUX0FTU0VSVCggcHNhX2V4cG9ydF9rZXkoIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWQsIHNpemVvZiggZXhwb3J0ZWQgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHBvcnRlZF9sZW5ndGggKSA9PSBleHBlY3RlZF9yZXN1bHQgKTsKIAogICAgIFRFU1RfQVNTRVJUKCBtb2NrX2V4cG9ydF9kYXRhLmNhbGxlZCA9PSAxICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBpZCApICk7CiAKICAgICBURVNUX0FTU0VSVCggbW9ja19kZXN0cm95X2RhdGEuY2FsbGVkID09IDEgKTsKIApAQCAtNDU2LDcgKzQ1Niw3IEBACiAgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lID0gVEVTVF9TRV9QRVJTSVNURU5UX0xJRkVUSU1FOwogICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbiA9IFBTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKCBsaWZldGltZSApOwogICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGlkID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDEsIDEgKTsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgcmV0dXJuZWRfaWQ7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogCiAgICAgbW9ja19hbGxvY2F0ZV9kYXRhLnJldHVybl92YWx1ZSA9IG1vY2tfYWxsb2NfcmV0dXJuX3ZhbHVlOwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAgICAgcHNhX3NldF9rZXlfdXNhZ2VfZmxhZ3MoICZhdHRyaWJ1dGVzLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBQU0FfS0VZX1RZUEVfUkFXX0RBVEEgKTsKICAgICBwc2Ffc2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcywgOCApOwotICAgIFRFU1RfQVNTRVJUKCBwc2FfZ2VuZXJhdGVfa2V5KCAmYXR0cmlidXRlcywgJmhhbmRsZSApID09IGV4cGVjdGVkX3Jlc3VsdCApOworICAgIFRFU1RfQVNTRVJUKCBwc2FfZ2VuZXJhdGVfa2V5KCAmYXR0cmlidXRlcywgJnJldHVybmVkX2lkKSA9PSBleHBlY3RlZF9yZXN1bHQgKTsKICAgICBURVNUX0FTU0VSVCggbW9ja19hbGxvY2F0ZV9kYXRhLmNhbGxlZCA9PSAxICk7CiAgICAgVEVTVF9BU1NFUlQoIG1vY2tfZ2VuZXJhdGVfZGF0YS5jYWxsZWQgPT0KICAgICAgICAgKCBtb2NrX2FsbG9jX3JldHVybl92YWx1ZSA9PSBQU0FfU1VDQ0VTUz8gMSA6IDAgKSApOwpAQCAtNTA0LDcgKzUwNCw3IEBACiAKICAgICBpZiggZXhwZWN0ZWRfcmVzdWx0ID09IFBTQV9TVUNDRVNTICkKICAgICB7Ci0gICAgICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICkgKTsKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBpZCApICk7CiAgICAgICAgIFRFU1RfQVNTRVJUKCBtb2NrX2Rlc3Ryb3lfZGF0YS5jYWxsZWQgPT0gMSApOwogICAgIH0KIApAQCAtNTIzLDcgKzUyMyw3IEBACiAgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lID0gVEVTVF9TRV9QRVJTSVNURU5UX0xJRkVUSU1FOwogICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbiA9IFBTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKCBsaWZldGltZSApOwogICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGlkID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDEsIDEgKTsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgcmV0dXJuZWRfaWQ7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIGNvbnN0IHVpbnQ4X3Qga2V5X21hdGVyaWFsWzNdID0gezB4ZmEsIDB4Y2EsIDB4ZGV9OwogICAgIHVpbnQ4X3QgZXhwb3J0ZWRbc2l6ZW9mKCBrZXlfbWF0ZXJpYWwgKV07CkBAIC01NDksMTMgKzU0OSwxMyBAQAogCiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfbWF0ZXJpYWwsIHNpemVvZigga2V5X21hdGVyaWFsICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmV0dXJuZWRfaWQgKSApOwogCi0gICAgVEVTVF9BU1NFUlQoIHBzYV9leHBvcnRfcHVibGljX2tleSggaGFuZGxlLCBleHBvcnRlZCwgc2l6ZW9mKGV4cG9ydGVkKSwKKyAgICBURVNUX0FTU0VSVCggcHNhX2V4cG9ydF9wdWJsaWNfa2V5KCBpZCwgZXhwb3J0ZWQsIHNpemVvZihleHBvcnRlZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4cG9ydGVkX2xlbmd0aCApID09IGV4cGVjdGVkX3Jlc3VsdCApOwogICAgIFRFU1RfQVNTRVJUKCBtb2NrX2V4cG9ydF9wdWJsaWNfZGF0YS5jYWxsZWQgPT0gMSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggaWQgKSApOwogICAgIFRFU1RfQVNTRVJUKCBtb2NrX2Rlc3Ryb3lfZGF0YS5jYWxsZWQgPT0gMSApOwogCiBleGl0OgpAQCAtNTczLDcgKzU3Myw3IEBACiAgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lID0gVEVTVF9TRV9QRVJTSVNURU5UX0xJRkVUSU1FOwogICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbiA9IFBTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKCBsaWZldGltZSApOwogICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGlkID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDEsIDEgKTsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgcmV0dXJuZWRfaWQ7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIGNvbnN0IHVpbnQ4X3Qga2V5X21hdGVyaWFsWzNdID0gezB4ZmEsIDB4Y2EsIDB4ZGV9OwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGdvcml0aG0gPSBQU0FfQUxHX0VDRFNBKFBTQV9BTEdfU0hBXzI1Nik7CkBAIC02MDcsMTYgKzYwNywxNiBAQAogCiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfbWF0ZXJpYWwsIHNpemVvZigga2V5X21hdGVyaWFsICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmV0dXJuZWRfaWQgKSApOwogCi0gICAgVEVTVF9BU1NFUlQoIHBzYV9zaWduX2hhc2goIGhhbmRsZSwgYWxnb3JpdGhtLAorICAgIFRFU1RfQVNTRVJUKCBwc2Ffc2lnbl9oYXNoKCBpZCwgYWxnb3JpdGhtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLCBzaXplb2YoIGhhc2ggKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLCBzaXplb2YoIHNpZ25hdHVyZSApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2lnbmF0dXJlX2xlbmd0aCkKICAgICAgICAgICAgICAgICAgPT0gZXhwZWN0ZWRfcmVzdWx0ICk7CiAgICAgVEVTVF9BU1NFUlQoIG1vY2tfc2lnbl9kYXRhLmNhbGxlZCA9PSAxICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBpZCApICk7CiAgICAgVEVTVF9BU1NFUlQoIG1vY2tfZGVzdHJveV9kYXRhLmNhbGxlZCA9PSAxICk7CiAKIGV4aXQ6CkBAIC02MzQsNyArNjM0LDcgQEAKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUgPSBURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU7CiAgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oIGxpZmV0aW1lICk7CiAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgMSApOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCByZXR1cm5lZF9pZDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgY29uc3QgdWludDhfdCBrZXlfbWF0ZXJpYWxbM10gPSB7MHhmYSwgMHhjYSwgMHhkZX07CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZ29yaXRobSA9IFBTQV9BTEdfRUNEU0EoUFNBX0FMR19TSEFfMjU2KTsKQEAgLTY2NywxNSArNjY3LDE1IEBACiAKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9tYXRlcmlhbCwgc2l6ZW9mKCBrZXlfbWF0ZXJpYWwgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXR1cm5lZF9pZCApICk7CiAKLSAgICBURVNUX0FTU0VSVCggcHNhX3ZlcmlmeV9oYXNoKCBoYW5kbGUsIGFsZ29yaXRobSwKKyAgICBURVNUX0FTU0VSVCggcHNhX3ZlcmlmeV9oYXNoKCBpZCwgYWxnb3JpdGhtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gsIHNpemVvZiggaGFzaCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgc2l6ZW9mKCBzaWduYXR1cmUgKSApCiAgICAgICAgICAgICAgICAgID09IGV4cGVjdGVkX3Jlc3VsdCApOwogICAgIFRFU1RfQVNTRVJUKCBtb2NrX3ZlcmlmeV9kYXRhLmNhbGxlZCA9PSAxICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBpZCApICk7CiAgICAgVEVTVF9BU1NFUlQoIG1vY2tfZGVzdHJveV9kYXRhLmNhbGxlZCA9PSAxICk7CiAKIGV4aXQ6CmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3Nsb3RfbWFuYWdlbWVudC5kYXRhIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuZGF0YQppbmRleCBlMTYwODlkLi4zOTZjZGZiIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3Nsb3RfbWFuYWdlbWVudC5kYXRhCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fc2xvdF9tYW5hZ2VtZW50LmRhdGEKQEAgLTEsNjUgKzEsODIgQEAKIFRyYW5zaWVudCBzbG90LCBjaGVjayBhZnRlciBjbG9zaW5nCi10cmFuc2llbnRfc2xvdF9saWZlY3ljbGU6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOkNMT1NFX0JZX0NMT1NFCit0cmFuc2llbnRfc2xvdF9saWZlY3ljbGU6MHgxOjA6MDpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6IjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIjpJTlZBTElEQVRFX0JZX0NMT1NJTkcKIAogVHJhbnNpZW50IHNsb3QsIGNoZWNrIGFmdGVyIGNsb3NpbmcgYW5kIHJlc3RhcnRpbmcKLXRyYW5zaWVudF9zbG90X2xpZmVjeWNsZTowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6Q0xPU0VfQllfQ0xPU0VfV0lUSF9TSFVURE9XTgordHJhbnNpZW50X3Nsb3RfbGlmZWN5Y2xlOjB4MTM6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOklOVkFMSURBVEVfQllfQ0xPU0lOR19XSVRIX1NIVVRET1dOCiAKIFRyYW5zaWVudCBzbG90LCBjaGVjayBhZnRlciBkZXN0cm95aW5nCi10cmFuc2llbnRfc2xvdF9saWZlY3ljbGU6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOkNMT1NFX0JZX0RFU1RST1kKK3RyYW5zaWVudF9zbG90X2xpZmVjeWNsZToweDEzNTowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6SU5WQUxJREFURV9CWV9ERVNUUk9ZSU5HCiAKIFRyYW5zaWVudCBzbG90LCBjaGVjayBhZnRlciBkZXN0cm95aW5nIGFuZCByZXN0YXJ0aW5nCi10cmFuc2llbnRfc2xvdF9saWZlY3ljbGU6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOkNMT1NFX0JZX0RFU1RST1lfV0lUSF9TSFVURE9XTgordHJhbnNpZW50X3Nsb3RfbGlmZWN5Y2xlOjB4MTM1NzowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6SU5WQUxJREFURV9CWV9ERVNUUk9ZSU5HX1dJVEhfU0hVVERPV04KIAogVHJhbnNpZW50IHNsb3QsIGNoZWNrIGFmdGVyIHJlc3RhcnQgd2l0aCBsaXZlIGhhbmRsZXMKLXRyYW5zaWVudF9zbG90X2xpZmVjeWNsZTowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6Q0xPU0VfQllfU0hVVERPV04KK3RyYW5zaWVudF9zbG90X2xpZmVjeWNsZToweDEzNTc5OjA6MDpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6IjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIjpJTlZBTElEQVRFX0JZX1NIVVRET1dOCiAKIFBlcnNpc3RlbnQgc2xvdCwgY2hlY2sgYWZ0ZXIgY2xvc2luZywgaWQ9bWluCi1wZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMjQ6UFNBX0tFWV9JRF9VU0VSX01JTjowOjA6MDpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6IjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIjpDTE9TRV9CWV9DTE9TRQorcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MTI0OlBTQV9LRVlfSURfVVNFUl9NSU46MDowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6SU5WQUxJREFURV9CWV9DTE9TSU5HCiAKIFBlcnNpc3RlbnQgc2xvdCwgY2hlY2sgYWZ0ZXIgY2xvc2luZyBhbmQgcmVzdGFydGluZywgaWQ9bWluCi1wZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMjU6UFNBX0tFWV9JRF9VU0VSX01JTjowOjA6MDpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6IjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIjpDTE9TRV9CWV9DTE9TRQorcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MTI1OlBTQV9LRVlfSURfVVNFUl9NSU46MDowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6SU5WQUxJREFURV9CWV9DTE9TSU5HX1dJVEhfU0hVVERPV04KIAogUGVyc2lzdGVudCBzbG90LCBjaGVjayBhZnRlciBkZXN0cm95aW5nLCBpZD1taW4KLXBlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEyNjpQU0FfS0VZX0lEX1VTRVJfTUlOOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOkNMT1NFX0JZX0RFU1RST1kKK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEyNjpQU0FfS0VZX0lEX1VTRVJfTUlOOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOklOVkFMSURBVEVfQllfREVTVFJPWUlORwogCiBQZXJzaXN0ZW50IHNsb3QsIGNoZWNrIGFmdGVyIGRlc3Ryb3lpbmcgYW5kIHJlc3RhcnRpbmcsIGlkPW1pbgotcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MTI3OlBTQV9LRVlfSURfVVNFUl9NSU46MDowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6Q0xPU0VfQllfREVTVFJPWQorcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MTI3OlBTQV9LRVlfSURfVVNFUl9NSU46MDowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6SU5WQUxJREFURV9CWV9ERVNUUk9ZSU5HX1dJVEhfU0hVVERPV04KKworUGVyc2lzdGVudCBzbG90LCBjaGVjayBhZnRlciBwdXJnaW5nLCBpZD1taW4KK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjIwMDpQU0FfS0VZX0lEX1VTRVJfTUlOOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOklOVkFMSURBVEVfQllfUFVSR0lORworCitQZXJzaXN0ZW50IHNsb3QsIGNoZWNrIGFmdGVyIHB1cmdpbmcgYW5kIHJlc3RhcnRpbmcsIGlkPW1pbgorcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MjAxOlBTQV9LRVlfSURfVVNFUl9NSU46MDowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6SU5WQUxJREFURV9CWV9QVVJHSU5HX1dJVEhfU0hVVERPV04KIAogUGVyc2lzdGVudCBzbG90LCBjaGVjayBhZnRlciByZXN0YXJ0IHdpdGggbGl2ZSBoYW5kbGUsIGlkPW1pbgotcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MTI4OlBTQV9LRVlfSURfVVNFUl9NSU46MDowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6Q0xPU0VfQllfU0hVVERPV04KK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEyODpQU0FfS0VZX0lEX1VTRVJfTUlOOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOklOVkFMSURBVEVfQllfU0hVVERPV04KIAogUGVyc2lzdGVudCBzbG90LCBjaGVjayBhZnRlciBjbG9zaW5nLCBpZD1tYXgKLXBlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEyOTpQU0FfS0VZX0lEX1VTRVJfTUFYOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOkNMT1NFX0JZX0NMT1NFCitwZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMjk6UFNBX0tFWV9JRF9VU0VSX01BWDowOjA6MDpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6IjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIjpJTlZBTElEQVRFX0JZX0NMT1NJTkcKIAogUGVyc2lzdGVudCBzbG90LCBjaGVjayBhZnRlciBkZXN0cm95aW5nLCBpZD1tYXgKLXBlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEzMDpQU0FfS0VZX0lEX1VTRVJfTUFYOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOkNMT1NFX0JZX0RFU1RST1kKK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEzMDpQU0FfS0VZX0lEX1VTRVJfTUFYOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOklOVkFMSURBVEVfQllfREVTVFJPWUlORworCitQZXJzaXN0ZW50IHNsb3QsIGNoZWNrIGFmdGVyIHB1cmdpbmcsIGlkPW1heAorcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MjAyOlBTQV9LRVlfSURfVVNFUl9NQVg6MDowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6SU5WQUxJREFURV9CWV9QVVJHSU5HCiAKIFBlcnNpc3RlbnQgc2xvdCwgY2hlY2sgYWZ0ZXIgcmVzdGFydCwgaWQ9bWF4Ci1wZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMzE6UFNBX0tFWV9JRF9VU0VSX01BWDowOjA6MDpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6IjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIjpDTE9TRV9CWV9TSFVURE9XTgorcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MTMxOlBTQV9LRVlfSURfVVNFUl9NQVg6MDowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6SU5WQUxJREFURV9CWV9TSFVURE9XTgogCiBQZXJzaXN0ZW50IHNsb3Q6IEVDUCBrZXlwYWlyIChFQ0RTQSwgZXhwb3J0YWJsZSksIGNsb3NlCiBkZXBlbmRzX29uOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAotcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MTMyOjE6UFNBX0tFWV9VU0FHRV9FWFBPUlQgfCBQU0FfS0VZX1VTQUdFX1NJR05fSEFTSCB8IFBTQV9LRVlfVVNBR0VfVkVSSUZZX0hBU0g6UFNBX0FMR19FQ0RTQV9BTlk6MDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpDTE9TRV9CWV9DTE9TRQorcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MTMyOjE6UFNBX0tFWV9VU0FHRV9FWFBPUlQgfCBQU0FfS0VZX1VTQUdFX1NJR05fSEFTSCB8IFBTQV9LRVlfVVNBR0VfVkVSSUZZX0hBU0g6UFNBX0FMR19FQ0RTQV9BTlk6MDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpJTlZBTElEQVRFX0JZX0NMT1NJTkcKIAogUGVyc2lzdGVudCBzbG90OiBFQ1Aga2V5cGFpciAoRUNEU0EsIGV4cG9ydGFibGUpLCBjbG9zZStyZXN0YXJ0CiBkZXBlbmRzX29uOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAotcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MTMzOjE6UFNBX0tFWV9VU0FHRV9FWFBPUlQgfCBQU0FfS0VZX1VTQUdFX1NJR05fSEFTSCB8IFBTQV9LRVlfVVNBR0VfVkVSSUZZX0hBU0g6UFNBX0FMR19FQ0RTQV9BTlk6MDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpDTE9TRV9CWV9DTE9TRV9XSVRIX1NIVVRET1dOCitwZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMzM6MTpQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIIHwgUFNBX0tFWV9VU0FHRV9WRVJJRllfSEFTSDpQU0FfQUxHX0VDRFNBX0FOWTowOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOklOVkFMSURBVEVfQllfQ0xPU0lOR19XSVRIX1NIVVRET1dOCisKK1BlcnNpc3RlbnQgc2xvdDogRUNQIGtleXBhaXIgKEVDRFNBLCBleHBvcnRhYmxlKSwgcHVyZ2UKK2RlcGVuZHNfb246TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECitwZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMzI6MTpQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIIHwgUFNBX0tFWV9VU0FHRV9WRVJJRllfSEFTSDpQU0FfQUxHX0VDRFNBX0FOWTowOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOklOVkFMSURBVEVfQllfUFVSR0lORwogCiBQZXJzaXN0ZW50IHNsb3Q6IEVDUCBrZXlwYWlyIChFQ0RTQSwgZXhwb3J0YWJsZSksIHJlc3RhcnQKIGRlcGVuZHNfb246TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECi1wZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMzQ6MTpQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIIHwgUFNBX0tFWV9VU0FHRV9WRVJJRllfSEFTSDpQU0FfQUxHX0VDRFNBX0FOWTowOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOkNMT1NFX0JZX1NIVVRET1dOCitwZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMzQ6MTpQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIIHwgUFNBX0tFWV9VU0FHRV9WRVJJRllfSEFTSDpQU0FfQUxHX0VDRFNBX0FOWTowOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOklOVkFMSURBVEVfQllfU0hVVERPV04KIAogUGVyc2lzdGVudCBzbG90OiBFQ1Aga2V5cGFpciAoRUNESCtFQ0RTQSwgZXhwb3J0YWJsZSksIGNsb3NlCiBkZXBlbmRzX29uOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECi1wZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMzU6MTpQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIIHwgUFNBX0tFWV9VU0FHRV9WRVJJRllfSEFTSDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0FMR19FQ0RTQV9BTlk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6Q0xPU0VfQllfQ0xPU0UKK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEzNToxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0ggfCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfQUxHX0VDRFNBX0FOWTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpJTlZBTElEQVRFX0JZX0NMT1NJTkcKIAogUGVyc2lzdGVudCBzbG90OiBFQ1Aga2V5cGFpciAoRUNESCtFQ0RTQSwgZXhwb3J0YWJsZSksIGNsb3NlK3Jlc3RhcnQKIGRlcGVuZHNfb246TUJFRFRMU19FQ0RIX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKLXBlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEzNjoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0ggfCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfQUxHX0VDRFNBX0FOWTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpDTE9TRV9CWV9DTE9TRV9XSVRIX1NIVVRET1dOCitwZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMzY6MTpQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIIHwgUFNBX0tFWV9VU0FHRV9WRVJJRllfSEFTSDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0FMR19FQ0RTQV9BTlk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6SU5WQUxJREFURV9CWV9DTE9TSU5HX1dJVEhfU0hVVERPV04KKworUGVyc2lzdGVudCBzbG90OiBFQ1Aga2V5cGFpciAoRUNESCtFQ0RTQSwgZXhwb3J0YWJsZSksIHB1cmdlCitkZXBlbmRzX29uOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECitwZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMzU6MTpQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIIHwgUFNBX0tFWV9VU0FHRV9WRVJJRllfSEFTSDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0FMR19FQ0RTQV9BTlk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6SU5WQUxJREFURV9CWV9QVVJHSU5HCiAKIFBlcnNpc3RlbnQgc2xvdDogRUNQIGtleXBhaXIgKEVDREgrRUNEU0EsIGV4cG9ydGFibGUpLCByZXN0YXJ0CiBkZXBlbmRzX29uOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECi1wZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMzc6MTpQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIIHwgUFNBX0tFWV9VU0FHRV9WRVJJRllfSEFTSDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0FMR19FQ0RTQV9BTlk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6Q0xPU0VfQllfU0hVVERPV04KK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEzNzoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0ggfCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfQUxHX0VDRFNBX0FOWTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpJTlZBTElEQVRFX0JZX1NIVVRET1dOCiAKIEF0dGVtcHQgdG8gb3ZlcndyaXRlOiBjbG9zZSBiZWZvcmUKIGNyZWF0ZV9leGlzdGVudDpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MHgxNzM2OjE6Q0xPU0VfQkVGT1JFCkBAIC03MiwxNSArODksMTUgQEAKIAogT3BlbiBmYWlsdXJlOiBpbnZhbGlkIGlkZW50aWZpZXIgKDApCiBkZXBlbmRzX29uOk1CRURUTFNfUFNBX0NSWVBUT19TVE9SQUdFX0MKLW9wZW5fZmFpbDowOlBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCitvcGVuX2ZhaWw6MDpQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKIAogT3BlbiBmYWlsdXJlOiBpbnZhbGlkIGlkZW50aWZpZXIgKHJhbmRvbSBzZWVkIFVJRCkKIGRlcGVuZHNfb246TUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQwotb3Blbl9mYWlsOlBTQV9DUllQVE9fSVRTX1JBTkRPTV9TRUVEX1VJRDpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorb3Blbl9mYWlsOlBTQV9DUllQVE9fSVRTX1JBTkRPTV9TRUVEX1VJRDpQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKIAogT3BlbiBmYWlsdXJlOiBpbnZhbGlkIGlkZW50aWZpZXIgKHJlc2VydmVkIHJhbmdlKQogZGVwZW5kc19vbjpNQkVEVExTX1BTQV9DUllQVE9fU1RPUkFHRV9DCi1vcGVuX2ZhaWw6UFNBX0tFWV9JRF9WRU5ET1JfTUFYICsgMTpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorb3Blbl9mYWlsOlBTQV9LRVlfSURfVkVORE9SX01BWCArIDE6UFNBX0VSUk9SX0lOVkFMSURfSEFORExFCiAKIE9wZW4gZmFpbHVyZTogaW52YWxpZCBpZGVudGlmaWVyIChpbXBsZW1lbnRhdGlvbiByYW5nZSkKIGRlcGVuZHNfb246TUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQwpAQCAtOTUsMTkgKzExMiwyMiBAQAogCiBDcmVhdGUgZmFpbHVyZTogaW52YWxpZCBrZXkgaWQgKDApCiBkZXBlbmRzX29uOk1CRURUTFNfUFNBX0NSWVBUT19TVE9SQUdFX0MKLWNyZWF0ZV9mYWlsOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDowOlBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCitjcmVhdGVfZmFpbDpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MDpQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKKworQ3JlYXRlIGZhaWx1cmU6IGludmFsaWQga2V5IGlkICgxKSBmb3IgYSB2b2xhdGlsZSBrZXkKK2NyZWF0ZV9mYWlsOlBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEU6MTpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAogCiBDcmVhdGUgZmFpbHVyZTogaW52YWxpZCBrZXkgaWQgKHJhbmRvbSBzZWVkIFVJRCkKIGRlcGVuZHNfb246TUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQwotY3JlYXRlX2ZhaWw6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9DUllQVE9fSVRTX1JBTkRPTV9TRUVEX1VJRDpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorY3JlYXRlX2ZhaWw6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9DUllQVE9fSVRTX1JBTkRPTV9TRUVEX1VJRDpQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKIAogQ3JlYXRlIGZhaWx1cmU6IGludmFsaWQga2V5IGlkIChyZXNlcnZlZCByYW5nZSkKIGRlcGVuZHNfb246TUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQwotY3JlYXRlX2ZhaWw6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9LRVlfSURfVkVORE9SX01BWCArIDE6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK2NyZWF0ZV9mYWlsOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX0lEX1ZFTkRPUl9NQVggKyAxOlBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRQogCiBDcmVhdGUgZmFpbHVyZTogaW52YWxpZCBrZXkgaWQgKGltcGxlbWVudGF0aW9uIHJhbmdlKQogZGVwZW5kc19vbjpNQkVEVExTX1BTQV9DUllQVE9fU1RPUkFHRV9DCi1jcmVhdGVfZmFpbDpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9JRF9VU0VSX01BWCArIDE6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK2NyZWF0ZV9mYWlsOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX0lEX1VTRVJfTUFYICsgMTpQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKIAogT3BlbiBub3Qgc3VwcG9ydGVkCiBkZXBlbmRzX29uOiFNQkVEVExTX1BTQV9DUllQVE9fU1RPUkFHRV9DCkBAIC0xNTYsMTMgKzE3NiwzMyBAQAogaW52YWxpZF9oYW5kbGU6SU5WQUxJRF9IQU5ETEVfMDpQU0FfU1VDQ0VTUzpQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKIAogaW52YWxpZCBoYW5kbGU6IG5ldmVyIG9wZW5lZAotaW52YWxpZF9oYW5kbGU6SU5WQUxJRF9IQU5ETEVfVU5PUEVORUQ6UFNBX0VSUk9SX0lOVkFMSURfSEFORExFOlBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRQoraW52YWxpZF9oYW5kbGU6SU5WQUxJRF9IQU5ETEVfVU5PUEVORUQ6UFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUOlBTQV9FUlJPUl9ET0VTX05PVF9FWElTVAogCiBpbnZhbGlkIGhhbmRsZTogYWxyZWFkeSBjbG9zZWQKLWludmFsaWRfaGFuZGxlOklOVkFMSURfSEFORExFX0NMT1NFRDpQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEU6UFNBX0VSUk9SX0lOVkFMSURfSEFORExFCitpbnZhbGlkX2hhbmRsZTpJTlZBTElEX0hBTkRMRV9DTE9TRUQ6UFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUOlBTQV9FUlJPUl9ET0VTX05PVF9FWElTVAogCiBpbnZhbGlkIGhhbmRsZTogaHVnZQogaW52YWxpZF9oYW5kbGU6SU5WQUxJRF9IQU5ETEVfSFVHRTpQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEU6UFNBX0VSUk9SX0lOVkFMSURfSEFORExFCiAKLU9wZW4gbWFueSB0cmFuc2llbnQgaGFuZGxlcwotbWFueV90cmFuc2llbnRfaGFuZGxlczo0MgorT3BlbiBtYW55IHRyYW5zaWVudCBrZXlzCittYW55X3RyYW5zaWVudF9rZXlzOjQyCisKKyMgRXZpY3Rpb24gZnJvbSBhIGtleSBzbG90IHRvIGJlIGFibGUgdG8gaW1wb3J0IGEgbmV3IHBlcnNpc3RlbnQga2V5LgorS2V5IHNsb3QgZXZpY3Rpb24gdG8gaW1wb3J0IGEgbmV3IHBlcnNpc3RlbnQga2V5CitrZXlfc2xvdF9ldmljdGlvbl90b19pbXBvcnRfbmV3X2tleTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQKKworIyBFdmljdGlvbiBmcm9tIGEga2V5IHNsb3QgdG8gYmUgYWJsZSB0byBpbXBvcnQgYSBuZXcgdm9sYXRpbGUga2V5LgorS2V5IHNsb3QgZXZpY3Rpb24gdG8gaW1wb3J0IGEgbmV3IHZvbGF0aWxlIGtleQora2V5X3Nsb3RfZXZpY3Rpb25fdG9faW1wb3J0X25ld19rZXk6UFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRQorCisjIENoZWNrIHRoYXQgbm9uIHJldXNhYmxlIGtleSBzbG90cyBhcmUgbm90IGRlbGV0ZWQvb3ZlcndyaXR0ZW4gaW4gY2FzZSBvZiBrZXkKKyMgc2xvdCBzdGFydmF0aW9uOgorIyAuIEFuIGF0dGVtcHQgdG8gYWNjZXNzIGEgcGVyc2lzdGVudCBrZXkgd2hpbGUgYWxsIFJBTSBrZXkgc2xvdHMgYXJlIG9jY3VwaWVkCisjICAgYnkgdm9sYXRpbGUga2V5cyBmYWlscyBhbmQgZG9lcyBub3QgbGVhZCB0byB2b2xhdGlsZSBrZXkgZGF0YSB0byBiZQorIyAgIHNwb2lsZWQuCisjIC4gV2l0aCBhbGwga2V5IHNsb3QgaW4gdXNlIHdpdGggb25lIGNvbnRhaW5pbmcgYSBwZXJzaXN0ZW50IGtleSwgYW4gYXR0ZW1wdAorIyAgIHRvIGNvcHkgdGhlIHBlcnNpc3RlbnQga2V5IGZhaWxzICh0aGUgcGVyc2lzdGVudCBrZXkgc2xvdCBjYW5ub3QgYmUKKyMgICByZWNsYWltZWQgYXMgaXQgaXMgYWNjZXNzZWQgYnkgdGhlIGNvcHkgcHJvY2Vzcykgd2l0aG91dCB0aGUgcGVyc2lzdGVudCBrZXkKKyMgICBkYXRhIGFuZCB2b2xhdGlsZSBrZXkgZGF0YSBiZWluZyBzcG9pbGVkLgorTm9uIHJldXNhYmxlIGtleSBzbG90cyBpbnRlZ3JpdHkgaW4gY2FzZSBvZiBrZXkgc2xvdCBzdGFydmF0aW9uCitub25fcmV1c2FibGVfa2V5X3Nsb3RzX2ludGVncml0eV9pbl9jYXNlX29mX2tleV9zbG90X3N0YXJ2YXRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fc2xvdF9tYW5hZ2VtZW50LmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuZnVuY3Rpb24KaW5kZXggZmEzZGQ2ZS4uNTdkNDc4OSAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuZnVuY3Rpb24KKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuZnVuY3Rpb24KQEAgLTIsMTYgKzIsMzIgQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KIAogI2luY2x1ZGUgInRlc3QvcHNhX2NyeXB0b19oZWxwZXJzLmgiCisjaW5jbHVkZSAicHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuaCIKICNpbmNsdWRlICJwc2FfY3J5cHRvX3N0b3JhZ2UuaCIKIAogdHlwZWRlZiBlbnVtCiB7Ci0gICAgQ0xPU0VfQllfQ0xPU0UsIC8qKjwgQ2xvc2UgdGhlIGhhbmRsZShzKS4gKi8KLSAgICBDTE9TRV9CWV9ERVNUUk9ZLCAvKio8IERlc3Ryb3kgdGhlIGhhbmRsZShzKS4gKi8KLSAgICBDTE9TRV9CWV9TSFVURE9XTiwgLyoqPCBEZWluaXQgYW5kIHJlaW5pdCB3aXRob3V0IGNsb3NpbmcgaGFuZGxlcy4gKi8KLSAgICBDTE9TRV9CWV9DTE9TRV9XSVRIX1NIVVRET1dOLCAvKio8IENsb3NlIGhhbmRsZShzKSB0aGVuIGRlaW5pdC9yZWluaXQuICovCi0gICAgQ0xPU0VfQllfREVTVFJPWV9XSVRIX1NIVVRET1dOLCAvKio8IERlc3Ryb3kgaGFuZGxlKHMpIHRoZW4gZGVpbml0L3JlaW5pdC4gKi8KLX0gY2xvc2VfbWV0aG9kX3Q7CisgICAgLyoqPCBDbG9zZSBrZXkocykgKi8KKyAgICBJTlZBTElEQVRFX0JZX0NMT1NJTkcsCisKKyAgICAvKio8IERlc3Ryb3kga2V5KHMpICovCisgICAgSU5WQUxJREFURV9CWV9ERVNUUk9ZSU5HLAorCisgICAgLyoqPCBQdXJnZSBrZXkocykgKi8KKyAgICBJTlZBTElEQVRFX0JZX1BVUkdJTkcsCisKKyAgICAvKio8IFRlcm1pbmF0ZSBhbmQgcmVpbml0aWFsaXplIHdpdGhvdXQgY2xvc2luZy9kZXN0cm95aW5nIGtleXMgKi8KKyAgICBJTlZBTElEQVRFX0JZX1NIVVRET1dOLAorCisgICAgLyoqPCBDbG9zZSBrZXkocykgdGhlbiB0ZXJtaW5hdGUgYW5kIHJlLWluaXRpYWxpemUgKi8KKyAgICBJTlZBTElEQVRFX0JZX0NMT1NJTkdfV0lUSF9TSFVURE9XTiwKKworICAgIC8qKjwgRGVzdHJveSBrZXkocykgdGhlbiB0ZXJtaW5hdGUgYW5kIHJlLWluaXRpYWxpemUgKi8KKyAgICBJTlZBTElEQVRFX0JZX0RFU1RST1lJTkdfV0lUSF9TSFVURE9XTiwKKworICAgIC8qKjwgUHVyZ2Uga2V5KHMpIHRoZW4gdGVybWluYXRlIGFuZCByZS1pbml0aWFsaXplICovCisgICAgSU5WQUxJREFURV9CWV9QVVJHSU5HX1dJVEhfU0hVVERPV04sCit9IGludmFsaWRhdGVfbWV0aG9kX3Q7CiAKIHR5cGVkZWYgZW51bQogewpAQCAtNzMsMjMgKzg5LDI5IEBACiAjZGVmaW5lIFRFU1RfVVNFU19LRVlfSUQoIGtleV9pZCApICggKHZvaWQpICgga2V5X2lkICkgKQogI2VuZGlmIC8qIE1CRURUTFNfUFNBX0NSWVBUT19TVE9SQUdFX0MgKi8KIAotLyoqIEFwcGx5IFxwIGNsb3NlX21ldGhvZCB0byBpbnZhbGlkYXRlIHRoZSBzcGVjaWZpZWQgaGFuZGxlczoKKy8qKiBBcHBseSBccCBpbnZhbGlkYXRlX21ldGhvZCB0byBpbnZhbGlkYXRlIHRoZSBzcGVjaWZpZWQga2V5OgogICogY2xvc2UgaXQsIGRlc3Ryb3kgaXQsIG9yIGRvIG5vdGhpbmc7CiAgKi8KLXN0YXRpYyBpbnQgaW52YWxpZGF0ZV9oYW5kbGUoIGNsb3NlX21ldGhvZF90IGNsb3NlX21ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlICkKK3N0YXRpYyBpbnQgaW52YWxpZGF0ZV9rZXkoIGludmFsaWRhdGVfbWV0aG9kX3QgaW52YWxpZGF0ZV9tZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgKQogewotICAgIHN3aXRjaCggY2xvc2VfbWV0aG9kICkKKyAgICBzd2l0Y2goIGludmFsaWRhdGVfbWV0aG9kICkKICAgICB7Ci0gICAgICAgIGNhc2UgQ0xPU0VfQllfQ0xPU0U6Ci0gICAgICAgIGNhc2UgQ0xPU0VfQllfQ0xPU0VfV0lUSF9TSFVURE9XTjoKLSAgICAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9jbG9zZV9rZXkoIGhhbmRsZSApICk7CisgICAgICAgIC8qIENsb3NpbmcgdGhlIGtleSBpbnZhbGlkYXRlIG9ubHkgdm9sYXRpbGUga2V5cywgbm90IHBlcnNpc3RlbnQgb25lcy4gKi8KKyAgICAgICAgY2FzZSBJTlZBTElEQVRFX0JZX0NMT1NJTkc6CisgICAgICAgIGNhc2UgSU5WQUxJREFURV9CWV9DTE9TSU5HX1dJVEhfU0hVVERPV046CisgICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2FfY2xvc2Vfa2V5KCBrZXkgKSApOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0xPU0VfQllfREVTVFJPWToKLSAgICAgICAgY2FzZSBDTE9TRV9CWV9ERVNUUk9ZX1dJVEhfU0hVVERPV046Ci0gICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApICk7CisgICAgICAgIGNhc2UgSU5WQUxJREFURV9CWV9ERVNUUk9ZSU5HOgorICAgICAgICBjYXNlIElOVkFMSURBVEVfQllfREVTVFJPWUlOR19XSVRIX1NIVVRET1dOOgorICAgICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKSApOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0xPU0VfQllfU0hVVERPV046CisgICAgICAgIC8qIFB1cmdpbmcgdGhlIGtleSBqdXN0IHB1cmdlcyBSQU0gZGF0YSBvZiBwZXJzaXN0ZW50IGtleXMuICovCisgICAgICAgIGNhc2UgSU5WQUxJREFURV9CWV9QVVJHSU5HOgorICAgICAgICBjYXNlIElOVkFMSURBVEVfQllfUFVSR0lOR19XSVRIX1NIVVRET1dOOgorICAgICAgICAgICAgUFNBX0FTU0VSVCggcHNhX3B1cmdlX2tleSgga2V5ICkgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElOVkFMSURBVEVfQllfU0hVVERPV046CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuKCAxICk7CkBAIC05NywyMCArMTE5LDIyIEBACiAgICAgcmV0dXJuKCAwICk7CiB9CiAKLS8qKiBSZXN0YXJ0IHRoZSBQU0Egc3Vic3lzdGVtIGlmIFxwIGNsb3NlX21ldGhvZCBzYXlzIHNvLiAqLwotc3RhdGljIGludCBpbnZhbGlkYXRlX3BzYSggY2xvc2VfbWV0aG9kX3QgY2xvc2VfbWV0aG9kICkKKy8qKiBSZXN0YXJ0IHRoZSBQU0Egc3Vic3lzdGVtIGlmIFxwIGludmFsaWRhdGVfbWV0aG9kIHNheXMgc28uICovCitzdGF0aWMgaW50IGludmFsaWRhdGVfcHNhKCBpbnZhbGlkYXRlX21ldGhvZF90IGludmFsaWRhdGVfbWV0aG9kICkKIHsKLSAgICBzd2l0Y2goIGNsb3NlX21ldGhvZCApCisgICAgc3dpdGNoKCBpbnZhbGlkYXRlX21ldGhvZCApCiAgICAgewotICAgICAgICBjYXNlIENMT1NFX0JZX0NMT1NFOgotICAgICAgICBjYXNlIENMT1NFX0JZX0RFU1RST1k6CisgICAgICAgIGNhc2UgSU5WQUxJREFURV9CWV9DTE9TSU5HOgorICAgICAgICBjYXNlIElOVkFMSURBVEVfQllfREVTVFJPWUlORzoKKyAgICAgICAgY2FzZSBJTlZBTElEQVRFX0JZX1BVUkdJTkc6CiAgICAgICAgICAgICByZXR1cm4oIDEgKTsKLSAgICAgICAgY2FzZSBDTE9TRV9CWV9DTE9TRV9XSVRIX1NIVVRET1dOOgotICAgICAgICBjYXNlIENMT1NFX0JZX0RFU1RST1lfV0lUSF9TSFVURE9XTjoKKyAgICAgICAgY2FzZSBJTlZBTElEQVRFX0JZX0NMT1NJTkdfV0lUSF9TSFVURE9XTjoKKyAgICAgICAgY2FzZSBJTlZBTElEQVRFX0JZX0RFU1RST1lJTkdfV0lUSF9TSFVURE9XTjoKKyAgICAgICAgY2FzZSBJTlZBTElEQVRFX0JZX1BVUkdJTkdfV0lUSF9TSFVURE9XTjoKICAgICAgICAgICAgIC8qIEFsbCBrZXlzIG11c3QgaGF2ZSBiZWVuIGNsb3NlZC4gKi8KICAgICAgICAgICAgIFBTQV9ET05FKCApOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0xPU0VfQllfU0hVVERPV046CisgICAgICAgIGNhc2UgSU5WQUxJREFURV9CWV9TSFVURE9XTjoKICAgICAgICAgICAgIC8qIFNvbWUga2V5cyBtYXkgcmVtYWluIGJlaGluZCwgYW5kIHdlJ3JlIHRlc3RpbmcgdGhhdCB0aGlzCiAgICAgICAgICAgICAgKiBwcm9wZXJseSBjbG9zZXMgdGhlbS4gKi8KICAgICAgICAgICAgIG1iZWR0bHNfcHNhX2NyeXB0b19mcmVlKCApOwpAQCAtMTMzLDQxICsxNTcsODEgQEAKICAqLwogCiAvKiBCRUdJTl9DQVNFICovCi12b2lkIHRyYW5zaWVudF9zbG90X2xpZmVjeWNsZSggaW50IHVzYWdlX2FyZywgaW50IGFsZ19hcmcsCit2b2lkIHRyYW5zaWVudF9zbG90X2xpZmVjeWNsZSggaW50IG93bmVyX2lkX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNhZ2VfYXJnLCBpbnQgYWxnX2FyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZV9hcmcsIGRhdGFfdCAqa2V5X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsb3NlX21ldGhvZF9hcmcgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnZhbGlkYXRlX21ldGhvZF9hcmcgKQogewogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHBzYV9rZXlfdXNhZ2VfdCB1c2FnZV9mbGFncyA9IHVzYWdlX2FyZzsKICAgICBwc2Ffa2V5X3R5cGVfdCB0eXBlID0gdHlwZV9hcmc7Ci0gICAgY2xvc2VfbWV0aG9kX3QgY2xvc2VfbWV0aG9kID0gY2xvc2VfbWV0aG9kX2FyZzsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgaW52YWxpZGF0ZV9tZXRob2RfdCBpbnZhbGlkYXRlX21ldGhvZCA9IGludmFsaWRhdGVfbWV0aG9kX2FyZzsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKIAogICAgIC8qIEltcG9ydCBhIGtleS4gKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUikKKyAgICBtYmVkdGxzX2tleV9vd25lcl9pZF90IG93bmVyX2lkID0gb3duZXJfaWRfYXJnOworCisgICAgbWJlZHRsc19zZXRfa2V5X293bmVyX2lkKCAmYXR0cmlidXRlcywgb3duZXJfaWQgKTsKKyNlbHNlCisgICAgKHZvaWQpb3duZXJfaWRfYXJnOworI2VuZGlmCisKICAgICBwc2Ffc2V0X2tleV91c2FnZV9mbGFncyggJmF0dHJpYnV0ZXMsIHVzYWdlX2ZsYWdzICk7CiAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnICk7CiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIHR5cGUgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKLSAgICBURVNUX0FTU0VSVCggaGFuZGxlICE9IDAgKTsKLSAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSApICk7CisgICAgVEVTVF9BU1NFUlQoICEgbWJlZHRsc19zdmNfa2V5X2lkX2lzX251bGwoIGtleSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcygga2V5LCAmYXR0cmlidXRlcyApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMgKSwgdHlwZSApOworICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKIAotICAgIC8qIERvIHNvbWV0aGluZyB0aGF0IGludmFsaWRhdGVzIHRoZSBoYW5kbGUuICovCi0gICAgaWYoICEgaW52YWxpZGF0ZV9oYW5kbGUoIGNsb3NlX21ldGhvZCwgaGFuZGxlICkgKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSKQorICAgIHsKKyAgICAgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGU7CisgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleV93aXRoX2ludmFsaWRfb3duZXIgPQorICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIG93bmVyX2lkICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NWQ19LRVlfSURfR0VUX0tFWV9JRCgga2V5ICkgKTsKKworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19rZXlfb3duZXJfaWRfZXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9PV05FUl9JRCgga2V5ICkgKSApOworICAgICAgICBURVNUX0VRVUFMKCBwc2Ffb3Blbl9rZXkoIGtleV93aXRoX2ludmFsaWRfb3duZXIsICZoYW5kbGUgKSwKKyAgICAgICAgICAgICAgICAgICAgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIFB1cmdlIHRoZSBrZXkgYW5kIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIHN0aWxsIHZhbGlkLCBhcyBwdXJnaW5nIGEKKyAgICAgKiB2b2xhdGlsZSBrZXkgc2hvdWxkbid0IGludmFsaWRhdGUvZGVzdHJveSBpdC4KKyAgICAgKi8KKyAgICBQU0FfQVNTRVJUKCBwc2FfcHVyZ2Vfa2V5KCBrZXkgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGtleSwgJmF0dHJpYnV0ZXMgKSApOworICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzICksIHR5cGUgKTsKKyAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7CisKKyAgICAvKiBEbyBzb21ldGhpbmcgdGhhdCBpbnZhbGlkYXRlcyB0aGUga2V5LiAqLworICAgIGlmKCAhIGludmFsaWRhdGVfa2V5KCBpbnZhbGlkYXRlX21ldGhvZCwga2V5ICkgKQogICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgaWYoICEgaW52YWxpZGF0ZV9wc2EoIGNsb3NlX21ldGhvZCApICkKKyAgICBpZiggISBpbnZhbGlkYXRlX3BzYSggaW52YWxpZGF0ZV9tZXRob2QgKSApCiAgICAgICAgIGdvdG8gZXhpdDsKIAotICAgIC8qIFRlc3QgdGhhdCB0aGUgaGFuZGxlIGlzIG5vdyBpbnZhbGlkLiAqLwotICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmF0dHJpYnV0ZXMgKSwKLSAgICAgICAgICAgICAgICBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgKTsKLSAgICBURVNUX0VRVUFMKCBwc2FfY2xvc2Vfa2V5KCBoYW5kbGUgKSwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICk7CisgICAgLyogVGVzdCB0aGF0IHRoZSBrZXkgaXMgbm93IGludmFsaWQuICovCisgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfYXR0cmlidXRlcygga2V5LCAmYXR0cmlidXRlcyApLAorICAgICAgICAgICAgICAgIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCApOworICAgIFRFU1RfRVFVQUwoIHBzYV9jbG9zZV9rZXkoIGtleSApLCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgKTsKIAogZXhpdDoKKyAgICAvKgorICAgICAqIEtleSBhdHRyaWJ1dGVzIG1heSBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgcHNhX2dldF9rZXlfYXR0cmlidXRlcygpCisgICAgICogdGh1cyByZXNldCB0aGVtIGFzIHJlcXVpcmVkLgorICAgICAqLworICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKKwogICAgIFBTQV9ET05FKCApOwogfQogLyogRU5EX0NBU0UgKi8KQEAgLTE3Niw3ICsyNDAsNyBAQAogdm9pZCBwZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlKCBpbnQgbGlmZXRpbWVfYXJnLCBpbnQgb3duZXJfaWRfYXJnLCBpbnQgaWRfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNhZ2VfYXJnLCBpbnQgYWxnX2FyZywgaW50IGFsZzJfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZV9hcmcsIGRhdGFfdCAqa2V5X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbG9zZV9tZXRob2RfYXJnICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGludmFsaWRhdGVfbWV0aG9kX2FyZyApCiB7CiAgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lID0gbGlmZXRpbWVfYXJnOwogICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGlkID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIG93bmVyX2lkX2FyZywgaWRfYXJnICk7CkBAIC0xODQsOCArMjQ4LDkgQEAKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnMiA9IGFsZzJfYXJnOwogICAgIHBzYV9rZXlfdXNhZ2VfdCB1c2FnZV9mbGFncyA9IHVzYWdlX2FyZzsKICAgICBwc2Ffa2V5X3R5cGVfdCB0eXBlID0gdHlwZV9hcmc7Ci0gICAgY2xvc2VfbWV0aG9kX3QgY2xvc2VfbWV0aG9kID0gY2xvc2VfbWV0aG9kX2FyZzsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgaW52YWxpZGF0ZV9tZXRob2RfdCBpbnZhbGlkYXRlX21ldGhvZCA9IGludmFsaWRhdGVfbWV0aG9kX2FyZzsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCByZXR1cm5lZF9pZCA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOworICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gUFNBX0tFWV9IQU5ETEVfSU5JVDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgcmVhZF9hdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgdWludDhfdCAqcmVleHBvcnRlZCA9IE5VTEw7CkBAIC0xOTQsMTQgKzI1OSwxMyBAQAogI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSKQogICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHdyb25nX293bmVyX2lkID0KICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIG93bmVyX2lkX2FyZyArIDEsIGlkX2FyZyApOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaW52YWxpZF9oYW5kbGUgPSAwOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGludmFsaWRfc3ZjX2tleV9pZCA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogI2VuZGlmCiAKICAgICBURVNUX1VTRVNfS0VZX0lEKCBpZCApOwogCiAgICAgUFNBX0FTU0VSVCggcHNhX2NyeXB0b19pbml0KCApICk7CiAKLSAgICAvKiBHZXQgYSBoYW5kbGUgYW5kIGltcG9ydCBhIGtleS4gKi8KICAgICBwc2Ffc2V0X2tleV9pZCggJmF0dHJpYnV0ZXMsIGlkICk7CiAgICAgcHNhX3NldF9rZXlfbGlmZXRpbWUoICZhdHRyaWJ1dGVzLCBsaWZldGltZSApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCB0eXBlICk7CkBAIC0yMDksMTUgKzI3MywxNSBAQAogICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIGFsZyApOwogICAgIHBzYV9zZXRfa2V5X2Vucm9sbG1lbnRfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnMiApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5X2RhdGEtPngsIGtleV9kYXRhLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKSApOwotICAgIFRFU1RfQVNTRVJUKCBoYW5kbGUgIT0gMCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmV0dXJuZWRfaWQgKSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3N2Y19rZXlfaWRfZXF1YWwoIGlkLCByZXR1cm5lZF9pZCApICk7CiAKICNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUikKLSAgICBURVNUX0VRVUFMKCBwc2Ffb3Blbl9rZXkoIHdyb25nX293bmVyX2lkLCAmaW52YWxpZF9oYW5kbGUgKSwKKyAgICBURVNUX0VRVUFMKCBwc2Ffb3Blbl9rZXkoIHdyb25nX293bmVyX2lkLCAmaW52YWxpZF9zdmNfa2V5X2lkICksCiAgICAgICAgICAgICAgICAgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICk7CiAjZW5kaWYKIAotICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmF0dHJpYnV0ZXMgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGlkLCAmYXR0cmlidXRlcyApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfbGlmZXRpbWUoICZhdHRyaWJ1dGVzICksIGxpZmV0aW1lICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3ZjX2tleV9pZF9lcXVhbCgKICAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2lkKCAmYXR0cmlidXRlcyApLCBpZCApICk7CkBAIC0yMjYsMTUgKzI5MCwxNiBAQAogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2Vucm9sbG1lbnRfYWxnb3JpdGhtKCAmYXR0cmlidXRlcyApLCBhbGcyICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMgKSwgdHlwZSApOwogCi0gICAgLyogQ2xvc2UgdGhlIGtleSBhbmQgcmVvcGVuIGl0LiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9jbG9zZV9rZXkoIGhhbmRsZSApICk7CisgICAgLyogQ2xvc2UgdGhlIGtleSBhbmQgdGhlbiBvcGVuIGl0LiAqLworICAgIFBTQV9BU1NFUlQoIHBzYV9jbG9zZV9rZXkoIGlkICkgKTsKIAogI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSKQotICAgIFRFU1RfRVFVQUwoIHBzYV9vcGVuX2tleSggd3Jvbmdfb3duZXJfaWQsICZpbnZhbGlkX2hhbmRsZSApLAorICAgIFRFU1RfRVFVQUwoIHBzYV9vcGVuX2tleSggd3Jvbmdfb3duZXJfaWQsICZpbnZhbGlkX3N2Y19rZXlfaWQgKSwKICAgICAgICAgICAgICAgICBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgKTsKICNlbmRpZgogCiAgICAgUFNBX0FTU0VSVCggcHNhX29wZW5fa2V5KCBpZCwgJmhhbmRsZSApICk7CisgICAgVEVTVF9BU1NFUlQoICEgcHNhX2tleV9oYW5kbGVfaXNfbnVsbCggaGFuZGxlICkgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9saWZldGltZSggJmF0dHJpYnV0ZXMgKSwgbGlmZXRpbWUgKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKApAQCAtMjQ0LDI4ICszMDksMjcgQEAKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9lbnJvbGxtZW50X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMgKSwgYWxnMiApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzICksIHR5cGUgKTsKIAotICAgIC8qIERvIHNvbWV0aGluZyB0aGF0IGludmFsaWRhdGVzIHRoZSBoYW5kbGUuICovCi0gICAgaWYoICEgaW52YWxpZGF0ZV9oYW5kbGUoIGNsb3NlX21ldGhvZCwgaGFuZGxlICkgKQorICAgIC8qCisgICAgICogRG8gc29tZXRoaW5nIHRoYXQgd2lwZXMga2V5IGRhdGEgaW4gdm9sYXRpbGUgbWVtb3J5IG9yIGRlc3Ryb3kgdGhlCisgICAgICoga2V5LgorICAgICAqLworICAgIGlmKCAhIGludmFsaWRhdGVfa2V5KCBpbnZhbGlkYXRlX21ldGhvZCwgaWQgKSApCiAgICAgICAgIGdvdG8gZXhpdDsKLSAgICBpZiggISBpbnZhbGlkYXRlX3BzYSggY2xvc2VfbWV0aG9kICkgKQorICAgIGlmKCAhIGludmFsaWRhdGVfcHNhKCBpbnZhbGlkYXRlX21ldGhvZCApICkKICAgICAgICAgZ290byBleGl0OwogCi0gICAgLyogVGVzdCB0aGF0IHRoZSBoYW5kbGUgaXMgbm93IGludmFsaWQuICovCi0gICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggaGFuZGxlLCAmcmVhZF9hdHRyaWJ1dGVzICksCi0gICAgICAgICAgICAgICAgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICk7Ci0gICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmcmVhZF9hdHRyaWJ1dGVzICk7Ci0gICAgVEVTVF9FUVVBTCggcHNhX2Nsb3NlX2tleSggaGFuZGxlICksIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSApOwotCi0gICAgLyogVHJ5IHRvIHJlb3BlbiB0aGUga2V5LiBJZiB3ZSBkZXN0cm95ZWQgaXQsIGNoZWNrIHRoYXQgaXQgZG9lc24ndAorICAgIC8qIFRyeSB0byByZWFjY2VzcyB0aGUga2V5LiBJZiB3ZSBkZXN0cm95ZWQgaXQsIGNoZWNrIHRoYXQgaXQgZG9lc24ndAogICAgICAqIGV4aXN0LiBPdGhlcndpc2UgY2hlY2sgdGhhdCBpdCBzdGlsbCBleGlzdHMgYW5kIGhhcyB0aGUgZXhwZWN0ZWQKICAgICAgKiBjb250ZW50LiAqLwotICAgIHN3aXRjaCggY2xvc2VfbWV0aG9kICkKKyAgICBzd2l0Y2goIGludmFsaWRhdGVfbWV0aG9kICkKICAgICB7Ci0gICAgICAgIGNhc2UgQ0xPU0VfQllfQ0xPU0U6Ci0gICAgICAgIGNhc2UgQ0xPU0VfQllfQ0xPU0VfV0lUSF9TSFVURE9XTjoKLSAgICAgICAgY2FzZSBDTE9TRV9CWV9TSFVURE9XTjoKKyAgICAgICAgY2FzZSBJTlZBTElEQVRFX0JZX0NMT1NJTkc6CisgICAgICAgIGNhc2UgSU5WQUxJREFURV9CWV9DTE9TSU5HX1dJVEhfU0hVVERPV046CisgICAgICAgIGNhc2UgSU5WQUxJREFURV9CWV9QVVJHSU5HOgorICAgICAgICBjYXNlIElOVkFMSURBVEVfQllfUFVSR0lOR19XSVRIX1NIVVRET1dOOgorICAgICAgICBjYXNlIElOVkFMSURBVEVfQllfU0hVVERPV046CiAgICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2Ffb3Blbl9rZXkoIGlkLCAmaGFuZGxlICkgKTsKLSAgICAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJnJlYWRfYXR0cmlidXRlcyApICk7CisgICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBpZCwgJnJlYWRfYXR0cmlidXRlcyApICk7CiAgICAgICAgICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9saWZldGltZSggJmF0dHJpYnV0ZXMgKSwKICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2xpZmV0aW1lKCAmcmVhZF9hdHRyaWJ1dGVzICkgKTsKICAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3N2Y19rZXlfaWRfZXF1YWwoCkBAIC0yODMsMzAgKzM0Nyw0MSBAQAogICAgICAgICAgICAgaWYoIHVzYWdlX2ZsYWdzICYgUFNBX0tFWV9VU0FHRV9FWFBPUlQgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIEFTU0VSVF9BTExPQyggcmVleHBvcnRlZCwga2V5X2RhdGEtPmxlbiApOwotICAgICAgICAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9leHBvcnRfa2V5KCBoYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZXhwb3J0ZWQsIGtleV9kYXRhLT5sZW4sCisgICAgICAgICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2V4cG9ydF9rZXkoIGlkLCByZWV4cG9ydGVkLCBrZXlfZGF0YS0+bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVleHBvcnRlZF9sZW5ndGggKSApOwogICAgICAgICAgICAgICAgIEFTU0VSVF9DT01QQVJFKCBrZXlfZGF0YS0+eCwga2V5X2RhdGEtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVleHBvcnRlZCwgcmVleHBvcnRlZF9sZW5ndGggKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBURVNUX0VRVUFMKCBwc2FfZXhwb3J0X2tleSggaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVleHBvcnRlZF9sZW5ndGggKSwKKyAgICAgICAgICAgICAgICBURVNUX0VRVUFMKCBwc2FfZXhwb3J0X2tleSggaWQsIE5VTEwsIDAsICZyZWV4cG9ydGVkX2xlbmd0aCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2FfY2xvc2Vfa2V5KCBoYW5kbGUgKSApOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBDTE9TRV9CWV9ERVNUUk9ZOgotICAgICAgICBjYXNlIENMT1NFX0JZX0RFU1RST1lfV0lUSF9TSFVURE9XTjoKLSAgICAgICAgICAgIFRFU1RfRVFVQUwoIHBzYV9vcGVuX2tleSggaWQsICZoYW5kbGUgKSwKKyAgICAgICAgY2FzZSBJTlZBTElEQVRFX0JZX0RFU1RST1lJTkc6CisgICAgICAgIGNhc2UgSU5WQUxJREFURV9CWV9ERVNUUk9ZSU5HX1dJVEhfU0hVVERPV046CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVGVzdCB0aGF0IHRoZSBrZXkgaGFuZGxlIGFuZCBpZGVudGlmaWVyIGFyZSBub3cgbm90IHJlZmVyaW5nIHRvIGFuCisgICAgICAgICAgICAgKiBleGlzdGluZyBrZXkuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJnJlYWRfYXR0cmlidXRlcyApLAorICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICk7CisgICAgICAgICAgICBURVNUX0VRVUFMKCBwc2FfY2xvc2Vfa2V5KCBoYW5kbGUgKSwgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICk7CisgICAgICAgICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBpZCwgJnJlYWRfYXR0cmlidXRlcyApLAogICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKIGV4aXQ6CisgICAgLyoKKyAgICAgKiBLZXkgYXR0cmlidXRlcyBtYXkgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoKQorICAgICAqIHRodXMgcmVzZXQgdGhlbSBhcyByZXF1aXJlZC4KKyAgICAgKi8KKyAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7CisgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmcmVhZF9hdHRyaWJ1dGVzICk7CisKICAgICBQU0FfRE9ORSggKTsKICAgICBwc2FfcHVyZ2Vfa2V5X3N0b3JhZ2UoICk7CiAgICAgbWJlZHRsc19mcmVlKCByZWV4cG9ydGVkICk7CkBAIC0zMTksNyArMzk0LDcgQEAKIHsKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUgPSBsaWZldGltZV9hcmc7CiAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggb3duZXJfaWRfYXJnLCBpZF9hcmcgKTsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZTEgPSAwLCBoYW5kbGUyID0gMDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCByZXR1cm5lZF9pZCA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCB0eXBlMSA9IFBTQV9LRVlfVFlQRV9SQVdfREFUQTsKICAgICBjb25zdCB1aW50OF90IG1hdGVyaWFsMVs1XSA9ICJhIGtleSI7CkBAIC0zNDAsMjYgKzQxNSwyNCBAQAogICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywgUFNBX0tFWV9VU0FHRV9FWFBPUlQgKTsKICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCAwICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBtYXRlcmlhbDEsIHNpemVvZiggbWF0ZXJpYWwxICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUxICkgKTsKLSAgICBURVNUX0FTU0VSVCggaGFuZGxlMSAhPSAwICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXR1cm5lZF9pZCApICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3ZjX2tleV9pZF9lcXVhbCggaWQsIHJldHVybmVkX2lkICkgKTsKIAogICAgIGlmKCByZW9wZW5fcG9saWN5ID09IENMT1NFX0JFRk9SRSApCi0gICAgICAgIFBTQV9BU1NFUlQoIHBzYV9jbG9zZV9rZXkoIGhhbmRsZTEgKSApOworICAgICAgICBQU0FfQVNTRVJUKCBwc2FfY2xvc2Vfa2V5KCBpZCApICk7CiAKICAgICAvKiBBdHRlbXB0IHRvIGNyZWF0ZSBhIG5ldyBrZXkgaW4gdGhlIHNhbWUgc2xvdC4gKi8KICAgICBURVNUX0VRVUFMKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIG1hdGVyaWFsMiwgc2l6ZW9mKCBtYXRlcmlhbDIgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZTIgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJldHVybmVkX2lkICksCiAgICAgICAgICAgICAgICAgUFNBX0VSUk9SX0FMUkVBRFlfRVhJU1RTICk7Ci0gICAgVEVTVF9FUVVBTCggaGFuZGxlMiwgMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3N2Y19rZXlfaWRfaXNfbnVsbCggcmV0dXJuZWRfaWQgKSApOwogCiAgICAgaWYoIHJlb3Blbl9wb2xpY3kgPT0gQ0xPU0VfQUZURVIgKQotICAgICAgICBQU0FfQVNTRVJUKCBwc2FfY2xvc2Vfa2V5KCBoYW5kbGUxICkgKTsKLSAgICBpZiggcmVvcGVuX3BvbGljeSA9PSBDTE9TRV9CRUZPUkUgfHwgcmVvcGVuX3BvbGljeSA9PSBDTE9TRV9BRlRFUiApCi0gICAgICAgIFBTQV9BU1NFUlQoIHBzYV9vcGVuX2tleSggaWQsICZoYW5kbGUxICkgKTsKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2Nsb3NlX2tleSggaWQgKSApOwogCiAgICAgLyogQ2hlY2sgdGhhdCB0aGUgb3JpZ2luYWwga2V5IGhhc24ndCBjaGFuZ2VkLiAqLwogICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKLSAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUxLCAmYXR0cmlidXRlcyApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggaWQsICZhdHRyaWJ1dGVzICkgKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKAogICAgICAgICAgICAgICAgICAgICAgcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzICksIGlkICkgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9saWZldGltZSggJmF0dHJpYnV0ZXMgKSwgbGlmZXRpbWUgKTsKQEAgLTM2OCwxNSArNDQxLDIxIEBACiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdXNhZ2VfZmxhZ3MoICZhdHRyaWJ1dGVzICksIFBTQV9LRVlfVVNBR0VfRVhQT1JUICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcyApLCAwICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSggaGFuZGxlMSwKKyAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSggaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZXhwb3J0ZWQsIHNpemVvZiggcmVleHBvcnRlZCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVleHBvcnRlZF9sZW5ndGggKSApOwogICAgIEFTU0VSVF9DT01QQVJFKCBtYXRlcmlhbDEsIHNpemVvZiggbWF0ZXJpYWwxICksCiAgICAgICAgICAgICAgICAgICAgIHJlZXhwb3J0ZWQsIHJlZXhwb3J0ZWRfbGVuZ3RoICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfY2xvc2Vfa2V5KCBoYW5kbGUxICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfY2xvc2Vfa2V5KCBpZCApICk7CiAKIGV4aXQ6CisgICAgLyoKKyAgICAgKiBLZXkgYXR0cmlidXRlcyBtYXkgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoKQorICAgICAqIHRodXMgcmVzZXQgdGhlbSBhcyByZXF1aXJlZC4KKyAgICAgKi8KKyAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7CisKICAgICBQU0FfRE9ORSggKTsKICAgICBwc2FfcHVyZ2Vfa2V5X3N0b3JhZ2UoICk7CiB9CkBAIC0zODgsMTIgKzQ2NywxMiBAQAogewogICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGlkID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDEsIGlkX2FyZyApOwogICAgIHBzYV9zdGF0dXNfdCBleHBlY3RlZF9zdGF0dXMgPSBleHBlY3RlZF9zdGF0dXNfYXJnOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMHhkZWFkOworICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDB4ZGVhZCwgMHhkZWFkICk7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKIAogICAgIFRFU1RfRVFVQUwoIHBzYV9vcGVuX2tleSggaWQsICZoYW5kbGUgKSwgZXhwZWN0ZWRfc3RhdHVzICk7Ci0gICAgVEVTVF9FUVVBTCggaGFuZGxlLCAwICk7CisgICAgVEVTVF9BU1NFUlQoIHBzYV9rZXlfaGFuZGxlX2lzX251bGwoIGhhbmRsZSApICk7CiAKIGV4aXQ6CiAgICAgUFNBX0RPTkUoICk7CkBAIC00MDgsMjAgKzQ4NywzMiBAQAogICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGlkID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDEsIGlkX2FyZyApOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2Ffc3RhdHVzX3QgZXhwZWN0ZWRfc3RhdHVzID0gZXhwZWN0ZWRfc3RhdHVzX2FyZzsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDB4ZGVhZDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCByZXR1cm5lZF9pZCA9CisgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCAweGRlYWQsIDB4ZGVhZCApOwogICAgIHVpbnQ4X3QgbWF0ZXJpYWxbMV0gPSB7J2snfTsKIAogICAgIFRFU1RfVVNFU19LRVlfSUQoIGlkICk7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKIAotICAgIHBzYV9zZXRfa2V5X2lkKCAmYXR0cmlidXRlcywgaWQgKTsKICAgICBwc2Ffc2V0X2tleV9saWZldGltZSggJmF0dHJpYnV0ZXMsIGxpZmV0aW1lICk7CisgICAgaWYoIFBTQV9LRVlfTElGRVRJTUVfSVNfVk9MQVRJTEUoIGxpZmV0aW1lICkgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogTm90IHBvc3NpYmxlIHRvIHNldCBhIGtleSBpZGVudGlmaWVyIGRpZmZlcmVudCBmcm9tIDAgdGhyb3VnaAorICAgICAgICAgKiBQU0Ega2V5IGF0dHJpYnV0ZXMgQVBJcyB0aHVzIGFjY2Vzc2luZyB0byB0aGUgYXR0cmlidXRlcworICAgICAgICAgKiBkaXJlY3RseS4KKyAgICAgICAgICovCisgICAgICAgIGF0dHJpYnV0ZXMuY29yZS5pZCA9IGlkOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHBzYV9zZXRfa2V5X2lkKCAmYXR0cmlidXRlcywgaWQgKTsKKwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBQU0FfS0VZX1RZUEVfUkFXX0RBVEEgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIG1hdGVyaWFsLCBzaXplb2YoIG1hdGVyaWFsICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJldHVybmVkX2lkICksCiAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzICk7Ci0gICAgVEVTVF9FUVVBTCggaGFuZGxlLCAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3ZjX2tleV9pZF9pc19udWxsKCByZXR1cm5lZF9pZCApICk7CiAKIGV4aXQ6CiAgICAgUFNBX0RPTkUoICk7CkBAIC00NDcsMTYgKzUzOCwxNyBAQAogICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggc291cmNlX293bmVyX2lkX2FyZywgc291cmNlX2lkX2FyZyApOwogICAgIHBzYV9rZXlfdXNhZ2VfdCBzb3VyY2VfdXNhZ2UgPSBzb3VyY2VfdXNhZ2VfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBzb3VyY2VfYWxnID0gc291cmNlX2FsZ19hcmc7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBzb3VyY2VfaGFuZGxlID0gMDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBzb3VyY2VfYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IHNvdXJjZV90eXBlID0gdHlwZV9hcmc7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgcmV0dXJuZWRfc291cmNlX2lkID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2tleV9saWZldGltZV90IHRhcmdldF9saWZldGltZSA9IHRhcmdldF9saWZldGltZV9hcmc7CiAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgdGFyZ2V0X2lkID0KICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIHRhcmdldF9vd25lcl9pZF9hcmcsIHRhcmdldF9pZF9hcmcgKTsKICAgICBwc2Ffa2V5X3VzYWdlX3QgdGFyZ2V0X3VzYWdlID0gdGFyZ2V0X3VzYWdlX2FyZzsKICAgICBwc2FfYWxnb3JpdGhtX3QgdGFyZ2V0X2FsZyA9IHRhcmdldF9hbGdfYXJnOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgdGFyZ2V0X2hhbmRsZSA9IDA7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgdGFyZ2V0X2F0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCByZXR1cm5lZF90YXJnZXRfaWQgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKKyAgICBwc2Ffa2V5X2hhbmRsZV90IHRhcmdldF9oYW5kbGUgPSBQU0FfS0VZX0hBTkRMRV9JTklUOwogICAgIHBzYV9rZXlfdXNhZ2VfdCBleHBlY3RlZF91c2FnZSA9IGV4cGVjdGVkX3VzYWdlX2FyZzsKICAgICBwc2FfYWxnb3JpdGhtX3QgZXhwZWN0ZWRfYWxnID0gZXhwZWN0ZWRfYWxnX2FyZzsKICAgICBwc2FfYWxnb3JpdGhtX3QgZXhwZWN0ZWRfYWxnMiA9IGV4cGVjdGVkX2FsZzJfYXJnOwpAQCAtNDc3LDkgKzU2OSwxMCBAQAogICAgIHBzYV9zZXRfa2V5X2Vucm9sbG1lbnRfYWxnb3JpdGhtKCAmc291cmNlX2F0dHJpYnV0ZXMsIHNvdXJjZV9hbGcyX2FyZyApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmc291cmNlX2F0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLT54LCBtYXRlcmlhbC0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc291cmNlX2hhbmRsZSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXR1cm5lZF9zb3VyY2VfaWQgKSApOwogICAgIC8qIFVwZGF0ZSB0aGUgYXR0cmlidXRlcyB3aXRoIHRoZSBiaXQgc2l6ZS4gKi8KLSAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBzb3VyY2VfaGFuZGxlLCAmc291cmNlX2F0dHJpYnV0ZXMgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIHJldHVybmVkX3NvdXJjZV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc291cmNlX2F0dHJpYnV0ZXMgKSApOwogCiAgICAgLyogUHJlcGFyZSB0aGUgdGFyZ2V0IHNsb3QuICovCiAgICAgcHNhX3NldF9rZXlfaWQoICZ0YXJnZXRfYXR0cmlidXRlcywgdGFyZ2V0X2lkICk7CkBAIC00OTAsMTUgKzU4MywxNSBAQAogICAgIHBzYV9zZXRfa2V5X2Vucm9sbG1lbnRfYWxnb3JpdGhtKCAmdGFyZ2V0X2F0dHJpYnV0ZXMsIHRhcmdldF9hbGcyX2FyZyApOwogCiAgICAgLyogQ29weSB0aGUga2V5LiAqLwotICAgIFBTQV9BU1NFUlQoIHBzYV9jb3B5X2tleSggc291cmNlX2hhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YXJnZXRfYXR0cmlidXRlcywgJnRhcmdldF9oYW5kbGUgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9jb3B5X2tleSggcmV0dXJuZWRfc291cmNlX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhcmdldF9hdHRyaWJ1dGVzLCAmcmV0dXJuZWRfdGFyZ2V0X2lkICkgKTsKIAogICAgIC8qIERlc3Ryb3kgdGhlIHNvdXJjZSB0byBlbnN1cmUgdGhhdCB0aGlzIGRvZXNuJ3QgYWZmZWN0IHRoZSB0YXJnZXQuICovCi0gICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBzb3VyY2VfaGFuZGxlICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIHJldHVybmVkX3NvdXJjZV9pZCApICk7CiAKICAgICAvKiBJZiB0aGUgdGFyZ2V0IGtleSBpcyBwZXJzaXN0ZW50LCByZXN0YXJ0IHRoZSBzeXN0ZW0gdG8gbWFrZQogICAgICAqIHN1cmUgdGhhdCB0aGUgbWF0ZXJpYWwgaXMgc3RpbGwgYWxpdmUuICovCi0gICAgaWYoIHRhcmdldF9saWZldGltZSAhPSBQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFICkKKyAgICBpZiggISBQU0FfS0VZX0xJRkVUSU1FX0lTX1ZPTEFUSUxFKCB0YXJnZXRfbGlmZXRpbWUgKSApCiAgICAgewogICAgICAgICBtYmVkdGxzX3BzYV9jcnlwdG9fZnJlZSggKTsKICAgICAgICAgUFNBX0FTU0VSVCggcHNhX2NyeXB0b19pbml0KCApICk7CkBAIC01MDcsOSArNjAwLDEwIEBACiAKICAgICAvKiBUZXN0IHRoYXQgdGhlIHRhcmdldCBzbG90IGhhcyB0aGUgZXhwZWN0ZWQgY29udGVudC4gKi8KICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZ0YXJnZXRfYXR0cmlidXRlcyApOwotICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIHRhcmdldF9oYW5kbGUsICZ0YXJnZXRfYXR0cmlidXRlcyApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggcmV0dXJuZWRfdGFyZ2V0X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YXJnZXRfYXR0cmlidXRlcyApICk7CiAKLSAgICBpZiggdGFyZ2V0X2xpZmV0aW1lICE9IFBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUgKQorICAgIGlmKCAhIFBTQV9LRVlfTElGRVRJTUVfSVNfVk9MQVRJTEUoIHRhcmdldF9saWZldGltZSApICkKICAgICB7CiAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3N2Y19rZXlfaWRfZXF1YWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2lkLCBwc2FfZ2V0X2tleV9pZCggJnRhcmdldF9hdHRyaWJ1dGVzICkgKSApOwpAQCAtNTE3LDEwICs2MTEsOSBAQAogICAgIGVsc2UKICAgICB7CiAjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIpCi0gICAgICAgIFRFU1RfRVFVQUwoIE1CRURUTFNfU1ZDX0tFWV9JRF9HRVRfT1dORVJfSUQoIHRhcmdldF9pZCApLAorICAgICAgICBURVNUX0VRVUFMKCBNQkVEVExTX1NWQ19LRVlfSURfR0VUX09XTkVSX0lEKCByZXR1cm5lZF90YXJnZXRfaWQgKSwKICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X293bmVyX2lkX2FyZyApOwogI2VuZGlmCi0gICAgICAgIFRFU1RfRVFVQUwoIE1CRURUTFNfU1ZDX0tFWV9JRF9HRVRfS0VZX0lEKCB0YXJnZXRfaWQgKSwgMCApOwogICAgIH0KIAogICAgIFRFU1RfRVFVQUwoIHRhcmdldF9saWZldGltZSwgcHNhX2dldF9rZXlfbGlmZXRpbWUoICZ0YXJnZXRfYXR0cmlidXRlcyApICk7CkBAIC01MzUsNyArNjI4LDcgQEAKICAgICB7CiAgICAgICAgIHNpemVfdCBsZW5ndGg7CiAgICAgICAgIEFTU0VSVF9BTExPQyggZXhwb3J0X2J1ZmZlciwgbWF0ZXJpYWwtPmxlbiApOwotICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSggdGFyZ2V0X2hhbmRsZSwgZXhwb3J0X2J1ZmZlciwKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2V4cG9ydF9rZXkoIHJldHVybmVkX3RhcmdldF9pZCwgZXhwb3J0X2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLT5sZW4sICZsZW5ndGggKSApOwogICAgICAgICBBU1NFUlRfQ09NUEFSRSggbWF0ZXJpYWwtPngsIG1hdGVyaWFsLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRfYnVmZmVyLCBsZW5ndGggKTsKQEAgLTU0NCwxNCArNjM3LDIxIEBACiAgICAgewogICAgICAgICBzaXplX3QgbGVuZ3RoOwogICAgICAgICAvKiBDaGVjayB0aGF0IHRoZSBrZXkgaXMgYWN0dWFsbHkgbm9uLWV4cG9ydGFibGUuICovCi0gICAgICAgIFRFU1RfRVFVQUwoIHBzYV9leHBvcnRfa2V5KCB0YXJnZXRfaGFuZGxlLCBleHBvcnRfYnVmZmVyLAorICAgICAgICBURVNUX0VRVUFMKCBwc2FfZXhwb3J0X2tleSggcmV0dXJuZWRfdGFyZ2V0X2lkLCBleHBvcnRfYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwtPmxlbiwgJmxlbmd0aCApLAogICAgICAgICAgICAgICAgICAgICBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRCApOwogICAgIH0KIAotICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggdGFyZ2V0X2hhbmRsZSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCByZXR1cm5lZF90YXJnZXRfaWQgKSApOwogCiBleGl0OgorICAgIC8qCisgICAgICogU291cmNlIGFuZCB0YXJnZXQga2V5IGF0dHJpYnV0ZXMgbWF5IGhhdmUgYmVlbiByZXR1cm5lZCBieQorICAgICAqIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoKSB0aHVzIHJlc2V0IHRoZW0gYXMgcmVxdWlyZWQuCisgICAgICovCisgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmc291cmNlX2F0dHJpYnV0ZXMgKTsKKyAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZ0YXJnZXRfYXR0cmlidXRlcyApOworCiAgICAgUFNBX0RPTkUoICk7CiAgICAgbWJlZHRsc19mcmVlKCBleHBvcnRfYnVmZmVyICk7CiAjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fU1RPUkFHRV9DKQpAQCAtNTczLDE2ICs2NzMsMTYgQEAKICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDEsIHNvdXJjZV9pZF9hcmcgKTsKICAgICBwc2Ffa2V5X3VzYWdlX3Qgc291cmNlX3VzYWdlID0gc291cmNlX3VzYWdlX2FyZzsKICAgICBwc2FfYWxnb3JpdGhtX3Qgc291cmNlX2FsZyA9IHNvdXJjZV9hbGdfYXJnOwotICAgIHBzYV9rZXlfaGFuZGxlX3Qgc291cmNlX2hhbmRsZSA9IDA7CiAgICAgcHNhX2tleV90eXBlX3Qgc291cmNlX3R5cGUgPSBzb3VyY2VfdHlwZV9hcmc7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgcmV0dXJuZWRfc291cmNlX2lkID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2tleV9saWZldGltZV90IHRhcmdldF9saWZldGltZSA9IHRhcmdldF9saWZldGltZV9hcmc7CiAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgdGFyZ2V0X2lkID0KICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDEsIHRhcmdldF9pZF9hcmcgKTsKICAgICBwc2Ffa2V5X3VzYWdlX3QgdGFyZ2V0X3VzYWdlID0gdGFyZ2V0X3VzYWdlX2FyZzsKICAgICBwc2FfYWxnb3JpdGhtX3QgdGFyZ2V0X2FsZyA9IHRhcmdldF9hbGdfYXJnOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgdGFyZ2V0X2hhbmRsZSA9IDA7CiAgICAgcHNhX2tleV90eXBlX3QgdGFyZ2V0X3R5cGUgPSB0YXJnZXRfdHlwZV9hcmc7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBuZXdfaGFuZGxlID0gMHhkZWFkOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHJldHVybmVkX3RhcmdldF9pZCA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IG5ld19rZXkgPSBNQkVEVExTX1NWQ19LRVlfSURfSU5JVDsKICAgICB1aW50OF90ICpleHBvcnRfYnVmZmVyID0gTlVMTDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlczEgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKQEAgLTU5NCw3ICs2OTQsNyBAQAogICAgIFBTQV9BU1NFUlQoIHBzYV9jcnlwdG9faW5pdCggKSApOwogCiAgICAgLyogUG9wdWxhdGUgdGhlIHNvdXJjZSBzbG90LiAqLwotICAgIGlmKCBzb3VyY2VfbGlmZXRpbWUgIT0gUFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRSApCisgICAgaWYoICEgUFNBX0tFWV9MSUZFVElNRV9JU19WT0xBVElMRSggc291cmNlX2xpZmV0aW1lICkgKQogICAgIHsKICAgICAgICAgcHNhX3NldF9rZXlfaWQoICZhdHRyaWJ1dGVzLCBzb3VyY2VfaWQgKTsKICAgICAgICAgcHNhX3NldF9rZXlfbGlmZXRpbWUoICZhdHRyaWJ1dGVzLCBzb3VyY2VfbGlmZXRpbWUgKTsKQEAgLTYwNCwxMiArNzA0LDEyIEBACiAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgc291cmNlX2FsZyApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX21hdGVyaWFsLT54LCBzb3VyY2VfbWF0ZXJpYWwtPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNvdXJjZV9oYW5kbGUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmV0dXJuZWRfc291cmNlX2lkICkgKTsKIAogICAgIC8qIFBvcHVsYXRlIHRoZSB0YXJnZXQgc2xvdC4gKi8KICAgICBpZiggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKCB0YXJnZXRfaWQsIHNvdXJjZV9pZCApICkKICAgICB7Ci0gICAgICAgIHRhcmdldF9oYW5kbGUgPSBzb3VyY2VfaGFuZGxlOworICAgICAgICByZXR1cm5lZF90YXJnZXRfaWQgPSByZXR1cm5lZF9zb3VyY2VfaWQ7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC02MjAsMjAgKzcyMCwyMSBAQAogICAgICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzMSwgdGFyZ2V0X2FsZyApOwogICAgICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X21hdGVyaWFsLT54LCB0YXJnZXRfbWF0ZXJpYWwtPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YXJnZXRfaGFuZGxlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXR1cm5lZF90YXJnZXRfaWQgKSApOwogICAgIH0KLSAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCB0YXJnZXRfaGFuZGxlLCAmYXR0cmlidXRlczEgKSApOworCisgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggcmV0dXJuZWRfdGFyZ2V0X2lkLCAmYXR0cmlidXRlczEgKSApOwogCiAgICAgLyogTWFrZSBhIGNvcHkgYXR0ZW1wdC4gKi8KICAgICBwc2Ffc2V0X2tleV9pZCggJmF0dHJpYnV0ZXMsIHRhcmdldF9pZCApOwogICAgIHBzYV9zZXRfa2V5X2xpZmV0aW1lKCAmYXR0cmlidXRlcywgdGFyZ2V0X2xpZmV0aW1lICk7Ci0gICAgVEVTVF9FUVVBTCggcHNhX2NvcHlfa2V5KCBzb3VyY2VfaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF0dHJpYnV0ZXMsICZuZXdfaGFuZGxlICksCisgICAgVEVTVF9FUVVBTCggcHNhX2NvcHlfa2V5KCByZXR1cm5lZF9zb3VyY2VfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXR0cmlidXRlcywgJm5ld19rZXkgKSwKICAgICAgICAgICAgICAgICBQU0FfRVJST1JfQUxSRUFEWV9FWElTVFMgKTsKLSAgICBURVNUX0VRVUFMKCBuZXdfaGFuZGxlICwgMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3N2Y19rZXlfaWRfaXNfbnVsbCggbmV3X2tleSApICk7CiAKICAgICAvKiBUZXN0IHRoYXQgdGhlIHRhcmdldCBzbG90IGlzIHVuYWZmZWN0ZWQuICovCi0gICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggdGFyZ2V0X2hhbmRsZSwgJmF0dHJpYnV0ZXMyICkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCByZXR1cm5lZF90YXJnZXRfaWQsICZhdHRyaWJ1dGVzMiApICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3ZjX2tleV9pZF9lcXVhbCgKICAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2lkKCAmYXR0cmlidXRlczEgKSwKICAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2lkKCAmYXR0cmlidXRlczIgKSApICk7CkBAIC02NTEsMTcgKzc1MiwyNCBAQAogICAgIHsKICAgICAgICAgc2l6ZV90IGxlbmd0aDsKICAgICAgICAgQVNTRVJUX0FMTE9DKCBleHBvcnRfYnVmZmVyLCB0YXJnZXRfbWF0ZXJpYWwtPmxlbiApOwotICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSggdGFyZ2V0X2hhbmRsZSwgZXhwb3J0X2J1ZmZlciwKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2V4cG9ydF9rZXkoIHJldHVybmVkX3RhcmdldF9pZCwgZXhwb3J0X2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9tYXRlcmlhbC0+bGVuLCAmbGVuZ3RoICkgKTsKICAgICAgICAgQVNTRVJUX0NPTVBBUkUoIHRhcmdldF9tYXRlcmlhbC0+eCwgdGFyZ2V0X21hdGVyaWFsLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRfYnVmZmVyLCBsZW5ndGggKTsKICAgICB9CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIHNvdXJjZV9oYW5kbGUgKSApOwotICAgIGlmKCB0YXJnZXRfaGFuZGxlICE9IHNvdXJjZV9oYW5kbGUgKQotICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIHRhcmdldF9oYW5kbGUgKSApOworICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggcmV0dXJuZWRfc291cmNlX2lkICkgKTsKKyAgICBpZiggISBtYmVkdGxzX3N2Y19rZXlfaWRfZXF1YWwoIHRhcmdldF9pZCwgc291cmNlX2lkICkgKQorICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZGVzdHJveV9rZXkoIHJldHVybmVkX3RhcmdldF9pZCApICk7CiAKIGV4aXQ6CisgICAgLyoKKyAgICAgKiBLZXkgYXR0cmlidXRlcyBtYXkgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoKQorICAgICAqIHRodXMgcmVzZXQgdGhlbSBhcyByZXF1aXJlZC4KKyAgICAgKi8KKyAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzMSApOworICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMyICk7CisKICAgICBQU0FfRE9ORSggKTsKICAgICBtYmVkdGxzX2ZyZWUoIGV4cG9ydF9idWZmZXIgKTsKICNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19TVE9SQUdFX0MpCkBAIC02NzQsOCArNzgyLDkgQEAKIHZvaWQgaW52YWxpZF9oYW5kbGUoIGludCBoYW5kbGVfY29uc3RydWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgaW50IGNsb3NlX3N0YXR1c19hcmcsIGludCB1c2FnZV9zdGF0dXNfYXJnICkKIHsKLSAgICBwc2Ffa2V5X2hhbmRsZV90IHZhbGlkX2hhbmRsZSA9IDA7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBpbnZhbGlkX2hhbmRsZSA9IDA7CisgICAgcHNhX2tleV9oYW5kbGVfdCB2YWxpZF9oYW5kbGUgPSBQU0FfS0VZX0hBTkRMRV9JTklUOworICAgIHBzYV9rZXlfaGFuZGxlX3QgaW52YWxpZF9oYW5kbGUgPSBQU0FfS0VZX0hBTkRMRV9JTklUOworICAgIHBzYV9rZXlfaWRfdCBrZXlfaWQ7CiAgICAgcHNhX3N0YXR1c190IGNsb3NlX3N0YXR1cyA9IGNsb3NlX3N0YXR1c19hcmc7CiAgICAgcHNhX3N0YXR1c190IHVzYWdlX3N0YXR1cyA9IHVzYWdlX3N0YXR1c19hcmc7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwpAQCAtNjkwLDIzICs3OTksMzUgQEAKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLCBzaXplb2YoIG1hdGVyaWFsICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWxpZF9oYW5kbGUgKSApOwotICAgIFRFU1RfQVNTRVJUKCB2YWxpZF9oYW5kbGUgIT0gMCApOworICAgIFRFU1RfQVNTRVJUKCAhIHBzYV9rZXlfaGFuZGxlX2lzX251bGwoIHZhbGlkX2hhbmRsZSApICk7CiAKICAgICAvKiBDb25zdHJ1Y3QgYW4gaW52YWxpZCBoYW5kbGUgYXMgc3BlY2lmaWVkIGluIHRoZSB0ZXN0IGNhc2UgZGF0YS4gKi8KICAgICBzd2l0Y2goIGhhbmRsZV9jb25zdHJ1Y3Rpb24gKQogICAgIHsKICAgICAgICAgY2FzZSBJTlZBTElEX0hBTkRMRV8wOgotICAgICAgICAgICAgaW52YWxpZF9oYW5kbGUgPSAwOworICAgICAgICAgICAgaW52YWxpZF9oYW5kbGUgPSBQU0FfS0VZX0hBTkRMRV9JTklUOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSU5WQUxJRF9IQU5ETEVfVU5PUEVORUQ6Ci0gICAgICAgICAgICAvKiBXZSBjYW4ndCBlYXNpbHkgY29uc3RydWN0IGEgaGFuZGxlIHRoYXQncyBuZXZlciBiZWVuIG9wZW5lZAotICAgICAgICAgICAgICogd2l0aG91dCBrbm93aW5nIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gY29uc3RydWN0cyBoYW5kbGUKLSAgICAgICAgICAgICAqIHZhbHVlcy4gVGhlIGN1cnJlbnQgdGVzdCBjb2RlIGFzc3VtZXMgdGhhdCB2YWxpZCBoYW5kbGVzCi0gICAgICAgICAgICAgKiBhcmUgaW4gYSByYW5nZSBiZXR3ZWVuIDEgYW5kIHNvbWUgbWF4aW11bS4gKi8KLSAgICAgICAgICAgIGlmKCB2YWxpZF9oYW5kbGUgPT0gMSApCi0gICAgICAgICAgICAgICAgaW52YWxpZF9oYW5kbGUgPSAyOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9LRVlfSUQoIHZhbGlkX2hhbmRsZSApIGlzIGEgdm9sYXRpbGUKKyAgICAgICAgICAgICAqIGtleSBpZGVudGlmaWVyIGFzIHRoZSBpbXBvcnRlZCBrZXkgaXMgYSB2b2xhdGlsZSBrZXkuIFZvbGF0aWxlCisgICAgICAgICAgICAgKiBrZXkgaWRlbnRpZmllcnMgYXJlIGluIHRoZSByYW5nZSBmcm9tIFBTQV9LRVlfSURfVk9MQVRJTEVfTUlOCisgICAgICAgICAgICAgKiB0byBQU0FfS0VZX0lEX1ZPTEFUSUxFX01BWCBpbmNsdWRlZC4gVGh1cyBwaWNrIGEga2V5IGlkZW50aWZpZXIKKyAgICAgICAgICAgICAqIGluIHRoZSByYW5nZSBmcm9tIFBTQV9LRVlfSURfVk9MQVRJTEVfTUlOIHRvCisgICAgICAgICAgICAgKiBQU0FfS0VZX0lEX1ZPTEFUSUxFX01BWCBkaWZmZXJlbnQgZnJvbQorICAgICAgICAgICAgICogTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9LRVlfSUQoIHZhbGlkX2hhbmRsZSApIHRvIGJ1aWxkIGFuCisgICAgICAgICAgICAgKiB1bm9wZW5lZCBhbmQgdGh1cyBpbnZhbGlkIGlkZW50aWZpZXIuCisgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgaWYoIE1CRURUTFNfU1ZDX0tFWV9JRF9HRVRfS0VZX0lEKCB2YWxpZF9oYW5kbGUgKSA9PQorICAgICAgICAgICAgICAgIFBTQV9LRVlfSURfVk9MQVRJTEVfTUlOICkKKyAgICAgICAgICAgICAgICBrZXlfaWQgPSBQU0FfS0VZX0lEX1ZPTEFUSUxFX01JTiArIDE7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaW52YWxpZF9oYW5kbGUgPSB2YWxpZF9oYW5kbGUgLSAxOworICAgICAgICAgICAgICAgIGtleV9pZCA9IE1CRURUTFNfU1ZDX0tFWV9JRF9HRVRfS0VZX0lEKCB2YWxpZF9oYW5kbGUgKSAtIDE7CisKKyAgICAgICAgICAgIGludmFsaWRfaGFuZGxlID0KKyAgICAgICAgICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMCwga2V5X2lkICk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJTlZBTElEX0hBTkRMRV9DTE9TRUQ6CiAgICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsCkBAIC03MTUsNyArODM2LDggQEAKICAgICAgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9kZXN0cm95X2tleSggaW52YWxpZF9oYW5kbGUgKSApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSU5WQUxJRF9IQU5ETEVfSFVHRToKLSAgICAgICAgICAgIGludmFsaWRfaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpICggLTEgKTsKKyAgICAgICAgICAgIGludmFsaWRfaGFuZGxlID0KKyAgICAgICAgICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMCwgUFNBX0tFWV9JRF9WRU5ET1JfTUFYICsgMSApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBURVNUX0FTU0VSVCggISAidW5rbm93biBoYW5kbGUgY29uc3RydWN0aW9uIiApOwpAQCAtNzM1LDU2ICs4NTcsMjU1IEBACiAgICAgUFNBX0FTU0VSVCggcHNhX2Nsb3NlX2tleSggdmFsaWRfaGFuZGxlICkgKTsKIAogZXhpdDoKKyAgICAvKgorICAgICAqIEtleSBhdHRyaWJ1dGVzIG1heSBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgcHNhX2dldF9rZXlfYXR0cmlidXRlcygpCisgICAgICogdGh1cyByZXNldCB0aGVtIGFzIHJlcXVpcmVkLgorICAgICAqLworICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKKwogICAgIFBTQV9ET05FKCApOwogfQogLyogRU5EX0NBU0UgKi8KIAogLyogQkVHSU5fQ0FTRSAqLwotdm9pZCBtYW55X3RyYW5zaWVudF9oYW5kbGVzKCBpbnQgbWF4X2hhbmRsZXNfYXJnICkKK3ZvaWQgbWFueV90cmFuc2llbnRfa2V5cyggaW50IG1heF9rZXlzX2FyZyApCiB7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCAqaGFuZGxlcyA9IE5VTEw7Ci0gICAgc2l6ZV90IG1heF9oYW5kbGVzID0gbWF4X2hhbmRsZXNfYXJnOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90ICprZXlzID0gTlVMTDsKKyAgICBzaXplX3QgbWF4X2tleXMgPSBtYXhfa2V5c19hcmc7CiAgICAgc2l6ZV90IGksIGo7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1czsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgdWludDhfdCBleHBvcnRlZFtzaXplb2YoIHNpemVfdCApXTsKICAgICBzaXplX3QgZXhwb3J0ZWRfbGVuZ3RoOwogCi0gICAgQVNTRVJUX0FMTE9DKCBoYW5kbGVzLCBtYXhfaGFuZGxlcyApOworICAgIEFTU0VSVF9BTExPQygga2V5cywgbWF4X2tleXMgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKIAogICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywgUFNBX0tFWV9VU0FHRV9FWFBPUlQgKTsKICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCAwICk7CiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVFlQRV9SQVdfREFUQSApOwogCi0gICAgZm9yKCBpID0gMDsgaSA8IG1heF9oYW5kbGVzOyBpKysgKQorICAgIGZvciggaSA9IDA7IGkgPCBtYXhfa2V5czsgaSsrICkKICAgICB7CiAgICAgICAgIHN0YXR1cyA9IHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopICZpLCBzaXplb2YoIGkgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGVzW2ldICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5c1tpXSApOwogICAgICAgICBpZiggc3RhdHVzID09IFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZICkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBQU0FfQVNTRVJUKCBzdGF0dXMgKTsKLSAgICAgICAgVEVTVF9BU1NFUlQoIGhhbmRsZXNbaV0gIT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggISBtYmVkdGxzX3N2Y19rZXlfaWRfaXNfbnVsbCgga2V5c1tpXSApICk7CiAgICAgICAgIGZvciggaiA9IDA7IGogPCBpOyBqKysgKQotICAgICAgICAgICAgVEVTVF9BU1NFUlQoIGhhbmRsZXNbaV0gIT0gaGFuZGxlc1tqXSApOworICAgICAgICAgICAgVEVTVF9BU1NFUlQoICEgbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKCBrZXlzW2ldLCBrZXlzW2pdICkgKTsKICAgICB9Ci0gICAgbWF4X2hhbmRsZXMgPSBpOworICAgIG1heF9rZXlzID0gaTsKIAotICAgIGZvciggaSA9IDE7IGkgPCBtYXhfaGFuZGxlczsgaSsrICkKKyAgICBmb3IoIGkgPSAxOyBpIDwgbWF4X2tleXM7IGkrKyApCiAgICAgewotICAgICAgICBQU0FfQVNTRVJUKCBwc2FfY2xvc2Vfa2V5KCBoYW5kbGVzW2kgLSAxXSApICk7Ci0gICAgICAgIFBTQV9BU1NFUlQoIHBzYV9leHBvcnRfa2V5KCBoYW5kbGVzW2ldLAorICAgICAgICBQU0FfQVNTRVJUKCBwc2FfY2xvc2Vfa2V5KCBrZXlzW2kgLSAxXSApICk7CisgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9leHBvcnRfa2V5KCBrZXlzW2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWQsIHNpemVvZiggZXhwb3J0ZWQgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHBvcnRlZF9sZW5ndGggKSApOwogICAgICAgICBBU1NFUlRfQ09NUEFSRSggZXhwb3J0ZWQsIGV4cG9ydGVkX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopICZpLCBzaXplb2YoIGkgKSApOwogICAgIH0KLSAgICBQU0FfQVNTRVJUKCBwc2FfY2xvc2Vfa2V5KCBoYW5kbGVzW2kgLSAxXSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2Nsb3NlX2tleSgga2V5c1tpIC0gMV0gKSApOwogCiBleGl0OgogICAgIFBTQV9ET05FKCApOwotICAgIG1iZWR0bHNfZnJlZSggaGFuZGxlcyApOworICAgIG1iZWR0bHNfZnJlZSgga2V5cyApOwogfQogLyogRU5EX0NBU0UgKi8KIAorLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfUFNBX0NSWVBUT19TVE9SQUdFX0MgKi8KK3ZvaWQga2V5X3Nsb3RfZXZpY3Rpb25fdG9faW1wb3J0X25ld19rZXkoIGludCBsaWZldGltZV9hcmcgKQoreworICAgIHBzYV9rZXlfbGlmZXRpbWVfdCBsaWZldGltZSA9IChwc2Ffa2V5X2xpZmV0aW1lX3QpbGlmZXRpbWVfYXJnOworICAgIHNpemVfdCBpOworICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKKyAgICB1aW50OF90IGV4cG9ydGVkW3NpemVvZiggc2l6ZV90ICldOworICAgIHNpemVfdCBleHBvcnRlZF9sZW5ndGg7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LCByZXR1cm5lZF9rZXlfaWQ7CisKKyAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKKworICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywgUFNBX0tFWV9VU0FHRV9FWFBPUlQgKTsKKyAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCAwICk7CisgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVFlQRV9SQVdfREFUQSApOworCisgICAgLyoKKyAgICAgKiBDcmVhdGUgUFNBX0tFWV9TTE9UX0NPVU5UIHBlcnNpc3RlbnQga2V5cy4KKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgUFNBX0tFWV9TTE9UX0NPVU5UOyBpKysgKQorICAgIHsKKyAgICAgICAga2V5ID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIGksIGkgKyAxICk7CisgICAgICAgIHBzYV9zZXRfa2V5X2lkKCAmYXR0cmlidXRlcywga2V5ICk7CisgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopICZpLCBzaXplb2YoIGkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXR1cm5lZF9rZXlfaWQgKSApOworICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3N2Y19rZXlfaWRfZXF1YWwoIHJldHVybmVkX2tleV9pZCwga2V5ICkgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENyZWF0ZSBhIG5ldyBwZXJzaXN0ZW50IG9yIHZvbGF0aWxlIGtleS4gV2hlbiBjcmVhdGluZyB0aGUga2V5LAorICAgICAqIG9uZSBvZiB0aGUgZGVzY3JpcHRpb25zIG9mIHRoZSBwcmV2aW91c2x5IGNyZWF0ZWQgcGVyc2lzdGVudCBrZXlzCisgICAgICogaXMgcmVtb3ZlZCBmcm9tIHRoZSBSQU0ga2V5IHNsb3RzLiBUaGlzIG1ha2VzIHJvb20gdG8gc3RvcmUgaXRzCisgICAgICogZGVzY3JpcHRpb24gaW4gUkFNLgorICAgICAqLworICAgIGkgPSBQU0FfS0VZX1NMT1RfQ09VTlQ7CisgICAga2V5ID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIGksIGkgKyAxICk7CisgICAgcHNhX3NldF9rZXlfaWQoICZhdHRyaWJ1dGVzLCBrZXkgKTsKKyAgICBwc2Ffc2V0X2tleV9saWZldGltZSggJmF0dHJpYnV0ZXMsIGxpZmV0aW1lICk7CisKKyAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopICZpLCBzaXplb2YoIGkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJldHVybmVkX2tleV9pZCApICk7CisgICAgaWYoIGxpZmV0aW1lICE9IFBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKCByZXR1cm5lZF9rZXlfaWQsIGtleSApICk7CisgICAgZWxzZQorICAgICAgICBURVNUX0FTU0VSVCggcHNhX2tleV9pZF9pc192b2xhdGlsZSgKKyAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1ZDX0tFWV9JRF9HRVRfS0VZX0lEKCByZXR1cm5lZF9rZXlfaWQgKSApICk7CisKKyAgICAvKgorICAgICAqIENoZWNrIHRoYXQgd2UgY2FuIGV4cG9ydCBhbGwgKCBQU0FfS0VZX1NMT1RfQ09VTlQgKyAxICkga2V5cywKKyAgICAgKiB0aGF0IHRoZXkgaGF2ZSB0aGUgZXhwZWN0ZWQgdmFsdWUgYW5kIGRlc3Ryb3kgdGhlbS4gSW4gdGhhdCBwcm9jZXNzLAorICAgICAqIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcGVyc2lzdGVudCBrZXkgdGhhdCB3YXMgZXZpY3RlZCBmcm9tIHRoZSBSQU0KKyAgICAgKiBzbG90cyB3aGVuIGNyZWF0aW5nIHRoZSBsYXN0IGtleSBpcyByZXN0b3JlZCBpbiBhIFJBTSBzbG90IHRvIGV4cG9ydAorICAgICAqIGl0cyB2YWx1ZS4KKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDw9IFBTQV9LRVlfU0xPVF9DT1VOVDsgaSsrICkKKyAgICB7CisgICAgICAgIGlmKCBpIDwgUFNBX0tFWV9TTE9UX0NPVU5UICkKKyAgICAgICAgICAgIGtleSA9IG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCBpLCBpICsgMSApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBrZXkgPSByZXR1cm5lZF9rZXlfaWQ7CisKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2V4cG9ydF9rZXkoIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkLCBzaXplb2YoIGV4cG9ydGVkICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhwb3J0ZWRfbGVuZ3RoICkgKTsKKyAgICAgICAgQVNTRVJUX0NPTVBBUkUoIGV4cG9ydGVkLCBleHBvcnRlZF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKSAmaSwgc2l6ZW9mKCBpICkgKTsKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBrZXkgKSApOworICAgIH0KKworZXhpdDoKKyAgICBQU0FfRE9ORSggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1BTQV9DUllQVE9fU1RPUkFHRV9DICovCit2b2lkIG5vbl9yZXVzYWJsZV9rZXlfc2xvdHNfaW50ZWdyaXR5X2luX2Nhc2Vfb2Zfa2V5X3Nsb3Rfc3RhcnZhdGlvbiggKQoreworICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CisgICAgc2l6ZV90IGk7CisgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOworICAgIHVpbnQ4X3QgZXhwb3J0ZWRbc2l6ZW9mKCBzaXplX3QgKV07CisgICAgc2l6ZV90IGV4cG9ydGVkX2xlbmd0aDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBwZXJzaXN0ZW50X2tleSA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHBlcnNpc3RlbnRfa2V5MiA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHJldHVybmVkX2tleV9pZCA9IE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90ICprZXlzID0gTlVMTDsKKworICAgIFRFU1RfQVNTRVJUKCBQU0FfS0VZX1NMT1RfQ09VTlQgPj0gMSApOworCisgICAgQVNTRVJUX0FMTE9DKCBrZXlzLCBQU0FfS0VZX1NMT1RfQ09VTlQgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKKworICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0tFWV9VU0FHRV9FWFBPUlQgfCBQU0FfS0VZX1VTQUdFX0NPUFkgKTsKKyAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCAwICk7CisgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVFlQRV9SQVdfREFUQSApOworCisgICAgLyoKKyAgICAgKiBDcmVhdGUgYSBwZXJzaXN0ZW50IGtleQorICAgICAqLworICAgIHBlcnNpc3RlbnRfa2V5ID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDB4MTAwLCAweDIwNSApOworICAgIHBzYV9zZXRfa2V5X2lkKCAmYXR0cmlidXRlcywgcGVyc2lzdGVudF9rZXkgKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopICZwZXJzaXN0ZW50X2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBwZXJzaXN0ZW50X2tleSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmV0dXJuZWRfa2V5X2lkICkgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKCByZXR1cm5lZF9rZXlfaWQsIHBlcnNpc3RlbnRfa2V5ICkgKTsKKworICAgIC8qCisgICAgICogQ3JlYXRlIFBTQV9LRVlfU0xPVF9DT1VOVCB2b2xhdGlsZSBrZXlzCisgICAgICovCisgICAgcHNhX3NldF9rZXlfbGlmZXRpbWUoICZhdHRyaWJ1dGVzLCBQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFICk7CisgICAgZm9yKCBpID0gMDsgaSA8IFBTQV9LRVlfU0xPVF9DT1VOVDsgaSsrICkKKyAgICB7CisgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopICZpLCBzaXplb2YoIGkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlzW2ldKSApOworICAgIH0KKyAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7CisKKyAgICAvKgorICAgICAqIENoZWNrIHRoYXQgd2UgY2Fubm90IGFjY2VzcyB0aGUgcGVyc2lzdGVudCBrZXkgYXMgYWxsIHNsb3RzIGFyZQorICAgICAqIG9jY3VwaWVkIGJ5IHZvbGF0aWxlIGtleXMgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBsb2FkIHRoZQorICAgICAqIHBlcnNpc3RlbnQga2V5IGRlc2NyaXB0aW9uIGluIGEgc2xvdCB0byBiZSBhYmxlIHRvIGFjY2VzcyBpdC4KKyAgICAgKi8KKyAgICBzdGF0dXMgPSBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBwZXJzaXN0ZW50X2tleSwgJmF0dHJpYnV0ZXMgKTsKKyAgICBURVNUX0VRVUFMKCBzdGF0dXMsIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZICk7CisKKyAgICAvKgorICAgICAqIENoZWNrIHdlIGNhbiBleHBvcnQgdGhlIHZvbGF0aWxlIGtleSBjcmVhdGVkIGxhc3QgYW5kIHRoYXQgaXQgaGFzIHRoZQorICAgICAqIGV4cGVjdGVkIHZhbHVlLiBUaGVuLCBkZXN0cm95IGl0LgorICAgICAqLworICAgIFBTQV9BU1NFUlQoIHBzYV9leHBvcnRfa2V5KCBrZXlzW1BTQV9LRVlfU0xPVF9DT1VOVCAtIDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRlZCwgc2l6ZW9mKCBleHBvcnRlZCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhwb3J0ZWRfbGVuZ3RoICkgKTsKKyAgICBpID0gUFNBX0tFWV9TTE9UX0NPVU5UIC0gMTsKKyAgICBBU1NFUlRfQ09NUEFSRSggZXhwb3J0ZWQsIGV4cG9ydGVkX2xlbmd0aCwgKHVpbnQ4X3QgKikgJmksIHNpemVvZiggaSApICk7CisgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBrZXlzW1BTQV9LRVlfU0xPVF9DT1VOVCAtIDFdICkgKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgdGhhdCB3ZSBjYW4gbm93IGFjY2VzcyB0aGUgcGVyc2lzdGVudCBrZXkgYWdhaW4uCisgICAgICovCisgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggcGVyc2lzdGVudF9rZXksICZhdHRyaWJ1dGVzICkgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKCBhdHRyaWJ1dGVzLmNvcmUuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc2lzdGVudF9rZXkgKSApOworCisgICAgLyoKKyAgICAgKiBDaGVjayB0aGF0IHdlIGNhbm5vdCBjb3B5IHRoZSBwZXJzaXN0ZW50IGtleSBhcyBhbGwgc2xvdHMgYXJlIG9jY3VwaWVkCisgICAgICogYnkgdGhlIHBlcnNpc3RlbnQga2V5IGFuZCB0aGUgdm9sYXRpbGUga2V5cyBhbmQgdGhlIHNsb3QgY29udGFpbmluZyB0aGUKKyAgICAgKiBwZXJzaXN0ZW50IGtleSBjYW5ub3QgYmUgcmVjbGFpbWVkIGFzIGl0IGNvbnRhaW5zIHRoZSBrZXkgdG8gY29weS4KKyAgICAgKi8KKyAgICBwZXJzaXN0ZW50X2tleTIgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMHgxMDAsIDB4MjA0ICk7CisgICAgcHNhX3NldF9rZXlfaWQoICZhdHRyaWJ1dGVzLCBwZXJzaXN0ZW50X2tleTIgKTsKKyAgICBzdGF0dXMgPSBwc2FfY29weV9rZXkoIHBlcnNpc3RlbnRfa2V5LCAmYXR0cmlidXRlcywgJnJldHVybmVkX2tleV9pZCApOworICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlkgKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgd2UgY2FuIGV4cG9ydCB0aGUgcmVtYWluaW5nIHZvbGF0aWxlIGtleXMgYW5kIHRoYXQgdGhleSBoYXZlIHRoZQorICAgICAqIGV4cGVjdGVkIHZhbHVlcy4KKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgKCBQU0FfS0VZX1NMT1RfQ09VTlQgLSAxICk7IGkrKyApCisgICAgeworICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSgga2V5c1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkLCBzaXplb2YoIGV4cG9ydGVkICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhwb3J0ZWRfbGVuZ3RoICkgKTsKKyAgICAgICAgQVNTRVJUX0NPTVBBUkUoIGV4cG9ydGVkLCBleHBvcnRlZF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKSAmaSwgc2l6ZW9mKCBpICkgKTsKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2Rlc3Ryb3lfa2V5KCBrZXlzW2ldICkgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENoZWNrIHdlIGNhbiBleHBvcnQgdGhlIHBlcnNpc3RlbnQga2V5IGFuZCB0aGF0IGl0IGhhdmUgdGhlIGV4cGVjdGVkCisgICAgICogdmFsdWUuCisgICAgICovCisKKyAgICBQU0FfQVNTRVJUKCBwc2FfZXhwb3J0X2tleSggcGVyc2lzdGVudF9rZXksIGV4cG9ydGVkLCBzaXplb2YoIGV4cG9ydGVkICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHBvcnRlZF9sZW5ndGggKSApOworICAgIEFTU0VSVF9DT01QQVJFKCBleHBvcnRlZCwgZXhwb3J0ZWRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKSAmcGVyc2lzdGVudF9rZXksIHNpemVvZiggcGVyc2lzdGVudF9rZXkgKSApOworZXhpdDoKKyAgICAvKgorICAgICAqIEtleSBhdHRyaWJ1dGVzIG1heSBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgcHNhX2dldF9rZXlfYXR0cmlidXRlcygpCisgICAgICogdGh1cyByZXNldCB0aGVtIGFzIHJlcXVpcmVkLgorICAgICAqLworICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKKworICAgIHBzYV9kZXN0cm95X2tleSggcGVyc2lzdGVudF9rZXkgKTsKKyAgICBQU0FfRE9ORSggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGtleXMgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9yc2EuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9yc2EuZnVuY3Rpb24KaW5kZXggOTAzMzVkYi4uNmM3M2UzOSAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcnNhLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3JzYS5mdW5jdGlvbgpAQCAtNDcxLDcgKzQ3MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaWdlc3QsIGludCBtb2QsIGludCByYWRpeF9QLCBjaGFyICogaW5wdXRfUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X1EsIGNoYXIgKiBpbnB1dF9RLCBpbnQgcmFkaXhfTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGlucHV0X04sIGludCByYWRpeF9FLCBjaGFyICogaW5wdXRfRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogcmVzdWx0X2hleF9zdHIsIGludCByZXN1bHQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiByZXN1bHRfc3RyLCBpbnQgcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIGhhc2hfcmVzdWx0W01CRURUTFNfTURfTUFYX1NJWkVdOwogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzI1Nl07CkBAIC01MDcsOCArNTA3LDggQEAKICAgICBpZiggcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfaGV4X3N0ci0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sIHJlc3VsdF9oZXhfc3RyLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9zdHItPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGVuLCByZXN1bHRfc3RyLT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpAQCAtNTU3LDcgKzU1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhZGRpbmdfbW9kZSwgaW50IG1vZCwgaW50IHJhZGl4X1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGlucHV0X1AsIGludCByYWRpeF9RLCBjaGFyICogaW5wdXRfUSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfTiwgY2hhciAqIGlucHV0X04sIGludCByYWRpeF9FLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBpbnB1dF9FLCBkYXRhX3QgKiByZXN1bHRfaGV4X3N0ciApCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGlucHV0X0UsIGRhdGFfdCAqIHJlc3VsdF9zdHIgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzI1Nl07CiAgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CkBAIC01ODgsOCArNTg4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9yZXN1bHQtPngsIG91dHB1dCApID09IDAgKTsKIAogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X2hleF9zdHItPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sIHJlc3VsdF9oZXhfc3RyLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwgcmVzdWx0X3N0ci0+bGVuICkgPT0gMCApOwogCiAjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YxNSkKICAgICAvKiBGb3IgUEtDUyMxIHYxLjUsIHRoZXJlIGlzIGFuIGFsdGVybmF0aXZlIHdheSB0byBnZW5lcmF0ZSBzaWduYXR1cmVzICovCkBAIC02MTIsOSArNjEyLDkgQEAKIAogICAgICAgICBpZiggcmVzID09IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfaGV4X3N0ci0+eCwKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9zdHItPngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfaGV4X3N0ci0+bGVuICkgPT0gMCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdHItPmxlbiApID09IDAgKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxX1YxNSAqLwpAQCAtNjkyLDcgKzY5Miw3IEBACiB2b2lkIG1iZWR0bHNfcnNhX3BrY3MxX2VuY3J5cHQoIGRhdGFfdCAqIG1lc3NhZ2Vfc3RyLCBpbnQgcGFkZGluZ19tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kLCBpbnQgcmFkaXhfTiwgY2hhciAqIGlucHV0X04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9FLCBjaGFyICogaW5wdXRfRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogcmVzdWx0X2hleF9zdHIsIGludCByZXN1bHQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiByZXN1bHRfc3RyLCBpbnQgcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsyNTZdOwogICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OwpAQCAtNzIyLDggKzcyMiw4IEBACiAgICAgaWYoIHJlc3VsdCA9PSAwICkKICAgICB7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X2hleF9zdHItPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGVuLCByZXN1bHRfaGV4X3N0ci0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfc3RyLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwgcmVzdWx0X3N0ci0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTczNiw3ICs3MzYsNyBAQAogdm9pZCByc2FfcGtjczFfZW5jcnlwdF9iYWRfcm5nKCBkYXRhX3QgKiBtZXNzYWdlX3N0ciwgaW50IHBhZGRpbmdfbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZCwgaW50IHJhZGl4X04sIGNoYXIgKiBpbnB1dF9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfRSwgY2hhciAqIGlucHV0X0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogcmVzdWx0X3N0ciwgaW50IHJlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjU2XTsKICAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eDsKQEAgLTc2Miw4ICs3NjIsOCBAQAogICAgIGlmKCByZXN1bHQgPT0gMCApCiAgICAgewogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9oZXhfc3RyLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwgcmVzdWx0X2hleF9zdHItPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sIHJlc3VsdF9zdHItPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC03NzcsNyArNzc3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZCwgaW50IHJhZGl4X1AsIGNoYXIgKiBpbnB1dF9QLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfUSwgY2hhciAqIGlucHV0X1EsIGludCByYWRpeF9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogaW5wdXRfTiwgaW50IHJhZGl4X0UsIGNoYXIgKiBpbnB1dF9FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X291dHB1dCwgZGF0YV90ICogcmVzdWx0X2hleF9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfb3V0cHV0LCBkYXRhX3QgKiByZXN1bHRfc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFszMl07CkBAIC04MTQsOSArODE0LDkgQEAKICAgICBpZiggcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfaGV4X3N0ci0+eCwKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfaGV4X3N0ci0+bGVuICkgPT0gMCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N0ci0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTgyOSw3ICs4MjksNyBAQAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBtYmVkdGxzX3JzYV9wdWJsaWMoIGRhdGFfdCAqIG1lc3NhZ2Vfc3RyLCBpbnQgbW9kLCBpbnQgcmFkaXhfTiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogaW5wdXRfTiwgaW50IHJhZGl4X0UsIGNoYXIgKiBpbnB1dF9FLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiByZXN1bHRfc3RyLCBpbnQgcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsyNTZdOwogICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4LCBjdHgyOyAvKiBBbHNvIHRlc3QgbWJlZHRsc19yc2FfY29weSgpIHdoaWxlIGF0IGl0ICovCkBAIC04NTMsOCArODUzLDggQEAKICAgICBpZiggcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfaGV4X3N0ci0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sIHJlc3VsdF9oZXhfc3RyLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9zdHItPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGVuLCByZXN1bHRfc3RyLT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiAgICAgLyogQW5kIG5vdyB3aXRoIHRoZSBjb3B5ICovCkBAIC04NjksOCArODY5LDggQEAKICAgICBpZiggcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfaGV4X3N0ci0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sIHJlc3VsdF9oZXhfc3RyLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9zdHItPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGVuLCByZXN1bHRfc3RyLT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpAQCAtODg0LDcgKzg4NCw3IEBACiB2b2lkIG1iZWR0bHNfcnNhX3ByaXZhdGUoIGRhdGFfdCAqIG1lc3NhZ2Vfc3RyLCBpbnQgbW9kLCBpbnQgcmFkaXhfUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGlucHV0X1AsIGludCByYWRpeF9RLCBjaGFyICogaW5wdXRfUSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X04sIGNoYXIgKiBpbnB1dF9OLCBpbnQgcmFkaXhfRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGlucHV0X0UsIGRhdGFfdCAqIHJlc3VsdF9oZXhfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogaW5wdXRfRSwgZGF0YV90ICogcmVzdWx0X3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjU2XTsKQEAgLTkyMSw5ICs5MjEsOSBAQAogICAgICAgICBpZiggcmVzdWx0ID09IDAgKQogICAgICAgICB7CiAKLSAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9oZXhfc3RyLT54LAorICAgICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9oZXhfc3RyLT5sZW4gKSA9PSAwICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N0ci0+bGVuICkgPT0gMCApOwogICAgICAgICB9CiAgICAgfQogCkBAIC05NDEsOSArOTQxLDkgQEAKICAgICBpZiggcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfaGV4X3N0ci0+eCwKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eDIubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2hleF9zdHItPmxlbiApID09IDAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdHItPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zaGF4LmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfc2hheC5mdW5jdGlvbgppbmRleCA2NDI4MDA5Li5mMzQ3N2VjIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zaGF4LmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NoYXguZnVuY3Rpb24KQEAgLTUyLDcgKzUyLDcgQEAKIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQyAqLwotdm9pZCBtYmVkdGxzX3NoYTEoIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9oYXNoX3N0cmluZyApCit2b2lkIG1iZWR0bHNfc2hhMSggZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGFzaCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbNDFdOwogCkBAIC02MSw4ICs2MSw3IEBACiAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zaGExX3JldCggc3JjX3N0ci0+eCwgc3JjX3N0ci0+bGVuLCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfaGFzaF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwLCBoZXhfaGFzaF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoYXNoLT54LCAyMCwgaGFzaC0+bGVuICkgPT0gMCApOwogfQogLyogRU5EX0NBU0UgKi8KIApAQCAtMTIzLDcgKzEyMiw3IEBACiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQyAqLwotdm9pZCBzaGEyMjQoIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9oYXNoX3N0cmluZyApCit2b2lkIHNoYTIyNCggZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGFzaCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbNTddOwogCkBAIC0xMzIsMTMgKzEzMSwxMiBAQAogCiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc2hhMjU2X3JldCggc3JjX3N0ci0+eCwgc3JjX3N0ci0+bGVuLCBvdXRwdXQsIDEgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfaGFzaF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4LCBoZXhfaGFzaF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoYXNoLT54LCAyOCwgaGFzaC0+bGVuICkgPT0gMCApOwogfQogLyogRU5EX0NBU0UgKi8KIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MgKi8KLXZvaWQgbWJlZHRsc19zaGEyNTYoIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9oYXNoX3N0cmluZyApCit2b2lkIG1iZWR0bHNfc2hhMjU2KCBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoYXNoICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs2NV07CiAKQEAgLTE0Nyw4ICsxNDUsNyBAQAogCiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc2hhMjU2X3JldCggc3JjX3N0ci0+eCwgc3JjX3N0ci0+bGVuLCBvdXRwdXQsIDAgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfaGFzaF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLCBoZXhfaGFzaF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoYXNoLT54LCAzMiwgaGFzaC0+bGVuICkgPT0gMCApOwogfQogLyogRU5EX0NBU0UgKi8KIApAQCAtMjA5LDcgKzIwNiw3IEBACiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQyAqLwotdm9pZCBzaGEzODQoIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9oYXNoX3N0cmluZyApCit2b2lkIHNoYTM4NCggZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGFzaCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbOTddOwogCkBAIC0yMTgsMTMgKzIxNSwxMiBAQAogCiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc2hhNTEyX3JldCggc3JjX3N0ci0+eCwgc3JjX3N0ci0+bGVuLCBvdXRwdXQsIDEgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfaGFzaF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4LCBoZXhfaGFzaF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoYXNoLT54LCA0OCwgaGFzaC0+bGVuICkgPT0gMCApOwogfQogLyogRU5EX0NBU0UgKi8KIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MgKi8KLXZvaWQgbWJlZHRsc19zaGE1MTIoIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9oYXNoX3N0cmluZyApCit2b2lkIG1iZWR0bHNfc2hhNTEyKCBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoYXNoICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMjldOwogCkBAIC0yMzMsOCArMjI5LDcgQEAKIAogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3NoYTUxMl9yZXQoIHNyY19zdHItPngsIHNyY19zdHItPmxlbiwgb3V0cHV0LCAwICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCwgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwgNjQsIGhhc2gtPmxlbiApID09IDAgKTsKIH0KIC8qIEVORF9DQVNFICovCiAKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NzbC5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NzbC5mdW5jdGlvbgppbmRleCA5ZmNmMzY3Li5mMzc3ZmZhIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zc2wuZnVuY3Rpb24KKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfc3NsLmZ1bmN0aW9uCkBAIC0zODI0LDExICszODI0LDExIEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgc3NsX3Rsc19wcmYoIGludCB0eXBlLCBkYXRhX3QgKiBzZWNyZXQsIGRhdGFfdCAqIHJhbmRvbSwKLSAgICAgICAgICAgICAgICAgIGNoYXIgKmxhYmVsLCBkYXRhX3QgKnJlc3VsdF9oZXhfc3RyLCBpbnQgZXhwX3JldCApCisgICAgICAgICAgICAgICAgICBjaGFyICpsYWJlbCwgZGF0YV90ICpyZXN1bHRfc3RyLCBpbnQgZXhwX3JldCApCiB7CiAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0OwogCi0gICAgb3V0cHV0ID0gbWJlZHRsc19jYWxsb2MoIDEsIHJlc3VsdF9oZXhfc3RyLT5sZW4gKTsKKyAgICBvdXRwdXQgPSBtYmVkdGxzX2NhbGxvYyggMSwgcmVzdWx0X3N0ci0+bGVuICk7CiAgICAgaWYoIG91dHB1dCA9PSBOVUxMICkKICAgICAgICAgZ290byBleGl0OwogCkBAIC0zODM4LDEyICszODM4LDEyIEBACiAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zc2xfdGxzX3ByZiggdHlwZSwgc2VjcmV0LT54LCBzZWNyZXQtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwsIHJhbmRvbS0+eCwgcmFuZG9tLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgcmVzdWx0X2hleF9zdHItPmxlbiApID09IGV4cF9yZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCByZXN1bHRfc3RyLT5sZW4gKSA9PSBleHBfcmV0ICk7CiAKICAgICBpZiggZXhwX3JldCA9PSAwICkKICAgICB7Ci0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9oZXhfc3RyLT54LAotICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2hleF9zdHItPmxlbiwgcmVzdWx0X2hleF9zdHItPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKKyAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdHItPmxlbiwgcmVzdWx0X3N0ci0+bGVuICkgPT0gMCApOwogICAgIH0KIGV4aXQ6CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3g1MDlwYXJzZS5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3g1MDlwYXJzZS5mdW5jdGlvbgppbmRleCA5Y2FjMmVjLi4yYmJhNGUyIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5cGFyc2UuZnVuY3Rpb24KKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeDUwOXBhcnNlLmZ1bmN0aW9uCkBAIC0xMjIwLDIxICsxMjIwLDIxIEBACiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQgKi8KLXZvaWQgeDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtcyggZGF0YV90ICogaGV4X3BhcmFtcywgaW50IHBhcmFtc190YWcsCit2b2lkIHg1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXMoIGRhdGFfdCAqIHBhcmFtcywgaW50IHBhcmFtc190YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWZfbXNnX21kLCBpbnQgcmVmX21nZl9tZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlZl9zYWx0X2xlbiwgaW50IHJlZl9yZXQgKQogewogICAgIGludCBteV9yZXQ7Ci0gICAgbWJlZHRsc194NTA5X2J1ZiBwYXJhbXM7CisgICAgbWJlZHRsc194NTA5X2J1ZiBidWY7CiAgICAgbWJlZHRsc19tZF90eXBlX3QgbXlfbXNnX21kLCBteV9tZ2ZfbWQ7CiAgICAgaW50IG15X3NhbHRfbGVuOwogCi0gICAgcGFyYW1zLnAgPSBoZXhfcGFyYW1zLT54OwotICAgIHBhcmFtcy5sZW4gPSBoZXhfcGFyYW1zLT5sZW47Ci0gICAgcGFyYW1zLnRhZyA9IHBhcmFtc190YWc7CisgICAgYnVmLnAgPSBwYXJhbXMtPng7CisgICAgYnVmLmxlbiA9IHBhcmFtcy0+bGVuOworICAgIGJ1Zi50YWcgPSBwYXJhbXNfdGFnOwogCi0gICAgbXlfcmV0ID0gbWJlZHRsc194NTA5X2dldF9yc2Fzc2FfcHNzX3BhcmFtcyggJnBhcmFtcywgJm15X21zZ19tZCwgJm15X21nZl9tZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm15X3NhbHRfbGVuICk7CisgICAgbXlfcmV0ID0gbWJlZHRsc194NTA5X2dldF9yc2Fzc2FfcHNzX3BhcmFtcyggJmJ1ZiwgJm15X21zZ19tZCwgJm15X21nZl9tZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXlfc2FsdF9sZW4gKTsKIAogICAgIFRFU1RfQVNTRVJUKCBteV9yZXQgPT0gcmVmX3JldCApOwogCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5d3JpdGUuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5d3JpdGUuZnVuY3Rpb24KaW5kZXggMzFkNjAwMC4uOWYyMDA3ZCAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeDUwOXdyaXRlLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3g1MDl3cml0ZS5mdW5jdGlvbgpAQCAtMTYxLDcgKzE2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2VydF90eXBlICkKIHsKICAgICBtYmVkdGxzX3BrX2NvbnRleHQga2V5OwotICAgIHBzYV9rZXlfaGFuZGxlX3Qgc2xvdCA9IDA7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5X2lkID0gTUJFRFRMU19TVkNfS0VZX0lEX0lOSVQ7CiAgICAgcHNhX2FsZ29yaXRobV90IG1kX2FsZ19wc2E7CiAgICAgbWJlZHRsc194NTA5d3JpdGVfY3NyIHJlcTsKICAgICB1bnNpZ25lZCBjaGFyIGJ1Zls0MDk2XTsKQEAgLTE3OCw3ICsxNzgsNyBAQAogCiAgICAgbWJlZHRsc19wa19pbml0KCAma2V5ICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJmtleSwga2V5X2ZpbGUsIE5VTEwgKSA9PSAwICk7Ci0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfd3JhcF9hc19vcGFxdWUoICZrZXksICZzbG90LCBtZF9hbGdfcHNhICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3dyYXBfYXNfb3BhcXVlKCAma2V5LCAma2V5X2lkLCBtZF9hbGdfcHNhICkgPT0gMCApOwogCiAgICAgbWJlZHRsc194NTA5d3JpdGVfY3NyX2luaXQoICZyZXEgKTsKICAgICBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X21kX2FsZyggJnJlcSwgbWRfdHlwZSApOwpAQCAtMjAyLDcgKzIwMiw3IEBACiBleGl0OgogICAgIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9mcmVlKCAmcmVxICk7CiAgICAgbWJlZHRsc19wa19mcmVlKCAma2V5ICk7Ci0gICAgcHNhX2Rlc3Ryb3lfa2V5KCBzbG90ICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBrZXlfaWQgKTsKICAgICBQU0FfRE9ORSggKTsKIH0KIC8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94dGVhLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeHRlYS5mdW5jdGlvbgppbmRleCBmMjg2ZTY3Li4xZDViMjliIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94dGVhLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3h0ZWEuZnVuY3Rpb24KQEAgLTksNyArOSw3IEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgeHRlYV9lbmNyeXB0X2VjYiggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogc3JjX3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcgKQorICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBkc3QgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CiAgICAgbWJlZHRsc194dGVhX2NvbnRleHQgY3R4OwpAQCAtMjAsMTQgKzIwLDEyIEBACiAgICAgbWJlZHRsc194dGVhX3NldHVwKCAmY3R4LCBrZXlfc3RyLT54ICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeHRlYV9jcnlwdF9lY2IoICZjdHgsIE1CRURUTFNfWFRFQV9FTkNSWVBULCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIDgsIGRzdC0+bGVuICkgPT0gMCApOwogfQogLyogRU5EX0NBU0UgKi8KIAogLyogQkVHSU5fQ0FTRSAqLwotdm9pZCB4dGVhX2RlY3J5cHRfZWNiKCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZyApCit2b2lkIHh0ZWFfZGVjcnlwdF9lY2IoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX3h0ZWFfY29udGV4dCBjdHg7CkBAIC0zOCwxNCArMzYsMTMgQEAKICAgICBtYmVkdGxzX3h0ZWFfc2V0dXAoICZjdHgsIGtleV9zdHItPnggKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc194dGVhX2NyeXB0X2VjYiggJmN0eCwgTUJFRFRMU19YVEVBX0RFQ1JZUFQsIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgOCwgZHN0LT5sZW4gKSA9PSAwICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KIHZvaWQgeHRlYV9lbmNyeXB0X2NiYyggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZyApCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX3h0ZWFfY29udGV4dCBjdHg7CkBAIC01NywxNSArNTQsMTQgQEAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc194dGVhX2NyeXB0X2NiYyggJmN0eCwgTUJFRFRMU19YVEVBX0VOQ1JZUFQsIHNyY19zdHItPmxlbiwgaXZfc3RyLT54LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwgZHN0LT5sZW4gKSA9PSAwICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KIHZvaWQgeHRlYV9kZWNyeXB0X2NiYyggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZyApCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX3h0ZWFfY29udGV4dCBjdHg7CkBAIC03Nyw5ICs3Myw4IEBACiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeHRlYV9jcnlwdF9jYmMoICZjdHgsIE1CRURUTFNfWFRFQV9ERUNSWVBULCBzcmNfc3RyLT5sZW4sIGl2X3N0ci0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sIGRzdC0+bGVuICkgPT0gMCApOwogfQogLyogRU5EX0NBU0UgKi8KIApkaWZmIC0tZ2l0IGEvdmlzdWFsYy9WUzIwMTAvbWJlZFRMUy52Y3hwcm9qIGIvdmlzdWFsYy9WUzIwMTAvbWJlZFRMUy52Y3hwcm9qCmluZGV4IGIyNDNiNzMuLjBhZjQxNDUgMTAwNjQ0Ci0tLSBhL3Zpc3VhbGMvVlMyMDEwL21iZWRUTFMudmN4cHJvagorKysgYi92aXN1YWxjL1ZTMjAxMC9tYmVkVExTLnZjeHByb2oKQEAgLTE2Miw2ICsxNjIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGNtYWMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcY29tcGF0LTEuMy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xjb25maWcuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcY29uZmlnX3BzYS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xjdHJfZHJiZy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xkZWJ1Zy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xkZXMuaCIgLz4NCkBAIC0yMjMsNiArMjI0LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVccHNhXGNyeXB0by5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVccHNhXGNyeXB0b19hY2NlbF9kcml2ZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXHBzYVxjcnlwdG9fY29tcGF0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxwc2FcY3J5cHRvX2NvbmZpZy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVccHNhXGNyeXB0b19kcml2ZXJfY29tbW9uLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxwc2FcY3J5cHRvX2VudHJvcHlfZHJpdmVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxwc2FcY3J5cHRvX2V4dHJhLmgiIC8+DQpAQCAtMjM5LDkgKzI0MSwxMSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcaW5jbHVkZVx0ZXN0XHBzYV9oZWxwZXJzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcaW5jbHVkZVx0ZXN0XHJhbmRvbS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXGluY2x1ZGVcdGVzdFxkcml2ZXJzXGNpcGhlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXGluY2x1ZGVcdGVzdFxkcml2ZXJzXGtleWdlbi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXGluY2x1ZGVcdGVzdFxkcml2ZXJzXGtleV9tYW5hZ2VtZW50LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcaW5jbHVkZVx0ZXN0XGRyaXZlcnNcc2lnbmF0dXJlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcaW5jbHVkZVx0ZXN0XGRyaXZlcnNcc2l6ZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXGluY2x1ZGVcdGVzdFxkcml2ZXJzXHRlc3RfZHJpdmVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxjaGVja19jcnlwdG9fY29uZmlnLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxjb21tb24uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBzYV9jcnlwdG9fY29yZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlccHNhX2NyeXB0b19kcml2ZXJfd3JhcHBlcnMuaCIgLz4NCg==