From kfm-devel Thu Oct 25 12:42:36 2001 From: Martijn Klingens Date: Thu, 25 Oct 2001 12:42:36 +0000 To: kfm-devel Subject: Please Review: CSS Media X-MARC-Message: https://marc.info/?l=kfm-devel&m=100401369131753 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--------------Boundary-00=_0ZHR9VZ36W86M5HXI9OZ" --------------Boundary-00=_0ZHR9VZ36W86M5HXI9OZ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Ok, this is hopefully the definitive patch to add CSS2 media support to KHTML. I applied all comments from Dirk regarding the previous patches: - Repeating loops are gone. - Unnecessary checks for null strings as well. - Default media type is "all" in the DOM and "screen" in the renderer. - Current media type is moved from the Doc to the View. - Current media type is not stored in the various style selector classes. Only in the CSSStyleSelectorList I had to store the media type internally because the Doc() value is more often than not a null pointer. - Some additional code cleanups. Dirk, Lars, please throughly review. Reviewing by others is also appreciated (hint :-). I will commit next monday or say if I hear no objections or approval. Earlier approval would be nice because it would allow me to switch to a full KDE 3 environment earlier... Martijn --------------Boundary-00=_0ZHR9VZ36W86M5HXI9OZ Content-Type: text/x-diff; charset="iso-8859-1"; name="media.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="media.diff" SW5kZXg6IGtodG1sdmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxp YnMva2h0bWwva2h0bWx2aWV3LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MTkKZGlmZiAt dSAtMyAtcCAtcjEuNDE5IGtodG1sdmlldy5jcHAKLS0tIGtodG1sdmlldy5jcHAJMjAwMS8xMC8y MiAyMDoxMzozMwkxLjQxOQorKysga2h0bWx2aWV3LmNwcAkyMDAxLzEwLzI1IDEyOjMzOjIxCkBA IC0xNzQsNiArMTc0LDggQEAgdm9pZCBLSFRNTFRvb2xUaXA6Om1heWJlVGlwKGNvbnN0IFFQb2lu dAogS0hUTUxWaWV3OjpLSFRNTFZpZXcoIEtIVE1MUGFydCAqcGFydCwgUVdpZGdldCAqcGFyZW50 LCBjb25zdCBjaGFyICpuYW1lKQogICAgIDogUVNjcm9sbFZpZXcoIHBhcmVudCwgbmFtZSwgV1Jl c2l6ZU5vRXJhc2UgfCBXUmVwYWludE5vRXJhc2UgKQogeworICAgIG1fbWVkaXVtID0gInNjcmVl biI7CisKICAgICBtX3BhcnQgPSBwYXJ0OwogICAgIGQgPSBuZXcgS0hUTUxWaWV3UHJpdmF0ZTsK ICAgICBRU2Nyb2xsVmlldzo6c2V0VlNjcm9sbEJhck1vZGUoZC0+dm1vZGUpOwpAQCAtODY3LDYg Kzg2OSwxNiBAQCBib29sIEtIVE1MVmlldzo6Z290b0xpbmtJbnRlcm5hbChib29sIGZvCiAgICAg cmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgS0hUTUxWaWV3OjpzZXRNZWRpYVR5cGUoIGNvbnN0IFFT dHJpbmcgJm1lZGl1bSApCit7CisgICAgbV9tZWRpdW0gPSBtZWRpdW07Cit9CisKK1FTdHJpbmcg S0hUTUxWaWV3OjptZWRpYVR5cGUoKQoreworICAgIHJldHVybiBtX21lZGl1bTsKK30KKwogdm9p ZCBLSFRNTFZpZXc6OnByaW50KCkKIHsKICAgICBpZighbV9wYXJ0LT54bWxEb2NJbXBsKCkpIHJl dHVybjsKQEAgLTg4NSw5ICs4OTcsMTEgQEAgdm9pZCBLSFRNTFZpZXc6OnByaW50KCkKIAogICAg ICAgICBRUGFpbnRlciAqcCA9IG5ldyBRUGFpbnRlcjsKICAgICAgICAgcC0+YmVnaW4oIHByaW50 ZXIgKTsKLQlraHRtbDo6c2V0UHJpbnRQYWludGVyKCBwICk7CisgICAgICAgIGtodG1sOjpzZXRQ cmludFBhaW50ZXIoIHAgKTsKIAogICAgICAgICBtX3BhcnQtPnhtbERvY0ltcGwoKS0+c2V0UGFp bnREZXZpY2UoIHByaW50ZXIgKTsKKyAgICAgICAgUVN0cmluZyBvbGRNZWRpYVR5cGUgPSBtZWRp YVR5cGUoKTsKKyAgICAgICAgc2V0TWVkaWFUeXBlKCAicHJpbnQiICk7CiAKICAgICAgICAgUVBh aW50RGV2aWNlTWV0cmljcyBtZXRyaWNzKCBwcmludGVyICk7CiAKQEAgLTk1NCw3ICs5NjgsOCBA QCB2b2lkIEtIVE1MVmlldzo6cHJpbnQoKQogCiAgICAgICAgIC8vIGFuZCBub3cgcmVzZXQgdGhl IGxheW91dCB0byB0aGUgdXN1YWwgb25lLi4uCiAgICAgICAgIHJvb3QtPnNldFByaW50aW5nTW9k ZShmYWxzZSk7Ci0Ja2h0bWw6OnNldFByaW50UGFpbnRlciggMCApOworICAgICAgICBraHRtbDo6 c2V0UHJpbnRQYWludGVyKCAwICk7CisgICAgICAgIHNldE1lZGlhVHlwZSggb2xkTWVkaWFUeXBl ICk7CiAgICAgICAgIG1fcGFydC0+eG1sRG9jSW1wbCgpLT5zZXRQYWludERldmljZSggdGhpcyAp OwogICAgICAgICBtX3BhcnQtPnNldEZvbnRTaXplcyhvbGRTaXplcyk7CiAgICAgICAgIG1fcGFy dC0+eG1sRG9jSW1wbCgpLT5hcHBseUNoYW5nZXMoKTsKSW5kZXg6IGtodG1sdmlldy5oCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL2todG1sdmlldy5oLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjE0NQpkaWZmIC11IC0zIC1wIC1yMS4xNDUga2h0bWx2aWV3LmgK LS0tIGtodG1sdmlldy5oCTIwMDEvMTAvMDggMDE6MTM6NTMJMS4xNDUKKysrIGtodG1sdmlldy5o CTIwMDEvMTAvMjUgMTI6MzM6MjEKQEAgLTE1MSw2ICsxNTEsMTkgQEAgcHVibGljOgogCiAgICAg dm9pZCBsYXlvdXQoYm9vbCBmb3JjZSA9IGZhbHNlKTsKIAorICAgIC8qKgorICAgICAqIEdldC9z ZXQgdGhlIENTUyBNZWRpYSBUeXBlLgorICAgICAqCisgICAgICogTWVkaWEgdHlwZSBpcyBzZXQg dG8gInNjcmVlbiIgZm9yIG9uLXNjcmVlbiByZW5kZXJpbmcgYW5kICJwcmludCIKKyAgICAgKiBk dXJpbmcgcHJpbnRpbmcuIE90aGVyIG1lZGlhIHR5cGVzIGxhY2sgdGhlIHByb3BlciBzdXBwb3J0 IGluIHRoZQorICAgICAqIHJlbmRlcmVyIGFuZCBhcmUgbm90IGFjdGl2YXRlZC4gVGhlIERPTSB0 cmVlIGFuZCB0aGUgcGFyc2VyIGl0c2VsZiwKKyAgICAgKiBob3dldmVyLCBwcm9wZXJseSBoYW5k bGUgb3RoZXIgbWVkaWEgdHlwZXMuIFRvIG1ha2UgdGhlbSBhY3R1YWxseSB3b3JrCisgICAgICog eW91IG9ubHkgbmVlZCB0byBlbmFibGUgdGhlIG1lZGlhIHR5cGUgaW4gdGhlIHZpZXcgYW5kIGlm IG5lY2Vzc2FyeQorICAgICAqIGFkZCB0aGUgbWVkaWEgdHlwZSBkZXBlbmRlbnQgY2hhbmdlcyB0 byB0aGUgcmVuZGVyZXIuCisgICAgICovCisgICAgdm9pZCBzZXRNZWRpYVR5cGUoIGNvbnN0IFFT dHJpbmcgJm1lZGl1bSApOworICAgIFFTdHJpbmcgbWVkaWFUeXBlKCk7CisKIHNpZ25hbHM6CiAg ICAgdm9pZCBjbGVhcmVkKCk7CiAKQEAgLTIyMyw2ICsyMzYsOCBAQCBwcml2YXRlOgogCiAgICAg S0hUTUxQYXJ0ICptX3BhcnQ7CiAgICAgS0hUTUxWaWV3UHJpdmF0ZSAqZDsKKworICAgIFFTdHJp bmcgbV9tZWRpdW07ICAgLy8gbWVkaWEgdHlwZQogfTsKIAogI2VuZGlmCkluZGV4OiBjc3MvY3Nz X3J1bGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRt bC9jc3MvY3NzX3J1bGVpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMwpkaWZmIC11 IC0zIC1wIC1yMS4yMyBjc3NfcnVsZWltcGwuY3BwCi0tLSBjc3MvY3NzX3J1bGVpbXBsLmNwcAky MDAxLzEwLzIyIDE5OjI5OjQ4CTEuMjMKKysrIGNzcy9jc3NfcnVsZWltcGwuY3BwCTIwMDEvMTAv MjUgMTI6MzM6MjEKQEAgLTEwOCwxMiArMTA4LDE2IEBAIENTU1N0eWxlRGVjbGFyYXRpb25JbXBs ICpDU1NGb250RmFjZVJ1bGUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ1NTSW1wb3J0UnVs ZUltcGw6OkNTU0ltcG9ydFJ1bGVJbXBsKFN0eWxlQmFzZUltcGwgKnBhcmVudCwgY29uc3QgRE9N OjpET01TdHJpbmcgJmhyZWYsCi0JCQkJICAgICBNZWRpYUxpc3RJbXBsICptZWRpYSkKK0NTU0lt cG9ydFJ1bGVJbXBsOjpDU1NJbXBvcnRSdWxlSW1wbCggU3R5bGVCYXNlSW1wbCAqcGFyZW50LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBET006OkRPTVN0cmlu ZyAmaHJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9N OjpET01TdHJpbmcgJm1lZGlhICkKICAgICA6IENTU1J1bGVJbXBsKHBhcmVudCkKIHsKICAgICBt X3R5cGUgPSBDU1NSdWxlOjpJTVBPUlRfUlVMRTsKLSAgICBtX2xzdE1lZGlhID0gbWVkaWE7CisK KyAgICBtX2xzdE1lZGlhID0gbmV3IE1lZGlhTGlzdEltcGwoIHRoaXMsIG1lZGlhICk7CisgICAg bV9sc3RNZWRpYS0+cmVmKCk7CisgICAgCiAgICAgbV9zdHJIcmVmID0gaHJlZjsKICAgICBtX3N0 eWxlU2hlZXQgPSAwOwogCkBAIC0xODQsMjEgKzE4OCw0MiBAQCBib29sIENTU0ltcG9ydFJ1bGVJ bXBsOjppc0xvYWRpbmcoKQogCiAKIENTU01lZGlhUnVsZUltcGw6OkNTU01lZGlhUnVsZUltcGwo U3R5bGVCYXNlSW1wbCAqcGFyZW50KQotICAgIDogQ1NTUnVsZUltcGwocGFyZW50KQorICAgIDog ICBDU1NSdWxlSW1wbCggcGFyZW50ICkKK3sKKyAgICBtX3R5cGUgPSBDU1NSdWxlOjpNRURJQV9S VUxFOworICAgIG1fbHN0TWVkaWEgPSAwOworICAgIG1fbHN0Q1NTUnVsZXMgPSBuZXcgQ1NTUnVs ZUxpc3RJbXBsKCk7CisgICAgbV9sc3RDU1NSdWxlcy0+cmVmKCk7Cit9CisKK0NTU01lZGlhUnVs ZUltcGw6OkNTU01lZGlhUnVsZUltcGwoIFN0eWxlQmFzZUltcGwgKnBhcmVudCwgY29uc3QgUUNo YXIgKiZjdXJQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNoYXIgKmVu ZFAsIGNvbnN0IERPTTo6RE9NU3RyaW5nICZtZWRpYSApCis6ICAgQ1NTUnVsZUltcGwoIHBhcmVu dCApCiB7CiAgICAgbV90eXBlID0gQ1NTUnVsZTo6TUVESUFfUlVMRTsKLSAgICBtX2xzdE1lZGlh ID0gbmV3IE1lZGlhTGlzdEltcGwoIHRoaXMgKTsKKyAgICBtX2xzdE1lZGlhID0gbmV3IE1lZGlh TGlzdEltcGwoIHRoaXMsIG1lZGlhICk7CiAgICAgbV9sc3RNZWRpYS0+cmVmKCk7CiAgICAgbV9s c3RDU1NSdWxlcyA9IG5ldyBDU1NSdWxlTGlzdEltcGwoKTsKICAgICBtX2xzdENTU1J1bGVzLT5y ZWYoKTsKKworICAgIC8vIFBhcnNlIENTUyBkYXRhCisgICAgd2hpbGUoIGN1clAgPCBlbmRQICkK KyAgICB7ICAgCisgICAgICAgIC8va2REZWJ1ZyggNjA4MCApIDw8ICJTdHlsZSBydWxlOiAnIiA8 PCBRU3RyaW5nKCBjdXJQLCBlbmRQIC0gY3VyUCApCisgICAgICAgIC8vICAgICAgICAgICAgICAg IDw8ICInIiA8PCBlbmRsOworICAgICAgICBDU1NSdWxlSW1wbCAqcnVsZSA9IHBhcnNlU3R5bGVS dWxlKCBjdXJQLCBlbmRQICk7CisgICAgICAgIHJ1bGUtPnJlZigpOworICAgICAgICBhcHBlbmRS dWxlKCBydWxlICk7CisgICAgICAgIHdoaWxlKCBjdXJQIDwgZW5kUCAmJiAqY3VyUCA9PSBRQ2hh ciggJyAnICkgKQorICAgICAgICAgICAgY3VyUCsrOworICAgIH0KIH0KIAogQ1NTTWVkaWFSdWxl SW1wbDo6fkNTU01lZGlhUnVsZUltcGwoKQogewogICAgIGlmKCBtX2xzdE1lZGlhICkKICAgICAg ICAgbV9sc3RNZWRpYS0+ZGVyZWYoKTsKLSAgICBpZiggbV9sc3RDU1NSdWxlcyApCi0gICAgICAg IG1fbHN0Q1NTUnVsZXMtPmRlcmVmKCk7CisgICAgbV9sc3RDU1NSdWxlcy0+ZGVyZWYoKTsKIH0K IAogTWVkaWFMaXN0SW1wbCAqQ1NTTWVkaWFSdWxlSW1wbDo6bWVkaWEoKSBjb25zdApAQCAtMjEx LDYgKzIzNiwxNCBAQCBDU1NSdWxlTGlzdEltcGwgKkNTU01lZGlhUnVsZUltcGw6OmNzc1J1CiAg ICAgcmV0dXJuIG1fbHN0Q1NTUnVsZXM7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgQ1NTTWVkaWFSdWxl SW1wbDo6YXBwZW5kUnVsZSggQ1NTUnVsZUltcGwgKnJ1bGUgKQoreworICAgIGlmKCBydWxlICkK KyAgICAgICAgcmV0dXJuIG1fbHN0Q1NTUnVsZXMtPmluc2VydFJ1bGUoIHJ1bGUsIG1fbHN0Q1NT UnVsZXMtPmxlbmd0aCgpICk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKwogdW5z aWduZWQgbG9uZyBDU1NNZWRpYVJ1bGVJbXBsOjppbnNlcnRSdWxlKCBjb25zdCBET01TdHJpbmcg JnJ1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGxvbmcgaW5kZXggKQogewpAQCAtMjE4LDEyICsyNTEsOSBAQCB1bnNpZ25lZCBsb25nIENT U01lZGlhUnVsZUltcGw6Omluc2VydFJ1CiAgICAgQ1NTUnVsZUltcGwgKm5ld1J1bGUgPSBwYXJz ZVJ1bGUoIGN1clAsIGN1clAgKyBydWxlLmxlbmd0aCgpICk7CiAKICAgICBpZiggbmV3UnVsZSAp Ci0gICAgewotICAgICAgICBuZXdSdWxlLT5yZWYoKTsKICAgICAgICAgcmV0dXJuIG1fbHN0Q1NT UnVsZXMtPmluc2VydFJ1bGUoIG5ld1J1bGUsIGluZGV4ICk7Ci0gICAgfQotICAgIGVsc2UKLSAg ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBDU1NNZWRpYVJ1bGVJ bXBsOjpkZWxldGVSdWxlKCB1bnNpZ25lZCBsb25nIGluZGV4ICkKQEAgLTIzMSw2ICsyNjEsMTMg QEAgdm9pZCBDU1NNZWRpYVJ1bGVJbXBsOjpkZWxldGVSdWxlKCB1bnNpZwogICAgIG1fbHN0Q1NT UnVsZXMtPmRlbGV0ZVJ1bGUoIGluZGV4ICk7CiB9CiAKK0NTU1J1bGVMaXN0SW1wbDo6fkNTU1J1 bGVMaXN0SW1wbCgpCit7CisgICAgQ1NTUnVsZUltcGwqIHJ1bGU7CisgICAgd2hpbGUgKCAoIHJ1 bGUgPSBtX2xzdENTU1J1bGVzLnRha2UoIDAgKSApICkKKyAgICAgICAgcnVsZS0+ZGVyZWYoKTsK K30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIENTU1BhZ2VSdWxlSW1wbDo6Q1NTUGFnZVJ1 bGVJbXBsKFN0eWxlQmFzZUltcGwgKnBhcmVudCkKQEAgLTM1MywyMiArMzkwLDIzIEBAIENTU1J1 bGVJbXBsICpDU1NSdWxlTGlzdEltcGw6Oml0ZW0gKCB1bnMKIAogdm9pZCBDU1NSdWxlTGlzdElt cGw6OmRlbGV0ZVJ1bGUgKCB1bnNpZ25lZCBsb25nIGluZGV4ICkKIHsKLSAgICBDU1NSdWxlSW1w bCAqcnVsZSA9IG1fbHN0Q1NTUnVsZXMuYXQoIGluZGV4ICk7CisgICAgQ1NTUnVsZUltcGwgKnJ1 bGUgPSBtX2xzdENTU1J1bGVzLnRha2UoIGluZGV4ICk7CiAgICAgaWYoIHJ1bGUgKQotICAgIHsK LSAgICAgICAgbV9sc3RDU1NSdWxlcy5yZW1vdmUoIGluZGV4ICk7CiAgICAgICAgIHJ1bGUtPmRl cmVmKCk7Ci0gICAgfQorICAgIGVsc2UKKyAgICAgICAgOyAvLyAjIyMgVGhyb3cgSU5ERVhfU0la RV9FUlIgZXhjZXB0aW9uIGhlcmUgKFRPRE8pCiB9CiAKIHVuc2lnbmVkIGxvbmcgQ1NTUnVsZUxp c3RJbXBsOjppbnNlcnRSdWxlKCBDU1NSdWxlSW1wbCAqcnVsZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGluZGV4ICkKIHsKLSAgICBp ZiggbV9sc3RDU1NSdWxlcy5pbnNlcnQoIGluZGV4LCBydWxlICkgKQorICAgIGlmKCBydWxlICYm IG1fbHN0Q1NTUnVsZXMuaW5zZXJ0KCBpbmRleCwgcnVsZSApICkKKyAgICB7CisgICAgICAgIHJ1 bGUtPnJlZigpOwogICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgZWxzZQotICAgICAgICBydWxl LT5kZXJlZigpOyAgICAvLyBpbnNlcnRpb24gZmFpbGVkCi0KKyAgICB9CisgICAgICAgCisgICAg Ly8gIyMjIFNob3VsZCB0aHJvdyBJTkRFWF9TSVpFX0VSUiBleGNlcHRpb24gaW5zdGVhZCEgKFRP RE8pCiAgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IGNzcy9jc3NfcnVsZWltcGwuaAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raHRtbC9jc3MvY3NzX3J1bGVpbXBsLmgs dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMKZGlmZiAtdSAtMyAtcCAtcjEuMTMgY3NzX3J1bGVp bXBsLmgKLS0tIGNzcy9jc3NfcnVsZWltcGwuaAkyMDAxLzEwLzA3IDEzOjEyOjE5CTEuMTMKKysr IGNzcy9jc3NfcnVsZWltcGwuaAkyMDAxLzEwLzI1IDEyOjMzOjIxCkBAIC05OSw3ICs5OSw4IEBA IHByb3RlY3RlZDoKIGNsYXNzIENTU0ltcG9ydFJ1bGVJbXBsIDogcHVibGljIGtodG1sOjpDYWNo ZWRPYmplY3RDbGllbnQsIHB1YmxpYyBDU1NSdWxlSW1wbAogewogcHVibGljOgotICAgIENTU0lt cG9ydFJ1bGVJbXBsKFN0eWxlQmFzZUltcGwgKnBhcmVudCwgY29uc3QgRE9NOjpET01TdHJpbmcg JmhyZWYsIE1lZGlhTGlzdEltcGwgKm1lZGlhID0gMCk7CisgICAgQ1NTSW1wb3J0UnVsZUltcGwo IFN0eWxlQmFzZUltcGwgKnBhcmVudCwgY29uc3QgRE9NOjpET01TdHJpbmcgJmhyZWYsCisgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTTo6RE9NU3RyaW5nICZtZWRpYSApOwogCiAgICAg dmlydHVhbCB+Q1NTSW1wb3J0UnVsZUltcGwoKTsKIApAQCAtMTI4LDcgKzEyOSw5IEBAIGNsYXNz IENTU1J1bGVMaXN0OwogY2xhc3MgQ1NTTWVkaWFSdWxlSW1wbCA6IHB1YmxpYyBDU1NSdWxlSW1w bAogewogcHVibGljOgotICAgIENTU01lZGlhUnVsZUltcGwoU3R5bGVCYXNlSW1wbCAqcGFyZW50 KTsKKyAgICBDU1NNZWRpYVJ1bGVJbXBsKCBTdHlsZUJhc2VJbXBsICpwYXJlbnQgKTsKKyAgICBD U1NNZWRpYVJ1bGVJbXBsKCBTdHlsZUJhc2VJbXBsICpwYXJlbnQsIGNvbnN0IFFDaGFyIComY3Vy UCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ2hhciAqIGVuZFAsIGNvbnN0IERPTTo6 RE9NU3RyaW5nICZtZWRpYSApOwogCiAgICAgdmlydHVhbCB+Q1NTTWVkaWFSdWxlSW1wbCgpOwog CkBAIC0xNDAsNyArMTQzLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYVJ1 bGUoKSB7IHJldHVybiB0cnVlOyB9CiBwcm90ZWN0ZWQ6CiAgICAgTWVkaWFMaXN0SW1wbCAqbV9s c3RNZWRpYTsKLQlDU1NSdWxlTGlzdEltcGwgKm1fbHN0Q1NTUnVsZXM7CisgICAgQ1NTUnVsZUxp c3RJbXBsICptX2xzdENTU1J1bGVzOworCisgICAgLyogTm90IHBhcnQgb2YgdGhlIERPTSAqLwor ICAgIHVuc2lnbmVkIGxvbmcgYXBwZW5kUnVsZSggQ1NTUnVsZUltcGwgKnJ1bGUgKTsKIH07CiAK IApAQCAtMjAxLDMwICsyMDcsMjUgQEAgcHVibGljOgogCiAgICAgfkNTU1Vua25vd25SdWxlSW1w bCgpOwogCi0gICAgIHZpcnR1YWwgYm9vbCBpc1Vua25vd25SdWxlKCkgeyByZXR1cm4gdHJ1ZTsg fQorICAgIHZpcnR1YWwgYm9vbCBpc1Vua25vd25SdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQogfTsK IAorCiBjbGFzcyBDU1NSdWxlTGlzdEltcGwgOiBwdWJsaWMgRG9tU2hhcmVkCiB7CiBwdWJsaWM6 CiAgICAgQ1NTUnVsZUxpc3RJbXBsKCk7CisgICAgfkNTU1J1bGVMaXN0SW1wbCgpOwogCiAgICAg dW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdDsKICAgICBDU1NSdWxlSW1wbCAqaXRlbSAoIHVu c2lnbmVkIGxvbmcgaW5kZXggKTsKICAgIAotICAgIC8qKgotICAgICAqIEludGVybmFsIEFQSSwg X05PVF8gdG8gYmUgZXhwb3NlZCBvdXRzaWRlISAoVXNlZCBieSBDU1NNZWRpYVJ1bGVJbXBsKQot ICAgICAqLworICAgIC8qIG5vdCBwYXJ0IG9mIHRoZSBET00gKi8KICAgICB1bnNpZ25lZCBsb25n IGluc2VydFJ1bGUgKCBDU1NSdWxlSW1wbCAqcnVsZSwgdW5zaWduZWQgbG9uZyBpbmRleCApOwog ICAgIHZvaWQgZGVsZXRlUnVsZSAoIHVuc2lnbmVkIGxvbmcgaW5kZXggKTsKICAgICAKIHByb3Rl Y3RlZDoKLSNpZiBRVF9WRVJTSU9OIDwgMzAwCiAgICAgUUxpc3Q8Q1NTUnVsZUltcGw+IG1fbHN0 Q1NTUnVsZXM7Ci0jZWxzZQotICAgIFFQdHJMaXN0PENTU1J1bGVJbXBsPiBtX2xzdENTU1J1bGVz OwotI2VuZGlmCi0KIH07CiAKIH07IC8vIG5hbWVzcGFjZQpJbmRleDogY3NzL2Nzc19zdHlsZXNo ZWV0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwv Y3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzIKZGlm ZiAtdSAtMyAtcCAtcjEuMzIgY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAotLS0gY3NzL2Nzc19zdHls ZXNoZWV0aW1wbC5jcHAJMjAwMS8wOS8yNCAxNTozMTo1OAkxLjMyCisrKyBjc3MvY3NzX3N0eWxl c2hlZXRpbXBsLmNwcAkyMDAxLzEwLzI1IDEyOjMzOjIxCkBAIC0xMTksNiArMTE5LDE1IEBAIE1l ZGlhTGlzdEltcGwgKlN0eWxlU2hlZXRJbXBsOjptZWRpYSgpIGMKICAgICByZXR1cm4gbV9tZWRp YTsKIH0KIAordm9pZCBTdHlsZVNoZWV0SW1wbDo6c2V0TWVkaWEoIE1lZGlhTGlzdEltcGwgKm1l ZGlhICkKK3sKKyAgICBpZiggbV9tZWRpYSApCisgICAgICAgIG1fbWVkaWEtPmRlcmVmKCk7Cisg ICAgbV9tZWRpYSA9IG1lZGlhOworICAgIGlmKCBtX21lZGlhICkKKyAgICAgICAgbV9tZWRpYS0+ cmVmKCk7ICAgIAorfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKQEAgLTM2MiwxNSArMzcxLDM0 IEBAIE1lZGlhTGlzdEltcGw6Ok1lZGlhTGlzdEltcGwoQ1NTU3R5bGVTaGUKIHsKIH0KIAorTWVk aWFMaXN0SW1wbDo6TWVkaWFMaXN0SW1wbCggQ1NTU3R5bGVTaGVldEltcGwgKnBhcmVudFNoZWV0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZtZWRpYSAp CisgICAgOiBTdHlsZUJhc2VJbXBsKCBwYXJlbnRTaGVldCApCit7CisgICAgc2V0TWVkaWFUZXh0 KCBtZWRpYSApOworfQorCiBNZWRpYUxpc3RJbXBsOjpNZWRpYUxpc3RJbXBsKENTU1J1bGVJbXBs ICpwYXJlbnRSdWxlKQogICAgIDogU3R5bGVCYXNlSW1wbChwYXJlbnRSdWxlKQogewogfQogCitN ZWRpYUxpc3RJbXBsOjpNZWRpYUxpc3RJbXBsKCBDU1NSdWxlSW1wbCAqcGFyZW50UnVsZSwgY29u c3QgRE9NU3RyaW5nICZtZWRpYSApCisgICAgOiBTdHlsZUJhc2VJbXBsKHBhcmVudFJ1bGUpCit7 CisgICAgc2V0TWVkaWFUZXh0KCBtZWRpYSApOworfQorCiBNZWRpYUxpc3RJbXBsOjp+TWVkaWFM aXN0SW1wbCgpCiB7CiB9CiAKK2Jvb2wgTWVkaWFMaXN0SW1wbDo6Y29udGFpbnMoIGNvbnN0IERP TVN0cmluZyAmbWVkaXVtICkKK3sKKyAgICByZXR1cm4gbV9sc3RNZWRpYS5jb3VudCgpID09IDAg fHwgbV9sc3RNZWRpYS5jb250YWlucyggbWVkaXVtICkgfHwKKyAgICAgICAgICAgIG1fbHN0TWVk aWEuY29udGFpbnMoICJhbGwiICk7Cit9CisKIENTU1N0eWxlU2hlZXRJbXBsICpNZWRpYUxpc3RJ bXBsOjpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QKIHsKICAgICBpZiggbV9wYXJlbnQtPmlzQ1NT U3R5bGVTaGVldCgpICkgcmV0dXJuIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsICo+KG1f cGFyZW50KTsKQEAgLTQyNCw1ICs0NTIsOSBAQCB2b2lkIE1lZGlhTGlzdEltcGw6OnNldE1lZGlh VGV4dChjb25zdCBECiAgICAgUVN0cmluZyB2YWwgPSB2YWx1ZS5zdHJpbmcoKTsKICAgICBRU3Ry aW5nTGlzdCBsaXN0ID0gUVN0cmluZ0xpc3Q6OnNwbGl0KCAnLCcsIHZhbHVlLnN0cmluZygpICk7 CiAgICAgZm9yICggUVN0cmluZ0xpc3Q6Okl0ZXJhdG9yIGl0ID0gbGlzdC5iZWdpbigpOyBpdCAh PSBsaXN0LmVuZCgpOyArK2l0ICkKLSAgICAgICAgbV9sc3RNZWRpYS5hcHBlbmQoIERPTVN0cmlu ZyggKCppdCkuc3RyaXBXaGl0ZVNwYWNlKCkgKSApOworICAgIHsKKyAgICAgICAgRE9NU3RyaW5n IG1lZGl1bSA9ICgqaXQpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICBpZiggbWVkaXVtICE9 ICIiICkKKyAgICAgICAgICAgIG1fbHN0TWVkaWEuYXBwZW5kKCBtZWRpdW0gKTsKKyAgICB9CiB9 CkluZGV4OiBjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hv bWUva2RlL2tkZWxpYnMva2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjE5CmRpZmYgLXUgLTMgLXAgLXIxLjE5IGNzc19zdHlsZXNoZWV0aW1wbC5o Ci0tLSBjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgJMjAwMS8xMC8yMiAxOToyOTo0OAkxLjE5Cisr KyBjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgJMjAwMS8xMC8yNSAxMjozMzoyMQpAQCAtNzMsNiAr NzMsNyBAQCBwdWJsaWM6CiAgICAgRE9NOjpET01TdHJpbmcgaHJlZigpIGNvbnN0OwogICAgIERP TTo6RE9NU3RyaW5nIHRpdGxlKCkgY29uc3Q7CiAgICAgTWVkaWFMaXN0SW1wbCAqbWVkaWEoKSBj b25zdDsKKyAgICB2b2lkIHNldE1lZGlhKCBNZWRpYUxpc3RJbXBsICptZWRpYSApOwogCiBwcm90 ZWN0ZWQ6CiAgICAgRE9NOjpOb2RlSW1wbCAqbV9wYXJlbnROb2RlOwpAQCAtMTQwLDggKzE0MSwx MSBAQCBwdWJsaWM6CiBjbGFzcyBNZWRpYUxpc3RJbXBsIDogcHVibGljIFN0eWxlQmFzZUltcGwK IHsKIHB1YmxpYzoKLSAgICBNZWRpYUxpc3RJbXBsKENTU1N0eWxlU2hlZXRJbXBsICpwYXJlbnRT aGVldCk7Ci0gICAgTWVkaWFMaXN0SW1wbChDU1NSdWxlSW1wbCAqcGFyZW50UnVsZSk7CisgICAg TWVkaWFMaXN0SW1wbCggQ1NTU3R5bGVTaGVldEltcGwgKnBhcmVudFNoZWV0ICk7CisgICAgTWVk aWFMaXN0SW1wbCggQ1NTU3R5bGVTaGVldEltcGwgKnBhcmVudFNoZWV0LAorICAgICAgICAgICAg ICAgICAgIGNvbnN0IERPTTo6RE9NU3RyaW5nICZtZWRpYSApOworICAgIE1lZGlhTGlzdEltcGwo IENTU1J1bGVJbXBsICpwYXJlbnRSdWxlICk7CisgICAgTWVkaWFMaXN0SW1wbCggQ1NTUnVsZUlt cGwgKnBhcmVudFJ1bGUsIGNvbnN0IERPTTo6RE9NU3RyaW5nICZtZWRpYSApOwogCiAgICAgdmly dHVhbCB+TWVkaWFMaXN0SW1wbCgpOwogCkBAIC0xNTYsNiArMTYwLDE0IEBAIHB1YmxpYzoKIAog ICAgIERPTTo6RE9NU3RyaW5nIG1lZGlhVGV4dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0TWVkaWFU ZXh0KGNvbnN0IERPTTo6RE9NU3RyaW5nICZ2YWx1ZSk7CisKKyAgICAvKioKKyAgICAgKiBDaGVj ayBpZiB0aGUgbGlzdCBjb250YWlucyBlaXRoZXIgdGhlIHJlcXVlc3RlZCBtZWRpdW0sIG9yIHRo ZQorICAgICAqIGNhdGNoLWFsbCAiYWxsIiBtZWRpYSB0eXBlLiBSZXR1cm5zIHRydWUgd2hlbiBm b3VuZCwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBfTk9UXyBwYXJ0IG9mIHRoZSBE T00hCisgICAgICovCisgICAgYm9vbCBjb250YWlucyggY29uc3QgRE9NOjpET01TdHJpbmcgJm1l ZGl1bSApOwogCiBwcm90ZWN0ZWQ6CiAgICAgUVZhbHVlTGlzdDxET006OkRPTVN0cmluZz4gbV9s c3RNZWRpYTsKSW5kZXg6IGNzcy9jc3NwYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9o b21lL2tkZS9rZGVsaWJzL2todG1sL2Nzcy9jc3NwYXJzZXIuY3BwLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjE3MQpkaWZmIC11IC0zIC1wIC1yMS4xNzEgY3NzcGFyc2VyLmNwcAotLS0gY3NzL2Nz c3BhcnNlci5jcHAJMjAwMS8xMC8yNCAxODoyOToyNAkxLjE3MQorKysgY3NzL2Nzc3BhcnNlci5j cHAJMjAwMS8xMC8yNSAxMjozMzoyMQpAQCAtMjM2LDEzICsyMzYsMTMgQEAgU3R5bGVCYXNlSW1w bDo6cGFyc2VBdFJ1bGUoY29uc3QgUUNoYXIgKgogICAgICAgICBpZigqY3VyUCAhPSAnOycpCiAg ICAgICAgICAgICBjdXJQID0gcGFyc2VUb0NoYXIoc3RhcnRQLCBlbmRQLCAnOycsIGZhbHNlLCB0 cnVlKTsKICAgICAgICAgaWYoIWN1clApIHJldHVybiAwOwotICAgICAgICBRU3RyaW5nIG1lZGlh KHN0YXJ0UCwgY3VyUCAtIHN0YXJ0UCk7Ci0JbWVkaWEgPSBtZWRpYS5zdHJpcFdoaXRlU3BhY2Uo KTsKKyAgICAgICAgCisgICAgICAgIERPTVN0cmluZyBtZWRpYUxpc3QgPSBET01TdHJpbmcoIHN0 YXJ0UCwgY3VyUCAtIHN0YXJ0UCk7CiAgICAgICAgIC8vICMjIyBjaGVjayBpZiBhdCB0aGUgYmVn aW5uaW5nIG9mIHRoZSBzdHlsZXNoZWV0IChubyBzdHlsZSBydWxlCiAgICAgICAgIC8vICAgICBi ZWZvcmUgdGhlIGltcG9ydCBydWxlKQogI2lmZGVmIENTU19ERUJVRwotICAgICAgICBrZERlYnVn KCA2MDgwICkgPDwgImF0IHJ1bGU6IHVybCA9ICciIDw8IHVybC5zdHJpbmcoKQotICAgICAgICAg ICAgICAgICAgICAgICAgPDwgIicgbWVkaWEgPSAnIiA8PCBtZWRpYSA8PCAiJyI8PCBlbmRsOwor ICAgICAgICBrZERlYnVnKCA2MDgwICkgPDwgImltcG9ydCBydWxlID0gIiA8PCB1cmwuc3RyaW5n KCkgPDwgIiwgbWVkaWFMaXN0ID0gIgorICAgICAgICAgICAgICAgICAgICAgICAgPDwgbWVkaWFM aXN0LnN0cmluZyA8PCBlbmRsOwogI2VuZGlmCiAgICAgICAgIC8vIGlnbm9yZSBibG9jayBmb2xs b3dpbmcgQGltcG9ydCBydWxlCiAgICAgICAgIGlmKCAqY3VyUCA9PSAneycgKSB7CkBAIC0yNTEs MTIgKzI1MSw5IEBAIFN0eWxlQmFzZUltcGw6OnBhcnNlQXRSdWxlKGNvbnN0IFFDaGFyICoKICAg ICAgICAgICAgIGlmKGN1clApCiAgICAgICAgICAgICAgICAgY3VyUCsrOwogICAgICAgICB9Ci0g ICAgICAgIC8vICMjIyBvbmx5IG1lZGlhPSIiLCAic2NyZWVuIGFuZCAiYWxsIiBhcmUgaW1wb3J0 ZWQgZm9yIHRoZSBtb21lbnQuLi4KLSAgICAgICAgLy8gIyMjIGFkZCBhdCBsZWFzdCAicHJpbnQi IGhlcmUgb25jZSB0aGUgTWVkaWFMaXN0IGNsYXNzIGlzIGltcGxlbWVudGVkCi0gICAgICAgIGlm KCAhbWVkaWEuaXNFbXB0eSgpICYmICEobWVkaWEuY29udGFpbnMoImFsbCIpIHx8IG1lZGlhLmNv bnRhaW5zKCJzY3JlZW4iKSApICkKLSAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZigh dGhpcy0+aXNDU1NTdHlsZVNoZWV0KCkpIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbmV3IENT U0ltcG9ydFJ1bGVJbXBsKHRoaXMsIHVybCwgMCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4g bmV3IENTU0ltcG9ydFJ1bGVJbXBsKCB0aGlzLCB1cmwsIG1lZGlhTGlzdCApOwogICAgIH0KICAg ICBlbHNlIGlmKHJ1bGUgPT0gImNoYXJzZXQiKQogICAgIHsKQEAgLTI4NCw3ICsyODEsNyBAQCBT dHlsZUJhc2VJbXBsOjpwYXJzZUF0UnVsZShjb25zdCBRQ2hhciAqCiAgICAgICAgIGN1clAgPSBw YXJzZVRvQ2hhcihzdGFydFAsIGVuZFAsICd7JywgZmFsc2UpOwogCS8vcURlYnVnKCJtZWRpYUxp c3QgPSAnJXMnIiwgbWVkaWFMaXN0LmxhdGluMSgpICk7CiAgICAgICAgIGlmICggIWN1clAgfHwg Y3VyUCA+PSBlbmRQICkgcmV0dXJuIDA7Ci0JUVN0cmluZyBtZWRpYUxpc3QgPSBRU3RyaW5nKCBz dGFydFAsIGN1clAgLSBzdGFydFApOworCURPTVN0cmluZyBtZWRpYUxpc3QgPSBET01TdHJpbmco IHN0YXJ0UCwgY3VyUCAtIHN0YXJ0UCk7CiAgICAgICAgIGN1clArKzsKIAlzdGFydFAgPSBjdXJQ OwogCWlmICggY3VyUCA+PSBlbmRQICkgcmV0dXJuIDA7CkBAIC0yOTIsMTAgKzI4OSwxMCBAQCBT dHlsZUJhc2VJbXBsOjpwYXJzZUF0UnVsZShjb25zdCBRQ2hhciAqCiAJaWYgKCAhY3VyUCB8fCBz dGFydFAgPj0gY3VyUCApCiAJICAgIHJldHVybiAwOwogI2lmZGVmIENTU19ERUJVRwotICAgICAg ICBrZERlYnVnKCA2MDgwICkgPDwgIm1lZGlhIHJ1bGUgPSAiIDw8IFFTdHJpbmcoc3RhcnRQLCBj dXJQIC0gc3RhcnRQKSA8PCBlbmRsOworICAgICAgICBrZERlYnVnKCA2MDgwICkgPDwgIm1lZGlh IHJ1bGUgPSAiIDw8IFFTdHJpbmcoc3RhcnRQLCBjdXJQIC0gc3RhcnRQKQorICAgICAgICAgICAg ICAgICAgICAgICAgPDwgIiwgbWVkaWFMaXN0ID0gIiA8PCBtZWRpYUxpc3Quc3RyaW5nKCkgPDwg ZW5kbDsKICNlbmRpZgotCWlmICggbWVkaWFMaXN0LmNvbnRhaW5zKCAic2NyZWVuIiApIHx8IG1l ZGlhTGlzdC5jb250YWlucyggImFsbCIgKSApCi0JICAgIHJldHVybiBwYXJzZVN0eWxlUnVsZShz dGFydFAsIGN1clApOworICAgICAgICByZXR1cm4gbmV3IENTU01lZGlhUnVsZUltcGwoIHRoaXMs IHN0YXJ0UCwgY3VyUCwgbWVkaWFMaXN0ICk7CiAgICAgfQogICAgIGVsc2UgaWYocnVsZSA9PSAi cGFnZSIpCiAgICAgewpJbmRleDogY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNw cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNzcKZGlmZiAtdSAtMyAtcCAtcjEuMTc3IGNzc3N0 eWxlc2VsZWN0b3IuY3BwCi0tLSBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJMjAwMS8wOS8yNSAy MDoyNjoyNwkxLjE3NworKysgY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTIwMDEvMTAvMjUgMTI6 MzM6MjEKQEAgLTkyLDE0ICs5MiwyMSBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVj dG9yKERvY3VtCiAgICAgICAgIHVzZXJTaGVldC0+cGFyc2VTdHJpbmcoIERPTVN0cmluZyggZG9j LT51c2VyU3R5bGVTaGVldCgpICkgKTsKIAogICAgICAgICB1c2VyU3R5bGUgPSBuZXcgQ1NTU3R5 bGVTZWxlY3Rvckxpc3QoKTsKLSAgICAgICAgdXNlclN0eWxlLT5hcHBlbmQodXNlclNoZWV0KTsK KyAgICAgICAgdXNlclN0eWxlLT5hcHBlbmQoIHVzZXJTaGVldCwgZG9jLT52aWV3KCktPm1lZGlh VHlwZSgpICk7CiAgICAgfQogCiAgICAgLy8gYWRkIHN0eWxlc2hlZXRzIGZyb20gZG9jdW1lbnQK ICAgICBhdXRob3JTdHlsZSA9IG5ldyBDU1NTdHlsZVNlbGVjdG9yTGlzdCgpOwogICAgIFN0eWxl U2hlZXRMaXN0SW1wbCogc3MgPSBkb2MtPnN0eWxlU2hlZXRzKCk7Ci0gICAgZm9yICggUUxpc3RJ dGVyYXRvcjxTdHlsZVNoZWV0SW1wbD4gaXQoIHNzLT5zdHlsZVNoZWV0cyApOyBpdC5jdXJyZW50 KCk7ICsraXQgKQotIAkgICAgYXV0aG9yU3R5bGUtPmFwcGVuZCggaXQuY3VycmVudCgpKTsKKyAg ICAKKyAgICBRTGlzdEl0ZXJhdG9yPFN0eWxlU2hlZXRJbXBsPiBpdCggc3MtPnN0eWxlU2hlZXRz ICk7CisgICAgZm9yICggOyBpdC5jdXJyZW50KCk7ICsraXQgKQorICAgIHsKKyAgICAgICAgQ1NT U3R5bGVTaGVldEltcGwgKmN1clNoZWV0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk eW5hbWljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwgKj4oIGl0LmN1cnJlbnQoKSApOworICAgICAg ICBpZiggY3VyU2hlZXQgKQorICAgICAJICAgIGF1dGhvclN0eWxlLT5hcHBlbmQoIGN1clNoZWV0 LCBkb2MtPnZpZXcoKS0+bWVkaWFUeXBlKCkgKTsKKyAgICB9CiAKICAgICBidWlsZExpc3RzKCk7 CiAKQEAgLTEyMywxMiArMTMwLDEyIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0 b3IoRG9jdW0KICAgICAvL2tkRGVidWcoKSA8PCAiQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVT ZWxlY3RvciBlbmNvZGVkIHVybCAiIDw8IGVuY29kZWR1cmwucGF0aCA8PCBlbmRsOwogfQogCi1D U1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKFN0eWxlU2hlZXRJbXBsICpzaGVldCkK K0NTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoIENTU1N0eWxlU2hlZXRJbXBsICpz aGVldCApCiB7CiAgICAgaWYoIWRlZmF1bHRTdHlsZSkgbG9hZERlZmF1bHRTdHlsZSgpOwogCiAg ICAgYXV0aG9yU3R5bGUgPSBuZXcgQ1NTU3R5bGVTZWxlY3Rvckxpc3QoKTsKLSAgICBhdXRob3JT dHlsZS0+YXBwZW5kKHNoZWV0KTsKKyAgICBhdXRob3JTdHlsZS0+YXBwZW5kKCBzaGVldCwgc2hl ZXQtPmRvYygpLT52aWV3KCktPm1lZGlhVHlwZSgpICk7CiB9CiAKIENTU1N0eWxlU2VsZWN0b3I6 On5DU1NTdHlsZVNlbGVjdG9yKCkKQEAgLTEzOSw5ICsxNDYsOSBAQCBDU1NTdHlsZVNlbGVjdG9y Ojp+Q1NTU3R5bGVTZWxlY3RvcigpCiAgICAgZGVsZXRlIHVzZXJTaGVldDsKIH0KIAotdm9pZCBD U1NTdHlsZVNlbGVjdG9yOjphZGRTaGVldChTdHlsZVNoZWV0SW1wbCAqc2hlZXQpCit2b2lkIENT U1N0eWxlU2VsZWN0b3I6OmFkZFNoZWV0KCBDU1NTdHlsZVNoZWV0SW1wbCAqc2hlZXQgKQogewot ICAgIGF1dGhvclN0eWxlLT5hcHBlbmQoc2hlZXQpOworICAgIGF1dGhvclN0eWxlLT5hcHBlbmQo IHNoZWV0LCBzaGVldC0+ZG9jKCktPnZpZXcoKS0+bWVkaWFUeXBlKCkgKTsKIH0KIAogdm9pZCBD U1NTdHlsZVNlbGVjdG9yOjpsb2FkRGVmYXVsdFN0eWxlKGNvbnN0IEtIVE1MU2V0dGluZ3MgKnMp CkBAIC0xNjYsNyArMTczLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpsb2FkRGVmYXVsdFN0 eWxlKAogICAgIGRlZmF1bHRTaGVldC0+cGFyc2VTdHJpbmcoIHN0ciApOwogCiAgICAgZGVmYXVs dFN0eWxlID0gbmV3IENTU1N0eWxlU2VsZWN0b3JMaXN0KCk7Ci0gICAgZGVmYXVsdFN0eWxlLT5h cHBlbmQoZGVmYXVsdFNoZWV0KTsKKyAgICBkZWZhdWx0U3R5bGUtPmFwcGVuZCggZGVmYXVsdFNo ZWV0ICk7CiAgICAgLy9rZERlYnVnKCkgPDwgIkNTU1N0eWxlU2VsZWN0b3I6IGRlZmF1bHQgc3R5 bGUgaGFzICIgPDwgZGVmYXVsdFN0eWxlLT5jb3VudCgpIDw8ICIgZWxlbWVudHMiPDwgZW5kbDsK IH0KIApAQCAtNzQzLDExICs3NTAsMTYgQEAgQ1NTU3R5bGVTZWxlY3Rvckxpc3Q6On5DU1NTdHls ZVNlbGVjdG9yTAogewogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3JMaXN0OjphcHBlbmQoU3R5 bGVTaGVldEltcGwgKnNoZWV0KQordm9pZCBDU1NTdHlsZVNlbGVjdG9yTGlzdDo6YXBwZW5kKCBD U1NTdHlsZVNoZWV0SW1wbCAqc2hlZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IERPTVN0cmluZyAmbWVkaXVtICkKIHsKLQogICAgIGlmKCFzaGVldCB8fCAhc2hl ZXQtPmlzQ1NTU3R5bGVTaGVldCgpKSByZXR1cm47CiAKKyAgICAvLyBObyBtZWRpYSBpbXBsaWVz ICJhbGwiLCBidXQgaWYgYSBtZWRpYWxpc3QgZXhpc3RzIGl0IG11c3QKKyAgICAvLyBjb250YWlu IG91ciBjdXJyZW50IG1lZGl1bQorICAgIGlmKCBzaGVldC0+bWVkaWEoKSAmJiAhc2hlZXQtPm1l ZGlhKCktPmNvbnRhaW5zKCBtZWRpdW0gKSApCisgICAgICAgIHJldHVybjsgLy8gc3R5bGUgc2hl ZXQgbm90IGFwcGxpY2FibGUgZm9yIHRoaXMgbWVkaXVtCisKICAgICBpbnQgbGVuID0gc2hlZXQt Pmxlbmd0aCgpOwogCiAgICAgZm9yKGludCBpID0gMDsgaTwgbGVuOyBpKyspCkBAIC03NjcsMTEg Kzc3OSw2MyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3JMaXN0OjphcHBlbmQoU3R5bGVTCiAgICAg ICAgIGVsc2UgaWYoaXRlbS0+aXNJbXBvcnRSdWxlKCkpCiAgICAgICAgIHsKICAgICAgICAgICAg IENTU0ltcG9ydFJ1bGVJbXBsICppbXBvcnQgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlSW1w bCAqPihpdGVtKTsKLSAgICAgICAgICAgIC8vICMjIyBjaGVjayBtZWRpYSB0eXBlCi0gICAgICAg ICAgICBTdHlsZVNoZWV0SW1wbCAqaW1wb3J0ZWRTaGVldCA9IGltcG9ydC0+c3R5bGVTaGVldCgp OwotICAgICAgICAgICAgYXBwZW5kKGltcG9ydGVkU2hlZXQpOworCisgICAgICAgICAgICAvL2tk RGVidWcoIDYwODAgKSA8PCAiQGltcG9ydDogTWVkaWE6ICIKKyAgICAgICAgICAgIC8vICAgICAg ICAgICAgICAgIDw8IGltcG9ydC0+bWVkaWEoKS0+bWVkaWFUZXh0KCkuc3RyaW5nKCkgPDwgZW5k bDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYoICFpbXBvcnQtPm1lZGlhKCkgfHwgaW1w b3J0LT5tZWRpYSgpLT5jb250YWlucyggbWVkaXVtICkgKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgIENTU1N0eWxlU2hlZXRJbXBsICppbXBvcnRlZFNoZWV0ID0gaW1wb3J0LT5zdHls ZVNoZWV0KCk7CisgICAgICAgICAgICAgICAgYXBwZW5kKCBpbXBvcnRlZFNoZWV0LCBtZWRpdW0g KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBpdGVtLT5pc01l ZGlhUnVsZSgpICkKKyAgICAgICAgeworICAgICAgICAgICAgQ1NTTWVkaWFSdWxlSW1wbCAqciA9 IHN0YXRpY19jYXN0PENTU01lZGlhUnVsZUltcGwgKj4oIGl0ZW0gKTsKKyAgICAgICAgICAgIENT U1J1bGVMaXN0SW1wbCAqcnVsZXMgPSByLT5jc3NSdWxlcygpOworCisgICAgICAgICAgICAvL0RP TVN0cmluZyBtZWRpYVRleHQgPSBtZWRpYS0+bWVkaWFUZXh0KCk7CisgICAgICAgICAgICAvL2tk RGVidWcoIDYwODAgKSA8PCAiQG1lZGlhOiBNZWRpYTogIgorICAgICAgICAgICAgLy8gICAgICAg ICAgICAgICAgPDwgci0+bWVkaWEoKS0+bWVkaWFUZXh0KCkuc3RyaW5nKCkgPDwgZW5kbDsKKyAg ICAgICAgICAgIAorICAgICAgICAgICAgaWYoICggIXItPm1lZGlhKCkgfHwgci0+bWVkaWEoKS0+ Y29udGFpbnMoIG1lZGl1bSApICkgJiYgcnVsZXMpCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgLy8gVHJhdmVyc2UgY2hpbGQgZWxlbWVudHMgb2YgdGhlIEBpbXBvcnQgcnVsZS4gU2lu Y2UKKyAgICAgICAgICAgICAgICAvLyBtYW55IGVsZW1lbnRzIGFyZSBub3QgYWxsb3dlZCBhcyBj aGlsZCB3ZSBkbyBub3QgdXNlCisgICAgICAgICAgICAgICAgLy8gYSByZWN1cnNpdmUgY2FsbCB0 byBhcHBlbmQoKSBoZXJlCisgICAgICAgICAgICAgICAgZm9yKCBpbnQgaiA9IDA7IGogPCBydWxl cy0+bGVuZ3RoKCk7IGorKyApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg ICAvL2tkRGVidWcoIDYwODAgKSA8PCAiKioqIFJ1bGUgIyIgPDwgaiA8PCBlbmRsOworICAgICAg ICAKKyAgICAgICAgICAgICAgICAgICAgQ1NTUnVsZUltcGwgKmNoaWxkSXRlbSA9IHJ1bGVzLT5p dGVtKCBqICk7CisgICAgICAgICAgICAgICAgICAgIGlmKCBjaGlsZEl0ZW0tPmlzU3R5bGVSdWxl KCkgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ dCBpcyBhIFN0eWxlUnVsZSwgc28gYXBwZW5kIGl0IHRvIG91ciBsaXN0CisgICAgICAgICAgICAg ICAgICAgICAgICBDU1NTdHlsZVJ1bGVJbXBsICpzdHlsZVJ1bGUgPQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGVJbXBsICo+KCBjaGlsZEl0 ZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg ICAgICAgICBRTGlzdDxDU1NTZWxlY3Rvcj4gKnMgPSBzdHlsZVJ1bGUtPnNlbGVjdG9yKCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBmb3IoIGludCBqID0gMDsgaiA8ICggaW50ICkgcy0+Y291 bnQoKTsgaisrICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDU1NPcmRlcmVkUnVsZSAqb3JkZXJlZFJ1bGUgPSBuZXcgQ1NTT3JkZXJlZFJ1 bGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUnVs ZSwgcy0+YXQoIGogKSwgY291bnQoKSApOworICAgICAgICAgICAgICAgIAkgICAgUUxpc3Q8Q1NT T3JkZXJlZFJ1bGU+OjphcHBlbmQoIG9yZGVyZWRSdWxlICk7CisgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL2tkRGVidWco IDYwODAgKSA8PCAiSWdub3JpbmcgY2hpbGQgcnVsZSBvZiAiCisgICAgICAgICAgICAgICAgICAg ICAgICAvLyAgICAiSW1wb3J0UnVsZTogcnVsZSBpcyBub3QgYSBTdHlsZVJ1bGUhIiA8PCBlbmRs OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSAgIC8vIGZvciBydWxl cworICAgICAgICAgICAgfSAgIC8vIGlmIHJ1bGVzCisgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgLy9rZERlYnVnKCA2MDgwICkgPDwgIkNTU01lZGlhUnVs ZSBub3QgcmVuZGVyZWQ6ICIKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICA8PCAi cnVsZSBlbXB0eSBvciB3cm9uZyBtZWRpdW0hIiA8PCBlbmRsOworICAgICAgICAgICAgfQogICAg ICAgICB9Ci0gICAgICAgIC8vICMjIyBpbmNsdWRlIG1lZGlhLCBpbXBvcnQgcnVsZXMgYW5kIG90 aGVyCisgICAgICAgIC8vICMjIyBpbmNsdWRlIG90aGVyIHJ1bGVzCiAgICAgfQogfQogCkluZGV4 OiBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9r ZGVsaWJzL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMjAKZGlmZiAtdSAtMyAtcCAtcjEuMjAgY3Nzc3R5bGVzZWxlY3Rvci5oCi0tLSBjc3MvY3Nz c3R5bGVzZWxlY3Rvci5oCTIwMDEvMTAvMDcgMTM6MTI6MTkJMS4yMAorKysgY3NzL2Nzc3N0eWxl c2VsZWN0b3IuaAkyMDAxLzEwLzI1IDEyOjMzOjIxCkBAIC0xMDcsMTUgKzEwNywxNSBAQCBuYW1l c3BhY2Uga2h0bWwKIAkgKiBBbHNvIHRha2VzIGludG8gYWNjb3VudCBzcGVjaWFsIGNhc2VzIGZv ciBIVE1MIGRvY3VtZW50cywKIAkgKiBpbmNsdWRpbmcgdGhlIGRlZmF1bHRTdHlsZSAod2hpY2gg aXMgaHRtbCBvbmx5KQogCSAqLwotCUNTU1N0eWxlU2VsZWN0b3IoRE9NOjpEb2N1bWVudEltcGwg KmRvYyk7CisJQ1NTU3R5bGVTZWxlY3RvciggRE9NOjpEb2N1bWVudEltcGwgKmRvYyApOwogCS8q KgogCSAqIHNhbWUgYXMgYWJvdmUgYnV0IGZvciBhIHNpbmdsZSBzdHlsZXNoZWV0LgogCSAqLwot CUNTU1N0eWxlU2VsZWN0b3IoRE9NOjpTdHlsZVNoZWV0SW1wbCAqc2hlZXQpOworCUNTU1N0eWxl U2VsZWN0b3IoIERPTTo6Q1NTU3R5bGVTaGVldEltcGwgKnNoZWV0ICk7CiAKIAl2aXJ0dWFsIH5D U1NTdHlsZVNlbGVjdG9yKCk7CiAJCi0Jdm9pZCBhZGRTaGVldChET006OlN0eWxlU2hlZXRJbXBs ICpzaGVldCk7CisJdm9pZCBhZGRTaGVldCggRE9NOjpDU1NTdHlsZVNoZWV0SW1wbCAqc2hlZXQg KTsKICAgICAgICAgCiAJc3RhdGljIHZvaWQgbG9hZERlZmF1bHRTdHlsZShjb25zdCBLSFRNTFNl dHRpbmdzICpzID0gMCk7CiAJc3RhdGljIHZvaWQgY2xlYXIoKTsKQEAgLTIyOSw3ICsyMjksOCBA QCBuYW1lc3BhY2Uga2h0bWwKIAlDU1NTdHlsZVNlbGVjdG9yTGlzdCgpOwogCXZpcnR1YWwgfkNT U1N0eWxlU2VsZWN0b3JMaXN0KCk7CiAJCi0Jdm9pZCBhcHBlbmQoRE9NOjpTdHlsZVNoZWV0SW1w bCAqc2hlZXQpOworCXZvaWQgYXBwZW5kKCBET006OkNTU1N0eWxlU2hlZXRJbXBsICpzaGVldCwK KyAgICAgICAgICAgICAgICAgY29uc3QgRE9NOjpET01TdHJpbmcgJm1lZGl1bSA9ICJzY3JlZW4i ICk7CiAJCiAJdm9pZCBjb2xsZWN0KCBRTGlzdDxET006OkNTU1NlbGVjdG9yPiAqc2VsZWN0b3JM aXN0LCBDU1NPcmRlcmVkUHJvcGVydHlMaXN0ICpwcm9wTGlzdCwKIAkJICAgICAgU291cmNlIHJl Z3VsYXIsIFNvdXJjZSBpbXBvcnRhbnQgKTsKSW5kZXg6IGh0bWwvaHRtbF9oZWFkaW1wbC5jcHAK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2h0bWwvaHRtbC9odG1sX2hl YWRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43NgpkaWZmIC11IC0zIC1wIC1yMS43 NiBodG1sX2hlYWRpbXBsLmNwcAotLS0gaHRtbC9odG1sX2hlYWRpbXBsLmNwcAkyMDAxLzA5LzEx IDEzOjA1OjU0CTEuNzYKKysrIGh0bWwvaHRtbF9oZWFkaW1wbC5jcHAJMjAwMS8xMC8yNSAxMjoz MzoyMgpAQCAtMTgwLDEwICsxODAsMTYgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnRJbXBsOjpwYXJz ZUF0dHJpYnV0ZQogdm9pZCBIVE1MTGlua0VsZW1lbnRJbXBsOjpzZXRTdHlsZVNoZWV0KGNvbnN0 IERPTTo6RE9NU3RyaW5nICZ1cmwsIGNvbnN0IERPTTo6RE9NU3RyaW5nICZzaGVldFN0cikKIHsK IC8vICAgIGtkRGVidWcoIDYwMzAgKSA8PCAiSFRNTExpbmtFbGVtZW50OjpzZXRTdHlsZVNoZWV0 KCkiIDw8IGVuZGw7CisvLyAgICBrZERlYnVnKCA2MDMwICkgPDwgIioqKiogY3VycmVudCBtZWRp dW06ICIgPDwgbV9tZWRpYSA8PCBlbmRsOworICAgIAogICAgIGlmKCBtX3NoZWV0ICkgcmV0dXJu OwogICAgIG1fc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldEltcGwodGhpcywgdXJsKTsKICAgICBt X3NoZWV0LT5yZWYoKTsKICAgICBtX3NoZWV0LT5wYXJzZVN0cmluZyhzaGVldFN0cik7CisgICAg CisgICAgTWVkaWFMaXN0SW1wbCAqbWVkaWEgPSBuZXcgTWVkaWFMaXN0SW1wbCggbV9zaGVldCwg bV9tZWRpYSApOworICAgIG1fc2hlZXQtPnNldE1lZGlhKCBtZWRpYSApOworICAgIAogICAgIG1f bG9hZGluZyA9IGZhbHNlOwogCiAgICAgaWYgKCBzaGVldCgpICkgIGdldERvY3VtZW50KCktPmNy ZWF0ZVNlbGVjdG9yKCk7CkBAIC0yMDUsMTUgKzIxMSw5IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50 SW1wbDo6c2hlZXRMb2FkZWQoKQogCiBTdHlsZVNoZWV0SW1wbCAqSFRNTExpbmtFbGVtZW50SW1w bDo6c2hlZXQoKSBjb25zdAogewotICAgIGlmICgga2h0bWw6OnByaW50cGFpbnRlciApIHsKLSAg ICAgICAgLy8gd2UncmUgY3VycmVudGx5IHByaW50aW5nLCByZXR1cm4gYWxsIGFuZCBwcmludCBz dHlsZSBzaGVldHMKLSAgICAgICAgaWYoIG1fbWVkaWEuaXNOdWxsKCkgfHwgbV9tZWRpYS5jb250 YWlucygiYWxsIikgfHwgbV9tZWRpYS5jb250YWlucygicHJpbnQiKSApCi0gICAgICAgICAgICBy ZXR1cm4gbV9zaGVldDsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiggbV9tZWRpYS5pc051bGwo KSB8fCBtX21lZGlhLmNvbnRhaW5zKCJzY3JlZW4iKSB8fCBtX21lZGlhLmNvbnRhaW5zKCJhbGwi KSApCi0gICAgICAgICAgICByZXR1cm4gbV9zaGVldDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Cisg ICAgLy9rZERlYnVnKCA2MDMwICkgPDwgIioqKiogSFRNTExpbmtFbGVtZW50SW1wbDo6c2hlZXQo KSIgPDwgZW5kbDsKKworICAgIHJldHVybiBtX3NoZWV0OwogfQogCiAKSW5kZXg6IGh0bWwvaHRt bF9oZWFkaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2todG1s L2h0bWwvaHRtbF9oZWFkaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYgLXUg LTMgLXAgLXIxLjI3IGh0bWxfaGVhZGltcGwuaAotLS0gaHRtbC9odG1sX2hlYWRpbXBsLmgJMjAw MS8xMC8wNyAxMzoxMjoxOQkxLjI3CisrKyBodG1sL2h0bWxfaGVhZGltcGwuaAkyMDAxLzEwLzI1 IDEyOjMzOjIyCkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBET00gewogY2xhc3MgRE9NU3Ry aW5nOwogY2xhc3MgSFRNTEZvcm1FbGVtZW50SW1wbDsKIGNsYXNzIFN0eWxlU2hlZXRJbXBsOwor Y2xhc3MgQ1NTU3R5bGVTaGVldEltcGw7CiAKIGNsYXNzIEhUTUxCYXNlRWxlbWVudEltcGwgOiBw dWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CkBAIC04Niw3ICs4Nyw3IEBAIHB1YmxpYzoKIAogcHJv dGVjdGVkOgogICAgIGtodG1sOjpDYWNoZWRDU1NTdHlsZVNoZWV0ICptX2NhY2hlZFNoZWV0Owot ICAgIFN0eWxlU2hlZXRJbXBsICptX3NoZWV0OworICAgIENTU1N0eWxlU2hlZXRJbXBsICptX3No ZWV0OwogICAgIERPTVN0cmluZyBtX3VybDsKICAgICBET01TdHJpbmcgbV90eXBlOwogICAgIFFT dHJpbmcgbV9tZWRpYTsK --------------Boundary-00=_0ZHR9VZ36W86M5HXI9OZ--