ZGlmZiAtLWdpdCBhL2NvbXBpbGVyL3B5dGhvbl9hcmNoaXZlLnB5IGIvY29tcGlsZXIvcHl0aG9uX2FyY2hpdmUucHkKaW5kZXggZGI2NmEwYi4uMWViOWY1YSAxMDA3NTUKLS0tIGEvY29tcGlsZXIvcHl0aG9uX2FyY2hpdmUucHkKKysrIGIvY29tcGlsZXIvcHl0aG9uX2FyY2hpdmUucHkKQEAgLTMyLDYgKzMyLDcgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBwa2d1dGlsCitpbXBvcnQgcmUKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHppcGZpbGUKQEAgLTQxLDcgKzQyLDcgQEAKIGZyb20gc3VicGFyLmNvbXBpbGVyIGltcG9ydCBzdG9yZWRfcmVzb3VyY2UKIAogIyBCb2lsZXJwbGF0ZSBjb2RlIGFkZGVkIHRvIF9fbWFpbl9fLnB5Ci1fbWFpbl90ZW1wbGF0ZSA9ICIiIlwKK19ib2lsZXJwbGF0ZV90ZW1wbGF0ZSA9ICIiIlwKICMgQm9pbGVycGxhdGUgYWRkZWQgYnkgc3VicGFyL2NvbXBpbGVyL3B5dGhvbl9hcmNoaXZlLnB5CiBmcm9tICUocnVudGltZV9wYWNrYWdlKXMgaW1wb3J0IHN1cHBvcnQgYXMgXwogXy5zZXR1cChpbXBvcnRfcm9vdHM9JShpbXBvcnRfcm9vdHMpcykKQEAgLTEyNywyNSArMTI4LDUxIEBACiAgICAgICAgIG91dHB1dF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoc2VsZi5vdXRwdXRfZmlsZW5hbWUpCiAgICAgICAgIHJldHVybiB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGlyPW91dHB1dF9kaXIsIGRlbGV0ZT1GYWxzZSkKIAotICAgIGRlZiBnZW5lcmF0ZV9tYWluKHNlbGYpOgorICAgIGRlZiBnZW5lcmF0ZV9ib2lsZXJwbGF0ZShzZWxmKToKKyAgICAgICAgIiIiR2VuZXJhdGUgYm9pbGVycGxhdGUgdG8gYmUgaW5zZXJ0IGludG8gX19tYWluX18ucHkKKworICAgICAgICBXZSBkb24ndCBrbm93IHRoZSBlbmNvZGluZyBvZiB0aGUgbWFpbiBzb3VyY2UgZmlsZSwgc28KKyAgICAgICAgcmVxdWlyZSB0aGF0IHRoZSB0ZW1wbGF0ZSBiZSBwdXJlIGFzY2lpLCB3aGljaCB3ZSBjYW4gc2FmZWx5CisgICAgICAgIGluc2VydC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSBzdHJpbmcgY29udGFpbmluZyBvbmx5IGFzY2lpIGNoYXJhY3RlcnMKKyAgICAgICAgIiIiCisgICAgICAgIGJvaWxlcnBsYXRlX2NvbnRlbnRzID0gX2JvaWxlcnBsYXRlX3RlbXBsYXRlICUgeworICAgICAgICAgICAgJ3J1bnRpbWVfcGFja2FnZSc6IF9ydW50aW1lX3BhY2thZ2UsCisgICAgICAgICAgICAnaW1wb3J0X3Jvb3RzJzogc3RyKHNlbGYuaW1wb3J0X3Jvb3RzKSwKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYm9pbGVycGxhdGVfY29udGVudHMuZW5jb2RlKCdhc2NpaScpLmRlY29kZSgnYXNjaWknKQorCisgICAgZGVmIGdlbmVyYXRlX21haW4oc2VsZiwgbWFpbl9maWxlbmFtZSwgYm9pbGVycGxhdGVfY29udGVudHMpOgogICAgICAgICAiIiJHZW5lcmF0ZSB0aGUgY29udGVudHMgb2YgdGhlIF9fbWFpbl9fLnB5IGZpbGUKIAogICAgICAgICBXZSB0YWtlIHRoZSBtb2R1bGUgdGhhdCBpcyBzcGVjaWZpZWQgYXMgdGhlIG1haW4gZW50cnkgcG9pbnQsCi0gICAgICAgIGFuZCBwcmVwZW5kIHNvbWUgYm9pbGVycGxhdGUgdG8gaW52b2tlIGltcG9ydCBoZWxwZXIgY29kZS4KKyAgICAgICAgYW5kIGluc2VydCBzb21lIGJvaWxlcnBsYXRlIHRvIGludm9rZSBpbXBvcnQgaGVscGVyIGNvZGUuCiAKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgIEEgU3RvcmVkUmVzb3VyY2UKICAgICAgICAgIiIiCi0gICAgICAgIHRlbXBsYXRlX2NvbnRlbnRzID0gX21haW5fdGVtcGxhdGUgJSB7Ci0gICAgICAgICAgICAncnVudGltZV9wYWNrYWdlJzogX3J1bnRpbWVfcGFja2FnZSwKLSAgICAgICAgICAgICdpbXBvcnRfcm9vdHMnOiBzdHIoc2VsZi5pbXBvcnRfcm9vdHMpLAotICAgICAgICB9Ci0gICAgICAgIHdpdGggb3BlbihzZWxmLm1haW5fZmlsZW5hbWUsICdyYicpIGFzIG1haW5fZmlsZToKLSAgICAgICAgICAgIG1haW5fY29udGVudHMgPSBtYWluX2ZpbGUucmVhZCgpCi0gICAgICAgICMgV2UgZG9uJ3Qga25vdyB0aGUgZW5jb2Rpbmcgb2YgdGhlIG1haW4gc291cmNlIGZpbGUsIHNvCi0gICAgICAgICMgcmVxdWlyZSB0aGF0IHRoZSB0ZW1wbGF0ZSBiZSBwdXJlIGFzY2lpLCB3aGljaCB3ZSBjYW4gc2FmZWx5Ci0gICAgICAgICMgcHJlcGVuZC4KLSAgICAgICAgY29udGVudHMgPSB0ZW1wbGF0ZV9jb250ZW50cy5lbmNvZGUoJ2FzY2lpJykgKyBtYWluX2NvbnRlbnRzCisgICAgICAgICMgUmVhZCBtYWluIHNvdXJjZSBmaWxlLCBpbiB1bmtub3duIGVuY29kaW5nLiAgV2UgdXNlIGxhdGluLTEKKyAgICAgICAgIyBoZXJlLCBidXQgYW55IHNpbmdsZS1ieXRlIGVuY29kaW5nIHRoYXQgZG9lc24ndCByYWlzZSBlcnJvcnMKKyAgICAgICAgIyB3b3VsZCB3b3JrLgorICAgICAgICBvdXRwdXRfbGluZXMgPSBbXQorICAgICAgICB3aXRoIGlvLm9wZW4obWFpbl9maWxlbmFtZSwgJ3J0JywgZW5jb2Rpbmc9J2xhdGluLTEnKSBhcyBtYWluX2ZpbGU6CisgICAgICAgICAgICBvdXRwdXRfbGluZXMgPSBsaXN0KG1haW5fZmlsZSkKKworICAgICAgICAjIEZpbmQgYSBnb29kIHBsYWNlIHRvIGluc2VydCB0aGUgYm9pbGVycGxhdGUsIHdoaWNoIGlzIHRoZQorICAgICAgICAjIGZpcnN0IGxpbmUgdGhhdCBpcyBub3QgYSBjb21tZW50LCBibGFuayBsaW5lLCBvciBmdXR1cmUKKyAgICAgICAgIyBpbXBvcnQuCisgICAgICAgIHNraXBfcmVnZXggPSByZS5jb21waWxlKCcnJygjLiopfChcXHMrKXwoZnJvbVxccytfX2Z1dHVyZV9fXFxzK2ltcG9ydCknJycpCisgICAgICAgIGlkeCA9IDAKKyAgICAgICAgd2hpbGUgaWR4IDwgbGVuKG91dHB1dF9saW5lcyk6CisgICAgICAgICAgICBpZiBub3Qgc2tpcF9yZWdleC5tYXRjaChvdXRwdXRfbGluZXNbaWR4XSk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlkeCArPSAxCisKKyAgICAgICAgIyBJbnNlcnQgYm9pbGVycGxhdGUgKG1pZ2h0IGJlIGJlZ2lubmluZywgbWlkZGxlIG9yIGVuZCkKKyAgICAgICAgb3V0cHV0X2xpbmVzW2lkeDppZHhdID0gW2JvaWxlcnBsYXRlX2NvbnRlbnRzXQorICAgICAgICBjb250ZW50cyA9ICcnLmpvaW4ob3V0cHV0X2xpbmVzKS5lbmNvZGUoJ2xhdGluLTEnKQogICAgICAgICByZXR1cm4gc3RvcmVkX3Jlc291cmNlLlN0b3JlZENvbnRlbnQoJ19fbWFpbl9fLnB5JywgY29udGVudHMpCiAKICAgICBkZWYgc2Nhbl9tYW5pZmVzdChzZWxmLCBtYW5pZmVzdCk6CkBAIC0xNzcsNyArMjA0LDggQEAKICAgICAgICAgICAgICAgICAoJ0NvbmZpZ3VyYXRpb24gZXJyb3IgZm9yIFslc106IE1hbmlmZXN0IGZpbGUgaW5jbHVkZWQgYSAnCiAgICAgICAgICAgICAgICAgICdmaWxlIG5hbWVkIF9fbWFpbl9fLnB5LCB3aGljaCBpcyBub3QgYWxsb3dlZCcpICUKICAgICAgICAgICAgICAgICBzZWxmLm1hbmlmZXN0X2ZpbGVuYW1lKQotICAgICAgICBzdG9yZWRfcmVzb3VyY2VzWydfX21haW5fXy5weSddID0gc2VsZi5nZW5lcmF0ZV9tYWluKCkKKyAgICAgICAgc3RvcmVkX3Jlc291cmNlc1snX19tYWluX18ucHknXSA9IHNlbGYuZ2VuZXJhdGVfbWFpbigKKyAgICAgICAgICAgIHNlbGYubWFpbl9maWxlbmFtZSwgc2VsZi5nZW5lcmF0ZV9ib2lsZXJwbGF0ZSgpKQogCiAgICAgICAgICMgQWRkIGFuIF9faW5pdF9fLnB5IGZvciBlYWNoIHBhcmVudCBwYWNrYWdlIG9mIHRoZSBzdXBwb3J0IGZpbGVzCiAgICAgICAgIGZvciBzdG9yZWRfZmlsZW5hbWUgaW4gX3J1bnRpbWVfaW5pdF9maWxlczoKZGlmZiAtLWdpdCBhL2NvbXBpbGVyL3B5dGhvbl9hcmNoaXZlX3Rlc3QucHkgYi9jb21waWxlci9weXRob25fYXJjaGl2ZV90ZXN0LnB5CmluZGV4IGFhNzkyMmUuLmMxOTc0ZDEgMTAwNjQ0Ci0tLSBhL2NvbXBpbGVyL3B5dGhvbl9hcmNoaXZlX3Rlc3QucHkKKysrIGIvY29tcGlsZXIvcHl0aG9uX2FyY2hpdmVfdGVzdC5weQpAQCAtMTIyLDYgKzEyMiwzNiBAQAogICAgICAgICAjIHQgY2xvc2VkIGJ1dCBub3QgZGVsZXRlZAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModC5uYW1lKSkKIAorICAgIGRlZiB0ZXN0X2dlbmVyYXRlX2JvaWxlcnBsYXRlKHNlbGYpOgorICAgICAgICBwYXIgPSBzZWxmLl9jb25zdHJ1Y3QoKQorICAgICAgICBib2lsZXJwbGF0ZSA9IHBhci5nZW5lcmF0ZV9ib2lsZXJwbGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JvaWxlcnBsYXRlJywgYm9pbGVycGxhdGUpCisKKyAgICBkZWYgdGVzdF9nZW5lcmF0ZV9tYWluKHNlbGYpOgorICAgICAgICBwYXIgPSBzZWxmLl9jb25zdHJ1Y3QoKQorICAgICAgICBib2lsZXJwbGF0ZSA9ICdCT0lMRVJQTEFURVxuJworICAgICAgICBjYXNlcyA9IFsKKyAgICAgICAgICAgICMgSW5zZXJ0IGF0IGJlZ2lubmluZworICAgICAgICAgICAgKGInc3BhbSA9IGVnZ3NcbicsCisgICAgICAgICAgICAgYidCT0lMRVJQTEFURVxuc3BhbSA9IGVnZ3NcbicpLAorICAgICAgICAgICAgIyBJbnNlcnQgaW4gdGhlIG1pZGRsZQorICAgICAgICAgICAgKGInIyBhIGNvbW1lbnRcbnNwYW0gPSBlZ2dzXG4nLAorICAgICAgICAgICAgIGInIyBhIGNvbW1lbnRcbkJPSUxFUlBMQVRFXG5zcGFtID0gZWdnc1xuJyksCisgICAgICAgICAgICAjIEluc2VydCBhZnRlciB0aGUgZW5kCisgICAgICAgICAgICAoYicjIGEgY29tbWVudFxuJywKKyAgICAgICAgICAgICBiJyMgYSBjb21tZW50XG5CT0lMRVJQTEFURVxuJyksCisgICAgICAgICAgICAjIEJsYW5rIGxpbmVzCisgICAgICAgICAgICAoYidcbiBcdFxuJywKKyAgICAgICAgICAgICBiJ1xuIFx0XG5CT0lMRVJQTEFURVxuJyksCisgICAgICAgICAgICAjIEZ1dHVyZSBpbXBvcnQKKyAgICAgICAgICAgIChiJ2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb25cbicsCisgICAgICAgICAgICAgYidmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uXG5CT0lMRVJQTEFURVxuJyksCisgICAgICAgIF0KKyAgICAgICAgZm9yIG1haW5fY29udGVudCwgZXhwZWN0ZWQgaW4gY2FzZXM6CisgICAgICAgICAgICB3aXRoIHRlc3RfdXRpbHMudGVtcF9maWxlKG1haW5fY29udGVudCkgYXMgbWFpbl9maWxlOgorICAgICAgICAgICAgICAgIGFjdHVhbCA9IHBhci5nZW5lcmF0ZV9tYWluKG1haW5fZmlsZS5uYW1lLCBib2lsZXJwbGF0ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbC5jb250ZW50KQorCiAgICAgZGVmIHRlc3Rfc2Nhbl9tYW5pZmVzdChzZWxmKToKICAgICAgICAgcGFyID0gc2VsZi5fY29uc3RydWN0KCkKICAgICAgICAgbWFuaWZlc3QgPSB7J2Zvby5weSc6ICcvc29tZXRoaW5nL2Zvby5weScsICdiYXIucHknOiBOb25lLH0KZGlmZiAtLWdpdCBhL2NvbXBpbGVyL3Rlc3RfdXRpbHMucHkgYi9jb21waWxlci90ZXN0X3V0aWxzLnB5CmluZGV4IDYyYTE2YzQuLmQ5NGUwZjYgMTAwNjQ0Ci0tLSBhL2NvbXBpbGVyL3Rlc3RfdXRpbHMucHkKKysrIGIvY29tcGlsZXIvdGVzdF91dGlscy5weQpAQCAtMTUsNyArMTUsNiBAQAogIiIiQ29tbW9uIHRlc3QgdXRpbGl0aWVzIiIiCiAKIGltcG9ydCBvcwotaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiAKIApkaWZmIC0tZ2l0IGEvdGVzdHMvQlVJTEQgYi90ZXN0cy9CVUlMRAppbmRleCA0M2QzYzNlLi5jMDlhOTMzIDEwMDY0NAotLS0gYS90ZXN0cy9CVUlMRAorKysgYi90ZXN0cy9CVUlMRApAQCAtNzIsNiArNzIsMTcgQEAKICAgICBzcmNzX3ZlcnNpb24gPSAiUFkyQU5EMyIsCiApCiAKK1twYXJfYmluYXJ5KAorICAgIG5hbWUgPSAicGFja2FnZV9nL2dfJXMiICUgdmVyc2lvbiwKKyAgICBzcmNzID0gWyJwYWNrYWdlX2cvZy5weSJdLAorICAgIGRlZmF1bHRfcHl0aG9uX3ZlcnNpb24gPSB2ZXJzaW9uLAorICAgIG1haW4gPSAicGFja2FnZV9nL2cucHkiLAorICAgIHNyY3NfdmVyc2lvbiA9ICJQWTJBTkQzIiwKKykgZm9yIHZlcnNpb24gaW4gWworICAgICJQWTIiLAorICAgICJQWTMiLAorXV0KKwogIyBUZXN0IHRhcmdldHMKIFtzaF90ZXN0KAogICAgIG5hbWUgPSAiJXNfJXMiICUgKG5hbWUsIHZlcnNpb24pLApAQCAtOTIsNiArMTAzLDcgQEAKICAgICAoImltcG9ydF9yb290X3Rlc3QiLCAiOnBhY2thZ2VfZC9kIiwgIi9wYWNrYWdlX2QvZCIpLAogICAgICgiZXh0ZXJuYWxfd29ya3NwYWNlX3Rlc3QiLCAiOnBhY2thZ2VfZS9lIiwgIi9wYWNrYWdlX2UvZSIpLAogICAgICgidmVyc2lvbl90ZXN0IiwgIjpwYWNrYWdlX2YvZiIsICIvcGFja2FnZV9mL2YiKSwKKyAgICAoIm1haW5fYm9pbGVycGxhdGVfdGVzdCIsICI6cGFja2FnZV9nL2ciLCAiL3BhY2thZ2VfZy9nIiksCiBdIGZvciB2ZXJzaW9uIGluIFsKICAgICAiUFkyIiwKICAgICAiUFkzIiwKZGlmZiAtLWdpdCBhL3Rlc3RzL3BhY2thZ2VfZy9nLnB5IGIvdGVzdHMvcGFja2FnZV9nL2cucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjAwNjMxOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3BhY2thZ2VfZy9nLnB5CkBAIC0wLDAgKzEsMjAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMgLSotIGNvZGluZzogbGF0aW4tMQorCisjIFRlc3QgX19mdXR1cmVfXyBpbXBvcnRzCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKKyIiIkludGVncmF0aW9uIHRlc3QgcHJvZ3JhbSBHIGZvciBTdWJwYXIuCisKK1Rlc3QgYm9vdHN0cmFwIGludGVyYWN0aW9uIHdpdGggX19mdXR1cmVfXyBpbXBvcnRzIGFuZCBzb3VyY2UgZmlsZSBlbmNvZGluZ3MuCisiIiIKKworIyBUZXN0IHRoZSBzb3VyY2UgZmlsZSBlbmNvZGluZyBzcGVjaWZpY2F0aW9uIGFib3ZlLiAgU2VlIFBFUCAyNjMgZm9yCisjIGRldGFpbHMuICBJbiB0aGUgbGluZSBiZWxvdywgdGhpcyBzb3VyY2UgZmlsZSBjb250YWlucyBhIGJ5dGUKKyMgc2VxdWVuY2UgdGhhdCBpcyB2YWxpZCBsYXRpbi0xIGJ1dCBub3QgdmFsaWQgdXRmLTguICBTcGVjaWZpY2FsbHksCisjIGJldHdlZW4gdGhlIHR3byBzaW5nbGUgcXVvdGVzIGlzIGEgc2luZ2xlIGJ5dGUgMHhFNCAobGF0aW4tMQorIyBlbmNvZGluZyBvZiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUyksIGFuZCBfbm90XyB0aGUKKyMgdHdvLWJ5dGUgVVRGLTggc2VxdWVuY2UgMHhDMyAweEE0LgorbGF0aW5fMV9ieXRlcyA9IHUn5CcKK2Fzc2VydCBsZW4obGF0aW5fMV9ieXRlcykgPT0gMQorYXNzZXJ0IG9yZChsYXRpbl8xX2J5dGVzWzBdKSA9PSAweEU0CmRpZmYgLS1naXQgYS90ZXN0cy9wYWNrYWdlX2cvZ19QWTJfZmlsZWxpc3QudHh0IGIvdGVzdHMvcGFja2FnZV9nL2dfUFkyX2ZpbGVsaXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDk1MDIxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcGFja2FnZV9nL2dfUFkyX2ZpbGVsaXN0LnR4dApAQCAtMCwwICsxLDggQEAKK19fbWFpbl9fLnB5CitzdWJwYXIvX19pbml0X18ucHkKK3N1YnBhci9ydW50aW1lL19faW5pdF9fLnB5CitzdWJwYXIvcnVudGltZS9zdXBwb3J0LnB5CitzdWJwYXIvdGVzdHMvX19pbml0X18ucHkKK3N1YnBhci90ZXN0cy9wYWNrYWdlX2cvX19pbml0X18ucHkKK3N1YnBhci90ZXN0cy9wYWNrYWdlX2cvZy5weQorc3VicGFyL3Rlc3RzL3BhY2thZ2VfZy9nX1BZMgpkaWZmIC0tZ2l0IGEvdGVzdHMvcGFja2FnZV9nL2dfUFkzX2ZpbGVsaXN0LnR4dCBiL3Rlc3RzL3BhY2thZ2VfZy9nX1BZM19maWxlbGlzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI4YmY2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3BhY2thZ2VfZy9nX1BZM19maWxlbGlzdC50eHQKQEAgLTAsMCArMSw4IEBACitfX21haW5fXy5weQorc3VicGFyL19faW5pdF9fLnB5CitzdWJwYXIvcnVudGltZS9fX2luaXRfXy5weQorc3VicGFyL3J1bnRpbWUvc3VwcG9ydC5weQorc3VicGFyL3Rlc3RzL19faW5pdF9fLnB5CitzdWJwYXIvdGVzdHMvcGFja2FnZV9nL19faW5pdF9fLnB5CitzdWJwYXIvdGVzdHMvcGFja2FnZV9nL2cucHkKK3N1YnBhci90ZXN0cy9wYWNrYWdlX2cvZ19QWTMK