ZGlmZiAtLWdpdCBhL2F1dG8vb3MvZmVhdHVyZXMgYi9hdXRvL29zL2ZlYXR1cmVzCmluZGV4IDcwMjgxNTEuLmU4YWUwMzMgMTAwNjQ0Ci0tLSBhL2F1dG8vb3MvZmVhdHVyZXMKKysrIGIvYXV0by9vcy9mZWF0dXJlcwpAQCAtMTIwLDggKzEyMCw4IEBACiAKICAgICAgICAgaWYgWyAiJE5HWF9TWVNURU0iID0gIkRhcndpbiIgXTsgdGhlbgogCi0gICAgICAgICAgICBuZ3hfZmVhdHVyZT0iTWFjT1NYIDY0LWJpdCBrcXVldWUgbWlsbGlzZWNvbmQgdGltZW91dCBidWciCi0gICAgICAgICAgICBuZ3hfZmVhdHVyZV9uYW1lPQorICAgICAgICAgICAgbmd4X2ZlYXR1cmU9IkRhcndpbiA2NC1iaXQga3F1ZXVlIG1pbGxpc2Vjb25kIHRpbWVvdXQgYnVnIgorICAgICAgICAgICAgbmd4X2ZlYXR1cmVfbmFtZT1OR1hfREFSV0lOX0tFVkVOVF9CVUcKICAgICAgICAgICAgIG5neF9mZWF0dXJlX3J1bj1idWcKICAgICAgICAgICAgIG5neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzeXMvZXZlbnQuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPiIKQEAgLTE0NCwzMCArMTQ0LDExIEBACiAgICAgICAgICAgICAgICAgICBpZiAodHYudHZfc2VjICogMTAwMDAwMCArIHR2LnR2X3VzZWMgPCA5MDAwMDApIHJldHVybiAxOyIKIAogICAgICAgICAgICAgLiBhdXRvL2ZlYXR1cmUKLQotICAgICAgICAgICAgbmd4X21hY29zeF9rZXZlbnRfYnVnPSRuZ3hfZm91bmQKICAgICAgICAgZmkKICAgICBmaQogZmkKIAogCi1pZiBbICIuJG5neF9tYWNvc3hfa2V2ZW50X2J1ZyIgPSAueWVzIF07IHRoZW4KLQotICAgIGNhdCA8PCBFTkQgPj4gJE5HWF9BVVRPX0NPTkZJR19ICi0KLSNkZWZpbmUgTkdYX01BQ09TWF9LRVZFTlRfQlVHX1NISUZUICAgPDwgMzIKLQotRU5ECi0KLWVsc2UKLSAgICBjYXQgPDwgRU5EID4+ICROR1hfQVVUT19DT05GSUdfSAotCi0jZGVmaW5lIE5HWF9NQUNPU1hfS0VWRU5UX0JVR19TSElGVAotCi1FTkQKLWZpCi0KLQogaWYgWyAiJE5HWF9TWVNURU0iID0gIk5ldEJTRCIgXTsgdGhlbgogCiAgICAgIyBOZXRCU0QgMi4wIGluY29tcGF0aWJseSBkZWZpbmVzIGtldmVudC51ZGF0YSBhcyAiaW50cHRyX3QiCmRpZmYgLS1naXQgYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbCBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCmluZGV4IDE2OGRjNTUuLmNmMjdhZjIgMTAwNjQ0Ci0tLSBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCisrKyBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCkBAIC05LDYgKzksNDEgQEAKIDx0aXRsZSBsYW5nPSJlbiI+bmdpbnggY2hhbmdlbG9nPC90aXRsZT4KIAogCis8Y2hhbmdlcyB2ZXI9IjAuMy4zMyIgZGF0ZT0iMTUuMDMuMjAwNiI+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivQwdLBzcXU0iBodHRwXzUwMyDXIMTJ0sXL1MnXwcggcHJveHlfbmV4dF91cHN0cmVhbSDJzMkgZmFzdGNnaV9uZXh0X3Vwc3RyZWFtLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJodHRwXzUwMyIgcGFyYW1ldGVyIG9mIHRoZSAicHJveHlfbmV4dF91cHN0cmVhbSIgb3IKKyJmYXN0Y2dpX25leHRfdXBzdHJlYW0iIGRpcmVjdGl2ZXMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorbmd4X2h0dHBfcGVybF9tb2R1bGUgzsUg0sHCz9TBzCDTzyDX09TSz8XOztnNINcgy8/OxsnH1dLBw8nOztnKIMbByswgy8/Ez80sCivF08zJIM/OIM7FIM7B3snOwczT0SDT0sHa1SDWxSDTICJzdWIiLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorbmd4X2h0dHBfcGVybF9tb2R1bGUgZGlkIG5vdCB3b3JrIHdpdGggaW5saW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbiBjb2RlLAoraWYgaXQgd2FzIG5vdCBzdGFydGVkIHdpdGggdGhlICJzdWIiIHdvcmQuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor1yDEydLFy9TJ18UgcG9zdF9hY3Rpb24uCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpbiB0aGUgInBvc3RfYWN0aW9uIiBkaXJlY3RpdmUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4zLjMyIiBkYXRlPSIxMS4wMy4yMDA2Ij4KIAogPGNoYW5nZSB0eXBlPSJidWdmaXgiPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggODY5NTlhZC4uYzU4NDI1OCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjMyIgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy4zMyIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfT0xEUElEX0VYVCAgICAgIi5vbGRiaW4iCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmggYi9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmgKaW5kZXggNjJmMzY1NS4uYTE4M2E1NyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5oCisrKyBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuaApAQCAtMjgyLDcgKzI4Miw3IEBACiAKICNkZWZpbmUgbmd4X2NvbmZfbWVyZ2Vfc3RyX3ZhbHVlKGNvbmYsIHByZXYsIGRlZmF1bHQpICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmIChjb25mLmRhdGEgPT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChwcmV2LmRhdGEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChwcmV2LmRhdGEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGNvbmYubGVuID0gcHJldi5sZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgY29uZi5kYXRhID0gcHJldi5kYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9rcXVldWVfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfa3F1ZXVlX21vZHVsZS5jCmluZGV4IGYzY2E3MzcuLmFmOTE2NzUgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9rcXVldWVfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2txdWV1ZV9tb2R1bGUuYwpAQCAtNDkxLDE2ICs0OTEsMTkgQEAKIAogICAgIH0gZWxzZSB7CiAKKyAgICAgICAgdHMudHZfc2VjID0gdGltZXIgLyAxMDAwOworICAgICAgICB0cy50dl9uc2VjID0gKHRpbWVyICUgMTAwMCkgKiAxMDAwMDAwOworCiAgICAgICAgIC8qCi0gICAgICAgICAqIDY0LWJpdCBNYWNPU1gga2VybmVsIGhhcyB0aGUgYnVnOiBrZXJuZWwgbGV2ZWwgdHMudHZfbnNlYyBpcworICAgICAgICAgKiA2NC1iaXQgRGFyd2luIGtlcm5lbCBoYXMgdGhlIGJ1Zzoga2VybmVsIGxldmVsIHRzLnR2X25zZWMgaXMKICAgICAgICAgICogdGhlIGludDMyX3Qgd2hpbGUgdXNlciBsZXZlbCB0cy50dl9uc2VjIGlzIHRoZSBsb25nICg2NC1iaXQpLAogICAgICAgICAgKiBzbyBvbiB0aGUgYmlnIGVuZGlhbiBQb3dlclBDIGFsbCBuYW5vc2Vjb25kcyBhcmUgbG9zdC4KLSAgICAgICAgICogTkdYX01BQ09TWF9LRVZFTlRfQlVHX1NISUZUIG9uIHRoZXNlIG1hY2hpbmVzIGlzICI8PCAzMiIuCiAgICAgICAgICAqLwogCi0gICAgICAgIHRzLnR2X3NlYyA9IHRpbWVyIC8gMTAwMDsKLSAgICAgICAgdHMudHZfbnNlYyA9IChsb25nKSAoKHRpbWVyICUgMTAwMCkgKiAxMDAwMDAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9NQUNPU1hfS0VWRU5UX0JVR19TSElGVDsKKyNpZiAoTkdYX0RBUldJTl9LRVZFTlRfQlVHKQorICAgICAgICB0cy50dl9uc2VjIDw8PSAzMjsKKyNlbmRpZgorCiAgICAgICAgIHRwID0gJnRzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCmluZGV4IDcxNWIwNzAuLjY2ZTIyMWYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKQEAgLTE2MSw2ICsxNjEsNyBAQAogICAgIHsgbmd4X3N0cmluZygidGltZW91dCIpLCBOR1hfSFRUUF9VUFNUUkVBTV9GVF9USU1FT1VUIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJpbnZhbGlkX2hlYWRlciIpLCBOR1hfSFRUUF9VUFNUUkVBTV9GVF9JTlZBTElEX0hFQURFUiB9LAogICAgIHsgbmd4X3N0cmluZygiaHR0cF81MDAiKSwgTkdYX0hUVFBfVVBTVFJFQU1fRlRfSFRUUF81MDAgfSwKKyAgICB7IG5neF9zdHJpbmcoImh0dHBfNTAzIiksIE5HWF9IVFRQX1VQU1RSRUFNX0ZUX0hUVFBfNTAzIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJodHRwXzQwNCIpLCBOR1hfSFRUUF9VUFNUUkVBTV9GVF9IVFRQXzQwNCB9LAogICAgIHsgbmd4X251bGxfc3RyaW5nLCAwIH0KIH07CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYwppbmRleCAzNGU2ZGQxLi5lOGQzMTA3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKQEAgLTEyMSw2ICsxMjEsNyBAQAogICAgIHsgbmd4X3N0cmluZygidGltZW91dCIpLCBOR1hfSFRUUF9VUFNUUkVBTV9GVF9USU1FT1VUIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJpbnZhbGlkX2hlYWRlciIpLCBOR1hfSFRUUF9VUFNUUkVBTV9GVF9JTlZBTElEX0hFQURFUiB9LAogICAgIHsgbmd4X3N0cmluZygiaHR0cF81MDAiKSwgTkdYX0hUVFBfVVBTVFJFQU1fRlRfSFRUUF81MDAgfSwKKyAgICB7IG5neF9zdHJpbmcoImh0dHBfNTAzIiksIE5HWF9IVFRQX1VQU1RSRUFNX0ZUX0hUVFBfNTAzIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJodHRwXzQwNCIpLCBOR1hfSFRUUF9VUFNUUkVBTV9GVF9IVFRQXzQwNCB9LAogICAgIHsgbmd4X251bGxfc3RyaW5nLCAwIH0KIH07CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL3Blcmwvbmd4X2h0dHBfcGVybF9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ3hfaHR0cF9wZXJsX21vZHVsZS5jCmluZGV4IDBhOTgyZTYuLjBiY2FkNWMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ3hfaHR0cF9wZXJsX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ3hfaHR0cF9wZXJsX21vZHVsZS5jCkBAIC02OTIsMTAgKzY5MiwxOCBAQAogc3RhdGljIHZvaWQKIG5neF9odHRwX3BlcmxfZXZhbF9hbm9uX3N1YihwVEhYXyBuZ3hfc3RyX3QgKmhhbmRsZXIsIFNWICoqc3YpCiB7Ci0gICAgaWYgKG5neF9zdHJuY21wKGhhbmRsZXItPmRhdGEsICJzdWIgIiwgNCkgPT0gMAotICAgICAgICB8fCBuZ3hfc3RybmNtcChoYW5kbGVyLT5kYXRhLCAidXNlICIsIDQpID09IDApCisgICAgdV9jaGFyICAqcDsKKworICAgIGZvciAocCA9IGhhbmRsZXItPmRhdGE7ICpwOyBwKyspIHsKKyAgICAgICAgaWYgKCpwICE9ICcgJyAmJiAqcCAhPSAnXHQnICYmICpwICE9IENSICYmICpwICE9IExGKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChuZ3hfc3RybmNtcChwLCAic3ViICIsIDQpID09IDAKKyAgICAgICAgfHwgbmd4X3N0cm5jbXAocCwgInVzZSAiLCA0KSA9PSAwKQogICAgIHsKLSAgICAgICAgKnN2ID0gZXZhbF9wdigoY2hhciAqKSBoYW5kbGVyLT5kYXRhLCBGQUxTRSk7CisgICAgICAgICpzdiA9IGV2YWxfcHYoKGNoYXIgKikgcCwgRkFMU0UpOwogCiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwppbmRleCAyNmExZDY5Li44ZTlkMGIzIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKQEAgLTEwMDMsMTIgKzEwMDMsOSBAQAogbmd4X2h0dHBfbWFwX3VyaV90b19wYXRoKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X3N0cl90ICpwYXRoLAogICAgIHNpemVfdCByZXNlcnZlZCkKIHsKLSAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICpsYXN0OwotICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzLCBsZW47Ci0gICAgbmd4X2h0dHBfc2NyaXB0X2NvZGVfcHQgICAgICAgY29kZTsKLSAgICBuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgICAgICBlOwotICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgICAgKmNsY2Y7Ci0gICAgbmd4X2h0dHBfc2NyaXB0X2xlbl9jb2RlX3B0ICAgbGNvZGU7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAqbGFzdDsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICBhbGlhczsKKyAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICpjbGNmOwogCiAgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwogCkBAIC0xMDIxLDExICsxMDE4LDEzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIHJlc2VydmVkICs9IHItPnVyaS5sZW4gLSBhbGlhcyArIDE7CisKICAgICBpZiAoY2xjZi0+cm9vdF9sZW5ndGhzID09IE5VTEwpIHsKIAogICAgICAgICByLT5yb290X2xlbmd0aCA9IGNsY2YtPnJvb3QubGVuOwogCi0gICAgICAgIHBhdGgtPmxlbiA9IGNsY2YtPnJvb3QubGVuICsgci0+dXJpLmxlbiAtIGFsaWFzICsgMSArIHJlc2VydmVkOworICAgICAgICBwYXRoLT5sZW4gPSBjbGNmLT5yb290LmxlbiArIHJlc2VydmVkOwogCiAgICAgICAgIHBhdGgtPmRhdGEgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHBhdGgtPmxlbik7CiAgICAgICAgIGlmIChwYXRoLT5kYXRhID09IE5VTEwpIHsKQEAgLTEwMzMsNDMgKzEwMzIsMTggQEAKICAgICAgICAgfQogCiAgICAgICAgIGxhc3QgPSBuZ3hfY29weShwYXRoLT5kYXRhLCBjbGNmLT5yb290LmRhdGEsIGNsY2YtPnJvb3QubGVuKTsKLSAgICAgICAgbGFzdCA9IG5neF9jcHlzdHJuKGxhc3QsIHItPnVyaS5kYXRhICsgYWxpYXMsIHItPnVyaS5sZW4gLSBhbGlhcyArIDEpOwogCi0gICAgICAgIHJldHVybiBsYXN0OworICAgIH0gZWxzZSB7CisgICAgICAgIGxhc3QgPSBuZ3hfaHR0cF9zY3JpcHRfcnVuKHIsIHBhdGgsIGNsY2YtPnJvb3RfbGVuZ3Rocy0+ZWx0cywgcmVzZXJ2ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsY2YtPnJvb3RfdmFsdWVzLT5lbHRzKTsKKyAgICAgICAgaWYgKGxhc3QgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICByLT5yb290X2xlbmd0aCA9IHBhdGgtPmxlbiAtIHJlc2VydmVkOwogICAgIH0KIAotICAgIG5neF9tZW16ZXJvKCZlLCBzaXplb2Yobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90KSk7Ci0KLSAgICBlLmlwID0gY2xjZi0+cm9vdF9sZW5ndGhzLT5lbHRzOwotICAgIGUucmVxdWVzdCA9IHI7Ci0gICAgZS5mbHVzaGVkID0gMTsKLQotICAgIGxlbiA9IDA7Ci0KLSAgICB3aGlsZSAoKih1aW50cHRyX3QgKikgZS5pcCkgewotICAgICAgICBsY29kZSA9ICoobmd4X2h0dHBfc2NyaXB0X2xlbl9jb2RlX3B0ICopIGUuaXA7Ci0gICAgICAgIGxlbiArPSBsY29kZSgmZSk7Ci0gICAgfQotCi0gICAgci0+cm9vdF9sZW5ndGggPSBsZW47Ci0KLSAgICBsZW4gKz0gci0+dXJpLmxlbiAtIGFsaWFzICsgMSArIHJlc2VydmVkOwotCi0gICAgcGF0aC0+bGVuID0gbGVuOwotICAgIHBhdGgtPmRhdGEgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIGxlbik7Ci0gICAgaWYgKHBhdGgtPmRhdGEgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBlLmlwID0gY2xjZi0+cm9vdF92YWx1ZXMtPmVsdHM7Ci0gICAgZS5wb3MgPSBwYXRoLT5kYXRhOwotCi0gICAgd2hpbGUgKCoodWludHB0cl90ICopIGUuaXApIHsKLSAgICAgICAgY29kZSA9ICoobmd4X2h0dHBfc2NyaXB0X2NvZGVfcHQgKikgZS5pcDsKLSAgICAgICAgY29kZSgobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICopICZlKTsKLSAgICB9Ci0KLSAgICBsYXN0ID0gbmd4X2NweXN0cm4oZS5wb3MsIHItPnVyaS5kYXRhICsgYWxpYXMsIHItPnVyaS5sZW4gLSBhbGlhcyArIDEpOworICAgIGxhc3QgPSBuZ3hfY3B5c3RybihsYXN0LCByLT51cmkuZGF0YSArIGFsaWFzLCByLT51cmkubGVuIC0gYWxpYXMgKyAxKTsKIAogICAgIHJldHVybiBsYXN0OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcGFyc2UuYyBiL3NyYy9odHRwL25neF9odHRwX3BhcnNlLmMKaW5kZXggYmEwOGU1OS4uMmVjNjk3OSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcGFyc2UuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9wYXJzZS5jCkBAIC02ODIsNiArNjgyLDggQEAKICAgICAgICAgLyogZW5kIG9mIGhlYWRlciBsaW5lICovCiAgICAgICAgIGNhc2Ugc3dfYWxtb3N0X2RvbmU6CiAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgICAgICBjYXNlIENSOgorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBMRjoKICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCmluZGV4IDM0OGM4NGIuLjg3MGRkOGIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKQEAgLTIyNDksNiArMjI0OSw5IEBACiAgICAgICAgIHJldHVybiBOR1hfREVDTElORUQ7CiAgICAgfQogCisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgInBvc3QgYWN0aW9uOiBcIiVWXCIiLCAmY2xjZi0+cG9zdF9hY3Rpb24pOworCiAgICAgci0+aHR0cF92ZXJzaW9uID0gTkdYX0hUVFBfVkVSU0lPTl85OwogICAgIHItPmhlYWRlcl9vbmx5ID0gMTsKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYwppbmRleCBiNDZjOWJiLi5kYzdiODk1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYwpAQCAtMjk0LDYgKzI5NCw0NCBAQAogfQogCiAKK3VfY2hhciAqCituZ3hfaHR0cF9zY3JpcHRfcnVuKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X3N0cl90ICp2YWx1ZSwKKyAgICB2b2lkICpjb2RlX2xlbmd0aHMsIHNpemVfdCBsZW4sIHZvaWQgKmNvZGVfdmFsdWVzKQoreworICAgIG5neF9odHRwX3NjcmlwdF9jb2RlX3B0ICAgICAgY29kZTsKKyAgICBuZ3hfaHR0cF9zY3JpcHRfbGVuX2NvZGVfcHQgIGxjb2RlOworICAgIG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCAgICAgZTsKKworICAgIG5neF9tZW16ZXJvKCZlLCBzaXplb2Yobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90KSk7CisKKyAgICBlLmlwID0gY29kZV9sZW5ndGhzOworICAgIGUucmVxdWVzdCA9IHI7CisgICAgZS5mbHVzaGVkID0gMTsKKworICAgIHdoaWxlICgqKHVpbnRwdHJfdCAqKSBlLmlwKSB7CisgICAgICAgIGxjb2RlID0gKihuZ3hfaHR0cF9zY3JpcHRfbGVuX2NvZGVfcHQgKikgZS5pcDsKKyAgICAgICAgbGVuICs9IGxjb2RlKCZlKTsKKyAgICB9CisKKworICAgIHZhbHVlLT5sZW4gPSBsZW47CisgICAgdmFsdWUtPmRhdGEgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIGxlbik7CisgICAgaWYgKHZhbHVlLT5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZS5pcCA9IGNvZGVfdmFsdWVzOworICAgIGUucG9zID0gdmFsdWUtPmRhdGE7CisKKyAgICB3aGlsZSAoKih1aW50cHRyX3QgKikgZS5pcCkgeworICAgICAgICBjb2RlID0gKihuZ3hfaHR0cF9zY3JpcHRfY29kZV9wdCAqKSBlLmlwOworICAgICAgICBjb2RlKChuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKikgJmUpOworICAgIH0KKworICAgIHJldHVybiBlLnBvczsKK30KKworCiB2b2lkCiBuZ3hfaHR0cF9zY3JpcHRfZmx1c2hfbm9fY2FjaGFibGVfdmFyaWFibGVzKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfYXJyYXlfdCAqaW5kaWNlcykKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKaW5kZXggNDZlNDQ4YS4uNWM1M2FlYyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKQEAgLTE1Miw2ICsxNTIsOCBAQAogCiBuZ3hfdWludF90IG5neF9odHRwX3NjcmlwdF92YXJpYWJsZXNfY291bnQobmd4X3N0cl90ICp2YWx1ZSk7CiBuZ3hfaW50X3Qgbmd4X2h0dHBfc2NyaXB0X2NvbXBpbGUobmd4X2h0dHBfc2NyaXB0X2NvbXBpbGVfdCAqc2MpOwordV9jaGFyICpuZ3hfaHR0cF9zY3JpcHRfcnVuKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X3N0cl90ICp2YWx1ZSwKKyAgICB2b2lkICpjb2RlX2xlbmd0aHMsIHNpemVfdCByZXNlcnZlZCwgdm9pZCAqY29kZV92YWx1ZXMpOwogdm9pZCBuZ3hfaHR0cF9zY3JpcHRfZmx1c2hfbm9fY2FjaGFibGVfdmFyaWFibGVzKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfYXJyYXlfdCAqaW5kaWNlcyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCmluZGV4IDc4NjA4MTguLjlmZDFhMWUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwpAQCAtMTk0Nyw3ICsxOTQ3LDExIEBACiAKICAgICByLT5jb25uZWN0aW9uLT5sb2ctPmFjdGlvbiA9ICJzZW5kaW5nIHRvIGNsaWVudCI7CiAKLSAgICBpZiAocmMgPT0gMCAmJiByID09IHItPm1haW4pIHsKKyAgICBpZiAocmMgPT0gMAorICAgICAgICAmJiByID09IHItPm1haW4KKyAgICAgICAgICAgICAvKiBub3QgYSBwb3N0X2FjdGlvbiAqLworICAgICAgICAmJiAhKHItPmh0dHBfdmVyc2lvbiA9PSBOR1hfSFRUUF9WRVJTSU9OXzkgJiYgci0+aGVhZGVyX29ubHkpKQorICAgIHsKICAgICAgICAgcmMgPSBuZ3hfaHR0cF9zZW5kX3NwZWNpYWwociwgTkdYX0hUVFBfTEFTVCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uaAppbmRleCBhMTc4MDI5Li4xMTdkZWYxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmgKQEAgLTE2LDEzICsxNiwxNCBAQAogI2luY2x1ZGUgPG5neF9odHRwLmg+CiAKIAotI2RlZmluZSBOR1hfSFRUUF9VUFNUUkVBTV9GVF9FUlJPUiAgICAgICAgICAgMHgwMgotI2RlZmluZSBOR1hfSFRUUF9VUFNUUkVBTV9GVF9USU1FT1VUICAgICAgICAgMHgwNAotI2RlZmluZSBOR1hfSFRUUF9VUFNUUkVBTV9GVF9JTlZBTElEX0hFQURFUiAgMHgwOAotI2RlZmluZSBOR1hfSFRUUF9VUFNUUkVBTV9GVF9IVFRQXzUwMCAgICAgICAgMHgxMAotI2RlZmluZSBOR1hfSFRUUF9VUFNUUkVBTV9GVF9IVFRQXzQwNCAgICAgICAgMHgyMAotI2RlZmluZSBOR1hfSFRUUF9VUFNUUkVBTV9GVF9CVVNZX0xPQ0sgICAgICAgMHg0MAotI2RlZmluZSBOR1hfSFRUUF9VUFNUUkVBTV9GVF9NQVhfV0FJVElORyAgICAgMHg4MAorI2RlZmluZSBOR1hfSFRUUF9VUFNUUkVBTV9GVF9FUlJPUiAgICAgICAgICAgMHgwMDIKKyNkZWZpbmUgTkdYX0hUVFBfVVBTVFJFQU1fRlRfVElNRU9VVCAgICAgICAgIDB4MDA0CisjZGVmaW5lIE5HWF9IVFRQX1VQU1RSRUFNX0ZUX0lOVkFMSURfSEVBREVSICAweDAwOAorI2RlZmluZSBOR1hfSFRUUF9VUFNUUkVBTV9GVF9IVFRQXzUwMCAgICAgICAgMHgwMTAKKyNkZWZpbmUgTkdYX0hUVFBfVVBTVFJFQU1fRlRfSFRUUF81MDMgICAgICAgIDB4MDIwCisjZGVmaW5lIE5HWF9IVFRQX1VQU1RSRUFNX0ZUX0hUVFBfNDA0ICAgICAgICAweDA0MAorI2RlZmluZSBOR1hfSFRUUF9VUFNUUkVBTV9GVF9CVVNZX0xPQ0sgICAgICAgMHgwODAKKyNkZWZpbmUgTkdYX0hUVFBfVVBTVFJFQU1fRlRfTUFYX1dBSVRJTkcgICAgIDB4MTAwCiAKIAogI2RlZmluZSBOR1hfSFRUUF9VUFNUUkVBTV9JTlZBTElEX0hFQURFUiAgICAgNDAK