--------------Boundary-00=_C9A3H0OZWQL24VEZVGQO Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Here is an updated non-blocking sending patch. If I don't find any problems soon I plan to commit it to cvs (at long last). On Monday 19 March 2001 13:45, Don Sanders wrote: > Try the non-blocking smtp patch. > > Outstanding issues: > > I'm having trouble preventing lines that start with a dot "." from being > mangled. Fixed. > Cancelling the sending of a mail doesn't take effect immediately. Fixed. > I noticed a problem when queueing mails. Changing the smtp server caused > the smtp server in the preferences to be changed. Fixed. > I haven't tested sendmail since I started making changes. Still got to do that. > The flow of execution is getting too complicated, could make debugging > difficult. Still true unfortunately. I tried to simplify things. > Would be nice to support pop before sending for authentication. I guess that Makefile.am change included in the patch might be a little stale. BFN, Don. --------------Boundary-00=_C9A3H0OZWQL24VEZVGQO Content-Type: text/x-c++; charset="iso-8859-1"; name="non-blocking-sending2.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="non-blocking-sending2.diff" SW5kZXg6IGttc2VuZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbmV0 d29yay9rbWFpbC9rbXNlbmRlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODMKZGlmZiAt dSAtYiAtcjEuODMga21zZW5kZXIuY3BwCi0tLSBrbXNlbmRlci5jcHAJMjAwMC8xMS8wMSAxMToz MTowOQkxLjgzCisrKyBrbXNlbmRlci5jcHAJMjAwMS8wNC8wMSAwMToxMDowNQpAQCAtMSwxMSAr MSw5IEBACiAvLyBrbXNlbmRlci5jcHAKIAogCi0jaWZuZGVmIEtSTgogI2luY2x1ZGUgImttZm9s ZGVybWdyLmgiCiAjaW5jbHVkZSAia21nbG9iYWwuaCIKICNpbmNsdWRlICJrbWZvbGRlci5oIgot I2VuZGlmCiAKICNpbmNsdWRlICJrbXNlbmRlci5oIgogI2luY2x1ZGUgImttbWVzc2FnZS5oIgpA QCAtMTMsNiArMTEsNyBAQAogI2luY2x1ZGUgImttaW9zdGF0dXNkbGcuaCIKICNpbmNsdWRlICJr YnVzeXB0ci5oIgogI2luY2x1ZGUgImttYWNjb3VudC5oIgorI2luY2x1ZGUgInNtdHAuaCIKIAog I2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGtjb25maWcuaD4KQEAgLTIyLDEwICsyMSw2 IEBACiAjaW5jbHVkZSA8cXJlZ2V4cC5oPgogI2luY2x1ZGUgPHFkaWFsb2cuaD4KIAotI2lmZGVm IEtSTgotI2luY2x1ZGUgPGthcHAuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAj aW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTQ1LDMyICs0MCwyNyBA QAogCiAjZGVmaW5lIFNFTkRFUl9HUk9VUCAic2VuZGluZyBtYWlsIgogCi0vKiogdW5jb21tZW50 IHRoZSBmb2xsb3dpbmcgbGluZSBmb3IgU01UUCBkZWJ1ZyBvdXRwdXQgKi8KLS8vI2RlZmluZSBT TVRQX0RFQlVHX09VVFBVVAotCi0jZGVmaW5lIE1TR19CTE9DS19TSVpFIDEwMjQKLQogLy8tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogS01TZW5kZXI6OktNU2VuZGVyKCkKIHsKKyAga2REZWJ1ZygpIDw8 ICJLTVNlbmRlcjo6S01TZW5kZXIoKSIgPDwgZW5kbDsKICAgbVNlbmREbGcgPSBOVUxMOwogICBt U2VuZFByb2MgPSBOVUxMOwogICBtTXNnU2VuZFByb2MgPSBOVUxMOwogICBtU2VuZFByb2NTdGFy dGVkID0gRkFMU0U7CiAgIG1TZW5kSW5Qcm9ncmVzcyA9IEZBTFNFOwogICBtQ3VycmVudE1zZyA9 IE5VTEw7CisgIGxhYmVsRGlhbG9nID0gMDsKICAgcmVhZENvbmZpZygpOwogICBxdWl0T25Eb25l ID0gZmFsc2U7Ci0gIGxhYmVsRGlhbG9nID0gbmV3IFFEaWFsb2coMCk7Ci0gIGxhYmVsID0gbmV3 IFFMYWJlbChsYWJlbERpYWxvZyk7Ci0gIGxhYmVsRGlhbG9nLT5zZXRDYXB0aW9uKCJLTWFpbCIp OwotICBsYWJlbERpYWxvZy0+c2V0SWNvbihrYXBwLT5taW5pSWNvbigpKTsKKyAgbVNlbmRBYm9y dGVkID0gZmFsc2U7CiB9CiAKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogS01TZW5kZXI6On5L TVNlbmRlcigpCiB7CisgIGtkRGVidWcoKSA8PCAiS01TZW5kZXI6On5LTVNlbmRlcigpIiA8PCBl bmRsOwogICB3cml0ZUNvbmZpZyhGQUxTRSk7CiAgIGlmIChtU2VuZFByb2MpIGRlbGV0ZSBtU2Vu ZFByb2M7CiAgIGlmIChsYWJlbERpYWxvZykgZGVsZXRlIGxhYmVsRGlhbG9nOwpAQCAtODAsNiAr NzAsNyBAQAogdm9pZAogS01TZW5kZXI6OnNldFN0YXR1c01zZyhjb25zdCBRU3RyaW5nICZtc2cp CiB7CisgICBpZiAobGFiZWxEaWFsb2cpCiAgICBsYWJlbC0+c2V0VGV4dCggbXNnICk7CiAgICBl bWl0IHN0YXR1c01zZyggbXNnKTsKIH0KQEAgLTg3LDYgKzc4LDggQEAKIC8vLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIHZvaWQgS01TZW5kZXI6OnJlYWRDb25maWcodm9pZCkKIHsKKyAga2REZWJ1Zygp IDw8ICJLTVNlbmRlcjo6cmVhZENvbmZpZyIgPDwgZW5kbDsKKwogICBRU3RyaW5nIHN0cjsKICAg S0NvbmZpZyogY29uZmlnID0ga2FwcC0+Y29uZmlnKCk7CiAKQEAgLTEwOSw2ICsxMDIsOCBAQAog Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdm9pZCBLTVNlbmRlcjo6d3JpdGVDb25maWcoYm9vbCBh V2l0aFN5bmMpCiB7CisgIGtkRGVidWcoKSA8PCAiS01TZW5kZXI6OndyaXRlQ29uZmlnIiA8PCBl bmRsOworCiAgIEtDb25maWcqIGNvbmZpZyA9IGthcHAtPmNvbmZpZygpOwogICBjb25maWctPnNl dEdyb3VwKFNFTkRFUl9HUk9VUCk7CiAKQEAgLTE1MCw3ICsxNDUsNiBAQAogLy8tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogYm9vbCBLTVNlbmRlcjo6c2VuZChLTU1lc3NhZ2UqIGFNc2csIHNob3J0IHNl bmROb3cpCiB7Ci0jaWZuZGVmIEtSTgogICBpbnQgcmM7CiAKICAgLy9hc3NlcnQoYU1zZyAhPSBO VUxMKTsKQEAgLTIwNiw5ICsyMDAsNiBAQAogICBrZXJuZWwtPm91dGJveEZvbGRlcigpLT5jbG9z ZSgpOwogCiAgIHJldHVybiByYzsKLSNlbHNlCi0gIHJldHVybiB0cnVlOwotI2VuZGlmCiB9CiAK IApAQCAtMjIzLDcgKzIxNCw2IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBib29sIEtNU2Vu ZGVyOjpzZW5kUXVldWVkKHZvaWQpCiB7Ci0jaWZuZGVmIEtSTgogICBpZiAoIXNldHRpbmdzT2so KSkgcmV0dXJuIEZBTFNFOwogCiAgIGlmIChtU2VuZEluUHJvZ3Jlc3MpCkBAIC0yNDIsMjUgKzIz MiwyMiBAQAogCiAgIC8vIGNyZWF0ZSBhIHNlbmRlcgogICBpZiAobVNlbmRQcm9jKSBkZWxldGUg bVNlbmRQcm9jOwotICBpZiAobU1ldGhvZCA9PSBzbU1haWwpIG1TZW5kUHJvYyA9IG5ldyBLTVNl bmRTZW5kbWFpbCh0aGlzKTsKLSAgZWxzZSBpZiAobU1ldGhvZCA9PSBzbVNNVFApIG1TZW5kUHJv YyA9IG5ldyBLTVNlbmRTTVRQKHRoaXMpOworICBpZiAobU1ldGhvZCA9PSBzbU1haWwpIG1TZW5k UHJvYyA9IG5ldyBLTVNlbmRTZW5kbWFpbCh0aGlzLG1NYWlsZXIpOworICBlbHNlIGlmIChtTWV0 aG9kID09IHNtU01UUCkgbVNlbmRQcm9jID0gbmV3IEtNU2VuZFNNVFAodGhpcyxtU210cEhvc3Qs bVNtdHBQb3J0KTsKICAgZWxzZSBtU2VuZFByb2MgPSBOVUxMOwogICBhc3NlcnQobVNlbmRQcm9j ICE9IE5VTEwpOwogICBjb25uZWN0KG1TZW5kUHJvYyxTSUdOQUwoaWRsZSgpKSxTTE9UKHNsb3RJ ZGxlKCkpKTsKKyAgY29ubmVjdChtU2VuZFByb2MsU0lHTkFMKHN0YXJ0ZWQoYm9vbCkpLHRoaXMs U0xPVChzZW5kUHJvY1N0YXJ0ZWQoYm9vbCkpKTsKIAogICAvLyBzdGFydCBzZW5kaW5nIHRoZSBt ZXNzYWdlcwogICBkb1NlbmRNc2coKTsKICAgcmV0dXJuIFRSVUU7Ci0jZWxzZQotICByZXR1cm4g VFJVRTsKLSNlbmRpZgogfQogCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHZvaWQgS01TZW5k ZXI6OmRvU2VuZE1zZygpCiB7Ci0jaWZuZGVmIEtSTgogICBhc3NlcnQobVNlbmRQcm9jICE9IE5V TEwpOwogICBib29sIHNvbWVTZW50ID0gbUN1cnJlbnRNc2c7CiAKQEAgLTI3NiwxMCArMjYzLDgg QEAKICAgLy8gV291bGQgYmUgbW9yZSBlZmZpY2llbnQgdG8gb25seSBkbyB0aGlzIHdoZW4gdGhl IG1haWwgdHJhbnNwb3J0CiAgIC8vIChzZXJ2ZXIgb3IgcG9ydCkgaGFzIGNoYW5nZWQKICAgaWYg KG1Nc2dTZW5kUHJvYykgewotICAgIG1Nc2dTZW5kUHJvYy0+ZmluaXNoKCk7Ci0gICAgZGVsZXRl IG1Nc2dTZW5kUHJvYzsKKyAgICBtTXNnU2VuZFByb2MtPmZpbmlzaCh0cnVlKTsKICAgICBtTXNn U2VuZFByb2MgPSAwOwotICAgIHJlc3RvcmVUcmFuc3BvcnRTZXR0aW5ncygpOwogICAgIG1TZW5k UHJvY1N0YXJ0ZWQgPSBGQUxTRTsKICAgfQogCkBAIC0yOTksMTAgKzI4NCwxNiBAQAogICB7CiAg ICAga2VybmVsLT5zZXJ2ZXJSZWFkeSAoZmFsc2UpOyAvL3N2ZW4gLSBzdG9wIElQQwogCi0gICAg bGFiZWwtPnNldFRleHQoaTE4bigiSW5pdGlhdGluZyBzZW5kZXIgcHJvY2Vzcy4uLiIpKTsKKyAg ICBpZiAoIWxhYmVsRGlhbG9nKSB7CisgICAgICBsYWJlbERpYWxvZyA9IG5ldyBRRGlhbG9nKDAs ICJzZW5kaW5nbGFiZWwiLCBmYWxzZSwgV0Rlc3RydWN0aXZlQ2xvc2UgKTsKKyAgICAgIGxhYmVs ID0gbmV3IFFMYWJlbChsYWJlbERpYWxvZyk7CisgICAgICBsYWJlbERpYWxvZy0+c2V0Q2FwdGlv bigiS01haWwiKTsKKyAgICAgIGxhYmVsRGlhbG9nLT5zZXRJY29uKGthcHAtPm1pbmlJY29uKCkp OworICAgICAgY29ubmVjdChsYWJlbERpYWxvZyxTSUdOQUwoZGVzdHJveWVkKCkpLHRoaXMsU0xP VChzbG90QWJvcnRTZW5kKCkpKTsKICAgICBsYWJlbC0+cmVzaXplKDQwMCwgbGFiZWwtPnNpemVI aW50KCkuaGVpZ2h0KCkpOworICAgICAgbGFiZWwtPnNldFRleHQoaTE4bigiSW5pdGlhdGluZyBz ZW5kZXIgcHJvY2Vzcy4uLiIpKTsKICAgICBsYWJlbERpYWxvZy0+c2hvdygpOwotICAgIGthcHAt PnByb2Nlc3NFdmVudHMoNTApOyAvLyBOb3Qgc3VyZSB0aGlzIGlzIHNhZmUgLXNhbmRlcnMKKyAg ICB9CiAKICAgICAvLyBSdW4gdGhlIHByZWNvbW1hbmQgaWYgdGhlcmUgaXMgb25lCiAgICAgc2V0 U3RhdHVzTXNnKGkxOG4oUVN0cmluZygiRXhlY3V0aW5nIHByZWNvbW1hbmQgIikgKyBtUHJlY29t bWFuZCkpOwpAQCAtMzE5LDM2ICszMTAsNTMgQEAKICAgUVN0cmluZyBtc2dUcmFuc3BvcnQgPSBt Q3VycmVudE1zZy0+aGVhZGVyRmllbGQoIlgtS01haWwtVHJhbnNwb3J0Iik7CiAgIGlmICghbXNn VHJhbnNwb3J0LmlzRW1wdHkoKSAgJiYgKG1zZ1RyYW5zcG9ydCAhPSBtTWV0aG9kU3RyKSkgewog ICAgIGlmIChtU2VuZFByb2NTdGFydGVkICYmIG1TZW5kUHJvYykgewotICAgICAgbVNlbmRQcm9j LT5maW5pc2goKTsKKyAgICAgIG1TZW5kUHJvYy0+ZmluaXNoKGZhbHNlKTsKICAgICAgIG1TZW5k UHJvY1N0YXJ0ZWQgPSBGQUxTRTsKICAgICB9CiAKLSAgICBzYXZlVHJhbnNwb3J0U2V0dGluZ3Mo KTsKLQotICAgIG1Nc2dTZW5kUHJvYyA9IHBhcnNlVHJhbnNwb3J0RnJvbVN0cmluZyhtQ3VycmVu dE1zZy0+aGVhZGVyRmllbGQoIlgtS01haWwtVHJhbnNwb3J0IikpOwotICAgIG1NZXRob2RTdHIg PSB0cmFuc3BvcnRTdHJpbmcoKTsKKyAgICBtTXNnU2VuZFByb2MgPSBjcmVhdGVTZW5kUHJvY0Zy b21TdHJpbmcobUN1cnJlbnRNc2ctPmhlYWRlckZpZWxkKCJYLUtNYWlsLVRyYW5zcG9ydCIpKTsK KyAgICBtTWV0aG9kU3RyID0gbXNnVHJhbnNwb3J0OwogCi0gICAgaWYgKCFtTXNnU2VuZFByb2Mg fHwgIW1Nc2dTZW5kUHJvYy0+c3RhcnQoKSkgewotICAgICAgaWYgKG1Nc2dTZW5kUHJvYykgewot CW1Nc2dTZW5kUHJvYy0+ZmluaXNoKCk7Ci0JZGVsZXRlIG1Nc2dTZW5kUHJvYzsKKyAgICBpZiAo IW1Nc2dTZW5kUHJvYykKKyAgICAgIG1zZ1NlbmRQcm9jU3RhcnRlZChmYWxzZSk7CisgICAgZWxz ZSB7CisJY29ubmVjdChtTXNnU2VuZFByb2MsU0lHTkFMKGlkbGUoKSksU0xPVChzbG90SWRsZSgp KSk7CisJY29ubmVjdChtTXNnU2VuZFByb2MsU0lHTkFMKHN0YXJ0ZWQoYm9vbCkpLHRoaXMsU0xP VChtc2dTZW5kUHJvY1N0YXJ0ZWQoYm9vbCkpKTsKKwltTXNnU2VuZFByb2MtPnN0YXJ0KCk7CiAg ICAgICB9CisgIH0KKyAgZWxzZSBpZiAoIW1TZW5kUHJvY1N0YXJ0ZWQpCisgICAgbVNlbmRQcm9j LT5zdGFydCgpOwogICAgICAgZWxzZQorICAgIGRvU2VuZE1zZ0F1eCgpOworfQorCit2b2lkIEtN U2VuZGVyOjptc2dTZW5kUHJvY1N0YXJ0ZWQoYm9vbCBzdWNjZXNzKQoreworICBpZiAoIXN1Y2Nl c3MpIHsKKyAgICBpZiAobU1zZ1NlbmRQcm9jKQorICAgICAgIG1Nc2dTZW5kUHJvYy0+ZmluaXNo KHRydWUpOworICAgIGVsc2UKIAlzZXRTdGF0dXNNc2coaTE4bigiVW5yZWNvZ25pc2VkIHRyYW5z cG9ydCBwcm90b2NvbCwgY291bGQgbm90IHNlbmQgbWVzc2FnZS4iKSk7CiAgICAgICBtTXNnU2Vu ZFByb2MgPSAwOwogICAgICAgbVNlbmRQcm9jU3RhcnRlZCA9IGZhbHNlOwotICAgICAgcmVzdG9y ZVRyYW5zcG9ydFNldHRpbmdzKCk7CiAgICAgICBjbGVhbnVwKCk7CiAgICAgICByZXR1cm47Ci0g ICAgfQotICAgIGNvbm5lY3QobU1zZ1NlbmRQcm9jLFNJR05BTChpZGxlKCkpLFNMT1Qoc2xvdElk bGUoKSkpOwogICB9Ci0gIGVsc2UgaWYgKCFtU2VuZFByb2NTdGFydGVkKQotICAgIGlmICghbVNl bmRQcm9jLT5zdGFydCgpKQotICAgIHsKKyAgZG9TZW5kTXNnQXV4KCk7Cit9CisKK3ZvaWQgS01T ZW5kZXI6OnNlbmRQcm9jU3RhcnRlZChib29sIHN1Y2Nlc3MpCit7CisgIGlmICghc3VjY2Vzcykg ewogICAgICAgY2xlYW51cCgpOwogICAgICAgcmV0dXJuOwogICAgIH0KKyAgZG9TZW5kTXNnQXV4 KCk7Cit9CisKK3ZvaWQgS01TZW5kZXI6OmRvU2VuZE1zZ0F1eCgpCit7CiAgIG1TZW5kUHJvY1N0 YXJ0ZWQgPSBUUlVFOwogICBtU2VuZEluUHJvZ3Jlc3MgPSBUUlVFOwogCkBAIC0zODEsMTcgKzM4 OSwxNSBAQAogICB9CiAgIC8vIERvICpub3QqIGFkZCBjb2RlIGhlcmUsIGFmdGVyIHNlbmQoKS4g SXQgY2FuIGhhcHBlbiB0aGF0IHRoaXMgbWV0aG9kCiAgIC8vIGlzIGNhbGxlZCByZWN1cnNpdmVs eSBpZiBzZW5kKCkgZW1pdHMgdGhlIGlkbGUgc2lnbmFsIGRpcmVjdGx5LgotI2VuZGlmCiB9CiAK IAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdm9pZCBLTVNlbmRlcjo6Y2xlYW51cCh2b2lkKQog ewotI2lmbmRlZiBLUk4KICAgYXNzZXJ0KG1TZW5kUHJvYyE9TlVMTCk7CiAKLSAgaWYgKG1TZW5k UHJvY1N0YXJ0ZWQpIG1TZW5kUHJvYy0+ZmluaXNoKCk7CisgIGlmIChtU2VuZFByb2NTdGFydGVk KSBtU2VuZFByb2MtPmZpbmlzaChmYWxzZSk7CiAgIG1TZW5kUHJvY1N0YXJ0ZWQgPSBGQUxTRTsK ICAgbVNlbmRJblByb2dyZXNzID0gRkFMU0U7CiAgIGtlcm5lbC0+c2VudEZvbGRlcigpLT5jbG9z ZSgpOwpAQCAtNDAyLDEzICs0MDgsMTcgQEAKICAgZWxzZSBrZXJuZWwtPm91dGJveEZvbGRlcigp LT5jb21wYWN0KCk7CiAKICAga2VybmVsLT5zZXJ2ZXJSZWFkeSAodHJ1ZSk7IC8vIHN2ZW4gLSBl bmFibGUgaXBjCi0gIGxhYmVsRGlhbG9nLT5oaWRlKCk7CisgIG1TZW5kQWJvcnRlZCA9IGZhbHNl OworICBpZiAobGFiZWxEaWFsb2cpIHsKKyAgICAgIGRpc2Nvbm5lY3QobGFiZWxEaWFsb2csU0lH TkFMKGRlc3Ryb3llZCgpKSx0aGlzLFNMT1Qoc2xvdEFib3J0U2VuZCgpKSk7CisgICAgICBkZWxl dGUgbGFiZWxEaWFsb2c7CisgICAgICBsYWJlbERpYWxvZyA9IDA7CisgICAgICAvLyAgICAgIGxh YmVsRGlhbG9nLT5oaWRlKCk7CisgIH0KICAgaWYgKHF1aXRPbkRvbmUpCiAgIHsKLSAgICBrZERl YnVnKCkgPDwgIkRvbmUgc2VuZGluZyBtZXNzYWdlcy4iIDw8IGVuZGw7CiAgICAga2FwcC0+cXVp dCgpOwogICB9Ci0jZW5kaWYKIH0KIAogCkBAIC00MTksMTAgKzQyOSwyMiBAQAogfQogCiAvLy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIEtNU2VuZGVyOjpzbG90QWJvcnRTZW5kKCkKK3sKKyAg ICBsYWJlbERpYWxvZyA9IDA7CisgICAgbVNlbmRBYm9ydGVkID0gdHJ1ZTsKKyAgICBpZiAobU1z Z1NlbmRQcm9jKQorCW1Nc2dTZW5kUHJvYy0+YWJvcnQoKTsKKyAgICBlbHNlCisJbVNlbmRQcm9j LT5hYm9ydCgpOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB2b2lkIEtNU2VuZGVyOjpz bG90SWRsZSgpCiB7CiAgIGFzc2VydChtU2VuZFByb2MgIT0gTlVMTCk7Ci0gIC8vYXNzZXJ0KCFt U2VuZFByb2MtPnNlbmRpbmcoKSk7CisKKyAgaWYgKCFtU2VuZEFib3J0ZWQpIHsKICAgaWYgKG1N c2dTZW5kUHJvYykgewogICAgIGlmIChtTXNnU2VuZFByb2MtPnNlbmRPaygpKSB7CiAgICAgICBk b1NlbmRNc2coKTsKQEAgLTQzMywyNSArNDU1LDMwIEBACiAgICAgZG9TZW5kTXNnKCk7CiAgICAg cmV0dXJuOwogICB9CisgIH0KIAogCiAgIC8vIHNlbmRpbmcgb2YgbWVzc2FnZSBmYWlsZWQKICAg UVN0cmluZyBtc2c7CisgIFFTdHJpbmcgZXJyU3RyaW5nOworICBpZiAobU1zZ1NlbmRQcm9jKQor ICAgICAgZXJyU3RyaW5nID0gbU1zZ1NlbmRQcm9jLT5tZXNzYWdlKCk7CisgIGVsc2UKKyAgICAg IGVyclN0cmluZyA9IG1TZW5kUHJvYy0+bWVzc2FnZSgpOworICAKICAgbXNnID0gaTE4bigiU2Vu ZGluZyBmYWlsZWQ6XG4lMVxuIgogICAgICAgICAiVGhlIG1lc3NhZ2Ugd2lsbCBzdGF5IGluIHRo ZSAnb3V0Ym94JyBmb2xkZXIgYW5kIHdpbGwgYmUgcmVzZW50LlxuIgogICAgICAgICAiUGxlYXNl IHJlbW92ZSBpdCBmcm9tIHRoZXJlIGlmIHlvdSBkbyBub3Qgd2FudCB0aGUgbWVzc2FnZSB0b1xu IgogCQkiYmUgcmVzZW50LlxuXG4iCiAJIlRoZSBmb2xsb3dpbmcgdHJhbnNwb3J0IHByb3RvY29s IHdhcyB1c2VkOlxuICAlMiIpCi0gICAgLmFyZyhtU2VuZFByb2MtPm1lc3NhZ2UoKSkKKyAgICAu YXJnKGVyclN0cmluZykKICAgICAuYXJnKG1NZXRob2RTdHIpOwogICBLTWVzc2FnZUJveDo6aW5m b3JtYXRpb24oMCxtc2cpOwogCiAgIGlmIChtTXNnU2VuZFByb2MpIHsKLSAgICBtTXNnU2VuZFBy b2MtPmZpbmlzaCgpOwotICAgIGRlbGV0ZSBtTXNnU2VuZFByb2M7CisgICAgbU1zZ1NlbmRQcm9j LT5maW5pc2godHJ1ZSk7CiAgICAgbU1zZ1NlbmRQcm9jID0gMDsKICAgICBtU2VuZFByb2NTdGFy dGVkID0gZmFsc2U7Ci0gICAgcmVzdG9yZVRyYW5zcG9ydFNldHRpbmdzKCk7CiAgIH0KICAgY2xl YW51cCgpOwogfQpAQCAtNDk5LDMwICs1MjYsOSBAQAogCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLXZvaWQgS01TZW5kZXI6OnNhdmVUcmFuc3BvcnRTZXR0aW5ncyh2b2lkKQorS01TZW5kUHJv YyogS01TZW5kZXI6OmNyZWF0ZVNlbmRQcm9jRnJvbVN0cmluZyhRU3RyaW5nIHRyYW5zcG9ydCkK IHsKLSAgbU9sZE1ldGhvZCA9IG1NZXRob2Q7Ci0gIG1PbGRNYWlsZXIgPSBtTWFpbGVyOwotICBt T2xkU210cEhvc3QgPSBtU210cEhvc3Q7Ci0gIG1PbGRTbXRwUG9ydCA9IG1TbXRwUG9ydDsKLX0K LQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12b2lkIEtNU2VuZGVyOjpyZXN0b3JlVHJhbnNw b3J0U2V0dGluZ3Modm9pZCkKLXsKLSAgbU1ldGhvZCA9IG1PbGRNZXRob2Q7Ci0gIG1NYWlsZXIg PSBtT2xkTWFpbGVyOwotICBtU210cEhvc3QgPSBtT2xkU210cEhvc3Q7Ci0gIG1TbXRwUG9ydCA9 IG1PbGRTbXRwUG9ydDsKLX0KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1LTVNlbmRQcm9j KiBLTVNlbmRlcjo6cGFyc2VUcmFuc3BvcnRGcm9tU3RyaW5nKFFTdHJpbmcgdHJhbnNwb3J0KQot ewogICBpZiAodHJhbnNwb3J0LmxlZnQoNykgPT0gInNtdHA6Ly8iKSB7IC8vIHRvIGkxOG4gb3Ig bm90IHRvIGkxOG4/Ci0gICAgbU1ldGhvZCA9IHNtU01UUDsKICAgICBRU3RyaW5nIHNlcnZlcnBv cnQgPSB0cmFuc3BvcnQubWlkKDcpOwogICAgIFFTdHJpbmcgc2VydmVyID0gc2VydmVycG9ydDsK ICAgICBRU3RyaW5nIHBvcnQgPSAiMjUiOwpAQCAtNTMxLDE2ICs1MzcsMTQgQEAKICAgICAgIHNl cnZlciA9IHNlcnZlcnBvcnQubGVmdChjb2xvbik7CiAgICAgICBwb3J0ID0gc2VydmVycG9ydC5t aWQoY29sb24gKyAxKTsKICAgICB9Ci0gICAgbVNtdHBIb3N0ID0gc2VydmVyOwotICAgIG1TbXRw UG9ydCA9IHBvcnQudG9JbnQoKTsKLSAgICByZXR1cm4gbmV3IEtNU2VuZFNNVFAodGhpcyk7Cisg ICAgcmV0dXJuIG5ldyBLTVNlbmRTTVRQKHRoaXMsc2VydmVyLHBvcnQudG9JbnQoKSk7CiAgIH0K ICAgZWxzZSBpZiAodHJhbnNwb3J0LmxlZnQoNykgPT0gImZpbGU6Ly8iKSB7Ci0gICAgbU1ldGhv ZCA9IHNtTWFpbDsKLSAgICBtTWFpbGVyID0gdHJhbnNwb3J0Lm1pZCg3KTsKLSAgICByZXR1cm4g bmV3IEtNU2VuZFNlbmRtYWlsKHRoaXMpOworICAgIHJldHVybiBuZXcgS01TZW5kU2VuZG1haWwo dGhpcyx0cmFuc3BvcnQubWlkKDcpKTsKICAgfQotICBlbHNlIHJldHVybiAwOworICBlbHNlIHsK KyAgICByZXR1cm4gMDsKKyAgfQogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NjMs NiArNTY3LDcgQEAKICAgaW5pdE1ldGFPYmplY3QoKTsKICAgbVNlbmRlciA9IGFTZW5kZXI7CiAg IHByZVNlbmRJbml0KCk7CisgIG1Nc2cgPSBpMThuKCJvcGVyYXRpb24gYWJvcnRlZCBieSB1c2Vy LiIpOwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01ODIsMTQgKzU4NywxNiBAQAog fQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1ib29sIEtNU2VuZFByb2M6OnN0YXJ0KHZvaWQp Cit2b2lkIEtNU2VuZFByb2M6OnN0YXJ0KHZvaWQpCiB7Ci0gIHJldHVybiBUUlVFOworICBlbWl0 IHN0YXJ0ZWQodHJ1ZSk7CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWJvb2wgS01TZW5k UHJvYzo6ZmluaXNoKHZvaWQpCitib29sIEtNU2VuZFByb2M6OmZpbmlzaChib29sIGRlc3RydWN0 aXZlKQogeworICAgIGlmIChkZXN0cnVjdGl2ZSkKKwlkZWxldGUgdGhpczsKICAgcmV0dXJuIFRS VUU7CiB9CiAKQEAgLTYxMCwxMSArNjE3LDExIEBACiAgICAgewogICAgICAgaWYgKHRvQ1JMRikg c3RyICs9ICdccic7CiAgICAgICBzdHIgKz0gYzsKLSAgICAgIGlmIChub1NpbmdsZURvdCAmJiBh U3RyW3BvcysxXT09Jy4nICYmIGFTdHJbcG9zKzJdPT0nXG4nKQorCisgICAgICBpZiAobm9TaW5n bGVEb3QgJiYgYVN0cltwb3MrMV09PScuJykKICAgICAgIHsKIAlwb3MrKzsKLQlzdHIgKz0gJy4n OwotICAgICAgICBzdHIgKz0gJyAnOworCXN0ciArPSAiLi4iOwogICAgICAgfQogICAgIH0KICAg ICBlbHNlIHN0ciArPSBjOwpAQCAtNjI3LDcgKzYzNCw2IEBACiB2b2lkIEtNU2VuZFByb2M6OnN0 YXR1c01zZyhjb25zdCBRU3RyaW5nJiBhTXNnKQogewogICBpZiAobVNlbmRlcikgbVNlbmRlci0+ c2V0U3RhdHVzTXNnKGFNc2cpOwotICBrYXBwLT5wcm9jZXNzRXZlbnRzKDUwKTsgLy8gTm90IHN1 cmUgdGhpcyBpcyBzYWZlIC1zYW5kZXJzCiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg LTY2Nyw4ICs2NzMsOCBAQAogCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLz09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci1LTVNlbmRTZW5kbWFpbDo6S01TZW5kU2VuZG1haWwoS01TZW5kZXIqIGFTZW5k ZXIpOgotICBLTVNlbmRTZW5kbWFpbEluaGVyaXRlZChhU2VuZGVyKQorS01TZW5kU2VuZG1haWw6 OktNU2VuZFNlbmRtYWlsKEtNU2VuZGVyKiBhU2VuZGVyLCBRU3RyaW5nIG1haWxlcik6CisgIEtN U2VuZFNlbmRtYWlsSW5oZXJpdGVkKGFTZW5kZXIpLCBtTWFpbGVyKG1haWxlcikKIHsKICAgaW5p dE1ldGFPYmplY3QoKTsKICAgbU1haWxlclByb2MgPSBOVUxMOwpAQCAtNjgxLDkgKzY4Nyw5IEBA CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWJvb2wgS01TZW5kU2VuZG1haWw6OnN0YXJ0 KHZvaWQpCit2b2lkIEtNU2VuZFNlbmRtYWlsOjpzdGFydCh2b2lkKQogewotICBpZiAobVNlbmRl ci0+bWFpbGVyKCkuaXNFbXB0eSgpKQorICBpZiAobU1haWxlci5pc0VtcHR5KCkpCiAgIHsKICAg ICBRU3RyaW5nIHN0ciA9IGkxOG4oIlBsZWFzZSBzcGVjaWZ5IGEgbWFpbGVyIHByb2dyYW1cbiIK IAkJCQkgICAgImluIHRoZSBzZXR0aW5ncy4iKTsKQEAgLTY5Niw3ICs3MDIsNyBAQAogICAgIC5h cmcoc3RyICsgIlxuIikKICAgICAuYXJnKCJzZW5kbWFpbDovLyIpOwogICAgIEtNZXNzYWdlQm94 OjppbmZvcm1hdGlvbigwLG1zZyk7Ci0gICAgcmV0dXJuIEZBTFNFOworICAgIGVtaXQgc3RhcnRl ZChmYWxzZSk7CiAgIH0KIAogICBpZiAoIW1NYWlsZXJQcm9jKQpAQCAtNzEwLDI0ICs3MTYsMzcg QEAKICAgICBjb25uZWN0KG1NYWlsZXJQcm9jLFNJR05BTChyZWNlaXZlZFN0ZGVycihLUHJvY2Vz cyosY2hhciosaW50KSksCiAJICAgIHRoaXMsIFNMT1QocmVjZWl2ZWRTdGRlcnIoS1Byb2Nlc3Mq LCBjaGFyKiwgaW50KSkpOwogICB9Ci0gIHJldHVybiBUUlVFOworICBlbWl0IHN0YXJ0ZWQodHJ1 ZSk7CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWJvb2wgS01TZW5kU2VuZG1haWw6OmZp bmlzaCh2b2lkKQorYm9vbCBLTVNlbmRTZW5kbWFpbDo6ZmluaXNoKGJvb2wgZGVzdHJ1Y3RpdmUp CiB7CiAgIGlmIChtTWFpbGVyUHJvYykgZGVsZXRlIG1NYWlsZXJQcm9jOwogICBtTWFpbGVyUHJv YyA9IE5VTEw7CisgIGlmIChkZXN0cnVjdGl2ZSkKKyAgICAgIGRlbGV0ZSB0aGlzOwogICByZXR1 cm4gVFJVRTsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBLTVNlbmRTZW5kbWFp bDo6YWJvcnQoKQoreworICBpZiAobU1haWxlclByb2MpIGRlbGV0ZSBtTWFpbGVyUHJvYzsKKyAg bU1haWxlclByb2MgPSBOVUxMOworICBtU2VuZE9rID0gZmFsc2U7CisgIG1Nc2dTdHIgPSAwOwor ICBpZGxlKCk7Cit9CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogYm9vbCBLTVNlbmRTZW5k bWFpbDo6c2VuZChLTU1lc3NhZ2UqIGFNc2cpCiB7CiAgIFFTdHJpbmcgYmNjU3RyOwogCiAgIG1N YWlsZXJQcm9jLT5jbGVhckFyZ3VtZW50cygpOwotICAqbU1haWxlclByb2MgPDwgbVNlbmRlci0+ bWFpbGVyKCk7CisgICptTWFpbGVyUHJvYyA8PCBtTWFpbGVyOwogICBhZGRSZWNpcGllbnRzKGFN c2ctPmhlYWRlckFkZHJGaWVsZCgiVG8iKSk7CiAgIGlmICghYU1zZy0+Y2MoKS5pc0VtcHR5KCkp IGFkZFJlY2lwaWVudHMoYU1zZy0+aGVhZGVyQWRkckZpZWxkKCJDYyIpKTsKIApAQCAtNzQ0LDcg Kzc2Myw3IEBACiAgIGlmICghbU1haWxlclByb2MtPnN0YXJ0KEtQcm9jZXNzOjpOb3RpZnlPbkV4 aXQsS1Byb2Nlc3M6OkFsbCkpCiAgIHsKICAgICBLTWVzc2FnZUJveDo6aW5mb3JtYXRpb24oMCxp MThuKCJGYWlsZWQgdG8gZXhlY3V0ZSBtYWlsZXIgcHJvZ3JhbSIpICsKLQkJCQkgICAgbVNlbmRl ci0+bWFpbGVyKCkpOworCQkJCSAgICBtTWFpbGVyKTsKICAgICByZXR1cm4gRkFMU0U7CiAgIH0K ICAgbU1zZ1BvcyAgPSBtTXNnU3RyLmRhdGEoKTsKQEAgLTgxMCwxMSArODI5LDExIEBACiAKIC8v PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUtNU2VuZFNNVFA6 OktNU2VuZFNNVFAoS01TZW5kZXIqIGFTZW5kZXIpOgotICBLTVNlbmRTTVRQSW5oZXJpdGVkKGFT ZW5kZXIpCitLTVNlbmRTTVRQOjpLTVNlbmRTTVRQKEtNU2VuZGVyKiBhU2VuZGVyLCBRU3RyaW5n IHNtdHBIb3N0LCAKKwkJICAgICAgIHVuc2lnbmVkIHNob3J0IGludCBzbXRwUG9ydCApOgorICAg IEtNU2VuZFNNVFBJbmhlcml0ZWQoYVNlbmRlciksIG1TbXRwSG9zdChzbXRwSG9zdCksIG1TbXRw UG9ydChzbXRwUG9ydCkKIHsKLSAgbUNsaWVudCA9IE5VTEw7Ci0gIG1PbGRIYW5kbGVyID0gMDsK KyAgc210cCA9IDA7CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTgyMyw2MyArODQy LDM0IEBACiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWJvb2wgS01TZW5kU01UUDo6c3Rh cnQodm9pZCkKK3ZvaWQgS01TZW5kU01UUDo6c3RhcnQodm9pZCkKIHsKLSAgaW50IHJlcGx5Q29k ZTsKLQotICBtT2xkSGFuZGxlciA9IHNpZ25hbChTSUdBTFJNLCBTSUdfSUdOKTsKLSAgbUNsaWVu dCA9IG5ldyBEd1NtdHBDbGllbnQ7Ci0gIGFzc2VydChtQ2xpZW50ICE9IE5VTEwpOwotCiAgIHN0 YXR1c01zZyhpMThuKCJjb25uZWN0aW5nIHRvIHNlcnZlciIpKTsKLSAgbUNsaWVudC0+T3Blbiht U2VuZGVyLT5zbXRwSG9zdCgpLCBtU2VuZGVyLT5zbXRwUG9ydCgpKTsgLy8gT3BlbiBjb25uZWN0 aW9uCi0gIGlmKCFtQ2xpZW50LT5Jc09wZW4oKSkgLy8gQ2hlY2sgaWYgY29ubmVjdGlvbiBzdWNj ZWRlZAotICB7Ci0gICAgUVN0cmluZyBzdHI7Ci0gICAgUVN0cmluZyBtc2c7Ci0gICAgc3RyID0g aTE4bigiQ2Fubm90IG9wZW4gU01UUCBjb25uZWN0aW9uIHRvXG4iCi0JCQkgICAgICAgImhvc3Qg JTEgZm9yIHNlbmRpbmc6XG4lMiIpCi0JCS5hcmcobVNlbmRlci0+c210cEhvc3QoKSkKLQkJLmFy ZygoY29uc3QgY2hhciopbUNsaWVudC0+UmVzcG9uc2UoKS5jX3N0cigpKTsKLSAgICBtc2cgPSBp MThuKCJTZW5kaW5nIGZhaWxlZDpcbiUxXG4iCi0JIlRoZSBtZXNzYWdlIHdpbGwgc3RheSBpbiB0 aGUgJ291dGJveCcgZm9sZGVyIGFuZCB3aWxsIGJlIHJlc2VudC5cbiIKLSAgICAgICAgIlBsZWFz ZSByZW1vdmUgaXQgZnJvbSB0aGVyZSBpZiB5b3UgZG8gbm90IHdhbnQgdGhlIG1lc3NhZ2UgdG9c biIKLQkJImJlIHJlc2VudC5cblxuIgotCSJUaGUgZm9sbG93aW5nIHRyYW5zcG9ydCBwcm90b2Nv bCB3YXMgdXNlZDpcbiAgJTIiKQotICAgIC5hcmcoc3RyKQotICAgIC5hcmcoUVN0cmluZygic210 cDovLyUxOiUyIikuYXJnKG1TZW5kZXItPnNtdHBIb3N0KCkpLmFyZyhtU2VuZGVyLT5zbXRwUG9y dCgpKSk7Ci0KLSAgS01lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKDAsbXNnKTsKLSAgICByZXR1cm4g RkFMU0U7Ci0gIH0KLSAga2FwcC0+cHJvY2Vzc0V2ZW50cyg1MCk7IC8vIG5vdCBzdXJlIHRoaXMg aXMgc2FmZSAtc2FuZGVycworICBlbWl0IHN0YXJ0ZWQodHJ1ZSk7Cit9CiAKLSAgc210cEluQ21k KCJIRUxPIik7Ci0gIHJlcGx5Q29kZSA9IG1DbGllbnQtPkhlbG8oKTsgLy8gU2VuZCBIRUxPIGNv bW1hbmQKLSAgc210cERlYnVnKCJIRUxPIik7Ci0gIGlmIChyZXBseUNvZGUgIT0gMjUwKSByZXR1 cm4gc210cEZhaWxlZCgiSEVMTyIsIHJlcGx5Q29kZSk7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Citib29sIEtNU2VuZFNNVFA6OmZpbmlzaChib29sIGRlc3RydWN0aXZlKQoreworICBpZiAoc210 cCkKKyAgICBzbXRwLT5xdWl0KCk7CisgIHNtdHAgPSAwOworICBpZiAoZGVzdHJ1Y3RpdmUpCisg ICAgICBkZWxldGUgdGhpczsKICAgcmV0dXJuIFRSVUU7CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLWJvb2wgS01TZW5kU01UUDo6ZmluaXNoKHZvaWQpCit2b2lkIEtNU2VuZFNNVFA6OmFi b3J0KCkKIHsKLSAgaWYgKG1DbGllbnQtPlJlcGx5Q29kZSgpICE9IDApCi0gIHsKLSAgICBpbnQg cmVwbHlDb2RlID0gbUNsaWVudC0+UXVpdCgpOyAvLyBTZW5kIFFVSVQgY29tbWFuZAotICAgIHNt dHBEZWJ1ZygiUVVJVCIpOwotICAgIGlmKHJlcGx5Q29kZSAhPSAyMjEpCi0gICAgICByZXR1cm4g c210cEZhaWxlZCgiUVVJVCIsIHJlcGx5Q29kZSk7Ci0gIH0KLQotICBpZiAobUNsaWVudC0+Q2xv c2UoKSAhPSAwKQotICAgIEtNZXNzYWdlQm94OjppbmZvcm1hdGlvbigwLGkxOG4oIkNhbm5vdCBj bG9zZSBTTVRQIGNvbm5lY3Rpb24uIikpOwotCi0gIHNpZ25hbChTSUdBTFJNLCBtT2xkSGFuZGxl cik7Ci0gIGRlbGV0ZSBtQ2xpZW50OwotICBtQ2xpZW50ID0gTlVMTDsKLQotICByZXR1cm4gVFJV RTsKKyAgZGlzY29ubmVjdCggc210cCwgU0lHTkFMKGVycm9yKGNvbnN0IFFTdHJpbmcmLCBjb25z dCBRU3RyaW5nJikpLAorCSAgICAgIHRoaXMsIFNMT1Qoc210cEZhaWxlZChjb25zdCBRU3RyaW5n JiwgY29uc3QgUVN0cmluZyYgKSkgKTsKKyAgZGlzY29ubmVjdCggc210cCwgU0lHTkFMKHN1Y2Nl c3MoKSksCisJICAgICAgdGhpcywgU0lHTkFMKGlkbGUoKSkgKTsKKyAgaWYgKHNtdHApCisgICAg c210cC0+cXVpdCgpOworICBzbXRwID0gMDsKKyAgaWRsZSgpOwogfQogCiAKQEAgLTg4Nyw3ICs4 NzcsNiBAQAogYm9vbCBLTVNlbmRTTVRQOjpzZW5kKEtNTWVzc2FnZSAqbXNnKQogewogICBtU2Vu ZE9rID0gc210cFNlbmQobXNnKTsKLSAgZW1pdCBpZGxlKCk7CiAgIHJldHVybiBtU2VuZE9rOwog fQogCkBAIC04OTYsMTcgKzg4NSwxMiBAQAogYm9vbCBLTVNlbmRTTVRQOjpzbXRwU2VuZChLTU1l c3NhZ2UqIGFNc2cpCiB7CiAgIFFTdHJpbmcgc3RyLCBtc2dTdHIsIGJjY1N0cjsKLSAgaW50IHJl cGx5Q29kZTsKICAgS01JZGVudGl0eSBpZGVudCggaTE4biggIkRlZmF1bHQiICkpOwogICBpZGVu dC5yZWFkQ29uZmlnKCk7CiAKICAgYXNzZXJ0KGFNc2cgIT0gTlVMTCk7CisgIHJlY2lwaWVudHMu Y2xlYXIoKTsKIAotICBzbXRwSW5DbWQoIk1BSUwiKTsKLSAgcmVwbHlDb2RlID0gbUNsaWVudC0+ TWFpbChpZGVudC5lbWFpbEFkZHIoKSk7Ci0gIHNtdHBEZWJ1ZygiTUFJTCIpOwotICBpZihyZXBs eUNvZGUgIT0gMjUwKSByZXR1cm4gc210cEZhaWxlZCgiTUFJTCIsIHJlcGx5Q29kZSk7Ci0KICAg aWYgKCFhZGRSZWNpcGllbnRzKGFNc2ctPmhlYWRlckFkZHJGaWVsZCgiVG8iKSkpIHJldHVybiBG QUxTRTsKIAogICBpZiAoIWFNc2ctPmNjKCkuaXNFbXB0eSgpKQpAQCAtOTE5LDIzICs5MDMsMjEg QEAKICAgICBhTXNnLT5yZW1vdmVIZWFkZXJGaWVsZCgiQmNjIik7CiAgIH0KIAotICBrYXBwLT5w cm9jZXNzRXZlbnRzKDUwKTsgLy8gbm90IHN1cmUgdGhpcyBpcyBzYWZlIC1zYW5kZXJzCisgIG1z Z1N0ciA9IHByZXBhcmVTdHIoYU1zZy0+YXNTdHJpbmcoKSwgVFJVRSApOworICBpZiAoIXNtdHAp IHsKKyAgICAgIHNtdHAgPSBuZXcgU210cCggaWRlbnQuZW1haWxBZGRyKCksIHJlY2lwaWVudHMs CisJCSAgICAgICBtc2dTdHIsCisJCSAgICAgICBtU210cEhvc3QsCisJCSAgICAgICBtU210cFBv cnQgKTsKKyAgICAgIGNvbm5lY3QoIHNtdHAsIFNJR05BTChlcnJvcihjb25zdCBRU3RyaW5nJiwg Y29uc3QgUVN0cmluZyYpKSwKKwkgICAgICAgdGhpcywgU0xPVChzbXRwRmFpbGVkKGNvbnN0IFFT dHJpbmcmLCBjb25zdCBRU3RyaW5nJiApKSApOworICAgICAgY29ubmVjdCggc210cCwgU0lHTkFM KHN1Y2Nlc3MoKSksCisJICAgICAgIHRoaXMsIFNJR05BTChpZGxlKCkpICk7CisgIH0gZWxzZSB7 CisgICAgICBzbXRwLT5zZW5kKCBpZGVudC5lbWFpbEFkZHIoKSwgcmVjaXBpZW50cywgbXNnU3Ry ICk7CisgIH0KIAotICBzbXRwSW5DbWQoIkRBVEEiKTsKLSAgcmVwbHlDb2RlID0gbUNsaWVudC0+ RGF0YSgpOyAvLyBTZW5kIERBVEEgY29tbWFuZAotICBzbXRwRGVidWcoIkRBVEEiKTsKLSAgaWYo cmVwbHlDb2RlICE9IDM1NCkKLSAgICByZXR1cm4gc210cEZhaWxlZCgiREFUQSIsIHJlcGx5Q29k ZSk7Ci0KLSAgc3RhdHVzTXNnKGkxOG4oInRyYW5zbWl0dGluZyBtZXNzYWdlIikpOwotICBtc2dT dHIgPSBwcmVwYXJlU3RyKGFNc2ctPmFzU3RyaW5nKCksIFRSVUUsIEZBTFNFKTsKLSAgcmVwbHlD b2RlID0gbUNsaWVudC0+U2VuZERhdGEoKGNvbnN0IGNoYXIqKW1zZ1N0cik7CiAgIGlmICghYmNj U3RyLmlzRW1wdHkoKSkgYU1zZy0+c2V0QmNjKGJjY1N0cik7Ci0KLSAgc210cERlYnVnKCI8Ym9k eT4iKTsKLSAgaWYocmVwbHlDb2RlICE9IDI1MCAmJiByZXBseUNvZGUgIT0gMjUxKQotICAgIHJl dHVybiBzbXRwRmFpbGVkKCI8Ym9keT4iLCByZXBseUNvZGUpOwotCiAgIHJldHVybiBUUlVFOwog fQogCkBAIC05NDMsMzkgKzkyNSwyNiBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogYm9vbCBL TVNlbmRTTVRQOjphZGRPbmVSZWNpcGllbnQoY29uc3QgUVN0cmluZyBhUmNwdCkKIHsKLSAgaW50 IHJlcGx5Q29kZTsKICAgaWYgKGFSY3B0LmlzRW1wdHkoKSkgcmV0dXJuIFRSVUU7CiAKLSAgc210 cEluQ21kKCJSQ1BUIik7Ci0gIHJlcGx5Q29kZSA9IG1DbGllbnQtPlJjcHQoYVJjcHQpOwotICBz bXRwRGVidWcoIlJDUFQiKTsKLQotICBpZihyZXBseUNvZGUgIT0gMjUwICYmIHJlcGx5Q29kZSAh PSAyNTEpCi0gICAgcmV0dXJuIHNtdHBGYWlsZWQoIlJDUFQiLCByZXBseUNvZGUpOworICByZWNp cGllbnRzLmFwcGVuZCggYVJjcHQgKTsKICAgcmV0dXJuIFRSVUU7CiB9CiAKIAogLy8tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotYm9vbCBLTVNlbmRTTVRQOjpzbXRwRmFpbGVkKGNvbnN0IGNoYXIqIGlu Q29tbWFuZCwKLQkJCSAgaW50IHJlcGx5Q29kZSkKK3ZvaWQgS01TZW5kU01UUDo6c210cEZhaWxl ZChjb25zdCBRU3RyaW5nICZjb21tYW5kLAorCQkJICAgIGNvbnN0IFFTdHJpbmcgJnJlc3BvbnNl KQogewotICBRU3RyaW5nIHN0cjsKLSAgUVN0cmluZyBlcnJvclN0ciA9IG1DbGllbnQtPlJlc3Bv bnNlKCkuY19zdHIoKTsKLQotICBpZiAocmVwbHlDb2RlPT0wICYmICghZXJyb3JTdHIgfHwgISpl cnJvclN0cikpCi0gICAgZXJyb3JTdHIgPSBpMThuKCJuZXR3b3JrIGVycm9yIik7Ci0KLSAgc3Ry ID0gaTE4bigiYSBTTVRQIGVycm9yIG9jY3VyZWQuXG4iCisgIGZhaWxlZCggaTE4bigiYSBTTVRQ IGVycm9yIG9jY3VyZWQuXG4iCiAJCQkgICAgICJDb21tYW5kOiAlMVxuIgotCQkJICAgICAiUmVz cG9uc2U6ICUyXG4iCi0JCQkgICAgICJSZXR1cm4gY29kZTogJTMiKQotCQkuYXJnKGluQ29tbWFu ZCkKLQkJLmFyZyghZXJyb3JTdHIuaXNFbXB0eSgpID8gZXJyb3JTdHIgOiBpMThuKCIobm90aGlu ZykiKSkKLQkJLmFyZyhyZXBseUNvZGUpOwotICBtTXNnID0gc3RyOwotCi0gIHJldHVybiBGQUxT RTsKKwkgICAgICJSZXNwb25zZTogJTIiKQorCSAgLmFyZyhjb21tYW5kKQorCSAgLmFyZyhyZXNw b25zZSkgKTsKKyAgaWYgKHNtdHApCisgICAgICBkZWxldGUgc210cDsKKyAgc210cCA9IDA7Cisg IGlkbGUoKTsKIH0KIAogCkBAIC05ODUsMTcgKzk1NCw2IEBACiAgIFFTdHJpbmcgc3RyOwogICBz dHIgPSBpMThuKCJTZW5kaW5nIFNNVFAgY29tbWFuZDogJTEiKS5hcmcoaW5Db21tYW5kKTsKICAg c3RhdHVzTXNnKHN0cik7Ci19Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdm9pZCBLTVNl bmRTTVRQOjpzbXRwRGVidWcoY29uc3QgY2hhciogLyppbkNvbW1hbmQqLykKLXsKLSNpZmRlZiBT TVRQX0RFQlVHX09VVFBVVAotICBjb25zdCBjaGFyKiBlcnJvclN0ciA9IG1DbGllbnQtPlJlc3Bv bnNlKCkuY19zdHIoKTsKLSAgaW50IHJlcGx5Q29kZSA9IG1DbGllbnQtPlJlcGx5Q29kZSgpOwot ICBrZERlYnVnKCkgPDwgIlNNVFAgJyIgPDwgaW5Db21tYW5kIDw8ICInOiByYz0iIDw8IHJlcGx5 Q29kZSA8PCAiLCBtc2c9JyIgPDwgZXJyb3JTdHIgPDwgIiciIDw8IGVuZGw7Ci0jZW5kaWYKIH0K IAogCkluZGV4OiBrbXNlbmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVu ZXR3b3JrL2ttYWlsL2ttc2VuZGVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAt dSAtYiAtcjEuMjcga21zZW5kZXIuaAotLS0ga21zZW5kZXIuaAkyMDAwLzExLzAxIDExOjMxOjA5 CTEuMjcKKysrIGttc2VuZGVyLmgJMjAwMS8wNC8wMSAwMToxMDowNQpAQCAtOCw2ICs4LDcgQEAK ICNpbmNsdWRlIDxtaW1lbGliL3N0cmluZy5oPgogI2luY2x1ZGUgPG1pbWVsaWIvdXRpbGl0eS5o PgogI2luY2x1ZGUgPHFzdHJpbmcuaD4KKyNpbmNsdWRlIDxxc3RyaW5nbGlzdC5oPgogI2luY2x1 ZGUgPHFvYmplY3QuaD4KICNpbmNsdWRlIDxxbGFiZWwuaD4KIApAQCAtMjEsNiArMjIsNyBAQAog Y2xhc3MgS01TZW5kUHJvYzsKIGNsYXNzIFFTdHJMaXN0OwogY2xhc3MgUURpYWxvZzsKK2NsYXNz IFNtdHA7CiAKIGNsYXNzIEtNU2VuZGVyOiBwdWJsaWMgUU9iamVjdAogewpAQCAtMTA1LDEwICsx MDcsMjAgQEAKIHByb3RlY3RlZCBzbG90czoKICAgdmlydHVhbCB2b2lkIHNsb3RJZGxlKCk7CiAK KyAgLyoqIGFib3J0IHNlbmRpbmcgb2YgdGhlIGN1cnJlbnQgbWVzc2FnZSAqLworICB2aXJ0dWFs IHZvaWQgc2xvdEFib3J0U2VuZCgpOworCisgIC8qKiBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBo YXMgZmluaXNlZCAqLworICB2aXJ0dWFsIHZvaWQgbXNnU2VuZFByb2NTdGFydGVkKGJvb2wgc3Vj Y2Vzcyk7CisgIHZpcnR1YWwgdm9pZCBzZW5kUHJvY1N0YXJ0ZWQoYm9vbCBzdWNjZXNzKTsKKwog cHJvdGVjdGVkOgogICAvKiogaGFuZGxlIHNlbmRpbmcgb2YgbWVzc2FnZXMgKi8KICAgdmlydHVh bCB2b2lkIGRvU2VuZE1zZygpOwogCisgIC8qKiBzZWNvbmQgcGFydCBvZiBoYW5kbGluZyBzZW5k aW5nIG9mIG1lc3NhZ2VzICovCisgIHZpcnR1YWwgdm9pZCBkb1NlbmRNc2dBdXgoKTsKKwogICAv KiogY2xlYW51cCBhZnRlciBzZW5kaW5nICovCiAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwKHZvaWQp OwogCkBAIC0xMTcsMjUgKzEyOSwxOSBAQAogICAgICAgUmV0dXJucyBUUlVFIGlmIGV2ZXJ5dGhp bmcgaXMgT2suICovCiAgIHZpcnR1YWwgYm9vbCBzZXR0aW5nc09rKHZvaWQpIGNvbnN0OwogCi0g IC8qKiBTYXZlIG1NZXRob2QsIG1NYWlsLCBtU210cEhvc3QsIGFuZCBtU210cFBvcnQgKi8KLSAg dmlydHVhbCB2b2lkIHNhdmVUcmFuc3BvcnRTZXR0aW5ncyh2b2lkKTsKLQotICAvKiogUmVzdG9y ZSBzYXZlZCBtTWV0aG9kLCBtTWFpbCwgbVNtdHBIb3N0LCBhbmQgbVNtdHBQb3J0ICovCi0gIHZp cnR1YWwgdm9pZCByZXN0b3JlVHJhbnNwb3J0U2V0dGluZ3Modm9pZCk7Ci0KICAgLyoqIFBhcnNl IHByb3RvY29sICc6Ly8nIChob3N0IHBvcnQ/IHwgbWFpbGVyKSBzdHJpbmcgYW5kIAogICAgICAg c2V0IHRyYW5zcG9ydCBzZXR0aW5ncyAqLwotICB2aXJ0dWFsIEtNU2VuZFByb2MqIHBhcnNlVHJh bnNwb3J0RnJvbVN0cmluZyhRU3RyaW5nIHRyYW5zcG9ydCk7IAorICB2aXJ0dWFsIEtNU2VuZFBy b2MqIGNyZWF0ZVNlbmRQcm9jRnJvbVN0cmluZyhRU3RyaW5nIHRyYW5zcG9ydCk7CiAKIHByaXZh dGU6Ci0gIE1ldGhvZCBtTWV0aG9kLCBtT2xkTWV0aG9kOworICBNZXRob2QgbU1ldGhvZDsKICAg Ym9vbCBtU2VuZEltbWVkaWF0ZSwgbVNlbmRRdW90ZWRQcmludGFibGU7Ci0gIFFTdHJpbmcgbU1h aWxlciwgbU9sZE1haWxlcjsKLSAgUVN0cmluZyBtU210cEhvc3QsIG1PbGRTbXRwSG9zdDsKLSAg dW5zaWduZWQgc2hvcnQgaW50IG1TbXRwUG9ydCwgbU9sZFNtdHBQb3J0OworICBRU3RyaW5nIG1N YWlsZXI7CisgIFFTdHJpbmcgbVNtdHBIb3N0OworICB1bnNpZ25lZCBzaG9ydCBpbnQgbVNtdHBQ b3J0OwogICBRU3RyaW5nIG1QcmVjb21tYW5kOwogCi0gIGJvb2wgbVNlbnRPazsKKyAgYm9vbCBt U2VudE9rLCBtU2VuZEFib3J0ZWQ7CiAgIFFTdHJpbmcgbUVycm9yTXNnOwogICBLTUlPU3RhdHVz RGxnKiBtU2VuZERsZzsKICAgS01TZW5kUHJvYyAqbVNlbmRQcm9jLCAqbU1zZ1NlbmRQcm9jOwpA QCAtMTU5LDcgKzE2NSw3IEBACiAgIEtNU2VuZFByb2MoS01TZW5kZXIqKTsKIAogICAvKiogSW5p dGlhbGl6ZSBzZW5kaW5nIG9mIG9uZSBvciBtb3JlIG1lc3NhZ2VzLiAqLwotICB2aXJ0dWFsIGJv b2wgc3RhcnQodm9pZCk7CisgIHZpcnR1YWwgdm9pZCBzdGFydCh2b2lkKTsKIAogICAvKiogSW5p dGlhbGl6ZXMgdmFyaWFibGVzIGRpcmVjdGx5IGJlZm9yZSBzZW5kKCkgaXMgY2FsbGVkLiAqLwog ICB2aXJ0dWFsIHZvaWQgcHJlU2VuZEluaXQodm9pZCk7CkBAIC0xNjgsOCArMTc0LDExIEBACiAg IHZpcnR1YWwgYm9vbCBzZW5kKEtNTWVzc2FnZSogbXNnKSA9IDA7CiAKICAgLyoqIENsZWFudXAg YWZ0ZXIgc2VuZGluZyBtZXNzYWdlcy4gKi8KLSAgdmlydHVhbCBib29sIGZpbmlzaCh2b2lkKTsK KyAgdmlydHVhbCBib29sIGZpbmlzaChib29sIGRlc3RydWN0aXZlKTsKIAorICAvKiogQWJvcnQg c2VuZGluZyB0aGUgY3VycmVudCBtZXNzYWdlLiBTZXRzIG1TZW5kaW5nIHRvIGZhbHNlICovCisg IHZpcnR1YWwgdm9pZCBhYm9ydCgpID0gMDsKKwogICAvKiogUmV0dXJucyBUUlVFIGlmIHNlbmQg d2FzIHN1Y2Nlc3NmdWwsIGFuZCBGQUxTRSBvdGhlcndpc2UuCiAgICAgICBSZXR1cm5zIEZBTFNF IGlmIHNlbmRpbmcgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MuICovCiAgIGJvb2wgc2VuZE9rKHZvaWQp IGNvbnN0IHsgcmV0dXJuIG1TZW5kT2s7IH0KQEAgLTE4NCw2ICsxOTMsMTAgQEAKICAgLyoqIEVt aXR0ZWQgd2hlbiB0aGUgY3VycmVudCBtZXNzYWdlIGlzIHNlbnQgb3IgYW4gZXJyb3Igb2NjdXJl ZC4gKi8KICAgdm9pZCBpZGxlKCk7CiAKKyAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgaW5pdGlhbGl6 YXRpb24gc2VxdWVuY2UgaGFzIGZpbmlzaGVkICovCisgIHZvaWQgc3RhcnRlZChib29sKTsKKwor CiBwcm90ZWN0ZWQ6CiAgIC8qKiBDYWxsZWQgdG8gc2lnbmFsIGEgdHJhbnNtaXNzaW9uIGVycm9y LiBUaGUgc2VuZGVyIHRoZW4KICAgICBjYWxscyBmaW5pc2goKSBhbmQgdGVybWluYXRlcyBzZW5k aW5nIG9mIG1lc3NhZ2VzLiAKQEAgLTIyMywxMSArMjM2LDEyIEBACiB7CiAgIFFfT0JKRUNUCiBw dWJsaWM6Ci0gIEtNU2VuZFNlbmRtYWlsKEtNU2VuZGVyKik7CisgIEtNU2VuZFNlbmRtYWlsKEtN U2VuZGVyKixRU3RyaW5nKTsKICAgdmlydHVhbCB+S01TZW5kU2VuZG1haWwoKTsKLSAgdmlydHVh bCBib29sIHN0YXJ0KHZvaWQpOworICB2aXJ0dWFsIHZvaWQgc3RhcnQodm9pZCk7CiAgIHZpcnR1 YWwgYm9vbCBzZW5kKEtNTWVzc2FnZSogbXNnKTsKLSAgdmlydHVhbCBib29sIGZpbmlzaCh2b2lk KTsKKyAgdmlydHVhbCBib29sIGZpbmlzaChib29sIGRlc3RydWN0aXZlKTsKKyAgdmlydHVhbCB2 b2lkIGFib3J0KCk7CiAKIHByb3RlY3RlZCBzbG90czoKICAgdm9pZCByZWNlaXZlZFN0ZGVycihL UHJvY2VzcyosY2hhciosaW50KTsKQEAgLTI0MSwyOCArMjU1LDM0IEBACiAgIGNoYXIqIG1Nc2dQ b3M7CiAgIGludCBtTXNnUmVzdDsKICAgS1Byb2Nlc3MqIG1NYWlsZXJQcm9jOworICBRU3RyaW5n IG1NYWlsZXI7CiB9OwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjZGVmaW5lIEtNU2VuZFNN VFBJbmhlcml0ZWQgS01TZW5kUHJvYwogY2xhc3MgS01TZW5kU01UUDogcHVibGljIEtNU2VuZFBy b2MKIHsKKyAgUV9PQkpFQ1QKIHB1YmxpYzoKLSAgS01TZW5kU01UUChLTVNlbmRlciopOworICBL TVNlbmRTTVRQKEtNU2VuZGVyKixRU3RyaW5nLHVuc2lnbmVkIHNob3J0IGludCk7CiAgIHZpcnR1 YWwgfktNU2VuZFNNVFAoKTsKLSAgdmlydHVhbCBib29sIHN0YXJ0KHZvaWQpOworICB2aXJ0dWFs IHZvaWQgc3RhcnQodm9pZCk7CiAgIHZpcnR1YWwgYm9vbCBzZW5kKEtNTWVzc2FnZSogbXNnKTsK LSAgdmlydHVhbCBib29sIGZpbmlzaCh2b2lkKTsKKyAgdmlydHVhbCBib29sIGZpbmlzaChib29s IGRlc3RydWN0aXZlKTsKKyAgdmlydHVhbCB2b2lkIGFib3J0KCk7CisKK3B1YmxpYyBzbG90czoK KyAgdmlydHVhbCB2b2lkIHNtdHBGYWlsZWQoY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcg Jik7CiAKIHByb3RlY3RlZDoKICAgdmlydHVhbCBib29sIHNtdHBTZW5kKEtNTWVzc2FnZSogbXNn KTsKLSAgdmlydHVhbCBib29sIHNtdHBGYWlsZWQoY29uc3QgY2hhciogaW5Db21tYW5kLCBpbnQg cmVwbHlDb2RlKTsKLSAgdmlydHVhbCB2b2lkIHNtdHBEZWJ1Zyhjb25zdCBjaGFyKiBpbkNvbW1h bmQpOwogICB2aXJ0dWFsIHZvaWQgc210cEluQ21kKGNvbnN0IGNoYXIqIGluQ29tbWFuZCk7CiAg IHZpcnR1YWwgYm9vbCBhZGRPbmVSZWNpcGllbnQoY29uc3QgUVN0cmluZyBhUmVjaXBpZW50KTsK ICAgCi0gIHZvaWQgKCptT2xkSGFuZGxlcikoaW50KTsKLSAgRHdTbXRwQ2xpZW50KiBtQ2xpZW50 OworICBTbXRwICpzbXRwOworICBRU3RyaW5nTGlzdCByZWNpcGllbnRzOworICBRU3RyaW5nIG1T bXRwSG9zdDsKKyAgdW5zaWduZWQgc2hvcnQgaW50IG1TbXRwUG9ydDsKIH07CiAKICNlbmRpZiAv Kmttc2VuZGVyX2gqLwpJbmRleDogTWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hv bWUva2RlL2tkZW5ldHdvcmsva21haWwvTWFrZWZpbGUuYW0sdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMTAyCmRpZmYgLXUgLWIgLXIxLjEwMiBNYWtlZmlsZS5hbQotLS0gTWFrZWZpbGUuYW0JMjAw MS8wMS8yNSAyMTo0NjoyOAkxLjEwMgorKysgTWFrZWZpbGUuYW0JMjAwMS8wNC8wMSAwMToxMDow NQpAQCAtMjgsNyArMjgsOCBAQAogCQlrbWFjY3RleHBwb3AuY3BwIGNvbmZpZ3VyZWRpYWxvZy5j cHAgY29sb3JsaXN0Ym94LmNwcCBcCiAgICAgICAgICAgICAgICAga21rZXJuZWwuY3BwIGttYWls SWZhY2Uuc2tlbCBrbWFpbElmYWNlLnN0dWIgbWFpbi5jcHAgXAogCQlhY2NvdW50ZGlhbG9nLmNw cCBrbWZsZHNlYXJjaC5jcHAgYWRkdG9hZGRyZXNzYm9vay5jcHAgXAotCQlrbWRpc3BsYXl2Y2Fy ZC5jcHAgdmNhcmQuY3BwIG1kNS5jCisJCWttZGlzcGxheXZjYXJkLmNwcCB2Y2FyZC5jcHAgbWQ1 LmMgXAorCQlzbXRwLmNwcCBzbXRwLmgKIAogCiBpbmNsdWRlX0hFQURFUlMgPSBrbWFpbElmYWNl LmgK --------------Boundary-00=_C9A3H0OZWQL24VEZVGQO Content-Type: text/x-c++; charset="iso-8859-1"; name="smtp.h" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smtp.h" LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKKioKKiogVGhpcyBmaWxlIGlzIGEgbW9kaWZpZWQgdmVyc2lv biBvZiBwYXJ0IG9mIGFuIGV4YW1wbGUgcHJvZ3JhbSBmb3IgUXQuCioqIFRoaXMgZmlsZSBtYXkg YmUgdXNlZCwgZGlzdHJpYnV0ZWQgYW5kIG1vZGlmaWVkIHdpdGhvdXQgbGltaXRhdGlvbi4KKioK KiogRG9uIFNhbmRlcnMgPHNhbmRlcnNAa2RlLm9yZz4KKioKKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CgojaWZuZGVmIFNNVFBfSAojZGVmaW5lIFNNVFBfSAoKI2luY2x1ZGUgPHFvYmplY3QuaD4KI2lu Y2x1ZGUgPHFzdHJpbmcuaD4KI2luY2x1ZGUgPHFzdHJpbmdsaXN0Lmg+CgpjbGFzcyBRU29ja2V0 OwpjbGFzcyBRVGV4dFN0cmVhbTsKCmNsYXNzIFNtdHAgOiBwdWJsaWMgUU9iamVjdAp7CiAgICBR X09CSkVDVAoKcHVibGljOgogICAgU210cCggY29uc3QgUVN0cmluZyAmLCBjb25zdCBRU3RyaW5n TGlzdCAmLCBjb25zdCBRU3RyaW5nICYsIGNvbnN0IFFTdHJpbmcgJiwKICAgICAgICAgIHVuc2ln bmVkIHNob3J0IGludCApOwogICAgflNtdHAoKTsKICAgIHZvaWQgc2VuZCggY29uc3QgUVN0cmlu ZyAmLCBjb25zdCBRU3RyaW5nTGlzdCAmLCBjb25zdCBRU3RyaW5nICYgKTsKICAgIHZvaWQgcXVp dCgpOwoKCnNpZ25hbHM6CiAgICB2b2lkIHN1Y2Nlc3MoKTsKICAgIHZvaWQgc3RhdHVzKCBjb25z dCBRU3RyaW5nICYgKTsKICAgIHZvaWQgZXJyb3IoIGNvbnN0IFFTdHJpbmcgJmNvbW1hbmQsIGNv bnN0IFFTdHJpbmcgJnJlc3BvbnNlICk7Cgpwcml2YXRlIHNsb3RzOgogICAgdm9pZCByZWFkeVJl YWQoKTsKICAgIHZvaWQgY29ubmVjdGVkKCk7CiAgICB2b2lkIGRlbGV0ZU1lKCk7CiAgICB2b2lk IHNvY2tldEVycm9yKGludCBlcnIpOwogICAgdm9pZCBlbWl0RXJyb3IoKTsKCnByaXZhdGU6CiAg ICBlbnVtIFN0YXRlIHsKCUluaXQsCglNYWlsLAoJUmNwdCwKCURhdGEsCglCb2R5LAoJU3VjY2Vz cywKCVF1aXQsCglDbG9zZQogICAgfTsKCiAgICBRU3RyaW5nIG1lc3NhZ2U7CiAgICBRU3RyaW5n IGZyb207CiAgICBRU3RyaW5nTGlzdCByY3B0OwogICAgUVNvY2tldCAqc29ja2V0OwogICAgUVRl eHRTdHJlYW0gKiB0OwogICAgaW50IHN0YXRlOwogICAgUVN0cmluZyByZXNwb25zZSwgcmVzcG9u c2VMaW5lOwogICAgYm9vbCBza2lwUmVhZFJlc3BvbnNlOwogICAgUVN0cmluZyBjb21tYW5kOwp9 OwoKI2VuZGlmCg== --------------Boundary-00=_C9A3H0OZWQL24VEZVGQO Content-Type: text/x-c; charset="iso-8859-1"; name="smtp.cpp" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smtp.cpp" LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKKioKKiogVGhpcyBmaWxlIGlzIGEgbW9kaWZpZWQgdmVyc2lv biBvZiBwYXJ0IG9mIGFuIGV4YW1wbGUgcHJvZ3JhbSBmb3IgUXQuCioqIFRoaXMgZmlsZSBtYXkg YmUgdXNlZCwgZGlzdHJpYnV0ZWQgYW5kIG1vZGlmaWVkIHdpdGhvdXQgbGltaXRhdGlvbi4KKioK KiogRG9uIFNhbmRlcnMgPHNhbmRlcnNAa2RlLm9yZz4KKioKKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CgojaW5jbHVkZSAic210cC5oIgoKI2luY2x1ZGUgPHF0ZXh0c3RyZWFtLmg+CiNpbmNsdWRlIDxx c29ja2V0Lmg+CiNpbmNsdWRlIDxxdGltZXIuaD4KI2luY2x1ZGUgPGthcHAuaD4KI2luY2x1ZGUg PGttZXNzYWdlYm94Lmg+CiNpbmNsdWRlIDxrbG9jYWxlLmg+CgpTbXRwOjpTbXRwKCBjb25zdCBR U3RyaW5nICZmcm9tLCBjb25zdCBRU3RyaW5nTGlzdCAmdG8sCgkgICAgY29uc3QgUVN0cmluZyAm YU1lc3NhZ2UsCgkgICAgY29uc3QgUVN0cmluZyAmc2VydmVyLAoJICAgIHVuc2lnbmVkIHNob3J0 IGludCBwb3J0ICkKewogICAgc2tpcFJlYWRSZXNwb25zZSA9IGZhbHNlOwogICAgc29ja2V0ID0g bmV3IFFTb2NrZXQoIHRoaXMgKTsKICAgIGNvbm5lY3QgKCBzb2NrZXQsIFNJR05BTCggcmVhZHlS ZWFkKCkgKSwKCSAgICAgIHRoaXMsIFNMT1QoIHJlYWR5UmVhZCgpICkgKTsKICAgIGNvbm5lY3Qg KCBzb2NrZXQsIFNJR05BTCggY29ubmVjdGVkKCkgKSwKCSAgICAgIHRoaXMsIFNMT1QoIGNvbm5l Y3RlZCgpICkgKTsKICAgIGNvbm5lY3QgKCBzb2NrZXQsIFNJR05BTCggZXJyb3IoaW50KSApLAoJ ICAgICAgdGhpcywgU0xPVCggc29ja2V0RXJyb3IoaW50KSApICk7CgogICAgbWVzc2FnZSA9IGFN ZXNzYWdlOwogICAgCiAgICB0aGlzLT5mcm9tID0gZnJvbTsKICAgIHJjcHQgPSB0bzsKCiAgICBz dGF0ZSA9IEluaXQ7CiAgICBjb21tYW5kID0gIiI7CgogICAgZW1pdCBzdGF0dXMoIGkxOG4oICJD b25uZWN0aW5nIHRvICUxIiApLmFyZyggc2VydmVyICkgKTsKCiAgICBzb2NrZXQtPmNvbm5lY3RU b0hvc3QoIHNlcnZlciwgcG9ydCApOwogICAgdCA9IG5ldyBRVGV4dFN0cmVhbSggc29ja2V0ICk7 Cn0KCgpTbXRwOjp+U210cCgpCnsKICAgIGlmICh0KQoJZGVsZXRlIHQ7CiAgICBpZiAoc29ja2V0 KQoJZGVsZXRlIHNvY2tldDsKfQoKCnZvaWQgU210cDo6c2VuZCggY29uc3QgUVN0cmluZyAmZnJv bSwgY29uc3QgUVN0cmluZ0xpc3QgJnRvLAoJICAgIGNvbnN0IFFTdHJpbmcgJmFNZXNzYWdlICkK ewogICAgc2tpcFJlYWRSZXNwb25zZSA9IHRydWU7CiAgICBtZXNzYWdlID0gYU1lc3NhZ2U7CiAg ICB0aGlzLT5mcm9tID0gZnJvbTsKICAgIHJjcHQgPSB0bzsKCiAgICBzdGF0ZSA9IE1haWw7CiAg ICBjb21tYW5kID0gIiI7CiAgICByZWFkeVJlYWQoKTsKfQoKCnZvaWQgU210cDo6cXVpdCgpCnsK ICAgIHNraXBSZWFkUmVzcG9uc2UgPSB0cnVlOwogICAgc3RhdGUgPSBRdWl0OwogICAgY29tbWFu ZCA9ICIiOwogICAgcmVhZHlSZWFkKCk7CQp9CgoKdm9pZCBTbXRwOjpjb25uZWN0ZWQoKQp7CiAg ICBlbWl0IHN0YXR1cyggaTE4biggIkNvbm5lY3RlZCB0byAlMSIgKS5hcmcoIHNvY2tldC0+cGVl ck5hbWUoKSApICk7Cn0KCnZvaWQgU210cDo6c29ja2V0RXJyb3IoaW50IGVycm9yQ29kZSkKewog ICAgY29tbWFuZCA9ICJDT05ORUNUIjsKICAgIHJlc3BvbnNlTGluZTsKICAgIHN3aXRjaCAoIGVy cm9yQ29kZSApIHsKICAgICAgICBjYXNlIFFTb2NrZXQ6OkVyckNvbm5lY3Rpb25SZWZ1c2VkOgoJ ICAgIHJlc3BvbnNlTGluZSA9IGkxOG4oICJDb25uZWN0aW9uIHJlZnVzZWQuIiApOwoJICAgIGJy ZWFrOwogICAgICAgIGNhc2UgUVNvY2tldDo6RXJySG9zdE5vdEZvdW5kOgoJICAgIHJlc3BvbnNl TGluZSA9IGkxOG4oICJIb3N0IE5vdCBGb3VuZC4iICk7CgkgICAgYnJlYWs7CiAgICAgICAgY2Fz ZSBRU29ja2V0OjpFcnJTb2NrZXRSZWFkOgoJICAgIHJlc3BvbnNlTGluZSA9IGkxOG4oICJFcnJv ciByZWFkaW5nIHNvY2tldC4iICk7CgkgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKCSAgICBy ZXNwb25zZUxpbmUgPSBpMThuKCAiSW50ZXJuYWwgZXJyb3IsIHVucmVjb2duaXplZCBlcnJvci4i ICk7CiAgICB9CiAgICBRVGltZXI6OnNpbmdsZVNob3QoIDAsIHRoaXMsIFNMT1QoZW1pdEVycm9y KCkpICk7Cn0KCnZvaWQgU210cDo6ZW1pdEVycm9yKCkgewogICAgZXJyb3IoIGNvbW1hbmQsIHJl c3BvbnNlTGluZSApOwp9Cgp2b2lkIFNtdHA6OnJlYWR5UmVhZCgpCnsKICAgIGlmICghc2tpcFJl YWRSZXNwb25zZSkgewoJLy8gU01UUCBpcyBsaW5lLW9yaWVudGVkCglpZiAoICFzb2NrZXQtPmNh blJlYWRMaW5lKCkgKQoJICAgIHJldHVybjsKCglkbyB7CgkgICAgcmVzcG9uc2VMaW5lID0gc29j a2V0LT5yZWFkTGluZSgpOwoJICAgIHJlc3BvbnNlICs9IHJlc3BvbnNlTGluZTsKCX0gd2hpbGUo IHNvY2tldC0+Y2FuUmVhZExpbmUoKSAmJiByZXNwb25zZUxpbmVbM10gIT0gJyAnICk7CglyZXNw b25zZUxpbmUudHJ1bmNhdGUoIDMgKTsKICAgIH0KICAgIHNraXBSZWFkUmVzcG9uc2UgPSBmYWxz ZTsKCQogICAgaWYgKCBzdGF0ZSA9PSBJbml0ICYmIHJlc3BvbnNlTGluZVswXSA9PSAnMicgKSB7 CgkvLyBiYW5uZXIgd2FzIG9rYXksIGxldCdzIGdvIG9uCgljb21tYW5kID0gIkhFTE8gdGhlcmUi OwoJKnQgPDwgIkhFTE8gdGhlcmVcclxuIjsKCXN0YXRlID0gTWFpbDsKICAgIH0gZWxzZSBpZiAo IHN0YXRlID09IE1haWwgJiYgcmVzcG9uc2VMaW5lWzBdID09ICcyJyApIHsKCS8vIEhFTE8gcmVz cG9uc2Ugd2FzIG9rYXkgKHdlbGwsIGl0IGhhcyB0byBiZSkKCWNvbW1hbmQgPSAiTUFJTCI7Cgkq dCA8PCAiTUFJTCBGUk9NOiA8IiA8PCBmcm9tIDw8ICI+XHJcbiI7CglzdGF0ZSA9IFJjcHQ7CiAg ICB9IGVsc2UgaWYgKCBzdGF0ZSA9PSBSY3B0ICYmIHJlc3BvbnNlTGluZVswXSA9PSAnMicgJiYg KHJjcHQuYmVnaW4oKSAhPSByY3B0LmVuZCgpKSkgewoJY29tbWFuZCA9ICJSQ1BUIjsKCSp0IDw8 ICJSQ1BUIFRPOiA8IiA8PCAqKHJjcHQuYmVnaW4oKSkgPDwgIj5cclxuIjsKCXJjcHQucmVtb3Zl KCByY3B0LmJlZ2luKCkgKTsKCWlmIChyY3B0LmJlZ2luKCkgPT0gcmNwdC5lbmQoKSkKCSAgICBz dGF0ZSA9IERhdGE7CiAgICB9IGVsc2UgaWYgKCBzdGF0ZSA9PSBEYXRhICYmIHJlc3BvbnNlTGlu ZVswXSA9PSAnMicgKSB7Cgljb21tYW5kID0gIkRBVEEiOwoJKnQgPDwgIkRBVEFcclxuIjsKCXN0 YXRlID0gQm9keTsKICAgIH0gZWxzZSBpZiAoIHN0YXRlID09IEJvZHkgJiYgcmVzcG9uc2VMaW5l WzBdID09ICczJyApIHsKCWNvbW1hbmQgPSAiREFUQSI7CglRU3RyaW5nIHNlcGVyYXRvciA9ICIi OwoJaWYgKG1lc3NhZ2VbbWVzc2FnZS5sZW5ndGgoKSAtIDFdICE9ICdcbicpCgkgICAgc2VwZXJh dG9yID0gIlxuIjsKCSp0IDw8IG1lc3NhZ2UgPDwgc2VwZXJhdG9yIDw8ICIuXHJcbiI7CglzdGF0 ZSA9IFN1Y2Nlc3M7CiAgICB9IGVsc2UgaWYgKCBzdGF0ZSA9PSBTdWNjZXNzICYmIHJlc3BvbnNl TGluZVswXSA9PSAnMicgKSB7CglRVGltZXI6OnNpbmdsZVNob3QoIDAsIHRoaXMsIFNJR05BTChz dWNjZXNzKCkpICk7CiAgICB9IGVsc2UgaWYgKCBzdGF0ZSA9PSBRdWl0ICYmIHJlc3BvbnNlTGlu ZVswXSA9PSAnMicgKSB7Cgljb21tYW5kID0gIlFVSVQiOwoJKnQgPDwgIlFVSVRcclxuIjsKCS8v IGhlcmUsIHdlIGp1c3QgY2xvc2UuCglzdGF0ZSA9IENsb3NlOwoJZW1pdCBzdGF0dXMoIHRyKCAi TWVzc2FnZSBzZW50IiApICk7CiAgICB9IGVsc2UgaWYgKCBzdGF0ZSA9PSBDbG9zZSApIHsKCS8v IHdlIGlnbm9yZSBpdAogICAgfSBlbHNlIHsKCXN0YXRlID0gQ2xvc2U7CiAgICB9CgogICAgcmVz cG9uc2UgPSAiIjsKCiAgICBpZiAoIHN0YXRlID09IENsb3NlICkgewoJZGVsZXRlIHQ7Cgl0ID0g MDsKCWRlbGV0ZSBzb2NrZXQ7Cglzb2NrZXQgPSAwOwoJUVRpbWVyOjpzaW5nbGVTaG90KCAwLCB0 aGlzLCBTTE9UKGRlbGV0ZU1lKCkpICk7CiAgICB9Cn0KCgp2b2lkIFNtdHA6OmRlbGV0ZU1lKCkK ewogICAgZGVsZXRlIHRoaXM7Cn0KCg== --------------Boundary-00=_C9A3H0OZWQL24VEZVGQO-- _______________________________________________ Kmail Developers mailing list Kmail@master.kde.org http://master.kde.org/mailman/listinfo/kmail