ZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggMGRiZDY1Mi4uOWJhOGZmYSAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSwzNSBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4xLjQyIiBkYXRlPSIyMy4wOC4yMDA1Ij4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorxdPMySBVUkkg2sHQ0s/TwSDQz8zV3sHM09EgztXMxdfPyiDEzMnO2SDQz9PMxSDPwtLBws/Uy8kgzc/E1czFzQorbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUsINTPINcgzc/E1czFIG5neF9odHRwX3Byb3h5X21vZHVsZSDQ0s/J08jPxMnMCitzZWdtZW50YXRpb24gZmF1bHQgyczJIGJ1cyBlcnJvci4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK2lmIHRoZSByZXF1ZXN0IFVSSSBoYWQgYSB6ZXJvIGxlbmd0aCBhZnRlciB0aGUgcHJvY2Vzc2luZyBpbgordGhlIG5neF9odHRwX3Byb3h5X21vZHVsZSwgdGhlbiB0aGUgc2VnbWVudGF0aW9uIGZhdWx0IG9yIGJ1cyBlcnJvciBvY2N1cnJlZAoraW4gdGhlIG5neF9odHRwX3Byb3h5X21vZHVsZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivEydLFy9TJ18EgbGltaXRfcmF0ZSDOxSDSwcLP1MHMwSDXztXU0skgwszPy8EgaWY7CivP28nCy8Eg0M/R18nMwdPYINcgMC4xLjM4LgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJsaW1pdF9yYXRlIiBkaXJlY3RpdmUgZGlkIG5vdCB3b3JrIGluc2lkZSB0aGUgImlmIiBibG9jazsKK2J1ZyBhcHBlYXJlZCBpbiAwLjEuMzguCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4xLjQxIiBkYXRlPSIyNS4wNy4yMDA1Ij4KIAogPGNoYW5nZSB0eXBlPSJidWdmaXgiPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggMjgxMDM2Zi4uOGYwYTM2NSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4xLjQxIgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMS40MiIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfTkVXUElEX0VYVCAgICAgIi5uZXdiaW4iCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmMKaW5kZXggNTNiYmM1Zi4uNGQ2YzY0NyAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfdGltZXIuYwpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIChub2RlLT5rZXkgKiBOR1hfVElNRVJfUkVTT0xVVElPTiAtIG5neF9lbGFwc2VkX21zZWMpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gdGltZXIgPiAwID8gdGltZXI6IDAgOworICAgIHJldHVybiB0aW1lciA+IDAgPyB0aW1lciA6IDAgOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwLmggYi9zcmMvaHR0cC9uZ3hfaHR0cC5oCmluZGV4IDJhNjI4OTYuLjViZTM5MzYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHAuaApAQCAtNjcsNiArNjcsNyBAQAogICAgIG5neF9zdHJfdCAqbmFtZSwgbmd4X3N0cl90ICp2YWx1ZSk7CiAKIG5neF9pbnRfdCBuZ3hfaHR0cF9maW5kX3NlcnZlcl9jb25mKG5neF9odHRwX3JlcXVlc3RfdCAqcik7Cit2b2lkIG5neF9odHRwX3VwZGF0ZV9sb2NhdGlvbl9jb25maWcobmd4X2h0dHBfcmVxdWVzdF90ICpyKTsKIHZvaWQgbmd4X2h0dHBfaGFuZGxlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwogdm9pZCBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2ludF90IHJjKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKaW5kZXggY2I3YzllOC4uODUyYTliYiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCkBAIC01ODYsMjcgKzU4Niw3IEBACiAgICAgICAgIHJldHVybiBOR1hfSFRUUF9OT1RfRk9VTkQ7CiAgICAgfQogCi0gICAgci0+Y29ubmVjdGlvbi0+bG9nLT5maWxlID0gY2xjZi0+ZXJyX2xvZy0+ZmlsZTsKLSAgICBpZiAoIShyLT5jb25uZWN0aW9uLT5sb2ctPmxvZ19sZXZlbCAmIE5HWF9MT0dfREVCVUdfQ09OTkVDVElPTikpIHsKLSAgICAgICAgci0+Y29ubmVjdGlvbi0+bG9nLT5sb2dfbGV2ZWwgPSBjbGNmLT5lcnJfbG9nLT5sb2dfbGV2ZWw7Ci0gICAgfQotCi0gICAgaWYgKChuZ3hfaW8uZmxhZ3MgJiBOR1hfSU9fU0VOREZJTEUpICYmIGNsY2YtPnNlbmRmaWxlKSB7Ci0gICAgICAgIHItPmNvbm5lY3Rpb24tPnNlbmRmaWxlID0gMTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHItPmNvbm5lY3Rpb24tPnNlbmRmaWxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoci0+a2VlcGFsaXZlICYmIGNsY2YtPmtlZXBhbGl2ZV90aW1lb3V0ID09IDApIHsKLSAgICAgICAgci0+a2VlcGFsaXZlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIWNsY2YtPnRjcF9ub3B1c2gpIHsKLSAgICAgICAgLyogZGlzYWJsZSBUQ1BfTk9QVVNIL1RDUF9DT1JLIHVzZSAqLwotICAgICAgICByLT5jb25uZWN0aW9uLT50Y3Bfbm9wdXNoID0gTkdYX1RDUF9OT1BVU0hfRElTQUJMRUQ7Ci0gICAgfQotCisgICAgbmd4X2h0dHBfdXBkYXRlX2xvY2F0aW9uX2NvbmZpZyhyKTsKIAogICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJodHRwIGNsOiV6IG1heDoldXoiLApAQCAtNjQwLDEzICs2MjAsNDMgQEAKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX01PVkVEX1BFUk1BTkVOVExZOwogICAgIH0KIAorICAgIHJldHVybiBOR1hfT0s7Cit9CisKKwordm9pZAorbmd4X2h0dHBfdXBkYXRlX2xvY2F0aW9uX2NvbmZpZyhuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCit7CisgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAqY2xjZjsKKworICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKKworICAgIHItPmNvbm5lY3Rpb24tPmxvZy0+ZmlsZSA9IGNsY2YtPmVycl9sb2ctPmZpbGU7CisgICAgaWYgKCEoci0+Y29ubmVjdGlvbi0+bG9nLT5sb2dfbGV2ZWwgJiBOR1hfTE9HX0RFQlVHX0NPTk5FQ1RJT04pKSB7CisgICAgICAgIHItPmNvbm5lY3Rpb24tPmxvZy0+bG9nX2xldmVsID0gY2xjZi0+ZXJyX2xvZy0+bG9nX2xldmVsOworICAgIH0KKworICAgIGlmICgobmd4X2lvLmZsYWdzICYgTkdYX0lPX1NFTkRGSUxFKSAmJiBjbGNmLT5zZW5kZmlsZSkgeworICAgICAgICByLT5jb25uZWN0aW9uLT5zZW5kZmlsZSA9IDE7CisKKyAgICB9IGVsc2UgeworICAgICAgICByLT5jb25uZWN0aW9uLT5zZW5kZmlsZSA9IDA7CisgICAgfQorCisgICAgaWYgKHItPmtlZXBhbGl2ZSAmJiBjbGNmLT5rZWVwYWxpdmVfdGltZW91dCA9PSAwKSB7CisgICAgICAgIHItPmtlZXBhbGl2ZSA9IDA7CisgICAgfQorCisgICAgaWYgKCFjbGNmLT50Y3Bfbm9wdXNoKSB7CisgICAgICAgIC8qIGRpc2FibGUgVENQX05PUFVTSC9UQ1BfQ09SSyB1c2UgKi8KKyAgICAgICAgci0+Y29ubmVjdGlvbi0+dGNwX25vcHVzaCA9IE5HWF9UQ1BfTk9QVVNIX0RJU0FCTEVEOworICAgIH0KKwogICAgIHItPmxpbWl0X3JhdGUgPSBjbGNmLT5saW1pdF9yYXRlOwogCiAgICAgaWYgKGNsY2YtPmhhbmRsZXIpIHsKICAgICAgICAgci0+Y29udGVudF9oYW5kbGVyID0gY2xjZi0+aGFuZGxlcjsKICAgICB9Ci0KLSAgICByZXR1cm4gTkdYX09LOwogfQogCiAKQEAgLTEwNzIsNiArMTA4Miw4IEBACiAgICAgY3NjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfc3J2X2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwogICAgIHItPmxvY19jb25mID0gY3NjZi0+Y3R4LT5sb2NfY29uZjsKIAorICAgIG5neF9odHRwX3VwZGF0ZV9sb2NhdGlvbl9jb25maWcocik7CisKICAgICByLT5pbnRlcm5hbCA9IDE7CiAKICAgICBuZ3hfaHR0cF9oYW5kbGVyKHIpOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCmluZGV4IDZjOGJmMmYuLmM2YTU4MDkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKQEAgLTE2OTYsOSArMTY5Niw2IEBACiBuZ3hfaHR0cF9wb3N0cG9uZWRfaGFuZGxlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgIHJjOwotI2lmIDAKLSAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICAgICAgICAgICAqbXI7Ci0jZW5kaWYKICAgICBuZ3hfaHR0cF9wb3N0cG9uZWRfcmVxdWVzdF90ICAqcHI7CiAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaCBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaAppbmRleCBkMWJhNzc0Li4yZTgwOTkxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCkBAIC0yNDEsOSArMjQxLDkgQEAKIHR5cGVkZWYgc3RydWN0IG5neF9odHRwX3Bvc3Rwb25lZF9yZXF1ZXN0X3MgIG5neF9odHRwX3Bvc3Rwb25lZF9yZXF1ZXN0X3Q7CiAKIHN0cnVjdCBuZ3hfaHR0cF9wb3N0cG9uZWRfcmVxdWVzdF9zIHsKLSAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICAgICAgICAgICAqcmVxdWVzdDsKLSAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgICAgICAqb3V0OwotICAgIG5neF9odHRwX3Bvc3Rwb25lZF9yZXF1ZXN0X3QgICpuZXh0OworICAgIG5neF9odHRwX3JlcXVlc3RfdCAgICAgICAgICAgICAgICpyZXF1ZXN0OworICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgICAgICAgICpvdXQ7CisgICAgbmd4X2h0dHBfcG9zdHBvbmVkX3JlcXVlc3RfdCAgICAgKm5leHQ7CiB9OwogCiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMKaW5kZXggNzE2YTZmMC4uMjdjOWNlMCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMKQEAgLTY4Nyw2ICs2ODcsMTQgQEAKICAgICBpZiAoY29kZS0+dXJpKSB7CiAgICAgICAgIHItPnVyaSA9IGUtPmJ1ZjsKIAorICAgICAgICBpZiAoci0+dXJpLmxlbiA9PSAwKSB7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgcmV3cml0dGVuIFVSSSBoYXMgYSB6ZXJvIGxlbmd0aCIpOworICAgICAgICAgICAgZS0+aXAgPSBuZ3hfaHR0cF9zY3JpcHRfZXhpdDsKKyAgICAgICAgICAgIGUtPnN0YXR1cyA9IE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChuZ3hfaHR0cF9zZXRfZXh0ZW4ocikgIT0gTkdYX09LKSB7CiAgICAgICAgICAgICBlLT5pcCA9IG5neF9odHRwX3NjcmlwdF9leGl0OwogICAgICAgICAgICAgZS0+c3RhdHVzID0gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwpAQCAtNzM3LDYgKzc0NSw3IEBACiAgICAgaWYgKGUtPnNwLT52YWx1ZSkgewogICAgICAgICBpZiAoY29kZS0+bG9jX2NvbmYpIHsKICAgICAgICAgICAgIGUtPnJlcXVlc3QtPmxvY19jb25mID0gY29kZS0+bG9jX2NvbmY7CisgICAgICAgICAgICBuZ3hfaHR0cF91cGRhdGVfbG9jYXRpb25fY29uZmlnKGUtPnJlcXVlc3QpOwogICAgICAgICB9CiAKICAgICAgICAgZS0+aXAgKz0gc2l6ZW9mKG5neF9odHRwX3NjcmlwdF9pZl9jb2RlX3QpOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jCmluZGV4IDE0ZDRjODAuLmJhM2JmY2IgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogIjxodG1sPiIgQ1JMRgogIjxoZWFkPjx0aXRsZT41MDEgTWV0aG9kIE5vdCBJbXBsZW1lbnRlZDwvdGl0bGU+PC9oZWFkPiIgQ1JMRgogIjxib2R5IGJnY29sb3I9XCJ3aGl0ZVwiPiIgQ1JMRgotIjxjZW50ZXI+PGgxPjUwMCBNZXRob2QgTm90IEltcGxlbWVudGVkPC9oMT48L2NlbnRlcj4iIENSTEYKKyI8Y2VudGVyPjxoMT41MDEgTWV0aG9kIE5vdCBJbXBsZW1lbnRlZDwvaDE+PC9jZW50ZXI+IiBDUkxGCiA7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMKaW5kZXggOWQwNTY5NC4uMGM4ZmRkMiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jCkBAIC05MTYsNyArOTE2LDcgQEAKICNlbmRpZgogCiAgICAgaWYgKG5neF9hZGRfY2hhbm5lbF9ldmVudChjeWNsZSwgbmd4X2NoYW5uZWwsIE5HWF9SRUFEX0VWRU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2NoYW5uZWxfaGFuZGxlcikgPT0gTkdYX0VSUk9SKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2NoYW5uZWxfaGFuZGxlcikgPT0gTkdYX0VSUk9SKQogICAgIHsKICAgICAgICAgLyogZmF0YWwgKi8KICAgICAgICAgZXhpdCgyKTsK