ZGlmZiAtLWdpdCBhL2F1dG8vY29uZmlndXJlIGIvYXV0by9jb25maWd1cmUKaW5kZXggODkzOTBlYS4uMzA3ZjNmYSAxMDA3NTUKLS0tIGEvYXV0by9jb25maWd1cmUKKysrIGIvYXV0by9jb25maWd1cmUKQEAgLTY1LDYgKzY1LDcgQEAKIGhhdmU9TkdYX1NCSU5fUEFUSCB2YWx1ZT0iXCIkTkdYX1NCSU5fUEFUSFwiIiAuIGF1dG8vZGVmaW5lCiBoYXZlPU5HWF9DT05GX1BBVEggdmFsdWU9IlwiJE5HWF9DT05GX1BBVEhcIiIgLiBhdXRvL2RlZmluZQogaGF2ZT1OR1hfUElEX1BBVEggdmFsdWU9IlwiJE5HWF9QSURfUEFUSFwiIiAuIGF1dG8vZGVmaW5lCitoYXZlPU5HWF9MT0NLX1BBVEggdmFsdWU9IlwiJE5HWF9MT0NLX1BBVEhcIiIgLiBhdXRvL2RlZmluZQogaWYgdGVzdCAtbiAiJE5HWF9FUlJPUl9MT0dfUEFUSCI7IHRoZW4KICAgICBoYXZlPU5HWF9FUlJPUl9MT0dfUEFUSCB2YWx1ZT0iXCIkTkdYX0VSUk9SX0xPR19QQVRIXCIiIC4gYXV0by9kZWZpbmUKIGZpCmRpZmYgLS1naXQgYS9hdXRvL29wdGlvbnMgYi9hdXRvL29wdGlvbnMKaW5kZXggNmI5OTFhOS4uMmY0YmU2MiAxMDA2NDQKLS0tIGEvYXV0by9vcHRpb25zCisrKyBiL2F1dG8vb3B0aW9ucwpAQCAtOSw2ICs5LDcgQEAKIE5HWF9DT05GX1BBVEg9CiBOR1hfRVJST1JfTE9HX1BBVEg9CiBOR1hfUElEX1BBVEg9CitOR1hfTE9DS19QQVRIPQogTkdYX1VTRVI9CiBOR1hfR1JPVVA9CiAKQEAgLTExMiw2ICsxMTMsNyBAQAogICAgICAgICAtLWNvbmYtcGF0aD0qKSAgICAgICAgICAgICAgICAgICBOR1hfQ09ORl9QQVRIPSIkdmFsdWUiICAgICA7OwogICAgICAgICAtLWVycm9yLWxvZy1wYXRoPSopICAgICAgICAgICAgICBOR1hfRVJST1JfTE9HX1BBVEg9IiR2YWx1ZSI7OwogICAgICAgICAtLXBpZC1wYXRoPSopICAgICAgICAgICAgICAgICAgICBOR1hfUElEX1BBVEg9IiR2YWx1ZSIgICAgICA7OworICAgICAgICAtLWxvY2stcGF0aD0qKSAgICAgICAgICAgICAgICAgICBOR1hfTE9DS19QQVRIPSIkdmFsdWUiICAgICA7OwogICAgICAgICAtLXVzZXI9KikgICAgICAgICAgICAgICAgICAgICAgICBOR1hfVVNFUj0iJHZhbHVlIiAgICAgICAgICA7OwogICAgICAgICAtLWdyb3VwPSopICAgICAgICAgICAgICAgICAgICAgICBOR1hfR1JPVVA9IiR2YWx1ZSIgICAgICAgICA7OwogCkBAIC0yMTIsNiArMjE0LDcgQEAKICAgLS1jb25mLXBhdGg9UEFUSCAgICAgICAgICAgICAgICAgICBzZXQgcGF0aCB0byB0aGUgbmdpbnguY29uZiBmaWxlCiAgIC0tZXJyb3ItbG9nLXBhdGg9UEFUSCAgICAgICAgICAgICAgc2V0IHBhdGggdG8gdGhlIGVycm9yIGxvZwogICAtLXBpZC1wYXRoPVBBVEggICAgICAgICAgICAgICAgICAgIHNldCBwYXRoIHRvIG5naW54LnBpZCBmaWxlCisgIC0tbG9jay1wYXRoPVBBVEggICAgICAgICAgICAgICAgICAgc2V0IHBhdGggdG8gbmdpbngubG9jayBmaWxlCiAKICAgLS11c2VyPVVTRVIgICAgICAgICAgICAgICAgICAgICAgICBzZXQgbm9uLXByaXZpbGVnZSB1c2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSB3b3JrZXIgcHJvY2Vzc2VzCkBAIC0zNTQsNiArMzU3LDIwIEBACiBlc2FjCiAKIAorY2FzZSAiLiROR1hfTE9DS19QQVRIIiBpbgorICAgIC4vKikKKyAgICA7OworCisgICAgLikKKyAgICAgICAgTkdYX0xPQ0tfUEFUSD0kTkdYX1BSRUZJWC9sb2dzL25naW54LmxvY2sKKyAgICA7OworCisgICAgKikKKyAgICAgICAgTkdYX0xPQ0tfUEFUSD0kTkdYX1BSRUZJWC8kTkdYX0xPQ0tfUEFUSAorICAgIDs7Citlc2FjCisKKwogY2FzZSAiLiROR1hfRVJST1JfTE9HX1BBVEgiIGluCiAgICAgLi8qKQogICAgIDs7CmRpZmYgLS1naXQgYS9hdXRvL3NvdXJjZXMgYi9hdXRvL3NvdXJjZXMKaW5kZXggNWRhYzE5OS4uMjA4NjZmNiAxMDA2NDQKLS0tIGEvYXV0by9zb3VyY2VzCisrKyBiL2F1dG8vc291cmNlcwpAQCAtMjMsNiArMjMsNyBAQAogICAgICAgICAgICBzcmMvY29yZS9uZ3hfcmJ0cmVlLmggXAogICAgICAgICAgICBzcmMvY29yZS9uZ3hfcmFkaXhfdHJlZS5oIFwKICAgICAgICAgICAgc3JjL2NvcmUvbmd4X3RpbWVzLmggXAorICAgICAgICAgICBzcmMvY29yZS9uZ3hfc2htdHguaCBcCiAgICAgICAgICAgIHNyYy9jb3JlL25neF9jb25uZWN0aW9uLmggXAogICAgICAgICAgICBzcmMvY29yZS9uZ3hfY3ljbGUuaCBcCiAgICAgICAgICAgIHNyYy9jb3JlL25neF9jb25mX2ZpbGUuaCBcCkBAIC00NCw5ICs0NSwxMSBAQAogICAgICAgICAgICBzcmMvY29yZS9uZ3hfcmJ0cmVlLmMgXAogICAgICAgICAgICBzcmMvY29yZS9uZ3hfcmFkaXhfdHJlZS5jIFwKICAgICAgICAgICAgc3JjL2NvcmUvbmd4X3RpbWVzLmMgXAorICAgICAgICAgICBzcmMvY29yZS9uZ3hfc2htdHguYyBcCiAgICAgICAgICAgIHNyYy9jb3JlL25neF9jb25uZWN0aW9uLmMgXAogICAgICAgICAgICBzcmMvY29yZS9uZ3hfY3ljbGUuYyBcCiAgICAgICAgICAgIHNyYy9jb3JlL25neF9zcGlubG9jay5jIFwKKyAgICAgICAgICAgc3JjL2NvcmUvbmd4X2NwdWluZm8uYyBcCiAgICAgICAgICAgIHNyYy9jb3JlL25neF9jb25mX2ZpbGUuYyBcCiAgICAgICAgICAgIHNyYy9jb3JlL25neF9nYXJiYWdlX2NvbGxlY3Rvci5jIgogCmRpZmYgLS1naXQgYS9jb25mL25naW54LmNvbmYgYi9jb25mL25naW54LmNvbmYKaW5kZXggN2I5NjdkNi4uMTE0MDRhZCAxMDA2NDQKLS0tIGEvY29uZi9uZ2lueC5jb25mCisrKyBiL2NvbmYvbmdpbnguY29uZgpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAjbG9jYXRpb24gfiBcLnBocCQgewogICAgICAgICAjICAgIGZhc3RjZ2lfcGFzcyAgIDEyNy4wLjAuMTo5MDAwOwogICAgICAgICAjICAgIGZhc3RjZ2lfaW5kZXggIGluZGV4LnBocDsKLSAgICAgICAgIyAgICBmYXN0Y2dpX3BhcmFtICBQQVRIX1RSQU5TTEFURUQgIC9zY3JpcHRzJGZhc3RjZ2lfc2NyaXB0X25hbWU7CisgICAgICAgICMgICAgZmFzdGNnaV9wYXJhbSAgU0NSSVBUX0ZJTEVOQU1FICAvc2NyaXB0cyRmYXN0Y2dpX3NjcmlwdF9uYW1lOwogICAgICAgICAjICAgIGluY2x1ZGUgICAgICAgIGNvbmYvZmFzdGNnaV9wYXJhbXM7CiAgICAgICAgICN9CiAKZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggMTk1OTNlYi4uOTNjZmFlYyAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSw4MCBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4zLjI3IiBkYXRlPSIwOC4wMi4yMDA2Ij4KKworPGNoYW5nZSB0eXBlPSJjaGFuZ2UiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfZIHZhcmlhYmxlc19oYXNoX21heF9zaXplIMkgdmFyaWFibGVzX2hhc2hfYnVja2V0X3NpemUuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgInZhcmlhYmxlc19oYXNoX21heF9zaXplIiBhbmQgInZhcmlhYmxlc19oYXNoX2J1Y2tldF9zaXplIiBkaXJlY3RpdmVzLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivQxdLFzcXOzsHRICRib2R5X2J5dGVzX3NlbnQgxM/T1NXQzsEgzsUg1M/M2MvPINcgxMnSxcvUydfFIGxvZ19mb3JtYXQuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgJGJvZHlfYnl0ZXNfc2VudCB2YXJpYWJsZSBjYW4gYmUgdXNlZCBub3Qgb25seSBpbiB0aGUgImxvZ19mb3JtYXQiCitkaXJlY3RpdmUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DF0sXNxc7O2cUgJHNzbF9wcm90b2NvbCDJICRzc2xfY2lwaGVyLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICRzc2xfcHJvdG9jb2wgYW5kICRzc2xfY2lwaGVyIHZhcmlhYmxlcy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorz9DSxcTFzMXOycUg0sHazcXSwSDT1NLPy8kgy9zbwSDSwdPQ0s/T1NLBzqPOztnIINDSz8PF09PP0s/XINDSySDT1MHS1MUuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgY2FjaGUgbGluZSBzaXplIGRldGVjdGlvbiBmb3Igd2lkZXNwcmVhZCBDUFVzIGF0IHN0YXJ0IHRpbWUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSBhY2NlcHRfbXV0ZXgg1MXQxdLYINDPxMTF0tbJ18HF1NPRINDP09LFxNPU18/NIGZjbnRsKDIpCivOwSDQzMHUxs/SzcHILCDP1MzJ3s7ZyCDP1CBpMzg2LCBhbWQ2NCwgc3BhcmM2NCDJIHBwYy4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK25vdyB0aGUgImFjY2VwdF9tdXRleCIgZGlyZWN0aXZlIGlzIHN1cHBvcnRlZCB1c2luZyBmY250bCgyKQorb24gcGxhdGZvcm1zIGRpZmZlcmVudCBmcm9tIGkzODYsIGFtZDY0LCBzcGFyYzY0LCBhbmQgcHBjLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivEydLFy9TJ18EgbG9ja19maWxlIMkg0MHSwc3F1NIgwdfUz8vPzsbJx9XSwcPJySAtLXdpdGgtbG9jay1wYXRoPVBBVEguCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgImxvY2tfZmlsZSIgZGlyZWN0aXZlIGFuZCB0aGUgLS13aXRoLWxvY2stcGF0aD1QQVRIIGF1dG9jb25maWd1cmF0aW9uCitkaXJlY3RpdmUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor0NLJIMnT0M/M2NrP18HOyckg0NLP1M/Lz8zBIEhUVFBTINcgxMnSxcvUydfFIHByb3h5X3Bhc3MgzsUg0MXSxcTB18HMydPYCivawdDSz9PZINMg1MXMz80uCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpZiB0aGUgSFRUUCBwcm90b2NvbCB3YXMgdXNlZCBpbiB0aGUgInByb3h5X3Bhc3MiIGRpcmVjdGl2ZSB0aGVuCit0aGUgcmVxdWVzdHMgd2l0aCB0aGUgYm9keSBkaWQgbm90IHRyYW5zZmVycmVkLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMy4yNiIgZGF0ZT0iMDMuMDIuMjAwNiI+CiAKIDxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmMgYi9zcmMvY29yZS9uZ2lueC5jCmluZGV4IGE5YTBkZDkuLjY0ZjgwMTIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmMKKysrIGIvc3JjL2NvcmUvbmdpbnguYwpAQCAtNTgsNiArNTgsMTMgQEAKICAgICAgIG9mZnNldG9mKG5neF9jb3JlX2NvbmZfdCwgcGlkKSwKICAgICAgIE5VTEwgfSwKIAorICAgIHsgbmd4X3N0cmluZygibG9ja19maWxlIiksCisgICAgICBOR1hfTUFJTl9DT05GfE5HWF9ESVJFQ1RfQ09ORnxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIG5neF9jb25mX3NldF9zdHJfc2xvdCwKKyAgICAgIDAsCisgICAgICBvZmZzZXRvZihuZ3hfY29yZV9jb25mX3QsIGxvY2tfZmlsZSksCisgICAgICBOVUxMIH0sCisKICAgICB7IG5neF9zdHJpbmcoIndvcmtlcl9wcm9jZXNzZXMiKSwKICAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X251bV9zbG90LApAQCAtMjE0LDExICsyMjEsMTEgQEAKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCi0gICAgaWYgKG5neF9zYXZlX2FyZ3YoJmluaXRfY3ljbGUsIGFyZ2MsIGFyZ3YpID09IE5HWF9FUlJPUikgeworICAgIGlmIChuZ3hfc2F2ZV9hcmd2KCZpbml0X2N5Y2xlLCBhcmdjLCBhcmd2KSAhPSBOR1hfT0spIHsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCi0gICAgaWYgKG5neF9nZXRvcHQoJmluaXRfY3ljbGUsIGFyZ2MsIG5neF9hcmd2KSA9PSBOR1hfRVJST1IpIHsKKyAgICBpZiAobmd4X2dldG9wdCgmaW5pdF9jeWNsZSwgYXJnYywgbmd4X2FyZ3YpICE9IE5HWF9PSykgewogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKQEAgLTIyNiwxMSArMjMzLDExIEBACiAgICAgICAgIGxvZy0+bG9nX2xldmVsID0gTkdYX0xPR19JTkZPOwogICAgIH0KIAotICAgIGlmIChuZ3hfb3NfaW5pdChsb2cpID09IE5HWF9FUlJPUikgeworICAgIGlmIChuZ3hfb3NfaW5pdChsb2cpICE9IE5HWF9PSykgewogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKLSAgICBpZiAobmd4X2FkZF9pbmhlcml0ZWRfc29ja2V0cygmaW5pdF9jeWNsZSkgPT0gTkdYX0VSUk9SKSB7CisgICAgaWYgKG5neF9hZGRfaW5oZXJpdGVkX3NvY2tldHMoJmluaXRfY3ljbGUpICE9IE5HWF9PSykgewogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKQEAgLTI3NCw3ICsyODEsNyBAQAogICAgIFRPRE86CiAKICAgICBpZiAoY2NmLT5ydW5fYXNfc2VydmljZSkgewotICAgICAgICBpZiAobmd4X3NlcnZpY2UoY3ljbGUtPmxvZykgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgIGlmIChuZ3hfc2VydmljZShjeWNsZS0+bG9nKSAhPSBOR1hfT0spIHsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAKQEAgLTI4NCwxOSArMjkxLDE5IEBACiAKICNlbHNlCiAKLSAgICBpZiAobmd4X2luaXRfc2lnbmFscyhjeWNsZS0+bG9nKSA9PSBOR1hfRVJST1IpIHsKKyAgICBpZiAobmd4X2luaXRfc2lnbmFscyhjeWNsZS0+bG9nKSAhPSBOR1hfT0spIHsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCiAgICAgaWYgKCFuZ3hfaW5oZXJpdGVkICYmIGNjZi0+ZGFlbW9uKSB7Ci0gICAgICAgIGlmIChuZ3hfZGFlbW9uKGN5Y2xlLT5sb2cpID09IE5HWF9FUlJPUikgeworICAgICAgICBpZiAobmd4X2RhZW1vbihjeWNsZS0+bG9nKSAhPSBOR1hfT0spIHsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAKICAgICAgICAgbmd4X2RhZW1vbml6ZWQgPSAxOwogICAgIH0KIAotICAgIGlmIChuZ3hfY3JlYXRlX3BpZGZpbGUoY3ljbGUsIE5VTEwpID09IE5HWF9FUlJPUikgeworICAgIGlmIChuZ3hfY3JlYXRlX3BpZGZpbGUoJmNjZi0+cGlkLCBjeWNsZS0+bG9nKSAhPSBOR1hfT0spIHsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCkBAIC02NjYsNiArNjczLDE1IEBACiAgICAgbmd4X21lbWNweShuZ3hfY3B5bWVtKGNjZi0+b2xkcGlkLmRhdGEsIGNjZi0+cGlkLmRhdGEsIGNjZi0+cGlkLmxlbiksCiAgICAgICAgICAgICAgICBOR1hfT0xEUElEX0VYVCwgc2l6ZW9mKE5HWF9PTERQSURfRVhUKSk7CiAKKyAgICBpZiAoY2NmLT5sb2NrX2ZpbGUubGVuID09IDApIHsKKyAgICAgICAgY2NmLT5sb2NrX2ZpbGUubGVuID0gc2l6ZW9mKE5HWF9MT0NLX1BBVEgpIC0gMTsKKyAgICAgICAgY2NmLT5sb2NrX2ZpbGUuZGF0YSA9ICh1X2NoYXIgKikgTkdYX0xPQ0tfUEFUSDsKKyAgICB9CisKKyAgICBpZiAobmd4X2NvbmZfZnVsbF9uYW1lKGN5Y2xlLCAmY2NmLT5sb2NrX2ZpbGUpID09IE5HWF9FUlJPUikgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQorCiAjZW5kaWYKIAogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmggYi9zcmMvY29yZS9uZ2lueC5oCmluZGV4IGM4ZGRkZGIuLjc0YmE4MDkgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmgKKysrIGIvc3JjL2NvcmUvbmdpbnguaApAQCAtOCw3ICs4LDcgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy4yNiIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuMjciCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX09MRFBJRF9FWFQgICAgICIub2xkYmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYyBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMKaW5kZXggNzU2MDQyOC4uYWJjMDA2ZiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYworKysgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jCkBAIC00OTUsNyArNDk1LDcgQEAKICAgICB9CiAKICAgICBuZ3hfYWNjZXB0X211dGV4X2hlbGQgPSAwOwotICAgIG5neF9hY2NlcHRfbXV0ZXggPSBOVUxMOworICAgIG5neF91c2VfYWNjZXB0X211dGV4ID0gMDsKIAogICAgIGxzID0gY3ljbGUtPmxpc3RlbmluZy5lbHRzOwogICAgIGZvciAoaSA9IDA7IGkgPCBjeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBpKyspIHsKQEAgLTcyNiw3ICs3MjYsNiBAQAogICAgICAgICB8fCBlcnIgPT0gTkdYX0VDT05OUkVGVVNFRAogICAgICAgICB8fCBlcnIgPT0gTkdYX0VIT1NUVU5SRUFDSCkKICAgICB7Ci0KICAgICAgICAgc3dpdGNoIChjLT5sb2dfZXJyb3IpIHsKIAogICAgICAgICBjYXNlIE5HWF9FUlJPUl9JR05PUkVfRUNPTk5SRVNFVDoKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb3JlLmggYi9zcmMvY29yZS9uZ3hfY29yZS5oCmluZGV4IDQ2ZTg4ZGYuLjE3Nzk1MTMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb3JlLmgKKysrIGIvc3JjL2NvcmUvbmd4X2NvcmUuaApAQCAtNjIsNiArNjIsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8bmd4X3JhZGl4X3RyZWUuaD4KICNpbmNsdWRlIDxuZ3hfdGltZXMuaD4KKyNpbmNsdWRlIDxuZ3hfc2htdHguaD4KICNpbmNsdWRlIDxuZ3hfaW5ldC5oPgogI2lmIChOR1hfSEFWRV9VTklYX0RPTUFJTikKICNpbmNsdWRlIDxuZ3hfdW5peF9kb21haW4uaD4KQEAgLTgzLDUgKzg0LDcgQEAKIAogI2RlZmluZSBuZ3hfYWJzKHZhbHVlKSAgICgoKHZhbHVlKSA+PSAwKSA/ICh2YWx1ZSkgOiAtICh2YWx1ZSkpCiAKK3ZvaWQgbmd4X2NwdWluZm8odm9pZCk7CisKIAogI2VuZGlmIC8qIF9OR1hfQ09SRV9IX0lOQ0xVREVEXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2NwdWluZm8uYyBiL3NyYy9jb3JlL25neF9jcHVpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkzOTYzNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25neF9jcHVpbmZvLmMKQEAgLTAsMCArMSw5MyBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorICovCisKKworI2luY2x1ZGUgPG5neF9jb25maWcuaD4KKyNpbmNsdWRlIDxuZ3hfY29yZS5oPgorCisKKyNpZiAoKCBfX2kzODZfXyB8fCBfX2FtZDY0X18gKSAmJiAoIF9fR05VQ19fIHx8IF9fSU5URUxfQ09NUElMRVIgKSkKKworCitzdGF0aWMgbmd4X2lubGluZSB2b2lkIG5neF9jcHVpZCh1aW50MzJfdCBpLCB1aW50MzJfdCAqYnVmKTsKKworCitzdGF0aWMgbmd4X2lubGluZSB2b2lkCituZ3hfY3B1aWQodWludDMyX3QgaSwgdWludDMyX3QgKmJ1ZikKK3sKKyAgICB1aW50MzJfdCAgZWF4LCBlYngsIGVjeCwgZWR4OworCisgICAgX19hc21fXyAoCisKKyAgICAgICAgImNwdWlkIgorCisgICAgOiAiPWEiIChlYXgpLCAiPWIiIChlYngpLCAiPWMiIChlY3gpLCAiPWQiIChlZHgpIDogImEiIChpKSApOworCisgICAgYnVmWzBdID0gZWF4OworICAgIGJ1ZlsxXSA9IGVieDsKKyAgICBidWZbMl0gPSBlZHg7CisgICAgYnVmWzNdID0gZWN4OworfQorCisKKy8qIGF1dG8gZGV0ZWN0IHRoZSBMMiBjYWNoZSBsaW5lIHNpemUgb2YgbW9kZXJuIGFuZCB3aWRlc3ByZWFkIENQVXMgKi8KKwordm9pZAorbmd4X2NwdWluZm8odm9pZCkKK3sKKyAgICB1X2NoYXIgICAgKnZlbmRvcjsKKyAgICB1aW50MzJfdCAgIHZidWZbNV0sIGNwdVs0XTsKKworICAgIHZidWZbMF0gPSAwOworICAgIHZidWZbMV0gPSAwOworICAgIHZidWZbMl0gPSAwOworICAgIHZidWZbM10gPSAwOworICAgIHZidWZbNF0gPSAwOworCisgICAgbmd4X2NwdWlkKDAsIHZidWYpOworCisgICAgdmVuZG9yID0gKHVfY2hhciAqKSAmdmJ1ZlsxXTsKKworICAgIGlmICh2YnVmWzBdID09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG5neF9jcHVpZCgxLCBjcHUpOworCisgICAgaWYgKG5neF9zdHJjbXAodmVuZG9yLCAiR2VudWluZUludGVsIikgPT0gMCkgeworCisgICAgICAgIHN3aXRjaCAoY3B1WzBdICYgMHhmMDApIHsKKworICAgICAgICAvKiBQZW50aXVtICovCisgICAgICAgIGNhc2UgNToKKyAgICAgICAgLyogUGVudGl1bSBQcm8sIElJLCBJSUkgKi8KKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgbmd4X2NhY2hlbGluZV9zaXplID0gMzI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBQZW50aXVtIDQsIGFsdGhvdWdoIGl0cyBjYWNoZSBsaW5lIHNpemUgaXMgNjQgYnl0ZXMsCisgICAgICAgICAqIGl0IHByZWZldGNoZXMgdXAgdG8gdHdvIGNhY2hlIGxpbmVzIGR1cmluZyBtZW1vcnkgcmVhZAorICAgICAgICAgKi8KKyAgICAgICAgY2FzZSAxNToKKyAgICAgICAgICAgIG5neF9jYWNoZWxpbmVfc2l6ZSA9IDEyODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgKG5neF9zdHJjbXAodmVuZG9yLCAiQXV0aGVudGljQU1EIikgPT0gMCkgeworICAgICAgICBuZ3hfY2FjaGVsaW5lX3NpemUgPSA2NDsKKyAgICB9Cit9CisKKyNlbHNlCisKKwordm9pZAorbmd4X2NwdWluZm8odm9pZCkKK3sKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jeWNsZS5jIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKaW5kZXggYjU5NDFiZS4uYmFmMjVlYSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKKysrIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bmd4X2V2ZW50Lmg+CiAKIAorc3RhdGljIG5neF9pbnRfdCBuZ3hfdGVzdF9sb2NrZmlsZSh1X2NoYXIgKmZpbGUsIG5neF9sb2dfdCAqbG9nKTsKIHN0YXRpYyB2b2lkIG5neF9kZXN0cm95X2N5Y2xlX3Bvb2xzKG5neF9jb25mX3QgKmNvbmYpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfY21wX3NvY2thZGRyKHN0cnVjdCBzb2NrYWRkciAqc2ExLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMik7CiBzdGF0aWMgdm9pZCBuZ3hfY2xlYW5fb2xkX2N5Y2xlcyhuZ3hfZXZlbnRfdCAqZXYpOwpAQCAtNDIsNyArNDMsNyBAQAogbmd4X2luaXRfY3ljbGUobmd4X2N5Y2xlX3QgKm9sZF9jeWNsZSkKIHsKICAgICB2b2lkICAgICAgICAgICAgICAgKnJ2OwotICAgIG5neF91aW50X3QgICAgICAgICAgaSwgbiwgZmFpbGVkOworICAgIG5neF91aW50X3QgICAgICAgICAgaSwgbjsKICAgICBuZ3hfbG9nX3QgICAgICAgICAgKmxvZzsKICAgICBuZ3hfY29uZl90ICAgICAgICAgIGNvbmY7CiAgICAgbmd4X3Bvb2xfdCAgICAgICAgICpwb29sOwpAQCAtNTIsNyArNTMsOSBAQAogICAgIG5neF9saXN0ZW5pbmdfdCAgICAqbHMsICpubHM7CiAgICAgbmd4X2NvcmVfY29uZl90ICAgICpjY2Y7CiAgICAgbmd4X2NvcmVfbW9kdWxlX3QgICptb2R1bGU7Ci0KKyNpZiAhKFdJTjMyKQorICAgIG5neF9jb3JlX2NvbmZfdCAgICAqb2xkX2NjZjsKKyNlbmRpZgogCiAgICAgbG9nID0gb2xkX2N5Y2xlLT5sb2c7CiAKQEAgLTIzNiw4MiArMjM5LDEwMCBAQAogICAgIH0KIAogCi0gICAgZmFpbGVkID0gMDsKLQorICAgIGNjZiA9IChuZ3hfY29yZV9jb25mX3QgKikgbmd4X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwgbmd4X2NvcmVfbW9kdWxlKTsKIAogI2lmICEoTkdYX1dJTjMyKQotICAgIGlmIChuZ3hfY3JlYXRlX3BpZGZpbGUoY3ljbGUsIG9sZF9jeWNsZSkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgfQotI2VuZGlmCiAKKyAgICBpZiAobmd4X3Rlc3RfY29uZmlnKSB7CiAKLSAgICBpZiAoIWZhaWxlZCkgewotICAgICAgICAgY2NmID0gKG5neF9jb3JlX2NvbmZfdCAqKSBuZ3hfZ2V0X2NvbmYoY3ljbGUtPmNvbmZfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2NvcmVfbW9kdWxlKTsKKyAgICAgICAgaWYgKG5neF9jcmVhdGVfcGlkZmlsZSgmY2NmLT5waWQsIGxvZykgIT0gTkdYX09LKSB7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQogCi0gICAgICAgIGlmIChuZ3hfY3JlYXRlX3BhdGhlcyhjeWNsZSwgY2NmLT51c2VyKSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgfSBlbHNlIGlmICghbmd4X2lzX2luaXRfY3ljbGUob2xkX2N5Y2xlKSkgeworCisgICAgICAgIC8qCisgICAgICAgICAqIHdlIGRvIG5vdCBjcmVhdGUgdGhlIHBpZCBmaWxlIGluIHRoZSBmaXJzdCBuZ3hfaW5pdF9jeWNsZSgpIGNhbGwKKyAgICAgICAgICogYmVjYXVzZSB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBkZW1vbml6ZWQgcHJvY2VzcyBwaWQKKyAgICAgICAgICovCisKKyAgICAgICAgb2xkX2NjZiA9IChuZ3hfY29yZV9jb25mX3QgKikgbmd4X2dldF9jb25mKG9sZF9jeWNsZS0+Y29uZl9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY29yZV9tb2R1bGUpOworICAgICAgICBpZiAoY2NmLT5waWQubGVuICE9IG9sZF9jY2YtPnBpZC5sZW4KKyAgICAgICAgICAgIHx8IG5neF9zdHJjbXAoY2NmLT5waWQuZGF0YSwgb2xkX2NjZi0+cGlkLmRhdGEpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIG5ldyBwaWQgZmlsZSBuYW1lICovCisKKyAgICAgICAgICAgIGlmIChuZ3hfY3JlYXRlX3BpZGZpbGUoJmNjZi0+cGlkLCBsb2cpICE9IE5HWF9PSykgeworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZ3hfZGVsZXRlX3BpZGZpbGUob2xkX2N5Y2xlKTsKICAgICAgICAgfQogICAgIH0KIAorI2VuZGlmCiAKLSAgICBpZiAoIWZhaWxlZCkgewogCi0gICAgICAgIC8qIG9wZW4gdGhlIG5ldyBmaWxlcyAqLworICAgIGlmIChuZ3hfdGVzdF9sb2NrZmlsZShjY2YtPmxvY2tfZmlsZS5kYXRhLCBsb2cpICE9IE5HWF9PSykgeworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CiAKLSAgICAgICAgcGFydCA9ICZjeWNsZS0+b3Blbl9maWxlcy5wYXJ0OwotICAgICAgICBmaWxlID0gcGFydC0+ZWx0czsKIAotICAgICAgICBmb3IgKGkgPSAwOyAvKiB2b2lkICovIDsgaSsrKSB7CisgICAgaWYgKG5neF9jcmVhdGVfcGF0aGVzKGN5Y2xlLCBjY2YtPnVzZXIpICE9IE5HWF9PSykgeworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CiAKLSAgICAgICAgICAgIGlmIChpID49IHBhcnQtPm5lbHRzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnQtPm5leHQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcGFydCA9IHBhcnQtPm5leHQ7Ci0gICAgICAgICAgICAgICAgZmlsZSA9IHBhcnQtPmVsdHM7Ci0gICAgICAgICAgICAgICAgaSA9IDA7Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChmaWxlW2ldLm5hbWUuZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisgICAgLyogb3BlbiB0aGUgbmV3IGZpbGVzICovCiAKLSAgICAgICAgICAgIGZpbGVbaV0uZmQgPSBuZ3hfb3Blbl9maWxlKGZpbGVbaV0ubmFtZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0ZJTEVfUkRXUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9GSUxFX0NSRUFURV9PUl9PUEVOfE5HWF9GSUxFX0FQUEVORCk7CisgICAgcGFydCA9ICZjeWNsZS0+b3Blbl9maWxlcy5wYXJ0OworICAgIGZpbGUgPSBwYXJ0LT5lbHRzOwogCi0gICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0NPUkUsIGxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2c6ICVwICVkIFwiJXNcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZVtpXSwgZmlsZVtpXS5mZCwgZmlsZVtpXS5uYW1lLmRhdGEpOworICAgIGZvciAoaSA9IDA7IC8qIHZvaWQgKi8gOyBpKyspIHsKIAotICAgICAgICAgICAgaWYgKGZpbGVbaV0uZmQgPT0gTkdYX0lOVkFMSURfRklMRSkgewotICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgbG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfb3Blbl9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVbaV0ubmFtZS5kYXRhKTsKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICBpZiAoaSA+PSBwYXJ0LT5uZWx0cykgeworICAgICAgICAgICAgaWYgKHBhcnQtPm5leHQgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFydCA9IHBhcnQtPm5leHQ7CisgICAgICAgICAgICBmaWxlID0gcGFydC0+ZWx0czsKKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpbGVbaV0ubmFtZS5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZmlsZVtpXS5mZCA9IG5neF9vcGVuX2ZpbGUoZmlsZVtpXS5uYW1lLmRhdGEsIE5HWF9GSUxFX1JEV1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9GSUxFX0NSRUFURV9PUl9PUEVOfE5HWF9GSUxFX0FQUEVORCk7CisKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19DT1JFLCBsb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICJsb2c6ICVwICVkIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICZmaWxlW2ldLCBmaWxlW2ldLmZkLCBmaWxlW2ldLm5hbWUuZGF0YSk7CisKKyAgICAgICAgaWYgKGZpbGVbaV0uZmQgPT0gTkdYX0lOVkFMSURfRklMRSkgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X29wZW5fZmlsZV9uICIgXCIlc1wiIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVbaV0ubmFtZS5kYXRhKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CiAKICNpZiAoTkdYX1dJTjMyKQotICAgICAgICAgICAgaWYgKG5neF9maWxlX2FwcGVuZF9tb2RlKGZpbGVbaV0uZmQpID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgbG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZmlsZV9hcHBlbmRfbW9kZV9uICIgXCIlc1wiIGZhaWxlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW2ldLm5hbWUuZGF0YSk7Ci0gICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBpZiAoZmNudGwoZmlsZVtpXS5mZCwgRl9TRVRGRCwgRkRfQ0xPRVhFQykgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZjbnRsKEZEX0NMT0VYRUMpIFwiJXNcIiBmYWlsZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVtpXS5uYW1lLmRhdGEpOwotICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKKyAgICAgICAgaWYgKG5neF9maWxlX2FwcGVuZF9tb2RlKGZpbGVbaV0uZmQpICE9IE5HWF9PSykgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2ZpbGVfYXBwZW5kX21vZGVfbiAiIFwiJXNcIiBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW2ldLm5hbWUuZGF0YSk7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgaWYgKGZjbnRsKGZpbGVbaV0uZmQsIEZfU0VURkQsIEZEX0NMT0VYRUMpID09IC0xKSB7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZmNudGwoRkRfQ0xPRVhFQykgXCIlc1wiIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVbaV0ubmFtZS5kYXRhKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisjZW5kaWYKICAgICB9CiAKICAgICBjeWNsZS0+bG9nID0gY3ljbGUtPm5ld19sb2c7CkBAIC0zMjEsMTU5ICszNDIsMTAwIEBACiAgICAgICAgIGN5Y2xlLT5sb2ctPmxvZ19sZXZlbCA9IE5HWF9MT0dfRVJSOwogICAgIH0KIAotICAgIGlmICghZmFpbGVkKSB7CiAKLSAgICAgICAgLyogaGFuZGxlIHRoZSBsaXN0ZW5pbmcgc29ja2V0cyAqLworICAgIC8qIGhhbmRsZSB0aGUgbGlzdGVuaW5nIHNvY2tldHMgKi8KIAotICAgICAgICBpZiAob2xkX2N5Y2xlLT5saXN0ZW5pbmcubmVsdHMpIHsKLSAgICAgICAgICAgIGxzID0gb2xkX2N5Y2xlLT5saXN0ZW5pbmcuZWx0czsKKyAgICBpZiAob2xkX2N5Y2xlLT5saXN0ZW5pbmcubmVsdHMpIHsKKyAgICAgICAgbHMgPSBvbGRfY3ljbGUtPmxpc3RlbmluZy5lbHRzOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb2xkX2N5Y2xlLT5saXN0ZW5pbmcubmVsdHM7IGkrKykgeworICAgICAgICAgICAgbHNbaV0ucmVtYWluID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIG5scyA9IGN5Y2xlLT5saXN0ZW5pbmcuZWx0czsKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IGN5Y2xlLT5saXN0ZW5pbmcubmVsdHM7IG4rKykgeworCiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb2xkX2N5Y2xlLT5saXN0ZW5pbmcubmVsdHM7IGkrKykgewotICAgICAgICAgICAgICAgIGxzW2ldLnJlbWFpbiA9IDA7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGxzW2ldLmlnbm9yZSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG5scyA9IGN5Y2xlLT5saXN0ZW5pbmcuZWx0czsKLSAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBjeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBuKyspIHsKKyAgICAgICAgICAgICAgICBpZiAobmd4X2NtcF9zb2NrYWRkcihubHNbbl0uc29ja2FkZHIsIGxzW2ldLnNvY2thZGRyKSA9PSBOR1hfT0spCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBubHNbbl0uZmQgPSBsc1tpXS5mZDsKKyAgICAgICAgICAgICAgICAgICAgbmxzW25dLnByZXZpb3VzID0gJmxzW2ldOworICAgICAgICAgICAgICAgICAgICBsc1tpXS5yZW1haW4gPSAxOwogCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG9sZF9jeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxzW2ldLmlnbm9yZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChsc1tuXS5iYWNrbG9nICE9IG5sc1tpXS5iYWNrbG9nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBubHNbbl0ubGlzdGVuID0gMTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmIChuZ3hfY21wX3NvY2thZGRyKG5sc1tuXS5zb2NrYWRkciwgbHNbaV0uc29ja2FkZHIpCi0gICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfT0spCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5mZCA9IGxzW2ldLmZkOwotICAgICAgICAgICAgICAgICAgICAgICAgbmxzW25dLnByZXZpb3VzID0gJmxzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgbHNbaV0ucmVtYWluID0gMTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxzW25dLmJhY2tsb2cgIT0gbmxzW2ldLmJhY2tsb2cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBubHNbbl0ubGlzdGVuID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQogI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBTT19BQ0NFUFRGSUxURVIpCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBGcmVlQlNELCBleGNlcHQgdGhlIG1vc3QgcmVjZW50IHZlcnNpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICogY291bGQgbm90IHJlbW92ZSBhY2NlcHQgZmlsdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5kZWZlcnJlZF9hY2NlcHQgPSBsc1tpXS5kZWZlcnJlZF9hY2NlcHQ7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIEZyZWVCU0QsIGV4Y2VwdCB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAqIGNvdWxkIG5vdCByZW1vdmUgYWNjZXB0IGZpbHRlcgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgbmxzW25dLmRlZmVycmVkX2FjY2VwdCA9IGxzW2ldLmRlZmVycmVkX2FjY2VwdDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxzW2ldLmFjY2VwdF9maWx0ZXIgJiYgbmxzW25dLmFjY2VwdF9maWx0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmd4X3N0cmNtcChsc1tpXS5hY2NlcHRfZmlsdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5hY2NlcHRfZmlsdGVyKSAhPSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmxzW25dLmRlbGV0ZV9kZWZlcnJlZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5hZGRfZGVmZXJyZWQgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsc1tpXS5hY2NlcHRfZmlsdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmxzW25dLmRlbGV0ZV9kZWZlcnJlZCA9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmxzW25dLmFjY2VwdF9maWx0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBubHNbbl0uYWRkX2RlZmVycmVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotCi0jaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCAmJiBkZWZpbmVkIFRDUF9ERUZFUl9BQ0NFUFQpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsc1tuXS5kZWZlcnJlZF9hY2NlcHQgJiYgIW5sc1tuXS5kZWZlcnJlZF9hY2NlcHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBubHNbbl0uZGVsZXRlX2RlZmVycmVkID0gMTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsc1tpXS5kZWZlcnJlZF9hY2NlcHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gbmxzW25dLmRlZmVycmVkX2FjY2VwdCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxzW2ldLmFjY2VwdF9maWx0ZXIgJiYgbmxzW25dLmFjY2VwdF9maWx0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZ3hfc3RyY21wKGxzW2ldLmFjY2VwdF9maWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubHNbbl0uYWNjZXB0X2ZpbHRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5kZWxldGVfZGVmZXJyZWQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5hZGRfZGVmZXJyZWQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChubHNbbl0uZmQgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgbmxzW25dLm9wZW4gPSAxOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxzW2ldLmFjY2VwdF9maWx0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5kZWxldGVfZGVmZXJyZWQgPSAxOworCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmxzW25dLmFjY2VwdF9maWx0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5hZGRfZGVmZXJyZWQgPSAxOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKworI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBUQ1BfREVGRVJfQUNDRVBUKQorCisgICAgICAgICAgICAgICAgICAgIGlmIChsc1tuXS5kZWZlcnJlZF9hY2NlcHQgJiYgIW5sc1tuXS5kZWZlcnJlZF9hY2NlcHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5kZWxldGVfZGVmZXJyZWQgPSAxOworCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobHNbaV0uZGVmZXJyZWRfYWNjZXB0ICE9IG5sc1tuXS5kZWZlcnJlZF9hY2NlcHQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5hZGRfZGVmZXJyZWQgPSAxOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBscyA9IGN5Y2xlLT5saXN0ZW5pbmcuZWx0czsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBpKyspIHsKLSAgICAgICAgICAgICAgICBsc1tpXS5vcGVuID0gMTsKLSNpZiAoTkdYX0hBVkVfREVGRVJSRURfQUNDRVBUICYmIGRlZmluZWQgU09fQUNDRVBURklMVEVSKQotICAgICAgICAgICAgICAgIGlmIChsc1tpXS5hY2NlcHRfZmlsdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxzW2ldLmFkZF9kZWZlcnJlZCA9IDE7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0jaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCAmJiBkZWZpbmVkIFRDUF9ERUZFUl9BQ0NFUFQpCi0gICAgICAgICAgICAgICAgaWYgKGxzW2ldLmRlZmVycmVkX2FjY2VwdCkgewotICAgICAgICAgICAgICAgICAgICBsc1tpXS5hZGRfZGVmZXJyZWQgPSAxOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZgorICAgICAgICAgICAgaWYgKG5sc1tuXS5mZCA9PSAtMSkgeworICAgICAgICAgICAgICAgIG5sc1tuXS5vcGVuID0gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICghZmFpbGVkKSB7Ci0gICAgICAgICAgICBpZiAobmd4X29wZW5fbGlzdGVuaW5nX3NvY2tldHMoY3ljbGUpID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbHMgPSBjeWNsZS0+bGlzdGVuaW5nLmVsdHM7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBpKyspIHsKKyAgICAgICAgICAgIGxzW2ldLm9wZW4gPSAxOworI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBTT19BQ0NFUFRGSUxURVIpCisgICAgICAgICAgICBpZiAobHNbaV0uYWNjZXB0X2ZpbHRlcikgeworICAgICAgICAgICAgICAgIGxzW2ldLmFkZF9kZWZlcnJlZCA9IDE7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbmd4X3Rlc3RfY29uZmlnICYmICFmYWlsZWQpIHsKLSAgICAgICAgICAgICAgICBuZ3hfY29uZmlndXJlX2xpc3RlbmluZ19zb2NrZXQoY3ljbGUpOworI2VuZGlmCisjaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCAmJiBkZWZpbmVkIFRDUF9ERUZFUl9BQ0NFUFQpCisgICAgICAgICAgICBpZiAobHNbaV0uZGVmZXJyZWRfYWNjZXB0KSB7CisgICAgICAgICAgICAgICAgbHNbaV0uYWRkX2RlZmVycmVkID0gMTsKICAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKG5neF9vcGVuX2xpc3RlbmluZ19zb2NrZXRzKGN5Y2xlKSAhPSBOR1hfT0spIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQogCi0gICAgaWYgKGZhaWxlZCkgewotCi0gICAgICAgIC8qIHJvbGxiYWNrIHRoZSBuZXcgY3ljbGUgY29uZmlndXJhdGlvbiAqLwotCi0gICAgICAgIHBhcnQgPSAmY3ljbGUtPm9wZW5fZmlsZXMucGFydDsKLSAgICAgICAgZmlsZSA9IHBhcnQtPmVsdHM7Ci0KLSAgICAgICAgZm9yIChpID0gMDsgLyogdm9pZCAqLyA7IGkrKykgewotCi0gICAgICAgICAgICBpZiAoaSA+PSBwYXJ0LT5uZWx0cykgewotICAgICAgICAgICAgICAgIGlmIChwYXJ0LT5uZXh0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LT5uZXh0OwotICAgICAgICAgICAgICAgIGZpbGUgPSBwYXJ0LT5lbHRzOwotICAgICAgICAgICAgICAgIGkgPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmlsZVtpXS5mZCA9PSBOR1hfSU5WQUxJRF9GSUxFCi0gICAgICAgICAgICAgICAgfHwgZmlsZVtpXS5mZCA9PSBuZ3hfc3RkZXJyX2ZpbGVubykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG5neF9jbG9zZV9maWxlKGZpbGVbaV0uZmQpID09IE5HWF9GSUxFX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVbaV0ubmFtZS5kYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZ3hfdGVzdF9jb25maWcpIHsKLSAgICAgICAgICAgIG5neF9kZXN0cm95X2N5Y2xlX3Bvb2xzKCZjb25mKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgbHMgPSBjeWNsZS0+bGlzdGVuaW5nLmVsdHM7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChsc1tpXS5mZCA9PSAtMSB8fCAhbHNbaV0ub3BlbikgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmd4X2Nsb3NlX3NvY2tldChsc1tpXS5mZCkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxvZywgbmd4X3NvY2tldF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9zb2NrZXRfbiAiICVWIGZhaWxlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHNbaV0uYWRkcl90ZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG5neF9kZXN0cm95X2N5Y2xlX3Bvb2xzKCZjb25mKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFuZ3hfdGVzdF9jb25maWcpIHsKKyAgICAgICAgbmd4X2NvbmZpZ3VyZV9saXN0ZW5pbmdfc29ja2V0KGN5Y2xlKTsKICAgICB9CiAKIApAQCAtNDg4LDcgKzQ1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlLT5sb2ctPmZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlLT5sb2ctPmZpbGUtPmZkLCBjeWNsZS0+bG9nLT5maWxlLT5uYW1lLmRhdGEpOwogCi0gICAgICAgIGlmIChkdXAyKGN5Y2xlLT5sb2ctPmZpbGUtPmZkLCBTVERFUlJfRklMRU5PKSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgaWYgKGR1cDIoY3ljbGUtPmxvZy0+ZmlsZS0+ZmQsIFNUREVSUl9GSUxFTk8pID09IC0xKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxvZywgbmd4X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVwMihTVERFUlIpIGZhaWxlZCIpOwogICAgICAgICAgICAgLyogZmF0YWwgKi8KQEAgLTUwMiw3ICs0NjQsNyBAQAogCiAgICAgZm9yIChpID0gMDsgbmd4X21vZHVsZXNbaV07IGkrKykgewogICAgICAgICBpZiAobmd4X21vZHVsZXNbaV0tPmluaXRfbW9kdWxlKSB7Ci0gICAgICAgICAgICBpZiAobmd4X21vZHVsZXNbaV0tPmluaXRfbW9kdWxlKGN5Y2xlKSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgICAgIGlmIChuZ3hfbW9kdWxlc1tpXS0+aW5pdF9tb2R1bGUoY3ljbGUpICE9IE5HWF9PSykgewogICAgICAgICAgICAgICAgIC8qIGZhdGFsICovCiAgICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgIH0KQEAgLTU2NCw2ICs1MjYsOSBAQAogICAgICAgICB9CiAKICAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChvbGRfY3ljbGUtPnBvb2wpOworCisgICAgICAgIGN5Y2xlLT5vbGRfY3ljbGUgPSBOVUxMOworCiAgICAgICAgIHJldHVybiBjeWNsZTsKICAgICB9CiAKQEAgLTYwNyw2ICs1NzIsNTggQEAKICAgICB9CiAKICAgICByZXR1cm4gY3ljbGU7CisKKworZmFpbGVkOgorCisgICAgLyogcm9sbGJhY2sgdGhlIG5ldyBjeWNsZSBjb25maWd1cmF0aW9uICovCisKKyAgICBwYXJ0ID0gJmN5Y2xlLT5vcGVuX2ZpbGVzLnBhcnQ7CisgICAgZmlsZSA9IHBhcnQtPmVsdHM7CisKKyAgICBmb3IgKGkgPSAwOyAvKiB2b2lkICovIDsgaSsrKSB7CisKKyAgICAgICAgaWYgKGkgPj0gcGFydC0+bmVsdHMpIHsKKyAgICAgICAgICAgIGlmIChwYXJ0LT5uZXh0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcnQgPSBwYXJ0LT5uZXh0OworICAgICAgICAgICAgZmlsZSA9IHBhcnQtPmVsdHM7CisgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaWxlW2ldLmZkID09IE5HWF9JTlZBTElEX0ZJTEUgfHwgZmlsZVtpXS5mZCA9PSBuZ3hfc3RkZXJyX2ZpbGVubykgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmd4X2Nsb3NlX2ZpbGUoZmlsZVtpXS5mZCkgPT0gTkdYX0ZJTEVfRVJST1IpIHsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgbG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVtpXS5uYW1lLmRhdGEpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG5neF90ZXN0X2NvbmZpZykgeworICAgICAgICBuZ3hfZGVzdHJveV9jeWNsZV9wb29scygmY29uZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGxzID0gY3ljbGUtPmxpc3RlbmluZy5lbHRzOworICAgIGZvciAoaSA9IDA7IGkgPCBjeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBpKyspIHsKKyAgICAgICAgaWYgKGxzW2ldLmZkID09IC0xIHx8ICFsc1tpXS5vcGVuKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZ3hfY2xvc2Vfc29ja2V0KGxzW2ldLmZkKSA9PSAtMSkgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9zb2NrZXRfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9zb2NrZXRfbiAiICVWIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZsc1tpXS5hZGRyX3RleHQpOworICAgICAgICB9CisgICAgfQorCisgICAgbmd4X2Rlc3Ryb3lfY3ljbGVfcG9vbHMoJmNvbmYpOworCisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIApAQCAtNjUxLDUyICs2NjgsMjUgQEAKICNpZiAhKE5HWF9XSU4zMikKIAogbmd4X2ludF90Ci1uZ3hfY3JlYXRlX3BpZGZpbGUobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfY3ljbGVfdCAqb2xkX2N5Y2xlKQorbmd4X2NyZWF0ZV9waWRmaWxlKG5neF9zdHJfdCAqbmFtZSwgbmd4X2xvZ190ICpsb2cpCiB7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgdHJ1bmM7CiAgICAgc2l6ZV90ICAgICAgICAgICAgbGVuOwotICAgIHVfY2hhciAgICAgICAgICAgIHBpZFtOR1hfSU5UNjRfTEVOXTsKKyAgICBuZ3hfdWludF90ICAgICAgICB0cnVuYzsKICAgICBuZ3hfZmlsZV90ICAgICAgICBmaWxlOwotICAgIG5neF9jb3JlX2NvbmZfdCAgKmNjZiwgKm9sZF9jY2Y7Ci0KLSAgICBpZiAoIW5neF90ZXN0X2NvbmZpZyAmJiBuZ3hfaXNfaW5pdF9jeWNsZShvbGRfY3ljbGUpKSB7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogZG8gbm90IGNyZWF0ZSB0aGUgcGlkIGZpbGUgaW4gdGhlIGZpcnN0IG5neF9pbml0X2N5Y2xlKCkgY2FsbAotICAgICAgICAgKiBiZWNhdXNlIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGRlbW9uaXplZCBwcm9jZXNzIHBpZAotICAgICAgICAgKi8KLQotICAgICAgICByZXR1cm4gTkdYX09LOwotICAgIH0KLQotICAgIGNjZiA9IChuZ3hfY29yZV9jb25mX3QgKikgbmd4X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwgbmd4X2NvcmVfbW9kdWxlKTsKLQotICAgIGlmICghbmd4X3Rlc3RfY29uZmlnICYmIG9sZF9jeWNsZSkgewotICAgICAgICBvbGRfY2NmID0gKG5neF9jb3JlX2NvbmZfdCAqKSBuZ3hfZ2V0X2NvbmYob2xkX2N5Y2xlLT5jb25mX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jb3JlX21vZHVsZSk7Ci0KLSAgICAgICAgaWYgKGNjZi0+cGlkLmxlbiA9PSBvbGRfY2NmLT5waWQubGVuCi0gICAgICAgICAgICAmJiBuZ3hfc3RyY21wKGNjZi0+cGlkLmRhdGEsIG9sZF9jY2YtPnBpZC5kYXRhKSA9PSAwKQotICAgICAgICB7Ci0KLSAgICAgICAgICAgIC8qIHBpZCBmaWxlIG5hbWUgaXMgdGhlIHNhbWUgKi8KLQotICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKLSAgICAgICAgfQotICAgIH0KKyAgICB1X2NoYXIgICAgICAgICAgICBwaWRbTkdYX0lOVDY0X0xFTl07CiAKICAgICBuZ3hfbWVtemVybygmZmlsZSwgc2l6ZW9mKG5neF9maWxlX3QpKTsKIAotICAgIGZpbGUubmFtZSA9IGNjZi0+cGlkOwotICAgIGZpbGUubG9nID0gY3ljbGUtPmxvZzsKKyAgICBmaWxlLm5hbWUgPSAqbmFtZTsKKyAgICBmaWxlLmxvZyA9IGxvZzsKIAotICAgIHRydW5jID0gbmd4X3Rlc3RfY29uZmlnID8gMDogTkdYX0ZJTEVfVFJVTkNBVEU7CisgICAgdHJ1bmMgPSBuZ3hfdGVzdF9jb25maWcgPyAwIDogTkdYX0ZJTEVfVFJVTkNBVEU7CiAKICAgICBmaWxlLmZkID0gbmd4X29wZW5fZmlsZShmaWxlLm5hbWUuZGF0YSwgTkdYX0ZJTEVfUkRXUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfRklMRV9DUkVBVEVfT1JfT1BFTnx0cnVuYyk7CiAKICAgICBpZiAoZmlsZS5mZCA9PSBOR1hfSU5WQUxJRF9GSUxFKSB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxvZywgbmd4X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgIG5neF9vcGVuX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLCBmaWxlLm5hbWUuZGF0YSk7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQpAQCAtNzEwLDEyICs3MDAsMTAgQEAKICAgICB9CiAKICAgICBpZiAobmd4X2Nsb3NlX2ZpbGUoZmlsZS5mZCkgPT0gTkdYX0ZJTEVfRVJST1IpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLCBmaWxlLm5hbWUuZGF0YSk7CiAgICAgfQogCi0gICAgbmd4X2RlbGV0ZV9waWRmaWxlKG9sZF9jeWNsZSk7Ci0KICAgICByZXR1cm4gTkdYX09LOwogfQogCkBAIC03MjYsMTAgKzcxNCw2IEBACiAgICAgdV9jaGFyICAgICAgICAgICAqbmFtZTsKICAgICBuZ3hfY29yZV9jb25mX3QgICpjY2Y7CiAKLSAgICBpZiAoY3ljbGUgPT0gTlVMTCB8fCBjeWNsZS0+Y29uZl9jdHggPT0gTlVMTCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgY2NmID0gKG5neF9jb3JlX2NvbmZfdCAqKSBuZ3hfZ2V0X2NvbmYoY3ljbGUtPmNvbmZfY3R4LCBuZ3hfY29yZV9tb2R1bGUpOwogCiAgICAgbmFtZSA9IG5neF9uZXdfYmluYXJ5ID8gY2NmLT5vbGRwaWQuZGF0YSA6IGNjZi0+cGlkLmRhdGE7CkBAIC03NDMsNiArNzI3LDM2IEBACiAjZW5kaWYKIAogCitzdGF0aWMgbmd4X2ludF90CituZ3hfdGVzdF9sb2NrZmlsZSh1X2NoYXIgKmZpbGUsIG5neF9sb2dfdCAqbG9nKQoreworI2lmICEoTkdYX0hBVkVfQVRPTUlDX09QUykKKyAgICBuZ3hfZmRfdCAgZmQ7CisKKyAgICBmZCA9IG5neF9vcGVuX2ZpbGUoZmlsZSwgTkdYX0ZJTEVfUkRXUiwgTkdYX0ZJTEVfQ1JFQVRFX09SX09QRU4pOworCisgICAgaWYgKGZkID09IE5HWF9JTlZBTElEX0ZJTEUpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICBuZ3hfb3Blbl9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgZmlsZSk7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgaWYgKG5neF9jbG9zZV9maWxlKGZkKSA9PSBOR1hfRklMRV9FUlJPUikgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgZmlsZSk7CisgICAgfQorCisgICAgaWYgKG5neF9kZWxldGVfZmlsZShmaWxlKSA9PSBOR1hfRklMRV9FUlJPUikgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgIG5neF9kZWxldGVfZmlsZV9uICIgXCIlc1wiIGZhaWxlZCIsIGZpbGUpOworICAgIH0KKworI2VuZGlmCisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKIHZvaWQKIG5neF9yZW9wZW5fZmlsZXMobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfdWlkX3QgdXNlcikKIHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jeWNsZS5oIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmgKaW5kZXggYjI5Y2YzNC4uYWQ5MmZmMiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmgKKysrIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmgKQEAgLTc3LDYgKzc3LDcgQEAKICAgICAgbmd4X2dpZF90ICAgICAgICAgICAgICAgIGdyb3VwOwogCiAgICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICB3b3JraW5nX2RpcmVjdG9yeTsKKyAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgIGxvY2tfZmlsZTsKIAogICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgcGlkOwogICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgb2xkcGlkOwpAQCAtOTQsMTEgKzk1LDExIEBACiB9IG5neF9jb3JlX3Rsc190OwogCiAKLSNkZWZpbmUgbmd4X2lzX2luaXRfY3ljbGUob2xkKSAgKG9sZCAmJiBvbGQtPmNvbmZfY3R4ID09IE5VTEwpCisjZGVmaW5lIG5neF9pc19pbml0X2N5Y2xlKGN5Y2xlKSAgKGN5Y2xlLT5jb25mX2N0eCA9PSBOVUxMKQogCiAKIG5neF9jeWNsZV90ICpuZ3hfaW5pdF9jeWNsZShuZ3hfY3ljbGVfdCAqb2xkX2N5Y2xlKTsKLW5neF9pbnRfdCBuZ3hfY3JlYXRlX3BpZGZpbGUobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfY3ljbGVfdCAqb2xkX2N5Y2xlKTsKK25neF9pbnRfdCBuZ3hfY3JlYXRlX3BpZGZpbGUobmd4X3N0cl90ICpuYW1lLCBuZ3hfbG9nX3QgKmxvZyk7CiB2b2lkIG5neF9kZWxldGVfcGlkZmlsZShuZ3hfY3ljbGVfdCAqY3ljbGUpOwogdm9pZCBuZ3hfcmVvcGVuX2ZpbGVzKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X3VpZF90IHVzZXIpOwogbmd4X3BpZF90IG5neF9leGVjX25ld19iaW5hcnkobmd4X2N5Y2xlX3QgKmN5Y2xlLCBjaGFyICpjb25zdCAqYXJndik7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfc2htdHguYyBiL3NyYy9jb3JlL25neF9zaG10eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOGEzMDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZ3hfc2htdHguYwpAQCAtMCwwICsxLDcwIEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisgKi8KKworCisjaW5jbHVkZSA8bmd4X2NvbmZpZy5oPgorI2luY2x1ZGUgPG5neF9jb3JlLmg+CisKKworI2lmIChOR1hfSEFWRV9BVE9NSUNfT1BTKQorCisKK25neF9pbnRfdAorbmd4X3NobXR4X2NyZWF0ZShuZ3hfc2htdHhfdCAqbXR4LCB2b2lkICphZGRyLCB1X2NoYXIgKm5hbWUsIG5neF9sb2dfdCAqbG9nKQoreworICAgIG10eC0+bG9jayA9IGFkZHI7CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisjZWxzZQorCisKK25neF9pbnRfdAorbmd4X3NobXR4X2NyZWF0ZShuZ3hfc2htdHhfdCAqbXR4LCB2b2lkICphZGRyLCB1X2NoYXIgKm5hbWUsIG5neF9sb2dfdCAqbG9nKQoreworICAgIGlmIChtdHgtPm5hbWUpIHsKKworICAgICAgICBpZiAobmd4X3N0cmNtcChuYW1lLCBtdHgtPm5hbWUpID09IDApIHsKKyAgICAgICAgICAgIG10eC0+bmFtZSA9IG5hbWU7CisgICAgICAgICAgICBtdHgtPmxvZyA9IGxvZzsKKworICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgfQorCisgICAgICAgIG5neF9zaG10eF9kZXN0b3J5KG10eCk7CisgICAgfQorCisgICAgbXR4LT5mZCA9IG5neF9vcGVuX2ZpbGUobmFtZSwgTkdYX0ZJTEVfUkRXUiwgTkdYX0ZJTEVfQ1JFQVRFX09SX09QRU4pOworCisgICAgaWYgKG10eC0+ZmQgPT0gTkdYX0lOVkFMSURfRklMRSkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgIG5neF9vcGVuX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICBpZiAobmd4X2RlbGV0ZV9maWxlKG5hbWUpID09IE5HWF9GSUxFX0VSUk9SKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgbmd4X2RlbGV0ZV9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgbmFtZSk7CisgICAgfQorCisgICAgbXR4LT5uYW1lID0gbmFtZTsKKyAgICBtdHgtPmxvZyA9IGxvZzsKKworICAgIHJldHVybiBOR1hfT0s7Cit9CisKKwordm9pZAorbmd4X3NobXR4X2Rlc3Rvcnkobmd4X3NobXR4X3QgKm10eCkKK3sKKyAgICBpZiAobmd4X2Nsb3NlX2ZpbGUobXR4LT5mZCkgPT0gTkdYX0ZJTEVfRVJST1IpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBtdHgtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgbXR4LT5uYW1lKTsKKyAgICB9Cit9CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfc2htdHguaCBiL3NyYy9jb3JlL25neF9zaG10eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZDYyZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZ3hfc2htdHguaApAQCAtMCwwICsxLDExMSBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorICovCisKKworI2lmbmRlZiBfTkdYX1NITVRYX0hfSU5DTFVERURfCisjZGVmaW5lIF9OR1hfU0hNVFhfSF9JTkNMVURFRF8KKworCisjaW5jbHVkZSA8bmd4X2NvbmZpZy5oPgorI2luY2x1ZGUgPG5neF9jb3JlLmg+CisKKwordHlwZWRlZiBzdHJ1Y3QgeworI2lmIChOR1hfSEFWRV9BVE9NSUNfT1BTKQorICAgIG5neF9hdG9taWNfdCAgKmxvY2s7CisjZWxzZQorICAgIG5neF9mZF90ICAgICAgIGZkOworICAgIHVfY2hhciAgICAgICAgKm5hbWU7CisgICAgbmd4X2xvZ190ICAgICAqbG9nOworI2VuZGlmCit9IG5neF9zaG10eF90OworCisKK25neF9pbnRfdCBuZ3hfc2htdHhfY3JlYXRlKG5neF9zaG10eF90ICptdHgsIHZvaWQgKmFkZHIsIHVfY2hhciAqbmFtZSwKKyAgICBuZ3hfbG9nX3QgKmxvZyk7CisKKworI2lmIChOR1hfSEFWRV9BVE9NSUNfT1BTKQorCitzdGF0aWMgbmd4X2lubGluZSBuZ3hfdWludF90CituZ3hfc2htdHhfdHJ5bG9jayhuZ3hfc2htdHhfdCAqbXR4KQoreworICAgIGlmICgqbXR4LT5sb2NrID09IDAgJiYgbmd4X2F0b21pY19jbXBfc2V0KG10eC0+bG9jaywgMCwgbmd4X3BpZCkpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgbmd4X3NobXR4X2xvY2sobXR4KSAgIG5neF9zcGlubG9jaygobXR4KS0+bG9jaywgbmd4X3BpZCwgMTAyNCkKKworI2RlZmluZSBuZ3hfc2htdHhfdW5sb2NrKG10eCkgKHZvaWQpIG5neF9hdG9taWNfY21wX3NldCgobXR4KS0+bG9jaywgbmd4X3BpZCwgMCkKKworI2RlZmluZSBuZ3hfc2htdHhfZGVzdG9yeShtdHgpCisKKworI2Vsc2UKKworc3RhdGljIG5neF9pbmxpbmUgbmd4X3VpbnRfdAorbmd4X3NobXR4X3RyeWxvY2sobmd4X3NobXR4X3QgKm10eCkKK3sKKyAgICBuZ3hfZXJyX3QgIGVycjsKKworICAgIGVyciA9IG5neF90cnlsb2NrX2ZkKG10eC0+ZmQpOworCisgICAgaWYgKGVyciA9PSAwKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmIChlcnIgPT0gTkdYX0VBR0FJTikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIG10eC0+bG9nLCBlcnIsIG5neF90cnlsb2NrX2ZkX24gIiBmYWlsZWQiKTsKKworICAgIG5neF9hYm9ydCgpOworfQorCisKK3N0YXRpYyBuZ3hfaW5saW5lIHZvaWQKK25neF9zaG10eF9sb2NrKG5neF9zaG10eF90ICptdHgpCit7CisgICAgbmd4X2Vycl90ICBlcnI7CisKKyAgICBlcnIgPSBuZ3hfbG9ja19mZChtdHgtPmZkKTsKKworICAgIGlmIChlcnIgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBtdHgtPmxvZywgZXJyLCBuZ3hfbG9ja19mZF9uICIgZmFpbGVkIik7CisKKyAgICBuZ3hfYWJvcnQoKTsKK30KKworCitzdGF0aWMgbmd4X2lubGluZSB2b2lkCituZ3hfc2htdHhfdW5sb2NrKG5neF9zaG10eF90ICptdHgpCit7CisgICAgbmd4X2Vycl90ICBlcnI7CisKKyAgICBlcnIgPSBuZ3hfdW5sb2NrX2ZkKG10eC0+ZmQpOworCisgICAgaWYgKGVyciA9PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIG10eC0+bG9nLCBlcnIsIG5neF91bmxvY2tfZmRfbiAiIGZhaWxlZCIpOworCisgICAgbmd4X2Fib3J0KCk7Cit9CisKKwordm9pZCBuZ3hfc2htdHhfZGVzdG9yeShuZ3hfc2htdHhfdCAqbXR4KTsKKworI2VuZGlmCisKKworI2VuZGlmIC8qIF9OR1hfU0hNVFhfSF9JTkNMVURFRF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9zcGlubG9jay5jIGIvc3JjL2NvcmUvbmd4X3NwaW5sb2NrLmMKaW5kZXggYTMwODJhMC4uZjZjODBmNyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3NwaW5sb2NrLmMKKysrIGIvc3JjL2NvcmUvbmd4X3NwaW5sb2NrLmMKQEAgLTgsMzYgKzgsMzUgQEAKICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogCiAKLS8qCi0gKiBUT0RPOiB0aGUgUDQgb3B0aW1pemVkIGFzc2VtYmxlciB2ZXJzaW9uIHdpdGggdGhlICJwYXVzZSIgb3BlcmF0aW9uCi0gKi8KLQogdm9pZAotbmd4X3NwaW5sb2NrKG5neF9hdG9taWNfdCAqbG9jaywgbmd4X3VpbnRfdCBzcGluKQorbmd4X3NwaW5sb2NrKG5neF9hdG9taWNfdCAqbG9jaywgbmd4X2F0b21pY19pbnRfdCB2YWx1ZSwgbmd4X3VpbnRfdCBzcGluKQogewogCiAjaWYgKE5HWF9IQVZFX0FUT01JQ19PUFMpCiAKLSAgICBuZ3hfdWludF90ICB0cmllczsKLQotICAgIHRyaWVzID0gMDsKKyAgICBuZ3hfdWludF90ICBpLCBuOwogCiAgICAgZm9yICggOzsgKSB7CiAKLSAgICAgICAgaWYgKCpsb2NrKSB7Ci0gICAgICAgICAgICBpZiAobmd4X25jcHUgPiAxICYmIHRyaWVzKysgPCBzcGluKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmICgqbG9jayA9PSAwICYmIG5neF9hdG9taWNfY21wX3NldChsb2NrLCAwLCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBuZ3hfc2NoZWRfeWllbGQoKTsKKyAgICAgICAgaWYgKG5neF9uY3B1ID4gMSkgewogCi0gICAgICAgICAgICB0cmllcyA9IDA7CisgICAgICAgICAgICBmb3IgKG4gPSAxOyBuIDwgc3BpbjsgbiA8PD0gMSkgewogCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobmd4X2F0b21pY19jbXBfc2V0KGxvY2ssIDAsIDEpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgbmd4X2NwdV9wYXVzZSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgqbG9jayA9PSAwICYmIG5neF9hdG9taWNfY21wX3NldChsb2NrLCAwLCB2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorCisgICAgICAgIG5neF9zY2hlZF95aWVsZCgpOwogICAgIH0KIAogI2Vsc2UKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuYwppbmRleCBmM2IxOWE3Li43YTRkNzU5IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudC5jCkBAIC0zMSw3ICszMSw2IEBACiAKIHN0YXRpYyB2b2lkICpuZ3hfZXZlbnRfY3JlYXRlX2NvbmYobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIHN0YXRpYyBjaGFyICpuZ3hfZXZlbnRfaW5pdF9jb25mKG5neF9jeWNsZV90ICpjeWNsZSwgdm9pZCAqY29uZik7Ci1zdGF0aWMgY2hhciAqbmd4X2FjY2VwdF9tdXRleF9jaGVjayhuZ3hfY29uZl90ICpjZiwgdm9pZCAqcG9zdCwgdm9pZCAqZGF0YSk7CiAKIAogc3RhdGljIG5neF91aW50X3QgICAgIG5neF90aW1lcl9yZXNvbHV0aW9uOwpAQCAtNDgsNyArNDcsOCBAQAogCiAKIG5neF9hdG9taWNfdCAgICAgICAgICpuZ3hfYWNjZXB0X211dGV4X3B0cjsKLW5neF9hdG9taWNfdCAgICAgICAgICpuZ3hfYWNjZXB0X211dGV4Oworbmd4X3NobXR4X3QgICAgICAgICAgIG5neF9hY2NlcHRfbXV0ZXg7CituZ3hfdWludF90ICAgICAgICAgICAgbmd4X3VzZV9hY2NlcHRfbXV0ZXg7CiBuZ3hfdWludF90ICAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF9oZWxkOwogbmd4X21zZWNfdCAgICAgICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfZGVsYXk7CiBuZ3hfaW50X3QgICAgICAgICAgICAgbmd4X2FjY2VwdF9kaXNhYmxlZDsKQEAgLTExMiw4ICsxMTIsNiBAQAogCiBzdGF0aWMgbmd4X3N0cl90ICBldmVudF9jb3JlX25hbWUgPSBuZ3hfc3RyaW5nKCJldmVudF9jb3JlIik7CiAKLXN0YXRpYyBuZ3hfY29uZl9wb3N0X3QgIG5neF9hY2NlcHRfbXV0ZXhfcG9zdCA9IHsgbmd4X2FjY2VwdF9tdXRleF9jaGVjayB9IDsKLQogCiBzdGF0aWMgbmd4X2NvbW1hbmRfdCAgbmd4X2V2ZW50X2NvcmVfY29tbWFuZHNbXSA9IHsKIApAQCAtMTUwLDcgKzE0OCw3IEBACiAgICAgICBuZ3hfY29uZl9zZXRfZmxhZ19zbG90LAogICAgICAgMCwKICAgICAgIG9mZnNldG9mKG5neF9ldmVudF9jb25mX3QsIGFjY2VwdF9tdXRleCksCi0gICAgICAmbmd4X2FjY2VwdF9tdXRleF9wb3N0IH0sCisgICAgICBOVUxMIH0sCiAKICAgICB7IG5neF9zdHJpbmcoImFjY2VwdF9tdXRleF9kZWxheSIpLAogICAgICAgTkdYX0VWRU5UX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCkBAIC0yMTgsNyArMjE2LDcgQEAKICNlbmRpZgogICAgIH0KIAotICAgIGlmIChuZ3hfYWNjZXB0X211dGV4KSB7CisgICAgaWYgKG5neF91c2VfYWNjZXB0X211dGV4KSB7CiAgICAgICAgIGlmIChuZ3hfYWNjZXB0X2Rpc2FibGVkID4gMCkgewogICAgICAgICAgICAgbmd4X2FjY2VwdF9kaXNhYmxlZC0tOwogCkBAIC0yNTQsNyArMjUyLDcgQEAKICAgICB9CiAKICAgICBpZiAobmd4X2FjY2VwdF9tdXRleF9oZWxkKSB7Ci0gICAgICAgICh2b2lkKSBuZ3hfYXRvbWljX2NtcF9zZXQobmd4X2FjY2VwdF9tdXRleCwgbmd4X3BpZCwgMCk7CisgICAgICAgIG5neF9zaG10eF91bmxvY2soJm5neF9hY2NlcHRfbXV0ZXgpOwogICAgIH0KIAogICAgIGlmIChkZWx0YSkgewpAQCAtNDE1LDcgKzQxMyw3IEBACiB7CiAgICAgdm9pZCAgICAgICAgICAgICAgKioqY2Y7CiAgICAgdV9jaGFyICAgICAgICAgICAgICAqc2hhcmVkOwotICAgIHNpemVfdCAgICAgICAgICAgICAgIHNpemU7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgc2l6ZSwgY2w7CiAgICAgbmd4X2V2ZW50X2NvbmZfdCAgICAqZWNmOwogICAgIG5neF9jb3JlX2NvbmZfdCAgICAgKmNjZjsKICAgICBuZ3hfc2htX3QgICAgICAgICAgICBzaG07CkBAIC00NjUsMjQgKzQ2Myw0MSBAQAogI2VuZGlmIC8qICEoTkdYX1dJTjMyKSAqLwogCiAKLSAgICBpZiAoY2NmLT5tYXN0ZXIgPT0gMCB8fCBuZ3hfYWNjZXB0X211dGV4X3B0cikgeworICAgIGlmIChjY2YtPm1hc3RlciA9PSAwKSB7CiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCiAKLSAgICAvKiBUT0RPOiBhZGp1c3QgY2FjaGUgbGluZSBzaXplLCAxMjggaXMgUDQgY2FjaGUgbGluZSBzaXplICovCisgICAgaWYgKG5neF9hY2NlcHRfbXV0ZXhfcHRyKSB7CiAKLSAgICBzaXplID0gMTI4ICAgICAgICAgICAgLyogbmd4X2FjY2VwdF9tdXRleCAqLwotICAgICAgICAgICArIDEyODsgICAgICAgICAvKiBuZ3hfY29ubmVjdGlvbl9jb3VudGVyICovCisgICAgICAgIC8qIHJlaW5pdCBuZ3hfYWNjZXB0X211dGV4ICovCisKKyAgICAgICAgaWYgKG5neF9zaG10eF9jcmVhdGUoJm5neF9hY2NlcHRfbXV0ZXgsICh2b2lkICopIG5neF9hY2NlcHRfbXV0ZXhfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY2YtPmxvY2tfZmlsZS5kYXRhLCBjeWNsZS0+bG9nKQorICAgICAgICAgICAgICAgICE9IE5HWF9PSykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisKKyAgICAvKiBjbCBzaG91bGQgYmUgZXF1YWwgb3IgYmlnZ2VyIHRoYW4gY2FjaGUgbGluZSBzaXplICovCisKKyAgICBjbCA9IDEyODsKKworICAgIHNpemUgPSBjbCAgICAgICAgICAgIC8qIG5neF9hY2NlcHRfbXV0ZXggKi8KKyAgICAgICAgICAgKyBjbDsgICAgICAgICAvKiBuZ3hfY29ubmVjdGlvbl9jb3VudGVyICovCiAKICNpZiAoTkdYX1NUQVRfU1RVQikKIAotICAgIHNpemUgKz0gMTI4ICAgICAgICAgICAvKiBuZ3hfc3RhdF9hY2NlcHRlZCAqLwotICAgICAgICAgICArIDEyOCAgICAgICAgICAvKiBuZ3hfc3RhdF9oYW5kbGVkICovCi0gICAgICAgICAgICsgMTI4ICAgICAgICAgIC8qIG5neF9zdGF0X3JlcXVlc3RzICovCi0gICAgICAgICAgICsgMTI4ICAgICAgICAgIC8qIG5neF9zdGF0X2FjdGl2ZSAqLwotICAgICAgICAgICArIDEyOCAgICAgICAgICAvKiBuZ3hfc3RhdF9yZWFkaW5nICovCi0gICAgICAgICAgICsgMTI4OyAgICAgICAgIC8qIG5neF9zdGF0X3dyaXRpbmcgKi8KKyAgICBzaXplICs9IGNsICAgICAgICAgICAvKiBuZ3hfc3RhdF9hY2NlcHRlZCAqLworICAgICAgICAgICArIGNsICAgICAgICAgIC8qIG5neF9zdGF0X2hhbmRsZWQgKi8KKyAgICAgICAgICAgKyBjbCAgICAgICAgICAvKiBuZ3hfc3RhdF9yZXF1ZXN0cyAqLworICAgICAgICAgICArIGNsICAgICAgICAgIC8qIG5neF9zdGF0X2FjdGl2ZSAqLworICAgICAgICAgICArIGNsICAgICAgICAgIC8qIG5neF9zdGF0X3JlYWRpbmcgKi8KKyAgICAgICAgICAgKyBjbDsgICAgICAgICAvKiBuZ3hfc3RhdF93cml0aW5nICovCiAKICNlbmRpZgogCkBAIC00OTYsMTYgKzUxMSwyNCBAQAogICAgIHNoYXJlZCA9IHNobS5hZGRyOwogCiAgICAgbmd4X2FjY2VwdF9tdXRleF9wdHIgPSAobmd4X2F0b21pY190ICopIHNoYXJlZDsKLSAgICBuZ3hfY29ubmVjdGlvbl9jb3VudGVyID0gKG5neF9hdG9taWNfdCAqKSAoc2hhcmVkICsgMSAqIDEyOCk7CisKKyAgICBpZiAobmd4X3NobXR4X2NyZWF0ZSgmbmd4X2FjY2VwdF9tdXRleCwgc2hhcmVkLCBjY2YtPmxvY2tfZmlsZS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlLT5sb2cpCisgICAgICAgICE9IE5HWF9PSykKKyAgICB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgbmd4X2Nvbm5lY3Rpb25fY291bnRlciA9IChuZ3hfYXRvbWljX3QgKikgKHNoYXJlZCArIDEgKiBjbCk7CiAKICNpZiAoTkdYX1NUQVRfU1RVQikKIAotICAgIG5neF9zdGF0X2FjY2VwdGVkID0gKG5neF9hdG9taWNfdCAqKSAoc2hhcmVkICsgMiAqIDEyOCk7Ci0gICAgbmd4X3N0YXRfaGFuZGxlZCA9IChuZ3hfYXRvbWljX3QgKikgKHNoYXJlZCArIDMgKiAxMjgpOwotICAgIG5neF9zdGF0X3JlcXVlc3RzID0gKG5neF9hdG9taWNfdCAqKSAoc2hhcmVkICsgNCAqIDEyOCk7Ci0gICAgbmd4X3N0YXRfYWN0aXZlID0gKG5neF9hdG9taWNfdCAqKSAoc2hhcmVkICsgNSAqIDEyOCk7Ci0gICAgbmd4X3N0YXRfcmVhZGluZyA9IChuZ3hfYXRvbWljX3QgKikgKHNoYXJlZCArIDYgKiAxMjgpOwotICAgIG5neF9zdGF0X3dyaXRpbmcgPSAobmd4X2F0b21pY190ICopIChzaGFyZWQgKyA3ICogMTI4KTsKKyAgICBuZ3hfc3RhdF9hY2NlcHRlZCA9IChuZ3hfYXRvbWljX3QgKikgKHNoYXJlZCArIDIgKiBjbCk7CisgICAgbmd4X3N0YXRfaGFuZGxlZCA9IChuZ3hfYXRvbWljX3QgKikgKHNoYXJlZCArIDMgKiBjbCk7CisgICAgbmd4X3N0YXRfcmVxdWVzdHMgPSAobmd4X2F0b21pY190ICopIChzaGFyZWQgKyA0ICogY2wpOworICAgIG5neF9zdGF0X2FjdGl2ZSA9IChuZ3hfYXRvbWljX3QgKikgKHNoYXJlZCArIDUgKiBjbCk7CisgICAgbmd4X3N0YXRfcmVhZGluZyA9IChuZ3hfYXRvbWljX3QgKikgKHNoYXJlZCArIDYgKiBjbCk7CisgICAgbmd4X3N0YXRfd3JpdGluZyA9IChuZ3hfYXRvbWljX3QgKikgKHNoYXJlZCArIDcgKiBjbCk7CiAKICNlbmRpZgogCkBAIC01NTcsMTEgKzU4MCwxMyBAQAogICAgIGNjZiA9IChuZ3hfY29yZV9jb25mX3QgKikgbmd4X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwgbmd4X2NvcmVfbW9kdWxlKTsKICAgICBlY2YgPSBuZ3hfZXZlbnRfZ2V0X2NvbmYoY3ljbGUtPmNvbmZfY3R4LCBuZ3hfZXZlbnRfY29yZV9tb2R1bGUpOwogCi0gICAgaWYgKG5neF9hY2NlcHRfbXV0ZXhfcHRyICYmIGNjZi0+d29ya2VyX3Byb2Nlc3NlcyA+IDEgJiYgZWNmLT5hY2NlcHRfbXV0ZXgpCi0gICAgewotICAgICAgICBuZ3hfYWNjZXB0X211dGV4ID0gbmd4X2FjY2VwdF9tdXRleF9wdHI7CisgICAgaWYgKGNjZi0+d29ya2VyX3Byb2Nlc3NlcyA+IDEgJiYgZWNmLT5hY2NlcHRfbXV0ZXgpIHsKKyAgICAgICAgbmd4X3VzZV9hY2NlcHRfbXV0ZXggPSAxOwogICAgICAgICBuZ3hfYWNjZXB0X211dGV4X2hlbGQgPSAwOwogICAgICAgICBuZ3hfYWNjZXB0X211dGV4X2RlbGF5ID0gZWNmLT5hY2NlcHRfbXV0ZXhfZGVsYXk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBuZ3hfdXNlX2FjY2VwdF9tdXRleCA9IDA7CiAgICAgfQogCiAjaWYgKE5HWF9USFJFQURTKQpAQCAtNzc1LDcgKzgwMCw3IEBACiAKICAgICAgICAgcmV2LT5oYW5kbGVyID0gbmd4X2V2ZW50X2FjY2VwdDsKIAotICAgICAgICBpZiAobmd4X2FjY2VwdF9tdXRleCkgeworICAgICAgICBpZiAobmd4X3VzZV9hY2NlcHRfbXV0ZXgpIHsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTEyMjEsMjIgKzEyNDYsMyBAQAogCiAjZW5kaWYKIH0KLQotCi1zdGF0aWMgY2hhciAqCi1uZ3hfYWNjZXB0X211dGV4X2NoZWNrKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKQotewotI2lmICEoTkdYX0hBVkVfQVRPTUlDX09QUykKLQotICAgIG5neF9mbGFnX3QgKmZwID0gZGF0YTsKLQotICAgICpmcCA9IDA7Ci0KLSAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19XQVJOLCBjZiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIlwiYWNjZXB0X211dGV4XCIgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICJpZ25vcmVkIik7Ci0KLSNlbmRpZgotCi0gICAgcmV0dXJuIE5HWF9DT05GX09LOwotfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudC5oIGIvc3JjL2V2ZW50L25neF9ldmVudC5oCmluZGV4IGJlOTQzYWUuLjI1ZjQxODkgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuaAorKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmgKQEAgLTQzOCw3ICs0MzgsOCBAQAogZXh0ZXJuIG5neF9hdG9taWNfdCAgICAgICAgICAqbmd4X2Nvbm5lY3Rpb25fY291bnRlcjsKIAogZXh0ZXJuIG5neF9hdG9taWNfdCAgICAgICAgICAqbmd4X2FjY2VwdF9tdXRleF9wdHI7Ci1leHRlcm4gbmd4X2F0b21pY190ICAgICAgICAgICpuZ3hfYWNjZXB0X211dGV4OworZXh0ZXJuIG5neF9zaG10eF90ICAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleDsKK2V4dGVybiBuZ3hfdWludF90ICAgICAgICAgICAgIG5neF91c2VfYWNjZXB0X211dGV4OwogZXh0ZXJuIG5neF91aW50X3QgICAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF9oZWxkOwogZXh0ZXJuIG5neF9tc2VjX3QgICAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF9kZWxheTsKIGV4dGVybiBuZ3hfaW50X3QgICAgICAgICAgICAgIG5neF9hY2NlcHRfZGlzYWJsZWQ7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYwppbmRleCBhZmIxYTFmLi44NzVjNDVkIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKQEAgLTI1OSw5ICsyNTksOCBAQAogbmd4X2ludF90CiBuZ3hfdHJ5bG9ja19hY2NlcHRfbXV0ZXgobmd4X2N5Y2xlX3QgKmN5Y2xlKQogewotICAgIGlmICgqbmd4X2FjY2VwdF9tdXRleCA9PSAwCi0gICAgICAgICYmIG5neF9hdG9taWNfY21wX3NldChuZ3hfYWNjZXB0X211dGV4LCAwLCBuZ3hfcGlkKSkKLSAgICB7CisgICAgaWYgKG5neF9zaG10eF90cnlsb2NrKCZuZ3hfYWNjZXB0X211dGV4KSkgeworCiAgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQgbXV0ZXggbG9ja2VkIik7CiAKQEAgLTI3MSw3ICsyNzAsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKG5neF9lbmFibGVfYWNjZXB0X2V2ZW50cyhjeWNsZSkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAqbmd4X2FjY2VwdF9tdXRleCA9IDA7CisgICAgICAgICAgICBuZ3hfc2htdHhfdW5sb2NrKCZuZ3hfYWNjZXB0X211dGV4KTsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYwppbmRleCA1YTcyNGFmLi4zYTc4MzVlIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYwpAQCAtMTAwOSw2ICsxMDA5LDIwIEBACiB9CiAKIAordV9jaGFyICoKK25neF9zc2xfZ2V0X3Byb3RvY29sKG5neF9jb25uZWN0aW9uX3QgKmMpCit7CisgICAgcmV0dXJuICh1X2NoYXIgKikgU1NMX2dldF92ZXJzaW9uKGMtPnNzbC0+Y29ubmVjdGlvbik7Cit9CisKKwordV9jaGFyICoKK25neF9zc2xfZ2V0X2NpcGhlcl9uYW1lKG5neF9jb25uZWN0aW9uX3QgKmMpCit7CisgICAgcmV0dXJuICh1X2NoYXIgKikgU1NMX2dldF9jaXBoZXJfbmFtZShjLT5zc2wtPmNvbm5lY3Rpb24pOworfQorCisKIHN0YXRpYyB2b2lkICoKIG5neF9vcGVuc3NsX2NyZWF0ZV9jb25mKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oIGIvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmgKaW5kZXggNjZlZGM1Mi4uODJiZmExMyAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmgKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmgKQEAgLTY5LDggKzY5LDEzIEBACiAgICAgbmd4X3VpbnRfdCBmbGFncyk7CiAKIG5neF9pbnRfdCBuZ3hfc3NsX3NldF9zZXNzaW9uKG5neF9jb25uZWN0aW9uX3QgKmMsIG5neF9zc2xfc2Vzc2lvbl90ICpzZXNzaW9uKTsKLSNkZWZpbmUgbmd4X3NzbF9nZXRfc2Vzc2lvbihjKSAgIFNTTF9nZXQxX3Nlc3Npb24oYy0+c3NsLT5jb25uZWN0aW9uKQotI2RlZmluZSBuZ3hfc3NsX2ZyZWVfc2Vzc2lvbiAgICAgU1NMX1NFU1NJT05fZnJlZQorI2RlZmluZSBuZ3hfc3NsX2dldF9zZXNzaW9uKGMpICAgICAgU1NMX2dldDFfc2Vzc2lvbihjLT5zc2wtPmNvbm5lY3Rpb24pCisjZGVmaW5lIG5neF9zc2xfZnJlZV9zZXNzaW9uICAgICAgICBTU0xfU0VTU0lPTl9mcmVlCisKKwordV9jaGFyICpuZ3hfc3NsX2dldF9wcm90b2NvbChuZ3hfY29ubmVjdGlvbl90ICpjKTsKK3VfY2hhciAqbmd4X3NzbF9nZXRfY2lwaGVyX25hbWUobmd4X2Nvbm5lY3Rpb25fdCAqYyk7CisKIAogbmd4X2ludF90IG5neF9zc2xfaGFuZHNoYWtlKG5neF9jb25uZWN0aW9uX3QgKmMpOwogc3NpemVfdCBuZ3hfc3NsX3JlY3Yobmd4X2Nvbm5lY3Rpb25fdCAqYywgdV9jaGFyICpidWYsIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCmluZGV4IDU3OWRhOTQuLmU2NmI0OGIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYwpAQCAtNzQxLDYgKzc0MSw4IEBACiAgICAgICAgICAgICBib2R5ID0gYm9keS0+bmV4dDsKICAgICAgICAgfQogCisgICAgICAgIGItPmZsdXNoID0gMTsKKwogICAgIH0gZWxzZSB7CiAgICAgICAgIHUtPnJlcXVlc3RfYnVmcyA9IGNsOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmVmZXJlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmVmZXJlcl9tb2R1bGUuYwppbmRleCAxN2EzNDI3Li40ZWFjMjYzIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JlZmVyZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZWZlcmVyX21vZHVsZS5jCkBAIC0yNzEsNiArMjcxLDggQEAKICAgICAgICAgY29uZi0+YmxvY2tlZF9yZWZlcmVyID0gMDsKICAgICB9CiAKKyAgICBjb25mLT5rZXlzID0gTlVMTDsKKwogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jCmluZGV4IDRlYzY3NDkuLjFiNTI4ZjcgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIG5neF9zdHJfdCAgICAgbmFtZTsKKyAgICBuZ3hfdWludF90ICAgIGtleTsKICAgICBuZ3hfc3RyX3QgICAgIHZhbHVlOwogfSBuZ3hfaHR0cF9zc2lfdmFyX3Q7CiAKQEAgLTYyLDcgKzYzLDcgQEAKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfc3NpX3BhcnNlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfaHR0cF9zc2lfY3R4X3QgKmN0eCk7CiBzdGF0aWMgbmd4X3N0cl90ICpuZ3hfaHR0cF9zc2lfZ2V0X3ZhcmlhYmxlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKLSAgICBuZ3hfc3RyX3QgKm5hbWUpOworICAgIG5neF9zdHJfdCAqbmFtZSwgbmd4X3VpbnRfdCBrZXkpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9zc2lfZXZhbHVhdGVfc3RyaW5nKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfaHR0cF9zc2lfY3R4X3QgKmN0eCwgbmd4X3N0cl90ICp0ZXh0LCBuZ3hfdWludF90IGZsYWdzKTsKIApAQCAtMTMzNSw3ICsxMzM2LDggQEAKIAogCiBzdGF0aWMgbmd4X3N0cl90ICoKLW5neF9odHRwX3NzaV9nZXRfdmFyaWFibGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfc3RyX3QgKm5hbWUpCituZ3hfaHR0cF9zc2lfZ2V0X3ZhcmlhYmxlKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X3N0cl90ICpuYW1lLAorICAgIG5neF91aW50X3Qga2V5KQogewogICAgIG5neF91aW50X3QgICAgICAgICAgIGk7CiAgICAgbmd4X2h0dHBfc3NpX3Zhcl90ICAqdmFyOwpAQCAtMTM0OSw3ICsxMzUxLDExIEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChuZ3hfc3RybmNhc2VjbXAobmFtZS0+ZGF0YSwgdmFyW2ldLm5hbWUuZGF0YSwgbmFtZS0+bGVuKSA9PSAwKSB7CisgICAgICAgIGlmIChrZXkgIT0gdmFyW2ldLmtleSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmd4X3N0cm5jbXAobmFtZS0+ZGF0YSwgdmFyW2ldLm5hbWUuZGF0YSwgbmFtZS0+bGVuKSA9PSAwKSB7CiAgICAgICAgICAgICByZXR1cm4gJnZhcltpXS52YWx1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEzNjUsNiArMTM3MSw3IEBACiAgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgIGNoLCAqcCwgKip2YWx1ZSwgKmRhdGEsICpwYXJ0X2RhdGE7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgKnNpemUsIGxlbiwgcHJlZml4LCBwYXJ0X2xlbjsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgdmFyLCAqdmFsOworICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICBrZXk7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgIGksIGosIG4sIGJyYWNrZXQ7CiAgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICAgIGxlbmd0aHMsIHZhbHVlczsKICAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICAqdnY7CkBAIC0xNDY5LDE0ICsxNDc2LDE3IEBACiAgICAgICAgICAgICAgICAgZ290byBpbnZhbGlkX3ZhcmlhYmxlOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBrZXkgPSAwOworCiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdmFyLmxlbjsgaisrKSB7CiAgICAgICAgICAgICAgICAgdmFyLmRhdGFbal0gPSBuZ3hfdG9sb3dlcih2YXIuZGF0YVtqXSk7CisgICAgICAgICAgICAgICAga2V5ID0gbmd4X2hhc2goa2V5LCB2YXIuZGF0YVtqXSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhbCA9IG5neF9odHRwX3NzaV9nZXRfdmFyaWFibGUociwgJnZhcik7CisgICAgICAgICAgICB2YWwgPSBuZ3hfaHR0cF9zc2lfZ2V0X3ZhcmlhYmxlKHIsICZ2YXIsIGtleSk7CiAKICAgICAgICAgICAgIGlmICh2YWwgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHZ2ID0gbmd4X2h0dHBfZ2V0X3ZhcmlhYmxlKHIsICZ2YXIpOworICAgICAgICAgICAgICAgIHZ2ID0gbmd4X2h0dHBfZ2V0X3ZhcmlhYmxlKHIsICZ2YXIsIGtleSk7CiAKICAgICAgICAgICAgICAgICBpZiAodnYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwpAQCAtMTYzNiw2ICsxNjQ2LDcgQEAKIG5neF9odHRwX3NzaV9lY2hvKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2h0dHBfc3NpX2N0eF90ICpjdHgsCiAgICAgbmd4X3N0cl90ICoqcGFyYW1zKQogeworICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICBrZXk7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgIGk7CiAgICAgbmd4X2J1Zl90ICAgICAgICAgICAgICAgICAgKmI7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgKnZhciwgKnZhbHVlLCB0ZXh0OwpAQCAtMTY0NCwxNCArMTY1NSwxNyBAQAogCiAgICAgdmFyID0gcGFyYW1zW05HWF9IVFRQX1NTSV9FQ0hPX1ZBUl07CiAKLSAgICB2YWx1ZSA9IG5neF9odHRwX3NzaV9nZXRfdmFyaWFibGUociwgdmFyKTsKKyAgICBrZXkgPSAwOworCisgICAgZm9yIChpID0gMDsgaSA8IHZhci0+bGVuOyBpKyspIHsKKyAgICAgICAgdmFyLT5kYXRhW2ldID0gbmd4X3RvbG93ZXIodmFyLT5kYXRhW2ldKTsKKyAgICAgICAga2V5ID0gbmd4X2hhc2goa2V5LCB2YXItPmRhdGFbaV0pOworICAgIH0KKworICAgIHZhbHVlID0gbmd4X2h0dHBfc3NpX2dldF92YXJpYWJsZShyLCB2YXIsIGtleSk7CiAKICAgICBpZiAodmFsdWUgPT0gTlVMTCkgewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmFyLT5sZW47IGkrKykgewotICAgICAgICAgICAgdmFyLT5kYXRhW2ldID0gbmd4X3RvbG93ZXIodmFyLT5kYXRhW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZ2ID0gbmd4X2h0dHBfZ2V0X3ZhcmlhYmxlKHIsIHZhcik7CisgICAgICAgIHZ2ID0gbmd4X2h0dHBfZ2V0X3ZhcmlhYmxlKHIsIHZhciwga2V5KTsKIAogICAgICAgICBpZiAodnYgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1NTSV9FUlJPUjsKQEAgLTE3MzUsNiArMTc0OSw4IEBACiBuZ3hfaHR0cF9zc2lfc2V0KG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2h0dHBfc3NpX2N0eF90ICpjdHgsCiAgICAgbmd4X3N0cl90ICoqcGFyYW1zKQogeworICAgIG5neF9pbnRfdCAgICAgICAgICAgIGtleTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICBpOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgKm5hbWUsICp2YWx1ZSwgKnZ2OwogICAgIG5neF9odHRwX3NzaV92YXJfdCAgKnZhcjsKICAgICBuZ3hfaHR0cF9zc2lfY3R4X3QgICptY3R4OwpAQCAtMTc1Niw3ICsxNzcyLDE0IEBACiAgICAgICAgIHJldHVybiBOR1hfSFRUUF9TU0lfRVJST1I7CiAgICAgfQogCi0gICAgdnYgPSBuZ3hfaHR0cF9zc2lfZ2V0X3ZhcmlhYmxlKHIsIG5hbWUpOworICAgIGtleSA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbmFtZS0+bGVuOyBpKyspIHsKKyAgICAgICAgbmFtZS0+ZGF0YVtpXSA9IG5neF90b2xvd2VyKG5hbWUtPmRhdGFbaV0pOworICAgICAgICBrZXkgPSBuZ3hfaGFzaChrZXksIG5hbWUtPmRhdGFbaV0pOworICAgIH0KKworICAgIHZ2ID0gbmd4X2h0dHBfc3NpX2dldF92YXJpYWJsZShyLCBuYW1lLCBrZXkpOwogCiAgICAgaWYgKHZ2KSB7CiAgICAgICAgICp2diA9ICp2YWx1ZTsKQEAgLTE3NjksNiArMTc5Miw3IEBACiAgICAgfQogCiAgICAgdmFyLT5uYW1lID0gKm5hbWU7CisgICAgdmFyLT5rZXkgPSBrZXk7CiAgICAgdmFyLT52YWx1ZSA9ICp2YWx1ZTsKIAogICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2xfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzbF9tb2R1bGUuYwppbmRleCA1NWY3YjQ4Li5hNzBjN2YyIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzbF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzbF9tb2R1bGUuYwpAQCAtOSwxMSArOSwxOCBAQAogI2luY2x1ZGUgPG5neF9odHRwLmg+CiAKIAordHlwZWRlZiB1X2NoYXIgKigqbmd4X3NzbF92YXJpYWJsZV9oYW5kbGVyX3B0KShuZ3hfY29ubmVjdGlvbl90ICopOworCisKICNkZWZpbmUgTkdYX0RFRkxBVVRfQ0VSVElGSUNBVEUgICAgICAiY2VydC5wZW0iCiAjZGVmaW5lIE5HWF9ERUZMQVVUX0NFUlRJRklDQVRFX0tFWSAgImNlcnQucGVtIgogI2RlZmluZSBOR1hfREVGTEFVVF9DSVBIRVJTICAiQUxMOiFBREg6UkM0K1JTQTorSElHSDorTUVESVVNOitMT1c6K1NTTHYyOitFWFAiCiAKIAorc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9zc2xfdmFyaWFibGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKTsKKworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9zc2xfYWRkX3ZhcmlhYmxlcyhuZ3hfY29uZl90ICpjZik7CiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfc3NsX2NyZWF0ZV9zcnZfY29uZihuZ3hfY29uZl90ICpjZik7CiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfc3NsX21lcmdlX3Nydl9jb25mKG5neF9jb25mX3QgKmNmLAogICAgIHZvaWQgKnBhcmVudCwgdm9pZCAqY2hpbGQpOwpAQCAtOTcsNyArMTA0LDcgQEAKIAogCiBzdGF0aWMgbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX3NzbF9tb2R1bGVfY3R4ID0gewotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByZWNvbmZpZ3VyYXRpb24gKi8KKyAgICBuZ3hfaHR0cF9zc2xfYWRkX3ZhcmlhYmxlcywgICAgICAgICAgICAvKiBwcmVjb25maWd1cmF0aW9uICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KIAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTEyNyw5ICsxMzQsNzAgQEAKIH07CiAKIAorc3RhdGljIG5neF9odHRwX3ZhcmlhYmxlX3QgIG5neF9odHRwX3NzbF92YXJzW10gPSB7CisKKyAgICB7IG5neF9zdHJpbmcoInNzbF9wcm90b2NvbCIpLCBuZ3hfaHR0cF9zc2xfdmFyaWFibGUsCisgICAgICAodWludHB0cl90KSBuZ3hfc3NsX2dldF9wcm90b2NvbCwgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRSwgMCB9LAorCisgICAgeyBuZ3hfc3RyaW5nKCJzc2xfY2lwaGVyIiksIG5neF9odHRwX3NzbF92YXJpYWJsZSwKKyAgICAgICh1aW50cHRyX3QpIG5neF9zc2xfZ2V0X2NpcGhlcl9uYW1lLCBOR1hfSFRUUF9WQVJfQ0hBTkdBQkxFLCAwIH0sCisKKyAgICB7IG5neF9udWxsX3N0cmluZywgTlVMTCwgMCwgMCwgMCB9Cit9OworCisKIHN0YXRpYyB1X2NoYXIgbmd4X2h0dHBfc2Vzc2lvbl9pZF9jdHhbXSA9ICJIVFRQIjsKIAogCitzdGF0aWMgbmd4X2ludF90CituZ3hfaHR0cF9zc2xfdmFyaWFibGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKQoreworICAgIG5neF9zc2xfdmFyaWFibGVfaGFuZGxlcl9wdCBoYW5kbGVyID0gKG5neF9zc2xfdmFyaWFibGVfaGFuZGxlcl9wdCkgZGF0YTsKKworICAgIHNpemVfdCAgIGxlbjsKKyAgICB1X2NoYXIgICpuYW1lOworCisgICAgaWYgKHItPmNvbm5lY3Rpb24tPnNzbCkgeworCisgICAgICAgIG5hbWUgPSBoYW5kbGVyKHItPmNvbm5lY3Rpb24pOworCisgICAgICAgIGZvciAobGVuID0gMDsgbmFtZVtsZW5dOyBsZW4rKykgeyAvKiB2b2lkICovIH0KKworICAgICAgICB2LT5sZW4gPSBsZW47CisgICAgICAgIHYtPnZhbGlkID0gMTsKKyAgICAgICAgdi0+bm9fY2FjaGFibGUgPSAwOworICAgICAgICB2LT5ub3RfZm91bmQgPSAwOworICAgICAgICB2LT5kYXRhID0gbmFtZTsKKworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKworICAgIHYtPm5vdF9mb3VuZCA9IDE7CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX3NzbF9hZGRfdmFyaWFibGVzKG5neF9jb25mX3QgKmNmKQoreworICAgIG5neF9odHRwX3ZhcmlhYmxlX3QgICp2YXIsICp2OworCisgICAgZm9yICh2ID0gbmd4X2h0dHBfc3NsX3ZhcnM7IHYtPm5hbWUubGVuOyB2KyspIHsKKyAgICAgICAgdmFyID0gbmd4X2h0dHBfYWRkX3ZhcmlhYmxlKGNmLCAmdi0+bmFtZSwgdi0+ZmxhZ3MpOworICAgICAgICBpZiAodmFyID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICB2YXItPmhhbmRsZXIgPSB2LT5oYW5kbGVyOworICAgICAgICB2YXItPmRhdGEgPSB2LT5kYXRhOworICAgIH0KKworICAgIHJldHVybiBOR1hfT0s7Cit9CisKKwogc3RhdGljIHZvaWQgKgogbmd4X2h0dHBfc3NsX2NyZWF0ZV9zcnZfY29uZihuZ3hfY29uZl90ICpjZikKIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IDg5Zjg0NmMuLjFiYzQzZGUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtNzcsNiArNzcsMjAgQEAKIAogc3RhdGljIG5neF9jb21tYW5kX3QgIG5neF9odHRwX2NvcmVfY29tbWFuZHNbXSA9IHsKIAorICAgIHsgbmd4X3N0cmluZygidmFyaWFibGVzX2hhc2hfbWF4X3NpemUiKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIG5neF9jb25mX3NldF9udW1fc2xvdCwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90LCB2YXJpYWJsZXNfaGFzaF9tYXhfc2l6ZSksCisgICAgICBOVUxMIH0sCisKKyAgICB7IG5neF9zdHJpbmcoInZhcmlhYmxlc19oYXNoX2J1Y2tldF9zaXplIiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfbnVtX3Nsb3QsCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfY29yZV9tYWluX2NvbmZfdCwgdmFyaWFibGVzX2hhc2hfYnVja2V0X3NpemUpLAorICAgICAgTlVMTCB9LAorCiAgICAgeyBuZ3hfc3RyaW5nKCJzZXJ2ZXJfbmFtZXNfaGFzaF9tYXhfc2l6ZSIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X251bV9zbG90LApAQCAtMTc4Nyw2ICsxODAxLDkgQEAKICAgICBjbWNmLT5zZXJ2ZXJfbmFtZXNfaGFzaF9tYXhfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1VJTlQ7CiAgICAgY21jZi0+c2VydmVyX25hbWVzX2hhc2hfYnVja2V0X3NpemUgPSBOR1hfQ09ORl9VTlNFVF9VSU5UOwogCisgICAgY21jZi0+dmFyaWFibGVzX2hhc2hfbWF4X3NpemUgPSBOR1hfQ09ORl9VTlNFVF9VSU5UOworICAgIGNtY2YtPnZhcmlhYmxlc19oYXNoX2J1Y2tldF9zaXplID0gTkdYX0NPTkZfVU5TRVRfVUlOVDsKKwogICAgIHJldHVybiBjbWNmOwogfQogCkBAIC0xODA3LDYgKzE4MjQsMTggQEAKICAgICBjbWNmLT5zZXJ2ZXJfbmFtZXNfaGFzaF9idWNrZXRfc2l6ZSA9CiAgICAgICAgICAgICBuZ3hfYWxpZ24oY21jZi0+c2VydmVyX25hbWVzX2hhc2hfYnVja2V0X3NpemUsIG5neF9jYWNoZWxpbmVfc2l6ZSk7CiAKKworICAgIGlmIChjbWNmLT52YXJpYWJsZXNfaGFzaF9tYXhfc2l6ZSA9PSBOR1hfQ09ORl9VTlNFVF9VSU5UKSB7CisgICAgICAgIGNtY2YtPnZhcmlhYmxlc19oYXNoX21heF9zaXplID0gNTEyOworICAgIH0KKworICAgIGlmIChjbWNmLT52YXJpYWJsZXNfaGFzaF9idWNrZXRfc2l6ZSA9PSBOR1hfQ09ORl9VTlNFVF9VSU5UKSB7CisgICAgICAgIGNtY2YtPnZhcmlhYmxlc19oYXNoX2J1Y2tldF9zaXplID0gNjQ7CisgICAgfQorCisgICAgY21jZi0+dmFyaWFibGVzX2hhc2hfYnVja2V0X3NpemUgPQorICAgICAgICAgICAgICAgbmd4X2FsaWduKGNtY2YtPnZhcmlhYmxlc19oYXNoX2J1Y2tldF9zaXplLCBuZ3hfY2FjaGVsaW5lX3NpemUpOworCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogfQogCkBAIC0yMjI0LDcgKzIyNTMsNyBAQAogCiAgICAgbHMtPmZhbWlseSA9IEFGX0lORVQ7CiAgICAgbHMtPnBvcnQgPSAoaW5fcG9ydF90KSAoaW5ldF91cHN0cmVhbS5kZWZhdWx0X3BvcnQgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODAgOiBpbmV0X3Vwc3RyZWFtLnBvcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgwIDogaW5ldF91cHN0cmVhbS5wb3J0KTsKICAgICBscy0+ZmlsZV9uYW1lID0gY2YtPmNvbmZfZmlsZS0+ZmlsZS5uYW1lOwogICAgIGxzLT5saW5lID0gY2YtPmNvbmZfZmlsZS0+bGluZTsKICAgICBscy0+Y29uZi5iYWNrbG9nID0gLTE7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaAppbmRleCA0MzgyMjg5Li42ZDgxNWE3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKQEAgLTcxLDEzICs3MSwxOCBAQAogICAgIG5neF9odHRwX3BoYXNlX3QgICAgICAgICAgIHBoYXNlc1tOR1hfSFRUUF9MT0dfUEhBU0UgKyAxXTsKIAogICAgIG5neF9oYXNoMF90ICAgICAgICAgICAgICAgIGhlYWRlcnNfaW5faGFzaDsKLSAgICBuZ3hfaGFzaDBfdCAgICAgICAgICAgICAgICB2YXJpYWJsZXNfaGFzaDsKKworICAgIG5neF9oYXNoX3QgICAgICAgICAgICAgICAgIHZhcmlhYmxlc19oYXNoOworCisgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICAgdmFyaWFibGVzOyAgICAgICAvKiBuZ3hfaHR0cF92YXJpYWJsZV90ICovCiAKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICBzZXJ2ZXJfbmFtZXNfaGFzaF9tYXhfc2l6ZTsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICBzZXJ2ZXJfbmFtZXNfaGFzaF9idWNrZXRfc2l6ZTsKIAotICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgIHZhcmlhYmxlczsgICAgICAgIC8qIG5neF9odHRwX3ZhcmlhYmxlX3QgKi8KLSAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICBhbGxfdmFyaWFibGVzOyAgICAvKiBuZ3hfaHR0cF92YXJpYWJsZV90ICovCisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgdmFyaWFibGVzX2hhc2hfbWF4X3NpemU7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgdmFyaWFibGVzX2hhc2hfYnVja2V0X3NpemU7CisKKyAgICBuZ3hfaGFzaF9rZXlzX2FycmF5c190ICAgICp2YXJpYWJsZXNfa2V5czsKIH0gbmd4X2h0dHBfY29yZV9tYWluX2NvbmZfdDsKIAogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggOWVmNWE4MC4uYWEyYjg1ZiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAgICAgaWYgKHJldi0+cmVhZHkpIHsKICAgICAgICAgLyogdGhlIGRlZmVycmVkIGFjY2VwdCgpLCBydHNpZywgYWlvLCBpb2NwICovCiAKLSAgICAgICAgaWYgKG5neF9hY2NlcHRfbXV0ZXgpIHsKKyAgICAgICAgaWYgKG5neF91c2VfYWNjZXB0X211dGV4KSB7CiAgICAgICAgICAgICBuZ3hfcG9zdF9ldmVudChyZXYsICZuZ3hfcG9zdGVkX2V2ZW50cyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCmluZGV4IDNjM2E5ZTYuLjlhZmE0ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwpAQCAtMTQ1NywxMSArMTQ1NywxMCBAQAogICAgIGlmIChldi0+dGltZWRvdXQpIHsKICAgICAgICAgaWYgKGV2LT53cml0ZSkgewogICAgICAgICAgICAgYy0+dGltZWRvdXQgPSAxOwotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgYy0+bG9nLCBOR1hfRVRJTUVET1VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IHRpbWVkIG91dCIpOworICAgICAgICAgICAgbmd4X2Nvbm5lY3Rpb25fZXJyb3IoYywgTkdYX0VUSU1FRE9VVCwgImNsaWVudCB0aW1lZCBvdXQiKTsKKwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgYy0+bG9nLCBOR1hfRVRJTUVET1VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAidXBzdHJlYW0gdGltZWQgb3V0Iik7CisgICAgICAgICAgICBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCBOR1hfRVRJTUVET1VULCAidXBzdHJlYW0gdGltZWQgb3V0Iik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE2ODEsMTQgKzE2ODAsMTIgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcC0+ZG93bnN0cmVhbV9lcnJvciA9IDE7CiAgICAgICAgICAgICAgICAgYy0+dGltZWRvdXQgPSAxOwotICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIGMtPmxvZywgTkdYX0VUSU1FRE9VVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgdGltZWQgb3V0Iik7CisgICAgICAgICAgICAgICAgbmd4X2Nvbm5lY3Rpb25fZXJyb3IoYywgTkdYX0VUSU1FRE9VVCwgImNsaWVudCB0aW1lZCBvdXQiKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcC0+dXBzdHJlYW1fZXJyb3IgPSAxOwotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgYy0+bG9nLCBOR1hfRVRJTUVET1VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAidXBzdHJlYW0gdGltZWQgb3V0Iik7CisgICAgICAgICAgICBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCBOR1hfRVRJTUVET1VULCAidXBzdHJlYW0gdGltZWQgb3V0Iik7CiAgICAgICAgIH0KIAogICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYyBiL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCmluZGV4IDkzMDgwYWIuLjEzNzAxNjIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCkBAIC00Miw2ICs0Miw4IEBACiAgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF92YXJpYWJsZV9yZW1vdGVfdXNlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF92YXJpYWJsZV9ib2R5X2J5dGVzX3NlbnQobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKTsKIAogCiAvKgpAQCAtMTMwLDYgKzEzMiw5IEBACiAKICAgICB7IG5neF9zdHJpbmcoInJlbW90ZV91c2VyIiksIG5neF9odHRwX3ZhcmlhYmxlX3JlbW90ZV91c2VyLCAwLCAwLCAwIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoImJvZHlfYnl0ZXNfc2VudCIpLCBuZ3hfaHR0cF92YXJpYWJsZV9ib2R5X2J5dGVzX3NlbnQsCisgICAgICAwLCAwLCAwIH0sCisKICAgICB7IG5neF9udWxsX3N0cmluZywgTlVMTCwgMCwgMCwgMCB9CiB9OwogCkBAIC0xNDMsMzAgKzE0OCwzNCBAQAogbmd4X2h0dHBfdmFyaWFibGVfdCAqCiBuZ3hfaHR0cF9hZGRfdmFyaWFibGUobmd4X2NvbmZfdCAqY2YsIG5neF9zdHJfdCAqbmFtZSwgbmd4X3VpbnRfdCBmbGFncykKIHsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgcmM7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgIGk7CisgICAgbmd4X2hhc2hfa2V5X3QgICAgICAgICAgICAgKmtleTsKICAgICBuZ3hfaHR0cF92YXJpYWJsZV90ICAgICAgICAqdjsKICAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAqY21jZjsKIAogICAgIGNtY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfbWFpbl9jb25mKGNmLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKLSAgICB2ID0gY21jZi0+YWxsX3ZhcmlhYmxlcy5lbHRzOwotICAgIGZvciAoaSA9IDA7IGkgPCBjbWNmLT5hbGxfdmFyaWFibGVzLm5lbHRzOyBpKyspIHsKLSAgICAgICAgaWYgKG5hbWUtPmxlbiAhPSB2W2ldLm5hbWUubGVuCi0gICAgICAgICAgICB8fCBuZ3hfc3RybmNhc2VjbXAobmFtZS0+ZGF0YSwgdltpXS5uYW1lLmRhdGEsIG5hbWUtPmxlbikgIT0gMCkKKyAgICBrZXkgPSBjbWNmLT52YXJpYWJsZXNfa2V5cy0+a2V5cy5lbHRzOworICAgIGZvciAoaSA9IDA7IGkgPCBjbWNmLT52YXJpYWJsZXNfa2V5cy0+a2V5cy5uZWx0czsgaSsrKSB7CisgICAgICAgIGlmIChuYW1lLT5sZW4gIT0ga2V5W2ldLmtleS5sZW4KKyAgICAgICAgICAgIHx8IG5neF9zdHJuY2FzZWNtcChuYW1lLT5kYXRhLCBrZXlbaV0ua2V5LmRhdGEsIG5hbWUtPmxlbikgIT0gMCkKICAgICAgICAgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoISh2W2ldLmZsYWdzICYgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRSkpIHsKKyAgICAgICAgdiA9IGtleVtpXS52YWx1ZTsKKworICAgICAgICBpZiAoISh2LT5mbGFncyAmIE5HWF9IVFRQX1ZBUl9DSEFOR0FCTEUpKSB7CiAgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBkdXBsaWNhdGUgXCIlVlwiIHZhcmlhYmxlIiwgbmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiAmdltpXTsKKyAgICAgICAgcmV0dXJuIHY7CiAgICAgfQogCi0gICAgdiA9IG5neF9hcnJheV9wdXNoKCZjbWNmLT5hbGxfdmFyaWFibGVzKTsKKyAgICB2ID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwgc2l6ZW9mKG5neF9odHRwX3ZhcmlhYmxlX3QpKTsKICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE4Niw2ICsxOTUsMTggQEAKICAgICB2LT5mbGFncyA9IGZsYWdzOwogICAgIHYtPmluZGV4ID0gMDsKIAorICAgIHJjID0gbmd4X2hhc2hfYWRkX2tleShjbWNmLT52YXJpYWJsZXNfa2V5cywgJnYtPm5hbWUsIHYsIDApOworCisgICAgaWYgKHJjID09IE5HWF9FUlJPUikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAocmMgPT0gTkdYX0JVU1kpIHsKKyAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbmZsaWN0aW5nIHZhcmlhYmxlIG5hbWUgXCIlVlwiIiwgbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIHJldHVybiB2OwogfQogCkBAIC0yOTgsMzQgKzMxOSwyNSBAQAogCiAKIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKgotbmd4X2h0dHBfZ2V0X3ZhcmlhYmxlKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X3N0cl90ICpuYW1lKQorbmd4X2h0dHBfZ2V0X3ZhcmlhYmxlKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X3N0cl90ICpuYW1lLCBuZ3hfdWludF90IGtleSkKIHsKLSAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgaSwga2V5OwogICAgIG5neF9odHRwX3ZhcmlhYmxlX3QgICAgICAgICp2OwogICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgICp2djsKICAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAqY21jZjsKIAogICAgIGNtY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX21haW5fY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKLSAgICBrZXkgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBuYW1lLT5sZW47IGkrKykgewotICAgICAgICBrZXkgKz0gbmFtZS0+ZGF0YVtpXTsKLSAgICB9CisgICAgdiA9IG5neF9oYXNoX2ZpbmQoJmNtY2YtPnZhcmlhYmxlc19oYXNoLCBrZXksIG5hbWUtPmRhdGEsIG5hbWUtPmxlbik7CiAKLSAgICBrZXkgJT0gY21jZi0+dmFyaWFibGVzX2hhc2guaGFzaF9zaXplOwotICAgIHYgPSAobmd4X2h0dHBfdmFyaWFibGVfdCAqKSBjbWNmLT52YXJpYWJsZXNfaGFzaC5idWNrZXRzOwotCi0gICAgaWYgKHZba2V5XS5uYW1lLmxlbiA9PSBuYW1lLT5sZW4KLSAgICAgICAgJiYgbmd4X3N0cm5jbXAodltrZXldLm5hbWUuZGF0YSwgbmFtZS0+ZGF0YSwgbmFtZS0+bGVuKSA9PSAwKQotICAgIHsKLSAgICAgICAgaWYgKHZba2V5XS5mbGFncyAmIE5HWF9IVFRQX1ZBUl9JTkRFWEVEKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfZ2V0X2luZGV4ZWRfdmFyaWFibGUociwgdltrZXldLmluZGV4KTsKKyAgICBpZiAodikgeworICAgICAgICBpZiAodi0+ZmxhZ3MgJiBOR1hfSFRUUF9WQVJfSU5ERVhFRCkgeworICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX2dldF9pbmRleGVkX3ZhcmlhYmxlKHIsIHYtPmluZGV4KTsKIAogICAgICAgICB9IGVsc2UgewogCiAgICAgICAgICAgICB2diA9IG5neF9wYWxsb2Moci0+cG9vbCwgc2l6ZW9mKG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QpKTsKIAotICAgICAgICAgICAgaWYgKHZ2ICYmIHZba2V5XS5oYW5kbGVyKHIsIHZ2LCB2W2tleV0uZGF0YSkgPT0gTkdYX09LKSB7CisgICAgICAgICAgICBpZiAodnYgJiYgdi0+aGFuZGxlcihyLCB2diwgdi0+ZGF0YSkgPT0gTkdYX09LKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZ2OwogICAgICAgICAgICAgfQogCkBAIC03NTgsMjggKzc3MCw3MiBAQAogfQogCiAKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX3ZhcmlhYmxlX2JvZHlfYnl0ZXNfc2VudChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpCit7CisgICAgb2ZmX3QgICAgc2VudDsKKyAgICB1X2NoYXIgICpwOworCisgICAgc2VudCA9IHItPmNvbm5lY3Rpb24tPnNlbnQgLSByLT5oZWFkZXJfc2l6ZTsKKworICAgIGlmIChzZW50IDwgMCkgeworICAgICAgICBzZW50ID0gMDsKKyAgICB9CisKKyAgICBwID0gbmd4X3BhbGxvYyhyLT5wb29sLCBOR1hfT0ZGX1RfTEVOKTsKKyAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgdi0+bGVuID0gbmd4X3NwcmludGYocCwgIiVPIiwgc2VudCkgLSBwOworICAgIHYtPnZhbGlkID0gMTsKKyAgICB2LT5ub19jYWNoYWJsZSA9IDA7CisgICAgdi0+bm90X2ZvdW5kID0gMDsKKyAgICB2LT5kYXRhID0gcDsKKworICAgIHJldHVybiBOR1hfT0s7Cit9CisKKwogbmd4X2ludF90CiBuZ3hfaHR0cF92YXJpYWJsZXNfYWRkX2NvcmVfdmFycyhuZ3hfY29uZl90ICpjZikKIHsKLSAgICBuZ3hfaHR0cF92YXJpYWJsZV90ICAgICAgICAqdiwgKmN2OworICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICByYzsKKyAgICBuZ3hfaHR0cF92YXJpYWJsZV90ICAgICAgICAqdjsKICAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAqY21jZjsKIAogICAgIGNtY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfbWFpbl9jb25mKGNmLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKLSAgICBpZiAobmd4X2FycmF5X2luaXQoJmNtY2YtPmFsbF92YXJpYWJsZXMsIGNmLT5wb29sLCAzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX3ZhcmlhYmxlX3QpKQotICAgICAgICA9PSBOR1hfRVJST1IpCisgICAgY21jZi0+dmFyaWFibGVzX2tleXMgPSBuZ3hfcGNhbGxvYyhjZi0+dGVtcF9wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9oYXNoX2tleXNfYXJyYXlzX3QpKTsKKyAgICBpZiAoY21jZi0+dmFyaWFibGVzX2tleXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKworICAgIGNtY2YtPnZhcmlhYmxlc19rZXlzLT5wb29sID0gY2YtPnBvb2w7CisgICAgY21jZi0+dmFyaWFibGVzX2tleXMtPnRlbXBfcG9vbCA9IGNmLT5wb29sOworCisgICAgaWYgKG5neF9oYXNoX2tleXNfYXJyYXlfaW5pdChjbWNmLT52YXJpYWJsZXNfa2V5cywgTkdYX0hBU0hfU01BTEwpCisgICAgICAgICE9IE5HWF9PSykKICAgICB7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgZm9yIChjdiA9IG5neF9odHRwX2NvcmVfdmFyaWFibGVzOyBjdi0+bmFtZS5sZW47IGN2KyspIHsKLSAgICAgICAgdiA9IG5neF9hcnJheV9wdXNoKCZjbWNmLT5hbGxfdmFyaWFibGVzKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICBmb3IgKHYgPSBuZ3hfaHR0cF9jb3JlX3ZhcmlhYmxlczsgdi0+bmFtZS5sZW47IHYrKykgeworICAgICAgICByYyA9IG5neF9oYXNoX2FkZF9rZXkoY21jZi0+dmFyaWFibGVzX2tleXMsICZ2LT5uYW1lLCB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0hBU0hfUkVBRE9OTFlfS0VZKTsKKworICAgICAgICBpZiAocmMgPT0gTkdYX09LKSB7CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgICp2ID0gKmN2OworICAgICAgICBpZiAocmMgPT0gTkdYX0JVU1kpIHsKKyAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uZmxpY3RpbmcgdmFyaWFibGUgbmFtZSBcIiVWXCIiLCAmdi0+bmFtZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAogICAgIHJldHVybiBOR1hfT0s7CkBAIC03OTAsNiArODQ2LDggQEAKIG5neF9odHRwX3ZhcmlhYmxlc19pbml0X3ZhcnMobmd4X2NvbmZfdCAqY2YpCiB7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgIGksIG47CisgICAgbmd4X2hhc2hfa2V5X3QgICAgICAgICAgICAgKmtleTsKKyAgICBuZ3hfaGFzaF9pbml0X3QgICAgICAgICAgICAgaGFzaDsKICAgICBuZ3hfaHR0cF92YXJpYWJsZV90ICAgICAgICAqdiwgKmF2OwogICAgIG5neF9odHRwX2NvcmVfbWFpbl9jb25mX3QgICpjbWNmOwogCkBAIC03OTgsMjMgKzg1NiwyNSBAQAogICAgIGNtY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfbWFpbl9jb25mKGNmLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKICAgICB2ID0gY21jZi0+dmFyaWFibGVzLmVsdHM7Ci0gICAgYXYgPSBjbWNmLT5hbGxfdmFyaWFibGVzLmVsdHM7CisgICAga2V5ID0gY21jZi0+dmFyaWFibGVzX2tleXMtPmtleXMuZWx0czsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBjbWNmLT52YXJpYWJsZXMubmVsdHM7IGkrKykgewogCi0gICAgICAgIGZvciAobiA9IDA7IG4gPCBjbWNmLT5hbGxfdmFyaWFibGVzLm5lbHRzOyBuKyspIHsKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IGNtY2YtPnZhcmlhYmxlc19rZXlzLT5rZXlzLm5lbHRzOyBuKyspIHsKIAotICAgICAgICAgICAgaWYgKHZbaV0ubmFtZS5sZW4gPT0gYXZbbl0ubmFtZS5sZW4KLSAgICAgICAgICAgICAgICAmJiBuZ3hfc3RybmNtcCh2W2ldLm5hbWUuZGF0YSwgYXZbbl0ubmFtZS5kYXRhLCB2W2ldLm5hbWUubGVuKQorICAgICAgICAgICAgaWYgKHZbaV0ubmFtZS5sZW4gPT0ga2V5W25dLmtleS5sZW4KKyAgICAgICAgICAgICAgICAmJiBuZ3hfc3RybmNtcCh2W2ldLm5hbWUuZGF0YSwga2V5W25dLmtleS5kYXRhLCB2W2ldLm5hbWUubGVuKQogICAgICAgICAgICAgICAgICAgID09IDApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdltpXS5oYW5kbGVyID0gYXZbbl0uaGFuZGxlcjsKLSAgICAgICAgICAgICAgICB2W2ldLmRhdGEgPSBhdltuXS5kYXRhOworICAgICAgICAgICAgICAgIGF2ID0ga2V5W25dLnZhbHVlOwogCi0gICAgICAgICAgICAgICAgYXZbbl0uZmxhZ3MgfD0gTkdYX0hUVFBfVkFSX0lOREVYRUQ7Ci0gICAgICAgICAgICAgICAgdltpXS5mbGFncyA9IGF2W25dLmZsYWdzOworICAgICAgICAgICAgICAgIHZbaV0uaGFuZGxlciA9IGF2LT5oYW5kbGVyOworICAgICAgICAgICAgICAgIHZbaV0uZGF0YSA9IGF2LT5kYXRhOwogCi0gICAgICAgICAgICAgICAgYXZbbl0uaW5kZXggPSBpOworICAgICAgICAgICAgICAgIGF2LT5mbGFncyB8PSBOR1hfSFRUUF9WQVJfSU5ERVhFRDsKKyAgICAgICAgICAgICAgICB2W2ldLmZsYWdzID0gYXYtPmZsYWdzOworCisgICAgICAgICAgICAgICAgYXYtPmluZGV4ID0gaTsKIAogICAgICAgICAgICAgICAgIGdvdG8gbmV4dDsKICAgICAgICAgICAgIH0KQEAgLTg0MywzNiArOTAzLDMyIEBACiAgICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAotICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgY2YtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiaHR0cCB2YXJpYWJsZXM6ICV1aSIsIGNtY2YtPnZhcmlhYmxlcy5uZWx0cyk7CiAKKyAgICBmb3IgKG4gPSAwOyBuIDwgY21jZi0+dmFyaWFibGVzX2tleXMtPmtleXMubmVsdHM7IG4rKykgeworICAgICAgICBhdiA9IGtleVtuXS52YWx1ZTsKIAotICAgIGZvciAobiA9IDA7IG4gPCBjbWNmLT5hbGxfdmFyaWFibGVzLm5lbHRzOyBuKyspIHsKLSAgICAgICAgaWYgKGF2W25dLmZsYWdzICYgTkdYX0hUVFBfVkFSX05PSEFTSCkgewotICAgICAgICAgICAgYXZbbl0ubmFtZS5kYXRhID0gTlVMTDsKKyAgICAgICAgaWYgKGF2LT5mbGFncyAmIE5HWF9IVFRQX1ZBUl9OT0hBU0gpIHsKKyAgICAgICAgICAgIGtleVtuXS5rZXkuZGF0YSA9IE5VTEw7CiAgICAgICAgIH0KICAgICB9CiAKIAotICAgIC8qIGluaXQgdGhlIGFsbCBodHRwIHZhcmlhYmxlcyBoYXNoICovCisgICAgaGFzaC5oYXNoID0gJmNtY2YtPnZhcmlhYmxlc19oYXNoOworICAgIGhhc2gua2V5ID0gbmd4X2hhc2hfa2V5OworICAgIGhhc2gubWF4X3NpemUgPSBjbWNmLT52YXJpYWJsZXNfaGFzaF9tYXhfc2l6ZTsKKyAgICBoYXNoLmJ1Y2tldF9zaXplID0gY21jZi0+dmFyaWFibGVzX2hhc2hfYnVja2V0X3NpemU7CisgICAgaGFzaC5uYW1lID0gInZhcmlhYmxlc19oYXNoIjsKKyAgICBoYXNoLnBvb2wgPSBjZi0+cG9vbDsKKyAgICBoYXNoLnRlbXBfcG9vbCA9IE5VTEw7CiAKLSAgICBjbWNmLT52YXJpYWJsZXNfaGFzaC5tYXhfc2l6ZSA9IDUwMDsKLSAgICBjbWNmLT52YXJpYWJsZXNfaGFzaC5idWNrZXRfbGltaXQgPSAxOwotICAgIGNtY2YtPnZhcmlhYmxlc19oYXNoLmJ1Y2tldF9zaXplID0gc2l6ZW9mKG5neF9odHRwX3ZhcmlhYmxlX3QpOwotICAgIGNtY2YtPnZhcmlhYmxlc19oYXNoLm5hbWUgPSAiaHR0cCB2YXJpYWJsZXMiOwotCi0gICAgaWYgKG5neF9oYXNoMF9pbml0KCZjbWNmLT52YXJpYWJsZXNfaGFzaCwgY2YtPnBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgY21jZi0+YWxsX3ZhcmlhYmxlcy5lbHRzLCBjbWNmLT5hbGxfdmFyaWFibGVzLm5lbHRzKQorICAgIGlmIChuZ3hfaGFzaF9pbml0KCZoYXNoLCBjbWNmLT52YXJpYWJsZXNfa2V5cy0+a2V5cy5lbHRzLAorICAgICAgICAgICAgICAgICAgICAgIGNtY2YtPnZhcmlhYmxlc19rZXlzLT5rZXlzLm5lbHRzKQogICAgICAgICAhPSBOR1hfT0spCiAgICAgewogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfSFRUUCwgY2YtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiaHR0cCB2YXJpYWJsZXMgaGFzaCBzaXplOiAldWkgZm9yICV1aSB2YWx1ZXMsICIKLSAgICAgICAgICAgICAgICAgICAibWF4IGJ1Y2tldHMgcGVyIGVudHJ5OiAldWkiLAotICAgICAgICAgICAgICAgICAgIGNtY2YtPnZhcmlhYmxlc19oYXNoLmhhc2hfc2l6ZSwgY21jZi0+YWxsX3ZhcmlhYmxlcy5uZWx0cywKLSAgICAgICAgICAgICAgICAgICBjbWNmLT52YXJpYWJsZXNfaGFzaC5taW5fYnVja2V0cyk7CisgICAgY21jZi0+dmFyaWFibGVzX2tleXMgPSBOVUxMOwogCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmgKaW5kZXggNDgwYjRhNS4uZjNmMWZlOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmgKQEAgLTU2LDcgKzU2LDcgQEAKICAgICBuZ3hfdWludF90IGluZGV4KTsKIAogbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqbmd4X2h0dHBfZ2V0X3ZhcmlhYmxlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKLSAgICBuZ3hfc3RyX3QgKm5hbWUpOworICAgIG5neF9zdHJfdCAqbmFtZSwgbmd4X3VpbnRfdCBrZXkpOwogCiAjZGVmaW5lIG5neF9odHRwX2NsZWFyX3ZhcmlhYmxlKHIsIGluZGV4KSByLT52YXJpYWJsZXMwW2luZGV4XS50ZXh0LmRhdGEgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfYXRvbWljLmggYi9zcmMvb3MvdW5peC9uZ3hfYXRvbWljLmgKaW5kZXggNTBkNjM1NC4uYzUwNTAyNyAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2F0b21pYy5oCisrKyBiL3NyYy9vcy91bml4L25neF9hdG9taWMuaApAQCAtMzQsNiArMzQsNyBAQAogLyogdGhlIGNvZGUgaW4gc3JjL29zL3VuaXgvbmd4X3N1bnByb194ODYuaWwgKi8KIAogI2RlZmluZSBuZ3hfbWVtb3J5X2JhcnJpZXIoKSAgICAgICAgX19hc20gKCIudm9sYXRpbGUiKTsgX19hc20gKCIubm9udm9sYXRpbGUiKQorI2RlZmluZSBuZ3hfY3B1X3BhdXNlKCkgICAgICAgICAgICAgX19hc20gKCJwYXVzZSIpCiAKIAogI2Vsc2UgLyogKCBfX0dOVUNfXyB8fCBfX0lOVEVMX0NPTVBJTEVSICkgKi8KQEAgLTY3LDYgKzY4LDcgQEAKIC8qIHRoZSBjb2RlIGluIHNyYy9vcy91bml4L25neF9zdW5wcm9fYW1kNjQuaWwgKi8KIAogI2RlZmluZSBuZ3hfbWVtb3J5X2JhcnJpZXIoKSAgICAgICAgX19hc20gKCIudm9sYXRpbGUiKTsgX19hc20gKCIubm9udm9sYXRpbGUiKQorI2RlZmluZSBuZ3hfY3B1X3BhdXNlKCkgICAgICAgICAgICAgX19hc20gKCJwYXVzZSIpCiAKIAogI2Vsc2UgLyogKCBfX0dOVUNfXyB8fCBfX0lOVEVMX0NPTVBJTEVSICkgKi8KQEAgLTE3NSwxMCArMTc3LDExIEBACiB9CiAKICNkZWZpbmUgbmd4X21lbW9yeV9iYXJyaWVyKCkKKyNkZWZpbmUgbmd4X2NwdV9wYXVzZSgpCiAKICNlbmRpZgogCi12b2lkIG5neF9zcGlubG9jayhuZ3hfYXRvbWljX3QgKmxvY2ssIG5neF91aW50X3Qgc3Bpbik7Cit2b2lkIG5neF9zcGlubG9jayhuZ3hfYXRvbWljX3QgKmxvY2ssIG5neF9hdG9taWNfaW50X3QgdmFsdWUsIG5neF91aW50X3Qgc3Bpbik7CiAKICNkZWZpbmUgbmd4X3RyeWxvY2sobG9jaykgICgqKGxvY2spID09IDAgJiYgbmd4X2F0b21pY19jbXBfc2V0KGxvY2ssIDAsIDEpKQogI2RlZmluZSBuZ3hfdW5sb2NrKGxvY2spICAgICoobG9jaykgPSAwCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZmlsZXMuYyBiL3NyYy9vcy91bml4L25neF9maWxlcy5jCmluZGV4IGI1YTgwN2IuLmY4OTE0N2QgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9maWxlcy5jCisrKyBiL3NyYy9vcy91bml4L25neF9maWxlcy5jCkBAIC0yMzUsNTkgKzIzNSw1OCBAQAogfQogCiAKLW5neF9pbnRfdAotbmd4X2xvY2tfZmlsZShuZ3hfZmlsZV90ICpmaWxlKQorbmd4X2Vycl90CituZ3hfdHJ5bG9ja19mZChuZ3hfZmRfdCBmZCkKIHsKLSAgICBuZ3hfZXJyX3QgICAgIGVycjsKICAgICBzdHJ1Y3QgZmxvY2sgIGZsOwogCi0gICAgZmwubF93aGVuY2UgPSBTRUVLX1NFVDsKKyAgICBmbC5sX3N0YXJ0ID0gMDsKICAgICBmbC5sX2xlbiA9IDA7CiAgICAgZmwubF9waWQgPSAwOwogICAgIGZsLmxfdHlwZSA9IEZfV1JMQ0s7Ci0gICAgZmwubF9zdGFydCA9IDA7CisgICAgZmwubF93aGVuY2UgPSBTRUVLX1NFVDsKIAotICAgIGlmIChmY250bChmaWxlLT5mZCwgRl9TRVRMSywgJmZsKSA9PSAtMSkgewotICAgICAgICBlcnIgPSBuZ3hfZXJybm87Ci0KLSAgICAgICAgaWYgKGVyciA9PSBOR1hfRUFHQUlOKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0JVU1k7Ci0gICAgICAgIH0KLQotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGZpbGUtPmxvZywgZXJyLAotICAgICAgICAgICAgICAgICAgICAgICJmY250bCglcywgRl9TRVRMSywgRl9XUkxDSykgZmFpbGVkIiwgZmlsZS0+bmFtZS5kYXRhKTsKLQotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIGlmIChmY250bChmZCwgRl9TRVRMSywgJmZsKSA9PSAtMSkgeworICAgICAgICByZXR1cm4gbmd4X2Vycm5vOwogICAgIH0KIAotICAgIHJldHVybiBOR1hfT0s7CisgICAgcmV0dXJuIDA7CiB9CiAKIAotbmd4X2ludF90Ci1uZ3hfdW5sb2NrX2ZpbGUobmd4X2ZpbGVfdCAqZmlsZSkKK25neF9lcnJfdAorbmd4X2xvY2tfZmQobmd4X2ZkX3QgZmQpCiB7Ci0gICAgbmd4X2Vycl90ICAgICBlcnI7CiAgICAgc3RydWN0IGZsb2NrICBmbDsKIAorICAgIGZsLmxfc3RhcnQgPSAwOworICAgIGZsLmxfbGVuID0gMDsKKyAgICBmbC5sX3BpZCA9IDA7CisgICAgZmwubF90eXBlID0gRl9XUkxDSzsKICAgICBmbC5sX3doZW5jZSA9IFNFRUtfU0VUOworCisgICAgaWYgKGZjbnRsKGZkLCBGX1NFVExLVywgJmZsKSA9PSAtMSkgeworICAgICAgICByZXR1cm4gbmd4X2Vycm5vOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisKK25neF9lcnJfdAorbmd4X3VubG9ja19mZChuZ3hfZmRfdCBmZCkKK3sKKyAgICBzdHJ1Y3QgZmxvY2sgIGZsOworCisgICAgZmwubF9zdGFydCA9IDA7CiAgICAgZmwubF9sZW4gPSAwOwogICAgIGZsLmxfcGlkID0gMDsKICAgICBmbC5sX3R5cGUgPSBGX1VOTENLOwotICAgIGZsLmxfc3RhcnQgPSAwOworICAgIGZsLmxfd2hlbmNlID0gU0VFS19TRVQ7CiAKLSAgICBpZiAoZmNudGwoZmlsZS0+ZmQsIEZfU0VUTEssICZmbCkgPT0gLTEpIHsKLSAgICAgICAgZXJyID0gbmd4X2Vycm5vOwotCi0gICAgICAgIGlmIChlcnIgPT0gTkdYX0VBR0FJTikgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9CVVNZOwotICAgICAgICB9Ci0KLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBmaWxlLT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAiZmNudGwoJXMsIEZfU0VUTEssIEZfVU5MQ0spIGZhaWxlZCIsIGZpbGUtPm5hbWUuZGF0YSk7Ci0KLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICBpZiAoZmNudGwoZmQsIEZfU0VUTEssICZmbCkgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuICBuZ3hfZXJybm87CiAgICAgfQogCi0gICAgcmV0dXJuIE5HWF9PSzsKKyAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9maWxlcy5oIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmgKaW5kZXggYTM2MWZlNC4uZmNmNWRhNCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmgKQEAgLTExOSw0ICsxMTksMTMgQEAKICNkZWZpbmUgbmd4X2RlX210aW1lKGRpcikgICAgICAgIChkaXIpLT5pbmZvLnN0X210aW1lCiAKIAorbmd4X2Vycl90IG5neF90cnlsb2NrX2ZkKG5neF9mZF90IGZkKTsKK25neF9lcnJfdCBuZ3hfbG9ja19mZChuZ3hfZmRfdCBmZCk7CituZ3hfZXJyX3Qgbmd4X3VubG9ja19mZChuZ3hfZmRfdCBmZCk7CisKKyNkZWZpbmUgbmd4X3RyeWxvY2tfZmRfbiAgICAgICAgICJmY250bChGX1NFVExLLCBGX1dSTENLKSIKKyNkZWZpbmUgbmd4X2xvY2tfZmRfbiAgICAgICAgICAgICJmY250bChGX1NFVExLVywgRl9XUkxDSykiCisjZGVmaW5lIG5neF91bmxvY2tfZmRfbiAgICAgICAgICAiZmNudGwoRl9TRVRMSywgRl9VTkxDSykiCisKKwogI2VuZGlmIC8qIF9OR1hfRklMRVNfSF9JTkNMVURFRF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX2FtZDY0LmggYi9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19hbWQ2NC5oCmluZGV4IDIxODNlNzMuLjI4OWNkNjEgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX2FtZDY0LmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfYW1kNjQuaApAQCAtNzQsNCArNzQsNiBAQAogfQogCiAKLSNkZWZpbmUgbmd4X21lbW9yeV9iYXJyaWVyKCkgICAgICAgX19hc21fXyB2b2xhdGlsZSAoIiIgOjo6ICJtZW1vcnkiKQorI2RlZmluZSBuZ3hfbWVtb3J5X2JhcnJpZXIoKSAgICBfX2FzbV9fIHZvbGF0aWxlICgiIiA6OjogIm1lbW9yeSIpCisKKyNkZWZpbmUgbmd4X2NwdV9wYXVzZSgpICAgICAgICAgX19hc21fXyAoInBhdXNlIikKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3BwYy5oIGIvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfcHBjLmgKaW5kZXggYTZiYmIzOS4uNTMzOWJhOSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfcHBjLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfcHBjLmgKQEAgLTcxLDMgKzcxLDUgQEAKICNlbHNlCiAjZGVmaW5lIG5neF9tZW1vcnlfYmFycmllcigpICAgX19hc21fXyB2b2xhdGlsZSAoIiIgOjo6ICJtZW1vcnkiKQogI2VuZGlmCisKKyNkZWZpbmUgbmd4X2NwdV9wYXVzZSgpCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19zcGFyYzY0LmggYi9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19zcGFyYzY0LmgKaW5kZXggZmM2YmFjZS4uZTVhNjI1NCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfc3BhcmM2NC5oCisrKyBiL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3NwYXJjNjQuaApAQCAtNzcsMyArNzcsNSBAQAogI2Vsc2UKICNkZWZpbmUgbmd4X21lbW9yeV9iYXJyaWVyKCkgICBfX2FzbV9fIHZvbGF0aWxlICgiIiA6OjogIm1lbW9yeSIpCiAjZW5kaWYKKworI2RlZmluZSBuZ3hfY3B1X3BhdXNlKCkKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3g4Ni5oIGIvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfeDg2LmgKaW5kZXggOGUzNDgwZC4uMWUxNTgyNSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfeDg2LmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfeDg2LmgKQEAgLTExOCwzICsxMTgsNiBAQAogICovCiAKICNkZWZpbmUgbmd4X21lbW9yeV9iYXJyaWVyKCkgICAgX19hc21fXyB2b2xhdGlsZSAoIiIgOjo6ICJtZW1vcnkiKQorCisvKiBvbGQgYXMgZG9lcyBub3Qgc3VwcG9ydCAicGF1c2UiIG9wY29kZSAqLworI2RlZmluZSBuZ3hfY3B1X3BhdXNlKCkgICAgICAgICBfX2FzbV9fICgiLmJ5dGUgMHhmMywgMHg5MCIpCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfaW5pdC5jIGIvc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2luaXQuYwppbmRleCA4M2Q1ZjMwLi5hNDRhODljIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfaW5pdC5jCisrKyBiL3NyYy9vcy91bml4L25neF9wb3NpeF9pbml0LmMKQEAgLTQ1LDYgKzQ1LDggQEAKICAgICAgICAgbmd4X25jcHUgPSAxOwogICAgIH0KIAorICAgIG5neF9jcHVpbmZvKCk7CisKICAgICBpZiAoZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZybG10KSA9PSAtMSkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgImdldHJsaW1pdChSTElNSVRfTk9GSUxFKSBmYWlsZWQpIik7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc3VucHJvX2F0b21pY19zcGFyYzY0LmggYi9zcmMvb3MvdW5peC9uZ3hfc3VucHJvX2F0b21pY19zcGFyYzY0LmgKaW5kZXggNjkxZTk0ZS4uZGI4NTIxMSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3N1bnByb19hdG9taWNfc3BhcmM2NC5oCisrKyBiL3NyYy9vcy91bml4L25neF9zdW5wcm9fYXRvbWljX3NwYXJjNjQuaApAQCAtNTYsMyArNTYsNSBAQAogICAgICAgICBfX2FzbSAoIi52b2xhdGlsZSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBfX2FzbSAoIm1lbWJhciAjTG9hZExvYWQgfCAjTG9hZFN0b3JlIHwgI1N0b3JlU3RvcmUgfCAjU3RvcmVMb2FkIik7ICAgXAogICAgICAgICBfX2FzbSAoIi5ub252b2xhdGlsZSIpCisKKyNkZWZpbmUgbmd4X2NwdV9wYXVzZSgpCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X2F0b21pYy5oIGIvc3JjL29zL3dpbjMyL25neF9hdG9taWMuaAppbmRleCA4MDAzYjc0Li41ZTMyZjFmIDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X2F0b21pYy5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfYXRvbWljLmgKQEAgLTQ1LDcgKzQ1LDE0IEBACiAjZGVmaW5lIG5neF9tZW1vcnlfYmFycmllcigpCiAKIAotdm9pZCBuZ3hfc3BpbmxvY2sobmd4X2F0b21pY190ICpsb2NrLCBuZ3hfdWludF90IHNwaW4pOworI2lmZGVmIF9fQk9STEFORENfXworI2RlZmluZSBuZ3hfY3B1X3BhdXNlKCkKKyNlbHNlCisjZGVmaW5lIG5neF9jcHVfcGF1c2UoKSAgICAgICBfX2FzbSB7IHBhdXNlIH0KKyNlbmRpZgorCisKK3ZvaWQgbmd4X3NwaW5sb2NrKG5neF9hdG9taWNfdCAqbG9jaywgbmd4X2F0b21pY19pbnRfdCB2YWx1ZSwgbmd4X3VpbnRfdCBzcGluKTsKIAogI2RlZmluZSBuZ3hfdHJ5bG9jayhsb2NrKSAgKCoobG9jaykgPT0gMCAmJiBuZ3hfYXRvbWljX2NtcF9zZXQobG9jaywgMCwgMSkpCiAjZGVmaW5lIG5neF91bmxvY2sobG9jaykgICAgKihsb2NrKSA9IDAK