ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2NoYW5uZWwudHh0IGIvcnVudGltZS9kb2MvY2hhbm5lbC50eHQKaW5kZXggMzA3OGQzMS4uMzljZDkxMiAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvY2hhbm5lbC50eHQKKysrIGIvcnVudGltZS9kb2MvY2hhbm5lbC50eHQKQEAgLTEsNCArMSw0IEBACi0qY2hhbm5lbC50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDguMC4gIExhc3QgY2hhbmdlOiAyMDE2IERlYyAwMgorKmNoYW5uZWwudHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA4LjAuICBMYXN0IGNoYW5nZTogMjAxNyBKdW4gMTEKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwJICBieSBCcmFtIE1vb2xlbmFhcgpAQCAtNDg5LDYgKzQ4OSwxMSBAQAogImNhbGxiYWNrIiBvcHRpb246ID4KICAgICBsZXQgam9iID0gam9iX3N0YXJ0KGNvbW1hbmQsIHsiY2FsbGJhY2siOiAiTXlIYW5kbGVyIn0pIAogCitEZXBlbmRpbmcgb24gdGhlIHN5c3RlbSwgc3RhcnRpbmcgYSBqb2IgY2FuIHB1dCBWaW0gaW4gdGhlIGJhY2tncm91bmQsIHRoZQorc3RhcnRlZCBqb2IgZ2V0cyB0aGUgZm9jdXMuICBUbyBhdm9pZCB0aGF0LCB1c2UgdGhlIGBmb3JlZ3JvdW5kKClgIGZ1bmN0aW9uLgorVGhpcyBtaWdodCBub3QgYWx3YXlzIHdvcmsgd2hlbiBjYWxsZWQgZWFybHksIHB1dCBpbiB0aGUgY2FsbGJhY2sgaGFuZGxlciBvcgordXNlIGEgdGltZXIgdG8gY2FsbCBpdCBhZnRlciB0aGUgam9iIGhhcyBzdGFydGVkLgorCiBZb3UgY2FuIHNlbmQgYSBtZXNzYWdlIHRvIHRoZSBjb21tYW5kIHdpdGggY2hfZXZhbHJhdygpLiAgSWYgdGhlIGNoYW5uZWwgaXMgaW4KIEpTT04gb3IgSlMgbW9kZSB5b3UgY2FuIHVzZSBjaF9ldmFsZXhwcigpLgogCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9ldmFsLnR4dCBiL3J1bnRpbWUvZG9jL2V2YWwudHh0CmluZGV4IDcwMWZkMzkuLmRlYzk2MGIgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL2V2YWwudHh0CisrKyBiL3J1bnRpbWUvZG9jL2V2YWwudHh0CkBAIC0xLDQgKzEsNCBAQAotKmV2YWwudHh0KglGb3IgVmltIHZlcnNpb24gOC4wLiAgTGFzdCBjaGFuZ2U6IDIwMTcgSnVuIDA1CisqZXZhbC50eHQqCUZvciBWaW0gdmVyc2lvbiA4LjAuICBMYXN0IGNoYW5nZTogMjAxNyBKdW4gMTMKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwJICBieSBCcmFtIE1vb2xlbmFhcgpAQCAtNTQ2NSw3ICs1NDY1LDEwIEBACiA8CQkJCQkJCSpsYXN0LXBvc2l0aW9uLWp1bXAqCiAJCVRoaXMgYXV0b2NvbW1hbmQganVtcHMgdG8gdGhlIGxhc3Qga25vd24gcG9zaXRpb24gaW4gYSBmaWxlCiAJCWp1c3QgYWZ0ZXIgb3BlbmluZyBpdCwgaWYgdGhlICciIG1hcmsgaXMgc2V0OiA+Ci0JOmF1IEJ1ZlJlYWRQb3N0ICogaWYgbGluZSgiJ1wiIikgPiAxICYmIGxpbmUoIidcIiIpIDw9IGxpbmUoIiQiKSB8IGV4ZSAibm9ybWFsISBnYFwiIiB8IGVuZGlmCisgICAgIDphdSBCdWZSZWFkUG9zdCAqCisgICAgICAgICBcIGlmIGxpbmUoIidcIiIpID4gMSAmJiBsaW5lKCInXCIiKSA8PSBsaW5lKCIkIikgJiYgJmZ0ICF+IyAnY29tbWl0JyAKKyAgICAgICAgIFwgfCAgIGV4ZSAibm9ybWFsISBnYFwiIgorICAgICAgICAgXCB8IGVuZGlmCiAKIGxpbmUyYnl0ZSh7bG51bX0pCQkJCQkqbGluZTJieXRlKCkqCiAJCVJldHVybiB0aGUgYnl0ZSBjb3VudCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyIGZvciBsaW5lCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9wYXR0ZXJuLnR4dCBiL3J1bnRpbWUvZG9jL3BhdHRlcm4udHh0CmluZGV4IGQ2NzY0MDkuLjg5YjI0YzYgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3BhdHRlcm4udHh0CisrKyBiL3J1bnRpbWUvZG9jL3BhdHRlcm4udHh0CkBAIC0xLDQgKzEsNCBAQAotKnBhdHRlcm4udHh0KiAgIEZvciBWaW0gdmVyc2lvbiA4LjAuICBMYXN0IGNoYW5nZTogMjAxNyBNYXIgMjkKKypwYXR0ZXJuLnR4dCogICBGb3IgVmltIHZlcnNpb24gOC4wLiAgTGFzdCBjaGFuZ2U6IDIwMTcgSnVuIDA1CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0xMDc2LDEyICsxMDc2LDE2IEBACiAJIjpzL1sveC8iIHNlYXJjaGVzIGZvciAiWy94IiBhbmQgcmVwbGFjZXMgaXQgd2l0aCBub3RoaW5nLiAgSXQgZG9lcwogCW5vdCBzZWFyY2ggZm9yICJbIiBhbmQgcmVwbGFjZXMgaXQgd2l0aCAieCIhCiAKKwkJCQkJCQkJKkU5NDQqICpFOTQ1KgogCUlmIHRoZSBzZXF1ZW5jZSBiZWdpbnMgd2l0aCAiXiIsIGl0IG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgTk9UCiAJaW4gdGhlIGNvbGxlY3Rpb246ICJbXnh5el0iIG1hdGNoZXMgYW55dGhpbmcgYnV0ICd4JywgJ3knIGFuZCAneicuCiAJLSBJZiB0d28gY2hhcmFjdGVycyBpbiB0aGUgc2VxdWVuY2UgYXJlIHNlcGFyYXRlZCBieSAnLScsIHRoaXMgaXMKIAkgIHNob3J0aGFuZCBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBBU0NJSSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlbS4gIEUuZy4sCi0JICAiWzAtOV0iIG1hdGNoZXMgYW55IGRlY2ltYWwgZGlnaXQuICBOb24tQVNDSUkgY2hhcmFjdGVycyBjYW4gYmUKLQkgIHVzZWQsIGJ1dCB0aGUgY2hhcmFjdGVyIHZhbHVlcyBtdXN0IG5vdCBiZSBtb3JlIHRoYW4gMjU2IGFwYXJ0LgorCSAgIlswLTldIiBtYXRjaGVzIGFueSBkZWNpbWFsIGRpZ2l0LiBJZiB0aGUgc3RhcnRpbmcgY2hhcmFjdGVyIGV4Y2VlZHMKKwkgIHRoZSBlbmRpbmcgY2hhcmFjdGVyLCBlLmcuIFtjLWFdLCBFOTQ0IG9jY3Vycy4gTm9uLUFTQ0lJIGNoYXJhY3RlcnMKKwkgIGNhbiBiZSB1c2VkLCBidXQgdGhlIGNoYXJhY3RlciB2YWx1ZXMgbXVzdCBub3QgYmUgbW9yZSB0aGFuIDI1NiBhcGFydAorCSAgaW4gdGhlIG9sZCByZWdleHAgZW5naW5lLiBGb3IgZXhhbXBsZSwgc2VhcmNoaW5nIGJ5IFtcdTMwMDAtXHU0MDAwXQorCSAgYWZ0ZXIgc2V0dGluZyByZT0xIGVtaXRzIGEgRTk0NSBlcnJvci4gUHJlcGVuZGluZyBcJSM9MiB3aWxsIGZpeCBpdC4KIAktIEEgY2hhcmFjdGVyIGNsYXNzIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIHRvIHRoZSBzZXQgb2YgY2hhcmFjdGVycwogCSAgYmVsb25naW5nIHRvIHRoYXQgY2hhcmFjdGVyIGNsYXNzLiAgVGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgY2xhc3NlcwogCSAgYXJlIHN1cHBvcnRlZDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3RhZ3MgYi9ydW50aW1lL2RvYy90YWdzCmluZGV4IGFmODQzZTMuLjIyNDAwN2MgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3RhZ3MKKysrIGIvcnVudGltZS9kb2MvdGFncwpAQCAtNDUxOSw2ICs0NTE5LDggQEAKIEU5NDEJZXZhbC50eHQJLypFOTQxKgogRTk0MglldmFsLnR4dAkvKkU5NDIqCiBFOTQzCW1lc3NhZ2UudHh0CS8qRTk0MyoKK0U5NDQJcGF0dGVybi50eHQJLypFOTQ0KgorRTk0NQlwYXR0ZXJuLnR4dAkvKkU5NDUqCiBFOTUJbWVzc2FnZS50eHQJLypFOTUqCiBFOTYJZGlmZi50eHQJLypFOTYqCiBFOTcJZGlmZi50eHQJLypFOTcqCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy90b2RvLnR4dCBiL3J1bnRpbWUvZG9jL3RvZG8udHh0CmluZGV4IGFjODAyNmIuLmM4MzMzMTIgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3RvZG8udHh0CisrKyBiL3J1bnRpbWUvZG9jL3RvZG8udHh0CkBAIC0xLDQgKzEsNCBAQAotKnRvZG8udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA4LjAuICBMYXN0IGNoYW5nZTogMjAxNyBKdW4gMDUKKyp0b2RvLnR4dCogICAgICBGb3IgVmltIHZlcnNpb24gOC4wLiAgTGFzdCBjaGFuZ2U6IDIwMTcgSnVuIDEzCiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTExMyw2ICsxMTMsNyBAQAogKE1hcmNpbiBTemV3Y3p5aywgMjAxNyBBcHIgMjYpCiAKIG1sX2dldCBlcnJvciB3aGVuIHVzaW5nIGEgUHl0aG9uLiAoWWdnZHJvb3QsIDIwMTcgSnVuIDEsICMxNzM3KQorTGVtb25ib3kgY2FuIHJlcHJvZHVjZSAoMjAxNyBKdW4gNSkKIAogbWxfZ2V0IGVycm9ycyB3aXRoIGJ1Z2d5IHNjcmlwdC4gKERvbWluaXF1ZSwgMjAxNyBBcHIgMzApCiAKQEAgLTE0NCwxNSArMTQ1LDkgQEAKIAogVXNlIGd2aW1leHQuZGxsIGZyb20gdGhlIG5pZ2h0bHkgYnVpbGQ/IChJc3N1ZSAjMjQ5KQogCi1QYXRjaCB0byByZW1vdmUgSEFWRV9HVEtfTVVMVElIRUFELXJlbGV2YW50IGNvZGUuIChLYXp1bm9idSBLdXJpeWFtYSwgMjAxNyBNYXkKLTUpIFVwZGF0ZSBNYXkgMTEKLQogJ3N5bm1heGNvbCcgd29ya3Mgd2l0aCBieXRlcyBpbnN0ZWFkIG9mIHNjcmVlbiBjZWxscy4gKExsYW5kb24sIDIwMTcgTWF5IDMxLAogIzE3MzYpCiAKLVBhdGNoIHRvIHBhc3MgcXVpY2tmaXggbGlzdCBpbmRleCB0byBmdW5jdGlvbnMuIChZZWdhcHBhbiBMYWtzaG1hbmFuLCAyMDE3IE1heQotMzEpCi0KIFByb2JsZW0gd2l0aCB1c2luZyA6Y2Qgd2hlbiByZW1vdGVseSBlZGl0aW5nIGEgZmlsZS4gKEdlcmQgV2FjaHNtdXRoLCAyMDE3IE1heQogOCwgIzE2OTApCiAKQEAgLTE2OCwxNiArMTYzLDYgQEAKIEJvZ3VzIGNoYXJhY3RlcnMgaW5zZXJ0ZWQgd2hlbiB0cmlnZ2VyaW5nIGluZGVudCB3aGlsZSBjaGFuZ2luZyB0ZXh0LgogKFZpdG9yIEFudHVuZXMsIDIwMTYgTm92IDIyLCAjMTI2OSkKIAotUGF0Y2ggdG8gaGF2ZSAiOnN0YWciIHJlc3BlY3QgJ3N3aXRjaGJ1ZicuIChJbmdvIEthcmthdCwgMjAxNyBNYXkgNSwgIzE2ODEpCi0KLVBhdGNoIHRvIGltcHJvdmUgYnVpbGRpbmcgd2l0aCBNU1ZDLiAoTGVvbmFyZG8gTWFuZXJhLCAjMTc0NykKLQotV3Jvbmcgc2VsZWN0aW9uIG9mIHF1b3RlZCB0ZXh0IChHdXJhZ2EsICMxNjg3KQotUGF0Y2ggdG8gZml4IHNlbGVjdGlvbiBvZiBxdW90ZWQgdGV4dC4gKENocmlzdGlhbiBCcmFiYW5kdCwgMjAxNyBNYXkgNywgIzE2ODcpCi0KLVBhdGNoIHRvIHVzZSBzZXBhcmF0ZSBlcnJvciBtZXNzYWdlIGZvciByZWdleCByYW5nZS4gKEl0Y2h5bnksIEtlbiBIYW1hZGEsCi0yMDE3IE1heSAxNikKLQogU2VnbWVudGF0aW9uIGZhdWx0IHdpdGggY29tcGxldGUoKS4gKExpZmVwaWxsYXIsIDIwMTcgQXByIDI5LCAjMTY2OCkKIENoZWNrIGZvciAicGF0IiB0byBiZSBOVUxMIGluIHNlYXJjaF9mb3JfZXhhY3RfbGluZSgpPwogSG93IGRpZCBpdCBnZXQgTlVMTD8gIENvbW1lbnQgYnkgQ2hyaXN0aWFuLCBBcHIgMzAuCkBAIC0xODUsMTggKzE3MCw4IEBACiBJcyBpdCBwb3NzaWJsZSB0byBrZWVwIHRoZSBjb21wbGV0ZSBtZW51IG9wZW4gd2hlbiBjYWxsaW5nIGNvbXBsZXRlKCk/CiAoUHJhYmlyIFNocmVzdGhhLCAyMDE3IE1heSAxOSwgIzE3MTMpCiAKLUNhbGxpbmcgbWF5X3JlcV9hbWJpZ3VvdXNfY2hhcl93aWR0aCgpIGFuZCBtYXlfcmVxX2JnX2NvbG9yKCkgb25seSBhZnRlcgotZXhlY3V0aW5nIGNvbW1hbmQgbGluZSBjb21tYW5kcyBtYXkgbm90IHdvcmsgcHJvcGVybHkuCi0oUmFzdGlzbGF2IEJhcmxpbmssIDIwMTcgTWF5IDE4KQotU2V0ICJzdGFydGluZyIgdG8gMCBlYXJsaWVyLCBhbmQgbW92ZSB0aGUgbWF5X3JlcSBjYWxscyBhYm92ZSBleGVfY29tbWFuZHMoKT8KLU5vLCB0aGF0J3MgYSBwcm9ibGVtIHdpdGggdXNpbmcgIi1jIHF1aXQiLCBub3QgcnVubmluZyBWaW0gaW50ZXJhY3RpdmUuCi0KIE1lbW9yeSBsZWFrIGluIHRlc3Q5Nz8gIFRoZSBzdHJpbmcgaXMgYWN0dWFsbHkgZnJlZWQuICBXZWlyZC4KIAotUGF0Y2ggZm9yIHNoZWxsZXNjYXBlKCkuIChDaHJpc3RpYW4gQnJhYmFuZHQsIDIwMTcgQXByIDIwLCAjMTU5MCkKLQotUGF0Y2ggZm9yIGZsaWNrZXJpbmcgcmVkcmF3LiAoSGlyb2hpdG8gSGlnYXNoaSwgMjAxNyBBcHIgMjMsICMxNjM3KQotCiBOZXcgdmFsdWUgInVzZWxhc3QiIGZvciAnc3dpdGNoYnVmJy4gKExlbW9uYm95LCAyMDE3IEFwciAyMywgIzE2NTIpCiAKIEFkZCBhIHRvb2xiYXIgaW4gdGhlIHRlcm1pbmFsLiAgQ2FuIGJlIGdsb2JhbCwgYWJvdmUgYWxsIHdpbmRvd3MsIG9yIHNwZWNpZmljCkBAIC0yMTIsMTggKzE4Nyw2IEBACiBtYXBwaW5ncyAod2l0aCBhIGxocyBwcmVmaXgsIGxpa2UgbWFwYXJnKCkpLCBtYXBkZWxldGUoKSB0byBkZWxldGUsCiBtYXByZXN0b3JlKCkgdG8gcmVzdG9yZSAodXNpbmcgdGhlIG91dHB1dCBvZiBtYXBsaXN0KCkuCiAKLVBhdGNoIHRvIHN1cHBvcnQgY2hpbmVzZSB3b3JkY291bnQgaW4gdXRmLTguIChSYWluLCAyMDE3IE1heSAyNCwgIzE3MjIpCi1PciBub3Q/Ci0KLSJnbiIgc2VsZWN0cyBvbmUgY2hhcmFjdGVyIGluc3RlYWQgb2YgdGhlIHNlYXJjaGVkIHRleHQuIChrZXlib2FyZGZpcmUsICMxNjgzKQotUGF0Y2ggYnkgQ2hyaXN0aWFuLCAyMDE3IE1heSA3LgotCi1Xcm9uZyBtZW1vcnkgYWNjZXNzIHVzaW5nIHBfZmRtLCBmb3VuZCBpbiBwYXRjaCB0byBhZGQgdGVzdHMgZm9yIGRpZmYgbW9kZQotKCMxNjU4KSAoRG9taW5pcXVlIFBlbGxlLCAyMDE3IE1heSA2KQotCi1QYXRjaCB0byBpbXByb3ZlIHRlc3QgY292ZXJhZ2UgZm9yIGRpZmYgbW9kZS4gKERvbWluaXF1ZSBQZWxsZSwgMjAxNyBNYXkgMTEsCi0jMTY4NSkKLQogQWRkIGFuIGFyZ3VtZW50IHRvIDpta3ZpbXJjIChvciBhZGQgYW90aGVyIGNvbW1hbmQpIHRvIHNraXAgbWFwcGluZ3MgZnJvbQogcGx1Z2lucyAoc291cmNlIGlzIGEgVmltIHNjcmlwdCkuICBObyBuZWVkIHRvIHB1dCB0aGVzZSBpbiBhIC52aW1yYywgdGhleSB3aWxsCiBiZSBkZWZpbmVkIHdoZW4gdGhlIHBsdWdpbiBpcyBsb2FkZWQuCkBAIC0yNDksNiArMjEyLDcgQEAKIEFub3RoZXIgZXhhbXBsZSBpbiAjMTMwOQogCiBQYXRjaCB0byBjaGFuZ2UgYWxsIHVzZSBvZiAmc3cgdG8gc2hpZnR3aWR0aCgpLiAoVHlydSwgMjAxNyBGZWIgMTkpCitUYWt1eWEgRnVqaXdhcmEKIFdhaXQgdW50aWwgbWFpbnRhaW5lcnMgaW50ZWdyYXRlIGl0LgogCiBXaGVuIGRlbGV0aW5nIGEgbWFyayBvciByZWdpc3RlciwgbGVhdmUgYSB0b21ic3RvbmUsIHNvIHRoYXQgaXQncyBhbHNvIGRlbGV0ZWQKQEAgLTM1OCw2ICszMjIsOCBAQAogKE96YWtpIEtpaWNoaSwgMjAxNiBOb3YgMjUpCiBEb2VzIHRoaXMgYWxzbyBmaXggIzE0MDggPwogCitQYXRjaCB0byBhZGQgIm1vZHVsZSIgdG8gcXVpY2tmaXggZW50cmllcy4gKENvb3QsIDIwMTcgSnVuIDgsICMxNzU3KQorCiBQYXRjaCBmb3IgJ2N1cnNvcmxpbmVucicgb3B0aW9uLiAoT3pha2kgS2lpY2hpLCAyMDE2IE5vdiAzMCkKIAogV2hlbiAnY29tcGxldGVvcHQnIGhhcyAibm9zZWxlY3QiIGRvZXMgbm90IGluc2VydCBhIG5ld2xpbmUuIChMaWZlcGlsbGFyLCAyMDE3CkBAIC01MDAsOSArNDY2LDYgQEAKIAogUG9zc2libHkgd3JvbmcgdmFsdWUgZm9yIHNlcV9jdXIuIChGbG9yZW50IEZheW9sbGUsIDIwMTYgTWF5IDE1LCAjODA2KQogCi1QYXRjaCB0byBhZGQgc2VwYXJhdGUgaGlnaGxpZ2h0aW5nIGZvciBxdWlja2ZpeCBjdXJyZW50IGxpbmUuCi0oYW5pc2hzYW5lLCAyMDE2IFNlcCAxNiwgIzEwODApCi0KIEZpbGV0eXBlIHBsdWdpbiBmb3IgYXdrLiAoRG91ZyBLZWFybnMsIDIwMTYgU2VwIDUpCiAKIFBhdGNoIHRvIGltcHJvdmUgbWFwIGRvY3VtZW50YXRpb24uIElzc3VlICM3OTkuCkBAIC01MzksNiArNTAyLDkgQEAKIFBhdGNoIHRvIGFkZCB0aGUgOmJ2aW1ncmVwIGNvbW1hbmQuICAoQ2hyaXN0aWFuIEJyYWJhbmR0LCAyMDE0IE5vdiAxMikKIFVwZGF0ZWQgMjAxNiBKdW4gMTAsICM4NTggIFVwZGF0ZSAyMDE3IE1hciAyODogdXNlIDxidWZmZXI+CiAKK1BhdGNoIHRvIGZpeCB0aGF0IGFuIGVuY29kaW5nIGNvbnZlcnNpb24gZmFpbHVyZSByZXN1bHRzIGluIGEgY29ycnVwdGVkIG9yCitlbXB0eSBmaWxlLiAoQ2hyaXN0aWFuIEJyYWJhbmR0LCAjMTc2NSwgaHR0cHM6Ly9naXRodWIuY29tL2NocmlzYnJhL3ZpbS1tcS1wYXRjaGVzL2Jsb2IvbWFzdGVyL2NvbnZlcnNpb25fZXJyb3IpCisKIEFkZCByZWRyYXd0YWJsaW5lIGNvbW1hbmQuIChOYXJ1aGlrbyBOaXNoaW5vLCAyMDE2IEp1biAxMSkKIAogTmVvdmltIHBhdGNoIGZvciB1dGZjX3B0cjJjaGFyX2xlbigpIGh0dHBzOi8vZ2l0aHViLmNvbS9uZW92aW0vbmVvdmltL3B1bGwvNDU3NApAQCAtMTAzMiw4ICs5OTgsNiBAQAogUGF0Y2ggdG8gYWRkICJudGFiIiBpdGVtIGluICdsaXN0Y2hhcnMnIHRvIHJlcGVhdCBmaXJzdCBjaGFyYWN0ZXIuIChOYXRoYW5pZWwKIEJyYXVuLCBwcmFnbSwgMjAxMyBPY3QgMTMpICBBIGJldHRlciBzb2x1dGlvbiAyMDE0IE1hciA1LgogCi0vW2ItYV0gZ2l2ZXMgZXJyb3IgRTE2LCBzaG91bGQgcHJvYmFibHkgYmUgRTc2OS4KLQogNyAgIFdpbmRvd3MgWFA6IFdoZW4gdXNpbmcgIkNsZWFyVHlwZSIgZm9yIHRleHQgc21vb3RoaW5nLCBhIGNvbHVtbiBvZiB5ZWxsb3cKICAgICBwaXhlbHMgcmVtYWlucyB3aGVuIHR5cGluZyBzcGFjZXMgaW4gZnJvbnQgb2YgYSAiRCIgKCdndWlmb250JyBzZXQgdG8KICAgICAibHVjaWRhX2NvbnNvbGU6aDgiKS4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZmlsZXR5cGUudmltIGIvcnVudGltZS9maWxldHlwZS52aW0KaW5kZXggOTg3ODIzNi4uNjM1ZTFjMyAxMDA2NDQKLS0tIGEvcnVudGltZS9maWxldHlwZS52aW0KKysrIGIvcnVudGltZS9maWxldHlwZS52aW0KQEAgLTEsNyArMSw3IEBACiAiIFZpbSBzdXBwb3J0IGZpbGUgdG8gZGV0ZWN0IGZpbGUgdHlwZXMKICIKICIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KLSIgTGFzdCBDaGFuZ2U6CTIwMTcgSnVuIDA0CisiIExhc3QgQ2hhbmdlOgkyMDE3IEp1biAxMgogCiAiIExpc3RlbiB2ZXJ5IGNhcmVmdWxseSwgSSB3aWxsIHNheSB0aGlzIG9ubHkgb25jZQogaWYgZXhpc3RzKCJkaWRfbG9hZF9maWxldHlwZXMiKQpAQCAtMjI1Myw2ICsyMjUzLDggQEAKICAgICBsZXQgZm9ybWF0ID0gdG9sb3dlcihtYXRjaHN0cihmaXJzdGxpbmUsICdcYVwrJykpCiAgICAgbGV0IGZvcm1hdCA9IHN1YnN0aXR1dGUoZm9ybWF0LCAncGRmJywgJycsICcnKQogICAgIGlmIGZvcm1hdCA9PSAndGV4JworICAgICAgbGV0IGZvcm1hdCA9ICdsYXRleCcKKyAgICBlbHNlaWYgZm9ybWF0ID09ICdwbGFpbnRleCcKICAgICAgIGxldCBmb3JtYXQgPSAncGxhaW4nCiAgICAgZW5kaWYKICAgZWxzZQpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvYWRhLnZpbSBiL3J1bnRpbWUvaW5kZW50L2FkYS52aW0KaW5kZXggNTAxOWYwYi4uMWNhN2ZiYSAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvYWRhLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9hZGEudmltCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICBlbmR3aGlsZQogICAgZW5kd2hpbGUKICAgICIgRmFsbGJhY2sgLSBqdXN0IG1vdmUgYmFjayBvbmUKLSAgIHJldHVybiBhOnByZXZfaW5kZW50IC0gJnN3CisgICByZXR1cm4gYTpwcmV2X2luZGVudCAtIHNoaWZ0d2lkdGgoKQogZW5kZnVuY3Rpb24gTWFpbkJsb2NrSW5kZW50CiAKICIgU2VjdGlvbjogczpFbmRCbG9ja0luZGVudCB7e3sxCkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgIGVuZHdoaWxlCiAgICBlbmR3aGlsZQogICAgIiBGYWxsYmFjayAtIGp1c3QgbW92ZSBiYWNrIG9uZQotICAgcmV0dXJuIGE6cHJldl9pbmRlbnQgLSAmc3cKKyAgIHJldHVybiBhOnByZXZfaW5kZW50IC0gc2hpZnR3aWR0aCgpCiBlbmRmdW5jdGlvbiBFbmRCbG9ja0luZGVudAogCiAiIFNlY3Rpb246IHM6U3RhdGVtZW50SW5kZW50IHt7ezEKQEAgLTIxMywxNSArMjEzLDE1IEBACiAgICAgICBlbmRpZgogICAgICAgIiBNb3ZlIGluZGVudCBpbgogICAgICAgaWYgISBmYWxzZV9tYXRjaAotCSBsZXQgaW5kID0gaW5kICsgJnN3CisJIGxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKICAgICAgIGVuZGlmCiAgICBlbHNlaWYgbGluZSA9fiAnXlxzKlwoY2FzZVx8ZXhjZXB0aW9uXClcPicKICAgICAgICIgTW92ZSBpbmRlbnQgaW4gdHdpY2UgKG5leHQgJ3doZW4nIHdpbGwgbW92ZSBiYWNrKQotICAgICAgbGV0IGluZCA9IGluZCArIDIgKiAmc3cKKyAgICAgIGxldCBpbmQgPSBpbmQgKyAyICogc2hpZnR3aWR0aCgpCiAgICBlbHNlaWYgbGluZSA9fiAnXlxzKmVuZFxzKnJlY29yZFw+JwogICAgICAgIiBNb3ZlIGluZGVudCBiYWNrIHRvIHRhbGx5aW5nICd0eXBlJyBwcmVjZWVkaW5nIHRoZSAncmVjb3JkJy4KICAgICAgICIgQWxsb3cgaW5kZW50IHRvIGJlIGVxdWFsIHRvICdlbmQgcmVjb3JkJ3MuCi0gICAgICBsZXQgaW5kID0gczpNYWluQmxvY2tJbmRlbnQoIGluZCsmc3csIGxudW0sICd0eXBlXD4nLCAnJyApCisgICAgICBsZXQgaW5kID0gczpNYWluQmxvY2tJbmRlbnQoIGluZCtzaGlmdHdpZHRoKCksIGxudW0sICd0eXBlXD4nLCAnJyApCiAgICBlbHNlaWYgbGluZSA9fiAnXCheXHMqbmV3XD4uKlwpXEA8ISlccypbOyxdXHMqJCcKICAgICAgICIgUmV2ZXJ0IHRvIGluZGVudCBvZiBsaW5lIHRoYXQgc3RhcnRlZCB0aGlzIHBhcmVudGhlc2lzIHBhaXIKICAgICAgIGV4ZSBsbnVtCkBAIC0yMzUsMTAgKzIzNSwxMCBAQAogICAgICAgZXhlIHY6bG51bQogICAgZWxzZWlmIGxpbmUgPX4gJ1suPShdXHMqJCcKICAgICAgICIgQSBzdGF0ZW1lbnQgY29udGludWF0aW9uIC0gbW92ZSBpbiBvbmUKLSAgICAgIGxldCBpbmQgPSBpbmQgKyAmc3cKKyAgICAgIGxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKICAgIGVsc2VpZiBsaW5lID1+ICdeXHMqbmV3XD4nCiAgICAgICAiIE11bHRpcGxlIGxpbmUgZ2VuZXJpYyBpbnN0YW50aWF0aW9uICgncGFja2FnZSBibGFoIGlzXG5uZXcgdGhpbmd5JykKLSAgICAgIGxldCBpbmQgPSBzOlN0YXRlbWVudEluZGVudCggaW5kIC0gJnN3LCBsbnVtICkKKyAgICAgIGxldCBpbmQgPSBzOlN0YXRlbWVudEluZGVudCggaW5kIC0gc2hpZnR3aWR0aCgpLCBsbnVtICkKICAgIGVsc2VpZiBsaW5lID1+ICc7XHMqJCcKICAgICAgICIgU3RhdGVtZW50IGVuZCAoYnV0IG5vdCAnZW5kJyApIC0gdHJ5IHRvIGZpbmQgY3VycmVudCBzdGF0ZW1lbnQtc3RhcnQgaW5kZW50CiAgICAgICBsZXQgaW5kID0gczpTdGF0ZW1lbnRJbmRlbnQoIGluZCwgbG51bSApCkBAIC0yNTYsMTcgKzI1NiwxNyBAQAogICAgZWxzZWlmIGNvbnRpbnVhdGlvbiAmJiBsaW5lID1+ICdeXHMqKCcKICAgICAgICIgRG9uJ3QgZG8gdGhpcyBpZiB3ZSd2ZSBhbHJlYWR5IGluZGVudGVkIGR1ZSB0byB0aGUgcHJldmlvdXMgbGluZQogICAgICAgaWYgaW5kID09IGluaXRpbmQKLQkgbGV0IGluZCA9IGluZCArICZzdworCSBsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgICAgICBlbmRpZgogICAgZWxzZWlmIGxpbmUgPX4gJ15ccypcKGJlZ2luXHxpc1wpXD4nCiAgICAgICBsZXQgaW5kID0gczpNYWluQmxvY2tJbmRlbnQoIGluZCwgbG51bSwgJ1wocHJvY2VkdXJlXHxmdW5jdGlvblx8ZGVjbGFyZVx8cGFja2FnZVx8dGFza1wpXD4nLCAnYmVnaW5cPicgKQogICAgZWxzZWlmIGxpbmUgPX4gJ15ccypyZWNvcmRcPicKLSAgICAgIGxldCBpbmQgPSBzOk1haW5CbG9ja0luZGVudCggaW5kLCBsbnVtLCAndHlwZVw+XHxmb3JcPi4qXDx1c2VcPicsICcnICkgKyAmc3cKKyAgICAgIGxldCBpbmQgPSBzOk1haW5CbG9ja0luZGVudCggaW5kLCBsbnVtLCAndHlwZVw+XHxmb3JcPi4qXDx1c2VcPicsICcnICkgKyBzaGlmdHdpZHRoKCkKICAgIGVsc2VpZiBsaW5lID1+ICdeXHMqXChlbHNlXHxlbHNpZlwpXD4nCiAgICAgICBsZXQgaW5kID0gczpNYWluQmxvY2tJbmRlbnQoIGluZCwgbG51bSwgJ2lmXD4nLCAnJyApCiAgICBlbHNlaWYgbGluZSA9fiAnXlxzKndoZW5cPicKICAgICAgICIgQWxpZ24gJ3doZW4nIG9uZSAvaW4vIGZyb20gbWF0Y2hpbmcgYmxvY2sgc3RhcnQKLSAgICAgIGxldCBpbmQgPSBzOk1haW5CbG9ja0luZGVudCggaW5kLCBsbnVtLCAnXChjYXNlXHxleGNlcHRpb25cKVw+JywgJycgKSArICZzdworICAgICAgbGV0IGluZCA9IHM6TWFpbkJsb2NrSW5kZW50KCBpbmQsIGxudW0sICdcKGNhc2VcfGV4Y2VwdGlvblwpXD4nLCAnJyApICsgc2hpZnR3aWR0aCgpCiAgICBlbHNlaWYgbGluZSA9fiAnXlxzKmVuZFw+XHMqXDxpZlw+JwogICAgICAgIiBFbmQgb2YgaWYgc3RhdGVtZW50cwogICAgICAgbGV0IGluZCA9IHM6RW5kQmxvY2tJbmRlbnQoIGluZCwgbG51bSwgJ2lmXD4nLCAnZW5kXD5ccypcPGlmXD4nICkKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2F3ay52aW0gYi9ydW50aW1lL2luZGVudC9hd2sudmltCmluZGV4IDZmNmI3MGMuLmFhZDczZWUgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L2F3ay52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvYXdrLnZpbQpAQCAtNjAsNyArNjAsNyBAQAogICAgIiAncGF0dGVybiB7IGFjdGlvbiB9JyAoc2ltcGxlIGNoZWNrIG1hdGNoIG9uIC97LyBpbmNyZWFzZXMgdGhlIGluZGVudCB0aGVuKQogCiAgICBpZiBzOkdldF9icmFjZV9iYWxhbmNlKCBwcmV2X2RhdGEsICd7JywgJ30nICkgPiAwCi0gICAgICByZXR1cm4gaW5kICsgJnN3CisgICAgICByZXR1cm4gaW5kICsgc2hpZnR3aWR0aCgpCiAgICBlbmRpZgogCiAgICBsZXQgYnJhY2VfYmFsYW5jZSA9IHM6R2V0X2JyYWNlX2JhbGFuY2UoIHByZXZfZGF0YSwgJygnLCAnKScgKQpAQCAtOTksNyArOTksNyBAQAogCSAgcmV0dXJuIHM6U2FmZV9pbmRlbnQoIGluZCwgczpGaXJzdF93b3JkX2xlbihwcmV2X2RhdGEpLCBnZXRsaW5lKHY6bG51bSkpCiAgICAgICAgZWxzZQogCSAiIGlmL2Zvci93aGlsZSB3aXRob3V0ICd7JwotCSByZXR1cm4gaW5kICsgJnN3CisJIHJldHVybiBpbmQgKyBzaGlmdHdpZHRoKCkKICAgICAgICBlbmRpZgogICAgICBlbmRpZgogICAgZW5kaWYKQEAgLTE0MCw3ICsxNDAsNyBAQAogCiAgICAiIERlY3JlYXNlIGluZGVudCBpZiB0aGlzIGxpbmUgY29udGFpbnMgYSAnfScuCiAgICBpZiBnZXRsaW5lKHY6bG51bSkgPX4gJ15ccyp9JwotICAgICAgbGV0IGluZCA9IGluZCAtICZzdworICAgICAgbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogICAgZW5kaWYKIAogICAgcmV0dXJuIGluZApkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvYnN0LnZpbSBiL3J1bnRpbWUvaW5kZW50L2JzdC52aW0KaW5kZXggYmUxZjYzZS4uNDdlMzA1OCAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvYnN0LnZpbQorKysgYi9ydW50aW1lL2luZGVudC9ic3QudmltCkBAIC02OSw3ICs2OSw3IEBACiAgICAgZW5kaWYKICAgICBsZXQgZmFrZWxpbmUgPSBzdWJzdGl0dXRlKGxpbmUsJ159JywnJywnJykubWF0Y2hzdHIoY2xpbmUsJ159JykKICAgICBsZXQgaW5kID0gaW5kZW50KGxudW0pCi0gICAgbGV0IGluZCA9IGluZCArICZzdyAqIHM6Y291bnQobGluZSwneycpCi0gICAgbGV0IGluZCA9IGluZCAtICZzdyAqIHM6Y291bnQoZmFrZWxpbmUsJ30nKQorICAgIGxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkgKiBzOmNvdW50KGxpbmUsJ3snKQorICAgIGxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkgKiBzOmNvdW50KGZha2VsaW5lLCd9JykKICAgICByZXR1cm4gaW5kCiBlbmRmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvYnpsLnZpbSBiL3J1bnRpbWUvaW5kZW50L2J6bC52aW0KaW5kZXggMjRlNWI4Ny4uNjkwNGJmZCAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvYnpsLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9iemwudmltCkBAIC0xLDcgKzEsNyBAQAogIiBWaW0gaW5kZW50IGZpbGUKICIgTGFuZ3VhZ2U6CUJhemVsIChodHRwOi8vYmF6ZWwuaW8pCiAiIE1haW50YWluZXI6CURhdmlkIEJhcm5ldHQgKGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvdmltLWZ0LWJ6bCkKLSIgTGFzdCBDaGFuZ2U6CTIwMTUgQXVnIDExCisiIExhc3QgQ2hhbmdlOgkyMDE3IEp1biAxMwogCiBpZiBleGlzdHMoJ2I6ZGlkX2luZGVudCcpCiAgIGZpbmlzaApAQCAtNDEsMTEgKzQxLDggQEAKICAgICBpZiBleGlzdHMoJ2c6cHlpbmRlbnRfb3Blbl9wYXJlbicpCiAgICAgICBsZXQgbDpweWluZGVudF9vcGVuX3BhcmVuID0gZzpweWluZGVudF9vcGVuX3BhcmVuCiAgICAgZW5kaWYKLSAgICAiIFZpbSA3LjMuNjkzIGFuZCBsYXRlciBkZWZpbmVzIGEgc2hpZnR3aWR0aCgpIGZ1bmN0aW9uIHRvIGdldCB0aGUgZWZmZWN0aXZlCi0gICAgIiBzaGlmdHdpZHRoIHZhbHVlLiBGYWxsIGJhY2sgdG8gJnNoaWZ0d2lkdGggaWYgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3QuCi0gICAgbGV0IGw6c3dfZXhwciA9IGV4aXN0cygnKnNoaWZ0d2lkdGgnKSA/ICdzaGlmdHdpZHRoKCknIDogJyZzaGlmdHdpZHRoJwotICAgIGxldCBnOnB5aW5kZW50X25lc3RlZF9wYXJlbiA9IGw6c3dfZXhwciAuICcgKiAyJwotICAgIGxldCBnOnB5aW5kZW50X29wZW5fcGFyZW4gPSBsOnN3X2V4cHIgLiAnICogMicKKyAgICBsZXQgZzpweWluZGVudF9uZXN0ZWRfcGFyZW4gPSAnc2hpZnR3aWR0aCgpICogMicKKyAgICBsZXQgZzpweWluZGVudF9vcGVuX3BhcmVuID0gJ3NoaWZ0d2lkdGgoKSAqIDInCiAgIGVuZGlmCiAKICAgbGV0IGw6aW5kZW50ID0gLTEKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2NkbC52aW0gYi9ydW50aW1lL2luZGVudC9jZGwudmltCmluZGV4IDVlYzJhN2IuLjVmYWU3YjkgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L2NkbC52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvY2RsLnZpbQpAQCAtNDcsNyArNDcsNyBAQAogICBsZXQgdGhpc2xpbmUgPSBnZXRsaW5lKGE6bG51bSkKICAgaWYgbWF0Y2godGhpc2xpbmUsICdeXHMqXChca1wrXHxcW1teXV0qXVwpXHMqXCgsXHw7XHMqJFwpJykgPj0gMAogICAgICIgaXQncyBhbiBhdHRyaWJ1dGVzIGxpbmUKLSAgICByZXR1cm4gJnN3CisgICAgcmV0dXJuIHNoaWZ0d2lkdGgoKQogICBlbHNlaWYgbWF0Y2godGhpc2xpbmUsICdeXGNccypcKFt7fV1cfFwvWyovXVx8ZGltZW5zaW9uXHxzY2hlZHVsZVx8Z3JvdXBcfGhpZXJhcmNoeVx8Y2xhc3NcKScpID49IDAKICAgICAiIGl0J3MgYSBoZWFkZXIgb3IgJ3snIG9yICd9JyBvciBhIGNvbW1lbnQKICAgICByZXR1cm4gMApAQCAtNzEsMTMgKzcxLDEzIEBACiAgICAgbGV0IGMgPSBsaW5lW2luaWNpby0xXQogICAgICIgJyknIGFuZCAnPScgZG9uJ3QgY2hhbmdlIGluZGVudCBhbmQgYXJlIHVzZWxlc3MgdG8gc2V0ICdmJwogICAgIGlmIGMgPT0gJ3snCi0gICAgICByZXR1cm4gJnN3CisgICAgICByZXR1cm4gc2hpZnR3aWR0aCgpCiAgICAgZWxzZWlmIGMgIT0gJyknICYmIGMgIT0gJz0nCiAgICAgICBsZXQgZiA9IDEgIiBhbGwgYnV0ICdlbHNlaWYnIGFyZSBmb2xsb3dlZCBieSBhIGZvcm11bGEKICAgICAgIGlmIGMgPT0/ICduJyB8fCBjID09PyAnZScgIiAndGhlbicsICdlbHNlJwotCWxldCBpbmQgPSBpbmQgKyAmc3cKKwlsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgICAgICBlbHNlaWYgc3RycGFydChsaW5lLCBpbmljaW8tNiwgNikgPT0/ICdlbHNlaWYnICIgZWxzZWlmLCBzZXQgZiB0byBjb25kaXRpb25hbAotCWxldCBpbmQgPSBpbmQgKyAmc3cKKwlsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAJbGV0IGYgPSAwCiAgICAgICBlbmQKICAgICBlbmQKQEAgLTk4LDE2ICs5OCwxNiBAQAogICAgICAgbGV0IGluZCA9IDAKICAgICAgIGxldCBmID0gMQogICAgIGVsc2VpZiBjID09ICcpJyB8fCBjPT0gJzsnIHx8IHN0cnBhcnQobGluZSwgaW5pY2lvLTUsIDUpID09PyAnZW5kaWYnCi0gICAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgICAgICBsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAgICAgZWxzZWlmIGMgPT0gJygnIHx8IGMgPT0/ICdmJyAiICcoJyBvciAnaWYnCi0gICAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgICAgICBsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgICAgZWxzZSAiIGMgPT0gJz0nCiAgICAgICAiIGlmIGl0IGlzIGFuIGFzaWdubWVudCBpbmNyZWFzZSBpbmRlbnQKICAgICAgIGlmIGYgPT0gLTEgIiB3ZSBkb24ndCBrbm93IHlldCwgZmluZCBvdXQKIAlsZXQgZiA9IENkbEFzaWdubWVudChsbnVtLCBzdHJwYXJ0KGxpbmUsIDAsIGluaWNpbykpCiAgICAgICBlbmQKICAgICAgIGlmIGYgPT0gMSAiIGZvcm11bGEgaW5jcmVhc2UgaXQKLQlsZXQgaW5kID0gaW5kICsgJnN3CisJbGV0IGluZCA9IGluZCArIHNoaWZ0d2lkdGgoKQogICAgICAgZW5kCiAgICAgZW5kCiAgIGVuZHcKQEAgLTExNSwxMyArMTE1LDEzIEBACiAgICIgQ1VSUkVOVCBMSU5FLCBpZiBpdCBzdGFydHMgd2l0aCBhIGNsb3NpbmcgZWxlbWVudCwgZGVjcmVhc2UgaW5kZW50CiAgICIgb3IgaWYgaXQgc3RhcnRzIHdpdGggJz0nIChhc2lnbm1lbnQpLCBpbmNyZWFzZSBpbmRlbnQKICAgaWYgbWF0Y2godGhpc2xpbmUsICdeXGNccypcKGVsc2VcfHRoZW5cfGVuZGlmXHxbKTtdXCknKSA+PSAwCi0gICAgbGV0IGluZCA9IGluZCAtICZzdworICAgIGxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkKICAgZWxzZWlmIG1hdGNoKHRoaXNsaW5lLCAnXlxzKj0nKSA+PSAwCiAgICAgaWYgZiA9PSAtMSAiIHdlIGRvbid0IGtub3cgeWV0IGlmIGlzIGFuIGFzaWdubWVudCwgZmluZCBvdXQKICAgICAgIGxldCBmID0gQ2RsQXNpZ25tZW50KGxudW0sICIiKQogICAgIGVuZAogICAgIGlmIGYgPT0gMSAiIGZvcm11bGEgaW5jcmVhc2UgaXQKLSAgICAgIGxldCBpbmQgPSBpbmQgKyAmc3cKKyAgICAgIGxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKICAgICBlbmQKICAgZW5kCiAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2NoYWlzY3JpcHQudmltIGIvcnVudGltZS9pbmRlbnQvY2hhaXNjcmlwdC52aW0KaW5kZXggMjQ3ZTFhNi4uNDQ1MjgxYyAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvY2hhaXNjcmlwdC52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvY2hhaXNjcmlwdC52aW0KQEAgLTMxLDE5ICszMSwxOSBAQAogICBsZXQgZmxhZyA9IDAKICAgbGV0IHByZXZsaW5lID0gZ2V0bGluZShsbnVtKQogICBpZiBwcmV2bGluZSA9fiAnXi4qey4qJwotICAgIGxldCBpbmQgPSBpbmQgKyAmc2hpZnR3aWR0aAorICAgIGxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKICAgICBsZXQgZmxhZyA9IDEKICAgZW5kaWYKIAogICAiIFN1YnRyYWN0IGEgJ3NoaWZ0d2lkdGgnIGFmdGVyIGxpbmVzIGNvbnRhaW5pbmcgYSB7IGZvbGxvd2VkIGJ5IGEgfQogICAiIHRvIGtlZXAgaXQgYmFsYW5jZWQKICAgaWYgZmxhZyA9PSAxICYmIHByZXZsaW5lID1+ICcuKnsuKn0uKicKLSAgICBsZXQgaW5kID0gaW5kIC0gJnNoaWZ0d2lkdGgKKyAgICBsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAgIGVuZGlmCiAKICAgIiBTdWJ0cmFjdCBhICdzaGlmdHdpZHRoJyBvbiBsaW5lcyBlbmRpbmcgd2l0aCB9CiAgIGlmIGdldGxpbmUodjpsbnVtKSA9fiAnXlxzKlwlKH1cKScKLSAgICBsZXQgaW5kID0gaW5kIC0gJnNoaWZ0d2lkdGgKKyAgICBsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAgIGVuZGlmCiAKICAgcmV0dXJuIGluZApkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvY2xvanVyZS52aW0gYi9ydW50aW1lL2luZGVudC9jbG9qdXJlLnZpbQppbmRleCA3NTkyYjEwLi43YzQxODZlIDEwMDY0NAotLS0gYS9ydW50aW1lL2luZGVudC9jbG9qdXJlLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9jbG9qdXJlLnZpbQpAQCAtMjYxLDcgKzI2MSw3IEBACiAJCWNhbGwgY3Vyc29yKHBhcmVuKQogCiAJCWlmIHM6aXNfbWV0aG9kX3NwZWNpYWxfY2FzZShwYXJlbikKLQkJCXJldHVybiBbcGFyZW5bMF0sIHBhcmVuWzFdICsgJnNoaWZ0d2lkdGggLSAxXQorCQkJcmV0dXJuIFtwYXJlblswXSwgcGFyZW5bMV0gKyBzaGlmdHdpZHRoKCkgLSAxXQogCQllbmRpZgogCiAJCWlmIHM6aXNfcmVhZGVyX2NvbmRpdGlvbmFsX3NwZWNpYWxfY2FzZShwYXJlbikKQEAgLTI5OSwxOSArMjk5LDE5IEBACiAJCWxldCB3dyA9IHM6c3RyaXBfbmFtZXNwYWNlX2FuZF9tYWNyb19jaGFycyh3KQogCiAJCWlmICZsaXNwd29yZHMgPX4jICdcVlw8JyAuIHd3IC4gJ1w+JwotCQkJcmV0dXJuIFtwYXJlblswXSwgcGFyZW5bMV0gKyAmc2hpZnR3aWR0aCAtIDFdCisJCQlyZXR1cm4gW3BhcmVuWzBdLCBwYXJlblsxXSArIHNoaWZ0d2lkdGgoKSAtIDFdCiAJCWVuZGlmCiAKIAkJaWYgZzpjbG9qdXJlX2Z1enp5X2luZGVudAogCQkJXCAmJiAhczptYXRjaF9vbmUoZzpjbG9qdXJlX2Z1enp5X2luZGVudF9ibGFja2xpc3QsIHd3KQogCQkJXCAmJiBzOm1hdGNoX29uZShnOmNsb2p1cmVfZnV6enlfaW5kZW50X3BhdHRlcm5zLCB3dykKLQkJCXJldHVybiBbcGFyZW5bMF0sIHBhcmVuWzFdICsgJnNoaWZ0d2lkdGggLSAxXQorCQkJcmV0dXJuIFtwYXJlblswXSwgcGFyZW5bMV0gKyBzaGlmdHdpZHRoKCkgLSAxXQogCQllbmRpZgogCiAJCWNhbGwgc2VhcmNoKCdcdlxfcycsICdjVycpCiAJCWNhbGwgc2VhcmNoKCdcdlxTJywgJ1cnKQogCQlpZiBwYXJlblswXSA8IGxpbmUoIi4iKQotCQkJcmV0dXJuIFtwYXJlblswXSwgcGFyZW5bMV0gKyAoZzpjbG9qdXJlX2FsaWduX3N1YmZvcm1zID8gMCA6ICZzaGlmdHdpZHRoIC0gMSldCisJCQlyZXR1cm4gW3BhcmVuWzBdLCBwYXJlblsxXSArIChnOmNsb2p1cmVfYWxpZ25fc3ViZm9ybXMgPyAwIDogc2hpZnR3aWR0aCgpIC0gMSldCiAJCWVuZGlmCiAKIAkJY2FsbCBzZWFyY2goJ1x2XFMnLCAnYlcnKQpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvY21ha2UudmltIGIvcnVudGltZS9pbmRlbnQvY21ha2UudmltCmluZGV4IDQyMWFmY2IuLjkzYTEzMWIgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L2NtYWtlLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9jbWFrZS52aW0KQEAgLTY4LDE5ICs2OCwxOSBAQAogICAgIGxldCBpbmQgPSBpbmQKICAgZWxzZQogICAgIGlmIHByZXZpb3VzX2xpbmUgPX4/IGNtYWtlX2luZGVudF9iZWdpbl9yZWdleAotICAgICAgbGV0IGluZCA9IGluZCArICZzdworICAgICAgbGV0IGluZCA9IGluZCArIHNoaWZ0d2lkdGgoKQogICAgIGVuZGlmCiAgICAgaWYgcHJldmlvdXNfbGluZSA9fj8gY21ha2VfaW5kZW50X29wZW5fcmVnZXgKLSAgICAgIGxldCBpbmQgPSBpbmQgKyAmc3cKKyAgICAgIGxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKICAgICBlbmRpZgogICBlbmRpZgogCiAgICIgU3VidHJhY3QKICAgaWYgdGhpc19saW5lID1+PyBjbWFrZV9pbmRlbnRfZW5kX3JlZ2V4Ci0gICAgbGV0IGluZCA9IGluZCAtICZzdworICAgIGxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkKICAgZW5kaWYKICAgaWYgcHJldmlvdXNfbGluZSA9fj8gY21ha2VfaW5kZW50X2Nsb3NlX3JlZ2V4Ci0gICAgbGV0IGluZCA9IGluZCAtICZzdworICAgIGxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkKICAgZW5kaWYKIAogICByZXR1cm4gaW5kCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9jb2JvbC52aW0gYi9ydW50aW1lL2luZGVudC9jb2JvbC52aW0KaW5kZXggOGRjZTNjZC4uYzA4NDQ0YSAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvY29ib2wudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L2NvYm9sLnZpbQpAQCAtNTIsMTEgKzUyLDExIEBACiAgICAgICAgIGlmIGdldGxpbmUobGFzdGNsYXVzZSkgPX4/IGNsYXVzZXMgJiYgczpzdHJpcHBlZChsYXN0Y2xhdXNlKSAhfj8gJ14nLmJlZ2luCiAgICAgICAgICAgICBsZXQgaW5kID0gaW5kZW50KGxhc3RjbGF1c2UpCiAgICAgICAgIGVsc2VpZiBsYXN0Y2xhdXNlID4gMAotICAgICAgICAgICAgbGV0IGluZCA9IGluZGVudChsYXN0Y2xhdXNlKSArICZzdwotICAgICAgICAgICAgImxldCBpbmQgPSBpbmQgKyAmc3cKKyAgICAgICAgICAgIGxldCBpbmQgPSBpbmRlbnQobGFzdGNsYXVzZSkgKyBzaGlmdHdpZHRoKCkKKyAgICAgICAgICAgICJsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgICAgICAgIGVuZGlmCiAgICAgZWxzZWlmIGxpbmUgPX4/IGNsYXVzZXMgJiYgY2xpbmUgIX4/IGVuZAotICAgICAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgICAgICAgIGxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKICAgICBlbmRpZgogICAgIHJldHVybiBpbmQKIGVuZGZ1bmN0aW9uCkBAIC05OCw4ICs5OCw4IEBACiAgICAgICAgICAgICAgICAgbGV0IG51bSA9IG1hdGNoc3RyKGxpbmUsJ15ccypcenNcZFwrXD4nKQogICAgICAgICAgICAgICAgIGlmIDArY251bSA9PSBudW0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmRlbnQKLSAgICAgICAgICAgICAgICBlbHNlaWYgMCtjbnVtID4gbnVtICYmIGRlZmF1bHQgPCBsaW5kZW50ICsgJnN3Ci0gICAgICAgICAgICAgICAgICAgIGxldCBkZWZhdWx0ID0gbGluZGVudCArICZzdworICAgICAgICAgICAgICAgIGVsc2VpZiAwK2NudW0gPiBudW0gJiYgZGVmYXVsdCA8IGxpbmRlbnQgKyBzaGlmdHdpZHRoKCkKKyAgICAgICAgICAgICAgICAgICAgbGV0IGRlZmF1bHQgPSBsaW5kZW50ICsgc2hpZnR3aWR0aCgpCiAgICAgICAgICAgICAgICAgZW5kaWYKICAgICAgICAgICAgIGVsc2VpZiBsaW5kZW50IDwgYnNoZnQgJiYgbGluZGVudCA+PSBhc2hmdAogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC0xMzUsMTMgKzEzNSwxMyBAQAogICAgIGlmIGxpbmUgPX4/ICdeUEVSRk9STVw+JwogICAgICAgICBsZXQgcGVyZmxpbmUgPSBzdWJzdGl0dXRlKGxpbmUsICdcY15QRVJGT1JNXHMqJywgIiIsICIiKQogICAgICAgICBpZiBwZXJmbGluZSA9fj8gJ15cJShca1wrXHNcK1RJTUVTXClcPVxzKiQnCi0gICAgICAgICAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgICAgICAgICAgICBsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgICAgICAgIGVsc2VpZiBwZXJmbGluZSA9fj8gJ15cJShXSVRIXHNcK1RFU1RcfFZBUllJTkdcfFVOVElMXClcPi4qW14uXSQnCi0gICAgICAgICAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgICAgICAgICAgICBsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgICAgICAgIGVuZGlmCiAgICAgZW5kaWYKICAgICBpZiBsaW5lID1+PyAnXlwlKElGXHxUSEVOXHxFTFNFXHxSRUFEXHxFVkFMVUFURVx8U0VBUkNIXHxTRUxFQ1RcKVw+JwotICAgICAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgICAgICAgIGxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKICAgICBlbmRpZgogICAgIGxldCBpbmQgPSBzOm9wdGlvbmFsYmxvY2soYTpsbnVtLGluZCwnQUREXHxDT01QVVRFXHxESVZJREVcfE1VTFRJUExZXHxTVUJUUkFDVCcsJ09OXHNcK1NJWkVcc1wrRVJST1InKQogICAgIGxldCBpbmQgPSBzOm9wdGlvbmFsYmxvY2soYTpsbnVtLGluZCwnU1RSSU5HXHxVTlNUUklOR1x8QUNDRVBUXHxESVNQTEFZXHxDQUxMJywnT05cc1wrT1ZFUkZMT1dcfE9OXHNcK0VYQ0VQVElPTicpCkBAIC0xNTcsMTAgKzE1NywxMCBAQAogICAgICAgICAgICAgIiYmIHM6c3RyaXBwZWQobGFzdGNsYXVzZSkgIX4/ICdeXCUoU0VBUkNIXHxFVkFMVUFURVx8UkVBRFwpXD4nCiAgICAgICAgICAgICBsZXQgaW5kID0gaW5kZW50KGxhc3RjbGF1c2UpCiAgICAgICAgIGVsc2VpZiBsYXN0Y2xhdXNlID4gMAotICAgICAgICAgICAgbGV0IGluZCA9IGluZGVudChsYXN0Y2xhdXNlKSArICZzdworICAgICAgICAgICAgbGV0IGluZCA9IGluZGVudChsYXN0Y2xhdXNlKSArIHNoaWZ0d2lkdGgoKQogICAgICAgICBlbmRpZgogICAgIGVsc2VpZiBsaW5lID1+PyAnXldIRU5cPicKLSAgICAgICAgbGV0IGluZCA9IGluZCArICZzdworICAgICAgICBsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgICAgZW5kaWYKICAgICAiSSdtIG5vdCBzdXJlIHdoeSBJIGhhZCB0aGlzCiAgICAgImlmIGxpbmUgPX4/ICdeRUxTRVw+LVxAIScgJiYgbGluZSAhfj8gJ1wuJCcKQEAgLTE2OCw3ICsxNjgsNyBAQAogICAgICJlbmRpZgogICAgIGlmIGNsaW5lID1+PyAnXlwoRU5EXClcPi1cQCEnCiAgICAgICAgICIgT24gbGluZXMgd2l0aCBqdXN0IEVORCwgJ2d1ZXNzJyBhIHNpbXBsZSBzaGlmdCBsZWZ0Ci0gICAgICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgICAgICAgbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogICAgIGVsc2VpZiBjbGluZSA9fj8gJ15cKEVORC1JRlx8VEhFTlx8RUxTRVwpXD4tXEAhJwogICAgICAgICBjYWxsIGN1cnNvcihhOmxudW0saW5kZW50KGE6bG51bSkpCiAgICAgICAgIGxldCBtYXRjaCA9IHNlYXJjaHBhaXIoJ1xjLVxAPCFcPElGXD4nLCdcYy1cQDwhXCUoVEhFTlx8RUxTRVwpXD4nLCdcYy1cQDwhXDxFTkQtSUZcPlx6cycsJ2JuVycsczpza2lwKQpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgICAgIGlmIG1hdGNoID4gMAogICAgICAgICAgICAgbGV0IGluZCA9IGluZGVudChtYXRjaCkKICAgICAgICAgZWxzZWlmIGNsaW5lID1+PyAnXlwoRU5ELVwoUkVBRFx8RVZBTFVBVEVcfFNFQVJDSFx8UEVSRk9STVwpXClcPicKLSAgICAgICAgICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgICAgICAgICAgIGxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkKICAgICAgICAgZW5kaWYKICAgICBlbmRpZgogICAgIHJldHVybiBpbmQgPCBic2hmdCA/IGJzaGZ0IDogaW5kCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9jdWN1bWJlci52aW0gYi9ydW50aW1lL2luZGVudC9jdWN1bWJlci52aW0KaW5kZXggOTk5YjhkNi4uYWQyOGE2NyAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvY3VjdW1iZXIudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L2N1Y3VtYmVyLnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVmltIGluZGVudCBmaWxlCiAiIExhbmd1YWdlOglDdWN1bWJlcgogIiBNYWludGFpbmVyOglUaW0gUG9wZSA8dmltTk9TUEFNQHRwb3BlLm9yZz4KLSIgTGFzdCBDaGFuZ2U6CTIwMTYgQXVnIDI5CisiIExhc3QgQ2hhbmdlOgkyMDE3IEp1biAxMwogCiBpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCiAgIGZpbmlzaApAQCAtMjcsNyArMjcsNyBAQAogICBsZXQgbGluZSAgPSBnZXRsaW5lKHByZXZub25ibGFuayh2OmxudW0tMSkpCiAgIGxldCBjbGluZSA9IGdldGxpbmUodjpsbnVtKQogICBsZXQgbmxpbmUgPSBnZXRsaW5lKG5leHRub25ibGFuayh2OmxudW0rMSkpCi0gIGxldCBzdyA9IGV4aXN0cygnKnNoaWZ0d2lkdGgnKSA/IHNoaWZ0d2lkdGgoKSA6ICZzdworICBsZXQgc3cgPSBleGlzdHMoJypzaGlmdHdpZHRoJykgPyBzaGlmdHdpZHRoKCkgOiBzaGlmdHdpZHRoKCkKICAgbGV0IHN5biA9IHM6c3luKHByZXZub25ibGFuayh2OmxudW0tMSkpCiAgIGxldCBjc3luID0gczpzeW4odjpsbnVtKQogICBsZXQgbnN5biA9IHM6c3luKG5leHRub25ibGFuayh2OmxudW0rMSkpCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9keWxhbi52aW0gYi9ydW50aW1lL2luZGVudC9keWxhbi52aW0KaW5kZXggMGFmY2JlYS4uNjgxMWVjNCAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvZHlsYW4udmltCisrKyBiL3J1bnRpbWUvaW5kZW50L2R5bGFuLnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVmltIGluZGVudCBmaWxlCiAiIExhbmd1YWdlOglEeWxhbgogIiBWZXJzaW9uOgkwLjAxCi0iIExhc3QgQ2hhbmdlOgkyMDAzIEZlYiAwNAorIiBMYXN0IENoYW5nZToJMjAxNyBKdW4gMTMKICIgTWFpbnRhaW5lcjoJQnJlbnQgQS4gRnVsZ2hhbSA8YmZ1bGdoYW1AZGViaWFuLm9yZz4KIAogIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCkBAIC00NSwxMyArNDUsMTMgQEAKIAogICAiIElmIHByZXZpb3VzIGxpbmUgd2FzIGEgJ2RlZmluZScsIGluZGVudAogICBpZiBwcmV2bGluZSA9fj8gJ1woXlxzKlwoYmVnaW5cfGJsb2NrXHxjYXNlXHxkZWZpbmVcfGVsc2VcfGVsc2VpZlx8Zm9yXHxmaW5hbGx5XHxpZlx8c2VsZWN0XHx1bmxlc3NcfHdoaWxlXClcfFxzKlxTKlxzKj0+JFwpJwotICAgIGxldCBjaGcgPSAmc3cKKyAgICBsZXQgY2hnID0gc2hpZnR3aWR0aCgpCiAgICIgbG9jYWwgbWV0aG9kcyBpbmRlbnQgdGhlIHNoaWZ0LXdpZHRoLCBwbHVzIDYgZm9yIHRoZSAnbG9jYWwnCiAgIGVsc2VpZiBwcmV2bGluZSA9fj8gJ15ccypsb2NhbCcKLSAgICBsZXQgY2hnID0gJnN3ICsgNgorICAgIGxldCBjaGcgPSBzaGlmdHdpZHRoKCkgKyA2CiAgICIgSWYgcHJldmlvdXMgbGluZSB3YXMgYSBsZXQgd2l0aCBubyBjbG9zaW5nIHNlbWljb2xvbiwgaW5kZW50CiAgIGVsc2VpZiBwcmV2bGluZSA9fj8gJ15ccypsZXQuKlteO11ccyokJwotICAgIGxldCBjaGcgPSAmc3cKKyAgICBsZXQgY2hnID0gc2hpZnR3aWR0aCgpCiAgICIgSWYgcHJldmlvdXMgbGluZSBvcGVuZWQgYSBwYXJlbnRoZXNpcywgYW5kIGRpZCBub3QgY2xvc2UgaXQsIGluZGVudAogICBlbHNlaWYgcHJldmxpbmUgPX4gJ14uKihccypbXildKlwoKC4qKVwpKlteKV0qJCcKICAgICByZXR1cm4gPSBtYXRjaCggcHJldmxpbmUsICcoLipcKCguKilcfFteKV1cKSouKiQnKSArIDEKQEAgLTc1LDEzICs3NSwxMyBAQAogICAgICIgbGluZSBkb2Vzbid0IHN0YXJ0IHdpdGggYW4gaW5kZW50YWJsZSBjb21tYW5kOgogICAgIGxldCBjdXJyX3N0ciA9IGdldGxpbmUoY3Vycl9saW5lKQogICAgIGlmIGN1cnJfc3RyID1+PyAnXlxzKlwoYmVnaW5cfGJsb2NrXHxjYXNlXHxkZWZpbmVcfGVsc2VcfGVsc2VpZlx8Zm9yXHxmaW5hbGx5XHxpZlx8c2VsZWN0XHx1bmxlc3NcfHdoaWxlXCknCi0gICAgICBsZXQgY2hnID0gJnN3CisgICAgICBsZXQgY2hnID0gc2hpZnR3aWR0aCgpCiAgICAgZW5kaWYKICAgZW5kaWYKIAogICAiIElmIGEgbGluZSBzdGFydHMgd2l0aCBlbmQsIHVuLWluZGVudCAoZXZlbiBpZiB3ZSBqdXN0IGluZGVudGVkISkKICAgaWYgY2xpbmUgPX4/ICdeXHMqXChjbGVhbnVwXHxlbmRcfGVsc2VcfGVsc2VpZlx8ZXhjZXB0aW9uXHxmaW5hbGx5XHxvdGhlcndpc2VcKScKLSAgICBsZXQgY2hnID0gY2hnIC0gJnN3CisgICAgbGV0IGNoZyA9IGNoZyAtIHNoaWZ0d2lkdGgoKQogICBlbmRpZgogCiAgIHJldHVybiBpbmQgKyBjaGcKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2VybGFuZy52aW0gYi9ydW50aW1lL2luZGVudC9lcmxhbmcudmltCmluZGV4IDc1NjlmZTkuLjkyMjhmMTggMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L2VybGFuZy52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvZXJsYW5nLnZpbQpAQCAtNjY5LDcgKzY2OSw3IEBACiAgICAgY2FsbCBzOlBvcChhOnN0YWNrKQogICAgIGlmIGVtcHR5KGE6c3RhY2spCiAgICAgICBjYWxsIHM6TG9nKCcgICAgU3RhY2sgaXMgWyJ3aGVuIl0sIHNvIExUSSBpcyBpbiBhIGd1YXJkIC0+IHJldHVybicpCi0gICAgICByZXR1cm4gWzEsIGE6c3RvcmVkX3Zjb2wgKyAmc3cgKyAyXQorICAgICAgcmV0dXJuIFsxLCBhOnN0b3JlZF92Y29sICsgc2hpZnR3aWR0aCgpICsgMl0KICAgICBlbHNlCiAgICAgICByZXR1cm4gWzEsIHM6VW5leHBlY3RlZFRva2VuKGE6dG9rZW4sIGE6c3RhY2spXQogICAgIGVuZGlmCkBAIC02NzgsNyArNjc4LDcgQEAKICAgICBjYWxsIHM6UG9wKGE6c3RhY2spCiAgICAgaWYgZW1wdHkoYTpzdGFjaykKICAgICAgIGNhbGwgczpMb2coJyAgICBTdGFjayBpcyBbIi0+Il0sIHNvIExUSSBpcyBpbiBmdW5jdGlvbiBib2R5IC0+IHJldHVybicpCi0gICAgICByZXR1cm4gWzEsIGE6c3RvcmVkX3Zjb2wgKyAmc3ddCisgICAgICByZXR1cm4gWzEsIGE6c3RvcmVkX3Zjb2wgKyBzaGlmdHdpZHRoKCldCiAgICAgZWxzZWlmIGE6c3RhY2tbMF0gPT0jICc7JwogICAgICAgY2FsbCBzOlBvcChhOnN0YWNrKQogICAgICAgaWYgZW1wdHkoYTpzdGFjaykKQEAgLTc5Nyw3ICs3OTcsNyBAQAogCiAgICAgICBlbHNlaWYgdG9rZW4gPT0jICdiZWdpbicKICAgICAgICAgbGV0IFtyZXQsIHJlc10gPSBzOkJlZ2luRWxlbWVudEZvdW5kKHN0YWNrLCB0b2tlbiwgY3Vycl92Y29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcc3RvcmVkX3Zjb2wsICdlbmQnLCAmc3cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxzdG9yZWRfdmNvbCwgJ2VuZCcsIHNoaWZ0d2lkdGgoKSkKICAgICAgICAgaWYgcmV0IHwgcmV0dXJuIHJlcyB8IGVuZGlmCiAKICAgICAgICIgY2FzZSBFWFBSIG9mIEJSQU5DSEVTIGVuZApAQCAtODQ4LDExICs4NDgsMTEgQEAKICAgICAgICAgZWxzZWlmIHN0YWNrID09IFsnLT4nXQogICAgICAgICAgIGNhbGwgczpMb2coJyAgICBMVEkgaXMgaW4gYSBicmFuY2ggYWZ0ZXIgJyAuCiAgICAgICAgICAgICAgICAgICAgIFwnIm9mL3JlY2VpdmUvYWZ0ZXIvaWYvY2F0Y2giIC0+IHJldHVybicpCi0gICAgICAgICAgcmV0dXJuIHN0b3JlZF92Y29sICsgJnN3CisgICAgICAgICAgcmV0dXJuIHN0b3JlZF92Y29sICsgc2hpZnR3aWR0aCgpCiAgICAgICAgIGVsc2VpZiBzdGFjayA9PSBbJ3doZW4nXQogICAgICAgICAgIGNhbGwgczpMb2coJyAgICBMVEkgaXMgaW4gYSBndWFyZCBhZnRlciAnIC4KICAgICAgICAgICAgICAgICAgICAgXCcib2YvcmVjZWl2ZS9hZnRlci9pZi9jYXRjaCIgLT4gcmV0dXJuJykKLSAgICAgICAgICByZXR1cm4gc3RvcmVkX3Zjb2wgKyAmc3cKKyAgICAgICAgICByZXR1cm4gc3RvcmVkX3Zjb2wgKyBzaGlmdHdpZHRoKCkKICAgICAgICAgZWxzZQogICAgICAgICAgIHJldHVybiBzOlVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgc3RhY2spCiAgICAgICAgIGVuZGlmCkBAIC04ODgsNyArODg4LDcgQEAKICAgICAgICAgICBpZiBlbXB0eShzdGFjaykKICAgICAgICAgICAgIGNhbGwgczpMb2coJyAgICBMVEkgaXMgaW4gYSBjb25kaXRpb247IG1hdGNoaW5nICcgLgogICAgICAgICAgICAgICAgICAgICAgIFwnImNhc2UvaWYvdHJ5L3JlY2VpdmUiIGZvdW5kJykKLSAgICAgICAgICAgIGxldCBzdG9yZWRfdmNvbCA9IGN1cnJfdmNvbCArICZzdworICAgICAgICAgICAgbGV0IHN0b3JlZF92Y29sID0gY3Vycl92Y29sICsgc2hpZnR3aWR0aCgpCiAgICAgICAgICAgZWxzZWlmIHN0YWNrWzBdID09IyAnYWxpZ25fdG9fYmVnaW5fZWxlbWVudCcKICAgICAgICAgICAgIGNhbGwgczpQb3Aoc3RhY2spCiAgICAgICAgICAgICBsZXQgc3RvcmVkX3Zjb2wgPSBjdXJyX3Zjb2wKQEAgLTg5NywyMyArODk3LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgXCciY2FzZS9pZi90cnkvcmVjZWl2ZSIgZm91bmQnKQogICAgICAgICAgICAgY2FsbCBzOlBvcChzdGFjaykKICAgICAgICAgICAgIGNhbGwgczpQb3Aoc3RhY2spCi0gICAgICAgICAgICBsZXQgc3RvcmVkX3Zjb2wgPSBjdXJyX3Zjb2wgKyAmc3cKKyAgICAgICAgICAgIGxldCBzdG9yZWRfdmNvbCA9IGN1cnJfdmNvbCArIHNoaWZ0d2lkdGgoKQogICAgICAgICAgIGVsc2VpZiBzdGFja1swXSA9PSMgJy0+JwogICAgICAgICAgICAgY2FsbCBzOkxvZygnICAgIExUSSBpcyBpbiBhIGJyYW5jaDsgbWF0Y2hpbmcgJyAuCiAgICAgICAgICAgICAgICAgICAgICAgXCciY2FzZS9pZi90cnkvcmVjZWl2ZSIgZm91bmQnKQogICAgICAgICAgICAgY2FsbCBzOlBvcChzdGFjaykKLSAgICAgICAgICAgIGxldCBzdG9yZWRfdmNvbCA9IGN1cnJfdmNvbCArIDIgKiAmc3cKKyAgICAgICAgICAgIGxldCBzdG9yZWRfdmNvbCA9IGN1cnJfdmNvbCArIDIgKiBzaGlmdHdpZHRoKCkKICAgICAgICAgICBlbHNlaWYgc3RhY2tbMF0gPT0jICd3aGVuJwogICAgICAgICAgICAgY2FsbCBzOkxvZygnICAgIExUSSBpcyBpbiBhIGd1YXJkOyBtYXRjaGluZyAnIC4KICAgICAgICAgICAgICAgICAgICAgICBcJyJjYXNlL2lmL3RyeS9yZWNlaXZlIiBmb3VuZCcpCiAgICAgICAgICAgICBjYWxsIHM6UG9wKHN0YWNrKQotICAgICAgICAgICAgbGV0IHN0b3JlZF92Y29sID0gY3Vycl92Y29sICsgMiAqICZzdyArIDIKKyAgICAgICAgICAgIGxldCBzdG9yZWRfdmNvbCA9IGN1cnJfdmNvbCArIDIgKiBzaGlmdHdpZHRoKCkgKyAyCiAgICAgICAgICAgZW5kaWYKIAogICAgICAgICBlbmRpZgogCiAgICAgICAgIGxldCBbcmV0LCByZXNdID0gczpCZWdpbkVsZW1lbnRGb3VuZChzdGFjaywgdG9rZW4sIGN1cnJfdmNvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHN0b3JlZF92Y29sLCAnZW5kJywgJnN3KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcc3RvcmVkX3Zjb2wsICdlbmQnLCBzaGlmdHdpZHRoKCkpCiAgICAgICAgIGlmIHJldCB8IHJldHVybiByZXMgfCBlbmRpZgogCiAgICAgICBlbHNlaWYgdG9rZW4gPT0jICdmdW4nCkBAIC05MzAsNyArOTMwLDcgQEAKICAgICAgICAgICAiIHN0YWNrID0gWyd3aGVuJ10gID0+ICBMVEkgaXMgaW4gYSBndWFyZAogICAgICAgICAgIGlmIGVtcHR5KHN0YWNrKQogICAgICAgICAgICAgY2FsbCBzOkxvZygnICAgIExUSSBpcyBpbiBhIGNvbmRpdGlvbjsgbWF0Y2hpbmcgImZ1biIgZm91bmQnKQotICAgICAgICAgICAgbGV0IHN0b3JlZF92Y29sID0gY3Vycl92Y29sICsgJnN3CisgICAgICAgICAgICBsZXQgc3RvcmVkX3Zjb2wgPSBjdXJyX3Zjb2wgKyBzaGlmdHdpZHRoKCkKICAgICAgICAgICBlbHNlaWYgbGVuKHN0YWNrKSA+IDEgJiYgc3RhY2tbMF0gPT0jICctPicgJiYgc3RhY2tbMV0gPT0jICc7JwogICAgICAgICAgICAgY2FsbCBzOkxvZygnICAgIExUSSBpcyBpbiBhIGNvbmRpdGlvbjsgbWF0Y2hpbmcgImZ1biIgZm91bmQnKQogICAgICAgICAgICAgY2FsbCBzOlBvcChzdGFjaykKQEAgLTkzOCwxNSArOTM4LDE1IEBACiAgICAgICAgICAgZWxzZWlmIHN0YWNrWzBdID09IyAnLT4nCiAgICAgICAgICAgICBjYWxsIHM6TG9nKCcgICAgTFRJIGlzIGluIGEgYnJhbmNoOyBtYXRjaGluZyAiZnVuIiBmb3VuZCcpCiAgICAgICAgICAgICBjYWxsIHM6UG9wKHN0YWNrKQotICAgICAgICAgICAgbGV0IHN0b3JlZF92Y29sID0gY3Vycl92Y29sICsgMiAqICZzdworICAgICAgICAgICAgbGV0IHN0b3JlZF92Y29sID0gY3Vycl92Y29sICsgMiAqIHNoaWZ0d2lkdGgoKQogICAgICAgICAgIGVsc2VpZiBzdGFja1swXSA9PSMgJ3doZW4nCiAgICAgICAgICAgICBjYWxsIHM6TG9nKCcgICAgTFRJIGlzIGluIGEgZ3VhcmQ7IG1hdGNoaW5nICJmdW4iIGZvdW5kJykKICAgICAgICAgICAgIGNhbGwgczpQb3Aoc3RhY2spCi0gICAgICAgICAgICBsZXQgc3RvcmVkX3Zjb2wgPSBjdXJyX3Zjb2wgKyAyICogJnN3ICsgMgorICAgICAgICAgICAgbGV0IHN0b3JlZF92Y29sID0gY3Vycl92Y29sICsgMiAqIHNoaWZ0d2lkdGgoKSArIDIKICAgICAgICAgICBlbmRpZgogCiAgICAgICAgICAgbGV0IFtyZXQsIHJlc10gPSBzOkJlZ2luRWxlbWVudEZvdW5kKHN0YWNrLCB0b2tlbiwgY3Vycl92Y29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxzdG9yZWRfdmNvbCwgJ2VuZCcsICZzdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcc3RvcmVkX3Zjb2wsICdlbmQnLCBzaGlmdHdpZHRoKCkpCiAgICAgICAgICAgaWYgcmV0IHwgcmV0dXJuIHJlcyB8IGVuZGlmCiAgICAgICAgIGVsc2UKICAgICAgICAgICAiIFBhc3M6IHdlIGhhdmUgYSBmdW5jdGlvbiByZWZlcmVuY2UgKGUuZy4gImZ1biBmLzAiKQpAQCAtMTIyMCw3ICsxMjIwLDcgQEAKICAgICAgICAgICAgICIgICB3aGVuIEEsCiAgICAgICAgICAgICAiICAgICAgICBMVEkKICAgICAgICAgICAgIGxldCBbcmV0LCByZXNdID0gczpCZWdpbkVsZW1lbnRGb3VuZElmRW1wdHkoc3RhY2ssIHRva2VuLCBjdXJyX3Zjb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHN0b3JlZF92Y29sLCAmc3cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHN0b3JlZF92Y29sLCBzaGlmdHdpZHRoKCkpCiAgICAgICAgICAgICBpZiByZXQgfCByZXR1cm4gcmVzIHwgZW5kaWYKICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAiIEV4YW1wbGU6CkBAIC0xMjUyLDcgKzEyNTIsNyBAQAogICAgICAgICAgICIgSWYgTFRJIGlzIGJldHdlZW4gYW4gJ2FmdGVyJyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgICAgICAiICdlbmQnLCB0aGVuIGxldCdzIHJldHVybgogICAgICAgICAgIGxldCBbcmV0LCByZXNdID0gczpCZWdpbkVsZW1lbnRGb3VuZElmRW1wdHkoc3RhY2ssIHRva2VuLCBjdXJyX3Zjb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxzdG9yZWRfdmNvbCwgJnN3KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcc3RvcmVkX3Zjb2wsIHNoaWZ0d2lkdGgoKSkKICAgICAgICAgICBpZiByZXQgfCByZXR1cm4gcmVzIHwgZW5kaWYKICAgICAgICAgZW5kaWYKIApkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvZXJ1YnkudmltIGIvcnVudGltZS9pbmRlbnQvZXJ1YnkudmltCmluZGV4IGFmYWJkNGYuLjUwNTgzMjUgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L2VydWJ5LnZpbQorKysgYi9ydW50aW1lL2luZGVudC9lcnVieS52aW0KQEAgLTQ3LDExICs0Nyw3IEBACiAKIGZ1bmN0aW9uISBHZXRFcnVieUluZGVudCguLi4pCiAgICIgVGhlIHZhbHVlIG9mIGEgc2luZ2xlIHNoaWZ0LXdpZHRoCi0gIGlmIGV4aXN0cygnKnNoaWZ0d2lkdGgnKQotICAgIGxldCBzdyA9IHNoaWZ0d2lkdGgoKQotICBlbHNlCi0gICAgbGV0IHN3ID0gJnN3Ci0gIGVuZGlmCisgIGxldCBzdyA9IHNoaWZ0d2lkdGgoKQogCiAgIGlmIGE6MCAmJiBhOjEgPT0gJy4nCiAgICAgbGV0IHY6bG51bSA9IGxpbmUoJy4nKQpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvZmFsY29uLnZpbSBiL3J1bnRpbWUvaW5kZW50L2ZhbGNvbi52aW0KaW5kZXggODRiMTZkNS4uYjM0ZTdjZiAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvZmFsY29uLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9mYWxjb24udmltCkBAIC0zMzksNyArMzM5LDcgQEAKIAogICAgICIgSWYgdGhlIHByZXZpb3VzIGxpbmUgZW5kZWQgd2l0aCBhIGJsb2NrIG9wZW5pbmcsIGFkZCBhIGxldmVsIG9mIGluZGVudC4KICAgICBpZiBzOk1hdGNoKGxudW0sIHM6YmxvY2tfcmVnZXgpCi0JcmV0dXJuIGluZGVudChzOkdldE1TTChsbnVtKSkgKyAmc3cKKwlyZXR1cm4gaW5kZW50KHM6R2V0TVNMKGxudW0pKSArIHNoaWZ0d2lkdGgoKQogICAgIGVuZGlmCiAKICAgICAiIElmIGl0IGNvbnRhaW5lZCBoYW5naW5nIGNsb3NpbmcgYnJhY2tldHMsIGZpbmQgdGhlIHJpZ2h0bW9zdCBvbmUsIGZpbmQgaXRzCkBAIC0zNTAsMjAgKzM1MCwyMCBAQAogCWlmIG9wZW5pbmcucG9zICE9IC0xCiAJICAgIGlmIG9wZW5pbmcudHlwZSA9PSAnKCcgJiYgc2VhcmNocGFpcignKCcsICcnLCAnKScsICdiVycsIHM6c2tpcF9leHByKSA+IDAKIAkJaWYgY29sKCcuJykgKyAxID09IGNvbCgnJCcpCi0JCSAgICByZXR1cm4gaW5kICsgJnN3CisJCSAgICByZXR1cm4gaW5kICsgc2hpZnR3aWR0aCgpCiAJCWVsc2UKIAkJICAgIHJldHVybiB2aXJ0Y29sKCcuJykKIAkJZW5kaWYKIAkgICAgZWxzZQogCQlsZXQgbm9uc3BhY2UgPSBtYXRjaGVuZChsaW5lLCAnXFMnLCBvcGVuaW5nLnBvcyArIDEpIC0gMQotCQlyZXR1cm4gbm9uc3BhY2UgPiAwID8gbm9uc3BhY2UgOiBpbmQgKyAmc3cKKwkJcmV0dXJuIG5vbnNwYWNlID4gMCA/IG5vbnNwYWNlIDogaW5kICsgc2hpZnR3aWR0aCgpCiAJICAgIGVuZGlmCiAJZWxzZWlmIGNsb3NpbmcucG9zICE9IC0xCiAJICAgIGNhbGwgY3Vyc29yKGxudW0sIGNsb3NpbmcucG9zICsgMSkKIAkgICAgbm9ybWFsISAlCiAKIAkgICAgaWYgczpNYXRjaChsaW5lKCcuJyksIHM6ZmFsY29uX2luZGVudF9rZXl3b3JkcykKLQkJcmV0dXJuIGluZGVudCgnLicpICsgJnN3CisJCXJldHVybiBpbmRlbnQoJy4nKSArIHNoaWZ0d2lkdGgoKQogCSAgICBlbHNlCiAJCXJldHVybiBpbmRlbnQoJy4nKQogCSAgICBlbmRpZgpAQCAtMzkyLDcgKzM5Miw3IEBACiAgICAgbGV0IGNvbCA9IHM6TWF0Y2gobG51bSwgczpmYWxjb25faW5kZW50X2tleXdvcmRzKQogICAgIGlmIGNvbCA+IDAKIAljYWxsIGN1cnNvcihsbnVtLCBjb2wpCi0JbGV0IGluZCA9IHZpcnRjb2woJy4nKSAtIDEgKyAmc3cKKwlsZXQgaW5kID0gdmlydGNvbCgnLicpIC0gMSArIHNoaWZ0d2lkdGgoKQogCSIgVE9ETzogbWFrZSB0aGlzIGJldHRlciAod2UgbmVlZCB0byBjb3VudCB0aGVtKSAob3IsIGlmIGEgc2VhcmNocGFpcgogCSIgZmFpbHMsIHdlIGtub3cgdGhhdCBzb21ldGhpbmcgaXMgbGFja2luZyBhbiBlbmQgYW5kIHRodXMgd2UgaW5kZW50IGEKIAkiIGxldmVsCkBAIC00MjIsOSArNDIyLDkgQEAKICAgICAiIFRPRE86IHRoaXMgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgY29udHJpdmVkIHRoaW5ncyBzdWNoIGFzCiAgICAgIiBtb2R1bGUgRm9vOyBjbGFzcyBCYXI7IGVuZAogICAgIGlmIHM6TWF0Y2gobG51bSwgczpmYWxjb25faW5kZW50X2tleXdvcmRzKQotCWxldCBpbmQgPSBtc2xfaW5kICsgJnN3CisJbGV0IGluZCA9IG1zbF9pbmQgKyBzaGlmdHdpZHRoKCkKIAlpZiBzOk1hdGNoKGxudW0sIHM6ZW5kX2VuZF9yZWdleCkKLQkgICAgbGV0IGluZCA9IGluZCAtICZzdworCSAgICBsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAJZW5kaWYKIAlyZXR1cm4gaW5kCiAgICAgZW5kaWYKQEAgLTQzMyw3ICs0MzMsNyBAQAogICAgICIgY2xvc2luZyBicmFja2V0LCBpbmRlbnQgb25lIGV4dHJhIGxldmVsLgogICAgIGlmIHM6TWF0Y2gobG51bSwgczpub25fYnJhY2tldF9jb250aW51YXRpb25fcmVnZXgpICYmICFzOk1hdGNoKGxudW0sICdeXHMqXChbXF0pfV1cfGVuZFwpJykKIAlpZiBsbnVtID09IHBfbG51bQotCSAgICBsZXQgaW5kID0gbXNsX2luZCArICZzdworCSAgICBsZXQgaW5kID0gbXNsX2luZCArIHNoaWZ0d2lkdGgoKQogCWVsc2UKIAkgICAgbGV0IGluZCA9IG1zbF9pbmQKIAllbmRpZgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvZ2l0Y29uZmlnLnZpbSBiL3J1bnRpbWUvaW5kZW50L2dpdGNvbmZpZy52aW0KaW5kZXggNDgwYzk2ZC4uNmE2NzBlZSAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvZ2l0Y29uZmlnLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9naXRjb25maWcudmltCkBAIC0xLDcgKzEsNyBAQAogIiBWaW0gaW5kZW50IGZpbGUKICIgTGFuZ3VhZ2U6CWdpdCBjb25maWcgZmlsZQogIiBNYWludGFpbmVyOglUaW0gUG9wZSA8dmltTk9TUEFNQHRwb3BlLm9yZz4KLSIgTGFzdCBDaGFuZ2U6CTIwMTYgQXVnIDI5CisiIExhc3QgQ2hhbmdlOgkyMDE3IEp1biAxMwogCiBpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCiAgIGZpbmlzaApAQCAtMjAsNyArMjAsNyBAQAogZW5kaWYKIAogZnVuY3Rpb24hIEdldEdpdGNvbmZpZ0luZGVudCgpCi0gIGxldCBzdyAgICA9IGV4aXN0cygnKnNoaWZ0d2lkdGgnKSA/IHNoaWZ0d2lkdGgoKSA6ICZzdworICBsZXQgc3cgICAgPSBzaGlmdHdpZHRoKCkKICAgbGV0IGxpbmUgID0gZ2V0bGluZShwcmV2bm9uYmxhbmsodjpsbnVtLTEpKQogICBsZXQgY2xpbmUgPSBnZXRsaW5lKHY6bG51bSkKICAgaWYgbGluZSA9fiAgJ1xcXEA8IVwlKFxcXFxcKSpcXCQnCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9naXRvbGl0ZS52aW0gYi9ydW50aW1lL2luZGVudC9naXRvbGl0ZS52aW0KaW5kZXggMzNiN2M5Zi4uMmQyNGI1OSAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvZ2l0b2xpdGUudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L2dpdG9saXRlLnZpbQpAQCAtMiw3ICsyLDcgQEAKICIgTGFuZ3VhZ2U6CWdpdG9saXRlIGNvbmZpZ3VyYXRpb24KICIgVVJMOgkJaHR0cHM6Ly9naXRodWIuY29tL3RtYXRpbGFpL2dpdG9saXRlLnZpbQogIiBNYWludGFpbmVyOglUZWVtdSBNYXRpbGFpbmVuIDx0ZWVtdS5tYXRpbGFpbmVuQGlraS5maT4KLSIgTGFzdCBDaGFuZ2U6CTIwMTEtMTItMjQKKyIgTGFzdCBDaGFuZ2U6CTIwMTcgSnVuIDEzCiAKIGlmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKICAgZmluaXNoCkBAIC0yNywxMSArMjcsMTEgQEAKICAgbGV0IGNsaW5lID0gZ2V0bGluZSh2OmxudW0pCiAKICAgaWYgY2xpbmUgPX4gJ15ccypcKENcfFJcfFJXXHxSVytcfFJXQ1x8UlcrQ1x8UldEXHxSVytEXHxSV0NEXHxSVytDRFx8LVwpWyBcdD1dJwotICAgIHJldHVybiAmc3cKKyAgICByZXR1cm4gc2hpZnR3aWR0aCgpCiAgIGVsc2VpZiBjbGluZSA9fiAnXlxzKmNvbmZpZ1xzJwotICAgIHJldHVybiAmc3cKKyAgICByZXR1cm4gc2hpZnR3aWR0aCgpCiAgIGVsc2VpZiBwbGluZSA9fiAnXlxzKnJlcG9ccycgJiYgY2xpbmUgPX4gJ15ccypcKCMuKlwpXD8kJwotICAgIHJldHVybiAmc3cKKyAgICByZXR1cm4gc2hpZnR3aWR0aCgpCiAgIGVsc2VpZiBjbGluZSA9fiAnXlxzKiMnCiAgICAgcmV0dXJuIGluZGVudChwcmV2bG4pCiAgIGVsc2VpZiBjbGluZSA9fiAnXlxzKiQnCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9nby52aW0gYi9ydW50aW1lL2luZGVudC9nby52aW0KaW5kZXggNDEyYWM4Ny4uYmY5ZmY3NSAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvZ28udmltCisrKyBiL3J1bnRpbWUvaW5kZW50L2dvLnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVmltIGluZGVudCBmaWxlCiAiIExhbmd1YWdlOglHbwogIiBNYWludGFpbmVyOglEYXZpZCBCYXJuZXR0IChodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL3ZpbS1mdC1nbykKLSIgTGFzdCBDaGFuZ2U6CTIwMTQgQXVnIDE2CisiIExhc3QgQ2hhbmdlOgkyMDE3IEp1biAxMwogIgogIiBUT0RPOgogIiAtIGZ1bmN0aW9uIGludm9jYXRpb25zIHNwbGl0IGFjcm9zcyBsaW5lcwpAQCAtMjMsMTggKzIzLDYgQEAKICAgZmluaXNoCiBlbmRpZgogCi0iIFRoZSBzaGlmdHdpZHRoKCkgZnVuY3Rpb24gaXMgcmVsYXRpdmVseSBuZXcuCi0iIERvbid0IHJlcXVpcmUgaXQgdG8gZXhpc3QuCi1pZiBleGlzdHMoJypzaGlmdHdpZHRoJykKLSAgZnVuY3Rpb24gczpzdygpIGFib3J0Ci0gICAgcmV0dXJuIHNoaWZ0d2lkdGgoKQotICBlbmRmdW5jdGlvbgotZWxzZQotICBmdW5jdGlvbiBzOnN3KCkgYWJvcnQKLSAgICByZXR1cm4gJnNoaWZ0d2lkdGgKLSAgZW5kZnVuY3Rpb24KLWVuZGlmCi0KIGZ1bmN0aW9uISBHb0luZGVudChsbnVtKQogICBsZXQgbDpwcmV2bG51bSA9IHByZXZub25ibGFuayhhOmxudW0tMSkKICAgaWYgbDpwcmV2bG51bSA9PSAwCkBAIC01MSwxNyArMzksMTcgQEAKIAogICBpZiBsOnByZXZsID1+ICdbKHtdXHMqJCcKICAgICAiIHByZXZpb3VzIGxpbmUgb3BlbmVkIGEgYmxvY2sKLSAgICBsZXQgbDppbmQgKz0gczpzdygpCisgICAgbGV0IGw6aW5kICs9IHNoaWZ0d2lkdGgoKQogICBlbmRpZgogICBpZiBsOnByZXZsID1+IyAnXlxzKlwoY2FzZSAuKlx8ZGVmYXVsdFwpOiQnCiAgICAgIiBwcmV2aW91cyBsaW5lIGlzIHBhcnQgb2YgYSBzd2l0Y2ggc3RhdGVtZW50Ci0gICAgbGV0IGw6aW5kICs9IHM6c3coKQorICAgIGxldCBsOmluZCArPSBzaGlmdHdpZHRoKCkKICAgZW5kaWYKICAgIiBUT0RPOiBoYW5kbGUgaWYgdGhlIHByZXZpb3VzIGxpbmUgaXMgYSBsYWJlbC4KIAogICBpZiBsOnRoaXNsID1+ICdeXHMqWyl9XScKICAgICAiIHRoaXMgbGluZSBjbG9zZWQgYSBibG9jawotICAgIGxldCBsOmluZCAtPSBzOnN3KCkKKyAgICBsZXQgbDppbmQgLT0gc2hpZnR3aWR0aCgpCiAgIGVuZGlmCiAKICAgIiBDb2xvbnMgYXJlIHRyaWNreS4KQEAgLTY5LDcgKzU3LDcgQEAKICAgIiBXZSBpZ25vcmUgdHJ5aW5nIHRvIGRlYWwgd2l0aCBqdW1wIGxhYmVscyBiZWNhdXNlIChhKSB0aGV5J3JlIHJhcmUsIGFuZAogICAiIChiKSB0aGV5J3JlIGhhcmQgdG8gZGlzYW1iaWd1YXRlIGZyb20gYSBjb21wb3NpdGUgbGl0ZXJhbCBrZXkuCiAgIGlmIGw6dGhpc2wgPX4jICdeXHMqXChjYXNlIC4qXHxkZWZhdWx0XCk6JCcKLSAgICBsZXQgbDppbmQgLT0gczpzdygpCisgICAgbGV0IGw6aW5kIC09IHNoaWZ0d2lkdGgoKQogICBlbmRpZgogCiAgIHJldHVybiBsOmluZApkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvaGFtbC52aW0gYi9ydW50aW1lL2luZGVudC9oYW1sLnZpbQppbmRleCBjMzkzNWFmLi5lNjQxNmU2IDEwMDY0NAotLS0gYS9ydW50aW1lL2luZGVudC9oYW1sLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9oYW1sLnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVmltIGluZGVudCBmaWxlCiAiIExhbmd1YWdlOglIYW1sCiAiIE1haW50YWluZXI6CVRpbSBQb3BlIDx2aW1OT1NQQU1AdHBvcGUub3JnPgotIiBMYXN0IENoYW5nZToJMjAxNiBBdWcgMjkKKyIgTGFzdCBDaGFuZ2U6CTIwMTcgSnVuIDEzCiAKIGlmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKICAgZmluaXNoCkBAIC0zNyw3ICszNyw3IEBACiAgIGxldCBsaW5lID0gc3Vic3RpdHV0ZShsaW5lLCdeXHNcKycsJycsJycpCiAgIGxldCBpbmRlbnQgPSBpbmRlbnQobG51bSkKICAgbGV0IGNpbmRlbnQgPSBpbmRlbnQodjpsbnVtKQotICBsZXQgc3cgPSBleGlzdHMoJypzaGlmdHdpZHRoJykgPyBzaGlmdHdpZHRoKCkgOiAmc3cKKyAgbGV0IHN3ID0gc2hpZnR3aWR0aCgpCiAgIGlmIGNsaW5lID1+IyAnXHZeLVxzKiUoZWxzaWZ8ZWxzZXx3aGVuKT4nCiAgICAgbGV0IGluZGVudCA9IGNpbmRlbnQgPCBpbmRlbnQgPyBjaW5kZW50IDogaW5kZW50IC0gc3cKICAgZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2hhbXN0ZXIudmltIGIvcnVudGltZS9pbmRlbnQvaGFtc3Rlci52aW0KaW5kZXggOTNlN2RiNC4uYjI3YTE3MyAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvaGFtc3Rlci52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvaGFtc3Rlci52aW0KQEAgLTI3LDEzICsyNywxMyBAQAogICAiIEFkZCBhIHNoaWZ0d2lkdGggdG8gc3RhdGVtZW50cyBmb2xsb3dpbmcgaWYsICBlbHNlLCBlbHNlaWYsCiAgICIgY2FzZSwgc2VsZWN0LCBkZWZhdWx0LCBkbywgdW50aWwsIHdoaWxlLCBmb3IsIHN0YXJ0CiAgIGlmIHByZXZsaW5lID1+PyAnXlxzKlw8XChpZlx8ZWxzZVwlKGlmXClcP1x8Zm9yXHxyZXBlYXRcfGRvXHx3aGlsZVx8c3ViXClcPicgCi0gICAgbGV0IGluZCA9IGluZCArICZzdworICAgIGxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKICAgZW5kaWYKIAogICAiIFN1YnRyYWN0IGEgc2hpZnR3aWR0aCBmcm9tIGVsc2UsIGVsc2VpZiwgZW5kKGlmfHdoaWxlfGZvciksIHVudGlsCiAgIGxldCBsaW5lID0gZ2V0bGluZSh2OmxudW0pCiAgIGlmIGxpbmUgPX4/ICdeXHMqXChlbHNlXHxlbHNlaWZcfGxvb3BcfHVudGlsXHxlbmRcJShpZlx8d2hpbGVcfGZvclx8c3ViXClcKVw+JwotICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgICBsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAgIGVuZGlmCiAKICAgcmV0dXJuIGluZApkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvaG9nLnZpbSBiL3J1bnRpbWUvaW5kZW50L2hvZy52aW0KaW5kZXggMDJhYzdkNC4uZWNlNTg3ZCAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvaG9nLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9ob2cudmltCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgIiBDb250aW51YXRpb24gb2YgYSBsaW5lIHRoYXQgd2Fzbid0IGluZGVudGVkCiAgICAgbGV0IHByZXZsaW5lID0gZ2V0bGluZShwcmV2bG51bSkKICAgICBpZiBwcmV2bGluZSA9fiAnXlxrXCsuKlxcXHMqJCcKLSAgICAgICAgcmV0dXJuICZzdyAKKyAgICAgICAgcmV0dXJuIHNoaWZ0d2lkdGgoKSAKICAgICBlbmRpZgogCiAgICAgIiBDb250aW51YXRpb24gb2YgYSBsaW5lIHRoYXQgd2FzIGluZGVudGVkCkBAIC01OCwxMyArNTgsMTMgQEAKICAgICAiIEluZGVudCB0aGUgbmV4dCBsaW5lIGlmIHByZXZpb3VzIGxpbmUgY29udGFpbmVkIGEgc3RhcnQgb2YgYSBibG9jawogICAgICIgZGVmaW5pdGlvbiAoJ3snIG9yICcoJykuCiAgICAgaWYgcHJldmxpbmUgPX4gJ15ca1wrW14jXSp7fVxAIVxzKiQnICIgVE9ETyB8fCBwcmV2bGluZSA9fiAnXlxrXCtbXiNdKigpXEAhXHMqJCcKLSAgICAgICAgcmV0dXJuICZzdworICAgICAgICByZXR1cm4gc2hpZnR3aWR0aCgpCiAgICAgZW5kaWYKIAogICAgICIgTWF0Y2ggaW5zaWRlIG9mIGEgYmxvY2sKICAgICBpZiBzOklzSW5CbG9jayh2OmxudW0pCiAgICAgICAgIGlmIHByZXZsaW5lID1+ICJeXGtcKy4qJCIKLSAgICAgICAgICAgIHJldHVybiAmc3cKKyAgICAgICAgICAgIHJldHVybiBzaGlmdHdpZHRoKCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGluZGVudChwcmV2bG51bSkKICAgICAgICAgZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2h0bWwudmltIGIvcnVudGltZS9pbmRlbnQvaHRtbC52aW0KaW5kZXggNTdiYTUzZS4uMzc2OTc4NCAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvaHRtbC52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvaHRtbC52aW0KQEAgLTIsNyArMiw3IEBACiAiIEhlYWRlcjogInt7ewogIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhcgogIiBPcmlnaW5hbCBBdXRob3I6IEFuZHkgV29rdWxhIDxhbndva3VAeWFob28uZGU+Ci0iIExhc3QgQ2hhbmdlOgkyMDE3IEphbiAxNworIiBMYXN0IENoYW5nZToJMjAxNyBKdW4gMTMKICIgVmVyc2lvbjoJMS4wCiAiIERlc2NyaXB0aW9uOglIVE1MIGluZGVudCBzY3JpcHQgd2l0aCBjYWNoZWQgc3RhdGUgZm9yIGZhc3RlciBpbmRlbnRpbmcgb24gYQogIgkJcmFuZ2Ugb2YgbGluZXMuCkBAIC01MSwxNSArNTEsNiBAQAogICBmaW5pc2gKIGVuZGlmCiAKLSIgc2hpZnR3aWR0aCgpIGV4aXN0cyBzaW5jZSBwYXRjaCA3LjMuNjk0Ci1pZiBleGlzdHMoJypzaGlmdHdpZHRoJykKLSAgbGV0IHM6U2hpZnRXaWR0aCA9IGZ1bmN0aW9uKCdzaGlmdHdpZHRoJykKLWVsc2UKLSAgZnVuYyEgczpTaGlmdFdpZHRoKCkKLSAgICByZXR1cm4gJnNoaWZ0d2lkdGgKLSAgZW5kZnVuYwotZW5kaWYKLQogIiBBbGxvdyBmb3IgbGluZSBjb250aW51YXRpb24gYmVsb3cuCiBsZXQgczpjcG9fc2F2ZSA9ICZjcG8KIHNldCBjcG8tPUMKQEAgLTEyMyw3ICsxMTQsNyBAQAogCiAgIGxldCBpbmRvbmUgPSB7Inplcm8iOiAwCiAgICAgICAgICAgICAgIFwsImF1dG8iOiAiaW5kZW50KHByZXZub25ibGFuayh2OmxudW0tMSkpIgotICAgICAgICAgICAgICBcLCJpbmMiOiAiYjpoaV9pbmRlbnQuYmxvY2t0YWdpbmQgKyBzOlNoaWZ0V2lkdGgoKSJ9CisgICAgICAgICAgICAgIFwsImluYyI6ICJiOmhpX2luZGVudC5ibG9ja3RhZ2luZCArIHNoaWZ0d2lkdGgoKSJ9CiAKICAgbGV0IHNjcmlwdDEgPSAnJwogICBpZiBleGlzdHMoImI6aHRtbF9pbmRlbnRfc2NyaXB0MSIpCkBAIC0zNTgsNyArMzQ5LDcgQEAKICAgICBlbmRpZgogICAgIGxldCBiOmhpX25ld3N0YXRlLmJsb2NrbG5yID0gdjpsbnVtCiAgICAgIiBzYXZlIGFsbG92ZXIgaW5kZW50IGZvciB0aGUgZW5kdGFnCi0gICAgbGV0IGI6aGlfbmV3c3RhdGUuYmxvY2t0YWdpbmQgPSBiOmhpX2luZGVudC5iYXNlaW5kZW50ICsgKHM6bmV4dHJlbCArIHM6Y3VyaW5kKSAqIHM6U2hpZnRXaWR0aCgpCisgICAgbGV0IGI6aGlfbmV3c3RhdGUuYmxvY2t0YWdpbmQgPSBiOmhpX2luZGVudC5iYXNlaW5kZW50ICsgKHM6bmV4dHJlbCArIHM6Y3VyaW5kKSAqIHNoaWZ0d2lkdGgoKQogICAgIGlmIGE6aW5kID09IDMKICAgICAgIHJldHVybiAiU0NSSVBUIiAgICAiIGFsbCBleGNlcHQgdGhpcyBtdXN0IGJlIGxvd2VyY2FzZQogICAgICAgIiBsaW5lIGlzIHRvIGJlIGNoZWNrZWQgYWdhaW4gZm9yIHRoZSB0eXBlIGF0dHJpYnV0ZQpAQCAtNDgwLDcgKzQ3MSw3IEBACiAgICAgICBsZXQgc3RhdGUuYmxvY2tsbnIgPSBzdG9wbGluZQogICAgICAgIiBjaGVjayBwcmVjZWRpbmcgdGFncyBpbiB0aGUgbGluZToKICAgICAgIGNhbGwgczpDb3VudElUYWdzKHRhZ2xpbmVbOiBzdG9wY29sLTJdKQotICAgICAgbGV0IHN0YXRlLmJsb2NrdGFnaW5kID0gaW5kZW50KHN0b3BsaW5lKSArIChzOmN1cmluZCArIHM6bmV4dHJlbCkgKiBzOlNoaWZ0V2lkdGgoKQorICAgICAgbGV0IHN0YXRlLmJsb2NrdGFnaW5kID0gaW5kZW50KHN0b3BsaW5lKSArIChzOmN1cmluZCArIHM6bmV4dHJlbCkgKiBzaGlmdHdpZHRoKCkKICAgICAgIHJldHVybiBzdGF0ZQogICAgIGVsc2VpZiBzdG9wbGluZSA9PSBzdGF0ZS5sbnVtCiAgICAgICAiIGhhbmRsZSBzcGVjaWFsIGNhc2U6IHByZXZpb3VzIGxpbmUgKD0gc3RhdGUubG51bSkgY29udGFpbnMgYQpAQCAtNDkwLDcgKzQ4MSw3IEBACiAgICAgICBpZiAhc3dlbmR0YWcKICAgICAgICAgbGV0IFtibGluZSwgYmNvbF0gPSBzZWFyY2hwb3MoJzwnLmJsb2NrdGFnWzE6XS4nXD4nLCAiYm5XIikKICAgICAgICAgY2FsbCBzOkNvdW50SVRhZ3ModG9sb3dlcihnZXRsaW5lKGJsaW5lKVs6IGJjb2wtMl0pKQotICAgICAgICBsZXQgc3RhdGUuYmFzZWluZGVudCA9IGluZGVudChibGluZSkgKyAoczpjdXJpbmQgKyBzOm5leHRyZWwpICogczpTaGlmdFdpZHRoKCkKKyAgICAgICAgbGV0IHN0YXRlLmJhc2VpbmRlbnQgPSBpbmRlbnQoYmxpbmUpICsgKHM6Y3VyaW5kICsgczpuZXh0cmVsKSAqIHNoaWZ0d2lkdGgoKQogICAgICAgICByZXR1cm4gc3RhdGUKICAgICAgIGVuZGlmCiAgICAgZW5kaWYKQEAgLTUxMSw3ICs1MDIsNyBAQAogICAgIGlmIGZvdW5kID09IDIKICAgICAgIGxldCBzdGF0ZS5iYXNlaW5kZW50ID0gYjpoaV9pbmRlbnQuYmFzZWluZGVudAogICAgIGVuZGlmCi0gICAgbGV0IHN0YXRlLmJsb2NrdGFnaW5kID0gaW5kZW50KGNvbWxudW0pICsgKHM6Y3VyaW5kICsgczpuZXh0cmVsKSAqIHM6U2hpZnRXaWR0aCgpCisgICAgbGV0IHN0YXRlLmJsb2NrdGFnaW5kID0gaW5kZW50KGNvbWxudW0pICsgKHM6Y3VyaW5kICsgczpuZXh0cmVsKSAqIHNoaWZ0d2lkdGgoKQogICAgIHJldHVybiBzdGF0ZQogICBlbmRpZgogCkBAIC01MzAsNyArNTIxLDcgQEAKICAgICAgIGxldCB0ZXh0ID0gdG9sb3dlcihnZXRsaW5lKGNvbWxudW0pWzogY29tY29sLTJdKQogICAgIGVuZGlmCiAgICAgY2FsbCBzOkNvdW50SVRhZ3ModGV4dCkKLSAgICBsZXQgc3RhdGUuYmFzZWluZGVudCA9IGluZGVudChjb21sbnVtKSArIChzOmN1cmluZCArIHM6bmV4dHJlbCkgKiBzOlNoaWZ0V2lkdGgoKQorICAgIGxldCBzdGF0ZS5iYXNlaW5kZW50ID0gaW5kZW50KGNvbWxudW0pICsgKHM6Y3VyaW5kICsgczpuZXh0cmVsKSAqIHNoaWZ0d2lkdGgoKQogICAgICIgVE9ETyBjaGVjayB0YWdzIHRoYXQgZm9sbG93ICItLT4iCiAgICAgcmV0dXJuIHN0YXRlCiAgIGVuZGlmCkBAIC01NTAsOSArNTQxLDkgQEAKICAgICAgICAgbGV0IHRleHQgPSBnZXRsaW5lKHN0YXJ0X2xudW0pCiAgICAgICAgIGxldCBzd2VuZHRhZyA9IG1hdGNoKHRleHQsICdeXHMqPC8nKSA+PSAwCiAgICAgICAgIGNhbGwgczpDb3VudElUYWdzKHRleHRbOiBjb2woJy4nKSAtIDJdKQotICAgICAgICBsZXQgc3RhdGUuYmFzZWluZGVudCArPSBzOm5leHRyZWwgKiBzOlNoaWZ0V2lkdGgoKQorICAgICAgICBsZXQgc3RhdGUuYmFzZWluZGVudCArPSBzOm5leHRyZWwgKiBzaGlmdHdpZHRoKCkKICAgICAgICAgaWYgIXN3ZW5kdGFnCi0gICAgICAgICAgbGV0IHN0YXRlLmJhc2VpbmRlbnQgKz0gczpjdXJpbmQgKiBzOlNoaWZ0V2lkdGgoKQorICAgICAgICAgIGxldCBzdGF0ZS5iYXNlaW5kZW50ICs9IHM6Y3VyaW5kICogc2hpZnR3aWR0aCgpCiAgICAgICAgIGVuZGlmCiAgICAgICBlbmRpZgogICAgICAgcmV0dXJuIHN0YXRlCkBAIC01NjUsOSArNTU2LDkgQEAKICAgbGV0IHRleHQgPSBnZXRsaW5lKHN0YXRlLmxudW0pCiAgIGxldCBzd2VuZHRhZyA9IG1hdGNoKHRleHQsICdeXHMqPC8nKSA+PSAwCiAgIGNhbGwgczpDb3VudElUYWdzKHRvbG93ZXIodGV4dCkpCi0gIGxldCBzdGF0ZS5iYXNlaW5kZW50ID0gaW5kZW50KHN0YXRlLmxudW0pICsgczpuZXh0cmVsICogczpTaGlmdFdpZHRoKCkKKyAgbGV0IHN0YXRlLmJhc2VpbmRlbnQgPSBpbmRlbnQoc3RhdGUubG51bSkgKyBzOm5leHRyZWwgKiBzaGlmdHdpZHRoKCkKICAgaWYgIXN3ZW5kdGFnCi0gICAgbGV0IHN0YXRlLmJhc2VpbmRlbnQgKz0gczpjdXJpbmQgKiBzOlNoaWZ0V2lkdGgoKQorICAgIGxldCBzdGF0ZS5iYXNlaW5kZW50ICs9IHM6Y3VyaW5kICogc2hpZnR3aWR0aCgpCiAgIGVuZGlmCiAgIHJldHVybiBzdGF0ZQogZW5kZnVuYyAifX19CkBAIC02NDYsNyArNjM3LDcgQEAKIAogICAiIGFkZCBpbmRlbnQgYWZ0ZXIgewogICBsZXQgYnJhY2VfY291bnRzID0gSHRtbEluZGVudF9Db3VudEJyYWNlcyhwcmV2X2xudW0pCi0gIGxldCBleHRyYSA9IGJyYWNlX2NvdW50cy5jX29wZW4gKiBzOlNoaWZ0V2lkdGgoKQorICBsZXQgZXh0cmEgPSBicmFjZV9jb3VudHMuY19vcGVuICogc2hpZnR3aWR0aCgpCiAKICAgbGV0IHByZXZfdGV4dCA9IGdldGxpbmUocHJldl9sbnVtKQogICBsZXQgYmVsb3dfZW5kX2JyYWNlID0gcHJldl90ZXh0ID1+ICd9XHMqJCcKQEAgLTY2Myw3ICs2NTQsNyBAQAogICAgICAgIiBpZiB0aGUgY3VycmVudCBsaW5lIGlzIG5vdCBhIGNvbW1lbnQgb3Igc3RhcnRzIHdpdGggQCAodXNlZCBieSB0ZW1wbGF0ZQogICAgICAgIiBzeXN0ZW1zKSByZWR1Y2UgaW5kZW50IGlmIHByZXZpb3VzIGxpbmUgaXMgYSBjb250aW51YXRpb24gbGluZQogICAgICAgaWYgIXByZXZfaGFzZmllbGQgJiYgIXByZXZfc3BlY2lhbAotICAgICAgICBsZXQgZXh0cmEgPSAtczpTaGlmdFdpZHRoKCkKKyAgICAgICAgbGV0IGV4dHJhID0gLXNoaWZ0d2lkdGgoKQogICAgICAgZW5kaWYKICAgICBlbHNlCiAgICAgICBsZXQgY3VyX2hhc2ZpZWxkID0gY3VydGV4dCA9fiAnXlxzKlthLXpBLVowLTktXVwrOicKQEAgLTY3MSwxNCArNjYyLDE0IEBACiAgICAgICBpZiAhY3VyX2hhc2ZpZWxkICYmIChwcmV2X2hhc2ZpZWxkIHx8IHByZXZfdW5maW5pc2hlZCkKICAgICAgICAgIiBDb250aW51YXRpb24gbGluZSBoYXMgZXh0cmEgaW5kZW50IGlmIHRoZSBwcmV2aW91cyBsaW5lIHdhcyBub3QgYQogICAgICAgICAiIGNvbnRpbnVhdGlvbiBsaW5lLgotICAgICAgICBsZXQgZXh0cmEgPSBzOlNoaWZ0V2lkdGgoKQorICAgICAgICBsZXQgZXh0cmEgPSBzaGlmdHdpZHRoKCkKICAgICAgICAgIiBBbGlnbiB3aXRoIEBpZgogICAgICAgICBpZiBwcmV2X3RleHQgPX4gJ15ccypAaWYgJwogICAgICAgICAgIGxldCBleHRyYSA9IDQKICAgICAgICAgZW5kaWYKICAgICAgIGVsc2VpZiBjdXJfaGFzZmllbGQgJiYgIXByZXZfaGFzZmllbGQgJiYgIXByZXZfc3BlY2lhbAogICAgICAgICAiIGxlc3MgaW5kZW50IGJlbG93IGEgY29udGludWF0aW9uIGxpbmUKLSAgICAgICAgbGV0IGV4dHJhID0gLXM6U2hpZnRXaWR0aCgpCisgICAgICAgIGxldCBleHRyYSA9IC1zaGlmdHdpZHRoKCkKICAgICAgIGVuZGlmCiAgICAgZW5kaWYKICAgZW5kaWYKQEAgLTY5OSwxMCArNjkwLDEwIEBACiAgICAgaWYgc3BlY2lhbAogICAgICAgIiBkbyBub3QgcmVkdWNlIGluZGVudCBiZWxvdyBAeyAuLi4gfQogICAgICAgaWYgZXh0cmEgPCAwCi0gICAgICAgIGxldCBleHRyYSArPSBzOlNoaWZ0V2lkdGgoKQorICAgICAgICBsZXQgZXh0cmEgKz0gc2hpZnR3aWR0aCgpCiAgICAgICBlbmRpZgogICAgIGVsc2UKLSAgICAgIGxldCBleHRyYSAtPSAoYnJhY2VfY291bnRzLmNfY2xvc2UgLSAocHJldl90ZXh0ID1+ICdeXHMqfScpKSAqIHM6U2hpZnRXaWR0aCgpCisgICAgICBsZXQgZXh0cmEgLT0gKGJyYWNlX2NvdW50cy5jX2Nsb3NlIC0gKHByZXZfdGV4dCA9fiAnXlxzKn0nKSkgKiBzaGlmdHdpZHRoKCkKICAgICBlbmRpZgogICBlbmRpZgogCkBAIC03MTAsMTAgKzcwMSwxMCBAQAogICBpZiBleHRyYSA9PSAwCiAgICAgaWYgYnJhY2VfY291bnRzLnBfb3BlbiA+IGJyYWNlX2NvdW50cy5wX2Nsb3NlCiAgICAgICAiIHByZXZpb3VzIGxpbmUgaGFzIG1vcmUgKCB0aGFuICk6IGFkZCBhIHNoaWZ0d2lkdGgKLSAgICAgIGxldCBleHRyYSA9IHM6U2hpZnRXaWR0aCgpCisgICAgICBsZXQgZXh0cmEgPSBzaGlmdHdpZHRoKCkKICAgICBlbHNlaWYgYnJhY2VfY291bnRzLnBfb3BlbiA8IGJyYWNlX2NvdW50cy5wX2Nsb3NlCiAgICAgICAiIHByZXZpb3VzIGxpbmUgaGFzIG1vcmUgKSB0aGFuICg6IHN1YnRyYWN0IGEgc2hpZnR3aWR0aAotICAgICAgbGV0IGV4dHJhID0gLXM6U2hpZnRXaWR0aCgpCisgICAgICBsZXQgZXh0cmEgPSAtc2hpZnR3aWR0aCgpCiAgICAgZW5kaWYKICAgZW5kaWYKIApAQCAtODE2LDcgKzgwNyw3IEBACiAgIGxldCBpZHggPSBtYXRjaChwcmV2dGV4dCwgJ15ccypcenM8IS0tJykKICAgaWYgaWR4ID49IDAKICAgICAiIGp1c3QgYmVsb3cgY29tbWVudCBzdGFydCwgYWRkIGEgc2hpZnR3aWR0aAotICAgIHJldHVybiBpZHggKyBzOlNoaWZ0V2lkdGgoKQorICAgIHJldHVybiBpZHggKyBzaGlmdHdpZHRoKCkKICAgZW5kaWYKIAogICAiIFNvbWUgZmlsZXMgYWRkIDQgc3BhY2VzIGp1c3QgYmVsb3cgYSBUT0RPIGxpbmUuICBJdCdzIGRpZmZpY3VsdCB0byBkZXRlY3QKQEAgLTgzNyw3ICs4MjgsNyBAQAogICAgICAgcmV0dXJuIGluZGVudChsbnVtKQogICAgIGVuZGlmCiAgIGVuZGlmCi0gIHJldHVybiBiOmhpX2luZGVudC5iYXNlaW5kZW50ICsgczpTaGlmdFdpZHRoKCkKKyAgcmV0dXJuIGI6aGlfaW5kZW50LmJhc2VpbmRlbnQgKyBzaGlmdHdpZHRoKCkKIGVuZGZ1bmMgIn19fQogCiAiIFdoZW4gdGhlICJsbnVtIiBsaW5lIGVuZHMgaW4gIj4iIGZpbmQgdGhlIGxpbmUgY29udGFpbmluZyB0aGUgbWF0Y2hpbmcgIjwiLgpAQCAtOTQ3LDcgKzkzOCw3IEBACiAgIGVuZGlmCiAKICAgbGV0IGN1cnRleHQgPSB0b2xvd2VyKGdldGxpbmUodjpsbnVtKSkKLSAgbGV0IGluZGVudHVuaXQgPSBzOlNoaWZ0V2lkdGgoKQorICBsZXQgaW5kZW50dW5pdCA9IHNoaWZ0d2lkdGgoKQogCiAgIGxldCBiOmhpX25ld3N0YXRlID0ge30KICAgbGV0IGI6aGlfbmV3c3RhdGUubG51bSA9IHY6bG51bQpAQCAtMTAzMCw5ICsxMDIxLDkgQEAKICAgICAgICAgaWYgY29sKCcuJykgPiAyCiAgICAgICAgICAgbGV0IHN3ZW5kdGFnID0gbWF0Y2godGV4dCwgJ15ccyo8LycpID49IDAKICAgICAgICAgICBjYWxsIHM6Q291bnRJVGFncyh0ZXh0WzogY29sKCcuJykgLSAyXSkKLSAgICAgICAgICBsZXQgaW5kZW50ICs9IHM6bmV4dHJlbCAqIHM6U2hpZnRXaWR0aCgpCisgICAgICAgICAgbGV0IGluZGVudCArPSBzOm5leHRyZWwgKiBzaGlmdHdpZHRoKCkKICAgICAgICAgICBpZiAhc3dlbmR0YWcKLSAgICAgICAgICAgIGxldCBpbmRlbnQgKz0gczpjdXJpbmQgKiBzOlNoaWZ0V2lkdGgoKQorICAgICAgICAgICAgbGV0IGluZGVudCArPSBzOmN1cmluZCAqIHNoaWZ0d2lkdGgoKQogICAgICAgICAgIGVuZGlmCiAgICAgICAgIGVuZGlmCiAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9pZGxhbmcudmltIGIvcnVudGltZS9pbmRlbnQvaWRsYW5nLnZpbQppbmRleCBiNGM2YWU2Li43NDAyZTg2IDEwMDY0NAotLS0gYS9ydW50aW1lL2luZGVudC9pZGxhbmcudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L2lkbGFuZy52aW0KQEAgLTEsNiArMSw2IEBACiAiIElETCAoSW50ZXJhY3RpdmUgRGF0YSBMYW5ndWFnZSkgaW5kZW50IGZpbGUuCiAiIExhbmd1YWdlOiBJREwgKGZ0PWlkbGFuZykKLSIgTGFzdCBjaGFuZ2U6CTIwMTIgTWF5IDE4CisiIExhc3QgY2hhbmdlOgkyMDE3IEp1biAxMwogIiBNYWludGFpbmVyOiBBbGVrc2FuZGFyIEplbGVuYWsgPGFqZWxlbmFrIEFUIHlhaG9vLmNvbT4KIAogIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCkBAIC0zNCwyNSArMzQsMjUgQEAKICAgICIgSW5kZW50aW5nIG9mIGNvbnRpbnVlZCBsaW5lcy4KICAgIGlmIGdldGxpbmUocG51bSkgPX4gJ1wkXHMqXCg7LipcKVw9JCcKICAgICAgIGlmIGdldGxpbmUocG51bTIpICF+ICdcJFxzKlwoOy4qXClcPSQnCi0JIGxldCBjdXJpbmQgPSBjdXJpbmQrJnN3CisJIGxldCBjdXJpbmQgPSBjdXJpbmQrc2hpZnR3aWR0aCgpCiAgICAgICBlbmRpZgogICAgZWxzZQogICAgICAgaWYgZ2V0bGluZShwbnVtMikgPX4gJ1wkXHMqXCg7LipcKVw9JCcKLQkgbGV0IGN1cmluZCA9IGN1cmluZC0mc3cKKwkgbGV0IGN1cmluZCA9IGN1cmluZC1zaGlmdHdpZHRoKCkKICAgICAgIGVuZGlmCiAgICBlbmRpZgogCiAgICAiIEluZGVudGluZyBibG9ja3Mgb2Ygc3RhdGVtZW50cy4KICAgIGlmIGdldGxpbmUodjpsbnVtKSA9fj8gJ15ccypcKGVuZGlmXHxlbmRlbHNlXHxlbmR3aGlsZVx8ZW5kZm9yXHxlbmRyZXBcKVw+JwogICAgICAgaWYgZ2V0bGluZShwbnVtKSA9fj8gJ2JlZ2luXD4nCi0gICAgICBlbHNlaWYgaW5kZW50KHY6bG51bSkgPiBjdXJpbmQtJnN3Ci0JIGxldCBjdXJpbmQgPSBjdXJpbmQtJnN3CisgICAgICBlbHNlaWYgaW5kZW50KHY6bG51bSkgPiBjdXJpbmQtc2hpZnR3aWR0aCgpCisJIGxldCBjdXJpbmQgPSBjdXJpbmQtc2hpZnR3aWR0aCgpCiAgICAgICBlbHNlCiAJIHJldHVybiAtMQogICAgICAgZW5kaWYKICAgIGVsc2VpZiBnZXRsaW5lKHBudW0pID1+PyAnYmVnaW5cPicKLSAgICAgIGlmIGluZGVudCh2OmxudW0pIDwgY3VyaW5kKyZzdwotCSBsZXQgY3VyaW5kID0gY3VyaW5kKyZzdworICAgICAgaWYgaW5kZW50KHY6bG51bSkgPCBjdXJpbmQrc2hpZnR3aWR0aCgpCisJIGxldCBjdXJpbmQgPSBjdXJpbmQrc2hpZnR3aWR0aCgpCiAgICAgICBlbHNlCiAJIHJldHVybiAtMQogICAgICAgZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2lzaGQudmltIGIvcnVudGltZS9pbmRlbnQvaXNoZC52aW0KaW5kZXggZjU1ZjdkYy4uNTMxMjQ0YiAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvaXNoZC52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvaXNoZC52aW0KQEAgLTUwLDE3ICs1MCwxNyBAQAogCiAgICAgIiBBZGQKICAgICBpZiBwcmV2aW91c19saW5lID1+ICdeXHMqXDxcKGZ1bmN0aW9uXHxiZWdpblx8c3dpdGNoXHxjYXNlXHxkZWZhdWx0XHxpZi5cey19dGhlblx8ZWxzZVx8ZWxzZWlmXHx3aGlsZVx8cmVwZWF0XClcPicKLQlsZXQgaW5kID0gaW5kICsgJnN3CisJbGV0IGluZCA9IGluZCArIHNoaWZ0d2lkdGgoKQogICAgIGVuZGlmCiAKICAgICAiIFN1YnRyYWN0CiAgICAgaWYgdGhpc19saW5lID1+ICdeXHMqXDxlbmRzd2l0Y2hcPicKLQlsZXQgaW5kID0gaW5kIC0gMiAqICZzdworCWxldCBpbmQgPSBpbmQgLSAyICogc2hpZnR3aWR0aCgpCiAgICAgZWxzZWlmIHRoaXNfbGluZSA9fiAnXlxzKlw8XChiZWdpblx8ZW5kXHxlbmRpZlx8ZW5kd2hpbGVcfGVsc2VcfGVsc2VpZlx8dW50aWxcKVw+JwotCWxldCBpbmQgPSBpbmQgLSAmc3cKKwlsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAgICAgZWxzZWlmIHRoaXNfbGluZSA9fiAnXlxzKlw8XChjYXNlXHxkZWZhdWx0XClcPicKIAlpZiBwcmV2aW91c19saW5lICF+ICdeXHMqXDxzd2l0Y2hcPicKLQkgICAgbGV0IGluZCA9IGluZCAtICZzdworCSAgICBsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAJZW5kaWYKICAgICBlbmRpZgogCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9qYXZhc2NyaXB0LnZpbSBiL3J1bnRpbWUvaW5kZW50L2phdmFzY3JpcHQudmltCmluZGV4IDMwNGMwZmUuLjNiM2YzYTEgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L2phdmFzY3JpcHQudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L2phdmFzY3JpcHQudmltCkBAIC0yMzYsOSArMjM2LDEwIEBACiAgICAgICAgIFwgczpzYXZlX3BvcygnczpwcmV2aW91c190b2tlbicpICE9ICcuJwogZW5kZnVuY3Rpb24KIAotIiByZXR1cm5zIGJyYWNlbGVzcyBsZXZlbHMgc3RhcnRlZCBieSAnaScgYW5kIGFib3ZlIGxpbmVzICogJnN3LiAnbnVtJyBpcyB0aGUKLSIgbGluZU5yIHdoaWNoIGVuY2xvc2VzIHRoZSBlbnRpcmUgY29udGV4dCwgJ2NvbnQnIGlmIHdoZXRoZXIgbGluZSAnaScgKyAxIGlzCi0iIGEgY29udGludWVkIGV4cHJlc3Npb24sIHdoaWNoIGNvdWxkIGhhdmUgc3RhcnRlZCBpbiBhIGJyYWNlbGVzcyBjb250ZXh0CisiIHJldHVybnMgYnJhY2VsZXNzIGxldmVscyBzdGFydGVkIGJ5ICdpJyBhbmQgYWJvdmUgbGluZXMgKiBzaGlmdHdpZHRoKCkuCisiICdudW0nIGlzIHRoZSBsaW5lTnIgd2hpY2ggZW5jbG9zZXMgdGhlIGVudGlyZSBjb250ZXh0LCAnY29udCcgaWYgd2hldGhlcgorIiBsaW5lICdpJyArIDEgaXMgYSBjb250aW51ZWQgZXhwcmVzc2lvbiwgd2hpY2ggY291bGQgaGF2ZSBzdGFydGVkIGluIGEKKyIgYnJhY2VsZXNzIGNvbnRleHQKIGZ1bmN0aW9uIHM6aXNjb250T25lKGksbnVtLGNvbnQpCiAgIGxldCBbbDppLCBsOm51bSwgYkxdID0gW2E6aSwgYTpudW0gKyAhYTpudW0sIDBdCiAgIGxldCBwaW5kID0gYTpudW0gPyBpbmRlbnQobDpudW0pICsgczpXIDogMApkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvanNvbi52aW0gYi9ydW50aW1lL2luZGVudC9qc29uLnZpbQppbmRleCA2NDlmMmI4Li5iNjZhMDNkIDEwMDY0NAotLS0gYS9ydW50aW1lL2luZGVudC9qc29uLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9qc29uLnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVmltIGluZGVudCBmaWxlCiAiIExhbmd1YWdlOgkJSlNPTgogIiBNYW50YWluZXI6CQlFbGkgUGFycmEgPGVsaUBlbHpyLmNvbT4gaHR0cHM6Ly9naXRodWIuY29tL2VsenIvdmltLWpzb24KLSIgTGFzdCBDaGFuZ2U6ICAgICAgICAgIDIwMTQgQXVnIDI5CisiIExhc3QgQ2hhbmdlOiAgICAgICAgICAyMDE3IEp1biAxMwogIiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qYWthci92aW0tanNvbi9jb21taXQvMjBiNjUwZTIyYWE3NTBjNGFiNmE2NmFhNjQ2YmRkOTVkN2NkNTQ4YSNkaWZmLWU4MWZjMTExYjIwNTJlMzA2ZDEyNmJkOTk4OWY3YjdjCiAiIE9yaWdpbmFsIEF1dGhvcjoJUm9nZXJ6IFpoYW5nIDxyb2dlcnouemhhbmcgYXQgZ21haWwuY29tPiBodHRwOi8vZ2l0aHViLmNvbS9yb2dlcnovdmltLWpzb24KICIgQWNrbm93bGVkZ2VtZW50OiAgICAgIEJhc2VkIG9mZiBvZiB2aW0tamF2YXNjcmlwdCBtYWludGFpbmVkIGJ5IERhcnJpY2sgV2llYmUgCkBAIC0xNDEsNyArMTQxLDcgQEAKIAogICAiIElmIHRoZSBwcmV2aW91cyBsaW5lIGVuZGVkIHdpdGggYSBibG9jayBvcGVuaW5nLCBhZGQgYSBsZXZlbCBvZiBpbmRlbnQuCiAgICIgaWYgczpNYXRjaChsbnVtLCBzOmJsb2NrX3JlZ2V4KQotICAgICIgcmV0dXJuIGluZGVudChsbnVtKSArICZzdworICAgICIgcmV0dXJuIGluZGVudChsbnVtKSArIHNoaWZ0d2lkdGgoKQogICAiIGVuZGlmCiAKICAgIiBJZiB0aGUgcHJldmlvdXMgbGluZSBjb250YWluZWQgYW4gb3BlbmluZyBicmFja2V0LCBhbmQgd2UgYXJlIHN0aWxsIGluIGl0LApAQCAtMTQ5LDcgKzE0OSw3IEBACiAgIGlmIGxpbmUgPX4gJ1tbKHtdJwogICAgIGxldCBjb3VudHMgPSBzOkxpbmVIYXNPcGVuaW5nQnJhY2tldHMobG51bSkKICAgICBpZiBjb3VudHNbMF0gPT0gJzEnIHx8IGNvdW50c1sxXSA9PSAnMScgfHwgY291bnRzWzJdID09ICcxJwotICAgICAgcmV0dXJuIGluZCArICZzdworICAgICAgcmV0dXJuIGluZCArIHNoaWZ0d2lkdGgoKQogICAgIGVsc2UKICAgICAgIGNhbGwgY3Vyc29yKHY6bG51bSwgdmNvbCkKICAgICBlbmQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L2xpcXVpZC52aW0gYi9ydW50aW1lL2luZGVudC9saXF1aWQudmltCmluZGV4IGY4ZTFjODMuLjdiZWIwMzggMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L2xpcXVpZC52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvbGlxdWlkLnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVmltIGluZGVudCBmaWxlCiAiIExhbmd1YWdlOiAgICAgTGlxdWlkCiAiIE1haW50YWluZXI6ICAgVGltIFBvcGUgPHZpbU5PU1BBTUB0cG9wZS5vcmc+Ci0iIExhc3QgQ2hhbmdlOgkyMDE2IEF1ZyAyOQorIiBMYXN0IENoYW5nZToJMjAxNyBKdW4gMTMKIAogaWYgZXhpc3RzKCdiOmRpZF9pbmRlbnQnKQogICBmaW5pc2gKQEAgLTU0LDcgKzU0LDcgQEAKICAgbGV0IGxpbmUgID0gc3Vic3RpdHV0ZShsaW5lLCdcQ15cJShccyp7JVxzKmVuZFx3KlxzKiV9XClcKycsJycsJycpCiAgIGxldCBsaW5lIC49IG1hdGNoc3RyKGNsaW5lLCdcQ15cJShccyp7JVxzKmVuZFx3KlxzKiV9XClcKycpCiAgIGxldCBjbGluZSA9IHN1YnN0aXR1dGUoY2xpbmUsJ1xDXlwlKFxzKnslXHMqZW5kXHcqXHMqJX1cKVwrJywnJywnJykKLSAgbGV0IHN3ID0gZXhpc3RzKCcqc2hpZnR3aWR0aCcpID8gc2hpZnR3aWR0aCgpIDogJnN3CisgIGxldCBzdyA9IHNoaWZ0d2lkdGgoKQogICBsZXQgaW5kICs9IHN3ICogczpjb3VudChsaW5lLCd7JVxzKlwlKGlmXHxlbHNpZlx8ZWxzZVx8dW5sZXNzXHxpZmNoYW5nZWRcfGNhc2VcfHdoZW5cfGZvclx8ZW1wdHlcfHRhYmxlcm93XHxjYXB0dXJlXClcPicpCiAgIGxldCBpbmQgLT0gc3cgKiBzOmNvdW50KGxpbmUsJ3slXHMqZW5kXCUoaWZcfHVubGVzc1x8aWZjaGFuZ2VkXHxjYXNlXHxmb3JcfHRhYmxlcm93XHxjYXB0dXJlXClcPicpCiAgIGxldCBpbmQgLT0gc3cgKiBzOmNvdW50KGNsaW5lLCd7JVxzKlwlKGVsc2lmXHxlbHNlXHx3aGVuXHxlbXB0eVwpXD4nKQpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvbG9ndGFsay52aW0gYi9ydW50aW1lL2luZGVudC9sb2d0YWxrLnZpbQppbmRleCA5OWU2ZWM4Li41YjY5NjYzIDEwMDY0NAotLS0gYS9ydW50aW1lL2luZGVudC9sb2d0YWxrLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9sb2d0YWxrLnZpbQpAQCAtMzgsMjQgKzM4LDI0IEBACiAJZW5kaWYKIAkiIENoZWNrIGZvciBlbnRpdHkgb3BlbmluZyBkaXJlY3RpdmUgb24gcHJldmlvdXMgbGluZQogCWlmIHBsaW5lID1+ICdeXHMqOi1cc1wob2JqZWN0XHxwcm90b2NvbFx8Y2F0ZWdvcnlcKVx6ZSguKiwkJwotCQlsZXQgaW5kID0gaW5kICsgJnN3CisJCWxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKIAkiIENoZWNrIGZvciBjbGF1c2UgaGVhZCBvbiBwcmV2aW91cyBsaW5lCiAJZWxzZWlmIHBsaW5lID1+ICc6LVxzKlwoJS4qXClcPyQnCi0JCWxldCBpbmQgPSBpbmQgKyAmc3cKKwkJbGV0IGluZCA9IGluZCArIHNoaWZ0d2lkdGgoKQogCSIgQ2hlY2sgZm9yIGVudGl0eSBjbG9zaW5nIGRpcmVjdGl2ZSBvbiBwcmV2aW91cyBsaW5lCiAJZWxzZWlmIHBsaW5lID1+ICdeXHMqOi1cc2VuZF9cKG9iamVjdFx8cHJvdG9jb2xcfGNhdGVnb3J5XClcLlwoJS4qXClcPyQnCi0JCWxldCBpbmQgPSBpbmQgLSAmc3cKKwkJbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogCSIgQ2hlY2sgZm9yIGVuZCBvZiBjbGF1c2Ugb24gcHJldmlvdXMgbGluZQogCWVsc2VpZiBwbGluZSA9fiAnXC5ccypcKCUuKlwpXD8kJwotCQlsZXQgaW5kID0gaW5kIC0gJnN3CisJCWxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkKIAllbmRpZgogCSIgQ2hlY2sgZm9yIG9wZW5pbmcgY29uZGl0aW9uYWwgb24gcHJldmlvdXMgbGluZQogCWlmIHBsaW5lID1+ICdeXHMqXChbKDtdXHwtPlwpJyAmJiBwbGluZSAhfiAnXC5ccypcKCUuKlwpXD8kJyAmJiBwbGluZSAhfiAnXi4qXChbKV1bLF1ccypcKCUuKlwpXD8kXCknCi0JCWxldCBpbmQgPSBpbmQgKyAmc3cKKwkJbGV0IGluZCA9IGluZCArIHNoaWZ0d2lkdGgoKQogCWVuZGlmCiAJIiBDaGVjayBmb3IgY2xvc2luZyBhbiB1bmNsb3NlZCBwYXJlbiwgb3IgbWlkZGxlIDsgb3IgLT4KIAlpZiBsaW5lID1+ICdeXHMqXChbKTtdXHwtPlwpJwotCQlsZXQgaW5kID0gaW5kIC0gJnN3CisJCWxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkKIAllbmRpZgogCXJldHVybiBpbmQKIGVuZGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9sdWEudmltIGIvcnVudGltZS9pbmRlbnQvbHVhLnZpbQppbmRleCBkMWQyYzBkLi42MDRjZDMzIDEwMDY0NAotLS0gYS9ydW50aW1lL2luZGVudC9sdWEudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L2x1YS52aW0KQEAgLTIsNyArMiw3IEBACiAiIExhbmd1YWdlOglMdWEgc2NyaXB0CiAiIE1haW50YWluZXI6CU1hcmN1cyBBdXJlbGl1cyBGYXJpYXMgPG1hcmN1cy5jZiAnYXQnIGJvbC5jb20uYnI+CiAiIEZpcnN0IEF1dGhvcjoJTWF4IElzY2hlbmtvIDxtZmkgJ2F0JyB1a3IubmV0PgotIiBMYXN0IENoYW5nZToJMjAxNiBKYW4gMTAKKyIgTGFzdCBDaGFuZ2U6CTIwMTcgSnVuIDEzCiAKICIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgogaWYgZXhpc3RzKCJiOmRpZF9pbmRlbnQiKQpAQCAtNDgsNyArNDgsNyBAQAogICAgICIgQWRkICdzaGlmdHdpZHRoJyBpZiB3aGF0IHdlIGZvdW5kIHByZXZpb3VzbHkgaXMgbm90IGluIGEgY29tbWVudCBhbmQKICAgICAiIGFuICJlbmQiIG9yICJ1bnRpbCIgaXMgbm90IHByZXNlbnQgb24gdGhlIHNhbWUgbGluZS4KICAgICBpZiBzeW5JRGF0dHIoc3luSUQocHJldmxudW0sIG1pZHggKyAxLCAxKSwgIm5hbWUiKSAhPSAibHVhQ29tbWVudCIgJiYgcHJldmxpbmUgIX4gJ1w8ZW5kXD5cfFw8dW50aWxcPicKLSAgICAgIGxldCBpbmQgPSBpbmQgKyAmc2hpZnR3aWR0aAorICAgICAgbGV0IGluZCA9IGluZCArIHNoaWZ0d2lkdGgoKQogICAgIGVuZGlmCiAgIGVuZGlmCiAKQEAgLTU2LDcgKzU2LDcgQEAKICAgIiBUaGlzIGlzIHRoZSBwYXJ0IHRoYXQgcmVxdWlyZXMgJ2luZGVudGtleXMnLgogICBsZXQgbWlkeCA9IG1hdGNoKGdldGxpbmUodjpsbnVtKSwgJ15ccypcJShlbmRcPlx8ZWxzZVw+XHxlbHNlaWZcPlx8dW50aWxcPlx8fVwpJykKICAgaWYgbWlkeCAhPSAtMSAmJiBzeW5JRGF0dHIoc3luSUQodjpsbnVtLCBtaWR4ICsgMSwgMSksICJuYW1lIikgIT0gImx1YUNvbW1lbnQiCi0gICAgbGV0IGluZCA9IGluZCAtICZzaGlmdHdpZHRoCisgICAgbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogICBlbmRpZgogCiAgIHJldHVybiBpbmQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L21hdGxhYi52aW0gYi9ydW50aW1lL2luZGVudC9tYXRsYWIudmltCmluZGV4IDdiY2NjN2MuLjZhMzE2MjQgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L21hdGxhYi52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvbWF0bGFiLnZpbQpAQCAtNDQsOSArNDQsOSBAQAogICAgICIgU2VlIGlmIHRoaXMgbGluZSBkb2VzIG5vdCBmb2xsb3cgdGhlIGxpbmUgcmlnaHQgYWZ0ZXIgYW4gb3BlbmJsb2NrCiAgICAgaWYgZ2V0bGluZShwbG51bSkgPX4gJ15ccypcKGZvclx8aWZcfGVsc2VcfGVsc2VpZlx8Y2FzZVx8d2hpbGVcfHN3aXRjaFx8dHJ5XHxvdGhlcndpc2VcfGNhdGNoXClcPicKICAgICAiIFNlZSBpZiB0aGUgdXNlciBoYXMgYWxyZWFkeSBkZWRlbnRlZAotICAgIGVsc2VpZiBpbmRlbnQodjpsbnVtKSA+IGN1cmluZCAtICZzdworICAgIGVsc2VpZiBpbmRlbnQodjpsbnVtKSA+IGN1cmluZCAtIHNoaWZ0d2lkdGgoKQogICAgICAgIiBJZiBub3QsIHJlY29tbWVuZCBvbmUgZGVkZW50Ci0JbGV0IGN1cmluZCA9IGN1cmluZCAtICZzdworCWxldCBjdXJpbmQgPSBjdXJpbmQgLSBzaGlmdHdpZHRoKCkKICAgICBlbHNlCiAgICAgICAiIE90aGVyd2lzZSwgdHJ1c3QgdGhlIHVzZXIKICAgICAgIHJldHVybiAtMQpAQCAtNTYsOSArNTYsOSBAQAogICAiIElmIHRoZSBwcmV2aW91cyBsaW5lIG9wZW5lZCBhIGJsb2NrCiAgIGVsc2VpZiBnZXRsaW5lKHBsbnVtKSA9fiAnXlxzKlwoZm9yXHxpZlx8ZWxzZVx8ZWxzZWlmXHxjYXNlXHx3aGlsZVx8c3dpdGNoXHx0cnlcfG90aGVyd2lzZVx8Y2F0Y2hcKVw+JwogICAgICIgU2VlIGlmIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGluZGVudGVkCi0gICAgaWYgaW5kZW50KHY6bG51bSkgPCBjdXJpbmQgKyAmc3cKKyAgICBpZiBpbmRlbnQodjpsbnVtKSA8IGN1cmluZCArIHNoaWZ0d2lkdGgoKQogICAgICAgIklmIG5vdCwgcmVjb21tZW5kIGluZGVudAotICAgICAgbGV0IGN1cmluZCA9IGN1cmluZCArICZzdworICAgICAgbGV0IGN1cmluZCA9IGN1cmluZCArIHNoaWZ0d2lkdGgoKQogICAgIGVsc2UKICAgICAgICIgT3RoZXJ3aXNlLCB0cnVzdCB0aGUgdXNlcgogICAgICAgcmV0dXJuIC0xCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9tbWEudmltIGIvcnVudGltZS9pbmRlbnQvbW1hLnZpbQppbmRleCAzNTZiODc2Li44Mjk4YWQ5IDEwMDY0NAotLS0gYS9ydW50aW1lL2luZGVudC9tbWEudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L21tYS52aW0KQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAiIGFsc28sIGluZGVudCBvbmx5IGlmIHRoaXMgbGluZSBpZiB0aGlzIGxpbmUgaXNuJ3Qgc3RhcnRpbmcgYSBuZXcKICAgICAiIGJsb2NrLi4uIFRPRE8gLSBmaXggdGhpcyB3aXRoIGluZGVudGtleXM/CiAgICAgaWYgZ2V0bGluZSh2OmxudW0tMSkgPX4gJ1xcXEA8IVwlKFxbW15cXV0qXHwoW14pXSpcfHtbXn1dKlwpJCcgJiYgZ2V0bGluZSh2OmxudW0pICF+ICdcc1wrW1xbKHtdJwotICAgICAgICBsZXQgaW5kID0gaW5kKyZzdworICAgICAgICBsZXQgaW5kID0gaW5kK3NoaWZ0d2lkdGgoKQogICAgIGVuZGlmCiAKICAgICAiIGlmIHRoaXMgbGluZSBoYWQgdW5tYXRjaGVkIGNsb3NpbmcgYmxvY2ssCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9vY2FtbC52aW0gYi9ydW50aW1lL2luZGVudC9vY2FtbC52aW0KaW5kZXggM2JkNjVjNi4uOGZlOWRlMyAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvb2NhbWwudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L29jYW1sLnZpbQpAQCAtNCw3ICs0LDcgQEAKICIgICAgICAgICAgICAgICBNaWtlIExlYXJ5ICAgICAgICAgICA8bGVhcnlAbndsaW5rLmNvbT4KICIgICAgICAgICAgICAgICBNYXJrdXMgTW90dGwgICAgICAgICA8bWFya3VzLm1vdHRsQGdtYWlsLmNvbT4KICIgVVJMOiAgICAgICAgICBodHRwOi8vd3d3Lm9jYW1sLmluZm8vdmltL2luZGVudC9vY2FtbC52aW0KLSIgTGFzdCBDaGFuZ2U6ICAyMDEzIEp1biAyOQorIiBMYXN0IENoYW5nZTogIDIwMTcgSnVuIDEzCiAiICAgICAgICAgICAgICAgMjAwNSBKdW4gMjUgLSBGaXhlZCBtdWx0aXBsZSBidWdzIGR1ZSB0byAnZWxzZVxucmV0dXJuIGluZCcgd29ya2luZwogIiAgICAgICAgICAgICAgIDIwMDUgTWF5IDA5IC0gQWRkZWQgYW4gb3B0aW9uIHRvIG5vdCBpbmRlbnQgT0NhbWwtaW5kZW50cyBzcGVjaWFsbHkgKE1NKQogIiAgICAgICAgICAgICAgIDIwMTMgSnVuZSAgIC0gY29tbWVudGVkIHRleHR3aWR0aCAoTWFyYyBXZWJlcikKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiAgIiBSZXR1cm4gZG91YmxlICdzaGlmdHdpZHRoJyBhZnRlciBsaW5lcyBtYXRjaGluZzoKICBpZiBsbGluZSA9fiAnXlxzKnwuKi0+XHMqJCcKLSAgIHJldHVybiBpbmQgKyAmc3cgKyAmc3cKKyAgIHJldHVybiBpbmQgKyAyICogc2hpZnR3aWR0aCgpCiAgZW5kaWYKIAogIGxldCBsaW5lID0gZ2V0bGluZSh2OmxudW0pCkBAIC0xNzIsNyArMTcyLDcgQEAKICAiIEluZGVudCBpZiBjdXJyZW50IGxpbmUgYmVnaW5zIHdpdGggJ2FuZCc6CiAgZWxzZWlmIGxpbmUgPX4gJ15ccyphbmRcPicKICAgIGlmIGxsaW5lICF+ICdeXHMqXChhbmRcfGxldFx8dHlwZVwpXD5cfFw8ZW5kXHMqJCcKLSAgICAgcmV0dXJuIGluZCAtICZzdworICAgICByZXR1cm4gaW5kIC0gc2hpZnR3aWR0aCgpCiAgICBlbmRpZgogCiAgIiBJbmRlbnQgaWYgY3VycmVudCBsaW5lIGJlZ2lucyB3aXRoICd3aXRoJzoKQEAgLTE5OSwxNCArMTk5LDE0IEBACiAgIiBvciAnbWV0aG9kJzoKICBlbHNlaWYgbGluZSA9fiAnXlxzKlwoY29uc3RyYWludFx8aW5oZXJpdFx8aW5pdGlhbGl6ZXJcfG1ldGhvZFwpXD4nCiAgICBpZiBsbGluZSAhfiBzOm9iagotICAgICByZXR1cm4gaW5kZW50KHNlYXJjaCgnXDxcKG9iamVjdFx8b2JqZWN0XHMqKC4qKVwpXHMqJCcsICdiVycpKSArICZzdworICAgICByZXR1cm4gaW5kZW50KHNlYXJjaCgnXDxcKG9iamVjdFx8b2JqZWN0XHMqKC4qKVwpXHMqJCcsICdiVycpKSArIHNoaWZ0d2lkdGgoKQogICAgZW5kaWYKIAogIGVuZGlmCiAKICAiIEFkZCBhICdzaGlmdHdpZHRoJyBhZnRlciBsaW5lcyBlbmRpbmcgd2l0aDoKICBpZiBsbGluZSA9fiAnXCg6XHw9XHwtPlx8PC1cfChcfFxbXHx7XHx7PFx8XFt8XHxcWzxcfFw8XChiZWdpblx8ZG9cfGVsc2VcfGZ1blx8ZnVuY3Rpb25cfGZ1bmN0b3JcfGlmXHxpbml0aWFsaXplclx8b2JqZWN0XHxwYXJzZXJcfHByaXZhdGVcfHNpZ1x8c3RydWN0XHx0aGVuXHx0cnlcKVx8XDxvYmplY3RccyooLiopXClccyokJwotICAgbGV0IGluZCA9IGluZCArICZzdworICAgbGV0IGluZCA9IGluZCArIHNoaWZ0d2lkdGgoKQogCiAgIiBCYWNrIHRvIG5vcm1hbCBpbmRlbnQgYWZ0ZXIgbGluZXMgZW5kaW5nIHdpdGggJzs7JzoKICBlbHNlaWYgbGxpbmUgPX4gJzs7XHMqJCcgJiYgbGxpbmUgIX4gJ15ccyo7OycKQEAgLTI2Myw3ICsyNjMsNyBAQAogCiAgIiBTdWJ0cmFjdCBhICdzaGlmdHdpZHRoJyBhZnRlciBsaW5lcyBtYXRjaGluZyAnbWF0Y2ggLi4uIHdpdGggcGFyc2VyJzoKICBpZiBsbGluZSA9fiAnXDxtYXRjaFw+LipcPHdpdGhcPlxzKlw8cGFyc2VyXHMqJCcKLSAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgIGxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkKICBlbmRpZgogCiAgcmV0dXJuIGluZApkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvb2NjYW0udmltIGIvcnVudGltZS9pbmRlbnQvb2NjYW0udmltCmluZGV4IGJlYmIwNTIuLjRhY2Q0MmUgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L29jY2FtLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9vY2NhbS52aW0KQEAgLTEzMSw3ICsxMzEsNyBAQAogICBpZiBsaW5lID1+IHM6Rmlyc3RMZXZlbEluZGVudCB8fCAobGluZSA9fiBzOkZpcnN0TGV2ZWxOb25Db2xvbkVuZEluZGVudCAmJiBsaW5lICF+IHM6Q29sb25FbmQpCiAJXCB8fCAobGluZSAhfiBzOkNvbG9uU3RhcnQgJiYgKHByZXZsaW5lID1+IHM6U2Vjb25kTGV2ZWxJbmRlbnQKIAlcIHx8IChwcmV2bGluZSA9fiBzOlNlY29uZExldmVsTm9uQ29sb25FbmRJbmRlbnQgJiYgcHJldmxpbmUgIX4gczpDb2xvbkVuZCkpKQotICAgIGxldCBjdXJpbmRlbnQgPSBjdXJpbmRlbnQgKyAmc2hpZnR3aWR0aAorICAgIGxldCBjdXJpbmRlbnQgPSBjdXJpbmRlbnQgKyBzaGlmdHdpZHRoKCkKIAogICAgICIgUmVzdG9yZSBtYWdpYwogICAgIGlmICFzYXZlX21hZ2ljfHNldGxvY2FsIG5vbWFnaWN8ZW5kaWYKQEAgLTE1Myw3ICsxNTMsNyBAQAogCiAgIHdoaWxlICFmb3VuZAogCi0gICAgaWYgaW5kZW50KHByZXZsaW5lbnVtKSA9PSBjdXJpbmRlbnQgLSAmc2hpZnR3aWR0aAorICAgIGlmIGluZGVudChwcmV2bGluZW51bSkgPT0gY3VyaW5kZW50IC0gc2hpZnR3aWR0aCgpCiAgICAgICBsZXQgZm91bmQgPSAxCiAgICAgZW5kaWYKIApAQCAtMTcxLDcgKzE3MSw3IEBACiAKICAgaWYgcHJldmxpbmVudW0gPiAwCiAgICAgaWYgZ2V0bGluZShwcmV2bGluZW51bSkgPX4gczpTZWNvbmRMZXZlbEluZGVudAotICAgICAgbGV0IGN1cmluZGVudCA9IGN1cmluZGVudCArICZzaGlmdHdpZHRoCisgICAgICBsZXQgY3VyaW5kZW50ID0gY3VyaW5kZW50ICsgc2hpZnR3aWR0aCgpCiAgICAgZW5kaWYKICAgZW5kaWYKIApkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvcGFzY2FsLnZpbSBiL3J1bnRpbWUvaW5kZW50L3Bhc2NhbC52aW0KaW5kZXggNmRkMzAzMC4uYzc5NTVkNiAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvcGFzY2FsLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9wYXNjYWwudmltCkBAIC0yLDcgKzIsNyBAQAogIiBMYW5ndWFnZTogICAgUGFzY2FsCiAiIE1haW50YWluZXI6ICBOZWlsIENhcnRlciA8bi5jYXJ0ZXJAc3dhbnNlYS5hYy51az4KICIgQ3JlYXRlZDogICAgIDIwMDQgSnVsIDEzCi0iIExhc3QgQ2hhbmdlOiAyMDExIEFwciAwMQorIiBMYXN0IENoYW5nZTogMjAxNyBKdW4gMTMKICIKICIgVGhpcyBpcyB2ZXJzaW9uIDIuMCwgYSBjb21wbGV0ZSByZXdyaXRlLgogIgpAQCAtMTAyLDEyICsxMDIsMTIgQEAKIAogCSIgSWYgdGhlIFBSRVZJT1VTIExJTkUgZW5kZWQgaW4gdGhlc2UgaXRlbXMsIGFsd2F5cyBpbmRlbnQKIAlpZiBwcmV2X2NvZGVsaW5lID1+ICdcPFwodHlwZVx8Y29uc3RcfHZhclwpJCcKLQkJcmV0dXJuIGluZG50ICsgJnNoaWZ0d2lkdGgKKwkJcmV0dXJuIGluZG50ICsgc2hpZnR3aWR0aCgpCiAJZW5kaWYKIAogCWlmIHByZXZfY29kZWxpbmUgPX4gJ1w8cmVwZWF0JCcKIAkJaWYgdGhpc19jb2RlbGluZSAhfiAnXlxzKnVudGlsXD4nCi0JCQlyZXR1cm4gaW5kbnQgKyAmc2hpZnR3aWR0aAorCQkJcmV0dXJuIGluZG50ICsgc2hpZnR3aWR0aCgpCiAJCWVsc2UKIAkJCXJldHVybiBpbmRudAogCQllbmRpZgpAQCAtMTE1LDcgKzExNSw3IEBACiAKIAlpZiBwcmV2X2NvZGVsaW5lID1+ICdcPFwoYmVnaW5cfHJlY29yZFwpJCcKIAkJaWYgdGhpc19jb2RlbGluZSAhfiAnXlxzKmVuZFw+JwotCQkJcmV0dXJuIGluZG50ICsgJnNoaWZ0d2lkdGgKKwkJCXJldHVybiBpbmRudCArIHNoaWZ0d2lkdGgoKQogCQllbHNlCiAJCQlyZXR1cm4gaW5kbnQKIAkJZW5kaWYKQEAgLTEyNSwxMCArMTI1LDEwIEBACiAJIiBmb2xsb3dlZCBieSAiYmVnaW4iCiAJaWYgcHJldl9jb2RlbGluZSA9fiAnXDxcKFx8ZWxzZVx8dGhlblx8ZG9cKSQnIHx8IHByZXZfY29kZWxpbmUgPX4gJzokJwogCQlpZiB0aGlzX2NvZGVsaW5lICF+ICdeXHMqYmVnaW5cPicKLQkJCXJldHVybiBpbmRudCArICZzaGlmdHdpZHRoCisJCQlyZXR1cm4gaW5kbnQgKyBzaGlmdHdpZHRoKCkKIAkJZWxzZQogCQkJIiBJZiBpdCBkb2VzIHN0YXJ0IHdpdGggImJlZ2luIiB0aGVuIGtlZXAgdGhlIHNhbWUgaW5kZW50Ci0JCQkicmV0dXJuIGluZG50ICsgJnNoaWZ0d2lkdGgKKwkJCSJyZXR1cm4gaW5kbnQgKyBzaGlmdHdpZHRoKCkKIAkJCXJldHVybiBpbmRudAogCQllbmRpZgogCWVuZGlmCkBAIC0xMzcsNyArMTM3LDcgQEAKIAkiIG9ubHkgdGhlIGxpbmUgYmVmb3JlIHRoZSBjdXJyZW50IG9uZS4gVE9ETzogR2V0IGl0IHdvcmtpbmcgZm9yCiAJIiBwYXJhbWV0ZXIgbGlzdHMgbG9uZ2VyIHRoYW4gdHdvIGxpbmVzLgogCWlmIHByZXZfY29kZWxpbmUgPX4gJyhbXildXCskJwotCQlyZXR1cm4gaW5kbnQgKyAmc2hpZnR3aWR0aAorCQlyZXR1cm4gaW5kbnQgKyBzaGlmdHdpZHRoKCkKIAllbmRpZgogCiAKQEAgLTE0Niw3ICsxNDYsNyBAQAogCSIgTGluZXMgc3RhcnRpbmcgd2l0aCAiZWxzZSIsIGJ1dCBub3QgZm9sbG93aW5nIGxpbmUgZW5kaW5nIHdpdGgKIAkiICJlbmQiLgogCWlmIHRoaXNfY29kZWxpbmUgPX4gJ15ccyplbHNlXD4nICYmIHByZXZfY29kZWxpbmUgIX4gJ1w8ZW5kJCcKLQkJcmV0dXJuIGluZG50IC0gJnNoaWZ0d2lkdGgKKwkJcmV0dXJuIGluZG50IC0gc2hpZnR3aWR0aCgpCiAJZW5kaWYKIAogCSIgTGluZXMgYWZ0ZXIgYSBzaW5nbGUtc3RhdGVtZW50IGJyYW5jaC9sb29wLgpAQCAtMTYwLDE2ICsxNjAsMTYgQEAKIAkJIiBhZGRpdGlvbmFsIHVuaW5kZW50YXRpb24uCiAJCWlmIHRoaXNfY29kZWxpbmUgPX4gJ15ccypcKGVuZDtcfGV4Y2VwdFx8ZmluYWxseVx8XCkkJwogCQkJIiBOb3RlIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGZyb20gaGVyZS4KLQkJCXJldHVybiBpbmRudCAtICZzaGlmdHdpZHRoIC0gJnNoaWZ0d2lkdGgKKwkJCXJldHVybiBpbmRudCAtIDIgKiBzaGlmdHdpZHRoKCkKIAkJZW5kaWYKLQkJcmV0dXJuIGluZG50IC0gJnNoaWZ0d2lkdGgKKwkJcmV0dXJuIGluZG50IC0gc2hpZnR3aWR0aCgpCiAJZW5kaWYKIAogCSIgTGluZXMgc3RhcnRpbmcgd2l0aCAidW50aWwiIG9yICJlbmQiLiBUaGlzIHJ1bGUgbXVzdCBiZSBvdmVycmlkZGVuCiAJIiBieSB0aGUgb25lIGZvciAiZW5kIiBhZnRlciBhIHNpbmdsZS1zdGF0ZW1lbnQgYnJhbmNoL2xvb3AuIEluCiAJIiBvdGhlciB3b3JkcyB0aGF0IHJ1bGUgc2hvdWxkIGNvbWUgYmVmb3JlIHRoaXMgb25lLgogCWlmIHRoaXNfY29kZWxpbmUgPX4gJ15ccypcKGVuZFx8dW50aWxcKVw+JwotCQlyZXR1cm4gaW5kbnQgLSAmc2hpZnR3aWR0aAorCQlyZXR1cm4gaW5kbnQgLSBzaGlmdHdpZHRoKCkKIAllbmRpZgogCiAKQEAgLTIwMSw3ICsyMDEsNyBAQAogCiAJIiBJZiB0aGUgUFJFVklPVVMgTElORSBlbmRlZCBpbiB0aGVzZSBpdGVtcywgYWx3YXlzIGluZGVudC4KIAlpZiBwcmV2X2NvZGVsaW5lID1+ICdeXHMqXCh1bml0XHx1c2VzXHx0cnlcfGV4Y2VwdFx8ZmluYWxseVx8cHJpdmF0ZVx8cHJvdGVjdGVkXHxwdWJsaWNcfHB1Ymxpc2hlZFwpJCcKLQkJcmV0dXJuIGluZG50ICsgJnNoaWZ0d2lkdGgKKwkJcmV0dXJuIGluZG50ICsgc2hpZnR3aWR0aCgpCiAJZW5kaWYKIAogCSIgPz8/PyBJbmRlbnQgInByb2NlZHVyZSIgYW5kICJmdW5jdGlvbnMiIGlmIHRoZXkgYXBwZWFyIHdpdGhpbiBhbgpAQCAtMjEyLDExICsyMTIsMTEgQEAKIAkiIFVOSU5ERU5UIE9OQ0UKIAogCWlmIHRoaXNfY29kZWxpbmUgPX4gJ15ccypcKGV4Y2VwdFx8ZmluYWxseVwpJCcKLQkJcmV0dXJuIGluZG50IC0gJnNoaWZ0d2lkdGgKKwkJcmV0dXJuIGluZG50IC0gc2hpZnR3aWR0aCgpCiAJZW5kaWYKIAogCWlmIHRoaXNfY29kZWxpbmUgPX4gJ15ccypcKHByaXZhdGVcfHByb3RlY3RlZFx8cHVibGljXHxwdWJsaXNoZWRcKSQnCi0JCXJldHVybiBpbmRudCAtICZzaGlmdHdpZHRoCisJCXJldHVybiBpbmRudCAtIHNoaWZ0d2lkdGgoKQogCWVuZGlmCiAKIApkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvcGVybC52aW0gYi9ydW50aW1lL2luZGVudC9wZXJsLnZpbQppbmRleCBmYzRiNmEzLi5jZjI1NmVhIDEwMDY0NAotLS0gYS9ydW50aW1lL2luZGVudC9wZXJsLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9wZXJsLnZpbQpAQCAtMyw3ICszLDcgQEAKICIgTWFpbnRhaW5lcjogICAgdmltLXBlcmwgPHZpbS1wZXJsQGdvb2dsZWdyb3Vwcy5jb20+CiAiIEhvbWVwYWdlOiAgICAgIGh0dHA6Ly9naXRodWIuY29tL3ZpbS1wZXJsL3ZpbS1wZXJsCiAiIEJ1Z3MvcmVxdWVzdHM6IGh0dHA6Ly9naXRodWIuY29tL3ZpbS1wZXJsL3ZpbS1wZXJsL2lzc3VlcwotIiBMYXN0IENoYW5nZTogICAyMDEzLTA3LTI0CisiIExhc3QgQ2hhbmdlOiAgIDIwMTcgSnVuIDEzCiAKICIgU3VnZ2VzdGlvbnMgYW5kIGltcHJvdmVtZW50cyBieSA6CiAiICAgQWFyb24gSi4gU2hlcm1hbiAodXNlIHN5bnRheCBmb3IgaGludHMpCkBAIC0xMzgsOSArMTM4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFwgfHwgc3luaWQgPX4gJ15wZXJsXChTdWJcfEJsb2NrXHxQYWNrYWdlXClGb2xkJwogICAgICAgICAgICAgICAgIGxldCBicmFjZSA9IHN0cnBhcnQobGluZSwgYnJhY2Vwb3MsIDEpCiAgICAgICAgICAgICAgICAgaWYgYnJhY2UgPT0gJygnIHx8IGJyYWNlID09ICd7JyB8fCBicmFjZSA9PSAnWycKLSAgICAgICAgICAgICAgICAgICAgbGV0IGluZCA9IGluZCArICZzdworICAgICAgICAgICAgICAgICAgICBsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgICAgICAgICAgICAgICAgICAgIGxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkKICAgICAgICAgICAgICAgICBlbmRpZgogICAgICAgICAgICAgZW5kaWYKICAgICAgICAgICAgIGxldCBicmFjZXBvcyA9IG1hdGNoKGxpbmUsIGJyYWNlY2xhc3MsIGJyYWNlcG9zICsgMSkKQEAgLTE1MiwyNSArMTUyLDI1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBcIHx8IHN5bmlkID09ICJwZXJsTWF0Y2hTdGFydEVuZCIKICAgICAgICAgICAgICAgICAgICAgICAgIFwgfHwgc3luaWQgPT0gInBlcmxCcmFjZXMiCiAgICAgICAgICAgICAgICAgICAgICAgICBcIHx8IHN5bmlkID1+ICdecGVybFwoU3ViXHxCbG9ja1x8UGFja2FnZVwpRm9sZCcKLSAgICAgICAgICAgICAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgICAgICAgICAgICAgICAgbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogICAgICAgICAgICAgZW5kaWYKICAgICAgICAgZW5kaWYKICAgICBlbHNlCiAgICAgICAgIGlmIGxpbmUgPX4gJ1t7WyhdXHMqXCgjW15dKX1dKlwpXD0kJwotICAgICAgICAgICAgbGV0IGluZCA9IGluZCArICZzdworICAgICAgICAgICAgbGV0IGluZCA9IGluZCArIHNoaWZ0d2lkdGgoKQogICAgICAgICBlbmRpZgogICAgICAgICBpZiBjbGluZSA9fiAnXlxzKltdKX1dJwotICAgICAgICAgICAgbGV0IGluZCA9IGluZCAtICZzdworICAgICAgICAgICAgbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogICAgICAgICBlbmRpZgogICAgIGVuZGlmCiAKICAgICAiIEluZGVudCBsaW5lcyB0aGF0IGJlZ2luIHdpdGggJ29yJyBvciAnYW5kJwogICAgIGlmIGNsaW5lID1+ICdeXHMqXChvclx8YW5kXClcPicKICAgICAgICAgaWYgbGluZSAhfiAnXlxzKlwob3JcfGFuZFwpXD4nCi0gICAgICAgICAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgICAgICAgICAgICBsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgICAgICAgIGVuZGlmCiAgICAgZWxzZWlmIGxpbmUgPX4gJ15ccypcKG9yXHxhbmRcKVw+JwotICAgICAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgICAgICAgIGxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkKICAgICBlbmRpZgogCiAgICAgcmV0dXJuIGluZApkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvcGVybDYudmltIGIvcnVudGltZS9pbmRlbnQvcGVybDYudmltCmluZGV4IGZmMmE1NzkuLjg1NjFjOGMgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L3Blcmw2LnZpbQorKysgYi9ydW50aW1lL2luZGVudC9wZXJsNi52aW0KQEAgLTMsNyArMyw3IEBACiAiIE1haW50YWluZXI6ICAgIHZpbS1wZXJsIDx2aW0tcGVybEBnb29nbGVncm91cHMuY29tPgogIiBIb21lcGFnZTogICAgICBodHRwOi8vZ2l0aHViLmNvbS92aW0tcGVybC92aW0tcGVybAogIiBCdWdzL3JlcXVlc3RzOiBodHRwOi8vZ2l0aHViLmNvbS92aW0tcGVybC92aW0tcGVybC9pc3N1ZXMKLSIgTGFzdCBDaGFuZ2U6ICAgMjAxMy0wNy0yMQorIiBMYXN0IENoYW5nZTogICAyMDE3IEp1biAxMwogIiBDb250cmlidXRvcnM6ICBBbmR5IExlc3RlciA8YW5keUBwZXRkYW5jZS5jb20+CiAiICAgICAgICAgICAgICAgIEhpbnJpayDDlnJuIFNpZ3Vyw7Bzc29uIDxoaW5yaWsuc2lnQGdtYWlsLmNvbT4KICIKQEAgLTEwNywxOSArMTA3LDE5IEBACiAgICAgZW5kaWYKIAogICAgICAgICBpZiBsaW5lID1+ICdbPMKrXFt7KF1ccypcKCNbXil9XF3Cuz5dKlwpXD0kJwotICAgICAgICAgICAgbGV0IGluZCA9IGluZCArICZzdworICAgICAgICAgICAgbGV0IGluZCA9IGluZCArIHNoaWZ0d2lkdGgoKQogICAgICAgICBlbmRpZgogICAgICAgICBpZiBjbGluZSA9fiAnXlxzKlspfVxdwrs+XScKLSAgICAgICAgICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgICAgICAgICAgIGxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkKICAgICAgICAgZW5kaWYKIAogICAgICIgSW5kZW50IGxpbmVzIHRoYXQgYmVnaW4gd2l0aCAnb3InIG9yICdhbmQnCiAgICAgaWYgY2xpbmUgPX4gJ15ccypcKG9yXHxhbmRcKVw+JwogICAgICAgICBpZiBsaW5lICF+ICdeXHMqXChvclx8YW5kXClcPicKLSAgICAgICAgICAgIGxldCBpbmQgPSBpbmQgKyAmc3cKKyAgICAgICAgICAgIGxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKICAgICAgICAgZW5kaWYKICAgICBlbHNlaWYgbGluZSA9fiAnXlxzKlwob3JcfGFuZFwpXD4nCi0gICAgICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgICAgICAgbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogICAgIGVuZGlmCiAKICAgICByZXR1cm4gaW5kCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9waHAudmltIGIvcnVudGltZS9pbmRlbnQvcGhwLnZpbQppbmRleCAwNmI0OWYzLi4zNWRkZGFhIDEwMDY0NAotLS0gYS9ydW50aW1lL2luZGVudC9waHAudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L3BocC52aW0KQEAgLTMsNyArMyw3IEBACiAiIEF1dGhvcjoJSm9obiBXZWxsZXN6IDxKb2huLndlbGxlc3ogKEFUKSB0ZWFzZXIgKERPVCkgZnI+CiAiIFVSTDoJCWh0dHA6Ly93d3cuMjA3MnByb2R1Y3Rpb25zLmNvbS92aW0vaW5kZW50L3BocC52aW0KICIgSG9tZToJCWh0dHBzOi8vZ2l0aHViLmNvbS8yMDcyL1BIUC1JbmRlbnRpbmctZm9yLVZJbQotIiBMYXN0IENoYW5nZToJMjAxNyBNYXJjaCAxMnRoCisiIExhc3QgQ2hhbmdlOgkyMDE3IEp1biAxMwogIiBWZXJzaW9uOgkxLjYyCiAiCiAiCkBAIC01MCwyNSArNTAsMTUgQEAKIAogbGV0IGc6cGhwX3N5bmNfbWV0aG9kID0gMAogCi1pZiBleGlzdHMoJypzaGlmdHdpZHRoJykKLSAgZnVuY3Rpb24hIHM6c3coKQotICAgIHJldHVybiBzaGlmdHdpZHRoKCkKLSAgZW5kZnVuY3Rpb24KLWVsc2UKLSAgZnVuY3Rpb24hIHM6c3coKQotICAgIHJldHVybiAmc2hpZnR3aWR0aAotICBlbmRmdW5jdGlvbgotZW5kaWYKLQogCiBpZiBleGlzdHMoIlBIUF9kZWZhdWx0X2luZGVudGluZyIpCi0gICAgbGV0IGI6UEhQX2RlZmF1bHRfaW5kZW50aW5nID0gUEhQX2RlZmF1bHRfaW5kZW50aW5nICogczpzdygpCisgICAgbGV0IGI6UEhQX2RlZmF1bHRfaW5kZW50aW5nID0gUEhQX2RlZmF1bHRfaW5kZW50aW5nICogc2hpZnR3aWR0aCgpCiBlbHNlCiAgICAgbGV0IGI6UEhQX2RlZmF1bHRfaW5kZW50aW5nID0gMAogZW5kaWYKIAogaWYgZXhpc3RzKCJQSFBfb3V0ZGVudFNMQ29tbWVudHMiKQotICAgIGxldCBiOlBIUF9vdXRkZW50U0xDb21tZW50cyA9IFBIUF9vdXRkZW50U0xDb21tZW50cyAqIHM6c3coKQorICAgIGxldCBiOlBIUF9vdXRkZW50U0xDb21tZW50cyA9IFBIUF9vdXRkZW50U0xDb21tZW50cyAqIHNoaWZ0d2lkdGgoKQogZWxzZQogICAgIGxldCBiOlBIUF9vdXRkZW50U0xDb21tZW50cyA9IDAKIGVuZGlmCkBAIC0zNTcsNyArMzQ3LDcgQEAKICAgICBsZXQgdGVzdCA9IEdldExhc3RSZWFsQ29kZUxOdW0oYTpsbnVtIC0gMSkKIAogICAgIGlmIHRlc3QgPD0gMQotCXJldHVybiBpbmRlbnQoMSkgLSBzOnN3KCkgKiBiOlBIUF92aW50YWdlX2Nhc2VfZGVmYXVsdF9pbmRlbnQKKwlyZXR1cm4gaW5kZW50KDEpIC0gc2hpZnR3aWR0aCgpICogYjpQSFBfdmludGFnZV9jYXNlX2RlZmF1bHRfaW5kZW50CiAgICAgZW5kCiAKICAgICB3aGlsZSBnZXRsaW5lKHRlc3QpID1+ICdeXHMqfScgJiYgdGVzdCA+IDEKQEAgLTM3MSw3ICszNjEsNyBAQAogICAgIGlmIGdldGxpbmUodGVzdCkgPX4jICdeXHMqc3dpdGNoXD4nCiAJcmV0dXJuIGluZGVudCh0ZXN0KQogICAgIGVsc2VpZiBnZXRsaW5lKHRlc3QpID1+IyBzOmRlZmF1bHRPUmNhc2UKLQlyZXR1cm4gaW5kZW50KHRlc3QpIC0gczpzdygpICogYjpQSFBfdmludGFnZV9jYXNlX2RlZmF1bHRfaW5kZW50CisJcmV0dXJuIGluZGVudCh0ZXN0KSAtIHNoaWZ0d2lkdGgoKSAqIGI6UEhQX3ZpbnRhZ2VfY2FzZV9kZWZhdWx0X2luZGVudAogICAgIGVsc2UKIAlyZXR1cm4gRmluZFRoZVN3aXRjaEluZGVudCh0ZXN0KQogICAgIGVuZGlmCkBAIC00NDQsNyArNDM0LDcgQEAKICAgICBlbmRpZgogCiAgICAgaWYgYjpQSFBfZGVmYXVsdF9pbmRlbnRpbmcKLQlsZXQgYjpQSFBfZGVmYXVsdF9pbmRlbnRpbmcgPSBnOlBIUF9kZWZhdWx0X2luZGVudGluZyAqIHM6c3coKQorCWxldCBiOlBIUF9kZWZhdWx0X2luZGVudGluZyA9IGc6UEhQX2RlZmF1bHRfaW5kZW50aW5nICogc2hpZnR3aWR0aCgpCiAgICAgZW5kaWYKIAogICAgIGxldCBjbGluZSA9IGdldGxpbmUodjpsbnVtKQpAQCAtNzAxLDcgKzY5MSw3IEBACiAJbGV0IGI6UEhQX0N1cnJlbnRJbmRlbnRMZXZlbCA9IGI6UEhQX2RlZmF1bHRfaW5kZW50aW5nCiAJcmV0dXJuIGluZGVudChGaW5kVGhlSWZPZkFuRWxzZSh2OmxudW0sIDEpKQogICAgIGVsc2VpZiBjbGluZSA9fiMgczpkZWZhdWx0T1JjYXNlCi0JcmV0dXJuIEZpbmRUaGVTd2l0Y2hJbmRlbnQodjpsbnVtKSArIHM6c3coKSAqIGI6UEhQX3ZpbnRhZ2VfY2FzZV9kZWZhdWx0X2luZGVudAorCXJldHVybiBGaW5kVGhlU3dpdGNoSW5kZW50KHY6bG51bSkgKyBzaGlmdHdpZHRoKCkgKiBiOlBIUF92aW50YWdlX2Nhc2VfZGVmYXVsdF9pbmRlbnQKICAgICBlbHNlaWYgY2xpbmUgPX4gJ15ccyopXD1ccyp7JwogCWxldCBwcmV2aW91c19saW5lID0gbGFzdF9saW5lCiAJbGV0IGxhc3RfbGluZV9udW0gPSBsbnVtCkBAIC03MTMsNyArNzAzLDcgQEAKIAkJbGV0IGluZCA9IGluZGVudChsYXN0X2xpbmVfbnVtKQogCiAJCWlmICBiOlBIUF9CcmFjZXNBdENvZGVMZXZlbAotCQkgICAgbGV0IGluZCA9IGluZCArIHM6c3coKQorCQkgICAgbGV0IGluZCA9IGluZCArIHNoaWZ0d2lkdGgoKQogCQllbmRpZgogCiAJCXJldHVybiBpbmQKQEAgLTcyNCw3ICs3MTQsNyBAQAogCWVuZHdoaWxlCiAKICAgICBlbHNlaWYgbGFzdF9saW5lID1+IyB1bnN0YXRlZCAmJiBjbGluZSAhfiAnXlxzKik7XD0nLmVuZGxpbmUKLQlsZXQgaW5kID0gaW5kICsgczpzdygpICIgd2UgaW5kZW50IG9uZSBsZXZlbCBmdXJ0aGVyIHdoZW4gdGhlIHByZWNlZGluZyBsaW5lIGlzIG5vdCBzdGF0ZWQKKwlsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpICIgd2UgaW5kZW50IG9uZSBsZXZlbCBmdXJ0aGVyIHdoZW4gdGhlIHByZWNlZGluZyBsaW5lIGlzIG5vdCBzdGF0ZWQKIAlyZXR1cm4gaW5kICsgYWRkU3BlY2lhbAogCiAgICAgZWxzZWlmIChpbmQgIT0gYjpQSFBfZGVmYXVsdF9pbmRlbnRpbmcgfHwgbGFzdF9saW5lID1+ICdeWylcXV0nICkgJiYgbGFzdF9saW5lID1+IHRlcm1pbmF0ZWQKQEAgLTgyMyw3ICs4MTMsNyBAQAogCSAgICBlbmRpZgogCiAJICAgIGlmICFkb250SW5kZW50ICYmICghYjpQSFBfQnJhY2VzQXRDb2RlTGV2ZWwgfHwgbGFzdF9saW5lICF+IyAnXlxzKnsnKQotCQlsZXQgaW5kID0gaW5kICsgczpzdygpCisJCWxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKIAkgICAgZW5kaWYKIAogCSAgICBpZiBiOlBIUF9CcmFjZXNBdENvZGVMZXZlbCB8fCBiOlBIUF92aW50YWdlX2Nhc2VfZGVmYXVsdF9pbmRlbnQgPT0gMQpAQCAtODQxLDE3ICs4MzEsMTcgQEAKIAkgICAgZW5kaWYKIAogCWVsc2VpZiBsYXN0X2xpbmUgPX4gJ15ccyonLnM6YmxvY2tzdGFydAotCSAgICBsZXQgaW5kID0gaW5kICsgczpzdygpCisJICAgIGxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKIAogCiAJZWxzZWlmIEFudGVwZW51bHRpbWF0ZUxpbmUgPX4gJ3snLmVuZGxpbmUgJiYgQW50ZXBlbnVsdGltYXRlTGluZSAhfj8gJ15ccyp1c2VcPicgfHwgQW50ZXBlbnVsdGltYXRlTGluZSA9fiB0ZXJtaW5hdGVkIHx8IEFudGVwZW51bHRpbWF0ZUxpbmUgPX4jIHM6ZGVmYXVsdE9SY2FzZQotCSAgICBsZXQgaW5kID0gaW5kICsgczpzdygpCisJICAgIGxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKIAllbmRpZgogCiAgICAgZW5kaWYKIAogICAgIGlmIGNsaW5lID1+ICAnXlxzKlspXF1dO1w9JwotCWxldCBpbmQgPSBpbmQgLSBzOnN3KCkKKwlsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAgICAgZW5kaWYKIAogICAgIGxldCBiOlBIUF9DdXJyZW50SW5kZW50TGV2ZWwgPSBpbmQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3Bvc3RzY3IudmltIGIvcnVudGltZS9pbmRlbnQvcG9zdHNjci52aW0KaW5kZXggYjBmZjQ4ZS4uMjU5MmJjZiAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvcG9zdHNjci52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvcG9zdHNjci52aW0KQEAgLTQxLDE2ICs0MSwxNiBAQAogCiAgICIgSW5kZW50IGZvciBkaWN0cywgYXJyYXlzLCBhbmQgc2F2ZXMgd2l0aCBwb3NzaWJsZSB0cmFpbGluZyBjb21tZW50CiAgIGlmIHBsaW5lID1+ICdcKGJlZ2luXHw8PFx8Z1w9c2F2ZVx8e1x8W1wpXHMqXCglLipcKVw9JCcKLSAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgICAgbGV0IGluZCA9IGluZCArIHNoaWZ0d2lkdGgoKQogICBlbmRpZgogCiAgICIgUmVtb3ZlIGluZGVudCBmb3IgcG9wcGVkIGRpY3RzLCBhbmQgcmVzdG9yZXMuCiAgIGlmIHBsaW5lID1+ICdcKGVuZFx8Z1w9cmVzdG9yZVwpXHMqJCcKLSAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgICAgbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogCiAgICIgRWxzZSBoYW5kbGUgaW1tZWRpYXRlIGRlZGVudHMgb2YgZGljdHMsIHJlc3RvcmVzLCBhbmQgYXJyYXlzLgogICBlbHNlaWYgZ2V0bGluZShhOmxudW0pID1+ICdcKGVuZFx8Pj5cfGdcPXJlc3RvcmVcfH1cfF1cKScKLSAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgICAgbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogCiAgICIgRWxzZSBoYW5kbGUgRFNDIGNvbW1lbnRzIC0gYWx3YXlzIHN0YXJ0IG9mIGxpbmUuCiAgIGVsc2VpZiBnZXRsaW5lKGE6bG51bSkgPX4gJ15ccyolJScKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3Bvdi52aW0gYi9ydW50aW1lL2luZGVudC9wb3YudmltCmluZGV4IDJiMTk3NjMuLmU4MDY3NTYgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L3Bvdi52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvcG92LnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVmltIGluZGVudCBmaWxlCiAiIExhbmd1YWdlOiBQb1YtUmF5IFNjZW5lIERlc2NyaXB0aW9uIExhbmd1YWdlCiAiIE1haW50YWluZXI6IERhdmlkIE5lY2FzIChZZXRpKSA8eWV0aUBwaHlzaWNzLm11bmkuY3o+Ci0iIExhc3QgQ2hhbmdlOiAyMDAyLTEwLTIwCisiIExhc3QgQ2hhbmdlOiAyMDE3IEp1biAxMwogIiBVUkk6IGh0dHA6Ly90cmlmaWMuYXRoLmN4L0Z0cC92aW0vaW5kZW50L3Bvdi52aW0KIAogIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCkBAIC03NSw5ICs3NSw5IEBACiAgICIgb3BlbmluZyBsaW5lLgogICBsZXQgY3VyID0gczpNYXRjaENvdW50KHY6bG51bSwgJ15ccypcJSgjXHMqXCUoZW5kXHxlbHNlXClcPlx8W119KV1cKScpCiAgIGlmIGN1ciA+IDAKLSAgICBsZXQgZmluYWwgPSBwbGluZCArIChjaGcgLSBjdXIpICogJnN3CisgICAgbGV0IGZpbmFsID0gcGxpbmQgKyAoY2hnIC0gY3VyKSAqIHNoaWZ0d2lkdGgoKQogICBlbHNlCi0gICAgbGV0IGZpbmFsID0gcGxpbmQgKyBjaGcgKiAmc3cKKyAgICBsZXQgZmluYWwgPSBwbGluZCArIGNoZyAqIHNoaWZ0d2lkdGgoKQogICBlbmRpZgogCiAgIHJldHVybiBmaW5hbCA8IDAgPyAwIDogZmluYWwKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3Byb2xvZy52aW0gYi9ydW50aW1lL2luZGVudC9wcm9sb2cudmltCmluZGV4IGFmZTQ0OGUuLjI2YTNiYzMgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L3Byb2xvZy52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvcHJvbG9nLnZpbQpAQCAtNDEsMTggKzQxLDE4IEBACiAgICAgZW5kaWYKICAgICAiIENoZWNrIGZvciBjbGF1c2UgaGVhZCBvbiBwcmV2aW91cyBsaW5lCiAgICAgaWYgcGxpbmUgPX4gJzotXHMqXCglLipcKVw/JCcKLQlsZXQgaW5kID0gaW5kICsgJnN3CisJbGV0IGluZCA9IGluZCArIHNoaWZ0d2lkdGgoKQogICAgICIgQ2hlY2sgZm9yIGVuZCBvZiBjbGF1c2Ugb24gcHJldmlvdXMgbGluZQogICAgIGVsc2VpZiBwbGluZSA9fiAnXC5ccypcKCUuKlwpXD8kJwotCWxldCBpbmQgPSBpbmQgLSAmc3cKKwlsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAgICAgZW5kaWYKICAgICAiIENoZWNrIGZvciBvcGVuaW5nIGNvbmRpdGlvbmFsIG9uIHByZXZpb3VzIGxpbmUKICAgICBpZiBwbGluZSA9fiAnXlxzKlwoWyg7XVx8LT5cKScKLQlsZXQgaW5kID0gaW5kICsgJnN3CisJbGV0IGluZCA9IGluZCArIHNoaWZ0d2lkdGgoKQogICAgIGVuZGlmCiAgICAgIiBDaGVjayBmb3IgY2xvc2luZyBhbiB1bmNsb3NlZCBwYXJlbiwgb3IgbWlkZGxlIDsgb3IgLT4KICAgICBpZiBsaW5lID1+ICdeXHMqXChbKTtdXHwtPlwpJwotCWxldCBpbmQgPSBpbmQgLSAmc3cKKwlsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAgICAgZW5kaWYKICAgICByZXR1cm4gaW5kCiBlbmRmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvcnBsLnZpbSBiL3J1bnRpbWUvaW5kZW50L3JwbC52aW0KaW5kZXggMDdiZmQwNi4uZmFiMjU4ZSAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvcnBsLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9ycGwudmltCkBAIC0xLDcgKzEsNyBAQAogIiBWaW0gaW5kZW50IGZpbGUKICIgTGFuZ3VhZ2U6CVJQTC8yCiAiIFZlcnNpb246CTAuMgotIiBMYXN0IENoYW5nZToJMjAwNSBNYXIgMjgKKyIgTGFzdCBDaGFuZ2U6CTIwMTcgSnVuIDEzCiAiIE1haW50YWluZXI6CUJFUlRSQU5EIEpv62wgPHJwbDJAZnJlZS5mcj4KIAogIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCkBAIC0zMiwxNiArMzIsMTYgQEAKICAgaWYgcHJldnN0YXQgPX4/ICdcPFwoaWZcfGlmZXJyXHxkb1x8d2hpbGVcKVw+JyAmJiBwcmV2c3RhdCA9fj8gJ1w8ZW5kXD4nCiAgIGVsc2VpZiBwcmV2c3RhdCA9fj8gJ1woXlx8XHNcK1wpPDxcKCRcfFxzXCtcKScgJiYgcHJldnN0YXQgPX4/ICdcc1wrPj5cKCRcfFxzXCtcKScKICAgZWxzZWlmIHByZXZzdGF0ID1+PyAnXDxcKGlmXHxpZmVyclx8dGhlblx8ZWxzZVx8ZWxzZWlmXHxzZWxlY3RcfGNhc2VcfGRvXHx1bnRpbFx8d2hpbGVcfHJlcGVhdFx8Zm9yXHxzdGFydFx8ZGVmYXVsdFwpXD4nIHx8IHByZXZzdGF0ID1+PyAnXCheXHxcc1wrXCk8PFwoJFx8XHNcK1wpJwotICAgIGxldCBpbmQgPSBpbmQgKyAmc3cKKyAgICBsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgIGVuZGlmCiAKICAgIiBTdWJ0cmFjdCBhIHNoaWZ0d2lkdGggZnJvbSB0aGVuLCBlbHNlLCBlbHNlaWYsIGVuZCwgdW50aWwsIHJlcGVhdCwgbmV4dCwKICAgIiBzdGVwCiAgIGxldCBsaW5lID0gZ2V0bGluZSh2OmxudW0pCiAgIGlmIGxpbmUgPX4/ICdeXHMqXCh0aGVuXHxlbHNlXHxlbHNlaWZcfHVudGlsXHxyZXBlYXRcfG5leHRcfHN0ZXBcfGRlZmF1bHRcfGVuZFwpXD4nCi0gICAgbGV0IGluZCA9IGluZCAtICZzdworICAgIGxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkKICAgZWxzZWlmIGxpbmUgPX4/ICdeXHMqPj5cKCRcfFxzXCtcKScKLSAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgICAgbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogICBlbmRpZgogCiAgIHJldHVybiBpbmQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3J1YnkudmltIGIvcnVudGltZS9pbmRlbnQvcnVieS52aW0KaW5kZXggYTk3ZjQ4Mi4uZDg3MzNkYiAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvcnVieS52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvcnVieS52aW0KQEAgLTQwNCwxMSArNDA0LDcgQEAKICAgIiAtLS0tLS0tLS0tCiAKICAgIiBUaGUgdmFsdWUgb2YgYSBzaW5nbGUgc2hpZnQtd2lkdGgKLSAgaWYgZXhpc3RzKCcqc2hpZnR3aWR0aCcpCi0gICAgbGV0IHN3ID0gc2hpZnR3aWR0aCgpCi0gIGVsc2UKLSAgICBsZXQgc3cgPSAmc3cKLSAgZW5kaWYKKyAgbGV0IHN3ID0gc2hpZnR3aWR0aCgpCiAKICAgIiBGb3IgdGhlIGN1cnJlbnQgbGluZSwgdXNlIHRoZSBmaXJzdCBhcmd1bWVudCBpZiBnaXZlbiwgZWxzZSB2OmxudW0KICAgbGV0IGNsbnVtID0gYTowID8gYToxIDogdjpsbnVtCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9ydXN0LnZpbSBiL3J1bnRpbWUvaW5kZW50L3J1c3QudmltCmluZGV4IGEzMDUxZjAuLmQzMDYyOWIgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L3J1c3QudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L3J1c3QudmltCkBAIC0xLDcgKzEsNyBAQAogIiBWaW0gaW5kZW50IGZpbGUKICIgTGFuZ3VhZ2U6ICAgICAgICAgUnVzdAogIiBBdXRob3I6ICAgICAgICAgICBDaHJpcyBNb3JnYW4gPG1lQGNocmlzbW9yZ2FuLmluZm8+Ci0iIExhc3QgQ2hhbmdlOiAgICAgIDIwMTcgTWFyIDIxCisiIExhc3QgQ2hhbmdlOiAgICAgIDIwMTcgSnVuIDEzCiAiIEZvciBidWdzLCBwYXRjaGVzIGFuZCBsaWNlbnNlIGdvIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC52aW0KIAogIiBPbmx5IGxvYWQgdGhpcyBpbmRlbnQgZmlsZSB3aGVuIG5vIG90aGVyIHdhcyBsb2FkZWQuCkBAIC0xOTksNyArMTk5LDcgQEAKIAkJCQkJIiBJdCdzIHRoZSBjbG9zaW5nIGxpbmUsIGRlZGVudCBpdAogCQkJCQlyZXR1cm4gMAogCQkJCWVsc2UKLQkJCQkJcmV0dXJuICZzaGlmdHdpZHRoCisJCQkJCXJldHVybiBzaGlmdHdpZHRoKCkKIAkJCQllbmRpZgogCQkJZW5kaWYKIAkJZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3Nhc3MudmltIGIvcnVudGltZS9pbmRlbnQvc2Fzcy52aW0KaW5kZXggZDg3YjM3MS4uZDZkYmYzYSAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvc2Fzcy52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvc2Fzcy52aW0KQEAgLTEsNyArMSw3IEBACiAiIFZpbSBpbmRlbnQgZmlsZQogIiBMYW5ndWFnZToJU2FzcwogIiBNYWludGFpbmVyOglUaW0gUG9wZSA8dmltTk9TUEFNQHRwb3BlLm9yZz4KLSIgTGFzdCBDaGFuZ2U6CTIwMTYgQXVnIDI5CisiIExhc3QgQ2hhbmdlOgkyMDE3IEp1biAxMwogCiBpZiBleGlzdHMoImI6ZGlkX2luZGVudCIpCiAgIGZpbmlzaApAQCAtMjksNyArMjksNyBAQAogICBsZXQgaW5kZW50ID0gaW5kZW50KGxudW0pCiAgIGxldCBjaW5kZW50ID0gaW5kZW50KHY6bG51bSkKICAgaWYgbGluZSAhfiBzOnByb3BlcnR5ICYmIGxpbmUgIX4gczpleHRlbmQgJiYgY2xpbmUgPX4gczpwcm9wZXJ0eQotICAgIHJldHVybiBpbmRlbnQgKyAoZXhpc3RzKCcqc2hpZnR3aWR0aCcpID8gc2hpZnR3aWR0aCgpIDogJnN3KQorICAgIHJldHVybiBpbmRlbnQgKyBzaGlmdHdpZHRoKCkKICAgZWxzZQogICAgIHJldHVybiAtMQogICBlbmRpZgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvc2RsLnZpbSBiL3J1bnRpbWUvaW5kZW50L3NkbC52aW0KaW5kZXggYmEwM2YyZC4uNmNlMzBiNiAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvc2RsLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9zZGwudmltCkBAIC00NiwxNyArNDYsMTcgQEAKICAgaWYgKGdldGxpbmUobG51bSkgPX4/ICdeXHMqXChzdGFydFx8c3RhdGVcfHN5c3RlbVx8cGFja2FnZVx8Y29ubmVjdGlvblx8Y2hhbm5lbFx8YWx0ZXJuYXRpdmVcfG1hY3JvXHxvcGVyYXRvclx8bmV3dHlwZVx8c2VsZWN0XHxzdWJzdHJ1Y3R1cmVcfGRlY2lzaW9uXHxnZW5lcmF0b3JcfHJlZmluZW1lbnRcfHNlcnZpY2VcfG1ldGhvZFx8ZXhjZXB0aW9uaGFuZGxlclx8YXNudHlwZVx8c3ludHlwZVx8dmFsdWVcfCguKik6XHxcKHByaW9yaXR5XHNcK1wpXD1pbnB1dFx8cHJvdmlkZWRcKScKICAgICBcIHx8IGdldGxpbmUobG51bSkgPX4/IHZpcnR1YWxpdHkgLiAnXChwcm9jZXNzXHxwcm9jZWR1cmVcfGJsb2NrXHxvYmplY3RcKScpCiAgICAgXCAmJiBnZXRsaW5lKGxudW0pICF+PyAnZW5kW1s6YWxwaGE6XV1cKzskJwotICAgIGxldCBpbmQgPSBpbmQgKyAmc3cKKyAgICBsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgIGVuZGlmCiAKICAgIiBTdWJ0cmFjdCBhICdzaGlmdHdpZHRoJyBhZnRlciBzdGF0ZXMKICAgaWYgZ2V0bGluZShsbnVtKSA9fj8gJ15ccypcKHN0b3BcfHJldHVyblw+XHxuZXh0c3RhdGVcKScKLSAgICBsZXQgaW5kID0gaW5kIC0gJnN3CisgICAgbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogICBlbmRpZgogCiAgICIgU3VidHJhY3QgYSAnc2hpZnR3aWR0aCcgb24gb24gZW5kICh1bmNvbXBsZXRlZCBsaW5lKQogICBpZiBnZXRsaW5lKHY6bG51bSkgPX4/ICdeXHMqZW5kXD4nCi0gICAgbGV0IGluZCA9IGluZCAtICZzdworICAgIGxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkKICAgZW5kaWYKIAogICAiIFB1dCBlYWNoIGFsdGVybmF0aXZlcyB3aGVyZSB0aGUgY29ycmVzcG9uZGluZyBkZWNpc2lvbiB3YXMKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3NtbC52aW0gYi9ydW50aW1lL2luZGVudC9zbWwudmltCmluZGV4IGZiYmIxNWUuLmU3NjBhOGUgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L3NtbC52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvc21sLnZpbQpAQCAtMTE1LDkgKzExNSw5IEBACiAKIAkiIFJldHVybiBkb3VibGUgJ3NoaWZ0d2lkdGgnIGFmdGVyIGxpbmVzIG1hdGNoaW5nOgogCWlmIGxsaW5lID1+ICdeXHMqfC4qPT5ccyokJwotCQlyZXR1cm4gaW5kICsgJnN3ICsgJnN3CisJCXJldHVybiBpbmQgKyAyICpzaGlmdHdpZHRoKCkKIAllbHNlaWYgbGxpbmUgPX4gJ15ccyp2YWxcPi4qPVxzKiQnCi0JCXJldHVybiBpbmQgKyAmc3cKKwkJcmV0dXJuIGluZCArIHNoaWZ0d2lkdGgoKQogCWVuZGlmCiAKICAgbGV0IGxpbmUgPSBnZXRsaW5lKHY6bG51bSkKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCQlpZiBsYXN0TW9kdWxlID09IC0xCiAJCQlyZXR1cm4gMAogCQllbHNlCi0JCQlyZXR1cm4gbGFzdE1vZHVsZSArICZzdworCQkJcmV0dXJuIGxhc3RNb2R1bGUgKyBzaGlmdHdpZHRoKCkKIAkJZW5kaWYKIAogCSIgSW5kZW50IGxpbmVzIHN0YXJ0aW5nIHdpdGggJ3wnIGZyb20gbWF0Y2hpbmcgJ2Nhc2UnLCAnaGFuZGxlJwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJCWlmIHN3aXRjaExpbmUgPX4gJ1w8Y2FzZVw+JwogCQkJcmV0dXJuIGNvbCgiLiIpICsgMgogCQllbHNlaWYgc3dpdGNoTGluZSA9fiAnXDxoYW5kbGVcPicKLQkJCXJldHVybiBzd2l0Y2hMaW5lSW5kZW50ICsgJnN3CisJCQlyZXR1cm4gc3dpdGNoTGluZUluZGVudCArIHNoaWZ0d2lkdGgoKQogCQllbHNlaWYgc3dpdGNoTGluZSA9fiAnXDxkYXRhdHlwZVw+JwogCQkJY2FsbCBzZWFyY2goJz0nKQogCQkJcmV0dXJuIGNvbCgiLiIpIC0gMQpAQCAtMTg0LDcgKzE4NCw3IEBACiAgICIgSW5kZW50IGlmIGxhc3QgbGluZSBlbmRzIHdpdGggJ3NpZycsICdzdHJ1Y3QnLCAnbGV0JywgJ3RoZW4nLCAnZWxzZScsCiAgICIgJ2luJwogICBlbHNlaWYgbGxpbmUgPX4gJ1w8XChzaWdcfHN0cnVjdFx8bGV0XHxpblx8dGhlblx8ZWxzZVwpXHMqJCcKLQkJbGV0IGluZCA9IGluZCArICZzdworCQlsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAKICAgIiBJbmRlbnQgaWYgbGFzdCBsaW5lIGVuZHMgd2l0aCAnb2YnLCBhbGlnbiBmcm9tICdjYXNlJwogICBlbHNlaWYgbGxpbmUgPX4gJ1w8XChvZlwpXHMqJCcKQEAgLTE5OSwxNCArMTk5LDE0IEBACiAKIAkiIEluZGVudCBpZiBsYXN0IGxpbmUgc3RhcnRzIHdpdGggJ2Z1bicsICdjYXNlJywgJ2ZuJwogCWVsc2VpZiBsbGluZSA9fiAnXlxzKlwoZnVuXHxmblx8Y2FzZVwpXD4nCi0JCWxldCBpbmQgPSBpbmQgKyAmc3cKKwkJbGV0IGluZCA9IGluZCArIHNoaWZ0d2lkdGgoKQogCiAJZW5kaWYKIAogCSIgRG9uJ3QgaW5kZW50ICdsZXQnIGlmIGxhc3QgbGluZSBzdGFydGVkIHdpdGggJ2Z1bicsICdmbicKIAlpZiBsaW5lID1+ICdeXHMqbGV0XD4nCiAJCWlmIGxsaW5lID1+ICdeXHMqXChmdW5cfGZuXCknCi0JCQlsZXQgaW5kID0gaW5kIC0gJnN3CisJCQlsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAJCWVuZGlmCiAgIGVuZGlmCiAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3NxbGFueXdoZXJlLnZpbSBiL3J1bnRpbWUvaW5kZW50L3NxbGFueXdoZXJlLnZpbQppbmRleCBkMTFjNTRiLi5iYTM1ZDc2IDEwMDY0NAotLS0gYS9ydW50aW1lL2luZGVudC9zcWxhbnl3aGVyZS52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvc3FsYW55d2hlcmUudmltCkBAIC0xLDcgKzEsNyBAQAogIiBWaW0gaW5kZW50IGZpbGUKICIgTGFuZ3VhZ2U6ICAgIFNRTAogIiBNYWludGFpbmVyOiAgRGF2aWQgRmlzaGJ1cm4gPGRmaXNoYnVybiBkb3QgdmltIGF0IGdtYWlsIGRvdCBjb20+Ci0iIExhc3QgQ2hhbmdlOiAyMDEyIERlYyAwNgorIiBMYXN0IENoYW5nZTogMjAxNyBKdW4gMTMKICIgVmVyc2lvbjogICAgIDMuMAogIiBEb3dubG9hZDogICAgaHR0cDovL3ZpbS5zb3VyY2Vmb3JnZS5uZXQvc2NyaXB0LnBocD9zY3JpcHRfaWQ9NDk1CiAKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgIGVuZHdoaWxlCiAKICAgICAiIEZhbGxiYWNrIC0ganVzdCBtb3ZlIGJhY2sgb25lCi0gICAgIiByZXR1cm4gYTpwcmV2X2luZGVudCAtICZzdworICAgICIgcmV0dXJuIGE6cHJldl9pbmRlbnQgLSBzaGlmdHdpZHRoKCkKICAgICByZXR1cm4gaWdub3JlX3BhcmFuCiBlbmRmdW5jdGlvbgogCkBAIC0xNjYsNyArMTY2LDcgQEAKICAgICBsZXQgbG51bSAgPSBhOmN1cnJfbG51bQogCiAgICAgIiBEZWZhdWx0IC0gcmVkdWNlIGluZGVudCBieSAxCi0gICAgbGV0IGluZCA9IGluZGVudChhOmN1cnJfbG51bSkgLSAmc3cKKyAgICBsZXQgaW5kID0gaW5kZW50KGE6Y3Vycl9sbnVtKSAtIHNoaWZ0d2lkdGgoKQogCiAgICAgaWYgYTprZXl3b3JkID1+PyAnZW5kJwogICAgICAgICBleGVjICdub3JtYWwhIF4nCkBAIC0yMzAsNyArMjMwLDcgQEAKICAgICBsZXQgaW5kID0gYTppbmQKIAogICAgIGlmIGluZCA+IDAKLSAgICAgICAgbGV0IG1vZHVsbyA9IGluZCAlICZzaGlmdHdpZHRoCisgICAgICAgIGxldCBtb2R1bG8gPSBpbmQgJSBzaGlmdHdpZHRoKCkKIAogICAgICAgICBpZiBtb2R1bG8gPiAwCiAgICAgICAgICAgICBsZXQgaW5kID0gaW5kIC0gbW9kdWxvCkBAIC0yOTEsNyArMjkxLDcgQEAKICAgICAiIHdoZXJlIEVORCBJRiwgRU5ELCBzaG91bGQgZGVjcmVhc2UgdGhlIGluZGVudC4KICAgICBpZiBwcmV2bGluZSA9fj8gczpTUUxCbG9ja1N0YXJ0CiAgICAgICAgICIgTW92ZSBpbmRlbnQgaW4KLSAgICAgICAgbGV0IGluZCA9IGluZCArICZzdworICAgICAgICBsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgICAgICAgICIgZWNob20gJ3ByZXZsIC0gU1FMQmxvY2tTdGFydCAtIGluZGVudCAnIC4gaW5kIC4gJyAgbGluZTogJyAuIHByZXZsaW5lCiAgICAgZWxzZWlmIHByZXZsaW5lID1+ICdbKCldJwogICAgICAgICBpZiBwcmV2bGluZSA9fiAnKCcKQEAgLTMwOCw3ICszMDgsNyBAQAogICAgICAgICBpZiBudW1fdW5tYXRjaGVkX2xlZnQgPiAwCiAgICAgICAgICAgICAiIFRoZXJlIGlzIGEgb3BlbiBsZWZ0IHBhcmFuZXRoZXNpcwogICAgICAgICAgICAgIiBpbmNyZWFzZSBpbmRlbnQKLSAgICAgICAgICAgIGxldCBpbmQgPSBpbmQgKyAoICZzdyAqIG51bV91bm1hdGNoZWRfbGVmdCApCisgICAgICAgICAgICBsZXQgaW5kID0gaW5kICsgKCBzaGlmdHdpZHRoKCkgKiBudW1fdW5tYXRjaGVkX2xlZnQgKQogICAgICAgICBlbHNlaWYgbnVtX3VubWF0Y2hlZF9yaWdodCA+IDAKICAgICAgICAgICAgICIgaWYgaXQgaXMgYW4gdW5iYWxhbmNlZCBwYXJhbmV0aGVzaXMgb25seSB1bmluZGVudCBpZgogICAgICAgICAgICAgIiBpdCB3YXMgcGFydCBvZiBhIGNvbW1hbmQgKGllIGNyZWF0ZSB0YWJsZSguLikgICkKQEAgLTMyMyw3ICszMjMsNyBAQAogICAgICAgICAgICAgZW5kaWYKIAogICAgICAgICAgICAgaWYgKG51bV91bm1hdGNoZWRfcmlnaHQgLSBpZ25vcmUpID4gMAotICAgICAgICAgICAgICAgIGxldCBpbmQgPSBpbmQgLSAoICZzdyAqIChudW1fdW5tYXRjaGVkX3JpZ2h0IC0gaWdub3JlKSApCisgICAgICAgICAgICAgICAgbGV0IGluZCA9IGluZCAtICggc2hpZnR3aWR0aCgpICogKG51bV91bm1hdGNoZWRfcmlnaHQgLSBpZ25vcmUpICkKICAgICAgICAgICAgIGVuZGlmCiAKICAgICAgICAgZW5kaWYKQEAgLTMzOSwxMiArMzM5LDEyIEBACiAgICAgaWYgbGluZSA9fj8gJ15ccyplbHMnCiAgICAgICAgICIgQW55IGxpbmUgd2hlbiB5b3UgdHlwZSBlbHNlIHdpbGwgYXV0b21hdGljYWxseSBiYWNrIHVwIG9uZQogICAgICAgICAiIGlkZW50IGxldmVsICAoaWUgZWxzZSwgZWxzZWlmLCBlbHNpZikKLSAgICAgICAgbGV0IGluZCA9IGluZCAtICZzdworICAgICAgICBsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAgICAgICAgICIgZWNob20gJ2N1cnIgLSBlbHNlIC0gaW5kZW50ICcgLiBpbmQKICAgICBlbHNlaWYgbGluZSA9fj8gJ15ccyplbmRcPicKICAgICAgICAgbGV0IGluZCA9IHM6R2V0U3RtdFN0YXJ0ZXJJbmRlbnQoJ2VuZCcsIHY6bG51bSkKICAgICAgICAgIiBHZW5lcmFsIGNhc2UgZm9yIGVuZAotICAgICAgICAiIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgICAgICAgIiBsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAgICAgICAgICIgZWNob20gJ2N1cnIgLSBlbmQgLSBpbmRlbnQgJyAuIGluZAogICAgIGVsc2VpZiBsaW5lID1+PyAnXlxzKndoZW5cPicKICAgICAgICAgbGV0IGluZCA9IHM6R2V0U3RtdFN0YXJ0ZXJJbmRlbnQoJ3doZW4nLCB2OmxudW0pCkBAIC0zNTIsNyArMzUyLDcgQEAKICAgICAgICAgIiBjbGF1c2UsIGRvIG5vdCBjaGFuZ2UgdGhlIGluZGVudCBsZXZlbCwgc2luY2UgdGhlc2UKICAgICAgICAgIiBzdGF0ZW1lbnRzIGRvIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBFTkQgc3RhdGVtZW50LgogICAgICAgICAiIGlmIHN0bXRfc3RhcnRlciA9fj8gJ2Nhc2UnCi0gICAgICAgICIgICAgbGV0IGluZCA9IGluZCAtICZzdworICAgICAgICAiICAgIGxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkKICAgICAgICAgIiBlbmRpZgogICAgICAgICAiIGVsc2VpZiBsaW5lID1+ICdeXHMqKVxzKjtcP1xzKiQnCiAgICAgICAgICIgZWxzZWlmIGxpbmUgPX4gJ15ccyopJwpAQCAtMzcxLDE0ICszNzEsMTQgQEAKICAgICAgICAgIiBsZXQgbnVtX3VubWF0Y2hlZF9yaWdodCAgPSBzOkNvdW50VW5iYWxhbmNlZFBhcmFuKCBsaW5lLCAnKScgKQogICAgICAgICAiIGlmIG51bV91bm1hdGNoZWRfcmlnaHQgPiAwCiAgICAgICAgICIgZWxzZWlmIHN0cnBhcnQoIGxpbmUsIHN0cmxlbihsaW5lKS0xLCAxICkgPX4gJyknCi0gICAgICAgICIgbGV0IGluZCA9IGluZCAtICZzdworICAgICAgICAiIGxldCBpbmQgPSBpbmQgLSBzaGlmdHdpZHRoKCkKICAgICAgICAgaWYgbGluZSA9fiAnXlxzKiknCiAgICAgICAgICAgICAiIGxldCBpZ25vcmUgPSBpZ25vcmUgKyAxCiAgICAgICAgICAgICAiIGVjaG9tICdjdXJyIC0gYmVnaW5zICkgdW5iYWxhbmNlZCBpZ25vcmU6ICcgLiBpZ25vcmUKICAgICAgICAgZW5kaWYKIAogICAgICAgICBpZiAobnVtX3VubWF0Y2hlZF9yaWdodCAtIGlnbm9yZSkgPiAwCi0gICAgICAgICAgICBsZXQgaW5kID0gaW5kIC0gKCAmc3cgKiAobnVtX3VubWF0Y2hlZF9yaWdodCAtIGlnbm9yZSkgKQorICAgICAgICAgICAgbGV0IGluZCA9IGluZCAtICggc2hpZnR3aWR0aCgpICogKG51bV91bm1hdGNoZWRfcmlnaHQgLSBpZ25vcmUpICkKICAgICAgICAgZW5kaWYKICAgICAgICAgIiBlbmRpZgogICAgIGVuZGlmCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC9zeXN0ZW12ZXJpbG9nLnZpbSBiL3J1bnRpbWUvaW5kZW50L3N5c3RlbXZlcmlsb2cudmltCmluZGV4IGIwMTc1MzUuLjkxZmJhNGMgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L3N5c3RlbXZlcmlsb2cudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L3N5c3RlbXZlcmlsb2cudmltCkBAIC0yOSw3ICsyOSw3IEBACiAgIGlmIGV4aXN0cygnYjpzeXN0ZW12ZXJpbG9nX2luZGVudF93aWR0aCcpCiAgICAgbGV0IG9mZnNldCA9IGI6c3lzdGVtdmVyaWxvZ19pbmRlbnRfd2lkdGgKICAgZWxzZQotICAgIGxldCBvZmZzZXQgPSAmc3cKKyAgICBsZXQgb2Zmc2V0ID0gc2hpZnR3aWR0aCgpCiAgIGVuZGlmCiAgIGlmIGV4aXN0cygnYjpzeXN0ZW12ZXJpbG9nX2luZGVudF9tb2R1bGVzJykKICAgICBsZXQgaW5kZW50X21vZHVsZXMgPSBvZmZzZXQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3RlcmF0ZXJtLnZpbSBiL3J1bnRpbWUvaW5kZW50L3RlcmF0ZXJtLnZpbQppbmRleCA4NDY3Y2VmLi4zNzAyODNjIDEwMDY0NAotLS0gYS9ydW50aW1lL2luZGVudC90ZXJhdGVybS52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvdGVyYXRlcm0udmltCkBAIC0zLDcgKzMsNyBAQAogIgkJQmFzZWQgb24gVGVyYSBUZXJtIFZlcnNpb24gNC45MgogIiBNYWludGFpbmVyOglLZW4gVGFrYXRhCiAiIFVSTDoJCWh0dHBzOi8vZ2l0aHViLmNvbS9rLXRha2F0YS92aW0tdGVyYXRlcm0KLSIgTGFzdCBDaGFuZ2U6CTIwMTYgQXVnIDE3CisiIExhc3QgQ2hhbmdlOgkyMDE3IEp1biAxMwogIiBGaWxlbmFtZXM6CSoudHRsCiAiIExpY2Vuc2U6CVZJTSBMaWNlbnNlCiAKQEAgLTIyLDE2ICsyMiw2IEBACiAgIGZpbmlzaAogZW5kaWYKIAotIiBUaGUgc2hpZnR3aWR0aCgpIGZ1bmN0aW9uIGlzIHJlbGF0aXZlbHkgbmV3LgotIiBEb24ndCByZXF1aXJlIGl0IHRvIGV4aXN0LgotaWYgZXhpc3RzKCcqc2hpZnR3aWR0aCcpCi0gIGxldCBzOnN3ID0gZnVuY3Rpb24oJ3NoaWZ0d2lkdGgnKQotZWxzZQotICBmdW5jdGlvbiBzOnN3KCkgYWJvcnQKLSAgICByZXR1cm4gJnNoaWZ0d2lkdGgKLSAgZW5kZnVuY3Rpb24KLWVuZGlmCi0KIGZ1bmN0aW9uISBHZXRUZXJhVGVybUluZGVudChsbnVtKQogICBsZXQgbDpwcmV2bG51bSA9IHByZXZub25ibGFuayhhOmxudW0tMSkKICAgaWYgbDpwcmV2bG51bSA9PSAwCkBAIC00OCwxNSArMzgsMTUgQEAKIAogICBpZiBsOnByZXZsID1+ICdeXHMqaWZcPi4qXDx0aGVuXD4nCiAgICAgIiBwcmV2aW91cyBsaW5lIG9wZW5lZCBhIGJsb2NrCi0gICAgbGV0IGw6aW5kICs9IHM6c3coKQorICAgIGxldCBsOmluZCArPSBzaGlmdHdpZHRoKCkKICAgZW5kaWYKICAgaWYgbDpwcmV2bCA9fiAnXlxzKlwlKGVsc2VpZlx8ZWxzZVx8ZG9cfHVudGlsXHx3aGlsZVx8Zm9yXClcPicKICAgICAiIHByZXZpb3VzIGxpbmUgb3BlbmVkIGEgYmxvY2sKLSAgICBsZXQgbDppbmQgKz0gczpzdygpCisgICAgbGV0IGw6aW5kICs9IHNoaWZ0d2lkdGgoKQogICBlbmRpZgogICBpZiBsOnRoaXNsID1+ICdeXHMqXCUoZWxzZWlmXHxlbHNlXHxlbmRpZlx8ZW5kdW50aWxcfGVuZHdoaWxlXHxsb29wXHxuZXh0XClcPicKICAgICAiIHRoaXMgbGluZSBjbG9zZWQgYSBibG9jawotICAgIGxldCBsOmluZCAtPSBzOnN3KCkKKyAgICBsZXQgbDppbmQgLT0gc2hpZnR3aWR0aCgpCiAgIGVuZGlmCiAKICAgcmV0dXJuIGw6aW5kCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC90ZXgudmltIGIvcnVudGltZS9pbmRlbnQvdGV4LnZpbQppbmRleCBmYzZjYzBhLi4xYTRkOGIxIDEwMDY0NAotLS0gYS9ydW50aW1lL2luZGVudC90ZXgudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L3RleC52aW0KQEAgLTIxNSwxNCArMjE1LDE0IEBACiAgICAgIiBaWUMgbW9kaWZpY2F0aW9uIDogXGVuZCBhZnRlciBcYmVnaW4gd29uJ3QgY2F1c2Ugd3JvbmcgaW5kZW50IGFueW1vcmUKICAgICBpZiBsaW5lID1+ICdcXGJlZ2luey4qfScgCiAgICAgICAgIGlmIGxpbmUgIX4gZzp0ZXhfbm9pbmRlbnRfZW52Ci0gICAgICAgICAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgICAgICAgICAgICBsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgICAgICAgICAgICBsZXQgc3RheSA9IDAKICAgICAgICAgZW5kaWYKIAogICAgICAgICBpZiBnOnRleF9pbmRlbnRfaXRlbXMKICAgICAgICAgICAgICIgQWRkIGFub3RoZXIgc3cgZm9yIGl0ZW0tZW52aXJvbm1lbnRzCiAgICAgICAgICAgICBpZiBsaW5lID1+IGc6dGV4X2l0ZW1pemVfZW52Ci0gICAgICAgICAgICAgICAgbGV0IGluZCA9IGluZCArICZzdworICAgICAgICAgICAgICAgIGxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKICAgICAgICAgICAgICAgICBsZXQgc3RheSA9IDAKICAgICAgICAgICAgIGVuZGlmCiAgICAgICAgIGVuZGlmCkBAIC0yNDEsMjMgKzI0MSwyMyBAQAogICAgICAgICBpZiBnOnRleF9pbmRlbnRfaXRlbXMKICAgICAgICAgICAgICIgUmVtb3ZlIGFub3RoZXIgc3cgZm9yIGl0ZW0tZW52aXJvbm1lbnRzCiAgICAgICAgICAgICBpZiBjbGluZSA9fiBnOnRleF9pdGVtaXplX2VudgotICAgICAgICAgICAgICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgICAgICAgICAgICAgICBsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAgICAgICAgICAgICAgICAgbGV0IHN0YXkgPSAwCiAgICAgICAgICAgICBlbmRpZgogICAgICAgICBlbmRpZgogCi0gICAgICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKyAgICAgICAgbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogICAgICAgICBsZXQgc3RheSA9IDAKICAgICBlbmRpZgogCiAgICAgaWYgZzp0ZXhfaW5kZW50X2JyYWNlCiAgICAgICAgIGlmIGxpbmUgPX4gJ1tbe10kJwotICAgICAgICAgICAgbGV0IGluZCArPSAmc3cKKyAgICAgICAgICAgIGxldCBpbmQgKz0gc2hpZnR3aWR0aCgpCiAgICAgICAgICAgICBsZXQgc3RheSA9IDAKICAgICAgICAgZW5kaWYKIAogICAgICAgICBpZiBjbGluZSA9fiAnXlxzKlxcXD9bXF19XScgJiYgczpDaGVja1BhaXJlZElzTGFzdENoYXJhY3Rlcih2OmxudW0sIGluZGVudCh2OmxudW0pKQotICAgICAgICAgICAgbGV0IGluZCAtPSAmc3cKKyAgICAgICAgICAgIGxldCBpbmQgLT0gc2hpZnR3aWR0aCgpCiAgICAgICAgICAgICBsZXQgc3RheSA9IDAKICAgICAgICAgZW5kaWYKIApAQCAtMjY2LDcgKzI2Niw3IEBACiAgICAgICAgICAgICAgICAgbGV0IGNoYXIgPSBsaW5lW2ldCiAgICAgICAgICAgICAgICAgaWYgY2hhciA9PSAnXScgfHwgY2hhciA9PSAnfScKICAgICAgICAgICAgICAgICAgICAgaWYgczpDaGVja1BhaXJlZElzTGFzdENoYXJhY3RlcihsbnVtLCBpKQotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZCAtPSAmc3cKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmQgLT0gc2hpZnR3aWR0aCgpCiAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RheSA9IDAKICAgICAgICAgICAgICAgICAgICAgZW5kaWYKICAgICAgICAgICAgICAgICBlbmRpZgpAQCAtMjgwLDEyICsyODAsMTIgQEAKICAgICBpZiBnOnRleF9pbmRlbnRfaXRlbXMKICAgICAgICAgIiAnXGl0ZW0nIG9yICdcYmliaXRlbScgaXRzZWxmOgogICAgICAgICBpZiBjbGluZSA9fiBnOnRleF9pdGVtcwotICAgICAgICAgICAgbGV0IGluZCA9IGluZCAtICZzdworICAgICAgICAgICAgbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogICAgICAgICAgICAgbGV0IHN0YXkgPSAwCiAgICAgICAgIGVuZGlmCiAgICAgICAgICIgbGluZXMgZm9sbG93aW5nIHRvICdcaXRlbScgYXJlIGludGVudGVkIG9uY2UgYWdhaW46CiAgICAgICAgIGlmIGxpbmUgPX4gZzp0ZXhfaXRlbXMKLSAgICAgICAgICAgIGxldCBpbmQgPSBpbmQgKyAmc3cKKyAgICAgICAgICAgIGxldCBpbmQgPSBpbmQgKyBzaGlmdHdpZHRoKCkKICAgICAgICAgICAgIGxldCBzdGF5ID0gMAogICAgICAgICBlbmRpZgogICAgIGVuZGlmCkBAIC0zMTcsOSArMzE3LDkgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZW50KGxudW0pCiAgICAgICAgICAgICBlbmRpZgogICAgICAgICAgICAgaWYgbGluZSA9fiBnOnRleF9pdGVtaXplX2VudgotICAgICAgICAgICAgICAgIHJldHVybiBpbmRlbnQobG51bSkgKyAyICogJnN3CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGVudChsbnVtKSArIDIgKiBzaGlmdHdpZHRoKCkKICAgICAgICAgICAgIGVuZGlmCi0gICAgICAgICAgICByZXR1cm4gaW5kZW50KGxudW0pICsgJnN3CisgICAgICAgICAgICByZXR1cm4gaW5kZW50KGxudW0pICsgc2hpZnR3aWR0aCgpCiAgICAgICAgIGVuZGlmCiAgICAgZW5kZm9yCiAgICAgcmV0dXJuIC0xCkBAIC0zNDcsNyArMzQ3LDcgQEAKICAgICAgICAgICAgIGxldCBtaW5faW5kZW50ID0gbWluKFttaW5faW5kZW50LCBpbmRlbnQobG51bSldKQogICAgICAgICBlbmRpZgogICAgIGVuZGZvcgotICAgIHJldHVybiBtaW5faW5kZW50IC0gJnN3CisgICAgcmV0dXJuIG1pbl9pbmRlbnQgLSBzaGlmdHdpZHRoKCkKIGVuZGZ1bmN0aW9uCiAKICIgTW9zdCBvZiB0aGUgY29kZSBpcyBmcm9tIG1hdGNocGFyZW4udmltCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC90aWxkZS52aW0gYi9ydW50aW1lL2luZGVudC90aWxkZS52aW0KaW5kZXggNWZkY2ZlMC4uMTMwODJjOCAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvdGlsZGUudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L3RpbGRlLnZpbQpAQCAtMjUsMTEgKzI1LDExIEBACiAJZW5kaWYKIAogCWlmIGdldGxpbmUodjpsbnVtKSA9fiAnXlxzKlx+XChlbmRpZlx8ZWxzZVx8ZWxzZWlmXHxlbmRcKVw+JwotCQlyZXR1cm4gaW5kZW50KHY6bG51bSkgLSAmc3cKKwkJcmV0dXJuIGluZGVudCh2OmxudW0pIC0gc2hpZnR3aWR0aCgpCiAJZW5kaWYKIAogCWlmIGdldGxpbmUocGxudW0pID1+ICdeXHMqXH5cKGlmXHxmb3JlYWNoXHxmb3JlYWNoX3Jvd1x8eG1sX2xvb3BcfGZpbGVfbG9vcFx8ZmlsZV93cml0ZVx8ZmlsZV9hcHBlbmRcfGltYXBfbG9vcHNlY3Rpb25zXHxpbWFwX2luZGV4XHxpbWFwX2xpc3RcfGxkYXBfc2VhcmNoXHxwb3N0X2xvb3BhbGxcfHBvc3RfbG9vcFx8ZmlsZV9sb29wXHxzcWxfbG9vcF9udW1cfHNxbF9kYm1zc2VsZWN0XHxzZWFyY2hcfHNxbF9sb29wXHxwb3N0XHxmb3JcfGZ1bmN0aW9uX2RlZmluZVx8c2lsZW50XHx3aGlsZVx8c2V0dmFsYmlnXHxtYWlsX2NyZWF0ZVx8c3lzdGVtcGlwZVx8bWFpbF9zZW5kXHxkdWFsXHxlbHNlaWZcfGVsc2VcKVw+JwotCQlyZXR1cm4gaW5kZW50KHBsbnVtKSArICZzdworCQlyZXR1cm4gaW5kZW50KHBsbnVtKSArIHNoaWZ0d2lkdGgoKQogCWVsc2UKIAkJcmV0dXJuIC0xCiAJZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3ZiLnZpbSBiL3J1bnRpbWUvaW5kZW50L3ZiLnZpbQppbmRleCA1NWE4ZWEzLi40ZDA1MzQ1IDEwMDY0NAotLS0gYS9ydW50aW1lL2luZGVudC92Yi52aW0KKysrIGIvcnVudGltZS9pbmRlbnQvdmIudmltCkBAIC00OSwyNiArNDksMjYgQEAKIAogICAgICIgQWRkCiAgICAgaWYgcHJldmlvdXNfbGluZSA9fj8gJ15ccypcPFwoYmVnaW5cfFwlKFwlKHByaXZhdGVcfHB1YmxpY1x8ZnJpZW5kXClcc1wrXClcPVwlKGZ1bmN0aW9uXHxzdWJcfHByb3BlcnR5XClcfHNlbGVjdFx8Y2FzZVx8ZGVmYXVsdFx8aWZcfGVsc2VcfGVsc2VpZlx8ZG9cfGZvclx8d2hpbGVcfGVudW1cfHdpdGhcKVw+JwotCWxldCBpbmQgPSBpbmQgKyAmc3cKKwlsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgICAgZW5kaWYKIAogICAgICIgU3VidHJhY3QKICAgICBpZiB0aGlzX2xpbmUgPX4/ICdeXHMqXDxlbmRcPlxzXCtcPHNlbGVjdFw+JwogCWlmIHByZXZpb3VzX2xpbmUgIX4/ICdeXHMqXDxzZWxlY3RcPicKLQkgICAgbGV0IGluZCA9IGluZCAtIDIgKiAmc3cKKwkgICAgbGV0IGluZCA9IGluZCAtIDIgKiBzaGlmdHdpZHRoKCkKIAllbHNlCiAJICAgICIgdGhpcyBjYXNlIGlzIGZvciBhbiBlbXB0eSAnc2VsZWN0JyAtLSAnZW5kIHNlbGVjdCcKIAkgICAgIiAody9vIGFueSBjYXNlIHN0YXRlbWVudHMpIGxpa2U6CiAJICAgICIKIAkgICAgIiBzZWxlY3QgY2FzZSByZWFkd3JpdGUKIAkgICAgIiBlbmQgc2VsZWN0Ci0JICAgIGxldCBpbmQgPSBpbmQgLSAmc3cKKwkgICAgbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogCWVuZGlmCiAgICAgZWxzZWlmIHRoaXNfbGluZSA9fj8gJ15ccypcPFwoZW5kXHxlbHNlXHxlbHNlaWZcfHVudGlsXHxsb29wXHxuZXh0XHx3ZW5kXClcPicKLQlsZXQgaW5kID0gaW5kIC0gJnN3CisJbGV0IGluZCA9IGluZCAtIHNoaWZ0d2lkdGgoKQogICAgIGVsc2VpZiB0aGlzX2xpbmUgPX4/ICdeXHMqXDxcKGNhc2VcfGRlZmF1bHRcKVw+JwogCWlmIHByZXZpb3VzX2xpbmUgIX4/ICdeXHMqXDxzZWxlY3RcPicKLQkgICAgbGV0IGluZCA9IGluZCAtICZzdworCSAgICBsZXQgaW5kID0gaW5kIC0gc2hpZnR3aWR0aCgpCiAJZW5kaWYKICAgICBlbmRpZgogCmRpZmYgLS1naXQgYS9ydW50aW1lL2luZGVudC92aGRsLnZpbSBiL3J1bnRpbWUvaW5kZW50L3ZoZGwudmltCmluZGV4IDY5ODI4NTkuLjdjMzk1NjAgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvaW5kZW50L3ZoZGwudmltCisrKyBiL3J1bnRpbWUvaW5kZW50L3ZoZGwudmltCkBAIC0yLDcgKzIsNyBAQAogIiBMYW5ndWFnZTogICAgVkhETAogIiBNYWludGFpbmVyOiAgR2VyYWxkIExhaSA8bGFpZ2VyYSt2aW0/Z21haWwuY29tPgogIiBWZXJzaW9uOiAgICAgMS42MAotIiBMYXN0IENoYW5nZTogMjAxNiBGZWIgMjYKKyIgTGFzdCBDaGFuZ2U6IDIwMTcgSnVuIDEzCiAiIFVSTDogICAgICAgICBodHRwOi8vd3d3LnZpbS5vcmcvc2NyaXB0cy9zY3JpcHQucGhwP3NjcmlwdF9pZD0xNDUwCiAKICIgb25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkCkBAIC0xMTQsOSArMTE0LDkgQEAKICAgICAgIHJldHVybiBpbmQyICsgbQogICAgIGVsc2UKICAgICAgIGlmIGc6dmhkbF9pbmRlbnRfZ2VucG9ydG1hcAotICAgICAgICByZXR1cm4gaW5kMiArIHN0cmlkeChwcmV2c19ub2ksICcoJykgKyAmc3cKKyAgICAgICAgcmV0dXJuIGluZDIgKyBzdHJpZHgocHJldnNfbm9pLCAnKCcpICsgc2hpZnR3aWR0aCgpCiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBpbmQyICsgJnN3CisgICAgICAgIHJldHVybiBpbmQyICsgc2hpZnR3aWR0aCgpCiAgICAgICBlbmRpZgogICAgIGVuZGlmCiAgIGVuZGlmCkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICBpZiBnOnZoZGxfaW5kZW50X3Joc2Fzc2lnbgogICAgICAgcmV0dXJuIGluZDIgKyBtYXRjaGVuZChwcmV2c19ub2ksICc8PVxzKlx6ZS4nKQogICAgIGVsc2UKLSAgICAgIHJldHVybiBpbmQyICsgJnN3CisgICAgICByZXR1cm4gaW5kMiArIHNoaWZ0d2lkdGgoKQogICAgIGVuZGlmCiAgIGVuZGlmCiAKQEAgLTIxOCwxMiArMjE4LDEyIEBACiAgICAgICBsZXQgcHMgPSBnZXRsaW5lKHBuKQogCiAgICAgICBpZiAocHMgPX4/IHM6TkMuJ1w8YmVnaW5cPicpCi0gICAgICAgIHJldHVybiBpbmRlbnQocG4pIC0gJnN3CisgICAgICAgIHJldHVybiBpbmRlbnQocG4pIC0gc2hpZnR3aWR0aCgpCiAgICAgICBlbmRpZgogICAgIGVuZHdoaWxlCiAKICAgICBpZiAocG4gPT0gMCkKLSAgICAgIHJldHVybiBpbmQgLSAmc3cKKyAgICAgIHJldHVybiBpbmQgLSBzaGlmdHdpZHRoKCkKICAgICBlbHNlCiAgICAgICByZXR1cm4gaW5kZW50KHBuKQogICAgIGVuZGlmCkBAIC0yMzcsNyArMjM3LDcgQEAKICAgICAiIGtleXdvcmQ6ICJ0eXBlIgogICAgIGxldCBzMyA9IHM6TkMuczpORS4nXDx0eXBlXD4nCiAgICAgaWYgY3VycyAhfj8gczMuJy4qJy5zOk5DLidcPFwlKHJlY29yZFx8dW5pdHNcKVw+LionLnM6RVMgJiYgcHJldnMgPX4/IHMzCi0gICAgICBsZXQgaW5kID0gaW5kICsgJnN3CisgICAgICBsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgICAgZW5kaWYKICAgICByZXR1cm4gaW5kCiAgIGVuZGlmCkBAIC0yODIsNyArMjgyLDcgQEAKICAgIiByZW1vdmVkOiAgImJlZ2luIiwgImNhc2UiLCAiZWxzaWYiLCAiaWYiLCAibG9vcCIsICJyZWNvcmQiLCAidW5pdHMiLCAid2hpbGUiCiAgICIgd2hlcmU6ICAgIGFueXdoZXJlIGluIHByZXZpb3VzIGxpbmUKICAgaWYgcHJldnMgPX4/IHM6TkMuczpORS4nXDxcJShibG9ja1x8cHJvY2Vzc1wpXD4nCi0gICAgcmV0dXJuIGluZCArICZzdworICAgIHJldHVybiBpbmQgKyBzaGlmdHdpZHRoKCkKICAgZW5kaWYKIAogICAiIGluZGVudDogICArc3cKQEAgLTI5MCw3ICsyOTAsNyBAQAogICAiIHJlbW92ZWQ6ICAiY29tcG9uZW50IiwgImZvciIsICJ3aGVuIiwgIndpdGgiCiAgICIgd2hlcmU6ICAgIHN0YXJ0IG9mIHByZXZpb3VzIGxpbmUKICAgaWYgcHJldnMgPX4/ICdeXHMqXCUoYXJjaGl0ZWN0dXJlXHxjb25maWd1cmF0aW9uXHxlbnRpdHlcfHBhY2thZ2VcKVw+JwotICAgIHJldHVybiBpbmQgKyAmc3cKKyAgICByZXR1cm4gaW5kICsgc2hpZnR3aWR0aCgpCiAgIGVuZGlmCiAKICAgIiBpbmRlbnQ6ICAgK3N3CkBAIC0yOTgsNyArMjk4LDcgQEAKICAgIiByZW1vdmVkOiAgImdlbmVyYXRlIiwgImlzIiwgIj0+IgogICAiIHdoZXJlOiAgICBlbmQgb2YgcHJldmlvdXMgbGluZQogICBpZiBwcmV2cyA9fj8gczpOQy4nXDxzZWxlY3QnLnM6RVMKLSAgICByZXR1cm4gaW5kICsgJnN3CisgICAgcmV0dXJuIGluZCArIHNoaWZ0d2lkdGgoKQogICBlbmRpZgogCiAgICIgaW5kZW50OiAgICtzdwpAQCAtMzEwLDcgKzMxMCw3IEBACiAgICIgd2hlcmU6ICAgIGVuZCBvZiBwcmV2aW91cyBsaW5lCiAgICIgX25vdGVfOiAgIGluZGVudCBhbGxvd2VkIHRvIGxlYXZlIHRoaXMgZmlsdGVyCiAgIGlmIHByZXZzID1+PyBzOk5DLidcJShcPGJlZ2luXD5cfCcuczpORS4nXDxcJShsb29wXHxyZWNvcmRcfHVuaXRzXClcPlwpJyB8fCBwcmV2cyA9fj8gJ15ccypcJShjb21wb25lbnRcfGVsc2VcfGZvclwpXD4nIHx8IHByZXZzID1+PyBzOk5DLidcJSgnLnM6TkUuJ1w8Z2VuZXJhdGVcfFw8XCUoaXNcfHRoZW5cKVx8PT5cKScuczpFUwotICAgIGxldCBpbmQgPSBpbmQgKyAmc3cKKyAgICBsZXQgaW5kID0gaW5kICsgc2hpZnR3aWR0aCgpCiAgIGVuZGlmCiAKICAgIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMjIsNyArMzIyLDcgQEAKICAgICBpZiBwcmV2cyA9fj8gczpOQy4nXDxpcycuczpFUwogICAgICAgcmV0dXJuIGluZAogICAgIGVsc2VpZiBwcmV2cyAhfj8gczQKLSAgICAgIHJldHVybiBpbmQgLSAmc3cKKyAgICAgIHJldHVybiBpbmQgLSBzaGlmdHdpZHRoKCkKICAgICBlbHNlCiAgICAgICByZXR1cm4gaW5kMgogICAgIGVuZGlmCkBAIC0zMzYsNyArMzM2LDcgQEAKICAgICBpZiBwcmV2cyA9fj8gJ15ccypcJShlbHNpZlx8Jy5zNS4nXCknCiAgICAgICByZXR1cm4gaW5kCiAgICAgZWxzZQotICAgICAgcmV0dXJuIGluZCAtICZzdworICAgICAgcmV0dXJuIGluZCAtIHNoaWZ0d2lkdGgoKQogICAgIGVuZGlmCiAgIGVuZGlmCiAKQEAgLTM2Nyw5ICszNjcsOSBAQAogICAgICAgICAid2hlcmU6ICAgIHN0YXJ0IG9mIHByZXZpb3VzIG5vbi1jb21tZW50IGxpbmUKICAgICAgICAgaWYgbSA9PSAxCiAgICAgICAgICAgaWYgcHMgPX4/ICdeXHMqZW5kXHNcK2Nhc2VcPicKLSAgICAgICAgICAgIHJldHVybiBpbmRlbnQocG4pIC0gMiAqICZzdworICAgICAgICAgICAgcmV0dXJuIGluZGVudChwbikgLSAyICogc2hpZnR3aWR0aCgpCiAgICAgICAgICAgZWxzZWlmIHBzID1+PyAnXlxzKndoZW5cPicKLSAgICAgICAgICAgIHJldHVybiBpbmRlbnQocG4pIC0gJnN3CisgICAgICAgICAgICByZXR1cm4gaW5kZW50KHBuKSAtIHNoaWZ0d2lkdGgoKQogICAgICAgICAgIGVsc2VpZiBwcyA9fj8gJ15ccypjYXNlXD4nCiAgICAgICAgICAgICByZXR1cm4gaW5kZW50KHBuKQogICAgICAgICAgIGVuZGlmCkBAIC0zODUsMTQgKzM4NSwxNCBAQAogICAgICAgbGV0IHBuID0gcHJldm5vbmJsYW5rKHBuIC0gMSkKICAgICAgIGxldCBwcyA9IGdldGxpbmUocG4pCiAgICAgZW5kd2hpbGUKLSAgICByZXR1cm4gaW5kIC0gJnN3CisgICAgcmV0dXJuIGluZCAtIHNoaWZ0d2lkdGgoKQogICBlbmRpZgogCiAgICIgaW5kZW50OiAgIC1zdwogICAiIGtleXdvcmQ6ICAiKSIKICAgIiB3aGVyZTogICAgc3RhcnQgb2YgY3VycmVudCBsaW5lCiAgIGlmIGN1cnMgPX4gJ15ccyopJwotICAgIHJldHVybiBpbmQgLSAmc3cKKyAgICByZXR1cm4gaW5kIC0gc2hpZnR3aWR0aCgpCiAgIGVuZGlmCiAKICAgIiBpbmRlbnQ6ICAgMApAQCAtNDA3LDcgKzQwNyw3IEBACiAgICIgd2hlcmU6ICAgIHN0YXJ0IG9mIGN1cnJlbnQgbGluZQogICAiaWYgY3VycyA9fj8gJ15ccyplbmRcc1wrXHdcK1w+JwogICBpZiBjdXJzID1+PyAnXlxzKmVuZFwlKFxzXHw7Jy5zOkVTLidcKScKLSAgICByZXR1cm4gaW5kIC0gJnN3CisgICAgcmV0dXJuIGluZCAtIHNoaWZ0d2lkdGgoKQogICBlbmRpZgogCiAgICIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQveG1sLnZpbSBiL3J1bnRpbWUvaW5kZW50L3htbC52aW0KaW5kZXggZGJlNWJlNS4uODdmZmIzMiAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQveG1sLnZpbQorKysgYi9ydW50aW1lL2luZGVudC94bWwudmltCkBAIC0xLDYgKzEsNiBAQAogIiBMYW5ndWFnZToJeG1sCiAiIE1haW50YWluZXI6CUpvaGFubmVzIFplbGxuZXIgPGpvaGFubmVzQHplbGxuZXIub3JnPgotIiBMYXN0IENoYW5nZToJMjAxMiBKdWwgMjUKKyIgTGFzdCBDaGFuZ2U6CTIwMTcgSnVuIDEzCiAiIE5vdGVzOgkxKSBkb2VzIG5vdCBpbmRlbnQgcHVyZSBub24teG1sIGNvZGUgKGUuZy4gZW1iZWRkZWQgc2NyaXB0cykKICIJCTIpIHdpbGwgYmUgY29uZnVzZWQgYnkgdW5iYWxhbmNlZCB0YWdzIGluIGNvbW1lbnRzCiAiCQlvciBDREFUQSBzZWN0aW9ucy4KQEAgLTY3LDcgKzY3LDcgQEAKIGZ1biEgPFNJRD5YbWxJbmRlbnRTdW0obG51bSwgc3R5bGUsIGFkZCkKICAgICBsZXQgbGluZSA9IGdldGxpbmUoYTpsbnVtKQogICAgIGlmIGE6c3R5bGUgPT0gbWF0Y2gobGluZSwgJ15ccyo8LycpCi0JcmV0dXJuICgmc3cgKgorCXJldHVybiAoc2hpZnR3aWR0aCgpICoKIAlcICAoPFNJRD5YbWxJbmRlbnRXaXRoUGF0dGVybihsaW5lLCBiOnhtbF9pbmRlbnRfb3BlbikKIAlcIC0gPFNJRD5YbWxJbmRlbnRXaXRoUGF0dGVybihsaW5lLCBiOnhtbF9pbmRlbnRfY2xvc2UpCiAJXCAtIDxTSUQ+WG1sSW5kZW50V2l0aFBhdHRlcm4obGluZSwgJy5cey19Lz4nKSkpICsgYTphZGQKZGlmZiAtLWdpdCBhL3J1bnRpbWUvaW5kZW50L3lhbWwudmltIGIvcnVudGltZS9pbmRlbnQveWFtbC52aW0KaW5kZXggMzIwMTQ2Mi4uM2ViMTZmOCAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQveWFtbC52aW0KKysrIGIvcnVudGltZS9pbmRlbnQveWFtbC52aW0KQEAgLTEsNyArMSw3IEBACiAiIFZpbSBpbmRlbnQgZmlsZQogIiBMYW5ndWFnZTogICAgICAgICBZQU1MCiAiIE1haW50YWluZXI6ICAgICAgIE5pa29sYWkgUGF2bG92IDx6eXgudmltQGdtYWlsLmNvbT4KLSIgTGFzdCBDaGFuZ2U6CSAgICAyMDE1IE5vdiAwMQorIiBMYXN0IENoYW5nZToJICAgIDIwMTcgSnVuIDEzCiAKICIgT25seSBsb2FkIHRoaXMgaW5kZW50IGZpbGUgd2hlbiBubyBvdGhlciB3YXMgbG9hZGVkLgogaWYgZXhpc3RzKCdiOmRpZF9pbmRlbnQnKQpAQCAtMjQsMTQgKzI0LDYgQEAKICAgICBmaW5pc2gKIGVuZGlmCiAKLWlmIGV4aXN0cygnKnNoaWZ0d2lkdGgnKQotICAgIGxldCBzOnNoaWZ0d2lkdGggPSBmdW5jdGlvbignc2hpZnR3aWR0aCcpCi1lbHNlCi0gICAgZnVuY3Rpb24gczpzaGlmdHdpZHRoKCkKLSAgICAgICAgcmV0dXJuICZzaGlmdHdpZHRoCi0gICAgZW5kZnVuY3Rpb24KLWVuZGlmCi0KIGZ1bmN0aW9uIHM6RmluZFByZXZMZXNzSW5kZW50ZWRMaW5lKGxudW0sIC4uLikKICAgICBsZXQgcHJldmxudW0gPSBwcmV2bm9uYmxhbmsoYTpsbnVtLTEpCiAgICAgbGV0IGN1cmluZGVudCA9IGE6MCA/IGE6MSA6IGluZGVudChhOmxudW0pCkBAIC0xMTksNyArMTExLDcgQEAKICAgICAgICAgIgogICAgICAgICAiIC0gfC0KICAgICAgICAgIiAgICAgQmxvY2sgc2NhbGFyIHdpdGhvdXQgaW5kZW50YXRpb24gaW5kaWNhdG9yCi0gICAgICAgIHJldHVybiBwcmV2aW5kZW50K3M6c2hpZnR3aWR0aCgpCisgICAgICAgIHJldHVybiBwcmV2aW5kZW50K3NoaWZ0d2lkdGgoKQogICAgIGVsc2VpZiBwcmV2bGluZSA9fiMgJ1x2WzotXVwgW3w+XSUoXGQrWytcLV0/fFsrXC1dP1xkKyklKFwjLip8XHMqKSQnCiAgICAgICAgICIgLSB8KzIKICAgICAgICAgIiAgIGJsb2NrIHNjYWxhciB3aXRoIGluZGVudGF0aW9uIGluZGljYXRvcgpAQCAtMTU1LDcgKzE0Nyw3IEBACiAgICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x2KSUoXHMrfFxzKiUoXCMuKik/JCkpKicKICAgICAgICAgIiBNYXBwaW5nIHdpdGg6IHZhbHVlCiAgICAgICAgICIgICAgIHRoYXQgaXMgbXVsdGlsaW5lIHNjYWxhcgotICAgICAgICByZXR1cm4gcHJldmluZGVudCtzOnNoaWZ0d2lkdGgoKQorICAgICAgICByZXR1cm4gcHJldmluZGVudCtzaGlmdHdpZHRoKCkKICAgICBlbmRpZgogICAgIHJldHVybiBwcmV2aW5kZW50CiBlbmRmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZGViY2hhbmdlbG9nLnZpbSBiL3J1bnRpbWUvc3ludGF4L2RlYmNoYW5nZWxvZy52aW0KaW5kZXggZWIwMmFhZi4uNmU2ZWQxOSAxMDA2NDQKLS0tIGEvcnVudGltZS9zeW50YXgvZGViY2hhbmdlbG9nLnZpbQorKysgYi9ydW50aW1lL3N5bnRheC9kZWJjaGFuZ2Vsb2cudmltCkBAIC0zLDcgKzMsNyBAQAogIiBNYWludGFpbmVyOiAgRGViaWFuIFZpbSBNYWludGFpbmVycyA8cGtnLXZpbS1tYWludGFpbmVyc0BsaXN0cy5hbGlvdGguZGViaWFuLm9yZz4KICIgRm9ybWVyIE1haW50YWluZXJzOiBHZXJmcmllZCBGdWNocyA8YWxmaWVAaXN0Lm9yZz4KICIgICAgICAgICAgICAgICAgICAgICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgotIiBMYXN0IENoYW5nZTogMjAxNiBOb3YgMTIKKyIgTGFzdCBDaGFuZ2U6IDIwMTcgQXByIDIzCiAiIFVSTDogaHR0cHM6Ly9hbm9uc2NtLmRlYmlhbi5vcmcvY2dpdC9wa2ctdmltL3ZpbS5naXQvcGxhaW4vcnVudGltZS9zeW50YXgvZGViY2hhbmdlbG9nLnZpbQogCiAiIFN0YW5kYXJkIHN5bnRheCBpbml0aWFsaXphdGlvbgpAQCAtMTQsMTQgKzE0LDE0IEBACiAiIENhc2UgZG9lc24ndCBtYXR0ZXIgZm9yIHVzCiBzeW4gY2FzZSBpZ25vcmUKIAotbGV0IHVyZ2VuY3k9J3VyZ2VuY3k9XChsb3dcfG1lZGl1bVx8aGlnaFx8Y3JpdGljYWxcKVwoIFteWzpzcGFjZTpdLF1bXixdKlwpXD0nCi1sZXQgYmluTk1VPSdiaW5hcnktb25seT15ZXMnCitsZXQgczp1cmdlbmN5PSd1cmdlbmN5PVwobG93XHxtZWRpdW1cfGhpZ2hcfGNyaXRpY2FsXClcKCBbXls6c3BhY2U6XSxdW14sXSpcKVw9JworbGV0IHM6YmluTk1VPSdiaW5hcnktb25seT15ZXMnCiAKICIgRGVmaW5lIHNvbWUgY29tbW9uIGV4cHJlc3Npb25zIHdlIGNhbiB1c2UgbGF0ZXIgb24KIHN5biBtYXRjaCBkZWJjaGFuZ2Vsb2dOYW1lCWNvbnRhaW5lZCAiXltbOmFsbnVtOl1dW1s6YWxudW06XS4rLV1cKyAiCi1leGUgJ3N5biBtYXRjaCBkZWJjaGFuZ2Vsb2dGaXJzdEtWCWNvbnRhaW5lZCAiOyBcKCcudXJnZW5jeS4nXHwnLmJpbk5NVS4nXCkiJwotZXhlICdzeW4gbWF0Y2ggZGViY2hhbmdlbG9nT3RoZXJLVgljb250YWluZWQgIiwgXCgnLnVyZ2VuY3kuJ1x8Jy5iaW5OTVUuJ1wpIicKLXN5biBtYXRjaCBkZWJjaGFuZ2Vsb2dUYXJnZXQJY29udGFpbmVkICJcdiAlKGZyb3plbnx1bnN0YWJsZXxzaWR8JSh0ZXN0aW5nfCUob2xkKT1zdGFibGUpJSgtcHJvcG9zZWQtdXBkYXRlc3wtc2VjdXJpdHkpPXxleHBlcmltZW50YWx8c3F1ZWV6ZS0lKGJhY2twb3J0cyUoLXNsb3BweSk9fHZvbGF0aWxlfGx0c3xzZWN1cml0eSl8d2hlZXp5LSUoYmFja3BvcnRzJSgtc2xvcHB5KT18c2VjdXJpdHkpfGplc3NpZSUoLWJhY2twb3J0c3wtc2VjdXJpdHkpPXxzdHJldGNofCUoZGV2ZWx8cHJlY2lzZXx0cnVzdHl8dml2aWR8d2lseXx4ZW5pYWx8eWFra2V0eXx6ZXN0eSklKC0lKHNlY3VyaXR5fHByb3Bvc2VkfHVwZGF0ZXN8YmFja3BvcnRzfGNvbW1lcmNpYWx8cGFydG5lcikpPSkrIgorZXhlICdzeW4gbWF0Y2ggZGViY2hhbmdlbG9nRmlyc3RLVgljb250YWluZWQgIjsgXCgnLnM6dXJnZW5jeS4nXHwnLnM6YmluTk1VLidcKSInCitleGUgJ3N5biBtYXRjaCBkZWJjaGFuZ2Vsb2dPdGhlcktWCWNvbnRhaW5lZCAiLCBcKCcuczp1cmdlbmN5LidcfCcuczpiaW5OTVUuJ1wpIicKK3N5biBtYXRjaCBkZWJjaGFuZ2Vsb2dUYXJnZXQJY29udGFpbmVkICJcdiAlKGZyb3plbnx1bnN0YWJsZXxzaWR8JSh0ZXN0aW5nfCUob2xkKT1zdGFibGUpJSgtcHJvcG9zZWQtdXBkYXRlc3wtc2VjdXJpdHkpPXxleHBlcmltZW50YWx8c3F1ZWV6ZS0lKGJhY2twb3J0cyUoLXNsb3BweSk9fHZvbGF0aWxlfGx0c3xzZWN1cml0eSl8JSh3aGVlenl8amVzc2llKSUoLWJhY2twb3J0cyUoLXNsb3BweSk9fC1zZWN1cml0eSk9fHN0cmV0Y2glKC1iYWNrcG9ydHN8LXNlY3VyaXR5KT18JShkZXZlbHxwcmVjaXNlfHRydXN0eXx2aXZpZHx3aWx5fHhlbmlhbHx5YWtrZXR5fHplc3R5fGFydGZ1bCklKC0lKHNlY3VyaXR5fHByb3Bvc2VkfHVwZGF0ZXN8YmFja3BvcnRzfGNvbW1lcmNpYWx8cGFydG5lcikpPSkrIgogc3luIG1hdGNoIGRlYmNoYW5nZWxvZ1ZlcnNpb24JY29udGFpbmVkICIoLlx7LX0pIgogc3luIG1hdGNoIGRlYmNoYW5nZWxvZ0Nsb3Nlcwljb250YWluZWQgImNsb3NlczpcX3MqXChidWdcKVw9I1w9XF9zXD1cZFwrXCgsXF9zKlwoYnVnXClcPSNcPVxfc1w9XGRcK1wpKiIKIHN5biBtYXRjaCBkZWJjaGFuZ2Vsb2dMUAljb250YWluZWQgIlxjbHA6XHNcKyNcZFwrXCgsXHMqI1xkXCtcKSoiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9kZWJzb3VyY2VzLnZpbSBiL3J1bnRpbWUvc3ludGF4L2RlYnNvdXJjZXMudmltCmluZGV4IDM5MGM0MzAuLjRmYTgwZGUgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvc3ludGF4L2RlYnNvdXJjZXMudmltCisrKyBiL3J1bnRpbWUvc3ludGF4L2RlYnNvdXJjZXMudmltCkBAIC0yLDcgKzIsNyBAQAogIiBMYW5ndWFnZTogICAgIERlYmlhbiBzb3VyY2VzLmxpc3QKICIgTWFpbnRhaW5lcjogICBEZWJpYW4gVmltIE1haW50YWluZXJzIDxwa2ctdmltLW1haW50YWluZXJzQGxpc3RzLmFsaW90aC5kZWJpYW4ub3JnPgogIiBGb3JtZXIgTWFpbnRhaW5lcjogTWF0dGhpanMgTW9obG1hbm4gPG1hdHRoaWpzQGNhY2hvbG9uZy5ubD4KLSIgTGFzdCBDaGFuZ2U6IDIwMTYgTm92IDEyCisiIExhc3QgQ2hhbmdlOiAyMDE3IEFwciAyMgogIiBVUkw6IGh0dHBzOi8vYW5vbnNjbS5kZWJpYW4ub3JnL2NnaXQvcGtnLXZpbS92aW0uZ2l0L3BsYWluL3J1bnRpbWUvc3ludGF4L2RlYnNvdXJjZXMudmltCiAKICIgU3RhbmRhcmQgc3ludGF4IGluaXRpYWxpemF0aW9uCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICBcICdvbGRzdGFibGUnLCAnc3RhYmxlJywgJ3Rlc3RpbmcnLCAndW5zdGFibGUnLCAnZXhwZXJpbWVudGFsJywKICAgICAgIFwgJ3NxdWVlemUnLCAnd2hlZXp5JywgJ2plc3NpZScsICdzdHJldGNoJywgJ3NpZCcsICdyYy1idWdneScsCiAgICAgICBcCi0gICAgICBcICdwcmVjaXNlJywgJ3RydXN0eScsICd4ZW5pYWwnLCAneWFra2V0eScsICd6ZXN0eScsICdkZXZlbCcKKyAgICAgIFwgJ3RydXN0eScsICd4ZW5pYWwnLCAneWFra2V0eScsICd6ZXN0eScsICdhcnRmdWwnLCAnZGV2ZWwnCiAgICAgICBcIF0KIGxldCBzOnVuc3VwcG9ydGVkID0gWwogICAgICAgXCAnYnV6eicsICdyZXgnLCAnYm8nLCAnaGFtbScsICdzbGluaycsICdwb3RhdG8nLApAQCAtMzMsMTUgKzMzLDE1IEBACiAgICAgICBcCiAgICAgICBcICd3YXJ0eScsICdob2FyeScsICdicmVlenknLCAnZGFwcGVyJywgJ2VkZ3knLCAnZmVpc3R5JywKICAgICAgIFwgJ2d1dHN5JywgJ2hhcmR5JywgJ2ludHJlcGlkJywgJ2phdW50eScsICdrYXJtaWMnLCAnbHVjaWQnLAotICAgICAgXCAnbWF2ZXJpY2snLCAnbmF0dHknLCAnb25laXJpYycsICdxdWFudGFsJywgJ3JhcmluZycsICdzYXVjeScsCisgICAgICBcICdtYXZlcmljaycsICduYXR0eScsICdvbmVpcmljJywgJ3ByZWNpc2UnLCAncXVhbnRhbCcsICdyYXJpbmcnLCAnc2F1Y3knLAogICAgICAgXCAndXRvcGljJywgJ3ZpdmlkJywgJ3dpbHknCiAgICAgICBcIF0KIGxldCAmY3BvPXM6Y3BvCiAKICIgTWF0Y2ggdXJpJ3MKIHN5biBtYXRjaCBkZWJzb3VyY2VzVXJpICAgICAgICAgICAgK1woaHR0cHNcPzovL1x8ZnRwOi8vXHxbcnNdc2g6Ly9cfGRlYnRvcnJlbnQ6Ly9cfFwoY2Ryb21cfGNvcHlcfGZpbGVcKTpcKVteJyAJPD4iXVwrKwotZXhlICdzeW4gbWF0Y2ggZGVic291cmNlc0Rpc3RyS2V5d29yZCAgICtcKFtbOmFsbnVtOl1fLi9dKlwpXCgnLiBqb2luKHM6c3VwcG9ydGVkLCAnXHwnKS4gJ1wpXChbLVs6YWxudW06XV8uL10qXCkrJwotZXhlICdzeW4gbWF0Y2ggZGVic291cmNlc1Vuc3VwcG9ydGVkRGlzdHJLZXl3b3JkICtcKFtbOmFsbnVtOl1fLi9dKlwpXCgnLiBqb2luKHM6dW5zdXBwb3J0ZWQsICdcfCcpIC4nXClcKFstWzphbG51bTpdXy4vXSpcKSsnCitleGUgJ3N5biBtYXRjaCBkZWJzb3VyY2VzRGlzdHJLZXl3b3JkICAgK1woW1s6YWxudW06XV8uL10qXClcPFwoJy4gam9pbihzOnN1cHBvcnRlZCwgJ1x8JykuICdcKVw+XChbLVs6YWxudW06XV8uL10qXCkrJworZXhlICdzeW4gbWF0Y2ggZGVic291cmNlc1Vuc3VwcG9ydGVkRGlzdHJLZXl3b3JkICtcKFtbOmFsbnVtOl1fLi9dKlwpXDxcKCcuIGpvaW4oczp1bnN1cHBvcnRlZCwgJ1x8JykgLidcKVw+XChbLVs6YWxudW06XV8uL10qXCkrJwogCiAiIEFzc29jaWF0ZSBvdXIgbWF0Y2hlcyBhbmQgcmVnaW9ucyB3aXRoIHByZXR0eSBjb2xvdXJzCiBoaSBkZWYgbGluayBkZWJzb3VyY2VzTGluZSAgICAgICAgICAgICAgICAgICAgRXJyb3IKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2hlbHAudmltIGIvcnVudGltZS9zeW50YXgvaGVscC52aW0KaW5kZXggOWYwNTZlZS4uNzBjNGU2NSAxMDA2NDQKLS0tIGEvcnVudGltZS9zeW50YXgvaGVscC52aW0KKysrIGIvcnVudGltZS9zeW50YXgvaGVscC52aW0KQEAgLTEsNyArMSw3IEBACiAiIFZpbSBzeW50YXggZmlsZQogIiBMYW5ndWFnZToJVmltIGhlbHAgZmlsZQogIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciAoQnJhbUB2aW0ub3JnKQotIiBMYXN0IENoYW5nZToJMjAxNiBTZXAgMDIKKyIgTGFzdCBDaGFuZ2U6CTIwMTcgSnVuIDEzCiAKICIgUXVpdCB3aGVuIGEgKGN1c3RvbSkgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCiBpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQpAQCAtNTQsNyArNTQsOCBAQAogICBzeW4gbWF0Y2ggaGVscElnbm9yZQkJIi4iIGNvbnRhaW5lZAogZW5kaWYKIHN5biBrZXl3b3JkIGhlbHBOb3RlCQlub3RlIE5vdGUgTk9URSBub3RlOiBOb3RlOiBOT1RFOiBOb3RlcyBOb3RlczoKLXN5biBrZXl3b3JkIGhlbHBXYXJuaW5nCQlXQVJOSU5HOiBXYXJuaW5nOgorc3luIGtleXdvcmQgaGVscFdhcm5pbmcJCVdBUk5JTkcgV0FSTklORzogV2FybmluZzoKK3N5biBrZXl3b3JkIGhlbHBEZXByZWNhdGVkCURFUFJFQ0FURUQgREVQUkVDQVRFRDogRGVwcmVjYXRlZDoKIHN5biBtYXRjaCBoZWxwU3BlY2lhbAkJIlw8Tlw+Igogc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkiXDxOXC4kIm1lPWUtMQogc3luIG1hdGNoIGhlbHBTcGVjaWFsCQkiXDxOXC5ccyJtZT1lLTIKQEAgLTE3MSw2ICsxNzIsNyBAQAogaGkgZGVmIGxpbmsgaGVscFNwZWNpYWwJCVNwZWNpYWwKIGhpIGRlZiBsaW5rIGhlbHBOb3RlCQlUb2RvCiBoaSBkZWYgbGluayBoZWxwV2FybmluZwkJVG9kbworaGkgZGVmIGxpbmsgaGVscERlcHJlY2F0ZWQJVG9kbwogCiBoaSBkZWYgbGluayBoZWxwQ29tbWVudAkJQ29tbWVudAogaGkgZGVmIGxpbmsgaGVscENvbnN0YW50CUNvbnN0YW50CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9waHAudmltIGIvcnVudGltZS9zeW50YXgvcGhwLnZpbQppbmRleCAyZmIwODYxLi4xMTA4YzM5IDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC9waHAudmltCisrKyBiL3J1bnRpbWUvc3ludGF4L3BocC52aW0KQEAgLTEsNyArMSw3IEBACiAiIFZpbSBzeW50YXggZmlsZQogIiBMYW5ndWFnZTogcGhwIFBIUCAzLzQvNS83CiAiIE1haW50YWluZXI6IEphc29uIFdvb2ZlbmRlbiA8amFzb25AamFzb253b29mLmNvbT4KLSIgTGFzdCBDaGFuZ2U6IEFwciAyOCwgMjAxNworIiBMYXN0IENoYW5nZTogSnVuIDA5LCAyMDE3CiAiIFVSTDogaHR0cHM6Ly9qYXNvbndvb2YuY29tL2dpdHdlYi8/cD12aW0tc3ludGF4LmdpdDthPWJsb2I7Zj1waHAudmltO2hiPUhFQUQKICIgRm9ybWVyIE1haW50YWluZXJzOiBQZXRlciBIb2RnZSA8dG9vbXVjaHBocC12aW1AeWFob28uY29tPgogIiAgICAgICAgIERlYmlhbiBWSU0gTWFpbnRhaW5lcnMgPHBrZy12aW0tbWFpbnRhaW5lcnNAbGlzdHMuYWxpb3RoLmRlYmlhbi5vcmc+CkBAIC0xOTcsNyArMTk3LDcgQEAKIHN5biBrZXl3b3JkIHBocEZ1bmN0aW9ucyAgYWdncmVnYXRlX2luZm8gYWdncmVnYXRlX21ldGhvZHNfYnlfbGlzdCBhZ2dyZWdhdGVfbWV0aG9kc19ieV9yZWdleHAgYWdncmVnYXRlX21ldGhvZHMgYWdncmVnYXRlX3Byb3BlcnRpZXNfYnlfbGlzdCBhZ2dyZWdhdGVfcHJvcGVydGllc19ieV9yZWdleHAgYWdncmVnYXRlX3Byb3BlcnRpZXMgYWdncmVnYXRlIGFnZ3JlZ2F0aW9uX2luZm8gZGVhZ2dyZWdhdGUgIGNvbnRhaW5lZAogc3luIGtleXdvcmQgcGhwRnVuY3Rpb25zICBvY2liaW5kYnluYW1lIG9jaWNhbmNlbCBvY2ljbG9zZWxvYiBvY2ljb2xsYXBwZW5kIG9jaWNvbGxhc3NpZ24gb2NpY29sbGFzc2lnbmVsZW0gb2NpY29sbGdldGVsZW0gb2NpY29sbG1heCBvY2ljb2xsc2l6ZSBvY2ljb2xsdHJpbSBvY2ljb2x1bW5pc251bGwgb2NpY29sdW1ubmFtZSBvY2ljb2x1bW5wcmVjaXNpb24gb2NpY29sdW1uc2NhbGUgb2NpY29sdW1uc2l6ZSBvY2ljb2x1bW50eXBlIG9jaWNvbHVtbnR5cGVyYXcgb2NpY29tbWl0IG9jaWRlZmluZWJ5bmFtZSBvY2llcnJvciBvY2lleGVjdXRlIG9jaWZldGNoIG9jaWZldGNoaW50byBvY2lmZXRjaHN0YXRlbWVudCBvY2lmcmVlY29sbGVjdGlvbiBvY2lmcmVlY3Vyc29yIG9jaWZyZWVkZXNjIG9jaWZyZWVzdGF0ZW1lbnQgb2NpaW50ZXJuYWxkZWJ1ZyBvY2lsb2FkbG9iIG9jaWxvZ29mZiBvY2lsb2dvbiBvY2luZXdjb2xsZWN0aW9uIG9jaW5ld2N1cnNvciBvY2luZXdkZXNjcmlwdG9yIG9jaW5sb2dvbiBvY2ludW1jb2xzIG9jaXBhcnNlIG9jaXBsb2dvbiBvY2lyZXN1bHQgb2Npcm9sbGJhY2sgb2Npcm93Y291bnQgb2Npc2F2ZWxvYiBvY2lzYXZlbG9iZmlsZSBvY2lzZXJ2ZXJ2ZXJzaW9uIG9jaXNldHByZWZldGNoIG9jaXN0YXRlbWVudHR5cGUgb2Npd3JpdGVsb2J0b2ZpbGUgb2Npd3JpdGV0ZW1wb3Jhcnlsb2IgY29udGFpbmVkCiBzeW4ga2V5d29yZCBwaHBGdW5jdGlvbnMgIG9kYmNfYXV0b2NvbW1pdCBvZGJjX2Jpbm1vZGUgb2RiY19jbG9zZV9hbGwgb2RiY19jbG9zZSBvZGJjX2NvbHVtbnByaXZpbGVnZXMgb2RiY19jb2x1bW5zIG9kYmNfY29tbWl0IG9kYmNfY29ubmVjdCBvZGJjX2N1cnNvciBvZGJjX2RhdGFfc291cmNlIG9kYmNfZG8gb2RiY19lcnJvciBvZGJjX2Vycm9ybXNnIG9kYmNfZXhlYyBvZGJjX2V4ZWN1dGUgb2RiY19mZXRjaF9hcnJheSBvZGJjX2ZldGNoX2ludG8gb2RiY19mZXRjaF9vYmplY3Qgb2RiY19mZXRjaF9yb3cgb2RiY19maWVsZF9sZW4gb2RiY19maWVsZF9uYW1lIG9kYmNfZmllbGRfbnVtIG9kYmNfZmllbGRfcHJlY2lzaW9uIG9kYmNfZmllbGRfc2NhbGUgb2RiY19maWVsZF90eXBlIG9kYmNfZm9yZWlnbmtleXMgb2RiY19mcmVlX3Jlc3VsdCBvZGJjX2dldHR5cGVpbmZvIG9kYmNfbG9uZ3JlYWRsZW4gb2RiY19uZXh0X3Jlc3VsdCBvZGJjX251bV9maWVsZHMgb2RiY19udW1fcm93cyBvZGJjX3Bjb25uZWN0IG9kYmNfcHJlcGFyZSBvZGJjX3ByaW1hcnlrZXlzIG9kYmNfcHJvY2VkdXJlY29sdW1ucyBvZGJjX3Byb2NlZHVyZXMgb2RiY19yZXN1bHRfYWxsIG9kYmNfcmVzdWx0IG9kYmNfcm9sbGJhY2sgb2RiY19zZXRvcHRpb24gb2RiY19zcGVjaWFsY29sdW1ucyBvZGJjX3N0YXRpc3RpY3Mgb2RiY190YWJsZXByaXZpbGVnZXMgb2RiY190YWJsZXMgIGNvbnRhaW5lZAotc3luIGtleXdvcmQgcGhwRnVuY3Rpb25zICBvcGVuc3NsX2Nzcl9leHBvcnRfdG9fZmlsZSBvcGVuc3NsX2Nzcl9leHBvcnQgb3BlbnNzbF9jc3JfbmV3IG9wZW5zc2xfY3NyX3NpZ24gb3BlbnNzbF9lcnJvcl9zdHJpbmcgb3BlbnNzbF9mcmVlX2tleSBvcGVuc3NsX2dldF9wcml2YXRla2V5IG9wZW5zc2xfZ2V0X3B1YmxpY2tleSBvcGVuc3NsX29wZW4gb3BlbnNzbF9wa2NzN19kZWNyeXB0IG9wZW5zc2xfcGtjczdfZW5jcnlwdCBvcGVuc3NsX3BrY3M3X3NpZ24gb3BlbnNzbF9wa2NzN192ZXJpZnkgb3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlIG9wZW5zc2xfcGtleV9leHBvcnQgb3BlbnNzbF9wa2V5X2dldF9wcml2YXRlIG9wZW5zc2xfcGtleV9nZXRfcHVibGljIG9wZW5zc2xfcGtleV9uZXcgb3BlbnNzbF9wcml2YXRlX2RlY3J5cHQgb3BlbnNzbF9wcml2YXRlX2VuY3J5cHQgb3BlbnNzbF9wdWJsaWNfZGVjcnlwdCBvcGVuc3NsX3B1YmxpY19lbmNyeXB0IG9wZW5zc2xfc2VhbCBvcGVuc3NsX3NpZ24gb3BlbnNzbF92ZXJpZnkgb3BlbnNzbF94NTA5X2NoZWNrX3ByaXZhdGVfa2V5IG9wZW5zc2xfeDUwOV9jaGVja3B1cnBvc2Ugb3BlbnNzbF94NTA5X2V4cG9ydF90b19maWxlIG9wZW5zc2xfeDUwOV9leHBvcnQgb3BlbnNzbF94NTA5X2ZyZWUgb3BlbnNzbF94NTA5X3BhcnNlIG9wZW5zc2xfeDUwOV9yZWFkIGNvbnRhaW5lZAorc3luIGtleXdvcmQgcGhwRnVuY3Rpb25zICBvcGVuc3NsX2NpcGhlcl9pdl9sZW5ndGggb3BlbnNzbF9jc3JfZXhwb3J0X3RvX2ZpbGUgb3BlbnNzbF9jc3JfZXhwb3J0IG9wZW5zc2xfY3NyX2dldF9wdWJsaWNfa2V5IG9wZW5zc2xfY3NyX2dldF9zdWJqZWN0IG9wZW5zc2xfY3NyX25ldyBvcGVuc3NsX2Nzcl9zaWduIG9wZW5zc2xfZGVjcnlwdCBvcGVuc3NsX2RoX2NvbXB1dGVfa2V5IG9wZW5zc2xfZGlnZXN0IG9wZW5zc2xfZW5jcnlwdCBvcGVuc3NsX2Vycm9yX3N0cmluZyBvcGVuc3NsX2ZyZWVfa2V5IG9wZW5zc2xfZ2V0X2NlcnRfbG9jYXRpb25zIG9wZW5zc2xfZ2V0X2NpcGhlcl9tZXRob2RzIG9wZW5zc2xfZ2V0X21kX21ldGhvZHMgb3BlbnNzbF9nZXRfcHJpdmF0ZWtleSBvcGVuc3NsX2dldF9wdWJsaWNrZXkgb3BlbnNzbF9vcGVuIG9wZW5zc2xfcGJrZGYyIG9wZW5zc2xfcGtjczEyX2V4cG9ydF90b19maWxlIG9wZW5zc2xfcGtjczEyX2V4cG9ydCBvcGVuc3NsX3BrY3MxMl9yZWFkIG9wZW5zc2xfcGtjczdfZGVjcnlwdCBvcGVuc3NsX3BrY3M3X2VuY3J5cHQgb3BlbnNzbF9wa2NzN19zaWduIG9wZW5zc2xfcGtjczdfdmVyaWZ5IG9wZW5zc2xfcGtleV9leHBvcnRfdG9fZmlsZSBvcGVuc3NsX3BrZXlfZXhwb3J0IG9wZW5zc2xfcGtleV9mcmVlIG9wZW5zc2xfcGtleV9nZXRfZGV0YWlscyBvcGVuc3NsX3BrZXlfZ2V0X3ByaXZhdGUgb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMgb3BlbnNzbF9wa2V5X25ldyBvcGVuc3NsX3ByaXZhdGVfZGVjcnlwdCBvcGVuc3NsX3ByaXZhdGVfZW5jcnlwdCBvcGVuc3NsX3B1YmxpY19kZWNyeXB0IG9wZW5zc2xfcHVibGljX2VuY3J5cHQgb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzIG9wZW5zc2xfc2VhbCBvcGVuc3NsX3NpZ24gb3BlbnNzbF9zcGtpX2V4cG9ydF9jaGFsbGVuZ2Ugb3BlbnNzbF9zcGtpX2V4cG9ydCBvcGVuc3NsX3Nwa2lfbmV3IG9wZW5zc2xfc3BraV92ZXJpZnkgb3BlbnNzbF92ZXJpZnkgb3BlbnNzbF94NTA5X2NoZWNrX3ByaXZhdGVfa2V5IG9wZW5zc2xfeDUwOV9jaGVja3B1cnBvc2Ugb3BlbnNzbF94NTA5X2V4cG9ydF90b19maWxlIG9wZW5zc2xfeDUwOV9leHBvcnQgb3BlbnNzbF94NTA5X2ZpbmdlcnByaW50IG9wZW5zc2xfeDUwOV9mcmVlIG9wZW5zc2xfeDUwOV9wYXJzZSBvcGVuc3NsX3g1MDlfcmVhZCAgY29udGFpbmVkCiBzeW4ga2V5d29yZCBwaHBGdW5jdGlvbnMgIG9yYV9iaW5kIG9yYV9jbG9zZSBvcmFfY29sdW1ubmFtZSBvcmFfY29sdW1uc2l6ZSBvcmFfY29sdW1udHlwZSBvcmFfY29tbWl0IG9yYV9jb21taXRvZmYgb3JhX2NvbW1pdG9uIG9yYV9kbyBvcmFfZXJyb3Igb3JhX2Vycm9yY29kZSBvcmFfZXhlYyBvcmFfZmV0Y2hfaW50byBvcmFfZmV0Y2ggb3JhX2dldGNvbHVtbiBvcmFfbG9nb2ZmIG9yYV9sb2dvbiBvcmFfbnVtY29scyBvcmFfbnVtcm93cyBvcmFfb3BlbiBvcmFfcGFyc2Ugb3JhX3Bsb2dvbiBvcmFfcm9sbGJhY2sgIGNvbnRhaW5lZAogc3luIGtleXdvcmQgcGhwRnVuY3Rpb25zICBmbHVzaCBvYl9jbGVhbiBvYl9lbmRfY2xlYW4gb2JfZW5kX2ZsdXNoIG9iX2ZsdXNoIG9iX2dldF9jbGVhbiBvYl9nZXRfY29udGVudHMgb2JfZ2V0X2ZsdXNoIG9iX2dldF9sZW5ndGggb2JfZ2V0X2xldmVsIG9iX2dldF9zdGF0dXMgb2JfZ3poYW5kbGVyIG9iX2ltcGxpY2l0X2ZsdXNoIG9iX2xpc3RfaGFuZGxlcnMgb2Jfc3RhcnQgb3V0cHV0X2FkZF9yZXdyaXRlX3ZhciBvdXRwdXRfcmVzZXRfcmV3cml0ZV92YXJzICBjb250YWluZWQKIHN5biBrZXl3b3JkIHBocEZ1bmN0aW9ucyAgb3ZlcmxvYWQgIGNvbnRhaW5lZAo=