------=_Part_32705_2820695.1227460538602 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline I have changed the code to work as discussed on IRC (the backup file is only created while the new settings are tested). As before, you can also find the three (updated) commits at http://github.com/klickverbot/kwin/commits/configbackup. For the records, I have also attached the other two patches. I have only fixed a typo in the commit message of the "cleanup" part and the "code-polishing" part is completely unchanged. Unfortunately I have not had any time to test the changes yet... ------=_Part_32705_2820695.1227460538602 Content-Type: text/x-patch; name=configbackup.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fnvy17ym0 Content-Disposition: attachment; filename=configbackup.patch Y29tbWl0IGI5NTE3YTZiYzMxZGQzOGY1YTE0ODE5YjcwNzBlNDIyY2EwMWNiY2UKQXV0aG9yOiBE YXZpZCBOYWRsaW5nZXIgPGRhdmlkLm5hZGxpbmdlckBnbWFpbC5jb20+CkRhdGU6ICAgV2VkIE5v diAxOSAyMDozNDo0NyAyMDA4ICswMTAwCgogICAgU2F2ZSBhIGJhY2t1cCBvZiBrd2lucmMgdG8g YW5vdGhlciBmaWxlIHRvIHJldmVydCBpZiB0aGUgWCBzZXJ2ZXIgY3Jhc2hlcyB3aGlsZSB0ZXN0 aW5nIHRoZSBuZXcgY29uZmlnLgoKZGlmZiAtLWdpdCBhL2tjbWt3aW4va3dpbmNvbXBvc2l0aW5n L21haW4uY3BwIGIva2Nta3dpbi9rd2luY29tcG9zaXRpbmcvbWFpbi5jcHAKaW5kZXggY2QzNTkz ZC4uZmFjNjdhNSAxMDA2NDQKLS0tIGEva2Nta3dpbi9rd2luY29tcG9zaXRpbmcvbWFpbi5jcHAK KysrIGIva2Nta3dpbi9rd2luY29tcG9zaXRpbmcvbWFpbi5jcHAKQEAgLTI1LDYgKzI1LDcgQEAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCiAjaW5jbHVkZSA8a2Fib3V0ZGF0YS5oPgogI2luY2x1ZGUgPGtjb25maWcu aD4KICNpbmNsdWRlIDxrY29uZmlnZ3JvdXAuaD4KKyNpbmNsdWRlIDxrc3RhbmRhcmRkaXJzLmg+ CiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAjaW5jbHVkZSA8a21lc3NhZ2Vib3guaD4KICNpbmNsdWRl IDxrc2V0dGluZ3MvZGlzcGF0Y2hlci5oPgpAQCAtMzQsNiArMzUsNyBAQCBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K ICNpbmNsdWRlIDxrc2VydmljZS5oPgogI2luY2x1ZGUgPGt0aXRsZXdpZGdldC5oPgogCisjaW5j bHVkZSA8UUZpbGU+CiAjaW5jbHVkZSA8UXREQnVzL1F0REJ1cz4KICNpbmNsdWRlIDxRVGltZXI+ CiAjaW5jbHVkZSA8UUxhYmVsPgpAQCAtNjgsOSArNzAsOCBAQCBDb25maXJtRGlhbG9nOjpDb25m aXJtRGlhbG9nKCkgOgogCiBLV2luQ29tcG9zaXRpbmdDb25maWc6OktXaW5Db21wb3NpdGluZ0Nv bmZpZyhRV2lkZ2V0ICpwYXJlbnQsIGNvbnN0IFFWYXJpYW50TGlzdCAmKQogICAgIDogS0NNb2R1 bGUoIEtXaW5Db21wb3NpdGluZ0NvbmZpZ0ZhY3Rvcnk6OmNvbXBvbmVudERhdGEoKSwgcGFyZW50 KSwKLSAgICAgICAgbUtXaW5Db25maWcoS1NoYXJlZENvbmZpZzo6b3BlbkNvbmZpZygia3dpbnJj IikpLAotICAgICAgICBtX3Nob3dDb25maXJtRGlhbG9nIChmYWxzZSkKLXsKKyAgICAgICAgbU5l d0NvbmZpZyggS1NoYXJlZENvbmZpZzo6b3BlbkNvbmZpZyggImt3aW5yYyIgKSApCisgICAgewog ICAgIEtHbG9iYWw6OmxvY2FsZSgpLT5pbnNlcnRDYXRhbG9nKCAia3dpbl9lZmZlY3RzIiApOwog ICAgIHVpLnNldHVwVWkodGhpcyk7CiAgICAgbGF5b3V0KCktPnNldE1hcmdpbigwKTsKQEAgLTEw Nyw2ICsxMDgsMTYgQEAgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjpLV2luQ29tcG9zaXRpbmdDb25m aWcoUVdpZGdldCAqcGFyZW50LCBjb25zdCBRVmFyaWFudExpc3QKICAgICBjb25uZWN0KHVpLmds VlN5bmMsIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgdGhpcywgU0xPVChjaGFuZ2VkKCkpKTsKICAg ICBjb25uZWN0KHVpLnhyZW5kZXJTbW9vdGhTY2FsZSwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCB0 aGlzLCBTTE9UKGNoYW5nZWQoKSkpOwogCisgICAgLy8gQ3JlYXRlIHRoZSBiYWNrdXAgY29uZmln LiBJdCB3aWxsIGJlIHVzZWQgYXMgYSBtZWFucyB0byByZXZlcnQgdGhlIGNvbmZpZyBpZgorICAg IC8vIHRoZSBYIHNlcnZlciBjcmFzaGVzIGFuZCB0byBkZXRlcm1pbmUgaWYgYSBjb25maXJtYXRp b24gZGlhbG9nIHNob3VsZCBiZSBzaG93bi4KKyAgICAvLyBBZnRlciB0aGUgbmV3IHNldHRpbmdz IGhhdmUgYmVlbiBjb25maXJtZWQgdG8gYmUgc3RhYmxlLCBpdCBpcyB1cGRhdGVkIHdpdGggdGhl IG5ldworICAgIC8vIGNvbmZpZy4gSXQgd2lsbCBiZSB3cml0dGVuIHRvIGRpc2sgYmVmb3JlIGEg bmV3IGNvbmZpZyBpcyBsb2FkZWQgYW5kIGlzIGRlbGV0ZWQgYWZ0ZXIKKyAgICAvLyB0aGUgdXNl ciBoYXMgY29uZmlybWVkIHRoZSBuZXcgc2V0dGluZ3MuCisgICAgbUJhY2t1cENvbmZpZyA9IG5l dyBLQ29uZmlnKCBtTmV3Q29uZmlnLT5uYW1lKCkgKyAnficsIEtDb25maWc6OlNpbXBsZUNvbmZp ZyApOworICAgIC8vIElmIHRoZSBiYWNrdXAgZmlsZSBhbHJlYWR5IGV4aXN0cywgaXQgaXMgYSBy ZXNpZHVlIHdlIHdhbnQgdG8gY2xlYW4gdXA7IGl0IHdvdWxkCisgICAgLy8gcHJvYmFibHkgYmUg aW4gYW4gaW52YWxpZCBzdGF0ZSBhbnl3YXkuCisgICAgZGVsZXRlQmFja3VwQ29uZmlnRmlsZSgp OworCiAgICAgLy8gT3BlbiB0aGUgdGVtcG9yYXJ5IGNvbmZpZyBmaWxlCiAgICAgLy8gVGVtcG9y YXJ5IGNvbmYgZmlsZSBpcyB1c2VkIHRvIHN5bmNocm9uaXplIGVmZmVjdCBjaGVja2JveGVzIHdp dGggZWZmZWN0CiAgICAgLy8gIHNlbGVjdG9yIGJ5IGxvYWRpbmcvc2F2aW5nIGVmZmVjdHMgZnJv bS90byB0ZW1wIGNvbmZpZyB3aGVuIGFjdGl2ZSB0YWIKQEAgLTE4MSwxMyArMTkyLDExIEBAIEtX aW5Db21wb3NpdGluZ0NvbmZpZzo6S1dpbkNvbXBvc2l0aW5nQ29uZmlnKFFXaWRnZXQgKnBhcmVu dCwgY29uc3QgUVZhcmlhbnRMaXN0CiB9CiAKIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6fktXaW5D b21wb3NpdGluZ0NvbmZpZygpCi17Ci19Ci0KLXZvaWQgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjpy ZXBhcnNlQ29uZmlndXJhdGlvbihjb25zdCBRQnl0ZUFycmF5JmNvbmYpCi17Ci0gICAgS1NldHRp bmdzOjpEaXNwYXRjaGVyOjpyZXBhcnNlQ29uZmlndXJhdGlvbihjb25mKTsKLX0KKyAgICB7Cisg ICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJhY2t1cCBjb25maWcgaXMgbm90IHdyaXR0ZW4gdG8g ZGlzay4KKyAgICBtQmFja3VwQ29uZmlnLT5tYXJrQXNDbGVhbigpOworICAgIGRlbGV0ZSBtQmFj a3VwQ29uZmlnOworICAgIH0KIAogdm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OmNvbXBvc2l0 aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CkBAIC0xOTUsNDUgKzIwNCw3IEBAIHZvaWQgS1dp bkNvbXBvc2l0aW5nQ29uZmlnOjpjb21wb3NpdGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAg IHVpLnRhYldpZGdldC0+c2V0VGFiRW5hYmxlZCgxLCBlbmFibGVkKTsKICAgICB1aS50YWJXaWRn ZXQtPnNldFRhYkVuYWJsZWQoMiwgZW5hYmxlZCk7CiAgICAgdWkudGFiV2lkZ2V0LT5zZXRUYWJF bmFibGVkKDMsIGVuYWJsZWQpOwotfQotCi12b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6c2hv d0NvbmZpcm1EaWFsb2coYm9vbCByZWluaXRDb21wb3NpdGluZykKLXsKLSAgICBib29sIHJldmVy dCA9IGZhbHNlOwotICAgIC8vIEZlZWwgZnJlZSB0byBleHRlbmQgdGhpcyB0byBzdXBwb3J0IHNl dmVyYWwga3dpbiBpbnN0YW5jZXMgKG11bHRpaGVhZCkgaWYgeW91Ci0gICAgLy8gdGhpbmsgaXQg bWFrZXMgc2Vuc2UuCi0gICAgT3JnS2RlS1dpbkludGVyZmFjZSBrd2luKCJvcmcua2RlLmt3aW4i LCAiL0tXaW4iLCBRREJ1c0Nvbm5lY3Rpb246OnNlc3Npb25CdXMoKSk7Ci0gICAgaWYoIHJlaW5p dENvbXBvc2l0aW5nID8gIWt3aW4uY29tcG9zaXRpbmdBY3RpdmUoKS52YWx1ZSgpIDogIWt3aW4u d2FpdEZvckNvbXBvc2l0aW5nU2V0dXAoKS52YWx1ZSgpICkKLSAgICB7Ci0gICAgICAgIEtNZXNz YWdlQm94Ojpzb3JyeSggdGhpcywgaTE4bigKLSAgICAgICAgICAgICJGYWlsZWQgdG8gYWN0aXZh dGUgZGVza3RvcCBlZmZlY3RzIHVzaW5nIHRoZSBnaXZlbiAiCi0gICAgICAgICAgICAiY29uZmln dXJhdGlvbiBvcHRpb25zLiBTZXR0aW5ncyB3aWxsIGJlIHJldmVydGVkIHRvIHRoZWlyIHByZXZp b3VzIHZhbHVlcy5cblxuIgotICAgICAgICAgICAgIkNoZWNrIHlvdXIgWCBjb25maWd1cmF0aW9u LiBZb3UgbWF5IGFsc28gY29uc2lkZXIgY2hhbmdpbmcgYWR2YW5jZWQgb3B0aW9ucywgIgotICAg ICAgICAgICAgImVzcGVjaWFsbHkgY2hhbmdpbmcgdGhlIGNvbXBvc2l0aW5nIHR5cGUuIiApKTsK LSAgICAgICAgcmV2ZXJ0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg Q29uZmlybURpYWxvZyBjb25maXJtOwotICAgICAgICBpZiggIWNvbmZpcm0uZXhlYygpKQotICAg ICAgICAgICAgcmV2ZXJ0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYoIHJldmVydCApCi0gICAgewot ICAgICAgICAvLyBSZXZlcnQgc2V0dGluZ3MKLSAgICAgICAgS0NvbmZpZ0dyb3VwIGNvbmZpZyht S1dpbkNvbmZpZywgIkNvbXBvc2l0aW5nIik7Ci0gICAgICAgIGNvbmZpZy5kZWxldGVHcm91cCgp OwotICAgICAgICBRTWFwPFFTdHJpbmcsIFFTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1Q cmV2aW91c0NvbmZpZy5jb25zdEJlZ2luKCk7Ci0gICAgICAgIGZvcig7IGl0ICE9IG1QcmV2aW91 c0NvbmZpZy5jb25zdEVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQudmFsdWUoKS5p c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb25maWcu d3JpdGVFbnRyeShpdC5rZXkoKSwgaXQudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g U3luYyB3aXRoIEtXaW4gYW5kIHJlbG9hZAotICAgICAgICBjb25maWdDaGFuZ2VkKHJlaW5pdENv bXBvc2l0aW5nKTsKLSAgICAgICAgbG9hZCgpOwogICAgIH0KLX0KIAogdm9pZCBLV2luQ29tcG9z aXRpbmdDb25maWc6OmluaXRFZmZlY3RTZWxlY3RvcigpCiB7CkBAIC0yNzMsOCArMjQ0LDggQEAg dm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OmN1cnJlbnRUYWJDaGFuZ2VkKGludCB0YWIpCiB9 CiAKIHZvaWQgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjpsb2FkR2VuZXJhbFRhYigpCi17Ci0gICAg S0NvbmZpZ0dyb3VwIGNvbmZpZyhtS1dpbkNvbmZpZywgIkNvbXBvc2l0aW5nIik7CisgICAgewor ICAgIEtDb25maWdHcm91cCBjb25maWcobU5ld0NvbmZpZywgIkNvbXBvc2l0aW5nIik7CiAgICAg dWkudXNlQ29tcG9zaXRpbmctPnNldENoZWNrZWQoY29uZmlnLnJlYWRFbnRyeSgiRW5hYmxlZCIs IG1EZWZhdWx0UHJlZnMuZW5hYmxlQ29tcG9zaXRpbmcoKSkpOwogICAgIHVpLmFuaW1hdGlvblNw ZWVkQ29tYm8tPnNldEN1cnJlbnRJbmRleChjb25maWcucmVhZEVudHJ5KCJBbmltYXRpb25TcGVl ZCIsIDMgKSk7CiAKQEAgLTMwMSwxNCArMjcyLDE0IEBAIHZvaWQgS1dpbkNvbXBvc2l0aW5nQ29u ZmlnOjpsb2FkR2VuZXJhbFRhYigpCiAgICAgICAgIHVpLndpbmRvd1N3aXRjaGluZ0NvbWJvLT5z ZXRDdXJyZW50SW5kZXgoIDMgKTsKICAgICBpZiggZWZmZWN0RW5hYmxlZCggImZsaXBzd2l0Y2gi LCBlZmZlY3Rjb25maWcgKSkKICAgICAgICAgdWkud2luZG93U3dpdGNoaW5nQ29tYm8tPnNldEN1 cnJlbnRJbmRleCggNCApOwotICAgIEtDb25maWdHcm91cCBwcmVzZW50d2luZG93c2NvbmZpZyht S1dpbkNvbmZpZywgIkVmZmVjdC1QcmVzZW50V2luZG93cyIpOworICAgIEtDb25maWdHcm91cCBw cmVzZW50d2luZG93c2NvbmZpZyhtTmV3Q29uZmlnLCAiRWZmZWN0LVByZXNlbnRXaW5kb3dzIik7 CiAgICAgaWYoIGVmZmVjdEVuYWJsZWQoICJwcmVzZW50d2luZG93cyIsIGVmZmVjdGNvbmZpZyAp ICYmIHByZXNlbnR3aW5kb3dzY29uZmlnLnJlYWRFbnRyeSgiVGFiQm94IiwgZmFsc2UpICkKICAg ICAgICAgdWkud2luZG93U3dpdGNoaW5nQ29tYm8tPnNldEN1cnJlbnRJbmRleCggMiApOwogCiAg ICAgLy8gZGVza3RvcCBzd2l0Y2hpbmcKICAgICBpZiggZWZmZWN0RW5hYmxlZCggInNsaWRlIiwg ZWZmZWN0Y29uZmlnICkpCiAgICAgICAgIHVpLmRlc2t0b3BTd2l0Y2hpbmdDb21iby0+c2V0Q3Vy cmVudEluZGV4KCAxICk7Ci0gICAgS0NvbmZpZ0dyb3VwIGN1YmVjb25maWcobUtXaW5Db25maWcs ICJFZmZlY3QtQ3ViZSIpOworICAgIEtDb25maWdHcm91cCBjdWJlY29uZmlnKG1OZXdDb25maWcs ICJFZmZlY3QtQ3ViZSIpOwogICAgIGlmKCBlZmZlY3RFbmFibGVkKCAiY3ViZSIsIGVmZmVjdGNv bmZpZyApICYmIGN1YmVjb25maWcucmVhZEVudHJ5KCJBbmltYXRlRGVza3RvcENoYW5nZSIsIGZh bHNlKSkKICAgICAgICAgdWkuZGVza3RvcFN3aXRjaGluZ0NvbWJvLT5zZXRDdXJyZW50SW5kZXgo IDIgKTsKIApAQCAtMzMxLDggKzMwMiw4IEBAIHZvaWQgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjps b2FkRWZmZWN0c1RhYigpCiB9CiAKIHZvaWQgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjpsb2FkQWR2 YW5jZWRUYWIoKQotewotICAgIEtDb25maWdHcm91cCBjb25maWcobUtXaW5Db25maWcsICJDb21w b3NpdGluZyIpOworICAgIHsKKyAgICBLQ29uZmlnR3JvdXAgY29uZmlnKG1OZXdDb25maWcsICJD b21wb3NpdGluZyIpOwogICAgIFFTdHJpbmcgYmFja2VuZCA9IGNvbmZpZy5yZWFkRW50cnkoIkJh Y2tlbmQiLCAiT3BlbkdMIik7CiAgICAgdWkuY29tcG9zaXRpbmdUeXBlLT5zZXRDdXJyZW50SW5k ZXgoKGJhY2tlbmQgPT0gIlhSZW5kZXIiKSA/IDEgOiAwKTsKICAgICAvLyA0IC0gb2ZmLCA1IC0g c2hvd24sIDYgLSBhbHdheXMsIG90aGVyIGFyZSBvbGQgdmFsdWVzCkBAIC0zNTUsMTggKzMyNiwx MyBAQCB2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6bG9hZEFkdmFuY2VkVGFiKCkKIH0KIAog dm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OmxvYWQoKQotewotICAgIG1LV2luQ29uZmlnLT5y ZXBhcnNlQ29uZmlndXJhdGlvbigpOwotCi0gICAgLy8gQ29weSBQbHVnaW5zIGdyb3VwIHRvIHRl bXAgY29uZmlnIGZpbGUKLSAgICBRTWFwPFFTdHJpbmcsIFFTdHJpbmc+IGVudHJpZXMgPSBtS1dp bkNvbmZpZy0+ZW50cnlNYXAoIlBsdWdpbnMiKTsKLSAgICBRTWFwPFFTdHJpbmcsIFFTdHJpbmc+ Ojpjb25zdF9pdGVyYXRvciBpdCA9IGVudHJpZXMuY29uc3RCZWdpbigpOwotICAgIEtDb25maWdH cm91cCB0bXBjb25maWcobVRtcENvbmZpZywgIlBsdWdpbnMiKTsKLSAgICB0bXBjb25maWcuZGVs ZXRlR3JvdXAoKTsKLSAgICBmb3IoOyBpdCAhPSBlbnRyaWVzLmNvbnN0RW5kKCk7ICsraXQpCiAg ICAgewotICAgICAgICB0bXBjb25maWcud3JpdGVFbnRyeShpdC5rZXkoKSwgaXQudmFsdWUoKSk7 Ci0gICAgfQorICAgIG1OZXdDb25maWctPnJlcGFyc2VDb25maWd1cmF0aW9uKCk7CisKKyAgICB1 cGRhdGVCYWNrdXBXaXRoTmV3Q29uZmlnKCk7CisKKyAgICAvLyBDb3B5IHRoZSBwbHVnaW4gc2V0 dGluZ3MgZnJvbSB0aGUgbWFpbiBjb25maWcgZmlsZSB0byB0aGUgdGVtcCBjb25maWcuCisgICAg Y29weVBsdWdpbnNUb1RtcENvbmZpZygpOwogCiAgICAgbG9hZEdlbmVyYWxUYWIoKTsKICAgICBs b2FkRWZmZWN0c1RhYigpOwpAQCAtMzc2LDE0ICszNDIsOCBAQCB2b2lkIEtXaW5Db21wb3NpdGlu Z0NvbmZpZzo6bG9hZCgpCiB9CiAKIHZvaWQgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjpzYXZlR2Vu ZXJhbFRhYigpCi17Ci0gICAgS0NvbmZpZ0dyb3VwIGNvbmZpZyhtS1dpbkNvbmZpZywgIkNvbXBv c2l0aW5nIik7Ci0gICAgLy8gQ2hlY2sgaWYgYW55IGNyaXRpY2FsIHNldHRpbmdzIHRoYXQgbmVl ZCBjb25maXJtYXRpb24gaGF2ZSBjaGFuZ2VkCi0gICAgaWYodWkudXNlQ29tcG9zaXRpbmctPmlz Q2hlY2tlZCgpCi0gICAgICAgICYmIHVpLnVzZUNvbXBvc2l0aW5nLT5pc0NoZWNrZWQoKSAhPSBj b25maWcucmVhZEVudHJ5KCJFbmFibGVkIiwgbURlZmF1bHRQcmVmcy5lbmFibGVDb21wb3NpdGlu ZygpKSkKLSAgICAgICAgewotICAgICAgICBtX3Nob3dDb25maXJtRGlhbG9nID0gdHJ1ZTsKLSAg ICAgICAgfQorICAgIHsKKyAgICBLQ29uZmlnR3JvdXAgY29uZmlnKG1OZXdDb25maWcsICJDb21w b3NpdGluZyIpOwogCiAgICAgY29uZmlnLndyaXRlRW50cnkoIkVuYWJsZWQiLCB1aS51c2VDb21w b3NpdGluZy0+aXNDaGVja2VkKCkpOwogICAgIGNvbmZpZy53cml0ZUVudHJ5KCJBbmltYXRpb25T cGVlZCIsIHVpLmFuaW1hdGlvblNwZWVkQ29tYm8tPmN1cnJlbnRJbmRleCgpKTsKQEAgLTQzOSw3 ICszOTksNyBAQCB2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6c2F2ZUdlbmVyYWxUYWIoKQog ICAgICAgICAgICAgZWZmZWN0Y29uZmlnLndyaXRlRW50cnkoImt3aW40X2VmZmVjdF9mbGlwc3dp dGNoRW5hYmxlZCIsIHRydWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICBL Q29uZmlnR3JvdXAgcHJlc2VudHdpbmRvd3Njb25maWcobUtXaW5Db25maWcsICJFZmZlY3QtUHJl c2VudFdpbmRvd3MiKTsKKyAgICBLQ29uZmlnR3JvdXAgcHJlc2VudHdpbmRvd3Njb25maWcobU5l d0NvbmZpZywgIkVmZmVjdC1QcmVzZW50V2luZG93cyIpOwogICAgIHByZXNlbnR3aW5kb3dzY29u ZmlnLndyaXRlRW50cnkoIlRhYkJveCIsIHByZXNlbnRXaW5kb3dTd2l0Y2hpbmcpOwogCiAgICAg aW50IGRlc2t0b3BTd2l0Y2hlciA9IHVpLmRlc2t0b3BTd2l0Y2hpbmdDb21iby0+Y3VycmVudElu ZGV4KCk7CkBAIC00NjEsNyArNDIxLDcgQEAgdm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OnNh dmVHZW5lcmFsVGFiKCkKICAgICAgICAgICAgIGVmZmVjdGNvbmZpZy53cml0ZUVudHJ5KCJrd2lu NF9lZmZlY3RfY3ViZUVuYWJsZWQiLCB0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICB9Ci0gICAgS0NvbmZpZ0dyb3VwIGN1YmVjb25maWcobUtXaW5Db25maWcsICJFZmZlY3QtQ3Vi ZSIpOworICAgIEtDb25maWdHcm91cCBjdWJlY29uZmlnKG1OZXdDb25maWcsICJFZmZlY3QtQ3Vi ZSIpOwogICAgIGN1YmVjb25maWcud3JpdGVFbnRyeSgiQW5pbWF0ZURlc2t0b3BDaGFuZ2UiLCBj dWJlRGVza3RvcFN3aXRjaGluZyk7CiAKICAgICBzYXZlRWxlY3RyaWNCb3JkZXJzKCk7CkBAIC00 NzIsMjkgKzQzMiwxMyBAQCB2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6c2F2ZUVmZmVjdHNU YWIoKQogICAgIHVpLmVmZmVjdFNlbGVjdG9yLT5zYXZlKCk7CiB9CiAKLWJvb2wgS1dpbkNvbXBv c2l0aW5nQ29uZmlnOjpzYXZlQWR2YW5jZWRUYWIoKQotewotICAgIGJvb2wgYWR2YW5jZWRDaGFu Z2VkID0gZmFsc2U7Cit2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6c2F2ZUFkdmFuY2VkVGFi KCkKKyAgICB7CiAgICAgc3RhdGljIGNvbnN0IGludCBocHNbXSA9IHsgNiAvKmFsd2F5cyovLCA1 IC8qc2hvd24qLywgIDQgLypuZXZlciovIH07CiAKLSAgICBLQ29uZmlnR3JvdXAgY29uZmlnKG1L V2luQ29uZmlnLCAiQ29tcG9zaXRpbmciKTsKKyAgICBLQ29uZmlnR3JvdXAgY29uZmlnKG1OZXdD b25maWcsICJDb21wb3NpdGluZyIpOwogICAgIFFTdHJpbmcgZ2xNb2Rlc1tdID0geyAiVEZQIiwg IlNITSIsICJGYWxsYmFjayIgfTsKIAotICAgIGlmKCBjb25maWcucmVhZEVudHJ5KCJCYWNrZW5k IiwgIk9wZW5HTCIpCi0gICAgICAgICAgICAhPSAoKHVpLmNvbXBvc2l0aW5nVHlwZS0+Y3VycmVu dEluZGV4KCkgPT0gMCkgPyAiT3BlbkdMIiA6ICJYUmVuZGVyIikKLSAgICAgICAgfHwgY29uZmln LnJlYWRFbnRyeSgiR0xNb2RlIiwgIlRGUCIpICE9IGdsTW9kZXNbdWkuZ2xNb2RlLT5jdXJyZW50 SW5kZXgoKV0KLSAgICAgICAgfHwgY29uZmlnLnJlYWRFbnRyeSgiR0xEaXJlY3QiLCBtRGVmYXVs dFByZWZzLmVuYWJsZURpcmVjdFJlbmRlcmluZygpKQotICAgICAgICAgICAgIT0gdWkuZ2xEaXJl Y3QtPmlzQ2hlY2tlZCgpCi0gICAgICAgIHx8IGNvbmZpZy5yZWFkRW50cnkoIkdMVlN5bmMiLCBt RGVmYXVsdFByZWZzLmVuYWJsZVZTeW5jKCkpICE9IHVpLmdsVlN5bmMtPmlzQ2hlY2tlZCgpCi0g ICAgICAgIHx8IGNvbmZpZy5yZWFkRW50cnkoIkRpc2FibGVDaGVja3MiLCBmYWxzZSApICE9IHVp LmRpc2FibGVDaGVja3MtPmlzQ2hlY2tlZCgpKQotICAgICAgICB7Ci0gICAgICAgIG1fc2hvd0Nv bmZpcm1EaWFsb2cgPSB0cnVlOwotICAgICAgICBhZHZhbmNlZENoYW5nZWQgPSB0cnVlOwotICAg ICAgICB9Ci0gICAgZWxzZSBpZiggY29uZmlnLnJlYWRFbnRyeSgiSGlkZGVuUHJldmlld3MiLCA1 KSAhPSBocHNbIHVpLndpbmRvd1RodW1ibmFpbHMtPmN1cnJlbnRJbmRleCgpIF0KLSAgICAgICAg fHwgY29uZmlnLnJlYWRFbnRyeSgiWFJlbmRlclNtb290aFNjYWxlIiwgZmFsc2UgKSAhPSB1aS54 cmVuZGVyU21vb3RoU2NhbGUtPmlzQ2hlY2tlZCgpICkKLSAgICAgICAgYWR2YW5jZWRDaGFuZ2Vk ID0gdHJ1ZTsKLQogICAgIGNvbmZpZy53cml0ZUVudHJ5KCJCYWNrZW5kIiwgKHVpLmNvbXBvc2l0 aW5nVHlwZS0+Y3VycmVudEluZGV4KCkgPT0gMCkgPyAiT3BlbkdMIiA6ICJYUmVuZGVyIik7CiAg ICAgY29uZmlnLndyaXRlRW50cnkoIkhpZGRlblByZXZpZXdzIiwgaHBzWyB1aS53aW5kb3dUaHVt Ym5haWxzLT5jdXJyZW50SW5kZXgoKSBdICk7CiAgICAgY29uZmlnLndyaXRlRW50cnkoIkRpc2Fi bGVDaGVja3MiLCB1aS5kaXNhYmxlQ2hlY2tzLT5pc0NoZWNrZWQoKSk7CkBAIC01MDUsMTYgKzQ0 OSwxMCBAQCBib29sIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6c2F2ZUFkdmFuY2VkVGFiKCkKICAg ICBjb25maWcud3JpdGVFbnRyeSgiR0xWU3luYyIsIHVpLmdsVlN5bmMtPmlzQ2hlY2tlZCgpKTsK IAogICAgIGNvbmZpZy53cml0ZUVudHJ5KCJYUmVuZGVyU21vb3RoU2NhbGUiLCB1aS54cmVuZGVy U21vb3RoU2NhbGUtPmlzQ2hlY2tlZCgpKTsKLQotICAgIHJldHVybiBhZHZhbmNlZENoYW5nZWQ7 Ci19CisgICAgfQogCiB2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6c2F2ZSgpCi17Ci0gICAg Ly8gU2F2ZSBjdXJyZW50IGNvbmZpZy4gV2UnbGwgdXNlIHRoaXMgZm9yIHJlc3RvcmluZyBpbiBj YXNlIHNvbWV0aGluZyBnb2VzIHdyb25nLgotICAgIEtDb25maWdHcm91cCBjb25maWcobUtXaW5D b25maWcsICJDb21wb3NpdGluZyIpOwotICAgIG1QcmV2aW91c0NvbmZpZyA9IGNvbmZpZy5lbnRy eU1hcCgpOwotCisgICAgewogICAgIC8vIGJhaDsgdGFiIGNvbnRlbnQgYmVpbmcgZGVwZW5kZW50 IG9uIHRoZSBvdGhlciBpcyByZWFsbHkgYmFkOyBhbmQKICAgICAvLyBkZXByZWNhdGVkIGluIHRo ZSBISUcgZm9yIGEgcmVhc29uLiAgSXRzIGNvbmZ1c2luZyEKICAgICAvLyBNYWtlIHN1cmUgd2Ug b25seSBjYWxsIHNhdmUgb24gZWFjaCB0YWIgb25jZTsgYXMgdGhleSBhcmUgc3RhdGVmdWwgZHVl IHRvIHRoZSByZXZlcnQgY29uY2VwdApAQCAtNTI3LDQwICs0NjUsMTYgQEAgdm9pZCBLV2luQ29t cG9zaXRpbmdDb25maWc6OnNhdmUoKQogICAgICAgICBzYXZlRWZmZWN0c1RhYigpOwogICAgICAg ICBsb2FkR2VuZXJhbFRhYigpOwogICAgICAgICBzYXZlR2VuZXJhbFRhYigpOwotICAgIH0KLSAg ICBib29sIGFkdmFuY2VkQ2hhbmdlZCA9IHNhdmVBZHZhbmNlZFRhYigpOwotCi0gICAgLy8gQ29w eSBQbHVnaW5zIGdyb3VwIGZyb20gdGVtcCBjb25maWcgdG8gcmVhbCBjb25maWcKLSAgICBRTWFw PFFTdHJpbmcsIFFTdHJpbmc+IGVudHJpZXMgPSBtVG1wQ29uZmlnLT5lbnRyeU1hcCgiUGx1Z2lu cyIpOwotICAgIFFNYXA8UVN0cmluZywgUVN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZW50 cmllcy5jb25zdEJlZ2luKCk7Ci0gICAgS0NvbmZpZ0dyb3VwIHJlYWxjb25maWcobUtXaW5Db25m aWcsICJQbHVnaW5zIik7Ci0gICAgcmVhbGNvbmZpZy5kZWxldGVHcm91cCgpOwotICAgIGZvcig7 IGl0ICE9IGVudHJpZXMuY29uc3RFbmQoKTsgKytpdCkKLSAgICB7Ci0gICAgICAgIHJlYWxjb25m aWcud3JpdGVFbnRyeShpdC5rZXkoKSwgaXQudmFsdWUoKSk7Ci0gICAgfQorICAgICAgICB9Cisg ICAgY29weVBsdWdpbnNUb05ld0NvbmZpZygpOwogCi0gICAgZW1pdCBjaGFuZ2VkKCBmYWxzZSAp OworICAgIHNhdmVFbGVjdHJpY0JvcmRlcnMoKTsKKyAgICBzYXZlQWR2YW5jZWRUYWIoKTsKIAot ICAgIGNvbmZpZ0NoYW5nZWQoYWR2YW5jZWRDaGFuZ2VkKTsKKyAgICBlbWl0IGNoYW5nZWQoIGZh bHNlICk7CiAKLSAgICBpZihtX3Nob3dDb25maXJtRGlhbG9nKQotICAgIHsKLSAgICAgICAgbV9z aG93Q29uZmlybURpYWxvZyA9IGZhbHNlOwotICAgICAgICBzaG93Q29uZmlybURpYWxvZyhhZHZh bmNlZENoYW5nZWQpOworICAgIGFjdGl2YXRlTmV3Q29uZmlnKCk7CiAgICAgfQotfQotCi12b2lk IEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6Y29uZmlnQ2hhbmdlZChib29sIHJlaW5pdENvbXBvc2l0 aW5nKQotewotICAgIC8vIFNlbmQgc2lnbmFsIHRvIGt3aW4KLSAgICBtS1dpbkNvbmZpZy0+c3lu YygpOwotICAgIC8vIFNlbmQgc2lnbmFsIHRvIGFsbCBrd2luIGluc3RhbmNlcwotICAgIFFEQnVz TWVzc2FnZSBtZXNzYWdlID0gUURCdXNNZXNzYWdlOjpjcmVhdGVTaWduYWwoIi9LV2luIiwgIm9y Zy5rZGUuS1dpbiIsCi0gICAgICAgIHJlaW5pdENvbXBvc2l0aW5nID8gInJlaW5pdENvbXBvc2l0 aW5nIiA6ICJyZWxvYWRDb25maWciKTsKLSAgICBRREJ1c0Nvbm5lY3Rpb246OnNlc3Npb25CdXMo KS5zZW5kKG1lc3NhZ2UpOwotfQotCiAKIHZvaWQgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjpkZWZh dWx0cygpCiB7CkBAIC02NjEsMjUgKzU3NSwyNSBAQCB2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZp Zzo6ZWxlY3RyaWNCb3JkZXJTZWxlY3Rpb25DaGFuZ2VkKGludCBlZGdlLCBpbnQgaW5kZXgpCiB2 b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6bG9hZEVsZWN0cmljQm9yZGVycygpCiB7CiAgICAg Ly8gUHJlc2VudCBXaW5kb3dzCi0gICAgS0NvbmZpZ0dyb3VwIHByZXNlbnR3aW5kb3dzY29uZmln KG1LV2luQ29uZmlnLCAiRWZmZWN0LVByZXNlbnRXaW5kb3dzIik7CisgICAgS0NvbmZpZ0dyb3Vw IHByZXNlbnR3aW5kb3dzY29uZmlnKG1OZXdDb25maWcsICJFZmZlY3QtUHJlc2VudFdpbmRvd3Mi KTsKICAgICBjaGFuZ2VFbGVjdHJpY0JvcmRlciggKEVsZWN0cmljQm9yZGVyKXByZXNlbnR3aW5k b3dzY29uZmlnLnJlYWRFbnRyeSggIkJvcmRlckFjdGl2YXRlQWxsIiwKICAgICAgICAgaW50KCBF bGVjdHJpY1RvcExlZnQgKSksIChpbnQpUHJlc2VudFdpbmRvd3NBbGwgKTsKICAgICBjaGFuZ2VF bGVjdHJpY0JvcmRlciggKEVsZWN0cmljQm9yZGVyKXByZXNlbnR3aW5kb3dzY29uZmlnLnJlYWRF bnRyeSggIkJvcmRlckFjdGl2YXRlIiwKICAgICAgICAgaW50KCBFbGVjdHJpY05vbmUgKSksIChp bnQpUHJlc2VudFdpbmRvd3NDdXJyZW50ICk7CiAgICAgLy8gRGVza3RvcCBHcmlkCi0gICAgS0Nv bmZpZ0dyb3VwIGdyaWRjb25maWcobUtXaW5Db25maWcsICJFZmZlY3QtRGVza3RvcEdyaWQiKTsK KyAgICBLQ29uZmlnR3JvdXAgZ3JpZGNvbmZpZyhtTmV3Q29uZmlnLCAiRWZmZWN0LURlc2t0b3BH cmlkIik7CiAgICAgY2hhbmdlRWxlY3RyaWNCb3JkZXIoIChFbGVjdHJpY0JvcmRlcilncmlkY29u ZmlnLnJlYWRFbnRyeSggIkJvcmRlckFjdGl2YXRlIiwKICAgICAgICAgaW50KCBFbGVjdHJpY05v bmUgKSksIChpbnQpRGVza3RvcEdyaWQgKTsKICAgICAvLyBEZXNrdG9wIEN1YmUKLSAgICBLQ29u ZmlnR3JvdXAgY3ViZWNvbmZpZyhtS1dpbkNvbmZpZywgIkVmZmVjdC1DdWJlIik7CisgICAgS0Nv bmZpZ0dyb3VwIGN1YmVjb25maWcobU5ld0NvbmZpZywgIkVmZmVjdC1DdWJlIik7CiAgICAgY2hh bmdlRWxlY3RyaWNCb3JkZXIoIChFbGVjdHJpY0JvcmRlciljdWJlY29uZmlnLnJlYWRFbnRyeSgg IkJvcmRlckFjdGl2YXRlIiwKICAgICAgICAgaW50KCBFbGVjdHJpY05vbmUgKSksIChpbnQpQ3Vi ZSApOwogICAgIC8vIERlc2t0b3AgQ3lsaW5kZXIKLSAgICBLQ29uZmlnR3JvdXAgY3lsaW5kZXJj b25maWcobUtXaW5Db25maWcsICJFZmZlY3QtQ3lsaW5kZXIiKTsKKyAgICBLQ29uZmlnR3JvdXAg Y3lsaW5kZXJjb25maWcobU5ld0NvbmZpZywgIkVmZmVjdC1DeWxpbmRlciIpOwogICAgIGNoYW5n ZUVsZWN0cmljQm9yZGVyKCAoRWxlY3RyaWNCb3JkZXIpY3lsaW5kZXJjb25maWcucmVhZEVudHJ5 KCAiQm9yZGVyQWN0aXZhdGUiLAogICAgICAgICBpbnQoIEVsZWN0cmljTm9uZSApKSwgKGludClD eWxpbmRlciApOwogICAgIC8vIERlc2t0b3AgR3JpZAotICAgIEtDb25maWdHcm91cCBzcGhlcmVj b25maWcobUtXaW5Db25maWcsICJFZmZlY3QtU3BoZXJlIik7CisgICAgS0NvbmZpZ0dyb3VwIHNw aGVyZWNvbmZpZyhtTmV3Q29uZmlnLCAiRWZmZWN0LVNwaGVyZSIpOwogICAgIGNoYW5nZUVsZWN0 cmljQm9yZGVyKCAoRWxlY3RyaWNCb3JkZXIpc3BoZXJlY29uZmlnLnJlYWRFbnRyeSggIkJvcmRl ckFjdGl2YXRlIiwKICAgICAgICAgaW50KCBFbGVjdHJpY05vbmUgKSksIChpbnQpU3BoZXJlICk7 CiB9CkBAIC03NTYsMjQgKzY3MCwxNzEgQEAgRWxlY3RyaWNCb3JkZXIgS1dpbkNvbXBvc2l0aW5n Q29uZmlnOjpjaGVja0VmZmVjdEhhc0VsZWN0cmljQm9yZGVyKCBpbnQgaW5kZXggKQogfQogCiB2 b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6c2F2ZUVsZWN0cmljQm9yZGVycygpCi17Ci0gICAg S0NvbmZpZ0dyb3VwIHByZXNlbnR3aW5kb3dzY29uZmlnKG1LV2luQ29uZmlnLCAiRWZmZWN0LVBy ZXNlbnRXaW5kb3dzIik7CisgICAgeworICAgIEtDb25maWdHcm91cCBwcmVzZW50d2luZG93c2Nv bmZpZyhtTmV3Q29uZmlnLCAiRWZmZWN0LVByZXNlbnRXaW5kb3dzIik7CiAgICAgcHJlc2VudHdp bmRvd3Njb25maWcud3JpdGVFbnRyeSggIkJvcmRlckFjdGl2YXRlQWxsIiwgKGludCljaGVja0Vm ZmVjdEhhc0VsZWN0cmljQm9yZGVyKCAoaW50KVByZXNlbnRXaW5kb3dzQWxsICkpOwogICAgIHBy ZXNlbnR3aW5kb3dzY29uZmlnLndyaXRlRW50cnkoICJCb3JkZXJBY3RpdmF0ZSIsIChpbnQpY2hl Y2tFZmZlY3RIYXNFbGVjdHJpY0JvcmRlciggKGludClQcmVzZW50V2luZG93c0N1cnJlbnQgKSk7 CiAKLSAgICBLQ29uZmlnR3JvdXAgZ3JpZGNvbmZpZyhtS1dpbkNvbmZpZywgIkVmZmVjdC1EZXNr dG9wR3JpZCIpOworICAgIEtDb25maWdHcm91cCBncmlkY29uZmlnKG1OZXdDb25maWcsICJFZmZl Y3QtRGVza3RvcEdyaWQiKTsKICAgICBncmlkY29uZmlnLndyaXRlRW50cnkoICJCb3JkZXJBY3Rp dmF0ZSIsIChpbnQpY2hlY2tFZmZlY3RIYXNFbGVjdHJpY0JvcmRlciggKGludClEZXNrdG9wR3Jp ZCApKTsKIAotICAgIEtDb25maWdHcm91cCBjdWJlY29uZmlnKG1LV2luQ29uZmlnLCAiRWZmZWN0 LUN1YmUiKTsKKyAgICBLQ29uZmlnR3JvdXAgY3ViZWNvbmZpZyhtTmV3Q29uZmlnLCAiRWZmZWN0 LUN1YmUiKTsKICAgICBjdWJlY29uZmlnLndyaXRlRW50cnkoICJCb3JkZXJBY3RpdmF0ZSIsIChp bnQpY2hlY2tFZmZlY3RIYXNFbGVjdHJpY0JvcmRlciggKGludClDdWJlICkpOwogCi0gICAgS0Nv bmZpZ0dyb3VwIGN5bGluZGVyY29uZmlnKG1LV2luQ29uZmlnLCAiRWZmZWN0LUN5bGluZGVyIik7 CisgICAgS0NvbmZpZ0dyb3VwIGN5bGluZGVyY29uZmlnKG1OZXdDb25maWcsICJFZmZlY3QtQ3ls aW5kZXIiKTsKICAgICBjeWxpbmRlcmNvbmZpZy53cml0ZUVudHJ5KCAiQm9yZGVyQWN0aXZhdGUi LCAoaW50KWNoZWNrRWZmZWN0SGFzRWxlY3RyaWNCb3JkZXIoIChpbnQpQ3lsaW5kZXIgKSk7CiAK LSAgICBLQ29uZmlnR3JvdXAgc3BoZXJlY29uZmlnKG1LV2luQ29uZmlnLCAiRWZmZWN0LVNwaGVy ZSIpOworICAgIEtDb25maWdHcm91cCBzcGhlcmVjb25maWcobU5ld0NvbmZpZywgIkVmZmVjdC1T cGhlcmUiKTsKICAgICBzcGhlcmVjb25maWcud3JpdGVFbnRyeSggIkJvcmRlckFjdGl2YXRlIiwg KGludCljaGVja0VmZmVjdEhhc0VsZWN0cmljQm9yZGVyKCAoaW50KVNwaGVyZSApKTsKLX0KLSAg ICAKKyAgICB9CisKK3ZvaWQgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjphY3RpdmF0ZU5ld0NvbmZp ZygpCisgICAgeworICAgIC8vIFdyaXRlIHRoZSBiYWNrdXAgZmlsZSB0byBkaXNrIHNvIGl0IGNh biBiZSB1c2VkIG9uIHRoZSBuZXh0IEtXaW4gc3RhcnQKKyAgICAvLyBpZiBLV2luIG9yIHRoZSBY IHNlcnZlciBzaG91bGQgY3Jhc2ggd2hpbGUgdGVzdGluZyB0aGUgbmV3IGNvbmZpZy4KKyAgICBt QmFja3VwQ29uZmlnLT5zeW5jKCk7CisKKyAgICBib29sIGNvbmZpZ09rID0gdHJ1ZTsKKworICAg IC8vIFRlbGwgS1dpbiB0byBsb2FkIHRoZSBuZXcgY29uZmlndXJhdGlvbi4KKyAgICBib29sIGNv dWxkUmVsb2FkID0gc2VuZEtXaW5SZWxvYWRTaWduYWwoKTsKKyAgICAvLyBJZiBpdCB3YXMgbm90 IHN1Y2Nlc3NmdWxsLCBzaG93IGFuIGVycm9yIG1lc3NhZ2UgdG8gdGhlIHVzZXIuCisgICAgaWYg KCAhY291bGRSZWxvYWQgKQorICAgICAgICB7CisgICAgICAgIEtNZXNzYWdlQm94Ojpzb3JyeSgg dGhpcywgaTE4bigKKyAgICAgICAgICAgICJGYWlsZWQgdG8gYWN0aXZhdGUgZGVza3RvcCBlZmZl Y3RzIHVzaW5nIHRoZSBnaXZlbiAiCisgICAgICAgICAgICAiY29uZmlndXJhdGlvbiBvcHRpb25z LiBTZXR0aW5ncyB3aWxsIGJlIHJldmVydGVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcy5cblxu IgorICAgICAgICAgICAgIkNoZWNrIHlvdXIgWCBjb25maWd1cmF0aW9uLiBZb3UgbWF5IGFsc28g Y29uc2lkZXIgY2hhbmdpbmcgYWR2YW5jZWQgb3B0aW9ucywgIgorICAgICAgICAgICAgImVzcGVj aWFsbHkgY2hhbmdpbmcgdGhlIGNvbXBvc2l0aW5nIHR5cGUuIiApICk7CisgICAgICAgIGNvbmZp Z09rID0gZmFsc2U7CisgICAgICAgIH0KKyAgICBlbHNlCisgICAgICAgeworICAgICAgICAvLyBJ ZiB0aGUgY29uZmlybWF0aW9uIGRpYWxvZyBzaG91bGQgYmUgc2hvd24sIHdhaXQgZm9yIGl0cyBy ZXN1bHQuCisgICAgICAgIGlmICggaXNDb25maXJtYXRpb25OZWVkZWQoKSApCisgICAgICAgICAg ICB7CisgICAgICAgICAgICBDb25maXJtRGlhbG9nIGNvbmZpcm07CisgICAgICAgICAgICBjb25m aWdPayA9IGNvbmZpcm0uZXhlYygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICBp ZiAoIGNvbmZpZ09rICkKKyAgICAgICAgeworICAgICAgICAvLyBUaGUgbmV3IGNvbmZpZyBpcyBz dGFibGUgYW5kIHdhcyBhY2NlcHRlZC4KKyAgICAgICAgLy8gVXBkYXRlIG91ciBpbnRlcm5hbCBi YWNrdXAgY29weSBvZiB0aGUgY29uZmlnLgorICAgICAgICB1cGRhdGVCYWNrdXBXaXRoTmV3Q29u ZmlnKCk7CisgICAgICAgIH0KKyAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgLy8gQ29weSBi YWNrIHRoZSBvbGQgY29uZmlnIGFuZCBsb2FkIGl0IGludG8gdGhlIHVpLgorICAgICAgICByZXNl dE5ld1RvQmFja3VwQ29uZmlnKCk7CisgICAgICAgIGxvYWQoKTsKKyAgICAgICAgLy8gVGVsbCBL V2luIHRvIHJlbG9hZCB0aGUgKG9sZCkgY29uZmlnLgorICAgICAgICBzZW5kS1dpblJlbG9hZFNp Z25hbCgpOworICAgICAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhlIGJhY2t1cCBmaWxlIGZyb20g ZGlzayBiZWNhdXNlIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBtYWluIGNvbmZpZworICAgIC8vIGFu eXdheSBhbmQgd291bGQgb25seSBjb25mdXNlIHRoZSBzdGFydHVwIGNvZGUgaWYgS1dpbiBpcyBy ZXN0YXJ0ZWQgd2hpbGUKKyAgICAvLyB0aGlzIG1vZHVsZSBpcyBzdGlsbCBvcGVuZWQsIChlLmcu IGJ5IGNhbGxpbmcgImt3aW4gLS1yZXBsYWNlIikuCisgICAgZGVsZXRlQmFja3VwQ29uZmlnRmls ZSgpOworICAgIH0KKworYm9vbCBLV2luQ29tcG9zaXRpbmdDb25maWc6OmlzQ29uZmlybWF0aW9u TmVlZGVkKCkgY29uc3QKKyAgICB7CisgICAgLy8gQ29tcGFyZSBuZXcgY29uZmlnIHdpdGggdGhl IGJhY2t1cCBhbmQgc2VlIGlmIGFueSBwb3RlbnRpYWxseSBkYW5nZXJvdXMKKyAgICAvLyB2YWx1 ZXMgaGF2ZSBiZWVuIGNoYW5nZWQuCisgICAgS0NvbmZpZ0dyb3VwIG5ld0dyb3VwKCBtTmV3Q29u ZmlnLCAiQ29tcG9zaXRpbmciICk7CisgICAgS0NvbmZpZ0dyb3VwIGJhY2t1cEdyb3VwKCBtQmFj a3VwQ29uZmlnLCAiQ29tcG9zaXRpbmciICk7CisKKyAgICAvLyBNYW51YWxseSBlbmFibGluZyBj b21wb3NpdGluZyBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMsIGJ1dCBkaXNhYmxpbmcgaXMgbmV2 ZXIuCisgICAgYm9vbCBuZXdFbmFibGVkID0gbmV3R3JvdXAucmVhZEVudHJ5KCAiRW5hYmxlZCIs IG1EZWZhdWx0UHJlZnMuZW5hYmxlQ29tcG9zaXRpbmcoKSApOworICAgIGJvb2wgYmFja3VwRW5h YmxlZCA9IGJhY2t1cEdyb3VwLnJlYWRFbnRyeSggIkVuYWJsZWQiLCBtRGVmYXVsdFByZWZzLmVu YWJsZUNvbXBvc2l0aW5nKCkgKTsKKyAgICBpZiAoIG5ld0VuYWJsZWQgJiYgIWJhY2t1cEVuYWJs ZWQgKQorICAgICAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAv LyBBbGwgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIG9wdGlvbnMgYWxvbmcgd2l0aCB0aGVpciAodXN1 YWxseSBzYWZlKSBkZWZhdWx0IHZhbHVlcy4KKyAgICBRSGFzaDxRU3RyaW5nLCBRVmFyaWFudD4g Y29uZmlybTsKKyAgICBjb25maXJtWyAiQmFja2VuZCIgXSA9ICJPcGVuR0wiOworICAgIGNvbmZp cm1bICJHTE1vZGUiIF0gPSAiVEZQIjsKKyAgICBjb25maXJtWyAiR0xEaXJlY3QiIF0gPSBtRGVm YXVsdFByZWZzLmVuYWJsZURpcmVjdFJlbmRlcmluZygpOworICAgIGNvbmZpcm1bICJHTFZTeW5j IiBdID0gbURlZmF1bHRQcmVmcy5lbmFibGVWU3luYygpOworICAgIGNvbmZpcm1bICJEaXNhYmxl Q2hlY2tzIiBdID0gZmFsc2U7CisKKyAgICBRSGFzaDxRU3RyaW5nLCBRVmFyaWFudD46OmNvbnN0 X2l0ZXJhdG9yIGkgPSBjb25maXJtLmNvbnN0QmVnaW4oKTsKKyAgICBmb3IoIDsgaSAhPSBjb25m aXJtLmNvbnN0RW5kKCk7ICsraSApCisgICAgICAgIHsKKyAgICAgICAgaWYgKCBuZXdHcm91cC5y ZWFkRW50cnkoIGkua2V5KCksIGkudmFsdWUoKSApICE9CisgICAgICAgICAgICBiYWNrdXBHcm91 cC5yZWFkRW50cnkoIGkua2V5KCksIGkudmFsdWUoKSApICkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAvLyBJ ZiB3ZSBoYXZlIG5vdCByZXR1cm5lZCB5ZXQsIG5vIGNyaXRpY2FsIHNldHRpbmdzIGhhdmUgYmVl biBjaGFuZ2VkLgorICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK2Jvb2wgS1dpbkNvbXBvc2l0 aW5nQ29uZmlnOjpzZW5kS1dpblJlbG9hZFNpZ25hbCgpCisgICAgeworICAgIC8vIFNhdmUgdGhl IG5ldyBjb25maWcgdG8gdGhlIGZpbGUgc3lzdGVtLCB0aHVzIGFsbG93aW5nIEtXaW4gdG8gcmVh ZCBpdC4KKyAgICBtTmV3Q29uZmlnLT5zeW5jKCk7CisKKyAgICAvLyBTZW5kIHNpZ25hbCB0byBh bGwga3dpbiBpbnN0YW5jZXMuCisgICAgUURCdXNNZXNzYWdlIG1lc3NhZ2UgPSBRREJ1c01lc3Nh Z2U6OmNyZWF0ZVNpZ25hbCggIi9LV2luIiwgIm9yZy5rZGUuS1dpbiIsICJyZWxvYWRDb21wb3Np dGluZ0NvbmZpZyIgKTsKKyAgICBRREJ1c0Nvbm5lY3Rpb246OnNlc3Npb25CdXMoKS5zZW5kKG1l c3NhZ2UpOworCisgICAgLy8gSWYgY29tcG9zaXRpbmcgaXMgZW5hYmxlZCwgY2hlY2sgaWYgaXQg Y291bGQgYmUgc3RhcnRlZC4KKyAgICBLQ29uZmlnR3JvdXAgbmV3R3JvdXAoIG1OZXdDb25maWcs ICJDb21wb3NpdGluZyIgKTsKKyAgICBib29sIGVuYWJsZWQgPSBuZXdHcm91cC5yZWFkRW50cnko ICJFbmFibGVkIiwgbURlZmF1bHRQcmVmcy5lbmFibGVDb21wb3NpdGluZygpICk7CisKKyAgICBp ZiAoICFlbmFibGVkICkKKyAgICAgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg fQorICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAvLyBGZWVsIGZyZWUgdG8gZXh0ZW5kIHRo aXMgdG8gc3VwcG9ydCBzZXZlcmFsIGt3aW4gaW5zdGFuY2VzIChtdWx0aWhlYWQpIGlmIHlvdQor ICAgICAgICAvLyB0aGluayBpdCBtYWtlcyBzZW5zZS4KKyAgICAgICAgT3JnS2RlS1dpbkludGVy ZmFjZSBrd2luKCAib3JnLmtkZS5rd2luIiwgIi9LV2luIiwgUURCdXNDb25uZWN0aW9uOjpzZXNz aW9uQnVzKCkgKTsKKyAgICAgICAgcmV0dXJuIGt3aW4uY29tcG9zaXRpbmdBY3RpdmUoKS52YWx1 ZSgpOworICAgICAgICB9CisgICAgfQorCit2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6dXBk YXRlQmFja3VwV2l0aE5ld0NvbmZpZygpCisgICAgeworICAgIG1OZXdDb25maWctPmNvcHlUbygg bUJhY2t1cENvbmZpZy0+bmFtZSgpLCBtQmFja3VwQ29uZmlnICk7CisgICAgfQorCit2b2lkIEtX aW5Db21wb3NpdGluZ0NvbmZpZzo6cmVzZXROZXdUb0JhY2t1cENvbmZpZygpCisgICAgeworICAg IG1CYWNrdXBDb25maWctPmNvcHlUbyggbU5ld0NvbmZpZy0+bmFtZSgpLCBtTmV3Q29uZmlnLmRh dGEoKSApOworICAgIH0KKwordm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OmRlbGV0ZUJhY2t1 cENvbmZpZ0ZpbGUoKQorICAgIHsKKyAgICBRU3RyaW5nIGJhY2t1cEZpbGVOYW1lID0gS1N0YW5k YXJkRGlyczo6bG9jYXRlKCAiY29uZmlnIiwgbUJhY2t1cENvbmZpZy0+bmFtZSgpICk7CisgICAg Ly8gSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIFFGaWxlOjpyZW1vdmUoKSBqdXN0IGZhaWxz IHNpbGVudGx5LgorICAgIFFGaWxlOjpyZW1vdmUoIGJhY2t1cEZpbGVOYW1lICk7CisgICAgfQor Cit2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6Y29weVBsdWdpbnNUb1RtcENvbmZpZygpCisg ICAgeworICAgIEtDb25maWdHcm91cCBuZXdHcm91cCggbU5ld0NvbmZpZywgIlBsdWdpbnMiICk7 CisgICAgS0NvbmZpZ0dyb3VwIHRtcEdyb3VwKCBtVG1wQ29uZmlnLCAiUGx1Z2lucyIgKTsKKyAg ICB0bXBHcm91cC5kZWxldGVHcm91cCgpOworICAgIG5ld0dyb3VwLmNvcHlUbyggJnRtcEdyb3Vw ICk7CisgICAgfQorCit2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6Y29weVBsdWdpbnNUb05l d0NvbmZpZygpCisgICAgeworICAgIEtDb25maWdHcm91cCBuZXdHcm91cCggbU5ld0NvbmZpZywg IlBsdWdpbnMiICk7CisgICAgS0NvbmZpZ0dyb3VwIHRtcEdyb3VwKCBtVG1wQ29uZmlnLCAiUGx1 Z2lucyIgKTsKKyAgICBuZXdHcm91cC5kZWxldGVHcm91cCgpOworICAgIHRtcEdyb3VwLmNvcHlU byggJm5ld0dyb3VwICk7CisgICAgfQorCiB9IC8vIG5hbWVzcGFjZQogICAgIAogI2luY2x1ZGUg Im1haW4ubW9jIgpkaWZmIC0tZ2l0IGEva2Nta3dpbi9rd2luY29tcG9zaXRpbmcvbWFpbi5oIGIv a2Nta3dpbi9rd2luY29tcG9zaXRpbmcvbWFpbi5oCmluZGV4IDVjOGRiYjkuLjA0MjM1ZGEgMTAw NjQ0Ci0tLSBhL2tjbWt3aW4va3dpbmNvbXBvc2l0aW5nL21haW4uaAorKysgYi9rY21rd2luL2t3 aW5jb21wb3NpdGluZy9tYWluLmgKQEAgLTUzLDQzICs1Myw1MiBAQCBjbGFzcyBLV2luQ29tcG9z aXRpbmdDb25maWcgOiBwdWJsaWMgS0NNb2R1bGUKICAgICAgICAgdmlydHVhbCBRU3RyaW5nIHF1 aWNrSGVscCgpIGNvbnN0OwogCiAgICAgcHVibGljIHNsb3RzOgotICAgICAgICB2aXJ0dWFsIHZv aWQgY29tcG9zaXRpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCk7Ci0gICAgICAgIHZpcnR1YWwgdm9p ZCBzaG93Q29uZmlybURpYWxvZyhib29sIHJlaW5pdENvbXBvc2l0aW5nKTsKLSAgICAgICAgdm9p ZCBjdXJyZW50VGFiQ2hhbmdlZChpbnQgdGFiKTsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgbG9h ZCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2F2ZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg ZGVmYXVsdHMoKTsKLSAgICAgICAgdm9pZCByZXBhcnNlQ29uZmlndXJhdGlvbihjb25zdCBRQnl0 ZUFycmF5JmNvbmYpOwogCisgICAgcHJpdmF0ZSBzbG90czoKKyAgICAgICAgdm9pZCBjb21wb3Np dGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKTsKKyAgICAgICAgdm9pZCBjdXJyZW50VGFiQ2hhbmdl ZChpbnQgdGFiKTsKKyAgICAgICAgdm9pZCBlbGVjdHJpY0JvcmRlclNlbGVjdGlvbkNoYW5nZWQo aW50IGVkZ2UsIGludCBpbmRleCk7CisKKyAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGxvYWRH ZW5lcmFsVGFiKCk7CiAgICAgICAgIHZvaWQgbG9hZEVmZmVjdHNUYWIoKTsKICAgICAgICAgdm9p ZCBsb2FkQWR2YW5jZWRUYWIoKTsKICAgICAgICAgdm9pZCBsb2FkRWxlY3RyaWNCb3JkZXJzKCk7 CiAgICAgICAgIHZvaWQgc2F2ZUdlbmVyYWxUYWIoKTsKICAgICAgICAgdm9pZCBzYXZlRWZmZWN0 c1RhYigpOwotICAgICAgICBib29sIHNhdmVBZHZhbmNlZFRhYigpOwotICAgICAgICB2b2lkIGVs ZWN0cmljQm9yZGVyU2VsZWN0aW9uQ2hhbmdlZChpbnQgZWRnZSwgaW50IGluZGV4KTsKKyAgICAg ICAgdm9pZCBzYXZlQWR2YW5jZWRUYWIoKTsKIAotICAgICAgICB2b2lkIGNvbmZpZ0NoYW5nZWQo Ym9vbCByZWluaXRDb21wb3NpdGluZyk7CiAgICAgICAgIHZvaWQgaW5pdEVmZmVjdFNlbGVjdG9y KCk7CiAKLSAgICBwcml2YXRlOgogICAgICAgICBib29sIGVmZmVjdEVuYWJsZWQoIGNvbnN0IFFT dHJpbmcmIGVmZmVjdCwgY29uc3QgS0NvbmZpZ0dyb3VwJiBjZmcgKSBjb25zdDsKKwogICAgICAg ICB2b2lkIHNldHVwRWxlY3RyaWNCb3JkZXJzKCk7CiAgICAgICAgIHZvaWQgYWRkSXRlbVRvRWRn ZXNNb25pdG9yKGNvbnN0IFFTdHJpbmcmIGl0ZW0pOwogICAgICAgICB2b2lkIGNoYW5nZUVsZWN0 cmljQm9yZGVyKCBFbGVjdHJpY0JvcmRlciBib3JkZXIsIGludCBpbmRleCApOwogICAgICAgICBF bGVjdHJpY0JvcmRlciBjaGVja0VmZmVjdEhhc0VsZWN0cmljQm9yZGVyKCBpbnQgaW5kZXggKTsK ICAgICAgICAgdm9pZCBzYXZlRWxlY3RyaWNCb3JkZXJzKCk7CiAKLSAgICAgICAgS1NoYXJlZENv bmZpZ1B0ciBtS1dpbkNvbmZpZzsKKyAgICAgICAgdm9pZCBhY3RpdmF0ZU5ld0NvbmZpZygpOwor ICAgICAgICBib29sIGlzQ29uZmlybWF0aW9uTmVlZGVkKCkgY29uc3Q7CisgICAgICAgIGJvb2wg c2VuZEtXaW5SZWxvYWRTaWduYWwoKTsKKworICAgICAgICB2b2lkIHVwZGF0ZUJhY2t1cFdpdGhO ZXdDb25maWcoKTsKKyAgICAgICAgdm9pZCByZXNldE5ld1RvQmFja3VwQ29uZmlnKCk7CisgICAg ICAgIHZvaWQgZGVsZXRlQmFja3VwQ29uZmlnRmlsZSgpOworCisgICAgICAgIHZvaWQgY29weVBs dWdpbnNUb1RtcENvbmZpZygpOworICAgICAgICB2b2lkIGNvcHlQbHVnaW5zVG9OZXdDb25maWco KTsKKwogICAgICAgICBVaTo6S1dpbkNvbXBvc2l0aW5nQ29uZmlnIHVpOwogICAgICAgICBDb21w b3NpdGluZ1ByZWZzIG1EZWZhdWx0UHJlZnM7CiAKLSAgICAgICAgUU1hcDxRU3RyaW5nLCBRU3Ry aW5nPiBtUHJldmlvdXNDb25maWc7CisgICAgICAgIEtTaGFyZWRDb25maWdQdHIgbU5ld0NvbmZp ZzsKKyAgICAgICAgS0NvbmZpZyogbUJhY2t1cENvbmZpZzsKICAgICAgICAgS1RlbXBvcmFyeUZp bGUgbVRtcENvbmZpZ0ZpbGU7CiAgICAgICAgIEtTaGFyZWRDb25maWdQdHIgbVRtcENvbmZpZzsK LSAgICAgICAgYm9vbCBtX3Nob3dDb25maXJtRGlhbG9nOwogCiAgICAgICAgIGVudW0gRWxlY3Ry aWNCb3JkZXJFZmZlY3RzCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9vcHRpb25zLmNwcCBi L29wdGlvbnMuY3BwCmluZGV4IGQ0ZDcwMWEuLjk2NmM0YjkgMTAwNjQ0Ci0tLSBhL29wdGlvbnMu Y3BwCisrKyBiL29wdGlvbnMuY3BwCkBAIC0yMywxMCArMjMsMTIgQEAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAK ICNpZm5kZWYgS0NNUlVMRVMKIAorI2luY2x1ZGUgPFFGaWxlPgogI2luY2x1ZGUgPFFQYWxldHRl PgogI2luY2x1ZGUgPFFQaXhtYXA+CiAjaW5jbHVkZSA8a2FwcGxpY2F0aW9uLmg+CiAjaW5jbHVk ZSA8a2NvbmZpZy5oPgorI2luY2x1ZGUgPGtzdGFuZGFyZGRpcnMuaD4KICNpbmNsdWRlIDxrZ2xv YmFsLmg+CiAjaW5jbHVkZSA8a2dsb2JhbHNldHRpbmdzLmg+CiAKQEAgLTQ1LDkgKzQ3LDE0IEBA IG5hbWVzcGFjZSBLV2luCiAjaWZuZGVmIEtDTVJVTEVTCiAKIE9wdGlvbnM6Ok9wdGlvbnMoKQot ICAgIDogICBlbGVjdHJpY19ib3JkZXJzKCAwICksCi0gICAgICAgIGVsZWN0cmljX2JvcmRlcl9k ZWxheSgwKQogICAgIHsKKyAgICAvLyBJZiB0aGVyZSBpcyBhbnkgY29udGVudHMgaW4gdGhlIGJh Y2t1cCBmaWxlLCBpdCBtZWFucyB0aGF0IEtXaW4gY3Jhc2hlZAorICAgIC8vIHdoaWxlIHRlc3Rp bmcgYSBuZXcgY29uZmlnLiBSZXZlcnQgdGhlIGNvbmZpZy4KKyAgICAvLyBUT0RPOiBOb3RpZnkg dGhlIHVzZXI/CisgICAgYm9vbCBiYWNrdXBJbXBvcnRlZCA9IGltcG9ydEJhY2t1cCgpOworICAg IGtXYXJuaW5nKCAxMjEyLCBiYWNrdXBJbXBvcnRlZCApIDw8ICJUaGUgbmV3IHNldHRpbmdzIGhh dmUgbW9zdCBsaWtlbHkgY2F1c2VkIHRoZSBYIHNlcnZlciAiCisgICAgICAgICJ0byBjcmFzaC4g VGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoYXZlIGJlZW4gcmV2ZXJ0ZWQgdG8gdGhlaXIgb2xk IHZhbHVlcy4iOworCiAgICAgdXBkYXRlU2V0dGluZ3MoKTsKICAgICB9CiAKQEAgLTU1LDEzICs2 Miw0NCBAQCBPcHRpb25zOjp+T3B0aW9ucygpCiAgICAgewogICAgIH0KIAorCiB1bnNpZ25lZCBs b25nIE9wdGlvbnM6OnVwZGF0ZVNldHRpbmdzKCkKICAgICB7Ci0gICAgS1NoYXJlZENvbmZpZzo6 UHRyIF9jb25maWcgPSBLR2xvYmFsOjpjb25maWcoKTsKKyAgICByZXR1cm4gbG9hZFNldHRpbmdz KCBLR2xvYmFsOjpjb25maWcoKSApOworICAgIH0KKworYm9vbCBPcHRpb25zOjppbXBvcnRCYWNr dXAoKQorICAgIHsKKyAgICBRU3RyaW5nIGNvbmZpZ0ZpbGVOYW1lID0gS1N0YW5kYXJkRGlyczo6 bG9jYXRlKCAiY29uZmlnIiwgS0dsb2JhbDo6Y29uZmlnKCktPm5hbWUoKSApOworICAgIFFTdHJp bmcgYmFja3VwRmlsZU5hbWUgPSBjb25maWdGaWxlTmFtZSArICd+JzsKKworICAgIGlmICggIVFG aWxlOjpleGlzdHMoIGJhY2t1cEZpbGVOYW1lICkgKQorICAgICAgICB7CisgICAgICAgIHJldHVy biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgUUZpbGU6OnJlbW92ZSggY29uZmlnRmlsZU5hbWUg KTsKKyAgICBRRmlsZTo6cmVuYW1lKCBiYWNrdXBGaWxlTmFtZSwgY29uZmlnRmlsZU5hbWUgKTsK KworICAgIEtHbG9iYWw6OmNvbmZpZygpLT5yZXBhcnNlQ29uZmlndXJhdGlvbigpOworICAgIHJl dHVybiB0cnVlOworICAgIH0KKwordW5zaWduZWQgbG9uZyBPcHRpb25zOjpsb2FkU2V0dGluZ3Mo IEtTaGFyZWRDb25maWdQdHIgY29uZmlnRmlsZSApCisgICAgewogICAgIHVuc2lnbmVkIGxvbmcg Y2hhbmdlZCA9IDA7Ci0gICAgY2hhbmdlZCB8PSBLRGVjb3JhdGlvbk9wdGlvbnM6OnVwZGF0ZVNl dHRpbmdzKCBfY29uZmlnLmRhdGEoKSApOyAvLyByZWFkIGRlY29yYXRpb24gc2V0dGluZ3MKKyAg ICBjaGFuZ2VkIHw9IEtEZWNvcmF0aW9uT3B0aW9uczo6dXBkYXRlU2V0dGluZ3MoIGNvbmZpZ0Zp bGUuZGF0YSgpICk7IC8vIHJlYWQgZGVjb3JhdGlvbiBzZXR0aW5ncworCisgICAgbG9hZFdpbmRv d1NldHRpbmdzKCBjb25maWdGaWxlICk7CisgICAgbG9hZE1vdXNlQmluZGluZ3MoIGNvbmZpZ0Zp bGUgKTsKKyAgICBsb2FkQ29tcG9zaXRpbmdTZXR0aW5ncyggY29uZmlnRmlsZSApOwogCi0gICAg S0NvbmZpZ0dyb3VwIGNvbmZpZyhfY29uZmlnLCAiV2luZG93cyIpOworICAgIHJldHVybiBjaGFu Z2VkOworICAgIH0KKwordm9pZCBPcHRpb25zOjpsb2FkV2luZG93U2V0dGluZ3MoIEtTaGFyZWRD b25maWdQdHIgY29uZmlnRmlsZSApCisgICAgeworICAgIEtDb25maWdHcm91cCBjb25maWcoIGNv bmZpZ0ZpbGUsICJXaW5kb3dzIiApOwogICAgIG1vdmVNb2RlID0gc3RyaW5nVG9Nb3ZlUmVzaXpl TW9kZSggY29uZmlnLnJlYWRFbnRyeSgiTW92ZU1vZGUiLCAiT3BhcXVlIiApKTsKICAgICByZXNp emVNb2RlID0gc3RyaW5nVG9Nb3ZlUmVzaXplTW9kZSggY29uZmlnLnJlYWRFbnRyeSgiUmVzaXpl TW9kZSIsICJPcGFxdWUiICkpOwogICAgIHNob3dfZ2VvbWV0cnlfdGlwID0gY29uZmlnLnJlYWRF bnRyeSgiR2VvbWV0cnlUaXAiLCBmYWxzZSk7CkBAIC05NCwxMiArMTMyLDEyIEBAIHVuc2lnbmVk IGxvbmcgT3B0aW9uczo6dXBkYXRlU2V0dGluZ3MoKQogICAgIGlmKCAhZm9jdXNQb2xpY3lJc1Jl YXNvbmFibGUoKSkgLy8gIzQ4Nzg2LCBjb21tZW50cyAjNyBhbmQgbGF0ZXIKICAgICAgICAgZm9j dXNTdGVhbGluZ1ByZXZlbnRpb25MZXZlbCA9IDA7CiAKLSAgICBLQ29uZmlnR3JvdXAgZ1dpbmRv d3NDb25maWcoIF9jb25maWcsICJXaW5kb3dzIik7IC8vIGZyb20ga2RlZ2xvYmFscwotICAgIHhp bmVyYW1hRW5hYmxlZCA9IGdXaW5kb3dzQ29uZmlnLnJlYWRFbnRyeSAoIlhpbmVyYW1hRW5hYmxl ZCIsIHRydWUpOwotICAgIHhpbmVyYW1hUGxhY2VtZW50RW5hYmxlZCA9IGdXaW5kb3dzQ29uZmln LnJlYWRFbnRyeSAoIlhpbmVyYW1hUGxhY2VtZW50RW5hYmxlZCIsIHRydWUpOwotICAgIHhpbmVy YW1hTW92ZW1lbnRFbmFibGVkID0gZ1dpbmRvd3NDb25maWcucmVhZEVudHJ5ICgiWGluZXJhbWFN b3ZlbWVudEVuYWJsZWQiLCB0cnVlKTsKLSAgICB4aW5lcmFtYU1heGltaXplRW5hYmxlZCA9IGdX aW5kb3dzQ29uZmlnLnJlYWRFbnRyeSAoIlhpbmVyYW1hTWF4aW1pemVFbmFibGVkIiwgdHJ1ZSk7 Ci0gICAgeGluZXJhbWFGdWxsc2NyZWVuRW5hYmxlZCA9IGdXaW5kb3dzQ29uZmlnLnJlYWRFbnRy eSAoIlhpbmVyYW1hRnVsbHNjcmVlbkVuYWJsZWQiLCB0cnVlKTsKKyAgICAvLyBUaGlzIHdhcyBv bmNlIGxvYWRlZCBmcm9tIGtkZWdsb2JhbHMuCisgICAgeGluZXJhbWFFbmFibGVkID0gY29uZmln LnJlYWRFbnRyeSAoIlhpbmVyYW1hRW5hYmxlZCIsIHRydWUpOworICAgIHhpbmVyYW1hUGxhY2Vt ZW50RW5hYmxlZCA9IGNvbmZpZy5yZWFkRW50cnkgKCJYaW5lcmFtYVBsYWNlbWVudEVuYWJsZWQi LCB0cnVlKTsKKyAgICB4aW5lcmFtYU1vdmVtZW50RW5hYmxlZCA9IGNvbmZpZy5yZWFkRW50cnkg KCJYaW5lcmFtYU1vdmVtZW50RW5hYmxlZCIsIHRydWUpOworICAgIHhpbmVyYW1hTWF4aW1pemVF bmFibGVkID0gY29uZmlnLnJlYWRFbnRyeSAoIlhpbmVyYW1hTWF4aW1pemVFbmFibGVkIiwgdHJ1 ZSk7CisgICAgeGluZXJhbWFGdWxsc2NyZWVuRW5hYmxlZCA9IGNvbmZpZy5yZWFkRW50cnkgKCJY aW5lcmFtYUZ1bGxzY3JlZW5FbmFibGVkIiwgdHJ1ZSk7CiAKICAgICBwbGFjZW1lbnQgPSBQbGFj ZW1lbnQ6OnBvbGljeUZyb21TdHJpbmcoIGNvbmZpZy5yZWFkRW50cnkoIlBsYWNlbWVudCIpLCB0 cnVlICk7CiAgICAgeGluZXJhbWFQbGFjZW1lbnRTY3JlZW4gPSBxQm91bmQoIC0xLCBjb25maWcu cmVhZEVudHJ5KCAiWGluZXJhbWFQbGFjZW1lbnRTY3JlZW4iLCAtMSApLApAQCAtMTU1LDggKzE5 MywyOSBAQCB1bnNpZ25lZCBsb25nIE9wdGlvbnM6OnVwZGF0ZVNldHRpbmdzKCkKICAgICBoaWRl VXRpbGl0eVdpbmRvd3NGb3JJbmFjdGl2ZSA9IGNvbmZpZy5yZWFkRW50cnkoICJIaWRlVXRpbGl0 eVdpbmRvd3NGb3JJbmFjdGl2ZSIsIHRydWUpOwogICAgIHNob3dEZXNrdG9wSXNNaW5pbWl6ZUFs bCA9IGNvbmZpZy5yZWFkRW50cnkoICJTaG93RGVza3RvcElzTWluaW1pemVBbGwiLCBmYWxzZSAp OwogCisgICAgLy8gUmVhZCBidXR0b24gdG9vbHRpcCBhbmltYXRpb24gZWZmZWN0IGZyb20ga2Rl Z2xvYmFscworICAgIC8vIFNpbmNlIHdlIHdhbnQgdG8gYWxsb3cgdXNlcnMgdG8gZW5hYmxlIHdp bmRvdyBkZWNvcmF0aW9uIHRvb2x0aXBzCisgICAgLy8gYW5kIG5vdCBrc3R5bGUgdG9vbHRpcHMg YW5kIHZpc2UtdmVyc2EsIHdlIGRvbid0IHJlYWQgdGhlCisgICAgLy8gIkVmZmVjdE5vVG9vbHRp cCIgc2V0dGluZyBmcm9tIGtkZWdsb2JhbHMuCisKKyNpZiAwCisgICAgRklYTUU6IHdlIGhhdmUg bm8gbWFjIHN0eWxlIG1lbnUgaW1wbGVtZW50YXRpb24gaW4ga3dpbiBhbnltb3JlLCBzbyB0aGlz IGp1c3QgYnJlYWtzCisgICAgICAgICAgIHRoaW5ncyBmb3IgcGVvcGxlIQorICAgIEtDb25maWcg X2dsb2JhbENvbmZpZygia2RlZ2xvYmFscyIpOworICAgIEtDb25maWdHcm91cCBnbG9iYWxDb25m aWcoJl9nbG9iYWxDb25maWcsICJLREUiKTsKKyAgICB0b3BtZW51cyA9IGdsb2JhbENvbmZpZy5y ZWFkRW50cnkoIm1hY1N0eWxlIiwgZmFsc2UpOworI2Vsc2UKKyAgICB0b3BtZW51cyA9IGZhbHNl OworI2VuZGlmCisKKyAgICAvLyAgICBRVG9vbFRpcDo6c2V0R2xvYmFsbHlFbmFibGVkKCBkLT5z aG93X3Rvb2x0aXBzICk7CisgICAgLy8gS0RFNCB0aGlzIHByb2JhYmx5IG5lZWRzIHRvIGJlIGRv bmUgbWFudWFsbHkgaW4gY2xpZW50cworICAgIH0KKwordm9pZCBPcHRpb25zOjpsb2FkTW91c2VC aW5kaW5ncyggS1NoYXJlZENvbmZpZ1B0ciBjb25maWdGaWxlICkKKyAgICB7CiAgICAgLy8gTW91 c2UgYmluZGluZ3MKLSAgICBjb25maWcgPSBLQ29uZmlnR3JvdXAoX2NvbmZpZywiTW91c2VCaW5k aW5ncyIpOworICAgIEtDb25maWdHcm91cCBjb25maWcoIGNvbmZpZ0ZpbGUsICJNb3VzZUJpbmRp bmdzIiApOwogICAgIENtZEFjdGl2ZVRpdGxlYmFyMSA9IG1vdXNlQ29tbWFuZChjb25maWcucmVh ZEVudHJ5KCJDb21tYW5kQWN0aXZlVGl0bGViYXIxIiwiUmFpc2UiKSwgdHJ1ZSApOwogICAgIENt ZEFjdGl2ZVRpdGxlYmFyMiA9IG1vdXNlQ29tbWFuZChjb25maWcucmVhZEVudHJ5KCJDb21tYW5k QWN0aXZlVGl0bGViYXIyIiwiTG93ZXIiKSwgdHJ1ZSApOwogICAgIENtZEFjdGl2ZVRpdGxlYmFy MyA9IG1vdXNlQ29tbWFuZChjb25maWcucmVhZEVudHJ5KCJDb21tYW5kQWN0aXZlVGl0bGViYXIz IiwiT3BlcmF0aW9ucyBtZW51IiksIHRydWUgKTsKQEAgLTE3Miw0MiArMjMxLDE5IEBAIHVuc2ln bmVkIGxvbmcgT3B0aW9uczo6dXBkYXRlU2V0dGluZ3MoKQogICAgIENtZEFsbDIgPSBtb3VzZUNv bW1hbmQoY29uZmlnLnJlYWRFbnRyeSgiQ29tbWFuZEFsbDIiLCJUb2dnbGUgcmFpc2UgYW5kIGxv d2VyIiksIGZhbHNlICk7CiAgICAgQ21kQWxsMyA9IG1vdXNlQ29tbWFuZChjb25maWcucmVhZEVu dHJ5KCJDb21tYW5kQWxsMyIsIlJlc2l6ZSIpLCBmYWxzZSApOwogICAgIENtZEFsbFdoZWVsID0g bW91c2VXaGVlbENvbW1hbmQoY29uZmlnLnJlYWRFbnRyeSgiQ29tbWFuZEFsbFdoZWVsIiwiTm90 aGluZyIpKTsKKyAgICB9CiAKLSAgICBjb25maWc9S0NvbmZpZ0dyb3VwKF9jb25maWcsIkNvbXBv c2l0aW5nIik7Ci0gICAgcmVmcmVzaFJhdGUgPSBjb25maWcucmVhZEVudHJ5KCAiUmVmcmVzaFJh dGUiLCAwICk7Ci0KLSAgICAvLyBSZWFkIGJ1dHRvbiB0b29sdGlwIGFuaW1hdGlvbiBlZmZlY3Qg ZnJvbSBrZGVnbG9iYWxzCi0gICAgLy8gU2luY2Ugd2Ugd2FudCB0byBhbGxvdyB1c2VycyB0byBl bmFibGUgd2luZG93IGRlY29yYXRpb24gdG9vbHRpcHMKLSAgICAvLyBhbmQgbm90IGtzdHlsZSB0 b29sdGlwcyBhbmQgdmlzZS12ZXJzYSwgd2UgZG9uJ3QgcmVhZCB0aGUKLSAgICAvLyAiRWZmZWN0 Tm9Ub29sdGlwIiBzZXR0aW5nIGZyb20ga2RlZ2xvYmFscy4KLQotI2lmIDAKLSAgICBGSVhNRTog d2UgaGF2ZSBubyBtYWMgc3R5bGUgbWVudSBpbXBsZW1lbnRhdGlvbiBpbiBrd2luIGFueW1vcmUs IHNvIHRoaXMganVzdCBicmVha3MKLSAgICAgICAgICAgdGhpbmdzIGZvciBwZW9wbGUhCi0gICAg S0NvbmZpZyBfZ2xvYmFsQ29uZmlnKCJrZGVnbG9iYWxzIik7Ci0gICAgS0NvbmZpZ0dyb3VwIGds b2JhbENvbmZpZygmX2dsb2JhbENvbmZpZywgIktERSIpOwotICAgIHRvcG1lbnVzID0gZ2xvYmFs Q29uZmlnLnJlYWRFbnRyeSgibWFjU3R5bGUiLCBmYWxzZSk7Ci0jZWxzZQotICAgIHRvcG1lbnVz ID0gZmFsc2U7Ci0jZW5kaWYKLQotLy8gICAgUVRvb2xUaXA6OnNldEdsb2JhbGx5RW5hYmxlZCgg ZC0+c2hvd190b29sdGlwcyApOwotLy8gS0RFNCB0aGlzIHByb2JhYmx5IG5lZWRzIHRvIGJlIGRv bmUgbWFudWFsbHkgaW4gY2xpZW50cwotCit2b2lkIE9wdGlvbnM6OmxvYWRDb21wb3NpdGluZ1Nl dHRpbmdzKCBLU2hhcmVkQ29uZmlnUHRyIGNvbmZpZ0ZpbGUgKQorICAgIHsKICAgICAvLyBEcml2 ZXItc3BlY2lmaWMgY29uZmlnIGRldGVjdGlvbgogICAgIENvbXBvc2l0aW5nUHJlZnMgcHJlZnM7 CiAgICAgcHJlZnMuZGV0ZWN0KCk7Ci0gICAgcmVsb2FkQ29tcG9zaXRpbmdTZXR0aW5ncyggcHJl ZnMgKTsKIAotICAgIHJldHVybiBjaGFuZ2VkOwotICAgIH0KKyAgICAvLyBDb21wb3NpdGluZyBz ZXR0aW5ncworICAgIEtDb25maWdHcm91cCBjb25maWcoIGNvbmZpZ0ZpbGUsICJDb21wb3NpdGlu ZyIpOwogCi12b2lkIE9wdGlvbnM6OnJlbG9hZENvbXBvc2l0aW5nU2V0dGluZ3MoY29uc3QgQ29t cG9zaXRpbmdQcmVmcyYgcHJlZnMpCi0gICAgewotICAgIEtTaGFyZWRDb25maWc6OlB0ciBfY29u ZmlnID0gS0dsb2JhbDo6Y29uZmlnKCk7Ci0gICAgS0NvbmZpZ0dyb3VwIGNvbmZpZyhfY29uZmln LCAiQ29tcG9zaXRpbmciKTsKKyAgICByZWZyZXNoUmF0ZSA9IGNvbmZpZy5yZWFkRW50cnkoICJS ZWZyZXNoUmF0ZSIsIDAgKTsKIAotICAgIC8vIENvbXBvc2l0aW5nIHNldHRpbmdzCiAgICAgdXNl Q29tcG9zaXRpbmcgPSBjb25maWcucmVhZEVudHJ5KCJFbmFibGVkIiwgcHJlZnMuZW5hYmxlQ29t cG9zaXRpbmcoKSk7CiAgICAgUVN0cmluZyBjb21wb3NpdGluZ0JhY2tlbmQgPSBjb25maWcucmVh ZEVudHJ5KCJCYWNrZW5kIiwgIk9wZW5HTCIpOwogICAgIGlmKCBjb21wb3NpdGluZ0JhY2tlbmQg PT0gIlhSZW5kZXIiICkKZGlmZiAtLWdpdCBhL29wdGlvbnMuaCBiL29wdGlvbnMuaAppbmRleCBj N2JjZDVmLi5kYjA4NWY3IDEwMDY0NAotLS0gYS9vcHRpb25zLmgKKysrIGIvb3B0aW9ucy5oCkBA IC00NCw2ICs0NCw3IEBAIGNsYXNzIE9wdGlvbnMgOiBwdWJsaWMgS0RlY29yYXRpb25PcHRpb25z CiAgICAgICAgIH5PcHRpb25zKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIHVw ZGF0ZVNldHRpbmdzKCk7CisgICAgICAgIGJvb2wgaW1wb3J0QmFja3VwKCk7CiAKICAgICAgICAg LyohCiAgICAgICAgICAgRGlmZmVyZW50IGZvY3VzIHBvbGljaWVzOgpAQCAtMzEzLDYgKzMxNCwx MiBAQCBjbGFzcyBPcHRpb25zIDogcHVibGljIEtEZWNvcmF0aW9uT3B0aW9ucwogICAgICAgICBk b3VibGUgYW5pbWF0aW9uVGltZUZhY3RvcigpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKKyAgICAg ICAgdW5zaWduZWQgbG9uZyBsb2FkU2V0dGluZ3MoIEtTaGFyZWRDb25maWdQdHIgY29uZmlnRmls ZSApOworICAgICAgICB2b2lkIGxvYWRXaW5kb3dTZXR0aW5ncyggS1NoYXJlZENvbmZpZ1B0ciBj b25maWdGaWxlICk7CisgICAgICAgIHZvaWQgbG9hZE1vdXNlQmluZGluZ3MoIEtTaGFyZWRDb25m aWdQdHIgY29uZmlnRmlsZSApOworICAgICAgICB2b2lkIGxvYWRDb21wb3NpdGluZ1NldHRpbmdz KCBLU2hhcmVkQ29uZmlnUHRyIGNvbmZpZ0ZpbGUgKTsKKworCiAgICAgICAgIFdpbmRvd09wZXJh dGlvbiBPcFRpdGxlYmFyRGJsQ2xpY2s7CiAKICAgICAvLyBtb3VzZSBiaW5kaW5ncwpAQCAtMzQy LDcgKzM0OSw2IEBAIGNsYXNzIE9wdGlvbnMgOiBwdWJsaWMgS0RlY29yYXRpb25PcHRpb25zCiAg ICAgICAgIGludCBhbmltYXRpb25TcGVlZDsgLy8gMCAtIGluc3RhbnQsIDUgLSB2ZXJ5IHNsb3cK IAogICAgICAgICBNb3VzZUNvbW1hbmQgd2hlZWxUb01vdXNlQ29tbWFuZCggTW91c2VXaGVlbENv bW1hbmQgY29tLCBpbnQgZGVsdGEgKTsKLSAgICAgICAgdm9pZCByZWxvYWRDb21wb3NpdGluZ1Nl dHRpbmdzKGNvbnN0IENvbXBvc2l0aW5nUHJlZnMmIHByZWZzKTsKICAgICB9OwogCiBleHRlcm4g T3B0aW9ucyogb3B0aW9uczsKZGlmZiAtLWdpdCBhL29yZy5rZGUuS1dpbi54bWwgYi9vcmcua2Rl LktXaW4ueG1sCmluZGV4IGVjMjczNzIuLmRkYzA2MDUgMTAwNjQ0Ci0tLSBhL29yZy5rZGUuS1dp bi54bWwKKysrIGIvb3JnLmtkZS5LV2luLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDxtZXRo b2QgbmFtZT0icHJldmlvdXNEZXNrdG9wIi8+CiAgICAgPG1ldGhvZCBuYW1lPSJjaXJjdWxhdGVE ZXNrdG9wQXBwbGljYXRpb25zIi8+CiAgICAgPHNpZ25hbCBuYW1lPSJyZWxvYWRDb25maWciLz4K LSAgICA8c2lnbmFsIG5hbWU9InJlaW5pdENvbXBvc2l0aW5nIi8+CisgICAgPHNpZ25hbCBuYW1l PSJyZWxvYWRDb21wb3NpdGluZ0NvbmZpZyIvPgogICAgIDxtZXRob2QgbmFtZT0ibG9hZEVmZmVj dCI+CiAgICAgICA8YXJnIG5hbWU9Im5hbWUiIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KICAg ICA8L21ldGhvZD4KQEAgLTQ5LDE2ICs0OSwxMyBAQAogICAgIDwvbWV0aG9kPgogICAgIDxtZXRo b2QgbmFtZT0ibG9hZGVkRWZmZWN0cyI+CiAgICAgICA8YXJnIHR5cGU9ImFzIiBkaXJlY3Rpb249 Im91dCIvPgotICAgIDwvbWV0aG9kPiAgICAKKyAgICA8L21ldGhvZD4KICAgICA8bWV0aG9kIG5h bWU9Imxpc3RPZkVmZmVjdHMiPgogICAgICAgPGFyZyB0eXBlPSJhcyIgZGlyZWN0aW9uPSJvdXQi Lz4KICAgICA8L21ldGhvZD4KICAgICA8bWV0aG9kIG5hbWU9ImNvbXBvc2l0aW5nQWN0aXZlIj4K ICAgICAgIDxhcmcgdHlwZT0iYiIgZGlyZWN0aW9uPSJvdXQiLz4KICAgICA8L21ldGhvZD4KLSAg ICA8bWV0aG9kIG5hbWU9IndhaXRGb3JDb21wb3NpdGluZ1NldHVwIj4KLSAgICAgIDxhcmcgdHlw ZT0iYiIgZGlyZWN0aW9uPSJvdXQiLz4KLSAgICA8L21ldGhvZD4KICAgICA8bWV0aG9kIG5hbWU9 ImRlY29yYXRpb25TdXBwb3J0ZWRDb2xvcnMiPgogICAgICAgPGFyZyB0eXBlPSJhaSIgZGlyZWN0 aW9uPSJvdXQiLz4KICAgICAgIDxhbm5vdGF0aW9uIG5hbWU9ImNvbS50cm9sbHRlY2guUXREQnVz LlF0VHlwZU5hbWUuT3V0MCIgdmFsdWU9IlFMaXN0Jmx0O2ludD4iLz4KZGlmZiAtLWdpdCBhL3dv cmtzcGFjZS5jcHAgYi93b3Jrc3BhY2UuY3BwCmluZGV4IDAzZjAyYzguLmZjY2YyODUgMTAwNjQ0 Ci0tLSBhL3dvcmtzcGFjZS5jcHAKKysrIGIvd29ya3NwYWNlLmNwcApAQCAtMTQ3LDcgKzE0Nyw3 IEBAIFdvcmtzcGFjZTo6V29ya3NwYWNlKCBib29sIHJlc3RvcmUgKQogICAgIFFEQnVzQ29ubmVj dGlvbiBkYnVzID0gUURCdXNDb25uZWN0aW9uOjpzZXNzaW9uQnVzKCk7CiAgICAgZGJ1cy5yZWdp c3Rlck9iamVjdCgiL0tXaW4iLCB0aGlzKTsKICAgICBkYnVzLmNvbm5lY3QoUVN0cmluZygpLCAi L0tXaW4iLCAib3JnLmtkZS5LV2luIiwgInJlbG9hZENvbmZpZyIsIHRoaXMsIFNMT1Qoc2xvdFJl bG9hZENvbmZpZygpKSk7Ci0gICAgZGJ1cy5jb25uZWN0KFFTdHJpbmcoKSwgIi9LV2luIiwgIm9y Zy5rZGUuS1dpbiIsICJyZWluaXRDb21wb3NpdGluZyIsIHRoaXMsIFNMT1Qoc2xvdFJlaW5pdENv bXBvc2l0aW5nKCkpKTsKKyAgICBkYnVzLmNvbm5lY3QoUVN0cmluZygpLCAiL0tXaW4iLCAib3Jn LmtkZS5LV2luIiwgInJlbG9hZENvbXBvc2l0aW5nQ29uZmlnIiwgdGhpcywgU0xPVChzbG90UmVs b2FkQ29tcG9zaXRpbmdDb25maWcoKSkpOwogICAgIF9zZWxmID0gdGhpczsKICAgICBtZ3IgPSBu ZXcgUGx1Z2luTWdyOwogICAgIFFYMTFJbmZvIGluZm87CkBAIC0xMDgxLDE1ICsxMDgxLDE3IEBA IHZvaWQgV29ya3NwYWNlOjpzbG90UmVjb25maWd1cmUoKQogICAgICAgICB9CiAgICAgfQogCi12 b2lkIFdvcmtzcGFjZTo6c2xvdFJlaW5pdENvbXBvc2l0aW5nKCkKK3ZvaWQgV29ya3NwYWNlOjpz bG90UmVsb2FkQ29tcG9zaXRpbmdDb25maWcoKQogICAgIHsKLSAgICAvLyBSZXBhcnNlIGNvbmZp Zy4gQ29uZmlnIG9wdGlvbnMgd2lsbCBiZSByZWxvYWRlZCBieSBzZXR1cENvbXBvc2l0aW5nKCkK KyAgICAvLyBMb2FkIHRoZSBjb21wb3NpdGluZyBzZXR0aW5ncyBmcm9tIHRoZSB0ZXN0IGNvbmZp Zy4KICAgICBLR2xvYmFsOjpjb25maWcoKS0+cmVwYXJzZUNvbmZpZ3VyYXRpb24oKTsKICAgICBv cHRpb25zLT51cGRhdGVTZXR0aW5ncygpOwogCi0gICAgLy8gU3RvcCBhbnkgY3VycmVudCBjb21w b3NpdGluZworICAgIC8vIFVwZGF0ZSBhbnkgc2V0dGluZ3MgdGhhdCBjYW4gYmUgc2V0IGluIHRo ZSBjb21wb3NpdGluZyBrY20uCisgICAgdXBkYXRlRWxlY3RyaWNCb3JkZXJzKCk7CisKKyAgICAv LyBSZWluaXRpYWxpemUgY29tcG9zaXRpbmcuCiAgICAgZmluaXNoQ29tcG9zaXRpbmcoKTsKLSAg ICAvLyBBbmQgc3RhcnQgbmV3IG9uZQogICAgIHNldHVwQ29tcG9zaXRpbmcoKTsKICAgICBpZigg ZWZmZWN0cyApIC8vIHNldHVwQ29tcG9zaXRpbmcoKSBtYXkgZmFpbAogICAgICAgICBlZmZlY3Rz LT5yZWNvbmZpZ3VyZSgpOwpkaWZmIC0tZ2l0IGEvd29ya3NwYWNlLmggYi93b3Jrc3BhY2UuaApp bmRleCAzMmE5MjhkLi5jNzEwYmZkIDEwMDY0NAotLS0gYS93b3Jrc3BhY2UuaAorKysgYi93b3Jr c3BhY2UuaApAQCAtNDY5LDcgKzQ2OSw2IEBAIGNsYXNzIFdvcmtzcGFjZSA6IHB1YmxpYyBRT2Jq ZWN0LCBwdWJsaWMgS0RlY29yYXRpb25EZWZpbmVzCiAKICAgICAgICAgdm9pZCByZWNvbmZpZ3Vy ZSgpOwogICAgICAgICB2b2lkIHNsb3RSZWNvbmZpZ3VyZSgpOwotICAgICAgICB2b2lkIHNsb3RS ZWluaXRDb21wb3NpdGluZygpOwogCiAgICAgICAgIHZvaWQgc2xvdEtpbGxXaW5kb3coKTsKIApA QCAtNTAwLDYgKzQ5OSw3IEBAIGNsYXNzIFdvcmtzcGFjZSA6IHB1YmxpYyBRT2JqZWN0LCBwdWJs aWMgS0RlY29yYXRpb25EZWZpbmVzCiAgICAgICAgIHZvaWQgd3JpdGVXaW5kb3dSdWxlcygpOwog ICAgICAgICB2b2lkIHNsb3RCbG9ja1Nob3J0Y3V0cyhpbnQgZGF0YSk7CiAgICAgICAgIHZvaWQg c2xvdFJlbG9hZENvbmZpZygpOworICAgICAgICB2b2lkIHNsb3RSZWxvYWRDb21wb3NpdGluZ0Nv bmZpZygpOwogICAgICAgICB2b2lkIHNldFBvcHVwQ2xpZW50T3BhY2l0eSggUUFjdGlvbiogYWN0 aW9uICk7CiAgICAgICAgIHZvaWQgc2V0dXBDb21wb3NpdGluZygpOwogICAgICAgICB2b2lkIHBl cmZvcm1Db21wb3NpdGluZygpOwo= ------=_Part_32705_2820695.1227460538602 Content-Type: text/x-patch; name=cleanup.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fnvy1ko91 Content-Disposition: attachment; filename=cleanup.patch Y29tbWl0IDhlMDQwNTQ0MTI5NGIzNTUwYmFiOTJhOWQ4MDcwNzcxZmM0MDQ1YzkKQXV0aG9yOiBE YXZpZCBOYWRsaW5nZXIgPGRhdmlkLm5hZGxpbmdlckBnbWFpbC5jb20+CkRhdGU6ICAgV2VkIE5v diAxOSAyMTowMDozNSAyMDA4ICswMTAwCgogICAgRml4ZWQgYSBsaXR0bGUgYnVnIChkcm9wZG93 bnMgb24gdGhlIGdlbmVyYWwgdGFiIHdlcmUgbm90IHVwZGF0ZWQgY29ycmVjdGx5KTsgcmVtb3Zl ZCBhIGZldyB1bm5lZWRlZCBmdW5jdGlvbiBjYWxscyBhbmQgc3RhbGUgY29ubmVjdHMsIGNsZWFu ZWQgdXAgYSBiaXQuCgpkaWZmIC0tZ2l0IGEva2Nta3dpbi9rd2luY29tcG9zaXRpbmcvbWFpbi5j cHAgYi9rY21rd2luL2t3aW5jb21wb3NpdGluZy9tYWluLmNwcAppbmRleCBmYWM2N2E1Li5hOWFk ODA2IDEwMDY0NAotLS0gYS9rY21rd2luL2t3aW5jb21wb3NpdGluZy9tYWluLmNwcAorKysgYi9r Y21rd2luL2t3aW5jb21wb3NpdGluZy9tYWluLmNwcApAQCAtODgsOCArODgsNiBAQCBLV2luQ29t cG9zaXRpbmdDb25maWc6OktXaW5Db21wb3NpdGluZ0NvbmZpZyhRV2lkZ2V0ICpwYXJlbnQsIGNv bnN0IFFWYXJpYW50TGlzdAogICAgIGNvbm5lY3QodWkuZWZmZWN0QW5pbWF0aW9ucywgU0lHTkFM KHRvZ2dsZWQoYm9vbCkpLCB0aGlzLCBTTE9UKGNoYW5nZWQoKSkpOwogCiAgICAgY29ubmVjdCh1 aS5lZmZlY3RTZWxlY3RvciwgU0lHTkFMKGNoYW5nZWQoYm9vbCkpLCB0aGlzLCBTTE9UKGNoYW5n ZWQoKSkpOwotICAgIGNvbm5lY3QodWkuZWZmZWN0U2VsZWN0b3IsIFNJR05BTChjb25maWdDb21t aXR0ZWQoY29uc3QgUUJ5dGVBcnJheSYpKSwKLSAgICAgICAgICAgIHRoaXMsIFNMT1QocmVwYXJz ZUNvbmZpZ3VyYXRpb24oY29uc3QgUUJ5dGVBcnJheSYpKSk7CiAKICAgICBjb25uZWN0KHVpLndp bmRvd1N3aXRjaGluZ0NvbWJvLCBTSUdOQUwoY3VycmVudEluZGV4Q2hhbmdlZChpbnQpKSwgdGhp cywgU0xPVChjaGFuZ2VkKCkpKTsKICAgICBjb25uZWN0KHVpLmRlc2t0b3BTd2l0Y2hpbmdDb21i bywgU0lHTkFMKGN1cnJlbnRJbmRleENoYW5nZWQoaW50KSksIHRoaXMsIFNMT1QoY2hhbmdlZCgp KSk7CkBAIC05OCw3ICs5Niw2IEBAIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6S1dpbkNvbXBvc2l0 aW5nQ29uZmlnKFFXaWRnZXQgKnBhcmVudCwgY29uc3QgUVZhcmlhbnRMaXN0CiAgICAgY29ubmVj dCh1aS5lZGdlc19tb25pdG9yLCBTSUdOQUwoY2hhbmdlZCgpKSwgdGhpcywgU0xPVChjaGFuZ2Vk KCkpKTsKICAgICBjb25uZWN0KHVpLmVkZ2VzX21vbml0b3IsIFNJR05BTChlZGdlU2VsZWN0aW9u Q2hhbmdlZChpbnQsaW50KSksIHRoaXMsIFNMT1QoZWxlY3RyaWNCb3JkZXJTZWxlY3Rpb25DaGFu Z2VkKGludCxpbnQpKSk7CiAKLSAgICBjb25uZWN0KHVpLmNvbXBvc2l0aW5nVHlwZSwgU0lHTkFM KGN1cnJlbnRJbmRleENoYW5nZWQoaW50KSksIHRoaXMsIFNMT1QoY29tcG9zaXRpbmdNb2RlQ2hh bmdlZCgpKSk7CiAgICAgY29ubmVjdCh1aS5jb21wb3NpdGluZ1R5cGUsIFNJR05BTChjdXJyZW50 SW5kZXhDaGFuZ2VkKGludCkpLCB0aGlzLCBTTE9UKGNoYW5nZWQoKSkpOwogICAgIGNvbm5lY3Qo dWkud2luZG93VGh1bWJuYWlscywgU0lHTkFMKGFjdGl2YXRlZChpbnQpKSwgdGhpcywgU0xPVChj aGFuZ2VkKCkpKTsKICAgICBjb25uZWN0KHVpLmRpc2FibGVDaGVja3MsIFNJR05BTCh0b2dnbGVk KGJvb2wpKSwgdGhpcywgU0xPVChjaGFuZ2VkKCkpKTsKQEAgLTIyOCwxNCArMjI1LDE2IEBAIHZv aWQgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjpjdXJyZW50VGFiQ2hhbmdlZChpbnQgdGFiKQogICAg IC8vIGJsb2NrIHNpZ25hbHMgdG8gZG9uJ3QgZW1pdCB0aGUgY2hhbmdlZCgpLXNpZ25hbCBieSBq dXN0IHN3aXRjaGluZyB0aGUgY3VycmVudCB0YWIKICAgICBibG9ja1NpZ25hbHModHJ1ZSk7CiAg ICAgLy8gd3JpdGUgcG9zc2libGUgY2hhbmdlcyBkb25lIHRvIHN5bmNocm9uaXplIGVmZmVjdCBj aGVja2JveGVzIGFuZCBzZWxlY3RvcgorICAgIC8vIFRPRE86IFRoaXMgc2VnbWVudCBpcyBwcm9u ZSB0byBmYWlsIHdoZW4gdGhlIFVJIGlzIGNoYW5nZWQ7CisgICAgLy8geW91J2xsIG1vc3QgbGlr ZWx5IG5vdCB0aGluayBvZiB0aGUgaGFyZCBjb2RlZCBudW1iZXJzIGhlcmUgd2hlbiBqdXN0IGNo YW5naW5nIHRoZSBvcmRlciBvZiB0aGUgdGFicy4KICAgICBpZiAodGFiID09IDApCiAgICAgewog ICAgICAgICAvLyBHZW5lcmFsIHRhYiB3YXMgYWN0aXZhdGVkCiAgICAgICAgIHNhdmVFZmZlY3Rz VGFiKCk7CiAgICAgICAgIGxvYWRHZW5lcmFsVGFiKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7 CisgICAgICAgIH0KKyAgICBlbHNlIGlmICggdGFiID09IDIgKQorICAgICAgICB7CiAgICAgICAg IC8vIEVmZmVjdHMgdGFiIHdhcyBhY3RpdmF0ZWQKICAgICAgICAgc2F2ZUdlbmVyYWxUYWIoKTsK ICAgICAgICAgbG9hZEVmZmVjdHNUYWIoKTsKQEAgLTI2Niw2ICsyNjUsOCBAQCB2b2lkIEtXaW5D b21wb3NpdGluZ0NvbmZpZzo6bG9hZEdlbmVyYWxUYWIoKQogI3VuZGVmIExPQURfRUZGRUNUX0NP TkZJRwogCiAgICAgLy8gd2luZG93IHN3aXRjaGluZworICAgIC8vIFNldCBjdXJyZW50IG9wdGlv biB0byAibm9uZSIgaWYgbm8gcGx1Z2luIGlzIGFjdGl2YXRlZC4KKyAgICB1aS53aW5kb3dTd2l0 Y2hpbmdDb21iby0+c2V0Q3VycmVudEluZGV4KCAwICk7CiAgICAgaWYoIGVmZmVjdEVuYWJsZWQo ICJib3hzd2l0Y2giLCBlZmZlY3Rjb25maWcgKSkKICAgICAgICAgdWkud2luZG93U3dpdGNoaW5n Q29tYm8tPnNldEN1cnJlbnRJbmRleCggMSApOwogICAgIGlmKCBlZmZlY3RFbmFibGVkKCAiY292 ZXJzd2l0Y2giLCBlZmZlY3Rjb25maWcgKSkKQEAgLTI3NywxNCArMjc4LDE0IEBAIHZvaWQgS1dp bkNvbXBvc2l0aW5nQ29uZmlnOjpsb2FkR2VuZXJhbFRhYigpCiAgICAgICAgIHVpLndpbmRvd1N3 aXRjaGluZ0NvbWJvLT5zZXRDdXJyZW50SW5kZXgoIDIgKTsKIAogICAgIC8vIGRlc2t0b3Agc3dp dGNoaW5nCisgICAgLy8gU2V0IGN1cnJlbnQgb3B0aW9uIHRvICJub25lIiBpZiBubyBwbHVnaW4g aXMgYWN0aXZhdGVkLgorICAgIHVpLmRlc2t0b3BTd2l0Y2hpbmdDb21iby0+c2V0Q3VycmVudElu ZGV4KCAwICk7CiAgICAgaWYoIGVmZmVjdEVuYWJsZWQoICJzbGlkZSIsIGVmZmVjdGNvbmZpZyAp KQogICAgICAgICB1aS5kZXNrdG9wU3dpdGNoaW5nQ29tYm8tPnNldEN1cnJlbnRJbmRleCggMSAp OwogICAgIEtDb25maWdHcm91cCBjdWJlY29uZmlnKG1OZXdDb25maWcsICJFZmZlY3QtQ3ViZSIp OwogICAgIGlmKCBlZmZlY3RFbmFibGVkKCAiY3ViZSIsIGVmZmVjdGNvbmZpZyApICYmIGN1YmVj b25maWcucmVhZEVudHJ5KCJBbmltYXRlRGVza3RvcENoYW5nZSIsIGZhbHNlKSkKICAgICAgICAg dWkuZGVza3RvcFN3aXRjaGluZ0NvbWJvLT5zZXRDdXJyZW50SW5kZXgoIDIgKTsKLQotICAgIGxv YWRFbGVjdHJpY0JvcmRlcnMoKTsKLX0KKyAgICB9CiAKIGJvb2wgS1dpbkNvbXBvc2l0aW5nQ29u ZmlnOjplZmZlY3RFbmFibGVkKCBjb25zdCBRU3RyaW5nJiBlZmZlY3QsIGNvbnN0IEtDb25maWdH cm91cCYgY2ZnICkgY29uc3QKIHsKQEAgLTMzNSwxMSArMzM2LDEyIEBAIHZvaWQgS1dpbkNvbXBv c2l0aW5nQ29uZmlnOjpsb2FkKCkKICAgICBjb3B5UGx1Z2luc1RvVG1wQ29uZmlnKCk7CiAKICAg ICBsb2FkR2VuZXJhbFRhYigpOworICAgIGxvYWRFbGVjdHJpY0JvcmRlcnMoKTsKICAgICBsb2Fk RWZmZWN0c1RhYigpOwogICAgIGxvYWRBZHZhbmNlZFRhYigpOwogCiAgICAgZW1pdCBjaGFuZ2Vk KCBmYWxzZSApOwotfQorICAgIH0KIAogdm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OnNhdmVH ZW5lcmFsVGFiKCkKICAgICB7CkBAIC00MjMsOSArNDI1LDcgQEAgdm9pZCBLV2luQ29tcG9zaXRp bmdDb25maWc6OnNhdmVHZW5lcmFsVGFiKCkKICAgICAgICAgfQogICAgIEtDb25maWdHcm91cCBj dWJlY29uZmlnKG1OZXdDb25maWcsICJFZmZlY3QtQ3ViZSIpOwogICAgIGN1YmVjb25maWcud3Jp dGVFbnRyeSgiQW5pbWF0ZURlc2t0b3BDaGFuZ2UiLCBjdWJlRGVza3RvcFN3aXRjaGluZyk7Ci0K LSAgICBzYXZlRWxlY3RyaWNCb3JkZXJzKCk7Ci19CisgICAgfQogCiB2b2lkIEtXaW5Db21wb3Np dGluZ0NvbmZpZzo6c2F2ZUVmZmVjdHNUYWIoKQogewpkaWZmIC0tZ2l0IGEvd29ya3NwYWNlLmNw cCBiL3dvcmtzcGFjZS5jcHAKaW5kZXggZmNjZjI4NS4uODllNGQyYyAxMDA2NDQKLS0tIGEvd29y a3NwYWNlLmNwcAorKysgYi93b3Jrc3BhY2UuY3BwCkBAIC05NzIsMTkgKzk3Miw2IEBAIHZvaWQg V29ya3NwYWNlOjpyZWNvbmZpZ3VyZSgpCiAgICAgcmVjb25maWd1cmVUaW1lci5zdGFydCggMjAw ICk7CiAgICAgfQogCi0vLyBUaGlzIERCVVMgY2FsbCBpcyB1c2VkIGJ5IHRoZSBjb21wb3NpdGlu ZyBrY20uIFNpbmNlIHRoZSByZWNvbmZpZ3VyZSgpCi0vLyBEQlVTIGNhbGwgZGVsYXlzIHRoZSBh Y3R1YWwgcmVjb25maWd1cmluZywgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGltbWVkaWF0ZWx5Ci0v LyBjYWxsIGNvbXBvc2l0aW5nQWN0aXZlKCkuIFRoZXJlZm9yZSB0aGUga2NtIHdpbGwgaW5zdGVh ZCBjYWxsIHRoaXMgdG8gZW5zdXJlCi0vLyB0aGUgcmVjb25maWd1cmluZyBoYXMgYWxyZWFkeSBo YXBwZW5lZC4KLWJvb2wgV29ya3NwYWNlOjp3YWl0Rm9yQ29tcG9zaXRpbmdTZXR1cCgpCi0gICAg ewotICAgIGlmKCAhcmVjb25maWd1cmVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm4g ZmFsc2U7Ci0gICAgcmVjb25maWd1cmVUaW1lci5zdG9wKCk7Ci0gICAgc2xvdFJlY29uZmlndXJl KCk7Ci0gICAgcmV0dXJuIGNvbXBvc2l0aW5nQWN0aXZlKCk7Ci0gICAgfQotCiB2b2lkIFdvcmtz cGFjZTo6c2xvdFNldHRpbmdzQ2hhbmdlZChpbnQgY2F0ZWdvcnkpCiAgICAgewogICAgIGtEZWJ1 ZygxMjEyKSA8PCAiV29ya3NwYWNlOjpzbG90U2V0dGluZ3NDaGFuZ2VkKCkiOwpAQCAtMTA2NSw3 ICsxMDUyLDYgQEAgdm9pZCBXb3Jrc3BhY2U6OnNsb3RSZWNvbmZpZ3VyZSgpCiAgICAgICAgIHNl dHVwQ29tcG9zaXRpbmcoKTsKICAgICAgICAgaWYoIGVmZmVjdHMgKSAvLyBzZXR1cENvbXBvc2l0 aW5nKCkgbWF5IGZhaWwKICAgICAgICAgICAgIGVmZmVjdHMtPnJlY29uZmlndXJlKCk7Ci0gICAg ICAgIGFkZFJlcGFpbnRGdWxsKCk7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgZmluaXNoQ29t cG9zaXRpbmcoKTsKZGlmZiAtLWdpdCBhL3dvcmtzcGFjZS5oIGIvd29ya3NwYWNlLmgKaW5kZXgg YzcxMGJmZC4uNGJjNzhmZiAxMDA2NDQKLS0tIGEvd29ya3NwYWNlLmgKKysrIGIvd29ya3NwYWNl LmgKQEAgLTI2Miw4ICsyNjIsNyBAQCBjbGFzcyBXb3Jrc3BhY2UgOiBwdWJsaWMgUU9iamVjdCwg cHVibGljIEtEZWNvcmF0aW9uRGVmaW5lcwogICAgICAgICB2b2lkIHByZXZpb3VzRGVza3RvcCgp OwogICAgICAgICB2b2lkIGNpcmN1bGF0ZURlc2t0b3BBcHBsaWNhdGlvbnMoKTsKICAgICAgICAg Ym9vbCBjb21wb3NpdGluZ0FjdGl2ZSgpOwotICAgICAgICBib29sIHdhaXRGb3JDb21wb3NpdGlu Z1NldHVwKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHZvaWQgc2V0Q3VycmVudFNjcmVlbiggaW50 IG5ld19zY3JlZW4gKTsKIAogICAgICAgICBRU3RyaW5nIGRlc2t0b3BOYW1lKCBpbnQgZGVzayAp IGNvbnN0Owo= ------=_Part_32705_2820695.1227460538602 Content-Type: text/x-patch; name=code-polishing.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fnvy1s1x2 Content-Disposition: attachment; filename=code-polishing.patch Y29tbWl0IGRmZWM5OTU3Y2ZkOTVjMDcwNThmMGNjNTBhNjlmM2NhMjRjYzdhNDgKQXV0aG9yOiBE YXZpZCBOYWRsaW5nZXIgPGRhdmlkLm5hZGxpbmdlckBnbWFpbC5jb20+CkRhdGU6ICAgV2VkIE5v diAxOSAyMTowNTowNSAyMDA4ICswMTAwCgogICAgQWRkZWQgYSBmZXcgY29tbWVudHM7IGNoYW5n ZWQgaW5kZW50cyB0byBjb21wbHkgd2l0aCB0aGUgS1dpbiBjb2Rpbmcgc3RhbmRhcmRzLgoKZGlm ZiAtLWdpdCBhL2tjbWt3aW4va3dpbmNvbXBvc2l0aW5nL21haW4uY3BwIGIva2Nta3dpbi9rd2lu Y29tcG9zaXRpbmcvbWFpbi5jcHAKaW5kZXggYTlhZDgwNi4uOGViYWViOCAxMDA2NDQKLS0tIGEv a2Nta3dpbi9rd2luY29tcG9zaXRpbmcvbWFpbi5jcHAKKysrIGIva2Nta3dpbi9rd2luY29tcG9z aXRpbmcvbWFpbi5jcHAKQEAgLTExNywyMyArMTE3LDIyIEBAIEtXaW5Db21wb3NpdGluZ0NvbmZp Zzo6S1dpbkNvbXBvc2l0aW5nQ29uZmlnKFFXaWRnZXQgKnBhcmVudCwgY29uc3QgUVZhcmlhbnRM aXN0CiAKICAgICAvLyBPcGVuIHRoZSB0ZW1wb3JhcnkgY29uZmlnIGZpbGUKICAgICAvLyBUZW1w b3JhcnkgY29uZiBmaWxlIGlzIHVzZWQgdG8gc3luY2hyb25pemUgZWZmZWN0IGNoZWNrYm94ZXMg d2l0aCBlZmZlY3QKLSAgICAvLyAgc2VsZWN0b3IgYnkgbG9hZGluZy9zYXZpbmcgZWZmZWN0cyBm cm9tL3RvIHRlbXAgY29uZmlnIHdoZW4gYWN0aXZlIHRhYgotICAgIC8vICBjaGFuZ2VzLgorICAg IC8vIHNlbGVjdG9yIGJ5IGxvYWRpbmcvc2F2aW5nIGVmZmVjdHMgZnJvbS90byB0ZW1wIGNvbmZp ZyB3aGVuIGFjdGl2ZSB0YWIKKyAgICAvLyBjaGFuZ2VzLgogICAgIG1UbXBDb25maWdGaWxlLm9w ZW4oKTsKICAgICBtVG1wQ29uZmlnID0gS1NoYXJlZENvbmZpZzo6b3BlbkNvbmZpZyhtVG1wQ29u ZmlnRmlsZS5maWxlTmFtZSgpKTsKIAogICAgIGlmKCBDb21wb3NpdGluZ1ByZWZzOjpjb21wb3Np dGluZ1Bvc3NpYmxlKCkgKQotICAgIHsKKyAgICAgICAgewogICAgICAgICAvLyBEcml2ZXItc3Bl Y2lmaWMgY29uZmlnIGRldGVjdGlvbgogICAgICAgICBtRGVmYXVsdFByZWZzLmRldGVjdCgpOwot CiAgICAgICAgIGluaXRFZmZlY3RTZWxlY3RvcigpOwogCi0gICAgICAgIC8vIExvYWQgY29uZmln CisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHVzZXIgaW50ZXJmYWNlIHdpdGggdGhlIGNvbmZp ZyBsb2FkZWQgZnJvbSBrd2lucmMuCiAgICAgICAgIGxvYWQoKTsKLSAgICB9CisgICAgICAgIH0K ICAgICBlbHNlCi0gICAgeworICAgICAgICB7CiAgICAgICAgIHVpLnVzZUNvbXBvc2l0aW5nLT5z ZXRFbmFibGVkKGZhbHNlKTsKICAgICAgICAgdWkudXNlQ29tcG9zaXRpbmctPnNldENoZWNrZWQo ZmFsc2UpOwogICAgICAgICBjb21wb3NpdGluZ0VuYWJsZWQoZmFsc2UpOwpAQCAtMTQ0LDcgKzE0 Myw3IEBAIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6S1dpbkNvbXBvc2l0aW5nQ29uZmlnKFFXaWRn ZXQgKnBhcmVudCwgY29uc3QgUVZhcmlhbnRMaXN0CiAgICAgICAgIHVpLnN0YXR1c1RpdGxlV2lk Z2V0LT5zZXRUZXh0KHRleHQpOwogICAgICAgICB1aS5zdGF0dXNUaXRsZVdpZGdldC0+c2V0UGl4 bWFwKEtUaXRsZVdpZGdldDo6SW5mb01lc3NhZ2UsIEtUaXRsZVdpZGdldDo6SW1hZ2VMZWZ0KTsK ICAgICAgICAgdWkuc3RhdHVzVGl0bGVXaWRnZXQtPnNob3coKTsKLSAgICB9CisgICAgICAgIH0K IAogICAgIEtBYm91dERhdGEgKmFib3V0ID0gbmV3IEtBYm91dERhdGEoSTE4Tl9OT09QKCJrY21r d2luY29tcG9zaXRpbmciKSwgMCwKICAgICAgICAgICAgIGtpMThuKCJLV2luIERlc2t0b3AgRWZm ZWN0cyBDb25maWd1cmF0aW9uIE1vZHVsZSIpLApAQCAtMTg2LDcgKzE4NSw3IEBAIEtXaW5Db21w b3NpdGluZ0NvbmZpZzo6S1dpbkNvbXBvc2l0aW5nQ29uZmlnKFFXaWRnZXQgKnBhcmVudCwgY29u c3QgUVZhcmlhbnRMaXN0CiAgICAgdWkuZGVza3RvcFN3aXRjaGluZ0NvbWJvLT5hZGRJdGVtKGkx OG4oIk5vIEVmZmVjdCIpKTsKICAgICB1aS5kZXNrdG9wU3dpdGNoaW5nQ29tYm8tPmFkZEl0ZW0o c2xpZGUpOwogICAgIHVpLmRlc2t0b3BTd2l0Y2hpbmdDb21iby0+YWRkSXRlbShjdWJlKTsKLX0K KyAgICB9CiAKIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6fktXaW5Db21wb3NpdGluZ0NvbmZpZygp CiAgICAgewpAQCAtMTk2LDcgKzE5NSw4IEBAIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6fktXaW5D b21wb3NpdGluZ0NvbmZpZygpCiAgICAgfQogCiB2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6 Y29tcG9zaXRpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKKyAgICB7CisgICAgLy8gRW5hYmxl IHRoZSBvdGhlciBjb25maWd1cmF0aW9uIHRhYnMgb25seSB3aGVuIGNvbXBvc2l0aW5nIGlzIGVu YWJsZWQuCiAgICAgdWkuY29tcG9zaXRpbmdPcHRpb25zQ29udGFpbmVyLT5zZXRFbmFibGVkKGVu YWJsZWQpOwogICAgIHVpLnRhYldpZGdldC0+c2V0VGFiRW5hYmxlZCgxLCBlbmFibGVkKTsKICAg ICB1aS50YWJXaWRnZXQtPnNldFRhYkVuYWJsZWQoMiwgZW5hYmxlZCk7CkBAIC0yMDQsNyArMjA0 LDcgQEAgdm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OmNvbXBvc2l0aW5nRW5hYmxlZChib29s IGVuYWJsZWQpCiAgICAgfQogCiB2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6aW5pdEVmZmVj dFNlbGVjdG9yKCkKLXsKKyAgICB7CiAgICAgLy8gRmluZCBhbGwgLmRlc2t0b3AgZmlsZXMgb2Yg dGhlIGVmZmVjdHMKICAgICBLU2VydmljZTo6TGlzdCBvZmZlcnMgPSBLU2VydmljZVR5cGVUcmFk ZXI6OnNlbGYoKS0+cXVlcnkoIktXaW4vRWZmZWN0Iik7CiAgICAgUUxpc3Q8S1BsdWdpbkluZm8+ IGVmZmVjdGluZm9zID0gS1BsdWdpbkluZm86OmZyb21TZXJ2aWNlcyhvZmZlcnMpOwpAQCAtMjE4 LDE3ICsyMTgsMTggQEAgdm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OmluaXRFZmZlY3RTZWxl Y3RvcigpCiAgICAgdWkuZWZmZWN0U2VsZWN0b3ItPmFkZFBsdWdpbnMoZWZmZWN0aW5mb3MsIEtQ bHVnaW5TZWxlY3Rvcjo6UmVhZENvbmZpZ0ZpbGUsIGkxOG4oIkRlbW9zIiksICJEZW1vcyIsIG1U bXBDb25maWcpOwogICAgIHVpLmVmZmVjdFNlbGVjdG9yLT5hZGRQbHVnaW5zKGVmZmVjdGluZm9z LCBLUGx1Z2luU2VsZWN0b3I6OlJlYWRDb25maWdGaWxlLCBpMThuKCJUZXN0cyIpLCAiVGVzdHMi LCBtVG1wQ29uZmlnKTsKICAgICB1aS5lZmZlY3RTZWxlY3Rvci0+YWRkUGx1Z2lucyhlZmZlY3Rp bmZvcywgS1BsdWdpblNlbGVjdG9yOjpSZWFkQ29uZmlnRmlsZSwgaTE4bigiVG9vbHMiKSwgIlRv b2xzIiwgbVRtcENvbmZpZyk7Ci19CisgICAgfQogCiB2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZp Zzo6Y3VycmVudFRhYkNoYW5nZWQoaW50IHRhYikKLXsKKyAgICB7CiAgICAgLy8gYmxvY2sgc2ln bmFscyB0byBkb24ndCBlbWl0IHRoZSBjaGFuZ2VkKCktc2lnbmFsIGJ5IGp1c3Qgc3dpdGNoaW5n IHRoZSBjdXJyZW50IHRhYgogICAgIGJsb2NrU2lnbmFscyh0cnVlKTsKKwogICAgIC8vIHdyaXRl IHBvc3NpYmxlIGNoYW5nZXMgZG9uZSB0byBzeW5jaHJvbml6ZSBlZmZlY3QgY2hlY2tib3hlcyBh bmQgc2VsZWN0b3IKICAgICAvLyBUT0RPOiBUaGlzIHNlZ21lbnQgaXMgcHJvbmUgdG8gZmFpbCB3 aGVuIHRoZSBVSSBpcyBjaGFuZ2VkOwogICAgIC8vIHlvdSdsbCBtb3N0IGxpa2VseSBub3QgdGhp bmsgb2YgdGhlIGhhcmQgY29kZWQgbnVtYmVycyBoZXJlIHdoZW4ganVzdCBjaGFuZ2luZyB0aGUg b3JkZXIgb2YgdGhlIHRhYnMuCiAgICAgaWYgKHRhYiA9PSAwKQotICAgIHsKKyAgICAgICAgewog ICAgICAgICAvLyBHZW5lcmFsIHRhYiB3YXMgYWN0aXZhdGVkCiAgICAgICAgIHNhdmVFZmZlY3Rz VGFiKCk7CiAgICAgICAgIGxvYWRHZW5lcmFsVGFiKCk7CkBAIC0yMzgsOSArMjM5LDEwIEBAIHZv aWQgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjpjdXJyZW50VGFiQ2hhbmdlZChpbnQgdGFiKQogICAg ICAgICAvLyBFZmZlY3RzIHRhYiB3YXMgYWN0aXZhdGVkCiAgICAgICAgIHNhdmVHZW5lcmFsVGFi KCk7CiAgICAgICAgIGxvYWRFZmZlY3RzVGFiKCk7Ci0gICAgfQorICAgICAgICB9CisKICAgICBi bG9ja1NpZ25hbHMoZmFsc2UpOwotfQorICAgIH0KIAogdm9pZCBLV2luQ29tcG9zaXRpbmdDb25m aWc6OmxvYWRHZW5lcmFsVGFiKCkKICAgICB7CkBAIC0yNTQsMTAgKzI1NiwxMSBAQCB2b2lkIEtX aW5Db21wb3NpdGluZ0NvbmZpZzo6bG9hZEdlbmVyYWxUYWIoKQogICAgIGludCB3aW5NYW5hZ2Vt ZW50RW5hYmxlZCA9IExPQURfRUZGRUNUX0NPTkZJRygicHJlc2VudHdpbmRvd3MiKQogICAgICAg ICArIExPQURfRUZGRUNUX0NPTkZJRygiZGVza3RvcGdyaWQiKQogICAgICAgICArIExPQURfRUZG RUNUX0NPTkZJRygiZGlhbG9ncGFyZW50Iik7Ci0gICAgaWYgKHdpbk1hbmFnZW1lbnRFbmFibGVk ID4gMCAmJiB3aW5NYW5hZ2VtZW50RW5hYmxlZCA8IDMpIHsKKyAgICBpZiAod2luTWFuYWdlbWVu dEVuYWJsZWQgPiAwICYmIHdpbk1hbmFnZW1lbnRFbmFibGVkIDwgMykKKyAgICAgICAgewogICAg ICAgICB1aS5lZmZlY3RXaW5NYW5hZ2VtZW50LT5zZXRUcmlzdGF0ZSh0cnVlKTsKICAgICAgICAg dWkuZWZmZWN0V2luTWFuYWdlbWVudC0+c2V0Q2hlY2tTdGF0ZShRdDo6UGFydGlhbGx5Q2hlY2tl ZCk7Ci0gICAgfQorICAgICAgICB9CiAgICAgZWxzZQogICAgICAgICB1aS5lZmZlY3RXaW5NYW5h Z2VtZW50LT5zZXRDaGVja2VkKHdpbk1hbmFnZW1lbnRFbmFibGVkKTsKICAgICB1aS5lZmZlY3RT aGFkb3dzLT5zZXRDaGVja2VkKExPQURfRUZGRUNUX0NPTkZJRygic2hhZG93IikpOwpAQCAtMjg4 LDE5ICsyOTEsMTkgQEAgdm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OmxvYWRHZW5lcmFsVGFi KCkKICAgICB9CiAKIGJvb2wgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjplZmZlY3RFbmFibGVkKCBj b25zdCBRU3RyaW5nJiBlZmZlY3QsIGNvbnN0IEtDb25maWdHcm91cCYgY2ZnICkgY29uc3QKLXsK KyAgICB7CiAgICAgS1NlcnZpY2U6Okxpc3Qgc2VydmljZXMgPSBLU2VydmljZVR5cGVUcmFkZXI6 OnNlbGYoKS0+cXVlcnkoCiAgICAgICAgICJLV2luL0VmZmVjdCIsICJbWC1LREUtUGx1Z2luSW5m by1OYW1lXSA9PSAna3dpbjRfZWZmZWN0XyIgKyBlZmZlY3QgKyAiJyIpOwogICAgIGlmKCBzZXJ2 aWNlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBRVmFyaWFudCB2ID0g c2VydmljZXMuZmlyc3QoKS0+cHJvcGVydHkoIlgtS0RFLVBsdWdpbkluZm8tRW5hYmxlZEJ5RGVm YXVsdCIpOwogICAgIHJldHVybiBjZmcucmVhZEVudHJ5KCJrd2luNF9lZmZlY3RfIiArIGVmZmVj dCArICJFbmFibGVkIiwgdi50b0Jvb2woKSk7Ci19CisgICAgfQogCiB2b2lkIEtXaW5Db21wb3Np dGluZ0NvbmZpZzo6bG9hZEVmZmVjdHNUYWIoKQoteworICAgIHsKICAgICB1aS5lZmZlY3RTZWxl Y3Rvci0+bG9hZCgpOwotfQorICAgIH0KIAogdm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6Omxv YWRBZHZhbmNlZFRhYigpCiAgICAgewpAQCAtMzI0LDcgKzMyNyw3IEBAIHZvaWQgS1dpbkNvbXBv c2l0aW5nQ29uZmlnOjpsb2FkQWR2YW5jZWRUYWIoKQogICAgIHVpLmdsVlN5bmMtPnNldENoZWNr ZWQoY29uZmlnLnJlYWRFbnRyeSgiR0xWU3luYyIsIG1EZWZhdWx0UHJlZnMuZW5hYmxlVlN5bmMo KSkpOwogCiAgICAgdWkueHJlbmRlclNtb290aFNjYWxlLT5zZXRDaGVja2VkKGNvbmZpZy5yZWFk RW50cnkoIlhSZW5kZXJTbW9vdGhTY2FsZSIsIGZhbHNlKSk7Ci19CisgICAgfQogCiB2b2lkIEtX aW5Db21wb3NpdGluZ0NvbmZpZzo6bG9hZCgpCiAgICAgewpAQCAtMzUzLDExICszNTYsMTIgQEAg dm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OnNhdmVHZW5lcmFsVGFiKCkKICAgICAvLyBTYXZl IGVmZmVjdHMKICAgICBLQ29uZmlnR3JvdXAgZWZmZWN0Y29uZmlnKG1UbXBDb25maWcsICJQbHVn aW5zIik7CiAjZGVmaW5lIFdSSVRFX0VGRkVDVF9DT05GSUcoZWZmZWN0bmFtZSwgd2lkZ2V0KSAg ZWZmZWN0Y29uZmlnLndyaXRlRW50cnkoImt3aW40X2VmZmVjdF8iIGVmZmVjdG5hbWUgIkVuYWJs ZWQiLCB3aWRnZXQtPmlzQ2hlY2tlZCgpKQotICAgIGlmICh1aS5lZmZlY3RXaW5NYW5hZ2VtZW50 LT5jaGVja1N0YXRlKCkgIT0gUXQ6OlBhcnRpYWxseUNoZWNrZWQpIHsKKyAgICBpZiAodWkuZWZm ZWN0V2luTWFuYWdlbWVudC0+Y2hlY2tTdGF0ZSgpICE9IFF0OjpQYXJ0aWFsbHlDaGVja2VkKQor ICAgICAgICB7CiAgICAgICAgIFdSSVRFX0VGRkVDVF9DT05GSUcoInByZXNlbnR3aW5kb3dzIiwg dWkuZWZmZWN0V2luTWFuYWdlbWVudCk7CiAgICAgICAgIFdSSVRFX0VGRkVDVF9DT05GSUcoImRl c2t0b3BncmlkIiwgdWkuZWZmZWN0V2luTWFuYWdlbWVudCk7CiAgICAgICAgIFdSSVRFX0VGRkVD VF9DT05GSUcoImRpYWxvZ3BhcmVudCIsIHVpLmVmZmVjdFdpbk1hbmFnZW1lbnQpOwotICAgIH0K KyAgICAgICAgfQogICAgIFdSSVRFX0VGRkVDVF9DT05GSUcoInNoYWRvdyIsIHVpLmVmZmVjdFNo YWRvd3MpOwogICAgIC8vIFRPRE86IG1heWJlIGFsc28gZG8gc29tZSBlZmZlY3Qtc3BlY2lmaWMg Y29uZmlndXJhdGlvbiBoZXJlLCBlLmcuCiAgICAgLy8gIGVuYWJsZS9kaXNhYmxlIGRlc2t0b3Bn cmlkJ3MgYW5pbWF0aW9uIGFjY29yZGluZyB0byB0aGlzIHNldHRpbmcKQEAgLTQyOCw5ICs0MzIs OSBAQCB2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6c2F2ZUdlbmVyYWxUYWIoKQogICAgIH0K IAogdm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OnNhdmVFZmZlY3RzVGFiKCkKLXsKKyAgICB7 CiAgICAgdWkuZWZmZWN0U2VsZWN0b3ItPnNhdmUoKTsKLX0KKyAgICB9CiAKIHZvaWQgS1dpbkNv bXBvc2l0aW5nQ29uZmlnOjpzYXZlQWR2YW5jZWRUYWIoKQogICAgIHsKQEAgLTQ1NiwxMiArNDYw LDE0IEBAIHZvaWQgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjpzYXZlKCkKICAgICAvLyBiYWg7IHRh YiBjb250ZW50IGJlaW5nIGRlcGVuZGVudCBvbiB0aGUgb3RoZXIgaXMgcmVhbGx5IGJhZDsgYW5k CiAgICAgLy8gZGVwcmVjYXRlZCBpbiB0aGUgSElHIGZvciBhIHJlYXNvbi4gIEl0cyBjb25mdXNp bmchCiAgICAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgY2FsbCBzYXZlIG9uIGVhY2ggdGFiIG9uY2U7 IGFzIHRoZXkgYXJlIHN0YXRlZnVsIGR1ZSB0byB0aGUgcmV2ZXJ0IGNvbmNlcHQKLSAgICBpZiAo dWkudGFiV2lkZ2V0LT5jdXJyZW50SW5kZXgoKSA9PSAwKSB7IC8vIGdlbmVyYWwgd2FzIGFjdGl2 ZQorICAgIGlmICggdWkudGFiV2lkZ2V0LT5jdXJyZW50SW5kZXgoKSA9PSAwICkgLy8gIkdlbmVy YWwiIHRhYiB3YXMgYWN0aXZlCisgICAgICAgIHsKICAgICAgICAgc2F2ZUdlbmVyYWxUYWIoKTsK ICAgICAgICAgbG9hZEVmZmVjdHNUYWIoKTsKICAgICAgICAgc2F2ZUVmZmVjdHNUYWIoKTsKLSAg ICB9Ci0gICAgZWxzZSB7IC8vIGVmZmVjdHMgdGFiIHdhcyBhY3RpdmUKKyAgICAgICAgfQorICAg IGVsc2UKKyAgICAgICAgewogICAgICAgICBzYXZlRWZmZWN0c1RhYigpOwogICAgICAgICBsb2Fk R2VuZXJhbFRhYigpOwogICAgICAgICBzYXZlR2VuZXJhbFRhYigpOwpAQCAtNDc3LDcgKzQ4Myw3 IEBAIHZvaWQgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjpzYXZlKCkKICAgICB9CiAKIHZvaWQgS1dp bkNvbXBvc2l0aW5nQ29uZmlnOjpkZWZhdWx0cygpCi17CisgICAgewogICAgIHVpLnRhYldpZGdl dC0+c2V0Q3VycmVudEluZGV4KDApOwogCiAgICAgdWkudXNlQ29tcG9zaXRpbmctPnNldENoZWNr ZWQobURlZmF1bHRQcmVmcy5lbmFibGVDb21wb3NpdGluZygpKTsKQEAgLTUwNywxNiArNTEzLDE2 IEBAIHZvaWQgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjpkZWZhdWx0cygpCiAgICAgICAgIH0KICAg ICAvLyBzZXQgdG9wIGxlZnQgdG8gcHJlc2VudCB3aW5kb3dzCiAgICAgdWkuZWRnZXNfbW9uaXRv ci0+c2VsZWN0RWRnZUl0ZW0oIChpbnQpTW9uaXRvcjo6VG9wTGVmdCwgKGludClQcmVzZW50V2lu ZG93c0FsbCApOwotfQorICAgIH0KIAogUVN0cmluZyBLV2luQ29tcG9zaXRpbmdDb25maWc6OnF1 aWNrSGVscCgpIGNvbnN0Ci17CisgICAgewogICAgIHJldHVybiBpMThuKCI8aDE+RGVza3RvcCBF ZmZlY3RzPC9oMT4iKTsKLX0KKyAgICB9CiAKIAogdm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6 OnNldHVwRWxlY3RyaWNCb3JkZXJzKCkKLXsKKyAgICB7CiAgICAgYWRkSXRlbVRvRWRnZXNNb25p dG9yKCBpMThuKCJObyBFZmZlY3QiKSk7CiAKICAgICAvLyBzZWFyY2ggdGhlIGVmZmVjdCBuYW1l cwpAQCAtNTQ4LDE4ICs1NTQsMTggQEAgdm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OnNldHVw RWxlY3RyaWNCb3JkZXJzKCkKICAgICAgICAgewogICAgICAgICBhZGRJdGVtVG9FZGdlc01vbml0 b3IoIHNlcnZpY2VzLmZpcnN0KCktPm5hbWUoKSk7CiAgICAgICAgIH0KLX0KKyAgICB9CiAKIHZv aWQgS1dpbkNvbXBvc2l0aW5nQ29uZmlnOjphZGRJdGVtVG9FZGdlc01vbml0b3IoY29uc3QgUVN0 cmluZyYgaXRlbSkKLXsKKyAgICB7CiAgICAgZm9yKCBpbnQgaT0wOyBpPDg7IGkrKyApCiAgICAg ICAgIHsKICAgICAgICAgdWkuZWRnZXNfbW9uaXRvci0+YWRkRWRnZUl0ZW0oIGksIGl0ZW0gKTsK ICAgICAgICAgfQotfQorICAgIH0KIAogdm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OmVsZWN0 cmljQm9yZGVyU2VsZWN0aW9uQ2hhbmdlZChpbnQgZWRnZSwgaW50IGluZGV4KQoteworICAgIHsK ICAgICBpZiggaW5kZXggPT0gKGludClOb0VmZmVjdCApCiAgICAgICAgIHJldHVybjsKICAgICBm b3IoIGludCBpPTA7IGk8ODsgaSsrKQpAQCAtNTY5LDExICs1NzUsMTEgQEAgdm9pZCBLV2luQ29t cG9zaXRpbmdDb25maWc6OmVsZWN0cmljQm9yZGVyU2VsZWN0aW9uQ2hhbmdlZChpbnQgZWRnZSwg aW50IGluZGV4KQogICAgICAgICBpZiggdWkuZWRnZXNfbW9uaXRvci0+c2VsZWN0ZWRFZGdlSXRl bSggaSApID09IGluZGV4ICkKICAgICAgICAgICAgIHVpLmVkZ2VzX21vbml0b3ItPnNlbGVjdEVk Z2VJdGVtKCBpLCAoaW50KU5vRWZmZWN0ICk7CiAgICAgICAgIH0KLX0KKyAgICB9CiAKIAogdm9p ZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OmxvYWRFbGVjdHJpY0JvcmRlcnMoKQoteworICAgIHsK ICAgICAvLyBQcmVzZW50IFdpbmRvd3MKICAgICBLQ29uZmlnR3JvdXAgcHJlc2VudHdpbmRvd3Nj b25maWcobU5ld0NvbmZpZywgIkVmZmVjdC1QcmVzZW50V2luZG93cyIpOwogICAgIGNoYW5nZUVs ZWN0cmljQm9yZGVyKCAoRWxlY3RyaWNCb3JkZXIpcHJlc2VudHdpbmRvd3Njb25maWcucmVhZEVu dHJ5KCAiQm9yZGVyQWN0aXZhdGVBbGwiLApAQCAtNTk2LDEwICs2MDIsMTAgQEAgdm9pZCBLV2lu Q29tcG9zaXRpbmdDb25maWc6OmxvYWRFbGVjdHJpY0JvcmRlcnMoKQogICAgIEtDb25maWdHcm91 cCBzcGhlcmVjb25maWcobU5ld0NvbmZpZywgIkVmZmVjdC1TcGhlcmUiKTsKICAgICBjaGFuZ2VF bGVjdHJpY0JvcmRlciggKEVsZWN0cmljQm9yZGVyKXNwaGVyZWNvbmZpZy5yZWFkRW50cnkoICJC b3JkZXJBY3RpdmF0ZSIsCiAgICAgICAgIGludCggRWxlY3RyaWNOb25lICkpLCAoaW50KVNwaGVy ZSApOwotfQorICAgIH0KIAogdm9pZCBLV2luQ29tcG9zaXRpbmdDb25maWc6OmNoYW5nZUVsZWN0 cmljQm9yZGVyKCBFbGVjdHJpY0JvcmRlciBib3JkZXIsIGludCBpbmRleCApCi17CisgICAgewog ICAgIHN3aXRjaCAoYm9yZGVyKQogICAgICAgICB7CiAgICAgICAgIGNhc2UgRWxlY3RyaWNUb3A6 CkBAIC02MzAsMTAgKzYzNiwxMCBAQCB2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6Y2hhbmdl RWxlY3RyaWNCb3JkZXIoIEVsZWN0cmljQm9yZGVyIGJvcmRlciwgaW50IGluZAogICAgICAgICAg ICAgLy8gbm90aGluZwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLX0KKyAgICB9CiAK IEVsZWN0cmljQm9yZGVyIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6Y2hlY2tFZmZlY3RIYXNFbGVj dHJpY0JvcmRlciggaW50IGluZGV4ICkKLXsKKyAgICB7CiAgICAgaWYoIHVpLmVkZ2VzX21vbml0 b3ItPnNlbGVjdGVkRWRnZUl0ZW0oIChpbnQpTW9uaXRvcjo6VG9wICkgPT0gaW5kZXggKQogICAg ICAgICB7CiAgICAgICAgIHJldHVybiBFbGVjdHJpY1RvcDsKQEAgLTY2Nyw3ICs2NzMsNyBAQCBF bGVjdHJpY0JvcmRlciBLV2luQ29tcG9zaXRpbmdDb25maWc6OmNoZWNrRWZmZWN0SGFzRWxlY3Ry aWNCb3JkZXIoIGludCBpbmRleCApCiAgICAgICAgIHJldHVybiBFbGVjdHJpY1RvcExlZnQ7CiAg ICAgICAgIH0KICAgICByZXR1cm4gRWxlY3RyaWNOb25lOwotfQorICAgIH0KIAogdm9pZCBLV2lu Q29tcG9zaXRpbmdDb25maWc6OnNhdmVFbGVjdHJpY0JvcmRlcnMoKQogICAgIHsKQEAgLTgzNiw2 ICs4NDIsNSBAQCB2b2lkIEtXaW5Db21wb3NpdGluZ0NvbmZpZzo6Y29weVBsdWdpbnNUb05ld0Nv bmZpZygpCiAgICAgfQogCiB9IC8vIG5hbWVzcGFjZQotICAgIAorCiAjaW5jbHVkZSAibWFpbi5t b2MiCi0gICAgICAgIApkaWZmIC0tZ2l0IGEvb3B0aW9ucy5jcHAgYi9vcHRpb25zLmNwcAppbmRl eCA5NjZjNGI5Li40NWY1NDY2IDEwMDY0NAotLS0gYS9vcHRpb25zLmNwcAorKysgYi9vcHRpb25z LmNwcApAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgT3B0aW9uczo6bG9hZFdpbmRvd1NldHRpbmdz KCBLU2hhcmVkQ29uZmlnUHRyIGNvbmZpZ0ZpbGUgKQogICAgIGFsdFRhYlN0eWxlID0gS0RFOyAv LyB3aGF0IGEgZGVmYXVsdCA6LSkKICAgICBpZiAoIHZhbCA9PSAiQ0RFIiApCiAgICAgICAgIGFs dFRhYlN0eWxlID0gQ0RFOwotICAgICAgICAKKwogICAgIHNlcGFyYXRlU2NyZWVuRm9jdXMgPSBj b25maWcucmVhZEVudHJ5KCAiU2VwYXJhdGVTY3JlZW5Gb2N1cyIsIGZhbHNlICk7CiAgICAgYWN0 aXZlTW91c2VTY3JlZW4gPSBjb25maWcucmVhZEVudHJ5KCAiQWN0aXZlTW91c2VTY3JlZW4iLCBm b2N1c1BvbGljeSAhPSBDbGlja1RvRm9jdXMgKTsKIApAQCAtMjc0LDEwICsyNzQsMTAgQEAgdm9p ZCBPcHRpb25zOjpsb2FkQ29tcG9zaXRpbmdTZXR0aW5ncyggS1NoYXJlZENvbmZpZ1B0ciBjb25m aWdGaWxlICkKICAgICAgICAgaGlkZGVuUHJldmlld3MgPSBIaWRkZW5QcmV2aWV3c1Nob3duOwog ICAgIGVsc2UgaWYoIGhwcyA9PSA2ICkKICAgICAgICAgaGlkZGVuUHJldmlld3MgPSBIaWRkZW5Q cmV2aWV3c0Fsd2F5czsKLSAgICAKKwogICAgIHVucmVkaXJlY3RGdWxsc2NyZWVuID0gY29uZmln LnJlYWRFbnRyeSggIlVucmVkaXJlY3RGdWxsc2NyZWVuIiwgdHJ1ZSApOwogICAgIGFuaW1hdGlv blNwZWVkID0gcUJvdW5kKCAwLCBjb25maWcucmVhZEVudHJ5KCAiQW5pbWF0aW9uU3BlZWQiLCAz ICksIDYgKTsKLSAgICAKKwogICAgIGlmKCAhZGlzYWJsZUNvbXBvc2l0aW5nQ2hlY2tzICYmICFw cmVmcy52YWxpZGF0ZVNldHVwKCBjb21wb3NpdGluZ01vZGUgKSkKICAgICAgICAgdXNlQ29tcG9z aXRpbmcgPSBmYWxzZTsKICAgICB9CmRpZmYgLS1naXQgYS9vcHRpb25zLmggYi9vcHRpb25zLmgK aW5kZXggZGIwODVmNy4uNDViOWM2ZSAxMDA2NDQKLS0tIGEvb3B0aW9ucy5oCisrKyBiL29wdGlv bnMuaApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgS1dpbgogY2xhc3MgQ2xpZW50OwogY2xh c3MgQ29tcG9zaXRpbmdQcmVmczsKIAotY2xhc3MgT3B0aW9ucyA6IHB1YmxpYyBLRGVjb3JhdGlv bk9wdGlvbnMgCitjbGFzcyBPcHRpb25zIDogcHVibGljIEtEZWNvcmF0aW9uT3B0aW9ucwogICAg IHsKICAgICBwdWJsaWM6CiAKQEAgLTEzNiw3ICsxMzYsNyBAQCBjbGFzcyBPcHRpb25zIDogcHVi bGljIEtEZWNvcmF0aW9uT3B0aW9ucwogICAgICAgICAgKi8KICAgICAgICAgZW51bSBBbHRUYWJT dHlsZSB7IEtERSwgQ0RFIH07CiAgICAgICAgIEFsdFRhYlN0eWxlIGFsdFRhYlN0eWxlOwotICAg ICAgICAKKwogICAgICAgICAvLyB3aGV0aGVyIHRvIHNlZSBYaW5lcmFtYSBzY3JlZW5zIHNlcGFy YXRlbHkgZm9yIGZvY3VzIChpbiBBbHQrVGFiLCB3aGVuIGFjdGl2YXRpbmcgbmV4dCBjbGllbnQp CiAgICAgICAgIGJvb2wgc2VwYXJhdGVTY3JlZW5Gb2N1czsKICAgICAgICAgLy8gd2hldGhlciBh Y3RpdmUgWGluZXJhbWEgc2NyZWVuIGlzIHRoZSBvbmUgd2l0aCBtb3VzZSAob3Igd2l0aCB0aGUg YWN0aXZlIHdpbmRvdykKQEAgLTE1MCw3ICsxNTAsNyBAQCBjbGFzcyBPcHRpb25zIDogcHVibGlj IEtEZWNvcmF0aW9uT3B0aW9ucwogICAgICAgICBib29sIHhpbmVyYW1hTW92ZW1lbnRFbmFibGVk OwogICAgICAgICBib29sIHhpbmVyYW1hTWF4aW1pemVFbmFibGVkOwogICAgICAgICBib29sIHhp bmVyYW1hRnVsbHNjcmVlbkVuYWJsZWQ7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIG51bWJlciwg b3IgLTEgPSBhY3RpdmUgc2NyZWVuIChXb3Jrc3BhY2U6OmFjdGl2ZVNjcmVlbigpKQogICAgICAg ICBpbnQgeGluZXJhbWFQbGFjZW1lbnRTY3JlZW47CiAKQEAgLTE2MSwxMyArMTYxLDEzIEBAIGNs YXNzIE9wdGlvbnMgOiBwdWJsaWMgS0RlY29yYXRpb25PcHRpb25zCiAKICAgICAgICAgTW92ZVJl c2l6ZU1vZGUgcmVzaXplTW9kZTsKICAgICAgICAgTW92ZVJlc2l6ZU1vZGUgbW92ZU1vZGU7Ci0g ICAgICAgIAorCiAgICAgICAgIHN0YXRpYyBNb3ZlUmVzaXplTW9kZSBzdHJpbmdUb01vdmVSZXNp emVNb2RlKCBjb25zdCBRU3RyaW5nJiBzICk7CiAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBt b3ZlUmVzaXplTW9kZVRvU3RyaW5nKCBNb3ZlUmVzaXplTW9kZSBtb2RlICk7CiAKICAgICAgICAg UGxhY2VtZW50OjpQb2xpY3kgcGxhY2VtZW50OwogCi0gICAgICAgIGJvb2wgZm9jdXNQb2xpY3lJ c1JlYXNvbmFibGUoKSAKKyAgICAgICAgYm9vbCBmb2N1c1BvbGljeUlzUmVhc29uYWJsZSgpCiAg ICAgICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZm9jdXNQb2xpY3kgPT0gQ2xpY2tUb0Zv Y3VzIHx8IGZvY3VzUG9saWN5ID09IEZvY3VzRm9sbG93c01vdXNlOwogICAgICAgICAgICAgfQpA QCAtMjA3LDEyICsyMDcsMTIgQEAgY2xhc3MgT3B0aW9ucyA6IHB1YmxpYyBLRGVjb3JhdGlvbk9w dGlvbnMKICAgICAgICAgICogTGlzdCBvZiB3aW5kb3cgY2xhc3NlcyB0byBpZ25vcmUgUFBvc2l0 aW9uIHNpemUgaGludAogICAgICAgICAgKi8KICAgICAgICAgUVN0cmluZ0xpc3QgaWdub3JlUG9z aXRpb25DbGFzc2VzOwotICAgICAgICAKKwogICAgICAgICBib29sIGNoZWNrSWdub3JlRm9jdXNT dGVhbGluZyggY29uc3QgQ2xpZW50KiBjICk7CiAKICAgICAgICAgV2luZG93T3BlcmF0aW9uIG9w ZXJhdGlvblRpdGxlYmFyRGJsQ2xpY2soKSB7IHJldHVybiBPcFRpdGxlYmFyRGJsQ2xpY2s7IH0K IAotICAgICAgICBlbnVtIE1vdXNlQ29tbWFuZCAKKyAgICAgICAgZW51bSBNb3VzZUNvbW1hbmQK ICAgICAgICAgICAgIHsKICAgICAgICAgICAgIE1vdXNlUmFpc2UsIE1vdXNlTG93ZXIsIE1vdXNl T3BlcmF0aW9uc01lbnUsIE1vdXNlVG9nZ2xlUmFpc2VBbmRMb3dlciwKICAgICAgICAgICAgIE1v dXNlQWN0aXZhdGVBbmRSYWlzZSwgTW91c2VBY3RpdmF0ZUFuZExvd2VyLCBNb3VzZUFjdGl2YXRl LApAQCAtMjI3LDcgKzIyNyw3IEBAIGNsYXNzIE9wdGlvbnMgOiBwdWJsaWMgS0RlY29yYXRpb25P cHRpb25zCiAgICAgICAgICAgICBNb3VzZU9wYWNpdHlNb3JlLCBNb3VzZU9wYWNpdHlMZXNzLAog ICAgICAgICAgICAgTW91c2VOb3RoaW5nCiAgICAgICAgICAgICB9OwotICAgICAgICAgICAgCisK ICAgICAgICAgZW51bSBNb3VzZVdoZWVsQ29tbWFuZAogICAgICAgICAgICAgewogICAgICAgICAg ICAgTW91c2VXaGVlbFJhaXNlTG93ZXIsIE1vdXNlV2hlZWxTaGFkZVVuc2hhZGUsIE1vdXNlV2hl ZWxNYXhpbWl6ZVJlc3RvcmUsCkBAIC0yODEsMTMgKzI4MSwxMyBAQCBjbGFzcyBPcHRpb25zIDog cHVibGljIEtEZWNvcmF0aW9uT3B0aW9ucwogICAgICAgICAqIEByZXR1cm5zIHRoZSBhY3RpdmF0 aW9uIGRlbGF5IGZvciBlbGVjdHJpYyBib3JkZXJzIGluIG1pbGxpc2Vjb25kcy4KICAgICAgICAg Ki8KICAgICAgICAgaW50IGVsZWN0cmljQm9yZGVyRGVsYXkoKTsKLSAgICAgICAgCisKICAgICAg ICAgYm9vbCB0b3BNZW51RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHRvcG1lbnVzOyB9CiAgICAg ICAgIGJvb2wgZGVza3RvcFRvcE1lbnUoKSBjb25zdCB7IHJldHVybiBkZXNrdG9wX3RvcG1lbnU7 IH0KLSAgICAgICAgCisKICAgICAgICAgLy8gdGltZW91dCBiZWZvcmUgbm9uLXJlc3BvbmRpbmcg YXBwbGljYXRpb24gd2lsbCBiZSBraWxsZWQgYWZ0ZXIgYXR0ZW1wdCB0byBjbG9zZQogICAgICAg ICBpbnQga2lsbFBpbmdUaW1lb3V0OwotICAgICAgICAKKwogICAgICAgICAvLyBXaGV0aGVyIHRv IGhpZGUgdXRpbGl0eSB3aW5kb3dzIGZvciBpbmFjdGl2ZSBhcHBsaWNhdGlvbnMuCiAgICAgICAg IGJvb2wgaGlkZVV0aWxpdHlXaW5kb3dzRm9ySW5hY3RpdmU7CiAKQEAgLTI5Nyw3ICsyOTcsNyBA QCBjbGFzcyBPcHRpb25zIDogcHVibGljIEtEZWNvcmF0aW9uT3B0aW9ucwogICAgICAgICBIaWRk ZW5QcmV2aWV3cyBoaWRkZW5QcmV2aWV3czsKICAgICAgICAgYm9vbCB1bnJlZGlyZWN0RnVsbHNj cmVlbjsKICAgICAgICAgYm9vbCBkaXNhYmxlQ29tcG9zaXRpbmdDaGVja3M7Ci0gICAgICAgIAor CiAgICAgICAgIHVpbnQgcmVmcmVzaFJhdGU7CiAgICAgICAgIC8vIFRoaXMgaXMgZm9yIE9wZW5H TCBtb2RlCiAgICAgICAgIGludCBzbW9vdGhTY2FsZTsgLy8gMCA9IG5vLCAxID0geWVzIHdoZW4g dHJhbnNmb3JtZWQsCkBAIC0zMDUsNyArMzA1LDcgQEAgY2xhc3MgT3B0aW9ucyA6IHB1YmxpYyBL RGVjb3JhdGlvbk9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtMSA9IGF1dG8K ICAgICAgICAgLy8gVGhpcyBpcyBmb3IgWFJlbmRlciBtb2RlCiAgICAgICAgIGJvb2wgeHJlbmRl clNtb290aFNjYWxlOwotICAgICAgICAKKwogICAgICAgICBlbnVtIEdMTW9kZSB7IEdMVEZQLCBH TFNITSwgR0xGYWxsYmFjayB9OwogICAgICAgICBHTE1vZGUgZ2xNb2RlOwogICAgICAgICBib29s IGdsRGlyZWN0OwpAQCAtMzIyLDcgKzMyMiw3IEBAIGNsYXNzIE9wdGlvbnMgOiBwdWJsaWMgS0Rl Y29yYXRpb25PcHRpb25zCiAKICAgICAgICAgV2luZG93T3BlcmF0aW9uIE9wVGl0bGViYXJEYmxD bGljazsKIAotICAgIC8vIG1vdXNlIGJpbmRpbmdzCisgICAgICAgIC8vIG1vdXNlIGJpbmRpbmdz CiAgICAgICAgIE1vdXNlQ29tbWFuZCBDbWRBY3RpdmVUaXRsZWJhcjE7CiAgICAgICAgIE1vdXNl Q29tbWFuZCBDbWRBY3RpdmVUaXRsZWJhcjI7CiAgICAgICAgIE1vdXNlQ29tbWFuZCBDbWRBY3Rp dmVUaXRsZWJhcjM7CmRpZmYgLS1naXQgYS93b3Jrc3BhY2UuY3BwIGIvd29ya3NwYWNlLmNwcApp bmRleCA4OWU0ZDJjLi5kNjAzN2VlIDEwMDY0NAotLS0gYS93b3Jrc3BhY2UuY3BwCisrKyBiL3dv cmtzcGFjZS5jcHAKQEAgLTk5NCw2ICs5OTQsNyBAQCB2b2lkIFdvcmtzcGFjZTo6c2xvdFJlY29u ZmlndXJlKCkKIAogICAgIEtHbG9iYWw6OmNvbmZpZygpLT5yZXBhcnNlQ29uZmlndXJhdGlvbigp OwogICAgIHVuc2lnbmVkIGxvbmcgY2hhbmdlZCA9IG9wdGlvbnMtPnVwZGF0ZVNldHRpbmdzKCk7 CisKICAgICB0YWJfYm94LT5yZWNvbmZpZ3VyZSgpOwogICAgIHBvcHVwaW5mby0+cmVjb25maWd1 cmUoKTsKICAgICBpbml0UG9zaXRpb25pbmctPnJlaW5pdENhc2NhZGluZyggMCApOwpAQCAtMjI4 NCw3ICsyMjg1LDcgQEAgdm9pZCBXb3Jrc3BhY2U6OmVsZWN0cmljQm9yZGVyU3dpdGNoRGVza3Rv cCggRWxlY3RyaWNCb3JkZXIgYm9yZGVyLCBjb25zdCBRUG9pbnQKICAgICBpbnQgZGVza19iZWZv cmUgPSBjdXJyZW50RGVza3RvcCgpOwogICAgIHNldEN1cnJlbnREZXNrdG9wKCBkZXNrICk7CiAg ICAgaWYoIGN1cnJlbnREZXNrdG9wKCkgIT0gZGVza19iZWZvcmUgKQotICAgICAgICBRQ3Vyc29y OjpzZXRQb3MoIHBvcyApOyAKKyAgICAgICAgUUN1cnNvcjo6c2V0UG9zKCBwb3MgKTsKICAgICB9 CiAKIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgZW50ZXJlZCBhbiBl bGVjdHJpYyBib3JkZXIK ------=_Part_32705_2820695.1227460538602 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ kwin mailing list kwin@kde.org https://mail.kde.org/mailman/listinfo/kwin ------=_Part_32705_2820695.1227460538602--