pec
Fabrizio Gennari <[email protected]> Sat, 18 Dec 2021 12:13:09 +0100
| Newsgroups | gmane.linux.drivers.gnokii |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --------------Yqr0mpG3jWAt1LeK400iiCgv Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit --------------Yqr0mpG3jWAt1LeK400iiCgv Content-Type: text/x-patch; charset=UTF-8; name="sdlunif.patch" Content-Disposition: attachment; filename="sdlunif.patch" Content-Transfer-Encoding: base64 SW5kZXg6IGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC9qb3kuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvam95LmMJKHJldmlzaW9uZSA0MTAx MCkKKysrIGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC9qb3kuYwkoY29waWEgZGkgbGF2 b3JvKQpAQCAtNDgsOCArNDgsNiBAQAogI2luY2x1ZGUgImxvZy5oIgogI2luY2x1ZGUgIm1v dXNlLmgiCiAjaW5jbHVkZSAicmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAic3lzZmlsZS5oIgot I2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJ1aWhvdGtleS5oIgogI2luY2x1ZGUgInVp bWVudS5oIgogI2luY2x1ZGUgInZrYmQuaCIKQEAgLTY0LDkgKzYyLDYgQEAKIHN0YXRpYyB1 aV9tZW51X2FjdGlvbl90IGF1dG9yZXBlYXQ7CiBzdGF0aWMgaW50IGF1dG9yZXBlYXRfZGVs YXk7CiAKLS8qIEpveXN0aWNrIG1hcHBpbmcgZmlsZW5hbWUgKi8KLXN0YXRpYyBjaGFyICpq b3ltYXBfZmlsZSA9IE5VTEw7Ci0KIC8qIFRvdGFsIG51bWJlciBvZiBqb3lzdGlja3MgKi8K IHN0YXRpYyBpbnQgbnVtX2pveXN0aWNrczsKIApAQCAtNzYsODYgKzcxLDcgQEAKIC8qIEpv eXN0aWNrIGZ1enogKDAuLjMyNzY3KSAqLwogc3RhdGljIGludCBqb3lzdGlja19mdXp6Owog Ci0vKiBEaWZmZXJlbnQgdHlwZXMgb2Ygam95c3RpY2sgaW5wdXQgKi8KLXR5cGVkZWYgZW51 bSB7Ci0gICAgQVhJUyA9IDAsCi0gICAgQlVUVE9OID0gMSwKLSAgICBIQVQgPSAyLAotICAg IEJBTEwgPSAzLAotICAgIE5VTV9JTlBVVF9UWVBFUwotfSBzZGxqb3lzdGlja19pbnB1dF90 OwogCi0vKiBOdW1iZXIgb2YgYWN0aW9ucyBwZXIgaW5wdXQgc291cmNlICovCi1zdGF0aWMg Y29uc3QgaW50IGlucHV0X211bHRbTlVNX0lOUFVUX1RZUEVTXSA9IHsKLSAgICAyLCAvKiBB eGlzOiBhY3Rpb25zIGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgKi8KLSAgICAxLCAvKiBC dXR0b24gKi8KLSAgICA0LCAvKiBIYXQ6IGFjdGlvbnMgZm9yIGFsbCA0IGRpcmVjdGlvbnMg Ki8KLSAgICAxICAvKiBCYWxsICovCi19OwotCi0vKiBBY3Rpb25zIHRvIHBlcmZvcm0gb24g am95c3RpY2sgaW5wdXQgKi8KLXR5cGVkZWYgZW51bSB7Ci0gICAgTk9ORSA9IDAsCi0KLSAg ICAvKiBKb3lzdGljayBtb3ZlbWVudCBvciBidXR0b24gcHJlc3MgKi8KLSAgICBKT1lTVElD SyA9IDEsCi0KLSAgICAvKiBLZXlib2FyZCBrZXkgcHJlc3MgKi8KLSAgICBLRVlCT0FSRCA9 IDIsCi0KLSAgICAvKiBNYXAgYnV0dG9uICovCi0gICAgTUFQID0gMywKLQotICAgIC8qIChE ZSlBY3RpdmF0ZSBVSSAqLwotICAgIFVJX0FDVElWQVRFID0gNCwKLQotICAgIC8qIENhbGwg VUkgZnVuY3Rpb24gKi8KLSAgICBVSV9GVU5DVElPTiA9IDUsCi0KLSAgICAvKiBKb3lzdGlj ayBheGlzIHVzZWQgZm9yIHBvdGVudGlvbWV0ZXJzICovCi0gICAgUE9UX0FYSVMgPSA2Ci19 IHNkbGpveXN0aWNrX2FjdGlvbl90OwotCi0vKiBJbnB1dCBtYXBwaW5nIGZvciBlYWNoIGRp cmVjdGlvbi9idXR0b24vZXRjICovCi1zdHJ1Y3Qgc2Rsam95c3RpY2tfbWFwcGluZ19zIHsK LSAgICAvKiBBY3Rpb24gdG8gcGVyZm9ybSAqLwotICAgIHNkbGpveXN0aWNrX2FjdGlvbl90 IGFjdGlvbjsKLQotICAgIC8qIFByZXZpb3VzIHN0YXRlIG9mIGlucHV0ICovCi0gICAgdWlu dDhfdCBwcmV2OwotCi0gICAgdW5pb24gewotICAgICAgICAvKiBqb3lbMF0gPSBwb3J0IG51 bWJlciAoMCwxKSwgam95WzFdID0gcGluIG51bWJlciAqLwotICAgICAgICB1aW50MTZfdCBq b3lbMl07Ci0KLSAgICAgICAgLyogYXhpc1swXSA9IHBvcnQgbnVtYmVyICgwLDEpLCBheGlz WzFdID0gcG90IG51bWJlciAoeD0wL3k9MSkgKi8KLSAgICAgICAgdWludDE2X3QgYXhpc1sy XTsKLQotICAgICAgICAvKiBrZXlbMF0gPSByb3csIGtleVsxXSA9IGNvbHVtbiAqLwotICAg ICAgICBpbnQga2V5WzJdOwotCi0gICAgICAgIC8qIHBvaW50ZXIgdG8gdGhlIG1lbnUgaXRl bSAqLwotICAgICAgICB1aV9tZW51X2VudHJ5X3QgKnVpX2Z1bmN0aW9uOwotICAgIH0gdmFs dWU7Ci19OwotdHlwZWRlZiBzdHJ1Y3Qgc2Rsam95c3RpY2tfbWFwcGluZ19zIHNkbGpveXN0 aWNrX21hcHBpbmdfdDsKLQotc3RydWN0IHNkbGpveXN0aWNrX3MgewotICAgIFNETF9Kb3lz dGljayAqam95cHRyOwotICAgIGNoYXIgKm5hbWU7Ci0gICAgaW50IGlucHV0X21heFtOVU1f SU5QVVRfVFlQRVNdOwotICAgIHNkbGpveXN0aWNrX21hcHBpbmdfdCAqaW5wdXRbTlVNX0lO UFVUX1RZUEVTXTsKLX07Ci10eXBlZGVmIHN0cnVjdCBzZGxqb3lzdGlja19zIHNkbGpveXN0 aWNrX3Q7Ci0KLXN0YXRpYyBzZGxqb3lzdGlja190ICpzZGxqb3lzdGljayA9IE5VTEw7Ci0K LS8qKiBcYnJpZWYgIFRlbXBvcmFyeSBjb3B5IG9mIHRoZSBkZWZhdWx0IGpveW1hcCBmaWxl IG5hbWUKLSAqCi0gKiBBdm9pZHMgc2lsbHkgY2FzdGluZyBhd2F5IG9mIGNvbnN0Ci0gKi8K LXN0YXRpYyBjaGFyICpqb3ltYXBfZmFjdG9yeSA9IE5VTEw7Ci0KIC8qIGpveXN0aWNrIGF4 aXMgbWFwcGluZyBmb3IgcG90LXgveSwKICAgIGhpZ2ggYnl0ZSBpcyB0aGUgam95c3RpY2sg bnIsCiAgICBsb3cgYnl0ZSBpcyB0aGUgYXhpcyBuciwKQEAgLTE5NCwyMSArMTEwLDYgQEAK ICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBqb3ltYXBfZmlsZV9zZXQoY29uc3Qg Y2hhciAqdmFsLCB2b2lkICpwYXJhbSkKLXsKLSAgICBpZiAodXRpbF9zdHJpbmdfc2V0KCZq b3ltYXBfZmlsZSwgdmFsKSkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBy ZXR1cm4gam95X2FyY2hfbWFwcGluZ19sb2FkKGpveW1hcF9maWxlKTsKLX0KLQotc3RhdGlj IHJlc291cmNlX3N0cmluZ190IHJlc291cmNlc19zdHJpbmdbXSA9IHsKLSAgICB7ICJKb3lN YXBGaWxlIiwgTlVMTCwgUkVTX0VWRU5UX05PLCBOVUxMLAotICAgICAgJmpveW1hcF9maWxl LCBqb3ltYXBfZmlsZV9zZXQsICh2b2lkICopMCB9LAotICAgIFJFU09VUkNFX1NUUklOR19M SVNUX0VORAotfTsKLQogc3RhdGljIGNvbnN0IHJlc291cmNlX2ludF90IHJlc291cmNlc19p bnRbXSA9IHsKICAgICB7ICJKb3lUaHJlc2hvbGQiLCBERUZBVUxUX0pPWVNUSUNLX1RIUkVT SE9MRCwgUkVTX0VWRU5UX05PLCBOVUxMLAogICAgICAgJmpveXN0aWNrX3RocmVzaG9sZCwg c2V0X2pveXN0aWNrX3RocmVzaG9sZCwgTlVMTCB9LApAQCAtMjg3LDEyICsxODgsNiBAQAog ICAgIH0KIAogI2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUwotICAgIGpveW1hcF9mYWN0 b3J5ID0gYXJjaGRlcF9kZWZhdWx0X2pveW1hcF9maWxlX25hbWUoKTsKLSAgICByZXNvdXJj ZXNfc3RyaW5nWzBdLmZhY3RvcnlfdmFsdWUgPSBqb3ltYXBfZmFjdG9yeTsKLQotICAgIGlm IChyZXNvdXJjZXNfcmVnaXN0ZXJfc3RyaW5nKHJlc291cmNlc19zdHJpbmcpIDwgMCkgewot ICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQogICAgIGlmIChyZXNvdXJjZXNfcmVnaXN0ZXJf aW50KHJlc291cmNlc19pbnQpIDwgMCkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpA QCAtMzAxLDIwICsxOTYsNiBAQAogICAgIHJldHVybiAwOwogfQogCi12b2lkIGpveV9hcmNo X3Jlc291cmNlc19zaHV0ZG93bih2b2lkKQotewotI2lmZGVmIEhBVkVfU0RMX05VTUpPWVNU SUNLUwotICAgIGlmIChqb3ltYXBfZmFjdG9yeSkgewotICAgICAgICBsaWJfZnJlZShqb3lt YXBfZmFjdG9yeSk7Ci0gICAgICAgIGpveW1hcF9mYWN0b3J5ID0gTlVMTDsKLSAgICB9Ci0g ICAgaWYgKGpveW1hcF9maWxlKSB7Ci0gICAgICAgIGxpYl9mcmVlKGpveW1hcF9maWxlKTsK LSAgICAgICAgam95bWFwX2ZpbGUgPSBOVUxMOwotICAgIH0KLSNlbmRpZgotfQotCiBpbnQg am95X3NkbF9jbWRsaW5lX29wdGlvbnNfaW5pdCh2b2lkKQogewogI2lmZGVmIEhBVkVfU0RM X05VTUpPWVNUSUNLUwpAQCAtMzU4LDYgKzIzOSwxNyBAQAogCiAvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovCiAKK3N0YXRpYyB2b2lkIHNkbF9qb3lzdGlja19wb2xsKGludCBqb3lwb3J0 LCB2b2lkKiBqb3lzdGljaykge30KK3N0YXRpYyB2b2lkIHNkbF9qb3lzdGlja19jbG9zZSh2 b2lkKiBqb3lzdGljaykKK3sKKyAgICBTRExfSm95c3RpY2tDbG9zZShqb3lzdGljayk7Cit9 CisKK3N0YXRpYyBqb3lzdGlja19kcml2ZXJfdCBzZGxfam95c3RpY2tfZHJpdmVyID0gewor ICAgIC5wb2xsID0gc2RsX2pveXN0aWNrX3BvbGwsCisgICAgLmNsb3NlID0gc2RsX2pveXN0 aWNrX2Nsb3NlCit9OworCiAjaWZkZWYgSEFWRV9TRExfTlVNSk9ZU1RJQ0tTCiAKIC8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CkBAIC0zNjYsMTEgKzI1OCw5IEBACiBpbnQgam95X3NkbF9pbml0KHZvaWQpCiB7CiAgICAg aW50IGksIGF4aXMsIGJ1dHRvbiwgaGF0LCBiYWxsOwotICAgIHNkbGpveXN0aWNrX2lucHV0 X3QgajsKICAgICBTRExfSm95c3RpY2sgKmpveTsKKyAgICBjaGFyICpuYW1lOwogCi0gICAg c2Rsam95c3RpY2sgPSBOVUxMOwotCiAgICAgc2Rsam95X2xvZyA9IGxvZ19vcGVuKCJTRExK b3lzdGljayIpOwogCiAgICAgaWYgKFNETF9Jbml0U3ViU3lzdGVtKFNETF9JTklUX0pPWVNU SUNLKSkgewpAQCAtMzg3LDU2OCArMjc3LDQzIEBACiAKICAgICBsb2dfbWVzc2FnZShzZGxq b3lfbG9nLCAiJWkgam95c3RpY2tzIGZvdW5kIiwgbnVtX2pveXN0aWNrcyk7CiAKLSAgICBz ZGxqb3lzdGljayA9IGxpYl9tYWxsb2Moc2l6ZW9mKHNkbGpveXN0aWNrX3QpICogbnVtX2pv eXN0aWNrcyk7Ci0KICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2pveXN0aWNrczsgKytpKSB7 Ci0gICAgICAgIGpveSA9IHNkbGpveXN0aWNrW2ldLmpveXB0ciA9IFNETF9Kb3lzdGlja09w ZW4oaSk7CisgICAgICAgIGpveSA9IFNETF9Kb3lzdGlja09wZW4oaSk7CiAgICAgICAgIGlm IChqb3kpIHsKICNpZm5kZWYgVVNFX1NETFVJMgotICAgICAgICAgICAgc2Rsam95c3RpY2tb aV0ubmFtZSA9IGxpYl9zdHJkdXAoU0RMX0pveXN0aWNrTmFtZShpKSk7CisgICAgICAgICAg ICBuYW1lID0gbGliX3N0cmR1cChTRExfSm95c3RpY2tOYW1lKGkpKTsKICNlbHNlCi0gICAg ICAgICAgICBzZGxqb3lzdGlja1tpXS5uYW1lID0gbGliX3N0cmR1cChTRExfSm95c3RpY2tO YW1lKHNkbGpveXN0aWNrW2ldLmpveXB0cikpOworICAgICAgICAgICAgbmFtZSA9IGxpYl9z dHJkdXAoU0RMX0pveXN0aWNrTmFtZShqb3kpKTsKICNlbmRpZgotICAgICAgICAgICAgYXhp cyA9IHNkbGpveXN0aWNrW2ldLmlucHV0X21heFtBWElTXSA9IFNETF9Kb3lzdGlja051bUF4 ZXMoam95KTsKLSAgICAgICAgICAgIGJ1dHRvbiA9IHNkbGpveXN0aWNrW2ldLmlucHV0X21h eFtCVVRUT05dID0gU0RMX0pveXN0aWNrTnVtQnV0dG9ucyhqb3kpOwotICAgICAgICAgICAg aGF0ID0gc2Rsam95c3RpY2tbaV0uaW5wdXRfbWF4W0hBVF0gPSBTRExfSm95c3RpY2tOdW1I YXRzKGpveSk7Ci0gICAgICAgICAgICBiYWxsID0gc2Rsam95c3RpY2tbaV0uaW5wdXRfbWF4 W0JBTExdID0gU0RMX0pveXN0aWNrTnVtQmFsbHMoam95KTsKKyAgICAgICAgICAgIGF4aXMg PSBTRExfSm95c3RpY2tOdW1BeGVzKGpveSk7CisgICAgICAgICAgICBidXR0b24gPSBTRExf Sm95c3RpY2tOdW1CdXR0b25zKGpveSk7CisgICAgICAgICAgICBoYXQgPSBTRExfSm95c3Rp Y2tOdW1IYXRzKGpveSk7CisgICAgICAgICAgICBiYWxsID0gU0RMX0pveXN0aWNrTnVtQmFs bHMoam95KTsKIAotICAgICAgICAgICAgZm9yIChqID0gQVhJUzsgaiA8IE5VTV9JTlBVVF9U WVBFUzsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNkbGpveXN0aWNrW2ldLmlucHV0 X21heFtqXSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5w dXRbal0gPSBsaWJfbWFsbG9jKHNpemVvZihzZGxqb3lzdGlja19tYXBwaW5nX3QpICogc2Rs am95c3RpY2tbaV0uaW5wdXRfbWF4W2pdICogaW5wdXRfbXVsdFtqXSk7Ci0gICAgICAgICAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5w dXRbal0gPSBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg ICAgICAgICAgbG9nX21lc3NhZ2Uoc2Rsam95X2xvZywgIkRldmljZSAlaSBcIiVzXCIgKCVp IGF4ZXMsICVpIGJ1dHRvbnMsICVpIGhhdHMsICVpIGJhbGxzKSIsIGksIHNkbGpveXN0aWNr W2ldLm5hbWUsIGF4aXMsIGJ1dHRvbiwgaGF0LCBiYWxsKTsKLQotICAgICAgICAgICAgam95 X2FyY2hfaW5pdF9kZWZhdWx0X21hcHBpbmcoaSk7CisgICAgICAgICAgICBsb2dfbWVzc2Fn ZShzZGxqb3lfbG9nLCAiRGV2aWNlICVpIFwiJXNcIiAoJWkgYXhlcywgJWkgYnV0dG9ucywg JWkgaGF0cywgJWkgYmFsbHMpIiwgaSwgbmFtZSwgYXhpcywgYnV0dG9uLCBoYXQsIGJhbGwp OworICAgICAgICAgICAgcmVnaXN0ZXJfam95c3RpY2tfZHJpdmVyKCZzZGxfam95c3RpY2tf ZHJpdmVyLAorICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgam95LAor ICAgICAgICAgICAgICAgIGF4aXMsCisgICAgICAgICAgICAgICAgYnV0dG9uLAorICAgICAg ICAgICAgICAgIGhhdCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBsb2dfd2Fy bmluZyhzZGxqb3lfbG9nLCAiQ291bGRuJ3Qgb3BlbiBqb3lzdGljayAlaSIsIGkpOwogICAg ICAgICB9CiAgICAgfQogCi0gICAgam95X2FyY2hfbWFwcGluZ19sb2FkKGpveW1hcF9maWxl KTsKLQogICAgIFNETF9Kb3lzdGlja0V2ZW50U3RhdGUoU0RMX0VOQUJMRSk7CiAgICAgcmV0 dXJuIDA7CiB9CiAKLXZvaWQgam95c3RpY2sodm9pZCkKLXsKLSAgICAvKiBQcm92aWRlZCBv bmx5IGZvciBhcmNoZGVwIGpveS5oLiBUT0RPOiBNaWdyYXRlIGpveXN0aWNrIHBvbGxpbmcg aW4gaGVyZSBpZiBhbnkgbmVlZGVkPyAqLwotfQogCi12b2lkIGpveXN0aWNrX2Nsb3NlKHZv aWQpCi17Ci0gICAgaW50IGk7Ci0gICAgc2Rsam95c3RpY2tfaW5wdXRfdCBqOwotCi0jaWZk ZWYgU0RMX0RFQlVHCi0gICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgX19mdW5jX18pOwot I2VuZGlmCi0KLSAgICBpZiAoc2Rsam95c3RpY2sgPT0gTlVMTCkgewotICAgICAgICByZXR1 cm47Ci0gICAgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lzdGlja3M7ICsraSkg ewotICAgICAgICBsaWJfZnJlZShzZGxqb3lzdGlja1tpXS5uYW1lKTsKLSAgICAgICAgc2Rs am95c3RpY2tbaV0ubmFtZSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKHNkbGpveXN0aWNrW2ld LmpveXB0cikgewotICAgICAgICAgICAgU0RMX0pveXN0aWNrQ2xvc2Uoc2Rsam95c3RpY2tb aV0uam95cHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaiA9IEFYSVM7IGogPCBO VU1fSU5QVVRfVFlQRVM7ICsraikgewotICAgICAgICAgICAgbGliX2ZyZWUoc2Rsam95c3Rp Y2tbaV0uaW5wdXRbal0pOwotICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5wdXRbal0g PSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbGliX2ZyZWUoc2Rsam95c3RpY2sp OwotICAgIHNkbGpveXN0aWNrID0gTlVMTDsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLwogCi12b2lkIGpveV9hcmNoX2luaXRfZGVmYXVsdF9tYXBwaW5nKGludCBqb3ludW0p CitzdGF0aWMgaW5saW5lIGpveXN0aWNrX2F4aXNfdmFsdWVfdCBzZGxqb3lfYXhpc19kaXJl Y3Rpb24oU2ludDE2IHZhbHVlLCBqb3lzdGlja19heGlzX3ZhbHVlX3QgcHJldikKIHsKLSAg ICBpbnQgaSwgaiwgam95cG9ydCwgcGluLCBzdGF0ZSA9IDA7Ci0KLSAgICBTRExfSm95c3Rp Y2tVcGRhdGUoKTsKLQotICAgIC8qIEZJWE1FIHNvbWUgam95c3RpY2tzIHNlZW0gdG8gbmVl ZCBzb21lIHRpbWUgdG8gc2VsZi1jYWxpYnJhdGUgYWZ0ZXIgdGhlCi0gICAgICAgZmlyc3Qg dGltZSBpdCdzIG9wZW5lZC9wb2xsZWQvcmVhZCwgb3RoZXJ3aXNlIHRoZSByZXBvcnRlZCBh eGlzIHZhbHVlcwotICAgICAgIGFyZSBpbmNvcnJlY3QgYW5kIGdldCBtYXBwZWQgdG8gTk9O RS4gUXVpdHRpbmcgYW5kIHJlc3RhcnRpbmcgc2VlbXMgdG8KLSAgICAgICBmaXggdGhpcy4g TG9hZGluZyB0aGUgam95bWFwIGxhdGVyIGluIHRoZSBpbml0IGdldHMgYXJvdW5kIHRoaXMg aXNzdWUuICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2Rsam95c3RpY2tbam95bnVtXS5p bnB1dF9tYXhbQVhJU10gKiBpbnB1dF9tdWx0W0FYSVNdOyArK2kpIHsKLSAgICAgICAgam95 cG9ydCA9ICgoMSArIGpveW51bSArICgoaSAmIDQpID4+IDIpKSAmIDEpOwotICAgICAgICBw aW4gPSA4ID4+IChpICYgMyk7Ci0KLSAgICAgICAgLyogUG9sbCBlYWNoIGpveXN0aWNrIGF4 aXMgb25jZSAqLwotICAgICAgICBpZiAoKGkgJSBpbnB1dF9tdWx0W0FYSVNdKSA9PSAwKSB7 Ci0gICAgICAgICAgICBzdGF0ZSA9IFNETF9Kb3lzdGlja0dldEF4aXMoc2Rsam95c3RpY2tb am95bnVtXS5qb3lwdHIsIGkgLyBpbnB1dF9tdWx0W0FYSVNdKTsKLSAgICAgICAgfQotCi0g ICAgICAgIC8qIENoZWNrIHRoYXQgdGhlIGRlZmF1bHQgam95c3RpY2sgdmFsdWUgaXMgd2l0 aGluIHRoZSB0aHJlc2hvbGQuCi0gICAgICAgICAgIFNvbWUgZGV2aWNlcyBoYXZlIGF4ZXMg dGhhdCBhcmUgKy8tMzI3Njcgd2hlbiBpZGxlOyBtYXBwaW5nCi0gICAgICAgICAgIHRob3Nl IHRvIE5PTkUgKGJ5IGRlZmF1bHQpIGF2b2lkcyBzb21lIHByb2JsZW1zLiAqLwotICAgICAg ICBpZiAoKHN0YXRlID4gam95c3RpY2tfdGhyZXNob2xkKSB8fCAoc3RhdGUgPCAtam95c3Rp Y2tfdGhyZXNob2xkKSkgewotICAgICAgICAgICAgbG9nX3dhcm5pbmcoc2Rsam95X2xvZywg IkF4aXMgJWkgZXhjZWVkcyB0aHJlc2hvbGQsIG1hcHBpbmcgdG8gTk9ORSIsIGkgLyBpbnB1 dF9tdWx0W0FYSVNdKTsKLSAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpbnB1dF9tdWx0 W0FYSVNdOyArK2opIHsKLSAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlu cHV0W0FYSVNdW2kgKyBqXS5hY3Rpb24gPSBOT05FOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgaSArPSAoaiAtIDEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2Rs am95c3RpY2tbam95bnVtXS5pbnB1dFtBWElTXVtpXS5hY3Rpb24gPSBKT1lTVElDSzsKLSAg ICAgICAgICAgIHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbQVhJU11baV0udmFsdWUuam95 WzBdID0gam95cG9ydDsKLSAgICAgICAgICAgIHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRb QVhJU11baV0udmFsdWUuam95WzFdID0gcGluOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg Zm9yIChpID0gMDsgaSA8IHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRfbWF4W0JVVFRPTl0g KiBpbnB1dF9tdWx0W0JVVFRPTl07ICsraSkgewotICAgICAgICBzd2l0Y2ggKGkgJiAzKSB7 Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAg ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGpveXBvcnQgPSAoKDEgKyBqb3ludW0gKyAo aSAmIDEpKSAmIDEpOwotICAgICAgICAgICAgICAgIHBpbiA9IDEgPDwgNDsKLSAgICAgICAg ICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0JVVFRPTl1baV0uYWN0aW9uID0g Sk9ZU1RJQ0s7Ci0gICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtC VVRUT05dW2ldLnZhbHVlLmpveVswXSA9IGpveXBvcnQ7Ci0gICAgICAgICAgICAgICAgc2Rs am95c3RpY2tbam95bnVtXS5pbnB1dFtCVVRUT05dW2ldLnZhbHVlLmpveVsxXSA9IHBpbjsK LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAg ICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0JVVFRPTl1baV0uYWN0aW9uID0g VUlfQUNUSVZBVEU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl IDI6Ci0gICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtCVVRUT05d W2ldLmFjdGlvbiA9IE1BUDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot ICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0 X21heFtIQVRdICogaW5wdXRfbXVsdFtIQVRdOyArK2kpIHsKLSAgICAgICAgam95cG9ydCA9 ICgoMSArIGpveW51bSArICgoaSAmIDQpID4+IDIpKSAmIDEpOwotICAgICAgICBwaW4gPSAx IDw8IChpICYgMyk7Ci0KLSAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRd W2ldLmFjdGlvbiA9IEpPWVNUSUNLOwotICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlu cHV0W0hBVF1baV0udmFsdWUuam95WzBdID0gam95cG9ydDsKLSAgICAgICAgc2Rsam95c3Rp Y2tbam95bnVtXS5pbnB1dFtIQVRdW2ldLnZhbHVlLmpveVsxXSA9IHBpbjsKLSAgICB9Ci0K LSAgICBmb3IgKGkgPSAwOyBpIDwgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dF9tYXhbQkFM TF0gKiBpbnB1dF9tdWx0W0JBTExdOyArK2kpIHsKLSAgICAgICAgc2Rsam95c3RpY2tbam95 bnVtXS5pbnB1dFtCQUxMXVtpXS5hY3Rpb24gPSBOT05FOwotICAgIH0KLX0KLQotc3RhdGlj IGNoYXIgbWFwcGluZ19yZXR2YWxbNTBdOwotCi1jaGFyICpnZXRfam95X3BvdF9tYXBwaW5n X3N0cmluZyhpbnQgam95bnIsIGludCBwb3QpCi17Ci0gICAgdWludDE2X3QgcG9ydGF4aXMg PSAweGZmZmY7Ci0gICAgdWludDhfdCBwb3J0ID0gcG9ydGF4aXMgPj4gODsKLSAgICB1aW50 OF90IGF4aXMgPSBwb3J0YXhpcyAmIDB4ZmY7Ci0gICAgY2hhciAqcmV0dmFsID0gTlVMTDsK LQotICAgIGlmIChqb3luciA8PSAxICYmIHBvdCA8PSAxKSB7Ci0gICAgICAgIHBvcnRheGlz ID0gc2Rsam95c3RpY2tfYXhpc19tYXBwaW5nWyhqb3luciA8PCAxKSB8IHBvdF07Ci0gICAg fQotCi0gICAgaWYgKHBvcnQgIT0gMjU1ICYmIGF4aXMgIT0gMjU1KSB7Ci0gICAgICAgIHNu cHJpbnRmKG1hcHBpbmdfcmV0dmFsLCA1MCwgIkolZCwgQXglZCIsIHBvcnQsIGF4aXMpOwot ICAgICAgICByZXR2YWwgPSBtYXBwaW5nX3JldHZhbDsKLSAgICB9Ci0gICAgcmV0dXJuIHJl dHZhbDsKLX0KLQotY2hhciAqZ2V0X2pveV9waW5fbWFwcGluZ19zdHJpbmcoaW50IGpveW5y LCBpbnQgcGluKQotewotICAgIGludCBpLCBrOwotICAgIHNkbGpveXN0aWNrX2lucHV0X3Qg ajsKLSAgICBzZGxqb3lzdGlja19hY3Rpb25fdCB0OwotICAgIGludCB2YWxpZCA9IDA7Ci0g ICAgaW50IGpveSA9IDA7Ci0gICAgaW50IHR5cGUgPSAwOwotICAgIGludCBpbmRleCA9IDA7 Ci0gICAgaW50IHN1Yl9pbmRleCA9IDA7Ci0gICAgY2hhciAqcmV0dmFsID0gTlVMTDsKLSAg ICBjaGFyICp0eXBlX3N0cmluZyA9IE5VTEw7Ci0gICAgY2hhciAqaW5kZXhfc3RyaW5nID0g TlVMTDsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBudW1fam95c3RpY2tzOyArK2kpIHsKLSAg ICAgICAgZm9yIChqID0gQVhJUzsgaiA8IE5VTV9JTlBVVF9UWVBFUzsgKytqKSB7Ci0gICAg ICAgICAgICBmb3IgKGsgPSAwOyBrIDwgc2Rsam95c3RpY2tbaV0uaW5wdXRfbWF4W2pdICog aW5wdXRfbXVsdFtqXTsgKytrKSB7Ci0gICAgICAgICAgICAgICAgdCA9IHNkbGpveXN0aWNr W2ldLmlucHV0W2pdW2tdLmFjdGlvbjsKLSAgICAgICAgICAgICAgICBpZiAodCA9PSBKT1lT VElDSykgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2Rsam95c3RpY2tbaV0uaW5wdXRb al1ba10udmFsdWUuam95WzBdID09IGpveW5yICYmIHNkbGpveXN0aWNrW2ldLmlucHV0W2pd W2tdLnZhbHVlLmpveVsxXSA9PSBwaW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh bGlkKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqb3kgPSBpOwotICAgICAgICAgICAg ICAgICAgICAgICAgdHlwZSA9IGo7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg KHR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFYSVM6Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfc3RyaW5nID0gIkF4IjsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfc3RyaW5nID0gIkkiOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGsgLyAyOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdWJfaW5kZXggPSBrICUgMjsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSBCVVRUT046Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfc3Ry aW5nID0gIkJ0IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfc3Ry aW5nID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBr OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJfaW5kZXggPSAwOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIEhBVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dHlwZV9zdHJpbmcgPSAiSHQiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bmRleF9zdHJpbmcgPSAiSSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu ZGV4ID0gayAvIDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9pbmRl eCA9IGsgJSA0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJBTEw6Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGVfc3RyaW5nID0gIkJsIjsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW5kZXhfc3RyaW5nID0gTlVMTDsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW5kZXggPSBrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdWJfaW5kZXggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K LSAgICBpZiAodmFsaWQgPiAxKSB7Ci0gICAgICAgIHJldHZhbCA9ICJNdWx0aXBsZSI7Ci0g ICAgfQotICAgIGlmICh2YWxpZCA9PSAxKSB7Ci0gICAgICAgIGlmIChpbmRleF9zdHJpbmcg IT0gTlVMTCApIHsKLSAgICAgICAgICAgIHNucHJpbnRmKG1hcHBpbmdfcmV0dmFsLCA1MCwg IkolZCwgJXMlZCwgJXMlZCIsIGpveSwgdHlwZV9zdHJpbmcsIGluZGV4LCBpbmRleF9zdHJp bmcsIHN1Yl9pbmRleCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzbnByaW50 ZihtYXBwaW5nX3JldHZhbCwgNTAsICJKJWQsICVzJWQiLCBqb3ksIHR5cGVfc3RyaW5nLCBp bmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0gbWFwcGluZ19yZXR2YWw7Ci0g ICAgfQotCi0gICAgcmV0dXJuIHJldHZhbDsKLX0KLQotdm9pZCBzZGxqb3lfZGVsZXRlX3Bv dF9tYXBwaW5nKGludCBwb3J0LCBpbnQgcG90KQotewotICAgIGludCBpLCBrOwotICAgIHNk bGpveXN0aWNrX2lucHV0X3QgajsKLSAgICBzZGxqb3lzdGlja19hY3Rpb25fdCB0OwotCi0g ICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lzdGlja3M7ICsraSkgewotICAgICAgICBmb3Ig KGogPSBBWElTOyBqIDwgTlVNX0lOUFVUX1RZUEVTOyArK2opIHsKLSAgICAgICAgICAgIGZv ciAoayA9IDA7IGsgPCBzZGxqb3lzdGlja1tpXS5pbnB1dF9tYXhbal0gKiBpbnB1dF9tdWx0 W2pdOyArK2spIHsKLSAgICAgICAgICAgICAgICB0ID0gc2Rsam95c3RpY2tbaV0uaW5wdXRb al1ba10uYWN0aW9uOwotICAgICAgICAgICAgICAgIGlmICh0ID09IFBPVF9BWElTKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52YWx1 ZS5heGlzWzBdID09IHBvcnQgJiYgc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUu YXhpc1sxXSA9PSBwb3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNkbGpveXN0aWNr W2ldLmlucHV0W2pdW2tdLmFjdGlvbiA9IE5PTkU7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52YWx1ZS5heGlzWzBdID0gMDsKLSAgICAg ICAgICAgICAgICAgICAgICAgIHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLmF4 aXNbMV0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg IGlmIChwb3J0IDw9IDEgJiYgcG90IDw9IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IHNkbGpveXN0aWNrX2F4aXNfbWFwcGluZ1socG9ydCA8PCAxKSB8IHBvdF0gPSAweGZmZmY7 Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgc2Rsam95X2RlbGV0ZV9waW5fbWFw cGluZyhpbnQgcG9ydCwgaW50IHBpbikKLXsKLSAgICBpbnQgaSwgazsKLSAgICBzZGxqb3lz dGlja19pbnB1dF90IGo7Ci0gICAgc2Rsam95c3RpY2tfYWN0aW9uX3QgdDsKLQotICAgIGZv ciAoaSA9IDA7IGkgPCBudW1fam95c3RpY2tzOyArK2kpIHsKLSAgICAgICAgZm9yIChqID0g QVhJUzsgaiA8IE5VTV9JTlBVVF9UWVBFUzsgKytqKSB7Ci0gICAgICAgICAgICBmb3IgKGsg PSAwOyBrIDwgc2Rsam95c3RpY2tbaV0uaW5wdXRfbWF4W2pdICogaW5wdXRfbXVsdFtqXTsg KytrKSB7Ci0gICAgICAgICAgICAgICAgdCA9IHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2td LmFjdGlvbjsKLSAgICAgICAgICAgICAgICBpZiAodCA9PSBKT1lTVElDSykgewotICAgICAg ICAgICAgICAgICAgICBpZiAoc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUuam95 WzBdID09IHBvcnQgJiYgc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUuam95WzFd ID09IHBpbikgewotICAgICAgICAgICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5w dXRbal1ba10uYWN0aW9uID0gTk9ORTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNkbGpv eXN0aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLmpveVswXSA9IDA7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52YWx1ZS5qb3lbMV0gPSAw OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1pbnQgam95X2FyY2hfbWFwcGluZ19kdW1w KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewotICAgIEZJTEUgKmZwOwotICAgIGludCBpLCBr OwotICAgIHNkbGpveXN0aWNrX2lucHV0X3QgajsKLSAgICBzZGxqb3lzdGlja19hY3Rpb25f dCB0OwotICAgIGNoYXIgKmhvdGtleV9wYXRoID0gTlVMTDsKLQotI2lmZGVmIFNETF9ERUJV RwotICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIF9fZnVuY19fKTsKLSNlbmRpZgotCi0g ICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0K LQotICAgIGZwID0gZm9wZW4oZmlsZW5hbWUsIE1PREVfV1JJVEVfVEVYVCk7Ci0KLSAgICBp ZiAoZnAgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgZnBy aW50ZihmcCwgIiMgVklDRSBqb3lzdGljayBtYXBwaW5nIGZpbGVcbiIKLSAgICAgICAgICAg ICIjXG4iCi0gICAgICAgICAgICAiIyBBIGpveXN0aWNrIG1hcCBpcyByZWFkIGluIGFzIHBh dGNoIHRvIHRoZSBjdXJyZW50IG1hcC5cbiIKLSAgICAgICAgICAgICIjXG4iCi0gICAgICAg ICAgICAiIyBGaWxlIGZvcm1hdDpcbiIKLSAgICAgICAgICAgICIjIC0gY29tbWVudCBsaW5l cyBzdGFydCB3aXRoICcjJ1xuIgotICAgICAgICAgICAgIiMgLSBrZXl3b3JkIGxpbmVzIHN0 YXJ0IHdpdGggJyFrZXl3b3JkJ1xuIgotICAgICAgICAgICAgIiMgLSBub3JtYWwgbGluZSBo YXMgJ2pveW51bSBpbnB1dHR5cGUgaW5wdXRpbmRleCBhY3Rpb24nXG4iCi0gICAgICAgICAg ICAiI1xuIgotICAgICAgICAgICAgIiMgS2V5d29yZHMgYW5kIHRoZWlyIGxpbmVzIGFyZTpc biIKLSAgICAgICAgICAgICIjICchQ0xFQVInICAgIGNsZWFyIGFsbCBtYXBwaW5nc1xuIgot ICAgICAgICAgICAgIiNcbiIKLSAgICAgICAgICAgICk7Ci0KLSAgICBmcHJpbnRmKGZwLCAi IyBpbnB1dHR5cGU6XG4iCi0gICAgICAgICAgICAiIyAwICAgICAgYXhpc1xuIgotICAgICAg ICAgICAgIiMgMSAgICAgIGJ1dHRvblxuIgotICAgICAgICAgICAgIiMgMiAgICAgIGhhdFxu IgotICAgICAgICAgICAgIiMgMyAgICAgIGJhbGxcbiIKLSAgICAgICAgICAgICIjXG4iCi0g ICAgICAgICAgICAiIyBOb3RlIHRoYXQgZWFjaCBheGlzIGhhcyAyIGlucHV0aW5kZXggZW50 cmllcyBhbmQgZWFjaCBoYXQgaGFzIDQuXG4iCi0gICAgICAgICAgICAiI1xuIgotICAgICAg ICAgICAgIiMgYWN0aW9uIFthY3Rpb25fcGFyYW1ldGVyc106XG4iCi0gICAgICAgICAgICAi IyAwICAgICAgICAgICAgICAgbm9uZVxuIgotICAgICAgICAgICAgIiMgMSBwb3J0IHBpbiAg ICAgIGpveXN0aWNrIChwaW46IDEvMi80LzgvMTYvMzIvNjQvMTI4LzI1Ni81MTIvMTAyNC8y MDQ4ID0gdS9kL2wvci9maXJlKEEpL2ZpcmUyKEIpL2ZpcmUzKFgpL1kvTEIvUkIvc2VsZWN0 L3N0YXJ0KVxuIgotICAgICAgICAgICAgIiMgMiByb3cgY29sICAgICAgIGtleWJvYXJkXG4i Ci0gICAgICAgICAgICAiIyAzICAgICAgICAgICAgICAgbWFwXG4iCi0gICAgICAgICAgICAi IyA0ICAgICAgICAgICAgICAgVUkgYWN0aXZhdGVcbiIKLSAgICAgICAgICAgICIjIDUgcGF0 aCZ0byZpdGVtICBVSSBmdW5jdGlvblxuIgotICAgICAgICAgICAgIiMgNiBwb3QgYXhpcyAg ICAgIGpveXN0aWNrIChwb3Q6IDEvMi8zLzQgPSB4MS95MS94Mi95MilcbiIKLSAgICAgICAg ICAgICIjXG5cbiIKLSAgICAgICAgICAgICk7Ci0KLSAgICBmcHJpbnRmKGZwLCAiIUNMRUFS XG5cbiIpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lzdGlja3M7ICsraSkgewot ICAgICAgICBmcHJpbnRmKGZwLCAiIyAlc1xuIiwgc2Rsam95c3RpY2tbaV0ubmFtZSk7Ci0g ICAgICAgIGZvciAoaiA9IEFYSVM7IGogPCBOVU1fSU5QVVRfVFlQRVM7ICsraikgewotICAg ICAgICAgICAgZm9yIChrID0gMDsgayA8IHNkbGpveXN0aWNrW2ldLmlucHV0X21heFtqXSAq IGlucHV0X211bHRbal07ICsraykgewotICAgICAgICAgICAgICAgIHQgPSBzZGxqb3lzdGlj a1tpXS5pbnB1dFtqXVtrXS5hY3Rpb247Ci0gICAgICAgICAgICAgICAgZnByaW50ZihmcCwg IiVpICV1ICVpICV1IiwgaSwgaiwgaywgdCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0 KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSk9ZU1RJQ0s6Ci0gICAgICAgICAgICAg ICAgICAgICAgICBmcHJpbnRmKGZwLCAiICVpICVpIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUuam95WzBdLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tpXS5pbnB1dFtq XVtrXS52YWx1ZS5qb3lbMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj YXNlIEtFWUJPQVJEOgotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiAl aSAlaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkbGpveXN0aWNrW2ld LmlucHV0W2pdW2tdLnZhbHVlLmtleVswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUua2V5WzFdCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVSV9GVU5DVElPTjoKLSAgICAgICAg ICAgICAgICAgICAgICAgIGhvdGtleV9wYXRoID0gc2RsX3VpX2hvdGtleV9wYXRoKHNkbGpv eXN0aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLnVpX2Z1bmN0aW9uKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGZwcmludGYoZnAsICIgJXMiLCBob3RrZXlfcGF0aCk7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBsaWJfZnJlZShob3RrZXlfcGF0aCk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBQT1RfQVhJUzoK LSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIgJWkgJWkiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52 YWx1ZS5heGlzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lz dGlja1tpXS5pbnB1dFtqXVtrXS52YWx1ZS5heGlzWzFdCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiXG4i KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZwcmludGYoZnAsICJcbiIpOwotICAg ICAgICB9Ci0gICAgICAgIGZwcmludGYoZnAsICJcblxuIik7Ci0gICAgfQotCi0gICAgZmNs b3NlKGZwKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBqb3lfYXJjaF9r ZXl3b3JkX2NsZWFyKHZvaWQpCi17Ci0gICAgaW50IGksIGs7Ci0gICAgc2Rsam95c3RpY2tf aW5wdXRfdCBqOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lzdGlja3M7ICsraSkg ewotICAgICAgICBmb3IgKGogPSBBWElTOyBqIDwgTlVNX0lOUFVUX1RZUEVTOyArK2opIHsK LSAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBzZGxqb3lzdGlja1tpXS5pbnB1dF9tYXhb al0gKiBpbnB1dF9tdWx0W2pdOyArK2spIHsKLSAgICAgICAgICAgICAgICBzZGxqb3lzdGlj a1tpXS5pbnB1dFtqXVtrXS5hY3Rpb24gPSBOT05FOwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBqb3lfYXJjaF9wYXJzZV9rZXl3b3JkKGNo YXIgKmJ1ZmZlcikKLXsKLSAgICBjaGFyICprZXk7Ci0KLSAgICBrZXkgPSBzdHJ0b2soYnVm ZmVyICsgMSwgIiBcdDoiKTsKLQotICAgIGlmICghc3RyY21wKGtleSwgIkNMRUFSIikpIHsK LSAgICAgICAgam95X2FyY2hfa2V5d29yZF9jbGVhcigpOwotICAgIH0KLX0KLQotc3RhdGlj IHZvaWQgam95X2FyY2hfcGFyc2VfZW50cnkoY2hhciAqYnVmZmVyKQotewotICAgIGNoYXIg KnA7Ci0gICAgaW50IGpveW51bSwgaW5wdXRpbmRleCwgZGF0YTEgPSAwLCBkYXRhMiA9IDA7 Ci0gICAgc2Rsam95c3RpY2tfaW5wdXRfdCBpbnB1dHR5cGU7Ci0gICAgc2Rsam95c3RpY2tf YWN0aW9uX3QgYWN0aW9uOwotCi0gICAgcCA9IHN0cnRvayhidWZmZXIsICIgXHQ6Iik7Ci0K LSAgICBqb3ludW0gPSBhdG9pKHApOwotCi0gICAgaWYgKGpveW51bSA+PSBudW1fam95c3Rp Y2tzKSB7Ci0gICAgICAgIGxvZ19lcnJvcihzZGxqb3lfbG9nLCAiQ291bGQgbm90IGZpbmQg am95c3RpY2sgJWkhIiwgam95bnVtKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg IHAgPSBzdHJ0b2soTlVMTCwgIiBcdCwiKTsKLSAgICBpZiAocCAhPSBOVUxMKSB7Ci0gICAg ICAgIGlucHV0dHlwZSA9IChzZGxqb3lzdGlja19pbnB1dF90KWF0b2kocCk7Ci0gICAgICAg IHAgPSBzdHJ0b2soTlVMTCwgIiBcdCwiKTsKLSAgICAgICAgaWYgKHAgIT0gTlVMTCkgewot ICAgICAgICAgICAgaW5wdXRpbmRleCA9IGF0b2kocCk7Ci0gICAgICAgICAgICBwID0gc3Ry dG9rKE5VTEwsICIgXHQiKTsKLSAgICAgICAgICAgIGlmIChwICE9IE5VTEwpIHsKLSAgICAg ICAgICAgICAgICBhY3Rpb24gPSAoc2Rsam95c3RpY2tfYWN0aW9uX3QpYXRvaShwKTsKLQot ICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAg IGNhc2UgVUlfRlVOQ1RJT046Ci0gICAgICAgICAgICAgICAgICAgICAgICBwID0gc3RydG9r KE5VTEwsICJcdFxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgICBjYXNlIEpPWVNUSUNLOgotICAgICAgICAgICAgICAgICAgICBj YXNlIFBPVF9BWElTOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWUJPQVJEOgotICAg ICAgICAgICAgICAgICAgICAgICAgcCA9IHN0cnRvayhOVUxMLCAiIFx0Iik7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBkYXRhMSA9IGF0b2kocCk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBwID0gc3RydG9rKE5VTEwsICIgXHQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IGRhdGEyID0gYXRvaShwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGlucHV0aW5k ZXggPCBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0X21heFtpbnB1dHR5cGVdICogaW5wdXRf bXVsdFtpbnB1dHR5cGVdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNkbGpveXN0aWNrW2pv eW51bV0uaW5wdXRbaW5wdXR0eXBlXVtpbnB1dGluZGV4XS5hY3Rpb24gPSBhY3Rpb247Ci0K LSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgSk9ZU1RJQ0s6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg c2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtpbnB1dHR5cGVdW2lucHV0aW5kZXhdLnZhbHVl LmpveVswXSA9IGRhdGExOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkbGpveXN0 aWNrW2pveW51bV0uaW5wdXRbaW5wdXR0eXBlXVtpbnB1dGluZGV4XS52YWx1ZS5qb3lbMV0g PSBkYXRhMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgUE9UX0FYSVM6Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtpbnB1dHR5cGVdW2lucHV0aW5kZXhd LnZhbHVlLmF4aXNbMF0gPSBkYXRhMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W2lucHV0dHlwZV1baW5wdXRpbmRleF0udmFsdWUu YXhpc1sxXSA9IGRhdGEyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRh MSA8PSAxICYmIGRhdGEyIDw9IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2Rsam95c3RpY2tfYXhpc19tYXBwaW5nWyhkYXRhMSA8PCAxKSB8IGRhdGEyXSA9IChq b3ludW0gPDwgOCkgfCAoaW5wdXRpbmRleCAvIDIpOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXNvdXJjZXNfc2V0X2ludF9zcHJpbnRmKCJQYWRkbGVzSW5wdXQlZCIs IFBBRERMRVNfSU5QVVRfSk9ZX0FYSVMsIGRhdGExICsgMSk7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlCT0FSRDoKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W2lucHV0dHlwZV1baW5wdXRp bmRleF0udmFsdWUua2V5WzBdID0gZGF0YTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtpbnB1dHR5cGVdW2lucHV0aW5kZXhdLnZh bHVlLmtleVsxXSA9IGRhdGEyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBVSV9GVU5DVElPTjoKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W2lucHV0dHlw ZV1baW5wdXRpbmRleF0udmFsdWUudWlfZnVuY3Rpb24gPSBzZGxfdWlfaG90a2V5X2FjdGlv bihwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgICBsb2dfd2FybmluZyhzZGxqb3lfbG9nLCAiaW5wdXRpbmRl eCAlaSB0b28gbGFyZ2UgZm9yIGlucHV0dHlwZSAldSwgam95bnVtICVpISIsIGlucHV0aW5k ZXgsIGlucHV0dHlwZSwgam95bnVtKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWludCBqb3lfYXJjaF9tYXBwaW5nX2xvYWQo Y29uc3QgY2hhciAqZmlsZW5hbWUpCi17Ci0gICAgRklMRSAqZnA7Ci0gICAgY2hhciAqY29t cGxldGVfcGF0aDsKLSAgICBjaGFyIGJ1ZmZlclsxMDAwXTsKLQotI2lmZGVmIFNETF9ERUJV RwotICAgIGZwcmludGYoc3RkZXJyLCAiJXMsICVzXG4iLCBfX2Z1bmNfXywgZmlsZW5hbWUp OwotI2VuZGlmCi0KLSAgICAvKiBTaWxlbnRseSBpZ25vcmUga2V5bWFwIGxvYWQgb24gcmVz b3VyY2UgJiBjbWRsaW5lIGluaXQgKi8KLSAgICBpZiAoc2Rsam95c3RpY2sgPT0gTlVMTCkg ewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoZmlsZW5hbWUgPT0gTlVM TCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgZnAgPSBzeXNmaWxlX29w ZW4oZmlsZW5hbWUsIE5VTEwsICZjb21wbGV0ZV9wYXRoLCBNT0RFX1JFQURfVEVYVCk7Ci0K LSAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBsb2dfd2FybmluZyhzZGxqb3lfbG9n LCAiRmFpbGVkIHRvIG9wZW4gYCVzJy4iLCBmaWxlbmFtZSk7Ci0gICAgICAgIHJldHVybiAt MTsKLSAgICB9Ci0KLSAgICBsb2dfbWVzc2FnZShzZGxqb3lfbG9nLCAiTG9hZGluZyBqb3lz dGljayBtYXAgYCVzJy4iLCBjb21wbGV0ZV9wYXRoKTsKLQotICAgIGxpYl9mcmVlKGNvbXBs ZXRlX3BhdGgpOwotCi0gICAgZG8gewotICAgICAgICBidWZmZXJbMF0gPSAwOwotICAgICAg ICBpZiAoZmdldHMoYnVmZmVyLCA5OTksIGZwKSkgewotICAgICAgICAgICAgY2hhciAqcDsK LQotICAgICAgICAgICAgaWYgKHN0cmxlbihidWZmZXIpID09IDApIHsKLSAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnVmZmVyW3N0cmxl bihidWZmZXIpIC0gMV0gPSAwOyAvKiByZW1vdmUgbmV3bGluZSAqLwotCi0gICAgICAgICAg ICAvKiByZW1vdmUgY29tbWVudHMgKi8KLSAgICAgICAgICAgIGlmICgocCA9IHN0cmNocihi dWZmZXIsICcjJykpKSB7Ci0gICAgICAgICAgICAgICAgKnAgPSAwOwotICAgICAgICAgICAg fQotCi0gICAgICAgICAgICAvKiByZW1vdmUgd2hpdGVzcGFjZSBhdCB0aGUgYmVnaW5uaW5n IG9mIHRoZSBsaW5lICovCi0gICAgICAgICAgICBwID0gYnVmZmVyOwotICAgICAgICAgICAg d2hpbGUgKCgoKnAgPT0gJyAnKSB8fCAoKnAgPT0gJ1x0JykpICYmICgqcCAhPSAwKSkgewot ICAgICAgICAgICAgICAgICsrcDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dp dGNoICgqcCkgewotICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnISc6Ci0gICAgICAgICAgICAgICAg ICAgIC8qIGtleXdvcmQgaGFuZGxpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgam95X2Fy Y2hfcGFyc2Vfa2V5d29yZChwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLyogdGFibGUgZW50 cnkgaGFuZGxpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgam95X2FyY2hfcGFyc2VfZW50 cnkocCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0gICAgfSB3aGlsZSAoIWZlb2YoZnApKTsKLSAgICBmY2xvc2UoZnApOwotCi0g ICAgcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGlj IGlubGluZSB1aW50OF90IHNkbGpveV9heGlzX2RpcmVjdGlvbihTaW50MTYgdmFsdWUsIHVp bnQ4X3QgcHJldikKLXsKICAgICBpbnQgdGhyZXMgPSBqb3lzdGlja190aHJlc2hvbGQ7CiAK LSAgICBpZiAocHJldiA9PSAwKSB7CisgICAgaWYgKHByZXYgPT0gSk9ZX0FYSVNfTUlERExF KSB7CiAgICAgICAgIHRocmVzICs9IGpveXN0aWNrX2Z1eno7CiAgICAgfSBlbHNlIHsKICAg ICAgICAgdGhyZXMgLT0gam95c3RpY2tfZnV6ejsKQEAgLTk1NSwxMSArMzIwLDExIEBACiAg ICAgfQogCiAgICAgaWYgKHZhbHVlIDwgLXRocmVzKSB7Ci0gICAgICAgIHJldHVybiAyOwor ICAgICAgICByZXR1cm4gSk9ZX0FYSVNfTkVHQVRJVkU7CiAgICAgfSBlbHNlIGlmICh2YWx1 ZSA+IHRocmVzKSB7Ci0gICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4gSk9ZX0FY SVNfUE9TSVRJVkU7CiAgICAgfSBlbHNlIGlmICgodmFsdWUgPCB0aHJlcykgJiYgKHZhbHVl ID4gLXRocmVzKSkgewotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIEpPWV9B WElTX01JRERMRTsKICAgICB9CiAKICAgICByZXR1cm4gcHJldjsKQEAgLTk4OSwyOCArMzU0 LDI2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzZGxqb3lzdGlja19tYXBwaW5n X3QgKnNkbGpveV9nZXRfbWFwcGluZyhTRExfRXZlbnQgZSkKK3N0YXRpYyBqb3lzdGlja19t YXBwaW5nX3QgKnNkbGpveV9nZXRfbWFwcGluZyhTRExfRXZlbnQgZSkKIHsKLSAgICBzZGxq b3lzdGlja19tYXBwaW5nX3QgKnJldHZhbCA9IE5VTEw7CisgICAgam95c3RpY2tfbWFwcGlu Z190ICpyZXR2YWwgPSBOVUxMOwogICAgIHVpbnQ4X3QgY3VyOwogCiAgICAgc3dpdGNoIChl LnR5cGUpIHsKICAgICAgICAgY2FzZSBTRExfSk9ZQVhJU01PVElPTjoKICAgICAgICAgICAg IGN1ciA9IHNkbGpveV9heGlzX2RpcmVjdGlvbihlLmpheGlzLnZhbHVlLCAwKTsKLSAgICAg ICAgICAgIGlmIChjdXIgPiAwKSB7Ci0gICAgICAgICAgICAgICAgLS1jdXI7Ci0gICAgICAg ICAgICAgICAgcmV0dmFsID0gJihzZGxqb3lzdGlja1tlLmpheGlzLndoaWNoXS5pbnB1dFtB WElTXVtlLmpheGlzLmF4aXMgKiBpbnB1dF9tdWx0W0FYSVNdICsgY3VyXSk7CisgICAgICAg ICAgICBpZiAoY3VyICE9IEpPWV9BWElTX01JRERMRSkgeworICAgICAgICAgICAgICAgIHJl dHZhbCA9IGpveV9nZXRfYXhpc19tYXBwaW5nKGUuamF4aXMud2hpY2gsIGUuamF4aXMudmFs dWUsIGN1cik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg Y2FzZSBTRExfSk9ZSEFUTU9USU9OOgogICAgICAgICAgICAgY3VyID0gc2Rsam95X2hhdF9k aXJlY3Rpb24oZS5qaGF0LnZhbHVlLCAwKTsKICAgICAgICAgICAgIGlmIChjdXIgPiAwKSB7 Ci0gICAgICAgICAgICAgICAgLS1jdXI7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gJihz ZGxqb3lzdGlja1tlLmpoYXQud2hpY2hdLmlucHV0W0hBVF1bZS5qaGF0LmhhdCAqIGlucHV0 X211bHRbSEFUXSArIGN1cl0pOworICAgICAgICAgICAgICAgIHJldHZhbCA9IGpveV9nZXRf aGF0X21hcHBpbmcoZS5qaGF0LndoaWNoLCBlLmpoYXQuaGF0LCBjdXIpOwogICAgICAgICAg ICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU0RMX0pPWUJVVFRPTkRP V046Ci0gICAgICAgICAgICByZXR2YWwgPSAmKHNkbGpveXN0aWNrW2UuamJ1dHRvbi53aGlj aF0uaW5wdXRbQlVUVE9OXVtlLmpidXR0b24uYnV0dG9uXSk7CisgICAgICAgICAgICByZXR2 YWwgPSBqb3lfZ2V0X2J1dHRvbl9tYXBwaW5nKGUuamJ1dHRvbi53aGljaCwgZS5qYnV0dG9u LmJ1dHRvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAg ICAgICAgIGJyZWFrOwpAQCAtMTAxOCw3ICszODEsNyBAQAogICAgIHJldHVybiByZXR2YWw7 CiB9CiAKLXN0YXRpYyB1aV9tZW51X2FjdGlvbl90IHNkbGpveV9wZXJmb3JtX2V2ZW50KHNk bGpveXN0aWNrX21hcHBpbmdfdCAqZXZlbnQsIGludCB2YWx1ZSkKK3N0YXRpYyBqb3lzdGlj a19hY3Rpb25fdCBzZGxqb3lfcGVyZm9ybV9ldmVudChqb3lzdGlja19tYXBwaW5nX3QgKmV2 ZW50LCBpbnQgdmFsdWUpCiB7CiAgICAgdWludDhfdCB0OwogICAgIHVpX21lbnVfYWN0aW9u X3QgcmV0dmFsID0gTUVOVV9BQ1RJT05fTk9ORTsKQEAgLTEwMjUsOSArMzg4LDggQEAKIAog ICAgIGF1dG9yZXBlYXQgPSBNRU5VX0FDVElPTl9OT05FOwogCi0gICAgaWYgKHNkbF9tZW51 X3N0YXRlIHx8IChzZGxfdmtiZF9zdGF0ZSAmIFNETF9WS0JEX0FDVElWRSkpIHsKICAgICAg ICAgaWYgKGV2ZW50LT5hY3Rpb24gPT0gSk9ZU1RJQ0spIHsKLSAgICAgICAgICAgIHN3aXRj aCAoZXZlbnQtPnZhbHVlLmpveVsxXSkgeworICAgICAgICAgICAgc3dpdGNoIChldmVudC0+ dmFsdWUuam95X3BpbikgewogICAgICAgICAgICAgICAgIGNhc2UgMHgwMToKICAgICAgICAg ICAgICAgICAgICAgcmV0dmFsID0gYXV0b3JlcGVhdCA9IE1FTlVfQUNUSU9OX1VQOwogICAg ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEwNTcsNDAgKzQxOSw2IEBACiAgICAgICAg ICAgICByZXR2YWwgKz0gTUVOVV9BQ1RJT05fTk9ORV9SRUxFQVNFOwogICAgICAgICB9CiAg ICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgfQotCi0gICAgYXV0b3JlcGVhdF9kZWxheSA9 IDMwOwotCi0gICAgc3dpdGNoIChldmVudC0+YWN0aW9uKSB7Ci0gICAgICAgIGNhc2UgSk9Z U1RJQ0s6Ci0gICAgICAgICAgICB0ID0gZXZlbnQtPnZhbHVlLmpveVswXTsKLSAgICAgICAg ICAgIGlmIChqb3lzdGlja19wb3J0X21hcFt0XSA9PSBKT1lERVZfSk9ZU1RJQ0spIHsKLSAg ICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgam95c3Rp Y2tfc2V0X3ZhbHVlX29yKHQsICh1aW50MTZfdClldmVudC0+dmFsdWUuam95WzFdKTsKLSAg ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBqb3lzdGlja19z ZXRfdmFsdWVfYW5kKHQsICh1aW50MTZfdCkgfihldmVudC0+dmFsdWUuam95WzFdKSk7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgIGNhc2UgS0VZQk9BUkQ6Ci0gICAgICAgICAgICBrZXlib2FyZF9zZXRfa2V5YXJy X2FueShldmVudC0+dmFsdWUua2V5WzBdLCBldmVudC0+dmFsdWUua2V5WzFdLCB2YWx1ZSk7 Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVSV9BQ1RJVkFURToKLSAgICAg ICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgICAgIHNkbF91aV9hY3RpdmF0ZSgp OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVUlf RlVOQ1RJT046Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgZXZlbnQtPnZhbHVlLnVpX2Z1 bmN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgc2RsX3VpX2hvdGtleShldmVudC0+dmFsdWUu dWlfZnVuY3Rpb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIGNhc2UgTk9ORToKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwot ICAgIH0KLQotICAgIHJldHVybiByZXR2YWw7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gKi8KQEAgLTExMTAsMTU2ICs0MzgsNTggQEAKIAogdWludDhfdCBzZGxqb3lfY2hlY2tf YXhpc19tb3ZlbWVudChTRExfRXZlbnQgZSkKIHsKLSAgICB1aW50OF90IGN1ciwgcHJldjsK LSAgICBpbnQgaW5kZXg7Ci0gICAgVWludDggam95bnVtOwotICAgIFVpbnQ4IGF4aXM7Ci0g ICAgU2ludDE2IHZhbHVlOwotCi0gICAgam95bnVtID0gZS5qYXhpcy53aGljaDsKLSAgICBh eGlzID0gZS5qYXhpcy5heGlzOwotICAgIHZhbHVlID0gZS5qYXhpcy52YWx1ZTsKLQotICAg IGluZGV4ID0gYXhpcyAqIGlucHV0X211bHRbQVhJU107Ci0gICAgcHJldiA9IHNkbGpveXN0 aWNrW2pveW51bV0uaW5wdXRbQVhJU11baW5kZXhdLnByZXY7Ci0KLSAgICBjdXIgPSBzZGxq b3lfYXhpc19kaXJlY3Rpb24odmFsdWUsIHByZXYpOwotCi0gICAgaWYgKGN1ciA9PSBwcmV2 KSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHNkbGpveXN0aWNrW2pveW51 bV0uaW5wdXRbQVhJU11baW5kZXhdLnByZXYgPSBjdXI7Ci0gICAgcmV0dXJuIGN1cjsKKyAg ICBqb3lfYXhpc19ldmVudChlLmpheGlzLndoaWNoLCBlLmpheGlzLmF4aXMsIGUuamF4aXMu dmFsdWUpOworICAgIHJldHVybiBlLmpheGlzLnZhbHVlOwogfQogCiB1aW50OF90IHNkbGpv eV9jaGVja19oYXRfbW92ZW1lbnQoU0RMX0V2ZW50IGUpCiB7Ci0gICAgdWludDhfdCBjdXIs IHByZXY7Ci0gICAgaW50IGluZGV4OwotICAgIFVpbnQ4IGpveW51bTsKLSAgICBVaW50OCBo YXQ7Ci0gICAgVWludDggdmFsdWU7Ci0KLSAgICBqb3ludW0gPSBlLmpoYXQud2hpY2g7Ci0g ICAgaGF0ID0gZS5qaGF0LmhhdDsKLSAgICB2YWx1ZSA9IGUuamhhdC52YWx1ZTsKLQotICAg IGluZGV4ID0gaGF0ICogaW5wdXRfbXVsdFtIQVRdOwotICAgIHByZXYgPSBzZGxqb3lzdGlj a1tqb3ludW1dLmlucHV0W0hBVF1baW5kZXhdLnByZXY7Ci0KLSAgICBpZiAodmFsdWUgPT0g cHJldikgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBjdXIgPSBzZGxqb3lf aGF0X2RpcmVjdGlvbih2YWx1ZSwgcHJldik7Ci0KLSAgICBzZGxqb3lzdGlja1tqb3ludW1d LmlucHV0W0hBVF1baW5kZXhdLnByZXYgPSB2YWx1ZTsKLSAgICByZXR1cm4gY3VyOworICAg IGpveV9oYXRfZXZlbnQoZS5qaGF0LndoaWNoLCBlLmpoYXQuaGF0LCBlLmpoYXQudmFsdWUp OworICAgIHJldHVybiBlLmpoYXQudmFsdWU7CiB9CiAKLXVpX21lbnVfYWN0aW9uX3Qgc2Rs am95X2F4aXNfZXZlbnQoVWludDggam95bnVtLCBVaW50OCBheGlzLCBTaW50MTYgdmFsdWUp Cit2b2lkIHNkbGpveV9heGlzX2V2ZW50KFVpbnQ4IGpveW51bSwgVWludDggYXhpcywgU2lu dDE2IHZhbHVlKQogewogICAgIGludCBpOwotICAgIHVpbnQ4X3QgY3VyLCBwcmV2OworICAg IGpveXN0aWNrX2F4aXNfdmFsdWVfdCBjdXIsIHByZXY7CiAgICAgaW50IGluZGV4OwogICAg IHVpX21lbnVfYWN0aW9uX3QgcmV0dmFsID0gTUVOVV9BQ1RJT05fTk9ORTsKICAgICBTaW50 MTYgdmFsID0gfnZhbHVlOwogCi0gICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotICAg ICAgICBpZiAoc2Rsam95c3RpY2tfYXhpc19tYXBwaW5nW2ldID09ICgoam95bnVtIDw8IDgp IHwgYXhpcykpIHsKLSAgICAgICAgICAgIGpveXN0aWNrX3NldF9heGlzX3ZhbHVlKGksICh1 aW50OF90KSgodmFsICsgMzI3NjgpID4+IDgpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBw cmV2ID0gam95X2F4aXNfcHJldihqb3ludW0sIGluZGV4KTsKIAotICAgIGluZGV4ID0gYXhp cyAqIGlucHV0X211bHRbQVhJU107Ci0gICAgcHJldiA9IHNkbGpveXN0aWNrW2pveW51bV0u aW5wdXRbQVhJU11baW5kZXhdLnByZXY7Ci0KICAgICBjdXIgPSBzZGxqb3lfYXhpc19kaXJl Y3Rpb24odmFsdWUsIHByZXYpOworICAgIAorICAgIGpveV9heGlzX2V2ZW50KGpveW51bSwg YXhpcywgY3VyKTsKK30KIAotICAgIGlmIChjdXIgPT0gcHJldikgewotICAgICAgICByZXR1 cm4gcmV0dmFsOwotICAgIH0KK2pveXN0aWNrX2FjdGlvbl90IHNkbGpveV9heGlzX2V2ZW50 X2Zvcl9tZW51X2FjdGlvbihVaW50OCBqb3ludW0sIFVpbnQ4IGF4aXMsIFNpbnQxNiB2YWx1 ZSkKK3sKKyAgICBpbnQgaTsKKyAgICBqb3lzdGlja19heGlzX3ZhbHVlX3QgY3VyLCBwcmV2 OworICAgIGludCBpbmRleDsKKyAgICBqb3lzdGlja19hY3Rpb25fdCByZXR2YWwgPSBNRU5V X0FDVElPTl9OT05FOworICAgIFNpbnQxNiB2YWwgPSB+dmFsdWU7CisgICAgam95c3RpY2tf bWFwcGluZ190KiBtYXBwaW5nOwogCi0gICAgaWYgKGN1ciA9PSAxKSB7Ci0gICAgICAgIGlm IChwcmV2ID09IDIpIHsKLSAgICAgICAgICAgIHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rs am95c3RpY2tbam95bnVtXS5pbnB1dFtBWElTXVtpbmRleCArIDFdKSwgMCk7Ci0gICAgICAg IH0KLSAgICAgICAgcmV0dmFsID0gc2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlj a1tqb3ludW1dLmlucHV0W0FYSVNdW2luZGV4XSksIDEpOwotICAgIH0gZWxzZSBpZiAoY3Vy ID09IDIpIHsKLSAgICAgICAgaWYgKHByZXYgPT0gMSkgewotICAgICAgICAgICAgc2Rsam95 X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0FYSVNdW2luZGV4 XSksIDApOwotICAgICAgICB9Ci0gICAgICAgIHJldHZhbCA9IHNkbGpveV9wZXJmb3JtX2V2 ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtBWElTXVtpbmRleCArIDFdKSwgMSk7 Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHByZXYgPT0gMSkgewotICAgICAgICAgICAg c2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0FYSVNd W2luZGV4XSksIDApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2Rsam95X3Bl cmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0FYSVNdW2luZGV4ICsg MV0pLCAwKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBwcmV2ID0gam95X2F4aXNfcHJldihq b3ludW0sIGluZGV4KTsKIAotICAgIHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbQVhJU11b aW5kZXhdLnByZXYgPSBjdXI7Ci0gICAgcmV0dXJuIHJldHZhbDsKKyAgICBjdXIgPSBzZGxq b3lfYXhpc19kaXJlY3Rpb24odmFsdWUsIHByZXYpOworICAgIAorICAgIG1hcHBpbmcgPSBq b3lfZ2V0X2F4aXNfbWFwcGluZyhqb3ludW0sIGF4aXMsIGN1cik7CisgICAgcmV0dXJuIHNk bGpveV9wZXJmb3JtX2V2ZW50KG1hcHBpbmcsIGN1cik7CiB9CiAKLXVpX21lbnVfYWN0aW9u X3Qgc2Rsam95X2J1dHRvbl9ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4IGJ1dHRvbiwgVWlu dDggdmFsdWUpCitqb3lzdGlja19hY3Rpb25fdCBzZGxqb3lfYnV0dG9uX2V2ZW50KFVpbnQ4 IGpveW51bSwgVWludDggYnV0dG9uLCBVaW50OCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gc2Rs am95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0JVVFRPTl1b YnV0dG9uXSksIHZhbHVlKTsKKyAgICBqb3lzdGlja19tYXBwaW5nX3QqIG1hcHBpbmcgPSBq b3lfZ2V0X2J1dHRvbl9tYXBwaW5nKGpveW51bSwgYnV0dG9uKTsKKyAgICByZXR1cm4gc2Rs am95X3BlcmZvcm1fZXZlbnQobWFwcGluZywgdmFsdWUpOwogfQogCi11aV9tZW51X2FjdGlv bl90IHNkbGpveV9oYXRfZXZlbnQoVWludDggam95bnVtLCBVaW50OCBoYXQsIFVpbnQ4IHZh bHVlKQoram95c3RpY2tfYWN0aW9uX3Qgc2Rsam95X2hhdF9ldmVudChVaW50OCBqb3ludW0s IFVpbnQ4IGhhdCwgVWludDggdmFsdWUpCiB7Ci0gICAgdWludDhfdCBwcmV2OwotICAgIGlu dCBpbmRleDsKLSAgICB1aV9tZW51X2FjdGlvbl90IHJldHZhbCA9IE1FTlVfQUNUSU9OX05P TkU7Ci0KLSAgICBpbmRleCA9IGhhdCAqIGlucHV0X211bHRbSEFUXTsKLSAgICBwcmV2ID0g c2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2luZGV4XS5wcmV2OwotCi0gICAgaWYg KHZhbHVlID09IHByZXYpIHsKLSAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICB9Ci0KLSAg ICBpZiAoKHZhbHVlICYgU0RMX0hBVF9VUCkgJiYgKCEocHJldiAmIFNETF9IQVRfVVApKSkg ewotICAgICAgICBpZiAocHJldiAmIFNETF9IQVRfRE9XTikgewotICAgICAgICAgICAgc2Rs am95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0hBVF1baW5k ZXggKyAxXSksIDApOwotICAgICAgICB9Ci0gICAgICAgIHJldHZhbCA9IHNkbGpveV9wZXJm b3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2luZGV4XSksIDEp OwotICAgIH0gZWxzZSBpZiAoKHZhbHVlICYgU0RMX0hBVF9ET1dOKSAmJiAoIShwcmV2ICYg U0RMX0hBVF9ET1dOKSkpIHsKLSAgICAgICAgaWYgKHByZXYgJiBTRExfSEFUX1VQKSB7Ci0g ICAgICAgICAgICBzZGxqb3lfcGVyZm9ybV9ldmVudCgmKHNkbGpveXN0aWNrW2pveW51bV0u aW5wdXRbSEFUXVtpbmRleF0pLCAwKTsKLSAgICAgICAgfQotICAgICAgICByZXR2YWwgPSBz ZGxqb3lfcGVyZm9ybV9ldmVudCgmKHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbSEFUXVtp bmRleCArIDFdKSwgMSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCghKHZhbHVlICYg U0RMX0hBVF9VUCkpICYmIChwcmV2ICYgU0RMX0hBVF9VUCkpIHsKLSAgICAgICAgICAgIHNk bGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2lu ZGV4XSksIDApOwotICAgICAgICB9IGVsc2UgaWYgKCghKHZhbHVlICYgU0RMX0hBVF9ET1dO KSkgJiYgKHByZXYgJiBTRExfSEFUX0RPV04pKSB7Ci0gICAgICAgICAgICBzZGxqb3lfcGVy Zm9ybV9ldmVudCgmKHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbSEFUXVtpbmRleCArIDFd KSwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBUT0RPIGEgcmV0dmFsIGlzIG1p c3NlZCBvbiBzaW11bHRhbmVvdXMgWC9ZIGV2ZW50cyAqLwotICAgIGlmICgodmFsdWUgJiBT RExfSEFUX0xFRlQpICYmICghKHByZXYgJiBTRExfSEFUX0xFRlQpKSkgewotICAgICAgICBp ZiAocHJldiAmIFNETF9IQVRfUklHSFQpIHsKLSAgICAgICAgICAgIHNkbGpveV9wZXJmb3Jt X2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2luZGV4ICsgM10pLCAw KTsKLSAgICAgICAgfQotICAgICAgICByZXR2YWwgPSBzZGxqb3lfcGVyZm9ybV9ldmVudCgm KHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbSEFUXVtpbmRleCArIDJdKSwgMSk7Ci0gICAg fSBlbHNlIGlmICgodmFsdWUgJiBTRExfSEFUX1JJR0hUKSAmJiAoIShwcmV2ICYgU0RMX0hB VF9SSUdIVCkpKSB7Ci0gICAgICAgIGlmIChwcmV2ICYgU0RMX0hBVF9MRUZUKSB7Ci0gICAg ICAgICAgICBzZGxqb3lfcGVyZm9ybV9ldmVudCgmKHNkbGpveXN0aWNrW2pveW51bV0uaW5w dXRbSEFUXVtpbmRleCArIDJdKSwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0g c2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0hBVF1b aW5kZXggKyAzXSksIDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgoISh2YWx1ZSAm IFNETF9IQVRfTEVGVCkpICYmIChwcmV2ICYgU0RMX0hBVF9MRUZUKSkgewotICAgICAgICAg ICAgc2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0hB VF1baW5kZXggKyAyXSksIDApOwotICAgICAgICB9IGVsc2UgaWYgKCghKHZhbHVlICYgU0RM X0hBVF9SSUdIVCkpICYmIChwcmV2ICYgU0RMX0hBVF9SSUdIVCkpIHsKLSAgICAgICAgICAg IHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRd W2luZGV4ICsgM10pLCAwKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHNkbGpveXN0aWNr W2pveW51bV0uaW5wdXRbSEFUXVtpbmRleF0ucHJldiA9IHZhbHVlOwotICAgIHJldHVybiBy ZXR2YWw7CisgICAgam95c3RpY2tfbWFwcGluZ190KiBtYXBwaW5nID0gam95X2dldF9oYXRf bWFwcGluZyhqb3ludW0sIGhhdCwgdmFsdWUpOworICAgIHJldHVybiBzZGxqb3lfcGVyZm9y bV9ldmVudChtYXBwaW5nLCAxKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpA QCAtMTI3OSwzOCArNTA5LDExIEBACiB9CiAjZW5kaWYKIAotdm9pZCBzZGxqb3lfc2V0X2pv eXN0aWNrKFNETF9FdmVudCBlLCBpbnQgcG9ydCwgaW50IGJpdHMpCi17Ci0gICAgc2Rsam95 c3RpY2tfbWFwcGluZ190ICpqb3lldmVudCA9IHNkbGpveV9nZXRfbWFwcGluZyhlKTsKKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotICAgIGlmIChqb3lldmVudCAhPSBOVUxMKSB7 Ci0gICAgICAgIGpveWV2ZW50LT5hY3Rpb24gPSBKT1lTVElDSzsKLSAgICAgICAgam95ZXZl bnQtPnZhbHVlLmpveVswXSA9ICh1aW50MTZfdClwb3J0OwotICAgICAgICBqb3lldmVudC0+ dmFsdWUuam95WzFdID0gKHVpbnQxNl90KWJpdHM7Ci0gICAgfQotfQotCi12b2lkIHNkbGpv eV9zZXRfam95c3RpY2tfYXhpcyhTRExfRXZlbnQgZSwgaW50IHBvcnQsIGludCBwb3QpCi17 Ci0gICAgaW50IGluZGV4ID0gKHBvcnQgPDwgMSkgfCBwb3Q7Ci0gICAgdWludDhfdCBzdGlj ayA9IGUuamF4aXMud2hpY2g7Ci0gICAgdWludDhfdCBheGlzID0gZS5qYXhpcy5heGlzOwot ICAgIHNkbGpveXN0aWNrX21hcHBpbmdfdCAqam95ZXZlbnQgPSBzZGxqb3lfZ2V0X21hcHBp bmcoZSk7Ci0KLSAgICBpZiAoam95ZXZlbnQgIT0gTlVMTCkgewotICAgICAgICBqb3lldmVu dC0+YWN0aW9uID0gUE9UX0FYSVM7Ci0gICAgICAgIGpveWV2ZW50LT52YWx1ZS5heGlzWzBd ID0gKHVpbnQxNl90KXBvcnQ7Ci0gICAgICAgIGpveWV2ZW50LT52YWx1ZS5heGlzWzFdID0g KHVpbnQxNl90KXBvdDsKLSAgICB9Ci0KLSAgICBpZiAoaW5kZXggPD0gMykgewotICAgICAg ICBzZGxqb3lzdGlja19heGlzX21hcHBpbmdbaW5kZXhdID0gKHN0aWNrIDw8IDgpIHwgYXhp czsKLSAgICB9Ci19Ci0KIHZvaWQgc2Rsam95X3NldF9ob3RrZXkoU0RMX0V2ZW50IGUsIHVp X21lbnVfZW50cnlfdCAqdmFsdWUpCiB7Ci0gICAgc2Rsam95c3RpY2tfbWFwcGluZ190ICpq b3lldmVudCA9IHNkbGpveV9nZXRfbWFwcGluZyhlKTsKKyAgICBqb3lzdGlja19tYXBwaW5n X3QgKmpveWV2ZW50ID0gc2Rsam95X2dldF9tYXBwaW5nKGUpOwogCiAgICAgaWYgKGpveWV2 ZW50ICE9IE5VTEwpIHsKICAgICAgICAgam95ZXZlbnQtPmFjdGlvbiA9IFVJX0ZVTkNUSU9O OwpAQCAtMTMyMCw3ICs1MjMsNyBAQAogCiB2b2lkIHNkbGpveV9zZXRfa2V5cHJlc3MoU0RM X0V2ZW50IGUsIGludCByb3csIGludCBjb2wpCiB7Ci0gICAgc2Rsam95c3RpY2tfbWFwcGlu Z190ICpqb3lldmVudCA9IHNkbGpveV9nZXRfbWFwcGluZyhlKTsKKyAgICBqb3lzdGlja19t YXBwaW5nX3QgKmpveWV2ZW50ID0gc2Rsam95X2dldF9tYXBwaW5nKGUpOwogCiAgICAgaWYg KGpveWV2ZW50ICE9IE5VTEwpIHsKICAgICAgICAgam95ZXZlbnQtPmFjdGlvbiA9IEtFWUJP QVJEOwpAQCAtMTMyOSwxOCArNTMyLDkgQEAKICAgICB9CiB9CiAKLXZvaWQgc2Rsam95X3Nl dF9leHRyYShTRExfRXZlbnQgZSwgaW50IHR5cGUpCi17Ci0gICAgc2Rsam95c3RpY2tfbWFw cGluZ190ICpqb3lldmVudCA9IHNkbGpveV9nZXRfbWFwcGluZyhlKTsKLQotICAgIGlmIChq b3lldmVudCAhPSBOVUxMKSB7Ci0gICAgICAgIGpveWV2ZW50LT5hY3Rpb24gPSB0eXBlID8g TUFQIDogVUlfQUNUSVZBVEU7Ci0gICAgfQotfQotCiB2b2lkIHNkbGpveV91bnNldChTRExf RXZlbnQgZSkKIHsKLSAgICBzZGxqb3lzdGlja19tYXBwaW5nX3QgKmpveWV2ZW50ID0gc2Rs am95X2dldF9tYXBwaW5nKGUpOworICAgIGpveXN0aWNrX21hcHBpbmdfdCAqam95ZXZlbnQg PSBzZGxqb3lfZ2V0X21hcHBpbmcoZSk7CiAKICAgICBpZiAoam95ZXZlbnQgIT0gTlVMTCkg ewogICAgICAgICBqb3lldmVudC0+YWN0aW9uID0gTk9ORTsKQEAgLTEzNDcsMzkgKzU0MSw2 IEBACiAgICAgfQogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBp bnQgX3NkbGpveV9zd2FwX3BvcnRzID0gMDsKLQotdm9pZCBzZGxqb3lfc3dhcF9wb3J0cyh2 b2lkKQotewotICAgIGludCBpLCBrOwotICAgIHNkbGpveXN0aWNrX2lucHV0X3QgajsKLQot ICAgIHJlc291cmNlc19nZXRfaW50KCJKb3lEZXZpY2UxIiwgJmkpOwotICAgIHJlc291cmNl c19nZXRfaW50KCJKb3lEZXZpY2UyIiwgJmspOwotICAgIHJlc291cmNlc19zZXRfaW50KCJK b3lEZXZpY2UxIiwgayk7Ci0gICAgcmVzb3VyY2VzX3NldF9pbnQoIkpveURldmljZTIiLCBp KTsKLSAgICBfc2Rsam95X3N3YXBfcG9ydHMgXj0gMTsKLQotICAgIGZvciAoaSA9IDA7IGkg PCBudW1fam95c3RpY2tzOyArK2kpIHsKLSAgICAgICAgZm9yIChqID0gQVhJUzsgaiA8IE5V TV9JTlBVVF9UWVBFUzsgKytqKSB7Ci0gICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgc2Rs am95c3RpY2tbaV0uaW5wdXRfbWF4W2pdICogaW5wdXRfbXVsdFtqXTsgKytrKSB7Ci0gICAg ICAgICAgICAgICAgaWYgKHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLmFjdGlvbiA9PSBK T1lTVElDSykgewotICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tpXS5pbnB1dFtq XVtrXS52YWx1ZS5qb3lbMF0gXj0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWludCBzZGxqb3lfZ2V0X3N3YXBfcG9ydHMo dm9pZCkgCi17Ci0gICAgcmV0dXJuIF9zZGxqb3lfc3dhcF9wb3J0czsKLX0KLQotLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSAqLwotCiAjZWxzZQogLyogIUhBVkVfU0RMX05VTUpPWVNUSUNL UyAqLwogCkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvam95LmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL2pveS5oCShyZXZpc2lv bmUgNDEwMTApCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvam95LmgJKGNvcGlh IGRpIGxhdm9ybykKQEAgLTQwLDE1ICs0MCwxNyBAQAogZXh0ZXJuIHZvaWQgam95c3RpY2tf Y2xvc2Uodm9pZCk7CiBleHRlcm4gdm9pZCBqb3lzdGljayh2b2lkKTsKIAotZXh0ZXJuIHZv aWQgam95X2FyY2hfcmVzb3VyY2VzX3NodXRkb3duKHZvaWQpOworI2lmZGVmIEhBVkVfU0RM X05VTUpPWVNUSUNLUworc3RydWN0IGpveXN0aWNrX21hcHBpbmdfczsKK2VudW0gam95c3Rp Y2tfYWN0aW9uX2U7CiAKLSNpZmRlZiBIQVZFX1NETF9OVU1KT1lTVElDS1MKIGV4dGVybiB2 b2lkIGpveV9hcmNoX2luaXRfZGVmYXVsdF9tYXBwaW5nKGludCBqb3ludW0pOwogZXh0ZXJu IGludCBqb3lfYXJjaF9tYXBwaW5nX2xvYWQoY29uc3QgY2hhciAqZmlsZW5hbWUpOwogZXh0 ZXJuIGludCBqb3lfYXJjaF9tYXBwaW5nX2R1bXAoY29uc3QgY2hhciAqZmlsZW5hbWUpOwot ZXh0ZXJuIHVpX21lbnVfYWN0aW9uX3Qgc2Rsam95X2F4aXNfZXZlbnQoVWludDggam95bnVt LCBVaW50OCBheGlzLCBTaW50MTYgdmFsdWUpOwotZXh0ZXJuIHVpX21lbnVfYWN0aW9uX3Qg c2Rsam95X2J1dHRvbl9ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4IGJ1dHRvbiwgVWludDgg dmFsdWUpOwotZXh0ZXJuIHVpX21lbnVfYWN0aW9uX3Qgc2Rsam95X2hhdF9ldmVudChVaW50 OCBqb3ludW0sIFVpbnQ4IGhhdCwgVWludDggdmFsdWUpOworZXh0ZXJuIHZvaWQgc2Rsam95 X2F4aXNfZXZlbnQoVWludDggam95bnVtLCBVaW50OCBheGlzLCBTaW50MTYgdmFsdWUpOwor ZXh0ZXJuIGVudW0gam95c3RpY2tfYWN0aW9uX2Ugc2Rsam95X2J1dHRvbl9ldmVudChVaW50 OCBqb3ludW0sIFVpbnQ4IGJ1dHRvbiwgVWludDggdmFsdWUpOworZXh0ZXJuIGVudW0gam95 c3RpY2tfYWN0aW9uX2Ugc2Rsam95X2hhdF9ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4IGhh dCwgVWludDggdmFsdWUpOworZXh0ZXJuIGVudW0gam95c3RpY2tfYWN0aW9uX2Ugc2Rsam95 X2F4aXNfZXZlbnRfZm9yX21lbnVfYWN0aW9uKFVpbnQ4IGpveW51bSwgVWludDggYXhpcywg U2ludDE2IHZhbHVlKTsKIGV4dGVybiB1aV9tZW51X2FjdGlvbl90IHNkbGpveV9hdXRvcmVw ZWF0KHZvaWQpOwogZXh0ZXJuIHVpbnQ4X3Qgc2Rsam95X2NoZWNrX2F4aXNfbW92ZW1lbnQo U0RMX0V2ZW50IGUpOwogZXh0ZXJuIHVpbnQ4X3Qgc2Rsam95X2NoZWNrX2hhdF9tb3ZlbWVu dChTRExfRXZlbnQgZSk7CkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwva2Jk LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL2tiZC5j CShyZXZpc2lvbmUgNDEwMTApCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwva2Jk LmMJKGNvcGlhIGRpIGxhdm9ybykKQEAgLTQ3NCw3ICs0NzQsNyBAQAogICAgIHJldHVybiBy ZXQ7CiB9CiAKLXVpX21lbnVfYWN0aW9uX3Qgc2Rsa2JkX3ByZXNzKFNETEtleSBrZXksIFNE TE1vZCBtb2QpCit2b2lkIHNkbGtiZF9wcmVzcyhTRExLZXkga2V5LCBTRExNb2QgbW9kKQog ewogICAgIHVpX21lbnVfYWN0aW9uX3QgaSwgcmV0dmFsID0gTUVOVV9BQ1RJT05fTk9ORTsK ICAgICB1aV9tZW51X2VudHJ5X3QgKmhvdGtleV9hY3Rpb24gPSBOVUxMOwpAQCAtNTAwLDM2 ICs1MDAsMjAgQEAKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChzZGxfbWVudV9zdGF0ZSB8 fCAoc2RsX3ZrYmRfc3RhdGUgJiBTRExfVktCRF9BQ1RJVkUpKSB7Ci0gICAgICAgIGlmIChr ZXkgIT0gU0RMS19VTktOT1dOKSB7Ci0gICAgICAgICAgICBmb3IgKGkgPSBNRU5VX0FDVElP Tl9VUDsgaSA8IE1FTlVfQUNUSU9OX05VTTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYg KHNkbF91aV9tZW51a2V5c1tpXSA9PSAoaW50KWtleSkgewotICAgICAgICAgICAgICAgICAg ICByZXR2YWwgPSBpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGludCkoa2V5KSA9PSBz ZGxfdWlfbWVudWtleXNbMF0pIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBNRU5VX0FD VElPTl9FWElUOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBy ZXR2YWw7Ci0gICAgfQotCiAgICAgaWYgKChpbnQpKGtleSkgPT0gc2RsX3VpX21lbnVrZXlz WzBdKSB7CiAgICAgICAgIHNkbF91aV9hY3RpdmF0ZSgpOwotICAgICAgICByZXR1cm4gcmV0 dmFsOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKChob3RrZXlfYWN0aW9u ID0gc2Rsa2JkX2dldF9ob3RrZXkoa2V5LCBtb2QpKSAhPSBOVUxMKSB7CiAgICAgICAgIHNk bF91aV9ob3RrZXkoaG90a2V5X2FjdGlvbik7Ci0gICAgICAgIHJldHVybiByZXR2YWw7Cisg ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBrZXlib2FyZF9rZXlfcHJlc3NlZCgodW5z aWduZWQgbG9uZylrZXksIHNkbGtiZF9nZXRfbW9kaWZpZXIobW9kKSk7Ci0gICAgcmV0dXJu IHJldHZhbDsKIH0KIAotdWlfbWVudV9hY3Rpb25fdCBzZGxrYmRfcmVsZWFzZShTRExLZXkg a2V5LCBTRExNb2QgbW9kKQordm9pZCBzZGxrYmRfcmVsZWFzZShTRExLZXkga2V5LCBTRExN b2QgbW9kKQogewogICAgIHVpX21lbnVfYWN0aW9uX3QgaSwgcmV0dmFsID0gTUVOVV9BQ1RJ T05fTk9ORV9SRUxFQVNFOwogCkBAIC01NDksNyArNTMzLDE4IEBACiAgICAgfQogI2VuZGlm CiAKLSAgICBpZiAoc2RsX3ZrYmRfc3RhdGUgJiBTRExfVktCRF9BQ1RJVkUpIHsKKyAgICBr ZXlib2FyZF9rZXlfcmVsZWFzZWQoKHVuc2lnbmVkIGxvbmcpa2V5LCBzZGxrYmRfZ2V0X21v ZGlmaWVyKG1vZCkpOworfQorCit1aV9tZW51X2FjdGlvbl90IHNkbGtiZF9wcmVzc19mb3Jf bWVudV9hY3Rpb24oU0RMS2V5IGtleSwgU0RMTW9kIG1vZCkKK3sKKyAgICB1aV9tZW51X2Fj dGlvbl90IGksIHJldHZhbCA9IE1FTlVfQUNUSU9OX05PTkU7CisgICAgdWlfbWVudV9lbnRy eV90ICpob3RrZXlfYWN0aW9uID0gTlVMTDsKKworI2lmZGVmIFNETF9ERUJVRworICAgIGxv Z19kZWJ1ZygiJXM6ICVpICglcyksJTA0eCIsIF9fZnVuY19fLCBrZXksIFNETF9HZXRLZXlO YW1lKGtleSksIG1vZCk7CisjZW5kaWYKKwogICAgICAgICBpZiAoa2V5ICE9IFNETEtfVU5L Tk9XTikgewogICAgICAgICAgICAgZm9yIChpID0gTUVOVV9BQ1RJT05fVVA7IGkgPCBNRU5V X0FDVElPTl9OVU07ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChzZGxfdWlfbWVudWtl eXNbaV0gPT0gKGludClrZXkpIHsKQEAgLTU1NywxMiArNTUyLDMwIEBACiAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmICgoaW50KShrZXkpID09IHNkbF91aV9tZW51a2V5c1swXSkgeworICAg ICAgICAgICAgICAgIHJldHZhbCA9IE1FTlVfQUNUSU9OX0VYSVQ7CisgICAgICAgICAgICB9 CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldHZhbDsKK30KKwordWlfbWVudV9hY3Rp b25fdCBzZGxrYmRfcmVsZWFzZV9mb3JfbWVudV9hY3Rpb24oU0RMS2V5IGtleSwgU0RMTW9k IG1vZCkKK3sKKyAgICB1aV9tZW51X2FjdGlvbl90IGksIHJldHZhbCA9IE1FTlVfQUNUSU9O X05PTkVfUkVMRUFTRTsKKworI2lmZGVmIFNETF9ERUJVRworICAgIGxvZ19kZWJ1ZygiJXM6 ICVpICglcyksJTA0eCIsIF9fZnVuY19fLCBrZXksIFNETF9HZXRLZXlOYW1lKGtleSksIG1v ZCk7CisjZW5kaWYKKworICAgICAgICBpZiAoa2V5ICE9IFNETEtfVU5LTk9XTikgeworICAg ICAgICAgICAgZm9yIChpID0gTUVOVV9BQ1RJT05fVVA7IGkgPCBNRU5VX0FDVElPTl9OVU07 ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChzZGxfdWlfbWVudWtleXNbaV0gPT0gKGlu dClrZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gaTsKKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICB9CiAgICAgICAgIHJldHVybiByZXR2YWwgKyBNRU5VX0FDVElPTl9OT05FX1JFTEVB U0U7Ci0gICAgfQotCi0gICAga2V5Ym9hcmRfa2V5X3JlbGVhc2VkKCh1bnNpZ25lZCBsb25n KWtleSwgc2Rsa2JkX2dldF9tb2RpZmllcihtb2QpKTsKLSAgICByZXR1cm4gcmV0dmFsOwog fQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KSW5kZXg6IGRldi92aWNlL3RydW5rL3Ny Yy9hcmNoL3NkbC9rYmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvdmljZS90cnVuay9zcmMv YXJjaC9zZGwva2JkLmgJKHJldmlzaW9uZSA0MTAxMCkKKysrIGRldi92aWNlL3RydW5rL3Ny Yy9hcmNoL3NkbC9rYmQuaAkoY29waWEgZGkgbGF2b3JvKQpAQCAtNzYsOCArNzYsMTAgQEAK IGV4dGVybiBTRExLZXkgU0RMMnhfdG9fU0RMMXhfS2V5cyhTRExLZXkga2V5KTsKIGV4dGVy biBTRExLZXkgU0RMMXhfdG9fU0RMMnhfS2V5cyhTRExLZXkga2V5KTsKIAotZXh0ZXJuIHVp X21lbnVfYWN0aW9uX3Qgc2Rsa2JkX3ByZXNzKFNETEtleSBrZXksIFNETE1vZCBtb2QpOwot ZXh0ZXJuIHVpX21lbnVfYWN0aW9uX3Qgc2Rsa2JkX3JlbGVhc2UoU0RMS2V5IGtleSwgU0RM TW9kIG1vZCk7CitleHRlcm4gdm9pZCBzZGxrYmRfcHJlc3MoU0RMS2V5IGtleSwgU0RMTW9k IG1vZCk7CitleHRlcm4gdm9pZCBzZGxrYmRfcmVsZWFzZShTRExLZXkga2V5LCBTRExNb2Qg bW9kKTsKK3VpX21lbnVfYWN0aW9uX3Qgc2Rsa2JkX3ByZXNzX2Zvcl9tZW51X2FjdGlvbihT RExLZXkga2V5LCBTRExNb2QgbW9kKTsKK3VpX21lbnVfYWN0aW9uX3Qgc2Rsa2JkX3JlbGVh c2VfZm9yX21lbnVfYWN0aW9uKFNETEtleSBrZXksIFNETE1vZCBtb2QpOwogCiBleHRlcm4g dm9pZCBzZGxrYmRfc2V0X2hvdGtleShTRExLZXkga2V5LCBTRExNb2QgbW9kLCB1aV9tZW51 X2VudHJ5X3QgKnZhbHVlKTsKIApJbmRleDogZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2Rs L21lbnVfc2V0dGluZ3MuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvdmljZS90cnVuay9zcmMv YXJjaC9zZGwvbWVudV9zZXR0aW5ncy5jCShyZXZpc2lvbmUgNDEwMTApCisrKyBkZXYvdmlj ZS90cnVuay9zcmMvYXJjaC9zZGwvbWVudV9zZXR0aW5ncy5jCShjb3BpYSBkaSBsYXZvcm8p CkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAidmljZV9zZGwuaCIKICNpbmNsdWRlIDxz dGRsaWIuaD4KIAotI2luY2x1ZGUgImpveS5oIgorI2luY2x1ZGUgImpveXN0aWNrLmgiCiAj aW5jbHVkZSAia2JkLmgiCiAjaW5jbHVkZSAia2V5Ym9hcmQuaCIKICNpbmNsdWRlICJsaWIu aCIKSW5kZXg6IGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC91aS5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC91aS5jCShyZXZpc2lvbmUgNDEw MTApCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdWkuYwkoY29waWEgZGkgbGF2 b3JvKQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgImNvbG9yLmgiCiAjaW5jbHVkZSAi ZnVsbHNjcmVlbmFyY2guaCIKICNpbmNsdWRlICJqb3kuaCIKKyNpbmNsdWRlICJqb3lzdGlj ay5oIgogI2luY2x1ZGUgImtiZC5oIgogI2luY2x1ZGUgImtleWJvYXJkLmgiCiAjaW5jbHVk ZSAibGliLmgiCkBAIC0yMDYsMjY4ICsyMDcsNzIgQEAKICNlbmRpZgogCiAvKiBNYWluIGV2 ZW50IGhhbmRsZXIgKi8KLXVpX21lbnVfYWN0aW9uX3QgdWlfZGlzcGF0Y2hfZXZlbnRzKHZv aWQpCit2b2lkIHVpX2Rpc3BhdGNoX2V2ZW50cyh2b2lkKQogewogICAgIFNETF9FdmVudCBl OwotICAgIHVpX21lbnVfYWN0aW9uX3QgcmV0dmFsID0gTUVOVV9BQ1RJT05fTk9ORTsKLQot I2lmZGVmIEFORFJPSURfQ09NUElMRQotICAgIHN0cnVjdCBsb2NuZXRfYWxfZXZlbnQgZXZl bnQxOwotCi0gICAgaWYgKGxvYWRlcl9zaG93aW5mbykgewotICAgICAgICBpbnQgdmFsdWUg PSBsb2FkZXJfc2hvd2luZm87Ci0KLSAgICAgICAgbG9hZGVyX3Nob3dpbmZvID0gMDsKLSAg ICAgICAgbG9hZGVyX3NldF9zdGF0dXNiYXIoKHZhbHVlID09IDEpID8gMSA6IDApOwotICAg IH0KLSAgICBpZiAobG9hZGVyX3RydWVfZHJpdmUpIHsKLSAgICAgICAgaW50IHZhbHVlID0g bG9hZGVyX3RydWVfZHJpdmU7Ci0KLSAgICAgICAgbG9hZGVyX3RydWVfZHJpdmUgPSAwOwot ICAgICAgICBsb2FkZXJfc2V0X2RyaXZlX3RydWVfZW11bGF0aW9uKCh2YWx1ZSA9PSAxKSA/ IDEgOiAwKTsKLSAgICB9Ci0gICAgaWYgKGxvYWRlcl90dXJibykgewotICAgICAgICBpbnQg dmFsdWUgPSBsb2FkZXJfdHVyYm87Ci0KLSAgICAgICAgbG9hZGVyX3R1cmJvID0gMDsKLSAg ICAgICAgbG9hZGVyX3NldF93YXJwbW9kZSgodmFsdWUgPT0gMSkgPyAxIDogMCk7Ci0gICAg fQotICAgIGlmIChsb2FkZi0+YWJvcnQpIHsKLSAgICAgICAgbG9hZGYtPmFib3J0ID0gMDsK LSAgICAgICAgdWlfcGF1c2VfZW5hYmxlKCk7Ci0gICAgICAgIHVpX3NkbF9xdWl0KCk7Ci0g ICAgICAgIHVpX3BhdXNlX2Rpc2FibGUoKTsgLyogZG9lcyB0aGlzIGV2ZW4gZ2V0IGNhbGxl ZCBhZnRlciB1aV9zZGxfcXVpdCgpPyAqLwotICAgICAgICByZXR1cm4gTUVOVV9BQ1RJT05f Tk9ORTsKLSAgICB9IGVsc2UgaWYgKGxvYWRlcl9sb2Fkc3RhdGUpIHsKLSAgICAgICAgbG9h ZGVyX2xvYWRzdGF0ZSA9IDA7Ci0gICAgICAgIGxvYWRlcl9sb2FkX3NuYXBzaG90KHNhdmVz dGF0ZV9maWxlbmFtZSk7Ci0gICAgICAgIHVpX3BhdXNlX2Rpc2FibGUoKTsKLSAgICAgICAg cmV0dXJuIE1FTlVfQUNUSU9OX05PTkU7Ci0gICAgfSBlbHNlIGlmIChsb2FkZXJfc2F2ZXN0 YXRlKSB7Ci0gICAgICAgIGxvYWRlcl9zYXZlc3RhdGUgPSAwOwotICAgICAgICBsb2FkZXJf c2F2ZV9zbmFwc2hvdChzYXZlc3RhdGVfZmlsZW5hbWUpOwotICAgICAgICB1aV9wYXVzZV9k aXNhYmxlKCk7Ci0gICAgICAgIHJldHVybiBNRU5VX0FDVElPTl9OT05FOwotICAgIH0KLQot ICAgIGludCBzdG9wUG9sbCA9IDA7Ci0KLSAgICB3aGlsZSAoKCFzdG9wUG9sbCkgJiYgQW5k cm9pZF9Qb2xsRXZlbnQoJmV2ZW50MSkpIHsKLSAgICAgICAgc3RydWN0IGxvY25ldF9hbF9l dmVudCAqZXZlbnQgPSAmZXZlbnQxOwotCi0gICAgICAgIHN3aXRjaCAoZXZlbnQtPmV2ZW50 VHlwZSkgewotICAgICAgICAgICAgY2FzZSBTRExfTU9VU0VNT1RJT046Ci0gICAgICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgICAgICAvKiBkZXRlY3QgYXV0byBjYWxpYnJhdGUg Ki8KLSAgICAgICAgICAgICAgICAgICAgaWYgKChldmVudC0+eCA9PSAtMjA0OCkgJiYgKGV2 ZW50LT55ID09IC0yMDQ4KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZG93bl94ID0g LTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3duX3kgPSAtMTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIG9sZHggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgb2xkeSA9 IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9wUG9sbCA9IDE7Ci0gICAgICAgICAg ICAgICAgICAgIC8qIGRldGVjdCBwdXJlIHJlbGF0aXZlIG1vdmUgKi8KLSAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIGlmICgoZXZlbnQtPmRvd25feCA9PSAtMTAyNCkgJiYgKGV2ZW50 LT5kb3duX3kgPT0gLTEwMjQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3duX3gg PSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZG93bl95ID0gMDsKLSAgICAgICAgICAg ICAgICAgICAgICAgIG9sZHggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgb2xkeSA9 IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGRvd25feCAhPSBldmVudC0+ ZG93bl94KSB8fCAoZG93bl95ICE9IGV2ZW50LT5kb3duX3kpKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBkb3duX3ggPSBldmVudC0+ZG93bl94OwotICAgICAgICAgICAgICAgICAg ICAgICAgZG93bl95ID0gZXZlbnQtPmRvd25feTsKLSAgICAgICAgICAgICAgICAgICAgICAg IG9sZHggPSBkb3duX3g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbGR5ID0gZG93bl95 OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1vdXNlX21v dmUoKGludCkoZXZlbnQtPnggLSBvbGR4KSwgKGludCkoZXZlbnQtPnkgLSBvbGR5KSk7Ci0g ICAgICAgICAgICAgICAgICAgIG9sZHggPSBldmVudC0+eDsKLSAgICAgICAgICAgICAgICAg ICAgb2xkeSA9IGV2ZW50LT55OwotICAgICAgICAgICAgICAgIH0KKyAgICB3aGlsZSAoU0RM X1BvbGxFdmVudCgmZSkpIHsKKyAgICAgICAgc3dpdGNoIChlLnR5cGUpIHsKKyAgICAgICAg ICAgIGNhc2UgU0RMX0tFWURPV046CisgICAgICAgICAgICAgICAgdWlfZGlzcGxheV9rYmRf c3RhdHVzKCZlKTsKKyAgICAgICAgICAgICAgICBzZGxrYmRfcHJlc3MoU0RMMnhfdG9fU0RM MXhfS2V5cyhlLmtleS5rZXlzeW0uc3ltKSwgZS5rZXkua2V5c3ltLm1vZCk7CiAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNETF9NT1VTRUJVVFRPTkRPV046 Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoKGV2ZW50LT5k b3duX3ggPj0gMCkgJiYgKGV2ZW50LT5kb3duX3kgPj0gMCkpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIG1vdXNlX3ggPSA2NDAgKiBldmVudC0+ZG93bl94IC8gMTAwMC4wZiAtIDY0 OwotICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VfeSA9IDQwMCAqICgxMDAwIC0gZXZl bnQtPmRvd25feSkgLyAxMDAwLjBmIC0gMjAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChldmVudC0+a2V5Y29kZSA+PSAwKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBtb3VzZV9idXR0b24oKGludCkoZXZlbnQtPmtleWNvZGUpID8g U0RMX0JVVFRPTl9SSUdIVCA6IFNETF9CVVRUT05fTEVGVCwgMSk7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc3RvcFBvbGwgPSAxOwotICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgU0RMX0tFWVVQOgorICAgICAgICAgICAgICAg IHVpX2Rpc3BsYXlfa2JkX3N0YXR1cygmZSk7CisgICAgICAgICAgICAgICAgc2Rsa2JkX3Jl bGVhc2UoU0RMMnhfdG9fU0RMMXhfS2V5cyhlLmtleS5rZXlzeW0uc3ltKSwgZS5rZXkua2V5 c3ltLm1vZCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNE TF9NT1VTRUJVVFRPTlVQOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKGV2ZW50LT5rZXljb2RlID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IG1vdXNlX2J1dHRvbigoaW50KShldmVudC0+a2V5Y29kZSkgPyBTRExfQlVUVE9OX1JJR0hU IDogU0RMX0JVVFRPTl9MRUZULCAwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICBzdG9wUG9sbCA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGJyZWFrOworI2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUwogICAgICAg ICAgICAgY2FzZSBTRExfSk9ZQVhJU01PVElPTjoKLSAgICAgICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgICAgIGZsb2F0IHggPSBldmVudC0+eCAvIDI1Ni4wZjsKLSAgICAgICAg ICAgICAgICAgICAgZmxvYXQgeSA9IGV2ZW50LT55IC8gMjU2LjBmOwotICAgICAgICAgICAg ICAgICAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90ID0gMDsKLSAg ICAgICAgICAgICAgICAgICAgaW50IHZhbHVlOwotCi0gICAgICAgICAgICAgICAgICAgIGlm ICh5IDwgLURFQURfWk9ORSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gMTsK LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoeSA+IERF QURfWk9ORSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm90ID0gMTsKLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoeCA8IC1ERUFEX1pPTkUp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSAxOwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4ID4gREVBRF9aT05FKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICByaWdodCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0K LQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7Ci0KLSAgICAgICAgICAgICAgICAg ICAgaWYgKGxlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHw9IDQ7Ci0g ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0KSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB8PSA4OwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0b3ApIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlIHw9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgaWYgKGJvdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUg fD0gMjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR2 YWwgPSBzZGxqb3lfYXhpc19ldmVudCgwLCAwLCBldmVudC0+eCAvIDI1Ni4wZiAqIDMyNzY3 KTsKLSAgICAgICAgICAgICAgICAgICAgdWlfbWVudV9hY3Rpb25fdCByZXR2YWwyID0gc2Rs am95X2F4aXNfZXZlbnQoMCwgMSwgZXZlbnQtPnkgLyAyNTYuMGYgKiAzMjc2Nyk7Ci0gICAg ICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gTUVOVV9BQ1RJT05fTk9ORSkgewotICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gcmV0dmFsMjsKLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBvbGRfam95X2RpcmVjdGlvbiA9IHZhbHVl OwotICAgICAgICAgICAgICAgICAgICBzdG9wUG9sbCA9IDE7Ci0gICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIHNkbGpveV9heGlzX2V2ZW50KGUuamF4aXMud2hpY2gsIGUu amF4aXMuYXhpcywgZS5qYXhpcy52YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICBjYXNlIFNETF9KT1lCVVRUT05ET1dOOgotICAgICAgICAgICAgICAgIHsK LSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gc2Rsam95X2J1dHRvbl9ldmVudCgwLCBl dmVudC0+a2V5Y29kZSwgMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLyogYnVmZmVyIG92 ZXJmbG93IHdoZW4gYXV0b2ZpcmUgaWYgc3RvcFBvbGwgKi8KLSAgICAgICAgICAgICAgICAg ICAgaWYgKCFBbmRyb2lkX0hhc1JlcGVhdEV2ZW50KFNETF9KT1lCVVRUT05ET1dOLCBldmVu dC0+a2V5Y29kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BQb2xsID0gMTsK LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBqb3lfYnV0dG9uX2V2ZW50KGUuamJ1dHRvbi53aGljaCwgZS5qYnV0dG9uLmJ1dHRv biwgMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNETF9K T1lCVVRUT05VUDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl dHZhbCA9IHNkbGpveV9idXR0b25fZXZlbnQoMCwgZXZlbnQtPmtleWNvZGUsIDApOwotCi0g ICAgICAgICAgICAgICAgICAgIC8qIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIGF1dG9maXJlIGlm IHN0b3BQb2xsICovCi0gICAgICAgICAgICAgICAgICAgIGlmICghQW5kcm9pZF9IYXNSZXBl YXRFdmVudChTRExfSk9ZQlVUVE9OVVAsIGV2ZW50LT5rZXljb2RlKSkgewotICAgICAgICAg ICAgICAgICAgICAgICAgc3RvcFBvbGwgPSAxOwotICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgam95X2J1dHRvbl9ldmVudChlLmpidXR0b24ud2hpY2gsIGUuamJ1 dHRvbi5idXR0b24sIDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg Y2FzZSBTRExfSk9ZSEFUTU9USU9OOgorICAgICAgICAgICAgICAgIGpveV9oYXRfZXZlbnQo ZS5qaGF0LndoaWNoLCBlLmpoYXQuaGF0LCBlLmpoYXQudmFsdWUpOworICAgICAgICAgICAg ICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgICAgICBjYXNlIFNETF9NT1VTRU1PVElPTjoK KyAgICAgICAgICAgICAgICBzZGxfdWlfY29uc3VtZV9tb3VzZV9ldmVudCgmZSk7CisgICAg ICAgICAgICAgICAgaWYgKF9tb3VzZV9lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAg IG1vdXNlX21vdmUoZS5tb3Rpb24ueHJlbCwgZS5tb3Rpb24ueXJlbCk7CiAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTRExf S0VZVVA6Ci0gICAgICAgICAgICBjYXNlIFNETF9LRVlET1dOOgotICAgICAgICAgICAgICAg IHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljIGludCBjdHJsX2Rvd24gPSAwOwotICAg ICAgICAgICAgICAgICAgICBzdGF0aWMgaW50IGFsdF9kb3duID0gMDsKLSAgICAgICAgICAg ICAgICAgICAgc3RhdGljIGludCBzaGlmdF9kb3duID0gMDsKLQotICAgICAgICAgICAgICAg ICAgICBpbnQgZG93biA9IChldmVudC0+ZXZlbnRUeXBlID09IFNETF9LRVlET1dOKTsKLSAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtb2RpZmllciA9IGV2ZW50LT5tb2Rp ZmllcjsKLSAgICAgICAgICAgICAgICAgICAgaW50IGN0cmwgPSAoKG1vZGlmaWVyICYgS0VZ Qk9BUkRfQ1RSTF9GTEFHKSAhPSAwKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGFsdCA9 ICgobW9kaWZpZXIgJiBLRVlCT0FSRF9BTFRfRkxBRykgIT0gMCk7Ci0gICAgICAgICAgICAg ICAgICAgIGludCBzaGlmdCA9ICgobW9kaWZpZXIgJiBLRVlCT0FSRF9TSElGVF9GTEFHKSAh PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBrY29kZSA9ICh1bnNp Z25lZCBsb25nKWV2ZW50LT5rZXljb2RlOwotCi0gICAgICAgICAgICAgICAgICAgIGludCBr bW9kID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoY3RybCkgewotICAgICAgICAg ICAgICAgICAgICAgICAga21vZCB8PSBLTU9EX0xDVFJMOwotICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhbHQpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGttb2QgfD0gS01PRF9MQUxUOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgIGlmIChzaGlmdCkgewotICAgICAgICAgICAgICAgICAgICAgICAg a21vZCB8PSBLTU9EX0xTSElGVDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgICBpZiAoZG93bikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0 cmwgfHwgKGtjb2RlID09IFNETEtfVEFCKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICghY3RybF9kb3duKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGtleWJvYXJkX2tleV9wcmVzc2VkKCh1bnNpZ25lZCBsb25nKVNETEtfVEFCKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg Y3RybF9kb3duKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgICAgICBpZiAoYWx0IHx8IChrY29kZSA9PSBTRExLX0xDVFJMKSkgewotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmICghYWx0X2Rvd24pIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAga2V5Ym9hcmRfa2V5X3ByZXNzZWQoKHVuc2lnbmVkIGxvbmcp U0RMS19MQ1RSTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFsdF9kb3duKys7Ci0gICAgICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hpZnQgfHwgKGtjb2RlID09IFNE TEtfTFNISUZUKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hpZnRf ZG93bikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlib2FyZF9rZXlf cHJlc3NlZCgodW5zaWduZWQgbG9uZylTRExLX0xTSElGVCk7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0X2Rvd24r KzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg IHVpX2Rpc3BsYXlfa2JkX3N0YXR1cyhldmVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICByZXR2YWwgPSBzZGxrYmRfcHJlc3Moa2NvZGUsIDApOwotICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdWlfZGlzcGxheV9rYmRfc3Rh dHVzKGV2ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHNkbGtiZF9y ZWxlYXNlKGtjb2RlLCAwKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0cmwg fHwgKGtjb2RlID09IFNETEtfVEFCKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmIChrY29kZSA9PSBTRExLX1RBQikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjdHJsX2Rvd24gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3RybF9kb3duKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGN0cmxfZG93bi0tOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN0cmxfZG93 bikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlib2FyZF9rZXlfcmVs ZWFzZWQoKHVuc2lnbmVkIGxvbmcpU0RMS19UQUIpOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChhbHQgfHwgKGtjb2RlID09IFNETEtfTENUUkwpKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGtjb2RlID09IFNETEtfTENUUkwpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYWx0X2Rvd24gPSAwOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWx0X2Rv d24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0X2Rvd24tLTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCFhbHRfZG93bikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr ZXlib2FyZF9rZXlfcmVsZWFzZWQoKHVuc2lnbmVkIGxvbmcpU0RMS19MQ1RSTCk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNoaWZ0IHx8IChrY29kZSA9PSBTRExLX0xT SElGVCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2NvZGUgPT0gU0RM S19MU0hJRlQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRfZG93 biA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChzaGlmdF9kb3duKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNoaWZ0X2Rvd24tLTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaGlmdF9kb3duKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJvYXJkX2tleV9yZWxlYXNlZCgodW5z aWduZWQgbG9uZylTRExLX0xTSElGVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgIHN0b3BQb2xsID0gMTsKKyAgICAgICAgICAgIGNhc2UgU0RM X01PVVNFQlVUVE9ORE9XTjoKKyAgICAgICAgICAgIGNhc2UgU0RMX01PVVNFQlVUVE9OVVA6 CisgICAgICAgICAgICAgICAgaWYgKF9tb3VzZV9lbmFibGVkKSB7CisgICAgICAgICAgICAg ICAgICAgIG1vdXNlX2J1dHRvbigoaW50KShlLmJ1dHRvbi5idXR0b24pLCAoZS5idXR0b24u c3RhdGUgPT0gU0RMX1BSRVNTRUQpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8q IFNETF9FdmVudFN0YXRlKFNETF9WSURFT1JFU0laRSwgU0RMX0lHTk9SRSk7ICovCisgICAg ICAgICAgICAgICAgdWlfaGFuZGxlX21pc2Nfc2RsX2V2ZW50KGUpOworICAgICAgICAgICAg ICAgIC8qIFNETF9FdmVudFN0YXRlKFNETF9WSURFT1JFU0laRSwgU0RMX0VOQUJMRSk7ICov CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0jZWxzZQorfQor Citqb3lzdGlja19hY3Rpb25fdCB1aV9kaXNwYXRjaF9ldmVudHNfZm9yX21lbnVfYWN0aW9u KHZvaWQpCit7CisgICAgU0RMX0V2ZW50IGU7CisgICAgdWlfbWVudV9hY3Rpb25fdCByZXR2 YWwgPSBNRU5VX0FDVElPTl9OT05FOworCiAgICAgd2hpbGUgKFNETF9Qb2xsRXZlbnQoJmUp KSB7CiAgICAgICAgIHN3aXRjaCAoZS50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFNETF9L RVlET1dOOgogICAgICAgICAgICAgICAgIHVpX2Rpc3BsYXlfa2JkX3N0YXR1cygmZSk7Ci0g ICAgICAgICAgICAgICAgcmV0dmFsID0gc2Rsa2JkX3ByZXNzKFNETDJ4X3RvX1NETDF4X0tl eXMoZS5rZXkua2V5c3ltLnN5bSksIGUua2V5LmtleXN5bS5tb2QpOworICAgICAgICAgICAg ICAgIHJldHZhbCA9IHNkbGtiZF9wcmVzc19mb3JfbWVudV9hY3Rpb24oU0RMMnhfdG9fU0RM MXhfS2V5cyhlLmtleS5rZXlzeW0uc3ltKSwgZS5rZXkua2V5c3ltLm1vZCk7CiAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNETF9LRVlVUDoKICAgICAgICAg ICAgICAgICB1aV9kaXNwbGF5X2tiZF9zdGF0dXMoJmUpOwotICAgICAgICAgICAgICAgIHJl dHZhbCA9IHNkbGtiZF9yZWxlYXNlKFNETDJ4X3RvX1NETDF4X0tleXMoZS5rZXkua2V5c3lt LnN5bSksIGUua2V5LmtleXN5bS5tb2QpOworICAgICAgICAgICAgICAgIHJldHZhbCA9IHNk bGtiZF9yZWxlYXNlX2Zvcl9tZW51X2FjdGlvbihTREwyeF90b19TREwxeF9LZXlzKGUua2V5 LmtleXN5bS5zeW0pLCBlLmtleS5rZXlzeW0ubW9kKTsKICAgICAgICAgICAgICAgICBicmVh azsKICNpZmRlZiBIQVZFX1NETF9OVU1KT1lTVElDS1MKICAgICAgICAgICAgIGNhc2UgU0RM X0pPWUFYSVNNT1RJT046Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gc2Rsam95X2F4aXNf ZXZlbnQoZS5qYXhpcy53aGljaCwgZS5qYXhpcy5heGlzLCBlLmpheGlzLnZhbHVlKTsKKyAg ICAgICAgICAgICAgICByZXR2YWwgPSBzZGxqb3lfYXhpc19ldmVudF9mb3JfbWVudV9hY3Rp b24oZS5qYXhpcy53aGljaCwgZS5qYXhpcy5heGlzLCBlLmpheGlzLnZhbHVlKTsKICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU0RMX0pPWUJVVFRPTkRPV046 CiAgICAgICAgICAgICAgICAgcmV0dmFsID0gc2Rsam95X2J1dHRvbl9ldmVudChlLmpidXR0 b24ud2hpY2gsIGUuamJ1dHRvbi5idXR0b24sIDEpOwpAQCAtNTAzLDcgKzMwOCw2IEBACiAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSNlbmRpZgogICAgIHJldHVy biByZXR2YWw7CiB9CiAKQEAgLTc4Miw3ICs1ODYsNiBAQAogdm9pZCB1aV9yZXNvdXJjZXNf c2h1dGRvd24odm9pZCkKIHsKICAgICBEQkcoKCIlcyIsIF9fZnVuY19fKSk7Ci0gICAgam95 X2FyY2hfcmVzb3VyY2VzX3NodXRkb3duKCk7CiAgICAgc2Rsa2JkX3Jlc291cmNlc19zaHV0 ZG93bigpOwogfQogCkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdWkuaAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdWkuaAkocmV2 aXNpb25lIDQxMDEwKQorKysgZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL3VpLmgJKGNv cGlhIGRpIGxhdm9ybykKQEAgLTUwLDkgKzUwLDExIEBACiAKIHN0cnVjdCB2aWRlb19jYW52 YXNfczsKIHN0cnVjdCBwYWxldHRlX3M7CitlbnVtIGpveXN0aWNrX2FjdGlvbl9lOwogCiBl eHRlcm4gdm9pZCB1aV9oYW5kbGVfbWlzY19zZGxfZXZlbnQoU0RMX0V2ZW50IGUpOwotZXh0 ZXJuIHVpX21lbnVfYWN0aW9uX3QgdWlfZGlzcGF0Y2hfZXZlbnRzKHZvaWQpOworZXh0ZXJu IHZvaWQgdWlfZGlzcGF0Y2hfZXZlbnRzKHZvaWQpOworZXh0ZXJuIGVudW0gam95c3RpY2tf YWN0aW9uX2UgdWlfZGlzcGF0Y2hfZXZlbnRzX2Zvcl9tZW51X2FjdGlvbih2b2lkKTsKIGV4 dGVybiB2b2lkIHVpX2V4aXQodm9pZCk7CiBleHRlcm4gdm9pZCB1aV9tZXNzYWdlKGNvbnN0 IGNoYXIgKmZvcm1hdCwgLi4uKTsKIGV4dGVybiBjaGFyICp1aV9zZWxlY3RfZmlsZShjb25z dCBjaGFyICp0aXRsZSwgY2hhciAqKCpyZWFkX2NvbnRlbnRzX2Z1bmMpKGNvbnN0IGNoYXIg KiwgdW5zaWduZWQgaW50IHVuaXQpLCB1bnNpZ25lZCBpbnQgdW5pdCwKSW5kZXg6IGRldi92 aWNlL3RydW5rL3NyYy9hcmNoL3NkbC91aW1lbnUuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYv dmljZS90cnVuay9zcmMvYXJjaC9zZGwvdWltZW51LmMJKHJldmlzaW9uZSA0MTAxMCkKKysr IGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC91aW1lbnUuYwkoY29waWEgZGkgbGF2b3Jv KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgImludGVycnVwdC5oIgogI2luY2x1ZGUg ImlvdXRpbC5oIgogI2luY2x1ZGUgImpveS5oIgorI2luY2x1ZGUgImpveXN0aWNrLmgiCiAj aW5jbHVkZSAia2JkLmgiCiAjaW5jbHVkZSAibGliLmgiCiAjaW5jbHVkZSAibWFjaGluZS5o IgpAQCAtOTUyLDcgKzk1Myw3IEBACiB7CiAgICAgU0RMX0V2ZW50IGU7CiAgICAgaW50IGdv dF9rZXkgPSAwOwotICAgIHVpX21lbnVfYWN0aW9uX3QgYWN0aW9uID0gTUVOVV9BQ1RJT05f Tk9ORTsKKyAgICBqb3lzdGlja19hY3Rpb25fdCBhY3Rpb24gPSBOT05FOwogI2lmZGVmIFVT RV9TRExVSTIKICAgICBpbnQgaTsKICNlbmRpZgpAQCAtMTA1OSw3ICsxMDYwLDcgQEAKIAog I2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUwogICAgICAgICAgICAgY2FzZSBTRExfSk9Z QVhJU01PVElPTjoKLSAgICAgICAgICAgICAgICBhY3Rpb24gPSBzZGxqb3lfYXhpc19ldmVu dChlLmpheGlzLndoaWNoLCBlLmpheGlzLmF4aXMsIGUuamF4aXMudmFsdWUpOworICAgICAg ICAgICAgICAgIGFjdGlvbiA9IHNkbGpveV9heGlzX2V2ZW50X2Zvcl9tZW51X2FjdGlvbihl LmpheGlzLndoaWNoLCBlLmpheGlzLmF4aXMsIGUuamF4aXMudmFsdWUpOwogICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTRExfSk9ZQlVUVE9ORE9XTjoKICAg ICAgICAgICAgICAgICBhY3Rpb24gPSBzZGxqb3lfYnV0dG9uX2V2ZW50KGUuamJ1dHRvbi53 aGljaCwgZS5qYnV0dG9uLmJ1dHRvbiwgMSk7CkBAIC0xMzc0LDcgKzEzNzUsNyBAQAogCiAg ICAgZG8gewogICAgICAgICBTRExfRGVsYXkoMjApOwotICAgICAgICByZXR2YWwgPSB1aV9k aXNwYXRjaF9ldmVudHMoKTsKKyAgICAgICAgcmV0dmFsID0gdWlfZGlzcGF0Y2hfZXZlbnRz X2Zvcl9tZW51X2FjdGlvbigpOwogI2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUwogICAg ICAgICBpZiAocmV0dmFsID09IE1FTlVfQUNUSU9OX05PTkUgfHwgcmV0dmFsID09IE1FTlVf QUNUSU9OX05PTkVfUkVMRUFTRSkgewogICAgICAgICAgICAgcmV0dmFsID0gc2Rsam95X2F1 dG9yZXBlYXQoKTsKSW5kZXg6IGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC92aWRlb19z ZGwxLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL3Zp ZGVvX3NkbDEuYwkocmV2aXNpb25lIDQxMDEwKQorKysgZGV2L3ZpY2UvdHJ1bmsvc3JjL2Fy Y2gvc2RsL3ZpZGVvX3NkbDEuYwkoY29waWEgZGkgbGF2b3JvKQpAQCAtNDAyLDEwICs0MDIs NiBAQAogewogICAgIERCRygoIiVzIiwgX19mdW5jX18pKTsKIAotICAgIGlmIChtYWNoaW5l X2NsYXNzID09IFZJQ0VfTUFDSElORV9WU0lEKSB7Ci0gICAgICAgIGpveV9hcmNoX3Jlc291 cmNlc19zaHV0ZG93bigpOwotICAgIH0KLQogI2lmIGRlZmluZWQoSEFWRV9IV1NDQUxFKQog ICAgIGxpYl9mcmVlKGFzcGVjdF9yYXRpb19zKTsKICNlbmRpZgpJbmRleDogZGV2L3ZpY2Uv dHJ1bmsvc3JjL2FyY2gvc2RsL3ZpZGVvX3NkbDIuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYv dmljZS90cnVuay9zcmMvYXJjaC9zZGwvdmlkZW9fc2RsMi5jCShyZXZpc2lvbmUgNDEwMTAp CisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdmlkZW9fc2RsMi5jCShjb3BpYSBk aSBsYXZvcm8pCkBAIC00NDAsMTAgKzQ0MCw2IEBACiB7CiAgICAgREJHKCgiJXMiLCBfX2Z1 bmNfXykpOwogCi0gICAgaWYgKG1hY2hpbmVfY2xhc3MgPT0gVklDRV9NQUNISU5FX1ZTSUQp IHsKLSAgICAgICAgam95X2FyY2hfcmVzb3VyY2VzX3NodXRkb3duKCk7Ci0gICAgfQotCiAg ICAgbGliX2ZyZWUoYXNwZWN0X3JhdGlvX3MpOwogICAgIGxpYl9mcmVlKHNkbDJfcmVuZGVy ZXJfbmFtZSk7CiAgICAgbGliX2ZyZWUoYXNwZWN0X3JhdGlvX2ZhY3RvcnlfdmFsdWVfcyk7 CkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdnN5bmNhcmNoLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL3ZzeW5jYXJjaC5jCShy ZXZpc2lvbmUgNDEwMTApCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdnN5bmNh cmNoLmMJKGNvcGlhIGRpIGxhdm9ybykKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJ2 aWNlLmgiCiAKICNpbmNsdWRlICJqb3kuaCIKKyNpbmNsdWRlICJqb3lzdGljay5oIgogI2lu Y2x1ZGUgImtiZGJ1Zi5oIgogI2luY2x1ZGUgImxpZ2h0cGVuZHJ2LmgiCiAjaW5jbHVkZSAi bWFjaGluZS5oIgpAQCAtODgsNyArODksNyBAQAogdm9pZCB2c3luY2FyY2hfcHJlc3luYyh2 b2lkKQogewogICAgIGlmIChzZGxfdmtiZF9zdGF0ZSAmIFNETF9WS0JEX0FDVElWRSkgewot ICAgICAgICB3aGlsZSAoc2RsX3ZrYmRfcHJvY2Vzcyh1aV9kaXNwYXRjaF9ldmVudHMoKSkp IHsKKyAgICAgICAgd2hpbGUgKHNkbF92a2JkX3Byb2Nlc3ModWlfZGlzcGF0Y2hfZXZlbnRz X2Zvcl9tZW51X2FjdGlvbigpKSkgewogICAgICAgICB9CiAjaWZkZWYgSEFWRV9TRExfTlVN Sk9ZU1RJQ0tTCiAgICAgICAgIHNkbF92a2JkX3Byb2Nlc3Moc2Rsam95X2F1dG9yZXBlYXQo KSk7CkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvam95cG9ydC9qb3lzdGljay5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGRldi92aWNlL3RydW5rL3NyYy9qb3lwb3J0L2pveXN0aWNrLmMJKHJl dmlzaW9uZSA0MTAxMCkKKysrIGRldi92aWNlL3RydW5rL3NyYy9qb3lwb3J0L2pveXN0aWNr LmMJKGNvcGlhIGRpIGxhdm9ybykKQEAgLTQ0LDE0ICs0NCwxNyBAQAogI2luY2x1ZGUgImpv eXN0aWNrLmgiCiAjaW5jbHVkZSAia2JkLmgiCiAjaW5jbHVkZSAibGliLmgiCisjaW5jbHVk ZSAibG9nLmgiCiAjaW5jbHVkZSAibWFjaGluZS5oIgogI2luY2x1ZGUgIm1haW5jcHUuaCIK ICNpbmNsdWRlICJuZXR3b3JrLmgiCiAjaW5jbHVkZSAicmVzb3VyY2VzLmgiCiAjaW5jbHVk ZSAic25hcHNob3QuaCIKKyNpbmNsdWRlICJzeXNmaWxlLmgiCiAjaW5jbHVkZSAidHlwZXMu aCIKICNpbmNsdWRlICJ1aWFwaS5oIgogI2luY2x1ZGUgInVzZXJwb3J0X2pveXN0aWNrLmgi CisjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgInZpY2UtZXZlbnQuaCIKIAogLyogQ29u dHJvbCBwb3J0IDwtLT4gSm95c3RpY2sgY29ubmVjdGlvbnM6CkBAIC0xNzEsNiArMTc0LDE4 IEBACiAKIC8qISBcdG9kbyBTUlQ6IG9mZnNldCBpcyB1bnVzZWQhICovCiAKKy8qIEpveXN0 aWNrIG1hcHBpbmcgZmlsZW5hbWUgKi8KK3N0YXRpYyBjaGFyICpqb3ltYXBfZmlsZSA9IE5V TEw7CisKKy8qKiBcYnJpZWYgIFRlbXBvcmFyeSBjb3B5IG9mIHRoZSBkZWZhdWx0IGpveW1h cCBmaWxlIG5hbWUKKyAqCisgKiBBdm9pZHMgc2lsbHkgY2FzdGluZyBhd2F5IG9mIGNvbnN0 CisgKi8KK3N0YXRpYyBjaGFyICpqb3ltYXBfZmFjdG9yeSA9IE5VTEw7CisKKworc3RhdGlj IGxvZ190IGpveV9sb2cgPSBMT0dfRVJSOworCiBzdGF0aWMgdm9pZCBqb3lzdGlja19sYXRj aF9tYXRyaXgoQ0xPQ0sgb2Zmc2V0KQogewogICAgIHVpbnQ4X3QgaWR4OwpAQCAtODIzLDMx ICs4MzgsNyBAQAogICAgIHJldHVybiAwOwogfQogCi0vKiBBY3Rpb25zIHRvIHBlcmZvcm0g b24gam95c3RpY2sgaW5wdXQgKi8KLXR5cGVkZWYgZW51bSB7Ci0gICAgTk9ORSA9IDAsCiAK LSAgICAvKiBKb3lzdGljayBtb3ZlbWVudCBvciBidXR0b24gcHJlc3MgKi8KLSAgICBKT1lT VElDSyA9IDEsCi0KLSAgICAvKiBLZXlib2FyZCBrZXkgcHJlc3MgKi8KLSAgICBLRVlCT0FS RCA9IDIsCi19IGpveXN0aWNrX2FjdGlvbl90OwotCi0KLS8qIElucHV0IG1hcHBpbmcgZm9y IGVhY2ggZGlyZWN0aW9uL2J1dHRvbi9ldGMgKi8KLXR5cGVkZWYgc3RydWN0IGpveXN0aWNr X21hcHBpbmdfcyB7Ci0gICAgLyogQWN0aW9uIHRvIHBlcmZvcm0gKi8KLSAgICBqb3lzdGlj a19hY3Rpb25fdCBhY3Rpb247Ci0KLSAgICB1bmlvbiB7Ci0gICAgICAgIHVpbnQxNl90IGpv eV9waW47Ci0KLSAgICAgICAgLyoga2V5WzBdID0gcm93LCBrZXlbMV0gPSBjb2x1bW4gKi8K LSAgICAgICAgaW50IGtleVsyXTsKLSAgICB9IHZhbHVlOwotfSBqb3lzdGlja19tYXBwaW5n X3Q7Ci0KIHR5cGVkZWYgc3RydWN0IGpveXN0aWNrX2F4aXNfbWFwcGluZ19zIHsKICAgICAv KiBQcmV2aW91cyBzdGF0ZSBvZiBpbnB1dCAqLwogICAgIHVpbnQ4X3QgcHJldjsKQEAgLTg2 NCw5ICs4NTUsNyBAQAogICAgIHN0cnVjdCBqb3lzdGlja19tYXBwaW5nX3MgcmlnaHQ7CiB9 IGpveXN0aWNrX2hhdF9tYXBwaW5nX3Q7CiAKLSNpZm5kZWYgSEFWRV9TRExfTlVNSk9ZU1RJ Q0tTCiBzdGF0aWMgaW50IG51bV9qb3lzdGlja19kZXZpY2VzID0gMDsKLSNlbmRpZgogCiAv KiogXGJyaWVmICBKb3lzdGljayBkZXZpY2UgbmFtZSBsZW5ndGggKGluY2x1ZGluZyAwKQog ICovCkBAIC04ODEsMTIgKzg3MCwxMyBAQAogICAgIGpveXN0aWNrX2F4aXNfbWFwcGluZ190 ICpheGlzX21hcHBpbmc7CiAgICAgam95c3RpY2tfbWFwcGluZ190ICpidXR0b25fbWFwcGlu ZzsKICAgICBqb3lzdGlja19oYXRfbWFwcGluZ190ICpoYXRfbWFwcGluZzsKKyAgICBpbnQg bnVtX2F4ZXM7CisgICAgaW50IG51bV9idXR0b25zOworICAgIGludCBudW1faGF0czsKIH0g am95c3RpY2tfZGV2aWNlX3Q7CiAKIAotI2lmbmRlZiBIQVZFX1NETF9OVU1KT1lTVElDS1MK IHN0YXRpYyBzdHJ1Y3Qgam95c3RpY2tfZGV2aWNlX3MgKmpveXN0aWNrX2RldmljZXMgPSBO VUxMOwotI2VuZGlmCiAKIHN0YXRpYyBpbnQgc2V0X2pveXN0aWNrX2RldmljZShpbnQgdmFs LCB2b2lkICpwYXJhbSkKIHsKQEAgLTkyMSw2ICs5MTEsMzA5IEBACiAgICAgcmV0dXJuIDA7 CiB9CiAKK2ludCBqb3lfYXJjaF9tYXBwaW5nX2R1bXAoY29uc3QgY2hhciAqZmlsZW5hbWUp Cit7CisgICAgRklMRSAqZnA7CisgICAgaW50IGksIGs7CisgICAgaW50IGo7CisgICAgam95 c3RpY2tfYWN0aW9uX3QgdDsKKyAgICBjaGFyICpob3RrZXlfcGF0aCA9IE5VTEw7CisKKyNp ZmRlZiBTRExfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBfX2Z1bmNfXyk7 CisjZW5kaWYKKworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVy biAtMTsKKyAgICB9CisKKyAgICBmcCA9IGZvcGVuKGZpbGVuYW1lLCBNT0RFX1dSSVRFX1RF WFQpOworCisgICAgaWYgKGZwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAg IH0KKworICAgIGZwcmludGYoZnAsICIjIFZJQ0Ugam95c3RpY2sgbWFwcGluZyBmaWxlXG4i CisgICAgICAgICAgICAiI1xuIgorICAgICAgICAgICAgIiMgQSBqb3lzdGljayBtYXAgaXMg cmVhZCBpbiBhcyBwYXRjaCB0byB0aGUgY3VycmVudCBtYXAuXG4iCisgICAgICAgICAgICAi I1xuIgorICAgICAgICAgICAgIiMgRmlsZSBmb3JtYXQ6XG4iCisgICAgICAgICAgICAiIyAt IGNvbW1lbnQgbGluZXMgc3RhcnQgd2l0aCAnIydcbiIKKyAgICAgICAgICAgICIjIC0ga2V5 d29yZCBsaW5lcyBzdGFydCB3aXRoICcha2V5d29yZCdcbiIKKyAgICAgICAgICAgICIjIC0g bm9ybWFsIGxpbmUgaGFzICdqb3ludW0gaW5wdXR0eXBlIGlucHV0aW5kZXggYWN0aW9uJ1xu IgorICAgICAgICAgICAgIiNcbiIKKyAgICAgICAgICAgICIjIEtleXdvcmRzIGFuZCB0aGVp ciBsaW5lcyBhcmU6XG4iCisgICAgICAgICAgICAiIyAnIUNMRUFSJyAgICBjbGVhciBhbGwg bWFwcGluZ3NcbiIKKyAgICAgICAgICAgICIjXG4iCisgICAgICAgICAgICApOworCisgICAg ZnByaW50ZihmcCwgIiMgaW5wdXR0eXBlOlxuIgorICAgICAgICAgICAgIiMgMCAgICAgIGF4 aXNcbiIKKyAgICAgICAgICAgICIjIDEgICAgICBidXR0b25cbiIKKyAgICAgICAgICAgICIj IDIgICAgICBoYXRcbiIKKyAgICAgICAgICAgICIjXG4iCisgICAgICAgICAgICAiIyBOb3Rl IHRoYXQgZWFjaCBheGlzIGhhcyAyIGlucHV0aW5kZXggZW50cmllcyBhbmQgZWFjaCBoYXQg aGFzIDQuXG4iCisgICAgICAgICAgICAiI1xuIgorICAgICAgICAgICAgIiMgYWN0aW9uIFth Y3Rpb25fcGFyYW1ldGVyc106XG4iCisgICAgICAgICAgICAiIyAwICAgICAgICAgICAgICAg bm9uZVxuIgorICAgICAgICAgICAgIiMgMSBwb3J0IHBpbiAgICAgIGpveXN0aWNrIChwaW46 IDEvMi80LzgvMTYvMzIvNjQgPSB1L2QvbC9yL2ZpcmUvZmlyZTIvZmlyZTMpXG4iCisgICAg ICAgICAgICAiIyAyIHJvdyBjb2wgICAgICAga2V5Ym9hcmRcbiIKKyAgICAgICAgICAgICIj IDMgICAgICAgICAgICAgICBtYXBcbiIKKyAgICAgICAgICAgICIjIDQgICAgICAgICAgICAg ICBVSSBhY3RpdmF0ZVxuIgorICAgICAgICAgICAgIiMgNSBwYXRoJnRvJml0ZW0gIFVJIGZ1 bmN0aW9uXG4iCisgICAgICAgICAgICAiI1xuXG4iCisgICAgICAgICAgICApOworCisgICAg ZnByaW50ZihmcCwgIiFDTEVBUlxuXG4iKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1f am95c3RpY2tfZGV2aWNlczsgKytpKSB7CisgICAgICAgIGsgPSAwOworICAgICAgICBmcHJp bnRmKGZwLCAiIyAlc1xuIiwgam95c3RpY2tfZGV2aWNlc1tpXS5qbmFtZSk7CisgICAgICAg IGZvciAoaiA9IDA7IGogPCBqb3lzdGlja19kZXZpY2VzW2ldLm51bV9heGVzOyBqKyspIHsK KyAgICAgICAgICAgIHQgPSBqb3lzdGlja19kZXZpY2VzW2ldLmF4aXNfbWFwcGluZ1tqXS5w b3NpdGl2ZV9kaXJlY3Rpb24uYWN0aW9uOworICAgICAgICAgICAgZnByaW50ZihmcCwgIiVp ICV1ICVpICV1IiwgaSwgMCwgaysrLCB0KTsKKyAgICAgICAgICAgIHN3aXRjaCAodCkgewor ICAgICAgICAgICAgICAgIGNhc2UgSk9ZU1RJQ0s6CisgICAgICAgICAgICAgICAgICAgIGZw cmludGYoZnAsICIgJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpveXN0aWNr X2RldmljZXNbaV0uYXhpc19tYXBwaW5nW2pdLnBvc2l0aXZlX2RpcmVjdGlvbi52YWx1ZS5q b3lfcGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBLRVlCT0FSRDoKKyAgICAgICAg ICAgICAgICAgICAgZnByaW50ZihmcCwgIiAlaSAlaSIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgam95c3RpY2tfZGV2aWNlc1tpXS5heGlzX21hcHBpbmdbal0ucG9zaXRpdmVf ZGlyZWN0aW9uLnZhbHVlLmtleVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBq b3lzdGlja19kZXZpY2VzW2ldLmF4aXNfbWFwcGluZ1tqXS5wb3NpdGl2ZV9kaXJlY3Rpb24u dmFsdWUua2V5WzFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLypjYXNlIFVJX0ZVTkNUSU9O OgorICAgICAgICAgICAgICAgICAgICBob3RrZXlfcGF0aCA9IHNkbF91aV9ob3RrZXlfcGF0 aChzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52YWx1ZS51aV9mdW5jdGlvbik7CisgICAg ICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIgJXMiLCBob3RrZXlfcGF0aCk7CisgICAg ICAgICAgICAgICAgICAgIGxpYl9mcmVlKGhvdGtleV9wYXRoKTsKKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ki8KKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZwcmludGYoZnAs ICJcbiIpOworICAgICAgICAgICAgdCA9IGpveXN0aWNrX2RldmljZXNbaV0uYXhpc19tYXBw aW5nW2pdLm5lZ2F0aXZlX2RpcmVjdGlvbi5hY3Rpb247CisgICAgICAgICAgICBmcHJpbnRm KGZwLCAiJWkgJXUgJWkgJXUiLCBpLCAwLCBrKyssIHQpOworICAgICAgICAgICAgc3dpdGNo ICh0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBKT1lTVElDSzoKKyAgICAgICAgICAgICAg ICAgICAgZnByaW50ZihmcCwgIiAlaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg am95c3RpY2tfZGV2aWNlc1tpXS5heGlzX21hcHBpbmdbal0ubmVnYXRpdmVfZGlyZWN0aW9u LnZhbHVlLmpveV9waW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEtFWUJPQVJEOgor ICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiICVpICVpIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBqb3lzdGlja19kZXZpY2VzW2ldLmF4aXNfbWFwcGluZ1tqXS5u ZWdhdGl2ZV9kaXJlY3Rpb24udmFsdWUua2V5WzBdLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGpveXN0aWNrX2RldmljZXNbaV0uYXhpc19tYXBwaW5nW2pdLm5lZ2F0aXZlX2Rp cmVjdGlvbi52YWx1ZS5rZXlbMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvKmNhc2UgVUlf RlVOQ1RJT046CisgICAgICAgICAgICAgICAgICAgIGhvdGtleV9wYXRoID0gc2RsX3VpX2hv dGtleV9wYXRoKHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLnVpX2Z1bmN0aW9u KTsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiAlcyIsIGhvdGtleV9wYXRo KTsKKyAgICAgICAgICAgICAgICAgICAgbGliX2ZyZWUoaG90a2V5X3BhdGgpOworICAgICAg ICAgICAgICAgICAgICBicmVhazsqLworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnBy aW50ZihmcCwgIlxuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZwcmludGYoZnAs ICJcbiIpOworICAgICAgICB9CisgICAgICAgIGZwcmludGYoZnAsICJcblxuIik7CisgICAg fQorCisgICAgZmNsb3NlKGZwKTsKKworICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyB2 b2lkIGpveV9hcmNoX2tleXdvcmRfY2xlYXIodm9pZCkKK3sKKyAgICBpbnQgaSwgazsKKwor ICAgIGZvciAoaSA9IDA7IGkgPCBudW1fam95c3RpY2tfZGV2aWNlczsgKytpKSB7CisgICAg ICAgIGZvciAoayA9IDA7IGsgPCBqb3lzdGlja19kZXZpY2VzW2ldLm51bV9heGVzOyArK2sp IHsKKyAgICAgICAgICAgIGpveXN0aWNrX2RldmljZXNbaV0uYXhpc19tYXBwaW5nW2tdLnBv c2l0aXZlX2RpcmVjdGlvbi5hY3Rpb24gPSBOT05FOworICAgICAgICAgICAgam95c3RpY2tf ZGV2aWNlc1tpXS5heGlzX21hcHBpbmdba10ubmVnYXRpdmVfZGlyZWN0aW9uLmFjdGlvbiA9 IE5PTkU7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChrID0gMDsgayA8IGpveXN0aWNrX2Rl dmljZXNbaV0ubnVtX2J1dHRvbnM7ICsraykgeworICAgICAgICAgICAgam95c3RpY2tfZGV2 aWNlc1tpXS5idXR0b25fbWFwcGluZ1trXS5hY3Rpb24gPSBOT05FOworICAgICAgICB9Cisg ICAgICAgIGZvciAoayA9IDA7IGsgPCBqb3lzdGlja19kZXZpY2VzW2ldLm51bV9oYXRzOyAr K2spIHsKKyAgICAgICAgICAgIGpveXN0aWNrX2RldmljZXNbaV0uaGF0X21hcHBpbmdba10u dXAuYWN0aW9uID0gTk9ORTsKKyAgICAgICAgICAgIGpveXN0aWNrX2RldmljZXNbaV0uaGF0 X21hcHBpbmdba10uZG93bi5hY3Rpb24gPSBOT05FOworICAgICAgICAgICAgam95c3RpY2tf ZGV2aWNlc1tpXS5oYXRfbWFwcGluZ1trXS5sZWZ0LmFjdGlvbiA9IE5PTkU7CisgICAgICAg ICAgICBqb3lzdGlja19kZXZpY2VzW2ldLmhhdF9tYXBwaW5nW2tdLnJpZ2h0LmFjdGlvbiA9 IE5PTkU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGpveV9hcmNoX3Bh cnNlX2tleXdvcmQoY2hhciAqYnVmZmVyKQoreworICAgIGNoYXIgKmtleTsKKworICAgIGtl eSA9IHN0cnRvayhidWZmZXIgKyAxLCAiIFx0OiIpOworCisgICAgaWYgKCFzdHJjbXAoa2V5 LCAiQ0xFQVIiKSkgeworICAgICAgICBqb3lfYXJjaF9rZXl3b3JkX2NsZWFyKCk7CisgICAg fQorfQorCitzdGF0aWMgdm9pZCBqb3lfYXJjaF9wYXJzZV9lbnRyeShjaGFyICpidWZmZXIp Cit7CisgICAgY2hhciAqcDsKKyAgICBpbnQgam95bnVtLCBpbnB1dGluZGV4LCBkYXRhMSA9 IDAsIGRhdGEyID0gMDsKKyAgICBpbnQgaW5wdXR0eXBlOworICAgIGpveXN0aWNrX2FjdGlv bl90IGFjdGlvbjsKKyAgICBpbnQgYXhpc19vcl9oYXRfaW5kZXgsIGRpcmVjdGlvbjsKKwor ICAgIHAgPSBzdHJ0b2soYnVmZmVyLCAiIFx0OiIpOworCisgICAgam95bnVtID0gYXRvaShw KTsKKworICAgIGlmIChqb3ludW0gPj0gbnVtX2pveXN0aWNrX2RldmljZXMpIHsKKyAgICAg ICAgbG9nX2Vycm9yKGpveV9sb2csICJDb3VsZCBub3QgZmluZCBqb3lzdGljayAlaSEiLCBq b3ludW0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcCA9IHN0cnRvayhOVUxM LCAiIFx0LCIpOworICAgIGlmIChwICE9IE5VTEwpIHsKKyAgICAgICAgaW5wdXR0eXBlID0g YXRvaShwKTsKKyAgICAgICAgcCA9IHN0cnRvayhOVUxMLCAiIFx0LCIpOworICAgICAgICBp ZiAocCAhPSBOVUxMKSB7CisgICAgICAgICAgICBpbnB1dGluZGV4ID0gYXRvaShwKTsKKyAg ICAgICAgICAgIHAgPSBzdHJ0b2soTlVMTCwgIiBcdCIpOworICAgICAgICAgICAgaWYgKHAg IT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGFjdGlvbiA9IChqb3lzdGlja19hY3Rpb25f dClhdG9pKHApOworCisgICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICAg ICAgICAgICAgICAgICAgY2FzZSBKT1lTVElDSzoKKyAgICAgICAgICAgICAgICAgICAgY2Fz ZSBQT1RfQVhJUzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlCT0FSRDoKKyAgICAg ICAgICAgICAgICAgICAgICAgIHAgPSBzdHJ0b2soTlVMTCwgIiBcdCIpOworICAgICAgICAg ICAgICAgICAgICAgICAgZGF0YTEgPSBhdG9pKHApOworICAgICAgICAgICAgICAgICAgICAg ICAgcCA9IHN0cnRvayhOVUxMLCAiIFx0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBk YXRhMiA9IGF0b2kocCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5wdXR0 eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAg ICAgICAgIGF4aXNfb3JfaGF0X2luZGV4ID0gaW5wdXRpbmRleCAvIDI7CisgICAgICAgICAg ICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBpbnB1dGluZGV4ICUgMjsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChheGlzX29yX2hhdF9pbmRleCA8IGpveXN0aWNrX2RldmljZXNb am95bnVtXS5udW1fYXhlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChk aXJlY3Rpb24gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3lz dGlja19kZXZpY2VzW2pveW51bV0uYXhpc19tYXBwaW5nW2F4aXNfb3JfaGF0X2luZGV4XS5w b3NpdGl2ZV9kaXJlY3Rpb24uYWN0aW9uID0gYWN0aW9uOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2FzZSBKT1lTVElDSzoKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBqb3lzdGlja19kZXZpY2VzW2pveW51bV0uYXhpc19tYXBwaW5n W2F4aXNfb3JfaGF0X2luZGV4XS5wb3NpdGl2ZV9kaXJlY3Rpb24udmFsdWUuam95X3BpbiA9 IGRhdGExOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQT1RfQVhJUzoK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3lzdGlja19kZXZp Y2VzW2pveW51bV0uYXhpc19tYXBwaW5nW2F4aXNfb3JfaGF0X2luZGV4XS5wb3NpdGl2ZV9k aXJlY3Rpb24udmFsdWUuam95X3BpbiA9IGRhdGExOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSBLRVlCT0FSRDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBqb3lzdGlja19kZXZpY2VzW2pveW51bV0uYXhpc19tYXBwaW5nW2F4aXNf b3JfaGF0X2luZGV4XS5wb3NpdGl2ZV9kaXJlY3Rpb24udmFsdWUua2V5WzBdID0gZGF0YTE7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam95c3RpY2tfZGV2 aWNlc1tqb3ludW1dLmF4aXNfbWFwcGluZ1theGlzX29yX2hhdF9pbmRleF0ucG9zaXRpdmVf ZGlyZWN0aW9uLnZhbHVlLmtleVsxXSA9IGRhdGEyOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGpveXN0aWNrX2RldmljZXNbam95bnVtXS5heGlzX21hcHBpbmdbYXhpc19v cl9oYXRfaW5kZXhdLm5lZ2F0aXZlX2RpcmVjdGlvbi5hY3Rpb24gPSBhY3Rpb247CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpPWVNUSUNLOgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpveXN0aWNrX2RldmljZXNbam95bnVt XS5heGlzX21hcHBpbmdbYXhpc19vcl9oYXRfaW5kZXhdLm5lZ2F0aXZlX2RpcmVjdGlvbi52 YWx1ZS5qb3lfcGluID0gZGF0YTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj YXNlIFBPVF9BWElTOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGpveXN0aWNrX2RldmljZXNbam95bnVtXS5heGlzX21hcHBpbmdbYXhpc19vcl9oYXRfaW5k ZXhdLm5lZ2F0aXZlX2RpcmVjdGlvbi52YWx1ZS5qb3lfcGluID0gZGF0YTE7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWUJPQVJEOgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGpveXN0aWNrX2RldmljZXNbam95bnVtXS5heGlz X21hcHBpbmdbYXhpc19vcl9oYXRfaW5kZXhdLm5lZ2F0aXZlX2RpcmVjdGlvbi52YWx1ZS5r ZXlbMF0gPSBkYXRhMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBqb3lzdGlja19kZXZpY2VzW2pveW51bV0uYXhpc19tYXBwaW5nW2F4aXNfb3JfaGF0X2lu ZGV4XS5uZWdhdGl2ZV9kaXJlY3Rpb24udmFsdWUua2V5WzFdID0gZGF0YTI7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dfd2Fy bmluZyhqb3lfbG9nLCAiaW5wdXRpbmRleCAlaSB0b28gbGFyZ2UgZm9yIGlucHV0dHlwZSAl dSwgam95bnVtICVpISIsIGlucHV0aW5kZXgsIGlucHV0dHlwZSwgam95bnVtKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBqb3lfYXJjaF9tYXBwaW5nX2xvYWQoY29u c3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgRklMRSAqZnA7CisgICAgY2hhciAqY29tcGxl dGVfcGF0aDsKKyAgICBjaGFyIGJ1ZmZlclsxMDAwXTsKKworICAgIC8qIFNpbGVudGx5IGln bm9yZSBrZXltYXAgbG9hZCBvbiByZXNvdXJjZSAmIGNtZGxpbmUgaW5pdCAqLworICAgIGlm IChqb3lzdGlja19kZXZpY2VzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg fQorCisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKworICAgIGZwID0gc3lzZmlsZV9vcGVuKGZpbGVuYW1lLCBOVUxMLCAmY29tcGxl dGVfcGF0aCwgTU9ERV9SRUFEX1RFWFQpOworCisgICAgaWYgKGZwID09IE5VTEwpIHsKKyAg ICAgICAgbG9nX3dhcm5pbmcoam95X2xvZywgIkZhaWxlZCB0byBvcGVuIGAlcycuIiwgZmls ZW5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbG9nX21lc3NhZ2Uo am95X2xvZywgIkxvYWRpbmcgam95c3RpY2sgbWFwIGAlcycuIiwgY29tcGxldGVfcGF0aCk7 CisKKyAgICBsaWJfZnJlZShjb21wbGV0ZV9wYXRoKTsKKworICAgIGRvIHsKKyAgICAgICAg YnVmZmVyWzBdID0gMDsKKyAgICAgICAgaWYgKGZnZXRzKGJ1ZmZlciwgOTk5LCBmcCkpIHsK KyAgICAgICAgICAgIGNoYXIgKnA7CisKKyAgICAgICAgICAgIGlmIChzdHJsZW4oYnVmZmVy KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIGJ1ZmZlcltzdHJsZW4oYnVmZmVyKSAtIDFdID0gMDsgLyogcmVtb3ZlIG5l d2xpbmUgKi8KKworICAgICAgICAgICAgLyogcmVtb3ZlIGNvbW1lbnRzICovCisgICAgICAg ICAgICBpZiAoKHAgPSBzdHJjaHIoYnVmZmVyLCAnIycpKSkgeworICAgICAgICAgICAgICAg ICpwID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogcmVtb3ZlIHdoaXRl c3BhY2UgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSAqLworICAgICAgICAgICAgcCA9 IGJ1ZmZlcjsKKyAgICAgICAgICAgIHdoaWxlICgoKCpwID09ICcgJykgfHwgKCpwID09ICdc dCcpKSAmJiAoKnAgIT0gMCkpIHsKKyAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoKnApIHsKKyAgICAgICAgICAgICAgICBjYXNl IDA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug JyEnOgorICAgICAgICAgICAgICAgICAgICAvKiBrZXl3b3JkIGhhbmRsaW5nICovCisgICAg ICAgICAgICAgICAgICAgIGpveV9hcmNoX3BhcnNlX2tleXdvcmQocCk7CisgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg ICAgICAgICAgIC8qIHRhYmxlIGVudHJ5IGhhbmRsaW5nICovCisgICAgICAgICAgICAgICAg ICAgIGpveV9hcmNoX3BhcnNlX2VudHJ5KHApOworICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKCFmZW9mKGZwKSk7 CisgICAgZmNsb3NlKGZwKTsKKworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNl dF9qb3lzdGlja19hdXRvZmlyZShpbnQgdmFsLCB2b2lkICpwYXJhbSkKIHsKICAgICBpbnQg cG9ydF9pZHggPSB2aWNlX3B0cl90b19pbnQocGFyYW0pOwpAQCAtOTUyLDYgKzEyNDUsMTUg QEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBqb3ltYXBfZmlsZV9zZXQoY29u c3QgY2hhciAqdmFsLCB2b2lkICpwYXJhbSkKK3sKKyAgICBpZiAodXRpbF9zdHJpbmdfc2V0 KCZqb3ltYXBfZmlsZSwgdmFsKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg ICByZXR1cm4gam95X2FyY2hfbWFwcGluZ19sb2FkKGpveW1hcF9maWxlKTsKK30KKwogc3Rh dGljIGNvbnN0IHJlc291cmNlX2ludF90IGpveW9wcG9zaXRlX3Jlc291cmNlc19pbnRbXSA9 IHsKICAgICB7ICJKb3lPcHBvc2l0ZSIsIDAsIFJFU19FVkVOVF9OTywgTlVMTCwKICAgICAg ICZqb3lzdGlja19vcHBvc2l0ZV9lbmFibGUsIHNldF9qb3lzdGlja19vcHBvc2l0ZV9lbmFi bGUsIE5VTEwgfSwKQEAgLTEwNzgsNiArMTM4MCwxMyBAQAogICAgIFJFU09VUkNFX0lOVF9M SVNUX0VORAogfTsKIAorc3RhdGljIHJlc291cmNlX3N0cmluZ190IHJlc291cmNlc19zdHJp bmdbXSA9IHsKKyAgICB7ICJKb3lNYXBGaWxlIiwgTlVMTCwgUkVTX0VWRU5UX05PLCBOVUxM LAorICAgICAgJmpveW1hcF9maWxlLCBqb3ltYXBfZmlsZV9zZXQsICh2b2lkICopMCB9LAor ICAgIFJFU09VUkNFX1NUUklOR19MSVNUX0VORAorfTsKKworCiAvKiogXGJyaWVmICBJbml0 aWFsaXplIGpveXN0aWNrIHJlc291cmNlcwogICoKICAqIFxyZXR1cm4gIDAgb24gc3VjY2Vz cywgLTEgb24gZmFpbHVyZQpAQCAtMTE3Niw3ICsxNDg1LDEzIEBACiAgICAgICAgICAgICBy ZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CisgICAgam95bWFwX2ZhY3RvcnkgPSBhcmNo ZGVwX2RlZmF1bHRfam95bWFwX2ZpbGVfbmFtZSgpOworICAgIHJlc291cmNlc19zdHJpbmdb MF0uZmFjdG9yeV92YWx1ZSA9IGpveW1hcF9mYWN0b3J5OwogCisgICAgaWYgKHJlc291cmNl c19yZWdpc3Rlcl9zdHJpbmcocmVzb3VyY2VzX3N0cmluZykgPCAwKSB7CisgICAgICAgIHJl dHVybiAtMTsKKyAgICB9CisKICNpZmRlZiBIQVZFX1NETF9OVU1KT1lTVElDS1MKICAgICBy ZXR1cm4gam95X3NkbF9yZXNvdXJjZXNfaW5pdCgpOwogI2Vsc2UKQEAgLTE1OTksNiArMTkx NCw4IEBACiAgICAgfQogI2VuZGlmCiAKKyAgICBqb3lfYXJjaF9tYXBwaW5nX2xvYWQoam95 bWFwX2ZpbGUpOworCiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTE2NTUsNyArMTk3Miw2IEBA CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2lmbmRlZiBIQVZFX1NETF9OVU1K T1lTVElDS1MKIHZvaWQgcmVnaXN0ZXJfam95c3RpY2tfZHJpdmVyKAogICAgIHN0cnVjdCBq b3lzdGlja19kcml2ZXJfcyAqZHJpdmVyLAogICAgIGNvbnN0IGNoYXIgKmpuYW1lLApAQCAt MTY5OSw2ICsyMDE1LDkgQEAKICAgICBuZXdfam95c3RpY2tfZGV2aWNlLT5oYXRfbWFwcGlu ZyA9IChqb3lzdGlja19oYXRfbWFwcGluZ190ICopbGliX2NhbGxvYyhudW1faGF0cywgc2l6 ZW9mKGpveXN0aWNrX2hhdF9tYXBwaW5nX3QpKTsKICAgICBuZXdfam95c3RpY2tfZGV2aWNl LT5qb3lwb3J0ID0gLTE7CiAgICAgbmV3X2pveXN0aWNrX2RldmljZS0+cHJpdiA9IHByaXY7 CisgICAgbmV3X2pveXN0aWNrX2RldmljZS0+bnVtX2F4ZXMgPSBudW1fYXhlczsKKyAgICBu ZXdfam95c3RpY2tfZGV2aWNlLT5udW1fYnV0dG9ucyA9IG51bV9idXR0b25zOworICAgIG5l d19qb3lzdGlja19kZXZpY2UtPm51bV9oYXRzID0gbnVtX2hhdHM7CiB9CiAKIHN0YXRpYyB2 b2lkIGpveV9wZXJmb3JtX2V2ZW50KGpveXN0aWNrX21hcHBpbmdfdCAqZXZlbnQsIGludCBq b3lwb3J0LCBpbnQgdmFsdWUpCkBAIC0xODA0LDYgKzIxMjMsNDkgQEAKICAgICBqb3lzdGlj a19kZXZpY2VzW2pveW51bV0uaGF0X21hcHBpbmdbaGF0XS5wcmV2ID0gdmFsdWU7CiB9CiAK KyNpZmRlZiBIQVZFX1NETF9OVU1KT1lTVElDS1MKK2pveXN0aWNrX2F4aXNfdmFsdWVfdCBq b3lfYXhpc19wcmV2KHVpbnQ4X3Qgam95bnVtLCB1aW50OF90IGF4aXMpIHsKKyAgICByZXR1 cm4gam95c3RpY2tfZGV2aWNlc1tqb3ludW1dLmF4aXNfbWFwcGluZ1theGlzXS5wcmV2Owor fQorCitqb3lzdGlja19tYXBwaW5nX3QqIGpveV9nZXRfYXhpc19tYXBwaW5nKHVpbnQ4X3Qg am95bnVtLCB1aW50OF90IGF4aXMsIGpveXN0aWNrX2F4aXNfdmFsdWVfdCB2YWx1ZSkgewor ICAgIGpveXN0aWNrX2RldmljZXNbam95bnVtXS5heGlzX21hcHBpbmdbYXhpc10ucHJldiA9 IHZhbHVlOworICAgIGlmICh2YWx1ZSA9PSBKT1lfQVhJU19QT1NJVElWRSkgeworICAgICAg ICByZXR1cm4gJmpveXN0aWNrX2RldmljZXNbam95bnVtXS5heGlzX21hcHBpbmdbYXhpc10u cG9zaXRpdmVfZGlyZWN0aW9uOworICAgIH0KKyAgICBpZiAodmFsdWUgPT0gSk9ZX0FYSVNf TkVHQVRJVkUpIHsKKyAgICAgICAgcmV0dXJuICZqb3lzdGlja19kZXZpY2VzW2pveW51bV0u YXhpc19tYXBwaW5nW2F4aXNdLm5lZ2F0aXZlX2RpcmVjdGlvbjsKKyAgICB9CisgICAgcmV0 dXJuIE5VTEw7Cit9CisKK2pveXN0aWNrX21hcHBpbmdfdCogam95X2dldF9idXR0b25fbWFw cGluZyh1aW50OF90IGpveW51bSwgdWludDhfdCBidXR0b24pIHsKKyAgICByZXR1cm4gJmpv eXN0aWNrX2RldmljZXNbam95bnVtXS5idXR0b25fbWFwcGluZ1tidXR0b25dOworfQorCitq b3lzdGlja19heGlzX3ZhbHVlX3Qgam95X2hhdF9wcmV2KHVpbnQ4X3Qgam95bnVtLCB1aW50 OF90IGhhdCkgeworICAgIHJldHVybiBqb3lzdGlja19kZXZpY2VzW2pveW51bV0uaGF0X21h cHBpbmdbaGF0XS5wcmV2OworfQorCitqb3lzdGlja19tYXBwaW5nX3QqIGpveV9nZXRfaGF0 X21hcHBpbmcodWludDhfdCBqb3ludW0sIHVpbnQ4X3QgaGF0LCB1aW50OF90IHZhbHVlKSB7 CisgICAgdWludDhfdCBwcmV2ID0gam95c3RpY2tfZGV2aWNlc1tqb3ludW1dLmhhdF9tYXBw aW5nW2hhdF0ucHJldjsKKyAgICBqb3lzdGlja19tYXBwaW5nX3QqIG1hcHBpbmcgPSBOVUxM OworICAgIGlmICgodmFsdWUgJiBKT1lTVElDS19ESVJFQ1RJT05fVVApICYmICEocHJldiAm IEpPWVNUSUNLX0RJUkVDVElPTl9VUCkpIHsKKyAgICAgICAgbWFwcGluZyA9ICZqb3lzdGlj a19kZXZpY2VzW2pveW51bV0uaGF0X21hcHBpbmdbaGF0XS51cDsKKyAgICB9IGVsc2UgaWYg KCh2YWx1ZSAmIEpPWVNUSUNLX0RJUkVDVElPTl9ET1dOKSAmJiAhKHByZXYgJiBKT1lTVElD S19ESVJFQ1RJT05fRE9XTikpIHsKKyAgICAgICAgbWFwcGluZyA9ICZqb3lzdGlja19kZXZp Y2VzW2pveW51bV0uaGF0X21hcHBpbmdbaGF0XS5kb3duOworICAgIH0KKyAgICBpZiAoKHZh bHVlICYgSk9ZU1RJQ0tfRElSRUNUSU9OX0xFRlQpICYmICEocHJldiAmIEpPWVNUSUNLX0RJ UkVDVElPTl9MRUZUKSkgeworICAgICAgICBtYXBwaW5nID0gJmpveXN0aWNrX2RldmljZXNb am95bnVtXS5oYXRfbWFwcGluZ1toYXRdLmxlZnQ7CisgICAgfSBlbHNlIGlmICgodmFsdWUg JiBKT1lTVElDS19ESVJFQ1RJT05fUklHSFQpICYmICEocHJldiAmIEpPWVNUSUNLX0RJUkVD VElPTl9SSUdIVCkpIHsKKyAgICAgICAgbWFwcGluZyA9ICZqb3lzdGlja19kZXZpY2VzW2pv eW51bV0uaGF0X21hcHBpbmdbaGF0XS5yaWdodDsKKyAgICB9CisKKyAgICBqb3lzdGlja19k ZXZpY2VzW2pveW51bV0uaGF0X21hcHBpbmdbaGF0XS5wcmV2ID0gdmFsdWU7CisgICAgcmV0 dXJuIG1hcHBpbmc7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBqb3lzdGlja2RldmljZWlk eCA9IDA7CiAKIHZvaWQgam95c3RpY2tfdWlfcmVzZXRfZGV2aWNlX2xpc3Qodm9pZCkKQEAg LTE4NDAsNiArMjIwMiwxMyBAQAogICAgIH0KIAogICAgIGxpYl9mcmVlKGpveXN0aWNrX2Rl dmljZXMpOworICAgIGlmIChqb3ltYXBfZmFjdG9yeSkgeworICAgICAgICBsaWJfZnJlZShq b3ltYXBfZmFjdG9yeSk7CisgICAgICAgIGpveW1hcF9mYWN0b3J5ID0gTlVMTDsKKyAgICB9 CisgICAgaWYgKGpveW1hcF9maWxlKSB7CisgICAgICAgIGxpYl9mcmVlKGpveW1hcF9maWxl KTsKKyAgICAgICAgam95bWFwX2ZpbGUgPSBOVUxMOworICAgIH0KIH0KLSNlbmRpZgogCklu ZGV4OiBkZXYvdmljZS90cnVuay9zcmMvam95cG9ydC9qb3lzdGljay5oCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGRldi92aWNlL3RydW5rL3NyYy9qb3lwb3J0L2pveXN0aWNrLmgJKHJldmlzaW9u ZSA0MTAxMCkKKysrIGRldi92aWNlL3RydW5rL3NyYy9qb3lwb3J0L2pveXN0aWNrLmgJKGNv cGlhIGRpIGxhdm9ybykKQEAgLTMwLDYgKzMwLDkgQEAKIAogI2luY2x1ZGUgInR5cGVzLmgi CiAjaW5jbHVkZSAiam95cG9ydC5oIiAvKiBmb3IgSk9ZUE9SVF9NQVhfUE9SVFMgKi8KKyNp ZiAoZGVmaW5lZCBVU0VfU0RMVUkgfHxkZWZpbmVkIFVTRV9TRExVSTIpCisjaW5jbHVkZSAi dWltZW51LmgiCisjZW5kaWYKIAogZXh0ZXJuIGludCBqb3lzdGlja19pbml0KHZvaWQpOwog ZXh0ZXJuIGludCBqb3lzdGlja19yZXNvdXJjZXNfaW5pdCh2b2lkKTsKQEAgLTE0Miw2ICsx NDUsNDYgQEAKICAgIEpPWV9BWElTX05FR0FUSVZFCiB9IGpveXN0aWNrX2F4aXNfdmFsdWVf dDsKIAorLyogQWN0aW9ucyB0byBwZXJmb3JtIG9uIGpveXN0aWNrIGlucHV0ICovCit0eXBl ZGVmIGVudW0gam95c3RpY2tfYWN0aW9uX2UgeworICAgIE5PTkUgPSAwLAorCisgICAgLyog Sm95c3RpY2sgbW92ZW1lbnQgb3IgYnV0dG9uIHByZXNzICovCisgICAgSk9ZU1RJQ0sgPSAx LAorCisgICAgLyogS2V5Ym9hcmQga2V5IHByZXNzICovCisgICAgS0VZQk9BUkQgPSAyLAor CisgICAgLyogTWFwIGJ1dHRvbiAqLworICAgIE1BUCA9IDMsCisKKyAgICAvKiAoRGUpQWN0 aXZhdGUgVUkgKi8KKyAgICBVSV9BQ1RJVkFURSA9IDQsCisKKyAgICAvKiBDYWxsIFVJIGZ1 bmN0aW9uICovCisgICAgVUlfRlVOQ1RJT04gPSA1LAorCisgICAgLyogSm95c3RpY2sgYXhp cyB1c2VkIGZvciBwb3RlbnRpb21ldGVycyAqLworICAgIFBPVF9BWElTID0gNgorfSBqb3lz dGlja19hY3Rpb25fdDsKKworLyogSW5wdXQgbWFwcGluZyBmb3IgZWFjaCBkaXJlY3Rpb24v YnV0dG9uL2V0YyAqLwordHlwZWRlZiBzdHJ1Y3Qgam95c3RpY2tfbWFwcGluZ19zIHsKKyAg ICAvKiBBY3Rpb24gdG8gcGVyZm9ybSAqLworICAgIGpveXN0aWNrX2FjdGlvbl90IGFjdGlv bjsKKworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDE2X3Qgam95X3BpbjsKKworICAgICAg ICAvKiBrZXlbMF0gPSByb3csIGtleVsxXSA9IGNvbHVtbiAqLworICAgICAgICBpbnQga2V5 WzJdOworI2lmIChkZWZpbmVkIFVTRV9TRExVSSB8fGRlZmluZWQgVVNFX1NETFVJMikKKyAg ICAgICAgLyogcG9pbnRlciB0byB0aGUgbWVudSBpdGVtICovCisgICAgICAgIHVpX21lbnVf ZW50cnlfdCAqdWlfZnVuY3Rpb247CisjZW5kaWYKKyAgICB9IHZhbHVlOworfSBqb3lzdGlj a19tYXBwaW5nX3Q7CisKIGV4dGVybiB2b2lkIGpveV9heGlzX2V2ZW50KHVpbnQ4X3Qgam95 bnVtLCB1aW50OF90IGF4aXMsIGpveXN0aWNrX2F4aXNfdmFsdWVfdCB2YWx1ZSk7CiBleHRl cm4gdm9pZCBqb3lfYnV0dG9uX2V2ZW50KHVpbnQ4X3Qgam95bnVtLCB1aW50OF90IGJ1dHRv biwgdWludDhfdCB2YWx1ZSk7CiBleHRlcm4gdm9pZCBqb3lfaGF0X2V2ZW50KHVpbnQ4X3Qg am95bnVtLCB1aW50OF90IGJ1dHRvbiwgdWludDhfdCB2YWx1ZSk7CkBAIC0xNDksNiArMTky LDEzIEBACiBleHRlcm4gdm9pZCBqb3lzdGlja19jbG9zZSh2b2lkKTsKIGV4dGVybiB2b2lk IGpveXN0aWNrX3VpX3Jlc2V0X2RldmljZV9saXN0KHZvaWQpOwogZXh0ZXJuIGNvbnN0IGNo YXIgKmpveXN0aWNrX3VpX2dldF9uZXh0X2RldmljZV9uYW1lKGludCAqaWQpOworZXh0ZXJu IGludCBqb3lfYXJjaF9tYXBwaW5nX2R1bXAoY29uc3QgY2hhciAqZmlsZW5hbWUpOworZXh0 ZXJuIGludCBqb3lfYXJjaF9tYXBwaW5nX2xvYWQoY29uc3QgY2hhciAqZmlsZW5hbWUpOwor ZXh0ZXJuIGpveXN0aWNrX2F4aXNfdmFsdWVfdCBqb3lfYXhpc19wcmV2KHVpbnQ4X3Qgam95 bnVtLCB1aW50OF90IGF4aXMpOworZXh0ZXJuIGpveXN0aWNrX21hcHBpbmdfdCogam95X2dl dF9heGlzX21hcHBpbmcodWludDhfdCBqb3ludW0sIHVpbnQ4X3QgYXhpcywgam95c3RpY2tf YXhpc192YWx1ZV90IHZhbHVlKTsKK2V4dGVybiBqb3lzdGlja19tYXBwaW5nX3QqIGpveV9n ZXRfYnV0dG9uX21hcHBpbmcodWludDhfdCBqb3ludW0sIHVpbnQ4X3QgYnV0dG9uKTsKK2V4 dGVybiBqb3lzdGlja19heGlzX3ZhbHVlX3Qgam95X2hhdF9wcmV2KHVpbnQ4X3Qgam95bnVt LCB1aW50OF90IGhhdCk7CitleHRlcm4gam95c3RpY2tfbWFwcGluZ190KiBqb3lfZ2V0X2hh dF9tYXBwaW5nKHVpbnQ4X3Qgam95bnVtLCB1aW50OF90IGhhdCwgdWludDhfdCB2YWx1ZSk7 CiAKICNkZWZpbmUgSk9ZU1RJQ0tfRElSRUNUSU9OX0RPV04gIDEKICNkZWZpbmUgSk9ZU1RJ Q0tfRElSRUNUSU9OX1VQICAgIDIK --------------Yqr0mpG3jWAt1LeK400iiCgv Content-Type: text/x-patch; charset=UTF-8; name="sdlunif2.patch" Content-Disposition: attachment; filename="sdlunif2.patch" Content-Transfer-Encoding: base64 SW5kZXg6IGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC9qb3kuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvam95LmMJKHJldmlzaW9uZSA0MTM0 OCkKKysrIGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC9qb3kuYwkoY29waWEgZGkgbGF2 b3JvKQpAQCAtNjQsMTEgKzY0LDggQEAKIHN0YXRpYyB1aV9tZW51X2FjdGlvbl90IGF1dG9y ZXBlYXQ7CiBzdGF0aWMgaW50IGF1dG9yZXBlYXRfZGVsYXk7CiAKLS8qIEpveXN0aWNrIG1h cHBpbmcgZmlsZW5hbWUgKi8KLXN0YXRpYyBjaGFyICpqb3ltYXBfZmlsZSA9IE5VTEw7Ci0K IC8qIFRvdGFsIG51bWJlciBvZiBqb3lzdGlja3MgKi8KLXN0YXRpYyBpbnQgbnVtX2pveXN0 aWNrcyA9IDA7CitzdGF0aWMgaW50IG51bV9qb3lzdGlja3M7CiAKIC8qIEpveXN0aWNrIHRo cmVzaG9sZCAoMC4uMzI3NjcpICovCiBzdGF0aWMgaW50IGpveXN0aWNrX3RocmVzaG9sZDsK QEAgLTc2LDkxICs3Myw3IEBACiAvKiBKb3lzdGljayBmdXp6ICgwLi4zMjc2NykgKi8KIHN0 YXRpYyBpbnQgam95c3RpY2tfZnV6ejsKIAotLyogRGlmZmVyZW50IHR5cGVzIG9mIGpveXN0 aWNrIGlucHV0ICovCi10eXBlZGVmIGVudW0gewotICAgIEFYSVMgPSAwLAotICAgIEJVVFRP TiA9IDEsCi0gICAgSEFUID0gMiwKLSAgICBCQUxMID0gMywKLSAgICBOVU1fSU5QVVRfVFlQ RVMKLX0gc2Rsam95c3RpY2tfaW5wdXRfdDsKIAotLyogTnVtYmVyIG9mIGFjdGlvbnMgcGVy IGlucHV0IHNvdXJjZSAqLwotc3RhdGljIGNvbnN0IGludCBpbnB1dF9tdWx0W05VTV9JTlBV VF9UWVBFU10gPSB7Ci0gICAgMiwgLyogQXhpczogYWN0aW9ucyBmb3IgcG9zaXRpdmUgYW5k IG5lZ2F0aXZlICovCi0gICAgMSwgLyogQnV0dG9uICovCi0gICAgNCwgLyogSGF0OiBhY3Rp b25zIGZvciBhbGwgNCBkaXJlY3Rpb25zICovCi0gICAgMSAgLyogQmFsbCAqLwotfTsKLQot LyogQWN0aW9ucyB0byBwZXJmb3JtIG9uIGpveXN0aWNrIGlucHV0ICovCi10eXBlZGVmIGVu dW0gewotICAgIE5PTkUgPSAwLAotCi0gICAgLyogSm95c3RpY2sgbW92ZW1lbnQgb3IgYnV0 dG9uIHByZXNzICovCi0gICAgSk9ZU1RJQ0sgPSAxLAotCi0gICAgLyogS2V5Ym9hcmQga2V5 IHByZXNzICovCi0gICAgS0VZQk9BUkQgPSAyLAotCi0gICAgLyogTWFwIGJ1dHRvbiAqLwot ICAgIE1BUCA9IDMsCi0KLSAgICAvKiAoRGUpQWN0aXZhdGUgVUkgKi8KLSAgICBVSV9BQ1RJ VkFURSA9IDQsCi0KLSAgICAvKiBDYWxsIFVJIGZ1bmN0aW9uICovCi0gICAgVUlfRlVOQ1RJ T04gPSA1LAotCi0gICAgLyogSm95c3RpY2sgYXhpcyB1c2VkIGZvciBwb3RlbnRpb21ldGVy cyAqLwotICAgIFBPVF9BWElTID0gNgotfSBzZGxqb3lzdGlja19hY3Rpb25fdDsKLQotLyog SW5wdXQgbWFwcGluZyBmb3IgZWFjaCBkaXJlY3Rpb24vYnV0dG9uL2V0YyAqLwotc3RydWN0 IHNkbGpveXN0aWNrX21hcHBpbmdfcyB7Ci0gICAgLyogQWN0aW9uIHRvIHBlcmZvcm0gKi8K LSAgICBzZGxqb3lzdGlja19hY3Rpb25fdCBhY3Rpb247Ci0KLSAgICAvKiBQcmV2aW91cyBz dGF0ZSBvZiBpbnB1dCAqLwotICAgIHVpbnQ4X3QgcHJldjsKLQotICAgIHVuaW9uIHsKLSAg ICAgICAgLyogam95WzBdID0gcG9ydCBudW1iZXIgKDAsMSksIGpveVsxXSA9IHBpbiBudW1i ZXIgKi8KLSAgICAgICAgdWludDE2X3Qgam95WzJdOwotCi0gICAgICAgIC8qIGF4aXNbMF0g PSBwb3J0IG51bWJlciAoMCwxKSwgYXhpc1sxXSA9IHBvdCBudW1iZXIgKHg9MC95PTEpICov Ci0gICAgICAgIHVpbnQxNl90IGF4aXNbMl07Ci0KLSAgICAgICAgLyoga2V5WzBdID0gcm93 LCBrZXlbMV0gPSBjb2x1bW4gKi8KLSAgICAgICAgaW50IGtleVsyXTsKLQotICAgICAgICAv KiBwb2ludGVyIHRvIHRoZSBtZW51IGl0ZW0gKi8KLSAgICAgICAgdWlfbWVudV9lbnRyeV90 ICp1aV9mdW5jdGlvbjsKLSAgICB9IHZhbHVlOwotfTsKLXR5cGVkZWYgc3RydWN0IHNkbGpv eXN0aWNrX21hcHBpbmdfcyBzZGxqb3lzdGlja19tYXBwaW5nX3Q7Ci0KLSNpZm5kZWYgVVNF X1NETFVJMgotdHlwZWRlZiBpbnQgU0RMX0pveXN0aWNrSUQ7Ci0jZW5kaWYKLQotc3RydWN0 IHNkbGpveXN0aWNrX3MgewotICAgIFNETF9Kb3lzdGljayAqam95cHRyOwotICAgIGNoYXIg Km5hbWU7Ci0gICAgaW50IGlucHV0X21heFtOVU1fSU5QVVRfVFlQRVNdOwotICAgIHNkbGpv eXN0aWNrX21hcHBpbmdfdCAqaW5wdXRbTlVNX0lOUFVUX1RZUEVTXTsKLSAgICBTRExfSm95 c3RpY2tJRCBqb3lzdGlja2lkOwotfTsKLXR5cGVkZWYgc3RydWN0IHNkbGpveXN0aWNrX3Mg c2Rsam95c3RpY2tfdDsKLQotc3RhdGljIHNkbGpveXN0aWNrX3QgKnNkbGpveXN0aWNrID0g TlVMTDsKLQotLyoqIFxicmllZiAgVGVtcG9yYXJ5IGNvcHkgb2YgdGhlIGRlZmF1bHQgam95 bWFwIGZpbGUgbmFtZQotICoKLSAqIEF2b2lkcyBzaWxseSBjYXN0aW5nIGF3YXkgb2YgY29u c3QKLSAqLwotc3RhdGljIGNoYXIgKmpveW1hcF9mYWN0b3J5ID0gTlVMTDsKLQogLyogam95 c3RpY2sgYXhpcyBtYXBwaW5nIGZvciBwb3QteC95LAogICAgaGlnaCBieXRlIGlzIHRoZSBq b3lzdGljayBuciwKICAgIGxvdyBieXRlIGlzIHRoZSBheGlzIG5yLApAQCAtMTk5LDIxICsx MTIsNiBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGpveW1hcF9maWxlX3Nl dChjb25zdCBjaGFyICp2YWwsIHZvaWQgKnBhcmFtKQotewotICAgIGlmICh1dGlsX3N0cmlu Z19zZXQoJmpveW1hcF9maWxlLCB2YWwpKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K LQotICAgIHJldHVybiBqb3lfYXJjaF9tYXBwaW5nX2xvYWQoam95bWFwX2ZpbGUpOwotfQot Ci1zdGF0aWMgcmVzb3VyY2Vfc3RyaW5nX3QgcmVzb3VyY2VzX3N0cmluZ1tdID0gewotICAg IHsgIkpveU1hcEZpbGUiLCBOVUxMLCBSRVNfRVZFTlRfTk8sIE5VTEwsCi0gICAgICAmam95 bWFwX2ZpbGUsIGpveW1hcF9maWxlX3NldCwgKHZvaWQgKikwIH0sCi0gICAgUkVTT1VSQ0Vf U1RSSU5HX0xJU1RfRU5ECi19OwotCiBzdGF0aWMgY29uc3QgcmVzb3VyY2VfaW50X3QgcmVz b3VyY2VzX2ludFtdID0gewogICAgIHsgIkpveVRocmVzaG9sZCIsIERFRkFVTFRfSk9ZU1RJ Q0tfVEhSRVNIT0xELCBSRVNfRVZFTlRfTk8sIE5VTEwsCiAgICAgICAmam95c3RpY2tfdGhy ZXNob2xkLCBzZXRfam95c3RpY2tfdGhyZXNob2xkLCBOVUxMIH0sCkBAIC0yOTIsMTIgKzE5 MCw2IEBACiAgICAgfQogCiAjaWZkZWYgSEFWRV9TRExfTlVNSk9ZU1RJQ0tTCi0gICAgam95 bWFwX2ZhY3RvcnkgPSBhcmNoZGVwX2RlZmF1bHRfam95bWFwX2ZpbGVfbmFtZSgpOwotICAg IHJlc291cmNlc19zdHJpbmdbMF0uZmFjdG9yeV92YWx1ZSA9IGpveW1hcF9mYWN0b3J5Owot Ci0gICAgaWYgKHJlc291cmNlc19yZWdpc3Rlcl9zdHJpbmcocmVzb3VyY2VzX3N0cmluZykg PCAwKSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CiAgICAgaWYgKHJlc291cmNlc19y ZWdpc3Rlcl9pbnQocmVzb3VyY2VzX2ludCkgPCAwKSB7CiAgICAgICAgIHJldHVybiAtMTsK ICAgICB9CkBAIC0zMDYsMjAgKzE5OCw2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQg am95X2FyY2hfcmVzb3VyY2VzX3NodXRkb3duKHZvaWQpCi17Ci0jaWZkZWYgSEFWRV9TRExf TlVNSk9ZU1RJQ0tTCi0gICAgaWYgKGpveW1hcF9mYWN0b3J5KSB7Ci0gICAgICAgIGxpYl9m cmVlKGpveW1hcF9mYWN0b3J5KTsKLSAgICAgICAgam95bWFwX2ZhY3RvcnkgPSBOVUxMOwot ICAgIH0KLSAgICBpZiAoam95bWFwX2ZpbGUpIHsKLSAgICAgICAgbGliX2ZyZWUoam95bWFw X2ZpbGUpOwotICAgICAgICBqb3ltYXBfZmlsZSA9IE5VTEw7Ci0gICAgfQotI2VuZGlmCi19 Ci0KIGludCBqb3lfc2RsX2NtZGxpbmVfb3B0aW9uc19pbml0KHZvaWQpCiB7CiAjaWZkZWYg SEFWRV9TRExfTlVNSk9ZU1RJQ0tTCkBAIC0zNjMsNiArMjQxLDE3IEBACiAKIC8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIHZvaWQgc2RsX2pveXN0aWNrX3BvbGwoaW50 IGpveXBvcnQsIHZvaWQqIGpveXN0aWNrKSB7fQorc3RhdGljIHZvaWQgc2RsX2pveXN0aWNr X2Nsb3NlKHZvaWQqIGpveXN0aWNrKQoreworICAgIFNETF9Kb3lzdGlja0Nsb3NlKGpveXN0 aWNrKTsKK30KKworc3RhdGljIGpveXN0aWNrX2RyaXZlcl90IHNkbF9qb3lzdGlja19kcml2 ZXIgPSB7CisgICAgLnBvbGwgPSBzZGxfam95c3RpY2tfcG9sbCwKKyAgICAuY2xvc2UgPSBz ZGxfam95c3RpY2tfY2xvc2UKK307CisKICNpZmRlZiBIQVZFX1NETF9OVU1KT1lTVElDS1MK IAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKQEAgLTM3MCw2ICsyNTksMTAgQEAKICAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IGpveV9zZGxfaW5p dCh2b2lkKQogeworICAgIGludCBpLCBheGlzLCBidXR0b24sIGhhdCwgYmFsbDsKKyAgICBT RExfSm95c3RpY2sgKmpveTsKKyAgICBjaGFyICpuYW1lOworCiAgICAgc2Rsam95X2xvZyA9 IGxvZ19vcGVuKCJTRExKb3lzdGljayIpOwogCiAgICAgaWYgKFNETF9Jbml0U3ViU3lzdGVt KFNETF9JTklUX0pPWVNUSUNLKSkgewpAQCAtMzc2LDY1NiArMjY5LDUzIEBACiAgICAgICAg IGxvZ19lcnJvcihzZGxqb3lfbG9nLCAiU3Vic3lzdGVtIGluaXQgZmFpbGVkISIpOwogICAg ICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIAotICAgIHNkbGpveV9yZXNjYW4oKTsKIAot ICAgIHJldHVybiAwOwotfQotCi1pbnQgc2Rsam95X3Jlc2Nhbih2b2lkKQotewotICAgIGlu dCBpLCBrLCBheGlzLCBidXR0b24sIGhhdCwgYmFsbDsKLSAgICBzZGxqb3lzdGlja19pbnB1 dF90IGo7Ci0gICAgU0RMX0pveXN0aWNrICpqb3k7Ci0gICAgc2Rsam95c3RpY2tfdCAqc2Rs am95c3RpY2tfb2xkID0gc2Rsam95c3RpY2s7Ci0gICAgaW50IG51bV9qb3lzdGlja3Nfb2xk ID0gbnVtX2pveXN0aWNrczsKLQotICAgIFNETF9Kb3lzdGlja0V2ZW50U3RhdGUoU0RMX0RJ U0FCTEUpOwotCi0gICAgLyogY2xvc2UgYWxsIGpveXN0aWNrcyAqLwotICAgIGZvciAoaSA9 IDA7IGkgPCBudW1fam95c3RpY2tzOyArK2kpIHsKLSAgICAgICAgaWYgKHNkbGpveXN0aWNr W2ldLmpveXB0cikgewotI2lmZGVmIFVTRV9TRExVSTIKLSAgICAgICAgICAgIGlmIChTRExf Sm95c3RpY2tHZXRBdHRhY2hlZChzZGxqb3lzdGlja1tpXS5qb3lwdHIpKSB7Ci0gICAgICAg ICAgICAgICAgU0RMX0pveXN0aWNrQ2xvc2Uoc2Rsam95c3RpY2tbaV0uam95cHRyKTsKLSAg ICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBTRExfSm95c3RpY2tDbG9zZShzZGxq b3lzdGlja1tpXS5qb3lwdHIpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci0KICAgICBu dW1fam95c3RpY2tzID0gU0RMX051bUpveXN0aWNrcygpOwogCiAgICAgaWYgKG51bV9qb3lz dGlja3MgPT0gMCkgewogICAgICAgICBsb2dfbWVzc2FnZShzZGxqb3lfbG9nLCAiTm8gam95 c3RpY2tzIGZvdW5kIik7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fam95c3RpY2tz X29sZDsgKytpKSB7Ci0gICAgICAgICAgICBsaWJfZnJlZShzZGxqb3lzdGlja1tpXS5uYW1l KTsKLSAgICAgICAgICAgIHNkbGpveXN0aWNrW2ldLm5hbWUgPSBOVUxMOwotCi0gICAgICAg ICAgICBmb3IgKGogPSBBWElTOyBqIDwgTlVNX0lOUFVUX1RZUEVTOyArK2opIHsKLSAgICAg ICAgICAgICAgICBsaWJfZnJlZShzZGxqb3lzdGlja1tpXS5pbnB1dFtqXSk7Ci0gICAgICAg ICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5wdXRbal0gPSBOVUxMOwotICAgICAgICAgICAg fQotICAgICAgICB9Ci0gICAgICAgIGxpYl9mcmVlKHNkbGpveXN0aWNrKTsKLSAgICAgICAg c2Rsam95c3RpY2sgPSBOVUxMOwotICAgICAgICBTRExfSm95c3RpY2tFdmVudFN0YXRlKFNE TF9FTkFCTEUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgICAgIAorCiAgICAg bG9nX21lc3NhZ2Uoc2Rsam95X2xvZywgIiVpIGpveXN0aWNrcyBmb3VuZCIsIG51bV9qb3lz dGlja3MpOwogCi0gICAgc2Rsam95c3RpY2sgPSBsaWJfbWFsbG9jKHNpemVvZihzZGxqb3lz dGlja190KSAqIG51bV9qb3lzdGlja3MpOwotCiAgICAgZm9yIChpID0gMDsgaSA8IG51bV9q b3lzdGlja3M7ICsraSkgewotICAgICAgICBqb3kgPSBzZGxqb3lzdGlja1tpXS5qb3lwdHIg PSBTRExfSm95c3RpY2tPcGVuKGkpOworICAgICAgICBqb3kgPSBTRExfSm95c3RpY2tPcGVu KGkpOwogICAgICAgICBpZiAoam95KSB7Ci0jaWZkZWYgVVNFX1NETFVJMgotICAgICAgICAg ICAgc2Rsam95c3RpY2tbaV0ubmFtZSA9IGxpYl9zdHJkdXAoU0RMX0pveXN0aWNrTmFtZShz ZGxqb3lzdGlja1tpXS5qb3lwdHIpKTsKLSAgICAgICAgICAgIHNkbGpveXN0aWNrW2ldLmpv eXN0aWNraWQgPSBTRExfSm95c3RpY2tJbnN0YW5jZUlEKGpveSk7CisjaWZuZGVmIFVTRV9T RExVSTIKKyAgICAgICAgICAgIG5hbWUgPSBsaWJfc3RyZHVwKFNETF9Kb3lzdGlja05hbWUo aSkpOwogI2Vsc2UKLSAgICAgICAgICAgIHNkbGpveXN0aWNrW2ldLm5hbWUgPSBsaWJfc3Ry ZHVwKFNETF9Kb3lzdGlja05hbWUoaSkpOwotICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0u am95c3RpY2tpZCA9IFNETF9Kb3lzdGlja0luZGV4KGpveSk7CisgICAgICAgICAgICBuYW1l ID0gbGliX3N0cmR1cChTRExfSm95c3RpY2tOYW1lKGpveSkpOwogI2VuZGlmCi0gICAgICAg ICAgICBheGlzID0gc2Rsam95c3RpY2tbaV0uaW5wdXRfbWF4W0FYSVNdID0gU0RMX0pveXN0 aWNrTnVtQXhlcyhqb3kpOwotICAgICAgICAgICAgYnV0dG9uID0gc2Rsam95c3RpY2tbaV0u aW5wdXRfbWF4W0JVVFRPTl0gPSBTRExfSm95c3RpY2tOdW1CdXR0b25zKGpveSk7Ci0gICAg ICAgICAgICBoYXQgPSBzZGxqb3lzdGlja1tpXS5pbnB1dF9tYXhbSEFUXSA9IFNETF9Kb3lz dGlja051bUhhdHMoam95KTsKLSAgICAgICAgICAgIGJhbGwgPSBzZGxqb3lzdGlja1tpXS5p bnB1dF9tYXhbQkFMTF0gPSBTRExfSm95c3RpY2tOdW1CYWxscyhqb3kpOworICAgICAgICAg ICAgYXhpcyA9IFNETF9Kb3lzdGlja051bUF4ZXMoam95KTsKKyAgICAgICAgICAgIGJ1dHRv biA9IFNETF9Kb3lzdGlja051bUJ1dHRvbnMoam95KTsKKyAgICAgICAgICAgIGhhdCA9IFNE TF9Kb3lzdGlja051bUhhdHMoam95KTsKKyAgICAgICAgICAgIGJhbGwgPSBTRExfSm95c3Rp Y2tOdW1CYWxscyhqb3kpOwogCi0gICAgICAgICAgICBmb3IgKGogPSBBWElTOyBqIDwgTlVN X0lOUFVUX1RZUEVTOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAoc2Rsam95c3RpY2tb aV0uaW5wdXRfbWF4W2pdID4gMCkgewotICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlj a1tpXS5pbnB1dFtqXSA9IGxpYl9tYWxsb2Moc2l6ZW9mKHNkbGpveXN0aWNrX21hcHBpbmdf dCkgKiBzZGxqb3lzdGlja1tpXS5pbnB1dF9tYXhbal0gKiBpbnB1dF9tdWx0W2pdKTsKLSAg ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlj a1tpXS5pbnB1dFtqXSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg fQotCi0gICAgICAgICAgICAvKiBvbmx5IHVzZSBkZWZhdWx0IG1hcHBpbmcgaWYgcHJldmlv dXNseSB0aGVyZSB3ZXJlIG5vIGpveXN0aWNrcyBmb3VuZCAqLwotICAgICAgICAgICAgaWYg KG51bV9qb3lzdGlja3Nfb2xkID09IDApIHsKLSAgICAgICAgICAgICAgICBqb3lfYXJjaF9p bml0X2RlZmF1bHRfbWFwcGluZyhpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg bG9nX21lc3NhZ2Uoc2Rsam95X2xvZywgIkRldmljZSAlaSBcIiVzXCIgKCVpIGF4ZXMsICVp IGJ1dHRvbnMsICVpIGhhdHMsICVpIGJhbGxzKSIsIGksIHNkbGpveXN0aWNrW2ldLm5hbWUs IGF4aXMsIGJ1dHRvbiwgaGF0LCBiYWxsKTsKKyAgICAgICAgICAgIGxvZ19tZXNzYWdlKHNk bGpveV9sb2csICJEZXZpY2UgJWkgXCIlc1wiICglaSBheGVzLCAlaSBidXR0b25zLCAlaSBo YXRzLCAlaSBiYWxscykiLCBpLCBuYW1lLCBheGlzLCBidXR0b24sIGhhdCwgYmFsbCk7Cisg ICAgICAgICAgICByZWdpc3Rlcl9qb3lzdGlja19kcml2ZXIoJnNkbF9qb3lzdGlja19kcml2 ZXIsCisgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICBqb3ksCisgICAg ICAgICAgICAgICAgYXhpcywKKyAgICAgICAgICAgICAgICBidXR0b24sCisgICAgICAgICAg ICAgICAgaGF0KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGxvZ193YXJuaW5n KHNkbGpveV9sb2csICJDb3VsZG4ndCBvcGVuIGpveXN0aWNrICVpIiwgaSk7CiAgICAgICAg IH0KICAgICB9CiAKLSAgICAvKiBvbmx5IGxvYWQgam95IG1hcCBmaWxlIGlmIHByZXZpb3Vz bHkgdGhlcmUgd2VyZSBubyBqb3lzdGlja3MgZm91bmQgKi8KLSAgICBpZiAobnVtX2pveXN0 aWNrc19vbGQgPT0gMCkgewotICAgICAgICBqb3lfYXJjaF9tYXBwaW5nX2xvYWQoam95bWFw X2ZpbGUpOwotICAgIH0KLQotICAgIC8qIGNvcHkgb3ZlciBpbnB1dCBtYXBwaW5nIGN1c3Rv bWlzYXRpb25zIGZyb20gdGhpcyBzZXNzaW9uICovCi0gICAgZm9yIChpID0gMDsgaSA8IG51 bV9qb3lzdGlja3M7ICsraSkgewotICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbnVtX2pveXN0 aWNrc19vbGQ7ICsraykgewotICAgICAgICAgICAgaWYgKHNkbGpveXN0aWNrW2ldLmpveXN0 aWNraWQgPT0gc2Rsam95c3RpY2tfb2xkW2tdLmpveXN0aWNraWQpIHsKLSAgICAgICAgICAg ICAgICBmb3IgKGogPSBBWElTOyBqIDwgTlVNX0lOUFVUX1RZUEVTOyArK2opIHsKLSAgICAg ICAgICAgICAgICAgICAgaWYgKHNkbGpveXN0aWNrW2ldLmlucHV0W2pdICE9IE5VTEwpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIGxpYl9mcmVlKHNkbGpveXN0aWNrW2ldLmlucHV0 W2pdKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZGxq b3lzdGlja1tpXS5pbnB1dFtqXSA9IHNkbGpveXN0aWNrX29sZFtrXS5pbnB1dFtqXTsKLSAg ICAgICAgICAgICAgICAgICAgc2Rsam95c3RpY2tfb2xkW2tdLmlucHV0W2pdID0gTlVMTDsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K LSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2pveXN0aWNrc19vbGQ7ICsraSkgewotICAgICAg ICBsaWJfZnJlZShzZGxqb3lzdGlja19vbGRbaV0ubmFtZSk7Ci0gICAgICAgIHNkbGpveXN0 aWNrX29sZFtpXS5uYW1lID0gTlVMTDsKLQotICAgICAgICBmb3IgKGogPSBBWElTOyBqIDwg TlVNX0lOUFVUX1RZUEVTOyArK2opIHsKLSAgICAgICAgICAgIGlmIChzZGxqb3lzdGlja19v bGRbaV0uaW5wdXRbal0gIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGxpYl9mcmVlKHNk bGpveXN0aWNrX29sZFtpXS5pbnB1dFtqXSk7Ci0gICAgICAgICAgICAgICAgc2Rsam95c3Rp Y2tfb2xkW2ldLmlucHV0W2pdID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgIH0KLQotICAgIGxpYl9mcmVlKHNkbGpveXN0aWNrX29sZCk7Ci0gICAgc2Rsam95c3Rp Y2tfb2xkID0gTlVMTDsKLQogICAgIFNETF9Kb3lzdGlja0V2ZW50U3RhdGUoU0RMX0VOQUJM RSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgam95c3RpY2sodm9pZCkKLXsKLSAgICAv KiBQcm92aWRlZCBvbmx5IGZvciBhcmNoZGVwIGpveS5oLiBUT0RPOiBNaWdyYXRlIGpveXN0 aWNrIHBvbGxpbmcgaW4gaGVyZSBpZiBhbnkgbmVlZGVkPyAqLwotfQogCi12b2lkIGpveXN0 aWNrX2Nsb3NlKHZvaWQpCi17Ci0gICAgaW50IGk7Ci0gICAgc2Rsam95c3RpY2tfaW5wdXRf dCBqOwotCi0jaWZkZWYgU0RMX0RFQlVHCi0gICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwg X19mdW5jX18pOwotI2VuZGlmCi0KLSAgICBpZiAoc2Rsam95c3RpY2sgPT0gTlVMTCkgewot ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lz dGlja3M7ICsraSkgewotICAgICAgICBsaWJfZnJlZShzZGxqb3lzdGlja1tpXS5uYW1lKTsK LSAgICAgICAgc2Rsam95c3RpY2tbaV0ubmFtZSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKHNk bGpveXN0aWNrW2ldLmpveXB0cikgewotICAgICAgICAgICAgU0RMX0pveXN0aWNrQ2xvc2Uo c2Rsam95c3RpY2tbaV0uam95cHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaiA9 IEFYSVM7IGogPCBOVU1fSU5QVVRfVFlQRVM7ICsraikgewotICAgICAgICAgICAgbGliX2Zy ZWUoc2Rsam95c3RpY2tbaV0uaW5wdXRbal0pOwotICAgICAgICAgICAgc2Rsam95c3RpY2tb aV0uaW5wdXRbal0gPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbGliX2ZyZWUo c2Rsam95c3RpY2spOwotICAgIHNkbGpveXN0aWNrID0gTlVMTDsKLX0KLQogLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSAqLwogCi12b2lkIGpveV9hcmNoX2luaXRfZGVmYXVsdF9tYXBwaW5n KGludCBqb3ludW0pCitzdGF0aWMgaW5saW5lIGpveXN0aWNrX2F4aXNfdmFsdWVfdCBzZGxq b3lfYXhpc19kaXJlY3Rpb24oU2ludDE2IHZhbHVlLCBqb3lzdGlja19heGlzX3ZhbHVlX3Qg cHJldikKIHsKLSAgICBpbnQgaSwgaiwgam95cG9ydCwgcGluLCBzdGF0ZSA9IDA7Ci0KLSAg ICBTRExfSm95c3RpY2tVcGRhdGUoKTsKLQotICAgIC8qIEZJWE1FIHNvbWUgam95c3RpY2tz IHNlZW0gdG8gbmVlZCBzb21lIHRpbWUgdG8gc2VsZi1jYWxpYnJhdGUgYWZ0ZXIgdGhlCi0g ICAgICAgZmlyc3QgdGltZSBpdCdzIG9wZW5lZC9wb2xsZWQvcmVhZCwgb3RoZXJ3aXNlIHRo ZSByZXBvcnRlZCBheGlzIHZhbHVlcwotICAgICAgIGFyZSBpbmNvcnJlY3QgYW5kIGdldCBt YXBwZWQgdG8gTk9ORS4gUXVpdHRpbmcgYW5kIHJlc3RhcnRpbmcgc2VlbXMgdG8KLSAgICAg ICBmaXggdGhpcy4gTG9hZGluZyB0aGUgam95bWFwIGxhdGVyIGluIHRoZSBpbml0IGdldHMg YXJvdW5kIHRoaXMgaXNzdWUuICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2Rsam95c3Rp Y2tbam95bnVtXS5pbnB1dF9tYXhbQVhJU10gKiBpbnB1dF9tdWx0W0FYSVNdOyArK2kpIHsK LSAgICAgICAgam95cG9ydCA9ICgoMSArIGpveW51bSArICgoaSAmIDQpID4+IDIpKSAmIDEp OwotICAgICAgICBwaW4gPSA4ID4+IChpICYgMyk7Ci0KLSAgICAgICAgLyogUG9sbCBlYWNo IGpveXN0aWNrIGF4aXMgb25jZSAqLwotICAgICAgICBpZiAoKGkgJSBpbnB1dF9tdWx0W0FY SVNdKSA9PSAwKSB7Ci0gICAgICAgICAgICBzdGF0ZSA9IFNETF9Kb3lzdGlja0dldEF4aXMo c2Rsam95c3RpY2tbam95bnVtXS5qb3lwdHIsIGkgLyBpbnB1dF9tdWx0W0FYSVNdKTsKLSAg ICAgICAgfQotCi0gICAgICAgIC8qIENoZWNrIHRoYXQgdGhlIGRlZmF1bHQgam95c3RpY2sg dmFsdWUgaXMgd2l0aGluIHRoZSB0aHJlc2hvbGQuCi0gICAgICAgICAgIFNvbWUgZGV2aWNl cyBoYXZlIGF4ZXMgdGhhdCBhcmUgKy8tMzI3Njcgd2hlbiBpZGxlOyBtYXBwaW5nCi0gICAg ICAgICAgIHRob3NlIHRvIE5PTkUgKGJ5IGRlZmF1bHQpIGF2b2lkcyBzb21lIHByb2JsZW1z LiAqLwotICAgICAgICBpZiAoKHN0YXRlID4gam95c3RpY2tfdGhyZXNob2xkKSB8fCAoc3Rh dGUgPCAtam95c3RpY2tfdGhyZXNob2xkKSkgewotICAgICAgICAgICAgbG9nX3dhcm5pbmco c2Rsam95X2xvZywgIkF4aXMgJWkgZXhjZWVkcyB0aHJlc2hvbGQsIG1hcHBpbmcgdG8gTk9O RSIsIGkgLyBpbnB1dF9tdWx0W0FYSVNdKTsKLSAgICAgICAgICAgIGZvciAoaiA9IDA7IGog PCBpbnB1dF9tdWx0W0FYSVNdOyArK2opIHsKLSAgICAgICAgICAgICAgICBzZGxqb3lzdGlj a1tqb3ludW1dLmlucHV0W0FYSVNdW2kgKyBqXS5hY3Rpb24gPSBOT05FOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaSArPSAoaiAtIDEpOwotICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtBWElTXVtpXS5hY3Rpb24gPSBK T1lTVElDSzsKLSAgICAgICAgICAgIHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbQVhJU11b aV0udmFsdWUuam95WzBdID0gam95cG9ydDsKLSAgICAgICAgICAgIHNkbGpveXN0aWNrW2pv eW51bV0uaW5wdXRbQVhJU11baV0udmFsdWUuam95WzFdID0gcGluOwotICAgICAgICB9Ci0g ICAgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRf bWF4W0JVVFRPTl0gKiBpbnB1dF9tdWx0W0JVVFRPTl07ICsraSkgewotICAgICAgICBzd2l0 Y2ggKGkgJiAzKSB7Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBjYXNlIDM6 Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGpveXBvcnQgPSAoKDEg KyBqb3ludW0gKyAoaSAmIDEpKSAmIDEpOwotICAgICAgICAgICAgICAgIHBpbiA9IDEgPDwg NDsKLSAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0JVVFRPTl1b aV0uYWN0aW9uID0gSk9ZU1RJQ0s7Ci0gICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbam95 bnVtXS5pbnB1dFtCVVRUT05dW2ldLnZhbHVlLmpveVswXSA9IGpveXBvcnQ7Ci0gICAgICAg ICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtCVVRUT05dW2ldLnZhbHVlLmpv eVsxXSA9IHBpbjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug MToKLSAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0JVVFRPTl1b aV0uYWN0aW9uID0gVUlfQUNUSVZBVEU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5p bnB1dFtCVVRUT05dW2ldLmFjdGlvbiA9IE1BUDsKLSAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBzZGxqb3lzdGlja1tq b3ludW1dLmlucHV0X21heFtIQVRdICogaW5wdXRfbXVsdFtIQVRdOyArK2kpIHsKLSAgICAg ICAgam95cG9ydCA9ICgoMSArIGpveW51bSArICgoaSAmIDQpID4+IDIpKSAmIDEpOwotICAg ICAgICBwaW4gPSAxIDw8IChpICYgMyk7Ci0KLSAgICAgICAgc2Rsam95c3RpY2tbam95bnVt XS5pbnB1dFtIQVRdW2ldLmFjdGlvbiA9IEpPWVNUSUNLOwotICAgICAgICBzZGxqb3lzdGlj a1tqb3ludW1dLmlucHV0W0hBVF1baV0udmFsdWUuam95WzBdID0gam95cG9ydDsKLSAgICAg ICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2ldLnZhbHVlLmpveVsxXSA9IHBp bjsKLSAgICB9Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2Rsam95c3RpY2tbam95bnVtXS5p bnB1dF9tYXhbQkFMTF0gKiBpbnB1dF9tdWx0W0JBTExdOyArK2kpIHsKLSAgICAgICAgc2Rs am95c3RpY2tbam95bnVtXS5pbnB1dFtCQUxMXVtpXS5hY3Rpb24gPSBOT05FOwotICAgIH0K LX0KLQotc3RhdGljIGNoYXIgbWFwcGluZ19yZXR2YWxbNTBdOwotCi1jaGFyICpnZXRfam95 X3BvdF9tYXBwaW5nX3N0cmluZyhpbnQgam95bnIsIGludCBwb3QpCi17Ci0gICAgdWludDE2 X3QgcG9ydGF4aXMgPSAweGZmZmY7Ci0gICAgdWludDhfdCBwb3J0ID0gcG9ydGF4aXMgPj4g ODsKLSAgICB1aW50OF90IGF4aXMgPSBwb3J0YXhpcyAmIDB4ZmY7Ci0gICAgY2hhciAqcmV0 dmFsID0gTlVMTDsKLQotICAgIGlmIChqb3luciA8PSAxICYmIHBvdCA8PSAxKSB7Ci0gICAg ICAgIHBvcnRheGlzID0gc2Rsam95c3RpY2tfYXhpc19tYXBwaW5nWyhqb3luciA8PCAxKSB8 IHBvdF07Ci0gICAgfQotCi0gICAgaWYgKHBvcnQgIT0gMjU1ICYmIGF4aXMgIT0gMjU1KSB7 Ci0gICAgICAgIHNucHJpbnRmKG1hcHBpbmdfcmV0dmFsLCA1MCwgIkolZCwgQXglZCIsIHBv cnQsIGF4aXMpOwotICAgICAgICByZXR2YWwgPSBtYXBwaW5nX3JldHZhbDsKLSAgICB9Ci0g ICAgcmV0dXJuIHJldHZhbDsKLX0KLQotY2hhciAqZ2V0X2pveV9waW5fbWFwcGluZ19zdHJp bmcoaW50IGpveW5yLCBpbnQgcGluKQotewotICAgIGludCBpLCBrOwotICAgIHNkbGpveXN0 aWNrX2lucHV0X3QgajsKLSAgICBzZGxqb3lzdGlja19hY3Rpb25fdCB0OwotICAgIGludCB2 YWxpZCA9IDA7Ci0gICAgaW50IGpveSA9IDA7Ci0gICAgaW50IHR5cGUgPSAwOwotICAgIGlu dCBpbmRleCA9IDA7Ci0gICAgaW50IHN1Yl9pbmRleCA9IDA7Ci0gICAgY2hhciAqcmV0dmFs ID0gTlVMTDsKLSAgICBjaGFyICp0eXBlX3N0cmluZyA9IE5VTEw7Ci0gICAgY2hhciAqaW5k ZXhfc3RyaW5nID0gTlVMTDsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBudW1fam95c3RpY2tz OyArK2kpIHsKLSAgICAgICAgZm9yIChqID0gQVhJUzsgaiA8IE5VTV9JTlBVVF9UWVBFUzsg KytqKSB7Ci0gICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgc2Rsam95c3RpY2tbaV0uaW5w dXRfbWF4W2pdICogaW5wdXRfbXVsdFtqXTsgKytrKSB7Ci0gICAgICAgICAgICAgICAgdCA9 IHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLmFjdGlvbjsKLSAgICAgICAgICAgICAgICBp ZiAodCA9PSBKT1lTVElDSykgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2Rsam95c3Rp Y2tbaV0uaW5wdXRbal1ba10udmFsdWUuam95WzBdID09IGpveW5yICYmIHNkbGpveXN0aWNr W2ldLmlucHV0W2pdW2tdLnZhbHVlLmpveVsxXSA9PSBwaW4pIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHZhbGlkKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqb3kgPSBpOwot ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGo7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IEFYSVM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfc3RyaW5nID0g IkF4IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfc3RyaW5nID0g IkkiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGsgLyAyOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJfaW5kZXggPSBrICUgMjsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSBCVVRUT046Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHR5cGVfc3RyaW5nID0gIkJ0IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5kZXhfc3RyaW5nID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5kZXggPSBrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJfaW5k ZXggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEhBVDoKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdHlwZV9zdHJpbmcgPSAiSHQiOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbmRleF9zdHJpbmcgPSAiSSI7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGluZGV4ID0gayAvIDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN1Yl9pbmRleCA9IGsgJSA0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJBTEw6Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfc3RyaW5nID0gIkJsIjsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfc3RyaW5nID0gTlVMTDsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBrOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdWJfaW5kZXggPSAwOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgIH0KLSAgICBpZiAodmFsaWQgPiAxKSB7Ci0gICAgICAgIHJldHZhbCA9ICJN dWx0aXBsZSI7Ci0gICAgfQotICAgIGlmICh2YWxpZCA9PSAxKSB7Ci0gICAgICAgIGlmIChp bmRleF9zdHJpbmcgIT0gTlVMTCApIHsKLSAgICAgICAgICAgIHNucHJpbnRmKG1hcHBpbmdf cmV0dmFsLCA1MCwgIkolZCwgJXMlZCwgJXMlZCIsIGpveSwgdHlwZV9zdHJpbmcsIGluZGV4 LCBpbmRleF9zdHJpbmcsIHN1Yl9pbmRleCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICBzbnByaW50ZihtYXBwaW5nX3JldHZhbCwgNTAsICJKJWQsICVzJWQiLCBqb3ksIHR5 cGVfc3RyaW5nLCBpbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0gbWFwcGlu Z19yZXR2YWw7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldHZhbDsKLX0KLQotdm9pZCBzZGxq b3lfZGVsZXRlX3BvdF9tYXBwaW5nKGludCBwb3J0LCBpbnQgcG90KQotewotICAgIGludCBp LCBrOwotICAgIHNkbGpveXN0aWNrX2lucHV0X3QgajsKLSAgICBzZGxqb3lzdGlja19hY3Rp b25fdCB0OwotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lzdGlja3M7ICsraSkgewot ICAgICAgICBmb3IgKGogPSBBWElTOyBqIDwgTlVNX0lOUFVUX1RZUEVTOyArK2opIHsKLSAg ICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBzZGxqb3lzdGlja1tpXS5pbnB1dF9tYXhbal0g KiBpbnB1dF9tdWx0W2pdOyArK2spIHsKLSAgICAgICAgICAgICAgICB0ID0gc2Rsam95c3Rp Y2tbaV0uaW5wdXRbal1ba10uYWN0aW9uOwotICAgICAgICAgICAgICAgIGlmICh0ID09IFBP VF9BWElTKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZGxqb3lzdGlja1tpXS5pbnB1 dFtqXVtrXS52YWx1ZS5heGlzWzBdID09IHBvcnQgJiYgc2Rsam95c3RpY2tbaV0uaW5wdXRb al1ba10udmFsdWUuYXhpc1sxXSA9PSBwb3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLmFjdGlvbiA9IE5PTkU7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52YWx1ZS5heGlzWzBd ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNkbGpveXN0aWNrW2ldLmlucHV0W2pd W2tdLnZhbHVlLmF4aXNbMV0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgIGlmIChwb3J0IDw9IDEgJiYgcG90IDw9IDEpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHNkbGpveXN0aWNrX2F4aXNfbWFwcGluZ1socG9ydCA8PCAxKSB8IHBv dF0gPSAweGZmZmY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgc2Rsam95X2Rl bGV0ZV9waW5fbWFwcGluZyhpbnQgcG9ydCwgaW50IHBpbikKLXsKLSAgICBpbnQgaSwgazsK LSAgICBzZGxqb3lzdGlja19pbnB1dF90IGo7Ci0gICAgc2Rsam95c3RpY2tfYWN0aW9uX3Qg dDsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBudW1fam95c3RpY2tzOyArK2kpIHsKLSAgICAg ICAgZm9yIChqID0gQVhJUzsgaiA8IE5VTV9JTlBVVF9UWVBFUzsgKytqKSB7Ci0gICAgICAg ICAgICBmb3IgKGsgPSAwOyBrIDwgc2Rsam95c3RpY2tbaV0uaW5wdXRfbWF4W2pdICogaW5w dXRfbXVsdFtqXTsgKytrKSB7Ci0gICAgICAgICAgICAgICAgdCA9IHNkbGpveXN0aWNrW2ld LmlucHV0W2pdW2tdLmFjdGlvbjsKLSAgICAgICAgICAgICAgICBpZiAodCA9PSBKT1lTVElD SykgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2Rsam95c3RpY2tbaV0uaW5wdXRbal1b a10udmFsdWUuam95WzBdID09IHBvcnQgJiYgc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10u dmFsdWUuam95WzFdID09IHBpbikgewotICAgICAgICAgICAgICAgICAgICAgICAgc2Rsam95 c3RpY2tbaV0uaW5wdXRbal1ba10uYWN0aW9uID0gTk9ORTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLmpveVswXSA9IDA7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52YWx1 ZS5qb3lbMV0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1pbnQgam95X2FyY2hf bWFwcGluZ19kdW1wKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewotICAgIEZJTEUgKmZwOwot ICAgIGludCBpLCBrOwotICAgIHNkbGpveXN0aWNrX2lucHV0X3QgajsKLSAgICBzZGxqb3lz dGlja19hY3Rpb25fdCB0OwotICAgIGNoYXIgKmhvdGtleV9wYXRoID0gTlVMTDsKLQotI2lm ZGVmIFNETF9ERUJVRwotICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIF9fZnVuY19fKTsK LSNlbmRpZgotCi0gICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJu IC0xOwotICAgIH0KLQotICAgIGZwID0gZm9wZW4oZmlsZW5hbWUsIE1PREVfV1JJVEVfVEVY VCk7Ci0KLSAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAg fQotCi0gICAgZnByaW50ZihmcCwgIiMgVklDRSBqb3lzdGljayBtYXBwaW5nIGZpbGVcbiIK LSAgICAgICAgICAgICIjXG4iCi0gICAgICAgICAgICAiIyBBIGpveXN0aWNrIG1hcCBpcyBy ZWFkIGluIGFzIHBhdGNoIHRvIHRoZSBjdXJyZW50IG1hcC5cbiIKLSAgICAgICAgICAgICIj XG4iCi0gICAgICAgICAgICAiIyBGaWxlIGZvcm1hdDpcbiIKLSAgICAgICAgICAgICIjIC0g Y29tbWVudCBsaW5lcyBzdGFydCB3aXRoICcjJ1xuIgotICAgICAgICAgICAgIiMgLSBrZXl3 b3JkIGxpbmVzIHN0YXJ0IHdpdGggJyFrZXl3b3JkJ1xuIgotICAgICAgICAgICAgIiMgLSBu b3JtYWwgbGluZSBoYXMgJ2pveW51bSBpbnB1dHR5cGUgaW5wdXRpbmRleCBhY3Rpb24nXG4i Ci0gICAgICAgICAgICAiI1xuIgotICAgICAgICAgICAgIiMgS2V5d29yZHMgYW5kIHRoZWly IGxpbmVzIGFyZTpcbiIKLSAgICAgICAgICAgICIjICchQ0xFQVInICAgIGNsZWFyIGFsbCBt YXBwaW5nc1xuIgotICAgICAgICAgICAgIiNcbiIKLSAgICAgICAgICAgICk7Ci0KLSAgICBm cHJpbnRmKGZwLCAiIyBpbnB1dHR5cGU6XG4iCi0gICAgICAgICAgICAiIyAwICAgICAgYXhp c1xuIgotICAgICAgICAgICAgIiMgMSAgICAgIGJ1dHRvblxuIgotICAgICAgICAgICAgIiMg MiAgICAgIGhhdFxuIgotICAgICAgICAgICAgIiMgMyAgICAgIGJhbGxcbiIKLSAgICAgICAg ICAgICIjXG4iCi0gICAgICAgICAgICAiIyBOb3RlIHRoYXQgZWFjaCBheGlzIGhhcyAyIGlu cHV0aW5kZXggZW50cmllcyBhbmQgZWFjaCBoYXQgaGFzIDQuXG4iCi0gICAgICAgICAgICAi I1xuIgotICAgICAgICAgICAgIiMgYWN0aW9uIFthY3Rpb25fcGFyYW1ldGVyc106XG4iCi0g ICAgICAgICAgICAiIyAwICAgICAgICAgICAgICAgbm9uZVxuIgotICAgICAgICAgICAgIiMg MSBwb3J0IHBpbiAgICAgIGpveXN0aWNrIChwaW46IDEvMi80LzgvMTYvMzIvNjQvMTI4LzI1 Ni81MTIvMTAyNC8yMDQ4ID0gdS9kL2wvci9maXJlKEEpL2ZpcmUyKEIpL2ZpcmUzKFgpL1kv TEIvUkIvc2VsZWN0L3N0YXJ0KVxuIgotICAgICAgICAgICAgIiMgMiByb3cgY29sICAgICAg IGtleWJvYXJkXG4iCi0gICAgICAgICAgICAiIyAzICAgICAgICAgICAgICAgbWFwXG4iCi0g ICAgICAgICAgICAiIyA0ICAgICAgICAgICAgICAgVUkgYWN0aXZhdGVcbiIKLSAgICAgICAg ICAgICIjIDUgcGF0aCZ0byZpdGVtICBVSSBmdW5jdGlvblxuIgotICAgICAgICAgICAgIiMg NiBwb3QgYXhpcyAgICAgIGpveXN0aWNrIChwb3Q6IDEvMi8zLzQgPSB4MS95MS94Mi95Milc biIKLSAgICAgICAgICAgICIjXG5cbiIKLSAgICAgICAgICAgICk7Ci0KLSAgICBmcHJpbnRm KGZwLCAiIUNMRUFSXG5cbiIpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lzdGlj a3M7ICsraSkgewotICAgICAgICBmcHJpbnRmKGZwLCAiIyAlc1xuIiwgc2Rsam95c3RpY2tb aV0ubmFtZSk7Ci0gICAgICAgIGZvciAoaiA9IEFYSVM7IGogPCBOVU1fSU5QVVRfVFlQRVM7 ICsraikgewotICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IHNkbGpveXN0aWNrW2ldLmlu cHV0X21heFtqXSAqIGlucHV0X211bHRbal07ICsraykgewotICAgICAgICAgICAgICAgIHQg PSBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS5hY3Rpb247Ci0gICAgICAgICAgICAgICAg ZnByaW50ZihmcCwgIiVpICV1ICVpICV1IiwgaSwgaiwgaywgdCk7Ci0gICAgICAgICAgICAg ICAgc3dpdGNoICh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSk9ZU1RJQ0s6Ci0g ICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiICVpICVpIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10udmFs dWUuam95WzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlj a1tpXS5pbnB1dFtqXVtrXS52YWx1ZS5qb3lbMV0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgICAgICBjYXNlIEtFWUJPQVJEOgotICAgICAgICAgICAgICAgICAgICAgICAgZnBy aW50ZihmcCwgIiAlaSAlaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNk bGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLmtleVswXSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUua2V5 WzFdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVSV9GVU5DVElP TjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvdGtleV9wYXRoID0gc2RsX3VpX2hvdGtl eV9wYXRoKHNkbGpveXN0aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLnVpX2Z1bmN0aW9uKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIgJXMiLCBob3RrZXlfcGF0 aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaWJfZnJlZShob3RrZXlfcGF0aCk7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz ZSBQT1RfQVhJUzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIgJWkg JWkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tpXS5p bnB1dFtqXVtrXS52YWx1ZS5heGlzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS52YWx1ZS5heGlzWzFdCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcHJp bnRmKGZwLCAiXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZwcmludGYoZnAs ICJcbiIpOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYoZnAsICJcblxuIik7Ci0gICAg fQotCi0gICAgZmNsb3NlKGZwKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9p ZCBqb3lfYXJjaF9rZXl3b3JkX2NsZWFyKHZvaWQpCi17Ci0gICAgaW50IGksIGs7Ci0gICAg c2Rsam95c3RpY2tfaW5wdXRfdCBqOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lz dGlja3M7ICsraSkgewotICAgICAgICBmb3IgKGogPSBBWElTOyBqIDwgTlVNX0lOUFVUX1RZ UEVTOyArK2opIHsKLSAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBzZGxqb3lzdGlja1tp XS5pbnB1dF9tYXhbal0gKiBpbnB1dF9tdWx0W2pdOyArK2spIHsKLSAgICAgICAgICAgICAg ICBzZGxqb3lzdGlja1tpXS5pbnB1dFtqXVtrXS5hY3Rpb24gPSBOT05FOwotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBqb3lfYXJjaF9wYXJz ZV9rZXl3b3JkKGNoYXIgKmJ1ZmZlcikKLXsKLSAgICBjaGFyICprZXk7Ci0KLSAgICBrZXkg PSBzdHJ0b2soYnVmZmVyICsgMSwgIiBcdDoiKTsKLQotICAgIGlmICghc3RyY21wKGtleSwg IkNMRUFSIikpIHsKLSAgICAgICAgam95X2FyY2hfa2V5d29yZF9jbGVhcigpOwotICAgIH0K LX0KLQotc3RhdGljIHZvaWQgam95X2FyY2hfcGFyc2VfZW50cnkoY2hhciAqYnVmZmVyKQot ewotICAgIGNoYXIgKnA7Ci0gICAgaW50IGpveW51bSwgaW5wdXRpbmRleCwgZGF0YTEgPSAw LCBkYXRhMiA9IDA7Ci0gICAgc2Rsam95c3RpY2tfaW5wdXRfdCBpbnB1dHR5cGU7Ci0gICAg c2Rsam95c3RpY2tfYWN0aW9uX3QgYWN0aW9uOwotCi0gICAgcCA9IHN0cnRvayhidWZmZXIs ICIgXHQ6Iik7Ci0KLSAgICBqb3ludW0gPSBhdG9pKHApOwotCi0gICAgaWYgKGpveW51bSA+ PSBudW1fam95c3RpY2tzKSB7Ci0gICAgICAgIGxvZ19lcnJvcihzZGxqb3lfbG9nLCAiQ291 bGQgbm90IGZpbmQgam95c3RpY2sgJWkhIiwgam95bnVtKTsKLSAgICAgICAgcmV0dXJuOwot ICAgIH0KLQotICAgIHAgPSBzdHJ0b2soTlVMTCwgIiBcdCwiKTsKLSAgICBpZiAocCAhPSBO VUxMKSB7Ci0gICAgICAgIGlucHV0dHlwZSA9IChzZGxqb3lzdGlja19pbnB1dF90KWF0b2ko cCk7Ci0gICAgICAgIHAgPSBzdHJ0b2soTlVMTCwgIiBcdCwiKTsKLSAgICAgICAgaWYgKHAg IT0gTlVMTCkgewotICAgICAgICAgICAgaW5wdXRpbmRleCA9IGF0b2kocCk7Ci0gICAgICAg ICAgICBwID0gc3RydG9rKE5VTEwsICIgXHQiKTsKLSAgICAgICAgICAgIGlmIChwICE9IE5V TEwpIHsKLSAgICAgICAgICAgICAgICBhY3Rpb24gPSAoc2Rsam95c3RpY2tfYWN0aW9uX3Qp YXRvaShwKTsKLQotICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7Ci0gICAgICAg ICAgICAgICAgICAgIGNhc2UgVUlfRlVOQ1RJT046Ci0gICAgICAgICAgICAgICAgICAgICAg ICBwID0gc3RydG9rKE5VTEwsICJcdFxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEpPWVNUSUNLOgotICAgICAgICAg ICAgICAgICAgICBjYXNlIFBPVF9BWElTOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEtF WUJPQVJEOgotICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHN0cnRvayhOVUxMLCAiIFx0 Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhMSA9IGF0b2kocCk7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBwID0gc3RydG9rKE5VTEwsICIgXHQiKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGRhdGEyID0gYXRvaShwKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg aWYgKGlucHV0aW5kZXggPCBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0X21heFtpbnB1dHR5 cGVdICogaW5wdXRfbXVsdFtpbnB1dHR5cGVdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNk bGpveXN0aWNrW2pveW51bV0uaW5wdXRbaW5wdXR0eXBlXVtpbnB1dGluZGV4XS5hY3Rpb24g PSBhY3Rpb247Ci0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24pIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSk9ZU1RJQ0s6Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtpbnB1dHR5cGVdW2lucHV0 aW5kZXhdLnZhbHVlLmpveVswXSA9IGRhdGExOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbaW5wdXR0eXBlXVtpbnB1dGluZGV4XS52 YWx1ZS5qb3lbMV0gPSBkYXRhMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUE9UX0FYSVM6Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtpbnB1dHR5cGVd W2lucHV0aW5kZXhdLnZhbHVlLmF4aXNbMF0gPSBkYXRhMTsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W2lucHV0dHlwZV1baW5wdXRp bmRleF0udmFsdWUuYXhpc1sxXSA9IGRhdGEyOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChkYXRhMSA8PSAxICYmIGRhdGEyIDw9IDEpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2Rsam95c3RpY2tfYXhpc19tYXBwaW5nWyhkYXRhMSA8PCAxKSB8 IGRhdGEyXSA9IChqb3ludW0gPDwgOCkgfCAoaW5wdXRpbmRleCAvIDIpOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNfc2V0X2ludF9zcHJpbnRmKCJQYWRk bGVzSW5wdXQlZCIsIFBBRERMRVNfSU5QVVRfSk9ZX0FYSVMsIGRhdGExICsgMSk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlCT0FSRDoKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W2lucHV0 dHlwZV1baW5wdXRpbmRleF0udmFsdWUua2V5WzBdID0gZGF0YTE7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtpbnB1dHR5cGVdW2lu cHV0aW5kZXhdLnZhbHVlLmtleVsxXSA9IGRhdGEyOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBVSV9GVU5DVElP TjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlu cHV0W2lucHV0dHlwZV1baW5wdXRpbmRleF0udmFsdWUudWlfZnVuY3Rpb24gPSBzZGxfdWlf aG90a2V5X2FjdGlvbihwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsb2dfd2FybmluZyhzZGxqb3lfbG9n LCAiaW5wdXRpbmRleCAlaSB0b28gbGFyZ2UgZm9yIGlucHV0dHlwZSAldSwgam95bnVtICVp ISIsIGlucHV0aW5kZXgsIGlucHV0dHlwZSwgam95bnVtKTsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWludCBqb3lfYXJjaF9t YXBwaW5nX2xvYWQoY29uc3QgY2hhciAqZmlsZW5hbWUpCi17Ci0gICAgRklMRSAqZnA7Ci0g ICAgY2hhciAqY29tcGxldGVfcGF0aDsKLSAgICBjaGFyIGJ1ZmZlclsxMDAwXTsKLQotI2lm ZGVmIFNETF9ERUJVRwotICAgIGZwcmludGYoc3RkZXJyLCAiJXMsICVzXG4iLCBfX2Z1bmNf XywgZmlsZW5hbWUpOwotI2VuZGlmCi0KLSAgICAvKiBTaWxlbnRseSBpZ25vcmUga2V5bWFw IGxvYWQgb24gcmVzb3VyY2UgJiBjbWRsaW5lIGluaXQgKi8KLSAgICBpZiAoc2Rsam95c3Rp Y2sgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoZmls ZW5hbWUgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgZnAg PSBzeXNmaWxlX29wZW4oZmlsZW5hbWUsIE5VTEwsICZjb21wbGV0ZV9wYXRoLCBNT0RFX1JF QURfVEVYVCk7Ci0KLSAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBsb2dfd2Fybmlu ZyhzZGxqb3lfbG9nLCAiRmFpbGVkIHRvIG9wZW4gYCVzJy4iLCBmaWxlbmFtZSk7Ci0gICAg ICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBsb2dfbWVzc2FnZShzZGxqb3lfbG9nLCAi TG9hZGluZyBqb3lzdGljayBtYXAgYCVzJy4iLCBjb21wbGV0ZV9wYXRoKTsKLQotICAgIGxp Yl9mcmVlKGNvbXBsZXRlX3BhdGgpOwotCi0gICAgZG8gewotICAgICAgICBidWZmZXJbMF0g PSAwOwotICAgICAgICBpZiAoZmdldHMoYnVmZmVyLCA5OTksIGZwKSkgewotICAgICAgICAg ICAgY2hhciAqcDsKLQotICAgICAgICAgICAgaWYgKHN0cmxlbihidWZmZXIpID09IDApIHsK LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg YnVmZmVyW3N0cmxlbihidWZmZXIpIC0gMV0gPSAwOyAvKiByZW1vdmUgbmV3bGluZSAqLwot Ci0gICAgICAgICAgICAvKiByZW1vdmUgY29tbWVudHMgKi8KLSAgICAgICAgICAgIGlmICgo cCA9IHN0cmNocihidWZmZXIsICcjJykpKSB7Ci0gICAgICAgICAgICAgICAgKnAgPSAwOwot ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiByZW1vdmUgd2hpdGVzcGFjZSBhdCB0 aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lICovCi0gICAgICAgICAgICBwID0gYnVmZmVyOwot ICAgICAgICAgICAgd2hpbGUgKCgoKnAgPT0gJyAnKSB8fCAoKnAgPT0gJ1x0JykpICYmICgq cCAhPSAwKSkgewotICAgICAgICAgICAgICAgICsrcDsKLSAgICAgICAgICAgIH0KLQotICAg ICAgICAgICAgc3dpdGNoICgqcCkgewotICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnISc6Ci0gICAg ICAgICAgICAgICAgICAgIC8qIGtleXdvcmQgaGFuZGxpbmcgKi8KLSAgICAgICAgICAgICAg ICAgICAgam95X2FyY2hfcGFyc2Vfa2V5d29yZChwKTsKLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg LyogdGFibGUgZW50cnkgaGFuZGxpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgam95X2Fy Y2hfcGFyc2VfZW50cnkocCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoIWZlb2YoZnApKTsKLSAgICBmY2xv c2UoZnApOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g Ki8KLQotc3RhdGljIGlubGluZSB1aW50OF90IHNkbGpveV9heGlzX2RpcmVjdGlvbihTaW50 MTYgdmFsdWUsIHVpbnQ4X3QgcHJldikKLXsKICAgICBpbnQgdGhyZXMgPSBqb3lzdGlja190 aHJlc2hvbGQ7CiAKLSAgICBpZiAocHJldiA9PSAwKSB7CisgICAgaWYgKHByZXYgPT0gSk9Z X0FYSVNfTUlERExFKSB7CiAgICAgICAgIHRocmVzICs9IGpveXN0aWNrX2Z1eno7CiAgICAg fSBlbHNlIHsKICAgICAgICAgdGhyZXMgLT0gam95c3RpY2tfZnV6ejsKQEAgLTEwMzIsMTEg KzMyMiwxMSBAQAogICAgIH0KIAogICAgIGlmICh2YWx1ZSA8IC10aHJlcykgewotICAgICAg ICByZXR1cm4gMjsKKyAgICAgICAgcmV0dXJuIEpPWV9BWElTX05FR0FUSVZFOwogICAgIH0g ZWxzZSBpZiAodmFsdWUgPiB0aHJlcykgewotICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg cmV0dXJuIEpPWV9BWElTX1BPU0lUSVZFOwogICAgIH0gZWxzZSBpZiAoKHZhbHVlIDwgdGhy ZXMpICYmICh2YWx1ZSA+IC10aHJlcykpIHsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg IHJldHVybiBKT1lfQVhJU19NSURETEU7CiAgICAgfQogCiAgICAgcmV0dXJuIHByZXY7CkBA IC0xMDY2LDM4ICszNTYsMjYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHNkbGpv eXN0aWNrX21hcHBpbmdfdCAqc2Rsam95X2dldF9tYXBwaW5nKFNETF9FdmVudCBlKQorc3Rh dGljIGpveXN0aWNrX21hcHBpbmdfdCAqc2Rsam95X2dldF9tYXBwaW5nKFNETF9FdmVudCBl KQogewotICAgIHNkbGpveXN0aWNrX21hcHBpbmdfdCAqcmV0dmFsID0gTlVMTDsKKyAgICBq b3lzdGlja19tYXBwaW5nX3QgKnJldHZhbCA9IE5VTEw7CiAgICAgdWludDhfdCBjdXI7Ci0g ICAgaW50IGpveW51bTsKIAogICAgIHN3aXRjaCAoZS50eXBlKSB7CiAgICAgICAgIGNhc2Ug U0RMX0pPWUFYSVNNT1RJT046CiAgICAgICAgICAgICBjdXIgPSBzZGxqb3lfYXhpc19kaXJl Y3Rpb24oZS5qYXhpcy52YWx1ZSwgMCk7Ci0gICAgICAgICAgICBpZiAoY3VyID4gMCkgewot ICAgICAgICAgICAgICAgIC0tY3VyOwotICAgICAgICAgICAgICAgIGpveW51bSA9IHNkbGpv eV9nZXRfam95bnVtX2Zvcl9ldmVudChlLmpheGlzLndoaWNoKTsKLSAgICAgICAgICAgICAg ICBpZiAoam95bnVtICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9ICYo c2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtBWElTXVtlLmpheGlzLmF4aXMgKiBpbnB1dF9t dWx0W0FYSVNdICsgY3VyXSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KGN1ciAhPSBKT1lfQVhJU19NSURETEUpIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBq b3lfZ2V0X2F4aXNfbWFwcGluZyhlLmpheGlzLndoaWNoLCBlLmpheGlzLnZhbHVlLCBjdXIp OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU0RM X0pPWUhBVE1PVElPTjoKICAgICAgICAgICAgIGN1ciA9IHNkbGpveV9oYXRfZGlyZWN0aW9u KGUuamhhdC52YWx1ZSwgMCk7CiAgICAgICAgICAgICBpZiAoY3VyID4gMCkgewotICAgICAg ICAgICAgICAgIC0tY3VyOwotICAgICAgICAgICAgICAgIGpveW51bSA9IHNkbGpveV9nZXRf am95bnVtX2Zvcl9ldmVudChlLmpoYXQud2hpY2gpOwotICAgICAgICAgICAgICAgIGlmIChq b3ludW0gIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gJihzZGxqb3lz dGlja1tqb3ludW1dLmlucHV0W0hBVF1bZS5qaGF0LmhhdCAqIGlucHV0X211bHRbSEFUXSAr IGN1cl0pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR2YWwgPSBq b3lfZ2V0X2hhdF9tYXBwaW5nKGUuamhhdC53aGljaCwgZS5qaGF0LmhhdCwgY3VyKTsKICAg ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNETF9KT1lC VVRUT05ET1dOOgotICAgICAgICAgICAgam95bnVtID0gc2Rsam95X2dldF9qb3ludW1fZm9y X2V2ZW50KGUuamJ1dHRvbi53aGljaCk7Ci0gICAgICAgICAgICBpZiAoam95bnVtICE9IC0x KSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gJihzZGxqb3lzdGlja1tqb3ludW1dLmlu cHV0W0JVVFRPTl1bZS5qYnV0dG9uLmJ1dHRvbl0pOwotICAgICAgICAgICAgfQorICAgICAg ICAgICAgcmV0dmFsID0gam95X2dldF9idXR0b25fbWFwcGluZyhlLmpidXR0b24ud2hpY2gs IGUuamJ1dHRvbi5idXR0b24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1 bHQ6CiAgICAgICAgICAgICBicmVhazsKQEAgLTExMDUsNyArMzgzLDcgQEAKICAgICByZXR1 cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdWlfbWVudV9hY3Rpb25fdCBzZGxqb3lfcGVyZm9y bV9ldmVudChzZGxqb3lzdGlja19tYXBwaW5nX3QgKmV2ZW50LCBpbnQgdmFsdWUpCitzdGF0 aWMgam95c3RpY2tfYWN0aW9uX3Qgc2Rsam95X3BlcmZvcm1fZXZlbnQoam95c3RpY2tfbWFw cGluZ190ICpldmVudCwgaW50IHZhbHVlKQogewogICAgIHVpbnQ4X3QgdDsKICAgICB1aV9t ZW51X2FjdGlvbl90IHJldHZhbCA9IE1FTlVfQUNUSU9OX05PTkU7CkBAIC0xMTEyLDkgKzM5 MCw4IEBACiAKICAgICBhdXRvcmVwZWF0ID0gTUVOVV9BQ1RJT05fTk9ORTsKIAotICAgIGlm IChzZGxfbWVudV9zdGF0ZSB8fCAoc2RsX3ZrYmRfc3RhdGUgJiBTRExfVktCRF9BQ1RJVkUp KSB7CiAgICAgICAgIGlmIChldmVudC0+YWN0aW9uID09IEpPWVNUSUNLKSB7Ci0gICAgICAg ICAgICBzd2l0Y2ggKGV2ZW50LT52YWx1ZS5qb3lbMV0pIHsKKyAgICAgICAgICAgIHN3aXRj aCAoZXZlbnQtPnZhbHVlLmpveV9waW4pIHsKICAgICAgICAgICAgICAgICBjYXNlIDB4MDE6 CiAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IGF1dG9yZXBlYXQgPSBNRU5VX0FDVElP Tl9VUDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTQ0LDQwICs0MjEsNiBA QAogICAgICAgICAgICAgcmV0dmFsICs9IE1FTlVfQUNUSU9OX05PTkVfUkVMRUFTRTsKICAg ICAgICAgfQogICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgIH0KLQotICAgIGF1dG9yZXBl YXRfZGVsYXkgPSAzMDsKLQotICAgIHN3aXRjaCAoZXZlbnQtPmFjdGlvbikgewotICAgICAg ICBjYXNlIEpPWVNUSUNLOgotICAgICAgICAgICAgdCA9IGV2ZW50LT52YWx1ZS5qb3lbMF07 Ci0gICAgICAgICAgICBpZiAoam95c3RpY2tfcG9ydF9tYXBbdF0gPT0gSk9ZREVWX0pPWVNU SUNLKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGpveXN0aWNrX3NldF92YWx1ZV9vcih0LCAodWludDE2X3QpZXZlbnQtPnZhbHVlLmpv eVsxXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg am95c3RpY2tfc2V0X3ZhbHVlX2FuZCh0LCAodWludDE2X3QpIH4oZXZlbnQtPnZhbHVlLmpv eVsxXSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICBjYXNlIEtFWUJPQVJEOgotICAgICAgICAgICAga2V5Ym9hcmRf c2V0X2tleWFycl9hbnkoZXZlbnQtPnZhbHVlLmtleVswXSwgZXZlbnQtPnZhbHVlLmtleVsx XSwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVUlfQUNUSVZB VEU6Ci0gICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBzZGxfdWlf YWN0aXZhdGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICBjYXNlIFVJX0ZVTkNUSU9OOgotICAgICAgICAgICAgaWYgKHZhbHVlICYmIGV2ZW50LT52 YWx1ZS51aV9mdW5jdGlvbikgewotICAgICAgICAgICAgICAgIHNkbF91aV9ob3RrZXkoZXZl bnQtPnZhbHVlLnVpX2Z1bmN0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICBjYXNlIE5PTkU6Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg ICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0dmFsOwogfQogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tICovCkBAIC0xMTk3LDE2OSArNDQwLDU4IEBACiAKIHVpbnQ4X3Qgc2Rs am95X2NoZWNrX2F4aXNfbW92ZW1lbnQoU0RMX0V2ZW50IGUpCiB7Ci0gICAgdWludDhfdCBj dXIsIHByZXY7Ci0gICAgaW50IGluZGV4OwotICAgIFVpbnQ4IGpveW51bTsKLSAgICBVaW50 OCBheGlzOwotICAgIFNpbnQxNiB2YWx1ZTsKLQotICAgIGpveW51bSA9IHNkbGpveV9nZXRf am95bnVtX2Zvcl9ldmVudChlLmpheGlzLndoaWNoKTsgICAgCi0gICAgYXhpcyA9IGUuamF4 aXMuYXhpczsKLSAgICB2YWx1ZSA9IGUuamF4aXMudmFsdWU7Ci0KLSAgICBpbmRleCA9IGF4 aXMgKiBpbnB1dF9tdWx0W0FYSVNdOwotICAgIHByZXYgPSBzZGxqb3lzdGlja1tqb3ludW1d LmlucHV0W0FYSVNdW2luZGV4XS5wcmV2OwotCi0gICAgY3VyID0gc2Rsam95X2F4aXNfZGly ZWN0aW9uKHZhbHVlLCBwcmV2KTsKLQotICAgIGlmIChjdXIgPT0gcHJldikgewotICAgICAg ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0FY SVNdW2luZGV4XS5wcmV2ID0gY3VyOwotICAgIHJldHVybiBjdXI7CisgICAgam95X2F4aXNf ZXZlbnQoZS5qYXhpcy53aGljaCwgZS5qYXhpcy5heGlzLCBlLmpheGlzLnZhbHVlKTsKKyAg ICByZXR1cm4gZS5qYXhpcy52YWx1ZTsKIH0KIAogdWludDhfdCBzZGxqb3lfY2hlY2tfaGF0 X21vdmVtZW50KFNETF9FdmVudCBlKQogewotICAgIHVpbnQ4X3QgY3VyLCBwcmV2OwotICAg IGludCBpbmRleDsKLSAgICBVaW50OCBqb3ludW07Ci0gICAgVWludDggaGF0OwotICAgIFVp bnQ4IHZhbHVlOwotCi0gICAgam95bnVtID0gc2Rsam95X2dldF9qb3ludW1fZm9yX2V2ZW50 KGUuamhhdC53aGljaCk7Ci0gICAgaGF0ID0gZS5qaGF0LmhhdDsKLSAgICB2YWx1ZSA9IGUu amhhdC52YWx1ZTsKLQotICAgIGluZGV4ID0gaGF0ICogaW5wdXRfbXVsdFtIQVRdOwotICAg IHByZXYgPSBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0hBVF1baW5kZXhdLnByZXY7Ci0K LSAgICBpZiAodmFsdWUgPT0gcHJldikgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K LSAgICBjdXIgPSBzZGxqb3lfaGF0X2RpcmVjdGlvbih2YWx1ZSwgcHJldik7Ci0KLSAgICBz ZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0hBVF1baW5kZXhdLnByZXYgPSB2YWx1ZTsKLSAg ICByZXR1cm4gY3VyOworICAgIGpveV9oYXRfZXZlbnQoZS5qaGF0LndoaWNoLCBlLmpoYXQu aGF0LCBlLmpoYXQudmFsdWUpOworICAgIHJldHVybiBlLmpoYXQudmFsdWU7CiB9CiAKLWlu dCBzZGxqb3lfZ2V0X2pveW51bV9mb3JfZXZlbnQoVWludDggZXZlbnRfZGV2aWNlX2lkKQor dm9pZCBzZGxqb3lfYXhpc19ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4IGF4aXMsIFNpbnQx NiB2YWx1ZSkKIHsKICAgICBpbnQgaTsKKyAgICBqb3lzdGlja19heGlzX3ZhbHVlX3QgY3Vy LCBwcmV2OworICAgIGludCBpbmRleDsKKyAgICB1aV9tZW51X2FjdGlvbl90IHJldHZhbCA9 IE1FTlVfQUNUSU9OX05PTkU7CisgICAgU2ludDE2IHZhbCA9IH52YWx1ZTsKKworICAgIHBy ZXYgPSBqb3lfYXhpc19wcmV2KGpveW51bSwgaW5kZXgpOworCisgICAgY3VyID0gc2Rsam95 X2F4aXNfZGlyZWN0aW9uKHZhbHVlLCBwcmV2KTsKICAgICAKLSAgICBmb3IgKGkgPSAwOyBp IDwgbnVtX2pveXN0aWNrczsgaSsrKSB7Ci0gICAgICAgIGlmIChzZGxqb3lzdGlja1tpXS5q b3lzdGlja2lkID09IGV2ZW50X2RldmljZV9pZCkgewotICAgICAgICAgICAgcmV0dXJuIGk7 Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIC0xOworICAgIGpveV9heGlz X2V2ZW50KGpveW51bSwgYXhpcywgY3VyKTsKIH0KIAotdWlfbWVudV9hY3Rpb25fdCBzZGxq b3lfYXhpc19ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4IGF4aXMsIFNpbnQxNiB2YWx1ZSkK K2pveXN0aWNrX2FjdGlvbl90IHNkbGpveV9heGlzX2V2ZW50X2Zvcl9tZW51X2FjdGlvbihV aW50OCBqb3ludW0sIFVpbnQ4IGF4aXMsIFNpbnQxNiB2YWx1ZSkKIHsKICAgICBpbnQgaTsK LSAgICB1aW50OF90IGN1ciwgcHJldjsKKyAgICBqb3lzdGlja19heGlzX3ZhbHVlX3QgY3Vy LCBwcmV2OwogICAgIGludCBpbmRleDsKLSAgICB1aV9tZW51X2FjdGlvbl90IHJldHZhbCA9 IE1FTlVfQUNUSU9OX05PTkU7CisgICAgam95c3RpY2tfYWN0aW9uX3QgcmV0dmFsID0gTUVO VV9BQ1RJT05fTk9ORTsKICAgICBTaW50MTYgdmFsID0gfnZhbHVlOworICAgIGpveXN0aWNr X21hcHBpbmdfdCogbWFwcGluZzsKIAotICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsK LSAgICAgICAgaWYgKHNkbGpveXN0aWNrX2F4aXNfbWFwcGluZ1tpXSA9PSAoKGpveW51bSA8 PCA4KSB8IGF4aXMpKSB7Ci0gICAgICAgICAgICBqb3lzdGlja19zZXRfYXhpc192YWx1ZShp LCAodWludDhfdCkoKHZhbCArIDMyNzY4KSA+PiA4KSk7Ci0gICAgICAgIH0KLSAgICB9Cisg ICAgcHJldiA9IGpveV9heGlzX3ByZXYoam95bnVtLCBpbmRleCk7CiAKLSAgICBpbmRleCA9 IGF4aXMgKiBpbnB1dF9tdWx0W0FYSVNdOwotICAgIHByZXYgPSBzZGxqb3lzdGlja1tqb3lu dW1dLmlucHV0W0FYSVNdW2luZGV4XS5wcmV2OwotCiAgICAgY3VyID0gc2Rsam95X2F4aXNf ZGlyZWN0aW9uKHZhbHVlLCBwcmV2KTsKLQotICAgIGlmIChjdXIgPT0gcHJldikgewotICAg ICAgICByZXR1cm4gcmV0dmFsOwotICAgIH0KLQotICAgIGlmIChjdXIgPT0gMSkgewotICAg ICAgICBpZiAocHJldiA9PSAyKSB7Ci0gICAgICAgICAgICBzZGxqb3lfcGVyZm9ybV9ldmVu dCgmKHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbQVhJU11baW5kZXggKyAxXSksIDApOwot ICAgICAgICB9Ci0gICAgICAgIHJldHZhbCA9IHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rs am95c3RpY2tbam95bnVtXS5pbnB1dFtBWElTXVtpbmRleF0pLCAxKTsKLSAgICB9IGVsc2Ug aWYgKGN1ciA9PSAyKSB7Ci0gICAgICAgIGlmIChwcmV2ID09IDEpIHsKLSAgICAgICAgICAg IHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtBWElT XVtpbmRleF0pLCAwKTsKLSAgICAgICAgfQotICAgICAgICByZXR2YWwgPSBzZGxqb3lfcGVy Zm9ybV9ldmVudCgmKHNkbGpveXN0aWNrW2pveW51bV0uaW5wdXRbQVhJU11baW5kZXggKyAx XSksIDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChwcmV2ID09IDEpIHsKLSAgICAg ICAgICAgIHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1 dFtBWElTXVtpbmRleF0pLCAwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNk bGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtBWElTXVtp bmRleCArIDFdKSwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzZGxqb3lzdGlja1tq b3ludW1dLmlucHV0W0FYSVNdW2luZGV4XS5wcmV2ID0gY3VyOwotICAgIHJldHVybiByZXR2 YWw7CisgICAgCisgICAgbWFwcGluZyA9IGpveV9nZXRfYXhpc19tYXBwaW5nKGpveW51bSwg YXhpcywgY3VyKTsKKyAgICByZXR1cm4gc2Rsam95X3BlcmZvcm1fZXZlbnQobWFwcGluZywg Y3VyKTsKIH0KIAotdWlfbWVudV9hY3Rpb25fdCBzZGxqb3lfYnV0dG9uX2V2ZW50KFVpbnQ4 IGpveW51bSwgVWludDggYnV0dG9uLCBVaW50OCB2YWx1ZSkKK2pveXN0aWNrX2FjdGlvbl90 IHNkbGpveV9idXR0b25fZXZlbnQoVWludDggam95bnVtLCBVaW50OCBidXR0b24sIFVpbnQ4 IHZhbHVlKQogewotICAgIHJldHVybiBzZGxqb3lfcGVyZm9ybV9ldmVudCgmKHNkbGpveXN0 aWNrW2pveW51bV0uaW5wdXRbQlVUVE9OXVtidXR0b25dKSwgdmFsdWUpOworICAgIGpveXN0 aWNrX21hcHBpbmdfdCogbWFwcGluZyA9IGpveV9nZXRfYnV0dG9uX21hcHBpbmcoam95bnVt LCBidXR0b24pOworICAgIHJldHVybiBzZGxqb3lfcGVyZm9ybV9ldmVudChtYXBwaW5nLCB2 YWx1ZSk7CiB9CiAKLXVpX21lbnVfYWN0aW9uX3Qgc2Rsam95X2hhdF9ldmVudChVaW50OCBq b3ludW0sIFVpbnQ4IGhhdCwgVWludDggdmFsdWUpCitqb3lzdGlja19hY3Rpb25fdCBzZGxq b3lfaGF0X2V2ZW50KFVpbnQ4IGpveW51bSwgVWludDggaGF0LCBVaW50OCB2YWx1ZSkKIHsK LSAgICB1aW50OF90IHByZXY7Ci0gICAgaW50IGluZGV4OwotICAgIHVpX21lbnVfYWN0aW9u X3QgcmV0dmFsID0gTUVOVV9BQ1RJT05fTk9ORTsKLQotICAgIGluZGV4ID0gaGF0ICogaW5w dXRfbXVsdFtIQVRdOwotICAgIHByZXYgPSBzZGxqb3lzdGlja1tqb3ludW1dLmlucHV0W0hB VF1baW5kZXhdLnByZXY7Ci0KLSAgICBpZiAodmFsdWUgPT0gcHJldikgewotICAgICAgICBy ZXR1cm4gcmV0dmFsOwotICAgIH0KLQotICAgIGlmICgodmFsdWUgJiBTRExfSEFUX1VQKSAm JiAoIShwcmV2ICYgU0RMX0hBVF9VUCkpKSB7Ci0gICAgICAgIGlmIChwcmV2ICYgU0RMX0hB VF9ET1dOKSB7Ci0gICAgICAgICAgICBzZGxqb3lfcGVyZm9ybV9ldmVudCgmKHNkbGpveXN0 aWNrW2pveW51bV0uaW5wdXRbSEFUXVtpbmRleCArIDFdKSwgMCk7Ci0gICAgICAgIH0KLSAg ICAgICAgcmV0dmFsID0gc2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3lu dW1dLmlucHV0W0hBVF1baW5kZXhdKSwgMSk7Ci0gICAgfSBlbHNlIGlmICgodmFsdWUgJiBT RExfSEFUX0RPV04pICYmICghKHByZXYgJiBTRExfSEFUX0RPV04pKSkgewotICAgICAgICBp ZiAocHJldiAmIFNETF9IQVRfVVApIHsKLSAgICAgICAgICAgIHNkbGpveV9wZXJmb3JtX2V2 ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2luZGV4XSksIDApOwotICAg ICAgICB9Ci0gICAgICAgIHJldHZhbCA9IHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95 c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2luZGV4ICsgMV0pLCAxKTsKLSAgICB9IGVsc2Ug ewotICAgICAgICBpZiAoKCEodmFsdWUgJiBTRExfSEFUX1VQKSkgJiYgKHByZXYgJiBTRExf SEFUX1VQKSkgewotICAgICAgICAgICAgc2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lz dGlja1tqb3ludW1dLmlucHV0W0hBVF1baW5kZXhdKSwgMCk7Ci0gICAgICAgIH0gZWxzZSBp ZiAoKCEodmFsdWUgJiBTRExfSEFUX0RPV04pKSAmJiAocHJldiAmIFNETF9IQVRfRE9XTikp IHsKLSAgICAgICAgICAgIHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95 bnVtXS5pbnB1dFtIQVRdW2luZGV4ICsgMV0pLCAwKTsKLSAgICAgICAgfQotICAgIH0KLQot ICAgIC8qIFRPRE8gYSByZXR2YWwgaXMgbWlzc2VkIG9uIHNpbXVsdGFuZW91cyBYL1kgZXZl bnRzICovCi0gICAgaWYgKCh2YWx1ZSAmIFNETF9IQVRfTEVGVCkgJiYgKCEocHJldiAmIFNE TF9IQVRfTEVGVCkpKSB7Ci0gICAgICAgIGlmIChwcmV2ICYgU0RMX0hBVF9SSUdIVCkgewot ICAgICAgICAgICAgc2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxqb3lzdGlja1tqb3ludW1d LmlucHV0W0hBVF1baW5kZXggKyAzXSksIDApOwotICAgICAgICB9Ci0gICAgICAgIHJldHZh bCA9IHNkbGpveV9wZXJmb3JtX2V2ZW50KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtI QVRdW2luZGV4ICsgMl0pLCAxKTsKLSAgICB9IGVsc2UgaWYgKCh2YWx1ZSAmIFNETF9IQVRf UklHSFQpICYmICghKHByZXYgJiBTRExfSEFUX1JJR0hUKSkpIHsKLSAgICAgICAgaWYgKHBy ZXYgJiBTRExfSEFUX0xFRlQpIHsKLSAgICAgICAgICAgIHNkbGpveV9wZXJmb3JtX2V2ZW50 KCYoc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2luZGV4ICsgMl0pLCAwKTsKLSAg ICAgICAgfQotICAgICAgICByZXR2YWwgPSBzZGxqb3lfcGVyZm9ybV9ldmVudCgmKHNkbGpv eXN0aWNrW2pveW51bV0uaW5wdXRbSEFUXVtpbmRleCArIDNdKSwgMSk7Ci0gICAgfSBlbHNl IHsKLSAgICAgICAgaWYgKCghKHZhbHVlICYgU0RMX0hBVF9MRUZUKSkgJiYgKHByZXYgJiBT RExfSEFUX0xFRlQpKSB7Ci0gICAgICAgICAgICBzZGxqb3lfcGVyZm9ybV9ldmVudCgmKHNk bGpveXN0aWNrW2pveW51bV0uaW5wdXRbSEFUXVtpbmRleCArIDJdKSwgMCk7Ci0gICAgICAg IH0gZWxzZSBpZiAoKCEodmFsdWUgJiBTRExfSEFUX1JJR0hUKSkgJiYgKHByZXYgJiBTRExf SEFUX1JJR0hUKSkgewotICAgICAgICAgICAgc2Rsam95X3BlcmZvcm1fZXZlbnQoJihzZGxq b3lzdGlja1tqb3ludW1dLmlucHV0W0hBVF1baW5kZXggKyAzXSksIDApOwotICAgICAgICB9 Ci0gICAgfQotCi0gICAgc2Rsam95c3RpY2tbam95bnVtXS5pbnB1dFtIQVRdW2luZGV4XS5w cmV2ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHJldHZhbDsKKyAgICBqb3lzdGlja19tYXBwaW5n X3QqIG1hcHBpbmcgPSBqb3lfZ2V0X2hhdF9tYXBwaW5nKGpveW51bSwgaGF0LCB2YWx1ZSk7 CisgICAgcmV0dXJuIHNkbGpveV9wZXJmb3JtX2V2ZW50KG1hcHBpbmcsIDEpOwogfQogCiAv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMzc5LDE0ICs1MTEsMTMgQEAKIH0KICNl bmRpZgogCi12b2lkIHNkbGpveV9zZXRfam95c3RpY2soU0RMX0V2ZW50IGUsIGludCBwb3J0 LCBpbnQgYml0cykKK3ZvaWQgc2Rsam95X3NldF9qb3lzdGljayhTRExfRXZlbnQgZSwgaW50 IGJpdHMpCiB7Ci0gICAgc2Rsam95c3RpY2tfbWFwcGluZ190ICpqb3lldmVudCA9IHNkbGpv eV9nZXRfbWFwcGluZyhlKTsKLQorICAgIGpveXN0aWNrX21hcHBpbmdfdCAqam95ZXZlbnQg PSBzZGxqb3lfZ2V0X21hcHBpbmcoZSk7CisgCiAgICAgaWYgKGpveWV2ZW50ICE9IE5VTEwp IHsKICAgICAgICAgam95ZXZlbnQtPmFjdGlvbiA9IEpPWVNUSUNLOwotICAgICAgICBqb3ll dmVudC0+dmFsdWUuam95WzBdID0gKHVpbnQxNl90KXBvcnQ7Ci0gICAgICAgIGpveWV2ZW50 LT52YWx1ZS5qb3lbMV0gPSAodWludDE2X3QpYml0czsKKyAgICAgICAgam95ZXZlbnQtPnZh bHVlLmpveV9waW4gPSAodWludDE2X3QpYml0czsKICAgICB9CiB9CiAKQEAgLTEzOTMsMjgg KzUyNCwyNSBAQAogdm9pZCBzZGxqb3lfc2V0X2pveXN0aWNrX2F4aXMoU0RMX0V2ZW50IGUs IGludCBwb3J0LCBpbnQgcG90KQogewogICAgIGludCBpbmRleCA9IChwb3J0IDw8IDEpIHwg cG90OworICAgIHVpbnQ4X3Qgc3RpY2sgPSBlLmpheGlzLndoaWNoOwogICAgIHVpbnQ4X3Qg YXhpcyA9IGUuamF4aXMuYXhpczsKLSAgICBzZGxqb3lzdGlja19tYXBwaW5nX3QgKmpveWV2 ZW50ID0gc2Rsam95X2dldF9tYXBwaW5nKGUpOwotICAgIGludCBqb3ludW0gPSBzZGxqb3lf Z2V0X2pveW51bV9mb3JfZXZlbnQoZS5qYXhpcy53aGljaCk7Ci0gICAgCi0gICAgaWYgKGpv eW51bSA9PSAtMSkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCisgICAgam95c3RpY2tf bWFwcGluZ190ICpqb3lldmVudCA9IHNkbGpveV9nZXRfbWFwcGluZyhlKTsKKyAKICAgICBp ZiAoam95ZXZlbnQgIT0gTlVMTCkgewogICAgICAgICBqb3lldmVudC0+YWN0aW9uID0gUE9U X0FYSVM7Ci0gICAgICAgIGpveWV2ZW50LT52YWx1ZS5heGlzWzBdID0gKHVpbnQxNl90KXBv cnQ7CiAgICAgICAgIGpveWV2ZW50LT52YWx1ZS5heGlzWzFdID0gKHVpbnQxNl90KXBvdDsK ICAgICB9CiAKICAgICBpZiAoaW5kZXggPD0gMykgewotICAgICAgICBzZGxqb3lzdGlja19h eGlzX21hcHBpbmdbaW5kZXhdID0gKGpveW51bSA8PCA4KSB8IGF4aXM7CisgICAgICAgIHNk bGpveXN0aWNrX2F4aXNfbWFwcGluZ1tpbmRleF0gPSAoc3RpY2sgPDwgOCkgfCBheGlzOwog ICAgIH0KIH0KIAorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKIHZvaWQgc2Rsam95X3Nl dF9ob3RrZXkoU0RMX0V2ZW50IGUsIHVpX21lbnVfZW50cnlfdCAqdmFsdWUpCiB7Ci0gICAg c2Rsam95c3RpY2tfbWFwcGluZ190ICpqb3lldmVudCA9IHNkbGpveV9nZXRfbWFwcGluZyhl KTsKKyAgICBqb3lzdGlja19tYXBwaW5nX3QgKmpveWV2ZW50ID0gc2Rsam95X2dldF9tYXBw aW5nKGUpOwogCiAgICAgaWYgKGpveWV2ZW50ICE9IE5VTEwpIHsKICAgICAgICAgam95ZXZl bnQtPmFjdGlvbiA9IFVJX0ZVTkNUSU9OOwpAQCAtMTQyNCw3ICs1NTIsNyBAQAogCiB2b2lk IHNkbGpveV9zZXRfa2V5cHJlc3MoU0RMX0V2ZW50IGUsIGludCByb3csIGludCBjb2wpCiB7 Ci0gICAgc2Rsam95c3RpY2tfbWFwcGluZ190ICpqb3lldmVudCA9IHNkbGpveV9nZXRfbWFw cGluZyhlKTsKKyAgICBqb3lzdGlja19tYXBwaW5nX3QgKmpveWV2ZW50ID0gc2Rsam95X2dl dF9tYXBwaW5nKGUpOwogCiAgICAgaWYgKGpveWV2ZW50ICE9IE5VTEwpIHsKICAgICAgICAg am95ZXZlbnQtPmFjdGlvbiA9IEtFWUJPQVJEOwpAQCAtMTQzMywxOCArNTYxLDkgQEAKICAg ICB9CiB9CiAKLXZvaWQgc2Rsam95X3NldF9leHRyYShTRExfRXZlbnQgZSwgaW50IHR5cGUp Ci17Ci0gICAgc2Rsam95c3RpY2tfbWFwcGluZ190ICpqb3lldmVudCA9IHNkbGpveV9nZXRf bWFwcGluZyhlKTsKLQotICAgIGlmIChqb3lldmVudCAhPSBOVUxMKSB7Ci0gICAgICAgIGpv eWV2ZW50LT5hY3Rpb24gPSB0eXBlID8gTUFQIDogVUlfQUNUSVZBVEU7Ci0gICAgfQotfQot CiB2b2lkIHNkbGpveV91bnNldChTRExfRXZlbnQgZSkKIHsKLSAgICBzZGxqb3lzdGlja19t YXBwaW5nX3QgKmpveWV2ZW50ID0gc2Rsam95X2dldF9tYXBwaW5nKGUpOworICAgIGpveXN0 aWNrX21hcHBpbmdfdCAqam95ZXZlbnQgPSBzZGxqb3lfZ2V0X21hcHBpbmcoZSk7CiAKICAg ICBpZiAoam95ZXZlbnQgIT0gTlVMTCkgewogICAgICAgICBqb3lldmVudC0+YWN0aW9uID0g Tk9ORTsKQEAgLTE0NTMsMzcgKzU3MiwxNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t ICovCiAKLXN0YXRpYyBpbnQgX3NkbGpveV9zd2FwX3BvcnRzID0gMDsKLQogdm9pZCBzZGxq b3lfc3dhcF9wb3J0cyh2b2lkKQogewogICAgIGludCBpLCBrOwotICAgIHNkbGpveXN0aWNr X2lucHV0X3QgajsKIAogICAgIHJlc291cmNlc19nZXRfaW50KCJKb3lEZXZpY2UxIiwgJmkp OwogICAgIHJlc291cmNlc19nZXRfaW50KCJKb3lEZXZpY2UyIiwgJmspOwogICAgIHJlc291 cmNlc19zZXRfaW50KCJKb3lEZXZpY2UxIiwgayk7CiAgICAgcmVzb3VyY2VzX3NldF9pbnQo IkpveURldmljZTIiLCBpKTsKLSAgICBfc2Rsam95X3N3YXBfcG9ydHMgXj0gMTsKLQotICAg IGZvciAoaSA9IDA7IGkgPCBudW1fam95c3RpY2tzOyArK2kpIHsKLSAgICAgICAgZm9yIChq ID0gQVhJUzsgaiA8IE5VTV9JTlBVVF9UWVBFUzsgKytqKSB7Ci0gICAgICAgICAgICBmb3Ig KGsgPSAwOyBrIDwgc2Rsam95c3RpY2tbaV0uaW5wdXRfbWF4W2pdICogaW5wdXRfbXVsdFtq XTsgKytrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNkbGpveXN0aWNrW2ldLmlucHV0W2pd W2tdLmFjdGlvbiA9PSBKT1lTVElDSykgewotICAgICAgICAgICAgICAgICAgICBzZGxqb3lz dGlja1tpXS5pbnB1dFtqXVtrXS52YWx1ZS5qb3lbMF0gXj0gMTsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKLWludCBzZGxqb3lf Z2V0X3N3YXBfcG9ydHModm9pZCkgCi17Ci0gICAgcmV0dXJuIF9zZGxqb3lfc3dhcF9wb3J0 czsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiAjZWxzZQogLyogIUhBVkVf U0RMX05VTUpPWVNUSUNLUyAqLwogCkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9z ZGwvam95LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2Rs L2pveS5oCShyZXZpc2lvbmUgNDEzNDgpCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9z ZGwvam95LmgJKGNvcGlhIGRpIGxhdm9ybykKQEAgLTQwLDE5ICs0MCwyMSBAQAogZXh0ZXJu IHZvaWQgam95c3RpY2tfY2xvc2Uodm9pZCk7CiBleHRlcm4gdm9pZCBqb3lzdGljayh2b2lk KTsKIAotZXh0ZXJuIHZvaWQgam95X2FyY2hfcmVzb3VyY2VzX3NodXRkb3duKHZvaWQpOwor I2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUworc3RydWN0IGpveXN0aWNrX21hcHBpbmdf czsKK2VudW0gam95c3RpY2tfYWN0aW9uX2U7CiAKLSNpZmRlZiBIQVZFX1NETF9OVU1KT1lT VElDS1MKIGV4dGVybiB2b2lkIGpveV9hcmNoX2luaXRfZGVmYXVsdF9tYXBwaW5nKGludCBq b3ludW0pOwogZXh0ZXJuIGludCBqb3lfYXJjaF9tYXBwaW5nX2xvYWQoY29uc3QgY2hhciAq ZmlsZW5hbWUpOwogZXh0ZXJuIGludCBqb3lfYXJjaF9tYXBwaW5nX2R1bXAoY29uc3QgY2hh ciAqZmlsZW5hbWUpOwotZXh0ZXJuIHVpX21lbnVfYWN0aW9uX3Qgc2Rsam95X2F4aXNfZXZl bnQoVWludDggam95bnVtLCBVaW50OCBheGlzLCBTaW50MTYgdmFsdWUpOwotZXh0ZXJuIHVp X21lbnVfYWN0aW9uX3Qgc2Rsam95X2J1dHRvbl9ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4 IGJ1dHRvbiwgVWludDggdmFsdWUpOwotZXh0ZXJuIHVpX21lbnVfYWN0aW9uX3Qgc2Rsam95 X2hhdF9ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4IGhhdCwgVWludDggdmFsdWUpOworZXh0 ZXJuIHZvaWQgc2Rsam95X2F4aXNfZXZlbnQoVWludDggam95bnVtLCBVaW50OCBheGlzLCBT aW50MTYgdmFsdWUpOworZXh0ZXJuIGVudW0gam95c3RpY2tfYWN0aW9uX2Ugc2Rsam95X2J1 dHRvbl9ldmVudChVaW50OCBqb3ludW0sIFVpbnQ4IGJ1dHRvbiwgVWludDggdmFsdWUpOwor ZXh0ZXJuIGVudW0gam95c3RpY2tfYWN0aW9uX2Ugc2Rsam95X2hhdF9ldmVudChVaW50OCBq b3ludW0sIFVpbnQ4IGhhdCwgVWludDggdmFsdWUpOworZXh0ZXJuIGVudW0gam95c3RpY2tf YWN0aW9uX2Ugc2Rsam95X2F4aXNfZXZlbnRfZm9yX21lbnVfYWN0aW9uKFVpbnQ4IGpveW51 bSwgVWludDggYXhpcywgU2ludDE2IHZhbHVlKTsKIGV4dGVybiB1aV9tZW51X2FjdGlvbl90 IHNkbGpveV9hdXRvcmVwZWF0KHZvaWQpOwogZXh0ZXJuIHVpbnQ4X3Qgc2Rsam95X2NoZWNr X2F4aXNfbW92ZW1lbnQoU0RMX0V2ZW50IGUpOwogZXh0ZXJuIHVpbnQ4X3Qgc2Rsam95X2No ZWNrX2hhdF9tb3ZlbWVudChTRExfRXZlbnQgZSk7Ci1leHRlcm4gdm9pZCBzZGxqb3lfc2V0 X2pveXN0aWNrKFNETF9FdmVudCBlLCBpbnQgcG9ydCwgaW50IGJpdHMpOworZXh0ZXJuIHZv aWQgc2Rsam95X3NldF9qb3lzdGljayhTRExfRXZlbnQgZSwgaW50IGJpdHMpOwogZXh0ZXJu IHZvaWQgc2Rsam95X3NldF9ob3RrZXkoU0RMX0V2ZW50IGUsIHVpX21lbnVfZW50cnlfdCAq dmFsdWUpOwogZXh0ZXJuIHZvaWQgc2Rsam95X3NldF9rZXlwcmVzcyhTRExfRXZlbnQgZSwg aW50IHJvdywgaW50IGNvbCk7CiBleHRlcm4gdm9pZCBzZGxqb3lfc2V0X2V4dHJhKFNETF9F dmVudCBlLCBpbnQgdHlwZSk7CkBAIC02MCw4ICs2Miw4IEBACiBleHRlcm4gdm9pZCBzZGxq b3lfc2V0X2pveXN0aWNrX2F4aXMoU0RMX0V2ZW50IGUsIGludCBwb3J0LCBpbnQgcG90KTsK IGV4dGVybiBjaGFyICpnZXRfam95X3Bpbl9tYXBwaW5nX3N0cmluZyhpbnQgam95LCBpbnQg cGluKTsKIGV4dGVybiBjaGFyICpnZXRfam95X3BvdF9tYXBwaW5nX3N0cmluZyhpbnQgam95 bnIsIGludCBwb3QpOwotZXh0ZXJuIHZvaWQgc2Rsam95X2RlbGV0ZV9waW5fbWFwcGluZyhp bnQgcG9ydCwgaW50IHBpbik7Ci1leHRlcm4gdm9pZCBzZGxqb3lfZGVsZXRlX3BvdF9tYXBw aW5nKGludCBwb3J0LCBpbnQgcG90KTsKK2V4dGVybiB2b2lkIHNkbGpveV9kZWxldGVfcGlu X21hcHBpbmcoaW50IHBpbik7CitleHRlcm4gdm9pZCBzZGxqb3lfZGVsZXRlX3BvdF9tYXBw aW5nKGludCBwb3QpOwogZXh0ZXJuIGludCBzZGxqb3lfZ2V0X2pveW51bV9mb3JfZXZlbnQo VWludDggZXZlbnRfZGV2aWNlX2lkKTsKIGV4dGVybiBpbnQgc2Rsam95X3Jlc2Nhbih2b2lk KTsKIApJbmRleDogZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL2tiZC5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC9rYmQuYwkocmV2aXNpb25l IDQxMzQ4KQorKysgZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL2tiZC5jCShjb3BpYSBk aSBsYXZvcm8pCkBAIC00NzQsNyArNDc0LDcgQEAKICAgICByZXR1cm4gcmV0OwogfQogCi11 aV9tZW51X2FjdGlvbl90IHNkbGtiZF9wcmVzcyhTRExLZXkga2V5LCBTRExNb2QgbW9kKQor dm9pZCBzZGxrYmRfcHJlc3MoU0RMS2V5IGtleSwgU0RMTW9kIG1vZCkKIHsKICAgICB1aV9t ZW51X2FjdGlvbl90IGksIHJldHZhbCA9IE1FTlVfQUNUSU9OX05PTkU7CiAgICAgdWlfbWVu dV9lbnRyeV90ICpob3RrZXlfYWN0aW9uID0gTlVMTDsKQEAgLTUwMCwzNiArNTAwLDIwIEBA CiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoc2RsX21lbnVfc3RhdGUgfHwgKHNkbF92a2Jk X3N0YXRlICYgU0RMX1ZLQkRfQUNUSVZFKSkgewotICAgICAgICBpZiAoa2V5ICE9IFNETEtf VU5LTk9XTikgewotICAgICAgICAgICAgZm9yIChpID0gTUVOVV9BQ1RJT05fVVA7IGkgPCBN RU5VX0FDVElPTl9OVU07ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChzZGxfdWlfbWVu dWtleXNbaV0gPT0gKGludClrZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0g aTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChpbnQpKGtleSkgPT0gc2RsX3VpX21lbnVr ZXlzWzBdKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gTUVOVV9BQ1RJT05fRVhJVDsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0dmFsOwotICAg IH0KLQogICAgIGlmICgoaW50KShrZXkpID09IHNkbF91aV9tZW51a2V5c1swXSkgewogICAg ICAgICBzZGxfdWlfYWN0aXZhdGUoKTsKLSAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAg ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICgoaG90a2V5X2FjdGlvbiA9IHNkbGtiZF9n ZXRfaG90a2V5KGtleSwgbW9kKSkgIT0gTlVMTCkgewogICAgICAgICBzZGxfdWlfaG90a2V5 KGhvdGtleV9hY3Rpb24pOwotICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR1 cm47CiAgICAgfQogCiAgICAga2V5Ym9hcmRfa2V5X3ByZXNzZWQoKHVuc2lnbmVkIGxvbmcp a2V5LCBzZGxrYmRfZ2V0X21vZGlmaWVyKG1vZCkpOwotICAgIHJldHVybiByZXR2YWw7CiB9 CiAKLXVpX21lbnVfYWN0aW9uX3Qgc2Rsa2JkX3JlbGVhc2UoU0RMS2V5IGtleSwgU0RMTW9k IG1vZCkKK3ZvaWQgc2Rsa2JkX3JlbGVhc2UoU0RMS2V5IGtleSwgU0RMTW9kIG1vZCkKIHsK ICAgICB1aV9tZW51X2FjdGlvbl90IGksIHJldHZhbCA9IE1FTlVfQUNUSU9OX05PTkVfUkVM RUFTRTsKIApAQCAtNTQ5LDcgKzUzMywxOCBAQAogICAgIH0KICNlbmRpZgogCi0gICAgaWYg KHNkbF92a2JkX3N0YXRlICYgU0RMX1ZLQkRfQUNUSVZFKSB7CisgICAga2V5Ym9hcmRfa2V5 X3JlbGVhc2VkKCh1bnNpZ25lZCBsb25nKWtleSwgc2Rsa2JkX2dldF9tb2RpZmllcihtb2Qp KTsKK30KKwordWlfbWVudV9hY3Rpb25fdCBzZGxrYmRfcHJlc3NfZm9yX21lbnVfYWN0aW9u KFNETEtleSBrZXksIFNETE1vZCBtb2QpCit7CisgICAgdWlfbWVudV9hY3Rpb25fdCBpLCBy ZXR2YWwgPSBNRU5VX0FDVElPTl9OT05FOworICAgIHVpX21lbnVfZW50cnlfdCAqaG90a2V5 X2FjdGlvbiA9IE5VTEw7CisKKyNpZmRlZiBTRExfREVCVUcKKyAgICBsb2dfZGVidWcoIiVz OiAlaSAoJXMpLCUwNHgiLCBfX2Z1bmNfXywga2V5LCBTRExfR2V0S2V5TmFtZShrZXkpLCBt b2QpOworI2VuZGlmCisKICAgICAgICAgaWYgKGtleSAhPSBTRExLX1VOS05PV04pIHsKICAg ICAgICAgICAgIGZvciAoaSA9IE1FTlVfQUNUSU9OX1VQOyBpIDwgTUVOVV9BQ1RJT05fTlVN OyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoc2RsX3VpX21lbnVrZXlzW2ldID09IChp bnQpa2V5KSB7CkBAIC01NTcsMTIgKzU1MiwzMCBAQAogICAgICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoKGludCkoa2V5KSA9PSBzZGxfdWlfbWVudWtleXNbMF0pIHsKKyAgICAgICAgICAgICAg ICByZXR2YWwgPSBNRU5VX0FDVElPTl9FWElUOworICAgICAgICAgICAgfQogICAgICAgICB9 CisgICAgICAgIHJldHVybiByZXR2YWw7Cit9CisKK3VpX21lbnVfYWN0aW9uX3Qgc2Rsa2Jk X3JlbGVhc2VfZm9yX21lbnVfYWN0aW9uKFNETEtleSBrZXksIFNETE1vZCBtb2QpCit7Cisg ICAgdWlfbWVudV9hY3Rpb25fdCBpLCByZXR2YWwgPSBNRU5VX0FDVElPTl9OT05FX1JFTEVB U0U7CisKKyNpZmRlZiBTRExfREVCVUcKKyAgICBsb2dfZGVidWcoIiVzOiAlaSAoJXMpLCUw NHgiLCBfX2Z1bmNfXywga2V5LCBTRExfR2V0S2V5TmFtZShrZXkpLCBtb2QpOworI2VuZGlm CisKKyAgICAgICAgaWYgKGtleSAhPSBTRExLX1VOS05PV04pIHsKKyAgICAgICAgICAgIGZv ciAoaSA9IE1FTlVfQUNUSU9OX1VQOyBpIDwgTUVOVV9BQ1RJT05fTlVNOyArK2kpIHsKKyAg ICAgICAgICAgICAgICBpZiAoc2RsX3VpX21lbnVrZXlzW2ldID09IChpbnQpa2V5KSB7Cisg ICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAg ICAgICByZXR1cm4gcmV0dmFsICsgTUVOVV9BQ1RJT05fTk9ORV9SRUxFQVNFOwotICAgIH0K LQotICAgIGtleWJvYXJkX2tleV9yZWxlYXNlZCgodW5zaWduZWQgbG9uZylrZXksIHNkbGti ZF9nZXRfbW9kaWZpZXIobW9kKSk7Ci0gICAgcmV0dXJuIHJldHZhbDsKIH0KIAogLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICovCkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwv a2JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL2ti ZC5oCShyZXZpc2lvbmUgNDEzNDgpCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwv a2JkLmgJKGNvcGlhIGRpIGxhdm9ybykKQEAgLTc2LDggKzc2LDEwIEBACiBleHRlcm4gU0RM S2V5IFNETDJ4X3RvX1NETDF4X0tleXMoU0RMS2V5IGtleSk7CiBleHRlcm4gU0RMS2V5IFNE TDF4X3RvX1NETDJ4X0tleXMoU0RMS2V5IGtleSk7CiAKLWV4dGVybiB1aV9tZW51X2FjdGlv bl90IHNkbGtiZF9wcmVzcyhTRExLZXkga2V5LCBTRExNb2QgbW9kKTsKLWV4dGVybiB1aV9t ZW51X2FjdGlvbl90IHNkbGtiZF9yZWxlYXNlKFNETEtleSBrZXksIFNETE1vZCBtb2QpOwor ZXh0ZXJuIHZvaWQgc2Rsa2JkX3ByZXNzKFNETEtleSBrZXksIFNETE1vZCBtb2QpOworZXh0 ZXJuIHZvaWQgc2Rsa2JkX3JlbGVhc2UoU0RMS2V5IGtleSwgU0RMTW9kIG1vZCk7Cit1aV9t ZW51X2FjdGlvbl90IHNkbGtiZF9wcmVzc19mb3JfbWVudV9hY3Rpb24oU0RMS2V5IGtleSwg U0RMTW9kIG1vZCk7Cit1aV9tZW51X2FjdGlvbl90IHNkbGtiZF9yZWxlYXNlX2Zvcl9tZW51 X2FjdGlvbihTRExLZXkga2V5LCBTRExNb2QgbW9kKTsKIAogZXh0ZXJuIHZvaWQgc2Rsa2Jk X3NldF9ob3RrZXkoU0RMS2V5IGtleSwgU0RMTW9kIG1vZCwgdWlfbWVudV9lbnRyeV90ICp2 YWx1ZSk7CiAKSW5kZXg6IGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC9tZW51X2pveXN0 aWNrLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL21l bnVfam95c3RpY2suYwkocmV2aXNpb25lIDQxMzQ4KQorKysgZGV2L3ZpY2UvdHJ1bmsvc3Jj L2FyY2gvc2RsL21lbnVfam95c3RpY2suYwkoY29waWEgZGkgbGF2b3JvKQpAQCAtMzQ1LDE5 ICszNDUsOSBAQAogICAgIGlmIChhY3RpdmF0ZWQpIHsKICAgICAgICAgc2Rsam95X3N3YXBf cG9ydHMoKTsKICAgICB9Ci0gICAgcmV0dXJuIHNkbGpveV9nZXRfc3dhcF9wb3J0cygpID8g TUVOVV9DSEVDS01BUktfQ0hFQ0tFRF9TVFJJTkcgOiBOVUxMOworICAgIHJldHVybiAwOwog fQogCi0jaWZkZWYgVVNFX1NETFVJMgotc3RhdGljIFVJX01FTlVfQ0FMTEJBQ0soY3VzdG9t X3Jlc2Nhbl9qb3lfY2FsbGJhY2spCi17Ci0gICAgaWYgKGFjdGl2YXRlZCkgewotICAgICAg ICBzZGxqb3lfcmVzY2FuKCk7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotI2VuZGlm Ci0KIHN0YXRpYyBVSV9NRU5VX0NBTExCQUNLKGN1c3RvbV9rZXlzZXRfY2FsbGJhY2spCiB7 CiAgICAgU0RMX0V2ZW50IGU7CkBAIC00ODEsNyArNDcxLDIwIEBACiB9OwogCiAjaWZkZWYg SEFWRV9TRExfTlVNSk9ZU1RJQ0tTCi1zdGF0aWMgY29uc3QgY2hhciAqam95X3BpbltKT1lQ T1JUX01BWF9QT1JUU11bSk9ZUE9SVF9NQVhfUElOU107CitzdGF0aWMgY29uc3QgY2hhciAq am95X3BpbltdID0geworICAgICJVcCIsCisgICAgIkRvd24iLAorICAgICJMZWZ0IiwKKyAg ICAiUmlnaHQiLAorICAgICJGaXJlIChvciBTTkVTLUEpIiwKKyAgICAiRmlyZSAyIChvciBT TkVTLUIpIiwKKyAgICAiRmlyZSAzIChvciBTTkVTLVgpIiwKKyAgICAiRmlyZSA0IChTTkVT LVkpIiwKKyAgICAiRmlyZSA1IChTTkVTLUxCKSIsCisgICAgIkZpcmUgNiAoU05FUy1SQiki LAorICAgICJGaXJlIDcgKFNORVMtU0VMRUNUKSIsCisgICAgIkZpcmUgOCAoU05FUy1TVEFS VCkiCit9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqam95X3BvdFtdID0gewogICAgICJQb3Qt WCIsCkBAIC00OTgsNyArNTAxLDcgQEAKICAgICBwb3J0ID0gKHZpY2VfcHRyX3RvX2ludChw YXJhbSkpID4+IDU7CiAKICAgICBpZiAoYWN0aXZhdGVkKSB7Ci0gICAgICAgIHRhcmdldCA9 IGxpYl9tc3ByaW50ZigiUG9ydCAlaSAlcyAocHJlc3MgZGVsIHRvIGNsZWFyKSIsIHBvcnQg KyAxLCBqb3lfcGluW3BvcnRdW3Bpbl0pOworICAgICAgICB0YXJnZXQgPSBsaWJfbXNwcmlu dGYoIlBvcnQgJWkgJXMiLCBwb3J0ICsgMSwgam95X3BpbltwaW5dKTsKICAgICAgICAgZSA9 IHNkbF91aV9wb2xsX2V2ZW50KCJqb3lzdGljayIsIHRhcmdldCwgU0RMX1BPTExfSk9ZU1RJ Q0sgfCBTRExfUE9MTF9LRVlCT0FSRCwgNSk7CiAgICAgICAgIGxpYl9mcmVlKHRhcmdldCk7 CiAKQEAgLTUwNiwxMSArNTA5LDExIEBACiAgICAgICAgICAgICBjYXNlIFNETF9KT1lBWElT TU9USU9OOgogICAgICAgICAgICAgY2FzZSBTRExfSk9ZQlVUVE9ORE9XTjoKICAgICAgICAg ICAgIGNhc2UgU0RMX0pPWUhBVE1PVElPTjoKLSAgICAgICAgICAgICAgICBzZGxqb3lfc2V0 X2pveXN0aWNrKGUsIHBvcnQsIDEgPDwgcGluKTsKKyAgICAgICAgICAgICAgICBzZGxqb3lf c2V0X2pveXN0aWNrKGUsIDEgPDwgcGluKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgIGNhc2UgU0RMX0tFWURPV046CiAgICAgICAgICAgICAgICAgaWYgKGUua2V5 LmtleXN5bS5zeW0gPT0gU0RMS19ERUxFVEUgfHwgZS5rZXkua2V5c3ltLnN5bSA9PSBTRExL X0JBQ0tTUEFDRSkgewotICAgICAgICAgICAgICAgICAgICBzZGxqb3lfZGVsZXRlX3Bpbl9t YXBwaW5nKHBvcnQsIDEgPDwgcGluKTsKKyAgICAgICAgICAgICAgICAgICAgc2Rsam95X2Rl bGV0ZV9waW5fbWFwcGluZygxIDw8IHBpbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTUyNywyOCArNTMw LDI3IEBACiB7CiAgICAgY2hhciAqdGFyZ2V0ID0gTlVMTDsKICAgICBTRExfRXZlbnQgZTsK LSAgICBpbnQgcG90LCBwb3J0OworICAgIGludCBwb3Q7CiAKICAgICBwb3QgPSAodmljZV9w dHJfdG9faW50KHBhcmFtKSkgJiAxNTsKLSAgICBwb3J0ID0gKHZpY2VfcHRyX3RvX2ludChw YXJhbSkpID4+IDU7CiAKICAgICBpZiAoYWN0aXZhdGVkKSB7Ci0gICAgICAgIHRhcmdldCA9 IGxpYl9tc3ByaW50ZigiUG9ydCAlaSAlcyAoZGVsIGNsZWFycyBtYXBwaW5ncykiLCBwb3J0 ICsgMSwgam95X3BvdFtwb3RdKTsKKyAgICAgICAgdGFyZ2V0ID0gbGliX21zcHJpbnRmKCJQ b3J0ICVpICVzIiwgam95X3BvdFtwb3RdKTsKICAgICAgICAgZSA9IHNkbF91aV9wb2xsX2V2 ZW50KCJqb3lzdGljayIsIHRhcmdldCwgU0RMX1BPTExfSk9ZU1RJQ0sgfCBTRExfUE9MTF9L RVlCT0FSRCwgNSk7CiAgICAgICAgIGxpYl9mcmVlKHRhcmdldCk7CiAKICAgICAgICAgc3dp dGNoIChlLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgU0RMX0pPWUFYSVNNT1RJT046Ci0g ICAgICAgICAgICAgICAgc2Rsam95X3NldF9qb3lzdGlja19heGlzKGUsIHBvcnQsIHBvdCk7 Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2VzX3NldF9pbnRfc3ByaW50ZigiUGFkZGxlc0lu cHV0JWQiLCBQQURETEVTX0lOUFVUX0pPWV9BWElTLCBwb3J0ICsgMSk7CisgICAgICAgICAg ICAgICAgc2Rsam95X3NldF9qb3lzdGlja19heGlzKGUsIHBvdCk7CisgICAgICAgICAgICAg ICAgLy9yZXNvdXJjZXNfc2V0X2ludF9zcHJpbnRmKCJQYWRkbGVzSW5wdXQlZCIsIFBBRERM RVNfSU5QVVRfSk9ZX0FYSVMsIHBvcnQgKyAxKTsKICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgIGNhc2UgU0RMX01PVVNFTU9USU9OOgogICAgICAgICAgICAgICAgIHNk bGpveV9kZWxldGVfcG90X21hcHBpbmcocG9ydCwgcG90KTsKLSAgICAgICAgICAgICAgICBy ZXNvdXJjZXNfc2V0X2ludF9zcHJpbnRmKCJQYWRkbGVzSW5wdXQlZCIsIFBBRERMRVNfSU5Q VVRfTU9VU0UsIHBvcnQgKyAxKTsKKyAgICAgICAgICAgICAgICAvL3Jlc291cmNlc19zZXRf aW50X3NwcmludGYoIlBhZGRsZXNJbnB1dCVkIiwgUEFERExFU19JTlBVVF9NT1VTRSwgcG9y dCArIDEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTRExf S0VZRE9XTjoKICAgICAgICAgICAgICAgICBpZiAoZS5rZXkua2V5c3ltLnN5bSA9PSBTRExL X0RFTEVURSB8fCBlLmtleS5rZXlzeW0uc3ltID09IFNETEtfQkFDS1NQQUNFKSB7Ci0gICAg ICAgICAgICAgICAgICAgIHNkbGpveV9kZWxldGVfcG90X21hcHBpbmcocG9ydCwgcG90KTsK KyAgICAgICAgICAgICAgICAgICAgc2Rsam95X2RlbGV0ZV9wb3RfbWFwcGluZyhwb3QpOwog ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg IGRlZmF1bHQ6CkBAIC02MjksNyArNjMxLDYgQEAKICAgICB1aV9tZW51X2VudHJ5X3QgKmVu dHJ5ID0gam95c3RpY2tfbWFwcGluZ19keW5fbWVudVtwb3J0XTsKICAgICBpbnQgaTsKICAg ICBpbnQgaiA9IDA7Ci0gICAgY2hhciAqbWFwbmFtZTsKIAogICAgIC8qIHJlYnVpbGQgbWVu dSBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gKi8KICAgICBpZiAoam95c3RpY2tfbWFwcGluZ19k eW5fbWVudV9pbml0W3BvcnRdICE9IDApIHsKQEAgLTY0MywxMiArNjQ0LDEwIEBACiAgICAg ICAgIGlmIChtYXBwaW5ncyAhPSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAobWFwcGluZ3Mt PnBpbm1hcCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgbWFwcGlu Z3MtPnBpbm1hcFtpXS5uYW1lOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgbWFwbmFt ZSA9IChjaGFyICopbGliX3N0cmR1cChtYXBwaW5ncy0+cGlubWFwW2ldLm5hbWUpOwotICAg ICAgICAgICAgICAgICAgICBlbnRyeVtqXS5zdHJpbmcgPSBtYXBuYW1lOworICAgICAgICAg ICAgICAgICAgICBlbnRyeVtqXS5zdHJpbmcgPSAoY2hhciAqKWxpYl9zdHJkdXAobWFwcGlu Z3MtPnBpbm1hcFtpXS5uYW1lKTsKICAgICAgICAgICAgICAgICAgICAgZW50cnlbal0udHlw ZSA9IE1FTlVfRU5UUllfRElBTE9HOwogICAgICAgICAgICAgICAgICAgICBlbnRyeVtqXS5j YWxsYmFjayA9IGN1c3RvbV9qb3ltYXBfY2FsbGJhY2s7CiAgICAgICAgICAgICAgICAgICAg IGVudHJ5W2pdLmRhdGEgPSAodWlfY2FsbGJhY2tfZGF0YV90KWludF90b192b2lkX3B0cigo bWFwcGluZ3MtPnBpbm1hcFtpXS5waW4gfCAocG9ydCA8PCA1KSkpOwotICAgICAgICAgICAg ICAgICAgICBqb3lfcGluW3BvcnRdW21hcHBpbmdzLT5waW5tYXBbaV0ucGluXSA9IG1hcG5h bWU7CiAgICAgICAgICAgICAgICAgICAgIGorKzsKICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICB9CkBAIC04NTcsMTIgKzg1Niw2IEBACiAgICAgICBNRU5VX0VOVFJZX1NVQk1F TlUsCiAgICAgICBqb3lzdGlja19ob3N0X21hcHBpbmdfZHlubWVudV9jYWxsYmFjaywKICAg ICAgICh1aV9jYWxsYmFja19kYXRhX3Qpam95c3RpY2tfaG9zdF9tYXBwaW5nX2R5bl9tZW51 IH0sCi0jaWZkZWYgVVNFX1NETFVJMgotICAgIHsgIlJlc2NhbiBob3N0IGpveXN0aWNrcyIs Ci0gICAgICBNRU5VX0VOVFJZX09USEVSLAotICAgICAgY3VzdG9tX3Jlc2Nhbl9qb3lfY2Fs bGJhY2ssCi0gICAgICBOVUxMIH0sCi0jZW5kaWYKICAgICB7ICJFeHRyYSBqb3lzdGljayBv cHRpb25zIiwKICAgICAgIE1FTlVfRU5UUllfU1VCTUVOVSwKICAgICAgIHN1Ym1lbnVfY2Fs bGJhY2ssCkBAIC05MzksMTIgKzkzMiw2IEBACiAgICAgICBNRU5VX0VOVFJZX1NVQk1FTlUs CiAgICAgICBqb3lzdGlja19ob3N0X21hcHBpbmdfZHlubWVudV9jYWxsYmFjaywKICAgICAg ICh1aV9jYWxsYmFja19kYXRhX3Qpam95c3RpY2tfaG9zdF9tYXBwaW5nX2R5bl9tZW51IH0s Ci0jaWZkZWYgVVNFX1NETFVJMgotICAgIHsgIlJlc2NhbiBob3N0IGpveXN0aWNrcyIsCi0g ICAgICBNRU5VX0VOVFJZX09USEVSLAotICAgICAgY3VzdG9tX3Jlc2Nhbl9qb3lfY2FsbGJh Y2ssCi0gICAgICBOVUxMIH0sCi0jZW5kaWYKICAgICB7ICJFeHRyYSBqb3lzdGljayBvcHRp b25zIiwKICAgICAgIE1FTlVfRU5UUllfU1VCTUVOVSwKICAgICAgIHN1Ym1lbnVfY2FsbGJh Y2ssCkBAIC0xMDIxLDEyICsxMDA4LDYgQEAKICAgICAgIE1FTlVfRU5UUllfU1VCTUVOVSwK ICAgICAgIGpveXN0aWNrX2hvc3RfbWFwcGluZ19keW5tZW51X2NhbGxiYWNrLAogICAgICAg KHVpX2NhbGxiYWNrX2RhdGFfdClqb3lzdGlja19ob3N0X21hcHBpbmdfZHluX21lbnUgfSwK LSNpZmRlZiBVU0VfU0RMVUkyCi0gICAgeyAiUmVzY2FuIGhvc3Qgam95c3RpY2tzIiwKLSAg ICAgIE1FTlVfRU5UUllfT1RIRVIsCi0gICAgICBjdXN0b21fcmVzY2FuX2pveV9jYWxsYmFj aywKLSAgICAgIE5VTEwgfSwKLSNlbmRpZgogICAgIHsgIkV4dHJhIGpveXN0aWNrIG9wdGlv bnMiLAogICAgICAgTUVOVV9FTlRSWV9TVUJNRU5VLAogICAgICAgc3VibWVudV9jYWxsYmFj aywKQEAgLTEwOTQsMTIgKzEwNzUsNiBAQAogICAgICAgTUVOVV9FTlRSWV9TVUJNRU5VLAog ICAgICAgam95c3RpY2tfaG9zdF9tYXBwaW5nX2R5bm1lbnVfY2FsbGJhY2ssCiAgICAgICAo dWlfY2FsbGJhY2tfZGF0YV90KWpveXN0aWNrX2hvc3RfbWFwcGluZ19keW5fbWVudSB9LAot I2lmZGVmIFVTRV9TRExVSTIKLSAgICB7ICJSZXNjYW4gaG9zdCBqb3lzdGlja3MiLAotICAg ICAgTUVOVV9FTlRSWV9PVEhFUiwKLSAgICAgIGN1c3RvbV9yZXNjYW5fam95X2NhbGxiYWNr LAotICAgICAgTlVMTCB9LAotI2VuZGlmCiAgICAgeyAiRXh0cmEgam95c3RpY2sgb3B0aW9u cyIsCiAgICAgICBNRU5VX0VOVFJZX1NVQk1FTlUsCiAgICAgICBzdWJtZW51X2NhbGxiYWNr LApAQCAtMTE2OCwxMiArMTE0Myw2IEBACiAgICAgICBNRU5VX0VOVFJZX1NVQk1FTlUsCiAg ICAgICBqb3lzdGlja19ob3N0X21hcHBpbmdfZHlubWVudV9jYWxsYmFjaywKICAgICAgICh1 aV9jYWxsYmFja19kYXRhX3Qpam95c3RpY2tfaG9zdF9tYXBwaW5nX2R5bl9tZW51IH0sCi0j aWZkZWYgVVNFX1NETFVJMgotICAgIHsgIlJlc2NhbiBob3N0IGpveXN0aWNrcyIsCi0gICAg ICBNRU5VX0VOVFJZX09USEVSLAotICAgICAgY3VzdG9tX3Jlc2Nhbl9qb3lfY2FsbGJhY2ss Ci0gICAgICBOVUxMIH0sCi0jZW5kaWYKICAgICB7ICJFeHRyYSBqb3lzdGljayBvcHRpb25z IiwKICAgICAgIE1FTlVfRU5UUllfU1VCTUVOVSwKICAgICAgIHN1Ym1lbnVfY2FsbGJhY2ss CkBAIC0xMjE0LDEyICsxMTgzLDYgQEAKICAgICAgIE1FTlVfRU5UUllfU1VCTUVOVSwKICAg ICAgIGpveXN0aWNrX2hvc3RfbWFwcGluZ19keW5tZW51X2NhbGxiYWNrLAogICAgICAgKHVp X2NhbGxiYWNrX2RhdGFfdClqb3lzdGlja19ob3N0X21hcHBpbmdfZHluX21lbnUgfSwKLSNp ZmRlZiBVU0VfU0RMVUkyCi0gICAgeyAiUmVzY2FuIGhvc3Qgam95c3RpY2tzIiwKLSAgICAg IE1FTlVfRU5UUllfT1RIRVIsCi0gICAgICBjdXN0b21fcmVzY2FuX2pveV9jYWxsYmFjaywK LSAgICAgIE5VTEwgfSwKLSNlbmRpZgogICAgIHsgIkV4dHJhIGpveXN0aWNrIG9wdGlvbnMi LAogICAgICAgTUVOVV9FTlRSWV9TVUJNRU5VLAogICAgICAgc3VibWVudV9jYWxsYmFjaywK QEAgLTEyODQsMTIgKzEyNDcsNiBAQAogICAgICAgTUVOVV9FTlRSWV9TVUJNRU5VLAogICAg ICAgam95c3RpY2tfaG9zdF9tYXBwaW5nX2R5bm1lbnVfY2FsbGJhY2ssCiAgICAgICAodWlf Y2FsbGJhY2tfZGF0YV90KWpveXN0aWNrX2hvc3RfbWFwcGluZ19keW5fbWVudSB9LAotI2lm ZGVmIFVTRV9TRExVSTIKLSAgICB7ICJSZXNjYW4gaG9zdCBqb3lzdGlja3MiLAotICAgICAg TUVOVV9FTlRSWV9PVEhFUiwKLSAgICAgIGN1c3RvbV9yZXNjYW5fam95X2NhbGxiYWNrLAot ICAgICAgTlVMTCB9LAotI2VuZGlmCiAgICAgeyAiRXh0cmEgam95c3RpY2sgb3B0aW9ucyIs CiAgICAgICBNRU5VX0VOVFJZX1NVQk1FTlUsCiAgICAgICBzdWJtZW51X2NhbGxiYWNrLApJ bmRleDogZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL21lbnVfc2V0dGluZ3MuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvbWVudV9zZXR0aW5n cy5jCShyZXZpc2lvbmUgNDEzNDgpCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwv bWVudV9zZXR0aW5ncy5jCShjb3BpYSBkaSBsYXZvcm8pCkBAIC0zMCw3ICszMCw3IEBACiAj aW5jbHVkZSAidmljZV9zZGwuaCIKICNpbmNsdWRlIDxzdGRsaWIuaD4KIAotI2luY2x1ZGUg ImpveS5oIgorI2luY2x1ZGUgImpveXN0aWNrLmgiCiAjaW5jbHVkZSAia2JkLmgiCiAjaW5j bHVkZSAia2V5Ym9hcmQuaCIKICNpbmNsdWRlICJsaWIuaCIKSW5kZXg6IGRldi92aWNlL3Ry dW5rL3NyYy9hcmNoL3NkbC91aS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi92aWNlL3RydW5r L3NyYy9hcmNoL3NkbC91aS5jCShyZXZpc2lvbmUgNDEzNDgpCisrKyBkZXYvdmljZS90cnVu ay9zcmMvYXJjaC9zZGwvdWkuYwkoY29waWEgZGkgbGF2b3JvKQpAQCAtNDEsNiArNDEsNyBA QAogI2luY2x1ZGUgImNvbG9yLmgiCiAjaW5jbHVkZSAiZnVsbHNjcmVlbmFyY2guaCIKICNp bmNsdWRlICJqb3kuaCIKKyNpbmNsdWRlICJqb3lzdGljay5oIgogI2luY2x1ZGUgImtiZC5o IgogI2luY2x1ZGUgImtleWJvYXJkLmgiCiAjaW5jbHVkZSAibGliLmgiCkBAIC0yMDYsMjk4 ICsyMDcsODMgQEAKICNlbmRpZgogCiAvKiBNYWluIGV2ZW50IGhhbmRsZXIgKi8KLXVpX21l bnVfYWN0aW9uX3QgdWlfZGlzcGF0Y2hfZXZlbnRzKHZvaWQpCit2b2lkIHVpX2Rpc3BhdGNo X2V2ZW50cyh2b2lkKQogewogICAgIFNETF9FdmVudCBlOwotICAgIHVpX21lbnVfYWN0aW9u X3QgcmV0dmFsID0gTUVOVV9BQ1RJT05fTk9ORTsKLSAgICBpbnQgam95bnVtOwotCi0jaWZk ZWYgQU5EUk9JRF9DT01QSUxFCi0gICAgc3RydWN0IGxvY25ldF9hbF9ldmVudCBldmVudDE7 Ci0KLSAgICBpZiAobG9hZGVyX3Nob3dpbmZvKSB7Ci0gICAgICAgIGludCB2YWx1ZSA9IGxv YWRlcl9zaG93aW5mbzsKLQotICAgICAgICBsb2FkZXJfc2hvd2luZm8gPSAwOwotICAgICAg ICBsb2FkZXJfc2V0X3N0YXR1c2JhcigodmFsdWUgPT0gMSkgPyAxIDogMCk7Ci0gICAgfQot ICAgIGlmIChsb2FkZXJfdHJ1ZV9kcml2ZSkgewotICAgICAgICBpbnQgdmFsdWUgPSBsb2Fk ZXJfdHJ1ZV9kcml2ZTsKLQotICAgICAgICBsb2FkZXJfdHJ1ZV9kcml2ZSA9IDA7Ci0gICAg ICAgIGxvYWRlcl9zZXRfZHJpdmVfdHJ1ZV9lbXVsYXRpb24oKHZhbHVlID09IDEpID8gMSA6 IDApOwotICAgIH0KLSAgICBpZiAobG9hZGVyX3R1cmJvKSB7Ci0gICAgICAgIGludCB2YWx1 ZSA9IGxvYWRlcl90dXJibzsKLQotICAgICAgICBsb2FkZXJfdHVyYm8gPSAwOwotICAgICAg ICBsb2FkZXJfc2V0X3dhcnBtb2RlKCh2YWx1ZSA9PSAxKSA/IDEgOiAwKTsKLSAgICB9Ci0g ICAgaWYgKGxvYWRmLT5hYm9ydCkgewotICAgICAgICBsb2FkZi0+YWJvcnQgPSAwOwotICAg ICAgICB1aV9wYXVzZV9lbmFibGUoKTsKLSAgICAgICAgdWlfc2RsX3F1aXQoKTsKLSAgICAg ICAgdWlfcGF1c2VfZGlzYWJsZSgpOyAvKiBkb2VzIHRoaXMgZXZlbiBnZXQgY2FsbGVkIGFm dGVyIHVpX3NkbF9xdWl0KCk/ICovCi0gICAgICAgIHJldHVybiBNRU5VX0FDVElPTl9OT05F OwotICAgIH0gZWxzZSBpZiAobG9hZGVyX2xvYWRzdGF0ZSkgewotICAgICAgICBsb2FkZXJf bG9hZHN0YXRlID0gMDsKLSAgICAgICAgbG9hZGVyX2xvYWRfc25hcHNob3Qoc2F2ZXN0YXRl X2ZpbGVuYW1lKTsKLSAgICAgICAgdWlfcGF1c2VfZGlzYWJsZSgpOwotICAgICAgICByZXR1 cm4gTUVOVV9BQ1RJT05fTk9ORTsKLSAgICB9IGVsc2UgaWYgKGxvYWRlcl9zYXZlc3RhdGUp IHsKLSAgICAgICAgbG9hZGVyX3NhdmVzdGF0ZSA9IDA7Ci0gICAgICAgIGxvYWRlcl9zYXZl X3NuYXBzaG90KHNhdmVzdGF0ZV9maWxlbmFtZSk7Ci0gICAgICAgIHVpX3BhdXNlX2Rpc2Fi bGUoKTsKLSAgICAgICAgcmV0dXJuIE1FTlVfQUNUSU9OX05PTkU7Ci0gICAgfQotCi0gICAg aW50IHN0b3BQb2xsID0gMDsKLQotICAgIHdoaWxlICgoIXN0b3BQb2xsKSAmJiBBbmRyb2lk X1BvbGxFdmVudCgmZXZlbnQxKSkgewotICAgICAgICBzdHJ1Y3QgbG9jbmV0X2FsX2V2ZW50 ICpldmVudCA9ICZldmVudDE7Ci0KLSAgICAgICAgc3dpdGNoIChldmVudC0+ZXZlbnRUeXBl KSB7Ci0gICAgICAgICAgICBjYXNlIFNETF9NT1VTRU1PVElPTjoKLSAgICAgICAgICAgICAg ICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIGRldGVjdCBhdXRvIGNhbGlicmF0ZSAqLwot ICAgICAgICAgICAgICAgICAgICBpZiAoKGV2ZW50LT54ID09IC0yMDQ4KSAmJiAoZXZlbnQt PnkgPT0gLTIwNDgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3duX3ggPSAtMTsK LSAgICAgICAgICAgICAgICAgICAgICAgIGRvd25feSA9IC0xOwotICAgICAgICAgICAgICAg ICAgICAgICAgb2xkeCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbGR5ID0gMDsK LSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BQb2xsID0gMTsKLSAgICAgICAgICAgICAg ICAgICAgLyogZGV0ZWN0IHB1cmUgcmVsYXRpdmUgbW92ZSAqLwotICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgaWYgKChldmVudC0+ZG93bl94ID09IC0xMDI0KSAmJiAoZXZlbnQtPmRv d25feSA9PSAtMTAyNCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvd25feCA9IDA7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3duX3kgPSAwOwotICAgICAgICAgICAgICAg ICAgICAgICAgb2xkeCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbGR5ID0gMDsK LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoZG93bl94ICE9IGV2ZW50LT5kb3du X3gpIHx8IChkb3duX3kgIT0gZXZlbnQtPmRvd25feSkpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGRvd25feCA9IGV2ZW50LT5kb3duX3g7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBkb3duX3kgPSBldmVudC0+ZG93bl95OwotICAgICAgICAgICAgICAgICAgICAgICAgb2xk eCA9IGRvd25feDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9sZHkgPSBkb3duX3k7Ci0g ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbW91c2VfbW92ZSgo aW50KShldmVudC0+eCAtIG9sZHgpLCAoaW50KShldmVudC0+eSAtIG9sZHkpKTsKLSAgICAg ICAgICAgICAgICAgICAgb2xkeCA9IGV2ZW50LT54OwotICAgICAgICAgICAgICAgICAgICBv bGR5ID0gZXZlbnQtPnk7Ci0gICAgICAgICAgICAgICAgfQorICAgIHdoaWxlIChTRExfUG9s bEV2ZW50KCZlKSkgeworICAgICAgICBzd2l0Y2ggKGUudHlwZSkgeworICAgICAgICAgICAg Y2FzZSBTRExfS0VZRE9XTjoKKyAgICAgICAgICAgICAgICB1aV9kaXNwbGF5X2tiZF9zdGF0 dXMoJmUpOworICAgICAgICAgICAgICAgIHNkbGtiZF9wcmVzcyhTREwyeF90b19TREwxeF9L ZXlzKGUua2V5LmtleXN5bS5zeW0pLCBlLmtleS5rZXlzeW0ubW9kKTsKICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU0RMX01PVVNFQlVUVE9ORE9XTjoKLSAg ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoZXZlbnQtPmRvd25f eCA+PSAwKSAmJiAoZXZlbnQtPmRvd25feSA+PSAwKSkgewotICAgICAgICAgICAgICAgICAg ICAgICAgbW91c2VfeCA9IDY0MCAqIGV2ZW50LT5kb3duX3ggLyAxMDAwLjBmIC0gNjQ7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBtb3VzZV95ID0gNDAwICogKDEwMDAgLSBldmVudC0+ ZG93bl95KSAvIDEwMDAuMGYgLSAyMDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5rZXljb2RlID49IDApIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIG1vdXNlX2J1dHRvbigoaW50KShldmVudC0+a2V5Y29kZSkgPyBTRExf QlVUVE9OX1JJR0hUIDogU0RMX0JVVFRPTl9MRUZULCAxKTsKLSAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICBzdG9wUG9sbCA9IDE7Ci0gICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgY2FzZSBTRExfS0VZVVA6CisgICAgICAgICAgICAgICAgdWlf ZGlzcGxheV9rYmRfc3RhdHVzKCZlKTsKKyAgICAgICAgICAgICAgICBzZGxrYmRfcmVsZWFz ZShTREwyeF90b19TREwxeF9LZXlzKGUua2V5LmtleXN5bS5zeW0pLCBlLmtleS5rZXlzeW0u bW9kKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU0RMX01P VVNFQlVUVE9OVVA6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBp ZiAoZXZlbnQtPmtleWNvZGUgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbW91 c2VfYnV0dG9uKChpbnQpKGV2ZW50LT5rZXljb2RlKSA/IFNETF9CVVRUT05fUklHSFQgOiBT RExfQlVUVE9OX0xFRlQsIDApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgIHN0b3BQb2xsID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgYnJlYWs7CisjaWZkZWYgSEFWRV9TRExfTlVNSk9ZU1RJQ0tTCiAgICAgICAgICAg ICBjYXNlIFNETF9KT1lBWElTTU9USU9OOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICAgICAgZmxvYXQgeCA9IGV2ZW50LT54IC8gMjU2LjBmOwotICAgICAgICAgICAg ICAgICAgICBmbG9hdCB5ID0gZXZlbnQtPnkgLyAyNTYuMGY7Ci0gICAgICAgICAgICAgICAg ICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwgcmlnaHQgPSAwLCBib3QgPSAwOwotICAgICAg ICAgICAgICAgICAgICBpbnQgdmFsdWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHkg PCAtREVBRF9aT05FKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b3AgPSAxOwotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5ID4gREVBRF9a T05FKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib3QgPSAxOwotICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4IDwgLURFQURfWk9ORSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IDE7Ci0gICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHggPiBERUFEX1pPTkUpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIHJpZ2h0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBp ZiAobGVmdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgfD0gNDsKLSAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHQpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHw9IDg7Ci0gICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRvcCkgewotICAgICAgICAgICAgICAgICAg ICAgICAgdmFsdWUgfD0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICBpZiAoYm90KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB8PSAy OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9 IHNkbGpveV9heGlzX2V2ZW50KDAsIDAsIGV2ZW50LT54IC8gMjU2LjBmICogMzI3NjcpOwot ICAgICAgICAgICAgICAgICAgICB1aV9tZW51X2FjdGlvbl90IHJldHZhbDIgPSBzZGxqb3lf YXhpc19ldmVudCgwLCAxLCBldmVudC0+eSAvIDI1Ni4wZiAqIDMyNzY3KTsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBNRU5VX0FDVElPTl9OT05FKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICByZXR2YWwgPSByZXR2YWwyOwotICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICAgIG9sZF9qb3lfZGlyZWN0aW9uID0gdmFsdWU7Ci0g ICAgICAgICAgICAgICAgICAgIHN0b3BQb2xsID0gMTsKLSAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgc2Rsam95X2F4aXNfZXZlbnQoZS5qYXhpcy53aGljaCwgZS5qYXhp cy5heGlzLCBlLmpheGlzLnZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgIGNhc2UgU0RMX0pPWUJVVFRPTkRPV046Ci0gICAgICAgICAgICAgICAgewotICAg ICAgICAgICAgICAgICAgICByZXR2YWwgPSBzZGxqb3lfYnV0dG9uX2V2ZW50KDAsIGV2ZW50 LT5rZXljb2RlLCAxKTsKLQotICAgICAgICAgICAgICAgICAgICAvKiBidWZmZXIgb3ZlcmZs b3cgd2hlbiBhdXRvZmlyZSBpZiBzdG9wUG9sbCAqLwotICAgICAgICAgICAgICAgICAgICBp ZiAoIUFuZHJvaWRfSGFzUmVwZWF0RXZlbnQoU0RMX0pPWUJVVFRPTkRPV04sIGV2ZW50LT5r ZXljb2RlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFBvbGwgPSAxOwotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGpveV9idXR0b25fZXZlbnQoZS5qYnV0dG9uLndoaWNoLCBlLmpidXR0b24uYnV0dG9uLCAx KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU0RMX0pPWUJV VFRPTlVQOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFs ID0gc2Rsam95X2J1dHRvbl9ldmVudCgwLCBldmVudC0+a2V5Y29kZSwgMCk7Ci0KLSAgICAg ICAgICAgICAgICAgICAgLyogYnVmZmVyIG92ZXJmbG93IHdoZW4gYXV0b2ZpcmUgaWYgc3Rv cFBvbGwgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFBbmRyb2lkX0hhc1JlcGVhdEV2 ZW50KFNETF9KT1lCVVRUT05VUCwgZXZlbnQtPmtleWNvZGUpKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBzdG9wUG9sbCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBqb3lfYnV0dG9uX2V2ZW50KGUuamJ1dHRvbi53aGljaCwgZS5qYnV0dG9u LmJ1dHRvbiwgMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl IFNETF9KT1lIQVRNT1RJT046CisgICAgICAgICAgICAgICAgam95X2hhdF9ldmVudChlLmpo YXQud2hpY2gsIGUuamhhdC5oYXQsIGUuamhhdC52YWx1ZSk7CisgICAgICAgICAgICAgICAg YnJlYWs7CisjZW5kaWYKKyAgICAgICAgICAgIGNhc2UgU0RMX01PVVNFTU9USU9OOgorICAg ICAgICAgICAgICAgIHNkbF91aV9jb25zdW1lX21vdXNlX2V2ZW50KCZlKTsKKyAgICAgICAg ICAgICAgICBpZiAoX21vdXNlX2VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgbW91 c2VfbW92ZShlLm1vdGlvbi54cmVsLCBlLm1vdGlvbi55cmVsKTsKICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNETF9LRVlV UDoKLSAgICAgICAgICAgIGNhc2UgU0RMX0tFWURPV046Ci0gICAgICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgICAgICBzdGF0aWMgaW50IGN0cmxfZG93biA9IDA7Ci0gICAgICAg ICAgICAgICAgICAgIHN0YXRpYyBpbnQgYWx0X2Rvd24gPSAwOwotICAgICAgICAgICAgICAg ICAgICBzdGF0aWMgaW50IHNoaWZ0X2Rvd24gPSAwOwotCi0gICAgICAgICAgICAgICAgICAg IGludCBkb3duID0gKGV2ZW50LT5ldmVudFR5cGUgPT0gU0RMX0tFWURPV04pOwotICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1vZGlmaWVyID0gZXZlbnQtPm1vZGlmaWVy OwotICAgICAgICAgICAgICAgICAgICBpbnQgY3RybCA9ICgobW9kaWZpZXIgJiBLRVlCT0FS RF9DVFJMX0ZMQUcpICE9IDApOwotICAgICAgICAgICAgICAgICAgICBpbnQgYWx0ID0gKCht b2RpZmllciAmIEtFWUJPQVJEX0FMVF9GTEFHKSAhPSAwKTsKLSAgICAgICAgICAgICAgICAg ICAgaW50IHNoaWZ0ID0gKChtb2RpZmllciAmIEtFWUJPQVJEX1NISUZUX0ZMQUcpICE9IDAp OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGtjb2RlID0gKHVuc2lnbmVk IGxvbmcpZXZlbnQtPmtleWNvZGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaW50IGttb2Qg PSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjdHJsKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBrbW9kIHw9IEtNT0RfTENUUkw7Ci0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgaWYgKGFsdCkgewotICAgICAgICAgICAgICAgICAgICAg ICAga21vZCB8PSBLTU9EX0xBTFQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgaWYgKHNoaWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrbW9k IHw9IEtNT0RfTFNISUZUOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgIGlmIChkb3duKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3RybCB8 fCAoa2NvZGUgPT0gU0RMS19UQUIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCFjdHJsX2Rvd24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5 Ym9hcmRfa2V5X3ByZXNzZWQoKHVuc2lnbmVkIGxvbmcpU0RMS19UQUIpOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJs X2Rvd24rKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChhbHQgfHwgKGtjb2RlID09IFNETEtfTENUUkwpKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCFhbHRfZG93bikgewotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBrZXlib2FyZF9rZXlfcHJlc3NlZCgodW5zaWduZWQgbG9uZylTRExL X0xDVFJMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgYWx0X2Rvd24rKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGlmdCB8fCAoa2NvZGUgPT0gU0RMS19M U0hJRlQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaGlmdF9kb3du KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJvYXJkX2tleV9wcmVz c2VkKCh1bnNpZ25lZCBsb25nKVNETEtfTFNISUZUKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRfZG93bisrOwot ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdWlf ZGlzcGxheV9rYmRfc3RhdHVzKGV2ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl dHZhbCA9IHNkbGtiZF9wcmVzcyhrY29kZSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1aV9kaXNwbGF5X2tiZF9zdGF0dXMo ZXZlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gc2Rsa2JkX3JlbGVh c2Uoa2NvZGUsIDApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3RybCB8fCAo a2NvZGUgPT0gU0RMS19UQUIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGtjb2RlID09IFNETEtfVEFCKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGN0cmxfZG93biA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHJsX2Rvd24pIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY3RybF9kb3duLS07Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3RybF9kb3duKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJvYXJkX2tleV9yZWxlYXNl ZCgodW5zaWduZWQgbG9uZylTRExLX1RBQik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGFsdCB8fCAoa2NvZGUgPT0gU0RMS19MQ1RSTCkpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoa2NvZGUgPT0gU0RMS19MQ1RSTCkgewotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhbHRfZG93biA9IDA7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRfZG93bikg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRfZG93bi0tOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIWFsdF9kb3duKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJv YXJkX2tleV9yZWxlYXNlZCgodW5zaWduZWQgbG9uZylTRExLX0xDVFJMKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgICAgICBpZiAoc2hpZnQgfHwgKGtjb2RlID09IFNETEtfTFNISUZU KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrY29kZSA9PSBTRExLX0xT SElGVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdF9kb3duID0g MDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHNoaWZ0X2Rvd24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2hpZnRfZG93bi0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNoaWZ0X2Rvd24pIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAga2V5Ym9hcmRfa2V5X3JlbGVhc2VkKCh1bnNpZ25l ZCBsb25nKVNETEtfTFNISUZUKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgc3RvcFBvbGwgPSAxOworICAgICAgICAgICAgY2FzZSBTRExfTU9V U0VCVVRUT05ET1dOOgorICAgICAgICAgICAgY2FzZSBTRExfTU9VU0VCVVRUT05VUDoKKyAg ICAgICAgICAgICAgICBpZiAoX21vdXNlX2VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAg ICAgbW91c2VfYnV0dG9uKChpbnQpKGUuYnV0dG9uLmJ1dHRvbiksIChlLmJ1dHRvbi5zdGF0 ZSA9PSBTRExfUFJFU1NFRCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLyogU0RM X0V2ZW50U3RhdGUoU0RMX1ZJREVPUkVTSVpFLCBTRExfSUdOT1JFKTsgKi8KKyAgICAgICAg ICAgICAgICB1aV9oYW5kbGVfbWlzY19zZGxfZXZlbnQoZSk7CisgICAgICAgICAgICAgICAg LyogU0RMX0V2ZW50U3RhdGUoU0RMX1ZJREVPUkVTSVpFLCBTRExfRU5BQkxFKTsgKi8KKyAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSNlbHNlCit9CisKK2pv eXN0aWNrX2FjdGlvbl90IHVpX2Rpc3BhdGNoX2V2ZW50c19mb3JfbWVudV9hY3Rpb24odm9p ZCkKK3sKKyAgICBTRExfRXZlbnQgZTsKKyAgICB1aV9tZW51X2FjdGlvbl90IHJldHZhbCA9 IE1FTlVfQUNUSU9OX05PTkU7CisKICAgICB3aGlsZSAoU0RMX1BvbGxFdmVudCgmZSkpIHsK ICAgICAgICAgc3dpdGNoIChlLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgU0RMX0tFWURP V046CiAgICAgICAgICAgICAgICAgdWlfZGlzcGxheV9rYmRfc3RhdHVzKCZlKTsKLSAgICAg ICAgICAgICAgICByZXR2YWwgPSBzZGxrYmRfcHJlc3MoU0RMMnhfdG9fU0RMMXhfS2V5cyhl LmtleS5rZXlzeW0uc3ltKSwgZS5rZXkua2V5c3ltLm1vZCk7CisgICAgICAgICAgICAgICAg cmV0dmFsID0gc2Rsa2JkX3ByZXNzX2Zvcl9tZW51X2FjdGlvbihTREwyeF90b19TREwxeF9L ZXlzKGUua2V5LmtleXN5bS5zeW0pLCBlLmtleS5rZXlzeW0ubW9kKTsKICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU0RMX0tFWVVQOgogICAgICAgICAgICAg ICAgIHVpX2Rpc3BsYXlfa2JkX3N0YXR1cygmZSk7Ci0gICAgICAgICAgICAgICAgcmV0dmFs ID0gc2Rsa2JkX3JlbGVhc2UoU0RMMnhfdG9fU0RMMXhfS2V5cyhlLmtleS5rZXlzeW0uc3lt KSwgZS5rZXkua2V5c3ltLm1vZCk7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gc2Rsa2Jk X3JlbGVhc2VfZm9yX21lbnVfYWN0aW9uKFNETDJ4X3RvX1NETDF4X0tleXMoZS5rZXkua2V5 c3ltLnN5bSksIGUua2V5LmtleXN5bS5tb2QpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog I2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUwogICAgICAgICAgICAgY2FzZSBTRExfSk9Z QVhJU01PVElPTjoKLSAgICAgICAgICAgICAgICBqb3ludW0gPSBzZGxqb3lfZ2V0X2pveW51 bV9mb3JfZXZlbnQoZS5qYXhpcy53aGljaCk7Ci0gICAgICAgICAgICAgICAgaWYgKGpveW51 bSAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBzZGxqb3lfYXhpc19l dmVudChqb3ludW0sIGUuamF4aXMuYXhpcywgZS5qYXhpcy52YWx1ZSk7Ci0gICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIHJldHZhbCA9IHNkbGpveV9heGlzX2V2ZW50X2Zv cl9tZW51X2FjdGlvbihlLmpheGlzLndoaWNoLCBlLmpheGlzLmF4aXMsIGUuamF4aXMudmFs dWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTRExfSk9Z QlVUVE9ORE9XTjoKLSAgICAgICAgICAgICAgICBqb3ludW0gPSBzZGxqb3lfZ2V0X2pveW51 bV9mb3JfZXZlbnQoZS5qYnV0dG9uLndoaWNoKTsKLSAgICAgICAgICAgICAgICBpZiAoam95 bnVtICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHNkbGpveV9idXR0 b25fZXZlbnQoam95bnVtLCBlLmpidXR0b24uYnV0dG9uLCAxKTsKLSAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgcmV0dmFsID0gc2Rsam95X2J1dHRvbl9ldmVudChlLmpi dXR0b24ud2hpY2gsIGUuamJ1dHRvbi5idXR0b24sIDEpOwogICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgY2FzZSBTRExfSk9ZQlVUVE9OVVA6Ci0gICAgICAgICAgICAg ICAgam95bnVtID0gc2Rsam95X2dldF9qb3ludW1fZm9yX2V2ZW50KGUuamJ1dHRvbi53aGlj aCk7Ci0gICAgICAgICAgICAgICAgaWYgKGpveW51bSAhPSAtMSkgewotICAgICAgICAgICAg ICAgICAgICByZXR2YWwgPSBzZGxqb3lfYnV0dG9uX2V2ZW50KGpveW51bSwgZS5qYnV0dG9u LmJ1dHRvbiwgMCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHZh bCA9IHNkbGpveV9idXR0b25fZXZlbnQoZS5qYnV0dG9uLndoaWNoLCBlLmpidXR0b24uYnV0 dG9uLCAwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU0RM X0pPWUhBVE1PVElPTjoKLSAgICAgICAgICAgICAgICBqb3ludW0gPSBzZGxqb3lfZ2V0X2pv eW51bV9mb3JfZXZlbnQoZS5qaGF0LndoaWNoKTsKLSAgICAgICAgICAgICAgICBpZiAoam95 bnVtICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHNkbGpveV9oYXRf ZXZlbnQoam95bnVtLCBlLmpoYXQuaGF0LCBlLmpoYXQudmFsdWUpOwotICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICByZXR2YWwgPSBzZGxqb3lfaGF0X2V2ZW50KGUuamhh dC53aGljaCwgZS5qaGF0LmhhdCwgZS5qaGF0LnZhbHVlKTsKICAgICAgICAgICAgICAgICBi cmVhazsKLSNpZmRlZiBVU0VfU0RMVUkyCi0gICAgICAgICAgICBjYXNlIFNETF9KT1lERVZJ Q0VBRERFRDoKLSAgICAgICAgICAgIGNhc2UgU0RMX0pPWURFVklDRVJFTU9WRUQ6Ci0gICAg ICAgICAgICAgICAgcmV0dmFsID0gc2Rsam95X3Jlc2NhbigpOwotICAgICAgICAgICAgICAg IGJyZWFrOwogI2VuZGlmCi0jZW5kaWYKICAgICAgICAgICAgIGNhc2UgU0RMX01PVVNFTU9U SU9OOgogICAgICAgICAgICAgICAgIHNkbF91aV9jb25zdW1lX21vdXNlX2V2ZW50KCZlKTsK ICAgICAgICAgICAgICAgICBpZiAoX21vdXNlX2VuYWJsZWQpIHsKQEAgLTUyMiw3ICszMDgs NiBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0jZW5kaWYKICAg ICByZXR1cm4gcmV0dmFsOwogfQogCkBAIC04MDEsNyArNTg2LDYgQEAKIHZvaWQgdWlfcmVz b3VyY2VzX3NodXRkb3duKHZvaWQpCiB7CiAgICAgREJHKCgiJXMiLCBfX2Z1bmNfXykpOwot ICAgIGpveV9hcmNoX3Jlc291cmNlc19zaHV0ZG93bigpOwogICAgIHNkbGtiZF9yZXNvdXJj ZXNfc2h1dGRvd24oKTsKIH0KIApJbmRleDogZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2Rs L3VpLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL3Vp LmgJKHJldmlzaW9uZSA0MTM0OCkKKysrIGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC91 aS5oCShjb3BpYSBkaSBsYXZvcm8pCkBAIC01MCw5ICs1MCwxMSBAQAogCiBzdHJ1Y3Qgdmlk ZW9fY2FudmFzX3M7CiBzdHJ1Y3QgcGFsZXR0ZV9zOworZW51bSBqb3lzdGlja19hY3Rpb25f ZTsKIAogZXh0ZXJuIHZvaWQgdWlfaGFuZGxlX21pc2Nfc2RsX2V2ZW50KFNETF9FdmVudCBl KTsKLWV4dGVybiB1aV9tZW51X2FjdGlvbl90IHVpX2Rpc3BhdGNoX2V2ZW50cyh2b2lkKTsK K2V4dGVybiB2b2lkIHVpX2Rpc3BhdGNoX2V2ZW50cyh2b2lkKTsKK2V4dGVybiBlbnVtIGpv eXN0aWNrX2FjdGlvbl9lIHVpX2Rpc3BhdGNoX2V2ZW50c19mb3JfbWVudV9hY3Rpb24odm9p ZCk7CiBleHRlcm4gdm9pZCB1aV9leGl0KHZvaWQpOwogZXh0ZXJuIHZvaWQgdWlfbWVzc2Fn ZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiBleHRlcm4gY2hhciAqdWlfc2VsZWN0X2Zp bGUoY29uc3QgY2hhciAqdGl0bGUsIGNoYXIgKigqcmVhZF9jb250ZW50c19mdW5jKShjb25z dCBjaGFyICosIHVuc2lnbmVkIGludCB1bml0KSwgdW5zaWduZWQgaW50IHVuaXQsCkluZGV4 OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdWltZW51LmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL3VpbWVudS5jCShyZXZpc2lvbmUgNDEz NDgpCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdWltZW51LmMJKGNvcGlhIGRp IGxhdm9ybykKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJpbnRlcnJ1cHQuaCIKICNp bmNsdWRlICJpb3V0aWwuaCIKICNpbmNsdWRlICJqb3kuaCIKKyNpbmNsdWRlICJqb3lzdGlj ay5oIgogI2luY2x1ZGUgImtiZC5oIgogI2luY2x1ZGUgImxpYi5oIgogI2luY2x1ZGUgIm1h Y2hpbmUuaCIKQEAgLTk1Miw4ICs5NTMsNyBAQAogewogICAgIFNETF9FdmVudCBlOwogICAg IGludCBnb3Rfa2V5ID0gMDsKLSAgICB1aV9tZW51X2FjdGlvbl90IGFjdGlvbiA9IE1FTlVf QUNUSU9OX05PTkU7Ci0gICAgaW50IGpveW51bTsKKyAgICBqb3lzdGlja19hY3Rpb25fdCBh Y3Rpb24gPSBOT05FOwogI2lmZGVmIFVTRV9TRExVSTIKICAgICBpbnQgaTsKICNlbmRpZgpA QCAtMTA2MCwyMiArMTA2MCwxMyBAQAogCiAjaWZkZWYgSEFWRV9TRExfTlVNSk9ZU1RJQ0tT CiAgICAgICAgICAgICBjYXNlIFNETF9KT1lBWElTTU9USU9OOgotICAgICAgICAgICAgICAg IGpveW51bSA9IHNkbGpveV9nZXRfam95bnVtX2Zvcl9ldmVudChlLmpheGlzLndoaWNoKTsK LSAgICAgICAgICAgICAgICBpZiAoam95bnVtICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGFjdGlvbiA9IHNkbGpveV9heGlzX2V2ZW50KGpveW51bSwgZS5qYXhpcy5heGlzLCBl LmpheGlzLnZhbHVlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWN0 aW9uID0gc2Rsam95X2F4aXNfZXZlbnRfZm9yX21lbnVfYWN0aW9uKGUuamF4aXMud2hpY2gs IGUuamF4aXMuYXhpcywgZS5qYXhpcy52YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgICBjYXNlIFNETF9KT1lCVVRUT05ET1dOOgotICAgICAgICAgICAgICAg IGpveW51bSA9IHNkbGpveV9nZXRfam95bnVtX2Zvcl9ldmVudChlLmpidXR0b24ud2hpY2gp OwotICAgICAgICAgICAgICAgIGlmIChqb3ludW0gIT0gLTEpIHsKLSAgICAgICAgICAgICAg ICAgICAgYWN0aW9uID0gc2Rsam95X2J1dHRvbl9ldmVudChqb3ludW0sIGUuamJ1dHRvbi5i dXR0b24sIDEpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhY3Rpb24g PSBzZGxqb3lfYnV0dG9uX2V2ZW50KGUuamJ1dHRvbi53aGljaCwgZS5qYnV0dG9uLmJ1dHRv biwgMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNETF9K T1lIQVRNT1RJT046Ci0gICAgICAgICAgICAgICAgam95bnVtID0gc2Rsam95X2dldF9qb3lu dW1fZm9yX2V2ZW50KGUuamhhdC53aGljaCk7Ci0gICAgICAgICAgICAgICAgaWYgKGpveW51 bSAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSBzZGxqb3lfaGF0X2V2 ZW50KGpveW51bSwgZS5qaGF0LmhhdCwgZS5qaGF0LnZhbHVlKTsKLSAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgYWN0aW9uID0gc2Rsam95X2hhdF9ldmVudChlLmpoYXQu d2hpY2gsIGUuamhhdC5oYXQsIGUuamhhdC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJl YWs7CiAjZW5kaWYKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMzg0LDcgKzEzNzUsNyBA QAogCiAgICAgZG8gewogICAgICAgICBTRExfRGVsYXkoMjApOwotICAgICAgICByZXR2YWwg PSB1aV9kaXNwYXRjaF9ldmVudHMoKTsKKyAgICAgICAgcmV0dmFsID0gdWlfZGlzcGF0Y2hf ZXZlbnRzX2Zvcl9tZW51X2FjdGlvbigpOwogI2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNL UwogICAgICAgICBpZiAocmV0dmFsID09IE1FTlVfQUNUSU9OX05PTkUgfHwgcmV0dmFsID09 IE1FTlVfQUNUSU9OX05PTkVfUkVMRUFTRSkgewogICAgICAgICAgICAgcmV0dmFsID0gc2Rs am95X2F1dG9yZXBlYXQoKTsKSW5kZXg6IGRldi92aWNlL3RydW5rL3NyYy9hcmNoL3NkbC92 aWRlb19zZGwxLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gv c2RsL3ZpZGVvX3NkbDEuYwkocmV2aXNpb25lIDQxMzQ4KQorKysgZGV2L3ZpY2UvdHJ1bmsv c3JjL2FyY2gvc2RsL3ZpZGVvX3NkbDEuYwkoY29waWEgZGkgbGF2b3JvKQpAQCAtNDAyLDEw ICs0MDIsNiBAQAogewogICAgIERCRygoIiVzIiwgX19mdW5jX18pKTsKIAotICAgIGlmICht YWNoaW5lX2NsYXNzID09IFZJQ0VfTUFDSElORV9WU0lEKSB7Ci0gICAgICAgIGpveV9hcmNo X3Jlc291cmNlc19zaHV0ZG93bigpOwotICAgIH0KLQogI2lmIGRlZmluZWQoSEFWRV9IV1ND QUxFKQogICAgIGxpYl9mcmVlKGFzcGVjdF9yYXRpb19zKTsKICNlbmRpZgpJbmRleDogZGV2 L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL3ZpZGVvX3NkbDIuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdmlkZW9fc2RsMi5jCShyZXZpc2lvbmUg NDEzNDgpCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdmlkZW9fc2RsMi5jCShj b3BpYSBkaSBsYXZvcm8pCkBAIC00NDAsMTAgKzQ0MCw2IEBACiB7CiAgICAgREJHKCgiJXMi LCBfX2Z1bmNfXykpOwogCi0gICAgaWYgKG1hY2hpbmVfY2xhc3MgPT0gVklDRV9NQUNISU5F X1ZTSUQpIHsKLSAgICAgICAgam95X2FyY2hfcmVzb3VyY2VzX3NodXRkb3duKCk7Ci0gICAg fQotCiAgICAgbGliX2ZyZWUoYXNwZWN0X3JhdGlvX3MpOwogICAgIGxpYl9mcmVlKHNkbDJf cmVuZGVyZXJfbmFtZSk7CiAgICAgbGliX2ZyZWUoYXNwZWN0X3JhdGlvX2ZhY3RvcnlfdmFs dWVfcyk7CkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwvdnN5bmNhcmNoLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gZGV2L3ZpY2UvdHJ1bmsvc3JjL2FyY2gvc2RsL3ZzeW5jYXJj aC5jCShyZXZpc2lvbmUgNDEzNDgpCisrKyBkZXYvdmljZS90cnVuay9zcmMvYXJjaC9zZGwv dnN5bmNhcmNoLmMJKGNvcGlhIGRpIGxhdm9ybykKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs dWRlICJ2aWNlLmgiCiAKICNpbmNsdWRlICJqb3kuaCIKKyNpbmNsdWRlICJqb3lzdGljay5o IgogI2luY2x1ZGUgImtiZGJ1Zi5oIgogI2luY2x1ZGUgImxpZ2h0cGVuZHJ2LmgiCiAjaW5j bHVkZSAibWFjaGluZS5oIgpAQCAtODgsNyArODksNyBAQAogdm9pZCB2c3luY2FyY2hfcHJl c3luYyh2b2lkKQogewogICAgIGlmIChzZGxfdmtiZF9zdGF0ZSAmIFNETF9WS0JEX0FDVElW RSkgewotICAgICAgICB3aGlsZSAoc2RsX3ZrYmRfcHJvY2Vzcyh1aV9kaXNwYXRjaF9ldmVu dHMoKSkpIHsKKyAgICAgICAgd2hpbGUgKHNkbF92a2JkX3Byb2Nlc3ModWlfZGlzcGF0Y2hf ZXZlbnRzX2Zvcl9tZW51X2FjdGlvbigpKSkgewogICAgICAgICB9CiAjaWZkZWYgSEFWRV9T RExfTlVNSk9ZU1RJQ0tTCiAgICAgICAgIHNkbF92a2JkX3Byb2Nlc3Moc2Rsam95X2F1dG9y ZXBlYXQoKSk7CkluZGV4OiBkZXYvdmljZS90cnVuay9zcmMvam95cG9ydC9qb3lzdGljay5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGRldi92aWNlL3RydW5rL3NyYy9qb3lwb3J0L2pveXN0aWNr LmMJKHJldmlzaW9uZSA0MTM0OCkKKysrIGRldi92aWNlL3RydW5rL3NyYy9qb3lwb3J0L2pv eXN0aWNrLmMJKGNvcGlhIGRpIGxhdm9ybykKQEAgLTQ0LDE0ICs0NCwxNyBAQAogI2luY2x1 ZGUgImpveXN0aWNrLmgiCiAjaW5jbHVkZSAia2JkLmgiCiAjaW5jbHVkZSAibGliLmgiCisj aW5jbHVkZSAibG9nLmgiCiAjaW5jbHVkZSAibWFjaGluZS5oIgogI2luY2x1ZGUgIm1haW5j cHUuaCIKICNpbmNsdWRlICJuZXR3b3JrLmgiCiAjaW5jbHVkZSAicmVzb3VyY2VzLmgiCiAj aW5jbHVkZSAic25hcHNob3QuaCIKKyNpbmNsdWRlICJzeXNmaWxlLmgiCiAjaW5jbHVkZSAi dHlwZXMuaCIKICNpbmNsdWRlICJ1aWFwaS5oIgogI2luY2x1ZGUgInVzZXJwb3J0X2pveXN0 aWNrLmgiCisjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgInZpY2UtZXZlbnQuaCIKIAog LyogQ29udHJvbCBwb3J0IDwtLT4gSm95c3RpY2sgY29ubmVjdGlvbnM6CkBAIC0xNzEsNiAr MTc0LDE4IEBACiAKIC8qISBcdG9kbyBTUlQ6IG9mZnNldCBpcyB1bnVzZWQhICovCiAKKy8q IEpveXN0aWNrIG1hcHBpbmcgZmlsZW5hbWUgKi8KK3N0YXRpYyBjaGFyICpqb3ltYXBfZmls ZSA9IE5VTEw7CisKKy8qKiBcYnJpZWYgIFRlbXBvcmFyeSBjb3B5IG9mIHRoZSBkZWZhdWx0 IGpveW1hcCBmaWxlIG5hbWUKKyAqCisgKiBBdm9pZHMgc2lsbHkgY2FzdGluZyBhd2F5IG9m IGNvbnN0CisgKi8KK3N0YXRpYyBjaGFyICpqb3ltYXBfZmFjdG9yeSA9IE5VTEw7CisKKwor c3RhdGljIGxvZ190IGpveV9sb2cgPSBMT0dfRVJSOworCiBzdGF0aWMgdm9pZCBqb3lzdGlj a19sYXRjaF9tYXRyaXgoQ0xPQ0sgb2Zmc2V0KQogewogICAgIHVpbnQ4X3QgaWR4OwpAQCAt ODI0LDMxICs4MzksNyBAQAogICAgIHJldHVybiAwOwogfQogCi0vKiBBY3Rpb25zIHRvIHBl cmZvcm0gb24gam95c3RpY2sgaW5wdXQgKi8KLXR5cGVkZWYgZW51bSB7Ci0gICAgTk9ORSA9 IDAsCiAKLSAgICAvKiBKb3lzdGljayBtb3ZlbWVudCBvciBidXR0b24gcHJlc3MgKi8KLSAg ICBKT1lTVElDSyA9IDEsCi0KLSAgICAvKiBLZXlib2FyZCBrZXkgcHJlc3MgKi8KLSAgICBL RVlCT0FSRCA9IDIsCi19IGpveXN0aWNrX2FjdGlvbl90OwotCi0KLS8qIElucHV0IG1hcHBp bmcgZm9yIGVhY2ggZGlyZWN0aW9uL2J1dHRvbi9ldGMgKi8KLXR5cGVkZWYgc3RydWN0IGpv eXN0aWNrX21hcHBpbmdfcyB7Ci0gICAgLyogQWN0aW9uIHRvIHBlcmZvcm0gKi8KLSAgICBq b3lzdGlja19hY3Rpb25fdCBhY3Rpb247Ci0KLSAgICB1bmlvbiB7Ci0gICAgICAgIHVpbnQx Nl90IGpveV9waW47Ci0KLSAgICAgICAgLyoga2V5WzBdID0gcm93LCBrZXlbMV0gPSBjb2x1 bW4gKi8KLSAgICAgICAgaW50IGtleVsyXTsKLSAgICB9IHZhbHVlOwotfSBqb3lzdGlja19t YXBwaW5nX3Q7Ci0KIHR5cGVkZWYgc3RydWN0IGpveXN0aWNrX2F4aXNfbWFwcGluZ19zIHsK ICAgICAvKiBQcmV2aW91cyBzdGF0ZSBvZiBpbnB1dCAqLwogICAgIHVpbnQ4X3QgcHJldjsK QEAgLTg2NSw5ICs4NTYsNyBAQAogICAgIHN0cnVjdCBqb3lzdGlja19tYXBwaW5nX3Mgcmln aHQ7CiB9IGpveXN0aWNrX2hhdF9tYXBwaW5nX3Q7CiAKLSNpZm5kZWYgSEFWRV9TRExfTlVN Sk9ZU1RJQ0tTCiBzdGF0aWMgaW50IG51bV9qb3lzdGlja19kZXZpY2VzID0gMDsKLSNlbmRp ZgogCiAvKiogXGJyaWVmICBKb3lzdGljayBkZXZpY2UgbmFtZSBsZW5ndGggKGluY2x1ZGlu ZyAwKQogICovCkBAIC04ODIsMTIgKzg3MSwxMyBAQAogICAgIGpveXN0aWNrX2F4aXNfbWFw cGluZ190ICpheGlzX21hcHBpbmc7CiAgICAgam95c3RpY2tfbWFwcGluZ190ICpidXR0b25f bWFwcGluZzsKICAgICBqb3lzdGlja19oYXRfbWFwcGluZ190ICpoYXRfbWFwcGluZzsKKyAg ICBpbnQgbnVtX2F4ZXM7CisgICAgaW50IG51bV9idXR0b25zOworICAgIGludCBudW1faGF0 czsKIH0gam95c3RpY2tfZGV2aWNlX3Q7CiAKIAotI2lmbmRlZiBIQVZFX1NETF9OVU1KT1lT VElDS1MKIHN0YXRpYyBzdHJ1Y3Qgam95c3RpY2tfZGV2aWNlX3MgKmpveXN0aWNrX2Rldmlj ZXMgPSBOVUxMOwotI2VuZGlmCiAKIHN0YXRpYyBpbnQgc2V0X2pveXN0aWNrX2RldmljZShp bnQgdmFsLCB2b2lkICpwYXJhbSkKIHsKQEAgLTkyMiw2ICs5MTIsMzc5IEBACiAgICAgcmV0 dXJuIDA7CiB9CiAKK2NoYXIgKmdldF9qb3lfcGluX21hcHBpbmdfc3RyaW5nKGludCBqb3lu ciwgaW50IHBpbikKK3sKKyAgICBpbnQgaSwgazsKKyAgICBzZGxqb3lzdGlja19pbnB1dF90 IGo7CisgICAgc2Rsam95c3RpY2tfYWN0aW9uX3QgdDsKKyAgICBpbnQgdmFsaWQgPSAwOwor ICAgIGludCBqb3kgPSAwOworICAgIGludCB0eXBlID0gMDsKKyAgICBpbnQgaW5kZXggPSAw OworICAgIGludCBzdWJfaW5kZXggPSAwOworICAgIGNoYXIgKnJldHZhbCA9IE5VTEw7Cisg ICAgY2hhciAqdHlwZV9zdHJpbmcgPSBOVUxMOworICAgIGNoYXIgKmluZGV4X3N0cmluZyA9 IE5VTEw7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2pveXN0aWNrX2RldmljZXM7ICsr aSkgeworLy8gICAgICBmb3IgKGogPSBBWElTOyBqIDwgTlVNX0lOUFVUX1RZUEVTOyArK2op IHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IGpveXN0aWNrX2RldmljZXNbaV0ubnVtX2F4 ZXM7IGorKykgeworICAgICAgICAgICAgdCA9IGpveXN0aWNrX2RldmljZXNbaV0uYXhpc19t YXBwaW5nW2pdLnBvc2l0aXZlX2RpcmVjdGlvbi5hY3Rpb247CisKKyAgICAgICAgICAgICAg ICBpZiAodCA9PSBKT1lTVElDSykgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2Rsam95 c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUuam95WzBdID09IGpveW5yICYmIHNkbGpveXN0 aWNrW2ldLmlucHV0W2pdW2tdLnZhbHVlLmpveVsxXSA9PSBwaW4pIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHZhbGlkKys7CisgICAgICAgICAgICAgICAgICAgICAgICBqb3kgPSBp OworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGo7CisgICAgICAgICAgICAgICAg ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj YXNlIEFYSVM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfc3RyaW5n ID0gIkF4IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfc3RyaW5n ID0gIkkiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGsgLyAy OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJfaW5kZXggPSBrICUgMjsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2FzZSBCVVRUT046CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGVfc3RyaW5nID0gIkJ0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5kZXhfc3RyaW5nID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5kZXggPSBrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJf aW5kZXggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEhBVDoKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdHlwZV9zdHJpbmcgPSAiSHQiOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbmRleF9zdHJpbmcgPSAiSSI7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGluZGV4ID0gayAvIDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN1Yl9pbmRleCA9IGsgJSA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJBTEw6Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfc3RyaW5nID0gIkJsIjsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfc3RyaW5nID0gTlVMTDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBrOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdWJfaW5kZXggPSAwOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KKyAgICBpZiAodmFsaWQgPiAxKSB7CisgICAgICAgIHJldHZhbCA9 ICJNdWx0aXBsZSI7CisgICAgfQorICAgIGlmICh2YWxpZCA9PSAxKSB7CisgICAgICAgIGlm IChpbmRleF9zdHJpbmcgIT0gTlVMTCApIHsKKyAgICAgICAgICAgIHNucHJpbnRmKG1hcHBp bmdfcmV0dmFsLCA1MCwgIkolZCwgJXMlZCwgJXMlZCIsIGpveSwgdHlwZV9zdHJpbmcsIGlu ZGV4LCBpbmRleF9zdHJpbmcsIHN1Yl9pbmRleCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBzbnByaW50ZihtYXBwaW5nX3JldHZhbCwgNTAsICJKJWQsICVzJWQiLCBqb3ks IHR5cGVfc3RyaW5nLCBpbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dmFsID0gbWFw cGluZ19yZXR2YWw7CisgICAgfQorCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworaW50IGpv eV9hcmNoX21hcHBpbmdfZHVtcChjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBGSUxF ICpmcDsKKyAgICBpbnQgaSwgazsKKyAgICBpbnQgajsKKyAgICBqb3lzdGlja19hY3Rpb25f dCB0OworICAgIGNoYXIgKmhvdGtleV9wYXRoID0gTlVMTDsKKworI2lmZGVmIFNETF9ERUJV RworICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIF9fZnVuY19fKTsKKyNlbmRpZgorCisg ICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0K KworICAgIGZwID0gZm9wZW4oZmlsZW5hbWUsIE1PREVfV1JJVEVfVEVYVCk7CisKKyAgICBp ZiAoZnAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZnBy aW50ZihmcCwgIiMgVklDRSBqb3lzdGljayBtYXBwaW5nIGZpbGVcbiIKKyAgICAgICAgICAg ICIjXG4iCisgICAgICAgICAgICAiIyBBIGpveXN0aWNrIG1hcCBpcyByZWFkIGluIGFzIHBh dGNoIHRvIHRoZSBjdXJyZW50IG1hcC5cbiIKKyAgICAgICAgICAgICIjXG4iCisgICAgICAg ICAgICAiIyBGaWxlIGZvcm1hdDpcbiIKKyAgICAgICAgICAgICIjIC0gY29tbWVudCBsaW5l cyBzdGFydCB3aXRoICcjJ1xuIgorICAgICAgICAgICAgIiMgLSBrZXl3b3JkIGxpbmVzIHN0 YXJ0IHdpdGggJyFrZXl3b3JkJ1xuIgorICAgICAgICAgICAgIiMgLSBub3JtYWwgbGluZSBo YXMgJ2pveW51bSBpbnB1dHR5cGUgaW5wdXRpbmRleCBhY3Rpb24nXG4iCisgICAgICAgICAg ICAiI1xuIgorICAgICAgICAgICAgIiMgS2V5d29yZHMgYW5kIHRoZWlyIGxpbmVzIGFyZTpc biIKKyAgICAgICAgICAgICIjICchQ0xFQVInICAgIGNsZWFyIGFsbCBtYXBwaW5nc1xuIgor ICAgICAgICAgICAgIiNcbiIKKyAgICAgICAgICAgICk7CisKKyAgICBmcHJpbnRmKGZwLCAi IyBpbnB1dHR5cGU6XG4iCisgICAgICAgICAgICAiIyAwICAgICAgYXhpc1xuIgorICAgICAg ICAgICAgIiMgMSAgICAgIGJ1dHRvblxuIgorICAgICAgICAgICAgIiMgMiAgICAgIGhhdFxu IgorICAgICAgICAgICAgIiNcbiIKKyAgICAgICAgICAgICIjIE5vdGUgdGhhdCBlYWNoIGF4 aXMgaGFzIDIgaW5wdXRpbmRleCBlbnRyaWVzIGFuZCBlYWNoIGhhdCBoYXMgNC5cbiIKKyAg ICAgICAgICAgICIjXG4iCisgICAgICAgICAgICAiIyBhY3Rpb24gW2FjdGlvbl9wYXJhbWV0 ZXJzXTpcbiIKKyAgICAgICAgICAgICIjIDAgICAgICAgICAgICAgICBub25lXG4iCisgICAg ICAgICAgICAiIyAxIHBvcnQgcGluICAgICAgam95c3RpY2sgKHBpbjogMS8yLzQvOC8xNi8z Mi82NCA9IHUvZC9sL3IvZmlyZS9maXJlMi9maXJlMylcbiIKKyAgICAgICAgICAgICIjIDIg cm93IGNvbCAgICAgICBrZXlib2FyZFxuIgorICAgICAgICAgICAgIiMgMyAgICAgICAgICAg ICAgIG1hcFxuIgorICAgICAgICAgICAgIiMgNCAgICAgICAgICAgICAgIFVJIGFjdGl2YXRl XG4iCisgICAgICAgICAgICAiIyA1IHBhdGgmdG8maXRlbSAgVUkgZnVuY3Rpb25cbiIKKyAg ICAgICAgICAgICIjXG5cbiIKKyAgICAgICAgICAgICk7CisKKyAgICBmcHJpbnRmKGZwLCAi IUNMRUFSXG5cbiIpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9qb3lzdGlja19kZXZp Y2VzOyArK2kpIHsKKyAgICAgICAgayA9IDA7CisgICAgICAgIGZwcmludGYoZnAsICIjICVz XG4iLCBqb3lzdGlja19kZXZpY2VzW2ldLmpuYW1lKTsKKyAgICAgICAgZm9yIChqID0gMDsg aiA8IGpveXN0aWNrX2RldmljZXNbaV0ubnVtX2F4ZXM7IGorKykgeworICAgICAgICAgICAg dCA9IGpveXN0aWNrX2RldmljZXNbaV0uYXhpc19tYXBwaW5nW2pdLnBvc2l0aXZlX2RpcmVj dGlvbi5hY3Rpb247CisgICAgICAgICAgICBmcHJpbnRmKGZwLCAiJWkgJXUgJWkgJXUiLCBp LCAwLCBrKyssIHQpOworICAgICAgICAgICAgc3dpdGNoICh0KSB7CisgICAgICAgICAgICAg ICAgY2FzZSBKT1lTVElDSzoKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiAl aSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam95c3RpY2tfZGV2aWNlc1tpXS5h eGlzX21hcHBpbmdbal0ucG9zaXRpdmVfZGlyZWN0aW9uLnZhbHVlLmpveV9waW4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICBjYXNlIEtFWUJPQVJEOgorICAgICAgICAgICAgICAgICAgICBm cHJpbnRmKGZwLCAiICVpICVpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3lz dGlja19kZXZpY2VzW2ldLmF4aXNfbWFwcGluZ1tqXS5wb3NpdGl2ZV9kaXJlY3Rpb24udmFs dWUua2V5WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpveXN0aWNrX2Rldmlj ZXNbaV0uYXhpc19tYXBwaW5nW2pdLnBvc2l0aXZlX2RpcmVjdGlvbi52YWx1ZS5rZXlbMV0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAvKmNhc2UgVUlfRlVOQ1RJT046CisgICAgICAgICAg ICAgICAgICAgIGhvdGtleV9wYXRoID0gc2RsX3VpX2hvdGtleV9wYXRoKHNkbGpveXN0aWNr W2ldLmlucHV0W2pdW2tdLnZhbHVlLnVpX2Z1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICAg ICAgZnByaW50ZihmcCwgIiAlcyIsIGhvdGtleV9wYXRoKTsKKyAgICAgICAgICAgICAgICAg ICAgbGliX2ZyZWUoaG90a2V5X3BhdGgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsq LworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnByaW50ZihmcCwgIlxuIik7CisgICAg ICAgICAgICB0ID0gam95c3RpY2tfZGV2aWNlc1tpXS5heGlzX21hcHBpbmdbal0ubmVnYXRp dmVfZGlyZWN0aW9uLmFjdGlvbjsKKyAgICAgICAgICAgIGZwcmludGYoZnAsICIlaSAldSAl aSAldSIsIGksIDAsIGsrKywgdCk7CisgICAgICAgICAgICBzd2l0Y2ggKHQpIHsKKyAgICAg ICAgICAgICAgICBjYXNlIEpPWVNUSUNLOgorICAgICAgICAgICAgICAgICAgICBmcHJpbnRm KGZwLCAiICVpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3lzdGlja19kZXZp Y2VzW2ldLmF4aXNfbWFwcGluZ1tqXS5uZWdhdGl2ZV9kaXJlY3Rpb24udmFsdWUuam95X3Bp bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgS0VZQk9BUkQ6CisgICAgICAgICAgICAg ICAgICAgIGZwcmludGYoZnAsICIgJWkgJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGpveXN0aWNrX2RldmljZXNbaV0uYXhpc19tYXBwaW5nW2pdLm5lZ2F0aXZlX2RpcmVj dGlvbi52YWx1ZS5rZXlbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam95c3Rp Y2tfZGV2aWNlc1tpXS5heGlzX21hcHBpbmdbal0ubmVnYXRpdmVfZGlyZWN0aW9uLnZhbHVl LmtleVsxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8qY2FzZSBVSV9GVU5DVElPTjoKKyAg ICAgICAgICAgICAgICAgICAgaG90a2V5X3BhdGggPSBzZGxfdWlfaG90a2V5X3BhdGgoc2Rs am95c3RpY2tbaV0uaW5wdXRbal1ba10udmFsdWUudWlfZnVuY3Rpb24pOworICAgICAgICAg ICAgICAgICAgICBmcHJpbnRmKGZwLCAiICVzIiwgaG90a2V5X3BhdGgpOworICAgICAgICAg ICAgICAgICAgICBsaWJfZnJlZShob3RrZXlfcGF0aCk7CisgICAgICAgICAgICAgICAgICAg IGJyZWFrOyovCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcHJpbnRmKGZwLCAiXG4i KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnByaW50ZihmcCwgIlxuIik7CisgICAg ICAgIH0KKyAgICAgICAgZnByaW50ZihmcCwgIlxuXG4iKTsKKyAgICB9CisKKyAgICBmY2xv c2UoZnApOworCisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgam95X2FyY2hf a2V5d29yZF9jbGVhcih2b2lkKQoreworICAgIGludCBpLCBrOworCisgICAgZm9yIChpID0g MDsgaSA8IG51bV9qb3lzdGlja19kZXZpY2VzOyArK2kpIHsKKyAgICAgICAgZm9yIChrID0g MDsgayA8IGpveXN0aWNrX2RldmljZXNbaV0ubnVtX2F4ZXM7ICsraykgeworICAgICAgICAg ICAgam95c3RpY2tfZGV2aWNlc1tpXS5heGlzX21hcHBpbmdba10ucG9zaXRpdmVfZGlyZWN0 aW9uLmFjdGlvbiA9IE5PTkU7CisgICAgICAgICAgICBqb3lzdGlja19kZXZpY2VzW2ldLmF4 aXNfbWFwcGluZ1trXS5uZWdhdGl2ZV9kaXJlY3Rpb24uYWN0aW9uID0gTk9ORTsKKyAgICAg ICAgfQorICAgICAgICBmb3IgKGsgPSAwOyBrIDwgam95c3RpY2tfZGV2aWNlc1tpXS5udW1f YnV0dG9uczsgKytrKSB7CisgICAgICAgICAgICBqb3lzdGlja19kZXZpY2VzW2ldLmJ1dHRv bl9tYXBwaW5nW2tdLmFjdGlvbiA9IE5PTkU7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChr ID0gMDsgayA8IGpveXN0aWNrX2RldmljZXNbaV0ubnVtX2hhdHM7ICsraykgeworICAgICAg ICAgICAgam95c3RpY2tfZGV2aWNlc1tpXS5oYXRfbWFwcGluZ1trXS51cC5hY3Rpb24gPSBO T05FOworICAgICAgICAgICAgam95c3RpY2tfZGV2aWNlc1tpXS5oYXRfbWFwcGluZ1trXS5k b3duLmFjdGlvbiA9IE5PTkU7CisgICAgICAgICAgICBqb3lzdGlja19kZXZpY2VzW2ldLmhh dF9tYXBwaW5nW2tdLmxlZnQuYWN0aW9uID0gTk9ORTsKKyAgICAgICAgICAgIGpveXN0aWNr X2RldmljZXNbaV0uaGF0X21hcHBpbmdba10ucmlnaHQuYWN0aW9uID0gTk9ORTsKKyAgICAg ICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgam95X2FyY2hfcGFyc2Vfa2V5d29yZChj aGFyICpidWZmZXIpCit7CisgICAgY2hhciAqa2V5OworCisgICAga2V5ID0gc3RydG9rKGJ1 ZmZlciArIDEsICIgXHQ6Iik7CisKKyAgICBpZiAoIXN0cmNtcChrZXksICJDTEVBUiIpKSB7 CisgICAgICAgIGpveV9hcmNoX2tleXdvcmRfY2xlYXIoKTsKKyAgICB9Cit9CisKK3N0YXRp YyB2b2lkIGpveV9hcmNoX3BhcnNlX2VudHJ5KGNoYXIgKmJ1ZmZlcikKK3sKKyAgICBjaGFy ICpwOworICAgIGludCBqb3ludW0sIGlucHV0aW5kZXgsIGRhdGExID0gMCwgZGF0YTIgPSAw OworICAgIGludCBpbnB1dHR5cGU7CisgICAgam95c3RpY2tfYWN0aW9uX3QgYWN0aW9uOwor ICAgIGludCBheGlzX29yX2hhdF9pbmRleCwgZGlyZWN0aW9uOworCisgICAgcCA9IHN0cnRv ayhidWZmZXIsICIgXHQ6Iik7CisKKyAgICBqb3ludW0gPSBhdG9pKHApOworCisgICAgaWYg KGpveW51bSA+PSBudW1fam95c3RpY2tfZGV2aWNlcykgeworICAgICAgICBsb2dfZXJyb3Io am95X2xvZywgIkNvdWxkIG5vdCBmaW5kIGpveXN0aWNrICVpISIsIGpveW51bSk7CisgICAg ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwID0gc3RydG9rKE5VTEwsICIgXHQsIik7Cisg ICAgaWYgKHAgIT0gTlVMTCkgeworICAgICAgICBpbnB1dHR5cGUgPSBhdG9pKHApOworICAg ICAgICBwID0gc3RydG9rKE5VTEwsICIgXHQsIik7CisgICAgICAgIGlmIChwICE9IE5VTEwp IHsKKyAgICAgICAgICAgIGlucHV0aW5kZXggPSBhdG9pKHApOworICAgICAgICAgICAgcCA9 IHN0cnRvayhOVUxMLCAiIFx0Iik7CisgICAgICAgICAgICBpZiAocCAhPSBOVUxMKSB7Cisg ICAgICAgICAgICAgICAgYWN0aW9uID0gKGpveXN0aWNrX2FjdGlvbl90KWF0b2kocCk7CisK KyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgICAgICAgICAgICAgICAg ICBjYXNlIEpPWVNUSUNLOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFBPVF9BWElTOgor ICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWUJPQVJEOgorICAgICAgICAgICAgICAgICAg ICAgICAgcCA9IHN0cnRvayhOVUxMLCAiIFx0Iik7CisgICAgICAgICAgICAgICAgICAgICAg ICBkYXRhMSA9IGF0b2kocCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwID0gc3RydG9r KE5VTEwsICIgXHQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEyID0gYXRvaShw KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAgICAgc3dpdGNoIChpbnB1dHR5cGUpIHsKKyAgICAg ICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYXhpc19v cl9oYXRfaW5kZXggPSBpbnB1dGluZGV4IC8gMjsKKyAgICAgICAgICAgICAgICAgICAgICAg IGRpcmVjdGlvbiA9IGlucHV0aW5kZXggJSAyOworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGF4aXNfb3JfaGF0X2luZGV4IDwgam95c3RpY2tfZGV2aWNlc1tqb3ludW1dLm51bV9h eGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSAw KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpveXN0aWNrX2RldmljZXNb am95bnVtXS5heGlzX21hcHBpbmdbYXhpc19vcl9oYXRfaW5kZXhdLnBvc2l0aXZlX2RpcmVj dGlvbi5hY3Rpb24gPSBhY3Rpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN3aXRjaCAoYWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIEpPWVNUSUNLOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGpveXN0aWNrX2RldmljZXNbam95bnVtXS5heGlzX21hcHBpbmdbYXhpc19vcl9oYXRf aW5kZXhdLnBvc2l0aXZlX2RpcmVjdGlvbi52YWx1ZS5qb3lfcGluID0gZGF0YTE7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBPVF9BWElTOgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpveXN0aWNrX2RldmljZXNbam95bnVtXS5h eGlzX21hcHBpbmdbYXhpc19vcl9oYXRfaW5kZXhdLnBvc2l0aXZlX2RpcmVjdGlvbi52YWx1 ZS5qb3lfcGluID0gZGF0YTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IEtFWUJPQVJEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpv eXN0aWNrX2RldmljZXNbam95bnVtXS5heGlzX21hcHBpbmdbYXhpc19vcl9oYXRfaW5kZXhd LnBvc2l0aXZlX2RpcmVjdGlvbi52YWx1ZS5rZXlbMF0gPSBkYXRhMTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3lzdGlja19kZXZpY2VzW2pveW51bV0u YXhpc19tYXBwaW5nW2F4aXNfb3JfaGF0X2luZGV4XS5wb3NpdGl2ZV9kaXJlY3Rpb24udmFs dWUua2V5WzFdID0gZGF0YTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam95 c3RpY2tfZGV2aWNlc1tqb3ludW1dLmF4aXNfbWFwcGluZ1theGlzX29yX2hhdF9pbmRleF0u bmVnYXRpdmVfZGlyZWN0aW9uLmFjdGlvbiA9IGFjdGlvbjsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgSk9ZU1RJQ0s6CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgam95c3RpY2tfZGV2aWNlc1tqb3ludW1dLmF4aXNfbWFwcGlu Z1theGlzX29yX2hhdF9pbmRleF0ubmVnYXRpdmVfZGlyZWN0aW9uLnZhbHVlLmpveV9waW4g PSBkYXRhMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUE9UX0FYSVM6 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam95c3RpY2tfZGV2 aWNlc1tqb3ludW1dLmF4aXNfbWFwcGluZ1theGlzX29yX2hhdF9pbmRleF0ubmVnYXRpdmVf ZGlyZWN0aW9uLnZhbHVlLmpveV9waW4gPSBkYXRhMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgS0VZQk9BUkQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgam95c3RpY2tfZGV2aWNlc1tqb3ludW1dLmF4aXNfbWFwcGluZ1theGlz X29yX2hhdF9pbmRleF0ubmVnYXRpdmVfZGlyZWN0aW9uLnZhbHVlLmtleVswXSA9IGRhdGEx OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpveXN0aWNrX2Rl dmljZXNbam95bnVtXS5heGlzX21hcHBpbmdbYXhpc19vcl9oYXRfaW5kZXhdLm5lZ2F0aXZl X2RpcmVjdGlvbi52YWx1ZS5rZXlbMV0gPSBkYXRhMjsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ193YXJuaW5nKGpveV9sb2cs ICJpbnB1dGluZGV4ICVpIHRvbyBsYXJnZSBmb3IgaW5wdXR0eXBlICV1LCBqb3ludW0gJWkh IiwgaW5wdXRpbmRleCwgaW5wdXR0eXBlLCBqb3ludW0pOworICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgIH0KK30KKworaW50IGpveV9hcmNoX21hcHBpbmdfbG9hZChjb25zdCBjaGFyICpmaWxl bmFtZSkKK3sKKyAgICBGSUxFICpmcDsKKyAgICBjaGFyICpjb21wbGV0ZV9wYXRoOworICAg IGNoYXIgYnVmZmVyWzEwMDBdOworCisgICAgLyogU2lsZW50bHkgaWdub3JlIGtleW1hcCBs b2FkIG9uIHJlc291cmNlICYgY21kbGluZSBpbml0ICovCisgICAgaWYgKGpveXN0aWNrX2Rl dmljZXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAo ZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAg ZnAgPSBzeXNmaWxlX29wZW4oZmlsZW5hbWUsIE5VTEwsICZjb21wbGV0ZV9wYXRoLCBNT0RF X1JFQURfVEVYVCk7CisKKyAgICBpZiAoZnAgPT0gTlVMTCkgeworICAgICAgICBsb2dfd2Fy bmluZyhqb3lfbG9nLCAiRmFpbGVkIHRvIG9wZW4gYCVzJy4iLCBmaWxlbmFtZSk7CisgICAg ICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBsb2dfbWVzc2FnZShqb3lfbG9nLCAiTG9h ZGluZyBqb3lzdGljayBtYXAgYCVzJy4iLCBjb21wbGV0ZV9wYXRoKTsKKworICAgIGxpYl9m cmVlKGNvbXBsZXRlX3BhdGgpOworCisgICAgZG8geworICAgICAgICBidWZmZXJbMF0gPSAw OworICAgICAgICBpZiAoZmdldHMoYnVmZmVyLCA5OTksIGZwKSkgeworICAgICAgICAgICAg Y2hhciAqcDsKKworICAgICAgICAgICAgaWYgKHN0cmxlbihidWZmZXIpID09IDApIHsKKyAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnVm ZmVyW3N0cmxlbihidWZmZXIpIC0gMV0gPSAwOyAvKiByZW1vdmUgbmV3bGluZSAqLworCisg ICAgICAgICAgICAvKiByZW1vdmUgY29tbWVudHMgKi8KKyAgICAgICAgICAgIGlmICgocCA9 IHN0cmNocihidWZmZXIsICcjJykpKSB7CisgICAgICAgICAgICAgICAgKnAgPSAwOworICAg ICAgICAgICAgfQorCisgICAgICAgICAgICAvKiByZW1vdmUgd2hpdGVzcGFjZSBhdCB0aGUg YmVnaW5uaW5nIG9mIHRoZSBsaW5lICovCisgICAgICAgICAgICBwID0gYnVmZmVyOworICAg ICAgICAgICAgd2hpbGUgKCgoKnAgPT0gJyAnKSB8fCAoKnAgPT0gJ1x0JykpICYmICgqcCAh PSAwKSkgeworICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgc3dpdGNoICgqcCkgeworICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnISc6CisgICAgICAg ICAgICAgICAgICAgIC8qIGtleXdvcmQgaGFuZGxpbmcgKi8KKyAgICAgICAgICAgICAgICAg ICAgam95X2FyY2hfcGFyc2Vfa2V5d29yZChwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgLyog dGFibGUgZW50cnkgaGFuZGxpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgam95X2FyY2hf cGFyc2VfZW50cnkocCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoIWZlb2YoZnApKTsKKyAgICBmY2xvc2Uo ZnApOworCisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2V0X2pveXN0aWNrX2F1 dG9maXJlKGludCB2YWwsIHZvaWQgKnBhcmFtKQogewogICAgIGludCBwb3J0X2lkeCA9IHZp Y2VfcHRyX3RvX2ludChwYXJhbSk7CkBAIC05NTMsNiArMTMxNiwxNSBAQAogICAgIHJldHVy biAwOwogfQogCitzdGF0aWMgaW50IGpveW1hcF9maWxlX3NldChjb25zdCBjaGFyICp2YWws IHZvaWQgKnBhcmFtKQoreworICAgIGlmICh1dGlsX3N0cmluZ19zZXQoJmpveW1hcF9maWxl LCB2YWwpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBqb3lf YXJjaF9tYXBwaW5nX2xvYWQoam95bWFwX2ZpbGUpOworfQorCiBzdGF0aWMgY29uc3QgcmVz b3VyY2VfaW50X3Qgam95b3Bwb3NpdGVfcmVzb3VyY2VzX2ludFtdID0gewogICAgIHsgIkpv eU9wcG9zaXRlIiwgMCwgUkVTX0VWRU5UX05PLCBOVUxMLAogICAgICAgJmpveXN0aWNrX29w cG9zaXRlX2VuYWJsZSwgc2V0X2pveXN0aWNrX29wcG9zaXRlX2VuYWJsZSwgTlVMTCB9LApA QCAtMTA3OSw2ICsxNDUxLDEzIEBACiAgICAgUkVTT1VSQ0VfSU5UX0xJU1RfRU5ECiB9Owog CitzdGF0aWMgcmVzb3VyY2Vfc3RyaW5nX3QgcmVzb3VyY2VzX3N0cmluZ1tdID0geworICAg IHsgIkpveU1hcEZpbGUiLCBOVUxMLCBSRVNfRVZFTlRfTk8sIE5VTEwsCisgICAgICAmam95 bWFwX2ZpbGUsIGpveW1hcF9maWxlX3NldCwgKHZvaWQgKikwIH0sCisgICAgUkVTT1VSQ0Vf U1RSSU5HX0xJU1RfRU5ECit9OworCisKIC8qKiBcYnJpZWYgIEluaXRpYWxpemUgam95c3Rp Y2sgcmVzb3VyY2VzCiAgKgogICogXHJldHVybiAgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWls dXJlCkBAIC0xMTc3LDcgKzE1NTYsMTMgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAg ICAgICAgfQogICAgIH0KKyAgICBqb3ltYXBfZmFjdG9yeSA9IGFyY2hkZXBfZGVmYXVsdF9q b3ltYXBfZmlsZV9uYW1lKCk7CisgICAgcmVzb3VyY2VzX3N0cmluZ1swXS5mYWN0b3J5X3Zh bHVlID0gam95bWFwX2ZhY3Rvcnk7CiAKKyAgICBpZiAocmVzb3VyY2VzX3JlZ2lzdGVyX3N0 cmluZyhyZXNvdXJjZXNfc3RyaW5nKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAg IH0KKwogI2lmZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUwogICAgIHJldHVybiBqb3lfc2Rs X3Jlc291cmNlc19pbml0KCk7CiAjZWxzZQpAQCAtMTYwMCw2ICsxOTg1LDggQEAKICAgICB9 CiAjZW5kaWYKIAorICAgIGpveV9hcmNoX21hcHBpbmdfbG9hZChqb3ltYXBfZmlsZSk7CisK ICAgICByZXR1cm4gMTsKIH0KIApAQCAtMTY1Niw3ICsyMDQzLDYgQEAKIAogLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSAqLwogCi0jaWZuZGVmIEhBVkVfU0RMX05VTUpPWVNUSUNLUwogdm9p ZCByZWdpc3Rlcl9qb3lzdGlja19kcml2ZXIoCiAgICAgc3RydWN0IGpveXN0aWNrX2RyaXZl cl9zICpkcml2ZXIsCiAgICAgY29uc3QgY2hhciAqam5hbWUsCkBAIC0xNzAwLDYgKzIwODYs OSBAQAogICAgIG5ld19qb3lzdGlja19kZXZpY2UtPmhhdF9tYXBwaW5nID0gKGpveXN0aWNr X2hhdF9tYXBwaW5nX3QgKilsaWJfY2FsbG9jKG51bV9oYXRzLCBzaXplb2Yoam95c3RpY2tf aGF0X21hcHBpbmdfdCkpOwogICAgIG5ld19qb3lzdGlja19kZXZpY2UtPmpveXBvcnQgPSAt MTsKICAgICBuZXdfam95c3RpY2tfZGV2aWNlLT5wcml2ID0gcHJpdjsKKyAgICBuZXdfam95 c3RpY2tfZGV2aWNlLT5udW1fYXhlcyA9IG51bV9heGVzOworICAgIG5ld19qb3lzdGlja19k ZXZpY2UtPm51bV9idXR0b25zID0gbnVtX2J1dHRvbnM7CisgICAgbmV3X2pveXN0aWNrX2Rl dmljZS0+bnVtX2hhdHMgPSBudW1faGF0czsKIH0KIAogc3RhdGljIHZvaWQgam95X3BlcmZv cm1fZXZlbnQoam95c3RpY2tfbWFwcGluZ190ICpldmVudCwgaW50IGpveXBvcnQsIGludCB2 YWx1ZSkKQEAgLTE4MDUsNiArMjE5NCw0OSBAQAogICAgIGpveXN0aWNrX2RldmljZXNbam95 bnVtXS5oYXRfbWFwcGluZ1toYXRdLnByZXYgPSB2YWx1ZTsKIH0KIAorI2lmZGVmIEhBVkVf U0RMX05VTUpPWVNUSUNLUworam95c3RpY2tfYXhpc192YWx1ZV90IGpveV9heGlzX3ByZXYo dWludDhfdCBqb3ludW0sIHVpbnQ4X3QgYXhpcykgeworICAgIHJldHVybiBqb3lzdGlja19k ZXZpY2VzW2pveW51bV0uYXhpc19tYXBwaW5nW2F4aXNdLnByZXY7Cit9CisKK2pveXN0aWNr X21hcHBpbmdfdCogam95X2dldF9heGlzX21hcHBpbmcodWludDhfdCBqb3ludW0sIHVpbnQ4 X3QgYXhpcywgam95c3RpY2tfYXhpc192YWx1ZV90IHZhbHVlKSB7CisgICAgam95c3RpY2tf ZGV2aWNlc1tqb3ludW1dLmF4aXNfbWFwcGluZ1theGlzXS5wcmV2ID0gdmFsdWU7CisgICAg aWYgKHZhbHVlID09IEpPWV9BWElTX1BPU0lUSVZFKSB7CisgICAgICAgIHJldHVybiAmam95 c3RpY2tfZGV2aWNlc1tqb3ludW1dLmF4aXNfbWFwcGluZ1theGlzXS5wb3NpdGl2ZV9kaXJl Y3Rpb247CisgICAgfQorICAgIGlmICh2YWx1ZSA9PSBKT1lfQVhJU19ORUdBVElWRSkgewor ICAgICAgICByZXR1cm4gJmpveXN0aWNrX2RldmljZXNbam95bnVtXS5heGlzX21hcHBpbmdb YXhpc10ubmVnYXRpdmVfZGlyZWN0aW9uOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30K Kworam95c3RpY2tfbWFwcGluZ190KiBqb3lfZ2V0X2J1dHRvbl9tYXBwaW5nKHVpbnQ4X3Qg am95bnVtLCB1aW50OF90IGJ1dHRvbikgeworICAgIHJldHVybiAmam95c3RpY2tfZGV2aWNl c1tqb3ludW1dLmJ1dHRvbl9tYXBwaW5nW2J1dHRvbl07Cit9CisKK2pveXN0aWNrX2F4aXNf dmFsdWVfdCBqb3lfaGF0X3ByZXYodWludDhfdCBqb3ludW0sIHVpbnQ4X3QgaGF0KSB7Cisg ICAgcmV0dXJuIGpveXN0aWNrX2RldmljZXNbam95bnVtXS5oYXRfbWFwcGluZ1toYXRdLnBy ZXY7Cit9CisKK2pveXN0aWNrX21hcHBpbmdfdCogam95X2dldF9oYXRfbWFwcGluZyh1aW50 OF90IGpveW51bSwgdWludDhfdCBoYXQsIHVpbnQ4X3QgdmFsdWUpIHsKKyAgICB1aW50OF90 IHByZXYgPSBqb3lzdGlja19kZXZpY2VzW2pveW51bV0uaGF0X21hcHBpbmdbaGF0XS5wcmV2 OworICAgIGpveXN0aWNrX21hcHBpbmdfdCogbWFwcGluZyA9IE5VTEw7CisgICAgaWYgKCh2 YWx1ZSAmIEpPWVNUSUNLX0RJUkVDVElPTl9VUCkgJiYgIShwcmV2ICYgSk9ZU1RJQ0tfRElS RUNUSU9OX1VQKSkgeworICAgICAgICBtYXBwaW5nID0gJmpveXN0aWNrX2RldmljZXNbam95 bnVtXS5oYXRfbWFwcGluZ1toYXRdLnVwOworICAgIH0gZWxzZSBpZiAoKHZhbHVlICYgSk9Z U1RJQ0tfRElSRUNUSU9OX0RPV04pICYmICEocHJldiAmIEpPWVNUSUNLX0RJUkVDVElPTl9E T1dOKSkgeworICAgICAgICBtYXBwaW5nID0gJmpveXN0aWNrX2RldmljZXNbam95bnVtXS5o YXRfbWFwcGluZ1toYXRdLmRvd247CisgICAgfQorICAgIGlmICgodmFsdWUgJiBKT1lTVElD S19ESVJFQ1RJT05fTEVGVCkgJiYgIShwcmV2ICYgSk9ZU1RJQ0tfRElSRUNUSU9OX0xFRlQp KSB7CisgICAgICAgIG1hcHBpbmcgPSAmam95c3RpY2tfZGV2aWNlc1tqb3ludW1dLmhhdF9t YXBwaW5nW2hhdF0ubGVmdDsKKyAgICB9IGVsc2UgaWYgKCh2YWx1ZSAmIEpPWVNUSUNLX0RJ UkVDVElPTl9SSUdIVCkgJiYgIShwcmV2ICYgSk9ZU1RJQ0tfRElSRUNUSU9OX1JJR0hUKSkg eworICAgICAgICBtYXBwaW5nID0gJmpveXN0aWNrX2RldmljZXNbam95bnVtXS5oYXRfbWFw cGluZ1toYXRdLnJpZ2h0OworICAgIH0KKworICAgIGpveXN0aWNrX2RldmljZXNbam95bnVt XS5oYXRfbWFwcGluZ1toYXRdLnByZXYgPSB2YWx1ZTsKKyAgICByZXR1cm4gbWFwcGluZzsK K30KKyNlbmRpZgorCiBzdGF0aWMgaW50IGpveXN0aWNrZGV2aWNlaWR4ID0gMDsKIAogdm9p ZCBqb3lzdGlja191aV9yZXNldF9kZXZpY2VfbGlzdCh2b2lkKQpAQCAtMTg0MSw2ICsyMjcz LDEzIEBACiAgICAgfQogCiAgICAgbGliX2ZyZWUoam95c3RpY2tfZGV2aWNlcyk7CisgICAg aWYgKGpveW1hcF9mYWN0b3J5KSB7CisgICAgICAgIGxpYl9mcmVlKGpveW1hcF9mYWN0b3J5 KTsKKyAgICAgICAgam95bWFwX2ZhY3RvcnkgPSBOVUxMOworICAgIH0KKyAgICBpZiAoam95 bWFwX2ZpbGUpIHsKKyAgICAgICAgbGliX2ZyZWUoam95bWFwX2ZpbGUpOworICAgICAgICBq b3ltYXBfZmlsZSA9IE5VTEw7CisgICAgfQogfQotI2VuZGlmCiAKSW5kZXg6IGRldi92aWNl L3RydW5rL3NyYy9qb3lwb3J0L2pveXN0aWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3Zp Y2UvdHJ1bmsvc3JjL2pveXBvcnQvam95c3RpY2suaAkocmV2aXNpb25lIDQxMzQ4KQorKysg ZGV2L3ZpY2UvdHJ1bmsvc3JjL2pveXBvcnQvam95c3RpY2suaAkoY29waWEgZGkgbGF2b3Jv KQpAQCAtMzAsNiArMzAsOSBAQAogCiAjaW5jbHVkZSAidHlwZXMuaCIKICNpbmNsdWRlICJq b3lwb3J0LmgiIC8qIGZvciBKT1lQT1JUX01BWF9QT1JUUyAqLworI2lmIChkZWZpbmVkIFVT RV9TRExVSSB8fGRlZmluZWQgVVNFX1NETFVJMikKKyNpbmNsdWRlICJ1aW1lbnUuaCIKKyNl bmRpZgogCiBleHRlcm4gaW50IGpveXN0aWNrX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGpv eXN0aWNrX3Jlc291cmNlc19pbml0KHZvaWQpOwpAQCAtMTQyLDYgKzE0NSw0NiBAQAogICAg Sk9ZX0FYSVNfTkVHQVRJVkUKIH0gam95c3RpY2tfYXhpc192YWx1ZV90OwogCisvKiBBY3Rp b25zIHRvIHBlcmZvcm0gb24gam95c3RpY2sgaW5wdXQgKi8KK3R5cGVkZWYgZW51bSBqb3lz dGlja19hY3Rpb25fZSB7CisgICAgTk9ORSA9IDAsCisKKyAgICAvKiBKb3lzdGljayBtb3Zl bWVudCBvciBidXR0b24gcHJlc3MgKi8KKyAgICBKT1lTVElDSyA9IDEsCisKKyAgICAvKiBL ZXlib2FyZCBrZXkgcHJlc3MgKi8KKyAgICBLRVlCT0FSRCA9IDIsCisKKyAgICAvKiBNYXAg YnV0dG9uICovCisgICAgTUFQID0gMywKKworICAgIC8qIChEZSlBY3RpdmF0ZSBVSSAqLwor ICAgIFVJX0FDVElWQVRFID0gNCwKKworICAgIC8qIENhbGwgVUkgZnVuY3Rpb24gKi8KKyAg ICBVSV9GVU5DVElPTiA9IDUsCisKKyAgICAvKiBKb3lzdGljayBheGlzIHVzZWQgZm9yIHBv dGVudGlvbWV0ZXJzICovCisgICAgUE9UX0FYSVMgPSA2Cit9IGpveXN0aWNrX2FjdGlvbl90 OworCisvKiBJbnB1dCBtYXBwaW5nIGZvciBlYWNoIGRpcmVjdGlvbi9idXR0b24vZXRjICov Cit0eXBlZGVmIHN0cnVjdCBqb3lzdGlja19tYXBwaW5nX3MgeworICAgIC8qIEFjdGlvbiB0 byBwZXJmb3JtICovCisgICAgam95c3RpY2tfYWN0aW9uX3QgYWN0aW9uOworCisgICAgdW5p b24geworICAgICAgICB1aW50MTZfdCBqb3lfcGluOworCisgICAgICAgIC8qIGtleVswXSA9 IHJvdywga2V5WzFdID0gY29sdW1uICovCisgICAgICAgIGludCBrZXlbMl07CisjaWYgKGRl ZmluZWQgVVNFX1NETFVJIHx8ZGVmaW5lZCBVU0VfU0RMVUkyKQorICAgICAgICAvKiBwb2lu dGVyIHRvIHRoZSBtZW51IGl0ZW0gKi8KKyAgICAgICAgdWlfbWVudV9lbnRyeV90ICp1aV9m dW5jdGlvbjsKKyNlbmRpZgorICAgIH0gdmFsdWU7Cit9IGpveXN0aWNrX21hcHBpbmdfdDsK KwogZXh0ZXJuIHZvaWQgam95X2F4aXNfZXZlbnQodWludDhfdCBqb3ludW0sIHVpbnQ4X3Qg YXhpcywgam95c3RpY2tfYXhpc192YWx1ZV90IHZhbHVlKTsKIGV4dGVybiB2b2lkIGpveV9i dXR0b25fZXZlbnQodWludDhfdCBqb3ludW0sIHVpbnQ4X3QgYnV0dG9uLCB1aW50OF90IHZh bHVlKTsKIGV4dGVybiB2b2lkIGpveV9oYXRfZXZlbnQodWludDhfdCBqb3ludW0sIHVpbnQ4 X3QgYnV0dG9uLCB1aW50OF90IHZhbHVlKTsKQEAgLTE0OSw2ICsxOTIsMTMgQEAKIGV4dGVy biB2b2lkIGpveXN0aWNrX2Nsb3NlKHZvaWQpOwogZXh0ZXJuIHZvaWQgam95c3RpY2tfdWlf cmVzZXRfZGV2aWNlX2xpc3Qodm9pZCk7CiBleHRlcm4gY29uc3QgY2hhciAqam95c3RpY2tf dWlfZ2V0X25leHRfZGV2aWNlX25hbWUoaW50ICppZCk7CitleHRlcm4gaW50IGpveV9hcmNo X21hcHBpbmdfZHVtcChjb25zdCBjaGFyICpmaWxlbmFtZSk7CitleHRlcm4gaW50IGpveV9h cmNoX21hcHBpbmdfbG9hZChjb25zdCBjaGFyICpmaWxlbmFtZSk7CitleHRlcm4gam95c3Rp Y2tfYXhpc192YWx1ZV90IGpveV9heGlzX3ByZXYodWludDhfdCBqb3ludW0sIHVpbnQ4X3Qg YXhpcyk7CitleHRlcm4gam95c3RpY2tfbWFwcGluZ190KiBqb3lfZ2V0X2F4aXNfbWFwcGlu Zyh1aW50OF90IGpveW51bSwgdWludDhfdCBheGlzLCBqb3lzdGlja19heGlzX3ZhbHVlX3Qg dmFsdWUpOworZXh0ZXJuIGpveXN0aWNrX21hcHBpbmdfdCogam95X2dldF9idXR0b25fbWFw cGluZyh1aW50OF90IGpveW51bSwgdWludDhfdCBidXR0b24pOworZXh0ZXJuIGpveXN0aWNr X2F4aXNfdmFsdWVfdCBqb3lfaGF0X3ByZXYodWludDhfdCBqb3ludW0sIHVpbnQ4X3QgaGF0 KTsKK2V4dGVybiBqb3lzdGlja19tYXBwaW5nX3QqIGpveV9nZXRfaGF0X21hcHBpbmcodWlu dDhfdCBqb3ludW0sIHVpbnQ4X3QgaGF0LCB1aW50OF90IHZhbHVlKTsKIAogI2RlZmluZSBK T1lTVElDS19ESVJFQ1RJT05fRE9XTiAgMQogI2RlZmluZSBKT1lTVElDS19ESVJFQ1RJT05f VVAgICAgMgo= --------------Yqr0mpG3jWAt1LeK400iiCgv Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ gnokii-users mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/gnokii-users --------------Yqr0mpG3jWAt1LeK400iiCgv--