ZGlmZiAtLWdpdCBhL01hYy9JREUgc2NyaXB0cy8gIHNlcGFyYXRvciAtLS0gYi9NYWMvSURFIHNjcmlwdHMvICBzZXBhcmF0b3IgLS0tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Y2Q3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9NYWMvSURFIHNjcmlwdHMvICBzZXBhcmF0b3IgLS0tCkBAIC0wLDAgKzEgQEAKK0Egc2VwYXJhdG9yIGVuZHMgd2l0aCAnLS0tJwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL01hYy9JREUgc2NyaXB0cy9IYWNrL0RlYnVnZ2VyIG9mZiBiL01hYy9JREUgc2NyaXB0cy9IYWNrL0RlYnVnZ2VyIG9mZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTY4YjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTWFjL0lERSBzY3JpcHRzL0hhY2svRGVidWdnZXIgb2ZmCkBAIC0wLDAgKzEsNCBAQAorIiIiVHVybiB0aGUgZGVidWdnZXIgb2ZmLiIiIgorCitpbXBvcnQgUHlEZWJ1Z2dlcgorUHlEZWJ1Z2dlci5jb250KCkKZGlmZiAtLWdpdCBhL01hYy9JREUgc2NyaXB0cy9IYWNrL0RlYnVnZ2VyIG9uIGIvTWFjL0lERSBzY3JpcHRzL0hhY2svRGVidWdnZXIgb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNlZWU4MwotLS0gL2Rldi9udWxsCisrKyBiL01hYy9JREUgc2NyaXB0cy9IYWNrL0RlYnVnZ2VyIG9uCkBAIC0wLDAgKzEsNSBAQAorIiIiVGhpcyBzY3JpcHQgdHVybnMgdGhlIFB5dGhvbiBkZWJ1Z2dlciBvbiBnbG9iYWxseSwgbWVhbmluZyB0aGF0CitpdCB3aWxsIHRoZW4gc3RvcCBhdCBhbnkgYnJlYWtwb2ludCB5b3UgbWlnaHQgaGF2ZSBkZWZpbmVkLiIiIgorCitpbXBvcnQgUHlEZWJ1Z2dlcgorUHlEZWJ1Z2dlci5zdGFydGZyb21ib3R0b20oKQpkaWZmIC0tZ2l0IGEvTWFjL0lERSBzY3JpcHRzL0hhY2svUmVtb3ZlIC5weWMgZmlsZXMuLi4gYi9NYWMvSURFIHNjcmlwdHMvSGFjay9SZW1vdmUgLnB5YyBmaWxlcy4uLgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDg2MGE5Ci0tLSAvZGV2L251bGwKKysrIGIvTWFjL0lERSBzY3JpcHRzL0hhY2svUmVtb3ZlIC5weWMgZmlsZXMuLi4KQEAgLTAsMCArMSwyMiBAQAoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgbWFjZnMKKworZGVmIHdhbGsodG9wKToKKwluYW1lcyA9IG9zLmxpc3RkaXIodG9wKQorCWZvciBuYW1lIGluIG5hbWVzOgorCQlwYXRoID0gb3MucGF0aC5qb2luKHRvcCwgbmFtZSkKKwkJaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKwkJCXdhbGsocGF0aCkKKwkJZWxzZToKKwkJCWlmIHBhdGhbLTQ6XSBpbiBbJy5weWMnLCAnLnB5byddIGFuZCBvcy5wYXRoLmV4aXN0cyhwYXRoWzotMV0pOgorCQkJCXByaW50ICJkZWxldGluZzoiLCBwYXRoCisJCQkJb3MucmVtb3ZlKHBhdGgpCisJCQllbGlmIHBhdGhbLTQ6XSA9PSAnLnB5Yyc6CisJCQkJcHJpbnQgIiEhISAtLS0tLS0gLnB5YyBmaWxlIHdpdGhvdXQgLnB5IGZpbGU6IiwgcGF0aAorCQkJZWxpZiBwYXRoWy00Ol0gPT0gJy5weW8nOgorCQkJCXByaW50ICIhISEgLS0tLS0tIC5weW8gZmlsZSB3aXRob3V0IC5weSBmaWxlOiIsIHBhdGgKKworZnNzLCBvayA9IG1hY2ZzLkdldERpcmVjdG9yeSgnU2VsZWN0IHRoZSBzdGFydGluZyBmb2xkZXI6JykKK2lmIG9rOgorCXdhbGsoZnNzLmFzX3BhdGhuYW1lKCkpCmRpZmYgLS1naXQgYS9NYWMvSURFIHNjcmlwdHMvSGFjay9Ub29sYm94IEFzc2lzdGFudC4uLiBiL01hYy9JREUgc2NyaXB0cy9IYWNrL1Rvb2xib3ggQXNzaXN0YW50Li4uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZDc4NDYKLS0tIC9kZXYvbnVsbAorKysgYi9NYWMvSURFIHNjcmlwdHMvSGFjay9Ub29sYm94IEFzc2lzdGFudC4uLgpAQCAtMCwwICsxLDQ1IEBACitpbXBvcnQgYWV0b29scworaW1wb3J0IFN0YW5kYXJkX1N1aXRlCitpbXBvcnQgUmVxdWlyZWRfU3VpdGUKK2ltcG9ydCBNYWNPUworaW1wb3J0IFcKKworCitjbGFzcyBUb29sYm94KGFldG9vbHMuVGFsa1RvLCBTdGFuZGFyZF9TdWl0ZS5TdGFuZGFyZF9TdWl0ZSk6CisJCisJZGVmIExvb2t1cFRvcGljKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQlfY29kZSA9ICdEYW5SJworCQlfc3ViY29kZSA9ICdSRUYgJworCisJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKKwkJCisJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAorCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKwkJCXJhaXNlIE1hY09TLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCisJCisKK2NsYXNzIFRvb2xib3hBc3NpOgorCQorCWRlZiBfX2luaXRfXyhzZWxmKToKKwkJc2VsZi50YWxrZXIgPSBOb25lCisJCXNlbGYudyA9IFcuV2luZG93KCgyMDAsIDEwMCksICJUb29sYm94IEFzc2lzdGFudCIpCisJCXNlbGYudy5idXR0b24gPSBXLkJ1dHRvbigoLTk0LCAtMzIsIDgwLCAxNiksICJMb29rdXAiLCBzZWxmLmxvb2t1cCkKKwkJc2VsZi53LnByb21wdCA9IFcuVGV4dEJveCgoMTAsIDgsIC0xMCwgMTUpLCAiRW50ZXIgdG9waWM6IikKKwkJc2VsZi53LmVkaXQgPSBXLkVkaXRUZXh0KCgxMCwgMjQsIC0xMCwgMjApKQorCQlzZWxmLncuc2V0ZGVmYXVsdGJ1dHRvbihzZWxmLncuYnV0dG9uKQorCQlzZWxmLncub3BlbigpCisJCisJZGVmIGxvb2t1cChzZWxmKToKKwkJaWYgc2VsZi50YWxrZXIgaXMgTm9uZToKKwkJCXRyeToKKwkJCQlzZWxmLnRhbGtlciA9IFRvb2xib3goJ0FMVFYnLCBzdGFydCA9IDEpCisJCQlleGNlcHQ6CisJCQkJcmFpc2UgVy5BbGVydEVycm9yLCAiQ2FuuXQgZmluZCCzVG9vbGJveCBBc3Npc3RhbnSyIgorCQlsb29rdXAgPSBzZWxmLncuZWRpdC5nZXQoKQorCQl0cnk6CisJCQlzZWxmLnRhbGtlci5Mb29rdXBUb3BpYyhsb29rdXApCisJCWV4Y2VwdCBNYWNPUy5FcnJvciwgZGV0YWlsOgorCQkJVy5NZXNzYWdlKCJSZXF1ZXN0ZWQgdG9waWMgbm90IGZvdW5kLlxyKCVkKSIgJSBkZXRhaWxbMF0pCisKK3QgPSBUb29sYm94QXNzaSgpCmRpZmYgLS1naXQgYS9NYWMvSURFIHNjcmlwdHMvSG9sZCBvcHRpb24gdG8gb3BlbiBhIHNjcmlwdC4uLiBiL01hYy9JREUgc2NyaXB0cy9Ib2xkIG9wdGlvbiB0byBvcGVuIGEgc2NyaXB0Li4uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MmM2NGMKLS0tIC9kZXYvbnVsbAorKysgYi9NYWMvSURFIHNjcmlwdHMvSG9sZCBvcHRpb24gdG8gb3BlbiBhIHNjcmlwdC4uLgpAQCAtMCwwICsxLDQgQEAKKyJIb2xkIHRoZSBvcHRpb24ga2V5IHRvIG9wZW4gYSBzY3JpcHQgaW5zdGVhZCBvZiBydW5uaW5nIGl0LiIKKworaW1wb3J0IFcKK1cuTWVzc2FnZShfX2RvY19fKQpkaWZmIC0tZ2l0IGEvTWFjL0lERSBzY3JpcHRzL0luc2VydCBmaWxlIG5hbWUuLi4gYi9NYWMvSURFIHNjcmlwdHMvSW5zZXJ0IGZpbGUgbmFtZS4uLgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjMyZjhlCi0tLSAvZGV2L251bGwKKysrIGIvTWFjL0lERSBzY3JpcHRzL0luc2VydCBmaWxlIG5hbWUuLi4KQEAgLTAsMCArMSw2IEBACitpbXBvcnQgbWFjZnMKKworZnNzLCBvayA9IG1hY2ZzLlN0YW5kYXJkR2V0RmlsZSgpCitpZiBvazoKKwlpbXBvcnQgVworCVcuRnJvbnRXaW5kb3dJbnNlcnQoJyIlcyInICUgZnNzLmFzX3BhdGhuYW1lKCkpCmRpZmYgLS1naXQgYS9NYWMvSURFIHNjcmlwdHMvSW5zZXJ0IGZvbGRlciBuYW1lLi4uIGIvTWFjL0lERSBzY3JpcHRzL0luc2VydCBmb2xkZXIgbmFtZS4uLgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTllMDZiCi0tLSAvZGV2L251bGwKKysrIGIvTWFjL0lERSBzY3JpcHRzL0luc2VydCBmb2xkZXIgbmFtZS4uLgpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBtYWNmcworCitmc3MsIG9rID0gbWFjZnMuR2V0RGlyZWN0b3J5KCkKK2lmIG9rOgorCWltcG9ydCBXCisJVy5Gcm9udFdpbmRvd0luc2VydCgnIiVzIicgJSBmc3MuYXNfcGF0aG5hbWUoKSkKZGlmZiAtLWdpdCBhL01hYy9JREUgc2NyaXB0cy9TZWFyY2ggUHl0aG9uIERvY3VtZW50YXRpb24uLi4gYi9NYWMvSURFIHNjcmlwdHMvU2VhcmNoIFB5dGhvbiBEb2N1bWVudGF0aW9uLi4uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNTZiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9NYWMvSURFIHNjcmlwdHMvU2VhcmNoIFB5dGhvbiBEb2N1bWVudGF0aW9uLi4uCkBAIC0wLDAgKzEsNCBAQAoraW1wb3J0IFB5RG9jU2VhcmNoCisjIHNldCB0aGUgY3JlYXRvciBvZiB0aGUgYnJvd3Nlci4gJ01TSUUnID0gRXhwbG9zZXIsICdNT1NTJyA9IE5ldHNjYXBlCitQeURvY1NlYXJjaC5TSUdOQVRVUkUgPSAnTU9TUycKK3BkcyA9IFB5RG9jU2VhcmNoLlB5RG9jU2VhcmNoKCkKZGlmZiAtLWdpdCBhL01hYy9JREUgc2NyaXB0cy9XaWRnZXQgZGVtb3MvQWN0aXZhdGVXaW5kb3dEZW1vLnB5IGIvTWFjL0lERSBzY3JpcHRzL1dpZGdldCBkZW1vcy9BY3RpdmF0ZVdpbmRvd0RlbW8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkODMyYgotLS0gL2Rldi9udWxsCisrKyBiL01hYy9JREUgc2NyaXB0cy9XaWRnZXQgZGVtb3MvQWN0aXZhdGVXaW5kb3dEZW1vLnB5CkBAIC0wLDAgKzEsMjEgQEAKK2ltcG9ydCBXCisKKyMgdGhpcyBkZW1vc2NyaXB0IGlsbHVzdHJhdGVzIGhvdyB0byB0aWUgYSBjYWxsYmFjayB0byBhY3RpdmF0aW5nIG9yIGNsaWNraW5nIGF3YXkgb2YgdGhlIHdpbmRvdy4KKyMgZXZiIDIyIDQgOTkKKworY2xhc3MgQWN0aXZhdGVEZW1vOgorCQorCWRlZiBfX2luaXRfXyhzZWxmKToKKwkJc2VsZi53ID0gVy5XaW5kb3coKDIwMCwgMjAwKSwgJ0FjdGl2YXRlIGRlbW8nKQorCQlzZWxmLncuYmluZCgiPGFjdGl2YXRlPiIsIHNlbGYubXlfYWN0aXZhdGVfY2FsbGJhY2spCisJCXNlbGYudy5vcGVuKCkKKwkKKwlkZWYgbXlfYWN0aXZhdGVfY2FsbGJhY2soc2VsZiwgb25vZmYpOgorCQknJyd0aGUgY2FsbGJhY2sgZ2V0cyAxIHBhcmFtZXRlciB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgd2luZG93CisJCWhhcyBiZWVuIGFjdGl2YXRlZCAoMSkgb3IgY2xpY2tlZCB0byB0aGUgYmFjayAoMCknJycKKwkJaWYgb25vZmYgPT0gMToKKwkJCXByaW50ICJJJ20gaW4gdGhlIGZyb250IG5vdyEiCisJCWVsc2U6CisJCQlwcmludCAiSSd2ZSBiZWVuIGNsaWNrZWQgYXdheSwgT2ggTm8hIgorCithZCA9IEFjdGl2YXRlRGVtbygpCmRpZmYgLS1naXQgYS9NYWMvSURFIHNjcmlwdHMvV2lkZ2V0IGRlbW9zL0tleVRlc3Rlci5weSBiL01hYy9JREUgc2NyaXB0cy9XaWRnZXQgZGVtb3MvS2V5VGVzdGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNjY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9NYWMvSURFIHNjcmlwdHMvV2lkZ2V0IGRlbW9zL0tleVRlc3Rlci5weQpAQCAtMCwwICsxLDM0IEBACisiIiJTaW1wbGUgVyBkZW1vIC0tIHNob3dzIGhvdyB0byBtYWtlIGEgd2luZG93LCBhbmQgYmluZCBhIGZ1bmN0aW9uIHRvIGEgImtleSIgZXZlbnQuIiIiCisKK2ltcG9ydCBXCisKKyMga2V5IGNhbGxiYWNrIGZ1bmN0aW9uCitkZWYgdGVzdGVyKGNoYXIsIGV2ZW50KToKKwl0ZXh0ID0gYGNoYXJgICsgIlxyIiArIGBvcmQoY2hhcilgICsgIlxyIiArIGhleChvcmQoY2hhcikpICsgIlxyIiArIG9jdChvcmQoY2hhcikpCisJd2luZG93LmtleXMuc2V0KHRleHQpCisKKyMgY2xvc2UgY2FsbGJhY2sKK2RlZiBjbG9zZSgpOgorCXdpbmRvdy5jbG9zZSgpCisKKyMgbmV3IHdpbmRvdword2luZG93ID0gVy5EaWFsb2coKDE4MCwgMTAwKSwgIlR5cGUgYSBjaGFyYWN0ZXIiKQorCisjIG1ha2UgYSBmcmFtZSAoYSBzaW1wbGUgcmVjdGFuZ2xlKQord2luZG93LmZyYW1lID0gVy5GcmFtZSgoNSwgNSwgLTUsIC0zMykpCisKKyMgc29tZSBsYWJlbHMsIHN0YXRpYyB0ZXh0Cit3aW5kb3cuY2FwdGlvbnMgPSBXLlRleHRCb3goKDEwLCA5LCA0MywgLTM2KSwgImNoYXI6XHJkZWNpbWFsOlxyaGV4Olxyb2N0YWw6IikKKworIyBhbm90aGVyIHN0YXRpYyB0ZXh0IGJveAord2luZG93LmtleXMgPSBXLlRleHRCb3goKDYwLCA5LCA0MCwgLTM2KSkKKworIyBhIGJ1dHRvbgord2luZG93LmJ1dHRvbiA9IFcuQnV0dG9uKCgtNjksIC0yNCwgNjAsIDE2KSwgIkRvbmUiLCBjbG9zZSkKKworIyBiaW5kIHRoZSBjYWxsYmFja3MKK3dpbmRvdy5iaW5kKCI8a2V5PiIsIHRlc3RlcikKK3dpbmRvdy5iaW5kKCJjbWR3Iiwgd2luZG93LmJ1dHRvbi5wdXNoKQorCisjIG9wZW4gdGhlIHdpbmRvdword2luZG93Lm9wZW4oKQpkaWZmIC0tZ2l0IGEvTWFjL0lERSBzY3JpcHRzL1dpZGdldCBkZW1vcy9MaXN0V2luZG93LnB5IGIvTWFjL0lERSBzY3JpcHRzL1dpZGdldCBkZW1vcy9MaXN0V2luZG93LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMDY2YjkKLS0tIC9kZXYvbnVsbAorKysgYi9NYWMvSURFIHNjcmlwdHMvV2lkZ2V0IGRlbW9zL0xpc3RXaW5kb3cucHkKQEAgLTAsMCArMSwxNyBAQAoraW1wb3J0IFcKKworZGVmIGxpc3RoaXQoaXNkYmwpOgorCWlmIGlzZGJsOgorCQlwcmludCAiZG91YmxlLWNsaWNrIGluIGxpc3QhIgorCWVsc2U6CisJCXByaW50ICJjbGljayBpbiBsaXN0LiIKKword2luZG93ID0gVy5XaW5kb3coKDIwMCwgNDAwKSwgIldpbmRvdyB3aXRoIExpc3QiLCBtaW5zaXplID0gKDE1MCwgMjAwKSkKKword2luZG93Lmxpc3QgPSBXLkxpc3QoKC0xLCAyMCwgMSwgLTE0KSwgW10sIGxpc3RoaXQpCisKKyMgb3IgKGVxdWl2YWxlbnQpOgorIyB3aW5kb3cubGlzdCA9IFcuTGlzdCgoLTEsIDIwLCAxLCAtMTQpLCBjYWxsYmFjayA9IGxpc3RoaXQpCisKK3dpbmRvdy5saXN0LnNldChyYW5nZSgxMzIxMywgMTMzNTApKQord2luZG93Lm9wZW4oKQpkaWZmIC0tZ2l0IGEvTWFjL0lERSBzY3JpcHRzL1dpZGdldCBkZW1vcy9Nb2RhbERpYWxvZy5weSBiL01hYy9JREUgc2NyaXB0cy9XaWRnZXQgZGVtb3MvTW9kYWxEaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzYTc2YQotLS0gL2Rldi9udWxsCisrKyBiL01hYy9JREUgc2NyaXB0cy9XaWRnZXQgZGVtb3MvTW9kYWxEaWFsb2cucHkKQEAgLTAsMCArMSwxMCBAQAoraW1wb3J0IFcKK2ltcG9ydCBXaW5kb3dzCisKKwordyA9IFcuTW9kYWxEaWFsb2coKDEwMCwgMTAwKSkKKwordy5lZCA9IFcuRWRpdFRleHQoKDEwLCAxMCwgODAsIDUwKSkKK3cub2sgPSBXLkJ1dHRvbigoMTAsIDcwLCA4MCwgMTYpLCAiT2siLCB3LmNsb3NlKQordy5zZXRkZWZhdWx0YnV0dG9uKHcub2spCit3Lm9wZW4oKQpkaWZmIC0tZ2l0IGEvTWFjL0lERSBzY3JpcHRzL1dpZGdldCBkZW1vcy9QYW5lRGVtby5weSBiL01hYy9JREUgc2NyaXB0cy9XaWRnZXQgZGVtb3MvUGFuZURlbW8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5OTFiMAotLS0gL2Rldi9udWxsCisrKyBiL01hYy9JREUgc2NyaXB0cy9XaWRnZXQgZGVtb3MvUGFuZURlbW8ucHkKQEAgLTAsMCArMSwxNCBAQAoraW1wb3J0IFcKKwordyA9IFcuV2luZG93KCg2MDAsIDQwMCksICJIYSEiLCBtaW5zaXplID0gKDI0MCwgMjAwKSkKKwordy5wYW5lcyA9IFcuSG9yaXpvbnRhbFBhbmVzKCg4LCA4LCAtMzAsIC04KSwgKDAuMywgMC4zLCAwLjQpKQordy5wYW5lcy5ibGFoMSA9IFcuRWRpdFRleHQoTm9uZSwgImVlaGhoLi4uIikKK3cucGFuZXMuYmxhaDIgPSBXLkVkaXRUZXh0KCg4LCA4LCAtOCwgLTgpLCAieHh4IG5vdS4uLiIpCit3LnBhbmVzLnBhbmVzID0gVy5WZXJ0aWNhbFBhbmVzKE5vbmUsICgwLjMsIDAuNCwgMC4zKSkKK3cucGFuZXMucGFuZXMuYmxhaDEgPSBXLkVkaXRUZXh0KE5vbmUsICJlZWhoaC4uLiIpCit3LnBhbmVzLnBhbmVzLmJsYWgyID0gVy5GcmFtZShOb25lKQordy5wYW5lcy5wYW5lcy5ibGFoMi50ID0gVy5FZGl0VGV4dCgoMCwgMCwgMCwgMCksICJub3UuLi4iKQordy5wYW5lcy5wYW5lcy5ibGFoMyA9IFcuTGlzdChOb25lLCBbImVlaGhoLi4uIiwgJ2FiYycsICdkZWYnXSkKKwordy5vcGVuKCkKZGlmZiAtLWdpdCBhL01hYy9JREUgc2NyaXB0cy9XaWRnZXQgZGVtb3MvUGFuZURlbW8yLnB5IGIvTWFjL0lERSBzY3JpcHRzL1dpZGdldCBkZW1vcy9QYW5lRGVtbzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkMDZkZQotLS0gL2Rldi9udWxsCisrKyBiL01hYy9JREUgc2NyaXB0cy9XaWRnZXQgZGVtb3MvUGFuZURlbW8yLnB5CkBAIC0wLDAgKzEsMTYgQEAKK2ltcG9ydCBXCisKK3cgPSBXLldpbmRvdygoNjAwLCA0MDApLCAiSGEhIiwgbWluc2l6ZSA9ICgyNDAsIDIwMCkpCisKK3cucGFuZXMgPSBXLkhvcml6b250YWxQYW5lcygoOCwgOCwgLTgsIC0yMCksICgwLjYsIDAuNCkpCisKK3cucGFuZXMucGFuZXMgPSBXLlZlcnRpY2FsUGFuZXMoTm9uZSwgKDAuMywgMC40LCAwLjMpKQordy5wYW5lcy5wYW5lcy5ibGFoMSA9IFcuRWRpdFRleHQoTm9uZSwgImVlaGhoLi4uIikKK3cucGFuZXMucGFuZXMuYmxhaDIgPSBXLkVkaXRUZXh0KE5vbmUsICJub3UuLi4iKQordy5wYW5lcy5wYW5lcy5ibGFoMyA9IFcuTGlzdChOb25lLCBbImVlaGhoLi4uIiwgJ2FiYycsICdkZWYnXSkKKwordy5wYW5lcy5ncm91cCA9IFcuR3JvdXAoTm9uZSkKK3cucGFuZXMuZ3JvdXAubXl0ZXh0ID0gVy5FZGl0VGV4dCgoMCwgMjQsIDAsIDApLCAiZWVoaGguLi4iKQordy5wYW5lcy5ncm91cC5idXR0b24xID0gVy5CdXR0b24oKDAsIDAsIDgwLCAxNiksICJBIEJ1dHRvbiIpCisKK3cub3BlbigpCmRpZmYgLS1naXQgYS9NYWMvSURFIHNjcmlwdHMvV2lkZ2V0IGRlbW9zL1Njcm9sbGJhcldpbmRvdy5weSBiL01hYy9JREUgc2NyaXB0cy9XaWRnZXQgZGVtb3MvU2Nyb2xsYmFyV2luZG93LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYzFiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9NYWMvSURFIHNjcmlwdHMvV2lkZ2V0IGRlbW9zL1Njcm9sbGJhcldpbmRvdy5weQpAQCAtMCwwICsxLDE3IEBACitpbXBvcnQgVworCisjIG1ha2UgYSBub24tc2l6YWJsZSB3aW5kb3cKKyN3aW5kb3cgPSBXLldpbmRvdygoMjAwLCAyMDApLCAiRml4ZWQgU2l6ZSIpCisKKyMgIG1ha2UgYSBzaXphYmxlIHdpbmRvdword2luZG93ID0gVy5XaW5kb3coKDIwMCwgMzAwKSwgIlZhcmlhYmxlIFNpemUhIiwgbWluc2l6ZSA9ICgyMDAsIDIwMCkpCisKKyMgbWFrZSBzb21lIGVkaXQgdGV4dCB3aWRnZXRzCisjIGEgc2Nyb2xsYmFyCit3aW5kb3cuaGJhciA9IFcuU2Nyb2xsYmFyKCgtMSwgLTE1LCAtMTQsIDE2KSwgbWF4ID0gMTAwKQord2luZG93LnZiYXIgPSBXLlNjcm9sbGJhcigoLTE1LCAtMSwgMTYsIC0xNCksIG1heCA9IDEwMCkKKyN3aW5kb3cudmJhciA9IFcuU2Nyb2xsYmFyKCgtMTUsIC0xLCAxLCAtMTQpLCBtYXggPSAxMDApCisKKworIyBvcGVuIHRoZSB3aW5kb3cKK3dpbmRvdy5vcGVuKCkKZGlmZiAtLWdpdCBhL01hYy9JREUgc2NyaXB0cy9XaWRnZXQgZGVtb3MvVHdvTGlzdHMucHkgYi9NYWMvSURFIHNjcmlwdHMvV2lkZ2V0IGRlbW9zL1R3b0xpc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNTJjODkKLS0tIC9kZXYvbnVsbAorKysgYi9NYWMvSURFIHNjcmlwdHMvV2lkZ2V0IGRlbW9zL1R3b0xpc3RzLnB5CkBAIC0wLDAgKzEsMjIgQEAKK2ltcG9ydCBXCisKK2RlZiB0d290aGlyZCh3aWR0aCwgaGVpZ2h0KToKKwlyZXR1cm4gKDgsIDgsIHdpZHRoIC0gOCwgMipoZWlnaHQvMyAtIDQpCisKK2RlZiBvbmV0aGlyZCh3aWR0aCwgaGVpZ2h0KToKKwlyZXR1cm4gKDgsIDIqaGVpZ2h0LzMgKyA0LCB3aWR0aCAtIDgsIGhlaWdodCAtIDIyKQorCitkZWYgaGFsZmJvdW5kczEod2lkdGgsIGhlaWdodCk6CisJcmV0dXJuICgwLCAwLCB3aWR0aC8yIC0gNCwgaGVpZ2h0KQorCitkZWYgaGFsZmJvdW5kczIod2lkdGgsIGhlaWdodCk6CisJcmV0dXJuICh3aWR0aC8yICsgNCwgMCwgd2lkdGgsIGhlaWdodCkKKword2luZG93ID0gVy5XaW5kb3coKDQwMCwgNDAwKSwgIlNpemFibGUgd2luZG93IHdpdGggdHdvIGxpc3RzIiwgbWluc2l6ZSA9ICgyMDAsIDIwMCkpCisKK3dpbmRvdy5saXN0Z3JvdXAgPSBXLkdyb3VwKHR3b3RoaXJkKQord2luZG93Lmxpc3Rncm91cC5saXN0MSA9IFcuTGlzdChoYWxmYm91bmRzMSwgcmFuZ2UoMTMyMTMsIDEzMzEwKSkKK3dpbmRvdy5saXN0Z3JvdXAubGlzdDIgPSBXLkxpc3QoaGFsZmJvdW5kczIsIHJhbmdlKDgwMCwgODMwKSkKK3dpbmRvdy5ldCA9IFcuRWRpdFRleHQob25ldGhpcmQsICJXYXQgbnUgd2Vlcj8iKQorCit3aW5kb3cub3BlbigpCmRpZmYgLS1naXQgYS9NYWMvSURFIHNjcmlwdHMvV2lkZ2V0IGRlbW9zL1dpZGdldFRlc3QucHkgYi9NYWMvSURFIHNjcmlwdHMvV2lkZ2V0IGRlbW9zL1dpZGdldFRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRlZjE0MAotLS0gL2Rldi9udWxsCisrKyBiL01hYy9JREUgc2NyaXB0cy9XaWRnZXQgZGVtb3MvV2lkZ2V0VGVzdC5weQpAQCAtMCwwICsxLDg1IEBACitpbXBvcnQgVworCisjIGRlZmluZSBzb21lIGNhbGxiYWNrcworZGVmIGNhbGxiYWNrKCk6CisJd2luZG93LmNsb3NlKCkKKworZGVmIGNoZWNrY2FsbGJhY2sodmFsdWUpOgorCXByaW50ICJoaXQgdGhlIGNoZWNrYm94IiwgdmFsdWUKKworZGVmIHJhZGlvY2FsbGJhY2sodmFsdWUpOgorCXByaW50ICJoaXQgcmFkaW9idXR0b24gIzMiLCB2YWx1ZQorCitkZWYgc2Nyb2xsY2FsbGJhY2sodmFsdWUpOgorCXdpZGdldCA9IHdpbmRvdy5oYmFyCisJaWYgdmFsdWUgPT0gIisiOgorCQl3aWRnZXQuc2V0KHdpZGdldC5nZXQoKSAtIDEpCisJZWxpZiB2YWx1ZSA9PSAiLSI6CisJCXdpZGdldC5zZXQod2lkZ2V0LmdldCgpICsgMSkKKwllbGlmIHZhbHVlID09ICIrKyI6CisJCXdpZGdldC5zZXQod2lkZ2V0LmdldCgpIC0gMTApCisJZWxpZiB2YWx1ZSA9PSAiLS0iOgorCQl3aWRnZXQuc2V0KHdpZGdldC5nZXQoKSArIDEwKQorCWVsc2U6ICAgIyBpbiB0aHVtYgorCQl3aWRnZXQuc2V0KHZhbHVlKQorCXByaW50ICJzY3JvbGwuLi4iLCB3aWRnZXQuZ2V0KCkKKworZGVmIHRleHRjYWxsYmFjaygpOgorCXdpbmRvdy5ldDMuc2V0KHdpbmRvdy5ldDEuZ2V0KCkpCisKK2RlZiBjYW5jZWwoKToKKwlpbXBvcnQgRWFzeURpYWxvZ3MKKwlFYXN5RGlhbG9ncy5NZXNzYWdlKCJDYW5jZWwhIikKKworIyBtYWtlIGEgbm9uLXNpemFibGUgd2luZG93Cisjd2luZG93ID0gVy5XaW5kb3coKDIwMCwgMzAwKSwgIkZpeGVkIFNpemUiKQorCisjICBtYWtlIGEgc2l6YWJsZSB3aW5kb3cKK3dpbmRvdyA9IFcuV2luZG93KCgyMDAsIDMwMCksICJWYXJpYWJsZSBTaXplISIsIG1pbnNpemUgPSAoMjAwLCAzMDApKQorCisjIG1ha2Ugc29tZSBlZGl0IHRleHQgd2lkZ2V0cword2luZG93LmV0MSA9IFcuRWRpdFRleHQoKDEwLCAxMCwgMTEwLCAxMTApLCAiSGFsbG8hIiwgdGV4dGNhbGxiYWNrKQord2luZG93LmV0MiA9IFcuRWRpdFRleHQoKDEzMCwgNDAsIDYwLCAzMCksICJvbmUhIikKK3dpbmRvdy5ldDMgPSBXLkVkaXRUZXh0KCgxMzAsIDgwLCAtMTAsIDQwKSwgInR3bz8iKQorCisjIGEgYnV0dG9uCit3aW5kb3cuYnV0dG9uID0gVy5CdXR0b24oKC03MCwgMTAsIDYwLCAxNiksICJDbG9zZSIsIGNhbGxiYWNrKQorCisjIGEgY2hlY2tib3gKK3dpbmRvdy5jaCA9IFcuQ2hlY2tCb3goKDEwLCAxMzAsIDE2MCwgMTYpLCAiQ2hlY2sgKGNvbW1hbmQgpykiLCBjaGVja2NhbGxiYWNrKQorCisjIHNldCBvZiByYWRpbyBidXR0b25zIChzaG91bGQgYmVjb21lIGVhc2llci9uaWNlcikKK3RoZWJ1dHRvbnMgPSBbXQord2luZG93LnIxID0gVy5SYWRpb0J1dHRvbigoMTAsIDE1MCwgMTgwLCAxNiksICJSYWRpbyAxIChjbWQgMSkiLCB0aGVidXR0b25zKQord2luZG93LnIyID0gVy5SYWRpb0J1dHRvbigoMTAsIDE3MCwgMTgwLCAxNiksICJSYWRpbyAyIChjbWQgMikiLCB0aGVidXR0b25zKQord2luZG93LnIzID0gVy5SYWRpb0J1dHRvbigoMTAsIDE5MCwgMTgwLCAxNiksICJSYWRpbyAzIChjbWQgMykiLCB0aGVidXR0b25zLCByYWRpb2NhbGxiYWNrKQord2luZG93LnIxLnNldCgxKQorCisjIGEgbm9ybWFsIGJ1dHRvbgord2luZG93LmNhbmNlbGJ1dHRvbiA9IFcuQnV0dG9uKCgxMCwgMjIwLCA2MCwgMTYpLCAiQ2FuY2VsIiwgY2FuY2VsKQorCisjIGEgc2Nyb2xsYmFyCit3aW5kb3cuaGJhciA9IFcuU2Nyb2xsYmFyKCgtMSwgLTE1LCAtMTQsIDE2KSwgc2Nyb2xsY2FsbGJhY2ssIG1heCA9IDEwMCkKKworIyBzb21lIHN0YXRpYyB0ZXh0Cit3aW5kb3cuc3RhdGljID0gVy5UZXh0Qm94KCgxMCwgMjYwLCAxMTAsIDE2KSwgIlNjaHRhdGljIikKKworIyBiaW5kIHNvbWUga2V5c3Ryb2tlcyB0byBmdW5jdGlvbnMKK3dpbmRvdy5iaW5kKCdjbWSnJywgd2luZG93LmNoLnB1c2gpCit3aW5kb3cuYmluZCgnY21kMScsIHdpbmRvdy5yMS5wdXNoKQord2luZG93LmJpbmQoJ2NtZDInLCB3aW5kb3cucjIucHVzaCkKK3dpbmRvdy5iaW5kKCdjbWQzJywgd2luZG93LnIzLnB1c2gpCit3aW5kb3cuYmluZCgnY21kdycsIHdpbmRvdy5idXR0b24ucHVzaCkKK3dpbmRvdy5iaW5kKCdjbWQuJywgd2luZG93LmNhbmNlbGJ1dHRvbi5wdXNoKQorCit3aW5kb3cuc2V0ZGVmYXVsdGJ1dHRvbih3aW5kb3cuYnV0dG9uKQorIyBvcGVuIHRoZSB3aW5kb3cKK3dpbmRvdy5vcGVuKCkKKworaWYgMDoKKwlpbXBvcnQgdGltZQorCWZvciBpIGluIHJhbmdlKDIwKToKKwkJd2luZG93LmV0Mi5zZXQoYGlgKQorCQkjd2luZG93LmV0Mi5TZXRQb3J0KCkKKwkJI3dpbmRvdy5ldDIuZHJhdygpCisJCXRpbWUuc2xlZXAoMC4xKQpkaWZmIC0tZ2l0IGEvTWFjL0lERSBzY3JpcHRzL3NlcGFyYXRvciAtLS0gYi9NYWMvSURFIHNjcmlwdHMvc2VwYXJhdG9yIC0tLQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGNkN2ZjCi0tLSAvZGV2L251bGwKKysrIGIvTWFjL0lERSBzY3JpcHRzL3NlcGFyYXRvciAtLS0KQEAgLTAsMCArMSBAQAorQSBzZXBhcmF0b3IgZW5kcyB3aXRoICctLS0nClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=