ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggODExN2U3NS4uZTg0NmJhNCAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsNSArMSw1IEBACiAKLUxpYnBuZyAxLjAuMTFiZXRhMiAtIEFwcmlsIDExLCAyMDAxCitMaWJwbmcgMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMQogCiBUaGlzIGlzIGEgcHVibGljIHJlbGVhc2Ugb2YgbGlicG5nLCBpbnRlbmRlZCBmb3IgdXNlIGluIHByb2R1Y3Rpb24gY29kZXMuCiAKQEAgLTEwLDYgKzEwLDcgQEAKICAgQ2hhbmdlZCBzZXZlcmFsICIvLyIgc2luZ2xlLWxpbmUgY29tbWVudHMgdG8gQy1zdHlsZSBpbiBwbmdnY2NyZC5jCiAgIFJlbW92ZWQgUE5HQVBJIGZyb20gcHJpdmF0ZSBmdW5jdGlvbnMgd2hvc2UgcHJvdG90eXBlcyBkaWQgbm90IGhhdmUgUE5HQVBJLgogICBVcGRhdGVkIHNjcmlwdHMvcG5nb3MyLmRlZgorICBBZGRlZCBjaGVja2luZyB0aGUgcmVzdWx0cyBvZiBtYW55IGluc3RhbmNlcyBvZiBwbmdfbWFsbG9jKCkgZm9yIE5VTEwKIAogU2VuZCBjb21tZW50cy9jb3JyZWN0aW9ucy9jb21tZW5kYXRpb25zIHRvCiBwbmctaW1wbGVtZW50QGNjcmMud3VzdGwuZWR1IG9yIHRvIHJhbmRlZ0BhbHVtLnJwaS5lZHUKZGlmZiAtLWdpdCBhL0NIQU5HRVMgYi9DSEFOR0VTCmluZGV4IGVlY2Q1MWYuLjI3OTE3N2MgMTAwNjQ0Ci0tLSBhL0NIQU5HRVMKKysrIGIvQ0hBTkdFUwpAQCAtOTIxLDYgKzkyMSw4IEBACiB2ZXJzaW9uIDEuMC4xMWJldGEyIFtBcHJpbCAxMSwgMjAwMV0KICAgUmVtb3ZlZCBQTkdBUEkgZnJvbSBzZXZlcmFsIGZ1bmN0aW9ucyB3aG9zZSBwcm90b3R5cGVzIGRpZCBub3QgaGF2ZSBQTkdBUEkuCiAgIFVwZGF0ZWQgc2NyaXB0cy9wbmdvczIuZGVmCit2ZXJzaW9uIDEuMC4xMWJldGEzIFtBcHJpbCAxNSwgMjAwMV0KKyAgQWRkZWQgY2hlY2tpbmcgdGhlIHJlc3VsdHMgb2YgbWFueSBpbnN0YW5jZXMgb2YgcG5nX21hbGxvYygpIGZvciBOVUxMCiAKIFNlbmQgY29tbWVudHMvY29ycmVjdGlvbnMvY29tbWVuZGF0aW9ucyB0bwogcG5nLWltcGxlbWVudEBjY3JjLnd1c3RsLmVkdSBvciB0byByYW5kZWdAYWx1bS5ycGkuZWR1CmRpZmYgLS1naXQgYS9JTlNUQUxMIGIvSU5TVEFMTAppbmRleCBkYTAzZWJhLi45NDY3ZmIzIDEwMDY0NAotLS0gYS9JTlNUQUxMCisrKyBiL0lOU1RBTEwKQEAgLTEsNSArMSw1IEBACiAKLUluc3RhbGxpbmcgbGlicG5nIHZlcnNpb24gMS4wLjExYmV0YTIgLSBBcHJpbCAxMSwgMjAwMQorSW5zdGFsbGluZyBsaWJwbmcgdmVyc2lvbiAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCiAKIEJlZm9yZSBpbnN0YWxsaW5nIGxpYnBuZywgeW91IG11c3QgZmlyc3QgaW5zdGFsbCB6bGliLiAgemxpYgogY2FuIHVzdWFsbHkgYmUgZm91bmQgd2hlcmV2ZXIgeW91IGdvdCBsaWJwbmcuICB6bGliIGNhbiBiZQpAQCAtMTAsNyArMTAsNyBAQAogdmVyc2lvbiBvZiB6bGliIHRoYXQncyBpbnN0YWxsZWQuCiAKIFlvdSBjYW4gcmVuYW1lIHRoZSBkaXJlY3RvcmllcyB0aGF0IHlvdSBkb3dubG9hZGVkICh0aGV5Ci1taWdodCBiZSBjYWxsZWQgImxpYnBuZy0xLjAuMTFiZXRhMiIgb3IgImxwbmcxMDkiIGFuZCAiemxpYi0xLjEuMyIKK21pZ2h0IGJlIGNhbGxlZCAibGlicG5nLTEuMC4xMWJldGEzIiBvciAibHBuZzEwOSIgYW5kICJ6bGliLTEuMS4zIgogb3IgInpsaWIxMTMiKSBzbyB0aGF0IHlvdSBoYXZlIGRpcmVjdG9yaWVzIGNhbGxlZCAiemxpYiIgYW5kICJsaWJwbmciLgogCiBZb3VyIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc2hvdWxkIGxvb2sgbGlrZSB0aGlzOgpAQCAtNjAsOCArNjAsOCBAQAogaW5jbHVkZQogCiAgbWFrZWZpbGUuc3RkICAgICAgPT4gIEdlbmVyaWMgVU5JWCBtYWtlZmlsZSAoY2MsIGNyZWF0ZXMgc3RhdGljIGxpYnBuZy5hKQotIG1ha2VmaWxlLmxpbnV4ICAgID0+ICBMaW51eC9FTEYgbWFrZWZpbGUgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTFiZXRhMikKLSBtYWtlZmlsZS5nY21teCAgICA9PiAgTGludXgvRUxGIG1ha2VmaWxlIChnY2MsIGNyZWF0ZXMgbGlicG5nLnNvLjIuMS4wLjExYmV0YTIsCisgbWFrZWZpbGUubGludXggICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMC4xMWJldGEzKQorIG1ha2VmaWxlLmdjbW14ICAgID0+ICBMaW51eC9FTEYgbWFrZWZpbGUgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTFiZXRhMywKICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBhc3NlbWJsZXIgY29kZSB0dW5lZCBmb3IgSW50ZWwgTU1YIHBsYXRmb3JtKQogIG1ha2VmaWxlLmdjYyAgICAgID0+ICBHZW5lcmljIG1ha2VmaWxlIChnY2MsIGNyZWF0ZXMgc3RhdGljIGxpYnBuZy5hKQogIG1ha2VmaWxlLmtuciAgICAgID0+ICBBcmNoYWljIFVOSVggTWFrZWZpbGUgdGhhdCBjb252ZXJ0cyBmaWxlcyB3aXRoCkBAIC03Nyw5ICs3Nyw5IEBACiAgbGlicG5nLmljYyAgICAgICAgPT4gIFByb2plY3QgZmlsZSBmb3IgSUJNIFZpc3VhbEFnZS9DKysgdmVyc2lvbiA0LjAgb3IgbGF0ZXIKICBtYWtlZmlsZS5tYWNvc3ggICA9PiAgTUFDT1MgWCBNYWtlZmlsZQogIG1ha2VmaWxlLnNnaSAgICAgID0+ICBTaWxpY29uIEdyYXBoaWNzIElSSVggbWFrZWZpbGUgKGNjLCBjcmVhdGVzIHN0YXRpYyBsaWIpCi0gbWFrZWZpbGUuc2dnY2MgICAgPT4gIFNpbGljb24gR3JhcGhpY3MgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTFiZXRhMikKKyBtYWtlZmlsZS5zZ2djYyAgICA9PiAgU2lsaWNvbiBHcmFwaGljcyAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMC4xMWJldGEzKQogIG1ha2VmaWxlLnN1bm9zICAgID0+ICBTdW4gbWFrZWZpbGUKLSBtYWtlZmlsZS5zb2xhcmlzICA9PiAgU29sYXJpcyAyLlggbWFrZWZpbGUgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTFiZXRhMikKKyBtYWtlZmlsZS5zb2xhcmlzICA9PiAgU29sYXJpcyAyLlggbWFrZWZpbGUgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTFiZXRhMykKICBtYWtlZmlsZS5zY28gICAgICA9PiAgRm9yIFNDTyBPU3I1ICBFTEYgYW5kIFVuaXh3YXJlIDcgd2l0aCBOYXRpdmUgY2MKICBtYWtlZmlsZS5taXBzICAgICA9PiAgTUlQUyBtYWtlZmlsZQogIG1ha2VmaWxlLmFjb3JuICAgID0+ICBBY29ybiBtYWtlZmlsZQpkaWZmIC0tZ2l0IGEvS05PV05CVUcgYi9LTk9XTkJVRwppbmRleCAzNDc3YmE4Li5kNThkM2NkIDEwMDY0NAotLS0gYS9LTk9XTkJVRworKysgYi9LTk9XTkJVRwpAQCAtMjEsMyArMjEsOCBAQAogICAgaW52b2x2ZWQgYXJlIGFsbCBlaXRoZXIgZGVwcmVjYXRlZCBvciBpbnRlbmRlZCBvbmx5IGZvciBpbnRlcm5hbCB1c2UuCiAKICAgIFNUQVRVUzogUE5HQVBJIHdhcyByZW1vdmVkIGZyb20gdGhlIEMgY29kZSBpbiBsaWJwbmctMS4wLjExYmV0YTIuCisKKzQuIEFwcmlsIDE0LCAyMDAxOiBNYW55IGluc3RhbmNlcyBvZiBwbmdfbWFsbG9jKCkgYXJlIG5vdCBmb2xsb3dlZCBieQorICAgYSBjaGVjayB0byBtYWtlIHN1cmUgaXQgZGlkbid0IHJldHVybiBOVUxMLgorCisgICBTVEFUVVM6IHRlc3RzIHdlcmUgYWRkZWQgaW4gbGlicG5nLTEuMC4xMWJldGEzLgpkaWZmIC0tZ2l0IGEvTElDRU5TRSBiL0xJQ0VOU0UKaW5kZXggZmRlZWMzNS4uNjhjNTIzNSAxMDA2NDQKLS0tIGEvTElDRU5TRQorKysgYi9MSUNFTlNFCkBAIC04LDcgKzgsNyBAQAogSWYgeW91IG1vZGlmeSBsaWJwbmcgeW91IG1heSBpbnNlcnQgYWRkaXRpb25hbCBub3RpY2VzIGltbWVkaWF0ZWx5IGZvbGxvd2luZwogdGhpcyBzZW50ZW5jZS4KIAotbGlicG5nIHZlcnNpb25zIDEuMC43LCBKdWx5IDEsIDIwMDAsIHRocm91Z2ggMS4wLjExYmV0YTIsIEFwcmlsIDExLCAyMDAxLCBhcmUKK2xpYnBuZyB2ZXJzaW9ucyAxLjAuNywgSnVseSAxLCAyMDAwLCB0aHJvdWdoIDEuMC4xMWJldGEzLCBBcHJpbCAxNSwgMjAwMSwgYXJlCiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiBhbmQgYXJlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjAuNgogd2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzCkBAIC05OSw0ICs5OSw0IEBACiAKIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogcmFuZGVnQGFsdW0ucnBpLmVkdQotQXByaWwgMTEsIDIwMDEKK0FwcmlsIDE1LCAyMDAxCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggYmUxMDY3Zi4uZmE0NTJkMCAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMSw0ICsxLDQgQEAKLVJFQURNRSBmb3IgbGlicG5nIDEuMC4xMWJldGEyIC0gQXByaWwgMTEsIDIwMDEgKHNoYXJlZCBsaWJyYXJ5IDIuMSkKK1JFQURNRSBmb3IgbGlicG5nIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEgKHNoYXJlZCBsaWJyYXJ5IDIuMSkKIFNlZSB0aGUgbm90ZSBhYm91dCB2ZXJzaW9uIG51bWJlcnMgbmVhciB0aGUgdG9wIG9mIHBuZy5oCiAKIFNlZSBJTlNUQUxMIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGluc3RhbGwgbGlicG5nLgpAQCAtMTgzLDkgKzE4Myw5IEBACiAgICAgICAgZGVzY3JpcC5tbXMgICAgICA9PiAgVk1TIG1ha2VmaWxlIGZvciBNTVMgb3IgTU1LCiAgICAgICAgbWFrZWZpbGUuc3RkICAgICA9PiAgR2VuZXJpYyBVTklYIG1ha2VmaWxlIChjYywgY3JlYXRlcyBzdGF0aWMgbGlicG5nLmEpCiAgICAgICAgbWFrZWZpbGUubGludXggICA9PiAgTGludXgvRUxGIG1ha2VmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTFiZXRhMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMC4xMWJldGEzKQogICAgICAgIG1ha2VmaWxlLmdjbW14ICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicG5nLnNvLjIuMS4wLjExYmV0YTIsIHVzZXMgYXNzZW1ibGVyIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJwbmcuc28uMi4xLjAuMTFiZXRhMywgdXNlcyBhc3NlbWJsZXIgY29kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1bmVkIGZvciBJbnRlbCBNTVggcGxhdGZvcm0pCiAgICAgICAgbWFrZWZpbGUuZ2NjICAgICA9PiAgR2VuZXJpYyBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIHN0YXRpYyBsaWJwbmcuYSkKICAgICAgICBtYWtlZmlsZS5rbnIgICAgID0+ICBBcmNoYWljIFVOSVggTWFrZWZpbGUgdGhhdCBjb252ZXJ0cyBmaWxlcyB3aXRoCkBAIC0yMDEsMTAgKzIwMSwxMCBAQAogICAgICAgIGxpYnBuZy5pY2MgICAgICAgPT4gIFByb2plY3QgZmlsZSwgSUJNIFZpc3VhbEFnZS9DKysgNC4wIG9yIGxhdGVyCiAgICAgICAgbWFrZWZpbGUubWFjb3N4ICA9PiAgTUFDT1MgWCBNYWtlZmlsZQogICAgICAgIG1ha2VmaWxlLnNnaSAgICAgPT4gIFNpbGljb24gR3JhcGhpY3MgSVJJWCAoY2MsIGNyZWF0ZXMgc3RhdGljIGxpYikKLSAgICAgICBtYWtlZmlsZS5zZ2djYyAgID0+ICBTaWxpY29uIEdyYXBoaWNzIChnY2MsIGNyZWF0ZXMgbGlicG5nLnNvLjIuMS4wLjExYmV0YTIpCisgICAgICAgbWFrZWZpbGUuc2dnY2MgICA9PiAgU2lsaWNvbiBHcmFwaGljcyAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMC4xMWJldGEzKQogICAgICAgIG1ha2VmaWxlLnN1bm9zICAgPT4gIFN1biBtYWtlZmlsZQogICAgICAgIG1ha2VmaWxlLnNvbGFyaXMgPT4gIFNvbGFyaXMgMi5YIG1ha2VmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTFiZXRhMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMC4xMWJldGEzKQogICAgICAgIG1ha2VmaWxlLnNjbyAgICAgPT4gIEZvciBTQ08gT1NyNSAgRUxGIGFuZCBVbml4d2FyZSA3IHdpdGggTmF0aXZlIGNjCiAgICAgICAgbWFrZWZpbGUubWlwcyAgICA9PiAgTUlQUyBtYWtlZmlsZQogICAgICAgIG1ha2VmaWxlLmFjb3JuICAgPT4gIEFjb3JuIG1ha2VmaWxlCmRpZmYgLS1naXQgYS9ZMktJTkZPIGIvWTJLSU5GTwppbmRleCBlOTRmNTZmLi41NjcwZmY3IDEwMDY0NAotLS0gYS9ZMktJTkZPCisrKyBiL1kyS0lORk8KQEAgLTEsMTMgKzEsMTMgQEAKICAgIFkySyBjb21wbGlhbmNlIGluIGxpYnBuZzoKICAgID09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICAgICAgQXByaWwgMTEsIDIwMDEKKyAgICAgIEFwcmlsIDE1LCAyMDAxCiAKICAgICAgIFNpbmNlIHRoZSBQTkcgRGV2ZWxvcG1lbnQgZ3JvdXAgaXMgYW4gYWQtaG9jIGJvZHksIHdlIGNhbid0IG1ha2UKICAgICAgIGFuIG9mZmljaWFsIGRlY2xhcmF0aW9uLgogCiAgICAgICBUaGlzIGlzIHlvdXIgdW5vZmZpY2lhbCBhc3N1cmFuY2UgdGhhdCBsaWJwbmcgZnJvbSB2ZXJzaW9uIDAuNzEgYW5kCi0gICAgICB1cHdhcmQgdGhyb3VnaCAxLjAuMTFiZXRhMiBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKKyAgICAgIHVwd2FyZCB0aHJvdWdoIDEuMC4xMWJldGEzIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgogICAgICAgdmVyc2lvbnMgd2VyZSBhbHNvIFkySyBjb21wbGlhbnQuCiAKICAgICAgIExpYnBuZyBvbmx5IGhhcyB0aHJlZSB5ZWFyIGZpZWxkcy4gIE9uZSBpcyBhIDItYnl0ZSB1bnNpZ25lZCBpbnRlZ2VyCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggNjNlZDQyNy4uNDc3MDFiYSAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMSw1ICsxLDUgQEAKIGVjaG8gIgotICBUaGVyZSBpcyBubyBcImNvbmZpZ3VyZVwiIHNjcmlwdCBmb3IgTGlicG5nLTEuMC4xMWJldGEyLiAgSW5zdGVhZCwgcGxlYXNlCisgIFRoZXJlIGlzIG5vIFwiY29uZmlndXJlXCIgc2NyaXB0IGZvciBMaWJwbmctMS4wLjExYmV0YTMuICBJbnN0ZWFkLCBwbGVhc2UKICAgY29weSB0aGUgYXBwcm9wcmlhdGUgbWFrZWZpbGUgZm9yIHlvdXIgc3lzdGVtIGZyb20gdGhlIFwic2NyaXB0c1wiCiAgIGRpcmVjdG9yeS4gIFJlYWQgdGhlIElOU1RBTEwgZmlsZSBmb3IgbW9yZSBkZXRhaWxzLgogIgpkaWZmIC0tZ2l0IGEvZXhhbXBsZS5jIGIvZXhhbXBsZS5jCmluZGV4IDk1M2QyZDcuLjhhN2RhMjUgMTAwNjQ0Ci0tLSBhL2V4YW1wbGUuYworKysgYi9leGFtcGxlLmMKQEAgLTYwMyw3ICs2MDMsMTAgQEAKICAgICAgIFBOR19JTlRFUkxBQ0VfPz8/PywgUE5HX0NPTVBSRVNTSU9OX1RZUEVfQkFTRSwgUE5HX0ZJTFRFUl9UWVBFX0JBU0UpOwogCiAgICAvKiBzZXQgdGhlIHBhbGV0dGUgaWYgdGhlcmUgaXMgb25lLiAgUkVRVUlSRUQgZm9yIGluZGV4ZWQtY29sb3IgaW1hZ2VzICovCi0gICBwYWxldHRlID0gKHBuZ19jb2xvcnApcG5nX21hbGxvYyhwbmdfcHRyLCBQTkdfTUFYX1BBTEVUVEVfTEVOR1RIICogc2l6ZW9mIChwbmdfY29sb3IpKTsKKyAgIHBhbGV0dGUgPSAocG5nX2NvbG9ycClwbmdfbWFsbG9jKHBuZ19wdHIsIFBOR19NQVhfUEFMRVRURV9MRU5HVEgKKyAgICAgICAgICAgICAqIHNpemVvZiAocG5nX2NvbG9yKSk7CisgICBpZiAocGFsZXR0ZSA9PSBOVUxMKQorICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJFeGFtcGxlOiBtYWxsb2Mgb2YgcGFsZXR0ZSBmYWlsZWQiKTsKICAgIC8qIC4uLiBzZXQgcGFsZXR0ZSBjb2xvcnMgLi4uICovCiAgICBwbmdfc2V0X1BMVEUocG5nX3B0ciwgaW5mb19wdHIsIHBhbGV0dGUsIFBOR19NQVhfUEFMRVRURV9MRU5HVEgpOwogICAgLyogWW91IG11c3Qgbm90IGZyZWUgcGFsZXR0ZSBoZXJlLCBiZWNhdXNlIHBuZ19zZXRfUExURSBvbmx5IG1ha2VzIGEgbGluayB0bwpkaWZmIC0tZ2l0IGEvbGlicG5nLjMgYi9saWJwbmcuMwppbmRleCA4OGQ3NzViLi42NTcwMzliIDEwMDY0NAotLS0gYS9saWJwbmcuMworKysgYi9saWJwbmcuMwpAQCAtMSw2ICsxLDYgQEAKLS5USCBMSUJQTkcgMyAiQXByaWwgMTEsIDIwMDEiCisuVEggTElCUE5HIDMgIkFwcmlsIDE1LCAyMDAxIgogLlNIIE5BTUUKLWxpYnBuZyBcLSBQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzIChQTkcpIFJlZmVyZW5jZSBMaWJyYXJ5IDEuMC4xMWJldGEyCitsaWJwbmcgXC0gUG9ydGFibGUgTmV0d29yayBHcmFwaGljcyAoUE5HKSBSZWZlcmVuY2UgTGlicmFyeSAxLjAuMTFiZXRhMwogLlNIIFNZTk9QU0lTCiBcZklcZkIKIApAQCAtNzQ3LDcgKzc0Nyw3IEBACiAuU0ggTElCUE5HLlRYVAogbGlicG5nLnR4dCAtIEEgZGVzY3JpcHRpb24gb24gaG93IHRvIHVzZSBhbmQgbW9kaWZ5IGxpYnBuZwogCi0gbGlicG5nIHZlcnNpb24gMS4wLjExYmV0YTIgLSBBcHJpbCAxMSwgMjAwMQorIGxpYnBuZyB2ZXJzaW9uIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKICBVcGRhdGVkIGFuZCBkaXN0cmlidXRlZCBieSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICA8cmFuZGVnQGFsdW0ucnBpLmVkdT4KICBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTksIDIwMDAgR2xlbm4gUmFuZGVycy1QZWhyc29uCkBAIC0zNDY0LDEzICszNDY0LDEzIEBACiAKIC5TSCBWSUlJLiBZMksgQ29tcGxpYW5jZSBpbiBsaWJwbmcKIAotQXByaWwgMTEsIDIwMDEKK0FwcmlsIDE1LCAyMDAxCiAKIFNpbmNlIHRoZSBQTkcgRGV2ZWxvcG1lbnQgZ3JvdXAgaXMgYW4gYWQtaG9jIGJvZHksIHdlIGNhbid0IG1ha2UKIGFuIG9mZmljaWFsIGRlY2xhcmF0aW9uLgogCiBUaGlzIGlzIHlvdXIgdW5vZmZpY2lhbCBhc3N1cmFuY2UgdGhhdCBsaWJwbmcgZnJvbSB2ZXJzaW9uIDAuNzEgYW5kCi11cHdhcmQgdGhyb3VnaCAxLjAuMTFiZXRhMiBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKK3Vwd2FyZCB0aHJvdWdoIDEuMC4xMWJldGEzIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgogdmVyc2lvbnMgd2VyZSBhbHNvIFkySyBjb21wbGlhbnQuCiAKIExpYnBuZyBvbmx5IGhhcyB0aHJlZSB5ZWFyIGZpZWxkcy4gIE9uZSBpcyBhIDItYnl0ZSB1bnNpZ25lZCBpbnRlZ2VyIHRoYXQKQEAgLTM1NzksNyArMzU3OSw3IEBACiAgMS4wLjEwYmV0YTEgICAgICAgICAgMSAgICAxMDAxMCAgMi4xLjAuMTBiZXRhMQogIDEuMC4xMHJjMSAgICAgICAgICAgIDEgICAgMTAwMTAgIDIuMS4wLjEwcmMxCiAgMS4wLjEwICAgICAgICAgICAgICAgMSAgICAxMDAxMCAgMi4xLjAuMTAKLSAxLjAuMTFiZXRhMS0yICAgICAgICAxICAgIDEwMDExICAyLjEuMC4xMWJldGExLTIKKyAxLjAuMTFiZXRhMS0zICAgICAgICAxICAgIDEwMDExICAyLjEuMC4xMWJldGExLTMKIAogSGVuY2Vmb3J0aCB0aGUgc291cmNlIHZlcnNpb24gd2lsbCBtYXRjaCB0aGUgc2hhcmVkLWxpYnJhcnkgbWlub3IKIGFuZCBwYXRjaCBudW1iZXJzOyB0aGUgc2hhcmVkLWxpYnJhcnkgbWFqb3IgdmVyc2lvbiBudW1iZXIgd2lsbCBiZQpAQCAtMzYzNyw3ICszNjM3LDcgQEAKIAogVGhhbmtzIHRvIEZyYW5rIEouIFQuIFdvamNpayBmb3IgaGVscGluZyB3aXRoIHRoZSBkb2N1bWVudGF0aW9uLgogCi1MaWJwbmcgdmVyc2lvbiAxLjAuMTFiZXRhMiAtIEFwcmlsIDExLCAyMDAxOgorTGlicG5nIHZlcnNpb24gMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMToKIEluaXRpYWxseSBjcmVhdGVkIGluIDE5OTUgYnkgR3V5IEVyaWMgU2NoYWxuYXQsIHRoZW4gb2YgR3JvdXAgNDIsIEluYy4KIEN1cnJlbnRseSBtYWludGFpbmVkIGJ5IEdsZW5uIFJhbmRlcnMtUGVocnNvbiAocmFuZGVnQGFsdW0ucnBpLmVkdSkuCiAKQEAgLTM2NTQsNyArMzY1NCw3IEBACiBJZiB5b3UgbW9kaWZ5IGxpYnBuZyB5b3UgbWF5IGluc2VydCBhZGRpdGlvbmFsIG5vdGljZXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCiB0aGlzIHNlbnRlbmNlLgogCi1saWJwbmcgdmVyc2lvbnMgMS4wLjcsIEp1bHkgMSwgMjAwMCwgdGhyb3VnaCAgMS4wLjExYmV0YTIsIEFwcmlsIDExLCAyMDAxLCBhcmUKK2xpYnBuZyB2ZXJzaW9ucyAxLjAuNywgSnVseSAxLCAyMDAwLCB0aHJvdWdoICAxLjAuMTFiZXRhMywgQXByaWwgMTUsIDIwMDEsIGFyZQogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlCiBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMS4wLjYKIHdpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9ycwpAQCAtMzc0Niw3ICszNzQ2LDcgQEAKIAogR2xlbm4gUmFuZGVycy1QZWhyc29uCiByYW5kZWdAYWx1bS5ycGkuZWR1Ci1BcHJpbCAxMSwgMjAwMQorQXByaWwgMTUsIDIwMDEKIAogLlwiIGVuZCBvZiBtYW4gcGFnZQogCmRpZmYgLS1naXQgYS9saWJwbmcudHh0IGIvbGlicG5nLnR4dAppbmRleCAyZjBkODRiLi40MjVjZjMwIDEwMDY0NAotLS0gYS9saWJwbmcudHh0CisrKyBiL2xpYnBuZy50eHQKQEAgLTEsNiArMSw2IEBACiBsaWJwbmcudHh0IC0gQSBkZXNjcmlwdGlvbiBvbiBob3cgdG8gdXNlIGFuZCBtb2RpZnkgbGlicG5nCiAKLSBsaWJwbmcgdmVyc2lvbiAxLjAuMTFiZXRhMiAtIEFwcmlsIDExLCAyMDAxCisgbGlicG5nIHZlcnNpb24gMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMQogIFVwZGF0ZWQgYW5kIGRpc3RyaWJ1dGVkIGJ5IEdsZW5uIFJhbmRlcnMtUGVocnNvbgogIDxyYW5kZWdAYWx1bS5ycGkuZWR1PgogIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSwgMjAwMCBHbGVubiBSYW5kZXJzLVBlaHJzb24KQEAgLTI3MTcsMTMgKzI3MTcsMTMgQEAKIAogVklJSS4gWTJLIENvbXBsaWFuY2UgaW4gbGlicG5nCiAKLUFwcmlsIDExLCAyMDAxCitBcHJpbCAxNSwgMjAwMQogCiBTaW5jZSB0aGUgUE5HIERldmVsb3BtZW50IGdyb3VwIGlzIGFuIGFkLWhvYyBib2R5LCB3ZSBjYW4ndCBtYWtlCiBhbiBvZmZpY2lhbCBkZWNsYXJhdGlvbi4KIAogVGhpcyBpcyB5b3VyIHVub2ZmaWNpYWwgYXNzdXJhbmNlIHRoYXQgbGlicG5nIGZyb20gdmVyc2lvbiAwLjcxIGFuZAotdXB3YXJkIHRocm91Z2ggMS4wLjExYmV0YTIgYXJlIFkySyBjb21wbGlhbnQuICBJdCBpcyBteSBiZWxpZWYgdGhhdCBlYXJsaWVyCit1cHdhcmQgdGhyb3VnaCAxLjAuMTFiZXRhMyBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKIHZlcnNpb25zIHdlcmUgYWxzbyBZMksgY29tcGxpYW50LgogCiBMaWJwbmcgb25seSBoYXMgdGhyZWUgeWVhciBmaWVsZHMuICBPbmUgaXMgYSAyLWJ5dGUgdW5zaWduZWQgaW50ZWdlciB0aGF0CmRpZmYgLS1naXQgYS9saWJwbmdwZi4zIGIvbGlicG5ncGYuMwppbmRleCAwZTM1ZDAwLi5iNTAzZTE3IDEwMDY0NAotLS0gYS9saWJwbmdwZi4zCisrKyBiL2xpYnBuZ3BmLjMKQEAgLTEsNiArMSw2IEBACi0uVEggTElCUE5HUEYgMyAiQXByaWwgMTEsIDIwMDEiCisuVEggTElCUE5HUEYgMyAiQXByaWwgMTUsIDIwMDEiCiAuU0ggTkFNRQotbGlicG5nIFwtIFBvcnRhYmxlIE5ldHdvcmsgR3JhcGhpY3MgKFBORykgUmVmZXJlbmNlIExpYnJhcnkgMS4wLjExYmV0YTIKK2xpYnBuZyBcLSBQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzIChQTkcpIFJlZmVyZW5jZSBMaWJyYXJ5IDEuMC4xMWJldGEzCiAocHJpdmF0ZSBmdW5jdGlvbnMpCiAuU0ggU1lOT1BTSVMKIFxmQiNpbmNsdWRlIDxwbmcuaD5cZlAKZGlmZiAtLWdpdCBhL3BuZy41IGIvcG5nLjUKaW5kZXggMzNhOTk2Zi4uN2ZmNTg5OCAxMDA2NDQKLS0tIGEvcG5nLjUKKysrIGIvcG5nLjUKQEAgLTEsNCArMSw0IEBACi0uVEggUE5HIDUgIkFwcmlsIDExLCAyMDAxIgorLlRIIFBORyA1ICJBcHJpbCAxNSwgMjAwMSIKIC5TSCBOQU1FCiBwbmcgXC0gUG9ydGFibGUgTmV0d29yayBHcmFwaGljcyAoUE5HKSBmb3JtYXQKIC5TSCBERVNDUklQVElPTgpkaWZmIC0tZ2l0IGEvcG5nLmMgYi9wbmcuYwppbmRleCBkMzkyZDgzLi41OWZhYjVhIDEwMDY0NAotLS0gYS9wbmcuYworKysgYi9wbmcuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nLmMgLSBsb2NhdGlvbiBmb3IgZ2VuZXJhbCBwdXJwb3NlIGxpYnBuZyBmdW5jdGlvbnMKICAqCi0gKiBsaWJwbmcgdmVyc2lvbiAxLjAuMTFiZXRhMiAtIEFwcmlsIDExLCAyMDAxCisgKiBsaWJwbmcgdmVyc2lvbiAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQogICogKFZlcnNpb24gMC44OCBDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYgR3V5IEVyaWMgU2NoYWxuYXQsIEdyb3VwIDQyLCBJbmMuKQpAQCAtMTMsMTQgKzEzLDE0IEBACiAjaW5jbHVkZSAicG5nLmgiCiAKIC8qIEdlbmVyYXRlIGEgY29tcGlsZXIgZXJyb3IgaWYgdGhlcmUgaXMgYW4gb2xkIHBuZy5oIGluIHRoZSBzZWFyY2ggcGF0aC4gKi8KLXR5cGVkZWYgdmVyc2lvbl8xXzBfMTFiZXRhMiBZb3VyX3BuZ19oX2lzX25vdF92ZXJzaW9uXzFfMF8xMWJldGEyOwordHlwZWRlZiB2ZXJzaW9uXzFfMF8xMWJldGEzIFlvdXJfcG5nX2hfaXNfbm90X3ZlcnNpb25fMV8wXzExYmV0YTM7CiAKIC8qIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yIEMgZmlsZXMuICBUaGlzIGhhZCBiZXR0ZXIgbWF0Y2ggdGhlIHZlcnNpb24KICAqIHN0cmluZyBkZWZpbmVkIGluIHBuZy5oLiAgKi8KIAogI2lmZGVmIFBOR19VU0VfR0xPQkFMX0FSUkFZUwogLyogcG5nX2xpYnBuZ192ZXIgd2FzIGNoYW5nZWQgdG8gYSBmdW5jdGlvbiBpbiB2ZXJzaW9uIDEuMC41YyAqLwotY29uc3QgY2hhciBwbmdfbGlicG5nX3ZlclsxOF0gPSAiMS4wLjExYmV0YTIiOworY29uc3QgY2hhciBwbmdfbGlicG5nX3ZlclsxOF0gPSAiMS4wLjExYmV0YTMiOwogCiAvKiBwbmdfc2lnIHdhcyBjaGFuZ2VkIHRvIGEgZnVuY3Rpb24gaW4gdmVyc2lvbiAxLjAuNWMgKi8KIC8qIFBsYWNlIHRvIGhvbGQgdGhlIHNpZ25hdHVyZSBzdHJpbmcgZm9yIGEgUE5HIGZpbGUuICovCkBAIC0xNDIsMTUgKzE0MiwxOCBAQAogICAgcG5nX3ZvaWRwIHB0ciA9IChwbmdfdm9pZHApcG5nX21hbGxvYygocG5nX3N0cnVjdHApcG5nX3B0ciwgbnVtX2J5dGVzKTsKIAogI2lmbmRlZiBQTkdfTk9fWkFMTE9DX1pFUk8KLSAgIGlmIChudW1fYnl0ZXMgPiAocG5nX3VpbnRfMzIpMHg4MDAwTCkKKyAgIGlmIChwdHIpCiAgICB7Ci0gICAgICBwbmdfbWVtc2V0KHB0ciwgMCwgKHBuZ19zaXplX3QpMHg4MDAwTCk7Ci0gICAgICBwbmdfbWVtc2V0KChwbmdfYnl0ZXApcHRyICsgKHBuZ19zaXplX3QpMHg4MDAwTCwgMCwKLSAgICAgICAgIChwbmdfc2l6ZV90KShudW1fYnl0ZXMgLSAocG5nX3VpbnRfMzIpMHg4MDAwTCkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICAgcG5nX21lbXNldChwdHIsIDAsIChwbmdfc2l6ZV90KW51bV9ieXRlcyk7CisgICAgIGlmIChudW1fYnl0ZXMgPiAocG5nX3VpbnRfMzIpMHg4MDAwTCkKKyAgICAgeworICAgICAgICBwbmdfbWVtc2V0KHB0ciwgMCwgKHBuZ19zaXplX3QpMHg4MDAwTCk7CisgICAgICAgIHBuZ19tZW1zZXQoKHBuZ19ieXRlcClwdHIgKyAocG5nX3NpemVfdCkweDgwMDBMLCAwLAorICAgICAgICAgICAocG5nX3NpemVfdCkobnVtX2J5dGVzIC0gKHBuZ191aW50XzMyKTB4ODAwMEwpKTsKKyAgICAgfQorICAgICBlbHNlCisgICAgIHsKKyAgICAgICAgcG5nX21lbXNldChwdHIsIDAsIChwbmdfc2l6ZV90KW51bV9ieXRlcyk7CisgICAgIH0KICAgIH0KICNlbmRpZgogICAgcmV0dXJuICgodm9pZHBmKXB0cik7CkBAIC01ODEsMzQgKzU4NCwzOSBAQAogICAgICAgICAgc2l6ZW9mKGNoYXIpKSk7CiAgICB9CiAKKyAgIGlmIChwbmdfcHRyLT50aW1lX2J1ZmZlciA9PSBOVUxMKQorICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIk1hbGxvYyBvZiBidWZmZXIgZm9yIHRJTUUgY2h1bmsgZmFpbGVkIik7CisgICBlbHNlCisgICB7CiAjaWYgZGVmaW5lZChfV0lOMzJfV0NFKQotICB7Ci0gICAgIHdjaGFyX3QgdGltZV9idWZbMjldOwotICAgICB3c3ByaW50Zih0aW1lX2J1ZiwgVEVYVCgiJWQgJVMgJWQgJTAyZDolMDJkOiUwMmQgKzAwMDAiKSwKLSAgICAgICAgICAgICAgcHRpbWUtPmRheSAlIDMyLCBzaG9ydF9tb250aHNbKHB0aW1lLT5tb250aCAtIDEpICUgMTJdLAotICAgICAgICAgICAgICBwdGltZS0+eWVhciwgcHRpbWUtPmhvdXIgJSAyNCwgcHRpbWUtPm1pbnV0ZSAlIDYwLAotICAgICAgICAgICAgICBwdGltZS0+c2Vjb25kICUgNjEpOwotICAgICBXaWRlQ2hhclRvTXVsdGlCeXRlKENQX0FDUCwgMCwgdGltZV9idWYsIC0xLCBwbmdfcHRyLT50aW1lX2J1ZmZlciwgMjksCi0gICAgICAgIE5VTEwsIE5VTEwpOwotICB9CisgICAgIHsKKyAgICAgICAgd2NoYXJfdCB0aW1lX2J1ZlsyOV07CisgICAgICAgIHdzcHJpbnRmKHRpbWVfYnVmLCBURVhUKCIlZCAlUyAlZCAlMDJkOiUwMmQ6JTAyZCArMDAwMCIpLAorICAgICAgICAgICAgcHRpbWUtPmRheSAlIDMyLCBzaG9ydF9tb250aHNbKHB0aW1lLT5tb250aCAtIDEpICUgMTJdLAorICAgICAgICAgICAgcHRpbWUtPnllYXIsIHB0aW1lLT5ob3VyICUgMjQsIHB0aW1lLT5taW51dGUgJSA2MCwKKyAgICAgICAgICAgIHB0aW1lLT5zZWNvbmQgJSA2MSk7CisgICAgICAgIFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfQUNQLCAwLCB0aW1lX2J1ZiwgLTEsIHBuZ19wdHItPnRpbWVfYnVmZmVyLCAyOSwKKyAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgICB9CiAjZWxzZQogI2lmZGVmIFVTRV9GQVJfS0VZV09SRAotICAgewotICAgICAgY2hhciBuZWFyX3RpbWVfYnVmWzI5XTsKLSAgICAgIHNwcmludGYobmVhcl90aW1lX2J1ZiwgIiVkICVzICVkICUwMmQ6JTAyZDolMDJkICswMDAwIiwKLSAgICAgICAgICAgICAgIHB0aW1lLT5kYXkgJSAzMiwgc2hvcnRfbW9udGhzWyhwdGltZS0+bW9udGggLSAxKSAlIDEyXSwKLSAgICAgICAgICAgICAgIHB0aW1lLT55ZWFyLCBwdGltZS0+aG91ciAlIDI0LCBwdGltZS0+bWludXRlICUgNjAsCi0gICAgICAgICAgICAgICBwdGltZS0+c2Vjb25kICUgNjEpOwotICAgICAgcG5nX21lbWNweShwbmdfcHRyLT50aW1lX2J1ZmZlciwgbmVhcl90aW1lX2J1ZiwKLSAgICAgIDI5KnNpemVvZihjaGFyKSk7Ci0gICB9CisgICAgIHsKKyAgICAgICAgY2hhciBuZWFyX3RpbWVfYnVmWzI5XTsKKyAgICAgICAgc3ByaW50ZihuZWFyX3RpbWVfYnVmLCAiJWQgJXMgJWQgJTAyZDolMDJkOiUwMmQgKzAwMDAiLAorICAgICAgICAgICAgcHRpbWUtPmRheSAlIDMyLCBzaG9ydF9tb250aHNbKHB0aW1lLT5tb250aCAtIDEpICUgMTJdLAorICAgICAgICAgICAgcHRpbWUtPnllYXIsIHB0aW1lLT5ob3VyICUgMjQsIHB0aW1lLT5taW51dGUgJSA2MCwKKyAgICAgICAgICAgIHB0aW1lLT5zZWNvbmQgJSA2MSk7CisgICAgICAgIHBuZ19tZW1jcHkocG5nX3B0ci0+dGltZV9idWZmZXIsIG5lYXJfdGltZV9idWYsCisgICAgICAgICAgICAyOSpzaXplb2YoY2hhcikpOworICAgICB9CiAjZWxzZQogICAgc3ByaW50ZihwbmdfcHRyLT50aW1lX2J1ZmZlciwgIiVkICVzICVkICUwMmQ6JTAyZDolMDJkICswMDAwIiwKLSAgICAgICAgICAgICAgIHB0aW1lLT5kYXkgJSAzMiwgc2hvcnRfbW9udGhzWyhwdGltZS0+bW9udGggLSAxKSAlIDEyXSwKLSAgICAgICAgICAgICAgIHB0aW1lLT55ZWFyLCBwdGltZS0+aG91ciAlIDI0LCBwdGltZS0+bWludXRlICUgNjAsCi0gICAgICAgICAgICAgICBwdGltZS0+c2Vjb25kICUgNjEpOworICAgICAgIHB0aW1lLT5kYXkgJSAzMiwgc2hvcnRfbW9udGhzWyhwdGltZS0+bW9udGggLSAxKSAlIDEyXSwKKyAgICAgICBwdGltZS0+eWVhciwgcHRpbWUtPmhvdXIgJSAyNCwgcHRpbWUtPm1pbnV0ZSAlIDYwLAorICAgICAgIHB0aW1lLT5zZWNvbmQgJSA2MSk7CiAjZW5kaWYKICNlbmRpZiAvKiBfV0lOMzJfV0NFICovCisgICB9CiAgICByZXR1cm4gKChwbmdfY2hhcnApcG5nX3B0ci0+dGltZV9idWZmZXIpOwogfQogI2VuZGlmIC8qIFBOR19USU1FX1JGQzExMjNfU1VQUE9SVEVEICovCkBAIC02MjYsNyArNjM0LDcgQEAKIHBuZ19nZXRfY29weXJpZ2h0KHBuZ19zdHJ1Y3RwIHBuZ19wdHIpCiB7CiAgICBpZiAocG5nX3B0ciAhPSBOVUxMIHx8IHBuZ19wdHIgPT0gTlVMTCkgIC8qIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZyAqLwotICAgcmV0dXJuICgocG5nX2NoYXJwKSAiXG4gbGlicG5nIHZlcnNpb24gMS4wLjExYmV0YTIgLSBBcHJpbCAxMSwgMjAwMVxuXAorICAgcmV0dXJuICgocG5nX2NoYXJwKSAiXG4gbGlicG5nIHZlcnNpb24gMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMVxuXAogICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uXG5cCiAgICBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXJcblwKICAgIENvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBHdXkgRXJpYyBTY2hhbG5hdCwgR3JvdXAgNDIsIEluYy5cbiIpOwpAQCAtNjQ0LDggKzY1Miw4IEBACiB7CiAgICAvKiBWZXJzaW9uIG9mICouYyBmaWxlcyB1c2VkIHdoZW4gYnVpbGRpbmcgbGlicG5nICovCiAgICBpZihwbmdfcHRyICE9IE5VTEwpIC8qIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZyBhYm91dCB1bnVzZWQgcG5nX3B0ciAqLwotICAgICAgcmV0dXJuKChwbmdfY2hhcnApICIxLjAuMTFiZXRhMiIpOwotICAgcmV0dXJuKChwbmdfY2hhcnApICIxLjAuMTFiZXRhMiIpOworICAgICAgcmV0dXJuKChwbmdfY2hhcnApICIxLjAuMTFiZXRhMyIpOworICAgcmV0dXJuKChwbmdfY2hhcnApICIxLjAuMTFiZXRhMyIpOwogfQogCiBwbmdfY2hhcnAgUE5HQVBJCmRpZmYgLS1naXQgYS9wbmcuaCBiL3BuZy5oCmluZGV4IGQyYzFhOWMuLmI3OGJhYzUgMTAwNjQ0Ci0tLSBhL3BuZy5oCisrKyBiL3BuZy5oCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmcuaCAtIGhlYWRlciBmaWxlIGZvciBQTkcgcmVmZXJlbmNlIGxpYnJhcnkKICAqCi0gKiBsaWJwbmcgdmVyc2lvbiAxLjAuMTFiZXRhMiAtIEFwcmlsIDExLCAyMDAxCisgKiBsaWJwbmcgdmVyc2lvbiAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQogICogKFZlcnNpb24gMC44OCBDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYgR3V5IEVyaWMgU2NoYWxuYXQsIEdyb3VwIDQyLCBJbmMuKQpAQCAtOSw3ICs5LDcgQEAKICAqIEF1dGhvcnMgYW5kIG1haW50YWluZXJzOgogICogIGxpYnBuZyB2ZXJzaW9ucyAwLjcxLCBNYXkgMTk5NSwgdGhyb3VnaCAwLjg4LCBKYW51YXJ5IDE5OTY6IEd1eSBTY2hhbG5hdAogICogIGxpYnBuZyB2ZXJzaW9ucyAwLjg5YywgSnVuZSAxOTk2LCB0aHJvdWdoIDAuOTYsIE1heSAxOTk3OiBBbmRyZWFzIERpbGdlcgotICogIGxpYnBuZyB2ZXJzaW9ucyAwLjk3LCBKYW51YXJ5IDE5OTgsIHRocm91Z2ggMS4wLjExYmV0YTIgLSBBcHJpbCAxMSwgMjAwMTogR2xlbm4KKyAqICBsaWJwbmcgdmVyc2lvbnMgMC45NywgSmFudWFyeSAxOTk4LCB0aHJvdWdoIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDE6IEdsZW5uCiAgKiAgU2VlIGFsc28gIkNvbnRyaWJ1dGluZyBBdXRob3JzIiwgYmVsb3cuCiAgKgogICogTm90ZSBhYm91dCBsaWJwbmcgdmVyc2lvbiBudW1iZXJzOgpAQCAtNjcsNyArNjcsNyBAQAogICogICAgMS4wLjEwYmV0YTEgICAgICAgICAgICAgIDEgICAgMTAwMTAgIDIuMS4wLjEwYmV0YTEKICAqICAgIDEuMC4xMHJjMSAgICAgICAgICAgICAgICAxICAgIDEwMDEwICAyLjEuMC4xMHJjMQogICogICAgMS4wLjEwICAgICAgICAgICAgICAgICAgIDEgICAgMTAwMTAgIDIuMS4wLjEwCi0gKiAgICAxLjAuMTFiZXRhMS0yICAgICAgICAgICAgMSAgICAxMDAxMSAgMi4xLjAuMTFiZXRhMS0yCisgKiAgICAxLjAuMTFiZXRhMS0zICAgICAgICAgICAgMSAgICAxMDAxMSAgMi4xLjAuMTFiZXRhMS0zCiAgKgogICogICAgSGVuY2Vmb3J0aCB0aGUgc291cmNlIHZlcnNpb24gd2lsbCBtYXRjaCB0aGUgc2hhcmVkLWxpYnJhcnkgbWFqb3IKICAqICAgIGFuZCBtaW5vciBudW1iZXJzOyB0aGUgc2hhcmVkLWxpYnJhcnkgbWFqb3IgdmVyc2lvbiBudW1iZXIgd2lsbCBiZQpAQCAtOTcsNyArOTcsNyBAQAogICogSWYgeW91IG1vZGlmeSBsaWJwbmcgeW91IG1heSBpbnNlcnQgYWRkaXRpb25hbCBub3RpY2VzIGltbWVkaWF0ZWx5IGZvbGxvd2luZwogICogdGhpcyBzZW50ZW5jZS4KICAqCi0gKiBsaWJwbmcgdmVyc2lvbnMgMS4wLjcsIEp1bHkgMSwgMjAwMCwgdGhyb3VnaCAgMS4wLjExYmV0YTIsIEFwcmlsIDExLCAyMDAxLCBhcmUKKyAqIGxpYnBuZyB2ZXJzaW9ucyAxLjAuNywgSnVseSAxLCAyMDAwLCB0aHJvdWdoICAxLjAuMTFiZXRhMywgQXByaWwgMTUsIDIwMDEsIGFyZQogICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQogICogZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMC42CiAgKiB3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKQEAgLTIwMiwxMyArMjAyLDEzIEBACiAgKiBZMksgY29tcGxpYW5jZSBpbiBsaWJwbmc6CiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09CiAgKgotICogICAgQXByaWwgMTEsIDIwMDEKKyAqICAgIEFwcmlsIDE1LCAyMDAxCiAgKgogICogICAgU2luY2UgdGhlIFBORyBEZXZlbG9wbWVudCBncm91cCBpcyBhbiBhZC1ob2MgYm9keSwgd2UgY2FuJ3QgbWFrZQogICogICAgYW4gb2ZmaWNpYWwgZGVjbGFyYXRpb24uCiAgKgogICogICAgVGhpcyBpcyB5b3VyIHVub2ZmaWNpYWwgYXNzdXJhbmNlIHRoYXQgbGlicG5nIGZyb20gdmVyc2lvbiAwLjcxIGFuZAotICogICAgdXB3YXJkIHRocm91Z2ggMS4wLjExYmV0YTIgYXJlIFkySyBjb21wbGlhbnQuICBJdCBpcyBteSBiZWxpZWYgdGhhdCBlYXJsaWVyCisgKiAgICB1cHdhcmQgdGhyb3VnaCAxLjAuMTFiZXRhMyBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKICAqICAgIHZlcnNpb25zIHdlcmUgYWxzbyBZMksgY29tcGxpYW50LgogICoKICAqICAgIExpYnBuZyBvbmx5IGhhcyB0aHJlZSB5ZWFyIGZpZWxkcy4gIE9uZSBpcyBhIDItYnl0ZSB1bnNpZ25lZCBpbnRlZ2VyCkBAIC0yNjQsNyArMjY0LDcgQEAKICAqLwogCiAvKiBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciBwbmcuaCAtIHRoaXMgc2hvdWxkIG1hdGNoIHRoZSB2ZXJzaW9uIGluIHBuZy5jICovCi0jZGVmaW5lIFBOR19MSUJQTkdfVkVSX1NUUklORyAiMS4wLjExYmV0YTIiCisjZGVmaW5lIFBOR19MSUJQTkdfVkVSX1NUUklORyAiMS4wLjExYmV0YTMiCiAKICNkZWZpbmUgUE5HX0xJQlBOR19WRVJfU09OVU0gICAyCiAjZGVmaW5lIFBOR19MSUJQTkdfVkVSX0RMTE5VTSAgJURMTE5VTSUKQEAgLTI3Niw3ICsyNzYsNyBAQAogLyogVGhpcyBzaG91bGQgbWF0Y2ggdGhlIG51bWVyaWMgcGFydCBvZiB0aGUgZmluYWwgY29tcG9uZW50IG9mCiAgKiBQTkdfTElCUE5HX1ZFUl9TVFJJTkcsIG9taXR0aW5nIGFueSBsZWFkaW5nIHplcm86ICovCiAKLSNkZWZpbmUgUE5HX0xJQlBOR19WRVJfQlVJTEQgIDIKKyNkZWZpbmUgUE5HX0xJQlBOR19WRVJfQlVJTEQgIDMKIAogI2RlZmluZSBQTkdfTElCUE5HX0JVSUxEX0FMUEhBICAgIDEKICNkZWZpbmUgUE5HX0xJQlBOR19CVUlMRF9CRVRBICAgICAyCkBAIC0xMTg1LDkgKzExODUsOSBAQAogCiAKIC8qIFRoaXMgcHJldmVudHMgYSBjb21waWxlciBlcnJvciBpbiBwbmdfZ2V0X2NvcHlyaWdodCgpIGluIHBuZy5jIGlmIHBuZy5jCi1hbmQgcG5nLmggYXJlIGJvdGggYXQgKiB2ZXJzaW9uIDEuMC4xMWJldGEyCithbmQgcG5nLmggYXJlIGJvdGggYXQgKiB2ZXJzaW9uIDEuMC4xMWJldGEzCiAgKi8KLXR5cGVkZWYgcG5nX3N0cnVjdHAgdmVyc2lvbl8xXzBfMTFiZXRhMjsKK3R5cGVkZWYgcG5nX3N0cnVjdHAgdmVyc2lvbl8xXzBfMTFiZXRhMzsKIAogdHlwZWRlZiBwbmdfc3RydWN0IEZBUiAqIEZBUiAqIHBuZ19zdHJ1Y3RwcDsKIApAQCAtMjIzNSw3ICsyMjM1LDcgQEAKIC8qIE1haW50YWluZXI6IFB1dCBuZXcgcHVibGljIHByb3RvdHlwZXMgaGVyZSBeLCBpbiBsaWJwbmcuMywgYW5kIHByb2plY3QgZGVmcyAqLwogCiAjZGVmaW5lIFBOR19IRUFERVJfVkVSU0lPTl9TVFJJTkcgXAotICAgIiBsaWJwbmcgdmVyc2lvbiAxLjAuMTFiZXRhMiAtIEFwcmlsIDExLCAyMDAxIChoZWFkZXIpXG4iCisgICAiIGxpYnBuZyB2ZXJzaW9uIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEgKGhlYWRlcilcbiIKIAogI2lmZGVmIFBOR19SRUFEX0NPTVBPU0lURV9OT0RJVl9TVVBQT1JURUQKIC8qIFdpdGggdGhlc2Ugcm91dGluZXMgd2UgYXZvaWQgYW4gaW50ZWdlciBkaXZpZGUsIHdoaWNoIHdpbGwgYmUgc2xvd2VyIG9uCmRpZmYgLS1naXQgYS9wbmdhc21yZC5oIGIvcG5nYXNtcmQuaAppbmRleCBkNmQwMmNkLi5hYWI2MTYwIDEwMDY0NAotLS0gYS9wbmdhc21yZC5oCisrKyBiL3BuZ2FzbXJkLmgKQEAgLTEsNiArMSw2IEBACiAvKiBwbmdhc21yZC5oIC0gYXNzZW1ibGVyIHZlcnNpb24gb2YgdXRpbGl0aWVzIHRvIHJlYWQgYSBQTkcgZmlsZQogICoKLSAqIGxpYnBuZyAxLjAuMTFiZXRhMiAtIEFwcmlsIDExLCAyMDAxCisgKiBsaWJwbmcgMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKgpkaWZmIC0tZ2l0IGEvcG5nY29uZi5oIGIvcG5nY29uZi5oCmluZGV4IGFlNDg2YmIuLmM1NDc0NGIgMTAwNjQ0Ci0tLSBhL3BuZ2NvbmYuaAorKysgYi9wbmdjb25mLmgKQEAgLTEsNiArMSw2IEBACiAvKiBwbmdjb25mLmggLSBtYWNoaW5lIGNvbmZpZ3VyYWJsZSBmaWxlIGZvciBsaWJwbmcKICAqCi0gKiBsaWJwbmcgMS4wLjExYmV0YTIgLSBBcHJpbCAxMSwgMjAwMQorICogbGlicG5nIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKZGlmZiAtLWdpdCBhL3BuZ2Vycm9yLmMgYi9wbmdlcnJvci5jCmluZGV4IGRjNGMxM2QuLjllNzY5NzUgMTAwNjQ0Ci0tLSBhL3BuZ2Vycm9yLmMKKysrIGIvcG5nZXJyb3IuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nZXJyb3IuYyAtIHN0dWIgZnVuY3Rpb25zIGZvciBpL28gYW5kIG1lbW9yeSBhbGxvY2F0aW9uCiAgKgotICogbGlicG5nIDEuMC4xMWJldGEyIC0gQXByaWwgMTEsIDIwMDEKKyAqIGxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCmRpZmYgLS1naXQgYS9wbmdnY2NyZC5jIGIvcG5nZ2NjcmQuYwppbmRleCBhNWIxMjI4Li5hYzJiOGJiIDEwMDY0NAotLS0gYS9wbmdnY2NyZC5jCisrKyBiL3BuZ2djY3JkLmMKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgYW5kIGh0dHA6Ly93d3cuaW50ZWwuY29tL2RyZy9wZW50aXVtSUkvYXBwbm90ZXMvOTIzLzkyMy5odG0KICAqICAgICBmb3IgSW50ZWwncyBwZXJmb3JtYW5jZSBhbmFseXNpcyBvZiB0aGUgTU1YIHZzLiBub24tTU1YIGNvZGUuCiAgKgotICogbGlicG5nIHZlcnNpb24gMS4wLjExYmV0YTIgLSBBcHJpbCAxMSwgMjAwMQorICogbGlicG5nIHZlcnNpb24gMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIENvcHlyaWdodCAoYykgMTk5OCwgSW50ZWwgQ29ycG9yYXRpb24KZGlmZiAtLWdpdCBhL3BuZ2dldC5jIGIvcG5nZ2V0LmMKaW5kZXggYTQxMzk0OC4uZTA1YjJhZiAxMDA2NDQKLS0tIGEvcG5nZ2V0LmMKKysrIGIvcG5nZ2V0LmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ2dldC5jIC0gcmV0cmlldmFsIG9mIHZhbHVlcyBmcm9tIGluZm8gc3RydWN0CiAgKgotICogbGlicG5nIDEuMC4xMWJldGEyIC0gQXByaWwgMTEsIDIwMDEKKyAqIGxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCmRpZmYgLS1naXQgYS9wbmdtZW0uYyBiL3BuZ21lbS5jCmluZGV4IGM5YmZkMmMuLjNiYTdjNmEgMTAwNjQ0Ci0tLSBhL3BuZ21lbS5jCisrKyBiL3BuZ21lbS5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdtZW0uYyAtIHN0dWIgZnVuY3Rpb25zIGZvciBtZW1vcnkgYWxsb2NhdGlvbgogICoKLSAqIGxpYnBuZyAxLjAuMTFiZXRhMiAtIEFwcmlsIDExLCAyMDAxCisgKiBsaWJwbmcgMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpkaWZmIC0tZ2l0IGEvcG5ncHJlYWQuYyBiL3BuZ3ByZWFkLmMKaW5kZXggZTcwZDFmMC4uODE2YWJiZSAxMDA2NDQKLS0tIGEvcG5ncHJlYWQuYworKysgYi9wbmdwcmVhZC5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdwcmVhZC5jIC0gcmVhZCBhIHBuZyBmaWxlIGluIHB1c2ggbW9kZQogICoKLSAqIGxpYnBuZyAxLjAuMTFiZXRhMiAtIEFwcmlsIDExLCAyMDAxCisgKiBsaWJwbmcgMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtNTg1LDkgKzU4NSwxOCBAQAogICAgICAgb2xkX2J1ZmZlciA9IHBuZ19wdHItPnNhdmVfYnVmZmVyOwogICAgICAgcG5nX3B0ci0+c2F2ZV9idWZmZXIgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgIChwbmdfdWludF8zMiluZXdfbWF4KTsKLSAgICAgIHBuZ19tZW1jcHkocG5nX3B0ci0+c2F2ZV9idWZmZXIsIG9sZF9idWZmZXIsIHBuZ19wdHItPnNhdmVfYnVmZmVyX3NpemUpOwotICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgb2xkX2J1ZmZlcik7Ci0gICAgICBwbmdfcHRyLT5zYXZlX2J1ZmZlcl9tYXggPSBuZXdfbWF4OworICAgICAgaWYgKHBuZ19wdHItPnNhdmVfYnVmZmVyID09IChwbmdfYnl0ZXApTlVMTCkKKyAgICAgIHsKKyAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIk1hbGxvYyBvZiBzYXZlIGJ1ZmZlciBmYWlsZWQiKTsKKyAgICAgICAgcG5nX3B0ci0+c2F2ZV9idWZmZXI9b2xkX2J1ZmZlcjsKKyAgICAgICAgcG5nX3B0ci0+Y3VycmVudF9idWZmZXJfc2l6ZSA9IDA7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHBuZ19tZW1jcHkocG5nX3B0ci0+c2F2ZV9idWZmZXIsIG9sZF9idWZmZXIsIHBuZ19wdHItPnNhdmVfYnVmZmVyX3NpemUpOworICAgICAgICBwbmdfZnJlZShwbmdfcHRyLCBvbGRfYnVmZmVyKTsKKyAgICAgICAgcG5nX3B0ci0+c2F2ZV9idWZmZXJfbWF4ID0gbmV3X21heDsKKyAgICAgIH0KICAgIH0KICAgIGlmIChwbmdfcHRyLT5jdXJyZW50X2J1ZmZlcl9zaXplKQogICAgewpAQCAtMTAxNyw2ICsxMDI2LDEyIEBACiAKICAgIHBuZ19wdHItPmN1cnJlbnRfdGV4dCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgKHBuZ191aW50XzMyKShsZW5ndGgrMSkpOworICAgaWYgKHBuZ19wdHItPmN1cnJlbnRfdGV4dCA9PSAocG5nX2NoYXJwKU5VTEwpCisgICB7CisgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJtYWxsb2Mgb2YgY3VycmVudCB0ZXh0IGZhaWxlZCIpOworICAgICAgIHBuZ19wdHItPnNraXBfbGVuZ3RoPWxlbmd0aDsKKyAgICAgICByZXR1cm47CisgICB9CiAgICBwbmdfcHRyLT5jdXJyZW50X3RleHRbbGVuZ3RoXSA9ICdcMCc7CiAgICBwbmdfcHRyLT5jdXJyZW50X3RleHRfcHRyID0gcG5nX3B0ci0+Y3VycmVudF90ZXh0OwogICAgcG5nX3B0ci0+Y3VycmVudF90ZXh0X3NpemUgPSAocG5nX3NpemVfdClsZW5ndGg7CkBAIC0xMDY4LDYgKzEwODMsMTEgQEAKICAgICAgICAgIHRleHQrKzsKIAogICAgICAgdGV4dF9wdHIgPSAocG5nX3RleHRwKXBuZ19tYWxsb2MocG5nX3B0ciwgKHBuZ191aW50XzMyKXNpemVvZihwbmdfdGV4dCkpOworICAgICAgaWYgKHRleHRfcHRyID09IChwbmdfdGV4dHApTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIm1hbGxvYyBvZiB0ZXh0IGJ1ZmZlciBmYWlsZWQiKTsKKyAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICB0ZXh0X3B0ci0+Y29tcHJlc3Npb24gPSBQTkdfVEVYVF9DT01QUkVTU0lPTl9OT05FOwogICAgICAgdGV4dF9wdHItPmtleSA9IGtleTsKICNpZmRlZiBQTkdfaVRYdF9TVVBQT1JURUQKQEAgLTExMTAsNiArMTEzMCwxMiBAQAogCiAgICBwbmdfcHRyLT5jdXJyZW50X3RleHQgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAocG5nX3VpbnRfMzIpKGxlbmd0aCsxKSk7CisgICBpZiAocG5nX3B0ci0+Y3VycmVudF90ZXh0ID09IChwbmdfY2hhcnApTlVMTCkKKyAgIHsKKyAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAibWFsbG9jIG9mIHpUWHQgYnVmZmVyIGZhaWxlZCIpOworICAgICAgcG5nX3B1c2hfY3JjX3NraXAocG5nX3B0ciwgbGVuZ3RoKTsKKyAgICAgIHJldHVybjsKKyAgIH0KICAgIHBuZ19wdHItPmN1cnJlbnRfdGV4dFtsZW5ndGhdID0gJ1wwJzsKICAgIHBuZ19wdHItPmN1cnJlbnRfdGV4dF9wdHIgPSBwbmdfcHRyLT5jdXJyZW50X3RleHQ7CiAgICBwbmdfcHRyLT5jdXJyZW50X3RleHRfc2l6ZSA9IChwbmdfc2l6ZV90KWxlbmd0aDsKQEAgLTEyMDAsMTIgKzEyMjYsMTcgQEAKICAgICAgICAgICAgICAgIHRleHQgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgICAgIChwbmdfdWludF8zMikocG5nX3B0ci0+emJ1Zl9zaXplIC0gcG5nX3B0ci0+enN0cmVhbS5hdmFpbF9vdXQgKwogICAgICAgICAgICAgICAgICAgICAga2V5X3NpemUgKyAxKSk7Ci0gICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQgKyBrZXlfc2l6ZSwgcG5nX3B0ci0+emJ1ZiwKLSAgICAgICAgICAgICAgICAgIHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0KTsKLSAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCwga2V5LCBrZXlfc2l6ZSk7Ci0gICAgICAgICAgICAgICB0ZXh0X3NpemUgPSBrZXlfc2l6ZSArIHBuZ19wdHItPnpidWZfc2l6ZSAtCi0gICAgICAgICAgICAgICAgICBwbmdfcHRyLT56c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgICAgICAgICoodGV4dCArIHRleHRfc2l6ZSkgPSAnXDAnOworICAgICAgICAgICAgICAgaWYgKHRleHQgPT0gKHBuZ19jaGFycClOVUxMKQorICAgICAgICAgICAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiTWFsbG9jIG9mIHRleHQgYmxvY2sgZmFpbGVkIik7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCArIGtleV9zaXplLCBwbmdfcHRyLT56YnVmLAorICAgICAgICAgICAgICAgICAgICBwbmdfcHRyLT56YnVmX3NpemUgLSBwbmdfcHRyLT56c3RyZWFtLmF2YWlsX291dCk7CisgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCwga2V5LCBrZXlfc2l6ZSk7CisgICAgICAgICAgICAgICAgIHRleHRfc2l6ZSA9IGtleV9zaXplICsgcG5nX3B0ci0+emJ1Zl9zaXplIC0KKyAgICAgICAgICAgICAgICAgICAgcG5nX3B0ci0+enN0cmVhbS5hdmFpbF9vdXQ7CisgICAgICAgICAgICAgICAgICoodGV4dCArIHRleHRfc2l6ZSkgPSAnXDAnOworICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewpAQCAtMTIxNSwxMiArMTI0NiwxNyBAQAogICAgICAgICAgICAgICAgdGV4dCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCB0ZXh0X3NpemUgKwogICAgICAgICAgICAgICAgICAgKHBuZ191aW50XzMyKShwbmdfcHRyLT56YnVmX3NpemUgLSBwbmdfcHRyLT56c3RyZWFtLmF2YWlsX291dAogICAgICAgICAgICAgICAgICAgICsgMSkpOwotICAgICAgICAgICAgICAgcG5nX21lbWNweSh0ZXh0LCB0bXAsIHRleHRfc2l6ZSk7Ci0gICAgICAgICAgICAgICBwbmdfZnJlZShwbmdfcHRyLCB0bXApOwotICAgICAgICAgICAgICAgcG5nX21lbWNweSh0ZXh0ICsgdGV4dF9zaXplLCBwbmdfcHRyLT56YnVmLAotICAgICAgICAgICAgICAgICAgcG5nX3B0ci0+emJ1Zl9zaXplIC0gcG5nX3B0ci0+enN0cmVhbS5hdmFpbF9vdXQpOwotICAgICAgICAgICAgICAgdGV4dF9zaXplICs9IHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICAgICAgICAgKih0ZXh0ICsgdGV4dF9zaXplKSA9ICdcMCc7CisgICAgICAgICAgICAgICBpZiAodGV4dCAhPSAocG5nX2NoYXJwKU5VTEwpCisgICAgICAgICAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJNYWxsb2Mgb2YgbmV3IHRleHQgYmxvY2sgZmFpbGVkIik7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCwgdG1wLCB0ZXh0X3NpemUpOworICAgICAgICAgICAgICAgICBwbmdfZnJlZShwbmdfcHRyLCB0bXApOworICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQgKyB0ZXh0X3NpemUsIHBuZ19wdHItPnpidWYsCisgICAgICAgICAgICAgICAgICAgIHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0KTsKKyAgICAgICAgICAgICAgICAgdGV4dF9zaXplICs9IHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0OworICAgICAgICAgICAgICAgICAqKHRleHQgKyB0ZXh0X3NpemUpID0gJ1wwJzsKKyAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKQogICAgICAgICAgICAgewpAQCAtMTI1MiwxOCArMTI4OCwyMyBAQAogICAgICAgdGV4dCArPSBrZXlfc2l6ZTsKIAogICAgICAgdGV4dF9wdHIgPSAocG5nX3RleHRwKXBuZ19tYWxsb2MocG5nX3B0ciwgKHBuZ191aW50XzMyKXNpemVvZihwbmdfdGV4dCkpOwotICAgICAgdGV4dF9wdHItPmNvbXByZXNzaW9uID0gUE5HX1RFWFRfQ09NUFJFU1NJT05felRYdDsKLSAgICAgIHRleHRfcHRyLT5rZXkgPSBrZXk7CisgICAgICBpZiAodGV4dF9wdHIgPT0gKHBuZ190ZXh0cClOVUxMKQorICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJNYWxsb2Mgb2YgaVRYdCBmYWlsZWQiKTsKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdGV4dF9wdHItPmNvbXByZXNzaW9uID0gUE5HX1RFWFRfQ09NUFJFU1NJT05felRYdDsKKyAgICAgICAgdGV4dF9wdHItPmtleSA9IGtleTsKICNpZmRlZiBQTkdfaVRYdF9TVVBQT1JURUQKLSAgICAgIHRleHRfcHRyLT5sYW5nID0gKGNoYXIgKilOVUxMOwotICAgICAgdGV4dF9wdHItPmxhbmdfa2V5ID0gKGNoYXIgKilOVUxMOworICAgICAgICB0ZXh0X3B0ci0+bGFuZyA9IChjaGFyICopTlVMTDsKKyAgICAgICAgdGV4dF9wdHItPmxhbmdfa2V5ID0gKGNoYXIgKilOVUxMOwogI2VuZGlmCi0gICAgICB0ZXh0X3B0ci0+dGV4dCA9IHRleHQ7CisgICAgICAgIHRleHRfcHRyLT50ZXh0ID0gdGV4dDsKIAotICAgICAgcG5nX3NldF90ZXh0KHBuZ19wdHIsIGluZm9fcHRyLCB0ZXh0X3B0ciwgMSk7CisgICAgICAgIHBuZ19zZXRfdGV4dChwbmdfcHRyLCBpbmZvX3B0ciwgdGV4dF9wdHIsIDEpOwogCisgICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIHRleHRfcHRyKTsKKyAgICAgIH0KICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIGtleSk7Ci0gICAgICBwbmdfZnJlZShwbmdfcHRyLCB0ZXh0X3B0cik7CiAgICB9CiB9CiAjZW5kaWYKQEAgLTEyOTIsMTEgKzEzMzMsMTYgQEAKIAogICAgcG5nX3B0ci0+Y3VycmVudF90ZXh0ID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAocG5nX3VpbnRfMzIpKGxlbmd0aCsxKSk7Ci0gICBwbmdfcHRyLT5jdXJyZW50X3RleHRbbGVuZ3RoXSA9ICdcMCc7Ci0gICBwbmdfcHRyLT5jdXJyZW50X3RleHRfcHRyID0gcG5nX3B0ci0+Y3VycmVudF90ZXh0OwotICAgcG5nX3B0ci0+Y3VycmVudF90ZXh0X3NpemUgPSAocG5nX3NpemVfdClsZW5ndGg7Ci0gICBwbmdfcHRyLT5jdXJyZW50X3RleHRfbGVmdCA9IChwbmdfc2l6ZV90KWxlbmd0aDsKLSAgIHBuZ19wdHItPnByb2Nlc3NfbW9kZSA9IFBOR19SRUFEX2lUWHRfTU9ERTsKKyAgIGlmIChwbmdfcHRyLT5jdXJyZW50X3RleHQgPT0gKHBuZ19jaGFycClOVUxMKQorICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIm1hbGxvYyBvZiBpVFh0IGJ1ZmZlciBmYWlsZWQiKTsKKyAgIGVsc2UKKyAgICAgeworICAgICAgIHBuZ19wdHItPmN1cnJlbnRfdGV4dFtsZW5ndGhdID0gJ1wwJzsKKyAgICAgICBwbmdfcHRyLT5jdXJyZW50X3RleHRfcHRyID0gcG5nX3B0ci0+Y3VycmVudF90ZXh0OworICAgICAgIHBuZ19wdHItPmN1cnJlbnRfdGV4dF9zaXplID0gKHBuZ19zaXplX3QpbGVuZ3RoOworICAgICAgIHBuZ19wdHItPmN1cnJlbnRfdGV4dF9sZWZ0ID0gKHBuZ19zaXplX3QpbGVuZ3RoOworICAgICAgIHBuZ19wdHItPnByb2Nlc3NfbW9kZSA9IFBOR19SRUFEX2lUWHRfTU9ERTsKKyAgICAgfQogfQogCiB2b2lkIC8qIFBSSVZBVEUgKi8KQEAgLTEzNjAsNiArMTQwNiwxMCBAQAogICAgICAgICAgdGV4dCsrOwogCiAgICAgICB0ZXh0X3B0ciA9IChwbmdfdGV4dHApcG5nX21hbGxvYyhwbmdfcHRyLCAocG5nX3VpbnRfMzIpc2l6ZW9mKHBuZ190ZXh0KSk7CisgICAgICBpZih0ZXh0X3B0ciA9PSAocG5nX3RleHRwKU5VTEwpCisgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIk1hbGxvYyBvZiBpVFh0IHBvaW50ZXIgZmFpbGVkIik7CisgICAgICBlbHNlCisgICAgICB7CiAgICAgICB0ZXh0X3B0ci0+Y29tcHJlc3Npb24gPSBjb21wX2ZsYWcgKyAyOwogICAgICAgdGV4dF9wdHItPmtleSA9IGtleTsKICAgICAgIHRleHRfcHRyLT5sYW5nID0gbGFuZzsKQEAgLTEzNzEsNiArMTQyMSw3IEBACiAgICAgICBwbmdfc2V0X3RleHQocG5nX3B0ciwgaW5mb19wdHIsIHRleHRfcHRyLCAxKTsKIAogICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgdGV4dF9wdHIpOworICAgICAgfQogICAgfQogfQogI2VuZGlmCkBAIC0xNDE4LDI1ICsxNDY5LDMwIEBACiAKICAgICAgICBwbmdfc3RyY3B5KChwbmdfY2hhcnApY2h1bmsubmFtZSwgKHBuZ19jaGFycClwbmdfcHRyLT5jaHVua19uYW1lKTsKICAgICAgICBjaHVuay5kYXRhID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCk7Ci0gICAgICAgcG5nX2NyY19yZWFkKHBuZ19wdHIsIGNodW5rLmRhdGEsIGxlbmd0aCk7Ci0gICAgICAgY2h1bmsuc2l6ZSA9IGxlbmd0aDsKLSNpZiBkZWZpbmVkKFBOR19SRUFEX1VTRVJfQ0hVTktTX1NVUFBPUlRFRCkKLSAgICAgICBpZihwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4gIT0gKHBuZ191c2VyX2NodW5rX3B0cilOVUxMKQotICAgICAgIHsKLSAgICAgICAgICAvKiBjYWxsYmFjayB0byB1c2VyIHVua25vd24gY2h1bmsgaGFuZGxlciAqLwotICAgICAgICAgIGlmICgoKihwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4pKSAocG5nX3B0ciwgJmNodW5rKSA8PSAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICBpZiAoIShwbmdfcHRyLT5jaHVua19uYW1lWzBdICYgMHgyMCkpCi0gICAgICAgICAgICAgICAgaWYocG5nX2hhbmRsZV9hc191bmtub3duKHBuZ19wdHIsIHBuZ19wdHItPmNodW5rX25hbWUpICE9Ci0gICAgICAgICAgICAgICAgICAgICBIQU5ETEVfQ0hVTktfQUxXQVlTKQotICAgICAgICAgICAgICAgICAgIHBuZ19jaHVua19lcnJvcihwbmdfcHRyLCAidW5rbm93biBjcml0aWNhbCBjaHVuayIpOwotICAgICAgICAgIH0KLSAgICAgICAgICAgICBwbmdfc2V0X3Vua25vd25fY2h1bmtzKHBuZ19wdHIsIGluZm9fcHRyLCAmY2h1bmssIDEpOwotICAgICAgIH0KKyAgICAgICBpZiAoY2h1bmsuZGF0YSA9PSAocG5nX2J5dGVwKU5VTEwpCisgICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJNYWxsb2Mgb2YgdW5rbm93biBjaHVuayBkYXRhIGZhaWxlZCIpOwogICAgICAgIGVsc2UKKyAgICAgICB7CisgICAgICAgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgY2h1bmsuZGF0YSwgbGVuZ3RoKTsKKyAgICAgICAgIGNodW5rLnNpemUgPSBsZW5ndGg7CisjaWYgZGVmaW5lZChQTkdfUkVBRF9VU0VSX0NIVU5LU19TVVBQT1JURUQpCisgICAgICAgICBpZihwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4gIT0gKHBuZ191c2VyX2NodW5rX3B0cilOVUxMKQorICAgICAgICAgeworICAgICAgICAgICAgLyogY2FsbGJhY2sgdG8gdXNlciB1bmtub3duIGNodW5rIGhhbmRsZXIgKi8KKyAgICAgICAgICAgIGlmICgoKihwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4pKSAocG5nX3B0ciwgJmNodW5rKSA8PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgaWYgKCEocG5nX3B0ci0+Y2h1bmtfbmFtZVswXSAmIDB4MjApKQorICAgICAgICAgICAgICAgICAgaWYocG5nX2hhbmRsZV9hc191bmtub3duKHBuZ19wdHIsIHBuZ19wdHItPmNodW5rX25hbWUpICE9CisgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRV9DSFVOS19BTFdBWVMpCisgICAgICAgICAgICAgICAgICAgICBwbmdfY2h1bmtfZXJyb3IocG5nX3B0ciwgInVua25vd24gY3JpdGljYWwgY2h1bmsiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHBuZ19zZXRfdW5rbm93bl9jaHVua3MocG5nX3B0ciwgaW5mb19wdHIsICZjaHVuaywgMSk7CisgICAgICAgICB9CisgICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICBwbmdfc2V0X3Vua25vd25fY2h1bmtzKHBuZ19wdHIsIGluZm9fcHRyLCAmY2h1bmssIDEpOwotICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIGNodW5rLmRhdGEpOworICAgICAgICAgICAgcG5nX3NldF91bmtub3duX2NodW5rcyhwbmdfcHRyLCBpbmZvX3B0ciwgJmNodW5rLCAxKTsKKyAgICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIGNodW5rLmRhdGEpOworICAgICAgIH0KICAgIH0KICAgIGVsc2UKICNlbmRpZgpkaWZmIC0tZ2l0IGEvcG5ncmVhZC5jIGIvcG5ncmVhZC5jCmluZGV4IDk0OTg1MzguLjI4ZTY2ZDQgMTAwNjQ0Ci0tLSBhL3BuZ3JlYWQuYworKysgYi9wbmdyZWFkLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3JlYWQuYyAtIHJlYWQgYSBQTkcgZmlsZQogICoKLSAqIGxpYnBuZyAxLjAuMTFiZXRhMiAtIEFwcmlsIDExLCAyMDAxCisgKiBsaWJwbmcgMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMTE1LDYgKzExNSw4IEBACiAgICBwbmdfcHRyLT56YnVmX3NpemUgPSBQTkdfWkJVRl9TSVpFOwogICAgcG5nX3B0ci0+emJ1ZiA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAocG5nX3VpbnRfMzIpcG5nX3B0ci0+emJ1Zl9zaXplKTsKKyAgIGlmIChwbmdfcHRyLT56YnVmID09IChwbmdfYnl0ZXApTlVMTCkKKyAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIHpidWYiKTsKICAgIHBuZ19wdHItPnpzdHJlYW0uemFsbG9jID0gcG5nX3phbGxvYzsKICAgIHBuZ19wdHItPnpzdHJlYW0uemZyZWUgPSBwbmdfemZyZWU7CiAgICBwbmdfcHRyLT56c3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpcG5nX3B0cjsKQEAgLTE5Nyw2ICsxOTksOCBAQAogICAgcG5nX3B0ci0+emJ1Zl9zaXplID0gUE5HX1pCVUZfU0laRTsKICAgIHBuZ19wdHItPnpidWYgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgKHBuZ191aW50XzMyKXBuZ19wdHItPnpidWZfc2l6ZSk7CisgICBpZiAocG5nX3B0ci0+emJ1ZiA9PSAocG5nX2J5dGVwKU5VTEwpCisgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSB6YnVmIik7CiAgICBwbmdfcHRyLT56c3RyZWFtLnphbGxvYyA9IHBuZ196YWxsb2M7CiAgICBwbmdfcHRyLT56c3RyZWFtLnpmcmVlID0gcG5nX3pmcmVlOwogICAgcG5nX3B0ci0+enN0cmVhbS5vcGFxdWUgPSAodm9pZHBmKXBuZ19wdHI7CkBAIC03MTUsNyArNzE5LDcgQEAKICAqIG5vdCBjYWxsZWQgcG5nX3NldF9pbnRlcmxhY2VfaGFuZGxpbmcoKSwgdGhlIGRpc3BsYXlfcm93IGJ1ZmZlciB3aWxsCiAgKiBiZSBpZ25vcmVkLCBzbyBwYXNzIE5VTEwgdG8gaXQuCiAgKgotICogWypdIHBuZ19oYW5kbGVfYWxwaGEoKSBkb2VzIG5vdCBleGlzdCB5ZXQsIGFzIG9mIGxpYnBuZyB2ZXJzaW9uIDEuMC4xMWJldGEyCisgKiBbKl0gcG5nX2hhbmRsZV9hbHBoYSgpIGRvZXMgbm90IGV4aXN0IHlldCwgYXMgb2YgbGlicG5nIHZlcnNpb24gMS4wLjExYmV0YTMKICAqLwogCiB2b2lkIFBOR0FQSQpAQCAtNzY0LDcgKzc2OCw3IEBACiAgKiBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiBvbmNlLiAgSWYgeW91IGRlc2lyZSB0byBoYXZlIGFuIGltYWdlIGZvcgogICogZWFjaCBwYXNzIG9mIGEgaW50ZXJsYWNlZCBpbWFnZSwgdXNlIHBuZ19yZWFkX3Jvd3MoKSBpbnN0ZWFkLgogICoKLSAqIFsqXSBwbmdfaGFuZGxlX2FscGhhKCkgZG9lcyBub3QgZXhpc3QgeWV0LCBhcyBvZiBsaWJwbmcgdmVyc2lvbiAxLjAuMTFiZXRhMgorICogWypdIHBuZ19oYW5kbGVfYWxwaGEoKSBkb2VzIG5vdCBleGlzdCB5ZXQsIGFzIG9mIGxpYnBuZyB2ZXJzaW9uIDEuMC4xMWJldGEzCiAgKi8KIHZvaWQgUE5HQVBJCiBwbmdfcmVhZF9pbWFnZShwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfYnl0ZXBwIGltYWdlKQpAQCAtMTMwNSw3ICsxMzA5LDcgQEAKIAogICAgLyogT3B0aW9uYWwgY2FsbCB0byBnYW1tYSBjb3JyZWN0IGFuZCBhZGQgdGhlIGJhY2tncm91bmQgdG8gdGhlIHBhbGV0dGUKICAgICAqIGFuZCB1cGRhdGUgaW5mbyBzdHJ1Y3R1cmUuICBSRVFVSVJFRCBpZiB5b3UgYXJlIGV4cGVjdGluZyBsaWJwbmcgdG8KLSAgICAqIHVwZGF0ZSB0aGUgcGFsZXR0ZSBmb3IgeW91IChpZSB5b3Ugc2VsZWN0ZWQgc3VjaCBhIHRyYW5zZm9ybSBhYm92ZSkuCisgICAgKiB1cGRhdGUgdGhlIHBhbGV0dGUgZm9yIHlvdSAoaS5lLiwgeW91IHNlbGVjdGVkIHN1Y2ggYSB0cmFuc2Zvcm0gYWJvdmUpLgogICAgICovCiAgICBwbmdfcmVhZF91cGRhdGVfaW5mbyhwbmdfcHRyLCBpbmZvX3B0cik7CiAKQEAgLTEzMTcsMTMgKzEzMjEsMjYgQEAKICAgIGlmKGluZm9fcHRyLT5yb3dfcG9pbnRlcnMgPT0gTlVMTCkKICAgIHsKICAgICAgIGluZm9fcHRyLT5yb3dfcG9pbnRlcnMgPSAocG5nX2J5dGVwcClwbmdfbWFsbG9jKHBuZ19wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9fcHRyLT5oZWlnaHQgKiBzaXplb2YocG5nX2J5dGVwKSk7CisgICAgICAgICBpbmZvX3B0ci0+aGVpZ2h0ICogc2l6ZW9mKHBuZ19ieXRlcCkpOworICAgICAgaWYgKGluZm9fcHRyLT5yb3dfcG9pbnRlcnMpCisgICAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgInBuZ19yZWFkX3BuZyBjb3VsZCBub3QgYWxsb2NhdGUgcm93IHBvaW50ZXJzIik7CiAjaWZkZWYgUE5HX0ZSRUVfTUVfU1VQUE9SVEVECiAgICAgICBpbmZvX3B0ci0+ZnJlZV9tZSB8PSBQTkdfRlJFRV9ST1dTOwogI2VuZGlmCiAgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IChpbnQpaW5mb19wdHItPmhlaWdodDsgcm93KyspCisgICAgICB7CiAgICAgICAgICBpbmZvX3B0ci0+cm93X3BvaW50ZXJzW3Jvd10gPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgIHBuZ19nZXRfcm93Ynl0ZXMocG5nX3B0ciwgaW5mb19wdHIpKTsKKyAgICAgICAgIGlmIChpbmZvX3B0ci0+cm93X3BvaW50ZXJzKQorICAgICAgICAgeworICAgICAgICAgICAgaW50IGFsbG9jYXRlZF9yb3c7CisgICAgICAgICAgICBmb3IgKGFsbG9jYXRlZF9yb3c9MDsgYWxsb2NhdGVkX3JvdyA8IHJvdzsgYWxsb2NhdGVkX3JvdysrKQorICAgICAgICAgICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgaW5mb19wdHItPnJvd19wb2ludGVyc1thbGxvY2F0ZWRfcm93XSk7CisgICAgICAgICAgICBpZiAoaW5mb19wdHItPmZyZWVfbWUgJiAhKFBOR19GUkVFX1JPV1MpKQorICAgICAgICAgICAgICAgcG5nX2ZyZWUgKHBuZ19wdHIsIGluZm9fcHRyLT5yb3dfcG9pbnRlcnMpOworICAgICAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJwbmdfcmVhZF9wbmcgY291bGQgbm90IGFsbG9jYXRlIHJvdyBwb2ludGVyIik7CisgICAgICAgICB9CisgICAgICB9CiAgICB9CiAKICAgIHBuZ19yZWFkX2ltYWdlKHBuZ19wdHIsIGluZm9fcHRyLT5yb3dfcG9pbnRlcnMpOwpkaWZmIC0tZ2l0IGEvcG5ncmlvLmMgYi9wbmdyaW8uYwppbmRleCAyZWRjZWQ3Li5kNmQxZDcwIDEwMDY0NAotLS0gYS9wbmdyaW8uYworKysgYi9wbmdyaW8uYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5ncmlvLmMgLSBmdW5jdGlvbnMgZm9yIGRhdGEgaW5wdXQKICAqCi0gKiBsaWJwbmcgMS4wLjExYmV0YTIgLSBBcHJpbCAxMSwgMjAwMQorICogbGlicG5nIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKZGlmZiAtLWdpdCBhL3BuZ3J0cmFuLmMgYi9wbmdydHJhbi5jCmluZGV4IGM4NWJmODIuLjlhYjE1MmUgMTAwNjQ0Ci0tLSBhL3BuZ3J0cmFuLmMKKysrIGIvcG5ncnRyYW4uYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5ncnRyYW4uYyAtIHRyYW5zZm9ybXMgdGhlIGRhdGEgaW4gYSByb3cgZm9yIFBORyByZWFkZXJzCiAgKgotICogbGlicG5nIDEuMC4xMWJldGEyIC0gQXByaWwgMTEsIDIwMDEKKyAqIGxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC0xNTUsNiArMTU1LDExIEBACiAKICAgICAgIHBuZ19wdHItPmRpdGhlcl9pbmRleCA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgKHBuZ191aW50XzMyKShudW1fcGFsZXR0ZSAqIHNpemVvZiAocG5nX2J5dGUpKSk7CisgICAgICBpZiAocG5nX3B0ci0+ZGl0aGVyX2luZGV4ID09IChwbmdfYnl0ZXApTlVMTCkKKyAgICAgIHsKKyAgICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiTWFsbG9jIG9mIGRpdGhlciBpbmRleCBmYWlsZWQiKTsKKyAgICAgICAgIHJldHVybjsKKyAgICAgIH0KICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcGFsZXR0ZTsgaSsrKQogICAgICAgICAgcG5nX3B0ci0+ZGl0aGVyX2luZGV4W2ldID0gKHBuZ19ieXRlKWk7CiAgICB9CkBAIC0xNzIsNiArMTc3LDEyIEBACiAgICAgICAgICAvKiBpbml0aWFsaXplIGFuIGFycmF5IHRvIHNvcnQgY29sb3JzICovCiAgICAgICAgICBzb3J0ID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMikobnVtX3BhbGV0dGUKICAgICAgICAgICAgICogc2l6ZW9mIChwbmdfYnl0ZSkpKTsKKyAgICAgICAgIGlmIChzb3J0ID09IChwbmdfYnl0ZXApTlVMTCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiTWFsbG9jIG9mIHNvcnQgYXJyYXkgZm9yIGRpdGhlciBmYWlsZWQiKTsKKyAgICAgICAgICAgIHBuZ19mcmVlIChwbmdfcHRyLCBwbmdfcHRyLT5kaXRoZXJfaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQogCiAgICAgICAgICAvKiBpbml0aWFsaXplIHRoZSBzb3J0IGFycmF5ICovCiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3BhbGV0dGU7IGkrKykKQEAgLTMwMiw2ICszMTMsMTQgQEAKICAgICAgICAgICAgIChwbmdfdWludF8zMikobnVtX3BhbGV0dGUgKiBzaXplb2YgKHBuZ19ieXRlKSkpOwogICAgICAgICAgcGFsZXR0ZV90b19pbmRleCA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgICAgKHBuZ191aW50XzMyKShudW1fcGFsZXR0ZSAqIHNpemVvZiAocG5nX2J5dGUpKSk7CisgICAgICAgICBpZiAoaW5kZXhfdG9fcGFsZXR0ZSA9PSAocG5nX2J5dGVwKU5VTEwgfHwgcGFsZXR0ZV90b19pbmRleCA9PQorICAgICAgICAgICAgKHBuZ19ieXRlcClOVUxMKQorICAgICAgICAgeworICAgICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJNYWxsb2Mgb2YgaW5kZXggYXJyYXkgZm9yIGRpdGhlciBmYWlsZWQiKTsKKyAgICAgICAgICAgIHBuZ19mcmVlIChwbmdfcHRyLCBpbmRleF90b19wYWxldHRlKTsKKyAgICAgICAgICAgIHBuZ19mcmVlIChwbmdfcHRyLCBwbmdfcHRyLT5kaXRoZXJfaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQogCiAgICAgICAgICAvKiBpbml0aWFsaXplIHRoZSBzb3J0IGFycmF5ICovCiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3BhbGV0dGU7IGkrKykKQEAgLTMxMiw2ICszMzEsMTQgQEAKIAogICAgICAgICAgaGFzaCA9IChwbmdfZHNvcnRwcClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMikoNzY5ICoKICAgICAgICAgICAgIHNpemVvZiAocG5nX2Rzb3J0cCkpKTsKKyAgICAgICAgIGlmIChoYXNoID09IChwbmdfZHNvcnRwcClOVUxMKQorICAgICAgICAgeworICAgICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJNYWxsb2Mgb2YgaGFzaCBhcnJheSBmb3IgZGl0aGVyIGZhaWxlZCIpOworICAgICAgICAgICAgcG5nX2ZyZWUgKHBuZ19wdHIsIHBhbGV0dGVfdG9faW5kZXgpOworICAgICAgICAgICAgcG5nX2ZyZWUgKHBuZ19wdHIsIGluZGV4X3RvX3BhbGV0dGUpOworICAgICAgICAgICAgcG5nX2ZyZWUgKHBuZ19wdHIsIHBuZ19wdHItPmRpdGhlcl9pbmRleCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICB9CiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzY5OyBpKyspCiAgICAgICAgICAgICBoYXNoW2ldID0gTlVMTDsKIC8qICAgICAgICAgcG5nX21lbXNldChoYXNoLCAwLCA3NjkgKiBzaXplb2YgKHBuZ19kc29ydHApKTsgKi8KQEAgLTM0NiwxMCArMzczLDEzIEBACiAKICAgICAgICAgICAgICAgICAgICAgIHQgPSAocG5nX2Rzb3J0cClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMikoc2l6ZW9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBuZ19kc29ydCkpKTsKKyAgICAgICAgICAgICAgICAgICAgIGlmICh0ICE9IChwbmdfZHNvcnRwKU5VTEwpCisgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB0LT5uZXh0ID0gaGFzaFtkXTsKICAgICAgICAgICAgICAgICAgICAgIHQtPmxlZnQgPSAocG5nX2J5dGUpaTsKICAgICAgICAgICAgICAgICAgICAgIHQtPnJpZ2h0ID0gKHBuZ19ieXRlKWo7CiAgICAgICAgICAgICAgICAgICAgICBoYXNoW2RdID0gdDsKKyAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ1NiwxNiArNDg2LDI1IEBACiAKICAgICAgIHBuZ19wdHItPnBhbGV0dGVfbG9va3VwID0gKHBuZ19ieXRlcCApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgKHBuZ191aW50XzMyKShudW1fZW50cmllcyAqIHNpemVvZiAocG5nX2J5dGUpKSk7Ci0KLSAgICAgIHBuZ19tZW1zZXQocG5nX3B0ci0+cGFsZXR0ZV9sb29rdXAsIDAsIG51bV9lbnRyaWVzICogc2l6ZW9mIChwbmdfYnl0ZSkpOworICAgICAgaWYgKHBuZ19wdHItPnBhbGV0dGVfbG9va3VwID09IChwbmdfYnl0ZXApTlVMTCkKKyAgICAgIHsKKyAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJNYWxsb2Mgb2YgcGFsZXR0ZV9sb29rdXAgZm9yIGRpdGhlciBmYWlsZWQiKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcG5nX21lbXNldChwbmdfcHRyLT5wYWxldHRlX2xvb2t1cCwgMCwgbnVtX2VudHJpZXMgKiBzaXplb2YgKHBuZ19ieXRlKSk7CiAKICAgICAgIGRpc3RhbmNlID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMikobnVtX2VudHJpZXMgKgogICAgICAgICAgc2l6ZW9mKHBuZ19ieXRlKSkpOwotCi0gICAgICBwbmdfbWVtc2V0KGRpc3RhbmNlLCAweGZmLCBudW1fZW50cmllcyAqIHNpemVvZihwbmdfYnl0ZSkpOwotCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3BhbGV0dGU7IGkrKykKKyAgICAgIGlmIChkaXN0YW5jZSA9PSAocG5nX2J5dGVwKU5VTEwpCiAgICAgICB7CisgICAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiTWFsbG9jIG9mIGRpc3RhbmNlIGFycmF5IGZvciBkaXRoZXIgZmFpbGVkIik7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHBuZ19tZW1zZXQoZGlzdGFuY2UsIDB4ZmYsIG51bV9lbnRyaWVzICogc2l6ZW9mKHBuZ19ieXRlKSk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9wYWxldHRlOyBpKyspCisgICAgICAgIHsKICAgICAgICAgIGludCBpciwgaWcsIGliOwogICAgICAgICAgaW50IHIgPSAocGFsZXR0ZVtpXS5yZWQgPj4gKDggLSBQTkdfRElUSEVSX1JFRF9CSVRTKSk7CiAgICAgICAgICBpbnQgZyA9IChwYWxldHRlW2ldLmdyZWVuID4+ICg4IC0gUE5HX0RJVEhFUl9HUkVFTl9CSVRTKSk7CkBAIC00OTYsMTEgKzUzNSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgcG5nX3B0ci0+cGFsZXR0ZV9sb29rdXBbZF9pbmRleF0gPSAocG5nX2J5dGUpaTsKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLSAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICBwbmdfZnJlZShwbmdfcHRyLCBkaXN0YW5jZSk7CisgICAgICB9CiAgICB9CiB9CiAjZW5kaWYKQEAgLTM4NTgsNiArMzg5OCwxMSBAQAogCiAgICAgICBwbmdfcHRyLT5nYW1tYV90YWJsZSA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgKHBuZ191aW50XzMyKTI1Nik7CisgICAgICBpZiAocG5nX3B0ci0+Z2FtbWFfdGFibGUgPT0gKHBuZ19ieXRlcClOVUxMKQorICAgICAgeworICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJNYWxsb2Mgb2YgZ2FtbWEgdGFibGUgZmFpbGVkIik7CisgICAgICAgICByZXR1cm47CisgICAgICB9CiAKICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKICAgICAgIHsKQEAgLTM4NzQsNiArMzkxOSwxMSBAQAogCiAgICAgICAgICBwbmdfcHRyLT5nYW1tYV90b18xID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAocG5nX3VpbnRfMzIpMjU2KTsKKyAgICAgICAgIGlmIChwbmdfcHRyLT5nYW1tYV90b18xID09IChwbmdfYnl0ZXApTlVMTCkKKyAgICAgICAgIHsKKyAgICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiTWFsbG9jIG9mIGdhbW1hX3RvXzEgdGFibGUgZmFpbGVkIik7CisgICAgICAgICByZXR1cm47CisgICAgICAgICB9CiAKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKICAgICAgICAgIHsKQEAgLTM4ODQsNiArMzkzNCwxMSBAQAogCiAgICAgICAgICBwbmdfcHRyLT5nYW1tYV9mcm9tXzEgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgIChwbmdfdWludF8zMikyNTYpOworICAgICAgICAgaWYgKHBuZ19wdHItPmdhbW1hX2Zyb21fMSA9PSAocG5nX2J5dGVwKU5VTEwpCisgICAgICAgICB7CisgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIk1hbGxvYyBvZiBnYW1tYV9mcm9tXzEgdGFibGUgZmFpbGVkIik7CisgICAgICAgICByZXR1cm47CisgICAgICAgICB9CiAKICAgICAgICAgIGlmKHBuZ19wdHItPnNjcmVlbl9nYW1tYSA+IDAuMDAwMDAxKQogICAgICAgICAgICAgZyA9IDEuMCAvIHBuZ19wdHItPnNjcmVlbl9nYW1tYTsKQEAgLTM5NDYsNiArNDAwMSwxMSBAQAogCiAgICAgICBwbmdfcHRyLT5nYW1tYV8xNl90YWJsZSA9IChwbmdfdWludF8xNnBwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgIChwbmdfdWludF8zMikobnVtICogc2l6ZW9mIChwbmdfdWludF8xNnApKSk7CisgICAgICBpZiAocG5nX3B0ci0+Z2FtbWFfMTZfdGFibGUgPT0gKHBuZ191aW50XzE2cHApTlVMTCkKKyAgICAgIHsKKyAgICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiTWFsbG9jIG9mIGdhbW1hXzE2IHRhYmxlIGZhaWxlZCIpOworICAgICAgICAgcmV0dXJuOworICAgICAgfQogCiAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgKFBOR18xNl9UT184IHwgUE5HX0JBQ0tHUk9VTkQpKQogICAgICAgewpAQCAtMzk1Niw2ICs0MDE2LDExIEBACiAgICAgICAgICB7CiAgICAgICAgICAgICBwbmdfcHRyLT5nYW1tYV8xNl90YWJsZVtpXSA9IChwbmdfdWludF8xNnApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgICAgICAgKHBuZ191aW50XzMyKSgyNTYgKiBzaXplb2YgKHBuZ191aW50XzE2KSkpOworICAgICAgICAgICBpZiAocG5nX3B0ci0+Z2FtbWFfMTZfdGFibGVbaV0gPT0gKHBuZ191aW50XzE2cClOVUxMKQorICAgICAgICAgICB7CisgICAgICAgICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiTWFsbG9jIG9mIGdhbW1hXzE2IHRhYmxlIGVudHJ5IGZhaWxlZCIpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgIH0KICAgICAgICAgIH0KIAogICAgICAgICAgZyA9IDEuMCAvIGc7CkBAIC0zOTg2LDYgKzQwNTEsMTEgQEAKICAgICAgICAgIHsKICAgICAgICAgICAgIHBuZ19wdHItPmdhbW1hXzE2X3RhYmxlW2ldID0gKHBuZ191aW50XzE2cClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKDI1NiAqIHNpemVvZiAocG5nX3VpbnRfMTYpKSk7CisgICAgICAgICAgICBpZiAocG5nX3B0ci0+Z2FtbWFfMTZfdGFibGVbaV0gPT0gKHBuZ191aW50XzE2cClOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIk1hbGxvYyBvZiBnYW1tYV8xNiB0YWJsZSBlbnRyeSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZyA9ICgoKHBuZ191aW50XzMyKWkgKiAocG5nX3VpbnRfMzIpcG5nX2dhbW1hX3NoaWZ0W3NoaWZ0XSkgPj4gNCk7CiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgMjU2OyBqKyspCkBAIC00MDA2LDExICs0MDc2LDIyIEBACiAKICAgICAgICAgIHBuZ19wdHItPmdhbW1hXzE2X3RvXzEgPSAocG5nX3VpbnRfMTZwcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKG51bSAqIHNpemVvZiAocG5nX3VpbnRfMTZwICkpKTsKKyAgICAgICAgIGlmIChwbmdfcHRyLT5nYW1tYV8xNl90b18xID09IChwbmdfdWludF8xNnBwKU5VTEwpCisgICAgICAgICB7CisgICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIk1hbGxvYyBvZiBnYW1tYV8xNl90b18xIHRhYmxlIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQogCiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCiAgICAgICAgICB7CiAgICAgICAgICAgICBwbmdfcHRyLT5nYW1tYV8xNl90b18xW2ldID0gKHBuZ191aW50XzE2cClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKDI1NiAqIHNpemVvZiAocG5nX3VpbnRfMTYpKSk7CisgICAgICAgICAgICBpZiAocG5nX3B0ci0+Z2FtbWFfMTZfdG9fMVtpXSA9PSAocG5nX3VpbnRfMTZwKU5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwKKyAgICAgICAgICAgICAgICAgIk1hbGxvYyBvZiBnYW1tYV8xNl90b18xIHRhYmxlIGVudHJ5IGZhaWxlZCIpOworICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZyA9ICgoKHBuZ191aW50XzMyKWkgKgogICAgICAgICAgICAgICAgKHBuZ191aW50XzMyKXBuZ19nYW1tYV9zaGlmdFtzaGlmdF0pID4+IDQpOwpAQCAtNDAyOSwxMSArNDExMCwyMyBAQAogCiAgICAgICAgICBwbmdfcHRyLT5nYW1tYV8xNl9mcm9tXzEgPSAocG5nX3VpbnRfMTZwcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKG51bSAqIHNpemVvZiAocG5nX3VpbnRfMTZwKSkpOworICAgICAgICAgaWYgKHBuZ19wdHItPmdhbW1hXzE2X2Zyb21fMSA9PSAocG5nX3VpbnRfMTZwcClOVUxMKQorICAgICAgICAgeworICAgICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsCisgICAgICAgICAgICAgICJNYWxsb2Mgb2YgZ2FtbWFfMTZfZnJvbV8xIHRhYmxlIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQogCiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCiAgICAgICAgICB7CiAgICAgICAgICAgICBwbmdfcHRyLT5nYW1tYV8xNl9mcm9tXzFbaV0gPSAocG5nX3VpbnRfMTZwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgIChwbmdfdWludF8zMikoMjU2ICogc2l6ZW9mIChwbmdfdWludF8xNikpKTsKKyAgICAgICAgICAgIGlmIChwbmdfcHRyLT5nYW1tYV8xNl9mcm9tXzFbaV0gPT0gKHBuZ191aW50XzE2cClOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsCisgICAgICAgICAgICAgICAgICJNYWxsb2Mgb2YgZ2FtbWFfMTZfZnJvbV8xIHRhYmxlIGZhaWxlZCIpOworICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZyA9ICgoKHBuZ191aW50XzMyKWkgKgogICAgICAgICAgICAgICAgKHBuZ191aW50XzMyKXBuZ19nYW1tYV9zaGlmdFtzaGlmdF0pID4+IDQpOwpkaWZmIC0tZ2l0IGEvcG5ncnV0aWwuYyBiL3BuZ3J1dGlsLmMKaW5kZXggNWI5Yjc0NS4uNTIyYWYyYSAxMDA2NDQKLS0tIGEvcG5ncnV0aWwuYworKysgYi9wbmdydXRpbC5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdydXRpbC5jIC0gdXRpbGl0aWVzIHRvIHJlYWQgYSBQTkcgZmlsZQogICoKLSAqIGxpYnBuZyAxLjAuMTFiZXRhMiAtIEFwcmlsIDExLCAyMDAxCisgKiBsaWJwbmcgMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMjAxLDE1ICsyMDEsMTkgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRleHRfc2l6ZSA9IHByZWZpeF9zaXplICsgc2l6ZW9mKG1zZykgKyAxOwogICAgICAgICAgICAgICAgdGV4dCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCB0ZXh0X3NpemUpOwotICAgICAgICAgICAgICAgcG5nX21lbWNweSh0ZXh0LCBjaHVua2RhdGEsIHByZWZpeF9zaXplKTsKKyAgICAgICAgICAgICAgIGlmICh0ZXh0ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCwgY2h1bmtkYXRhLCBwcmVmaXhfc2l6ZSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHRleHRbdGV4dF9zaXplIC0gMV0gPSAweDAwOworICAgICAgICAgICAgaWYgKHRleHQgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHRleHRbdGV4dF9zaXplIC0gMV0gPSAweDAwOwogCi0gICAgICAgICAgICAvKiBDb3B5IHdoYXQgd2UgY2FuIG9mIHRoZSBlcnJvciBtZXNzYWdlIGludG8gdGhlIHRleHQgY2h1bmsgKi8KLSAgICAgICAgICAgIHRleHRfc2l6ZSA9IChwbmdfc2l6ZV90KShjaHVua2xlbmd0aCAtICh0ZXh0IC0gY2h1bmtkYXRhKSAtIDEpOwotICAgICAgICAgICAgdGV4dF9zaXplID0gc2l6ZW9mKG1zZykgPiB0ZXh0X3NpemUgPyB0ZXh0X3NpemUgOiBzaXplb2YobXNnKTsKLSAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCArIHByZWZpeF9zaXplLCBtc2csIHRleHRfc2l6ZSArIDEpOworICAgICAgICAgICAgICAgLyogQ29weSB3aGF0IHdlIGNhbiBvZiB0aGUgZXJyb3IgbWVzc2FnZSBpbnRvIHRoZSB0ZXh0IGNodW5rICovCisgICAgICAgICAgICAgICB0ZXh0X3NpemUgPSAocG5nX3NpemVfdCkoY2h1bmtsZW5ndGggLSAodGV4dCAtIGNodW5rZGF0YSkgLSAxKTsKKyAgICAgICAgICAgICAgIHRleHRfc2l6ZSA9IHNpemVvZihtc2cpID4gdGV4dF9zaXplID8gdGV4dF9zaXplIDogc2l6ZW9mKG1zZyk7CisgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQgKyBwcmVmaXhfc2l6ZSwgbXNnLCB0ZXh0X3NpemUgKyAxKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFwbmdfcHRyLT56c3RyZWFtLmF2YWlsX291dCB8fCByZXQgPT0gWl9TVFJFQU1fRU5EKQpAQCAtMjE5LDEwICsyMjMsMTMgQEAKICAgICAgICAgICAgICAgIHRleHRfc2l6ZSA9IHByZWZpeF9zaXplICsKICAgICAgICAgICAgICAgICAgICBwbmdfcHRyLT56YnVmX3NpemUgLSBwbmdfcHRyLT56c3RyZWFtLmF2YWlsX291dDsKICAgICAgICAgICAgICAgIHRleHQgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgdGV4dF9zaXplICsgMSk7Ci0gICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQgKyBwcmVmaXhfc2l6ZSwgcG5nX3B0ci0+emJ1ZiwKKyAgICAgICAgICAgICAgIGlmICh0ZXh0ICE9IE5VTEwpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCArIHByZWZpeF9zaXplLCBwbmdfcHRyLT56YnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X3NpemUgLSBwcmVmaXhfc2l6ZSk7Ci0gICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQsIGNodW5rZGF0YSwgcHJlZml4X3NpemUpOwotICAgICAgICAgICAgICAgKih0ZXh0ICsgdGV4dF9zaXplKSA9IDB4MDA7CisgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCwgY2h1bmtkYXRhLCBwcmVmaXhfc2l6ZSk7CisgICAgICAgICAgICAgICAgICoodGV4dCArIHRleHRfc2l6ZSkgPSAweDAwOworICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewpAQCAtMjMxLDEyICsyMzgsMjAgQEAKICAgICAgICAgICAgICAgIHRtcCA9IHRleHQ7CiAgICAgICAgICAgICAgICB0ZXh0ID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMikodGV4dF9zaXplICsKICAgICAgICAgICAgICAgICAgIHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0ICsgMSkpOworICAgICAgICAgICAgICAgaWYgKHRleHQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCwgdG1wLCB0ZXh0X3NpemUpOwogICAgICAgICAgICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgdG1wKTsKICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCArIHRleHRfc2l6ZSwgcG5nX3B0ci0+emJ1ZiwKICAgICAgICAgICAgICAgICAgIChwbmdfcHRyLT56YnVmX3NpemUgLSBwbmdfcHRyLT56c3RyZWFtLmF2YWlsX291dCkpOwogICAgICAgICAgICAgICAgdGV4dF9zaXplICs9IHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0OwogICAgICAgICAgICAgICAgKih0ZXh0ICsgdGV4dF9zaXplKSA9IDB4MDA7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBtYWxsb2MgdGV4dCBidWZmZXIiKTsKKyAgICAgICAgICAgICAgICAgIHRleHQ9dG1wOworICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpCiAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI3MCw5ICsyODUsMTMgQEAKICAgICAgICAgIGlmICh0ZXh0ID09ICBOVUxMKQogICAgICAgICAgewogICAgICAgICAgICAgdGV4dCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCB0ZXh0X3NpemUrMSk7Ci0gICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQsIGNodW5rZGF0YSwgcHJlZml4X3NpemUpOworICAgICAgICAgICAgaWYgKHRleHQgIT0gIE5VTEwpCisgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQsIGNodW5rZGF0YSwgcHJlZml4X3NpemUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIkNvdWxkIG5vdCBtYWxsb2MgdGV4dCBjaHVua2RhdGEiKTsKICAgICAgICAgIH0KLSAgICAgICAgICoodGV4dCArIHRleHRfc2l6ZSkgPSAweDAwOworICAgICAgICAgaWYgKHRleHQgIT0gIE5VTEwpCisgICAgICAgICAgICAqKHRleHQgKyB0ZXh0X3NpemUpID0gMHgwMDsKICAgICAgIH0KIAogICAgICAgaW5mbGF0ZVJlc2V0KCZwbmdfcHRyLT56c3RyZWFtKTsKQEAgLTk4Myw3ICsxMDAyLDE0IEBACiAKICAgIGNodW5rZGF0YSA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGggKyAxKTsKICAgIHNsZW5ndGggPSAocG5nX3NpemVfdClsZW5ndGg7Ci0gICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcCljaHVua2RhdGEsIHNsZW5ndGgpOworICAgaWYgKGNodW5rZGF0YSAhPSAocG5nX2NoYXJwKU5VTEwpCisgICAgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcCljaHVua2RhdGEsIHNsZW5ndGgpOworICAgZWxzZQorICAgeworICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlDQ1AgY2h1bmsiKTsKKyAgICAgIHBuZ19jcmNfZmluaXNoKHBuZ19wdHIsIHNsZW5ndGgpOworICAgICAgcmV0dXJuOworICAgfQogCiAgICBpZiAocG5nX2NyY19maW5pc2gocG5nX3B0ciwgc2tpcCkpCiAgICB7CkBAIC0xMDc5LDggKzExMDUsMTYgQEAKICNlbmRpZgogCiAgICBjaHVua2RhdGEgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwgbGVuZ3RoICsgMSk7Ci0gICBzbGVuZ3RoID0gKHBuZ19zaXplX3QpbGVuZ3RoOwotICAgcG5nX2NyY19yZWFkKHBuZ19wdHIsIGNodW5rZGF0YSwgc2xlbmd0aCk7CisgICBpZiAoY2h1bmtkYXRhICE9IChwbmdfYnl0ZXApTlVMTCkKKyAgIHsKKyAgICAgIHNsZW5ndGggPSAocG5nX3NpemVfdClsZW5ndGg7CisgICAgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcCljaHVua2RhdGEsIHNsZW5ndGgpOworICAgfQorICAgZWxzZQorICAgeworICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHNQTFQgY2h1bmsiKTsKKyAgICAgIHNraXAgPSAocG5nX3NpemVfdClsZW5ndGg7CisgICB9CiAKICAgIGlmIChwbmdfY3JjX2ZpbmlzaChwbmdfcHRyLCBza2lwKSkKICAgIHsKQEAgLTExMTAsMTIgKzExNDQsMTkgQEAKICAgIGlmIChkYXRhX2xlbmd0aCAlIGVudHJ5X3NpemUpCiAgICB7CiAgICAgICBwbmdfZnJlZShwbmdfcHRyLCBjaHVua2RhdGEpOwotICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJzUExUIGNodW5rIGhhcyBiYWQgbGVuZ3RoIik7CisgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAic1BMVCBjaHVuayBoYXMgYmFkIGxlbmd0aCIpOworICAgICAgcmV0dXJuOwogICAgfQogCiAgICBuZXdfcGFsZXR0ZS5uZW50cmllcyA9IGRhdGFfbGVuZ3RoIC8gZW50cnlfc2l6ZTsKICAgIG5ld19wYWxldHRlLmVudHJpZXMgPSAocG5nX3NQTFRfZW50cnlwKXBuZ19tYWxsb2MoCiAgICAgICAgcG5nX3B0ciwgbmV3X3BhbGV0dGUubmVudHJpZXMgKiBzaXplb2YocG5nX3NQTFRfZW50cnkpKTsKKyAgIGlmIChuZXdfcGFsZXR0ZS5lbnRyaWVzID09IChwbmdfc1BMVF9lbnRyeXApTlVMTCkKKyAgIHsKKyAgICAgICBwbmdfZnJlZShwbmdfcHRyLCBjaHVua2RhdGEpOworICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIHNQTFQgZW50cmllcyIpOworICAgICAgIHJldHVybjsKKyAgIH0KIAogI2lmbmRlZiBQTkdfTk9fUE9JTlRFUl9JTkRFWElORwogICAgZm9yIChpID0gMDsgaSA8IG5ld19wYWxldHRlLm5lbnRyaWVzOyBpKyspCkBAIC0xNTI1LDYgKzE1NjYsMTIgQEAKICAgIHBuZ19kZWJ1ZzEoMiwgIkFsbG9jYXRpbmcgYW5kIHJlYWRpbmcgcENBTCBjaHVuayBkYXRhICglbHUgYnl0ZXMpXG4iLAogICAgICAgbGVuZ3RoICsgMSk7CiAgICBwdXJwb3NlID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCArIDEpOworICAgaWYgKHB1cnBvc2UgPT0gKHBuZ19jaGFycClOVUxMKQorICAgeworICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBDQUwgcHVycG9zZSIpOworICAgICBwbmdfY3JjX2ZpbmlzaChwbmdfcHRyLCBsZW5ndGgpOworICAgICByZXR1cm47CisgICB9CiAgICBzbGVuZ3RoID0gKHBuZ19zaXplX3QpbGVuZ3RoOwogICAgcG5nX2NyY19yZWFkKHBuZ19wdHIsIChwbmdfYnl0ZXApcHVycG9zZSwgc2xlbmd0aCk7CiAKQEAgLTE1ODEsNiArMTYyOCwxMSBAQAogICAgcG5nX2RlYnVnKDMsICJBbGxvY2F0aW5nIHBDQUwgcGFyYW1ldGVycyBhcnJheVxuIik7CiAgICBwYXJhbXMgPSAocG5nX2NoYXJwcClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMikobnBhcmFtcwogICAgICAgKnNpemVvZihwbmdfY2hhcnApKSkgOworICAgaWYgKHBhcmFtcyA9PSAocG5nX2NoYXJwcClOVUxMKQorICAgeworICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgcENBTCBwYXJhbWV0ZXJzIGFycmF5Iik7CisgICAgICBucGFyYW1zPTA7CisgICB9CiAKICAgIC8qIEdldCBwb2ludGVycyB0byB0aGUgc3RhcnQgb2YgZWFjaCBwYXJhbWV0ZXIgc3RyaW5nLiAqLwogICAgZm9yIChpID0gMDsgaSA8IChpbnQpbnBhcmFtczsgaSsrKQpAQCAtMTY0NSw2ICsxNjk3LDEyIEBACiAgICBwbmdfZGVidWcxKDIsICJBbGxvY2F0aW5nIGFuZCByZWFkaW5nIHNDQUwgY2h1bmsgZGF0YSAoJWx1IGJ5dGVzKVxuIiwKICAgICAgIGxlbmd0aCArIDEpOwogICAgYnVmZmVyID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCArIDEpOworICAgaWYgKGJ1ZmZlciA9PSAocG5nX2NoYXJwKU5VTEwpCisgICB7CisgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3Igc0NBTCBidWZmZXIiKTsKKyAgICAgcG5nX2NyY19maW5pc2gocG5nX3B0ciwgbGVuZ3RoKTsKKyAgICAgcmV0dXJuOworICAgfQogICAgc2xlbmd0aCA9IChwbmdfc2l6ZV90KWxlbmd0aDsKICAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCAocG5nX2J5dGVwKWJ1ZmZlciwgc2xlbmd0aCk7CiAKQEAgLTE2NjgsNyArMTcyNiw4IEBACiAjZWxzZQogI2lmZGVmIFBOR19GSVhFRF9QT0lOVF9TVVBQT1JURUQKICAgIHN3aWR0aCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBwbmdfc3RybGVuKGVwKSArIDEpOwotICAgcG5nX21lbWNweShzd2lkdGgsIGVwLCAocG5nX3NpemVfdClwbmdfc3RybGVuKGVwKSk7CisgICBpZiAoc3dpZHRoICE9IChwbmdfY2hhcnApTlVMTCkKKyAgICAgcG5nX21lbWNweShzd2lkdGgsIGVwLCAocG5nX3NpemVfdClwbmdfc3RybGVuKGVwKSk7CiAjZW5kaWYKICNlbmRpZgogCkBAIC0xNjg2LDcgKzE3NDUsOCBAQAogI2Vsc2UKICNpZmRlZiBQTkdfRklYRURfUE9JTlRfU1VQUE9SVEVECiAgICBzaGVpZ2h0ID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIHBuZ19zdHJsZW4oZXApICsgMSk7Ci0gICBwbmdfbWVtY3B5KHNoZWlnaHQsIGVwLCAocG5nX3NpemVfdClwbmdfc3RybGVuKGVwKSk7CisgICBpZiAoc2hlaWdodCAhPSAocG5nX2NoYXJwKU5VTEwpCisgICAgICBwbmdfbWVtY3B5KHNoZWlnaHQsIGVwLCAocG5nX3NpemVfdClwbmdfc3RybGVuKGVwKSk7CiAjZW5kaWYKICNlbmRpZgogCkBAIC0xNzk1LDcgKzE4NTUsMTQgQEAKIAogICAga2V5ID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCArIDEpOwogICAgc2xlbmd0aCA9IChwbmdfc2l6ZV90KWxlbmd0aDsKLSAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCAocG5nX2J5dGVwKWtleSwgc2xlbmd0aCk7CisgICBpZiAoa2V5ID09IChwbmdfY2hhcnApTlVMTCkKKyAgIHsKKyAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdEVYdCBjaHVuayIpOworICAgICAgcG5nX2NyY19maW5pc2gocG5nX3B0ciwgc2xlbmd0aCk7CisgICAgICByZXR1cm47CisgICB9CisgICBlbHNlCisgICAgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcClrZXksIHNsZW5ndGgpOwogCiAgICBpZiAocG5nX2NyY19maW5pc2gocG5nX3B0ciwgc2tpcCkpCiAgICB7CkBAIC0xODEyLDYgKzE4NzksOCBAQAogICAgICAgdGV4dCsrOwogCiAgICB0ZXh0X3B0ciA9IChwbmdfdGV4dHApcG5nX21hbGxvYyhwbmdfcHRyLCAocG5nX3VpbnRfMzIpc2l6ZW9mKHBuZ190ZXh0KSk7CisgICBpZiAodGV4dF9wdHIgIT0gKHBuZ190ZXh0cClOVUxMKQorICAgewogICAgdGV4dF9wdHItPmNvbXByZXNzaW9uID0gUE5HX1RFWFRfQ09NUFJFU1NJT05fTk9ORTsKICAgIHRleHRfcHRyLT5rZXkgPSBrZXk7CiAjaWZkZWYgUE5HX2lUWHRfU1VQUE9SVEVECkBAIC0xODI0LDggKzE4OTMsMTEgQEAKIAogICAgcG5nX3NldF90ZXh0KHBuZ19wdHIsIGluZm9fcHRyLCB0ZXh0X3B0ciwgMSk7CiAKLSAgIHBuZ19mcmVlKHBuZ19wdHIsIGtleSk7CiAgICBwbmdfZnJlZShwbmdfcHRyLCB0ZXh0X3B0cik7CisgICB9CisgICBlbHNlCisgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgaVRYdCBwb2ludGVyIik7CisgICBwbmdfZnJlZShwbmdfcHRyLCBrZXkpOwogfQogI2VuZGlmCiAKQEAgLTE4NTksOCArMTkzMSwxNyBAQAogI2VuZGlmCiAKICAgIGNodW5rZGF0YSA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGggKyAxKTsKLSAgIHNsZW5ndGggPSAocG5nX3NpemVfdClsZW5ndGg7Ci0gICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcCljaHVua2RhdGEsIHNsZW5ndGgpOworICAgaWYgKGNodW5rZGF0YSAhPSAocG5nX2NoYXJwKU5VTEwpCisgICB7CisgICAgIHNsZW5ndGggPSAocG5nX3NpemVfdClsZW5ndGg7CisgICAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCAocG5nX2J5dGVwKWNodW5rZGF0YSwgc2xlbmd0aCk7CisgICB9CisgICBlbHNlCisgICB7CisgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgelRYdCBjaHVuayBkYXRhIik7CisgICAgIHBuZ19jcmNfZmluaXNoKHBuZ19wdHIsIGxlbmd0aCk7CisgICAgIHJldHVybjsKKyAgIH0KICAgIGlmIChwbmdfY3JjX2ZpbmlzaChwbmdfcHRyLCAwKSkKICAgIHsKICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIGNodW5rZGF0YSk7CkBAIC0xODk0LDE5ICsxOTc1LDI0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG5nX3NpemVfdClsZW5ndGgsIHByZWZpeF9sZW4sICZkYXRhX2xlbik7CiAKICAgIHRleHRfcHRyID0gKHBuZ190ZXh0cClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMilzaXplb2YocG5nX3RleHQpKTsKLSAgIHRleHRfcHRyLT5jb21wcmVzc2lvbiA9IGNvbXBfdHlwZTsKLSAgIHRleHRfcHRyLT5rZXkgPSBjaHVua2RhdGE7CisgICBpZiAodGV4dF9wdHIgIT0gKHBuZ190ZXh0cClOVUxMKQorICAgeworICAgICB0ZXh0X3B0ci0+Y29tcHJlc3Npb24gPSBjb21wX3R5cGU7CisgICAgIHRleHRfcHRyLT5rZXkgPSBjaHVua2RhdGE7CiAjaWZkZWYgUE5HX2lUWHRfU1VQUE9SVEVECi0gICB0ZXh0X3B0ci0+bGFuZyA9IE5VTEw7Ci0gICB0ZXh0X3B0ci0+bGFuZ19rZXkgPSBOVUxMOwotICAgdGV4dF9wdHItPml0eHRfbGVuZ3RoID0gMDsKKyAgICAgdGV4dF9wdHItPmxhbmcgPSBOVUxMOworICAgICB0ZXh0X3B0ci0+bGFuZ19rZXkgPSBOVUxMOworICAgICB0ZXh0X3B0ci0+aXR4dF9sZW5ndGggPSAwOwogI2VuZGlmCi0gICB0ZXh0X3B0ci0+dGV4dCA9IGNodW5rZGF0YSArIHByZWZpeF9sZW47Ci0gICB0ZXh0X3B0ci0+dGV4dF9sZW5ndGggPSBkYXRhX2xlbjsKKyAgICAgdGV4dF9wdHItPnRleHQgPSBjaHVua2RhdGEgKyBwcmVmaXhfbGVuOworICAgICB0ZXh0X3B0ci0+dGV4dF9sZW5ndGggPSBkYXRhX2xlbjsKIAotICAgcG5nX3NldF90ZXh0KHBuZ19wdHIsIGluZm9fcHRyLCB0ZXh0X3B0ciwgMSk7CisgICAgIHBuZ19zZXRfdGV4dChwbmdfcHRyLCBpbmZvX3B0ciwgdGV4dF9wdHIsIDEpOwogCi0gICBwbmdfZnJlZShwbmdfcHRyLCB0ZXh0X3B0cik7CisgICAgIHBuZ19mcmVlKHBuZ19wdHIsIHRleHRfcHRyKTsKKyAgIH0KKyAgIGVsc2UKKyAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgelRYdCBkYXRhIik7CiAgICBwbmdfZnJlZShwbmdfcHRyLCBjaHVua2RhdGEpOwogfQogI2VuZGlmCkBAIC0xOTQzLDggKzIwMjksMTcgQEAKICNlbmRpZgogCiAgICBjaHVua2RhdGEgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgbGVuZ3RoICsgMSk7Ci0gICBzbGVuZ3RoID0gKHBuZ19zaXplX3QpbGVuZ3RoOwotICAgcG5nX2NyY19yZWFkKHBuZ19wdHIsIChwbmdfYnl0ZXApY2h1bmtkYXRhLCBzbGVuZ3RoKTsKKyAgIGlmIChjaHVua2RhdGEgIT0gKHBuZ19jaGFycClOVUxMKQorICAgeworICAgICBzbGVuZ3RoID0gKHBuZ19zaXplX3QpbGVuZ3RoOworICAgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcCljaHVua2RhdGEsIHNsZW5ndGgpOworICAgfQorICAgZWxzZQorICAgeworICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlUWHQgY2h1bmsgZGF0YSIpOworICAgICBwbmdfY3JjX2ZpbmlzaChwbmdfcHRyLCBsZW5ndGgpOworICAgICByZXR1cm47CisgICB9CiAgICBpZiAocG5nX2NyY19maW5pc2gocG5nX3B0ciwgMCkpCiAgICB7CiAgICAgICBwbmdfZnJlZShwbmdfcHRyLCBjaHVua2RhdGEpOwpAQCAtMTk4OSwxNyArMjA4NCwyMiBAQAogICAgZWxzZQogICAgICAgIGRhdGFfbGVuPXBuZ19zdHJsZW4oY2h1bmtkYXRhICsgcHJlZml4X2xlbik7CiAgICB0ZXh0X3B0ciA9IChwbmdfdGV4dHApcG5nX21hbGxvYyhwbmdfcHRyLCAocG5nX3VpbnRfMzIpc2l6ZW9mKHBuZ190ZXh0KSk7Ci0gICB0ZXh0X3B0ci0+Y29tcHJlc3Npb24gPSAoaW50KWNvbXBfZmxhZyArIDE7Ci0gICB0ZXh0X3B0ci0+bGFuZ19rZXkgPSBjaHVua2RhdGErKGxhbmdfa2V5LWtleSk7Ci0gICB0ZXh0X3B0ci0+bGFuZyA9IGNodW5rZGF0YSsobGFuZy1rZXkpOwotICAgdGV4dF9wdHItPml0eHRfbGVuZ3RoID0gZGF0YV9sZW47Ci0gICB0ZXh0X3B0ci0+dGV4dF9sZW5ndGggPSAwOwotICAgdGV4dF9wdHItPmtleSA9IGNodW5rZGF0YTsKLSAgIHRleHRfcHRyLT50ZXh0ID0gY2h1bmtkYXRhICsgcHJlZml4X2xlbjsKKyAgIGlmICh0ZXh0X3B0ciAhPSAocG5nX3RleHRwKU5VTEwpCisgICB7CisgICAgIHRleHRfcHRyLT5jb21wcmVzc2lvbiA9IChpbnQpY29tcF9mbGFnICsgMTsKKyAgICAgdGV4dF9wdHItPmxhbmdfa2V5ID0gY2h1bmtkYXRhKyhsYW5nX2tleS1rZXkpOworICAgICB0ZXh0X3B0ci0+bGFuZyA9IGNodW5rZGF0YSsobGFuZy1rZXkpOworICAgICB0ZXh0X3B0ci0+aXR4dF9sZW5ndGggPSBkYXRhX2xlbjsKKyAgICAgdGV4dF9wdHItPnRleHRfbGVuZ3RoID0gMDsKKyAgICAgdGV4dF9wdHItPmtleSA9IGNodW5rZGF0YTsKKyAgICAgdGV4dF9wdHItPnRleHQgPSBjaHVua2RhdGEgKyBwcmVmaXhfbGVuOwogCi0gICBwbmdfc2V0X3RleHQocG5nX3B0ciwgaW5mb19wdHIsIHRleHRfcHRyLCAxKTsKKyAgICAgcG5nX3NldF90ZXh0KHBuZ19wdHIsIGluZm9fcHRyLCB0ZXh0X3B0ciwgMSk7CiAKLSAgIHBuZ19mcmVlKHBuZ19wdHIsIHRleHRfcHRyKTsKKyAgICAgcG5nX2ZyZWUocG5nX3B0ciwgdGV4dF9wdHIpOworICAgfQorICAgZWxzZQorICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlUWHQgY2h1bmsgZGF0YSIpOwogICAgcG5nX2ZyZWUocG5nX3B0ciwgY2h1bmtkYXRhKTsKIH0KICNlbmRpZgpAQCAtMjA1NSw4ICsyMTU1LDE3IEBACiAjZW5kaWYKICAgICAgICBwbmdfc3RyY3B5KChwbmdfY2hhcnApY2h1bmsubmFtZSwgKHBuZ19jaGFycClwbmdfcHRyLT5jaHVua19uYW1lKTsKICAgICAgICBjaHVuay5kYXRhID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCk7Ci0gICAgICAgcG5nX2NyY19yZWFkKHBuZ19wdHIsIGNodW5rLmRhdGEsIGxlbmd0aCk7Ci0gICAgICAgY2h1bmsuc2l6ZSA9IGxlbmd0aDsKKyAgICAgICBpZiAoY2h1bmsuZGF0YSAhPSAocG5nX2J5dGVwKU5VTEwpCisgICAgICAgeworICAgICAgICAgY2h1bmsuc2l6ZSA9IChwbmdfc2l6ZV90KWxlbmd0aDsKKyAgICAgICAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCAocG5nX2J5dGVwKWNodW5rLmRhdGEsIGxlbmd0aCk7CisgICAgICAgfQorICAgICAgIGVsc2UKKyAgICAgICB7CisgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlUWHQgY2h1bmsgZGF0YSIpOworICAgICAgICAgcG5nX2NyY19maW5pc2gocG5nX3B0ciwgbGVuZ3RoKTsKKyAgICAgICAgIHJldHVybjsKKyAgICAgICB9CiAjaWYgZGVmaW5lZChQTkdfUkVBRF9VU0VSX0NIVU5LU19TVVBQT1JURUQpCiAgICAgICAgaWYocG5nX3B0ci0+cmVhZF91c2VyX2NodW5rX2ZuICE9IChwbmdfdXNlcl9jaHVua19wdHIpTlVMTCkKICAgICAgICB7CkBAIC0yOTYzLDYgKzMwNzIsOCBAQAogICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJUaGlzIGltYWdlIHJlcXVpcmVzIGEgcm93IGdyZWF0ZXIgdGhhbiA2NEtCIik7CiAjZW5kaWYKICAgIHBuZ19wdHItPnJvd19idWYgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwgcm93X2J5dGVzKTsKKyAgIGlmIChwbmdfcHRyLT5yb3dfYnVmID09IChwbmdfYnl0ZXApTlVMTCkKKyAgICAgIHBuZ19lcnJvciAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJvdyBidWZmZXIiKTsKICAgIHBuZ19wdHItPnJvd19idWZfc2l6ZSA9IHJvd19ieXRlczsKIAogI2lmZGVmIFBOR19NQVhfTUFMTE9DXzY0SwpAQCAtMjk3MSw2ICszMDgyLDExIEBACiAjZW5kaWYKICAgIHBuZ19wdHItPnByZXZfcm93ID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMikoCiAgICAgICBwbmdfcHRyLT5yb3dieXRlcyArIDEpKTsKKyAgIGlmIChwbmdfcHRyLT5wcmV2X3JvdyA9PSAocG5nX2J5dGVwKU5VTEwpCisgICB7CisgICAgICBwbmdfZnJlZSAocG5nX3B0ciwgcG5nX3B0ci0+cm93X2J1Zik7CisgICAgICBwbmdfZXJyb3IgKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBwcmV2aW91cyByb3cgYnVmZmVyIik7CisgICB9CiAKICAgIHBuZ19tZW1zZXRfY2hlY2socG5nX3B0ciwgcG5nX3B0ci0+cHJldl9yb3csIDAsIHBuZ19wdHItPnJvd2J5dGVzICsgMSk7CiAKZGlmZiAtLWdpdCBhL3BuZ3NldC5jIGIvcG5nc2V0LmMKaW5kZXggMGVlNDZhNy4uMjQ2NWZkMCAxMDA2NDQKLS0tIGEvcG5nc2V0LmMKKysrIGIvcG5nc2V0LmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3NldC5jIC0gc3RvcmFnZSBvZiBpbWFnZSBpbmZvcm1hdGlvbiBpbnRvIGluZm8gc3RydWN0CiAgKgotICogbGlicG5nIDEuMC4xMWJldGEyIC0gQXByaWwgMTEsIDIwMDEKKyAqIGxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC0xNDMsMTQgKzE0MywyMiBAQAogICAgaWYgKHBuZ19wdHIgPT0gTlVMTCB8fCBpbmZvX3B0ciA9PSBOVUxMKQogICAgICAgcmV0dXJuOwogICAgaWYgKGluZm9fcHRyLT5udW1fcGFsZXR0ZSA9PSAwKQorICAgewogICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsCi0JCSAgICJQYWxldHRlIHNpemUgMCwgaElTVCBhbGxvY2F0aW9uIHNraXBwZWQuIik7CisgICAgICAgICAgIlBhbGV0dGUgc2l6ZSAwLCBoSVNUIGFsbG9jYXRpb24gc2tpcHBlZC4iKTsKKyAgICAgICByZXR1cm47CisgICB9CiAKICNpZmRlZiBQTkdfRlJFRV9NRV9TVVBQT1JURUQKICAgIHBuZ19mcmVlX2RhdGEocG5nX3B0ciwgaW5mb19wdHIsIFBOR19GUkVFX0hJU1QsIDApOwogI2VuZGlmCiAgICBwbmdfcHRyLT5oaXN0ID0gKHBuZ191aW50XzE2cClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAocG5nX3VpbnRfMzIpKGluZm9fcHRyLT5udW1fcGFsZXR0ZSAqIHNpemVvZiAocG5nX3VpbnRfMTYpKSk7CisgICBpZiAocG5nX3B0ci0+aGlzdCA9PSAocG5nX3VpbnRfMTZwKU5VTEwpCisgICB7CisgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGhpc3RvZ3JhbSIpOworICAgICAgcmV0dXJuOworICAgfQogCiAgICBmb3IgKGkgPSAwOyBpIDwgaW5mb19wdHItPm51bV9wYWxldHRlOyBpKyspCiAgICAgICAgcG5nX3B0ci0+aGlzdFtpXSA9IGhpc3RbaV07CkBAIC0yOTIsNiArMzAwLDExIEBACiAgICBsZW5ndGggPSBwbmdfc3RybGVuKHB1cnBvc2UpICsgMTsKICAgIHBuZ19kZWJ1ZzEoMywgImFsbG9jYXRpbmcgcHVycG9zZSBmb3IgaW5mbyAoJWx1IGJ5dGVzKVxuIiwgbGVuZ3RoKTsKICAgIGluZm9fcHRyLT5wY2FsX3B1cnBvc2UgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgbGVuZ3RoKTsKKyAgIGlmIChpbmZvX3B0ci0+cGNhbF9wdXJwb3NlID09IChwbmdfY2hhcnApTlVMTCkKKyAgIHsKKyAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgcENBTCIpOworICAgICAgcmV0dXJuOworICAgfQogICAgcG5nX21lbWNweShpbmZvX3B0ci0+cGNhbF9wdXJwb3NlLCBwdXJwb3NlLCAocG5nX3NpemVfdClsZW5ndGgpOwogCiAgICBwbmdfZGVidWcoMywgInN0b3JpbmcgWDAsIFgxLCB0eXBlLCBhbmQgbnBhcmFtcyBpbiBpbmZvXG4iKTsKQEAgLTMwMywxMCArMzE2LDI0IEBACiAgICBsZW5ndGggPSBwbmdfc3RybGVuKHVuaXRzKSArIDE7CiAgICBwbmdfZGVidWcxKDMsICJhbGxvY2F0aW5nIHVuaXRzIGZvciBpbmZvICglbHUgYnl0ZXMpXG4iLCBsZW5ndGgpOwogICAgaW5mb19wdHItPnBjYWxfdW5pdHMgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgbGVuZ3RoKTsKKyAgIGlmIChpbmZvX3B0ci0+cGNhbF91bml0cyA9PSAocG5nX2NoYXJwKU5VTEwpCisgICB7CisgICAgICBwbmdfZnJlZSAocG5nX3B0ciwgaW5mb19wdHItPnBjYWxfcHVycG9zZSk7CisgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBDQUwgdW5pdHMiKTsKKyAgICAgIHJldHVybjsKKyAgIH0KICAgIHBuZ19tZW1jcHkoaW5mb19wdHItPnBjYWxfdW5pdHMsIHVuaXRzLCAocG5nX3NpemVfdClsZW5ndGgpOwogCiAgICBpbmZvX3B0ci0+cGNhbF9wYXJhbXMgPSAocG5nX2NoYXJwcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAocG5nX3VpbnRfMzIpKChucGFyYW1zICsgMSkgKiBzaXplb2YocG5nX2NoYXJwKSkpOworICAgaWYgKGluZm9fcHRyLT5wY2FsX3BhcmFtcyA9PSAocG5nX2NoYXJwcClOVUxMKQorICAgeworICAgICAgcG5nX2ZyZWUgKHBuZ19wdHIsIGluZm9fcHRyLT5wY2FsX3B1cnBvc2UpOworICAgICAgcG5nX2ZyZWUgKHBuZ19wdHIsIGluZm9fcHRyLT5wY2FsX3VuaXRzKTsKKyAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgcENBTCBwYXJhbXMiKTsKKyAgICAgIHJldHVybjsKKyAgIH0KKwogICAgaW5mb19wdHItPnBjYWxfcGFyYW1zW25wYXJhbXNdID0gTlVMTDsKIAogICAgZm9yIChpID0gMDsgaSA8IG5wYXJhbXM7IGkrKykKQEAgLTMxNCw3ICszNDEsMTMgQEAKICAgICAgIGxlbmd0aCA9IHBuZ19zdHJsZW4ocGFyYW1zW2ldKSArIDE7CiAgICAgICBwbmdfZGVidWcyKDMsICJhbGxvY2F0aW5nIHBhcmFtZXRlciAlZCBmb3IgaW5mbyAoJWx1IGJ5dGVzKVxuIiwgaSwgbGVuZ3RoKTsKICAgICAgIGluZm9fcHRyLT5wY2FsX3BhcmFtc1tpXSA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGgpOwotICAgICAgcG5nX21lbWNweShpbmZvX3B0ci0+cGNhbF9wYXJhbXNbaV0sIHBhcmFtc1tpXSwgKHBuZ19zaXplX3QpbGVuZ3RoKTsKKyAgICAgIGlmIChpbmZvX3B0ci0+cGNhbF9wYXJhbXNbaV0gPT0gKHBuZ19jaGFycClOVUxMKQorICAgICAgeworICAgICAgICAgbnBhcmFtcz1pOworICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBwQ0FMIHBhcmFtcyIpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICAgcG5nX21lbWNweShpbmZvX3B0ci0+cGNhbF9wYXJhbXNbaV0sIHBhcmFtc1tpXSwgKHBuZ19zaXplX3QpbGVuZ3RoKTsKICAgIH0KIAogICAgaW5mb19wdHItPnZhbGlkIHw9IFBOR19JTkZPX3BDQUw7CkBAIC0zNTcsMTIgKzM5MCwxNCBAQAogICAgbGVuZ3RoID0gcG5nX3N0cmxlbihzd2lkdGgpICsgMTsKICAgIHBuZ19kZWJ1ZzEoMywgImFsbG9jYXRpbmcgdW5pdCBmb3IgaW5mbyAoJWQgYnl0ZXMpXG4iLCBsZW5ndGgpOwogICAgaW5mb19wdHItPnNjYWxfc193aWR0aCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGgpOwotICAgcG5nX21lbWNweShpbmZvX3B0ci0+c2NhbF9zX3dpZHRoLCBzd2lkdGgsIChwbmdfc2l6ZV90KWxlbmd0aCk7CisgICBpZiAoaW5mb19wdHItPnNjYWxfc193aWR0aCAhPSAocG5nX2NoYXJwKU5VTEwpCisgICAgICBwbmdfbWVtY3B5KGluZm9fcHRyLT5zY2FsX3Nfd2lkdGgsIHN3aWR0aCwgKHBuZ19zaXplX3QpbGVuZ3RoKTsKIAogICAgbGVuZ3RoID0gcG5nX3N0cmxlbihzaGVpZ2h0KSArIDE7CiAgICBwbmdfZGVidWcxKDMsICJhbGxvY2F0aW5nIHVuaXQgZm9yIGluZm8gKCVkIGJ5dGVzKVxuIiwgbGVuZ3RoKTsKLSAgIGluZm9fcHRyLT5zY2FsX3Nfd2lkdGggPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgbGVuZ3RoKTsKLSAgIHBuZ19tZW1jcHkoaW5mb19wdHItPnNjYWxfc19oZWlnaHQsIHNoZWlnaHQsIChwbmdfc2l6ZV90KWxlbmd0aCk7CisgICBpbmZvX3B0ci0+c2NhbF9zX2hlaWdodCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGgpOworICAgaWYgKGluZm9fcHRyLT5zY2FsX3NfaGVpZ2h0ICE9IChwbmdfY2hhcnApTlVMTCkKKyAgICAgIHBuZ19tZW1jcHkoaW5mb19wdHItPnNjYWxfc19oZWlnaHQsIHNoZWlnaHQsIChwbmdfc2l6ZV90KWxlbmd0aCk7CiAKICAgIGluZm9fcHRyLT52YWxpZCB8PSBQTkdfSU5GT19zQ0FMOwogI2lmZGVmIFBOR19GUkVFX01FX1NVUFBPUlRFRApAQCAtNDA4LDYgKzQ0MywxMSBAQAogI2VuZGlmCiAgICBwbmdfcHRyLT5wYWxldHRlID0gKHBuZ19jb2xvcnApcG5nX3phbGxvYyhwbmdfcHRyLCAodUludCludW1fcGFsZXR0ZSwKICAgICAgIHNpemVvZiAocG5nX2NvbG9yKSk7CisgICBpZiAocG5nX3B0ci0+cGFsZXR0ZSA9PSAocG5nX2NvbG9ycClOVUxMKQorICAgeworICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIlVuYWJsZSB0byBhbGxvY2F0ZSBwYWxldHRlIik7CisgICAgICByZXR1cm47CisgICB9CiAgICBwbmdfbWVtY3B5KHBuZ19wdHItPnBhbGV0dGUsIHBhbGV0dGUsIG51bV9wYWxldHRlICogc2l6ZW9mIChwbmdfY29sb3IpKTsKICAgIGluZm9fcHRyLT5wYWxldHRlID0gcG5nX3B0ci0+cGFsZXR0ZTsKICAgIGluZm9fcHRyLT5udW1fcGFsZXR0ZSA9IHBuZ19wdHItPm51bV9wYWxldHRlID0gKHBuZ191aW50XzE2KW51bV9wYWxldHRlOwpAQCAtNTMyLDggKzU3MiwxOSBAQAogICAgICAgcmV0dXJuOwogCiAgICBuZXdfaWNjcF9uYW1lID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIHBuZ19zdHJsZW4obmFtZSkrMSk7CisgICBpZiAobmV3X2ljY3BfbmFtZSA9PSAocG5nX2NoYXJwKU5VTEwpIAorICAgeworICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIElDQyBwcm9maWxlIG5hbWUiKTsKKyAgICAgcmV0dXJuOworICAgfQogICAgcG5nX3N0cmNweShuZXdfaWNjcF9uYW1lLCBuYW1lKTsKICAgIG5ld19pY2NwX3Byb2ZpbGUgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgcHJvZmxlbik7CisgICBpZiAobmV3X2ljY3BfcHJvZmlsZSA9PSAocG5nX2NoYXJwKU5VTEwpIAorICAgeworICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIElDQyBwcm9maWxlIik7CisgICAgIHBuZ19mcmVlIChwbmdfcHRyLCBuZXdfaWNjcF9uYW1lKTsKKyAgICAgcmV0dXJuOworICAgfQogICAgcG5nX21lbWNweShuZXdfaWNjcF9wcm9maWxlLCBwcm9maWxlLCAocG5nX3NpemVfdClwcm9mbGVuKTsKIAogICAgcG5nX2ZyZWVfZGF0YShwbmdfcHRyLCBpbmZvX3B0ciwgUE5HX0ZSRUVfSUNDUCwgMCk7CkBAIC01NzksNiArNjMwLDEyIEBACiAgICAgICAgICBvbGRfdGV4dCA9IGluZm9fcHRyLT50ZXh0OwogICAgICAgICAgaW5mb19wdHItPnRleHQgPSAocG5nX3RleHRwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgIChwbmdfdWludF8zMikoaW5mb19wdHItPm1heF90ZXh0ICogc2l6ZW9mIChwbmdfdGV4dCkpKTsKKyAgICAgICAgIGlmIChpbmZvX3B0ci0+dGV4dCA9PSAocG5nX3RleHRwKU5VTEwpCisgICAgICAgICB7CisgICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRleHQiKTsKKyAgICAgICAgICAgIGluZm9fcHRyLT50ZXh0ID0gb2xkX3RleHQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICB9CiAgICAgICAgICBwbmdfbWVtY3B5KGluZm9fcHRyLT50ZXh0LCBvbGRfdGV4dCwgKHBuZ19zaXplX3QpKG9sZF9tYXggKgogICAgICAgICAgICAgc2l6ZW9mKHBuZ190ZXh0KSkpOwogICAgICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgb2xkX3RleHQpOwpAQCAtNTg5LDYgKzY0NiwxMSBAQAogICAgICAgICAgaW5mb19wdHItPm51bV90ZXh0ID0gMDsKICAgICAgICAgIGluZm9fcHRyLT50ZXh0ID0gKHBuZ190ZXh0cClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKGluZm9fcHRyLT5tYXhfdGV4dCAqIHNpemVvZiAocG5nX3RleHQpKSk7CisgICAgICAgICBpZiAoaW5mb19wdHItPnRleHQgPT0gKHBuZ190ZXh0cClOVUxMKQorICAgICAgICAgeworICAgICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZXh0Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICB9CiAjaWZkZWYgUE5HX0ZSRUVfTUVfU1VQUE9SVEVECiAgICAgICAgICBpbmZvX3B0ci0+ZnJlZV9tZSB8PSBQTkdfRlJFRV9URVhUOwogI2VuZGlmCkBAIC02NTAsNiArNzEyLDExIEBACiAKICAgICAgIHRleHRwLT5rZXkgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgIChwbmdfdWludF8zMikoa2V5X2xlbiArIHRleHRfbGVuZ3RoICsgbGFuZ19sZW4gKyBsYW5nX2tleV9sZW4gKyA0KSk7CisgICAgICBpZiAodGV4dHAtPmtleSA9PSAocG5nX2NoYXJwKU5VTEwpCisgICAgICB7CisgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRleHQgcG9pbnRlciIpOworICAgICAgICAgcmV0dXJuOworICAgICAgfQogICAgICAgcG5nX2RlYnVnMigyLCAiQWxsb2NhdGVkICVkIGJ5dGVzIGF0ICV4IGluIHBuZ19zZXRfdGV4dFxuIiwKICAgICAgICAgIGtleV9sZW4gKyBsYW5nX2xlbiArIGxhbmdfa2V5X2xlbiArIHRleHRfbGVuZ3RoICsgNCwgKGludCl0ZXh0cC0+a2V5KTsKIApAQCAtNzM3LDYgKzgwNCwxMSBAQAogI2VuZGlmCiAgICAgICAgcG5nX3B0ci0+dHJhbnMgPSBpbmZvX3B0ci0+dHJhbnMgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgbnVtX3RyYW5zKTsKKyAgICAgICBpZiAocG5nX3B0ci0+dHJhbnMgPT0gKHBuZ19ieXRlcClOVUxMKQorICAgICAgIHsKKyAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRSTlMgYXJyYXkiKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgfQogICAgICAgIHBuZ19tZW1jcHkoaW5mb19wdHItPnRyYW5zLCB0cmFucywgbnVtX3RyYW5zKTsKICNpZmRlZiBQTkdfRlJFRV9NRV9TVVBQT1JURUQKICAgICAgICBpbmZvX3B0ci0+ZnJlZV9tZSB8PSBQTkdfRlJFRV9UUk5TOwpAQCAtNzY3LDYgKzgzOSwxMSBAQAogCiAgICAgbnAgPSAocG5nX3NQTFRfdHApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAoaW5mb19wdHItPnNwbHRfcGFsZXR0ZXNfbnVtICsgbmVudHJpZXMpICogc2l6ZW9mKHBuZ19zUExUX3QpKTsKKyAgICBpZiAobnAgPT0gKHBuZ19zUExUX3RwKU5VTEwpCisgICAgeworICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3Igc1BMVCIpOworICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBwbmdfbWVtY3B5KG5wLCBpbmZvX3B0ci0+c3BsdF9wYWxldHRlcywKICAgICAgICAgICAgaW5mb19wdHItPnNwbHRfcGFsZXR0ZXNfbnVtICogc2l6ZW9mKHBuZ19zUExUX3QpKTsKQEAgLTc3OSwxNCArODU2LDIyIEBACiAgICAgICAgIHBuZ19zUExUX3RwIGZyb20gPSBlbnRyaWVzICsgaTsKIAogICAgICAgICB0by0+bmFtZSA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19zdHJsZW4oZnJvbS0+bmFtZSkgKyAxKTsKKyAgICAgICAgICAgIHBuZ19zdHJsZW4oZnJvbS0+bmFtZSkgKyAxKTsKICAgICAgICAgcG5nX3N0cmNweSh0by0+bmFtZSwgZnJvbS0+bmFtZSk7CiAgICAgICAgIHRvLT5lbnRyaWVzID0gKHBuZ19zUExUX2VudHJ5cClwbmdfbWFsbG9jKHBuZ19wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tLT5uZW50cmllcyAqIHNpemVvZihwbmdfc1BMVF90KSk7Ci0gICAgICAgIHBuZ19tZW1jcHkodG8tPmVudHJpZXMsIGZyb20tPmVudHJpZXMsCisgICAgICAgICAgICBmcm9tLT5uZW50cmllcyAqIHNpemVvZihwbmdfc1BMVF90KSk7CisgICAgICAgIGlmICh0by0+ZW50cmllcyA9PSAocG5nX3NQTFRfZW50cnlwKU5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHNQTFQgZW50cnkiKTsKKyAgICAgICAgICAgbmVudHJpZXM9aTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBwbmdfbWVtY3B5KHRvLT5lbnRyaWVzLCBmcm9tLT5lbnRyaWVzLAogICAgICAgICAgICAgICAgZnJvbS0+bmVudHJpZXMgKiBzaXplb2YocG5nX3NQTFRfdCkpOwotICAgICAgICB0by0+bmVudHJpZXMgPSBmcm9tLT5uZW50cmllczsKLSAgICAgICAgdG8tPmRlcHRoID0gZnJvbS0+ZGVwdGg7CisgICAgICAgICAgdG8tPm5lbnRyaWVzID0gZnJvbS0+bmVudHJpZXM7CisgICAgICAgICAgdG8tPmRlcHRoID0gZnJvbS0+ZGVwdGg7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpbmZvX3B0ci0+c3BsdF9wYWxldHRlcyA9IG5wOwpAQCAtODEyLDYgKzg5NywxMSBAQAogICAgIG5wID0gKHBuZ191bmtub3duX2NodW5rcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgIChpbmZvX3B0ci0+dW5rbm93bl9jaHVua3NfbnVtICsgbnVtX3Vua25vd25zKSAqCiAgICAgICAgIHNpemVvZihwbmdfdW5rbm93bl9jaHVuaykpOworICAgIGlmIChucCA9PSAocG5nX3Vua25vd25fY2h1bmtwKU5VTEwpCisgICAgeworICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdW5rbm93biBjaHVuayIpOworICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBwbmdfbWVtY3B5KG5wLCBpbmZvX3B0ci0+dW5rbm93bl9jaHVua3MsCiAgICAgICAgICAgIGluZm9fcHRyLT51bmtub3duX2NodW5rc19udW0gKiBzaXplb2YocG5nX3Vua25vd25fY2h1bmspKTsKQEAgLTgyNSwxMSArOTE1LDE5IEBACiAKICAgICAgICAgcG5nX3N0cmNweSgocG5nX2NoYXJwKXRvLT5uYW1lLCAocG5nX2NoYXJwKWZyb20tPm5hbWUpOwogICAgICAgICB0by0+ZGF0YSA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLCBmcm9tLT5zaXplKTsKLSAgICAgICAgcG5nX21lbWNweSh0by0+ZGF0YSwgZnJvbS0+ZGF0YSwgZnJvbS0+c2l6ZSk7Ci0gICAgICAgIHRvLT5zaXplID0gZnJvbS0+c2l6ZTsKKyAgICAgICAgaWYgKHRvLT5kYXRhID09IChwbmdfYnl0ZXApTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdW5rbm93biBlbnRyeSIpOworICAgICAgICAgICBudW1fdW5rbm93bnM9aTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBwbmdfbWVtY3B5KHRvLT5kYXRhLCBmcm9tLT5kYXRhLCBmcm9tLT5zaXplKTsKKyAgICAgICAgICB0by0+c2l6ZSA9IGZyb20tPnNpemU7CiAKLSAgICAgICAgLyogbm90ZSBvdXIgbG9jYXRpb24gaW4gdGhlIHJlYWQgb3Igd3JpdGUgc2VxdWVuY2UgKi8KLSAgICAgICAgdG8tPmxvY2F0aW9uID0gKHBuZ19ieXRlKShwbmdfcHRyLT5tb2RlICYgMHhmZik7CisgICAgICAgICAgLyogbm90ZSBvdXIgbG9jYXRpb24gaW4gdGhlIHJlYWQgb3Igd3JpdGUgc2VxdWVuY2UgKi8KKyAgICAgICAgICB0by0+bG9jYXRpb24gPSAocG5nX2J5dGUpKHBuZ19wdHItPm1vZGUgJiAweGZmKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGluZm9fcHRyLT51bmtub3duX2NodW5rcyA9IG5wOwpkaWZmIC0tZ2l0IGEvcG5ndGVzdC5jIGIvcG5ndGVzdC5jCmluZGV4IDk3MjU3NmMuLmM1YzEyYzEgMTAwNjQ0Ci0tLSBhL3BuZ3Rlc3QuYworKysgYi9wbmd0ZXN0LmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3Rlc3QuYyAtIGEgc2ltcGxlIHRlc3QgcHJvZ3JhbSB0byB0ZXN0IGxpYnBuZwogICoKLSAqIGxpYnBuZyAxLjAuMTFiZXRhMiAtIEFwcmlsIDExLCAyMDAxCisgKiBsaWJwbmcgMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMTUyMyw0ICsxNTIzLDQgQEAKIH0KIAogLyogR2VuZXJhdGUgYSBjb21waWxlciBlcnJvciBpZiB0aGVyZSBpcyBhbiBvbGQgcG5nLmggaW4gdGhlIHNlYXJjaCBwYXRoLiAqLwotdHlwZWRlZiB2ZXJzaW9uXzFfMF8xMWJldGEyIHlvdXJfcG5nX2hfaXNfbm90X3ZlcnNpb25fMV8wXzExYmV0YTI7Cit0eXBlZGVmIHZlcnNpb25fMV8wXzExYmV0YTMgeW91cl9wbmdfaF9pc19ub3RfdmVyc2lvbl8xXzBfMTFiZXRhMzsKZGlmZiAtLWdpdCBhL3BuZ3RyYW5zLmMgYi9wbmd0cmFucy5jCmluZGV4IGViZWRhMjUuLjZmNTIxZTkgMTAwNjQ0Ci0tLSBhL3BuZ3RyYW5zLmMKKysrIGIvcG5ndHJhbnMuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5ndHJhbnMuYyAtIHRyYW5zZm9ybXMgdGhlIGRhdGEgaW4gYSByb3cgKHVzZWQgYnkgYm90aCByZWFkZXJzIGFuZCB3cml0ZXJzKQogICoKLSAqIGxpYnBuZyAxLjAuMTFiZXRhMiAtIEFwcmlsIDExLCAyMDAxCisgKiBsaWJwbmcgMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpkaWZmIC0tZ2l0IGEvcG5ndmNyZC5jIGIvcG5ndmNyZC5jCmluZGV4IDEzZDg4MmQuLjE3NDk5YWMgMTAwNjQ0Ci0tLSBhL3BuZ3ZjcmQuYworKysgYi9wbmd2Y3JkLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogRm9yIEludGVsIHg4NiBDUFUgYW5kIE1pY3Jvc29mdCBWaXN1YWwgQysrIGNvbXBpbGVyCiAgKgotICogbGlicG5nIDEuMC4xMWJldGEyIC0gQXByaWwgMTEsIDIwMDEKKyAqIGxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogQ29weXJpZ2h0IChjKSAxOTk4LCBJbnRlbCBDb3Jwb3JhdGlvbgpkaWZmIC0tZ2l0IGEvcG5nd2lvLmMgYi9wbmd3aW8uYwppbmRleCBmMjVhYzE0Li4wNzc1ZGJjIDEwMDY0NAotLS0gYS9wbmd3aW8uYworKysgYi9wbmd3aW8uYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nd2lvLmMgLSBmdW5jdGlvbnMgZm9yIGRhdGEgb3V0cHV0CiAgKgotICogbGlicG5nIDEuMC4xMWJldGEyIC0gQXByaWwgMTEsIDIwMDEKKyAqIGxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCmRpZmYgLS1naXQgYS9wbmd3cml0ZS5jIGIvcG5nd3JpdGUuYwppbmRleCAxNjc4MzU4Li4xOGNlMjRjIDEwMDY0NAotLS0gYS9wbmd3cml0ZS5jCisrKyBiL3BuZ3dyaXRlLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3dyaXRlLmMgLSBnZW5lcmFsIHJvdXRpbmVzIHRvIHdyaXRlIGEgUE5HIGZpbGUKICAqCi0gKiBsaWJwbmcgMS4wLjExYmV0YTIgLSBBcHJpbCAxMSwgMjAwMQorICogbGlicG5nIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKQEAgLTUxMiw2ICs1MTIsOCBAQAogICAgcG5nX3B0ci0+emJ1Zl9zaXplID0gUE5HX1pCVUZfU0laRTsKICAgIHBuZ19wdHItPnpidWYgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgIChwbmdfdWludF8zMilwbmdfcHRyLT56YnVmX3NpemUpOworICAgaWYgKHBuZ19wdHItPnpidWYgPT0gKHBuZ19ieXRlcClOVUxMKQorICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgemJ1ZiBmb3Igd3JpdGluZyIpOwogCiAgICBwbmdfc2V0X3dyaXRlX2ZuKHBuZ19wdHIsIE5VTEwsIE5VTEwsIE5VTEwpOwogCkBAIC01ODEsNiArNTgzLDggQEAKICAgIHBuZ19wdHItPnpidWZfc2l6ZSA9IFBOR19aQlVGX1NJWkU7CiAgICBwbmdfcHRyLT56YnVmID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAocG5nX3VpbnRfMzIpcG5nX3B0ci0+emJ1Zl9zaXplKTsKKyAgIGlmIChwbmdfcHRyLT56YnVmID09IChwbmdfYnl0ZXApTlVMTCkKKyAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIHpidWYgZm9yIHdyaXRpbmciKTsKICAgIHBuZ19zZXRfd3JpdGVfZm4ocG5nX3B0ciwgTlVMTCwgTlVMTCwgTlVMTCk7CiAKICNpZiBkZWZpbmVkKFBOR19XUklURV9XRUlHSFRFRF9GSUxURVJfU1VQUE9SVEVEKQpAQCAtMTAyOSw2ICsxMDMzLDggQEAKICAgICAgICAgIHsKICAgICAgICAgICAgIHBuZ19wdHItPnN1Yl9yb3cgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgKHBuZ19wdHItPnJvd2J5dGVzICsgMSkpOworICAgICAgICAgICBpZiAocG5nX3B0ci0+c3ViX3JvdyA9PSAocG5nX2J5dGVwKU5VTEwpCisgICAgICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIHN1Yl9yb3ciKTsKICAgICAgICAgICAgIHBuZ19wdHItPnN1Yl9yb3dbMF0gPSBQTkdfRklMVEVSX1ZBTFVFX1NVQjsKICAgICAgICAgIH0KIApAQCAtMTA0Myw2ICsxMDQ5LDEwIEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwbmdfcHRyLT51cF9yb3cgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgICAgIChwbmdfcHRyLT5yb3dieXRlcyArIDEpKTsKKyAgICAgICAgICAgICAgIGlmIChwbmdfcHRyLT51cF9yb3cgPT0gKHBuZ19ieXRlcClOVUxMKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBzdWJfcm93Iik7CisgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwbmdfcHRyLT51cF9yb3dbMF0gPSBQTkdfRklMVEVSX1ZBTFVFX1VQOwogICAgICAgICAgICAgfQogICAgICAgICAgfQpAQCAtMTA1OCw2ICsxMDY4LDggQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBuZ19wdHItPmF2Z19yb3cgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgICAgIChwbmdfcHRyLT5yb3dieXRlcyArIDEpKTsKKyAgICAgICAgICAgICAgIGlmIChwbmdfcHRyLT5hdmdfcm93ID09IChwbmdfYnl0ZXApTlVMTCkKKyAgICAgICAgICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIGF2Z19yb3ciKTsKICAgICAgICAgICAgICAgIHBuZ19wdHItPmF2Z19yb3dbMF0gPSBQTkdfRklMVEVSX1ZBTFVFX0FWRzsKICAgICAgICAgICAgIH0KICAgICAgICAgIH0KQEAgLTEwNzQsNiArMTA4Niw4IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwbmdfcHRyLT5wYWV0aF9yb3cgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgICAgIChwbmdfcHRyLT5yb3dieXRlcyArIDEpKTsKKyAgICAgICAgICAgICAgIGlmIChwbmdfcHRyLT5wYWV0aF9yb3cgPT0gKHBuZ19ieXRlcClOVUxMKQorICAgICAgICAgICAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBhdmdfcm93Iik7CiAgICAgICAgICAgICAgICBwbmdfcHRyLT5wYWV0aF9yb3dbMF0gPSBQTkdfRklMVEVSX1ZBTFVFX1BBRVRIOwogICAgICAgICAgICAgfQogICAgICAgICAgfQpAQCAtMTEyOSwxMCArMTE0MywxMyBAQAogICAgICAgICAgcG5nX3B0ci0+cHJldl9maWx0ZXJzID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKHNpemVvZihwbmdfYnl0ZSkgKiBudW1fd2VpZ2h0cykpOwogCi0gICAgICAgICAvKiBUbyBtYWtlIHN1cmUgdGhhdCB0aGUgd2VpZ2h0aW5nIHN0YXJ0cyBvdXQgZmFpcmx5ICovCi0gICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3dlaWdodHM7IGkrKykKKyAgICAgICAgIGlmIChwbmdfcHRyLT5wcmV2X2ZpbHRlcnMgIT0gKHBuZ19ieXRlcClOVUxMKQogICAgICAgICAgewotICAgICAgICAgICAgcG5nX3B0ci0+cHJldl9maWx0ZXJzW2ldID0gMjU1OworICAgICAgICAgICAvKiBUbyBtYWtlIHN1cmUgdGhhdCB0aGUgd2VpZ2h0aW5nIHN0YXJ0cyBvdXQgZmFpcmx5ICovCisgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fd2VpZ2h0czsgaSsrKQorICAgICAgICAgICB7CisgICAgICAgICAgICAgIHBuZ19wdHItPnByZXZfZmlsdGVyc1tpXSA9IDI1NTsKKyAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgfQogCkBAIC0xMTQzLDEyICsxMTYwLDIyIEBACiAKICAgICAgICAgIHBuZ19wdHItPmludl9maWx0ZXJfd2VpZ2h0cyA9IChwbmdfdWludF8xNnApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgICAgKHBuZ191aW50XzMyKShzaXplb2YocG5nX3VpbnRfMTYpICogbnVtX3dlaWdodHMpKTsKLQotICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV93ZWlnaHRzOyBpKyspCisgICAgICAgICBpZiAocG5nX3B0ci0+aW52X2ZpbHRlcl93ZWlnaHRzID09IChwbmdfdWludF8xNnApTlVMTCkKICAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19wdHItPmludl9maWx0ZXJfd2VpZ2h0c1tpXSA9Ci0gICAgICAgICAgICBwbmdfcHRyLT5maWx0ZXJfd2VpZ2h0c1tpXSA9IFBOR19XRUlHSFRfRkFDVE9SOworICAgICAgICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgcG5nX3B0ci0+ZmlsdGVyX3dlaWdodHMpOworICAgICAgICAgICAgcG5nX3B0ci0+ZmlsdGVyX3dlaWdodHMgPSBOVUxMOwogICAgICAgICAgfQorICAgICAgICAgaWYgKHBuZ19wdHItPmZpbHRlcl93ZWlnaHRzICE9IChwbmdfdWludF8xNnApTlVMTCAmJgorICAgICAgICAgICAgIHBuZ19wdHItPmludl9maWx0ZXJfd2VpZ2h0cyAhPSAocG5nX3VpbnRfMTZwKU5VTEwpCisgICAgICAgICB7CisgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fd2VpZ2h0czsgaSsrKQorICAgICAgICAgICB7CisgICAgICAgICAgICAgIHBuZ19wdHItPmludl9maWx0ZXJfd2VpZ2h0c1tpXSA9CisgICAgICAgICAgICAgIHBuZ19wdHItPmZpbHRlcl93ZWlnaHRzW2ldID0gUE5HX1dFSUdIVF9GQUNUT1I7CisgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG51bV93ZWlnaHRzPTA7CiAgICAgICB9CiAKICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fd2VpZ2h0czsgaSsrKQpkaWZmIC0tZ2l0IGEvcG5nd3RyYW4uYyBiL3BuZ3d0cmFuLmMKaW5kZXggYTc3ZWRlNC4uNzk0MzdhNiAxMDA2NDQKLS0tIGEvcG5nd3RyYW4uYworKysgYi9wbmd3dHJhbi5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmd3dHJhbi5jIC0gdHJhbnNmb3JtcyB0aGUgZGF0YSBpbiBhIHJvdyBmb3IgUE5HIHdyaXRlcnMKICAqCi0gKiBsaWJwbmcgMS4wLjExYmV0YTIgLSBBcHJpbCAxMSwgMjAwMQorICogbGlicG5nIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKZGlmZiAtLWdpdCBhL3BuZ3d1dGlsLmMgYi9wbmd3dXRpbC5jCmluZGV4IDkyYmRlYzUuLjY4ODlmMjcgMTAwNjQ0Ci0tLSBhL3BuZ3d1dGlsLmMKKysrIGIvcG5nd3V0aWwuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nd3V0aWwuYyAtIHV0aWxpdGllcyB0byB3cml0ZSBhIFBORyBmaWxlCiAgKgotICogbGlicG5nIDEuMC4xMWJldGEyIC0gQXByaWwgMTEsIDIwMDEKKyAqIGxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC0yMzUsMjEgKzIzNSwzNSBAQAogICAgICAgICAgICAgICAgb2xkX3B0ciA9IGNvbXAtPm91dHB1dF9wdHI7CiAgICAgICAgICAgICAgICBjb21wLT5vdXRwdXRfcHRyID0gKHBuZ19jaGFycHApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgICAgICAgICAgKHBuZ191aW50XzMyKShjb21wLT5tYXhfb3V0cHV0X3B0ciAqIHNpemVvZiAocG5nX2NoYXJwcCkpKTsKLSAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoY29tcC0+b3V0cHV0X3B0ciwgb2xkX3B0ciwKLSAgICAgICAgICAgb2xkX21heCAqIHNpemVvZiAocG5nX2NoYXJwKSk7CisgICAgICAgICAgICAgICBpZiAoY29tcC0+b3V0cHV0X3B0ciA9PSAocG5nX2NoYXJwcClOVUxMKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJDYW5ub3QgYWxsb2NhdGUgY29tcHJlc3Npb24gYnVmZmVyIik7CisgICAgICAgICAgICAgICAgICBjb21wLT5vdXRwdXRfcHRyPW9sZF9wdHI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGNvbXAtPm91dHB1dF9wdHIsIG9sZF9wdHIsIG9sZF9tYXgKKyAgICAgICAgICAgICAgICAgICogc2l6ZW9mIChwbmdfY2hhcnApKTsKICAgICAgICAgICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIG9sZF9wdHIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgY29tcC0+b3V0cHV0X3B0ciA9IChwbmdfY2hhcnBwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgICAgIChwbmdfdWludF8zMikoY29tcC0+bWF4X291dHB1dF9wdHIgKiBzaXplb2YgKHBuZ19jaGFycCkpKTsKKyAgICAgICAgICAgICAgIGlmIChjb21wLT5vdXRwdXRfcHRyID09IChwbmdfY2hhcnBwKU5VTEwpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNhbm5vdCBhbGxvY2F0ZSBjb21wcmVzc2lvbiBidWZmZXIiKTsKKyAgICAgICAgICAgICAgIH0KICAgICAgICAgIH0KIAogICAgICAgICAgLyogc2F2ZSB0aGUgZGF0YSAqLwogICAgICAgICAgY29tcC0+b3V0cHV0X3B0cltjb21wLT5udW1fb3V0cHV0X3B0cl0gPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgIChwbmdfdWludF8zMilwbmdfcHRyLT56YnVmX3NpemUpOwotICAgICAgICAgcG5nX21lbWNweShjb21wLT5vdXRwdXRfcHRyW2NvbXAtPm51bV9vdXRwdXRfcHRyXSwgcG5nX3B0ci0+emJ1ZiwKLSAgICAgICAgICAgIHBuZ19wdHItPnpidWZfc2l6ZSk7Ci0gICAgICAgICBjb21wLT5udW1fb3V0cHV0X3B0cisrOworICAgICAgICAgaWYgKGNvbXAtPm91dHB1dF9wdHJbY29tcC0+bnVtX291dHB1dF9wdHJdID09IChwbmdfY2hhcnApTlVMTCkKKyAgICAgICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ2Fubm90IGFsbG9jYXRlIGNvbXByZXNzaW9uIGJ1ZmZlciIpOworICAgICAgICAgZWxzZQorICAgICAgICAgeworICAgICAgICAgICAgcG5nX21lbWNweShjb21wLT5vdXRwdXRfcHRyW2NvbXAtPm51bV9vdXRwdXRfcHRyXSwgcG5nX3B0ci0+emJ1ZiwKKyAgICAgICAgICAgICAgIHBuZ19wdHItPnpidWZfc2l6ZSk7CisgICAgICAgICAgICBjb21wLT5udW1fb3V0cHV0X3B0cisrOworICAgICAgICAgfQogCiAgICAgICAgICAvKiBhbmQgcmVzZXQgdGhlIGJ1ZmZlciAqLwogICAgICAgICAgcG5nX3B0ci0+enN0cmVhbS5hdmFpbF9vdXQgPSAodUludClwbmdfcHRyLT56YnVmX3NpemU7CkBAIC0yODQsOCArMjk4LDkgQEAKICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgY291bGQgYmUgb3B0aW1pemVkIHRvIHJlYWxsb2MoKSAqLwogICAgICAgICAgICAgICAgICAgY29tcC0+b3V0cHV0X3B0ciA9IChwbmdfY2hhcnBwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgICAgICAgIChwbmdfdWludF8zMikoY29tcC0+bWF4X291dHB1dF9wdHIgKiBzaXplb2YgKHBuZ19jaGFycHApKSk7Ci0gICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGNvbXAtPm91dHB1dF9wdHIsIG9sZF9wdHIsCi0gICAgICAgICAgICAgIG9sZF9tYXggKiBzaXplb2YgKHBuZ19jaGFycCkpOworICAgICAgICAgICAgICAgICAgaWYgKGNvbXAtPm91dHB1dF9wdHIgIT0gKHBuZ19jaGFycHApTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShjb21wLT5vdXRwdXRfcHRyLCBvbGRfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICBvbGRfbWF4ICogc2l6ZW9mIChwbmdfY2hhcnApKTsKICAgICAgICAgICAgICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIG9sZF9wdHIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQpAQCAtMjk2LDkgKzMxMSwxNCBAQAogICAgICAgICAgICAgLyogc2F2ZSBvZmYgdGhlIGRhdGEgKi8KICAgICAgICAgICAgIGNvbXAtPm91dHB1dF9wdHJbY29tcC0+bnVtX291dHB1dF9wdHJdID0KICAgICAgICAgICAgICAgIChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCAocG5nX3VpbnRfMzIpcG5nX3B0ci0+emJ1Zl9zaXplKTsKLSAgICAgICAgICAgIHBuZ19tZW1jcHkoY29tcC0+b3V0cHV0X3B0cltjb21wLT5udW1fb3V0cHV0X3B0cl0sIHBuZ19wdHItPnpidWYsCi0gICAgICAgICAgICAgICBwbmdfcHRyLT56YnVmX3NpemUpOwotICAgICAgICAgICAgY29tcC0+bnVtX291dHB1dF9wdHIrKzsKKyAgICAgICAgICAgIGlmIChjb21wLT5vdXRwdXRfcHRyW2NvbXAtPm51bV9vdXRwdXRfcHRyXSA9PSAocG5nX2NoYXJwKU5VTEwpCisgICAgICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNhbm5vdCBhbGxvY2F0ZSBjb21wcmVzc2lvbiBidWZmZXIiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoY29tcC0+b3V0cHV0X3B0cltjb21wLT5udW1fb3V0cHV0X3B0cl0sIHBuZ19wdHItPnpidWYsCisgICAgICAgICAgICAgICAgICBwbmdfcHRyLT56YnVmX3NpemUpOworICAgICAgICAgICAgICAgY29tcC0+bnVtX291dHB1dF9wdHIrKzsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogYW5kIHJlc2V0IHRoZSBidWZmZXIgcG9pbnRlcnMgKi8KICAgICAgICAgICAgIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpcG5nX3B0ci0+emJ1Zl9zaXplOwpAQCAtMTEwOSw2ICsxMTI5LDEyIEBACiAgICBwbmdfZGVidWcxKDIsICJLZXl3b3JkIHRvIGJlIGNoZWNrZWQgaXMgJyVzJ1xuIiwga2V5KTsKIAogICAgKm5ld19rZXkgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgKHBuZ191aW50XzMyKShrZXlfbGVuICsgMikpOworIAorICAgaWYgKCpuZXdfa2V5ID09IChwbmdfY2hhcnApTlVMTCkKKyAgIHsKKyAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgbmV3IGtleTsga2V5d29yZCBub3QgY2hlY2tlZCIpOworICAgICAgcmV0dXJuIGtleV9sZW47CisgICB9CiAKICAgIC8qIFJlcGxhY2Ugbm9uLXByaW50aW5nIGNoYXJhY3RlcnMgd2l0aCBhIGJsYW5rIGFuZCBwcmludCBhIHdhcm5pbmcgKi8KICAgIGZvciAoa3AgPSBrZXksIGRwID0gKm5ld19rZXk7ICprcCAhPSAnXDAnOyBrcCsrLCBkcCsrKQpAQCAtMTQyNSw2ICsxNDUxLDEyIEBACiAgICBwYXJhbXNfbGVuID0gKHBuZ191aW50XzMycClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMikobnBhcmFtcwogICAgICAgKnNpemVvZihwbmdfdWludF8zMikpKTsKIAorICAgaWYgKHBhcmFtc19sZW4gPT0gKHBuZ191aW50XzMycClOVUxMKQorICAgeworICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgcGFyYW1zIGZvciBwQ0FMIik7CisgICAgICByZXR1cm47CisgICB9CisKICAgIC8qIEZpbmQgdGhlIGxlbmd0aCBvZiBlYWNoIHBhcmFtZXRlciwgbWFraW5nIHN1cmUgd2UgZG9uJ3QgY291bnQgdGhlCiAgICAgICBudWxsIHRlcm1pbmF0b3IgZm9yIHRoZSBsYXN0IHBhcmFtZXRlci4gKi8KICAgIGZvciAoaSA9IDA7IGkgPCBucGFyYW1zOyBpKyspCkBAIC0xNjA4LDYgKzE2NDAsOCBAQAogCiAgICAvKiBzZXQgdXAgcm93IGJ1ZmZlciAqLwogICAgcG5nX3B0ci0+cm93X2J1ZiA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLCAocG5nX3VpbnRfMzIpYnVmX3NpemUpOworICAgaWYgKHBuZ19wdHItPnJvd19idWYgPT0gKHBuZ19ieXRlcClOVUxMKQorICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgcm93IGJ1ZmZlciIpOwogICAgcG5nX3B0ci0+cm93X2J1ZlswXSA9IFBOR19GSUxURVJfVkFMVUVfTk9ORTsKIAogICAgLyogc2V0IHVwIGZpbHRlcmluZyBidWZmZXIsIGlmIHVzaW5nIHRoaXMgZmlsdGVyICovCkBAIC0xNjE1LDYgKzE2NDksOCBAQAogICAgewogICAgICAgcG5nX3B0ci0+c3ViX3JvdyA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgKHBuZ19wdHItPnJvd2J5dGVzICsgMSkpOworICAgICAgaWYgKHBuZ19wdHItPnN1Yl9yb3cgPT0gKHBuZ19ieXRlcClOVUxMKQorICAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgc3ViIHJvdyBidWZmZXIiKTsKICAgICAgIHBuZ19wdHItPnN1Yl9yb3dbMF0gPSBQTkdfRklMVEVSX1ZBTFVFX1NVQjsKICAgIH0KIApAQCAtMTYyOSw2ICsxNjY1LDggQEAKICAgICAgIHsKICAgICAgICAgIHBuZ19wdHItPnVwX3JvdyA9IChwbmdfYnl0ZXAgKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgIChwbmdfcHRyLT5yb3dieXRlcyArIDEpKTsKKyAgICAgICAgIGlmIChwbmdfcHRyLT51cF9yb3cgPT0gKHBuZ19ieXRlcClOVUxMKQorICAgICAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgdXAgcm93IGJ1ZmZlciIpOwogICAgICAgICAgcG5nX3B0ci0+dXBfcm93WzBdID0gUE5HX0ZJTFRFUl9WQUxVRV9VUDsKICAgICAgIH0KIApAQCAtMTYzNiw2ICsxNjc0LDggQEAKICAgICAgIHsKICAgICAgICAgIHBuZ19wdHItPmF2Z19yb3cgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgIChwbmdfcHRyLT5yb3dieXRlcyArIDEpKTsKKyAgICAgICAgIGlmIChwbmdfcHRyLT5hdmdfcm93ID09IChwbmdfYnl0ZXApTlVMTCkKKyAgICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIGF2ZyByb3cgYnVmZmVyIik7CiAgICAgICAgICBwbmdfcHRyLT5hdmdfcm93WzBdID0gUE5HX0ZJTFRFUl9WQUxVRV9BVkc7CiAgICAgICB9CiAKQEAgLTE2NDMsNiArMTY4Myw4IEBACiAgICAgICB7CiAgICAgICAgICBwbmdfcHRyLT5wYWV0aF9yb3cgPSAocG5nX2J5dGVwIClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAocG5nX3B0ci0+cm93Ynl0ZXMgKyAxKSk7CisgICAgICAgICBpZiAocG5nX3B0ci0+cGFldGhfcm93ID09IChwbmdfYnl0ZXApTlVMTCkKKyAgICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIHBhZXRoIHJvdyBidWZmZXIiKTsKICAgICAgICAgIHBuZ19wdHItPnBhZXRoX3Jvd1swXSA9IFBOR19GSUxURVJfVkFMVUVfUEFFVEg7CiAgICAgICB9CiAgICB9CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9tc3ZjL1JFQURNRS50eHQgYi9wcm9qZWN0cy9tc3ZjL1JFQURNRS50eHQKaW5kZXggYWVlOTcwNy4uYmZiZmU5MCAxMDA2NDQKLS0tIGEvcHJvamVjdHMvbXN2Yy9SRUFETUUudHh0CisrKyBiL3Byb2plY3RzL21zdmMvUkVBRE1FLnR4dApAQCAtMSw1ICsxLDUgQEAKIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAgZm9yCi1saWJwbmcgMS4wLjExYmV0YTIgKEFwcmlsIDExLCAyMDAxKSBhbmQgemxpYgorbGlicG5nIDEuMC4xMWJldGEzIChBcHJpbCAxNSwgMjAwMSkgYW5kIHpsaWIKIAogQ29weXJpZ2h0IChDKSAyMDAwIFNpbW9uLVBpZXJyZSBDYWRpZXV4CiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKZGlmZiAtLWdpdCBhL3Byb2plY3RzL21zdmMvcG5nMzJtcy5kZWYgYi9wcm9qZWN0cy9tc3ZjL3BuZzMybXMuZGVmCmluZGV4IDZjYTY5MTAuLjMyMDI1NTggMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL21zdmMvcG5nMzJtcy5kZWYKKysrIGIvcHJvamVjdHMvbXN2Yy9wbmczMm1zLmRlZgpAQCAtNiw3ICs2LDcgQEAKIERFU0NSSVBUSU9OICJQTkcgaW1hZ2UgY29tcHJlc3Npb24gbGlicmFyeSBmb3IgV2luZG93cyIKIAogRVhQT1JUUwotO1ZlcnNpb24gMS4wLjExYmV0YTIKKztWZXJzaW9uIDEuMC4xMWJldGEzCiAgIHBuZ19idWlsZF9ncmF5c2NhbGVfcGFsZXR0ZSAgQDEKICAgcG5nX2NoZWNrX3NpZyAgICAgICAgQDIKICAgcG5nX2NodW5rX2Vycm9yICAgICAgQDMKZGlmZiAtLWdpdCBhL3Byb2plY3RzL3dpbmNlL1JFQURNRUUuV0NFIGIvcHJvamVjdHMvd2luY2UvUkVBRE1FRS5XQ0UKaW5kZXggNzE3N2Q4Mi4uOThiODMzZCAxMDA2NDQKLS0tIGEvcHJvamVjdHMvd2luY2UvUkVBRE1FRS5XQ0UKKysrIGIvcHJvamVjdHMvd2luY2UvUkVBRE1FRS5XQ0UKQEAgLTgsOSArOCw5IEBACiAKIEludHJvZHVjdGlvbgogPT09PT09PT09PT09Ci1UaGlzIGlzIGxpYnBuZyAxLjAuMTFiZXRhMiBwb3J0ZWQgdG8gV2luZG93c0NFIDIuMCBhbmQgMi4xMS4KLWxpYnBuZyAxLjAuMTFiZXRhMiBpcyBhIFBORyByZWZlcmVuY2UgbGlicmFyeS4KLVNlZSBSRUFETUUsIGEgZG9jdW1lbnQgb2Ygb3JpZ2luYWwgbGlicG5nIDEuMC4xMWJldGEyLgorVGhpcyBpcyBsaWJwbmcgMS4wLjExYmV0YTMgcG9ydGVkIHRvIFdpbmRvd3NDRSAyLjAgYW5kIDIuMTEuCitsaWJwbmcgMS4wLjExYmV0YTMgaXMgYSBQTkcgcmVmZXJlbmNlIGxpYnJhcnkuCitTZWUgUkVBRE1FLCBhIGRvY3VtZW50IG9mIG9yaWdpbmFsIGxpYnBuZyAxLjAuMTFiZXRhMy4KIAogemxpYiBmb3IgV2luZG93c0NFCiA9PT09PT09PT09PT09PT09PT0KQEAgLTIzLDcgKzIzLDcgQEAKIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCiAKLVNlZSBSRUFETUUgYW5kIExJQ0VOU0UsIGRvY3VtZW50cyBvZiBvcmlnaW5hbCBsaWJwbmcgMS4wLjExYmV0YTIsIGZvciBjb25kaXRpb25zCitTZWUgUkVBRE1FIGFuZCBMSUNFTlNFLCBkb2N1bWVudHMgb2Ygb3JpZ2luYWwgbGlicG5nIDEuMC4xMWJldGEzLCBmb3IgY29uZGl0aW9ucwogb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uCiAKIEZpbGVzCmRpZmYgLS1naXQgYS9wcm9qZWN0cy93aW5jZS9SRUFETUVKLldDRSBiL3Byb2plY3RzL3dpbmNlL1JFQURNRUouV0NFCmluZGV4IGFmODhkMDAuLjgzZjI5NWIgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL3dpbmNlL1JFQURNRUouV0NFCisrKyBiL3Byb2plY3RzL3dpbmNlL1JFQURNRUouV0NFCkBAIC0yNCw3ICsyNCw3IEBACiCCyYLIgsGCvYKigqmCyILplO2KUYLJgsKCooLEguCBQY3sjtKBQZR6lXqO0oFBgruCzJG8l5iXcI7SiMiKT4LMkGyVqIFBCiCSY5HMgsmQ05RDgvCCxoLpi2CWsYLNgsiCooLggsyCxoK1gtyCt4FCCiAKLYK7gsyRvIFBgrGCzINcg3SDZ4NFg0aDQYLMl5iXcI/wjI+CyYLCgqKCxILNgUGMtJTFgsWCoILpIGxpYnBuZyAxLjAuMTFiZXRhMoLJCiuCu4LMkbyBQYKxgsyDXIN0g2eDRYNGg0GCzJeYl3CP8IyPgsmCwoKigsSCzYFBjLSUxYLFgqCC6SBsaWJwbmcgMS4wLjExYmV0YTOCyQogj4CLkoK3gumC4ILMgsaCtYLcgreBQo/agrWCrYLNgUGVdJGugswgUkVBRE1FLExJQ0VOU0UggvCCqJPHgt2CrYK+grOCooFCCiAKII77mF6T4JdlCmRpZmYgLS1naXQgYS9wcm9qZWN0cy93aW5jZS9wbmczMmNlLmRlZiBiL3Byb2plY3RzL3dpbmNlL3BuZzMyY2UuZGVmCmluZGV4IGYyNGVhNDIuLjllZmYxMzMgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL3dpbmNlL3BuZzMyY2UuZGVmCisrKyBiL3Byb2plY3RzL3dpbmNlL3BuZzMyY2UuZGVmCkBAIC01LDcgKzUsNyBAQAogTElCUkFSWSBscG5nY2UKIAogRVhQT1JUUwotO1ZlcnNpb24gMS4wLjExYmV0YTIKKztWZXJzaW9uIDEuMC4xMWJldGEzCiAgIHBuZ19idWlsZF9ncmF5c2NhbGVfcGFsZXR0ZSAgQDEKICAgcG5nX2NoZWNrX3NpZyAgICAgICAgQDIKICAgcG5nX2NodW5rX2Vycm9yICAgICAgQDMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuYWl4IGIvc2NyaXB0cy9tYWtlZmlsZS5haXgKaW5kZXggZmE3ODE0Zi4uYWE1ZTUxYSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5haXgKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5haXgKQEAgLTE4LDcgKzE4LDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMC4xMWJldGEyCitQTkdNSU4gPSAxLjAuMTFiZXRhMwogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiBwcmVmaXg9L3Vzci9sb2NhbApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5iZW9zIGIvc2NyaXB0cy9tYWtlZmlsZS5iZW9zCmluZGV4IDM5ZWU5MmMuLmE3NjM2MWQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuYmVvcworKysgYi9zY3JpcHRzL21ha2VmaWxlLmJlb3MKQEAgLTEzLDcgKzEzLDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMC4xMWJldGEyCitQTkdNSU4gPSAxLjAuMTFiZXRhMwogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiBBTElHTj0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuY3lnd2luIGIvc2NyaXB0cy9tYWtlZmlsZS5jeWd3aW4KaW5kZXggZjFjMDhkOS4uOTZmZGEwMiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5jeWd3aW4KKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5jeWd3aW4KQEAgLTM5LDggKzM5LDggQEAKICMgaGF2ZSB0byBjaGFuZ2UgaXQuCiBQTkdNQUogPSAyCiAjUE5HRExMID0gJDEjIG1zdmMKLVBOR0RMTCA9IDIjIGN5Z3dpbiAxLjAuMTFiZXRhMgotUE5HTUlOID0gMS4wLjExYmV0YTIKK1BOR0RMTCA9IDIjIGN5Z3dpbiAxLjAuMTFiZXRhMworUE5HTUlOID0gMS4wLjExYmV0YTMKIFBOR01JTl9CQVNFID0gMS4wLjExCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuZGVjIGIvc2NyaXB0cy9tYWtlZmlsZS5kZWMKaW5kZXggM2EzMWViZi4uOTRlNTUwMCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5kZWMKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5kZWMKQEAgLTE3LDcgKzE3LDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMC4xMWJldGEyCitQTkdNSU4gPSAxLjAuMTFiZXRhMwogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiBDQz1jYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5nY21teCBiL3NjcmlwdHMvbWFrZWZpbGUuZ2NtbXgKaW5kZXggNGMxOTM5Ny4uNzNhYWFhYSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5nY21teAorKysgYi9zY3JpcHRzL21ha2VmaWxlLmdjbW14CkBAIC01MSw3ICs1MSw3IEBACiAjIHJlYWQgbGlicG5nLnR4dCBvciBwbmcuaCB0byBzZWUgd2h5IFBOR01BSiBpcyAyLiAgWW91IHNob3VsZCBub3QKICMgaGF2ZSB0byBjaGFuZ2UgaXQuCiBQTkdNQUogPSAyCi1QTkdNSU4gPSAxLjAuMTFiZXRhMgorUE5HTUlOID0gMS4wLjExYmV0YTMKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogSU5DUEFUSD0kKHByZWZpeCkvaW5jbHVkZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5ocGdjYyBiL3NjcmlwdHMvbWFrZWZpbGUuaHBnY2MKaW5kZXggMDBjMGIxOC4uYTNkMDFjZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5ocGdjYworKysgYi9zY3JpcHRzL21ha2VmaWxlLmhwZ2NjCkBAIC0zNCw3ICszNCw3IEBACiAjIHJlYWQgbGlicG5nLnR4dCBvciBwbmcuaCB0byBzZWUgd2h5IFBOR01BSiBpcyAyLiAgWW91IHNob3VsZCBub3QKICMgaGF2ZSB0byBjaGFuZ2UgaXQuCiBQTkdNQUogPSAyCi1QTkdNSU4gPSAxLjAuMTFiZXRhMgorUE5HTUlOID0gMS4wLjExYmV0YTMKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogSU5DUEFUSD0kKHByZWZpeCkvaW5jbHVkZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5ocHV4IGIvc2NyaXB0cy9tYWtlZmlsZS5ocHV4CmluZGV4IDg4MjYzZDAuLjIzNWQzZTkgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuaHB1eAorKysgYi9zY3JpcHRzL21ha2VmaWxlLmhwdXgKQEAgLTE5LDcgKzE5LDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMC4xMWJldGEyCitQTkdNSU4gPSAxLjAuMTFiZXRhMwogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiAjIHdoZXJlIG1ha2UgaW5zdGFsbCBwdXRzIGxpYnBuZy5hIGFuZCBwbmcuaApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5saW51eCBiL3NjcmlwdHMvbWFrZWZpbGUubGludXgKaW5kZXggNDY3Y2NiZS4uZDEzODI5MCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5saW51eAorKysgYi9zY3JpcHRzL21ha2VmaWxlLmxpbnV4CkBAIC0zNCw3ICszNCw3IEBACiAjIHJlYWQgbGlicG5nLnR4dCBvciBwbmcuaCB0byBzZWUgd2h5IFBOR01BSiBpcyAyLiAgWW91IHNob3VsZCBub3QKICMgaGF2ZSB0byBjaGFuZ2UgaXQuCiBQTkdNQUogPSAyCi1QTkdNSU4gPSAxLjAuMTFiZXRhMgorUE5HTUlOID0gMS4wLjExYmV0YTMKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogSU5DUEFUSD0kKHByZWZpeCkvaW5jbHVkZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5zY28gYi9zY3JpcHRzL21ha2VmaWxlLnNjbwppbmRleCBkMDE2YTlkLi5mZmEyNGRhIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLnNjbworKysgYi9zY3JpcHRzL21ha2VmaWxlLnNjbwpAQCAtMjUsNyArMjUsNyBAQAogIyByZWFkIGxpYnBuZy50eHQgb3IgcG5nLmggdG8gc2VlIHdoeSBQTkdNQUogaXMgMi4gIFlvdSBzaG91bGQgbm90CiAjIGhhdmUgdG8gY2hhbmdlIGl0LgogUE5HTUFKID0gMgotUE5HTUlOID0gMS4wLjExYmV0YTIKK1BOR01JTiA9IDEuMC4xMWJldGEzCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKIElOQ1BBVEg9JChwcmVmaXgpL2luY2x1ZGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuc2dnY2MgYi9zY3JpcHRzL21ha2VmaWxlLnNnZ2NjCmluZGV4IGQ0OTdmN2EuLjkyNTZmYWIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuc2dnY2MKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zZ2djYwpAQCAtMTksOCArMTksOCBAQAogTERGTEFHUz0tTC4gLUwkKFpMSUJMSUIpIC1scG5nIC1seiAtbG0KIExEU0hBUkVEPWdjYyAtc2hhcmVkCiAKLVZFUj0xLjAuMTFiZXRhMgotTElCUz1saWJwbmcuc28uMS4wLjExYmV0YTIKK1ZFUj0xLjAuMTFiZXRhMworTElCUz1saWJwbmcuc28uMS4wLjExYmV0YTMKIFNIQVJFRExJQj1saWJwbmcuc28KIGxpYmRpcj0kKHByZWZpeCkvbGliMzIKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5zZ2kgYi9zY3JpcHRzL21ha2VmaWxlLnNnaQppbmRleCA3ZTFjYmJkLi44MmEzMWM0IDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLnNnaQorKysgYi9zY3JpcHRzL21ha2VmaWxlLnNnaQpAQCAtMjUsNyArMjUsNyBAQAogTERGTEFHUz0tTC4gLUwkKFpMSUJMSUIpIC1scG5nIC1seiAtbG0KIExEU0hBUkVEPWNjIC1zaGFyZWQKIAotVkVSPTEuMC4xMWJldGEyCitWRVI9MS4wLjExYmV0YTMKIFNPTlVNPTIKIFNIQVJFRExJQj1saWJwbmcuc28KIGxpYmRpcj0kKHByZWZpeCkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuc29sYXJpcyBiL3NjcmlwdHMvbWFrZWZpbGUuc29sYXJpcwppbmRleCA2ZDU4Yjc5Li5mMDMwNDFjIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLnNvbGFyaXMKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zb2xhcmlzCkBAIC0zMSw3ICszMSw3IEBACiAjIHJlYWQgbGlicG5nLnR4dCBvciBwbmcuaCB0byBzZWUgd2h5IFBOR01BSiBpcyAyLiAgWW91IHNob3VsZCBub3QKICMgaGF2ZSB0byBjaGFuZ2UgaXQuCiBQTkdNQUogPSAyCi1QTkdNSU4gPSAxLjAuMTFiZXRhMgorUE5HTUlOID0gMS4wLjExYmV0YTMKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogSU5DUEFUSD0kKHByZWZpeCkvaW5jbHVkZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wbmdkZWYucGFzIGIvc2NyaXB0cy9wbmdkZWYucGFzCmluZGV4IGFhNDk5YzEuLjExYzRjOTIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcG5nZGVmLnBhcworKysgYi9zY3JpcHRzL3BuZ2RlZi5wYXMKQEAgLTcsNyArNyw3IEBACiBpbnRlcmZhY2UKIAogY29uc3QKLSAgUE5HX0xJQlBOR19WRVJfU1RSSU5HID0gJzEuMC4xMWJldGEyJzsKKyAgUE5HX0xJQlBOR19WRVJfU1RSSU5HID0gJzEuMC4xMWJldGEzJzsKICAgUE5HX0xJQlBOR19WRVIgICAgICAgID0gIDEwMDExOwogCiB0eXBlCmRpZmYgLS1naXQgYS9zY3JpcHRzL3BuZ29zMi5kZWYgYi9zY3JpcHRzL3BuZ29zMi5kZWYKaW5kZXggNDA3MzQ1Zi4uNmQ3YTI5OSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9wbmdvczIuZGVmCisrKyBiL3NjcmlwdHMvcG5nb3MyLmRlZgpAQCAtMiw3ICsyLDcgQEAKIDsgUE5HLkxJQiBtb2R1bGUgZGVmaW5pdGlvbiBmaWxlIGZvciBPUy8yCiA7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi07IFZlcnNpb24gMS4wLjExYmV0YTIKKzsgVmVyc2lvbiAxLjAuMTFiZXRhMwogCiBMSUJSQVJZCQlQTkcKIERFU0NSSVBUSU9OCSJQTkcgaW1hZ2UgY29tcHJlc3Npb24gbGlicmFyeSBmb3IgT1MvMiIK