ZGlmZiAtLWdpdCBhL2RvYy9lZnVuLy5kZWZhdWx0IGIvZG9jL2VmdW4vLmRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU2MGUxOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuLy5kZWZhdWx0CkBAIC0wLDAgKzEsMTQgQEAKK0ZVTktUSU9OOgorCitBUkdVTUVOVEU6CisKK0JFU0NIUkVJQlVORzoKKworUlVFQ0tHQUJFV0VSVDoKKworQkVNRVJLVU5HRU46CisKK0JFSVNQSUVMRToKKworU0lFSEUgQVVDSDoKKwpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vLnN5bm9ueW0gYi9kb2MvZWZ1bi8uc3lub255bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDI0YTFiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vLnN5bm9ueW0KQEAgLTAsMCArMSwzIEBACityb3VuZCBjZWlsCit0cnVuYyBjZWlsCitlZnVuOjptX2RlbGV0ZSBlZnVuX19tX2RlbGV0ZQpkaWZmIC0tZ2l0ICJhL2RvYy9lZnVuL1wxMzNcMTM1IiAiYi9kb2MvZWZ1bi9cMTMzXDEzNSIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU5Njk2YQotLS0gL2Rldi9udWxsCisrKyAiYi9kb2MvZWZ1bi9cMTMzXDEzNSIKQEAgLTAsMCArMSw2NiBAQAorU1lOT1BTSVMKKyAgICAgICAgbWl4ZWQgIGFycltpbmRleF07CisgICAgICAgIGludCAgICBzdHJbaW5kZXhdOworCisgICAgICAgICptaXhlZCBhcnJbZnJvbSAuLiB0b107CisgICAgICAgIHN0cmluZyBzdHJbZnJvbSAuLiB0b107CisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGVpbiBFbGVtZW50IGF1cyBlaW5lbSBBcnJheSBvZGVyIFN0cmluZyAoZXJzdGUgRm9ybSksIG9kZXIKKyAgICAgICAgZWluZSBUZWlsbWVuZ2UgKHp3ZWl0ZSBGb3JtKS4KKworICAgICAgICBEaWUgSW5kaXplcyA8aW5kZXg+LCA8ZnJvbT4gdW5kIDx0bz4gc2luZCBkdXJjaG51bW1lcmllcnQgdm9uIDAgYmlzCisgICAgICAgIHN0cmxlbig8c3RyPiktMSBiencuIHNpemVvZig8YXJyPiktMS4gV2VubiBlaW4gPGluZGV4PiBhbHMgJzx3ZXJ0JworICAgICAgICBnZXNjaHJpZWJlbiB3aXJkLCB3aXJkIGRlciBXZXJ0IHZvbSBFbmRlIGRlcyBTdGluZ3MgLyBBcnJheXMgaGVyCisgICAgICAgIGdlemFlaGx0LiBEYWJlaSB3aXJkIG51bW1lcmllcnQgdm9uIDEgYmlzIHN0cmxlbig8c3RyPikgYnp3LgorICAgICAgICBzaXplb2YoPGFycj4pLiBXaXJkIDxmcm9tPiB3ZWdnZWxhc3NlbiwgYmVnaW5udCBkaWUgVGVpbG1lbmdlIG1pdAorICAgICAgICBkZW0gZXJzdGVuIEVsZW1lbnQuIFdpcmQgPHRvPiB3ZWdnZWxhc3NlbiwgZW5kZXQgZGllIFRlaWxtZW5nZSBtaXQKKyAgICAgICAgZGVtIGxldHp0ZW4gRWxlbWVudC4KKworICAgICAgICBJbiBkZXIgZXJzdGVuIEZvcm0gbXVzcyA8aW5kZXg+IGlubmVyaGFsYiBkZXIgR3JlbnplbiBkZXMgU3RyaW5ncyAvCisgICAgICAgIEFycmF5cyBzZWluLCBzb25zdCB3aXJkIGVpbiBMYXVmemVpdGZlaGxlciAoUlRFKSB2ZXJ1cnNhY2h0LiBJbiBkZXIKKyAgICAgICAgendlaXRlbiBGb3JtIHdlcmRlbiBkaWUgSW5kaXplcyBhbiBkaWUgR3JvZXNzZSBkZXMgU3RyaW5ncyAvIEFycmF5cworICAgICAgICBhbmdlcGFzc3QuIFdlbm4gPGZyb20+IGdyb2Vzc2VyIGlzdCBhbHMgPHRvPiBvZGVyIGJlaWRlIGF1c3NlcmhhbGIKKyAgICAgICAgZGVyIEdyb2Vzc2UgZGVzIFN0cmluZ3MgLyBBcnJheXMgbGllZ2VuLCB3aXJkIGVpbiBsZWVyZXIgU3RyaW5nICIiCisgICAgICAgIGJ6dy4gZWluIGxlZXJlcyBBcnJheSAoe30pIHp1cnVlY2sgZ2VsaWVmZXJ0LgorCisgICAgICAgIERpZSBOb3RhdGlvbiBhbHMgQ2xvc3VyZSBpc3QgZW50c3ByZWNoZW5kOgorCisgICAgICAgICAgICBbaW5kZXhdICAgICAgLT4gKHsnI1ssICAgICAgYXJyLCBpbmRleCB9KQorICAgICAgICAgICAgWzxpbmRleF0gICAgIC0+ICh7JyNbPCwgICAgIGFyciwgaW5kZXggfSkKKyAgICAgICAgICAgIFtmcm9tLi50b10gICAtPiAoeycjWy4uXSwgICBhcnIsIGZyb20sIHRvIH0pCisgICAgICAgICAgICBbPGZyb20uLnRvXSAgLT4gKHsnI1s8Li5dLCAgYXJyLCBmcm9tLCB0byB9KQorICAgICAgICAgICAgW2Zyb20uLjx0b10gIC0+ICh7JyNbLi48XSwgIGFyciwgZnJvbSwgdG8gfSkKKyAgICAgICAgICAgIFs8ZnJvbS4uPHRvXSAtPiAoeycjWzwuLjxdLCBhcnIsIGZyb20sIHRvIH0pCisKK0JFSVNQSUVMRQorICAgICAgICBmb28gPSAoeyAxLCAyLCAzLCA0IH0pOyAgICAgICAgIHN0ciA9ICJ0ZXN0IjsKKworICAgICAgICBmb29bMV0gICAgIC0+IDEgICAgICAgICAgICAgICAgIHN0clsxXSAtPiAnZScgPT0gMTAxCisgICAgICAgIGZvb1sxLi4yXSAgLT4gKHsgMiwgMyB9KSAgICAgICAgc3RyWzEuLjJdICAtPiAiZXMiCisgICAgICAgIGZvb1syLi4xXSAgLT4gKHsgfSkgICAgICAgICAgICAgc3RyWzIuLjFdICAtPiAiIgorICAgICAgICBmb29bMC4uPDJdIC0+ICh7IDEsIDIgfSkgICAgICAgIHN0clswLi48Ml0gIC0+ICJ0ZXMiCisKKyAgICAgICAgZm9vWy4uPDJdICAtPiAoeyAxLCAyIH0pICAgICAgICBzdHJbLi48Ml0gIC0+ICJ0ZXMiCisgICAgICAgIGZvb1s8My4uXSAgLT4gKHsgMiwgMywgNCB9KSAgICAgc3RyWzwzLi5dICAtPiAiZXN0IgorCisgICAgICAgIGZvb1sxXSA9IDUgICAgICAgICAgICAgICAgICAgICAgLT4gZm9vID09ICh7IDEsIDUsIDMsIDQgfSkKKyAgICAgICAgZm9vWzEuLjJdID0gKHsgNSwgNiwgNyB9KSAgICAgICAtPiBmb28gPT0gKHsgMSwgNSwgNiwgNywgNCB9KQorICAgICAgICBmb29bMS4uMl0gPSAoeyB9KSAgICAgICAgICAgICAgIC0+IGZvbyA9PSAoeyAxLCA0IH0pCisKKyAgICAgICAgc3RyWzFdID0gJ2EnICAgICAgICAgICAgICAgICAgICAtPiBzdHIgPT0gInRhc3QiCisgICAgICAgIHN0clsxLi4yXSA9ICJiYXIiICAgICAgICAgICAgICAgLT4gc3RyID09ICJ0YmFydCIKKyAgICAgICAgc3RyWzEuLjJdID0gIiIgICAgICAgICAgICAgICAgICAtPiBzdHIgPT0gInR0IgorCitBRU5ERVJVTkdFTgorICAgICAgICBzbGljZV9hcnJheSgpIGlzdCBkaWUgYWx0ZSBGb3JtIGRlciBbXS1PcGVyYXRvcmVuIGZ1ZXIgQXJyYXlzLAorICAgICAgICBleHRyYWN0KCkgaXN0IGRpZSBhbHRlIEZvcm0gZGVyIFtdLU9wZXJhdG9yZW4gZnVlciBTdHJpbmdzLgorICAgICAgICBCRUlERSBWQVJJQU5URU4gU0lORCBWRVJBTFRFVCwgV0VSREVOIE5JQ0hUIE1FSFIgVU5URVJTVFVFVFpUIFVORAorICAgICAgICBTT0xMVEVOIERFU0hBTEIgTklDSFQgTUVIUiBWRVJXRU5ERVQgV0VSREVOLgorCisgICAgICAgIERpZSBTeW50YXggZnVlciAncnVlY2t3YWVydHMgemFlaGxlbiB2b20gbGV0enRlbiBFbGVtZW50JyBoYXQgc2ljaCB2b24KKyAgICAgICAgVmVyc2lvbiAzLjEuSiB6dSAzLjEuSyBnZWFlbmRlcnQgdm9uICctMScgenUgJzwxJy4gQXVjaCBpc3Qgc2VpdCBkYW5uCisgICAgICAgIGZvb1swLi4tMV0gZWluIGxlZXJlcyBBcnJheSBiencuIGVpbiBsZWVyZXIgU3RyaW5nLgorCitTSUVIRSBBVUNICisgICAgICAgIG1lbWJlcihFKSwgc2l6ZW9mKEUpLCBzbGljZV9hcnJheShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vYWJzIGIvZG9jL2VmdW4vYWJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NmJlZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9hYnMKQEAgLTAsMCArMSwyMCBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50ICAgYWJzIChpbnQgYXJnKQorICAgICAgICBmbG9hdCBhYnMgKGZsb2F0IGFyZykKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZGVuIEJldHJhZyBkZXMgQXJndW1lbnRlcyA8YXJnPi4KKworQkVJU1BJRUxFCisgICAgICAgIEZ1bmt0aW9uICAgICAgUnVlY2tnYWJld2VydAorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIGFicygtMTggICAgKSAgMTgKKyAgICAgICAgYWJzKCAxMSAgICApICAxMQorICAgICAgICBhYnMoIC0xLjk3NCkgICAxLjk3NAorCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuNi4KKworU0lFSEUgQVVDSAorICAgICAgICBzaW4oRSksIGFzaW4oRSksIGNvcyhFKSwgYWNvcyhFKSwgdGFuKEUpLCBhdGFuKEUpLCBsb2coRSksIGV4cChFKSwKKyAgICAgICAgc3FydChFKSwgZmxvb3IoRSksIGNlaWwoRSksIHBvdyhFKSwgc2duKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9hY29zIGIvZG9jL2VmdW4vYWNvcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDg3OTU4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vYWNvcwpAQCAtMCwwICsxLDggQEAKK1NZTk9QU0lTCisgICAgICAgIGZsb2F0IGFjb3MoZmxvYXQpCisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGRlciBBcmt1c2tvc2ludXMgZGVzIEFyZ3VtZW50ZXMuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgc2luKEUpLCBhc2luKEUpLCBjb3MoRSksIHRhbihFKSwgYXRhbihFKSwgYXRhbjIoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2FkZF9hY3Rpb24gYi9kb2MvZWZ1bi9hZGRfYWN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMGY3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9hZGRfYWN0aW9uCkBAIC0wLDAgKzEsMTQ5IEBACithZGRfYWN0aW9uKEUpCitGVU5LVElPTjoKKyAgICAgdm9pZCBhZGRfYWN0aW9uKHN0cmluZyBmdW4sIHN0cmluZyBjbWQpCisgICAgIHZvaWQgYWRkX2FjdGlvbihzdHJpbmcgZnVuLCBzdHJpbmcgY21kLCBpbnQgZmxhZykKKworQVJHVU1FTlRFOgorICAgICBmdW4KKwlnZXJ1ZmVuZSBNZXRob2RlCisgICAgIGNtZAorCWF1c2xvZXNlbmRlcyBWZXJiCisgICAgIGZsYWcKKwlGbGFnIGZ1ZXIgdW5zY2hhcmZlIEludGVycHJldGF0aW9uCisKK0JFU0NIUkVJQlVORzoKKyAgICAgR2VuZXJlbGw6IERhcyBWZXJoYWx0ZW4gZGllc2VyIGVmdW4gd2lyZCBkdXJjaCBBZGRDbWQgYXVzCisgICAgICAgICAgICAgICAvc3RkL3RoaW5nL2NvbW1hbmRzLmMga29tZm9ydGFibGVyIHdpZGVyZ2VzcGllZ2VsdC4KKyAgICAgICAgICAgICAgIERhcmF1ZiBzb2xsdGUgbWFuIHp1cnVlY2tncmVpZmVuLgorCisgICAgIExlZ3QgZnVlciAiY21kIiAoZWluIEtvbW1hbmRvdmVyYikgZWluZSBpbSBlbnRzcHJlY2hlbmRlbiBPYmpla3QKKyAgICAgenUgcnVmZW5kZSBNZXRob2RlIGZlc3QuCisKKyAgICAgRGllc2UgTWV0aG9kZSBiZWtvbW10IGRpZSBBcmd1bWVudGUgYWxzIFN0cmluZyB1ZWJlcmdlYmVuIHVuZAorICAgICBtdXNzIDAgKGZ1ZXIgZWluZW4gRmVobGVyKSBvZGVyIDEgKGZ1ZXIgRXJmb2xnKSB6dXJ1ZWNrZ2ViZW4uCisKKyAgICAgRGVyIFBhcnNlciBkdXJjaHN1Y2h0IGJlaSBlaW5lciBTcGllbGVyZWluZ2FiZSBkaWUgTGlzdGUgZGVyCisgICAgIGVpbmdldHJhZ2VuZW4gS29tbWFuZG9zIG5hY2ggcGFzc2VuZGVuIEtvbW1hbmRvcyB1bmQgcnVmdCBkaWUKKyAgICAgenVnZWhvZXJpZ2VuIE1ldGhvZGVuIGluIGRlbiBPYmpla3RlbiBiaXMgZWluZSBkZXIgTWV0aG9kZW4KKyAgICAgMSB6dXJ1ZWNrZ2lidCBvZGVyIGRpZSBMaXN0ZSBkdXJjaGxhdWZlbiB3dXJkZS4gSW4gZGVtIEZhbGwKKyAgICAga29tbXQgZGllIEZlaGxlcm1lbGR1bmcgKG5vdGlmeV9mYWlsKCkpIHp1bSBFaW5zYXR6LgorCisgICAgIE1pdCBXZXJ0ZW4gIT0gMCBmdWVyICJmbGFnIiBsZWd0IG1hbiBlaW5lIHVuc2NoYXJmZSBBdXN3ZXJ0dW5nCisgICAgIGZlc3QsIGltIEJlaXNwaWVsOiBEaWUgTWV0aG9kZSAiYWN0aW9uX2Z1biIgYmVpIGVpbmVtCisgICAgICBhZGRfYWN0aW9uKCJhY3Rpb25fZnVuIiwgImhvcHMiLCAxKTsKKyAgICAgd2lyZCBzb3dvaGwgYmVpbSBLb21tYW5kbyAiaG9wcyIgYWxzIGF1Y2ggYmVpIEtvbW1hbmRvcyB3aWUKKyAgICAgImhvcHNlIiwgImhvcHNlYmx1YiIsIC4uLiBnZXJ1ZmVuIHdlcmRlbi4KKyAgICAgRGllc2VzIEZsYWcgc29sbHRlIHZvcnNpY2h0aWcgdmVyd2VuZGV0IHdlcmRlbi4KKworICAgICBFcyBnaWJ0IGRyZWkgbW9lZ2xpY2hlIFZlcmhhbHRlbnN3ZWlzZSwgZGllIHBlciAiZmxhZyIgZWluZ2VzY2hhbHRldAorICAgICB3ZXJkZW4ga29lbm5lbjoKKyAgICAgV2VubiBkYXMgQXJndW1lbnQgPGZsYWc+IEFBX1NIT1JUIChkLmguIDEpIGlzdCwga29lbm5lbiBBcmd1bWVudGUgdm9uCisgICAgIGNtZCBvaG5lIGVpbmVuIExlZXJzY2hsYWcgYW4gY21kIGFuZ2VoYWVuZ3Qgc2Vpbi4gQW4gZGllIEZ1bmt0aW9uIGZ1bgorICAgICB3ZXJkZW4gYWxsZSBaZWljaGVuIG5hY2ggZGVtIGVyc3RlbiBMZWVyc2NobGFnIGFscyBBcmd1bWVudAorICAgICB1ZWJlcmdlYmVuLgorCisgICAgIFdlbm4gPGZsYWc+IEFBX05PU1BBQ0UgKGQuaC4gMikgaXN0LCBrb2VubmVuIGRpZSBBcmd1bWVudGUgd2llZGVydW0KKyAgICAgb2huZSBMZWVyc2NobGFnIGFucyBWZXJiIGFuZ2VoYWVuZ3Qgc2Vpbi4gSW0gVW50ZXJzY2hpZWQgenUgQUFfU0hPUlQKKyAgICAgd2VyZGVuIGFsbGUgWmVpY2hlbiBuYWNoIGRlbSBWZXJiIGFscyBBcmd1bWVudCBhbiBkaWUgRnVua3Rpb24KKyAgICAgdWViZXJnZWJlbi4gRGllIFplaWNoZW4sIHdlbGNoZSBuaWNodCBkdXJjaCBlaW5lbiBMZWVyc2NobGFnIHZvbQorICAgICBWZXJiIGdldHJlbm50IHNpbmQsIHdlcmRlbiBaVVNBRVRaTElDSCB2b24gcXVlcnlfdmVyYigpIHp1cnVlY2sKKyAgICAgZ2VnZWJlbi4KKworICAgICBXZW5uIDxmbGFnPiBBQV9JTU1fQVJHUyAoMykgaXN0LCB3ZXJkZW4gYWxsZSBaZWljaGVuIG5hY2ggZGVtIFZlcmIKKyAgICAgYWxzIEFyZ3VtZW50IHVlYmVyZ2ViZW4sIG5pY2h0IGFiZXIgdm9uIHF1ZXJ5X3ZlcmIoKSBiZXJ1ZWNrc2ljaHRpZ3QuCisKKworQkVNRVJLVU5HRU46CisgICAgICgxKSBhZGRfYWN0aW9uKCkgc29sbHRlIGltbWVyIGlubmVyaGFsYiB2b24gaW5pdCgpIGJlbnV0enQgd2VyZGVuCisgICAgICgyKSBkYXMgZGVmaW5pZXJlbmRlIE9iamVrdCBtdXNzIGltIGludmVudG9yeSBkZXMgU3BpZWxlcnMgb2RlcgorICAgICAgICAgZW52aXJvbm1lbnQoKSBkZXMga29tbWFuZG9nZWJlbmRlbiBMZWJld2VzZW5zIHNlaW4KKyAgICAgKDMpIGltIGluaXQoKSBzcGFldGVyIGVpbmdldHJhZ2VuZSBLb21tYW5kb3Mgb2RlciBzcGFldGVyIGhpbnp1LQorICAgICAgICAga29tbWVuZGUgT2JqZWt0ZSB3ZXJkZW4gYmVpIGRlciBLb21tYW5kb2F1c3dlcnR1bmcgVk9SIGRlbgorICAgICAgICAgYWx0ZW4gYmVydWVja3NpY2h0aWd0CisgICAgICAgICAoRGFoZXIgYmV3ZWd0IHNpY2ggZGFzIFh0b29sIGRlciBNYWdpZXIgcmVnZWxtYWVzc2luZyBuZXUgaW4KKyAgICAgICAgICBkYXMgSW52ZW50b3J5LCB1bSBpbW1lciAiZXJzdGVzIiBPYmpla3QgenUgc2Vpbi4pCisKK0JFSVNQSUVMRToKKyAgICAgLy8gZWluIEtvbW1hbmRvIGluIGVpbmVtIFNjaGlybQorICAgICB2b2lkIGluaXQoKSB7CisgICAgICA6OmluaXQoKTsKKyAgICAgIGFkZF9hY3Rpb24oImFjdGlvbl9vZWZmbmUiLCAib2VmZm5lIik7CisgICAgIH0KKworICAgICBpbnQgYWN0aW9uX29lZmZuZShzdHJpbmcgc3RyKSB7CisgICAgICBpZihzdHJpbmdwKHN0cikgJiYgaWQoc3RyKSkJLy8gQXJndW1lbnQgZGEgdW5kIGJpbiBpY2ggZ2VtZWludD8KKyAgICAgICB3cml0ZSgiRHUgb2VmZm5lc3QgZGVuIFNjaGlybS5cbiIpOworICAgICAgIHNheShicmVha19zdHJpbmcodGhpc19wbGF5ZXIoKS0+TmFtZShXRVIpKyIgb2VmZm5ldCBlaW5lbiBTY2hpcm0uIiw3OCkpOworICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgbm90aWZ5X2ZhaWwoIldhcyB3aWxsc3QgRHUgb2VmZm5lbj9cbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgIH0KKworICAgICAvLyBmcnVlaGVyIGJlbGllYnQgdW0gU3BpZWxlciBsYWhtenVsZWdlbiwgZGEgZXMgX2FsbGVfIEtvbW1hbmRvcyAKKyAgICAgLy8gdHJpZ2dlcnQgLT4gc2llaGUgaGV1dGUgamVkb2NoIGRhZnVlciBlaGVyIFBfRElTQUJMRV9DT01NQU5EUworICAgICAvLyBBY2h0dW5nOiBzaWVoZSBJbXBsaWthdGlvbiB2b24gKDMpCisgICAgIGFkZF9hY3Rpb24oImFjdGlvbl9ub3RoaW5nIiwgIiIsMSApOworICAgICAuLi4KKyAgICAgaW50IGFjdGlvbl9ub3RoaW5nKHN0cmluZyBzdHIpIHsKKyAgICAgIHdyaXRlKCJEaXIgc2luZCBkaWUgSGFlbmRlIGdlYnVuZGVuLlxuIik7CisgICAgICByZXR1cm4gMTsKKyAgICAgfQorCisgICAgIEJlaXNwaWVsZSBmdWVyIGRpZSBWZXJ3ZW5kdW5nIGRlcyBBcmd1bWVudGVzICJmbGFnIjoKKyAgICAgIGFkZF9hY3Rpb24oImRpc2Z1bmMiLCAiZGlzY29ubmVjdCIsIEFBX05PU1BBQ0UpOworCisgICAgICAgIERpZSBGdW5rdGlvbiBkaXNmdW5jKCkgd2lyZCBhdWZnZXJ1ZmVuLCB3ZW5uIGRlciBTcGllbGVyICJkaXNjb25uZWN0IgorICAgICAgICBvZGVyIGVpbmUgQWJrdWVyenVuZyBkYXZvbiAoenVtIEJlaXNwaWVsICJkaSIgb2RlciAiZGlzY29uIikgZWluZ2lidC4KKyAgICAgICAgTGFlbmdlcmUgV29ydGUgKHp1bSBCZWlzcGllbCAiZGlzY29ubmVjdGluZyIpIHdlcmRlbiBOSUNIVCBlcmthbm50LgorICAgICAgICBVbSByYXVzenVmaW5kZW4sIHdhcyBkZXIgU3BpZWxlciB0YXRzYWVjaGxpY2ggZWluZ2VnZWJlbiBoYXQsIG11c3MKKyAgICAgICAgcXVlcnlfdmVyYigpIGF1ZmdlcnVmZW4gd2VyZGVuLgorCisgICAgICBhZGRfYWN0aW9uKCJmdW4iLCAiY21kIik7CisgICAgICBhZGRfYWN0aW9uKCJmdW4iLCAic2NtZCIsIEFBX1NIT1JUKTsKKyAgICAgIGFkZF9hY3Rpb24oImZ1biIsICJuY21kIiwgQUFfTk9TUEFDRSk7CisgICAgICBhZGRfYWN0aW9uKCJmdW4iLCAiaWNtZCIsIEFBX0lNTV9BUkdTKTsKKworICAgICAgICBEaWUgZm9sZ2VuZGUgVGFiZWxsZSB6ZWlndCwgd2FzIGRpZSBvYmVuIGF1ZmdlZnVlaHJ0ZW4gS29tbWFuZG9zIGJ6dy4KKyAgICAgICAgPGZsYWc+IGZ1ZXIgV2VydGUgYW4gcXVlcnlfdmVyYigpIHVuZCBhbHMgQXJndW1lbnRlIGFuIGRpZSBGdW5rdGlvbgorICAgICAgICBmdW4gdWViZXJnZWJlbjoKKyAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgICAgICAgfCBFaW5nYWJlICAgICAgICAgICB8IHF1ZXJ5X3ZlcmIoKSB8IEFyZ3VtZW50IGRlciBGdW5rdGlvbiBmdW4gIHwKKyAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgICAgICAgfCAiY21kIiAgICAgICAgICAgICB8ICJjbWQiICAgICAgICB8IDAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAiY21kIGJsYSBmYXNlbCIgICB8ICJjbWQiICAgICAgICB8ICJibGEgZmFzZWwiICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgICAgICAgfCAic2NtZCIgICAgICAgICAgICB8ICJzY21kIiAgICAgICB8IDAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAic2NtZCBibGEiICAgICAgICB8ICJzY21kIiAgICAgICB8ICJibGEiICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAic2NtZGJsYSIgICAgICAgICB8ICJzY21kYmxhIiAgICB8IDAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAic2NtZCBibGEgZmFzZWwiICB8ICJzY21kIiAgICAgICB8ICJibGEgZmFzZWwiICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAic2NtZGJsYSBmYXNlbCIgICB8ICJzY21kYmxhIiAgICB8ICJmYXNlbCIgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgICAgICAgfCAibmNtZCIgICAgICAgICAgICB8ICJuY21kIiAgICAgICB8IDAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAibmNtZCBibGEiICAgICAgICB8ICJuY21kIiAgICAgICB8ICIgYmxhIiAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAibmNtZGJsYSIgICAgICAgICB8ICJuY21kYmxhIiAgICB8ICJibGEiICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAibmNtZCBibGEgZmFzZWwiICB8ICJuY21kIiAgICAgICB8ICIgYmxhIGZhc2VsIiAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAibmNtZGJsYSBmYXNlbCIgICB8ICJuY21kYmxhIiAgICB8ICJibGEgZmFzZWwiICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgICAgICAgfCAiaWNtZCIgICAgICAgICAgICB8ICJpY21kIiAgICAgICB8IDAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAiaWNtZCBibGEiICAgICAgICB8ICJpY21kIiAgICAgICB8ICIgYmxhIiAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAiaWNtZGJsYSIgICAgICAgICB8ICJpY21kIiAgICAgICB8ICJibGEiICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAiaWNtZCBibGEgZmFzZWwiICB8ICJpY21kIiAgICAgICB8ICIgYmxhIGZhc2VsIiAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAiaWNtZGJsYSBmYXNlbCIgICB8ICJpY21kIiAgICAgICB8ICJibGEgZmFzZWwiICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKworCitHRVNDSElDSFRFCisgICAgICAgIERhcyBBcmd1bWVudCA8ZmxhZz4gPCAwIHdpcmQgc2VpdCAzLjJAMTI3IHVudGVyc3R1ZXR6dCwgYWJlciBlcnN0IGFiCisgICAgICAgIExETXVkIDMuMi44IHJpY2h0aWcgaW1wbGVtZW50aWVydC4gTERNdWQgMy4yLjkgZnVlaHJ0ZSBkYXMgQUFfSU1NX0FSR1MKKyAgICAgICAgRmxhZyBlaW4uIEFiIExETXVkIDMuNSBrYW5uIG1hbiBDbG9zdXJlcyBhbHMgRnVua3Rpb25lbiB1ZWJlcmdlYmVuLgorCitTSUVIRSBBVUNIOgorCQkJcmVtb3ZlX2FjdGlvbihFKSwgaW5pdChFKSwgZW5hYmxlX2NvbW1hbmRzKEUpCisgICAgIEZlaGxlcm1lbGR1bmc6CW5vdGlmeV9mYWlsKEUpLCBfbm90aWZ5X2ZhaWwoRSkKKyAgICAgQXJndW1lbnRzdHJpbmc6CXF1ZXJ5X3ZlcmIoRSksIF91bnBhcnNlZF9hcmdzKEwpCisgICAgIG9ic29sZXQ6CQlhZGRfdmVyYihFKSwgYWRkX3h2ZXJiKEUpCisgICAgIGFsdGVybmF0aXY6CUFkZEFjdGlvbihMKSwgQWRkQ21kKEwpCisgICAgICAgICAgICAgICAgICAgICAgICBQX0RJU0FCTEVfQ09NTUFORFMKKworMjQuIE1hZXJ6IDIwMDQgR2xvaW5zb25ATUcKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2FsbF9lbnZpcm9ubWVudCBiL2RvYy9lZnVuL2FsbF9lbnZpcm9ubWVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTNmNDkzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vYWxsX2Vudmlyb25tZW50CkBAIC0wLDAgKzEsMzMgQEAKK1NZTk9QU0lTCisgICAgICAgIG9iamVjdCAqYWxsX2Vudmlyb25tZW50KCk7CisgICAgICAgIG9iamVjdCAqYWxsX2Vudmlyb25tZW50KG9iamVjdCBvYik7CisKK0FSR1VNRU5URToKKyAgICAgICAgb2IgLSBkYXMgT2JqZWt0LCBkZXNzZW4gZW52aXJvbm1lbnQoKXMgZ2V3dWVuc2NodCB3ZXJkZW4KKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEdpYnQgZWluIEFycmF5IG1pdCBhbGxlbiBVbWdlYnVuZ2VuIGRlcyBPYmpla3RzIDxvYj4genVydWVjay4KKyAgICAgICAgV2VubiA8b2I+IG5pY2h0IGFuZ2VnZWJlbiB3aXJkLCB3aXJkIHN0YW5kYXJkbWFlc3NpZyB0aGlzX29iamVjdCgpCisgICAgICAgIHZlcndlbmRldC4KKworICAgICAgICBXZW5uIDxvPiBrZWluZSBVbWdlYnVuZyBoYXQgb2RlciB6ZXJzdG9lcnQgd3VyZGUsIHdpcmQgMCB6dXJ1ZWNrCisgICAgICAgIGdlZ2ViZW4uCisKK0JFTUVSS1VOR0VOOgorICAgICAgICBEYXMgenVydWVja2dlZ2ViZW5lIEFycmF5IGlzdCBzbyBhbmdlbGVndCwgZGFzcyBkaWUgaW5uZXJzdGUgVW1nZWJ1bmcKKyAgICAgICAgYW0gQW5mYW5nIGRlcyBBcnJheXMgc3RlaHQsIHVuZCBkaWUgYWV1c3NlcnN0ZSBVbWdlYnVuZyBhbSBFbmRlLgorCitCRUlTUElFTAorICAgICAgICAoRGllIGdlc3VjaHRlIEZhY2tlbCBiZWZpbmRldCBzaWNoIGluIGVpbmVtIEJlaGFlbHRlciwgZGVuIFdhcmdvbiBiZWkKKyAgICAgICAgc2ljaCB0cmFlZ3QuIFdhcmdvbiBzdGVodCBpbiBzZWluZW0gV29ya3Jvb20uKQorCisgICAgICAgIG9iID0gYWxsX2Vudmlyb25tZW50KGZpbmRfb2JqZWN0KCIvb2JqL2ZhY2tlbCMzMiIpKTsKKyAgICAgICAgPT4gb2IgPSAoe1srd3Vlc3RlL2R1cmlhbi9iZWhhZWx0ZXIjMzFdLFsvbWFnaWVyOndhcmdvbl0sW34vd29ya3Jvb21dfSkKKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjYuIEVpbiBWb3JzY2hsYWcgdm9uIFR1Yk11ZC4KKworU0lFSEUgQVVDSAorICAgICAgICBlbnZpcm9ubWVudChFKSwgYWxsX2ludmVudG9yeShFKQorCis3LkZlYiAyMDA3IEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vYWxsX2ludmVudG9yeSBiL2RvYy9lZnVuL2FsbF9pbnZlbnRvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2ZWVhMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2FsbF9pbnZlbnRvcnkKQEAgLTAsMCArMSwxNyBAQAorYWxsX2ludmVudG9yeQorRlVOS1RJT046CisgICAgIG9iamVjdCAqYWxsX2ludmVudG9yeSgpCisgICAgIG9iamVjdCAqYWxsX2ludmVudG9yeShvYmplY3Qgb2IpCisKK0JFU0NIUkVJQlVORzoKKyAgICAgTGllZmVydCBlaW4gRmVsZCAoQXJyYXkpIG1pdCBhbGxlbiBPYmpla3RlbiwgZGllIHNpY2ggaW0gT2JqZWt0IG9iCisgICAgIGJlZmluZGVuIChiencuIGluIHRoaXNfb2JqZWN0KCksIHNvZmVybiBrZWluIEFyZ3VtZW50IGFuZ2VnZWJlbgorICAgICB3dXJkZSkuCisgICAgIEdlcmFkZSBiZWkgc2VociB2b2xsZW4gT2JqZWt0ZW4gYmlldGV0IHNpY2ggZWhlciBmaXJzdF9pbnZlbnRvcnkoKSwKKyAgICAgbmV4dF9pbnZlbnRvcnkoKSBhbi4KKworU0lFSEUgQVVDSDoKKyAgICAgZmlyc3RfaW52ZW50b3J5KEUpLCBuZXh0X2ludmVudG9yeShFKSwgZGVlcF9pbnZlbnRvcnkoRSksCisgICAgIGFsbF9lbnZpcm9ubWVudChFKSwgZW52aXJvbm1lbnQoRSkKKworMjIuIE1hZXJ6IDIwMDQgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2FsbG9jYXRlIGIvZG9jL2VmdW4vYWxsb2NhdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU5MWM1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2FsbG9jYXRlCkBAIC0wLDAgKzEsMzggQEAKK1NZTk9QU0lTCisgICAgICAgICptaXhlZCBhbGxvY2F0ZShpbnQgc2l6ZSk7CisgICAgICAgICptaXhlZCBhbGxvY2F0ZShpbnQgc2l6ZSwgbWl4ZWQgaW5pdF92YWx1ZSk7CisKKyAgICAgICAgKm1peGVkIGFsbG9jYXRlKCppbnQgc2l6ZXMpOworICAgICAgICAqbWl4ZWQgYWxsb2NhdGUoKmludCBzaXplcywgbWl4ZWQgaW5pdF92YWx1ZSk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBBbGxvemllcnQgZWluIEFycmF5IHZvbiA8c2l6ZT4gRWxlbWVudGVuLiBEaWUgQW56YWhsIEVsZW1lbnRlIG11c3MKKyAgICAgICAgZ3JvZXNzZXIgc2VpbiBhbHMgMCwgZGFyZiBhYmVyIGRhcyBTeXN0ZW1tYXhpbXVtIChub3JtYWxlcndlaXNlIDEwMDApCisgICAgICAgIG5pY2h0IHVlYmVyc3RlaWdlbi4gV2lyZCA8aW5pdF92YWx1ZT4gYW5nZWdlYmVuLCB3aXJkIGFsbGVuIEVsZW1lbnRlbgorICAgICAgICBkaWVzZXIgYWxzIEFuZmFuZ3N3ZXJ0IHp1Z2V3aWVzZW4uIFdlbm4gPGluaXRfdmFsdWU+IGVpbiBNYXBwaW5nIG9kZXIKKyAgICAgICAgZWluIEFycmF5IGlzdCwgd2lyZCBmdWVyIGplZGVzIEVsZW1lbnQgZWluZSBlaW5mYWNoZSBLb3BpZSBlcnN0ZWxsdC4KKyAgICAgICAgV2lyZCA8aW5pdF92YWx1ZT4gbmljaHQgYW5nZWdlYmVuLCBzaW5kIGFsbGUgRWxlbWVudGUgMC4KKworICAgICAgICBJbiBkZXIgendlaXRlbiBGb3JtIChtaXQgZWluZW0gRmVsZCB2b24gPHNpemVzPiBhbnN0ZWxsZSBudXIgZWluZXIKKyAgICAgICAgPHNpemU+KSBlcnpldWd0IGFsbG9jYXRlKCkgZWluIG1laHJkaW1lbnNpb25hbGVzIEFycmF5LCBlaW4gQXJyYXkgYXVzCisgICAgICAgIEFycmF5cy4KKworICAgICAgICBIZXV0ZSB3aXJkIGFsbG9jYXRlKCkga2F1bSBtZWhyIGJlbm9ldGlndCwgd2VpbCBBcnJheXMgbWl0IGRlbQorICAgICAgICArLU9wZXJhdG9yIGFkZGllcnQgd2VyZGVuIGtvZW5uZW4gdW5kIG1pdCBkZW0gKHt9KS1PcGVyYXRvcgorICAgICAgICBpbml0aWFsaXNpZXJ0LiBEZXIgZWluemlnZSBOdXR6ZW4gZGVyIEZ1bmt0aW9uIGlzdCwgZ3Jvc3NlIGxlZXJlCisgICAgICAgIG9kZXIgaW5pdGlhbGlzaWVydGUgQXJyYXlzIHp1IGVyemV1Z2VuLgorCitCRUlTUElFTAorICAgICAgICBzdHJpbmcgKmJ1ZmZlcjsKKyAgICAgICAgYnVmZmVyID0gYWxsb2NhdGUoNTApOworICAgICAgICBidWZmZXIgPSBhbGxvY2F0ZSg1MCwgIiIpOworCisgICAgICAgIGJ1ZmZlciA9IGFsbG9jYXRlKCAoeyAyLCAzIH0pICkKKyAgICAgICAgICAtLT4gKHsgKHsgMCwgMCwgMCB9KSwgKHsgMCwgMCwgMCB9KSB9KQorCitBRU5ERVJVTkdFTgorICAgICAgICBMRE11ZCAzLjIuOSBmdWVocnRlIGRlbiBBbmZhbmdzd2VydCA8aW5pdF92YWx1ZT4gdW5kIGRpZQorICAgICAgICAgICAgSW5pdGlhbGlzaWVydW5nIHZvbiBtZWhyZGltZW5zaW9uYWxlbiBBcnJheXMgZWluLgorCitTSUVIRSBBVUNICisgICAgICAgIHNpemVvZihFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vYW5kX2JpdHMgYi9kb2MvZWZ1bi9hbmRfYml0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDY2ZDYxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vYW5kX2JpdHMKQEAgLTAsMCArMSwyMyBAQAorU1lOT1BTSVMKKyAgICAgICAgc3RyaW5nIGFuZF9iaXRzKHN0cmluZyBzdHIxLCBzdHJpbmcgc3RyMik7CisKK0JFU0NIUkVJQlVORworICAgICAgICA8c3RyMT4gdW5kIDxzdHIyPiBzZWllbiBiZWlkZXMgQml0c3RyaW5ncy4gRGFzIFJlc3VsdGF0IHZvbiBhbmRfYml0cygpCisgICAgICAgIGlzdCBlaW4gQml0c3RyaW5nIG1pdCBkZW0gYmluYWVyZW4gVW5kIHZvbiA8c3RyMT4gdW5kIDxzdHIyPiwgZGFzCisgICAgICAgIGhlaXNzdCBlaW4gU3RyaW5nLCBpbiBkZW0gZWluIEJpdCBudXIgZ2VzZXR6dCBpc3QsIHdlbm4gZGFzCisgICAgICAgIGVudHNwcmVjaGVuZGUgQml0IGluIGJlaWRlbiBTdHJpbmdzIDxzdHIxPiB1bmQgPHN0cjI+IGdlc2V0enQgaXN0LgorCitCRUlTUElFTAorICAgICAgICBzdHJpbmcgczEsIHMyLCBzMzsKKworICAgICAgICBzMSA9IHNldF9iaXQoIiIsIDMpOyBzMSA9IHNldF9iaXQoczEsIDE1KTsgIC0+IHMxIGlzICIoICgiCisgICAgICAgIHMyID0gc2V0X2JpdCgiIiwgMyk7IHMyID0gc2V0X2JpdChzMiwgNCk7ICAgLT4gczIgaXMgIjgiCisKKyAgICAgICAgczMgPSBhbmRfYml0cyhzMSwgczIpOworCisgICAgICAgIC0tPiBzMyBpc3QgamV0enQgIjgiLCBkLmguIGVpbiBCaXRzdHJpbmcsIGluIGRlbSBudXIgZGFzIDMuIEJpdAorICAgICAgICAgICAgZ2VzZXR6dCBpc3QuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgY2xlYXJfYml0KEUpLCBzZXRfYml0KEUpLCB0ZXN0X2JpdChFKSwgbmV4dF9iaXQoRSksIGxhc3RfYml0KEUpLAorICAgICAgICBjb3VudF9iaXRzKEUpLCBvcl9iaXRzKEUpLCB4b3JfYml0cyhFKSwgaW52ZXJ0X2JpdHMoRSksIGNvcHlfYml0cyhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vYXBwbHkgYi9kb2MvZWZ1bi9hcHBseQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWEzMGE1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vYXBwbHkKQEAgLTAsMCArMSwzNSBAQAorU1lOT1BTSVMKKyAgICAgICAgbWl4ZWQgYXBwbHkoY2xvc3VyZSBjbCwgbWl4ZWQgYXJnLCAuLi4pOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgV2VydGV0IGRpZSBDbG9zdXJlIDxjbD4gYXVzLiBXZW5uIDxjbD4ga2VpbmUgQ2xvc3VyZSBpc3QsIHdpcmQgPGNsPgorICAgICAgICB1bnZlcmFlbmRlcnQgenVydWVjayBnZWxpZWZlcnQgdW5kIGFsbGUgQXJndW1lbnRlIDxhcmc+IHdlcmRlbgorICAgICAgICBpZ25vcmllcnQuCisKKyAgICAgICAgRXMgZ2lidCBlaW5lbiBrbGVpbmVuIFVudGVyc2NoaWVkIHp1IGZ1bmNhbGwoKSwgZGFzIGphIGltIFdlc2VudGxpY2hlbgorICAgICAgICBkYXMgZ2xlaWNoZSB0dXQgKG5hZW1saWNoLCBlaW5lIENsb3N1cmUgYXVzd2VydGVuKTogd2VubiBkYXMgbGV0enRlCisgICAgICAgIEFyZ3VtZW50IHZvbiBhcHBseSgpIGVpbiBBcnJheSBpc3QsIHdpcmQgamVkZXMgRWxlbWVudCBkaWVzZXMgQXJyYXlzCisgICAgICAgIHp1IGVpbmVtIHNlcGFyYXRlbiB6dXNhZXR6bGljaGVuIFBhcmFtZXRlciBkZXIgQ2xvc3VyZSB1bWdld2FuZGVsdC4KKworICAgICAgICBFaW5lIG1vZWdsaWNoZSBBbndlbmR1bmcgd2FlcmU6CisgICAgICAgICAgICBtaXhlZCBldmFsKG9iamVjdCBvYixzdHJpbmcgZnVuYyxtaXhlZCAqYXJncykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHkoIydjYWxsX290aGVyLG9iLGZ1bmMsYXJncyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgRGFzIGZ1ZWhydCB6dSBmb2xnZW5kZW4gQXVmcnVmZW46CisgICAgICAgICAgICBvYi0+ZnVuYyhhcmdzWzBdLGFyZ3NbMV0sLi4uLGFyZ3Nbc2l6ZW9mKGFyZ3MpLTFdKQorCisgICAgICAgIFdhZXJlIHN0YXR0ZGVzc2VuIGZ1bmNhbGwoKSBhdWZnZXJ1ZmVuIHdvcmRlbiwgc28gaGFldHRlIGRhcyBlcmdlYmVuOgorICAgICAgICAgICAgb2ItPmZ1bmMoYXJncykKKworICAgICAgICBFaW5lIHdpY2h0aWdlIEFud2VuZHVuZyB2b24gYXBwbHkoKSBpc3QgZGFzIEF1c3dlcnRlbiBkZXMKKyAgICAgICAgQXJyYXktQXJndW1lbnRzIGluICJ2YXJhcmdzIiBGdW5rdGlvbmVuLgorCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiAzLjJANzAuCisgICAgICAgIExETXVkIDMuMi44IGZ1ZWhydGUgZWluLCBkYXNzIGRhcyBlcnN0ZSBBcmd1bWVudCB6dXJ1ZWNrIGdlZ2ViZW4gd2lyZCwKKyAgICAgICAgICAgIHdlbm4gZXMgc2ljaCBuaWNodCB1bSBlaW5lIENsb3N1cmUgaGFuZGVsdC4KKworU0lFSEUgQVVDSAorICAgICAgICBmdW5jYWxsKEUpLCBjbG9zdXJlcyhMUEMpLCB2YXJhcmdzKExQQykKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2FzaW4gYi9kb2MvZWZ1bi9hc2luCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzZkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9hc2luCkBAIC0wLDAgKzEsOCBAQAorU1lOT1BTSVMKKyAgICAgICAgZmxvYXQgYXNpbihmbG9hdCkKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZGVyIEFya3Vzc2ludXMgZGVzIEFyZ3VtZW50ZXMuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgc2luKEUpLCBjb3MoRSksIGFjb3MoRSksIHRhbihFKSwgYXRhbihFKSwgYXRhbjIoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2F0YW4gYi9kb2MvZWZ1bi9hdGFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNWI3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9hdGFuCkBAIC0wLDAgKzEsMTEgQEAKK1NZTk9QU0lTCisgICAgICAgIGZsb2F0IGF0YW4oaW50fGZsb2F0KQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBkZW4gQXJrdXN0YW5nZW5zIGRlcyBBcmd1bWVudGVzLgorCitBRU5ERVJVTkdFTgorICAgICAgICBMRE11ZCAzLjIuOTogR2FuenphaGxlbiAoSW50ZWdlcnMpIGFscyBBcmd1bWVudCBoaW56dWdlZnVlZ3QuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgYXRhbjIoRSksIHNpbihFKSwgY29zKEUpLCB0YW4oRSksIGFzaW4oRSksIGFjb3MoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2F0YW4yIGIvZG9jL2VmdW4vYXRhbjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjZDc4YQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2F0YW4yCkBAIC0wLDAgKzEsMTYgQEAKK1NZTk9QU0lTCisgICAgICAgIGZsb2F0IGF0YW4yIChpbnR8ZmxvYXQgeSwgaW50fGZsb2F0IHgpCisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGRlbiBXaW5rZWwgZGVyIFBvbGFya29vcmRpbmF0ZW4gZGVzIFB1bmt0ZXMgKHgsIHkpIGltCisgICAgICAgIEJlcmVpY2ggKC1QaSwgUGldLgorCisgICAgICAgIE1hbiBiZWFjaHRlIGRpZSBWZXJ0YXVzY2h1bmcgZGVyIEtvb3JkaW5hdGVuIHggdW5kIHkgaW4gZGVyCisgICAgICAgIFBhcmFtZXRlci1MaXN0ZSwgZGllIGRpZSBBYmZvbGdlIGluIGRlciBTdGVpZ3VuZ3MtV2lua2VsLVVtcmVjaG51bmcKKyAgICAgICAgYXRhbih5IC8geCkgd2lkZXJzcGllZ2VsdC4KKworQUVOREVSVU5HRU4KKyAgICAgICAgTERNdWQgMy4yLjk6IEdhbnp6YWhsZW4gKEludGVnZXJzKSBhbHMgQXJndW1lbnRlIGhpbnp1Z2VmdWVndC4KKworU0lFSEUgQVVDSAorICAgICAgICBzaW4oRSksIGNvcyhFKSwgdGFuKEUpLCBhc2luKEUpLCBhY29zKEUpLCBhdGFuKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9hdHRhY2hfZXJxX2RlbW9uIGIvZG9jL2VmdW4vYXR0YWNoX2VycV9kZW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzJiMTNiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vYXR0YWNoX2VycV9kZW1vbgpAQCAtMCwwICsxLDM3IEBACitTWU5PUFNJUworICAgICAgICBpbnQgYXR0YWNoX2VycV9kZW1vbihvYmplY3Qgb2IsIGludCBkb19jbG9zZSkKKyAgICAgICAgaW50IGF0dGFjaF9lcnFfZGVtb24oc3RyaW5nIG9ibmFtZSwgaW50IGRvX2Nsb3NlKQorCitERVNDUklQVElPTgorICAgICAgICBUaGlzIHByaXZpbGVnZWQgZWZ1biBpcyB0byBzZXQvY2hhbmdlIHRoZSBjb25uZWN0aW9uIG9mIHRoZQorICAgICAgICBkcml2ZXIgdG8gdGhlIGV4dGVybmFsIGVycSBkZW1vbiwgdGh1cyBpbiBlZmZlY3QgY2hhbmdpbmcgdGhlCisgICAgICAgIGRlbW9ucy4KKworICAgICAgICBUaGUgY29ubmVjdGlvbiBvZiB0aGUgZ2l2ZW4gaW50ZXJhY3RpdmUgJ29iJ2plY3QgaXMgdGFrZW4gYXdheSghKQorICAgICAgICBmcm9tIGl0IGFuZCBzdG9yZWQgYXMgdGhlIGVycS1jb25uZWN0aW9uLiBUaGUgb2JqZWN0IGl0c2VsZiBpcworICAgICAgICB0aGVuIG5vIGxvbmdlciBuZWVkZWQsIGJ1dCBtYXkgc3RheSBhbGl2ZSAtIGl0IGlzIGp1c3QgYW5vdGhlcgorICAgICAgICBub24taW50ZXJhY3RpdmUgb2JqZWN0IHRoZW4uCisKKyAgICAgICAgSW4gdGhlIHNlY29uZCBmb3JtLCB0aGUgc3RyaW5nIHdpbGwgYmUgY29tYmluZWQgYXMgc3VmZml4IHRvCisgICAgICAgIHRoZSBmaWxlbmFtZSBFUlFGSUxFPG9ibmFtZT4sIHdoaWNoIGlzIHRoZW4gdGhlIGJpbmFyeSB0byBiZQorICAgICAgICBmb3JrZWQgb2ZmIGFzIG5ldyBlcnEgZGVtb24uIFRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhpcyBlcnEKKyAgICAgICAgd2lsbCB0YWtlIHBsYWNlIG92ZXIgdW5peCBkb21haW4gc29ja2V0cy4gRVJRRklMRSBkZWZhdWx0cyB0bworICAgIEJJTkRJUi9lcnEsIHdoZXJlIEJJTkRJUiBpcyB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZSBmb3IgdGhlCisgICAgZXhlY3V0YWJsZSBkaXJlY3RvcnkuCisKKyAgICAgICAgSWYgdGhlcmUgaXMgYWxyZWF5IGFuIGVycSBkZW1vbiBjb25uZWN0ZWQgdG8gdGhlIGRyaXZlciwgdGhlCisgICAgICAgIGZ1bmN0aW9uIHdpbGwgZmFpbCB1bmxlc3MgJ2RvX2Nsb3NlJyAoZGVmYXVsdCAwKSBpcyBzcGVjaWZpZWQKKyAgICAgICAgYXMgMSAob3IgYW55IG90aGVyIG9kZCBpbnRlZ2VyKTogdGhlbiB0aGUgb2xkIGNvbm5lY3Rpb24gd2lsbAorICAgICAgICBiZSBjbG9zZWQgYmVmb3JlIGF0dGFjaGluZyB0aGUgbmV3LgorICAgICAgICBUaGUgZWZ1biByZXR1cm5zIDEgb24gc3VjY2VzcywgZWxzZSAwLgorCitFWEFNUExFCisgICAgICAgIFRvIHJlc3RhcnQgdGhlIChkZWZhdWx0KSBlcnEsIHdyaXRlIGluCisgICAgICAgIG1hc3Rlci5jOjpzdGFsZV9lcnEoY2xvc3VyZSBjKToKKyAgICAgICAgICBhdHRhY2hfZXJxX2RlbW9uKCIiLCAwKTsKKworSElTVE9SWQorICAgICAgICBJbnRyb2R1Y2VkIGluIDMuMi4xQDYxLgorCitTRUUgQUxTTworICAgICAgICBzZW5kX2VycShFKSwgZXJxKEMpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9iYXNlb2YgYi9kb2MvZWZ1bi9iYXNlb2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0Y2MyMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2Jhc2VvZgpAQCAtMCwwICsxLDE2IEBACitTWU5PUFNJUworICAgICAgICBpbnQgYmFzZW9mIChzdHJ1Y3QgYiwgc3RydWN0IHMpCisKK0RFU0NSSVBUSU9OCisgICAgICAgIFRlc3QgaWYgdGhlIHR5cGUgb2Ygc3RydWN0IDxiPiBpcyBhIGJhc2Ugb2Ygc3RydWN0IDxzPiAodGhlCisgICAgICAgIHZhbHVlcyBvZiA8Yj4gYW5kIDxzPiBhcmUgaXJyZWxldmFudCkuIFJlc3VsdHMgYXJlOgorICAgICAgICAgIDA6IDxiPiBpcyBub3QgYSBiYXNlIG9mIDxzPiwgbm9yIGlzIDxiPiBvZiBlcXVhbCB0eXBlIGFzIDxzPgorICAgICAgICAgICAgICAgKHRob3VnaCA8cz4gbWlnaHQgYmUgYSBiYXNlIG9mIDxiPikuCisgICAgICAgICAgMTogPGI+IGlzIGEgdHJ1ZSBiYXNlIG9mIDxzPgorICAgICAgICAgIDI6IDxiPiBhbmQgPHM+IGFyZSB0aGUgc2FtZSBzdHJ1Y3QgdHlwZQorCitISVNUT1JZCisgICAgICAgIEludHJvZHVjdGVkIGluIExETXVkIDMuMy4zNDQuCisKK1NFRSBBTFNPCisgICAgICAgIHN0cnVjdHAoRSksIHN0cnVjdHMoTFBDKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vYmluYXJ5X21lc3NhZ2UgYi9kb2MvZWZ1bi9iaW5hcnlfbWVzc2FnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGJjMzIxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vYmluYXJ5X21lc3NhZ2UKQEAgLTAsMCArMSwzNiBAQAorR0VTQ0hVRVRaVAorU1lOT1BTSVMKKyAgICAgICAgaW50IGJpbmFyeV9tZXNzYWdlKGludCAqfHN0cmluZyBtZXNzYWdlcywgaW50IGZsYWdzKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZXN0IGRlbiBPdXRwdXQgYXVzIHVuZCBzZW5kZXQgZGllc2VuIGRpcmVrdCBtaXQgd3JpdGUoKSBPSE5FIElBQworICAgICAgICBRVU9USU5HLiBEaWUgTmFjaHJpY2h0IGthbm4gTnVsbGVuIGVudGhhbHRlbiwgd2VubiBzaWUgYWxzCisgICAgICAgIGludCAqIGFuZ2VnZWJlbiBzaW5kLiBEaWUgTmFjaHJpY2h0IHdpcmQgYW4gdGhpc19vYmplY3QoKSBhdXNnZWdlYmVuLAorICAgICAgICBhYmVyIG51ciwgd2VubiBkaWVzZXMgaW50ZXJha3RpdiBpc3QuCisKKyAgICAgICAgRGVyIFJ1ZWNrZ2FiZXdlcnQgaXN0IGRpZSBBbnphaGwgdGF0c2FlY2hsaWNoIGdlZHJ1Y2t0ZXIgWmVpY2hlbi4gRWluZQorICAgICAgICBhbGxmYWVsbGlnZSAiYWxsb3dlZCBjaGFyc2V0IiBFaW5zdGVsbHVuZyB3aXJkIHVlYmVyZ2FuZ2VuLgorCisgICAgICAgIDxmbGFncz4gd2VyZGVuIGJpdHdlaXNlIGludGVycHJldGllcnQgdW5kIGtvZW5uZW4gdWViZXIgZGFzIGJpbmFlcmUKKyAgICAgICAgT2RlciB2ZXJidW5kZW4gd2VyZGVuLgorCisgICAgICAgIEJpdCAwIChXZXJ0IDEpOiB3ZW5uIGdlc2V0enQsIHdpcmQgYWRkX21lc3NhZ2UoKSBhbnN0ZWxsZSB2b24KKyAgICAgICAgICAgIHdyaXRlKCkgdmVyd2VuZGV0LiBTbyBtdXNzIGRlciBPdXRwdXQgbmljaHQgenVlcnN0IGF1c2dlbGVzZW4KKyAgICAgICAgICAgIHdlcmRlbiwgYWxsZXJkaW5ncyBlcmZvbGd0IGRpZSBBdXNnYWJlIG5pY2h0IHNvZm9ydC4gQXVjaCBrYW5uCisgICAgICAgICAgICBkYW5uIGRpZSBBbnphaGwgZWZmZWt0aXYgdWViZXJ0cmFnZW5lciBaZWljaGVuIG5pY2h0IGJlc3RpbW10CisgICAgICAgICAgICB3ZXJkZW4gLSBkZXIgUnVlY2tnYWJld2VydCBpc3QgbmljaHQgZGVmaW5pZXJ0LgorCisgICAgICAgIEJpdCAxIChXZXJ0IDIpOiBEZXIgUHVmZmVyIHdpcmQgYXVzZ2VsZXNlbiwgX25hY2hkZW1fIGRpZSBOYWNocmljaHQKKyAgICAgICAgICAgIGFuZ2VmdWVndCB3dXJkZS4gSXN0IG51ciBpbiBWZXJiaW5kdW5nIG1pdCBCaXQgMCBzaW5udm9sbC4KKworICAgICAgICBEaWUgSWRlZSBoaW50ZXIgZGVuIEZsYWdzIGlzdCwgZGFzcyBkYXMgU2VuZGVuIHZvbiBLb21tYW5kb2NvZGVzCisgICAgICAgIHp1bSBCZWlzcGllbCBmdWVyIEZhcmJlbiBhbiBkZW4gdm9yaGFuZGVuZW4gRmlsdGVybiBmdWVyIGVybGF1YnRlCisgICAgICAgIFplaWNoZW4gdm9yYmVpZ2VzY2hsZXVzdCB3ZXJkZW4gbXVzcywgamVkb2NoIG5pY2h0IHdpY2h0aWcgZ2VudWcKKyAgICAgICAgaXN0LCB1bSBkaWUgVmVyc2Nod2VuZHVuZyB2b24gQmFuZGJyZWl0ZSBtaXR0ZWxzIGVpbmVyCisgICAgICAgIHN5bmNocm9uZW4gVWViZXJ0cmFndW5nIHp1IHJlY2h0ZmVydGlnZW4uCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIDMuMi4xQDQwLgorCitTSUVIRSBBVUNICisgICAgICAgIHNldF9jb25uZWN0aW9uX2NoYXJzZXQoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2JpbmRfbGFtYmRhIGIvZG9jL2VmdW4vYmluZF9sYW1iZGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA3NWEzMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2JpbmRfbGFtYmRhCkBAIC0wLDAgKzEsMTYgQEAKK1NZTk9QU0lTCisgICAgICAgIGNsb3N1cmUgYmluZF9sYW1iZGEoY2xvc3VyZSwgb2JqZWN0IG9iKQorCitERVNDUklQVElPTgorICAgICAgICBCaW5kcyBhbiB1bmJvdW5kIGxhbWJkYSBjbG9zdXJlIHRvIGFuIG9iamVjdCBhbmQgcmV0dXJuIGl0LgorICAgICAgICBUaGUgZWZ1biBjYW4gYWxzbyBiZSB1c2VkIHRvIHJlYmluZCBhbiBlZnVuLSwgc2ltdWwtZWZ1bgorICAgICAgICBvciBvcGVyYXRvciBjbG9zdXJlIHRvIGEgZGlmZmVyZW50IG9iamVjdC4KKworICAgICAgICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgb2IgaXMgbm90IHRoaXNfb2JqZWN0KCksIHRoZSBwcml2aWxlZ2UKKyAgICAgICAgdmlvbGF0aW9uICgiYmluZF9sYW1iZGEiLCB0aGlzX29iamVjdCgpLCBvYikgb2NjdXJzLgorCitISVNUT1JZCisgICAgICAgIEludHJvZHVjZWQgaW4gMy4yQDgyLgorCitTRUUgQUxTTworICAgICAgICBsYW1iZGEoRSksIHVuYm91bmRfbGFtYmRhKEUpLCBhcHBseShFKSwgZnVuY2FsbChFKSwgY2xvc3VyZXMoTFBDKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vYmx1ZXByaW50IGIvZG9jL2VmdW4vYmx1ZXByaW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNzc0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9ibHVlcHJpbnQKQEAgLTAsMCArMSwyMyBAQAorVk9STEFFVUZJRworU1lOT1BTSVMKKyAgICAgICAgb2JqZWN0IGJsdWVwcmludCgpCisgICAgICAgIG9iamVjdCBibHVlcHJpbnQoc3RyaW5nfG9iamVjdCBvYik7CisKK0JFU0NIUkVJQlVORworICAgICAgICBEaWUgRWZ1biBsaWVmZXJ0IGRlbiBCbHVlcHJpbnQgZnVlciBkYXMgYW5nZWdlYmVuIE9iamVrdCA8b2I+IG9kZXIKKyAgICAgICAgZnVlciB0aGlzX29iamVjdCgpLCB3ZW5uIG5pY2h0IGFuZ2VnZWJlbi4KKworICAgICAgICBXZW5uIGRlciBCbHVlcHJpbnQgemVyc3RvZXJ0IHd1cmRlLCBsaWVmZXJ0IGRpZSBGdW5rdGlvbiAwLiBGdWVyCisgICAgICAgIE9iamVrdGUgbWl0IHJlcGxhY2VfcHJvZ3JhbSgpIGxpZWZlcnQgZGllIEZ1bmt0aW9uIGRlbiBCbHVlcHJpbnQgZGVzCisgICAgICAgIGVyc2V0emVuZGVuIFByb2dyYW1zLgorCitCRUlTUElFTAorICAgICAgICBibHVlcHJpbnQoIi9vYmovZGluZyIpOyAgICAgICAgICAgICAgICAgLT4gbGllZmVydCAvb2JqL2RpbmcKKyAgICAgICAgYmx1ZXByaW50KGZpbmRfb2JqZWN0KCIvb2JqL2RpbmciKSk7ICAgIC0+IGxpZWZlcnQgL29iai9kaW5nCisgICAgICAgIGJsdWVwcmludChjbG9uZV9vYmplY3QoIi9vYmovZGluZyIpKTsgICAtPiBsaWVmZXJ0IC9vYmovZGluZworCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuOS4KKworU0lFSEUgQVVDSAorICAgICAgICBjbG9uZXMoRSksIGNsb25lX29iamVjdChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vYnJlYWtfcG9pbnQgYi9kb2MvZWZ1bi9icmVha19wb2ludApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODQ0NTNlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vYnJlYWtfcG9pbnQKQEAgLTAsMCArMSwxMSBAQAorT1BUSU9OQUwKK1NZTk9QU0lTCisgICAgICAgIHZvaWQgYnJlYWtfcG9pbnQoKQorCitERVNDUklQVElPTgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGZvciBzeXN0ZW0gaW50ZXJuYWwgdXNlIGFuZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGJ5CisgICAgICAgIHVzZXIgb2JqZWN0cy4gSXQgaXMgc3VwcG9zZWQgdG8gY2hlY2sgdGhlIHN0YWNrIGludGVncml0eSBhbmQgYWJvcnRzCisgICAgICAgIHRoZSBkcml2ZXIgd2hlbiBpdCBkZXRlY3RzIGNvcnJ1cHRpb24uCisKK1NFRSBBTFNPCisgICAgICAgIHNodXRkb3duKEUpLCBzd2FwKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9jYWxsX2RpcmVjdCBiL2RvYy9lZnVuL2NhbGxfZGlyZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YWIwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9jYWxsX2RpcmVjdApAQCAtMCwwICsxLDc1IEBACitTWU5PUFNJUworICAgICAgICB1bmtub3duIGNhbGxfZGlyZWN0IChvYmplY3Qgb2IsIHN0cmluZyBmdW4sIG1peGVkIGFyZywgLi4uKQorICAgICAgICB1bmtub3duIGNhbGxfZGlyZWN0IChvYmplY3QgKm9iLCBzdHJpbmcgZnVuLCBtaXhlZCBhcmcsIC4uLikKKworREVTQ1JJUFRJT04KKyAgICAgICAgQ2FsbCBhIG1lbWJlciBmdW5jdGlvbiA8ZnVuPiBpbiBhbm90aGVyIG9iamVjdCA8b2I+IHdpdGggYW4KKyAgICAgICAgdGhlIGFyZ3VtZW50KHMpIDxhcmcuLi4+LiBSZXN1bHQgaXMgdGhlIHZhbHVlIHJldHVybmVkIGZyb20KKyAgICAgICAgdGhlIGNhbGxlZCBmdW5jdGlvbiAob3IgMCBmb3Igbm9uLWV4aXN0aW5nIG9yIHZvaWQgZnVuY3Rpb25zKS4KKworICAgICAgICBUaGlzIGVmdW4gaXMgYSB0d2luIHRvIGNhbGxfb3RoZXIoKSwgd2l0aCB0aGUgZGlmZmVyZW5jZQorICAgICAgICBiZWluZyB0aGF0IGNhbGxfZGlyZWN0KCkgbmV2ZXIgY2FsbHMgYSBkZWZhdWx0IG1ldGhvZC4KKworICAgICAgICBPcHRpb25hbGx5IHRoZSBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gYWNjZXB0IGFuIGFycmF5IG9mCisgICAgICAgIG9iamVjdHMgYXMgPG9iPjogdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBzYW1lCisgICAgICAgIGFyZ3VtZW50cyBpbiBhbGwgdGhlIGdpdmVuIG9iamVjdHMuICBUaGUgc2luZ2xlIHJlc3VsdHMgYXJlCisgICAgICAgIGNvbGxlY3RlZCBpbiBhbiBhcnJheSBhbmQgeWllbGQgdGhlIGZpbmFsIHJlc3VsdC4gIEFycmF5CisgICAgICAgIGVsZW1lbnRzIGNhbiBiZSBvYmplY3RzIG9yIHRoZSBuYW1lcyBvZiBleGlzdGluZyBvYmplY3RzOworICAgICAgICBkZXN0cnVjdGVkIG9iamVjdHMgYW5kIDBzIHdpbGwgeWllbGQgYSAnMCcgYXMgcmVzdWx0LCBidXQKKyAgICAgICAgZG9uJ3QgY2F1c2UgYW4gZXJyb3IuCisKKyAgICAgICAgSWYgdGhlIGFycmF5LWNhbGxpbmcgbW9kZSBpcyBhdmFpbGFibGUsIHRoZSBtYWNybworICAgICAgICBfX0xQQ19BUlJBWV9DQUxMU19fIGlzIGRlZmluZWQuCisKKyAgICAgICAgVGhlIG9iamVjdChzKSBjYW4gYmUgZ2l2ZW4gZGlyZWN0bHkgb3IgdmlhIGEgc3RyaW5nIChpLmUuIGl0cworICAgICAgICBvYmplY3RfbmFtZSkuIElmIGl0IGlzIGdpdmVuIGJ5IGEgc3RyaW5nIGFuZCB0aGUgb2JqZWN0IGRvZXMgbm90CisgICAgICAgIGV4aXN0IHlldCwgaXQgd2lsbCBiZSBsb2FkZWQuCisKKyAgICAgICAgb2ItPmZ1bihhcmdzKSBhbmQgIm9iX25hbWUiLT5mdW4oYXJncykgaXMgZXF1aXZhbGVudCB0bworICAgICAgICBjYWxsX290aGVyKG9iLCAiZnVuIiwgYXJncykuIE5vd2FkYXlzIHRoZSBvYl9uYW1lIHN0cmluZyBjYW4KKyAgICAgICAgYWxzbyBiZSBhIHZhcmlhYmxlLgorCisgICAgICAgIG9iLT5mdW4oYXJncykgYW5kIG9iLT4iZnVuIihhcmdzKSBhcmUgZXF1aXZhbGVudCB0bworICAgICAgICBjYWxsX290aGVyKG9iLCAiZnVuIiwgYXJncykuIG9iLT4oZnVuKShhcmdzKSBhcmUgZXF1aXZhbGVudAorICAgICAgICB0byBjYWxsX290aGVyKG9iLCBmdW4sIGFyZ3MpIHdoZXJlIGZ1biBpcyBhIHJ1bnRpbWUgZXhwcmVzc2lvbgorICAgICAgICByZXR1cm5pbmcgdGhlIGZ1bmN0aW9uIG5hbWUuCisKKyAgICAgICAgSWYgb2I6OmZ1biBkb2VzIG5vdCBkZWZpbmUgYSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZ1bmN0aW9uLCB0aGUKKyAgICAgICAgY2FsbF9vdGhlcigpIHdpbGwgcmV0dXJuIDAsIHdoaWNoIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20KKyAgICAgICAgYSBmdW5jdGlvbiByZXR1cm5pbmcgMC4KKworICAgICAgICAicHVibGljbHkgYWNjZXNzaWJsZSIgbWVhbnMgInB1YmxpYyIgd2hlbiBjYWxsaW5nIG90aGVyIG9iamVjdHMsCisgICAgICAgIGFuZCAicHVibGljIiBvciAic3RhdGljIiB3aGVuIGNhbGxpbmcgdGhpc19vYmplY3QoKS4gInByaXZhdGUiCisgICAgICAgIGFuZCAicHJvdGVjdGVkIiBmdW5jdGlvbiBjYW4gbmV2ZXIgYmUgY2FsbGVkIHdpdGggY2FsbF9vdGhlcigpLgorCisgICAgICAgIFRoZSByZXR1cm4gdHlwZSBvZiBjYWxsX290aGVyKCkgaXMgJ2FueScgYmUgZGVmYXVsdC4gSG93ZXZlciwKKyAgICAgICAgaWYgeW91ciBMUEMgY29kZSB1c2VzICNwcmFnbWEgc3RyaWN0X3R5cGVzLCB0aGUgcmV0dXJuIHR5cGUgaXMKKyAgICAgICAgJ3Vua25vd24nLCBhbmQgdGhlIHJlc3VsdCBvZiBjYWxsX290aGVyKCkgbXVzdCBiZSBjYXN0ZWQgdG8KKyAgICAgICAgdGhlIGFwcHJvcHJpYXRlIHR5cGUgYmVmb3JlIHlvdSBjYW4gdXNlIGl0IGZvciBhbnl0aGluZy4KKworRVhBTVBMRVMKKyAgICAgICAgLy8gQWxsIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50cyBjYWxsIHRoZSBsZnVuIFF1ZXJ5UHJvcCgpCisgICAgICAgIC8vIGluIHRoZSBjdXJyZW50IHBsYXllciB3aXRoIHRoZSBhcmd1bWVudCBQX1NIT1JULgorICAgICAgICBzdHJpbmcgc3RyLCBmdW47CisKKyAgICAgICAgc3RyID0gKHN0cmluZyljYWxsX2RpcmVjdCh0aGlzX3BsYXllcigpLCAiUXVlcnlQcm9wIiwgUF9TSE9SVCk7CisgICAgICAgIGZ1biA9ICJRdWVyeVByb3AiOworICAgICAgICBzdHIgPSAoc3RyaW5nKWNhbGxfZGlyZWN0KHRoaXNfcGxheWVyKCksIGZ1biwgUF9TSE9SVCk7CisKKyAgICAgICAgWW91IGhhdmUgdG8gZG8gZXhwbGljaXQgdHlwZSBjYXN0aW5nIGJlY2F1c2Ugb2YgdGhlIHVua25vd24KKyAgICAgICAgcmV0dXJuIHR5cGUsIGlmIHlvdSBoYXZlIHNldCAjcHJhZ21hIHN0cmljdF90eXBlcy4KKworICAgICAgICAvLyBUaGlzIHN0YXRlbWVudCBjYWxscyB0aGUgbGZ1biBzaG9ydCgpIGluIGFsbCBpbnRlcmFjdGl2ZSB1c2VycworICAgICAgICAvLyBhbmQgc3RvcmVzIHRoZSBjb2xsZWN0ZWQgcmVzdWx0cyBpbiBhIHZhcmlhYmxlLgorICAgICAgICBzdHJpbmcgKiBzOworCisgICAgICAgIHMgPSAoc3RyaW5nICopY2FsbF9kaXJlY3QodXNlcnMoKSwgInNob3J0Iik7CisKKworSElTVE9SWQorICAgICAgICBJbnRyb2R1Y2VkIGluIExETXVkIDMuMy4xMTMgd2l0aCB0aGUgSF9ERUZBVUxUX01FVEhPRCBob29rLgorICAgICAgICBMRE11ZCAzLjIuMTAgbWFkZSB0aGUgY2FsbCBvbiBhcnJheXMgb2Ygb2JqZWN0cyBjb25maWd1cmFibGUuCisKK1NFRSBBTFNPCisgICAgICAgIGNhbGxfb3RoZXIoRSksIGNhbGxfZGlyZWN0X3Jlc29sdmVkKEUpLCBjcmVhdGUoQSksIHByYWdtYShMUEMpLAorICAgICAgICBleHRlcm5fY2FsbChFKSwgZnVuY3Rpb25fZXhpc3RzKEUpLCBmdW5jdGlvbnMoTFBDKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vY2FsbF9kaXJlY3RfcmVzb2x2ZWQgYi9kb2MvZWZ1bi9jYWxsX2RpcmVjdF9yZXNvbHZlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjI3OTM0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vY2FsbF9kaXJlY3RfcmVzb2x2ZWQKQEAgLTAsMCArMSwyNSBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IGNhbGxfZGlyZWN0X3Jlc29sdmVkKG1peGVkIHJlc3VsdCwgb2JqZWN0IG9iLCBzdHJpbmcgZnVuYywgLi4uKQorCitERVNDUklQVElPTgorICAgICAgICBTaW1pbGFyIHRvIGNhbGxfZGlyZWN0KCkuIElmIG9iLT5mdW5jKCkgaXMgZGVmaW5lZCBhbmQgcHVibGljbHkKKyAgICAgICAgYWNjZXNzaWJsZSwgYW55IG9mIHRoZSBvcHRpb25hbCBleHRyYSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0bworICAgICAgICBvYi0+ZnVuYyguLi4pLiBUaGUgcmVzdWx0IG9mIHRoYXQgZnVuY3Rpb24gY2FsbCBpcyBzdG9yZWQgaW4KKyAgICAgICAgcmVzdWx0LCB3aGljaCBtdXN0IGJlIHBhc3NlZCBieSByZWZlcmVuY2UuCisKKyAgICAgICAgVGhpcyBlZnVuIGlzIGEgdHdpbiB0byBjYWxsX3Jlc29sdmVkKCksIHdpdGggdGhlIGRpZmZlcmVuY2UKKyAgICAgICAgYmVpbmcgdGhhdCBjYWxsX2RpcmVjdF9yZXNvbHZlZCgpIG5ldmVyIGNhbGxzIGEgZGVmYXVsdCBtZXRob2QuCisKKyAgICAgICAgVGhlIGVmdW4gcmV0dXJucyAxIGlmIHRoZSBmdW5jdGlvbiBjb3VsZCBiZSBjYWxsZWQuCisgICAgICAgIElmIG9iOjpmdW4gZG9lcyBub3QgZGVmaW5lIGEgcHVibGljbHkgYWNjZXNzaWJsZSBmdW5jdGlvbiwgdGhlCisgICAgICAgIGVmdW4gd2lsbCByZXR1cm4gMC4KKworICAgICAgICBvYiBjYW4gYWxzbyBiZSBhbiBvYmplY3RfbmFtZS4gSWYgYSBzdHJpbmcgaXMgcGFzc2VkIGZvciBvYiwgYW5kCisgICAgICAgIG5vIG9iamVjdCB3aXRoIHRoYXQgbmFtZSBkb2VzIGV4aXN0LCBhbiBlcnJvciBvY2N1cnMuCisKK0hJU1RPUlkKKyAgICAgICAgSW50cm9kdWNlZCBpbiBMRE11ZCAzLjMuMTEzIHdpdGggdGhlIEhfREVGQVVMVF9NRVRIT0QgaG9vay4KKworU0VFIEFMU08KKyAgICAgICAgY2FsbF9kaXJlY3QoRSksIGNhbGxfcmVzb2x2ZWQoRSksIGZ1bmN0aW9uX2V4aXN0cyhFKSwKKyAgICAgICAgZmluZF9vYmplY3QoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2NhbGxfb3RoZXIgYi9kb2MvZWZ1bi9jYWxsX290aGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ODdmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9jYWxsX290aGVyCkBAIC0wLDAgKzEsOTQgQEAKK1NZTk9QU0lTCisgICAgICAgIHVua25vd24gY2FsbF9vdGhlcihvYmplY3Qgb2IsIHN0cmluZyBmdW4sIG1peGVkIGFyZywgLi4uKTsKKyAgICAgICAgdW5rbm93biBjYWxsX290aGVyKG9iamVjdCAqb2IsIHN0cmluZyBmdW4sIG1peGVkIGFyZywgLi4uKTsKKworICAgICAgICBvYi0+ZnVuKG1peGVkIGFyZywgLi4uKTsKKyAgICAgICAgb2ItPiJmdW4iKG1peGVkIGFyZywgLi4uKTsKKyAgICAgICAgb2ItPihmdW4pKG1peGVkIGFyZywgLi4uKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIFJ1ZnQgZGllIGluIGVpbmVtIGFuZGVyZW4gT2JqZWt0IDxvYj4gZGllIEZ1bmt0aW9uIDxmdW4+IG1pdCBkZW4KKyAgICAgICAgQXJndW1lbnRlbiA8YXJnLi4uPiBhdWYgdW5kIGdpYnQgZGVuIFdlcnQgenVydWVjaywgZGVyIHZvbiBkZXIKKyAgICAgICAgRnVua3Rpb24gPGZ1bj4gZ2VsaWVmZXJ0IHdpcmQgKG9kZXIgMCBmdWVyIG5pY2h0IGV4aXN0aWVyZW5kZSBvZGVyCisgICAgICAgIGFscyB2b2lkIGRla2xhcmllcnRlICBGdW5rdGlvbmVuKS4KKworICAgICAgICBPcHRpb25hbCBrYW5uIGRlciBEcml2ZXIgc28ga29uZmlndWVyaWVydCB3ZXJkZW4sIGRhc3MgYXVjaCBlaW4gQXJyYXkKKyAgICAgICAgdm9uIE9iamVrdGVuICo8b2I+IGFremVwdGllcnQgd2lyZC4gRGllIEZ1bmt0aW9uIDxmdW4+IHdpcmQgZGFubiBmdWVyCisgICAgICAgIGplZGVzIE9iamVrdCA8b2I+IGltIEFycmF5IG1pdCBkZW4gQXJndW1lbnRlbiA8YXJnLi4uPiBhdWZnZXJ1ZmVuLgorICAgICAgICBEaWUgZWluemVsbmVuIFJlc3VsdGF0ZSB3ZXJkZW4gaW4gZWluZW0gQXJyYXkgenVzYW1tZW4gZ2VmYXNzdCB1bmQKKyAgICAgICAgZGllc2VzIEFycmF5IGRhbm4gYWxzIEVuZHJlc3VsdGF0IHZvbiBjYWxsX290aGVyKCkgenVydWVjayBnZWdlYmVuLgorICAgICAgICBEaWUgRWxlbWVudGUgdm9uICo8b2I+IGtvZW5uZW4gT2JqZWt0ZSBvZGVyIE5hbWVuIHZvbiBPYmpla3RlbiBzZWluLgorICAgICAgICBaZXJzdG9lcnRlIE9iamVrdGUgdW5kIDAgYWxzIEVsZW1lbnQgZ2ViZW4gZWluZSAwIHp1cnVlY2ssIGZ1ZWhyZW4KKyAgICAgICAgYWJlciBuaWNodCB6dSBlaW5lbSBGZWhsZXIuCisgICAgICAgIGNhbGxfb3RoZXIoKSBhdWYgQXJyYXlzIHZvbiBPYmpla3RlbiBpc3QgaW0gTUcgYWt0aXZpZXJ0LCB3ZWxjaGVzCisgICAgICAgIGR1cmNoIGRhcyBEZWZpbmUgX19MUENfQVJSQVlfQ0FMTFNfXyBhbmdlemVpZ3Qgd2lyZC4KKworICAgICAgICBEYXMgT2JqZWt0IChiencuIGRpZSBPYmpla3RlKSBrYW5uIGRpcmVrdCBvZGVyIHVlYmVyIGVpbmVuIFN0cmluZworICAgICAgICAoZC5oLiBkZW4gT2JqZWt0bmFtZW4pIGFuZ2VnZWJlbiB3ZXJkZW4uIFdlbm4gZWluIFN0cmluZyBhbmdlZ2ViZW4KKyAgICAgICAgd2lyZCB1bmQgZGFzIE9iamVrdCBub2NoIG5pY2h0IGV4aXN0aWVydCwgd2lyZCBlcyBnZWxhZGVuLgorCisgICAgICAgIG9iLT5mdW4oYXJncykgdW5kICJvYl9uYW1lIi0+ZnVuKGFyZ3MpIHNpbmQgYWVxdWl2YWxlbnQgenUKKyAgICAgICAgY2FsbF9vdGhlcihvYiwgImZ1biIsIGFyZ3MpLiBIZXV0enV0YWdlIGthbm4gIm9iX25hbWUiIGF1Y2ggZWluZQorICAgICAgICBWYXJpYWJsZSBzZWluLiBvYi0+KGZ1bikoYXJncykgaXN0IGFlcXVpdmFsZW50IHp1CisgICAgICAgIGNhbGxfb3RoZXIob2IsIGZ1biwgYXJncyksIHdvYmVpIDxmdW4+IGVpbiBSdW50aW1lIEF1c2RydWNrIGlzdCwKKyAgICAgICAgZGVyIGRlbiBGdW5rdGlvbnNuYW1lbiBsaWVmZXJ0LgorCisgICAgICAgIFdlbm4gZGFzIE9iamVrdCA8b2I+IGtlaW5lIG9lZmZlbnRsaWNoZSBGdW5rdGlvbiBtaXQgZGVtIE5hbWVuIDxmdW4+CisgICAgICAgIGVudGhhZWx0LCBnaWJ0IGNhbGxfb3RoZXIoKSBkZW4gV2VydCAwIHp1cnVlY2suIERpZXMgaXN0IG5pY2h0CisgICAgICAgIHVudGVyc2NoZWlkYmFyIHZvbiBlaW5lciBGdW5rdGlvbiA8ZnVuPiwgZGllIDAgenVydWVjayBsaWVmZXJ0LgorICAgICAgICBPZWZmZW50bGljaCBiZWRldXRldCAicHVibGljIiwgd2VubiBhbmRlcmUgT2JqZWt0ZSBhdWZnZXJ1ZmVuCisgICAgICAgIHdlcmRlbiB1bmQgInB1YmxpYyIgb2RlciAic3RhdGljIiwgd2VubiBkZXIgQXVmcnVmIGFuIHRoaXNfb2JqZWN0KCkKKyAgICAgICAgZXJnZWh0LiBGdW5rdGlvbmVuLCBkaWUgInByaXZhdGUiIG9kZXIgInByb3RlY3RlZCIgZGVmaW5pZXJ0IHNpbmQsCisgICAgICAgIGtvZW5uZW4gbmllbWFscyB2b24gY2FsbF9vdGhlcigpIGF1ZmdlcnVmZW4gd2VyZGVuLgorCisgICAgICAgIERlciBSdWVja2dhYmV3ZXJ0IHZvbiBjYWxsX290aGVyKCkgaXN0IHN0YW5kYXJkbWFlc3NpZyAnYW55Jy4gRmFsbHMKKyAgICAgICAgYWJlciAjcHJhZ21hIHN0cmljdF90eXBlcyBnZXNldHp0IGlzdCwgaXN0IGRlciBSdWVja2dhYmV3ZXJ0CisgICAgICAgICd1bmtub3duJywgdW5kIGRhcyBSZXN1bHRhdCBkZXMgY2FsbF9vdGhlcigpIG11c3MgenVlcnN0IGF1ZiBlaW5lbgorICAgICAgICB6dXRyZWZmZW5kZW4gVmFyaWFibGVudHlwIGdlY2FzdGV0IHdlcmRlbiwgYmV2b3IgbWFuIGVzIGZ1ZXIgZXR3YXMKKyAgICAgICAgdmVyd2VuZGVuIGthbm4uCisKK0JFSVNQSUVMRQorICAgICAgICBEaWUgbmFjaGZvbGdlbmRlbiBCZWlzcGllbGUgcnVmZW4gYWxsZSBkaWUgRnVua3Rpb24gIlF1ZXJ5UHJvcCIgYXVmCisgICAgICAgIG1pdCBkZW0gQXJndW1lbnQgUF9TSE9SVC4KKworICAgICAgICAgICAgc3RyaW5nIHN0ciwgZnVuOworICAgICAgICAgICAgc3RyID0gKHN0cmluZyljYWxsX290aGVyKHRoaXNfcGxheWVyKCksICJRdWVyeVByb3AiLCBQX1NIT1JUKTsKKyAgICAgICAgICAgIGZ1biA9ICJRdWVyeVByb3AiOworICAgICAgICAgICAgc3RyID0gKHN0cmluZyljYWxsX290aGVyKHRoaXNfcGxheWVyKCksIGZ1biwgUF9TSE9SVCk7CisKKyAgICAgICAgICAgIHN0ciA9IChzdHJpbmcpdGhpc19wbGF5ZXIoKS0+UXVlcnlQcm9wKFBfU0hPUlQpOworICAgICAgICAgICAgc3RyID0gKHN0cmluZyl0aGlzX3BsYXllcigpLT4iUXVlcnlQcm9wIihQX1NIT1JUKTsKKyAgICAgICAgICAgIGZ1biA9ICJRdWVyeVByb3AiOworICAgICAgICAgICAgc3RyID0gKHN0cmluZyl0aGlzX3BsYXllcigpLT4oZnVuKShQX1NIT1JUKTsKKworICAgICAgICBTb2xhbmdlICNwcmFnbWEgc3RyaWN0X3R5cGVzIGdlc2V0enQgaXN0LCBtdXNzIG1hbiBkYXMgUmVzdWx0YXQgdm9uCisgICAgICAgIGNhbGxfb3RoZXIoKSBleHBsaXppdCBhdWYgZWluZW4gcGFzc2VuZGVuIFR5cCBjYXN0ZW4sIHdlaWwKKyAgICAgICAgY2FsbF9vdGhlcigpIHVua25vd24gbGllZmVydC4KKworICAgICAgICBEYXMgZm9sZ2VuZGUgU3RhdGVtZW50IHJ1ZnQgZGllIGxmdW4gc2hvcnQoKSBpbiBhbGxlbiBha3RpdmVuCisgICAgICAgIEJlbnV0emVybiBhdWYgdW5kIHNwZWljaGVydCBkYXMgZ2VzYW1tZWx0ZSBSZXN1bHRhdCBpbiBlaW5lcgorICAgICAgICBWYXJpYWJsZW46CisKKyAgICAgICAgICAgIHN0cmluZyAqIHM7CisgICAgICAgICAgICBzID0gKHN0cmluZyAqKXVzZXJzKCktPnNob3J0KCk7CisKKyAgICAgICAgT2JqZWt0ZSBsYWRlbiAob2Jzb2xldCk6CisgICAgICAgICAgICBDb21wYXQ6IGNhbGxfb3RoZXIoIi91c2Vycy9sdXNlci90aGluZyIsICI/Pz8iLCAwKTsKKworICAgICAgICBEYXMgc2llaHQgZXR3YXMgbWVya3d1ZXJkaWcgYXVzLCB3dXJkZSBhYmVyIG9mdCB2ZXJ3ZW5kZXQsIHVtIGVpbmZhY2gKKyAgICAgICAgZWluIE9iamVrdCB6dSBsYWRlbi4gRGF6dSB3dXJkZSBkaWUgKG5pY2h0IGV4aXN0aWVyZW5kZSkgRnVua3Rpb24KKyAgICAgICAgIj8/PyIgaW0gT2JqZWt0IGF1ZmdlcnVmZW4uIEdsdWVja2xpY2hlcndlaXNlIGdpYnQgZXMgaGV1dGUgenUKKyAgICAgICAgZGllc2VtIFp3ZWNrIGRpZSBFZnVuIGxvYWRfb2JqZWN0KCksIGFsc28gYml0dGUgbmljaHQgbWVociB2ZXJ3ZW5kZW4uCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEluIExETXVkIDMuMi44IHd1cmRlbiBkaWUgZm9sZ2VuZGVuIFZlcmJlc3NlcnVuZ2VuIGVpbmdlZnVlaHJ0OgorICAgICAgICAgIC0gZGllIEZvcm1lbiB4LT4ieSIoKSB1bmQgeC0+KHkpKCkgd2VyZGVuIGVya2FubnQ7CisgICAgICAgICAgLSBkaWUgRm9ybSB4LT55KCkga29sbGlkaWVydCBuaWNodCBtZWhyIG1pdCBlaW5lciBsb2thbGVuIFZhcmlhYmxlbiwKKyAgICAgICAgICAgIGRpZSBhdWNoICJ5IiBoZWlzc3QuCisgICAgICAgICAgLSBlaW5lIHNpbXVsX2VmdW4gY2FsbF9vdGhlcigpIGVyd2lzY2h0IGF1Y2ggQXVmcnVmZSBkZXIgRm9ybSAtPigpLgorICAgICAgICAgIC0gY2FsbF9vdGhlciBrYW5uIGF1Y2ggYXVmIEFycmF5cyB2b24gT2JqZWt0ZW4gYW5nZXdhbmR0IHdlcmRlbi4KKyAgICAgICAgTERNdWQgMy4yLjEwIG1hY2h0ZSBkZW4gQXVmcnVmIHZvbiBPYmpla3RhcnJheXMga29uZmlndXJpZXJiYXIuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgZnVuY3Rpb25fZXhpc3RzKEUpLCBjYWxsX3Jlc29sdmVkKEUpLCBjcmVhdGUoQSksIHByYWdtYShMUEMpLAorICAgICAgICBleHRlcm5fY2FsbChFKSwgZnVuY3Rpb25zKExQQykKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2NhbGxfb3V0IGIvZG9jL2VmdW4vY2FsbF9vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhMjhiMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2NhbGxfb3V0CkBAIC0wLDAgKzEsNTQgQEAKK1NZTk9QU0lTCisgICAgICAgIHZvaWQgY2FsbF9vdXQoc3RyaW5nIGZ1biwgaW50IGRlbGF5LCBtaXhlZCBhcmcsIC4uLikKKyAgICAgICAgdm9pZCBjYWxsX291dChjbG9zdXJlIGNsLCBpbnQgZGVsYXksIG1peGVkIGFyZywgLi4uKQorCitERVNDUklQVElPTgorICAgICAgICBTZXQgdXAgYSBjYWxsIHRvIGZ1bmN0aW9uIGZ1biBpbiB0aGUgY3VycmVudCBvYmplY3QsIG9yIHRvCisgICAgICAgIGNsb3N1cmUgY2wuIFRoZSBjYWxsIHdpbGwgdGFrZSBwbGFjZSBpbiBkZWxheSBzZWNvbmRzLCB3aXRoIHRoZQorICAgICAgICByZW1haW5pbmcgYXJndW1lbnQgbGlzdCBwcm92aWRlZC4gZGVsYXkgY2FuIGJlIDAsIGJ1dCBiZSBjYXJlZnVsIQorCisgICAgICAgIGNhbGxfb3V0KCkgc2F2ZXMgYW5kIHJlc3RvcmVzIHRoZSBjdXJyZW50IHVzZXIuIEl0IGlzIG5vdworICAgICAgICBwb3NzaWJsZSB0byB1c2Ugc2F5KCkgb3Igd3JpdGUoKSB3aGljaCByZWx5IG9uIGEgY3VycmVudAorICAgICAgICB1c2VyIHRvIGJlIHNvbWV0aGluZyB1c2VmdWwuCisKKyAgICAgICAgY2FsbF9vdXQoKSBjYW4gb25seSBjYWxsIGZ1bmN0aW9ucyB3aGljaCBhcmUgcHVibGljbHkgYWNjZXNzaWJsZSwKKyAgICAgICAgaS5lLiAicHVibGljIiBhbmQgInN0YXRpYyIgZnVuY3Rpb25zLiAicHJpdmF0ZSIgYW5kICJwcm90ZWN0ZWQiCisgICAgICAgIGZ1bmN0aW9ucyBjYW4ndCBiZSBjYWxsZWQuCisKKyAgICAgICAgVGhlIGV4ZWN1dGlvbiBvZiB0aGUgY2FsbF9vdXQoKXMgaW1wbGllcyBhIHNpbXBsZSAobm90CisgICAgICAgIGV4aGF1c3RpdmUpIG1lYXN1cmUgYWdhaW5zdCByYWJiaXRzOiB0aGUgZXZhbHVhdGlvbiBjb3N0cyBvZgorICAgICAgICB0aG9zZSBjYWxsX291dHMoKSBleGVjdXRpbmcgYXQgdGhlIHNhbWUgdGltZSBhcmUgc3VtbWVkIHVwIG9uCisgICAgICAgIGEgcGVyLVVJRCBiYXNlLiBJZiB0aGUgc3VtbWVkLXVwIGNvc3RzIGV4Y2VlZCB0aGUgZ2l2ZW4gbWF4aW11bSwKKyAgICAgICAgYSAndG9vIGxvbmcgZXZhbHVhdGlvbicgZXJyb3Igd2lsbCBvY2N1ciBhbmQgYW55IHJlbWFpbmluZworICAgICAgICBjYWxsX291dHMoKSBvZiB0aGlzIHVzZXIgc2NoZWR1bGVkIGZvciB0aGUgc2FtZSB0aW1lIGFyZQorICAgICAgICBkaXNjYXJkZWQuCisKKyAgICAgICAgQ2FsbG91dHMgYXJlIGV4ZWN1dGVkIGV2ZXJ5IDJzLCB0aGVyZWZvcmUgeW91ciBkZWxheSBtYXkgYmUgYmlnZ2VyCisgICAgICAgIHRoYW4gdGhlIHlvdSBzcGVjaWZpZWQuIEluIGZhY3QsIGEgQ2FsbG91dCB3aXRoIGRlbGF5PT0wIGlzCisgICAgICAgIGV4ZWN1dGVkIHdpdGhpbiAycyBmcm9tIHRoZSBmdW5jdGlvbiBjYWxsIHRvIGNhbGxfb3V0KCkuIAorCitXQVJOSU5HCisgICAgICAgIFBsZWFzZSBuZXZlciB1c2UgY2FsbF9vdXQoLi4uLDApIGluIHJlY3Vyc2l2ZSBDYWxsb3V0cyBhbmQgYmUgYXQgbGVhc3QKKyAgICAgICAgdmVyeSBjYXJlZnVsIGluIG90aGVyIGNhc2VzLiBUaGF0IENhbGxvdXQgd291bGQgYmUgZXhlY3V0ZWQgZGlyZWN0bHkKKyAgICAgICAgYWZ0ZXIgeW91ciBjdXJyZW50IGZ1bmN0aW9uIGFuZCB5b3UgcmVhbGx5IGdldCAwIGRlbGF5LgorCitFWEFNUExFCisgICAgICAgIGNhbGxfb3V0KCJSZWZyZXNoTWUiLCAxMCk7CisKKyAgICAgICAgVGhpcyB3aWxsIGNhbGwgdGhlIGZ1bmN0aW9uIFJlZnJlc2hNZSgpIGluIDEwIHNlY29uZHMgd2l0aG91dAorICAgICAgICBhbnkgYXJndW1lbnRzLiBUaGUgZnVuY3Rpb24gUmVmcmVzaE1lKCkgY2FuIHRoZW4gY2FsbCBvdXQKKyAgICAgICAgaXRzZWxmIGFnYWluIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgbG9vcCAobm90IGluIGEgcmVjdXJzaW9uKQorICAgICAgICB3aGljaCBjYW4gYmUgdXNlZCB0byBjaGVjayBvciBzZXQgdXAgdGhpbmdzIGluIHRoZSBvYmplY3QgaW4KKyAgICAgICAgaW50ZXJ2YWxzLiBCZSBhd2FyZSB0aGF0IGNhbGxvdXRzIGFyZSBzdG9yZWQgaW4gYSBsaW5lYXIKKyAgICAgICAgbGlzdCwgYW5kIHNvIGFyZSBzb21ld2hhdCBleHBlbnNpdmUgZm9yIHRoZSBkcml2ZXIuCisKKyAgICAgICAgQW5kIFlFUzogc2VsZi1yZXBsaWNhdGluZyBjYWxsX291dCgpcywgd2hlcmUgZWFjaCBjYWxsX291dCgpCisgICAgICAgIGNyZWF0ZXMgdHdvIG9yIG1vcmUgb3RoZXIgY2FsbF9vdXQoKXMgaW4gYSBsb29wIChzbyBjYWxsZWQKKyAgICAgICAgJ3JhYmJpdHMnKSBzbG93IHRoZSBtdWQgZG93biB2ZXJ5IGZhc3QsIGFuZCBhcmUgZXZlbiBhYmxlCisgICAgICAgIHRvIGNyYXNoIGl0LiBObyBuZWVkIHRvIHRyeSBpdCB5b3Vyc2VsZi4KKworU0VFIEFMU08KKyAgICAgICAgcmVtb3ZlX2NhbGxfb3V0KEUpLCBjYWxsX291dF9pbmZvKEUpLCBmaW5kX2NhbGxfb3V0KEUpLAorICAgICAgICB0aGlzX3BsYXllcihFKSwgcmVzZXQoQSksIGhlYXJ0X2JlYXQoQSkKKworMDUuMTEuMDYgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vY2FsbF9vdXRfaW5mbyBiL2RvYy9lZnVuL2NhbGxfb3V0X2luZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkNWZmNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2NhbGxfb3V0X2luZm8KQEAgLTAsMCArMSwxOSBAQAorU1lOT1BTSVMKKyAgICAgICAgbWl4ZWQgKmNhbGxfb3V0X2luZm8oKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgSW5mb3JtYXRpb25lbiB1ZWJlciBhbGxlIGFuaGFlbmdpZ2VuIGNhbGxfb3V0KClzLiBEYXMgUmVzdWx0YXQKKyAgICAgICAgaXN0IGVpbiBBcnJheSwgYmVpIGRlbSBqZWRlcyBFbGVtZW50IHdpZWRlcnVtIGF1cyBlaW5lbSBBcnJheSBiZXN0ZWh0LAorICAgICAgICBkYXMgZWluZW4gY2FsbF9vdXQoKSBiZXNjaHJlaWJ0LiBKZWRlcyBkaWVzZXIgVW50ZXItQXJyYXlzIGVudGhhZWx0IDMKKyAgICAgICAgb2RlciBtZWhyIEVsZW1lbnRlOgorCisgICAgICAgIDEuIERhcyBPYmpla3QsIGluIGRlbSBkaWUgRnVua3Rpb24gb2RlciBkaWUgQ2xvc3VyZSBhdWZnZXJ1ZmVuIHdpcmQuCisgICAgICAgIDIuIERpZSBGdW5rdGlvbiBvZGVyIENsb3N1cmUuCisgICAgICAgIDMuIERlciB2ZXJibGVpYmVuZGUgRGVsYXkgYmlzIHp1bSBBdWZydWYuCisgICAgICAgIDRmZi4gRGllIChvcHRpb25hbGVuKSBBcmd1bWVudGUuCisKKyAgICAgICAgY2FsbF9vdXQoKXMgZnVlciB6ZXJzdG9lcnRlIE9iamVrdGUgd2VyZGVuIG5pY2h0IGluIGRlciBMaXN0ZQorICAgICAgICBhdWZnZWZ1ZWhydC4KKworU0lFSEUgQVVDSAorICAgICAgICBjYWxsX291dChFKSwgcmVtb3ZlX2NhbGxfb3V0KEUpLCBmaW5kX2NhbGxfb3V0KEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9jYWxsX3Jlc29sdmVkIGIvZG9jL2VmdW4vY2FsbF9yZXNvbHZlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTAzNzY2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vY2FsbF9yZXNvbHZlZApAQCAtMCwwICsxLDE4IEBACitTWU5PUFNJUworICAgICAgICBpbnQgY2FsbF9yZXNvbHZlZChtaXhlZCByZXN1bHQsIG9iamVjdCBvYiwgc3RyaW5nIGZ1bmMsIG1peGVkIGFyZywuLi4pOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgRGllIEZ1bmt0aW9uIGlzdCBhZWhubGljaCB6dSBjYWxsX290aGVyKCkuIFdlbm4gb2JqLT5mdW5jKCkgZGVmaW5pZXJ0CisgICAgICAgIHVuZCBvZWZmZW50bGljaCBpc3QsIHdlcmRlbiBhbGxlIEFyZ3VtZW50ZSA8YXJnPiBhbiBvYmotPmZ1bmMoKQorICAgICAgICB1ZWJlcmdlYmVuLiBEYXMgUmVzdWx0YXQgZGllc2VzIEZ1bmt0aW9uc2F1ZnJ1ZmVzIHdpcmQgaW4gPHJlc3VsdD4KKyAgICAgICAgZ2VzcGVpY2hlcnQgdW5kIG11c3MgZGVzaGFsYiBhbHMgUmVmZXJlbnogdWViZXJnZWJlbiB3ZXJkZW4uCisKKyAgICAgICAgV2VubiA8b2I+IHplcnN0b2VydCB3dXJkZSBvZGVyIGtlaW5lIG9lZmZlbnRsaWNoIHp1Z2FlbmdsaWNoZSBGdW5rdGlvbgorICAgICAgICA8ZnVuYz4gZGVmaW5pZXJ0LCBsaWVmZXJ0IGNhbGxfcmVzb2x2ZWQoKSAwIGZ1ZXIgRmVobGVyLCAxIGJlaSBFcmZvbGcuCisKKyAgICAgICAgPG9iPiBrYW5uIGF1Y2ggZWluIG9iamVjdF9uYW1lKCkgc2Vpbi4gV2VubiA8b2I+IGVpbiBTdHJpbmcgaXN0IHVuZAorICAgICAgICBkYXMgT2JqZWt0IG1pdCBkaWVzZW0gTmFtZW4gbmljaHQgZ2VmdW5kZW4gb2RlciBnZWxhZGVuIHdlcmRlbiBrYW5uLAorICAgICAgICB0cml0dCBlaW4gRmVobGVyIGF1Zi4KKworU0lFSEUgQVVDSAorICAgICAgICBjYWxsX290aGVyKEUpLCBmdW5jdGlvbl9leGlzdHMoRSksIGZpbmRfb2JqZWN0KEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9jYWxsZXJfc3RhY2sgYi9kb2MvZWZ1bi9jYWxsZXJfc3RhY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiNTc3NwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2NhbGxlcl9zdGFjawpAQCAtMCwwICsxLDMzIEBACitTWU5PUFNJUworICAgICAgICAqb2JqZWN0IGNhbGxlcl9zdGFjaygpOworICAgICAgICAqb2JqZWN0IGNhbGxlcl9zdGFjayhpbnQgYWRkX2ludGVyYWN0aXZlKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZWluIEFycmF5IGRlciBwcmV2aW91c19vYmplY3QoKSwgZGllIGVpbmVuIGNhbGxfb3RoZXIoKSBhdWYKKyAgICAgICAgdGhpc19vYmplY3QoKSB2ZXJ1cnNhY2h0IGhhYmVuLiBEYWJlaSBlbnRzcHJpY2h0IHByZXZpb3VzX29iamVjdChpKQorICAgICAgICBjYWxsZXJfc3RhY2soKVtpXS4KKworICAgICAgICBXZW5uIGRpZSBGdW5rdGlvbiBtaXQgPGFkZF9pbnRlcmFjdGl2ZT4gKGFscyB3YWhyKSBhdWZnZXJ1ZmVuIHdpcmQsCisgICAgICAgIHdpcmQgdGhpc19pbnRlcmFjdGl2ZSgpIGRlbSBBcnJheSBoaW56dWdlZnVlZ3QsIG9kZXIgMCwgd2VubiBrZWluCisgICAgICAgIHRoaXNfaW50ZXJhY3RpdmUoKSBleGlzdGllcnQuCisKK0JFSVNQSUVMCisgICAgICAgIERhcyBpbnRlcmFrdGl2ZSBPYmpla3QgQSBnaWJ0IGVpbiBLb21tYW5kbyBlaW4sIGRhcyBpbSBPYmpla3QgQiBlaW5lCisgICAgICAgIEZ1bmt0aW9uIGF1ZnJ1ZnQsIGRpZSBhdWYgZGFzIE9iamVrdCBDIHZlcndlaXN0LCB3ZWxjaGVzIHdpZWRlcnVtCisgICAgICAgIGVpbmUgRnVua3Rpb24gaW0gT2JqZWt0IEQgYXVmcnVmdC4KKworICAgICAgICBXZW5uIEQgbnVuIGNhbGxlcl9zdGFjaygpIGF1ZnJ1ZnQsIGVyZ2lidCBkaWVzOiAoe0MsQn0pLgorICAgICAgICBGdWVyIGNhbGxlcl9zdGFjaygxKSBlcmdpYnQgZGllIEZ1bmt0aW9uOiAoe0MsQixBfSkuCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi42LCB2b3JnZXNjaGxhZ2VuIHZvbiBUdWJNdWQuCisKK0FOTUVSS1VORworICAgICAgICBBdWZydWZlIHZvbiAiYWxpZW4gbGZ1biBjbG9zdXJlcyIgKHZlcmdsZWljaGUgc3ltYm9sX2Z1bmN0aW9uKCkpCisgICAgICAgIGVyemV1Z2VuIHp3ZWkgRWludHJhZWdlIGltIFN0YWNrLCB3ZW5uIGRhcyBnZWJ1bmRlbmUgT2JqZWt0IHNpY2ggdm9tCisgICAgICAgIE9iamVrdCBkZXIgQ2xvc3VyZSB1bnRlcnNjaGVpZGV0OiBkZXIgZXJzdGUgRWludHJhZyBzdGVodCBmdWVyIGRhcworICAgICAgICBnZWJ1bmRlbmUgT2JqZWt0LCBkZXIgendlaXRlIGZ1ZXIgZGFzIENsb3N1cmUtT2JqZWt0LgorCitTSUVIRSBBVUNICisgICAgICAgIGNhbGxlcl9zdGFja19kZXB0aChFKSwgcHJldmlvdXNfb2JqZWN0KEUpLCB0aGlzX2ludGVyYWN0aXZlKEUpLAorICAgICAgICBjYWxsX290aGVyKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9jYWxsZXJfc3RhY2tfZGVwdGggYi9kb2MvZWZ1bi9jYWxsZXJfc3RhY2tfZGVwdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwODI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2NhbGxlcl9zdGFja19kZXB0aApAQCAtMCwwICsxLDkgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCBjYWxsZXJfc3RhY2tfZGVwdGgodm9pZCkKKworREVTQ1JJUFRJT04KKyAgICAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHByZXZpb3VzIG9iamVjdHMgb24gdGhlIHN0YWNrLiBUaGlzCisgICAgICAgIGNhbiBiZSB1c2VkIGZvciBzZWN1cml0eSBjaGVja3MuCisKK1NFRSBBTFNPCisgICAgICAgIGNhbGxlcl9zdGFjayhFKSwgcHJldmlvdXNfb2JqZWN0KEUpLCBjYWxsX290aGVyKEUpLCBjYWxsX3Jlc29sdmVkKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9jYXBpdGFsaXplIGIvZG9jL2VmdW4vY2FwaXRhbGl6ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmI4MmI3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vY2FwaXRhbGl6ZQpAQCAtMCwwICsxLDEyIEBACitTWU5PUFNJUworICAgICAgICBzdHJpbmcgY2FwaXRhbGl6ZShzdHJpbmcgc3RyKQorCitERVNDUklQVElPTgorICAgICAgICBDb252ZXJ0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gc3RyIHRvIHVwcGVyIGNhc2UsIGFuZCByZXR1cm4KKyAgICAgICAgdGhlIG5ldyBzdHJpbmcuCisKK0VYQU1QTEVTCisgICAgICAgIGNhcGl0YWxpemUoImhleWEhIikgLT4gIkhleWEhIgorCitTRUUgQUxTTworICAgICAgICBsb3dlcl9jYXNlKEUpLCB1cHBlcl9jYXNlKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9jYXQgYi9kb2MvZWZ1bi9jYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY1ZmU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2NhdApAQCAtMCwwICsxLDI5IEBACitTWU5PUFNJUworICAgICAgICBpbnQgY2F0KHN0cmluZyBwYXRoLCBpbnQgc3RhcnQsIGludCBudW0pCisKK0RFU0NSSVBUSU9OCisgICAgICAgIExpc3QgdGhlIGZpbGUgZm91bmQgYXQgcGF0aC4KKworICAgICAgICBJbiBtb3N0IGluc3RhbGxhdGlvbnMgaXQgaXMgbm90IGxlZ2FsIHRvIGhhdmUgJy4uJyBvciBzcGFjZXMKKyAgICAgICAgaW4gdGhlIHBhdGguIFRoaXMgY29tbWFuZHMgaXMgbm9ybWFsbHkgY29ubmVjdGVkIHRvIHRoZSAiY2F0IgorICAgICAgICBjb21tYW5kIHRoYXQgd2l6YXJkcyBoYXZlLiBJdCBpcyBhbHNvIHVzZWQgYnkgdGhlICJoZWxwIgorICAgICAgICBjb21tYW5kLiBUaGUgb3B0aW9uYWwgYXJndW1lbnRzIHN0YXJ0IGFuZCBudW0gYXJlIHN0YXJ0IGxpbmUKKyAgICAgICAgbnVtYmVyIGFuZCBudW1iZXIgb2YgbGluZXMuIElmIHRoZXkgYXJlIG5vdCBnaXZlbiB0aGUgd2hvbGUKKyAgICAgICAgZmlsZSBpcyBwcmludGVkIGZyb20gdGhlIGJlZ2lubmluZy4KKworICAgICAgICBUaGUgdG90YWwgbnVtYmVyIG9mIGxpbmVzIHdpbGwgbm90IGV4Y2VlZCBhIHN5c3RlbSBsaW1pdCwgd2hpY2gKKyAgICAgICAgbm9ybWFsbHkgaXMgNTAgbGluZXMuCisKKyAgICAgICAgY2F0KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGxpbmVzIHJlYWQgYW5kIHByaW50ZWQgaWYgc3VjY2VzcywKKyAgICAgICAgMCBpZiBubyBzdWNoIGZpbGUgb3Igbm8gbGluZXMgdG8gcmVhZCAoaWYgc3RhcnQgb3IgbGVuIGlzIDwgMCwKKyAgICAgICAgb3IgaWYgdGhlIGZpbGUgaGFzIGxlc3MgdGhhbiBzdGFydCBsaW5lcykuCisKK0VYQU1QTEUKKyAgICAgICAgY2F0KCIvZG9jL2VmdW4vY2F0IiwgNSwgOSk7CisKKyAgICAgICAgVGhpcyB3aWxsIHByaW50IG91dCB0aGUgZmlsZSAiL2RvYy9lZnVuL2NhdCIgYmVnaW5pbmcgYXQgbGluZQorICAgICAgICA1IGFuZCBlbmRpbmcgd2l0aCBsaW5lIDEzLgorCitTRUUgQUxTTworICAgICAgICBnZXRfZGlyKEUpLCBmaWxlX3NpemUoRSksIHJlYWRfZmlsZShFKSwgcmVhZF9ieXRlcyhFKSwKKyAgICAgICAgdmFsaWRfcmVhZChNKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vY2F0Y2ggYi9kb2MvZWZ1bi9jYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDM2YjdkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vY2F0Y2gKQEAgLTAsMCArMSw2NCBAQAorU1lOT1BTSVMKKyAgICAgICAgbWl4ZWQgY2F0Y2goZXhwciwgZXhwciwgLi4uKTsKKyAgICAgICAgbWl4ZWQgY2F0Y2goZXhwciwgZXhwciwgLi4uOyBtb2RpZmllcnMpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgV2VydGV0IGRpZSBBdXNkcnVlY2tlIDxleHByPiBhdXMuIFdlbm4ga2VpbiBGZWhsZXIgYXVmdHJpdHQsIHdpcmQgMAorICAgICAgICB6dXJ1ZWNrIGdlbGllZmVydC4gV2VubiBlaW4gRmVobGVyIGF1ZnRyaXR0LCB3aXJkIGRpZSBBdXNmdWVocnVuZyBhbgorICAgICAgICBkaWVzZW0gUHVua3QgYWJnZWJyb2NoZW4gdW5kIGVpbiBTdHJpbmcgbWl0IGRlciBGZWhsZXJtZWxkdW5nIHdpcmQKKyAgICAgICAgenVydWVjayBnZWdlYmVuLgorCisgICAgICAgIFN5c3RlbWVpZ2VuZSBGZWhsZXJtZWxkdW5nZW4gYmVnaW5uZW4gbWl0IGVpbmVtICIqIiwgYmVudXR6ZXJkZWZpbmllcnRlCisgICAgICAgIEZlaGxlcm1lbGR1bmdlbiBhdXMgdGhyb3coKSB1bmQgcmFpc2VfZXJyb3IoKSAoc29mZXJuIHZvbiAwCisgICAgICAgIHZlcnNjaGllZGVuKSwgd2VyZGVuIHVudmVyYWVuZGVydCB6dXJ1ZWNrIGdlbGllZmVydC4KKworICAgICAgICBXZW5uIHp1bSBaZWl0cHVua3QsIHp1IGRlbSBjYXRjaCgpIGF1ZmdlcnVmZW4gd2lyZCwgd2VuaWdlciBhbHMKKyAgICAgICAgX19DQVRDSF9FVkFMX0NPU1RfXyBSZWNoZW50aWNrcyB1ZWJyaWcgc2luZCwgd2lyZCBlaW4gTGF1ZnplaXRmZWhsZXIKKyAgICAgICAgUlRFIGlubmVyaGFsYiB2b24gY2F0Y2goKSBlcnpldWd0ICh1bmQgc29taXQgd2llIGplZGVyIGFuZGVyZQorICAgICAgICBGZWhsZXIgYWJnZWZhbmdlbikgdW5kIGVzIHdlcmRlbiBrZWluZSBBdXNkcnVlY2tlIDxleHByPiBhdXMgY2F0Y2goKQorICAgICAgICBhdXNnZXdlcnRldC4gRGVyIE1vZGlmaWthdG9yICdyZXNlcnZlJyBrYW5uIHZlcndlbmRldCB3ZXJkZW4sCisgICAgICAgIGVpbmVuIGFuZGVyZW4gV2VydCBmdWVyIGRpZSBSZXNlcnZlIGFuenVnZWJlbi4KKworICAgICAgICBEYXMgVmVyaGFsdGVuIHZvbiBjYXRjaCgpIGthbm4gZHVyY2ggPG1vZGlmaWVycz4gdmVyYWVuZGVydCB3ZXJkZW46CisKKyAgICAgICAgICAgICdub2xvZyc6ICAgIE5vcm1hbGVyd2Vpc2Ugd2lyZCBkZXIgRmVobGVyIGltIEZlaGxlcmxvZworICAgICAgICAgICAgICAgICAgICAgICAgZ2VzcGVpY2hlcnQsIHVtIGRpZSBGZWhsZXJzdWNoZSB6dSBlcmxlaWNodGVybi4gV2lyZAorICAgICAgICAgICAgICAgICAgICAgICAgJ25vbG9nJyBnZXNldHp0LCB3aXJkIGRpZXNlciBMb2ctRWludHJhZyB1bnRlcmRydWVja3QuCisgICAgICAgICAgICAncHVibGlzaCc6ICBOb3JtYWxlcndlaXNlIHdpcmQgbWFzdGVyOjpydW50aW1lX2Vycm9yKCkgZnVlciBlaW5lbgorICAgICAgICAgICAgICAgICAgICAgICAgRmVobGVyIGlubmVyaGFsYiBlaW5lcyBjYXRjaCgpIG5pY2h0IGF1ZmdlcnVmZW4uIE1pdAorICAgICAgICAgICAgICAgICAgICAgICAgZGllc2VtIDxtb2RpZmllcj4gd2lyZCBydW50aW1lX2Vycm9yKCkgdHJvdHpkZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIGF1ZmdlcnVmZW4uCisgICAgICAgICAgICAncmVzZXJ2ZSA8ZXhwcj4nOiA8ZXhwcj4gbXVzcyBlaW5lIGdhbnplbiBaYWhsIGdyb2Vzc2VyIDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVyZ2ViZW4sIHdlbGNoZSBkYW5uIGFscyBSZWNoZW5yZXNlcnZlIGFuc3RlbGxlCisgICAgICAgICAgICAgICAgICAgICAgICB2b24gX19DQVRDSF9FVkFMX0NPU1RfXyB2ZXJ3ZW5kZXQgd2lyZC4gRGFzIE1pbmltdW0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzdCAyICogX19NQVNURVJfRVZBTF9DT1NUX18gLgorCisgICAgICAgIGNhdGNoKCkgYW4gc2ljaCBpc3QgbmljaHQgYmVzb25kZXJzIGxhdWZ6ZWl0LWludGVuc2l2OiBlcyBicmF1Y2h0CisgICAgICAgIG51ciBldHdhcyBtZWhyIFplaXQgYWxzIGVpbiBJbnRyYS1PYmpla3QgRnVua3Rpb25zYXVmcnVmLgorICAgICAgICAKKyAgICAgICAgdGhyb3coKSBpc3QgZWJlbmZhbGxzIG5pY2h0IHNlaHIgdGV1ZXIsIGRhIGxlZGlnbGljaCBlaW5pZ2UKKyAgICAgICAgaW50ZXJuZSBTdHJ1a3R1cmVuIGF1ZmdlcmFldW10IHdlcmRlbiBtdWVzc2VuLgorCisgICAgICAgIEVjaHRlIExhdWZ6ZWl0ZmVobGVycyAob2IgbnVuIG1pdCBvZGVyIG9obmUgY2F0Y2goKSkgYXVmCisgICAgICAgIGRlciBhbmRlcmVuIFNlaXRlIGlzdCBzZWhyIHplaXRpbnRlbnNpdi4KKworICAgICAgICBjYXRjaCBpc3QgbmljaHQgaW0gZWlnZW50bGljaGVuIFNpbm5lIGVpbmUgRWZ1biwgc29uZGVybiBlaW5lIENvbXBpbGVyCisgICAgICAgIEFud2Vpc3VuZy4KKworQkVJU1BJRUwKKyAgICAgICAgb2JqZWN0IG9iajsKKyAgICAgICAgc3RyaW5nIGVycjsKKyAgICAgICAgaWYoZXJyID0gY2F0Y2gob2JqID0gY2xvbmVfb2JqZWN0KCIvZm9vL2Jhci9iYXoiKSkpCisgICAgICAgICAgICB3cml0ZSgiS2FubiBkYXMgT2JqZWt0IG5pY2h0IGNsb25lbi4gR3J1bmQ6ICIrZXJyKyJcbiIpOworCitBRU5ERVJVTkdFTgorICAgICAgICBMRE11ZCAzLjIuOSBmdWVocnRlIGRlbiAnbm9sb2cnIGNhdGNoKCkgYWxzIGV4cGVyaW1lbnRlbGxlcyBGZWF0dXJlCisgICAgICAgICAgICBlaW4uCisgICAgICAgIExETXVkIDMuMi4xMCBpbXBsZW1lbnRpZXJ0ZSAnbm9sb2cnIGFscyBvZmZpemllbGxlIEZvcm0gdW5kIGZ1ZWhydGUKKyAgICAgICAgICAgIHp1ZGVtICdwdWJsaXNoJyBlaW4uCisgICAgICAgIExETXVkIDMuMy41NTkgdmVybGVndGUgZGVuIFRlc3QgYXVmIHZlcmJsZWliZW5kZSBSZWNoZW50aWNrcyBpbiBkaWUKKyAgICAgICAgICAgIHZvbSBjYXRjaCgpIHVtc2NobG9zc2VuZW4gQXVzZnVlaHJ1bmcuCisgICAgICAgIExETXVkIDMuMy41NjAgZnVlZ3RlIGRlbiBNb2RpZmlrYXRvciAncmVzZXJ2ZScgZWluLgorCitTSUVIRSBBVUNICisgICAgICAgIHRocm93KEUpLCByYWlzZV9lcnJvcihFKSwgcHJlZGVmaW5lZChEKSwgcnVudGltZV9lcnJvcihNKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vY2VpbCBiL2RvYy9lZnVuL2NlaWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM0NDI0NAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2NlaWwKQEAgLTAsMCArMSwxOSBAQAorU1lOT1BTSVMKKyAgICAgICAgZmxvYXQgY2VpbChpbnR8ZmxvYXQgYXJnKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIFJ1bmRldCA8YXJnPiB6dXIgbmFlY2hzdGVuIGdhbnplbiBaYWhsIGF1ZiB1bmQgbGllZmVydCBkYXMgUmVzdWx0YXQKKyAgICAgICAgenVydWVjay4gV2VubiA8YXJnPiBlaW4gSW50ZWdlciBpc3QsIHdpcmQgZGFzIFJlc3VsdGF0IGluIGZsb2F0CisgICAgICAgIGtvbnZlcnRpZXJ0LgorCitCRUlTUElFTAorICAgICAgICBjZWlsKDQuNSk7ICAgICAgZXJnaWJ0OiAgNS4wCisgICAgICAgIGNlaWwoLTQuNSk7ICAgICBlcmdpYnQ6IC00LjAKKyAgICAgICAgY2VpbCg1KTsgICAgICAgIGVyZ2lidDogIDUuMAorCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuNy4KKyAgICAgICAgTERNdWQgMy4yLjkgZnVlaHJ0ZSBuZXUgSW50ZWdlciBhbHMgbW9lZ2xpY2hlIEFyZ3VtZW50ZSBlaW4uCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgYWJzKEUpLCBmbG9vcihFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vY2xlYXJfYml0IGIvZG9jL2VmdW4vY2xlYXJfYml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZjE1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9jbGVhcl9iaXQKQEAgLTAsMCArMSwzNSBAQAorU1lOT1BTSVMKKyAgICAgICAgc3RyaW5nIGNsZWFyX2JpdChzdHJpbmcgc3RyLCBpbnQgbik7CisKK0JFU0NIUkVJQlVORworICAgICAgICBHaWJ0IGVpbmVuIG5ldWVuIFN0cmluZyB6dXJ1ZWNrLCBpbiBkZW0gZGFzIG4tdGUgQml0IGltIFN0cmluZyA8c3RyPgorICAgICAgICBuaWNodCBnZXNldHp0IGlzdC4gRGFiZWkgd2lyZCA8c3RyPiBzZWxic3QgbmljaHQgdmVyYWVuZGVydC4KKworICAgICAgICBKZWRlcyBaZWljaGVuIGVudGhhZWx0IHNlY2hzIEJpdHMuIFNvIGthbm4gaW4gamVkZW0gWmVpY2hlbiBlaW5lIFphaGwKKyAgICAgICAgendpc2NoZW4gMCB1bmQgNjMgKDJeNj02NCkgZ2VzcGVpY2hlcnQgd2VyZGVuLiBEYXMgZXJzdGUgWmVpY2hlbiBpc3QKKyAgICAgICAgZGVyIExlZXJzY2hsYWcgIiAiIG1pdCBXZXJ0IDAuIERhcyBlcnN0ZSBaZWljaGVuIGltIFN0cmluZyBpc3QgamVuZXMKKyAgICAgICAgbWl0IGRlbiBuaWVkcmlnc3RlbiBCaXRzICgwIGJpcyA1KS4KKworQkVJU1BJRUxFCisgICAgICAgIHN0cmluZyBzOworICAgICAgICBzID0gY2xlYXJfYml0KCJfIiwgNSk7CisKKyAgICAgICAgV2VpbCAiXyIgZGVuIGhvZWNoc3RlbiBtb2VnbGljaGVuIFdlcnQgZW50aGFlbHQgKDYzKSwgZW50aGFlbHQgZGllCisgICAgICAgIFZhcmlhYmxlIHMgbnVuIGRhcyBaZWljaGVuICI/IiwgZGFzIGRlbSBXZXJ0IDMxIGVudHNwcmljaHQgKDYzLTJeNT0zMSkuCisKKyAgICAgICAgc3RyaW5nIHM7CisgICAgICAgIHMgPSBjbGVhcl9iaXQoIj88IiwzKTsKKyAgICAgICAgcyA9IGNsZWFyX2JpdChzLCA4KTsKKworICAgICAgICBzIGVudGhhZWx0IG51biBkZW4gU3RyaW5nICI3OCIuICI/IiBlbnRzcHJpY2h0IGRlbSBXZXJ0IDMxIHVuZCAiPCIgZGVtCisgICAgICAgIFdlcnQgMjguICI/PCIgZW50c3ByaWNodCBhbHNvIGRlbSBXZXJ0IDMxKzI4PDw2PTMxKzE3OTI9MTgyMywgd2FzIGluCisgICAgICAgIEJpbmFlcnNjaHJlaWJ3ZWlzZSAoaG9lY2hzdGVzIEJpdCByZWNodHMpIDExMTExMDAwMTExIGVyZ2lidC4gV2VyZGVuCisgICAgICAgIGF1cyBkaWVzZXIgWmFobCBkaWUgQml0cyAzIHVuZCA4IChkaWUgTnVtbWVyaWVydW5nIGJlZ2lubnQgbWl0IGRlbQorICAgICAgICAwLiBCaXQpIGVyZ2lidCBkYW5uOiAxMTEwMTAwMDAxMS4gRGllIGVyc3RlbiA2IEJpdHMgMDEwMTExIHNpbmQgaW4KKyAgICAgICAgRGV6aW1hbHNjaHJlaWJ3ZWlzZSAyMy4gRGllIHp3ZWl0ZW4gNiBCaXRzICgwKTExMDAwIGVyZ2ViZW4gMjQgaW4KKyAgICAgICAgRGV6aW1hbHNjaHJlaWJ3ZWlzZS4gTnVuIGVudHNwcmljaHQgZGVyIFdlcnQgMjMgZGVtIFplaWNoZW4gIjciIHVuZAorICAgICAgICBkZXIgV2VydCAyNCBkZW0gWmVpY2hlbiAiOCIuIERlciBTdHJpbmcgcyBlbnRoYWVsdCBhbHNvICI3OCIuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgc2V0X2JpdChFKSwgbmV4dF9iaXQoRSksIGxhc3RfYml0KEUpLCB0ZXN0X2JpdChFKSwgY291bnRfYml0cyhFKSwKKyAgICAgICAgYW5kX2JpdHMoRSksIG9yX2JpdHMoRSksIHhvcl9iaXRzKEUpLCBpbnZlcnRfYml0cyhFKSwgY29weV9iaXRzKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9jbG9uZV9vYmplY3QgYi9kb2MvZWZ1bi9jbG9uZV9vYmplY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyMmJlZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2Nsb25lX29iamVjdApAQCAtMCwwICsxLDIzIEBACitTWU5PUFNJUzoKKyAgICAgICAgb2JqZWN0IGNsb25lX29iamVjdChzdHJpbmcgbmFtZSkKKworREVTQ1JJUFRJT046CisgICAgICAgIENsb25lIGEgbmV3IG9iamVjdCBmcm9tIGRlZmluaXRpb24gbmFtZSwgYW5kIGdpdmUgaXQgYSBuZXcgdW5pcXVlCisJbmFtZS4gUmV0dXJuIHRoZSBuZXcgb2JqZWN0LgorICAgICAgICAKKyAgICAgICAgVGhlIG9yaWdpbmFsLCBjYWxsZWQgYmx1ZSBwcmludCwgdXNlZCBmb3IgY2xvbmluZywgc2hvdWxkIG5vdCBiZQorCXVzZWQgaW4gdGhlIGdhbWUsIG9ubHkgYmUgdXNlZCBmb3IgY2xvbmluZy4gVGhlIGNsb25lZCBvYmplY3RzCisJY29udGFpbiBvbmx5IHRoZSBkYXRhIGJ1dCB0aGUgYmx1ZSBwcmludCBhbHNvIHRoZSBmdW5jdGlvbiBjb2RlLgorCVRoZSBibHVlIHByaW50IGlzIHRoZSBvbmUgd2l0aG91dCBhIHVuaXF1ZSBudW1iZXIgYXQgdGhlIGVuZCBvZgorCXRoZSBvYmplY3QncyBvYmplY3RfbmFtZSgpLiBUaGUgY2xvbmVfb2JqZWN0KCkgZnVuY3Rpb24gbmV2ZXIKKwlyZXR1cm5zIGEgYmx1ZSBwcmludC4KKyAgICAgICAgCisgICAgICAgIE5vdGUgdGhhdCB0aGUgcGF0aG5hbWUgbXVzdCBiZSBjb21wbGV0ZSwgd2hpY2ggbWVhbnMgdGhlcmUgYXJlIG5vCisgICAgICAgIHJlbGF0aXZlIHBhdGhzIGFsbG93ZWQuCisKK0VYQU1QTEU6CisgICAgICAgIG9iamVjdCB0b3JjaDsKKyAgICAgICAgdG9yY2ggPSBjbG9uZV9vYmplY3QoIi9vYmovdG9yY2giKTsKKworU0VFIEFMU086CisgICAgICAgIGRlc3RydWN0KEUpLCBtb3ZlX29iamVjdChFKSwgdWlkcyhDKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vY2xvbmVwIGIvZG9jL2VmdW4vY2xvbmVwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZmY3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9jbG9uZXAKQEAgLTAsMCArMSwyOCBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IGNsb25lcCAoKQorICAgICAgICBpbnQgY2xvbmVwIChvYmplY3Qgb2JqKQorICAgICAgICBpbnQgY2xvbmVwIChzdHJpbmcgb2JqKQorICAgICAgICBpbnQgY2xvbmVwIChtaXhlZCAgYXJnKQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCAxLCB3ZW5uIGRhcyBhbmdlZ2ViZW5lIE9iamVrdCBlaW4gS2xvbiBpc3QsIGFuc29uc3RlbiAwLgorICAgICAgICBEYXMgT2JqZWt0IGthbm4gZGFiZWkgYXVjaCBkdXJjaCBzZWluZW4gT2JqZWt0LU5hbWVuIGFuZ2VnZWJlbiB3ZXJkZW4uCisgICAgICAgIFdpcmQga2VpbiBBcmd1bWVudCB1ZWJlcmdlYmVuLCBzbyB3aXJkIHRoaXNfb2JqZWN0KCkgZ2V0ZXN0ZXQuCisgICAgICAgIExpZWZlcnQgMCwgd2VubiBkYXMgQXJndW1lbnQgdm9uIGVpbmVtIGFuZGVyZW4gVHlwLgorICAgICAgICBFaW4gT2JqZWt0LCBkZXNzZW4gUHJvZ3JhbW0gbWl0dGVscyByZXBsYWNlX3Byb2dyYW0oKSBlcnNldHp0IHd1cmRlLAorICAgICAgICB6YWVobHQgbmljaHQgYWxzIEtsb24uCisKK0JFSVNQSUVMCisgICAgICAgIG9iamVjdCBvOworICAgICAgICBvID0gY2xvbmVfb2JqZWN0KCIvb2JqL2RpbmciKTsKKyAgICAgICAgd3JpdGUoY2xvbmVwKG8pKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiBzY2hyZWlidCAiMSIKKyAgICAgICAgd3JpdGUoY2xvbmVwKCIvb2JqL2RpbmciKSkgICAgICAgICAgICAgICAgIC0tPiBzY2hyZWlidCAiMCIKKworICAgICAgICAoSW0gQ09NUEFUX01PREUgIm9iai9kaW5nIiBhbHMgRGF0ZWluYWhtZW4gYmVudXR6ZW4pCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi42LCBnZWFlbmRlcnQgaW4gMy4yLjcsIHNvIGRhc3MgT2JqZWt0ZSBtaXQKKyAgICAgICAgZXJzZXR6dGVuIFByb2dyYW1tZW4gbmljaHQgbWVociBhbHMgS2xvbmUgemFlaGxlbi4KKworU0lFSEUgQVVDSAorICAgICAgICBsb2FkX25hbWUoRSksIGNsb25lX29iamVjdChFKSwgY2xvbmVzKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9jbG9uZXMgYi9kb2MvZWZ1bi9jbG9uZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlMjBkMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2Nsb25lcwpAQCAtMCwwICsxLDM4IEBACitTWU5PUFNJUworICAgICAgICAqb2JqZWN0IGNsb25lcygpOworICAgICAgICAqb2JqZWN0IGNsb25lcyhpbnQgd2hhdCk7CisgICAgICAgICpvYmplY3QgY2xvbmVzKHN0cmluZ3xvYmplY3Qgb2JqIFssIGludCB3aGF0XSk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBEaWVzZSBFZnVuIGxpZWZlcnQgZWluIEFycmF5IG1pdCBhbGxlbiBDbG9uZXMgZWluZXMgYmVzdGltbXRlbgorICAgICAgICBCbHVlcHJpbnRzLiBEYWJlaSB1bnRlcmxpZWd0IGRhcyBBcnJheSBkZW4gbm9ybWFsZW4gU3lzdGVtbGltaXRlbi4KKworICAgICAgICBXZW5uIDxvYmo+IGFuZ2VnZWJlbiBpc3QsIHdlcmRlbiBhbGxlIENsb25lcyBkZXMgQmx1ZXByaW50cyB2b24gPG9iaj4KKyAgICAgICAgKG9kZXIgdm9uIDxvYmo+IHNlbGJzdCwgZmFsbHMgPG9iaj4gZWluIEJsdWVwcmludCBpc3QpIGF1c2dlZ2ViZW4sCisgICAgICAgIHNvbnN0IGRpZSBDbG9uZSBkZXMgYWt0dWVsbGVuIE9iamVrdHMgYnp3LiBkaWUgQ2xvbmUgZGVzIEJsdWVwcmludHMKKyAgICAgICAgZGVzIGFrdHVlbGxlbiBPYmpla3RzLiBXZW5uIDxvYmo+IGFscyBTdHJpbmcgYW5nZWdlYmVuIGlzdCwgbXVzcyBlcworICAgICAgICBkZXIgTmFtZSBlaW5lcyBleGlzdGllcmVuZGVuIE9iamVrdHMgc2Vpbi4KKworICAgICAgICA8d2hhdD4gd2FlaGx0IGF1cywgd2llIENsb25lIHZvbiBhZWx0ZXJlbiBWZXJzaW9uZW4gZGVzIEJsdWVwcmludHMKKyAgICAgICAgenUgYmVoYW5kZWxuIHNpbmQ6CisgICAgICAgICAgICA9PSAwOiBsaWVmZXJ0IG51ciBkaWUgQ2xvbmUgZGVzIGFrdHVlbGxlbiBCbHVlcHJpbnRzIChTdGFuZGFyZCkKKyAgICAgICAgICAgID09IDE6IGxpZWZlcnQgbnVyIGRpZSBDbG9uZSBkZXIgYWx0ZW4gQmx1ZXByaW50LVZlcnNpb24KKyAgICAgICAgICAgID09IDI6IGxpZWZlcnQgYWxsZSBDbG9uZXMgYWxsZXIgQmx1ZXByaW50LVZlcnNpb25lbgorCisgICAgICAgIFdlbm4gZGVyIFRyZWliZXIgbWl0IERZTkFNSUNfQ09TVFMga29tcGlsaWVydCB3dXJkZSwgc2luZCBkaWUgS29zdGVuCisgICAgICAgIGZ1ZXIgZGllc2UgRnVua3Rpb24gcHJvcG9ydGlvbmFsIHp1ciBBbnphaGwgT2JqZWt0ZSBpbSBTcGllbC4KKworQkVJU1BJRUwKKyAgICAgICAgb2JqZWN0IG8sIHA7CisgICAgICAgIG8gPSBjbG9uZV9vYmplY3QoIi9zdGQvdGhpbmciKTsgLyogb2RlciAic3RkL3RoaW5nIiBpbSBDT01QQVRfTU9ERSAqLworICAgICAgICBkZXN0cnVjdChmaW5kX29iamVjdCgiL3N0ZC90aGluZyIpKTsKKyAgICAgICAgcCA9IGNsb25lX29iamVjdCgiL3N0ZC90aGluZyIpOworCisgICAgICAgIGNsb25lcygiL3N0ZC90aGluZyIpICAgIC0tPiBlcmdpYnQgKHsgcCB9KQorICAgICAgICBjbG9uZXMoIi9zdGQvdGhpbmciLCAwKSAtLT4gZXJnaWJ0ICh7IHAgfSkKKyAgICAgICAgY2xvbmVzKCIvc3RkL3RoaW5nIiwgMSkgLS0+IGVyZ2lidCAoeyBvIH0pCisgICAgICAgIGNsb25lcygiL3N0ZC90aGluZyIsIDIpIC0tPiBlcmdpYnQgKHsgbywgcCB9KQorCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuOC4KKyAgICAgICAgTERNdWQgMy4yLjkgZnVlaHJ0ZSBkaWUgZHluYW1pc2NoZW4gS29zdGVuIGVpbi4KZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2Nsb3N1cmVwIGIvZG9jL2VmdW4vY2xvc3VyZXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhMjgyOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2Nsb3N1cmVwCkBAIC0wLDAgKzEsMTEgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCBjbG9zdXJlcChtaXhlZCBhcmcpCisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IDEsIHdlbm4gZGFzIEFyZ3VtZW50IGVpbmUgQ2xvc3VyZSBpc3QsIGFuc29uc3RlbiAwLgorCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiAzLjJANzAuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgaW50cChFKSwgcmVmZXJlbmNlcChFKSwgc3ltYm9scChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vY29tbWFuZCBiL2RvYy9lZnVuL2NvbW1hbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkNmMwYgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2NvbW1hbmQKQEAgLTAsMCArMSw1MCBAQAorY29tbWFuZCgpCitGVU5LVElPTjoKKyAgICAgaW50IGNvbW1hbmQoc3RyaW5nIHN0cikKKyAgICAgaW50IGNvbW1hbmQoc3RyaW5nIHN0ciwgb2JqZWN0IG9iKQorCitCRVNDSFJFSUJVTkc6CisgICAgIEZ1ZWhydCBzdHIgd2llIGVpbiBLb21tYW5kbyB3ZWxjaGVzIGRpcmVrdCB2b20gTnV0emVyIGFiZ2VnZWJlbiB3dXJkZQorICAgICBhdXMuIEFsbGUgRWZmZWt0ZSBkZXMgS29tbWFuZG9zIHdpcmtlbiBzaWNoIGF1ZiB0aGlzX29iamVjdCgpIG9kZXIsCisgICAgIGZhbGxzIGFuZ2VnZWJlbiwgYXVmIGRhcyBPYmpla3QgPG9iaj4gYXVzLgorCisgICAgIERlciBSdWVja2dhYmV3ZXJ0IGlzdCA+PTEgZnVlciBFcmZvbGcgdW5kIDAgZnVlciBNaXNzZXJmb2xnLgorICAgICBSdWVja2dhYmV3ZXJ0IGlzdCBpbSBFcmZvbGdzZmFsbCBkaWUgSG9laGUgZGVyIEV2YWxDb3N0IGluIFRpY2tzLgorCisgICAgIFdlbm4gY29tbWFuZCgpIGF1ZiBlaW4gYW5kZXJlcyBPYmpla3QgYW5nZXdlbmRldCB3aXJkLCBrb2VubmVuIGF1ZgorICAgICBkaWVzZW0gV2VnZSBrZWluZSAic3RhdGljIiBkZWtsYXJpZXJ0ZW4gRnVua3Rpb25lbiBhdWZnZXJ1ZmVuIHdlcmRlbiwKKyAgICAgdW0gZXR3YXMgU2NodXR6IHZvciB1bmVybGF1YnRlbiBBdWZydWZlbiB6dSBnZWJlbi4KKworICAgICBLb21tYW5kaSB3ZXJkZW4gZ2VzdGFwZWx0LCBkYXMgaGVpc3N0LCBuYWNoIGRlciBBdXNmdWVocnVuZyB2b24gPHN0cj4KKyAgICAgd2VyZGVuIGRpZSBhbHRlbiBXZXJ0ZSBmdWVyIHRoaXNfcGxheWVyKCksIHF1ZXJ5X3ZlcmIoKSBldGMuIHdpZWRlcgorICAgICBoZXJnZXN0ZWxsdCAoZWluIEtvbW1hbmRvIGthbm4gZGF6dSBmdWVocmVuLCBkYXNzIGVpbiBLb21tYW5kbworICAgICBhdXNnZWZ1ZWhydCB3aXJkKS4KKworQkVNRVJLVU5HRU46CisgICAgIERpZSBtZWlzdGVuIGluIExlYmV3ZXNlbiBkZWZpbmllcnRlbiBLb21tYW5kb2Z1bmt0aW9uZW4gc2luZCB2b3IKKyAgICAgYWV1c3NlcmVtIEF1ZnJ1ZmVuIGR1cmNoICJzdGF0aWMiIG9BZSBnZXNjaHVldHp0LiBadW0gQXVzZnVlaHJlbiBkaWVzZXIKKyAgICAgS29tbWFuZG9zIG11c3MgY29tbWFuZF9tZShMKSBlaW5nZXNldHp0IHdlcmRlbiwgdW0gZGllc2VuIFNjaHV0eiB6dQorICAgICB1bWdlaGVuLgorCitCRUlTUElFTEU6CisgICAgIFNpZWhlIGNvbW1hbmRfbWUoTCkgZnVlciBlaW5lbiBWZXJnbGVpY2guCisJIAorICAgICAvLyAjMSBFaW4gTlBDIG5pbW10IHVuZCB6dWVuZGV0IGVpbmUgaGVydW1saWVnZW5kZSAvc3RkL2xpZ2h0c291cmNlIGFuCisgICAgIG9iamVjdCBmID0gcHJlc2VudCgiXG5saWNodHF1ZWxsZSIsIGVudmlyb25tZW50KCkpOworICAgICBpZihmICYmIGNvbW1hbmQoIm5pbW0gbGljaHRxdWVsbGUiKSkKKyAgICAgICBpZihjb21tYW5kKCJ6dWVuZGUgbGljaHRxdWVsbGUgYW4iKSkKKyAgICAgICAgIHRlbGxfcm9vbShlbnZpcm9ubWVudCgpLCBOYW1lKFdFUikrIiBmcmV1dCBzaWNoLlxuIik7CisgICAgICAgZWxzZQorICAgICAgICAgdGVsbF9yb29tKGVudmlyb25tZW50KCksIE5hbWUoV0VSKSsiIHNjaGF1dCBiZWRyb2VwcGVsdC5cbiIpOworICAgICAKKyAgICAgLy8gIzIgRWluIE5QQyB0cmFlZ3Qgc2VpbmUgU2FjaGVuCisgICAgIGNsb25lX29iamVjdCgiL3J1ZXN0dW5nL3NvbW1lcmtsZWlkIiktPm1vdmUodGhpc19vYmplY3QoKSwgMik7CisgICAgIGNvbW1hbmQoInRyYWdlIGtsZWlkIikKKyAgICAgLy8gYWVxdWl2YWxlbnQgdW5kIGJlc3NlciBpc3QgaGllcjoKKyAgICAgQWRkSXRlbSgiL3J1ZXN0dW5nL3NvbW1lcmtsZWlkIiwgUkVGUkVTSF9SRU1PVkV8Q0xPTkVfV0VBUik7CisKK1NJRUhFIEFVQ0gKKyAgICAgY29tbWFuZF9zdGFjayhFKSwgbm90aWZ5X2ZhaWwoRSksIGVuYWJsZV9jb21tYW5kcyhFKSwgZ2V0X2V2YWxfY29zdChFKQorICAgICBjb21tYW5kX21lKEwpCisKKzYgU2VwIDIwMTIgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2NvbW1hbmRfc3RhY2sgYi9kb2MvZWZ1bi9jb21tYW5kX3N0YWNrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYTRlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9jb21tYW5kX3N0YWNrCkBAIC0wLDAgKzEsMzQgQEAKK0dFU0NIVUVUWlQKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxzeXMvY29tbWFuZHMuaD4KKworICAgICAgICAqbWl4ZWQgY29tbWFuZF9zdGFjaygpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBlaW4gQXJyYXksIGRhcyBkZW4gS29tbWFuZG8gU3RhY2sgYmVzY2hyZWlidC4gRGFzIEFycmF5CisgICAgICAgIHVtZmFzc3QgY29tbWFuZF9zdGFja19kZXB0aCgpIEVpbnRyYWVnZSwgZGVyIGVyc3RlIGRhdm9uIGJlc2NocmVpYnQKKyAgICAgICAgZGFzIFRvcC1MZXZlbCBLb21tYW5kbywgZGVyIGxldHplIEVpbnRyYWcgZGFzIGFrdHVlbGxlIEtvbW1hbmRvLgorCisgICAgICAgIEplZGVyIEVpbnRyYWcgaXN0IHdpZWRlcnVtIGVpbiBBcnJheSBtaXQgZm9sZ2VuZGVuIEVpbnRyYWVnZW46CisKKyAgICAgICAgICAgIHN0cmluZyBbQ01EX1ZFUkJdOiAgICAgIGRhcyBWZXJiIGRpZXNlcyBLb21tYW5kb3MKKyAgICAgICAgICAgIHN0cmluZyBbQ01EX1RFWFRdOiAgICAgIGRlciB2b2xsZSBUZXh0IGRlcyBLb21tYW5kb3MKKyAgICAgICAgICAgIG9iamVjdCBbQ01EX09SSUdJTl06ICAgIGRlciB1cnNwcnVlbmdsaWNoZSBLb21tYW5kb2dlYmVyCisgICAgICAgICAgICBvYmplY3QgW0NNRF9QTEFZRVJdOiAgICBkZXIgbW9tZW50YW5lIEtvbW1hbmRvZ2ViZXIKKyAgICAgICAgICAgIG1peGVkICBbQ01EX0ZBSUxdOiAgICAgIGRlciBJbmhhbHQgdm9uIG5vdGlmeV9mYWlsKCkgKG9kZXIgMCkKKyAgICAgICAgICAgIG1peGVkICBbQ01EX0ZBSUxPQkpdOiAgIGRhcyBPYmpla3QsIHdlbGNoZXMgbm90aWZ5X2ZhaWwoKSBnZXNldHp0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXQKKworICAgICAgICBDTURfT1JJR0lOIHVuZCBDTURfUExBWUVSIHNpbmQgZnVlciBnZXdvaGVubGljaCBkYXMgZ2xlaWNoZSBPYmpla3QuCisgICAgICAgIEVzIGdpYnQgbnVyIGVpbmVuIFVudGVyc2NoaWVkLCB3ZW5uIGRlciBtb2RpZnlfY29tbWFuZCBIb29rIGRlbgorICAgICAgICBLb21tYW5kb2dlYmVyIG1pdCBzZXRfdGhpc19wbGF5ZXIoKSBhZW5kZXJ0LgorCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuNy4KKyAgICAgICAgTERNdWQgMy4yLjggZnVlZ3RlIGRlbiBDTURfRkFJTE9CSiBFaW50cmFnIGhpbnp1LgorCitBTk1FUktVTkcKKyAgICAgICAgSmVkZXIgZGVyIEVpbnRyYWVnZSBpbSBBcnJheSBrYW5uIDAgc2Vpbi4KKworU0lFSEUgQVVDSAorICAgICAgICBjb21tYW5kKEUpLCBjb21tYW5kX3N0YWNrX2RlcHRoKEUpLCBub3RpZnlfZmFpbChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vY29tbWFuZF9zdGFja19kZXB0aCBiL2RvYy9lZnVuL2NvbW1hbmRfc3RhY2tfZGVwdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyMDViNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2NvbW1hbmRfc3RhY2tfZGVwdGgKQEAgLTAsMCArMSwxMyBAQAorR0VTQ0hVRVRaVAorU1lOT1BTSVMKKyAgICAgICAgaW50IGNvbW1hbmRfc3RhY2tfZGVwdGgoKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZGllIEFuemFobCBkZXIgdmVyc2NoYWNodGVsdGVuIEtvbW1hbmRpLCBhbHNvIGRpZSBUaWVmZSBkZXMKKyAgICAgICAgQ29tbWFuZCBTdGFja3MuCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi43LgorCitTSUVIRSBBVUNICisgICAgICAgIGNvbW1hbmQoRSksIGNvbW1hbmRfc3RhY2soRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2NvbmZpZ3VyZV9kcml2ZXIgYi9kb2MvZWZ1bi9jb25maWd1cmVfZHJpdmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMjQwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9jb25maWd1cmVfZHJpdmVyCkBAIC0wLDAgKzEsMTMzIEBACitTWU5PUFNJUworICAgICAgICAjaW5jbHVkZSA8Y29uZmlndXJhdGlvbi5oPgorCisgICAgICAgIHZvaWQgY29uZmlndXJlX2RyaXZlcihpbnQgd2hhdCwgbWl4ZWQgZGF0YSkKKworREVTQ1JJUFRJT04KKyAgICAgICAgVGhpcyBlZnVuIGNvbmZpZ3VyZXMgcnVudGltZSBhZGp1c3RhYmxlIGJhaHZpb3VyIG9mIHRoZSBkcml2ZXIuCisKKyAgICAgICAgU2V0cyB0aGUgb3B0aW9uIDx3aGF0PiB0byB0aGUgdmFsdWUgPGRhdGE+LgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gYWx3YXlzIGNhdXNlcyB0aGUgcHJpdmlsZWdlX3Zpb2xhdGlvbgorICAgICAgICAoImNvbmZpZ3VyZV9kcml2ZXIiLCB0aGlzX29iamVjdCgpLCB3aGF0LCBkYXRhKS4KKworICAgICAgICA8d2hhdD4gPT0gRENfTUVNT1JZX0xJTUlUCisgICAgICAgICAgIFNldCBuZXcgc29mdCBhbmQgaGFyZCBtZW1vcnkgbGltaXRzIGZvciB0aGUgZHJpdmVyLgorICAgICAgICAgICA8ZGF0YT4gaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXkgd2l0aCB0d28gZWxlbWVudHMsIHdoaWNoIGhhdmUgdG8KKyAgICAgICAgICAgYmUgaW50ZWdlcnMgZ2l2aW5nIHRoZSBhbW91bnQgb2YgbWVtb3J5IGluIGJ5dGVzLgorICAgICAgICAgICAoezxzb2Z0IG1lbW9yeSBsaW1pdD4sIDxoYXJkIG1lbW9yeSBsaW1pdD59KQorCisgICAgICAgIDx3aGF0PiA9PSBEQ19FTkFCTEVfSEVBUlRfQkVBVFMKKyAgICAgICAgICAgR2xvYmFsbHkgZW5hYmxlIHRoZSBjYWxsaW5nIG9mIEhlYXJ0YmVhdHMsIGlmIDxkYXRhPiBpcyAxLAorICAgICAgICAgICBnbG9iYWxseSBkaXNhYmxlIHRoZW0gaWYgPGRhdGE+IGlzIDAuCisgICAgICAgICAgIElmIGNhbGxlZCBkdXJpbmcgaGVhcnRiZWF0IHByb2Nlc3NpbmcsIHRoZSBjaGFuZ2UgY29tZXMgaW50byBlZmZlY3QKKyAgICAgICAgICAgYXQgdGhlIG5leHQgYmFja2VuZCBjeWNsZS4KKworICAgICAgICA8d2hhdD4gPT0gRENfTE9OR19FWEVDX1RJTUUKKyAgICAgICAgICAgU2V0IHRoZSB0aW1lIGNvbnNpZGVyZWQgYXMgKHRvbykgbG9uZyBmb3IgdG9wLWxldmVsIGV4ZWN1dGlvbnMuIElmCisgICAgICAgICAgIGFuIGV4ZWN1dGlvbiBleGNlZWRzIHRoaXMgdGltZSwgYSBzdGFjayB0cmFjZSB3aWxsIGJlIHdyaXR0ZW4gdG8KKyAgICAgICAgICAgdGhlIGRlYnVnIGxvZy4gVGhlIGV4ZWN1dGlvbiB3aWxsIGNvbnRpbnVlIGF0IHRoYXQgcG9pbnQuCisgICAgICAgICAgIDxkYXRhPiBpcyBhbiBpbnRlZ2VyIGFuZCBtZWFzdXJlZCBpbiBtaWNyb3NlY29uZHMuCisgICAgICAgICAgIEEgdGltZSBvZiAwIGRpc2FibGVzIHRoZSBkZXRlY3Rpb24gb2YgbG9uZyBleGVjdXRpb25zLgorCisgICAgICAgIDx3aGF0PiA9PSBEQ19EQVRBX0NMRUFOX1RJTUUKKyAgICAgICAgICAgU2V0cyB0aGUgYXZlcmFnZSB0aW1lIGJldHdlZW4gY2xlYW4tdXBzIG9mIGFuIG9iamVjdHMgZGF0YQorICAgICAgICAgICBzdHJ1Y3R1cmVzLiBUaGlzIGlzIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBzdGFuZGFyZCBjbGVhbnVwCisgICAgICAgICAgIHRpbWUgd2hpY2ggZGV0ZXJtaW5lcyB3aGVuIEhfQ0xFQU5fVVAgaXMgY2FsbGVkLiBBIGxvbmcgdGltZSBmb3IKKyAgICAgICAgICAgZGF0YSBjbGVhbnVwIG1heSBsZWFkIHRvIGxhcmdlciBtZW1vcnkgY29uc3VtcHRpb24gYW5kIHByZXZlbnRzCisgICAgICAgICAgIGRlc3RydWN0ZWQgb2JqZWN0cyBiZWluZyBjbGVhbmVkIHVwLiBBIHRvbyBzaG9ydCB0aW1lIG1heSBsZWFkIHRvCisgICAgICAgICAgIGhpZ2ggbG9hZHMgYW5kIGxhZyBvbiB0aGUgbWFjaGluZS4gVGhlIGFjdHVhbCB0aW1lIGRlbGF5IHdpbGwgYmUgYQorICAgICAgICAgICB0aW1lIGJldHdlZW4gMC45KkRDX0RBVEFfQ0xFQU5fVElNRSBhbmQgMS4xKkRDX0RBVEFfQ0xFQU5fVElNRS4KKyAgICAgICAgICAgRGVmYXVsdCBhdCBkcml2ZXIgc3RhcnR1cCBhcmUgMzYwMHMuCisgICAgICAgICAgIDxkYXRhPiBpcyBhbiBpbnRlZ2VyIGFuZCBtZWFzdXJlZCBpbiBzZWNvbmRzLgorCisgICAgICAgIDx3aGF0PiA9PSBEQ19UTFNfQ0VSVElGSUNBVEUKKyAgICAgICAgICAgU2V0cyB0aGUgY3VycmVudCBjZXJ0aWZpY2F0ZSB1c2VkIGZvciBuZXcgVExTIHNlc3Npb25zLgorICAgICAgICAgICBJdCBjYW4gYmUgb25lIG9mIHRoZSBjZXJ0aWZpY2F0ZXMgaW4gdGhlIGtleSBkaXJlY3RvcnkKKyAgICAgICAgICAgKGNvbW1hbmQgbGluZSBvcHRpb24gLS10bHMta2V5ZGlyZWN0b3J5KSBvciB0aGUgbWFpbgorICAgICAgICAgICBjZXJ0aWZpY2F0ZSAoZ2l2ZW4gd2l0aCAtLXRscy1jZXJ0ZmlsZSkuCisgICAgICAgICAgIERlZmF1bHQgaXMgdGhlIG1haW4gY2VydGlmaWNhdGUgb3IgZWxzZSB0aGUgZmlyc3QKKyAgICAgICAgICAgY2VydGlmaWNhdGUgZm91bmQgaW4gdGhlIGRpcmVjdG9yeS4gVGhlIGNob3NlbiBjZXJ0aWZpY2F0ZSBhdCB0aGUKKyAgICAgICAgICAgdGltZSBvZiB0aGUgdGxzX2luaXRfY29ubmVjdGlvbigpIGNhbGwgaXMgdXNlZCBmb3IgdGhhdCBjb25uZWN0aW9uLgorICAgICAgICAgICA8ZGF0YT4gaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgU0hBMSBmaW5nZXJwcmludAorICAgICAgICAgICBvZiB0aGUgY2VydGlmaWNhdGUgd2l0aCBoZXhhZGVjaW1hbCBudW1iZXJzLAorICAgICAgICAgICBpdCBtYXkgY29udGFpbiBjb2xvbnMgb3Igd2hpdGVzcGFjZXMgKGZvciBleGFtcGxlCisgICAgICAgICAgICI1QTpGRTpDQTo1NzoxRTo1MDo1RToxRTpDNzpFRDpCQToxMTpBRDo1MDoxMDo3NTowRjo3QToxRTo1MCIpLgorICAgICAgICAgICBXaGVuIGxvYWRpbmcgY2VydGlmaWNhdGVzIHRoZWlyIGZpbmdlcnByaW50cyBhcmUgcHJpbnRlZAorICAgICAgICAgICBvbiBzdGRvdXQgYW5kIGludG8gdGhlIGxvZ2ZpbGUuCisKKyAgICAgICAgPHdoYXQ+ID09IERDX1RMU19ESEVfUEFSQU1FVEVSCisgICAgICAgICAgIFNldHMgbmV3IHBhcmFtZXRlcnMgZm9yIHRoZSBEaWZmaWUtSGVsbG1hbiBrZXlleGNoYW5nZSBmb3IgbmV3IFRMUworICAgICAgICAgICBzZXNzaW9ucy4gVGhlIHBhcmFtdGVycyBtdXN0IGJlIGdpdmVuIGFzIGEgUEVNIGVuY29kZWQgc3RyaW5nCisgICAgICAgICAgIChlLmcuIHRoZSBvdXRwdXQgb2YgJ29wZW5zc2wgZGhwYXJhbSAtNSAyMDQ4JykuCisgICAgICAgICAgIElmIDxkYXRhPiBpcyAwLCB0aGUgYnVpbHQtaW4gZGVmYXVsdHMgd2lsbCBiZSByZXN0b3JlZC4KKyAgICAgICAgICAgSWYgaW1wb3J0aW5nIHRoZSBuZXcgcGFyYW1ldGVycyBmYWlscyAoZS5nLiBkdWUgdG8gYW4gaW5jb3JyZWN0CisgICAgICAgICAgIGZvcm1hdCksIHRoZSBkcml2ZXIgdHJpZXMgdG8ga2VlcCB0aGUgb2xkIHBhcmFtZXRlcnMgCisKKyAgICAgICAgPHdoYXQ+ID09IERDX1RMU19DSVBIRVJMSVNUCisgICAgICAgICAgIFNldHMgYSBuZXcgbGlzdCBvZiBjaXBoZXJzIChPcGVuU1NMKSBvciBwcmlvcml0aWVzIChHbnVUTFMpIHRvIHVzZS4KKyAgICAgICAgICAgRm9yIHRoZSBjb3JyZWN0IGZvcm1hdCwgcGxlYXNlIHJlZmVyIHRvIHRoZSBoZWxwIG9mICdvcGVuc3NsCisgICAgICAgICAgIGNpcGhlcnMnIG9yIGRvY3VtZW50YXRpb24gb2YgcHJpb3JpdHkgc3RyaW5ncyBpbiBHbnVUTFMuCisgICAgICAgICAgIFdpdGggR251VExTIGEgc3ludGF4IGVycm9yIGluIHRoZSBsaXN0IGNhdXNlcyBhbiBlcnJvci4KKyAgICAgICAgICAgV2l0aCBPcGVuU1NMIGFuIGVycm9yIGlzIG9ubHkgcmFpc2VkIG9mIG5vbmUgb2YgdGhlIGdpdmVuIGNpcGhlcnMKKyAgICAgICAgICAgY291bGQgYmUgc2VsZWN0ZWQuCisgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBwcmVmZXJyZWQgY2lwaGVycyBvZiB0aGUgZHJpdmVyIHRha2UgcHJlY2VkZW5jZQorICAgICAgICAgICBUaGlzIGNhbiBiZSBjaGFuZ2VkIGluIHRoZSBwcmlvcml0eSBzdHJpbmdzIGZvciBHbnVUTFMsIGJ1dAorICAgICAgICAgICBjdXJyZW50bHkgbm90IGZvciBPcGVuU1NMLgorCisgICAgICAgIDx3aGF0PiA9PSBEQ19FWFRSQV9XSVpJTkZPX1NJWkUKKyAgICAgICAgICAgSW5kaWNhdGUgdGhhdCB0aGUgd2l6bGlzdCBzaG91bGQgY29udGFpbiBhbiBhcnJheSBvZiB0aGUgZ2l2ZW4gc2l6ZQorICAgICAgICAgICB3aXRoIGV4dHJhIGluZm8gZm9yIGVhY2ggd2l6YXJkLiBBIG5lZ2F0aXZlIHZhbHVlIGluZGljYXRlcworICAgICAgICAgICBhIG5vbi1hcnJheSB2YWx1ZS4KKworICAgICAgICAgICBUaGUgdmFsdWUgaXMgb25seSB1c2VkIHRvIGFsbG9jYXRlIGEgcHJvcGVyIGVtcHR5ICdleHRyYScgdmFsdWUKKyAgICAgICAgICAgZm9yIG5ld2x5IGNyZWF0ZWQgd2l6bGlzdCBlbnRyaWVzLgorCisgICAgICAgIDx3aGF0PiA9PSBEQ19ERUZBVUxUX1JVTlRJTUVfTElNSVRTCisgICAgICAgICAgIFNldHMgdGhlIGRlZmF1bHQgcnVudGltZSBsaW1pdHMsIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBlYWNoIHRocmVhZC4KKyAgICAgICAgICAgVGhleSB3aWxsIGJlIGluIGVmZmVjdCBhcyB0aGUgaW5pdGlhbCBsaW1pdHMgd2l0aCB0aGUgbmV4dCB0aHJlYWQuCisgICAgICAgICAgIFRoZSBsaW1pdHMgbXVzdCBiZSBnaXZlbiBhcyBhbiBhcnJheSB3aXRoIHRoZSBmb2xsb3dpbmcgZW50cmllczoKKworICAgICAgICAgICAgIGludFtMSU1JVF9FVkFMXTogICAgICAgICB0aGUgbWF4IG51bWJlciBvZiBldmFsIGNvc3RzCisgICAgICAgICAgICAgaW50W0xJTUlUX0FSUkFZXTogICAgICAgIHRoZSBtYXggbnVtYmVyIG9mIGFycmF5IGVudHJpZXMKKyAgICAgICAgICAgICBpbnRbTElNSVRfTUFQUElOR19TSVpFXTogdGhlIG1heCBudW1iZXIgb2YgbWFwcGluZyB2YWx1ZXMKKyAgICAgICAgICAgICBpbnRbTElNSVRfTUFQUElOR19LRVlTXTogdGhlIG1heCBudW1iZXIgb2YgbWFwcGluZyBlbnRyaWVzCisgICAgICAgICAgICAgaW50W0xJTUlUX0JZVEVdOiAgICAgICAgIHRoZSBtYXggbnVtYmVyIG9mIGJ5dGVzIGhhbmRsZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgcmVhZF9ieXRlcygpL3dyaXRlX2J5dGVzKCkgY2FsbC4KKyAgICAgICAgICAgICBpbnRbTElNSVRfRklMRV06ICAgICAgICAgdGhlIG1heCBudW1iZXIgb2YgYnl0ZXMgaGFuZGxlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSByZWFkX2ZpbGUoKS93cml0ZV9maWxlKCkgY2FsbC4KKyAgICAgICAgICAgICBpbnRbTElNSVRfQ0FMTE9VVFNdOiAgICAgdGhlIG51bWJlciBvZiBjYWxsb3V0cyBhdCBvbmUgdGltZS4KKyAgICAgICAgICAgICBpbnRbTElNSVRfQ09TVF06ICAgICAgICAgaG93IHRvIGFjY291bnQgdGhlIGN1cnJlbnQgY29zdC4KKyAgICAgICAgICAgICBpbnRbTElNSVRfTUVNUk9ZXTogICAgICAgdGhlIG1heC4gbnVtYmVyIG9mIGJ5dGVzIHdoaWNoIGNhbiBiZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYWRkaXRpb25hbGx5XyBhbGxvY2F0ZWQvdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wZXIgdG9wLWxldmVsIGV4ZWN1dGlvbiB0aHJlYWRfLgorCisgICAgICAgICAgVGhlIGxpbWl0IHNldHRpbmdzIHJlY29nbml6ZSB0aHJlZSBzcGVjaWFsIHZhbHVlczoKKworICAgICAgICAgICAgTElNSVRfVU5MSU1JVEVEOiAgdGhlIGxpbWl0IGlzIGRlYWN0aXZhdGVkCisgICAgICAgICAgICBMSU1JVF9LRUVQOiAgICAgICB0aGUgZm9ybWVyIHNldHRpbmcgaXMga2VwdAorICAgICAgICAgICAgTElNSVRfREVGQVVMVDogICAgdGhlICdnbG9iYWwnIGRlZmF1bHQgc2V0dGluZyBpcyB1c2VkLgorCisgICAgICAgICAgRm9yIExJTUlUX0NPU1QsIHRoZSBzcGVjaWFsIHZhbHVlcyBoYXZlIHRoZXNlIG1lYW5pbmc6CisgICAgICAgICAgICBMSU1JVF9VTkxJTUlURUQ6ICBhdCBtYXhpbXVtIDEgdGljayBpcyBhY2NvdW50ZWQKKyAgICAgICAgICAgIExJTUlUX0tFRVA6ICAgICAgICBMSU1JVF9DT1NUIGlzIHNldCB0byAwCisgICAgICAgICAgICBMSU1JVF9ERUZBVUxUOiAgICAgTElNSVRfQ09TVCBpcyBzZXQgdG8gLTEwMAorCisgICAgICAgIDx3aGF0PiA9PSBEQ19TV0FQX0NPTVBBQ1RfTU9ERQorICAgICAgICAgICBTZXRzIGZyZWUgc3dhcCBzcGFjZSBzaGFsbCBiZSByZXVzZWQgaW1tZWRpYXRlbHkgdG8ga2VlcAorICAgICAgICAgICB0aGUgc3dhcCBmaWxlIGFzIHNtYWxsIGFzIHBvc3NpYmxlLgorICAgICAgICAgICAoU2FtZSBhcyB0aGUgLS1zd2FwLWNvbXBhY3QgY29tbWFuZCBsaW5lIHN3aXRjaC4pCisKK0hJU1RPUlkKKyAgICAgICAgSW50cm9kdWNlZCBpbiBMRE11ZCAzLjMuNzE5LgorICAgICAgICBEQ19FTkFCTEVfSEVBUlRfQkVBVFMgd2FzIGFkZGVkIGluIDMuNS4wLgorICAgICAgICBEQ19MT05HX0VYRUNfVElNRSB3YXMgYWRkZWQgaW4gMy41LjAuCisgICAgICAgIERDX0RBVEFfQ0xFQU5fVElNRSB3YXMgYWRkZWQgaW4gMy41LjAuCisgICAgICAgIERDX0VYVFJBX1dJWklORk9fU0laRSB3YXMgYWRkZWQgaW4gMy41LjAuCisgICAgICAgIERDX1RMU19DRVJUSUZJQ0FURSB3YXMgYWRkZWQgaW4gMy41LjAuCisgICAgICAgIERDX1RMU19ESEVfUEFSQU1FVEVSIHdhcyBhZGRlZCBpbiAzLjUuMC4KKyAgICAgICAgRENfVExTX0NJUEhFUkxJU1Qgd2FzIGFkZGVkIGluIDMuNS4wLgorICAgICAgICBEQ19TV0FQX0NPTVBBQ1RfTU9ERSB3YXMgYWRkZWQgaW4gMy41LjAuCisKK1NFRSBBTFNPCisgICAgICAgIGNvbmZpZ3VyZV9pbnRlcmFjdGl2ZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vY29uZmlndXJlX2ludGVyYWN0aXZlIGIvZG9jL2VmdW4vY29uZmlndXJlX2ludGVyYWN0aXZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZDE0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9jb25maWd1cmVfaW50ZXJhY3RpdmUKQEAgLTAsMCArMSwxMzkgQEAKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxjb25maWd1cmF0aW9uLmg+CisKKyAgICAgICAgdm9pZCBjb25maWd1cmVfaW50ZXJhY3RpdmUob2JqZWN0IG9iLCBpbnQgd2hhdCwgbWl4ZWQgZGF0YSkKKworREVTQ1JJUFRJT04KKyAgICAgICAgU2V0cyB0aGUgb3B0aW9uIDx3aGF0PiB0byB0aGUgdmFsdWUgPGRhdGE+IG9uIHRoZSBpbnRlcmFjdGl2ZSA8b2I+CisgICAgICAgIG9yIHRoZSBkZWZhdWx0IGZvciBhbGwgaW50ZXJhY3RpdmVzIGlmIDxvYj4gaXMgMC4KKworICAgICAgICBJZiB0aGUgZmlyc3QgYXJndW1lbnQgPG9iPiBpcyBub3QgdGhpc19vYmplY3QoKSwgdGhlIHByaXZpbGVnZQorICAgICAgICB2aW9sYXRpb24gKCJjb25maWd1cmVfaW50ZXJhY3RpdmUiLCB0aGlzX29iamVjdCgpLCBvYiwgd2hhdCwgZGF0YSkKKyAgICAgICAgb2NjdXJzLgorCisgICAgICAgIEFzIDx3aGF0PiwgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgYXJlIGFjY2VwdGVkOgorCisgICAgICAgIDx3aGF0PiA9PSBJQ19NQVhfV1JJVEVfQlVGRkVSX1NJWkUKKyAgICAgICAgICBTZXRzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHRvIGJlIGhlbGQgcGVuZGluZyBmb3Igd3JpdGluZworICAgICAgICAgIHBlciBwbGF5ZXIgdG8gPGRhdGE+IGJ5dGVzLiBBIHZhbHVlIG9mIC0xIG1lYW5zIHVubGltaXRlZCwKKyAgICAgICAgICAwIGRlYWN0aXZhdGVzIHRoZSB3cml0ZSBidWZmZXIuCisKKyAgICAgICAgPHdoYXQ+ID09IElDX1NPQ0tFVF9CVUZGRVJfU0laRQorICAgICAgICAgIENoYW5nZXMgdGhlIHNvY2tldCBidWZmZXIgc2l6ZSB0byB0aGUgZ2l2ZW4gc2l6ZSBpbiBieXRlcy4KKyAgICAgICAgICBOb3QgZXZlcnkgb3BlcmF0aW5nIHN5c3RlbSBtaWdodCBwcm92aWRlIHRoaXMgb3B0aW9uIHRvCisgICAgICAgICAgY2hhbmdlIHRoZSBidWZmZXIgc2l6ZS4KKworICAgICAgICAgIFRoZSBidWZmZXIgc2l6ZSBpcyB1c2VkIGZvciBzZW5kaW5nLCB3aGVuIHRoZSByZW1vdGUgc2lkZSBpc24ndAorICAgICAgICAgIGdldHRpbmcgdGhlIGRhdGEgZmFzdCBlbm91Z2guIFdoZW4gdGhlIHNvY2tldCBidWZmZXIgaXMgZnVsbCwKKyAgICAgICAgICB0aGUgZHJpdmVyIHdpbGwgYnVmZmVyIGluIGl0cyBpbnRlcm5hbCB3cml0ZSBidWZmZXIgKHNlZQorICAgICAgICAgIElDX01BWF9XUklURV9CVUZGRVJfU0laRSkuIFdoZW4gdGhhdCBnZXRzIGZ1bGwsIHRvbywgdGhlbgorICAgICAgICAgIG1lc3NhZ2VzIGFyZSBkaXNjYXJkZWQuCisKKyAgICAgICAgPHdoYXQ+ID09IElDX0NPTUJJTkVfQ0hBUlNFVF9BU19TVFJJTkcKKyAgICAgICAgICBTZXQgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHdoaWNoIGNhbiBiZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlCisgICAgICAgICAgc3RyaW5nIHdoZW4gYWxyZWFkeSByZWNlaXZlZCBlbi1ibG9jIGluIGNoYXJtb2RlIGZyb20gdGhlCisgICAgICAgICAgaW50ZXJhY3RpdmUgdXNlciA8b2I+LiBOb24tY29tYmluYWJsZSBjaGFyYWN0ZXJzIGFuZCBzaW5nbGUKKyAgICAgICAgICByZWNlaXZlZCBjaGFyYWN0ZXJzIGFyZSByZXR1cm5lZCBhcyBzZXBhcmF0ZSBzdHJpbmdzIGFzIHVzdWFsLgorCisgICAgICAgICAgVGhlIG5ld2xpbmUgJ1xuJyBhbmQgdGhlIE5VTCBjaGFyYWN0ZXIgJ1wwJyBhcmUgYWx3YXlzCisgICAgICAgICAgbm9uLWNvbWJpbmFibGUuCisKKyAgICAgICAgICBUaGUgZ2l2ZW4gc3RyaW5nIHNob3VsZCBjb250YWluIGFsbCBjb21iaW5hYmxlIGNoYXJhY3RlcnMuCisgICAgICAgICAgSWYgZ2l2ZW4gYXMgdGhlIG51bWJlciAwLCB0aGUgZGVmYXVsdCBjb21iaW5lIGNoYXJzZXQgaXMKKyAgICAgICAgICByZS1lc3RhYmxpc2hlZC4KKworICAgICAgICA8d2hhdD4gPT0gSUNfQ09NQklORV9DSEFSU0VUX0FTX0FSUkFZCisgICAgICAgICAgU2V0IHRoZSBzZXQgb2YgY2hhcmFjdGVycyB3aGljaCBjYW4gYmUgY29tYmluZWQgaW50byBhIHNpbmdsZQorICAgICAgICAgIHN0cmluZywganVzdCBsaWtlIElDX0NPTUJJTkVfQ0hBUlNFVF9BU19TVFJJTkcuCisKKyAgICAgICAgICBUaGUgZ2l2ZW4gYXJyYXkgc2hhbGwgY29udGFpbiBhbiBhcnJheSBvZiB1cCB0byAzMiBpbnRlZ2VycworICAgICAgICAgIHRoYXQgYXJlIGludGVycHJldGVkIGFzIDgtYml0LXZhbHVlcy4gRWFjaCBjaGFyYWN0ZXIgaXMgZW5jb2RlZAorICAgICAgICAgIGFzIG9uZSBiaXQgKEFTQ0lJIGNoYXJhY3RlcnMgMC03IGluIHRoZSBmaXJzdCBpbnRlZ2VyLCBhbmQgc28gb24pLgorICAgICAgICAgIFNvIGEgY2hhcmFjdGVyIDxuPiBpcyB0cmVhdGVkIGFzIGNvbWJpbmFibGUgaWYKKworICAgICAgICAgICAgICBhcnJheVtuLzhdICYgKDEgPDwgbiU4KQorCisgICAgICAgICAgSWYgdGhlIGFycmF5IGNvbnRhaW5zIGxlc3MgZWxlbWVudHMsIHRoZSBtaXNzaW5nIGVsZW1lbnRzIHdpbGwKKyAgICAgICAgICBiZSByZWdhcmRlZCBhcyAwIChub24tY29tYmluYWJsZSBjaGFyYWN0ZXJzKS4KKworICAgICAgICA8d2hhdD4gPT0gSUNfQ09OTkVDVElPTl9DSEFSU0VUX0FTX1NUUklORworICAgICAgICAgIFNldCB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgd2hpY2ggY2FuIGJlIG91dHB1dCB0byB0aGUgaW50ZXJhY3RpdmUKKyAgICAgICAgICB1c2VyIDxvYj4uIEFsbCBvdGhlciBjaGFyYWN0ZXJzIGFyZSBkaXNjYXJkZWQuIChUaGlzIGRvZXMgbm90CisgICAgICAgICAgYXBwbHkgdG8gYmluYXJ5X21lc3NhZ2UoKSkuCisKKyAgICAgICAgICBUaGUgZ2l2ZW4gc3RyaW5nIHNob3VsZCBjb250YWluIGFsbCBhbGxvd2VkIGNoYXJhY3RlcnMuCisgICAgICAgICAgSWYgZ2l2ZW4gYXMgdGhlIG51bWJlciAwLCB0aGUgZGVmYXVsdCBjaGFyc2V0IGlzIHJlLWVzdGFibGlzaGVkLgorCisgICAgICAgIDx3aGF0PiA9PSBJQ19DT05ORUNUSU9OX0NIQVJTRVRfQVNfQVJSQVkKKyAgICAgICAgICBTZXQgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHdoaWNoIGNhbiBiZSBvdXRwdXQgdG8gdGhlIGludGVyYWN0aXZlCisgICAgICAgICAgdXNlciA8b2I+LCBqdXN0IGxpa2UgSUNfQ09OTkVDVElPTl9DSEFSU0VUX0FTX1NUUklORy4KKworICAgICAgICAgIFRoZSBnaXZlbiBhcnJheSBzaGFsbCBjb250YWluIGFuIGFycmF5IG9mIHVwIHRvIDMyIGludGVnZXJzCisgICAgICAgICAgdGhhdCBhcmUgaW50ZXJwcmV0ZWQgYXMgOC1iaXQtdmFsdWVzLiBFYWNoIGNoYXJhY3RlciBpcyBlbmNvZGVkCisgICAgICAgICAgYXMgb25lIGJpdCAoQVNDSUkgY2hhcmFjdGVycyAwLTcgaW4gdGhlIGZpcnN0IGludGVnZXIsIGFuZCBzbyBvbikuCisgICAgICAgICAgU28gYSBjaGFyYWN0ZXIgPG4+IGlzIGFsbG93ZWQgdG8gYmUgb3V0cHV0IGlmCisKKyAgICAgICAgICAgICAgYXJyYXlbbi84XSAmICgxIDw8IG4lOCkKKworICAgICAgICAgIElmIHRoZSBhcnJheSBjb250YWlucyBsZXNzIGVsZW1lbnRzLCB0aGUgbWlzc2luZyBlbGVtZW50cyB3aWxsCisgICAgICAgICAgYmUgcmVnYXJkZWQgYXMgMCAobm90IGFsbG93ZWQsIGllLiB0byBiZSBkaXNjYXJkZWQpLgorCisgICAgICAgIDx3aGF0PiA9PSBJQ19RVU9URV9JQUMKKyAgICAgICAgICBTZXRzIHdoZXRoZXIgdGhlIGNoYXJhY3RlciAyNTUgKHRlbG5ldCBJQUMpIHNoYWxsIGJlIHF1b3RlZAorICAgICAgICAgIGJ5IHByZXBlbmRpbmcgYW5vdGhlciBJQUMgY2hhcmFjdGVyLCBzbyBpdCB3aWxsIG5vdCBiZSBpbnRlcnByZXRlZAorICAgICAgICAgIGJ5IHRoZSB0ZWxuZXQgcHJvdG9jb2wuIEVuYWJsZSB3aXRoIDEsIGRpc2FibGUgd2l0aCAwLiBCeSBkZWZhdWx0CisgICAgICAgICAgaXQgaXMgZW5hYmxlZCBhbmQgZG9lcyBvbmx5IGFwcGx5IGlmIGNoYXJhY3RlciAyNTUgaXMgYWxsb3dlZCB0bworICAgICAgICAgIGJlIG91dHB1dCAoaWUuIGl0IGlzIHBhcnQgb2YgdGhlIGNvbm5lY3Rpb24gY2hhcnNldCkuCisKKyAgICAgICAgPHdoYXQ+ID09IElDX1RFTE5FVF9FTkFCTEVECisgICAgICAgICAgRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIHRoZSB0ZWxuZXQgbWFjaGluZSBmb3IgdGhlIGludGVyYWN0aXZlCisgICAgICAgICAgdXNlciA8b2I+LiBXaGVuIGRlYWN0aXZhdGVkIHRoZSBkcml2ZXIgd29uJ3QgaGFuZGxlIHRlbG5ldAorICAgICAgICAgIG5lZ290aWF0aW9ucyAoZWcuIEhfVEVMTkVUX05FRyB3b24ndCBiZSBjYWxsZWQpLCB0aGV5IHdpbGwgYmUKKyAgICAgICAgICBwYXJ0IG9mIHRoZSB1c2VyIGlucHV0LiBBbHNvIElOUFVUX05PRUNITyB3b24ndCBiZSBlZmZlY3RpdmUKKyAgICAgICAgICBhcyB0aGUgZHJpdmVyIHdvbid0IHNlbmQgYW55IHRlbG5ldCBuZWdvdGlhdGlvbnMgaXRzZWxmLgorCisgICAgICAgIDx3aGF0PiA9PSBJQ19NQ0NQCisgICAgICAgICAgU3RhcnRzIG9kZXIgZW5kcyBNQ0NQIGNvbXByZXNzaW9uIG9mIHRoZSBkcml2ZXIgLT4gY2xpZW50IHRyYWZmaWMuCisgICAgICAgICAgPGRhdGE+IG11c3QgYmUgdGhlIE1DQ1AgdmVyc2lvbiAoZWl0aGVyIFRFTE9QVF9DT01QUkVTUyBvcgorICAgICAgICAgIFRFTE9QVF9DT01QUkVTUzIgZnJvbSA8dGVsbmV0Lmg+KS4gV2hlbiB0aGUgdGVsbmV0IG1hY2hpbmUKKyAgICAgICAgICBpcyBkaXNhYmxlZCwgYW55IHZhbHVlIG90aGVyIHRoZW4gemVybyB3aWxsIGRvLCBhbmQgdGhlIGNvbXByZXNzaW9uCisgICAgICAgICAgc3RhcnRzIHdpdGhvdXQgYSB0ZWxuZXQgcHJlYW1ibGUuCisKKyAgICAgICAgICBBdmFpbGFibGUgb25seSBpZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIHdpdGggTUNDUCBlbmFibGVkOworICAgICAgICAgIF9fTUNDUF9fIGlzIGRlZmluZWQgaW4gdGhhdCBjYXNlLgorCisgICAgICAgIDx3aGF0PiA9PSBJQ19QUk9NUFQKKyAgICAgICAgICBTZXRzIHRoZSBwcm9tcHQgZm9yIHRoZSBpbnRlcmFjdGl2ZSB1c2VyIDxvYj4gdG8gPGRhdGE+LiBUaGUKKyAgICAgICAgICBwcm9tcHQgY2FuIGVpdGhlciBiZSBhIHN0cmluZyBvciBhIGNsb3N1cmUgdGhhdCB3aWxsIGJlIGNhbGxlZAorICAgICAgICAgIGVhY2ggdGltZSB0aGUgcHJvbXB0IGlzIHNob3duLgorCisgICAgICAgIDx3aGF0PiA9PSBJQ19NQVhfQ09NTUFORFMKKyAgICAgICAgICBTZXRzIHRoZSBtYXggbnVtYmVyIG9mIGNvbW1hbmRzIHRoZSBpbnRlcmFjdGl2ZSB1c2VyIDxvYj4gaXMKKyAgICAgICAgICBhbGxvd2VkIHRvIGV4ZWN1dGUgcGVyIHNlY29uZCB0byA8ZGF0YT4uIEEgbmVnYXRpdmUgdmFsdWUgbWVhbnMKKyAgICAgICAgICAndW5saW1pdGVkJyBhbmQgaXMgdGhlIHNldHRpbmcgZm9yIG5ld2x5IGNyZWF0ZWQgY29ubmVjdGlvbnMuCisKKyAgICAgICAgICBBICdjb21tYW5kJyBpbiB0aGlzIGNvbnRleHQgbWVhbnMgZXZlcnkgcmVjZWl2ZWQgZGF0YSBwYWNrZXQKKyAgICAgICAgICB3aGljaCBjYXVzZXMgYSBMUEMgY2FsbCAtIGFjdGlvbnMgYW5kIGNhbGxzIHRvIGlucHV0X3RvKCkKKyAgICAgICAgICBhbGlrZS4KKworICAgICAgICA8d2hhdD4gPT0gSUNfTU9ESUZZX0NPTU1BTkQKKyAgICAgICAgICBTZXRzIGFuIG9iamVjdCB0aGF0IHdpbGwgYWN0IGFzIGEgbW9kaWZpZXIgZm9yIGVhY2ggY29tbWFuZC4KKyAgICAgICAgICBBbGwgY29tbWFuZHMgZm9yIHRoZSBpbnRlcmFjdGl2ZSB1c2VyIDxvYj4gd2lsbCBiZSBwYXNzZWQgdG8KKyAgICAgICAgICBkYXRhLT5tb2RpZnlfY29tbWFuZCgpIGJlZm9yZSBhY3R1YWxseSBiZWluZyBleGVjdXRlZC4KKyAgICAgICAgICA8ZGF0YT4gbXVzdCBiZSBnaXZlbiBhcyBhbiBvYmplY3QuCisKKyAgICAgICAgICBXaGVuIGFuIG9iamVjdCBpcyBzZXQsIHRoZSBIX01PRElGWV9DT01NQU5EIGhvb2sgd29udCBiZQorICAgICAgICAgIGNhbGxlZCBhbnltb3JlLiAwIGFzIGFyZ3VtZW50IHdpbGwgc3RvcCB0aGUgY29tbWFuZCBtb2RpZmljYXRpb24KKyAgICAgICAgICBhbmQgcmVpbnN0YWxsIHRoZSB1c2Ugb2YgdGhhdCBkcml2ZXIgaG9vay4KKworICAgICAgICAgIFRoaXMgbWVjaGFuaXNtIGlzIGludGVuZGVkIHRvIGV4cGFuZCBhbGlhc2VzIG9uIHF1aWNrdHlwZXJzCisgICAgICAgICAgb3IgdGhlIGxpa2UuIFRoZSBuYW1lIG9mIHRoZSBsZnVuIGNhbGxlZCBjYW4gYmUgY2hhbmdlZAorICAgICAgICAgIGZyb20gbW9kaWZ5X2NvbW1hbmQoKSB0byBzb21ldGhpbmcgZWxzZSB1c2luZyB0aGUKKyAgICAgICAgICBIX01PRElGWV9DT01NQU5EX0ZOQU1FIGhvb2suCisKKworSElTVE9SWQorICAgICAgICBJbnRyb2R1Y2VkIGluIExETXVkIDMuMy43MTkuCisKK1NFRSBBTFNPCisgICAgICAgIGNvbmZpZ3VyZV9kcml2ZXIoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2NvbmZpZ3VyZV9vYmplY3QgYi9kb2MvZWZ1bi9jb25maWd1cmVfb2JqZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNTQ3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9jb25maWd1cmVfb2JqZWN0CkBAIC0wLDAgKzEsNDEgQEAKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxjb25maWd1cmF0aW9uLmg+CisKKyAgICAgICAgdm9pZCBjb25maWd1cmVfb2JqZWN0KG9iamVjdCBvYiwgaW50IHdoYXQsIG1peGVkIGRhdGEpCisKK0RFU0NSSVBUSU9OCisgICAgICAgIFNldHMgdGhlIG9wdGlvbiA8d2hhdD4gdG8gdGhlIHZhbHVlIDxkYXRhPiBvbiB0aGUgb2JqZWN0IDxvYj4KKyAgICAgICAgb3IgdGhlIGRlZmF1bHQgZm9yIGFsbCBpbnRlcmFjdGl2ZXMgaWYgPG9iPiBpcyAwLgorCisgICAgICAgIElmIHRoZSBmaXJzdCBhcmd1bWVudCA8b2I+IGlzIG5vdCB0aGlzX29iamVjdCgpLCB0aGUgcHJpdmlsZWdlCisgICAgICAgIHZpb2xhdGlvbiAoImNvbmZpZ3VyZV9vYmplY3QiLCB0aGlzX29iamVjdCgpLCBvYiwgd2hhdCwgZGF0YSkKKyAgICAgICAgb2NjdXJzLgorCisgICAgICAgIEFzIDx3aGF0PiwgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgYXJlIGFjY2VwdGVkOgorCisgICAgICAgIDx3aGF0PiA9PSBPQ19DT01NQU5EU19FTkFCTEVECisgICAgICAgICAgU2V0cyB3aGV0aGVyIDxvYj4gY2FuIHVzZSBjb21tYW5kcyBub3JtYWxseSBhY2Nlc3NpYmxlIHRvCisgICAgICAgICAgdXNlcnMgKDEpIG9yIG5vdCAoMCkuIFRoaXMgYWxzbyBtYXJrcyB0aGUgb2JqZWN0IGFzICJsaXZpbmciLgorCisgICAgICAgIDx3aGF0PiA9PSBPQ19IRUFSVF9CRUFUCisgICAgICAgICAgRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIHRoZSBoZWFydCBiZWF0IGZvciA8b2I+LiBUaGUKKyAgICAgICAgICBkcml2ZXIgd2lsbCBhcHBseSB0aGUgbGZ1biBoZWFydF9iZWF0KCkgdG8gdGhlIDxvYj4gZXZlcnkKKyAgICAgICAgICBfX0hFQVJUQkVBVF9JTlRFUlZBTF9fIHNlY29uZHMsIGlmIGl0IGlzIGVuYWJsZWQuCisgICAgICAgICAgQSBzaGFkb3cgb3ZlciB0aGUgaGVhcnRfYmVhdCgpIGxmdW4gd2lsbCBiZSBpZ25vcmVkLgorCisgICAgICAgICAgSWYgdGhlIGhlYXJ0IGJlYXQgaXMgbm90IG5lZWRlZCBmb3IgdGhlIG1vbWVudCwgdGhlbiBkbyBkaXNhYmxlCisgICAgICAgICAgaXQuIFRoaXMgd2lsbCByZWR1Y2Ugc3lzdGVtIG92ZXJoZWFkLgorCisgICAgICAgICAgTm90ZSB0aGF0IGhlYXJ0X2JlYXQoKXMgYXJlIGNhbGxlZCBvbmx5IGlmIHRoZXJlIGFyZSBlbmFibGVkCisgICAgICAgICAgdmlhIGNvbmZpZ3Vlcl9kcml2ZXIoRENfRU5BQkxFX0hFQVJUX0JFQVRTKSwgd2hpY2ggaXMgdGhlCisgICAgICAgICAgZGVmYXVsdC4KKworCisgICAgICAgIFRoZSBjdXJyZW50IHZhbHVlcyBmb3IgdGhlc2Ugb3B0aW9ucyBjYW4gYmUgcXVlcmllZCB1c2luZworICAgICAgICBvYmplY3RfaW5mbygpLgorCitISVNUT1JZCisgICAgICAgIEludHJvZHVjZWQgaW4gTERNdWQgMy41LjAuCisKK1NFRSBBTFNPCisgICAgICAgIG9iamVjdF9pbmZvKEUpLCBjb25maWd1cmVfaW50ZXJhY3RpdmUoRSksIGNvbmZpZ3VyZV9kcml2ZXIoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2NvbnZlcnRfY2hhcnNldCBiL2RvYy9lZnVuL2NvbnZlcnRfY2hhcnNldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjdjZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vY29udmVydF9jaGFyc2V0CkBAIC0wLDAgKzEsOTQgQEAKK1NZTk9QU0lTCisgICAgICAgIHN0cmluZyBjb252ZXJ0X2NoYXJzZXQoc3RyaW5nIHN0ciwgc3RyaW5nIGZyb21fY3MsIHN0cmluZyB0b19jcykKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIERlciBTdHJpbmcgPHN0cj4gd2lyZCB2b24gWmVpY2hlbnNhdHogPGZyb21fY3M+IGluIFplaWNoZW5zYXR6CisgICAgICAgIDx0b19jcz4gdW1nZXdhbmRlbHQgdW5kIGRhcyBFcmdlYm5pcyB6dXJ1ZWNrZ2VnZWJlbi4KKworICAgICAgICBEaWUgWmVpY2hlbnNhZXR6ZSB3ZXJkZW4gYmVpIE5hbWVuIGFuZ2VnZWJlbiAoc293b2hsIEtsZWluLQorICAgICAgICBhbHMgYXVjaCBHcm9zc3NjaHJpZnQgaXN0IHp1bGFlc3NpZykuCisKKyAgICAgICAgRGllIEZ1bmt0aW9uIGlzdCBudXIgdmVyZnVlZ2JhciBhdWYgU3lzdGVtZW4gbWl0IGluc3RhbGxpZXJ0ZXIKKyAgICAgICAgbGliaWNvbnYuCisKKyAgICAgICAgRXJsYXVidGUgWmVpY2hlbnNhZXR6ZSBzaW5kOgorCisgICAgICAgICAgIERlciBkZXJ6ZWl0aWdlIFN5c3RlbXplaWNoZW5zYXR6OgorICAgICAgICAgICAgICAgIiIgKGRlciBMZWVyc3RyaW5nKQorCisgICAgICAgICAgIEV1cm9wZWFuIAorICAgICAgICAgICAgICAgQVNDSUksIElTTy04ODU5LXsxLDIsMyw0LDUsNyw5LDEwLDEzLDE0LDE1LDE2fSwgS09JOC1SLCBLT0k4LVUsCisgICAgICAgICAgICAgICBLT0k4LVJVLCBDUHsxMjUwLDEyNTEsMTI1MiwxMjUzLDEyNTQsMTI1N30sIENQezg1MCw4NjZ9LAorICAgICAgICAgICAgICAgTWFje1JvbWFuLENlbnRyYWxFdXJvcGUsSWNlbGFuZCxDcm9hdGlhbixSb21hbmlhfSwKKyAgICAgICAgICAgICAgIE1hY3tDeXJpbGxpYyxVa3JhaW5lLEdyZWVrLFR1cmtpc2h9LCBNYWNpbnRvc2gKKworICAgICAgICAgICBTZW1pdGljIAorICAgICAgICAgICAgICAgSVNPLTg4NTktezYsOH0sIENQezEyNTUsMTI1Nn0sIENQODYyLCBNYWN7SGVicmV3LEFyYWJpY30KKworICAgICAgICAgICBKYXBhbmVzZQorICAgICAgICAgICAgICAgRVVDLUpQLCAgIFNISUZUX0pJUywgICAgQ1A5MzIsICAgIElTTy0yMDIyLUpQLCAgICBJU08tMjAyMi1KUC0yLAorICAgICAgICAgICAgICAgSVNPLTIwMjItSlAtMQorCisgICAgICAgICAgIENoaW5lc2UKKyAgICAgICAgICAgICAgIEVVQy1DTiwgIEhaLCAgR0JLLCAgR0IxODAzMCwgIEVVQy1UVywgIEJJRzUsICBDUDk1MCwgQklHNS1IS1NDUywKKyAgICAgICAgICAgICAgIElTTy0yMDIyLUNOLCBJU08tMjAyMi1DTi1FWFQKKworICAgICAgICAgICBLb3JlYW4KKyAgICAgICAgICAgICAgIEVVQy1LUiwgQ1A5NDksIElTTy0yMDIyLUtSLCBKT0hBQgorCisgICAgICAgICAgIEFybWVuaWFuCisgICAgICAgICAgICAgICBBUk1TQ0lJLTgKKworICAgICAgICAgICBHZW9yZ2lhbgorICAgICAgICAgICAgICAgR2VvcmdpYW4tQWNhZGVteSwgR2VvcmdpYW4tUFMKKworICAgICAgICAgICBUYWppaworICAgICAgICAgICAgICAgS09JOC1UCisKKyAgICAgICAgICAgVGhhaQorICAgICAgICAgICAgICAgVElTLTYyMCwgQ1A4NzQsIE1hY1RoYWkKKworICAgICAgICAgICBMYW90aWFuCisgICAgICAgICAgICAgICBNdWxlTGFvLTEsIENQMTEzMworCisgICAgICAgICAgIFZpZXRuYW1lc2UKKyAgICAgICAgICAgICAgVklTQ0lJLCBUQ1ZOLCBDUDEyNTgKKworICAgICAgICAgICBQbGF0Zm9ybSBzcGVjaWZpY3MKKyAgICAgICAgICAgICAgSFAtUk9NQU44LCBORVhUU1RFUAorCisgICAgICAgICAgIEZ1bGwgVW5pY29kZQorICAgICAgICAgICAgICBVVEYtOAorICAgICAgICAgICAgICBVQ1MtMiwgVUNTLTJCRSwgVUNTLTJMRQorICAgICAgICAgICAgICBVQ1MtNCwgVUNTLTRCRSwgVUNTLTRMRQorICAgICAgICAgICAgICBVVEYtMTYsIFVURi0xNkJFLCBVVEYtMTZMRQorICAgICAgICAgICAgICBVVEYtMzIsIFVURi0zMkJFLCBVVEYtMzJMRQorICAgICAgICAgICAgICBVVEYtNworICAgICAgICAgICAgICBDOTksIEpBVkEKKworICAgICAgICBBdWYgZWluaWdlbiBTeXN0ZW0gc2luZCBhdWNoIGRpZSBmb2xnZW5kZW4gWmVpY2hlbnNhZXR6ZSB2ZXJmdWVnYmFyOgorCisgICAgICAgICAgICBFdXJvcGVhbiAKKyAgICAgICAgICAgICAgICBDUHs0MzcsNzM3LDc3NSw4NTIsODUzLDg1NSw4NTcsODU4LDg2MCw4NjEsODYzLDg2NSw4NjksMTEyNX0KKworICAgICAgICAgICAgU2VtaXRpYyAKKyAgICAgICAgICAgICAgICBDUDg2NAorCisgICAgICAgICAgICBKYXBhbmVzZQorICAgICAgICAgICAgICAgIEVVQy1KSVNYMDIxMywgU2hpZnRfSklTWDAyMTMsIElTTy0yMDIyLUpQLTMKKworICAgICAgICAgICAgVHVya21lbgorICAgICAgICAgICAgICAgIFREUzU2NQorCisgICAgICAgICAgICBQbGF0Zm9ybSBzcGVjaWZpY3MKKyAgICAgICAgICAgICAgICBSSVNDT1MtTEFUSU4xCisKKworQkVJU1BJRUwKKyAgICAgICAgY29udmVydF9jaGFyc2V0KCJIaSEiLCAiYXNjaWkiLCAidXRmLTgiKQorCitHRVNDSElDSFRFCisgICAgICAgIEludHJvZHVjZWQgaW4gTERNdWQgMy4zLjUzMSAuCisKK1NFRSBBTFNPCisKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2NvcHkgYi9kb2MvZWZ1bi9jb3B5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjM3NTIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9jb3B5CkBAIC0wLDAgKzEsMjMgQEAKK1NZTk9QU0lTCisgICAgIG1peGVkIGNvcHkobWl4ZWQgYXJnKTsKKworQkVTQ0hSRUlCVU5HCisgICAgIEVyemV1Z3QgZWluZSBmbGFjaGUgS29waWUgdm9uIDxhcmc+IHVuZCBsaWVmZXJ0IGRpZXNlIHp1cnVlY2suIEZ1ZXIKKyAgICAgQXJyYXlzIHVuZCBNYXBwaW5ncyBoZWlzc3QgZGFzLCBkYXNzIG5ldWUgQXJyYXlzIGJ6dy4gTWFwcGluZ3MgZXJ6ZXVndAorICAgICB3ZXJkZW4sIGRpZSBLb3BpZW4gZGVyIEVsZW1lbnRlIGRlcyBPcmlnaW5hbHMgZW50aGFsdGVuLiBFaW5nZWJldHRldGUKKyAgICAgQXJyYXlzIHVuZCBNYXBwaW5ncyB3ZXJkZW4gamVkb2NoIGFscyBSZWZlcmVueiB1ZWJlcmdlYmVuIQorCisgICAgIEZ1ZXIgYW5kZXJlIFdlcnRlIHZvbiA8YXJnPiBiZXdpcmt0IGRpZXNlIEZ1bmt0aW9uIG5pY2h0cy4KKworQkVJU1BJRUwKKyAgICAgbWl4ZWQgKmEsICpiOworICAgICBhID0gKHsgMSwgKHsgMjEsIDIyIH0pIH0pOworICAgICBiID0gY29weShhKTsKKyAgICAgYVswXSA9IC0xOyBhWzFdWzBdID0gLTIxOworICAgICAgICAgLS0+IGEgaXN0IG51biAoeyAtMSwgKHsgLTIxLCAyMiB9KSB9KQorICAgICAgICAgICAgIGIgaXN0IG51biAoeyAgMSwgKHsgLTIxLCAyMiB9KSB9KQorCitTSUVIRSBBVUNICisgICAgIGRlZXBfY29weShFKQorCisxMC5BcHIuMjAwNyBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2NvcHlfYml0cyBiL2RvYy9lZnVuL2NvcHlfYml0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzY4ZDUxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vY29weV9iaXRzCkBAIC0wLDAgKzEsNDEgQEAKK1NZTk9QU0lTCisgICAgICAgIHN0cmluZyBjb3B5X2JpdHMoc3RyaW5nIHNyYywgc3RyaW5nIGRlc3QgWywgaW50IHNyY3N0YXJ0CisgICAgICAgICAgICBbLCBpbnQgZGVzdHN0YXJ0IFssIGludCBjb3B5bGVuXV1dKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEtvcGllcnQgZGVuIEJpdGJlcmVpY2ggWzxzcmNzdGFydD4gLi4gPHNyY3N0YXJ0PiArIDxjb3B5bGVuPl0gYXVzIGRlbQorICAgICAgICBCaXRzdHJpbmcgPHNyYz4gaW4gZGVuIEJpdHN0cmluZyA8ZGVzdD4gYmVnaW5uZW5kIGFuIGRlciBQb3NpdGlvbgorICAgICAgICA8ZGVzdHN0YXJ0Pi4gRGllIGFsdGVuIFdlcnRlIHZvbiA8ZGVzdD4gd2VyZGVuIGRhYmVpIHVlYmVyc2NocmllYmVuLgorCisgICAgICAgIERlciByZXN1bHRpZXJlbmRlIFN0cmluZyB3aXJkIHp1cnVlY2sgZ2VsaWVmZXJ0LCBkaWUgYmVpZGVuCisgICAgICAgIE9yaWdpbmFsc3RyaW5ncyBibGVpYmVuIHVuYmVlaW5mbHVzc3QuCisKKyAgICAgICAgV2lyZCA8c3Jjc3RhcnQ+IG5pY2h0IGFuZ2VnZWJlbiwgd2lyZCA8c3JjPiB2b24gQW5mYW5nIGFuIGtvcGllcnQuCisgICAgICAgIElzdCA8c3Jjc3RhcnQ+IG5lZ2F0aXYsIHdpcmQgdm9tIGxldHp0ZW4gQml0IGhlciBnZXphZWhsdCAoZC5oLiAtMQorICAgICAgICBiZXplaWNobmV0IGRhcyBsZXR6dGUgQml0KS4KKworICAgICAgICBXaXJkIDxkZXN0c3RhcnQ+IG5pY2h0IGFuZ2VnZWJlbiwgd2lyZCA8ZGVzdD4gdm9uIEFuZmFuZyBhbiBrb3BpZXJ0LgorICAgICAgICBJc3QgPGRlc3RzdGFydD4gbmVnYXRpdiwgd2lyZCB2b20gbGV0enRlbiBCaXQgaGVyIGdlemFlaGx0IChkLmguIC0xCisgICAgICAgIGJlemVpY2huZXQgZGFzIGxldHp0ZSBCaXQpLgorCisgICAgICAgIFdpcmQgPGNvcHlsZW4+IG5pY2h0IGFuZ2VnZWJlbiB3aXJkLCBzbyB3aXJkIGRlciBnZXNhbXRlIEJpdHN0cmluZworICAgICAgICA8c3JjPiBrb3BpZXJ0LiBEYXMgUmVzdWx0YXQgYmVzdGVodCBkYW5uIGF1cyBkZW0gQml0c3RyaW5nIDxkZXN0PgorICAgICAgICBiaXMgenVyIFBvc2l0aW9uIDxkZXN0c3RhcnQ+LCBnZWZvbGd0IHZvbiA8c3JjPiBhYiBkZXIgUG9zaXRpb24KKyAgICAgICAgPHNyY3N0YXJ0Pi4KKworICAgICAgICBXZW5uIDxjb3B5bGVuPiBuZWdhdGl2IGlzdCwgd2VyZGVuIGFicyg8Y29weWxlbj4pIF92b3JfIDxzcmNzdGFydD4gaW4KKyAgICAgICAgZGFzIFJlc3VsdGF0IGtvcGllcnQuCisKK0JFSVNQSUVMRQorICAgICAgICBjb3B5X2JpdHMoc3JjLCBkZXN0LCAxMCkgICAgICAgPT09IHNyY1sxMC4uXQorICAgICAgICBjb3B5X2JpdHMoc3JjLCBkZXN0LCAxMCwgNSkgICAgPT09IGRlc3RbMC4uNF0gKyBzcmNbMTAuLl0KKyAgICAgICAgY29weV9iaXRzKHNyYywgZGVzdCwgMTAsIDUsIDMpID09PSBkZXN0WzAuLjRdICsgc3JjWzEwLi4xMl0gKyBkZXN0WzguLl0KKworICAgICAgICAoRGllIE5vdGF0aW9uIHNyY1tdIC8gZGVzdFtdIGRpZW50IG51ciBkZXIgSWxsdXN0cmF0aW9uISkKKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjkKKworU0lFSEUgQVVDSAorICAgICAgICBjbGVhcl9iaXQoRSksIHNldF9iaXQoRSksIHRlc3RfYml0KEUpLCBuZXh0X2JpdChFKSwgbGFzdF9iaXQoRSksCisgICAgICAgIGNvdW50X2JpdHMoRSksIG9yX2JpdHMoRSksIHhvcl9iaXRzKEUpLCBpbnZlcnRfYml0cyhFKSwgYW5kX2JpdHMoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2NvcHlfZmlsZSBiL2RvYy9lZnVuL2NvcHlfZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTA5MWVkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vY29weV9maWxlCkBAIC0wLDAgKzEsMTkgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCBjb3B5X2ZpbGUoc3RyaW5nIGZyb20sIHN0cmluZyB0bykKKworREVTQ1JJUFRJT04KKyAgICAgICAgVGhlIGVmdW4gY29weV9maWxlKCkgd2lsbCBjb3B5IHRoZSBmaWxlIDxmcm9tPiB0byB0aGUgbmV3IG5hbWUgPHRvPi4KKyAgICAgICAgSWYgPHRvPiBleGlzdHMgYW5kIGlzIGEgZGlyZWN0b3J5LCB0aGVuIDxmcm9tPiB3aWxsIGJlIHBsYWNlZCBpbiB0aGF0CisgICAgICAgIGRpcmVjdG9yeSBhbmQga2VlcCBpdHMgb3JpZ2luYWwgbmFtZS4KKyAgICAgICAgCisgICAgICAgIFlvdSBtdXN0IGhhdmUgcmVhZCBwZXJtaXNzaW9uIGZvciA8ZnJvbT4gYW5kIHdyaXRlIHBlcm1pc3Npb24gZm9yCisgICAgICAgIHRoZSB0YXJnZXQgZmlsZSB0byBjb3B5IHRoZSBmaWxlLgorICAgICAgICAKKyAgICAgICAgT24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIGNvcHlfZmlsZSgpIHdpbGwgcmV0dXJuIDAuIElmIGFueQorICAgICAgICBvY2N1cnMsIDEgaXMgcmV0dXJuZWQsIG9yIGEgcnVudGltZSBpcyBnZW5lcmF0ZWQuCisKK0VYQU1QTEUKKyAgICAgICAgY29weV9maWxlKCIvcGxheWVycy93aXphcmQvb2JqLmMiLCAiL3BsYXllcnMvd2l6YXJkL25ld29iai5jIik7CisKK1NFRSBBTFNPCisgICAgICAgIG1rZGlyKEUpLCBybWRpcihFKSwgcm0oRSksIHJlbmFtZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vY29zIGIvZG9jL2VmdW4vY29zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZjNlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9jb3MKQEAgLTAsMCArMSwxMSBAQAorU1lOT1BTSVMKKyAgICAgICAgZmxvYXQgY29zKGludHxmbG9hdCkKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZGVuIEtvc2ludXMgZGVzIEFyZ3VtZW50ZXMuCisKK0FFTkRFUlVOR0VOCisgICAgICAgIExETXVkIDMuMi45OiBHYW56emFobGVuIChJbnRlZ2VycykgYWxzIEFyZ3VtZW50IGhpbnp1Z2VmdWVndC4KKworU0lFSEUgQVVDSAorICAgICAgICBzaW4oRSksIGFzaW4oRSksIGFjb3MoRSksIHRhbihFKSwgYXRhbihFKSwgYXRhbjIoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2NvdW50X2JpdHMgYi9kb2MvZWZ1bi9jb3VudF9iaXRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzI1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9jb3VudF9iaXRzCkBAIC0wLDAgKzEsMjAgQEAKK1NZTk9QU0lTCisgICAgIGludCBjb3VudF9iaXRzKHN0cmluZyBzdHIpOworCitCRVNDSFJFSUJVTkcKKyAgICAgRGllc2UgRnVua3Rpb24gemFlaGx0IGRpZSBBbnphaGwgZ2VzZXR6ZXIgQml0cyBpbSBCaXRzdHJpbmcgPHN0cj4gdW5kCisgICAgIGxpZWZlcnQgZGllIEFuemFobCBhbHMgUmVzdWx0YXQgenVydWVjay4KKworQkVNRVJLVU5HRU4KKyAgICAgQXJiZWl0ZXQgZWlnZW50bGljaCBudXIgc2lubnZvbGwgYXVmIEJpdHN0cmluZ3MgOikKKworQkVJU1BJRUwKKyAgICAgc3RyaW5nIHM7CisgICAgIHMgPSBzZXRfYml0KCIiLCAzKTsgcyA9IHNldF9iaXQocywgMTUpOworICAgICBjb3VudF9iaXRzKHMpIC0tPiBsaWVmZXJ0IDIKKworU0lFSEUgQVVDSAorICAgICBjbGVhcl9iaXQoRSksIHNldF9iaXQoRSksIHRlc3RfYml0KEUpLCBuZXh0X2JpdChFKSwgbGFzdF9iaXQoRSksCisgICAgIG9yX2JpdHMoRSksIHhvcl9iaXRzKEUpLCBpbnZlcnRfYml0cyhFKSwgY29weV9iaXRzKEUpLCBiaXRzdHJpbmdzIChDKQorCisxMC5BcHIuMjAwNyBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vY3J5cHQgYi9kb2MvZWZ1bi9jcnlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzIwODlkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vY3J5cHQKQEAgLTAsMCArMSwxNiBAQAorU1lOT1BTSVMKKyAgICAgc3RyaW5nIGNyeXB0KHN0cmluZyBzdHIsIGludCBzZWVkKTsKKyAgICAgc3RyaW5nIGNyeXB0KHN0cmluZyBzdHIsIHN0cmluZyBzZWVkKTsKKworQkVTQ0hSRUlCVU5HCisgICAgIFZlcnNjaGx1ZXNzZWx0IGRlbiBTdHJpbmcgPHN0cj4gbWl0IGRlbSBTY2hsdWVzc2VsIDxzZWVkPi4gPHNlZWQ+IGthbm4KKyAgICAgZW50d2VkZXIgZWluIEludGVnZXIgc2VpbiBvZGVyIHp3ZWkgWmVpY2hlbiBhdXMgZGVtIFN0cmluZyA8c2VlZD4uCisgICAgIFdlbm4gPHNlZWQ+IDAgaXN0LCB3aXJkIGVpbiB6dWZhZWxsaWdlciBTY2hsdWVzc2VsIGVyemV1Z3QuCisKKyAgICAgRGFzIFJlc3VsdGF0IGVudGhhZWx0IGRlbiBTY2hsdWVzc2VsIGFscyBkaWUgZXJzdGVuIGJlaWRlbiBaZWljaGVuLgorCisgICAgIEZ1ZXIgUGFzc3dvcnRhYmZyYWdlbiwgZGllIG9obmUgRWNobyBlaW5nZWdlYmVuIHdlcmRlbiBrb2VubmVuIHNvbGxlbiwKKyAgICAgYmlldGV0IGlucHV0X3RvKCkgZWluIHNwZXppZWxsZXMgRmxhZy4KKworU0lFSEUgQVVDSAorICAgICBtZDVfY3J5cHQoRSksIG1kNShFKSwgc2hhMShFKSwgaGFzaChFKSwgaG1hYyhFKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2N0aW1lIGIvZG9jL2VmdW4vY3RpbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiNjFmOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2N0aW1lCkBAIC0wLDAgKzEsMjIgQEAKK1NZTk9QU0lTCisgICAgIHN0cmluZyBjdGltZShpbnQgY2xvY2spOworICAgICBzdHJpbmcgY3RpbWUoaW50KiB1Y2xvY2spOworCitCRVNDSFJFSUJVTkcKKyAgICAgSW50ZXJwcmV0aWVydCBkYXMgQXJndW1lbnQgPGNsb2NrPiBhbHMgQW56YWhsIFNla3VuZGVuIHNlaXQgZGVtCisgICAgIDAxLkpBTi4xOTcwLCAwMDowMCBVaHIgdW5kIGtvbnZlcnRpZXJ0IGRpZXNlcyBpbiBlaW5lbiBhbnNlaG5saWNoZW4KKyAgICAgU3RyaW5nLCBkZXIgRGF0dW0gdW5kIFplaXQgZW50aGFlbHQuIFdlbm4gPGNsb2NrPiBuaWNodCBhbmdlZ2ViZW4KKyAgICAgd2lyZCwgd2lyZCB0aW1lKCkgdmVyd2VuZGV0LgorCisgICAgIERpZSB6d2VpdGUgRm9ybSBlbnRzcHJpY2h0IGRlciBlcnN0ZW4sIGF1c3NlciBkYXNzIGRhcyBBcmd1bWVudCBlaW4KKyAgICAgQXJyYXkgbWl0IHp3ZWkgSW50ZWdlciBFbGVtZW50ZW4gaXN0LiBEYXMgZXJzdGUgRWxlbWVudCBpbnRbMF0gZ2lidAorICAgICBkaWUgQW56YWhsIFNla3VuZGVuIHNlaXQgZGVtIDAxLkpBTi4xOTcwIGFuLCBkYXMgendlaXRlIEVsZW1lbnQKKyAgICAgaW50WzFdIGRpZSBBbnphaGwgTWlsbGlzZWt1bmRlbiBpbm5lcmhhbGIgZGllc2VyIFNla3VuZGUuCisKK0JFSVNQSUVMCisgICAgIHdyaXRlKGN0aW1lKCkrIlxuIik7CisKKyAgICAgRGllcyBnaWJ0IGV0d2FzIGF1cyB3aWUgIlN1biBPY3QgMjYgMTk6Mjg6MzAgMjAwMyIuCisKK1NJRUhFIEFVQ0gKKyAgICAgZHRpbWUoRSksIGdtdGltZShFKSwgbG9jYWx0aW1lKEUpLCBzdHJmdGltZShFKSwgdGltZShFKSwgdXRpbWUoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2RiX2FmZmVjdGVkX3Jvd3MgYi9kb2MvZWZ1bi9kYl9hZmZlY3RlZF9yb3dzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYTI3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9kYl9hZmZlY3RlZF9yb3dzCkBAIC0wLDAgKzEsMjQgQEAKK09QVElPTkFMCitTWU5PUFNJUworICAgICAgICBpbnQgZGJfYWZmZWN0ZWRfcm93cyhpbnQgaGFuZGxlKQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgUmVzdWx0YXQgaXN0IGRpZSBBbnphZWhsIGRlciBaZWlsZW4gZGllIHZvbSBsZXR6dGVuIFNRTC1CZWZlaGwKKyAgICAgICAgYmVlaW5mbHVzc3Qgd3VyZGVuLCB3ZWxjaGVzIHp1bSBTUUwtc2VydmVyIHZpYSA8aGFuZGxlPiBnZXNlbmRldAorICAgICAgICB3dXJkZS4gRGllc2UgRnVua3Rpb24gaXN0IG51ZXR6bGljaCBsZWRpZ2xpY2ggZnVlciBERUxFVEUtCisgICAgICAgIHVuZCBVUERBVEUtQmVmZWhsZS4KKworICAgICAgICBEaWUgRnVua3Rpb24gaXN0IG51ciB2ZXJmdWVnYmFyIHdlbm4gZGVyIERyaXZlciBtaXQKKyAgICAgICAgbXlTUUwtVW50ZXJzdHVldHp1bmcgY29tcGlsaWVydCB3dXJkZS4gSW4gZGllc2VtIEZhbGwgaXN0IGRhcyBNYWtybworICAgICAgICBfX01ZU1FMX18gZGVmaW5pZXJ0LgorCisgICAgICAgIERpZSBFZnVuIGlzdCBwcml2aWxlZ2llcnQgYWxzICgibXlzcWwiLCAiZGJfYWZmZWN0ZWRfcm93cyIpLgorCitHRVNDSElDSFRFCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi45LgorICAgICAgICBMRE11ZCAzLjIuMTEgbWFjaHRlIGRpZSBFZnVuIHByaXZpbGVnaWVydC4KKworU0lFSEUgQVVDSAorICAgICAgICBkYl9jb252X3N0cmluZyhFKSwgZGJfY2xvc2UoRSksIGRiX2NvbGRlZnMoRSksIGRiX2Nvbm5lY3QoRSksCisgICAgICAgIGRiX2V4ZWMoRSksIGRiX2Vycm9yKEUpLCBkYl9mZXRjaChFKSwgZGJfaW5zZXJ0X2lkKEUpLCBkYl9oYW5kbGVzKEUpLAorICAgICAgICBteXNxbChDKSwgcHJpdmlsZWdlX3Zpb2xhdGlvbihNKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vZGJfY2xvc2UgYi9kb2MvZWZ1bi9kYl9jbG9zZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDgxNzZjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZGJfY2xvc2UKQEAgLTAsMCArMSwyMiBAQAorT1BUSU9OQUwKK1NZTk9QU0lTCisgICAgICAgIGludCBkYl9jbG9zZShpbnQgaGFuZGxlKQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgU2NobGllc3NlIGRpZSBWZXJiaW5kdW5nIDxoYW5kbGU+IHp1bSBTUUwtU2VydmVyLiBSZXN1bHRhdCBpc3QKKyAgICAgICAgPGhhbmRsZT4gYmVpIEVyZm9sZy4KKworICAgICAgICBEaWUgRnVua3Rpb24gaXN0IG51ciB2ZXJmdWVnYmFyIHdlbm4gZGVyIERyaXZlciBtaXQKKyAgICAgICAgbXlTUUwtVW50ZXJzdHVldHp1bmcgY29tcGlsaWVydCB3dXJkZS4gSW4gZGllc2VtIEZhbGwgaXN0IGRhcyBNYWtybworICAgICAgICBfX01ZU1FMX18gZGVmaW5pZXJ0LgorCisgICAgICAgIERpZSBFZnVuIGlzdCBwcml2aWxlZ2llcnQgYWxzICgibXlzcWwiLCAiZGJfY2xvc2UiKS4KKworR0VTQ0hJQ0hURQorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuOS4KKyAgICAgICAgTERNdWQgMy4yLjExIG1hY2h0ZSBkaWUgRWZ1biBwcml2aWxlZ2llcnQuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgZGJfYWZmZWN0ZWRfcm93cyhFKSwgZGJfY29udl9zdHJpbmcoRSksIGRiX2NvbGRlZnMoRSksIGRiX2Nvbm5lY3QoRSksCisgICAgICAgIGRiX2V4ZWMoRSksIGRiX2Vycm9yKEUpLCBkYl9mZXRjaChFKSwgZGJfaGFuZGxlcyhFKSwgZGJfaW5zZXJ0X2lkKEUpLAorICAgICAgICBteXNxbChDLCBwcml2aWxlZ2VfdmlvbGF0aW9uKE0pKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vZGJfY29sZGVmcyBiL2RvYy9lZnVuL2RiX2NvbGRlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzNWExMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2RiX2NvbGRlZnMKQEAgLTAsMCArMSwyMyBAQAorT1BUSU9OQUwKK1NZTk9QU0lTCisgICAgICAgIHN0cmluZyAqIGRiX2NvbGRlZnMgKGludCBoYW5kbGUpCisKK0JFU0NIUkVJQlVORworICAgICAgICBSZXN1bHRhdCBpc3QgZWluIEFycmF5IG1pdCBkZW4gU3BhbHRlbm5hbWVuIGRlciBUYWJlbGxlIGRlcworICAgICAgICBsZXR6dGVuIFFVRVJZLUJlZmVobHMuIEdhYiBkaWUgRGF0ZW5iYW5rIGtlaW5lIFRhYmVsbGUgenVydWVjaywgZGFubgorICAgICAgICBnaWJ0IGRpZSBFZnVuIDAgYWxzIEVyZ2VibmlzLgorCisgICAgICAgIERpZSBGdW5rdGlvbiBpc3QgbnVyIHZlcmZ1ZWdiYXIgd2VubiBkZXIgRHJpdmVyIG1pdAorICAgICAgICBteVNRTC1VbnRlcnN0dWV0enVuZyBjb21waWxpZXJ0IHd1cmRlLiBJbiBkaWVzZW0gRmFsbCBpc3QgZGFzIE1ha3JvCisgICAgICAgIF9fTVlTUUxfXyBkZWZpbmllcnQuCisKKyAgICAgICAgRGllIEVmdW4gaXN0IHByaXZpbGVnaWVydCBhbHMgKCJteXNxbCIsICJkYl9jb2xkZWZzIikuCisKK0dFU0NISUNIVEUKKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjkuCisgICAgICAgIExETXVkIDMuMi4xMSBtYWNodGUgZGllIEVmdW4gcHJpdmlsZWdpZXJ0LgorCitTSUVIRSBBVUNICisgICAgICAgIGRiX2FmZmVjdGVkX3Jvd3MoRSksIGRiX2NvbnZfc3RyaW5nKEUpLCBkYl9jbG9zZShFKSwgZGJfY29ubmVjdChFKSwKKyAgICAgICAgZGJfZXhlYyhFKSwgZGJfZXJyb3IoRSksIGRiX2ZldGNoKEUpLCBkYl9oYW5kbGVzKEUpLCBkYl9pbnNlcnRfaWQoRSksCisgICAgICAgIG15c3FsKEMpLCBwcml2aWxlZ2VfdmlvbGF0aW9uKE0pCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9kYl9jb25uZWN0IGIvZG9jL2VmdW4vZGJfY29ubmVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmUyMGM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZGJfY29ubmVjdApAQCAtMCwwICsxLDMyIEBACitPUFRJT05BTAorU1lOT1BTSVMKKyAgICAgICAgaW50IGRiX2Nvbm5lY3Qoc3RyaW5nIGRhdGFiYXNlKQorICAgICAgICBpbnQgZGJfY29ubmVjdChzdHJpbmcgZGF0YWJhc2UsIHN0cmluZyB1c2VyKQorICAgICAgICBpbnQgZGJfY29ubmVjdChzdHJpbmcgZGF0YWJhc2UsIHN0cmluZyB1c2VyLCBzdHJpbmcgcGFzc3dvcmQpCisKK0JFU0NIUkVJQlVORworICAgICAgICBTdGVsbGUgZWluZSBWZXJiaW5kdW5nIHp1ciBTUUwtRGF0ZW5iYW5rIDxkYXRhYmFzZT4gZGVzCisgICAgICAgIGxva2FsZW4gU1FMLVNlcnZlcnMgaGVyLiBEYXMgRXJnZWJuaXMgaXN0IGRpZSBIYW5kbGUtTnVtbWVyIGZ1ZXIgZGllc2UKKyAgICAgICAgVmVyYmluZHVuZyB1bmQgbXVzcyBmdWVyIGFsbGUgQW5mcmFnZW4genUgZGllc2VyIERhdGVuYmFuayB2ZXJ3ZW5kZXQKKyAgICAgICAgd2VyZGVuLgorCisgICAgICAgIEV4aXN0aWVydCBkaWUgRGF0ZW5iYW5rIG5pY2h0LCBvZGVyIGthbm4gZGVyIGxva2FsZSBTUUwtU2VydmVyIG5pY2h0CisgICAgICAgIGdlZnVuZGVuIHdlcmRlbiwgd2lyZCBlaW4gTGF1ZnplaXRmZWhsZXIgZXJ6ZXVndC4KKworICAgICAgICBXZW5uIGFuZ2VnZWJlbiwgd2lyZCBkaWUgVmVyYmluZHVuZyBmdWVyIDx1c2VyPiBtaXQgPHBhc3N3b3JkPgorICAgICAgICBlcnpldWd0LgorCisgICAgICAgIERpZSBGdW5rdGlvbiBpc3QgbnVyIHZlcmZ1ZWdiYXIgd2VubiBkZXIgRHJpdmVyIG1pdAorICAgICAgICBteVNRTC1VbnRlcnN0dWV0enVuZyBjb21waWxpZXJ0IHd1cmRlLiBJbiBkaWVzZW0gRmFsbCBpc3QgZGFzIE1ha3JvCisgICAgICAgIF9fTVlTUUxfXyBkZWZpbmllcnQuCisKKyAgICAgICAgRGllIEVmdW4gaXN0IHByaXZpbGVnaWVydCBhbHMgKCJteXNxbCIsICJkYl9jb25uZWN0IikuCisKK0dFU0NISUNIVEUKKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjkuCisgICAgICAgIExETXVkIDMuMi4xMSBtYWNodGUgZGllIEVmdW4gcHJpdmlsZWdpZXJ0LgorCitTSUVIRSBBVUNICisgICAgICAgIGRiX2FmZmVjdGVkX3Jvd3MoRSksIGRiX2NvbnZfc3RyaW5nKEUpLCBkYl9jbG9zZShFKSwgZGJfY29sZGVmcyhFKSwKKyAgICAgICAgZGJfZXhlYyhFKSwgZGJfZXJyb3IoRSksIGRiX2ZldGNoKEUpLCBkYl9oYW5kbGVzKEUpLAorICAgICAgICBkYl9pbnNlcnRfaWQoRSksIG15c3FsKEMpLCBwcml2aWxlZ2VfdmlvbGF0aW9uKE0pCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9kYl9jb252X3N0cmluZyBiL2RvYy9lZnVuL2RiX2NvbnZfc3RyaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MzBkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9kYl9jb252X3N0cmluZwpAQCAtMCwwICsxLDIwIEBACitPUFRJT05BTAorU1lOT1BTSVMKKyAgICAgICAgc3RyaW5nIGRiX2NvbnZfc3RyaW5nKHN0cmluZyBzdHIpCisKK0JFU0NIUkVJQlVORworICAgICAgICBXYW5kZWxlIGRlbiBTdHJpbmcgPHN0cj4gaW4gZWluZW4gU3RyaW5nIHVtLCBkZXIgdm9uIGRlciBEYXRlbmJhbmsKKyAgICAgICAga29ycmVrdCBpbnRlcnByZXRpZXJ0IHdlcmRlbiBrYW5uOyB6LkIuIHdlcmRlbiBhbGwgQXBvc3Ryb3BoZQorICAgICAgICBkdXJjaCBcJyBlcnNldHp0LgorCisgICAgICAgIERpZSBGdW5rdGlvbiBpc3QgbnVyIHZlcmZ1ZWdiYXIgd2VubiBkZXIgRHJpdmVyIG1pdAorICAgICAgICBteVNRTC1VbnRlcnN0dWV0enVuZyBjb21waWxpZXJ0IHd1cmRlLiBJbiBkaWVzZW0gRmFsbCBpc3QgZGFzIE1ha3JvCisgICAgICAgIF9fTVlTUUxfXyBkZWZpbmllcnQuCisKK0dFU0NISUNIVEUKKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjkuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgZGJfYWZmZWN0ZWRfcm93cyhFKSwgZGJfY2xvc2UoRSksIGRiX2NvbGRlZnMoRSksIGRiX2Nvbm5lY3QoRSksCisgICAgICAgIGRiX2V4ZWMoRSksIGRiX2Vycm9yKEUpLCBkYl9mZXRjaChFKSwgZGJfaGFuZGxlcyhFKSwgZGJfaW5zZXJ0X2lkKEUpLAorICAgICAgICBteXNxbChDKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vZGJfZXJyb3IgYi9kb2MvZWZ1bi9kYl9lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZkMjkxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZGJfZXJyb3IKQEAgLTAsMCArMSwyMyBAQAorT1BUSU9OQUwKK1NZTk9QU0lTCisgICAgICAgIHN0cmluZyBkYl9lcnJvcihpbnQgaGFuZGxlKQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgUmVzdWx0IGlzdCBlaW4gU3RyaW5nLCBkZXIgZGVuIEZlaGxlciBkZXIgbGV0enRlbgorICAgICAgICBEYXRlbmJhbmt0cmFuc2FrdGlvbiBiZXNjaHJlaWJ0LiAgV2FyIGRpZSBsZXR6dGUgVHJhbnNha3Rpb24KKyAgICAgICAgZXJmb2xncmVpY2gsIGlzdCBkYXMgRXJnZWJuaXMgMC4KKworICAgICAgICBEaWUgRnVua3Rpb24gaXN0IG51ciB2ZXJmdWVnYmFyIHdlbm4gZGVyIERyaXZlciBtaXQKKyAgICAgICAgbXlTUUwtVW50ZXJzdHVldHp1bmcgY29tcGlsaWVydCB3dXJkZS4gSW4gZGllc2VtIEZhbGwgaXN0IGRhcyBNYWtybworICAgICAgICBfX01ZU1FMX18gZGVmaW5pZXJ0LgorCisgICAgICAgIERpZSBFZnVuIGlzdCBwcml2aWxlZ2llcnQgYWxzICgibXlzcWwiLCAiZGJfZXJyb3IiKS4KKworR0VTQ0hJQ0hURQorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuOS4KKyAgICAgICAgTERNdWQgMy4yLjExIG1hY2h0ZSBkaWUgRWZ1biBwcml2aWxlZ2llcnQuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgZGJfYWZmZWN0ZWRfcm93cyhFKSwgZGJfY29udl9zdHJpbmcoRSksIGRiX2Nsb3NlKEUpLCBkYl9jb2xkZWZzKEUpLAorICAgICAgICBkYl9jb25uZWN0KEUpLCBkYl9leGVjKEUpLCBkYl9mZXRjaChFKSwgZGJfaGFuZGxlcyhFKSwgZGJfaW5zZXJ0X2lkKEUpLAorICAgICAgICBteXNxbChDKSwgcHJpdmlsZWdlX3Zpb2xhdGlvbihNKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vZGJfZXhlYyBiL2RvYy9lZnVuL2RiX2V4ZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc0Yzk4MwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2RiX2V4ZWMKQEAgLTAsMCArMSwyMiBAQAorT1BUSU9OQUwKK1NZTk9QU0lTCisgICAgICAgIGludCBkYl9leGVjKGludCBoYW5kbGUsIHN0cmluZyBzdGF0ZW1lbnQpCisKK0JFU0NIUkVJQlVORworICAgICAgICBGdWVocmUgZGVuIFNRTC1CZWZlaGwgPHN0YXRlbWVudD4gZnVlciBkaWUgVmVyYmluZHVuZyA8aGFuZGxlPiBhdXMuCisgICAgICAgIFJlc3VsdGF0IGlzdCBkYXMgSGFuZGxlIGJlaSBFcmZvbGcsIG9kZXIgMCBiZWkgZWluZW0gRmVobGVyLgorCisgICAgICAgIERpZSBGdW5rdGlvbiBpc3QgbnVyIHZlcmZ1ZWdiYXIgd2VubiBkZXIgRHJpdmVyIG1pdAorICAgICAgICBteVNRTC1VbnRlcnN0dWV0enVuZyBjb21waWxpZXJ0IHd1cmRlLiBJbiBkaWVzZW0gRmFsbCBpc3QgZGFzIE1ha3JvCisgICAgICAgIF9fTVlTUUxfXyBkZWZpbmllcnQuCisKKyAgICAgICAgRGllIEVmdW4gaXN0IHByaXZpbGVnaWVydCBhbHMgKCJteXNxbCIsICJkYl9leGVjIikuCisKK0dFU0NISUNIVEUKKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjkuCisgICAgICAgIExETXVkIDMuMi4xMSBtYWNodGUgZGllIEVmdW4gcHJpdmlsZWdpZXJ0LgorCitTSUVIRSBBVUNICisgICAgICAgIGRiX2FmZmVjdGVkX3Jvd3MoRSksIGRiX2NvbnZfc3RyaW5nKEUpLCBkYl9jbG9zZShFKSwgZGJfY29sZGVmcyhFKSwKKyAgICAgICAgZGJfY29ubmVjdChFKSwgZGJfZXJyb3IoRSksIGRiX2ZldGNoKEUpLCBkYl9oYW5kbGVzKEUpLAorICAgICAgICBkYl9pbnNlcnRfaWQoRSksIG15c3FsKEMpLCBwcml2aWxlZ2VfdmlvbGF0aW9uKE0pCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9kYl9mZXRjaCBiL2RvYy9lZnVuL2RiX2ZldGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDNlOGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9kYl9mZXRjaApAQCAtMCwwICsxLDIzIEBACitPUFRJT05BTAorU1lOT1BTSVMKKyAgICAgICAgbWl4ZWQgZGJfZmV0Y2goaW50IGhhbmRsZSkKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEhvbGUgX2VpbmVfIFJlc3VsdGF0emVpbGUgZGVyIGxldHp0ZW4gU1FMLUFrdGlvbiBmdWVyIFZlcmJpbmR1bmcKKyAgICAgICAgPGhhbmRsZT4uIFNpbmQga2VpbmUgd2VpdGVyZW4gWmVpbGVuIHZlcmZ1ZWdiYXIsIHdpcmQgMAorICAgICAgICB6dXJ1ZWNrZ2VnZWJlbi4KKworICAgICAgICBEaWUgRnVua3Rpb24gaXN0IG51ciB2ZXJmdWVnYmFyIHdlbm4gZGVyIERyaXZlciBtaXQKKyAgICAgICAgbXlTUUwtVW50ZXJzdHVldHp1bmcgY29tcGlsaWVydCB3dXJkZS4gSW4gZGllc2VtIEZhbGwgaXN0IGRhcyBNYWtybworICAgICAgICBfX01ZU1FMX18gZGVmaW5pZXJ0LgorCisgICAgICAgIERpZSBFZnVuIGlzdCBwcml2aWxlZ2llcnQgYWxzICgibXlzcWwiLCAiZGJfZmV0Y2giKS4KKworR0VTQ0hJQ0hURQorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuOS4KKyAgICAgICAgTERNdWQgMy4yLjExIG1hY2h0ZSBkaWUgRWZ1biBwcml2aWxlZ2llcnQuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgZGJfYWZmZWN0ZWRfcm93cyhFKSwgZGJfY29udl9zdHJpbmcoRSksIGRiX2Nsb3NlKEUpLCBkYl9jb2xkZWZzKEUpLAorICAgICAgICBkYl9jb25uZWN0KEUpLCBkYl9lcnJvcihFKSwgZGJfZXhlYyhFKSwgZGJfaGFuZGxlcyhFKSwgZGJfaW5zZXJ0X2lkKEUpLAorICAgICAgICBteXNxbChDKSwgcHJpdmlsZWdlX3Zpb2xhdGlvbihNKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vZGJfaGFuZGxlcyBiL2RvYy9lZnVuL2RiX2hhbmRsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzMDRiNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2RiX2hhbmRsZXMKQEAgLTAsMCArMSwyNCBAQAorT1BUSU9OQUwKK1NZTk9QU0lTCisgICAgICAgIGludCAqZGJfaGFuZGxlcygpCisKK0JFU0NIUkVJQlVORworICAgICAgICBSZXN1bHQgaXN0IGVpbiBBcnJheSBtaXQgYWxsZW4gYWt0aXZlbiBWZXJiaW5kdW5nc2hhbmRsZXMgenVtCisgICAgICAgIFNRTC1TZXJ2ZXIuIERhcyBBcnJheSBpc3QgbmFjaCBkZXIgWmVpdCBkZXIgbGV0enRlbiBBa3Rpb24gc29ydGllcnQ6CisgICAgICAgIGRhcyB6dWxldHp0IGdlbnV0enRlIEhhbmRsZSBrb21tdCBhbiBlcnN0ZXIgU3RlbGxlLiBTaW5kIGtlaW5lCisgICAgICAgIFZlcmJpbmR1bmdlbiBha3RpdiwgaXN0IGRhcyBBcnJheSBsZWVyLgorCisgICAgICAgIERpZSBGdW5rdGlvbiBpc3QgbnVyIHZlcmZ1ZWdiYXIgd2VubiBkZXIgRHJpdmVyIG1pdAorICAgICAgICBteVNRTC1VbnRlcnN0dWV0enVuZyBjb21waWxpZXJ0IHd1cmRlLiBJbiBkaWVzZW0gRmFsbCBpc3QgZGFzIE1ha3JvCisgICAgICAgIF9fTVlTUUxfXyBkZWZpbmllcnQuCisKKyAgICAgICAgRGllIEVmdW4gaXN0IHByaXZpbGVnaWVydCBhbHMgKCJteXNxbCIsICJkYl9oYW5kbGVzIikuCisKK0dFU0NISUNIVEUKKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjkuCisgICAgICAgIExETXVkIDMuMi4xMSBtYWNodGUgZGllIEVmdW4gcHJpdmlsZWdpZXJ0LgorCitTSUVIRSBBVUNICisgICAgICAgIGRiX2FmZmVjdGVkX3Jvd3MoRSksIGRiX2NvbnZfc3RyaW5nKEUpLCBkYl9jbG9zZShFKSwgZGJfY29sZGVmcyhFKSwKKyAgICAgICAgZGJfY29ubmVjdChFKSwgZGJfZXJyb3IoRSksIGRiX2V4ZWMoRSksIGRiX2ZldGNoKEUpLCBkYl9pbnNlcnRfaWQoRSksCisgICAgICAgIG15c3FsKEMpLCBwcml2aWxlZ2VfdmlvbGF0aW9uKE0pCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9kYl9pbnNlcnRfaWQgYi9kb2MvZWZ1bi9kYl9pbnNlcnRfaWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlMmExNwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2RiX2luc2VydF9pZApAQCAtMCwwICsxLDIzIEBACitPUFRJT05BTAorU1lOT1BTSVMKKyAgICAgICAgaW50IGRiX2luc2VydF9pZCAoaW50IGhhbmRsZSkKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIE5hY2ggZGVtIEVpbmZ1ZWdlbiBlaW5lciBaZWlsZSBpbiBlaW5lIFRhYmVsbGUgbWl0IGVpbmVtCisgICAgICAgIEFVVE9fSU5DUkVNRU5ULUZlbGQsIGRpZXNlIEVmdW4ga2FubiBkYXp1IGJlbnV0enQgd2VyZGVuIGRlbiBuZXVlbgorICAgICAgICBXZXJ0IGRpZXNlcyBGZWxkZXMgenVydWVja3p1Z2ViZW4uCisKKyAgICAgICAgRGllIEZ1bmt0aW9uIGlzdCBudXIgdmVyZnVlZ2JhciB3ZW5uIGRlciBEcml2ZXIgbWl0CisgICAgICAgIG15U1FMLVVudGVyc3R1ZXR6dW5nIGNvbXBpbGllcnQgd3VyZGUuIEluIGRpZXNlbSBGYWxsIGlzdCBkYXMgTWFrcm8KKyAgICAgICAgX19NWVNRTF9fIGRlZmluaWVydC4KKworICAgICAgICBEaWUgRWZ1biBpc3QgcHJpdmlsZWdpZXJ0IGFscyAoIm15c3FsIiwgImRiX2luc2VydF9pZCIpLgorCitHRVNDSElDSFRFCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi45LgorICAgICAgICBMRE11ZCAzLjIuMTEgbWFjaHRlIGRpZSBFZnVuIHByaXZpbGVnaWVydC4KKworU0lFSEUgQVVDSAorICAgICAgICBkYl9hZmZlY3RlZF9yb3dzKEUpLCBkYl9jb252X3N0cmluZyhFKSwgZGJfY2xvc2UoRSksIGRiX2NvbGRlZnMoRSksCisgICAgICAgIGRiX2Nvbm5lY3QoRSksIGRiX2Vycm9yKEUpLCBkYl9leGVjKEUpLCBkYl9mZXRjaChFKSwgZGJfaGFuZGxlcyhFKSwKKyAgICAgICAgbXlzcWwoQyksIHByaXZpbGVnZV92aW9sYXRpb24oTSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2RlYnVnX21lc3NhZ2UgYi9kb2MvZWZ1bi9kZWJ1Z19tZXNzYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZTc1ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9kZWJ1Z19tZXNzYWdlCkBAIC0wLDAgKzEsMzYgQEAKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxzeXMvZGVidWdfbWVzc2FnZS5oPgorCisgICAgICAgIHZvaWQgZGVidWdfbWVzc2FnZShzdHJpbmcgdGV4dCk7CisgICAgICAgIHZvaWQgZGVidWdfbWVzc2FnZShzdHJpbmcgdGV4dCwgaW50IGZsYWdzKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEdpYnQgPHRleHQ+IGFuIGRpZSBBdXNnYWVuZ2Ugc3Rkb3V0IHVuZCBzdGRlcnIgc293aWUgYW4gZGllIERhdGVpCisgICAgICAgIDxob3N0Pi5kZWJ1Zy5sb2csIG9kZXIgYW4gZWluZSBiZWxpZWJpZ2UgS29tYmluYXRpb24gZGllc2VyIGRyZWkuCisKKyAgICAgICAgRGFzIEFyZ3VtZW50IDxmbGFnPiBiZXplaWNobmV0IGR1cmNoIGVpbmUgS29tYmluYXRpb24gdm9uIEJpdGZsYWdzIGRhcworICAgICAgICBaaWVsIHVuZCBkaWUgQXJ0LCBpbiBkZXIgZGFzIFJlc3VsdGF0IGdlc2NocmllYmVuIHdpcmQuCisKKyAgICAgICAgRGllIFppZWwtRmxhZ3Mgc2luZDogRE1TR19TVERPVVQsIERNU0dfU1RERVJSIHVuZCBETVNfTE9HRklMRS4gV2lyZAorICAgICAgICB6dXNhZXR6bGljaCBkYXMgRmxhZyBETVNHX1NUQU1QIGdlc2V0enQsIGVyaGFlbHQgamVkZXIgRWludHJhZyBlaW5lbgorICAgICAgICBaZWl0c3RlbXBlbCAoVGltZXN0YW1wKSBpbSBGb3JtYXQgJ1lZWVkuTU0uREQgSEg6TU06U1MgJy4KKworICAgICAgICBXZW5uIDxmbGFncz4gMCBpc3QsIHdlZ2dlbGFzc2VuIHdpcmQgb2RlciBrZWluIFppZWwtRmxhZyBlbnRoYWVsdCwKKyAgICAgICAgd2lyZCA8dGV4dD4gc3RhbmRhcmRtYWVzc2lnIGFuIHN0ZG91dCB1bmQgaW5zIExvZ2ZpbGUgYXVzZ2VnZWJlbi4KKworQkVJU1BJRUwKKyAgICAgICAgZGVidWdfbWVzc2FnZSgiRGllc2VyIFRleHQgZ2VodCBhbiBzdGRvdXQgdW5kIGlucyBMb2dmaWxlLlxuIik7CisgICAgICAgIGRlYnVnX21lc3NhZ2UoIkRpZXMgZ2VodCBhbiBzdGRlcnIuXG4iLCBETVNHX1NUREVSUik7CisgICAgICAgIGRlYnVnX21lc3NhZ2UoIkRpZXMgZ2VodCBhbiBzdGRvdXQgdW5kIHN0ZGVyci5cbiIsIERNU0dfU1RET1VUCisgICAgICAgICAgICB8IERNU0dfU1RERVJSKTsKKyAgICAgICAgZGVidWdfbWVzc2FnZSgiRGllcyBnZWh0IGFuIHN0ZG91dCB1bmQgaW5zIExvZ2ZpbGUsIG1pdCBUaW1lc3RhbXAuXG4iLAorICAgICAgICAgICAgRE1TR19TVEFNUCk7CisgICAgICAgIGRlYnVnX21lc3NhZ2UoIkRpZSBnZWh0IGFuIHN0ZG91dCwgbWl0IHZvcmFuZ2VzdGVsbHRlbSBUaW1lc3RhbXAuXG4iLAorICAgICAgICAgICAgRE1TR19TVERPVVQgfCBETVNHX1NUQU1QKTsKKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gMy4yLjFAMzQuCisgICAgICAgIExETXVkIDMuMi45IGZ1ZWhydGUgZGFzIEFyZ3VtZW50IDxmbGFncz4gZWluLgorCitTSUVIRSBBVUNICisgICAgICAgIGxhc3RfaW5zdHJ1Y3Rpb25zKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9kZWVwX2NvcHkgYi9kb2MvZWZ1bi9kZWVwX2NvcHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNlZjlhOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2RlZXBfY29weQpAQCAtMCwwICsxLDI3IEBACitTWU5PUFNJUworICAgICAgICBtaXhlZCBkZWVwX2NvcHkobWl4ZWQgYXJnKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEVyemV1Z3QgZWluZSBlY2h0ZSBLb3BpZSB2b24gPGFyZz4gdW5kIGxpZWZlcnQgZGllc2UgenVydWVjay4gRnVlcgorICAgICAgICBBcnJheXMgdW5kIE1hcHBpbmdzIGJlZGV1dGV0IGRpZXMsIGRhc3MgZWluIG5ldWVzIEFycmF5IG9kZXIgTWFwcGluZworICAgICAgICBlcnpldWd0IHdpcmQsIGRhcyBleGFrdGUgS29waWVuIGRlciBFaW50cmFlZ2UgZGVzIE9yaWdpbmFscyBlbnRoYWVsdC4KKyAgICAgICAgRWluZ2ViZXR0ZXRlIEFycmF5cyB1bmQgTWFwcGluZ3Mgd2VyZGVuIGViZW5zbyBlY2h0IGtvcGllcnQuCisKKyAgICAgICAgRnVlciBhbmRlcmUgVHlwZW4gYWxzIE1hcHBpbmdzIHVuZCBBcnJheXMgYmV3aXJrdCBkaWVzZSBGdW5rdGlvbgorICAgICAgICBuaWNodHMuCisKKyAgICAgICAgV2VubiBpbSBEcml2ZXIgRFlOQU1JQ19DT1NUIGRlZmluaWVydCBpc3QsIHphZWhsdCBqZWRlcyBlaW5nZWJldHRldGUKKyAgICAgICAgTWFwcGluZyBvZGVyIEFycmF5IHp1IGRlbiBFdmFsdWF0aW9uc2tvc3RlbiBzb3dvaGwgaW4gZGVyIEdyb2Vzc2UgYWxzCisgICAgICAgIGF1Y2ggaW4gZGVyIEVpbmJldHR1bmdzdGllZmUuCisKK0JFSVNQSUVMCisgICAgICAgIG1peGVkICphLCAqYjsKKyAgICAgICAgYSA9ICh7IDEsICh7IDIxLCAyMiB9KSB9KTsKKyAgICAgICAgYiA9IGRlZXBfY29weShhKTsKKyAgICAgICAgYVswXSA9IC0xOyBhWzFdWzBdID0gLTIxOworICAgICAgICAgLS0+IGEgaXN0IGpldHp0ICAgKHsgLTEsICh7IC0yMSwgMjIgfSkgfSkKKyAgICAgICAgICAgICBiIGJsZWlidCAgICAgICh7ICAxLCAoeyAgMjEsIDIyIH0pIH0pCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi42LgorICAgICAgICBMRE11ZCAzLjIuOSBmdWVndGUgZGllIGR5bmFtaXNjaGVuIEtvc3RlbiB6dXIgRWZ1biBoaW56dS4KZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2RlZXBfaW52ZW50b3J5IGIvZG9jL2VmdW4vZGVlcF9pbnZlbnRvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmNGM2NgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2RlZXBfaW52ZW50b3J5CkBAIC0wLDAgKzEsMzYgQEAKK1NZTk9QU0lTCisgICAgICAgICpvYmplY3QgZGVlcF9pbnZlbnRvcnkoKTsKKyAgICAgICAgKm9iamVjdCBkZWVwX2ludmVudG9yeShvYmplY3Qgb2IpOworICAgICAgICBvYmplY3QgKmRlZXBfaW52ZW50b3J5KG9iamVjdCBvYiwgaW50IGRlcHRoKQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgR2lidCBlaW4gQXJyYXkgZGVyIE9iamVrdGUgenVydWVjaywgZGllIGluIDxvYmo+IGVudGhhbHRlbiBzaW5kLgorICAgICAgICBXZW5uIDxvYmo+IG5pY2h0IGFuZ2VnZWJlbiB3aXJkLCB3aXJkIHN0YW5kYXJkbWFlc3NpZyB0aGlzX29iamVjdCgpCisgICAgICAgIHZlcndlbmRldC4gRWJlbnNvIHdlcmRlbiBhbGxlIE9iamVrdGUgYW5nZWdlYmVuLCBkaWUgc2ljaCBpbSBJbnZlbnRvcnkKKyAgICAgICAgZGVyIGluIDxvYmo+IGVudGhhbHRlbmVuIE9iamVrdGUgYmVmaW5kZW4uIERpZSBTdWNoZSB2ZXJsYWV1ZnQKKyAgICAgICAgcmVrdXJzaXYgYWJzdGVpZ2VuZC4KKworICAgICAgICBJc3QgPGRlcHRoPiBhbmdlZ2ViZW4gdW5kIHVuZ2xlaWNoIDAsIGlzdCBkYXMgUmVzdWx0YXQgd2llIGZvbGd0CisgICAgICAgIGdlZmlsdGVydDoKKyAgICAgICAgICA8ZGVwdGg+ID4gMDogTnVyIGRpZSBPYmpla3RlIGluIGRlbiBlcnN0ZW4gPGRlcHRoPiBFYmVuZW4KKyAgICAgICAgICAgICAgICAgICAgICAgd2VyZGVuIHp1cnVlY2tnZWdlYmVuLgorICAgICAgICAgIDxkZXB0aD4gPCAwOiBOdXIgZGllIE9iamVrdGUgaW4gZGVyIC08ZGVwdGg+dGVuIEViZW5lIHdlcmRlbgorICAgICAgICAgICAgICAgICAgICAgICB6dXJ1ZWNrZ2VnZWJlbi4KKworQkVJU1BJRUwKKyAgICAgICAgb2IKKyAgICAgICAgKy0gb2IxCisgICAgICAgICstIG9iMgorICAgICAgICB8ICAgKy0gb2IyMQorICAgICAgICB8ICBvYjMKKyAgICAgICAgfCAgICstIG9iMzEKKyAgICAgICAgKy0gb2I0CisKKworICAgICAgICBkZWVwX2ludmVudG9yeShvYikgPT4gKHtvYjEsIG9iMiwgb2IzLCBvYjQsIG9iMjEsIG9iMzF9KQorICAgICAgICBkZWVwX2ludmVudG9yeShvYiwgMSkgPT4gKHtvYjEsIG9iMiwgb2IzLCBvYjR9KQorICAgICAgICBkZWVwX2ludmVudG9yeShvYiwgMikgPT4gKHtvYjEsIG9iMiwgb2IzLCBvYjQsIG9iMjEsIG9iMzF9KQorICAgICAgICBkZWVwX2ludmVudG9yeShvYiwgLTIpID0+ICh7b2IyMSwgb2IzMX0pCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgZmlyc3RfaW52ZW50b3J5KEUpLCBuZXh0X2ludmVudG9yeShFKSwgYWxsX2ludmVudG9yeShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vZGVzdHJ1Y3QgYi9kb2MvZWZ1bi9kZXN0cnVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjRkZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZGVzdHJ1Y3QKQEAgLTAsMCArMSw0MyBAQAorU1lOT1BTSVMKKyAgICAgICAgdm9pZCBkZXN0cnVjdChvYmplY3Qgb2IpCisKK0JFU0NIUkVJQlVORworICAgICAgICBaZXJzdG9lcnQgdW5kIGVudGZlcm50IGRhcyBPYmpla3Qgb2IuIElzdCBvYiA9PSAwIChvYiB3dXJkZSBzY2hvbgorICAgICAgICB6ZXJzdG9lcnQpLCBzbyBwYXNzaWVydCBuaWNodHMuIE5hY2ggZGVtIEF1ZnJ1ZiB2b24gZGVzdHJ1Y3QoKQorICAgICAgICBleGlzdGllcmVuIGtlaW5lIGdsb2JhbGVuIFZhcmlhYmxlbiBtZWhyLCBzb25kZXJuIG51ciBub2NoIGxva2FsZQorICAgICAgICBWYXJpYWJsZW4gdW5kIEFyZ3VtZW50ZS4KKworICAgICAgICBXZW5uIHNpY2ggZWluIE9iamVrdCBzZWxic3QgemVyc3RvZXJ0LCB3aXJkIGRpZSBBdXNmdWVocnVuZyBuaWNodAorICAgICAgICBzb2ZvcnQgYWJnZWJyb2NoZW4uIFdpcmQgZGllIEVmdW4gdGhpc19vYmplY3QoKSBhdWZnZXJ1ZmVuLCBzbworICAgICAgICBsaWVmZXJ0IGRpZXNlIDAgenVydWVjay4KKworICAgICAgICBEaWUgbWVpc3RlbiBNdWRsaWJzIG1vZWdlbiBlcyBuaWNodCwgd2VubiBhbmRlcmUgT2JqZWt0ZSBtaXR0ZWxzCisgICAgICAgIGRlc3RydWN0KCkgaW5zIERhdGVuLU5pcndhbmEgZ2VzY2hpY2t0IHdlcmRlbi4gU3RhdHRkZXNzZW4gZXJ3YXJ0ZW4KKyAgICAgICAgc2llIGRlbiBBdWZydWYgZWluZXIgc3BlemllbGxlbiBMZnVuIGltIHp1IHplcnN0b2VyZW5kZW4gT2JqZWt0LAorICAgICAgICB3ZWxjaGUgbm9ybWFsZXJ3ZWlzZSByZW1vdmUoKSBoZWlzc3QuIERhbWl0IGthbm4gZGFzIHp1CisgICAgICAgIHplcnN0b2VyZW5kZSBPYmpla3Qgbm9jaCBhYnNjaGxpZXNzZW5kZSBBcmJlaXRlbiBpbSBadXNhbW1lbmhhbmcKKyAgICAgICAgbWl0IHNlaW5lbSBBYmxlYmVuIGVybGVkaWdlbiwgd2llIHouIEIuIGRpZSBBbnBhc3N1bmcgZGVzIEdld2ljaHRlcworICAgICAgICBzZWluZXIgVW1nZWJ1bmcgZXRjLiBwcC4KKworICAgICAgICBEZXIgSW50ZXJwcmV0ZXIgemVyc3RvZXJ0IGRhcyBPYmpla3QgbmljaHQgc29mb3J0LCBzb25kZXJuIGVyCisgICAgICAgIG1hcmtpZXJ0IGVzIGFscyB6ZXJzdG9lcnQsIGVudGZlcm50IGVzIHZvbiBkZXIgTGlzdGUsIGRpZSBhbGxlCisgICAgICAgIE9iamVrdGUgZW50aGFlbHQsIHVuZCBmdWVndCBlcyB6dSBkZXIgTGlzdGUgenUgemVyc3RvZXJlbmRlbgorICAgICAgICBPYmpla3RlIGhpbnp1LiBEaWUgdGF0c2FlY2hsaWNoZSBaZXJzdG9lcnVuZyBnZXNjaGllaHQgZXJzdCBkYW5uLAorICAgICAgICB3ZW5uIGtlaW5lIFJlZmVyZW56ZW4gbWVociBhdWYgZGFzIE9iamVrdCBleGlzdGllcmVuLiBEZXNoYWxiIGlzdAorICAgICAgICBlcyBtb2VnbGljaCwgZGFzcyBlaW4gT2JqZWt0IG5vY2ggbGFuZ2UgbmFjaCBzZWluZXIgWmVyc3RvZXJ1bmcKKyAgICAgICAgU3BlaWNoZXIgYmVsZWd0LCBvYndvaGwgZXMgdm9uIGF1c3NlcmhhbGIgbmljaHQgbWVociBnZWZ1bmRlbiB3aXJkLgorCitCRUlTUElFTAorICAgICAgICBvYi0+cmVtb3ZlKCk7CisgICAgICAgIGlmKG9iKSAgICAgICAgLy8gZXMgZXhpc3RpZXJ0IG5vY2gsIHZpZWxsZWljaHQgaXN0IGRpZSBMZnVuCisgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlKCkgbmljaHQgZGVmaW5pZXJ0PworICAgICAgICAgICAgZGVzdHJ1Y3Qob2IpOworCisgICAgICAgIERpZXMgaXN0IGRpZSBTdGFuZGFyZC1NZXRob2RlLCBlaW4gT2JqZWt0IHp1IHplcnN0b2VyZW4sIGlobSBhYmVyCisgICAgICAgIHZvcmhlciBub2NoIGRpZSBDaGFuY2UgenUgZ2ViZW4sIGVzIHNlbGJlciB6dSB0dW4uCisKK0FFTkRFUlVOR0VOCisgICAgICAgIExETXVkIDMuMi43OiAwICh6ZXJzdG9lcnRlIE9iamVrdCkgYWxzIEFyZ3VtZW50IGFubmVobWVuLgorCitTSUVIRSBBVUNICisgICAgICAgIGNsb25lX29iamVjdChFKSwgcmVtb3ZlKEEpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9kaXNhYmxlX2NvbW1hbmRzIGIvZG9jL2VmdW4vZGlzYWJsZV9jb21tYW5kcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjY3NTdlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZGlzYWJsZV9jb21tYW5kcwpAQCAtMCwwICsxLDEwIEBACitTWU5PUFNJUworICAgICAgICB2b2lkIGRpc2FibGVfY29tbWFuZHMoKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIFZlcmJpZXRldCBkZW0gT2JqZWt0LCBLb21tYW5kaSB6dSB2ZXJ3ZW5kZW4sIGRpZSBub3JtYWxlcndlaXNlIFVzZXJuCisgICAgICAgIHp1Z2FlbmdsaWNoIHNpbmQuIERpZXNlIEZ1bmt0aW9uIGlzdCBkYXMgR2VnZW50ZWlsIHZvbgorICAgICAgICBlbmFibGVfY29tbWFuZHMoKS4KKworU0lFSEUgQVVDSAorICAgICAgICBlbmFibGVfY29tbWFuZHMoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2RyaXZlcl9pbmZvIGIvZG9jL2VmdW4vZHJpdmVyX2luZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlYWE2NgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2RyaXZlcl9pbmZvCkBAIC0wLDAgKzEsNjg1IEBACitTWU5PUFNJUworICAgICAgICAjaW5jbHVkZSA8ZHJpdmVyX2luZm8uaD4KKworICAgICAgICBtaXhlZCBkcml2ZXJfaW5mbyhpbnQgd2hhdCkKKworREVTQ1JJUFRJT04KKyAgICAgICAgUmV0dXJucyBzb21lIGludGVybmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcml2ZXIuCisgICAgICAgIFRoZSBhcmd1bWVudCA8d2hhdD4gZGV0ZXJtaW5lcyB3aGljaCBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZC4KKworICAgICAgICBJdCBjYW4gYmUgZWl0aGVyIGEgY29uZmlndXJhdGlvbiBvcHRpb24gYXMgZ2l2ZW4gdG8KKyAgICAgICAgY29uZmlndXJlX2RyaXZlcigpIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKKworCisgICAgICAgIERyaXZlciBFbnZpcm9ubWVudDoKKworICAgICAgICA8d2hhdD4gPT0gRElfQk9PVF9USU1FOgorICAgICAgICAgIFRoZSB0aW1lKCkgd2hlbiB0aGUgZHJpdmVyIHdhcyBzdGFydGVkLgorCisKKworICAgICAgICBMUEMgUnVudGltZSBzdGF0dXM6CisKKyAgICAgICAgPHdoYXQ+ID09IERJX0NVUlJFTlRfUlVOVElNRV9MSU1JVFM6CisgICAgICAgICAgUmV0dXJuIGFuIGFycmF5IHdpdGggdGhlIGN1cnJlbnQgcnVudGltZSBsaW1pdHMuCisgICAgICAgICAgVGhlIGVudHJpZXMgaW4gdGhlIHJldHVybmVkIGFycmF5IGFyZToKKworICAgICAgICAgICAgaW50W0xJTUlUX0VWQUxdOiAgICAgICAgIHRoZSBtYXggbnVtYmVyIG9mIGV2YWwgY29zdHMKKyAgICAgICAgICAgIGludFtMSU1JVF9BUlJBWV06ICAgICAgICB0aGUgbWF4IG51bWJlciBvZiBhcnJheSBlbnRyaWVzCisgICAgICAgICAgICBpbnRbTElNSVRfTUFQUElOR19TSVpFXTogdGhlIG1heCBudW1iZXIgb2YgbWFwcGluZyB2YWx1ZXMKKyAgICAgICAgICAgIGludFtMSU1JVF9NQVBQSU5HX0tFWVNdOiB0aGUgbWF4IG51bWJlciBvZiBtYXBwaW5nIGVudHJpZXMKKyAgICAgICAgICAgICAgIChMSU1JVF9NQVBQSU5HIGlzIGFuIGFsaWFzIGZvciBMSU1JVF9NQVBQSU5HX0tFWVMpCisgICAgICAgICAgICBpbnRbTElNSVRfQllURV06ICAgICAgICAgdGhlIG1heCBudW1iZXIgb2YgYnl0ZXMgaGFuZGxlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lIHJlYWRfYnl0ZXMoKS93cml0ZV9ieXRlcygpIGNhbGwuCisgICAgICAgICAgICBpbnRbTElNSVRfRklMRV06ICAgICAgICAgdGhlIG1heCBudW1iZXIgb2YgYnl0ZXMgaGFuZGxlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lIHJlYWRfZmlsZSgpL3dyaXRlX2ZpbGUoKSBjYWxsLgorICAgICAgICAgICAgaW50W0xJTUlUX0NBTExPVVRTXTogICAgIHRoZSBudW1iZXIgb2YgY2FsbG91dHMgYXQgb25lIHRpbWUuCisgICAgICAgICAgICBpbnRbTElNSVRfQ09TVF06ICAgICAgICAgaG93IHRvIGFjY291bnQgdGhlIGN1cnJlbnQgY29zdC4KKyAgICAgICAgICAgIGludFtMSU1JVF9NRU1ST1ldOiAgICAgICB0aGUgbWF4LiBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2FuIGJlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hZGRpdGlvbmFsbHlfIGFsbG9jYXRlZC91c2VkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wZXIgdG9wLWxldmVsIGV4ZWN1dGlvbiB0aHJlYWRfCisKKyAgICAgICAgICBGb3IgYWxsIGxpbWl0cyBleGNlcHQgTElNSVRfQ09TVCBhIGxpbWl0IG9mICcwJyBha2EgTElNSVRfVU5MSU1JVEVECisgICAgICAgICAgbWVhbnMgJ25vIGxpbWl0Jy4KKworICAgICAgICAgIFRoZSB2YWx1ZSBmb3IgTElNSVRfQ09TVCBoYXMgdGhlc2UgbWVhbmluZ3M6CisKKyAgICAgICAgICAgIHZhbHVlID4gMDogdGhlIGV4ZWN1dGlvbiB3aWxsIGNvc3QgbWluaW11bSg8dmFsdWU+LCBhY3R1YWwgY29zdCkgLgorICAgICAgICAgICAgdmFsdWUgPSAwOiBpZiB0aGUgY3VycmVudCBMSU1JVF9FVkFMIGlzIGxhcmdlciB0aGFuIHRoZSBjYWxsaW5nCisgICAgICAgICAgICAgICAgICAgICAgIExJTUlUX0VWQUwsIHRoZSBldmFsdWF0aW9uIHdpbGwgY29zdCBvbmx5IDEwOyBvdGhlcndpc2UKKyAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZ1bGwgY29zdCB3aWxsIGJlIGFjY291bnRlZC4KKyAgICAgICAgICAgIHZhbHVlIDwgMDogKC12YWx1ZSklIG9mIHRoZSBjdXJyZW50IGV2YWx1YXRpb24gY29zdCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRlZDsgLTEwMCBvYnZpb3VzbHkgbWVhbnMgJ2Z1bGwgY29zdCcuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX0VWQUxfTlVNQkVSOgorICAgICAgICAgIFJldHVybiB0aGUgY3VycmVudCBldmFsdWF0aW9uIG51bWJlci4KKyAgICAgICAgICBUaGUgbnVtYmVyIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIHRvcC1sZXZlbCBjYWxsLiBUb3AtbGV2ZWwKKyAgICAgICAgICBjYWxscyBhcmUgaW5pdGlhdGVkIGJ5IHRoZSBkcml2ZXIsIHVzdWFsbHkgaW4gcmVhY3Rpb24gdG8gYW4KKyAgICAgICAgICBleHRlcm5hbCBldmVudDoKKyAgICAgICAgICAgICAgLSBjb21tYW5kcyAoYWRkZWQgYnkgYWRkX2FjdGlvbikKKyAgICAgICAgICAgICAgLSBoZWFydF9iZWF0LCByZXNldCwgY2xlYW5fdXAKKyAgICAgICAgICAgICAgLSBjYWxscyBmcm9tIGNhbGxfb3V0IG9yIGlucHV0X3RvCisgICAgICAgICAgICAgIC0gbWFzdGVyIGFwcGxpZXMgdHJpZ2dlcmVkIGJ5IGV4dGVybmFsIGV2ZW50cworICAgICAgICAgICAgICAtIGNhbGxzIG9mIGRyaXZlciBob29rcyBpbiByZWFjdGlvbiB0byBleHRlcm5hbCBldmVudHMKKyAgICAgICAgICAgICAgLSBzZW5kX2VycSBjYWxsYmFja3MKKyAgICAgICAgICAgICAgLSBsb2dvbiBpbiBpbnRlcmFjdGl2ZXMKKworICAgICAgICAgIFRoZSBudW1iZXIgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IGNhc2VzIHdoZXJlIHRoZSBzYW1lIGNvZGUgaXMKKyAgICAgICAgICBleGVjdXRlZCB0d2ljZSBpbiB0aGUgc2FtZSB0b3AgbGV2ZWwgZXZhbHVhdGlvbiAoc2F5LCBoZWFydF9iZWF0KSwKKyAgICAgICAgICBhbmQgYWxzbyBmb3IgdGltZSBzdGFtcHMgZm9yIG9yZGVyaW5nIHNvbWUgZXZlbnRzLgorCisgICAgICAgICAgUGxlYXNlIG5vdGUgdGhhdCB0aGUgY291bnRlciBtYXkgb3ZlcmZsb3csIGVzcGVjaWFsbHkgb24gMzIgYml0CisgICAgICAgICAgc3lzdGVtcy4gQXMgYSByZXN1bHQsIGl0IGNhbiBhbHNvIGJlIG5lZ2F0aXZlLgorCisKKworICAgICAgICBOZXR3b3JrIGNvbmZpZ3VyYXRpb246CisKKyAgICAgICAgPHdoYXQ+ID09IERJX01VRF9QT1JUUzoKKyAgICAgICAgICBSZXR1cm5zIGFuIGFycmF5IHdpdGggYWxsIG9wZW4gcG9ydHMsIHdoaWNoIHRoZSBkcml2ZXIKKyAgICAgICAgICBsaXN0ZW5zIGZvciBwbGF5ZXIgY29ubmVjdGlvbnMgb24uCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1VEUF9QT1JUOgorICAgICAgICAgIFJldHVybnMgdGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBVRFAgc29ja2V0LgorCisKKworICAgICAgICBNZW1vcnkgbWFuYWdlbWVudDoKKworICAgICAgICA8d2hhdD4gPT0gRElfTUVNT1JZX1JFU0VSVkVfVVNFUjoKKyAgICAgICAgICBDdXJyZW50IHNpemUgb2YgdGhlIHVzZXIgbWVtb3J5IHJlc2VydmUuCisgICAgICAgICAgVGhlIHVzZXIgbWVtb3J5IHJlc2VydmUgaXMgYWxsb2NhdGVkIGF0IHN0YXJ0dXAgYW5kIGlzIHVzZWQKKyAgICAgICAgICB3aGVuIHRoZSBkcml2ZXIgcnVucyBvdXQgb2YgbWVtb3J5LgorCisgICAgICAgIDx3aGF0PiA9PSBESV9NRU1PUllfUkVTRVJWRV9NQVNURVI6CisgICAgICAgICAgQ3VycmVudCBzaXplIG9mIHRoZSBtYXN0ZXIgbWVtb3J5IHJlc2VydmUuCisgICAgICAgICAgVGhlIG1hc3RlciBtZW1vcnkgcmVzZXJ2ZSBpcyBhbGxvY2F0ZWQgYXQgc3RhcnR1cCBhbmQgaXMgdXNlZAorICAgICAgICAgIHdoZW4gdGhlIGRyaXZlciBydW5zIG91dCBvZiBtZW1vcnkgd2hpbGUgZXhlY3V0aW5nIG1hc3RlcgorICAgICAgICAgIGNvZGUuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX01FTU9SWV9SRVNFUlZFX1NZU1RFTToKKyAgICAgICAgICBDdXJyZW50IHNpemUgb2YgdGhlIHN5c3RlbSBtZW1vcnkgcmVzZXJ2ZS4KKyAgICAgICAgICBUaGUgc3lzdGVtIG1lbW9yeSByZXNlcnZlIGlzIGFsbG9jYXRlZCBhdCBzdGFydHVwIGFuZCBpcyB1c2VkCisgICAgICAgICAgd2hlbiB0aGUgZHJpdmVyIHJ1bnMgb3V0IG9mIG1lbW9yeSB3aGlsZSBleGVjdXRpbmcgaW50ZXJuYWwKKyAgICAgICAgICBvcGVyYXRpb25zLgorCisKKworICAgICAgICBUcmFjZXM6CisKKyAgICAgICAgPHdoYXQ+ID09IERJX1RSQUNFX0NVUlJFTlQ6CisgICAgICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBzdGFjayB0cmFjZSBpbiBhcnJheSBmb3JtLgorCisgICAgICAgICAgSWYgdGhlIGFycmF5IGhhcyBtb3JlIHRoYW4gb25lIGVudHJpZXMsIHRoZSBmaXJzdCBlbnRyeSBpcyAwIG9yCisgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIG9iamVjdCB3aXRoIHRoZSBoZWFydGJlYXQgd2hpY2ggc3RhcnRlZCB0aGUKKyAgICAgICAgICBjdXJyZW50IHRocmVhZDsgYWxsIGZvbGxvd2luZyBlbnRyaWVzIGRlc2NyaWJlIHRoZSBjYWxsIHN0YWNrCisgICAgICAgICAgc3RhcnRpbmcgd2l0aCB0aGUgdG9wbW9zdCBmdW5jdGlvbiBjYWxsZWQuCisKKyAgICAgICAgICBBbGwgY2FsbCBlbnRyaWVzIGFyZSBhcnJheXMgdGhlbXNlbHZlcyB3aXRoIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6CisKKyAgICAgICAgICAgICAgIGludFtUUkFDRV9UWVBFXTogVGhlIHR5cGUgb2YgdGhlIGNhbGwgZnJhbWU6CisgICAgICAgICAgICAgICAgICAgVFJBQ0VfVFlQRV9TWU1CT0wgKDApOiBhIGZ1bmN0aW9uIHN5bWJvbCAoc2hvdWxkbid0IGhhcHBlbikuCisgICAgICAgICAgICAgICAgICAgVFJBQ0VfVFlQRV9TRUZVTiAgKDEpOiBhIHNpbXVsLWVmdW4uCisgICAgICAgICAgICAgICAgICAgVFJBQ0VfVFlQRV9FRlVOICAgKDIpOiBhbiBlZnVuIGNsb3N1cmUuCisgICAgICAgICAgICAgICAgICAgVFJBQ0VfVFlQRV9MQU1CREEgKDMpOiBhIGxhbWJkYSBjbG9zdXJlLgorICAgICAgICAgICAgICAgICAgIFRSQUNFX1RZUEVfTEZVTiAgICg0KTogYSBub3JtYWwgbGZ1bi4KKworICAgICAgICAgICAgICAgbWl4ZWRbVFJBQ0VfTkFNRV06IFRoZSAnbmFtZScgb2YgdGhlIGNhbGxlZCBmcmFtZToKKyAgICAgICAgICAgICAgICAgICBfVFlQRV9FRlVOOiAgIGVpdGhlciB0aGUgbmFtZSBvZiB0aGUgZWZ1biwgb3IgdGhlIGNvZGUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnN0cnVjdGlvbiBmb3Igb3BlcmF0b3IgY2xvc3VyZXMKKyAgICAgICAgICAgICAgICAgICBfVFlQRV9MQU1CREE6IHRoZSBudW1lcmljIGxhbWJkYSBpZGVudGlmaWVyLgorICAgICAgICAgICAgICAgICAgIF9UWVBFX0xGVU46ICAgdGhlIG5hbWUgb2YgdGhlIGxmdW4uCisKKyAgICAgICAgICAgICAgIHN0cmluZ1tUUkFDRV9QUk9HUkFNXTogVGhlIChmaWxlKW5hbWUgb2YgdGhlIHByb2dyYW0gaG9sZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29kZS4KKworICAgICAgICAgICAgICAgc3RyaW5nW1RSQUNFX09CSkVDVF06ICBUaGUgbmFtZSBvZiB0aGUgb2JqZWN0IGZvciB3aGljaCB0aGUgY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgZXhlY3V0ZWQuCisgICAgICAgICAgICAgICBpbnRbVFJBQ0VfTE9DXToKKyAgICAgICAgICAgICAgICAgICBfVFlQRV9MQU1CREE6IGN1cnJlbnQgcHJvZ3JhbSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zdXJlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgX1RZUEVfTEZVTjogICB0aGUgbGluZSBudW1iZXIuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1RSQUNFX0NVUlJFTlRfREVQVEg6CisgICAgICAgICAgUmV0dXJuIHRoZSBjdXJyZW50IG51bWJlciBvZiBmcmFtZXMgb24gdGhlIGNvbnRyb2wgc3RhY2sKKyAgICAgICAgICAocmVjdXJzaW9uIGRlcHRoKS4KKworICAgICAgICA8d2hhdD4gPT0gRElfVFJBQ0VfQ1VSUkVOVF9BU19TVFJJTkc6CisgICAgICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBzdGFjayB0cmFjZSBhcyBhIHN0cmluZy4KKworICAgICAgICA8d2hhdD4gPT0gRElfVFJBQ0VfTEFTVF9FUlJPUjoKKyAgICAgICAgICBSZXR1cm5zIHRoZSBzdGFjayB0cmFjZSBvZiB0aGUgbGFzdCBlcnJvciBpbiBhcnJheSBmb3JtCisgICAgICAgICAgKHNhbWUgZm9ybWF0IGFzIERJX1RSQUNFX0NVUlJFTlQpLiBTdGFjayB0cmFjZXMgb2YgZXJyb3JzCisgICAgICAgICAgYmVmb3JlIHRoZSBsYXN0IEdDIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgYW55bW9yZS4KKworICAgICAgICA8d2hhdD4gPT0gRElfVFJBQ0VfTEFTVF9FUlJPUl9BU19TVFJJTkc6CisgICAgICAgICAgUmV0dXJucyB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGxhc3QgZXJyb3IgYXMgYSBzdHJpbmcuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1RSQUNFX0xBU1RfVU5DQVVHSFRfRVJST1I6CisgICAgICAgICAgUmV0dXJucyB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGxhc3QgdW5jYXVnaHQgZXJyb3IgaW4gYXJyYXkgZm9ybQorICAgICAgICAgIChzYW1lIGZvcm1hdCBhcyBESV9UUkFDRV9DVVJSRU5UKS4gU3RhY2sgdHJhY2VzIG9mIGVycm9ycworICAgICAgICAgIGJlZm9yZSB0aGUgbGFzdCBHQyBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGFueW1vcmUuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1RSQUNFX0xBU1RfVU5DQVVHSFRfRVJST1JfQVNfU1RSSU5HOgorICAgICAgICAgIFJldHVybnMgdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBsYXN0IHVuY2F1Z2h0IGVycm9yIGFzIGEgc3RyaW5nLgorCisKKworICAgICAgICBMUEMgUnVudGltZSBzdGF0aXN0aWNzOgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fRlVOQ1RJT05fTkFNRV9DQUxMUzoKKyAgICAgICAgICBOdW1iZXIgb2YgZnVuY3Rpb24gY2FsbHMgYnkgbmFtZSAobGlrZSBjYWxsX290aGVyKS4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX0ZVTkNUSU9OX05BTUVfQ0FMTF9ISVRTOgorICAgICAgICAgIEZ1bmN0aW9uIGNhbGxzIGJ5IG5hbWUgYXJlIGNhY2hlZCAodG8gYWNjZWxlcmF0ZQorICAgICAgICAgIGxvb2t1cCBvZiB0aGUgY29ycmVzcG9uZGluZyBwcm9ncmFtIGNvZGUpLgorICAgICAgICAgIFRoaXMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNhY2hlIGhpdHMuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9GVU5DVElPTl9OQU1FX0NBTExfTUlTU0VTOgorICAgICAgICAgIFRoZSBudW1iZXIgb2YgZnVuY3Rpb24gY2FsbCBjYWNoZSBtaXNzZXMuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9PQkpFQ1RTX0xBU1RfUFJPQ0VTU0VEOgorICAgICAgICAgIE51bWJlciBvZiBsaXN0ZWQgb2JqZWN0cyBwcm9jZXNzZWQgaW4gdGhlIGxhc3QgYmFja2VuZCBjeWNsZS4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX0hFQVJUQkVBVF9UT1RBTF9DWUNMRVM6CisgICAgICAgICAgVG90YWwgbnVtYmVyIG9mIGhlYXJ0X2JlYXRzIGN5Y2xlcyBzbyBmYXIuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9IRUFSVEJFQVRfQUNUSVZFX0NZQ0xFUzoKKyAgICAgICAgICBOdW1iZXIgb2YgYWN0aXZlIGhlYXJ0X2JlYXQgY3ljbGVzIGV4ZWN1dGVkIHNvIGZhcgorICAgICAgICAgIChpZS4gY3ljbGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBoZWFydF9iZWF0KCkgZnVuY3Rpb24KKyAgICAgICAgICB3YXMgY2FsbGVkKS4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX0hFQVJUQkVBVFNfTEFTVF9QUk9DRVNTRUQ6CisgICAgICAgICAgTnVtYmVyIG9mIGhlYXJ0X2JlYXRzIGNhbGxzIGluIHRoZSBsYXN0IGJhY2tlbmQgY3ljbGUKKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX1NUUklOR19UQUJMRV9TVFJJTkdTX0FEREVEOgorICAgICAgICAgIE51bWJlciBvZiBkaXN0aW5jdCBzdHJpbmdzIGFkZGVkIHRvIHRoZSBzdHJpbmcgdGFibGUgc28gZmFyLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fU1RSSU5HX1RBQkxFX1NUUklOR1NfUkVNT1ZFRDoKKyAgICAgICAgICBOdW1iZXIgb2YgZGlzdGluY3Qgc3RyaW5ncyByZW1vdmVkIGZyb20gdGhlIHN0cmluZyB0YWJsZSBzbyBmYXIuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9TVFJJTkdfVEFCTEVfTE9PS1VQU19CWV9WQUxVRToKKyAgICAgICAgICBOdW1iZXIgb2Ygc3RyaW5nIHNlYXJjaGVzIGJ5IHZhbHVlLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fU1RSSU5HX1RBQkxFX0xPT0tVUFNfQllfSU5ERVg6CisgICAgICAgICAgTnVtYmVyIG9mIHN0cmluZyBzZWFyY2hlcyBieSBhZGRyZXNzLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fU1RSSU5HX1RBQkxFX0xPT0tVUF9TVEVQU19CWV9WQUxVRToKKyAgICAgICAgICBOdW1iZXIgb2YgbG9va3VwIHN0ZXBzIG5lZWRlZCBmb3Igc3RyaW5nIHNlYXJjaGVzIGJ5IHZhbHVlLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fU1RSSU5HX1RBQkxFX0xPT0tVUF9TVEVQU19CWV9JTkRFWDoKKyAgICAgICAgICBOdW1iZXIgb2YgbG9va3VwIHN0ZXBzIG5lZWRlZCBmb3Igc3RyaW5nIHNlYXJjaGVzIGJ5IGFkZHJlc3MuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9TVFJJTkdfVEFCTEVfSElUU19CWV9WQUxVRToKKyAgICAgICAgICBOdW1iZXIgb2Ygc3VjY2Vzc2Z1bCBsb29rdXBzIG9mIHN0cmluZ3MgYnkgdmFsdWUuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9TVFJJTkdfVEFCTEVfSElUU19CWV9JTkRFWDoKKyAgICAgICAgICBOdW1iZXIgb2Ygc3VjY2Vzc2Z1bCBsb29rdXBzIG9mIHN0cmluZ3MgYnkgYWRkcmVzcy4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX1NUUklOR19UQUJMRV9DT0xMSVNJT05TOgorICAgICAgICAgIE51bWJlciBvZiBkaXN0aW5jdCBzdHJpbmdzIGFkZGVkIHRvIGFuIGV4aXN0aW5nIGhhc2ggY2hhaW4gc28gZmFyLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fUkVHRVhfTE9PS1VQUzoKKyAgICAgICAgICBOdW1iZXIgb2YgcmVxdWVzdHMgZm9yIG5ldyByZWdleHBzLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fUkVHRVhfTE9PS1VQX0hJVFM6CisgICAgICAgICAgTnVtYmVyIG9mIHJlcXVlc3RlZCByZWdleHBzIGZvdW5kIGluIHRoZSB0YWJsZS4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX1JFR0VYX0xPT0tVUF9NSVNTRVM6CisgICAgICAgICAgTnVtYmVyIG9mIHJlcXVlc3RlZCByZWdleHBzIG5vdCBmb3VuZCBpbiB0aGUgdGFibGUuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9SRUdFWF9MT09LVVBfQ09MTElTSU9OUzoKKyAgICAgICAgICBOdW1iZXIgb2YgcmVxdWVzdGVkIG5ldyByZWdleHBzIHdoaWNoIGNvbGxpZGVkIHdpdGggYSBjYWNoZWQgb25lLgorCisKKworICAgICAgICBOZXR3b3JrIHN0YXRpc3RpY3M6CisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9NRVNTQUdFU19PVVQ6CisgICAgICAgICAgTnVtYmVyIG9mIG1lc3NhZ2VzIHNlbnQgdG8gYSBwbGF5ZXIuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9QQUNLRVRTX09VVDoKKyAgICAgICAgICBOdW1iZXIgb2YgcGFja2V0cyBzZW50IHRvIGEgcGxheWVyLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fUEFDS0VUU19JTjoKKyAgICAgICAgICBOdW1iZXIgb2YgcGFja2V0cyByZWNlaXZlZCBmcm9tIGEgcGxheWVyLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX1BBQ0tFVFNfT1VUOgorICAgICAgICAgIE51bWJlciBvZiBieXRlcyBzZW50IHRvIGEgcGxheWVyLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX1BBQ0tFVFNfSU46CisgICAgICAgICAgTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGZyb20gYSBwbGF5ZXIuCisKKworCisgICAgICAgIExvYWQ6CisKKyAgICAgICAgPHdoYXQ+ID09IERJX0xPQURfQVZFUkFHRV9DT01NQU5EUzoKKyAgICAgICAgICBBIGZsb2F0IHZhbHVlIHRoYXQgc2hvd3MgdGhlIG51bWJlciBvZiBleGVjdXRlZCBwbGF5ZXIgY29tbWFuZHMKKyAgICAgICAgICBwZXIgc2Vjb25kLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9MT0FEX0FWRVJBR0VfTElORVM6CisgICAgICAgICAgQSBmbG9hdCB2YWx1ZSB0aGF0IHNob3dzIHRoZSBudW1iZXIgb2YgY29tcGlsZWQgY29kZSBsaW5lcworICAgICAgICAgIHBlciBzZWNvbmQuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX0xPQURfQVZFUkFHRV9QUk9DRVNTRURfT0JKRUNUUzoKKyAgICAgICAgICBBIGZsb2F0IHZhbHVlIHRoYXQgc2hvd3MgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIG9iamVjdHMgcHJvY2Vzc2VkCisgICAgICAgICAgZWFjaCBiYWNrZW5kIGN5Y2xlLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9MT0FEX0FWRVJBR0VfUFJPQ0VTU0VEX09CSkVDVFNfUkVMQVRJVkU6CisgICAgICAgICAgQXZlcmFnZSBudW1iZXIgb2Ygb2JqZWN0cyBwcm9jZXNzZWQgZWFjaCBjeWNsZSwgZXhwcmVzc2VkCisgICAgICAgICAgYXMgcGVyY2VudGFnZSAoMC4uMS4wKSBvZiB0aGUgbnVtYmVyIG9mIHByZXNlbnQgb2JqZWN0cy4KKworICAgICAgICA8d2hhdD4gPT0gRElfTE9BRF9BVkVSQUdFX1BST0NFU1NFRF9IRUFSVEJFQVRTX1JFTEFUSVZFOgorICAgICAgICAgIEF2ZXJhZ2UgbnVtYmVyIG9mIGhlYXJ0X2JlYXRzIGNhbGxlZCBlYWNoIGN5Y2xlLCBleHByZXNzZWQKKyAgICAgICAgICBhcyBmcmFjdGlvbiAoMC4uMS4wKSBvZiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBoZWFydGJlYXRzLgorCisKKworICAgICAgICBNZW1vcnkgdXNlIHN0YXRpc3RpY3M6CisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9BQ1RJT05TOgorICAgICAgICAgIE51bWJlciBvZiBhbGxvY2F0ZWQgYWN0aW9ucy4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX0NBTExPVVRTOgorICAgICAgICAgIE51bWJlciBvZiBwZW5kaW5nIGNhbGxfb3V0cy4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX0hFQVJUQkVBVFM6CisgICAgICAgICAgTnVtYmVyIG9mIG9iamVjdHMgd2l0aCBhIGhlYXJ0YmVhdC4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX1NIQURPV1M6CisgICAgICAgICAgTnVtYmVyIG9mIGFsbG9jYXRlZCBzaGFkb3dzLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fT0JKRUNUUzoKKyAgICAgICAgICBOdW1iZXIgb2Ygb2JqZWN0cy4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX09CSkVDVFNfU1dBUFBFRDoKKyAgICAgICAgICBOdW1iZXIgb2Ygb2JqZWN0cyB0aGF0IGFyZSBzd2FwcGVkLW91dC4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX09CSkVDVFNfSU5fTElTVDoKKyAgICAgICAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgb2JqZWN0IGxpc3QKKyAgICAgICAgICAoaS5lLiBub3QgZGVzdHJ1Y3RlZCBvYmplY3RzKS4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX09CSkVDVFNfSU5fVEFCTEU6CisgICAgICAgICAgTnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIG9iamVjdCB0YWJsZS4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX09CSkVDVFNfREVTVFJVQ1RFRDoKKyAgICAgICAgICBOdW1iZXIgb2YgZGVzdHJ1Y3RlZCwgYnV0IHN0aWxsIHJlZmVyZW5jZWQgb2JqZWN0cy4KKyAgICAgICAgICAoTm90IGNvdW50aW5nIERJX05VTV9PQkpFQ1RTX05FV0xZX0RFU1RSVUNURUQpLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fT0JKRUNUU19ORVdMWV9ERVNUUlVDVEVEOgorICAgICAgICAgIE51bWJlciBvZiBuZXdseSBkZXN0cnVjdGVkIG9iamVjdHMgKGllLiBvYmplY3RzIGRlc3RydWN0ZWQKKyAgICAgICAgICBpbiB0aGlzIGV4ZWN1dGlvbiB0aHJlYWQsIHRoYXQgd2lsbCByZWFsbHkgYmUgZGVzdHJveWVkIGluCisgICAgICAgICAgdGhlIG5leHQgYmFja2VuZCBjeWNsZSkuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9PQkpFQ1RfVEFCTEVfU0xPVFM6CisgICAgICAgICAgTnVtYmVyIG9mIGhhc2ggc2xvdHMgcHJvdmlkZWQgYnkgdGhlIG9iamVjdCB0YWJsZS4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX1BST0dTOgorICAgICAgICAgIFNpemUgb2NjdXBpZWQgYnkgdGhlIG9iamVjdCB0YWJsZS4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX1BST0dTX1NXQVBQRUQ6CisgICAgICAgICAgTnVtYmVyIG9mIHN3YXBwZWQtb3V0IHByb2dyYW0gYmxvY2tzCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9QUk9HU19VTlNXQVBQRUQ6CisgICAgICAgICAgTnVtYmVyIG9mIHByb2dyYW1zIHRoYXQgd2VyZSBzd2FwcGVkLW91dCwgYXJlIG5vdyBzd2FwcGVkLWluLAorICAgICAgICAgIGJ1dCBzdGlsbCBoYXZlIGFsbG9jYXRlZCBzcGFjZSBpbiB0aGUgc3dhcCBmaWxlLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fQVJSQVlTOgorICAgICAgICAgIE51bWJlciBvZiBjdXJyZW50bHkgZXhpc3RpbmcgYXJyYXlzLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fTUFQUElOR1M6CisgICAgICAgICAgTnVtYmVyIG9mIGN1cnJlbnRseSBleGlzdGluZyBtYXBwaW5ncy4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX01BUFBJTkdTX0NMRUFOOgorICAgICAgICAgIE51bWJlciBvZiBjbGVhbiBtYXBwaW5ncyAobWFwcGluZ3Mgd2l0aG91dCBhIGhhc2ggcGFydCkuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9NQVBQSU5HU19IQVNIOgorICAgICAgICAgIE51bWJlciBvZiBoYXNoIG1hcHBpbmdzLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fTUFQUElOR1NfSFlCUklEOgorICAgICAgICAgIE51bWJlciBvZiBoeWJyaWQgbWFwcGluZ3MgKG1hcHBpbmdzIHRoYXQgaGF2ZSBhCisgICAgICAgICAgY29uZGVuc2VkIGFuZCBoYXNoIHBhcnQpLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fU1RSVUNUUzoKKyAgICAgICAgICBOdW1iZXIgb2YgY3VycmVudGx5IGV4aXN0aW5nIHN0cnVjdHMuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9TVFJVQ1RfVFlQRVM6CisgICAgICAgICAgTnVtYmVyIG9mIGN1cnJlbnRseSBleGlzdGluZyBzdHJ1Y3QgdHlwZXMuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9WSVJUVUFMX1NUUklOR1M6CisgICAgICAgICAgTnVtYmVyIG9mIGN1cnJlbnRseSBleGlzdGluZyB2aXJ0dWFsIHN0cmluZ3MKKyAgICAgICAgICAoaWRlbnRpY2FsIHN0cmluZ3MgYXJlIGNvdW50ZWQgc2VwYXJhdGVseSkuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9TVFJJTkdTOgorICAgICAgICAgIE51bWJlciBvZiByZWFsIHN0cmluZ3MgKGlkZW50aWNhbCBzdHJpbmdzCisgICAgICAgICAgYXJlIGNvdW50ZWQgb25jZSkuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9TVFJJTkdTX1RBQkxFRDoKKyAgICAgICAgICBOdW1iZXIgb2YgZGlyZWN0bHkgdGFibGVkIHN0cmluZ3MuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9TVFJJTkdTX1VOVEFCTEVEOgorICAgICAgICAgIE51bWJlciBvZiB1bnRhYmxlZCBzdHJpbmdzLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fU1RSSU5HX1RBQkxFX1NMT1RTOgorICAgICAgICAgIE51bWJlciBvZiBoYXNoIHNsb3RzIGluIHRoZSBzdHJpbmcgdGFibGUuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9TVFJJTkdfVEFCTEVfU0xPVFNfVVNFRDoKKyAgICAgICAgICBOdW1iZXIgb2YgaGFzaCBjaGFpbnMgaW4gdGhlIHN0cmluZyB0YWJsZS4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX1JFR0VYOgorICAgICAgICAgIE51bWJlciBvZiBjYWNoZWQgcmVndWxhciBleHByZXNzaW9ucy4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX1JFR0VYX1RBQkxFX1NMT1RTOgorICAgICAgICAgIE51bWJlciBvZiBzbG90cyBpbiB0aGUgcmVnZXhwIGNhY2hlIHRhYmxlLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX0FDVElPTlM6CisgICAgICAgICAgVG90YWwgc2l6ZSBvZiBhbGxvY2F0ZWQgYWN0aW9ucy4KKworICAgICAgICA8d2hhdD4gPT0gRElfU0laRV9DQUxMT1VUUzoKKyAgICAgICAgICBUb3RhbCBzaXplIG9mIHBlbmRpbmcgY2FsbF9vdXRzLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX0hFQVJUQkVBVFM6CisgICAgICAgICAgVG90YWwgc2l6ZSBvZiB0aGUgaGVhcnRfYmVhdCBsaXN0LgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX1NIQURPV1M6CisgICAgICAgICAgVG90YWwgc2l6ZSBvZiBhbGxvY2F0ZWQgc2hhZG93cy4KKworICAgICAgICA8d2hhdD4gPT0gRElfU0laRV9PQkpFQ1RTOgorICAgICAgICAgIFRvdGFsIHNpemUgb2Ygb2JqZWN0cyAobm90IGNvdW50aW5nIHRoZSBzaXplIG9mIHRoZSB2YWx1ZXMKKyAgICAgICAgICBvZiB0aGVpciB2YXJpYWJsZXMpLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX09CSkVDVFNfU1dBUFBFRDoKKyAgICAgICAgICBUb3RhbCBzaXplIG9mIHN3YXBwZWQtb3V0IHZhcmlhYmxlIGJsb2Nrcy4KKworICAgICAgICA8d2hhdD4gPT0gRElfU0laRV9PQkpFQ1RfVEFCTEU6CisgICAgICAgICAgU2l6ZSBvY2N1cGllZCBieSB0aGUgb2JqZWN0IHRhYmxlLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX1BST0dTOgorICAgICAgICAgIFRvdGFsIHNpemUgb2YgYWxsIHByb2dyYW1zLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX1BST0dTX1NXQVBQRUQ6CisgICAgICAgICAgVG90YWwgc2l6ZSBvZiBzd2FwcGVkLW91dCBwcm9ncmFtIGJsb2NrcworCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX1BST0dTX1VOU1dBUFBFRDoKKyAgICAgICAgICBUb3RhbCBzaXplIG9mIHVuc3dhcHBlZCBwcm9ncmFtIGJsb2NrcworCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX0FSUkFZUzoKKyAgICAgICAgICBUb3RhbCBzaXplIG9mIGFsbCBhcnJheXMgKG5vdCBjb3VudGluZyBhZGRpdGlvbmFsIHNpemVzCisgICAgICAgICAgb2YgYXJyYXkgZWxlbWVudCB2YWx1ZXMpLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX01BUFBJTkdTOgorICAgICAgICAgIFRvdGFsIHNpemUgb2YgYWxsIG1hcHBpbmcgKG5vdCBjb3VudGluZyBhZGRpdGlvbmFsIHNpemVzCisgICAgICAgICAgb2YgY29udGFpbmVkIHZhbHVlcykuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1NJWkVfU1RSVUNUUzoKKyAgICAgICAgICBUb3RhbCBzaXplIG9mIGFsbCBzdHJ1Y3RzIChub3QgY291bnRpbmcgYWRkaXRpb25hbCBzaXplcworICAgICAgICAgIG9mIGNvbnRhaW5lZCB2YWx1ZXMpLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX1NUUlVDVF9UWVBFUzoKKyAgICAgICAgICBUb3RhbCBzaXplIG9mIGFsbCBzdHJ1Y3QgdHlwZSBkZWZpbml0aW9ucy4KKworICAgICAgICA8d2hhdD4gPT0gRElfU0laRV9TVFJJTkdTOgorICAgICAgICAgIFRvdGFsIHNpemUgb2YgYWxsIHN0cmluZ3MuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1NJWkVfU1RSSU5HU19UQUJMRUQ6CisgICAgICAgICAgVG90YWwgc2l6ZSBvZiBhbGwgdGFibGVkIHN0cmluZ3MuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1NJWkVfU1RSSU5HU19VTlRBQkxFRDoKKyAgICAgICAgICBUb3RhbCBzaXplIG9mIGFsbCB1bnRhYmxlZCBzdHJpbmdzLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX1NUUklOR19UQUJMRToKKyAgICAgICAgICBTaXplIG9mIHRoZSBzdHJpbmcgdGFibGUgc3RydWN0dXJlIGl0c2VsZi4KKworICAgICAgICA8d2hhdD4gPT0gRElfU0laRV9TVFJJTkdfT1ZFUkhFQUQ6CisgICAgICAgICAgU2l6ZSBvZiB0aGUgb3ZlcmhlYWQgcGVyIHN0cmluZyAoY29tcGFyZWQgdG8gYSByYXcgc3RyaW5nKS4KKworICAgICAgICA8d2hhdD4gPT0gRElfU0laRV9SRUdFWDoKKyAgICAgICAgICBUb3RhbCBzaXplIG9mIGFsbCBjYWNoZWQgcmVndWxhciBleHByZXNzaW9ucy4KKworICAgICAgICA8d2hhdD4gPT0gRElfU0laRV9CVUZGRVJfRklMRToKKyAgICAgICAgICBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGJ1ZmZlciBmb3IgZmlsZSBvcGVyYXRpb25zLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX0JVRkZFUl9TV0FQOgorICAgICAgICAgIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgYnVmZmVyIGZvciB0aGUgc3dhcCBmaWxlLgorCisKKworICAgICAgICBNZW1vcnkgc3dhcHBlciBzdGF0aXN0aWNzOgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fU1dBUF9CTE9DS1M6CisgICAgICAgICAgTnVtYmVyIG9mIGJsb2NrcyBpbiB0aGUgc3dhcCBmaWxlLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fU1dBUF9CTE9DS1NfRlJFRToKKyAgICAgICAgICBOdW1iZXIgb2YgZnJlZSBibG9ja3MgaW4gdGhlIHN3YXAgZmlsZS4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX1NXQVBfQkxPQ0tTX1JFVVNFX0xPT0tVUFM6CisgICAgICAgICAgTnVtYmVyIG9mIHNlYXJjaGVzIGZvciBibG9ja3MgdG8gcmV1c2UgaW4gdGhlIHN3YXAgZmlsZS4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX1NXQVBfQkxPQ0tTX1JFVVNFX0xPT0tVUF9TVEVQUzoKKyAgICAgICAgICBUb3RhbCBudW1iZXIgb2YgbG9va3VwIHN0ZXBzIGluIHNlYXJjaGVzIGZvciBibG9ja3MKKyAgICAgICAgICB0byByZXVzZSBpbiB0aGUgc3dhcCBmaWxlLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fU1dBUF9CTE9DS1NfRlJFRV9MT09LVVBTOgorICAgICAgICAgIE51bWJlciBvZiBzZWFyY2hlcyBmb3IgYmxvY2tzIHRvIGZyZWUgaW4gdGhlIHN3YXAgZmlsZS4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX1NXQVBfQkxPQ0tTX0ZSRUVfTE9PS1VQX1NURVBTOgorICAgICAgICAgIFRvdGFsIG51bWJlciBvZiBsb29rdXAgc3RlcHMgaW4gc2VhcmNoZXMgZm9yIGJsb2NrcworICAgICAgICAgIHRvIGZyZWUgaW4gdGhlIHN3YXAgZmlsZS4KKworICAgICAgICA8d2hhdD4gPT0gRElfU0laRV9TV0FQX0JMT0NLUzoKKyAgICAgICAgICBTaXplIG9mIHRoZSBzd2FwIGZpbGUuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1NJWkVfU1dBUF9CTE9DS1NfRlJFRToKKyAgICAgICAgICBTaXplIG9mIGZyZWUgYmxvY2tzIGluIHRoZSBzd2FwIGZpbGUuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1NJWkVfU1dBUF9CTE9DS1NfUkVVU0VEOgorICAgICAgICAgIFRvdGFsIHJldXNlZCBzcGFjZSBpbiB0aGUgc3dhcCBmaWxlLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TV0FQX1JFQ1lDTEVfUEhBU0U6CisgICAgICAgICAgVHJ1ZSBpZiB0aGUgc3dhcHBlciBpcyBjdXJyZW50bHkgcmVjeWNsaW5nIGZyZWUgYmxvY2suCisKKworCisgICAgICAgIE1lbW9yeSBhbGxvY2F0b3Igc3RhdGlzdGljczoKKworICAgICAgICA8d2hhdD4gPT0gRElfTUVNT1JZX0FMTE9DQVRPUl9OQU1FOgorICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBhbGxvY2F0b3I6ICJzeXNtYWxsb2MiLCAic21hbGxvYyIsICJzbGFiYWxsb2MKKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX1NZU19BTExPQ0FURURfQkxPQ0tTOgorICAgICAgICAgIE51bWJlciBvZiBtZW1vcnkgYmxvY2tzIHJlcXVlc3RlZCBmcm9tIHRoZSBvcGVyYXRpbmcgc3lzdGVtLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fTEFSR0VfQkxPQ0tTX0FMTE9DQVRFRDoKKyAgICAgICAgICBOdW1iZXIgb2YgbGFyZ2UgYWxsb2NhdGVkIGJsb2Nrcy4KKyAgICAgICAgICAoV2l0aCBzbWFsbG9jOiBUaGUgbGFyZ2UgYWxsb2NhdGVkIGJsb2NrcyBpbmNsdWRlCisgICAgICAgICAgdGhlIHNtYWxsIGNodW5rIGJsb2Nrcy4pCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9MQVJHRV9CTE9DS1NfRlJFRToKKyAgICAgICAgICBOdW1iZXIgb2YgbGFyZ2UgZnJlZSBibG9ja3MuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9MQVJHRV9CTE9DS1NfV0FTVEU6CisgICAgICAgICAgTnVtYmVyIG9mIHVudXNhYmxlIGxhcmdlIG1lbW9yeSBmcmFnbWVudHMuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9TTUFMTF9CTE9DS1NfQUxMT0NBVEVEOgorICAgICAgICAgIE51bWJlciBvZiBzbWFsbCBhbGxvY2F0ZWQgYmxvY2tzLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fU01BTExfQkxPQ0tTX0ZSRUU6CisgICAgICAgICAgTnVtYmVyIG9mIHNtYWxsIGZyZWUgYmxvY2tzLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fU01BTExfQkxPQ0tTX1dBU1RFOgorICAgICAgICAgIE51bWJlciBvZiB1bnVzYWJseSBzbWFsbCBtZW1vcnkgZnJhZ21lbnRzLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fU01BTExfQkxPQ0tfQ0hVTktTOgorICAgICAgICAgIE51bWJlciBvZiBzbWFsbCBjaHVuay9zbGFiIGJsb2Nrcy4KKyAgICAgICAgICAoVGhhdCBhcmUgbGFyZ2UgYmxvY2tzIHRoYXQgYXJlIHVzZWQgYXMgYQorICAgICAgICAgIGJhc2UgZm9yIHNtYWxsIGJsb2Nrcy4pCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9VTk1BTkFHRURfQkxPQ0tTOgorICAgICAgICAgIE51bWJlciBvZiB1bm1hbmFnZWQgKG5vbi1HQy1hYmxlKSBhbGxvY2F0aW9ucy4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX0ZSRUVfQkxPQ0tTX0FWTF9OT0RFUzoKKyAgICAgICAgICBOdW1iZXIgb2YgQVZMIG5vZGVzIHVzZWQgdG8gbWFuYWdlIHRoZSBsYXJnZSBmcmVlCisgICAgICAgICAgYmxvY2tzLiBUaGlzIHZhbHVlIG1pZ2h0IGdvIGF3YXkgYWdhaW4uCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1NJWkVfU1lTX0FMTE9DQVRFRF9CTE9DS1M6CisgICAgICAgICAgVG90YWwgc2l6ZSBvZiBtZW1vcnkgcmVxdWVzdGVkIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1NJWkVfTEFSR0VfQkxPQ0tTX0FMTE9DQVRFRDoKKyAgICAgICAgICBUb3RhbCBzaXplIG9mIGxhcmdlIGFsbG9jYXRlZCBibG9ja3MuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1NJWkVfTEFSR0VfQkxPQ0tTX0ZSRUU6CisgICAgICAgICAgVG90YWwgc2l6ZSBvZiBsYXJnZSBmcmVlIGJsb2Nrcy4KKworICAgICAgICA8d2hhdD4gPT0gRElfU0laRV9MQVJHRV9CTE9DS1NfV0FTVEU6CisgICAgICAgICAgVG90YWwgc2l6ZSBvZiB1bnVzYWJsZSBsYXJnZSBtZW1vcnkgZnJhZ21lbnRzLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX0xBUkdFX0JMT0NLX09WRVJIRUFEOgorICAgICAgICAgIFRoZSBvdmVyaGVhZCBvZiBldmVyeSBsYXJnZSBibG9jayBhbGxvY2F0aW9uLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX1NNQUxMX0JMT0NLU19BTExPQ0FURUQ6CisgICAgICAgICAgVG90YWwgc2l6ZSBvZiBzbWFsbCBhbGxvY2F0ZWQgYmxvY2tzLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX1NNQUxMX0JMT0NLU19GUkVFOgorICAgICAgICAgIFRvdGFsIHNpemUgb2Ygc21hbGwgZnJlZSBibG9ja3MuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1NJWkVfU01BTExfQkxPQ0tTX1dBU1RFOgorICAgICAgICAgIFRvdGFsIHNpemUgb2YgdW51c2FibHkgc21hbGwgbWVtb3J5IGZyYWdtZW50cy4KKworICAgICAgICA8d2hhdD4gPT0gRElfU0laRV9TTUFMTF9CTE9DS19PVkVSSEVBRDoKKyAgICAgICAgICBUaGUgb3ZlcmhlYWQgb2YgZXZlcnkgc21hbGwgYmxvY2sgYWxsb2NhdGlvbi4KKworICAgICAgICA8d2hhdD4gPT0gRElfU0laRV9TTUFMTF9CTE9DS19DSFVOS1M6CisgICAgICAgICAgVG90YWwgc2l6ZSBvZiBzbWFsbCBjaHVuay9zbGFiIGJsb2Nrcy4KKworICAgICAgICA8d2hhdD4gPT0gRElfU0laRV9VTk1BTkFHRURfQkxPQ0tTOgorICAgICAgICAgIFRvdGFsIHNpemUgb2YgdW5tYW5hZ2VkIChub24tR0MtYWJsZSkgYWxsb2NhdGlvbnMuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1NJWkVfTUVNT1JZX1VTRUQ6CisgICAgICAgICAgVGhlIGFtb3VudCBvZiBtZW1vcnkgY3VycmVudGx5IGFsbG9jYXRlZCBmcm9tIHRoZSBhbGxvY2F0b3IuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1NJWkVfTUVNT1JZX1VOVVNFRDoKKyAgICAgICAgICBUaGUgYW1vdW50IG9mIG1lbW9yeSBhbGxvY2F0ZWQgZnJvbSB0aGUgc3lzdGVtLCBidXQKKyAgICAgICAgICBub3QgdXNlZCBieSB0aGUgZHJpdmVyLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX01FTU9SWV9PVkVSSEVBRDoKKyAgICAgICAgICBBbW91bnQgb2YgbWVtb3J5IHVzZWQgZm9yIHRoZSBtYW5hZ2VtZW50IG9mIHRoZSBtZW1vcnkuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9JTkNSRU1FTlRfU0laRV9DQUxMUzoKKyAgICAgICAgICBOdW1iZXIgb2YgcmVxdWVzdHMgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgYSBtZW1vcnkgYmxvY2suCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9JTkNSRU1FTlRfU0laRV9DQUxMX1NVQ0NFU1NFUzoKKyAgICAgICAgICBOdW1iZXIgb2Ygc3VjY2Vzc2Z1bCByZXF1ZXN0cyB0byBpbmNyZWFzZSB0aGUKKyAgICAgICAgICBzaXplIG9mIGEgbWVtb3J5IGJsb2NrLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TSVpFX0lOQ1JFTUVOVF9TSVpFX0NBTExfRElGRlM6CisgICAgICAgICAgVG90YWwgc2l6ZSBvZiBhZGRpdGlvbmFsbHkgYWxsb2NhdGVkIG1lbW9yeSBieQorICAgICAgICAgIGluY3JlYXNpbmcgYWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGJsb2Nrcy4KKworICAgICAgICA8d2hhdD4gPT0gRElfTlVNX1JFUExBQ0VNRU5UX01BTExPQ19DQUxMUzoKKyAgICAgICAgICBOdW1iZXIgb2YgYWxsb2NhdGlvbnMgZG9uZSB0aHJvdWdoIHRoZQorICAgICAgICAgIGNsaWIgZnVuY3Rpb25zIChpZiBzdXBwb3J0ZWQgYnkgdGhlIGFsbG9jYXRvcikuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1NJWkVfUkVQTEFDRU1FTlRfTUFMTE9DX0NBTExTOgorICAgICAgICAgIFRvdGFsIHNpemUgb2YgYWxsb2NhdGlvbnMgZG9uZSB0aHJvdWdoIHRoZQorICAgICAgICAgIGNsaWIgZnVuY3Rpb25zIChpZiBzdXBwb3J0ZWQgYnkgdGhlIGFsbG9jYXRvcikuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9NRU1PUllfREVGUkFHTUVOVEFUSU9OX0NBTExTX0ZVTEw6CisgICAgICAgICAgVG90YWwgbnVtYmVyIG9mIHJlcXVlc3RzIHRvIGRlZnJhZ21lbnQgYWxsIHNtYWxsIG1lbW9yeSBjaHVua3MuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9NRU1PUllfREVGUkFHTUVOVEFUSU9OX0NBTExTX1RBUkdFVEVEOgorICAgICAgICAgIFRvdGFsIG51bWJlciBvZiByZXF1ZXN0cyB0byBkZWZyYWdtZW50IHNtYWxsIG1lbW9yeSBjaHVua3MKKyAgICAgICAgICBmb3IgYSBkZXNpcmVkIHNpemUuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX05VTV9NRU1PUllfREVGUkFHTUVOVEFUSU9OX0NBTExfVEFSR0VUX0hJVFM6CisgICAgICAgICAgVG90YWwgbnVtYmVyIG9mIHN1Y2Nlc3NmdWwgcmVxdWVzdHMgdG8gZGVmcmFnbWVudCBzbWFsbAorICAgICAgICAgIG1lbW9yeSBjaHVua3MgZm9yIGEgZGVzaXJlZCBzaXplLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fTUVNT1JZX0RFRlJBR01FTlRBVElPTl9CTE9DS1NfSU5TUEVDVEVEOgorICAgICAgICAgIE51bWJlciBvZiBibG9ja3MgaW5zcGVjdGVkIGR1cmluZyBkZWZyYWdtZW50YXRpb25zLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fTUVNT1JZX0RFRlJBR01FTlRBVElPTl9CTE9DS1NfTUVSR0VEOgorICAgICAgICAgIE51bWJlciBvZiBibG9ja3MgbWVyZ2VkIGR1cmluZyBkZWZyYWdtZW50YXRpb25zLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9OVU1fTUVNT1JZX0RFRlJBR01FTlRBVElPTl9CTE9DS1NfUkVTVUxUSU5HOgorICAgICAgICAgIE51bWJlciBvZiBkZWZyYWdtZW50ZWQgYmxvY2tzIChpZS4gbWVyZ2UgcmVzdWx0cykuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX01FTU9SWV9FWFRFTkRFRF9TVEFUSVNUSUNTOgorICAgICAgICAgIElmIHRoZSBkcml2ZXIgd2FzIGNvbXBpbGVkIHdpdGggZXh0ZW5kZWQgbWVtb3J5IHN0YXRpc3RpY3MsCisgICAgICAgICAgdGhleSBhcmUgcmV0dXJuZWQgaW4gdGhpcyBlbnRyeTsgaWYgdGhlIGRyaXZlciB3YXMgY29tcGlsZWQKKyAgICAgICAgICB3aXRob3V0IHRoZSBzdGF0aXN0aWNzLCAwIGlzIHJldHVybmVkLgorCisgICAgICAgICAgVGhlIGFycmF5IGNvbnRhaW5zIE5VTSsyIGVudHJpZXMsIHdoZXJlIE5VTSBpcyB0aGUgbnVtYmVyCisgICAgICAgICAgb2YgZGlzdGluY3Qgc21hbGwgYmxvY2sgc2l6ZXMuIEVudHJ5IFtOVU1dIGRlc2NyaWJlcyB0aGUKKyAgICAgICAgICBzdGF0aXN0aWNzIG9mIG92ZXJzaXplZCBzbWFsbCBibG9ja3MgKHNtYWxsb2MpIHJlc3AuIGZvcgorICAgICAgICAgIGFsbCBzbGFicyAoc2xhYmFsbG9jKSwgZW50cnkgW05VTSsxXSBzdW1tYXJpemVzIGFsbCBsYXJnZQorICAgICAgICAgIGJsb2Nrcy4gRWFjaCBlbnRyeSBpcyBhbiBhcnJheSBvZiB0aGVzZSBmaWVsZHM6CisKKyAgICAgICAgICAgICAgIGludCBESU1fRVNfTUFYX0FMTE9DOgorICAgICAgICAgICAgICAgICAgICAgICBNYXggbnVtYmVyIG9mIGFsbG9jYXRlZCBibG9ja3Mgb2YgdGhpcyBzaXplLgorCisgICAgICAgICAgICAgICBpbnQgRElNX0VTX0NVUl9BTExPQzoKKyAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudCBudW1iZXIgb2YgYWxsb2NhdGVkIGJsb2NrcyBvZiB0aGlzIHNpemUuCisKKyAgICAgICAgICAgICAgIGludCBESU1fRVNfTUFYX0ZSRUU6CisgICAgICAgICAgICAgICAgICAgICAgIE1heCBudW1iZXIgb2YgYWxsb2NhdGVkIGJsb2NrcyBvZiB0aGlzIHNpemUuCisKKyAgICAgICAgICAgICAgIGludCBESU1fRVNfQ1VSX0ZSRUU6CisgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgbnVtYmVyIG9mIGFsbG9jYXRlZCBibG9ja3Mgb2YgdGhpcyBzaXplLgorCisgICAgICAgICAgICAgICBmbG9hdCBESU1fRVNfQVZHX1hBTExPQzoKKyAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGV4cGxpY2l0IGFsbG9jYXRpb24gcmVxdWVzdHMgcGVyCisgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZC4KKworICAgICAgICAgICAgICAgZmxvYXQgRElNX0VTX0FWR19YRlJFRToKKyAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGV4cGxpY2l0IGRlYWxsb2NhdGlvbiByZXF1ZXN0cyBwZXIKKyAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kLgorCisgICAgICAgICAgICAgICBpbnQgRElNX0VTX0ZVTExfU0xBQlM6CisgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBmdWxseSB1c2VkIHNsYWJzIChzbGFiYWxsb2Mgb25seSkuCisKKyAgICAgICAgICAgICAgIGludCBESU1fRVNfRlJFRV9TTEFCUzoKKyAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGZ1bGx5IGZyZWUgc2xhYnMgKHNsYWJhbGxvYyBvbmx5KS4KKworICAgICAgICAgICAgICAgaW50IERJTV9FU19UT1RBTF9TTEFCUzoKKyAgICAgICAgICAgICAgICAgICAgICAgVG90YWwgbnVtYmVyIG9mIHNsYWJzOiBwYXJ0aWFsbHkgdXNlZCwgZnVsbHkgdXNlZAorICAgICAgICAgICAgICAgICAgICAgICBhbmQgZnVsbHkgZnJlZSAoc2xhYmFsbG9jIG9ubHkpLgorCisgICAgICAgICAgIFRoZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbi1wZXItc2Vjb25kIHN0YXRpc3RpY3MgZG8KKyAgICAgICAgICAgbm90IGNvdmVyIGludGVybmFsIHNodWZmbGluZyBvZiB0aGUgZnJlZWxpc3RzLgorCisgICAgICAgICAgIFRoZSBzbGFiIHN0YXRpc3RpY3MgKGVudHJ5IFtOVU1dLCBzbGFiYWxsb2Mgb25seSkgc2hvd3MKKyAgICAgICAgICAgaW4gdGhlIEFWRyBzdGF0aXN0aWNzIHRoZSBmcmVxdWVuY2Ugd2l0aCB3aGljaCBzbGFicyB3ZXJlCisgICAgICAgICAgIGFsbG9jYXRlZCBmcm9tIHJlc3AuIHJldHVybmVkIHRvIHRoZSBsYXJnZSBtZW1vcnkgcG9vbC4KKworCisKKyAgICAgICAgU3RhdHVzIHRleHRzOgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TVEFUVVNfVEVYVF9NRU1PUlk6CisgICAgICAgICAgQSBwcmludGFibGUgc3RyaW5nIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgICAgICB0aGUgbWVtb3J5IHVzYWdlLgorCisgICAgICAgIDx3aGF0PiA9PSBESV9TVEFUVVNfVEVYVF9UQUJMRVM6CisgICAgICAgICAgQSBwcmludGFibGUgc3RyaW5nIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgICAgICB0aGUgTFBDIHJ1bnRpbWUuCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1NUQVRVU19URVhUX1NXQVA6CisgICAgICAgICAgQSBwcmludGFibGUgc3RyaW5nIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgICAgICB0aGUgc3dhcCBzeXN0ZW0uCisKKyAgICAgICAgPHdoYXQ+ID09IERJX1NUQVRVU19URVhUX01BTExPQzoKKyAgICAgICAgICBBIHByaW50YWJsZSBzdHJpbmcgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICAgIG1lbW9yeSBhbGxvY2F0aW9ucy4KKworICAgICAgICA8d2hhdD4gPT0gRElfU1RBVFVTX1RFWFRfTUFMTE9DX0VYVEVOREVEOgorICAgICAgICAgIEEgcHJpbnRhYmxlIHN0cmluZ3Mgd2l0aCBleHRlbmRlZCBtZW1vcnkgc3RhdGlzdGljcworICAgICAgICAgIChpZiB0aGUgZHJpdmVyIHdhcyBjb21waWxlZCB3aXRoIHRoZW0pLgorCisKK0hJU1RPUlkKKyAgICAgICAgSW50cm9kdWNlZCBpbiBMRE11ZCAzLjUuMC4KKworU0VFIEFMU08KKyAgICAgICAgY29uZmlndXJlX2RyaXZlcihFKSwgb2JqZWN0X2luZm8oRSksIGludGVyYWN0aXZlX2luZm8oRSksCisgICAgICAgIGR1bXBfZHJpdmVyX2luZm8oRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2R1bXBfZHJpdmVyX2luZm8gYi9kb2MvZWZ1bi9kdW1wX2RyaXZlcl9pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMWY4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9kdW1wX2RyaXZlcl9pbmZvCkBAIC0wLDAgKzEsNzUgQEAKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxkcml2ZXJfaW5mby5oPgorCisgICAgICAgIGludCBkdW1wX2RyaXZlcl9pbmZvKGludCB3aGF0KQorICAgICAgICBpbnQgZHVtcF9kcml2ZXJfaW5mbyhpbnQgd2hhdCwgc3RyaW5nIGZpbGVuYW1lKQorCitERVNDUklQVElPTgorICAgICAgICBEdW1wcyBpbmZvcm1hdGlvbiBzcGVjaWZpY2llZCBieSA8d2hhdD4gaW50byBhIGZpbGUKKyAgICAgICAgc3BlY2lmaWVkIGJ5IDxmaWxlbmFtZT4uIElmIDxmaWxlbmFtZT4gaXMgb21pdHRlZCwKKyAgICAgICAgYSBkZWZhdWx0IGZpbGUgbmFtZSBpcyB1c2VkLiBUaGUgZnVuY3Rpb24gY2FsbHMKKyAgICAgICAgbWFzdGVyLT52YWxpZF93cml0ZSgpIHRvIGNoZWNrIHRoYXQgaXQgY2FuIHdyaXRlCisgICAgICAgIHRoZSBmaWxlcy4gVGhlIGZpbGUgaW4gcXVlc3Rpb24gaXMgYWx3YXlzIHdyaXR0ZW4gYW5ldworCisgICAgICAgIE9uIHN1Y2Nlc3MgdGhlIGVmdW4gcmV0dXJucyAxLCBvciAwIGlmIGFuIGVycm9yIG9jY3VyZWQuCisKKyAgICAgICAgPHdoYXQ+ID09IERESV9PQkpFQ1RTOgorICAgICAgICAgIER1bXBzIGluZm9ybWF0aW9uIGFib3V0IGFsbCBsaXZlIG9iamVjdHMuCisgICAgICAgICAgRGVmYXVsdCBmaWxlbmFtZSBpcyAnL09CSl9EVU1QJywKKyAgICAgICAgICB2YWxpZF93cml0ZSgpIHdpbGwgcmVhZCAnb2JqZHVtcCcgZm9yIHRoZSBmdW5jdGlvbi4KKworICAgICAgICAgIEZvciBldmVyeSBvYmplY3QsIGEgbGluZSBpcyB3cml0dGVuIGludG8gdGhlIGZpbGUgd2l0aCB0aGUKKyAgICAgICAgICBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaW4gdGhlIGdpdmVuIG9yZGVyOgorICAgICAgICAgICAgLSBvYmplY3QgbmFtZQorICAgICAgICAgICAgLSBzaXplIGluIG1lbW9yeSwgc2hhcmVkIGRhdGEgY291bnRlZCBvbmx5IG9uY2UKKyAgICAgICAgICAgIC0gc2l6ZSBpbiBtZW1vcnkgaWYgZGF0YSB3b3VsZG4ndCBiZSBzaGFyZWQKKyAgICAgICAgICAgIC0gbnVtYmVyIG9mIHJlZmVyZW5jZXMKKyAgICAgICAgICAgIC0gJ0hCJyBpZiB0aGUgb2JqZWN0IGhhcyBhIGhlYXJ0YmVhdCwgbm90aGluZyBpZiBub3QuCisgICAgICAgICAgICAtIHRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCwgb3IgJy0tJyBpZiB0aGUgb2JqZWN0CisgICAgICAgICAgICAgIGhhcyBubyBlbnZpcm9ubWVudAorICAgICAgICAgICAgLSBpbiBwYXJlbnRoZXNlcyB0aGUgbnVtYmVyIG9mIGV4ZWN1dGlvbiB0aWNrcyBzcGVudAorICAgICAgICAgICAgICBpbiB0aGlzIG9iamVjdAorICAgICAgICAgICAgLSB0aGUgc3dhcCBzdGF0dXM6CisgICAgICAgICAgICAgICBub3RoaW5nIGlmIG5vdCBzd2FwcGVkLAorICAgICAgICAgICAgICAgJ1BST0cgU1dBUFBFRCcgaWYgb25seSB0aGUgcHJvZ3JhbSBpcyBzd2FwcGVkCisgICAgICAgICAgICAgICAnVkFSIFNXQVBQRUQnIGlmIG9ubHkgdGhlIHZhcmlhYmVzIGFyZSBzd2FwcGVkCisgICAgICAgICAgICAgICAnU1dBUFBFRCcgaWYgYm90aCBwcm9ncmFtIGFuZCB2YXJpYWJsZXMgYXJlIHN3YXBwZWQKKyAgICAgICAgICAgIC0gdGhlIHRpbWUgdGhlIG9iamVjdCB3YXMgY3JlYXRlZAorCisgICAgICAgIDx3aGF0PiA9PSBERElfT0JKRUNUU19ERVNUUlVDVEVEOgorICAgICAgICAgIER1bXBzIGluZm9ybWF0aW9uIGFib3V0IGFsbCBkZXN0cnVjdGVkIG9iamVjdHMuIAorICAgICAgICAgIERlZmF1bHQgZmlsZW5hbWUgaXMgJy9ERVNUX09CSl9EVU1QJywKKyAgICAgICAgICB2YWxpZF93cml0ZSgpIHdpbGwgcmVhZCAnb2JqZHVtcCcgZm9yIHRoZSBmdW5jdGlvbi4KKworICAgICAgICAgIEZvciBldmVyeSBvYmplY3QsIGEgbGluZSBpcyB3cml0dGVuIGludG8gdGhlIGZpbGUgd2l0aCB0aGUKKyAgICAgICAgICBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaW4gdGhlIGdpdmVuIG9yZGVyOgorICAgICAgICAgICAgLSBvYmplY3QgbmFtZQorICAgICAgICAgICAgLSBudW1iZXIgb2YgcmVmZXJlbmNlcworICAgICAgICAgICAgLSAnTkVXJyBpZiB0aGUgb2JqZWN0IHdhcyBkZXN0cnVjdGVkIGluIHRoaXMgZXhlY3V0aW9uCisgICAgICAgICAgICAgIHRocmVhZCwgbm90aGluZyBpZiBpdCBpcyBvbGRlciBhbHJlYWR5LgorCisgICAgICAgIDx3aGF0PiA9PSBERElfT1BDT0RFUzoKKyAgICAgICAgICBEdW1wcyB1c2FnZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3Bjb2Rlcy4KKyAgICAgICAgICBEZWZhdWx0IGZpbGVuYW1lIGlzICcvT1BDX0RVTVAnLAorICAgICAgICAgIHZhbGlkX3dyaXRlKCkgd2lsbCByZWFkICdvcGNkdW1wJyBmb3IgdGhlIGZ1bmN0aW9uLgorCisgICAgICAgIDx3aGF0PiA9PSBERElfTUVNT1JZOgorICAgICAgICAgIER1bXBzIGEgbGlzdCBvZiBhbGwgYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MgKGlmIHRoZSBhbGxvY2F0b3IKKyAgICAgICAgICBzdXBwb3J0cyB0aGlzKS4KKyAgICAgICAgICBEZWZhdWx0IGZpbGVuYW1lIGlzICcvTUVNT1JZX0RVTVAnLAorICAgICAgICAgIHZhbGlkX3dyaXRlKCkgd2lsbCByZWFkICdtZW1kdW1wJyBmb3IgdGhlIGZ1bmN0aW9uLAorICAgICAgICAgIGFuZCB0aGUgbmV3IGRhdGEgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCisgICAgICAgICAgSWYgdGhlIGFsbG9jYXRvciBkb2Vzbid0IHN1cHBvcnQgbWVtb3J5IGR1bXBzLCB0aGlzIGNhbGwgd2lsbAorICAgICAgICAgIGFsd2F5cyByZXR1cm4gMCwgYW5kIG5vdGhpbmcgd2lsbCBiZSB3cml0dGVuLgorCisgICAgICAgICAgVGhpcyB3b3JrcyBiZXN0IGlmIHRoZSBhbGxvY2F0b3IgaXMgY29tcGlsZWQgd2l0aAorICAgICAgICAgIE1BTExPQ19UUkFDRSBhbmQvb3IgTUFMTE9DX0xQQ19UUkFDRS4KKworICAgICAgICAgIE5PVEU6IE1ha2Ugc3VyZSB0aGF0IHRoaXMgb3B0aW9uIGNhbid0IGJlIGFidXNlZCEKKworSElTVE9SWQorICAgICAgICBJbnRyb2R1Y2VkIGluIExETXVkIDMuNS4wLgorCitTRUUgQUxTTworICAgICAgICBkcml2ZXJfaW5mbyhFKSwgb2JqZWN0X2luZm8oRSksIGludGVyYWN0aXZlX2luZm8oRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2VkIGIvZG9jL2VmdW4vZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4ZGMzMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2VkCkBAIC0wLDAgKzEsMTkgQEAKK1NZTk9QU0lTCisgICAgICAgIHZvaWQgZWQoKQorICAgICAgICB2b2lkIGVkKHN0cmluZyBmaWxlKQorICAgICAgICB2b2lkIGVkKHN0cmluZyBmaWxlLCBzdHJpbmcgZnVuYykKKworREVTQ1JJUFRJT04KKyAgICAgICAgQ2FsbGluZyB3aXRob3V0IGFyZ3VtZW50cyB3aWxsIHN0YXJ0IHRoZSBlZGl0b3IgZWQgd2l0aCB0aGUKKyAgICAgICAgbmFtZSBvZiB0aGUgZXJyb3IgZmlsZSwgdGhhdCB3YXMgcmV0dXJuZWQgYnkKKyAgICAgICAgbWFzdGVyLT52YWxpZF9yZWFkKDAsIGdldGV1aWQodGhpc19wbGF5ZXIoKSksICJlZF9zdGFydCIsCisgICAgICAgIHRoaXNfcGxheWVyKCkpLCB1c3VhbGx5IHNvbWV0aGluZyBsaWtlIH4vLmVyci4gSWYgdGhhdCBmaWxlIGlzCisgICAgICAgIGVtcHR5LCBlZCB3aWxsIGltbWVkaWF0bHkgZXhpdCBhZ2Fpbi4KKyAgICAgICAgQ2FsbGluZyBlZCgpIHdpdGggYXJndW1lbnQgZmlsZSB3aWxsIHN0YXJ0IHRoZSBlZGl0b3Igb24gdGhlCisgICAgICAgIGZpbGUuIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCBmdW5jIGlzIGdpdmVuLCB0aGlzIGZ1bmN0aW9uCisgICAgICAgIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGV4aXRpbmcgdGhlIGVkaXRvci4KKworICAgICAgICBUaGUgZWRpdG9yIGVkIGlzIGFsbW9zdCBlZCgxKSBjb21wYXRpYmxlLgorCitTRUUgQUxTTworICAgICAgICBlbmFibGVfY29tbWFuZHMoRSksIHF1ZXJ5X2VkaXRpbmcoRSksIGVkMChMUEMpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9lZnVuIGIvZG9jL2VmdW4vZWZ1bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGNkM2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZWZ1bgpAQCAtMCwwICsxLDQ1IEBACitOQU1FCisgICAgICAgIGVmdW4KKworQkVTQ0hSRUlCVU5HCisgICAgICAgIERpZXNlcyBEaXJlY3RvcnkgZW50aGFlbHQgZGllIEJlc2NocmVpYnVuZ2VuIGZ1ZXIgZGllIEVmdW5zIGluCisgICAgICAgIExETXVkIDMuMyAuCisKKyAgICAgICAgRGllc2UgRnVua3Rpb25lbiB3ZXJkZW4gdm9tIERyaXZlciB6dXIgVmVyZnVlZ3VuZyBnZXN0ZWxsdCB1bmQga29lbm5lbgorICAgICAgICB2b24gamVkZW0gTFBDLU9iamVrdCB2ZXJ3ZW5kZXQgd2VyZGVuLgorCisgICAgICAgIFNwZXppZWxsZSBBcnRlbiBkaWVzZXIgRWZ1bnMgc2luZDoKKworICAgICAgICAgLSAnT3B0aW9uYWwnCisKKyAgICAgICAgICAgRXMgc3RlaHQgZGVtIE11ZC1CZXRyZWliZXIgZnJlaSwgZGllc2UgRWZ1bnMgenUgZGVha3RpdmllcmVuLgorCisgICAgICAgICAgICAgYXNzb2MoKQorICAgICAgICAgICAgIGJyZWFrX3BvaW50KCkKKyAgICAgICAgICAgICBkYl8qKCkKKyAgICAgICAgICAgICBpbnNlcnRfYWxpc3QoKQorICAgICAgICAgICAgIGludGVyc2VjdF9hbGlzdCgpCisgICAgICAgICAgICAgcGFyc2VfY29tbWFuZCgpCisgICAgICAgICAgICAgcHJvY2Vzc19zdHJpbmcoKQorICAgICAgICAgICAgIHJ1c2FnZSgpCisgICAgICAgICAgICAgc2V0X2lzX3dpemFyZCgpCisgICAgICAgICAgICAgc2V0X2xpZ2h0KCkKKyAgICAgICAgICAgICB0cmFuc2ZlcigpCisKKyAgICAgICAgIC0gJ1ZvcmxhZXVmaWcnCisKKyAgICAgICAgICAgRGFzIFZlcmhhbHRlbiBkaWVzZXIgRWZ1bnMga2FubiBzaWNoIGluIHNwYWV0ZXJlbiBEcml2ZXJ2ZXJzaW9uZW5lCisgICAgICAgICAgIGFlbmRlcm4uCisKKworICAgICAgICAgLSAnT2Jzb2xldCcgb3IgJ1ZlcmFsdGV0JworCisgICAgICAgICAgICAgbWFrZV9zaGFyZWRfc3RyaW5nKCkKKworICAgICAgICAgICBEaWVzZSBFZnVucyBzb2xsdGVuIG5pY2h0IHdlaXRlciB2ZXJ3ZW5kZXQgd2VyZGVuLiBTaWUgc3RlaGVuCisgICAgICAgICAgIGxlZGlnbGljaCBhdXMgS29tcGF0aWJpbGl0YWV0c2dydWVuZGVuIHp1ciBWZXJmdWVndW5nLCB1bmQKKyAgICAgICAgICAgd2VyZGVuIGluIGVpbmVyIHNwYWV0ZXJlbiBEcml2ZXJ2YXJpYW50ZSBlbnRmZXJudCB3ZXJkZW4uCisKKworU0lFSEUgQVVDSAorICAgICAgICBlZnVucyhMUEMpLCBhcHBsaWVkKEEpLCBtYXN0ZXIoTSksIGxwYyhMUEMpLCBjb25jZXB0cyhDKSwgZHJpdmVyKEQpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9lZnVuX19tX2RlbGV0ZSBiL2RvYy9lZnVuL2VmdW5fX21fZGVsZXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYjllMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9lZnVuX19tX2RlbGV0ZQpAQCAtMCwwICsxLDI0IEBACitTWU5PUFNJUzoKKwltYXBwaW5nIG1fZGVsZXRlKG1hcHBpbmcgbWFwLCBtaXhlZCBrZXkpCisKK0RFU0NSSVBUSU9OOgorCVJlbW92ZSB0aGUgZW50cnkgd2l0aCBpbmRleCAna2V5JyBmcm9tIG1hcHBpbmcgJ21hcCcsIGFuZAorCXJldHVybiB0aGUgY2hhbmdlZCBtYXBwaW5nLiBJZiB0aGUgbWFwcGluZyBkb2VzIG5vdCBoYXZlIGFuCisJZW50cnkgd2l0aCBpbmRleCAna2V5JywgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIHJldHVybmVkLgorCisgICAgICAgIElmIHlvdSBkb24ndCB3YW50IHRvIG1vZGlmeSB0aGUgbWFwcGluZyBtYXAsIGNoZWNrb3V0IHRoZQorICAgICAgICBzaW11bF9lZnVuIG1fZGVsZXRlKCkuCisKK0VYQU1QTEU6IAorCisgICAgICAgIG1hcHBpbmcgbTEsIG0yOworCisgICAgICAgIG0xID0gKFsgImEiOjEsICJiIjoyLCAiYyI6MyBdKTsKKworICAgICAgICBtMiA9IGVmdW46Om1fZGVsZXRlKG0xLCAiYiIpOworICAgICAgICAgICA9PiBtMSA9IChbICJhIjoxLCAiYyI6MyBdKQorCSAgICAgIG0yID0gKFsgImEiOjEsICJjIjozIF0pCisKK1NFRSBBTFNPOgorCW1hcHBpbmdwKEUpLCBta21hcHBpbmcoRSksIG1faW5kaWNlcyhFKSwgbV92YWx1ZXMoRSksCisJc2l6ZW9mKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9lbnZpcm9ubWVudCBiL2RvYy9lZnVuL2Vudmlyb25tZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMTBiM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9lbnZpcm9ubWVudApAQCAtMCwwICsxLDY5IEBACitTWU5PUFNJUworICAgICAgICBvYmplY3QgZW52aXJvbm1lbnQoKTsKKyAgICAgICAgb2JqZWN0IGVudmlyb25tZW50KG9iamVjdCBvYmopOworICAgICAgICBvYmplY3QgZW52aXJvbm1lbnQoc3RyaW5nIG9iaik7CisKK0FSR1VNRU5URToKKyAgICAgb2JqCisgICAgICAgICAgT2JqZWt0IG9kZXIgUGZhZC1TdHJpbmcgZWluZXMgT2JqZWt0ZXMgZGVzc2VuIFVtZ2VidW5nc29iamVrdAorICAgICAgICAgIGdlc3VjaHQgaXN0CisKK0JFU0NIUkVJQlVORzoKKyAgICAgRXMgd2lyZCBkYXMgT2JqZWt0IGJlc3RpbW10LCBpbiBkZW0gc2ljaCBvYmogYXVmaGFlbHQuCisgICAgIFdpcmQgb2JqIG5pY2h0IGFuZ2VnZWJlbiwgc28gd2lyZCB0aGlzX29iamVjdCgpIGFscyBPYmpla3QgYW5nZW5vbW1lbi4KKworICAgICBaZXJzdG9lcnRlIE9iamVrdGUgaGFiZW4ga2VpbiBFbnZpcm9ubWVudC4KKworQkVNRVJLVU5HRU46CisgICAgIC0gQmx1ZXByaW50cywgd2llIHp1bSBCZWlzcGllbCBSYWV1bWUgaGFiZW4gb2Z0IGtlaW4gZW52aXJvbm1lbnQoKS4gTWFuCisgICAgICAgc29sbHRlIGRhaGVyIHVlYmVycHJ1ZWZlbiwgb2IgZWluIGVudmlyb25tZW50KCkgZXhpc3RpZXJ0LCB3ZW5uIG1hbgorICAgICAgIGRhcmluIG9kZXIgZGFyYXVmIGVpbmUgRnVua3Rpb24gYXVmcnVmZW4gd2lsbC4KKworQkVJU1BJRUxFOgorICAgICAvLyBJbiBkZXIgVmFyaWFibGUgInJhdW0iIHN0ZWh0IGRlciBSYXVtLCBpbiBkZW0gc2ljaCBkZXIgU3BpZWxlciBkZXJ6ZWl0CisgICAgIC8vIGF1ZmhhZWx0IC0gZGFzIGthbm4gYXVjaCAwIHNlaW4hCisgICAgIHJhdW0gPSBlbnZpcm9ubWVudCh0aGlzX3BsYXllcigpKTsKKworICAgICAvLyBEaWVzZXMgT2JqZWt0IGhhdCBub2NoIGtlaW4gZW52aXJvbm1lbnQsIGRhIGVzIGViZW4gZXJzdCBnZWNsb250CisgICAgIC8vIHd1cmRlLiBFcmdvIHN0ZWh0IGluIGVudiBlaW5lIDAuCisgICAgIG9iaiA9IGNsb25lX29iamVjdCgiL3N0ZC90aGluZyIpOworICAgICBlbnYgPSBlbnZpcm9ubWVudChvYmopOworCisgICAgIC8vIGFsbGUgTWV0aG9kZW4gZGllIGF1ZiBFbnZpcm9ubWVudCBhcmJlaXRlbiwgc29sbHRlbiBkYXMgdm9yaGVyCisgICAgIC8vIHBydWVmZW4gLSBpbnNiZXNvbmRlcmUgdGVsbF9yb29tKCkKKyAgICAgaWYodGhpc19wbGF5ZXIoKSAmJiBlbnZpcm9ubWVudCh0aGlzX3BsYXllcigpKSAmJgorICAgICAgICBvYmplY3RwKG89cHJlc2VudCgic2NoaWxkIixlbnZpcm9ubWVudCh0aGlzX3BsYXllcigpKSkpIHsKKworICAgICAgd3JpdGUoIkR1IGtsZWJzdCBEZWluZSBQbGFrZXR0ZSBhdWYgIitvLT5uYW1lKFdFTikrIi5cbiIpOworICAgICAgdGVsbF9yb29tKGVudmlyb25tZW50KHRoaXNfcGxheWVyKCkpLCBicmVha19zdHJpbmcoCisJCXRoaXNfcGxheWVyKCktPk5hbWUoV0VSKSsiIHBhcHB0IGVpbmVuIEF1ZmtsZWJlciBhdWYgIisKKwkJby0+bmFtZShXRU4pKyIuIiw3OCksCisJCSh7dGhpc19wbGF5ZXIoKX0pKTsKKyAgICAgfQorCisgICAgIC8vIHdlbm4gRGluZ2Ugc2VociBvZmZlbnNpY2h0bGljaCBpbiBMZXV0ZW4ga2FwdXR0Z2VoZW4gd2lyZCBlcworICAgICAvLyBrb21wbGV4ZXIgKG1hbiBrYW5uIGRhcyBuYXR1ZXJsaWNoIG5vY2ggd2VpdGVyIHNjaGFjaHRlbG4gb2RlcgorICAgICAvLyB1ZWJlciBhbGxfZW52aXJvbm1lbnQoKSB2ZXJzdWNoZW4genUgbG9lc2VuCisgICAgIGlmKGVudmlyb25tZW50KCkpIHsKKyAgICAgIG9iamVjdCBlZTsKKyAgICAgIGVlPWVudmlyb25tZW50KGVudmlyb25tZW50KCkpOworICAgICAgaWYobGl2aW5nKGVudmlyb25tZW50KCkpKSB7CisgICAgICAgdGVsbF9vYmplY3QoZW52aXJvbm1lbnQoKSxOYW1lKFdFUikrIiB6ZXJmYWVsbHQuXG4iKTsKKyAgICAgICBpZihlZSkKKyAgICAgICAgdGVsbF9yb29tKGVlLAorCSBlbnZpcm9ubWVudCgpLT5OYW1lKFdFU1NFTikrIiAiK25hbWUoUkFXKSsiIHplcmZhZWxsdC5cbiIsCisJICh7ZW52aXJvbm1lbnQoKX0pKTsKKyAgICAgIH0gZWxzZSBpZihlZSAmJiBsaXZpbmcoZWUpKQorICAgICAgIGlmKGVudmlyb25tZW50KCktPlF1ZXJ5UHJvcChQX1RSQU5TUEFSRU5UKSkKKyAgICAgICAgdGVsbF9vYmplY3QoZWUsIE5hbWUoV0VSKSsiIHplcmZhZWxsdCBpbiBEZWluZSIrCisJIChlbnZpcm9ubWVudCgpLT5RdWVyeVByb3AoUF9QTFVSQUwpPyJuIjoKKwkgIChlbnZpcm9ubWVudCgpLT5RdWVyeVByb3AoUF9HRU5ERVIpPT1GRU1BTEU/InIiOiJtIikpKworCSBlbnZpcm9ubWVudCgpLT5uYW1lKFJBVykrIi5cbiIpOworICAgICAgfSBlbHNlIHRlbGxfcm9vbShlbnZpcm9ubWVudCgpLE5hbWUoV0VSKSsiIHplcmZhZWxsdC5cbiIpOworICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgICAgIGZpcnN0X2ludmVudG9yeShFKSwgbmV4dF9pbnZlbnRvcnkoRSksIGFsbF9pbnZlbnRvcnkoRSkKKyAgICAgICAgYWxsX2Vudmlyb25tZW50KEUpCisKKzIwLiBTZXAuIDIwMDIgR2xvaW5zb25ATUcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9leGVjIGIvZG9jL2VmdW4vZXhlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODZkM2UwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZXhlYwpAQCAtMCwwICsxLDM5IEBACitTWU5PUFNJUworICAgICAgICBpbnQgZXhlYyhvYmplY3QgbmV3LCBvYmplY3Qgb2xkKQorCitERVNDUklQVElPTgorICAgICAgICBleGVjKCkgc3dpdGNoZXMgdGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgaW50ZXJhY3RpdmUgb2JqZWN0IG9sZAorICAgICAgICB0byB0aGUgb2JqZWN0IG5ldy4gSWYgdGhlIG5ldyBvYmplY3QgaXMgYWxzbyBpbnRlcmFjdGl2ZSwgaXQncworICAgICAgICBjb25uZWN0aW9uIHdpbGwgYmUgdHJhbnNmZXJyZWQgdG8gdGhlIG9sZCBvYmplY3QsIHRodXMKKyAgICAgICAgZXhjaGFuaW5nIHRoZSB0d28gY29ubmVjdGlvbnMgYmV0d2VlbiB0aGUgb2JqZWN0LiBJZiB0aGUgbmV3CisgICAgICAgIG9iamVjdCBpcyBub3QgaW50ZXJhY3RpdmUsIHRoZSBvbGQgd2lsbCBub3QgYmUgaW50ZXJhY3RpdmUKKyAgICAgICAgYW55bW9yZSBhZnRlciB0aGUgZXhlYyBjYWxsIHN1Y2NlZWRlZC4KKworICAgICAgICBUaGUgcmVzdWx0IGlzIDEgb24gc3VjY2VzcywgYW5kIDAgb24gZmFpbHVyZS4KKworICAgICAgICBleGVjKCkgaXMgdXNlZCB0byBsb2FkIGRpZmZlcmVudCAidXNlciBvYmplY3RzIiBvciB0byByZWNvbm5lY3QKKyAgICAgICAgbGluayBkZWFkIHVzZXJzLgorCisgICAgICAgIFRvIHByb3ZpZGUgc2VjdXJpdHkgbWVjaGFuaXNtcywgdGhlIGludGVycHJldGVyIGNhbGxzCisgICAgICAgIG1hc3Rlci0+dmFsaWRfZXhlYyhjdXJyZW50X3Byb2dyYW0sIG5ldywgb2xkKSwgd2hpY2ggbXVzdAorICAgICAgICByZXR1cm4gYW55dGhpbmcgb3RoZXIgdGhhbiAwIHRvIGFsbG93IHRoaXMgZXhlYygpIGludm9jYXRpb24uCisKKyAgICAgICAgQWZ0ZXIgdGhlIGV4ZWMoKSwgaWYgYXJnIDIgd2FzIHRoaXNfcGxheWVyKCksIHRoaXNfcGxheWVyKCkKKyAgICAgICAgYmVjb21lcyBhcmcgMSwgZWxzZSB2aWNlIHZlcnNhLiBEaXR0byBmb3IgdGhpc19pbnRlcmFjdGl2ZSgpLgorCisgICAgICAgIFRha2UgY2FyZSB3aGVuIHdyaXRpbmcgYSBzaW11bC1lZnVuIGFyb3VuZCBleGVjKCk6IHRoZQorICAgICAgICAnY3VycmVudF9wcm9ncmFtJyBwYXNzZWQgdG8gdGhlIHZhbGlkX2V4ZWMoKSBmdW5jdGlvbiB3aWxsIGJlCisgICAgICAgIHRoYXQgb2YgdGhlIHNpbXVsLWVmdW4gb2JqZWN0LiBUbyBnZXQgYXJvdW5kIHRoaXMsIHVzZQorICAgICAgICBiaW5kX2xhbWJkYSgpIHRvIGJpbmQgIydleGVjIHRvIHRoZSByZWFsIG9iamVjdCBhbmQgZnVuY2FsbCgpCisgICAgICAgIHRoZSByZXN1bHRpbmcgY2xvc3VyZS4KKworRVhBTVBMRQorICAgICAgICBvYiA9IGNsb25lX29iamVjdCgic3RkL3BsYXllciIpOworICAgICAgICBleGVjKG9iLCB0aGlzX29iamVjdCgpKTsKKyAgICAgICAgZGVzdHJ1Y3QodGhpc19vYmplY3QoKSk7CisKK0hJU1RPUlkKKyAgICAgICAgTERNdWQgMy4yLjkgYWRkZWQgdGhlIHN3aXRjaG92ZXIgb2YgdGhpc19pbnRlcmFjdGl2ZSgpLgorCitTRUUgQUxTTworICAgICAgICBjb25uZWN0KE0pLCBkaXNjb25uZWN0KE0pLCBsb2dvbihBKSwgaW50ZXJhY3RpdmUoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2V4ZWN1dGVfY29tbWFuZCBiL2RvYy9lZnVuL2V4ZWN1dGVfY29tbWFuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzg0YzdlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZXhlY3V0ZV9jb21tYW5kCkBAIC0wLDAgKzEsMjEgQEAKK1ZPUkxBRVVGSUcsIEdFU0NIVUVUWlQKK1NZTk9QU0lTCisgICAgICAgIGludCBleGVjdXRlX2NvbW1hbmQoc3RyaW5nIGNvbW1hbmQsIG9iamVjdCBvcmlnaW4sIG9iamVjdCBwbGF5ZXIpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgRGllc2UgRnVua3Rpb24gYmlldGV0IExvdy1MZXZlbCBadWdyaWZmIGF1ZiBkZW4gS29tbWFuZG9wYXJzZXI6CisgICAgICAgIDxjb21tYW5kPiB3aXJkIGluIFZlcmIgdW5kIFJlc3QgYXVmZ2VzcGFsdGV0IHVuZCBlcyB3ZXJkZW4gZGllCisgICAgICAgIGVudHNwcmVjaGVuZGVuIGFkZF9hY3Rpb25zIGluIDxvcmlnaW4+IGF1ZmdlcnVmZW4uIEZ1ZXIgZGllCisgICAgICAgIEF1c2Z1ZWhydW5nIGRlciBGdW5rdGlvbihlbikgd2lyZCB0aGlzX3BsYXllcigpIGF1ZiA8cGxheWVyPiBnZXNldHp0LgorICAgICAgICBleGVjdXRlX2NvbW1hbmQoKSBzZXR6dCBhdWNoIHBhc3NlbmRlIFdlcnRlIGZ1ZXIgcXVlcnlfY29tbWFuZCgpCisgICAgICAgIHVuZCBxdWVyeV92ZXJiKCksIGRpZSBkZW0gYW5nZWdlYmVuZW4gPGNvbW1hbmQ+IGVudHNwcmVjaGVuLgorCisgICAgICAgIGV4ZWN1dGVfY29tbWFuZCgpIGJlcnVlY2tzaWNodGlndCB3ZWRlciBkZW4gSF9NT0RJRllfQ09NTUFORCBub2NoIGRlbgorICAgICAgICBIX05PVElGWV9GQUlMIEhvb2suIFp3YXIga2FubiBub3RpZnlfZmFpbCgpIHZlcndlbmRldCB3ZXJkZW4sIGRpZQorICAgICAgICBWZXJhcmJlaXR1bmcgbXVzcyBqZWRvY2ggZHVyY2ggZGFzIGF1ZnJ1ZmVuZGUgT2JqZWt0IGVyZm9sZ2VuLgorCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuNworCitTSUVIRSBBVUNICisgICAgICAgIGhvb2tzKEMpLCBjb21tYW5kKEUpLCBub3RpZnlfZmFpbChFKSwgY29tbWFuZF9zdGFjayhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vZXhwIGIvZG9jL2VmdW4vZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzQ2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9leHAKQEAgLTAsMCArMSw4IEBACitTWU5PUFNJUworICAgICAgICBmbG9hdCBleHAoaW50fGZsb2F0IHphaGwpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgRGllIEV4cG9uZW50aWFsZnVua3Rpb24uIExpZWZlcnQgZV56YWhsLgorCitTSUVIRSBBVUNICisgICAgICAgIGxvZyhFKSwgcG93KEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9leHBhbmRfZGVmaW5lIGIvZG9jL2VmdW4vZXhwYW5kX2RlZmluZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmZmMTg5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZXhwYW5kX2RlZmluZQpAQCAtMCwwICsxLDI0IEBACitTWU5PUFNJUworICAgICAgICBzdHJpbmcgZXhwYW5kX2RlZmluZSAoc3RyaW5nIG5hbWUpCisgICAgICAgIHN0cmluZyBleHBhbmRfZGVmaW5lIChzdHJpbmcgbmFtZSwgc3RyaW5nIGFyZywgLi4uKQorCitERVNDUklQVElPTgorICAgICAgICBFeHBhbmRzIHRoZSBtYWNybyA8bmFtZT4gd2l0aCB0aGUgYXJndW1lbnQocykgPGFyZz4uLi4gKGRlZmF1bHQgaXMKKyAgICAgICAgb25lIGVtcHR5IHN0cmluZyAiIikuCisgICAgICAgIFJlc3VsdCBpcyB0aGUgZXhwYW5kZWQgbWFjcm8sIG9yIDAgaWYgdGhlcmUgaXMgbm8gbWFjcm8gd2l0aAorICAgICAgICB0aGF0IG5hbWUuCisKKyAgICAgICAgVGhpcyBlZnVuIGlzIGFwcGxpY2FibGUgb25seSB3aGlsZSBhbiBvYmplY3QgaXMgY29tcGlsZWQsCisgICAgICAgIHRoZXJlZm9yZSBpdHMgdXNhZ2UgaXMgcmVzdHJpY3RlZCB0byBhIGZldyBmdW5jdGlvbnMgbGlrZSB0aGUKKyAgICAgICAgSF9JTkNMVURFX0RJUlMgZHJpdmVyIGhvb2ssIG9yIHRoZSBtYXN0ZXJzIHJ1bnRpbWVfZXJyb3IoKQorICAgICAgICBmdW5jdGlvbi4KKworRVhBTVBMRQorICAgICAgICBXaGlsZSBjb21waWxpbmcgJ2Zvby5jJzoKKyAgICAgICAgICBleHBhbmRfZGVmaW5lKCJfX0ZJTEVfXyIpIC0tPiAiZm9vLmMiCisKK0hJU1RPUlkKKyAgICAgICAgSW50cm9kdWNlZCBpbiAzLjIuMUA5My4KKworU0VFIEFMU08KKyAgICAgICAgaG9va3MoQyksIHJ1bnRpbWVfZXJyb3IoTSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2V4cGxvZGUgYi9kb2MvZWZ1bi9leHBsb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NmVhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9leHBsb2RlCkBAIC0wLDAgKzEsMjggQEAKK1NZTk9QU0lTCisgICAgICAgIHN0cmluZyAqZXhwbG9kZShzdHJpbmcgc3RyLCBzdHJpbmcgZGVsKQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBlaW4gRmVsZCAoQXJyYXkpIG1pdCBaZWljaGVua2V0dGVuIChTdHJpbmdzKSwgaW5kZW0gYWxsZQorICAgICAgICBWb3Jrb21tZW4gdm9uIGRlbCAoZGVsaW1pdGVyID0gVHJlbm5lcikgYXVzIHN0ciBoZXJhdXNnZXNjaG5pdHRlbgorICAgICAgICB3ZXJkZW4gdW5kIHNvIHN0ciBpbiBtZWhyZXJlIFplaWNoZW5rZXR0ZW4gemVybGVndCB3aXJkLgorCisgICAgICAgIGltcGxvZGUoZXhwbG9kZShzdHIsIGRlbCksIGRlbCkgPT0gc3RyIGlzdCBpbW1lciB3YWhyLgorCitCRUlTUElFTEUKKyAgICAgICAgRnVua3Rpb24gICAgICAgICAgICAgICAgICAgIFJ1ZWNrZ2FiZXdlcnQKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBleHBsb2RlKCIgYWIgY2QgZWYgIiwgIiAiKSAgKHsgIiIsICJhYiIsICJjZCIsICJlZiIsICIiIH0pCisgICAgICAgIGV4cGxvZGUoImFiYyIsICJhYmMiKSAgICAgICAoeyAiIiwgIiIgfSkKKyAgICAgICAgZXhwbG9kZSgiIiwgIiIpICAgICAgICAgICAgICh7fSkKKyAgICAgICAgZXhwbG9kZSgiYWJjIiwgInh5eiIpICAgICAgICh7ICJhYmMiIH0pCisgICAgICAgIGV4cGxvZGUoImFiYyIsICIiKSAgICAgICAgICAoeyAiYSIsICJiIiwgImMiIH0pCisKK0FFTkRFUlVOR0VOCisgICAgICAgIFplaXRwdW5rdCBkZXIgQWVuZGVydW5nIHVuYmVrYW5udC4KKyAgICAgICAgZXhwbG9kZSgiIGFiIGNkIGVmICIsICIgIikgbGllZmVydGUgZnJ1ZWhlciAoeyAiYWIiLCAiY2QiLCAiZWYiIH0pCisgICAgICAgIGFuc3RhdHQgKHsgIiIsICJhYiIsICJjZCIsICJlZiIsICIiIH0pLCBkLiBoLiwgbGVlcmUgWmVpY2hlbmtldHRlbgorICAgICAgICB3dXJkZW4gaWdub3JpZXJ0LiBEYXMgbmV1ZSBWZXJoYWx0ZW4gaXN0IHNjaG9lbmVyLCBkYSBudW4KKyAgICAgICAgaW1wbG9kZShleHBsb2RlKHN0ciwgZGVsKSwgZGVsKSA9PSBzdHIgaW1tZXIgd2FociBpc3QuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgc3NjYW5mKEUpLCBpbXBsb2RlKEUpLCByZWdleHBsb2RlKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9leHBvcnRfdWlkIGIvZG9jL2VmdW4vZXhwb3J0X3VpZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjFmNmEzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZXhwb3J0X3VpZApAQCAtMCwwICsxLDE1IEBACitTWU5PUFNJUworICAgICAgICB2b2lkIGV4cG9ydF91aWQob2JqZWN0IG9iKQorCitERVNDUklQVElPTgorICAgICAgICBTZXQgdGhlIHVpZCBvZiBvYmplY3Qgb2IgdG8gdGhlIGN1cnJlbnQgb2JqZWN0J3MgZWZmZWN0aXZlIHVpZC4KKyAgICAgICAgSXQgaXMgb25seSBwb3NzaWJsZSB3aGVuIG9iamVjdCBvYiBoYXMgYW4gZWZmZWN0aXZlIHVpZCBvZiAwLgorCisgICAgICAgIFRoaXMgZWZ1biBpcyBub3QgYXZhaWxhYmxlIGluIE1vcmdlbmdyYXVlbi4KKworSElTVE9SWQorICAgICAgICBTaW5jZSAzLjIuMUA0NywgdGhpcyBlZnVuIGlzIGF2YWlsYWJlIG9ubHkgd2hlbiB1c2luZyBldWlkcy4KKyAgICAgICAgU2luY2UgMy4yLjcsIHRoaXMgZWZ1biBpcyBhbHdheXMgYXZhaWxhYmxlLgorCitTRUUgQUxTTworICAgICAgICBzZXRldWlkKEUpLCBnZXR1aWQoRSksIGdldGV1aWQoRSksIHVpZHMoQyksIG5hdGl2ZShDKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vZXh0ZXJuX2NhbGwgYi9kb2MvZWZ1bi9leHRlcm5fY2FsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2RjYTVmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZXh0ZXJuX2NhbGwKQEAgLTAsMCArMSwxMiBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IGV4dGVybl9jYWxsKCk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IDAsIHdlbm4gZGllIG1vbWVudGFuZSBhdXNnZWZ1ZWhydGUgRnVua3Rpb24gZHVyY2ggZWluZSBsb2thbGUKKyAgICAgICAgRnVua3Rpb24gYXVmZ2VydWZlbiB3dXJkZSwgZWluZW4gV2VydCB1bmdsZWljaCAwIGZ1ZXIgQXVmcnVmZSBkdXJjaAorICAgICAgICBjYWxsX290aGVyKCksIGRlbiBUcmVpYmVyLCBDbG9zdXJlcyBldGMuIEltIE1vbWVudCBsaWVmZXJ0IGRpZQorICAgICAgICBGdW5rdGlvbiBpbiBhbGwgZGllc2VuIEZhZWxsZW4gMSB6dXJ1ZWNrLCBpbiBadWt1bmZ0IGtvZW5udGUKKyAgICAgICAgYWxsZXJkaW5ncyBlaW5lIFVudGVyc2NoZWlkdW5nIGRlciBBdWZydWZlIG1vZWdsaWNoIHdlcmRlbi4KKworU0lFSEUgQVVDSAorICAgICAgICBjYWxsX290aGVyKEUpLCBwcmV2aW91c19vYmplY3QoRSkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9maWxlX3NpemUgYi9kb2MvZWZ1bi9maWxlX3NpemUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ5ZGQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2ZpbGVfc2l6ZQpAQCAtMCwwICsxLDM1IEBACitGVU5LVElPTjoKKyAgICAgICAgaW50IGZpbGVfc2l6ZShzdHJpbmcgZmlsZSkKKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBMaWVmZXJ0IGRpZSBHcm9lc3NlIGRlcyBGaWxlcyBpbiBCeXRlcy4KKworUlVFQ0tHQUJFV0VSVDoKKyAgICAgICAgTGllZmVydCBkaWUgRGF0ZWlncm9lc3NlIGluIEJ5dGVzLgorCisgICAgICAgIERhdm9uIGFid2VpY2hlbmQga2FubiBhdWNoIGZvbGdlbmRlcyBhbHMgUnVlY2tnYWJld2VydCB2b3ItCisgICAgICAgIGtvbW1lbjoKKworICAgICAgICBGU0laRV9OT0ZJTEUgICAgRGFzIEZpbGUgaXN0IGVudHdlZGVyIG5pY2h0IHZvcmhhbmRlbiBvZGVyIGRhcworICAgICAgICAgKC0xKSAgICAgICAgICAgYWJmcmFnZW5kZSBPYmpla3QgYmVzaXR6dCBrZWluZSBMZXNlcmVjaHRlIGRhZnVlci4KKyAgICAgICAgRlNJWkVfRElSICAgICAgIEVzIGhhbmRlbHQgc2ljaCBuaWNodCB1bSBlaW4gRmlsZSBzb25kZXJuIHVtCisgICAgICAgICAoLTIpICAgICAgICAgICBlaW4gVmVyemVpY2huaXMuCisKK0JFSVNQSUVMRToKKyAgICAgICAgRWluIFNwaWVsZXIgc29sbCBzZWluZW4gUGxhbiBhYmZyYWdlbiBrb2VubmVuOgorCisgICAgICAgICNpbmNsdWRlIDxzeXMvZmlsZXMuaD4KKyAgICAgICAgaWYoZmlsZV9zaXplKCIvcC9zZXJ2aWNlL2xvY28vcGxhbnMvIisKKyAgICAgICAgICAgICAgICAgICAgIGdldHVpZCh0aGlzX3BsYXllcigpKSsiLnBsYW4iKSA8PSBGU0laRV9OT0ZJTEUpCisgICAgICAgIHsKKyAgICAgICAgICB3cml0ZSgiRHUgaGFzdCBrZWluZW4gZWlnZW5lbiBQbGFuIGZlc3RnZWxlZ3QuXG4iKTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorIAorICAgICAgICB0aGlzX3BsYXllcigpLT5Nb3JlKHJlYWRfZmlsZSgiL3Avc2VydmljZS9sb2NvL3BsYW5zLyIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dWlkKHRoaXNfcGxheWVyKCkpKyIucGxhbiIpOworICAgICAgICAgCitTSUVIRSBBVUNIOgorICAgICAgICBmaWxlX3RpbWUoUyksIHdyaXRlX2ZpbGUoRSksIGNhdChFKSwgZ2V0X2RpcihFKSwgbHMoKQorCiswMy4wOC4yMDA3LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9maWx0ZXIgYi9kb2MvZWZ1bi9maWx0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiYzFlOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2ZpbHRlcgpAQCAtMCwwICsxLDE4OSBAQAorZmlsdGVyKEUpCisKK0ZVTktUSU9OOgorICAgICBtaXhlZCAqIGZpbHRlciAobWl4ZWQgKmFyZywgc3RyaW5nIGZ1biwgc3RyaW5nfG9iamVjdCBvYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbWl4ZWQgZXh0cmEuLi4pCisgICAgIG1peGVkICogZmlsdGVyIChtaXhlZCAqYXJnLCBjbG9zdXJlIGNsLCBtaXhlZCBleHRyYS4uLikKKyAgICAgbWl4ZWQgKiBmaWx0ZXIgKG1peGVkICphcmcsIG1hcHBpbmcgbWFwLCBtaXhlZCBleHRyYS4uLikKKworICAgICBzdHJpbmcgIGZpbHRlciAoc3RyaW5nIGFyZywgc3RyaW5nIGZ1biwgc3RyaW5nfG9iamVjdCBvYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbWl4ZWQgZXh0cmEuLi4pCisgICAgIHN0cmluZyAgZmlsdGVyIChzdHJpbmcgYXJnLCBjbG9zdXJlIGNsLCBtaXhlZCBleHRyYS4uLikKKyAgICAgc3RyaW5nICBmaWx0ZXIgKHN0cmluZyBhcmcsIG1hcHBpbmcgbWFwLCBtaXhlZCBleHRyYS4uLikKKworICAgICBtYXBwaW5nIGZpbHRlciAobWFwcGluZyBhcmcsIHN0cmluZyBmdW5jLCBzdHJpbmd8b2JqZWN0IG9iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIG1peGVkIGV4dHJhLi4uKQorICAgICBtYXBwaW5nIGZpbHRlciAobWFwcGluZyBhcmcsIGNsb3N1cmUgY2wsIG1peGVkIGV4dHJhLi4uKQorCitQQVJBTUVURVI6CisgICAgIGFyciAgICAgLSB6dSBmaWx0ZXJuZGVzIEFycmF5L01hcHBpbmcvU3RyaW5nCisgICAgIGZ1bi9jbCAgLSB6dSBydWZlbmRlIE1ldGhvZGUvQ2xvc3VyZQorICAgICBtYXAgICAgIC0gZmlsdGVybmRlcyBNYXBwaW5nCisgICAgIG9iICAgICAgLSBPYmpla3QvRGF0ZWluYW1lLCBhbiBkZW0gTWV0aG9kZSBnZXJ1ZmVuIHdlcmRlbiBzb2xsCisgICAgIGV4dHJhICAgLSB3ZWl0ZXJlIFBhcmFtZXRlciBmdWVyIE1ldGhvZGUvQ2xvc3VyZQorCitCRVNDSFJFSUJVTkc6ICAgICAgICAKKyAgICAgUnVmdCBmdWVyIGplZGVzIEVsZW1lbnQgZGVzIEFycmF5cyBvZGVyIE1hcHBpbmdzIDxhcmc+IGRpZSBGdW5rdGlvbgorICAgICA8b2I+LT48ZnVuYz4oKSBiencuIGRpZSBDbG9zdXJlIDxjbD4gYXVmIHVuZCBsaWVmZXJ0IGplbmUgRWxlbWVudGUsCisgICAgIGZ1ZXIgZGllIGRpZSBGdW5rdGlvbiAvIENsb3N1cmUgVFJVRSBlcmdlYmVuIGhhdC4gRGllIDxleHRyYT4KKyAgICAgQXJndW1lbnRlIHdlcmRlbiBhbHMgenVzYWV0emxpY2hlIFBhcmFtZXRlciBhbiBkaWUgRnVua3Rpb24KKyAgICAgdWViZXJnZWJlbiB1bmQgZHVlcmZlbiBrZWluZSBSZWZlcmVuemVuIHZvbiBBcnJheS0gb2RlciBNYXBwaW5nLQorICAgICBFbGVtZW50ZW4gc2VpbiAod2llICYoaVsxXSkgKS4KKworICAgICBXaXJkIDxvYj4gbmljaHQgYW5nZWdlYmVuIG9kZXIgaXN0IGVzIHdlZGVyIGVpbiBTdHJpbmcgbm9jaCBlaW4KKyAgICAgT2JqZWt0LCB3aXJkIHN0YW5kYXJkbWFlc3NpZyB0aGlzX29iamVjdCgpIHZlcndlbmRldC4KKworICAgICBJc3QgPGFyZz4gZWluIEFycmF5LCB3aXJkIDxmdW4+IG1pdCBqZWRlbSBFbGVtZW50IGRlcyBBcnJheXMgYWxzCisgICAgIGVyc3RlbiBQYXJhbWV0ZXIgYXVmZ2VydWZlbiwgZ2Vmb2xndCB2b24gZGVuIDxleHRyYT4gQXJndW1lbnRlbi4KKyAgICAgV2VubiBkYXMgUmVzdWx0YXQgZGVyIEZ1bmt0aW9uIFRSVUUgZXJnaWJ0LCB3aXJkIGRhcyBFbGVtZW50IGluIGRhcworICAgICBFcmdlYm5pcyBkZXIgZmlsdGVyKCkgT3BlcmF0aW9uIG1pdCBlaW5iZXpvZ2VuLgorCisgICAgIFdpcmQgZmlsdGVyKCkgbWl0IGVpbmVtIE1hcHBpbmcgPG1hcD4gYW5zdGVsbGUgZGVyIEZ1bmt0aW9uIDxmdW5jPgorICAgICBhdWZnZXJ1ZmVuLCB3aXJkIGplZGVzIEVsZW1lbnQgaW0gQXJyYXkgPGFyZz4sIGRhcyBlaW4gS2V5IHZvbiA8bWFwPgorICAgICBpc3QsIGlucyBFcmdlYm5pcyBtaXQgZWluYmV6b2dlbi4KKworICAgICBXZW5uIDxhcmc+IGVpbiBNYXBwaW5nIGlzdCwgd2lyZCBkaWUgRnVua3Rpb24gPGZ1bmM+IG1pdCBqZWRlbSBLZXkKKyAgICAgYWxzIGVyc3RlbSB1bmQgKGZhbGxzIHZvcmhhbmRlbikgZGVuIFdlcnRlbiBkaWVzZXMgS2V5cyBhbHMgcmVzdGxpY2hlCisgICAgIFBhcmFtZXRlciwgZ2Vmb2xndCB2b24gZGVuIDxleHRyYT4gQXJndW1lbnRlbiwgYXVmZ2VydWZlbi4gV2VubiBkaWUKKyAgICAgRnVua3Rpb24gVFJVRSBlcmdpYnQsIHdpcmQgZGFzIGJldHJlZmZlbmRlIEVsZW1lbnQgZGVzIE1hcHBpbmdzIGlucworICAgICBFcmdlYm5pcyBhdWZnZW5vbW1lbi4KKworICAgICBBYmhhZW5naWcgdm9uIGRlciBHcm9lc3NlIGRlcyBNYXBwaW5ncyA8YXJnPiBlcmZvbGd0IGRlciBBdWZydWYgZGVyCisgICAgIEZ1bmt0aW9uIGF1ZiBkcmVpIHVudGVyc2NoaWVkbGljaGUgQXJ0ZW46CisKKyAgICAgd2lkdGhvZihhcmcpID09IDA6ICBvYi0+ZnVuYyhrZXksIDAsIGV4dHJhLC4uLik7CisgICAgIHdpZHRob2YoYXJnKSA9PSAxOiAgb2ItPmZ1bmMoa2V5LCBhcmdba2V5XSwgZXh0cmEsIC4uLik7CisgICAgIHdpZHRob2YoYXJnKSA+MTogICAgb2ItPmZ1bmQoa2V5LCAoe2FyZ1trZXksMF0uLi5hcmdba2V5LCBuLTFdfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEsIC4uLik7CisKKyAgICAgRGVyIFZvcnRlaWwgZGllc2VyIFZvcmdlaGVuc3dlaXNlIGlzdCwgZGFzcyBiZWlkZSBUeXBlbiB2b24KKyAgICAgbXVsdGlkaW1lbnNpb25hbGVuIE1hcHBpbmdzIChNYXBwaW5ncyBtaXQgbWVocmVyZW4gV2VydGUgcHJvIEtleSB1bmQKKyAgICAgTWFwcGluZ3MgYXVzIEFycmF5cykgZ2xlaWNoIHZlcmFyYmVpdGV0IHdlcmRlbiBrb2VubmVuLgorCisgICAgIElzdCA8YXJnPiBlaW4gU3RyaW5nLCB3ZXJkZW4gZGVyIEZpbHRlcmZ1bmt0aW9uIGRpZSBlaW56ZWxuZW4gWmVpY2hlbiBkZXMKKyAgICAgU3RyaW5ncyB1ZWJlcmdlYmVuIHVuZCBudXIgamVuZSBaZWljaGVuIGltIHp1cnVlY2tnZWdlYmVuZW4gU3RyaW5nCisgICAgIGF1Zmdlbm9tbWVuLCBmdWVyIGRpZSBkaWUgRmlsdGVyZnVua3RvbiAhPSAwIHp1cnVlY2tnaWJ0LgorCitBRU5ERVJVTkdFTgorICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuNi4gRGllIEZ1bmt0aW9uIGxvZXN0IGZpbHRlcl9hcnJheSgpIGFiLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBHZWZpbHRlcnRlcyBBcnJheSBtaXQgYWxsZW4gZGllIEZpbHRlcmJlZGluZ3VuZyBlcmZ1ZWxsZW5kZW4gRWxlbWVudGVuLgorCitCRU1FUktVTkdFTjoKKyAgICAgKDEpIEFjaHR1bmcsIGRpZSBFbGVtZW50ZSBpbiAnYXJyJyB3ZXJkZW4gbmljaHQgdGllZiBrb3BpZXJ0LCBzaW5kIHNpZQorICAgICBhbHNvIHNlbGJzdCBBcnJheXMgb2RlciBNYXBwaW5ncywgc28gZnVlaHJ0IGVpbmUgc3BhZXRlcmUgQWVuZGVydW5nIGltCisgICAgIFJ1ZWNrZ2FiZS1BcnJheXMgenVyIEFlbmRlcnVuZyBpbSBVcnNwcnVuZ3NhcnJheToKKworICAgICBpbnQgKmksICpqOworICAgICBpPSh7KHsxLDIsM30pLCh7NCw1LDZ9KX0pOworICAgICBqPWZpbHRlcihpLCAjJ3NpemVvZik7ICAgICAvLyBmaWx0ZXJ0IGxlZXJlIEFycmF5cyBoZXJhdXMKKyAgICAgalswXVswXT04OworCisgICAgIGZ1ZWhydCB6dTogaT09aj09KHsoezgsMiwzfSksKHs0LDUsNn0pfSk7CisKKyAgICAgKDIpIERhcyBLb3BpZXJlbiBpbiBkYXMgUnVlY2tnYWJlbWFwcGluZyBlcmZvbGd0IGZ1ZXIgamVkZXMgRWxlbWVudCBuYWNoCisgICAgIEF1c2Z1ZWhydW5nIGRlciBGaWx0ZXJtZXRob2RlLiBBZW5kZXJ1bmdlbiBkZXIgV2VydGUgaW0gQXJyYXkgaW4gZGllc2VyCisgICAgIE1ldGhvZGUgKGdsb2JhbGUgVmFyaWFibGUvVWViZXJnYWJlIGFscyBSZWZlcmVueiBhbiBmaWx0ZXIpCisgICAgIHNjaGxhZ2VuIHNpY2ggYWxzbyBpbSBSdWVja2dhYmVhcnJheSBuaWVkZXIuCisKKyAgICAgKDMpIEZ1ZXIgQXJyYXlzIHdpcmt0IGZpbHRlcigpIHdpZSBmaWx0ZXJfYXJyYXkoKSwgZnVlciBNYXBwaW5ncyBzdGVsbHQKKyAgICAgZmlsdGVyKCkgZWluZSBWZXJhbGxnZW1laW5lcnVuZyB2b24gZmlsdGVyX2luZGljZXMoKSBkYXIuCisKK0JFSVNQSUVMOgorICAgICAjIyMgRmlsdGVyZSBhbGxlIExlYmV3ZXNlbiBpbiBlaW5lbSBSYXVtIGluIGVpbiBBcnJheSAjIyMKKyAgICAgZmlsdGVyKGFsbF9pbnZlbnRvcnkodGhpc19vYmplY3QoKSksIydsaXZpbmcpOworCisKKyAgICAgIyMjIEZpbHRlcmUgYWxsZSB0YXViZW4gU3BpZWxlciBpbSBSYXVtIGluIGVpbiBBcnJheSAjIyMKKyAgICAgc3RhdGljIGludCBmaWx0ZXJfaXNkZWFmKG9iamVjdCB3aG8pIHsKKyAgICAgICByZXR1cm4gKGludGVyYWN0aXZlKHdobykgJiYgd2hvLT5RdWVyeVByb3AoUF9ERUFGKSk7CisgICAgIH0KKyAgICAgCisgICAgIGZpbHRlcihhbGxfaW52ZW50b3J5KHRoaXNfb2JqZWN0KCkpLCAjJ2ZpbHRlcl9pc2RlYWYpOworCisKKyAgICAgIyMjIEZpbHRlcm4gdm9uIElkbGVybiAoPj0xIFNla3VuZGUgaWRsZSkgIyMjCisgICAgIC8vIEZvbGdlbmQgaWRlbnRpc2NoZSBSZXN1bHRhdGUsIGFiZXIgYW5kZXJlIEFuc2FldHplOgorCisgICAgICMxOiBudXR6dCBkaWUgRWZ1biBxdWVyeV9pZGxlKCkgYWxzIExmdW4tQ2xvc3VyZSAoaWRlYWwgaGllcikKKyAgICAgICAgIGlkbGVfdXNyID0gZmlsdGVyKHVzZXJzKCksICMncXVlcnlfaWRsZSApOworCisgICAgICMyOiBtaXQgRmlsdGVybWV0aG9kZQorICAgICAgICAgaW50IGNoZWNrX2lmX2lkbGUob2JqZWN0IHVzZXIpIHsKKyAgICAgICAgICAgcmV0dXJuIHF1ZXJ5X2lkbGUodXNlcik7CisgICAgICAgICB9CisgICAgICAgICAKKyAgICAgICAgICMyYTogZmlsdGVydCBtaXR0ZWxzIGRlciBMZnVuIGltIHNlbGJlbiBPYmpla3QgZGllIElkbGVyIGluIGRhcworICAgICAgICAgICAgICBSdWVja2dhYmVhcnJheQorICAgICAgICAgICAgICBpZGxlX3VzciA9IGZpbHRlcih1c2VycygpLCAiY2hlY2tfaWZfaWRsZSIpOworICAgICAgICAgICAgICBpZGxlX3VzciA9IGZpbHRlcih1c2VycygpLCAiY2hlY2tfaWZfaWRsZSIsIHRoaXNfb2JqZWN0KCkpOworCisgICAgICAgICAjMmI6IHJ1ZnQgZGllIExmdW4gY2hlY2tfaWZfaWRsZSgpIGFscyBMZnVuLUNsb3N1cmUgKEZ1bmt0aW9ucy0KKyAgICAgICAgICAgICAgcG9pbnRlcikKKyAgICAgICAgICAgICAgaWRsZV91c3IgPSBmaWx0ZXIodXNlcnMoKSwgIydjaGVja19pZl9pZGxlICk7CisKKyAgICAgIzM6IG51dHp0IGVpbmUgTGFtYmRhLUNsb3N1cmUgKGxhbmdzYW1lciwgbmljaHQgZnVlciBhbGxlIGxlc2VybGljaCkKKyAgICAgICAgIGlkbGVfdXNyID0gZmlsdGVyKHVzZXJzKCksIGxhbWJkYSgoeyd1fSksICh7IydxdWVyeV9pZGxlLCAndX0pKSk7CisKKyAgICAgIzQ6IGVycmVpY2h0IGRhc3NlbGJlIHdpZSAjMyBtaXQgYmVzc2VyIGxlc2JhcmVyIElubGluZS1DbG9zdXJlCisgICAgICAgICBpZGxlX3VzciA9IGZpbHRlcih1c2VycygpLCBmdW5jdGlvbiBpbnQgKG9iamVjdCB1c2VyKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5X2lkbGUodXNlcik7CisgICAgICAgICAgICAgICAgICAgIH0gKTsKKworICAgICAjIyMgRmlsdGVybiB2b24gSWRsZXJuICg+PTIwIFNla3VuZGVuIGlkbGUpIG1pdCBFeHRyYXBhcmFtZXRlciAjIyMKKyAgICAgLy8gRm9sZ2VuZCBpZGVudGlzY2hlIFJlc3VsdGF0ZSwgYWJlciBhbmRlcmUgQW5zYWV0emU6CisKKyAgICAgIzE6IGRpZSBFZnVuIGtvZW5uZW4gd2lyIG5pY2h0IG1laHIgZGlyZWt0IG51dHplbiwgd2VpbCBzaWUKKyAgICAgICAgIGRpZXNlbiBQYXJhbWV0ZXIgbmljaHQgdW50ZXJzdHVldHp0CisgICAgICAgIC8vIGlkbGVfdXNyID0gZmlsdGVyKHVzZXJzKCksICMncXVlcnlfaWRsZSApOworCisgICAgICMyOiBtaXQgc2VwYXJhdGVyIEZpbHRlcm1ldGhvZGUgLi4uIG1pdCBuZXVlbSBQYXJhbWV0ZXIKKyAgICAgICAgIGludCBjaGVja19pZl9pZGxlKG9iamVjdCB1c2VyLCBpbnQgbGVuZ3RoKSB7CisgICAgICAgICAgIHJldHVybiBxdWVyeV9pZGxlKHVzZXIpPmxlbmd0aDsKKyAgICAgICAgIH0KKyAgICAgIAorICAgICAgICAgIzJhOiBmaWx0ZXJ0IG1pdHRlbHMgZGVyIExmdW4gaW0gc2VsYmVuIE9iamVrdCBkaWUgSWRsZXIgaW4gZGFzCisgICAgICAgICAgICAgIFJ1ZWNrZ2FiZWFycmF5IC4uLiBtaXQgZHJpdHRlbSBQYXJhbWV0ZXIhCisgICAgICAgICAgICAgIGlkbGVfdXNyID0gZmlsdGVyKHVzZXJzKCksICJjaGVja19pZl9pZGxlIiwgdGhpc19vYmplY3QoKSwgMjApOworCisgICAgICAgICAjMmI6IHJ1ZnQgZGllIExmdW4gY2hlY2tfaWZfaWRsZSgpIGFscyBMZnVuLUNsb3N1cmUgKEZ1bmt0aW9ucy0KKyAgICAgICAgICAgICAgcG9pbnRlcikKKyAgICAgICAgICAgICAgaWRsZV91c3IgPSBmaWx0ZXIodXNlcnMoKSwgIydjaGVja19pZl9pZGxlLCAyMCk7CisKKyAgICAgIzM6IG51dHp0IGVpbmUgTGFtYmRhLUNsb3N1cmUgKGxhbmdzYW1lciwgbmljaHQgZnVlciBhbGxlIGxlc2VybGljaCkKKyAgICAgICAgIGlkbGVfdXNyID0gZmlsdGVyKHVzZXJzKCksIAorICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSgoeyd1LCAnbH0pLCAoeyMnPiwoeyMncXVlcnlfaWRsZSwgJ3V9KSwnbH0pKSwgCisgICAgICAgICAgICAgICAgICAgICAgMjApOworCisgICAgICM0OiBlcnJlaWNodCBkYXNzZWxiZSB3aWUgIzMgbWl0IGVpbmVyIGRldXRsaWNoIGJlc3NlciBsZXNiYXJlbgorICAgICAgICAgSW5saW5lLUNsb3N1cmUgKGdlZ2VudWViZXIgTGFtYmRhcyB6dSBlbXBmZWhsZW5kZSBWYXJpYW50ZSk6CisgICAgICAgICBpZGxlX3VzciA9IGZpbHRlcih1c2VycygpLCBmdW5jdGlvbiBpbnQgKG9iamVjdCB1c2VyLCBpbnQgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChxdWVyeV9pZGxlKHVzZXIpID4gbGVuZ3RoKTsgCisgICAgICAgICAgICAgICAgICAgICAgfSwgMjApOworCisKK0FlUVVJVkFMRU5aQ09ERSAobmljaHQgZW1wZm9obGVuLCBudXIgenVtIFZlcnN0YWVuZG5pcyEpOgorICAgICBpbnQgaTsKKyAgICAgbWl4ZWQgKnJldDsgbWl4ZWQgKmlucHV0OworCisgICAgIHJldD1hbGxvY2F0ZSgwKTsKKyAgICAgaT1zaXplb2YoaW5wdXQpOworICAgICB3aGlsZShpLS0pCisgICAgICAgaWYob2ItPmZ1bihpbnB1dFtpXSBbLCBleHRyYTEsIGV4dHJhMiwgLi4uXSkpCisgICAgICAgLy8gaWYoZnVuY2FsbChjbCwgaW5wdXRbaV0gWywgZXh0cmExLCBleHRyYTIsIC4uLl0pKQorICAgICAgIC8vIGlmKG1lbWJlcihtYXAsIGlucHV0W2ldKSkKKyAgICAgICAgIHJldCs9KHtpbnB1dFtpXX0pOworCitTSUVIRSBBVUNIOgorICAgICBBcnJheXM6ICAgICAgICBtYXAoRSkKKyAgICAgT2JqZWt0YXJyYXlzOiAgZmlsdGVyX29iamVjdHMoRSksIG1hcF9vYmplY3RzKEUpCisgICAgIE1hcHBpbmdzOiAgICAgIGZpbHRlcl9pbmRpY2VzKEUpLCBtYXBfaW5kaWNlcyhFKQorICAgICAgICAgICAgICAgICAgICB3YWxrX21hcHBpbmcoRSksIG1lbWJlcihFKQorCisgICAgIFNvbnN0aWdlczogICAgIHNvcnRfYXJyYXkoRSksIHVuaXF1ZV9hcnJheSgpCisgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9zZV9hcnJheShFKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswOS4wNC4yMDA4LCBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2ZpbHRlci5lbmcgYi9kb2MvZWZ1bi9maWx0ZXIuZW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMGJlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9maWx0ZXIuZW5nCkBAIC0wLDAgKzEsNDkgQEAKK2ZpbHRlcihFKQorU1lOT1BTSVMKKyAgICAgbWl4ZWQgKmZpbHRlcihtaXhlZCAqYXJyLCBzdHJpbmcgZnVuLCBzdHJpbmd8b2JqZWN0IG9iCisgICAgICAgICAgICAgICAgICAgICAgICAgWywgbWl4ZWQgZXh0cmEsIC4uLl0pCisgICAgIG1peGVkICpmaWx0ZXIobWl4ZWQgKmFyciwgY2xvc3VyZSBjbCBbLCBtaXhlZCBleHRyYSwgLi4uXSkKKyAgICAgbWl4ZWQgKmZpbHRlcihtaXhlZCAqYXJyLCBtYXBwaW5nIG1hcCBbLCBtaXhlZCBleHRyYSwgLi4uXSkKKworREVTQ1JJUFRJT04KKyAgICAgICAgUmV0dXJucyBhbiBhcnJheSBob2xkaW5nIHRoZSBpdGVtcyBvZiBhcnIgZmlsdGVyZWQgdGhyb3VnaAorICAgICAgICBvYi0+ZnVuKGVsZW1lbnQsIGV4dHJhLCAuLi4pLCB0aGUgY2xvc3VyZSBjbCwgb3IgdGhlIG1hcHBpbmcgbWFwLgorICAgICAgICBUaGUgZnVuY3Rpb24gJ2Z1bicgaW4gJ29iJyByZXNwLiB0aGUgY2xvc3VyZSAnY2wnIGlzIGNhbGxlZAorICAgICAgICBmb3IgZWFjaCBlbGVtZW50IGluIGFyciB3aXRoIHRoYXQgZWxlbWVudCBhcyBwYXJhbWV0ZXIuIFRoZQorICAgICAgICBleHRyYSBhbmQgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIGluIGVhY2ggY2FsbCBpZiBnaXZlbi4KKyAgICAgICAgVGhlIG1hcHBpbmcgJ21hcCcgaXMgbGlrZXdpc2UgaW5kZXhlZCBieSBlYWNoIGVsZW1lbnQuCisgICAgICAgIElmIG9iLT5mdW4oYXJyW2luZGV4XSwgZXh0cmEpIHJldHVybnMgIT0gMCByZXNwLgorICAgICAgICBtYXBbYXJyW2luZGV4XV0gZXhpc3RzLCB0aGUgZWxlbWVudCBpcyBpbmNsdWRlZCBpbiB0aGUKKyAgICAgICAgcmV0dXJuZWQgYXJyYXkuCisKKyAgICAgICAgSWYgYXJyIGlzIG5vdCBhbiBhcnJheSwgYW4gZXJyb3Igb2NjdXJzLgorCisgICAgICAgIFRoZSBleHRyYSBhcmd1bWVudChzKSBhcmUgb3B0aW9uYWwgYW5kIG11c3Qgbm90IGJlIHByb3RlY3RlZAorICAgICAgICByZWZlcmVuY2VzIGxpa2UgJihpWzBdKS4KKyAgICAgICAgSWYgPG9iPiBpcyBvbWl0dGVkLCBvciBuZWl0aGVyIGEgc3RyaW5nIG5vciBhbiBvYmplY3QsIGl0CisgICAgICAgIGRlZmF1bHRzIHRvIHRoaXNfb2JqZWN0KCkuCisKKyAgICAgICAgU2luY2UgMy4yLjFAMzYsIHRoZSBzZWNvbmQgYXJnIGNhbiBhbHNvIGJlIGEgbWFwcGluZy4gVGhlbgorICAgICAgICBvbmx5IHRoZSBlbGVtZW50cyBvZiB0aGUgYXJyYXkgd2hpY2ggYmVsb25nIHRvIHRoZSBtYXAgKGFzCisgICAgICAgIGtleXMpIHdpbGwgYmUgcmV0dXJuZWQgKGkuZS4gbWFwW2FycltpbmRleF1dICE9IDApLgorCitFWEFNUExFCisgICAgICAgIGludCBjaGVja19pZl9pZGxlKG9iamVjdCB1c2VyKSB7IHJldHVybiBxdWVyeV9pZGxlKHVzZXIpOyB9CisKKyAgICAgICAgLi4uCisKKyAgICAgICAgb2JqZWN0ICppZGxlX3VzZXJzOworCisgICAgICAgIGlkbGVfdXNlcnMgPSBmaWx0ZXIodXNlcnMoKSwgImNoZWNrX2lmX2lkbGUiKTsKKyAgICAgICAgLyogZXF1aXZhbGVudCBidXQgc21hbGxlciBhbmQgZmFzdGVyICovCisgICAgICAgIGlkbGVfdXNlcnMgPSBmaWx0ZXIodXNlcnMoKSwgIydxdWVyeV9pZGxlICk7CisKKyAgICAgICAgTm93IGlkbGVfdXNlcnMgY29udGFpbnMgYWxsIHVzZXJzIHRoYXQgaGF2ZSBiZWVuIGlkbGUgZm9yIG1vcmUKKyAgICAgICAgdGhhbiAxIHNlY29uZC4KKworU0VFIEFMU086CisgICAgICAgIFNpbWlsYXIgZmlsdGVyOglmaWx0ZXIoRSksIGZpbHRlcl9vYmplY3QoRSksIGZpbHRlcl9pbmRpY2VzKEUpCisgICAgICAgIE1hcHBpbmc6CW1hcChFKSwgbWFwX29iamVjdHMoRSksIG1hcF9pbmRpY2VzKEUpCisgICAgICAgIFJlbGF0ZWQ6CXNvcnRfYXJheShFKSwgdW5pcXVlX2FycmF5KEUpCisKKzI5LjEwLjIwMDYgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vZmlsdGVyX2luZGljZXMgYi9kb2MvZWZ1bi9maWx0ZXJfaW5kaWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGZkYWRmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZmlsdGVyX2luZGljZXMKQEAgLTAsMCArMSwxMTUgQEAKK2ZpbHRlcl9pbmRpY2VzKEUpCisKK0ZVTktUSU9OOgorICAgICBtYXBwaW5nIGZpbHRlcl9pbmRpY2VzKG1hcHBpbmcgbWFwLCBzdHJpbmcgZnVuLCBzdHJpbmd8b2JqZWN0IG9iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWywgbWl4ZWQgZXh0cmEsIC4uLl0pCisgICAgIG1hcHBpbmcgZmlsdGVyX2luZGljZXMobWFwcGluZyBtYXAsIGNsb3N1cmUgY2wgWywgbWl4ZWQgZXh0cmEsIC4uLl0pCisKK1BBUkFNRVRFUjoKKyAgICAgbWFwCS0genUgZmlsdGVybmRlcyBNYXBwaW5nCisgICAgIGZ1bi9jbAktIHp1IHJ1ZmVuZGUgTWV0aG9kZS9DbG9zdXJlCisgICAgIG9iCQktIE9iamVrdC9EYXRlaW5hbWUsIGFuIGRlbSBNZXRob2RlIGdlcnVmZW4gd2VyZGVuIHNvbGwKKyAgICAgZXh0cmEJLSB3ZWl0ZXJlIFBhcmFtZXRlciBmdWVyIE1ldGhvZGUvQ2xvc3VyZQorCitCRVNDSFJFSUJVTkc6CisgICAgIEZpbHRlcnQgZGllIEVsZW1lbnRlIChqZXdlaWxzIFNjaGx1ZXNzZWwpIGF1cyAnbWFwJyBkdXJjaCBkaWUKKyAgICAgTWV0aG9kZSAnZnVuJyBvZGVyIGRpZSBDbG9zdXJlICdjbCcgaW4gZWluIG5ldWVzIE1hcHBpbmcuCisgICAgIEZ1ZXIgamVkZXMgRWxlbWVudCBhdXMgJ21hcCcgd2lyZCAnZnVuJyBvZGVyICdjbCcgbWl0IGRlbSBTY2hsdWVzc2VsIGFscworICAgICBlcnN0ZW0gUGFyYW1ldGVyIFt1bmQgZm9sZ2VuZCBkZW4gb3B0aW9uYWxlbiBFeHRyYS1QYXJhbWV0ZXJuXSBnZXJ1ZmVuLgorCisgICAgIFdlbm4gZGVyIEF1ZnJ1ZgorICAgICAgCW9iLT5mdW4oZWxlbWVudCBbLCBleHRyYTEsIGV4dHJhMiwgLi4uXSkgYnp3LgorICAgICAgIAlmdW5jYWxsKGNsLCBlbGVtZW50IFssIGV4dHJhMSwgZXh0cmEyLCAuLi5dKQorICAgICBhbHMgUnVlY2tnYWJld2VydCAhPTAgenVydWVja2dpYnQgZGFubiB3aXJkIGRlciBTY2hsdWVzc2VsK1dlcnRlIGluIGRhcworICAgICBuZXVlIEFycmF5IGF1Zmdlbm9tbWVuLCBzb25zdCBuaWNodC4KKworICAgICBXZW5uIGF1ZiBkaWUgV2VydGUgenVnZWdyaWZmZW4gd2VyZGVuIG11c3MsIGthbm4gZGFzIE1hcHBpbmcgJ21hcCcKKyAgICAgenVzYWV0emxpY2ggYWxzICdleHRyYSctUGFyYW1ldGVyIHVlYmVyZ2ViZW4gd2VyZGVuLiBBbHRlcm5hdGl2IGthbm4gbWFuCisgICAgIHdhbGtfbWFwcGluZygpIGJlbnV0emVuIHVuZCBkYXMgUnVlY2tnYWJlbWFwcGluZyBzZWxic3QgZXJzdGVsbGVuLgorCisKKyAgICAgVmVyd2VuZHVuZyB2b24gTWV0aG9kZW46CisJV2VubiBiZWkgZGVyIEFuZ2FiZSB2b24gJ2Z1bicga2VpbiBPYmpla3QgJ29iJyBpbiBGb3JtIGVpbmVzIFN0cmluZ3MKKwlvZGVyIE9iamVrdHMgYW5nZWdlYmVuIHdpcmQsIHdpcmQgdGhpc19vYmplY3QoKSBhbmdlbm9tbWVuLgorCisgICAgIFZlcndlbmR1bmcgdm9uIENsb3N1cmVzOgorCUVzIGtvZW5uZW4gc293b2hsIExmdW4tQ2xvc3VyZXMgYWxzIGF1Y2ggTGFtYmRhLUNsb3N1cmVzIHZlcndlbmRldAorCXdlcmRlbi4gTGZ1bi1DbG9zdXJlcyBrb2VubmVuLCB3ZW5uIGltIHNlbGJlbiBPYmpla3Qgdm9yaGFuZGVuIGF1Y2gKKwkncHJpdmF0ZScgb2Rlci91bmQgJ3N0YXRpYycgZGVrbGFyaWVydCBzZWluLCBtdWVzc2VuIGFiZXIgenUgZGVtCisJWmVpdHB1bmt0IGRlciBWZXJ3ZW5kdW5nIGJla2FubnQgc2VpbiAoRnVua3Rpb25zcHJvdG90eXBlbiBiZW51dHplbikuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIEdlZmlsdGVydGVzIE1hcHBpbmcgbWl0IEZpbHRlcmJlZGluZ3VuZyBlcmZ1ZWxsZW5kZW4gRWxlbWVudGVuLgorCitCRU1FUktVTkdFTjoKKyAgICAgKDEpIEFjaHR1bmcsIGRpZSBFbGVtZW50ZSBpbiAnbWFwJyB3ZXJkZW4gbmljaHQgdGllZiBrb3BpZXJ0LCBzaW5kIHNpZQorICAgICBhbHNvIHNlbGJzdCBBcnJheXMgb2RlciBNYXBwaW5ncywgc28gZnVlaHJ0IGVpbmUgc3BhZXRlcmUgQWVuZGVydW5nIGltCisgICAgIFJ1ZWNrZ2FiZS1NYXBwaW5nIHp1ciBBZW5kZXJ1bmcgaW0gVXJzcHJ1bmdzbWFwcGluZzoKKworICAgICBtYXBwaW5nIG0sbjsKKyAgICAgbT0oWzE6KHsxLDJ9KSwwOih7MiwzLDR9KV0pOworICAgICBuPWZpbHRlcl9pbmRpY2RlcyhtLCAjJyEpOwkJLy8gZmlsdGVydCBhbGxlIEtleXMgIT0wIGhlcmF1cworICAgICBuWzBdWzBdPTg7CisKKyAgICAgZnVlaHJ0IHp1OiBuPShbMDooezgsMyw0fSldKQorICAJCW09KFswOih7OCwzLDR9KSwxOih7MSwyfSldKQorCisgICAgICgyKSBEYXMgS29waWVyZW4gaW4gZGFzIFJ1ZWNrZ2FiZW1hcHBpbmcgZXJmb2xndCBmdWVyIGplZGVzIEVsZW1lbnQgbmFjaAorICAgICBBdXNmdWVocnVuZyBkZXIgRmlsdGVybWV0aG9kZS4gQWVuZGVydW5nZW4gZGVyIFdlcnRlIGltIE1hcHBpbmcgaW4gZGllc2VyCisgICAgIE1ldGhvZGUgKGdsb2JhbGUgVmFyaWFibGUvVWViZXJnYWJlIGFscyBSZWZlcmVueiBhbiBmaWx0ZXJfaW5kaWNlcykKKyAgICAgc2NobGFnZW4gc2ljaCBhbHNvIGltIFJ1ZWNrZ2FiZW1hcHBpbmcgbmllZGVyLgorCitCRUlTUElFTEU6CisgICAgICMjIyBlcmZ1bmRlbmUgTGlzdGUgbWl0IFNwaWVsZXJuIHNhZXViZXJuIC4uLiAjIyMKKyAgICAgbWFwcGluZyB4PShbIFsvaHVtYW46bGlhZmFyXTogIDIwLAorCQkgIFsvZHdhcmY6bWVzaXJpaV06IDUwLAorCQkgIFsvZWxmOnphcm5peWFdOiAgIDQwLAorCQkgIFsvZmVsaW5lOnR1cmJvXTogIDMwXSk7CisKKyAgICAgaW50IGlzX2JhZGd1eShvYmplY3Qgd2hvKSB7CisgICAgICBpZih3aG8tPkluRmlnaHQoKSkgcmV0dXJuIDE7CisgICAgICByZXR1cm4gMDsKKyAgICAgfQorCisgICAgIG1hcHBpbmcgcmVzdWx0PWZpbHRlcl9pbmRpY2VzKHgsICMnaXNfYmFkZ3V5KTsKKyAgICAgLy8gJ3Jlc3VsdCcgZW50aGFlbHQgbnVyIG5vY2gga2FlbXBmZW5kZSBTcGllbGVyCisKKyAgICAgIyMjIGVyZnVuZGVuZSBMaXN0ZSB1ZWJlciBpaHJlIFdlcnRlIHNhZXViZXJuICMjIworICAgICBpbnQgaXNfYmFkZ3V5KG9iamVjdCB3aG8sIG1hcHBpbmcgbSkgeworICAgICAgaWYobVt4XTwzMCkgcmV0dXJuIDE7CisgICAgICByZXR1cm4gMDsKKyAgICAgfQorCisgICAgIG1hcHBpbmcgcmVzdWx0PWZpbHRlcl9pbmRpY2VzKHgsICMnaXNfYmFkZ3V5LCAmeCk7IC8vIFJlZmVyZW56CisgICAgIC8vICdyZXN1bHQnIGVudGhhZWx0IG51ciBTcGllbGVyIG1pdCBXZXJ0ZW4gPj0gMzAKKworQWVRVUlWQUxFTlpDT0RFIChuaWNodCBlbXBmb2hsZW4sIG51ciB6dW0gVmVyc3RhZW5kbmlzISk6CisgICAgIGludCBpLCB3aWR0aDsKKyAgICAgbWFwcGluZyByZXQ7IG1hcHBpbmcgaW5wdXQ7CisgICAgIG1peGVkICppbmRleDsKKworICAgICB3aWR0aD1nZXRfdHlwZV9pbmZvKGlucHV0KVsxXTsKKyAgICAgcmV0PW1fYWxsb2NhdGUoMCwgd2lkdGgpOworICAgICBpbmRleD1tX2luZGljZXMoaW5wdXQpOworICAgICBpPXNpemVvZihpbmRleCk7CisgICAgIHdoaWxlKGktLSkKKyAgICAgICBpZihvYi0+ZnVuKGluZGV4W2ldIFssIGV4dHJhMSwgZXh0cmEyLCAuLi5dKSkKKyAgICAgICAvLyBpZihmdW5jYWxsKGNsLCBpbmRleFtpXSBbLCBleHRyYTEsIGV4dHJhMiwgLi4uXSkpCisgICAgICAgeworICAgICAgICAgaW50IGo7CisgICAgICAgICBqPXdpZHRoOworCisgICAgICAgICB3aGlsZShqLS0pCisgICAgICAgICAgIHJldFtpbmRleFtpXSxqXT1pbnB1dFtpbmRleFtpXSxqXTsKKyAgICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIEFycmF5czoJCWZpbHRlcihFKSwgbWFwKEUpCisgICAgIE9iamVrdGFycmF5czoJZmlsdGVyX29iamVjdHMoRSksIG1hcF9vYmplY3RzKEUpCisgICAgIE1hcHBpbmdzOgkJbWFwX2luZGljZXMoRSkKKworICAgICBTb25zdGlnZXM6CQl3YWxrX21hcHBpbmcoRSksIG1fY29udGFpbnMoRSkKKwkJCW1lbWJlcigpCisJCQltX2luZGljZXMoRSksIG1fdmFsdWVzKEUpCisKKzI5LjEwLjIwMDYgWmVzc3RyYQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vZmlsdGVyX29iamVjdHMgYi9kb2MvZWZ1bi9maWx0ZXJfb2JqZWN0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmI2OTIyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZmlsdGVyX29iamVjdHMKQEAgLTAsMCArMSw1OSBAQAorZmlsdGVyX29iamVjdHMoRSkKKworRlVOS1RJT046CisgICAgIG9iamVjdCAqZmlsdGVyX29iamVjdHMobWl4ZWQgKmFyciwgc3RyaW5nIGZ1biwgWywgbWl4ZWQgZXh0cmEsIC4uLl0pCisKK1BBUkFNRVRFUjoKKyAgICAgYXJyCS0genUgZmlsdGVybmRlcyBBcnJheSB2b24gT2JqZWt0ZW4vT2JqZWt0cGZhZGVuCisgICAgIGZ1bgktIGFuIE9iamVrdGVuIHp1IHJ1ZmVuZGUgTWV0aG9kZQorICAgICBleHRyYQktIHdlaXRlcmUgUGFyYW1ldGVyIGZ1ZXIgTWV0aG9kZQorCitCRVNDSFJFSUJVTkc6CisgICAgIEZpbHRlcnQgZGllIEVsZW1lbnRlIGF1cyAnYXJyJyBkdXJjaCBkZW4gQXVmcnVmIGRlciBNZXRob2RlICdmdW4nIGFuCisgICAgIGplZGVtIGRlciBFbGVtZW50ZSB2b24gJ2FycicuIDAtRWludHJhZWdlIHdlcmRlbiBpZ25vcmllcnQuCisKKyAgICAgV2VubiBkZXIgQXVmcnVmCisJYXJyW25dLT5mdW4oW2V4dHJhMSwgZXh0cmEyLCAuLi5dKQorICAgICBhbHMgUnVlY2tnYWJld2VydCAhPTAgenVydWVja2dpYnQgZGFubiB3aXJkIGRhcyBFbGVtZW50IGluIGRhcyBuZXVlCisgICAgIEFycmF5IGF1Zmdlbm9tbWVuLCBzb25zdCBuaWNodC4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgR2VmaWx0ZXJ0ZXMgQXJyYXkgbWl0IEZpbHRlcmJlZGluZ3VuZyBlcmZ1ZWxsZW5kZW4gT2JqZWt0ZW4uCisKK0JFTUVSS1VOR0VOOgorICAgICBXZXJkZW4gUGZhZGUgYW5nZWdlYmVuLCBzbyB3aXJkIHZlcnN1Y2h0IGVpbiBPYmpla3QgenUgbGFkZW4sIGZhbGxzCisgICAgIGRpZXNlcyBuaWNodCBleGlzdGllcnQuCisKK0JFSVNQSUVMOgorICAgICAvLyBnaWJ0IGFsbGUgdGF1YmVuIFBlcnNvbmVuIHdpZWRlcgorICAgICBkZWFmPWZpbHRlcl9vYmplY3RzKHVzZXJzKCksICJRdWVyeVByb3AiLCBQX0RFQUYpOworCisgICAgIC8vIGdpYnQgYWxsZSBibGluZGVuIFBlcnNvbmVuIHdpZWRlcgorICAgICBibGluZD1maWx0ZXJfb2JqZWN0cyh1c2VycygpLCAiUXVlcnlQcm9wIiwgUF9CTElORCk7CisKKyAgICAgLy8gZmlsdGVydCBhbGxlIE9iamVrdGUgYXVmIGVpbmUgYmVzdGltbXRlIElEICgtPiBwcmVzZW50KQorICAgICBpZG1hdGNoPWZpbHRlcl9vYmplY3RzKGFyciwgImlkIiwgImlyZ2VuZHdhc0lEIik7CisKKyAgICAgLy8gZ2lidCBhbGxlIEF1dG9sb2FkZXIgd2llZGVyCisgICAgIGFsPWZpbHRlcl9vYmplY3RzKGFsbF9pbnZlbnRvcnkodGhpc19wbGF5ZXIoKSksCisgICAgICAgICAgICAgICAgICAgICAgIlF1ZXJ5UHJvcCIsIFBfQVVUT0xPQURPQkopOworCitBZVFVSVZBTEVOWkNPREUgKG5pY2h0IGVtcGZvaGxlbiwgbnVyIHp1bSBWZXJzdGFlbmRuaXMhKToKKyAgICAgaW50IGk7CisgICAgIG9iamVjdCAqcmV0OyBtaXhlZCAqaW5wdXQ7CisKKyAgICAgcmV0PWFsbG9jYXRlKDApOworICAgICBpPXNpemVvZihpbnB1dCk7CisgICAgIHdoaWxlKGktLSkKKyAgICAgICBpZihpbnB1dFtpXS0+ZnVuKFtleHRyYTEsIGV4dHJhMiwgLi4uXSkpCisgICAgICAgICByZXQrPSh7aW5wdXRbaV19KTsKKworU0lFSEUgQVVDSDoKKyAgICAgQXJyYXlzOgkJZmlsdGVyKEUpLCBtYXAoRSkKKyAgICAgT2JqZWt0YXJyYXlzOgltYXBfb2JqZWN0cyhFKQorICAgICBNYXBwaW5nczoJCWZpbHRlcl9pbmRpY2VzKEUpLCBtYXBfaW5kaWNlcyhFKQorCisgICAgIFNvbnN0aWdlczoJCXNvcnRfYXJyYXkoRSksIHVuaXF1ZV9hcnJheSgpCisJCQlhbGlzdCwgdHJhbnNwb3NlX2FycmF5KEUpCisKKzIwLkphbiAyMDA1IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9maW5kX2NhbGxfb3V0IGIvZG9jL2VmdW4vZmluZF9jYWxsX291dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTk0MzM3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZmluZF9jYWxsX291dApAQCAtMCwwICsxLDQxIEBACitGVU5LVElPTjoKKyAgICAgICAgaW50IGZpbmRfY2FsbF9vdXQoc3RyaW5nIGZ1bmMpCisgICAgICAgIGludCBmaW5kX2NhbGxfb3V0KGNsb3N1cmUgY2wpCisKK0JFU0NIUkVJQlVORzoKKyAgICAgICAgRmluZGV0IGRlbiBlcnN0ZW4gY2FsbF9vdXQoKSBhdWYgZGllIEZ1bmt0aW9uICdmdW5jJyBpbSBha3R1ZWxsZW4gT2JqZWt0CisgICAgICAgIChiencuIGF1ZiBkaWUgQ2xvc3VyZSAnY2wnKSBkZXIgYXVzZ2VmdWVocnQgd2VyZGVuIHNvbGwuCisgICAgICAgIFp1cnVlY2sgZ2VnZWJlbiB3aXJkIGRpZSB2ZXJibGVpYmVuZGUgWmVpdCBiaXMgenVtIEF1ZnJ1ZiBpbiBTZWt1bmRlbi4KKyAgICAgICAgV2VubiBrZWluIGNhbGxfb3V0KCkgZ2VmdW5kZW4gd2lyZCwgd2lyZCAtMSB6dXJ1ZWNrIGdlZ2ViZW4uCisKK0JFSVNQSUVMRToKKyAgICAgICAgLy8gRmluZGV0IHNpY2gga2VpbiBjYWxsX291dCBhdWYgZGllIEZ1bmt0aW9uICdmdW5jJywgc28ga2FubiBlcgorICAgICAgICAvLyBnZXN0YXJ0ZXQgd2VyZGVuLiAoV2ljaHRpZyBmYWxscyBkZXIgY2FsbF9vdXQgbmljaHQgbWVocmZhY2gKKyAgICAgICAgLy8gYXVmZ2VydWZlbiB3ZXJkZW4gc29sbCkuCisgCisgICAgICAgIGlmKGZpbmRfY2FsbF9vdXQoImZ1bmMiKT09LTEpCisgICAgICAgICAgY2FsbF9vdXQoImZ1bmMiLDUpOworCisgICAgICAgIC8vIEFsbGUgY2FsbF9vdXQgYXVmIEZ1bmt0aW9uICdmdW5jJyB3ZXJkZW4gZ2VmdW5kZW4gdW5kIGdlc3RvcHB0LgorICAgICAgICAvLyAoQmVpc3BpZWxzd2Vpc2Ugd2VpbCBlaW4gU3BpZWxlciBkZW4gUmF1bSB2ZXJsYWVzc3Qgb2RlciBzaWNoCisgICAgICAgIC8vIGRpc2Nvbm5lY3RldCkuCisKKyAgICAgICAgd2hpbGUoZmluZF9jYWxsX291dCgiZnVuYyIpID4gLTEpCisgICAgICAgICAgcmVtb3ZlX2NhbGxfb3V0KCJmdW5jIik7CisKKyAgICAgICAgLy8gRGllIFN1Y2hlIG5hY2ggY2FsbF9vdXQoKXMgYXVmIENsb3N1cmVzIGZ1bmt0aW9uaWVydCBudXIsIHdlbm4gZGVyCisgICAgICAgIC8vIGdlbmF1ZSBXZXJ0IGRlciBDbG9zdXJlIGdlc3VjaHQgd2lyZC4KKworICAgICAgICAvLyBEYXMgZnVua3Rpb25pZXJ0OgorICAgICAgICAgICAgY2xvc3VyZSBjbCA9IHN5bWJvbF9mdW5jdGlvbigibWFpbiIsIG9iaik7CisgICAgICAgICAgICBjYWxsX291dChjbCwgMik7CisgICAgICAgICAgICBmaW5kX2NhbGxfb3V0KGNsKTsKKworICAgICAgICAvLyBEYXMgZnVua3Rpb25pZXJ0IG5pY2h0OgorICAgICAgICAgICAgY2FsbF9vdXQoc3ltYm9sX2Z1bmN0aW9uKCJtYWluIiwgb2JqKSwgMik7CisgICAgICAgICAgICBmaW5kX2NhbGxfb3V0KHN5bWJvbF9mdW5jdGlvbigibWFpbiIsIG9iaikpOworCitTSUVIRSBBVUNIOgorICAgICAgICBjYWxsX291dChFKSwgcmVtb3ZlX2NhbGxfb3V0KEUpLCBjYWxsX291dF9pbmZvKEUpCisKKzQuQXVnIDIwMDcgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2ZpbmRfaW5wdXRfdG8gYi9kb2MvZWZ1bi9maW5kX2lucHV0X3RvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMjk5YzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9maW5kX2lucHV0X3RvCkBAIC0wLDAgKzEsMjYgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCBmaW5kX2lucHV0X3RvIChvYmplY3QgcGxheWVyLCBzdHJpbmcgZnVuKTsKKyAgICAgICAgaW50IGZpbmRfaW5wdXRfdG8gKG9iamVjdCBwbGF5ZXIsIGNsb3N1cmUgZnVuKTsKKyAgICAgICAgaW50IGZpbmRfaW5wdXRfdG8gKG9iamVjdCBwbGF5ZXIsIG9iamVjdCBmdW4pOworICAgICAgICBpbnQgZmluZF9pbnB1dF90byAob2JqZWN0IHBsYXllciwgb2JqZWN0IG9iLCBzdHJpbmcgZnVuKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEZpbmRldCBkZW4genVsZXR6dCBmdWVyIDxwbGF5ZXI+IGdlc3RhcnRldGVuIGlucHV0X3RvKCksIGFiaGFlbmdpZyB2b20KKyAgICAgICAgQXJndW1lbnQgPGZ1bj46CisgICAgICAgICAgLSA8ZnVuPiBpc3QgZWluIFN0cmluZzogZGVyIEZ1bmt0aW9uc25hbWUgZGVzIGlucHV0X3RvKCkgbXVzcyBwYXNzZW4KKyAgICAgICAgICAtIDxmdW4+IGlzdCBlaW4gT2JqZWt0OiBkYXMgT2JqZWt0LCBhbiB3ZWxjaGVzIGRpZSBGdW5rdGlvbiBkZXMKKyAgICAgICAgICAgIGlucHV0X3RvKCkgZ2VidW5kZW4gaXN0LCBtdXNzIHBhc3NlbgorICAgICAgICAgIC0gPGZ1bj4gaXN0IGVpbmUgQ2xvc3VyZTogZGllIGlucHV0X3RvKCkgQ2xvc3VyZSBtdXNzIHBhc3NlbgorICAgICAgICAgIC0gPG9iPiB1bmQgPGZ1bj4gc2luZCBhbmdlZ2ViZW46IHNvd29obCBPYmpla3QgYWxzIGF1Y2gKKyAgICAgICAgICAgIEZ1bmt0aW9uc25hbWUgbXVlc3NlbiBwYXNzZW4uCisKKyAgICAgICAgRGllIEZ1bmt0aW9uIGxpZWZlcnQgLTEsIHdlbm4ga2VpbiBpbnB1dF90bygpIGdlZnVuZGVuIHd1cmRlLCBzb25zdAorICAgICAgICBkaWUgUG9zaXRpb24gaW0gaW5wdXRfdG8oKSBTdGFjayAod29iZWkgMCBkZW4gYWxzIGxldHp0ZXMKKyAgICAgICAgaGluenVnZWZ1ZWd0ZW4gaW5wdXRfdG8oKSBiZXplaWNobmV0KS4KKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjkKKworU0lFSEUgQVVDSAorICAgICAgICBpbnB1dF90byhFKSwgaW5wdXRfdG9faW5mbyhFKSwgcmVtb3ZlX2lucHV0X3RvKEUpLAorICAgICAgICBxdWVyeV9pbnB1dF9wZW5kaW5nKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9maW5kX29iamVjdCBiL2RvYy9lZnVuL2ZpbmRfb2JqZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNGYwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9maW5kX29iamVjdApAQCAtMCwwICsxLDIzIEBACitTWU5PUFNJUzoKKyAgICAgICAgb2JqZWN0IGZpbmRfb2JqZWN0KHN0cmluZyBzdHIpCisKK0RFU0NSSVBUSU9OOgorICAgICAgICBGaW5kIGFuIG9iamVjdCB3aXRoIHRoZSBvYmplY3RfbmFtZSBzdHIuIElmIHRoZSBvYmplY3QgaXNuJ3QgbG9hZGVkLAorCWl0IHdpbGwgbm90IGJlIGZvdW5kLgorCitFWEFNUExFOgorICAgICAgICBvYmplY3Qgb2JqOworICAgICAgICBvYmogPSBmaW5kX29iamVjdCgic3RkL3RoaW5nIik7CisgICAgICAgIG9iaiA9IGZpbmRfb2JqZWN0KCJzdGQvdGhpbmcuYyIpOworICAgICAgICBvYmogPSBmaW5kX29iamVjdCgiL3N0ZC90aGluZyIpOworICAgICAgICBvYmogPSBmaW5kX29iamVjdCgiL3N0ZC90aGluZy5jIik7CisgICAgICAgIAorICAgICAgICBBbGwgZm91ciBzdGF0ZW1lbnRzIGFyZSBlcXVhbC4KKworCW9iaiA9IGZpbmRfb2JqZWN0KCIvc3RkL3RoaW5nIzQyIik7CisKKwlyZXR1cm5zIHRoZSBjbG9uZSB3aG9zZSBvYmplY3RfbmFtZSBpcyAic3RkL3RoaW5nIzQyIiwgaWYKKwlpdCBleGlzdHMuCisKK1NFRSBBTFNPOgorICAgICAgICBmaW5kX2xpdmluZyhFKSwgZmluZF9wbGF5ZXIoRSksIG9iamVjdF9uYW1lKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9maXJzdF9pbnZlbnRvcnkgYi9kb2MvZWZ1bi9maXJzdF9pbnZlbnRvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliZTdmZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2ZpcnN0X2ludmVudG9yeQpAQCAtMCwwICsxLDM0IEBACitTWU5PUFNJUworICAgICAgICBvYmplY3QgZmlyc3RfaW52ZW50b3J5KCk7CisgICAgICAgIG9iamVjdCBmaXJzdF9pbnZlbnRvcnkoc3RyaW5nIG9iKTsKKyAgICAgICAgb2JqZWN0IGZpcnN0X2ludmVudG9yeShvYmplY3Qgb2IpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBkYXMgZXJzdGUgT2JqZWt0IGltIEludmVudG9yeSB2b24gPG9iaj4sIHdvYmVpIDxvYmo+IGVudHdlZGVyCisgICAgICAgIGVpbiBPYmpla3Qgb2RlciBkZXIgTmFtZSBlaW5lcyBPYmpla3RzIGlzdC4gV2VubiA8b2JqPiBuaWNodCBhbmdlZ2ViZW4KKyAgICAgICAgd2lyZCwgd2lyZCBzdGFuZGFyZG1hZXNzaWcgdGhpc19vYmplY3QoKSB2ZXJ3ZW5kZXQuCisKK0JFSVNQSUVMRQorICAgICAgICBEaWVzZSBFZnVuIHZlcndlbmRldCBtYW4gYW0gaGFldWZpZ3N0ZW4gaW0gZm9sZ2VuZGVuIEtvbnRleHQ6CisKKyAgICAgICAgICAgIGZvcihvYmo9Zmlyc3RfaW52ZW50b3J5KGNvbnRhaW5lcik7b2JqO29iaj1uZXh0X2ludmVudG9yeShvYmopKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIDxpcmdlbmR3ZWxjaGVyIENvZGU+CisgICAgICAgICAgICB9CisKKyAgICAgICAgQUNIVFVORzogV2VubiBkYXMgT2JqZWt0IDxvYmo+IGlubmVyaGFsYiB2b24gPGlyZ2VuZHdlbGNoZXIgQ29kZT4KKyAgICAgICAgYmV3ZWd0IHdpcmQsIGxpZWZlcnQgbmV4dF9pbnZlbnRvcnkoKSBlaW4gT2JqZWt0IGF1cyBkZW0gbmV1ZW4KKyAgICAgICAgSW52ZW50b3J5IHZvbiA8b2JqPi4gQXVjaCBzb2xsdGUgbmV4dF9pbnZlbnRvcnkoKSBuaWNodCBmdWVyCisgICAgICAgIHplcnN0b2VydGUgT2JqZWt0ZSA8b2JqPiBhdWZnZXJ1ZmVuIHdlcmRlbi4gRnVlciBkZW4gRmFsbCwgZGFzcworICAgICAgICA8b2JqPiBiZXdlZ3QgdW5kL29kZXIgemVyc3RvZXJ0IHdpcmQsIGlzdCBmb2xnZW5kZSBMb2VzdW5nCisgICAgICAgIHZvcnp1emllaGVuOgorCisgICAgICAgICAgICBmb3Iob2JqPWZpcnN0X2ludmVudG9yeShjb250YWluZXIpO29iajspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmV4dD1uZXh0X2ludmVudG9yeShvYmopOworICAgICAgICAgICAgICAgIDxpcmdlbmR3ZWxjaGVyIENvZGUgbWl0IE1vdmVzIG9kZXIgUmVtb3Zlcz4KKyAgICAgICAgICAgICAgICBvYmo9bmV4dDsKKyAgICAgICAgICAgIH0KKworU0lFSEUgQVVDSAorICAgICAgICBuZXh0X2ludmVudG9yeShFKSwgYWxsX2ludmVudG9yeShFKSwgZW52aXJvbm1lbnQoRSksIGRlZXBfaW52ZW50b3J5KEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9mbG9hdHAgYi9kb2MvZWZ1bi9mbG9hdHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA5Y2FjZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2Zsb2F0cApAQCAtMCwwICsxLDEwIEBACitTWU5PUFNJUworICAgICAgICBpbnQgZmxvYXRwKG1peGVkIGFyZykKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgMSwgd2VubiBkYXMgQXJndW1lbnQgZWluZSBGbGllc3Nrb21tYXphaGwgKGZsb2F0KSBpc3QsCisgICAgICAgIGFuc29uc3RlbiAwLgorCitTSUVIRSBBVUNICisgICAgICAgIGludHAoRSksIG1hcHBpbmdwKEUpLCBzdHJpbmdwKEUpLCBjbG9zdXJlcChFKSwgb2JqZWN0cChFKSwKKyAgICAgICAgcmVmZXJlbmNlcChFKSwgcG9pbnRlcnAoRSksIHN5bWJvbHAoRSksIGNsb25lcChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vZmxvb3IgYi9kb2MvZWZ1bi9mbG9vcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2I4NWU2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZmxvb3IKQEAgLTAsMCArMSwxOSBAQAorU1lOT1BTSVMKKyAgICAgICAgZmxvYXQgZmxvb3IoZmxvYXQgYXJnKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIFJ1bmRldCBkYXMgQXJndW1lbnQgPGFyZz4gYWIgYXVmIGRpZSBuYWVjaHN0ZSBnYW56ZSBaYWhsIHVuZCBnaWJ0CisgICAgICAgIGRpZXNlbiBXZXJ0IHp1cnVlY2suIFdlbm4gPGFyZz4gZWluIEludGVnZXIgaXN0LCB3aXJkIGRhcyBSZXN1bHRhdAorICAgICAgICB0cm90emRlbSBhbHMgRmxvYXQgenVydWVja2dlZ2ViZW4uCisKK0JFSVNQSUVMRQorICAgICAgICBmbG9vcig0LjUpICAtLT4gbGllZmVydCA0LjAKKyAgICAgICAgZmxvb3IoLTQuNSkgLS0+IGxpZWZlcnQgLTUuMAorICAgICAgICBmbG9vcig1KSAgICAtLT4gbGllZmVydCA1LjAKKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjcuCisgICAgICAgIExETXVkIDMuMi45IGVybGF1YnQgYXVjaCBJbnRlZ2VyIGFscyBBcmd1bWVudGUuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgYWJzKEUpLCBjZWlsKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9mdW5jYWxsIGIvZG9jL2VmdW4vZnVuY2FsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI5ODMzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZnVuY2FsbApAQCAtMCwwICsxLDEwIEBACitTWU5PUFNJUworICAgICAgICBtaXhlZCBmdW5jYWxsKGNsb3N1cmUgY2wsIG1peGVkIGFyZywgLi4uKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIFdlcnRldCBkaWUgQ2xvc3VyZSAnY2wnIGF1cy4gRGllIEFyZ3VtZW50ZSAnYXJncycgd2VyZGVuIGFscyBBcmd1bWVudGUKKyAgICAgICAgYW4gZGllIENsb3N1cmUgdWViZXJnZWJlbi4gV2VubiAnY2wnIGtlaW5lIENsb3N1cmUgaXN0LCB3aXJkICdjbCcKKyAgICAgICAgenVydWVjayBnZWdlYmVuLgorCitTSUVIRSBBVUNICisgICAgICAgIGFwcGx5KEUpLCBxdW90ZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vZnVuY3Rpb25fZXhpc3RzIGIvZG9jL2VmdW4vZnVuY3Rpb25fZXhpc3RzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZjJkYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9mdW5jdGlvbl9leGlzdHMKQEAgLTAsMCArMSwxNCBAQAorU1lOT1BTSVMKKyAgICAgICAgc3RyaW5nIGZ1bmN0aW9uX2V4aXN0cyhzdHJpbmcgc3RyLCBvYmplY3Qgb2IpCisKK0RFU0NSSVBUSU9OCisgICAgICAgIFJldHVybiB0aGUgZmlsZSBuYW1lIG9mIHRoZSBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBmdW5jdGlvbgorICAgICAgICBzdHIgaW4gb2JqZWN0IG9iLiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlIG90aGVyIHRoYW4KKyAgICAgICAgb2JqZWN0X25hbWUob2IpIGlmIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGluIGFuIGluaGVyaXRlZAorICAgICAgICBvYmplY3QuIEluICFjb21wYXQgbW9kZSwgdGhlIHJldHVybmVkIG5hbWUgYWx3YXlzIGJlZ2lucyB3aXRoIGEKKyAgICAgICAgJy8nIChhYnNvbHV0ZSBwYXRoKS4gMCBpcyByZXR1cm5lZCBpZiB0aGUgZnVuY3Rpb24gd2FzIG5vdAorICAgICAgICBkZWZpbmVkLCBvciB3YXMgZGVmaW5lZCBhcyBzdGF0aWMgKHByb3RlY3RlZCBmdW5jdGlvbiBvbiB0aGUKKyAgICAgICAgb3RoZXIgaGFuZCBhcmUgZm91bmQpLgorCitTRUUgQUxTTworICAgICAgICBjYWxsX290aGVyKEUpLCBjYWxsX3Jlc29sdmVkKEUpLCBmdW5jdGlvbmxpc3QoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2Z1bmN0aW9ubGlzdCBiL2RvYy9lZnVuL2Z1bmN0aW9ubGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmYyY2JhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZnVuY3Rpb25saXN0CkBAIC0wLDAgKzEsNTUgQEAKK0dFU0NIVUVUWlQKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxzeXMvZnVuY3Rpb25saXN0Lmg+CisgICAgICAgICNpbmNsdWRlIDxzeXMvbHBjdHlwZXMuaD4KKworICAgICAgICBtaXhlZCAqZnVuY3Rpb25saXN0KG9iamVjdCBvYiwgaW50IGZsYWdzID0gUkVUVVJOX0ZVTkNUSU9OX05BTUUpCisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGVpbiBBcnJheSBtaXQgSW5mb3JtYXRpb25lbiB6dSBkZW4gTGZ1bnMgdm9uIDxvYj4uIEZ1ZXIgamVkZQorICAgICAgICBGdW5rdGlvbiB3ZXJkZW4gMSBiaXMgNCBXZXJ0ZSAoYWJoYWVuZ2lnIHZvbiA8ZmxhZ3M+KSBpbiBkYXMgRXJnZWJuaXMKKyAgICAgICAgZWluZ2V0cmFnZW4sIHVuZCB6d2FyIGluIGZvbGdlbmRlciBSZWloZW5mb2xnZToKKyAgICAgICAgICAtIGRlciBOYW1lIGRlciBGdW5rdGlvbgorICAgICAgICAgIC0gZGllIEZsYWdzIGRlciBGdW5rdGlvbiAodmVyZ2xlaWNoZSB3ZWl0ZXIgdW50ZW4pCisgICAgICAgICAgLSBkZW4gUnVlY2tnYWJldHlwIChhdWZnZWxpc3RldCBpbiBtdWRsaWIvc3lzL2xwY3R5cGVzLmgpCisgICAgICAgICAgLSBkaWUgQW56YWhsIEFyZ3VtZW50ZSwgZGllIGRpZSBGdW5rdGlvbiBha3plcHRpZXJ0LgorCisgICAgICAgIDxvYj4ga2FubiBhbHMgZWNodGVzIE9iamVrdCBvZGVyIGFscyBPYmpla3RuYW1lIHVlYmVyZ2ViZW4gd2VyZGVuLiBJbQorICAgICAgICB6d2VpdGVuIEZhbGwgdmVyc3VjaHQgZGllIEVmdW4gbmljaHQsIGRhcyBPYmpla3Qgdm9yaGVyIHp1IGxhZGVuLgorCisgICAgICAgIDxmbGFncz4gYmVzdGltbXQgc293b2hsLCB3ZWxjaGUgSW5mb3JtYXRpb25lbiBpbSBFcmdlYm5pcyBnZXNhbW1lbHQKKyAgICAgICAgd2VyZGVuLCBhbHMgYXVjaCwgZnVlciB3ZWxjaGUgRnVua3Rpb25lbiBkaWUgUHJ1ZWZ1bmcgZHVyY2hnZWZ1ZWhydAorICAgICAgICB3aXJkLiBEZXIgV2VydCB2b24gPGZsYWdzPiB3aXJkIGR1cmNoIGJpbmFlcmUgVmVyb2RlcnVuZyBmb2xnZW5kZXIKKyAgICAgICAgS29uc3RhbnRlbiBhdXMgbXVkbGliL3N5cy9mdW5jdGlvbmxpc3QuaCBmZXN0Z2VsZWd0OgorCisgICAgICAgIEZlc3RsZWdlbiBkZXIgZ2VzYW1tZWx0ZW4gSW5mb3JtYXRpb246CisgICAgICAgICAgICBSRVRVUk5fRlVOQ1RJT05fTkFNRSAgICAgICAgbGllZmVydCBkZW4gRnVua3Rpb25zbmFtZW4KKyAgICAgICAgICAgIFJFVFVSTl9GVU5DVElPTl9GTEFHUyAgICAgICBsaWVmZXJ0IGRpZSBGbGFzIGRlciBGdW5rdGlvbgorICAgICAgICAgICAgUkVUVVJOX0ZVTkNUSU9OX1RZUEUgICAgICAgIGxpZWZlcnQgZGVuIFJ1ZWNrZ2FiZXR5cCBkZXIgRnVua3Rpb24KKyAgICAgICAgICAgIFJFVFVSTl9GVU5DVElPTl9OVU1BUkcgICAgICBsaWVmZXJ0IGRpZSBBbnphaGwgbW9lZ2xpY2hlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50ZS4KKworICAgICAgICAgICAgUkVUVVJOX0ZVTkNUSU9OX0FSR1RZUEUgICAgIGlzdCBkZWZpbmllcnQsIGFiZXIgbmljaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRpZXJ0LgorCisgICAgICAgIEZlc3RsZWdlbiBkZXIgZ2VwcnVlZnRlbiBGdW5rdGlvbmVuOgorICAgICAgICAgICAgTkFNRV9JTkhFUklURUQgICAgICBnZWVyYnRlIEZ1bmt0aW9uZW4gbmljaHQgYmVhY2h0ZW4KKyAgICAgICAgICAgIFRZUEVfTU9EX1NUQVRJQyAgICAgc3RhdGljIGRla2xhcmllcnRlIEZ1bmt0aW9uIG5pY2h0IGJlYWNodGVuCisgICAgICAgICAgICBUWVBFX01PRF9QUklWQVRFICAgIHByaXZhdGUgZGVrbGFyaWVydGUgRnVua3Rpb25lbiBuaWNodCBiZWFjaHRlbgorICAgICAgICAgICAgVFlQRV9NT0RfUFJPVEVDVEVEICBwcm90ZWN0ZWQgZGVrbGFyaWVydGUgRnVua3Rpb25lbiBuaWNodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWFjaHRlbgorICAgICAgICAgICAgTkFNRV9ISURERU4gICAgICAgICBudXIgYmVhY2h0ZW4sIHdlbm4gc2ljaHRiYXIgZHVyY2ggVmVyZXJidW5nCisKKyAgICAgICAgPGZsYWdzPiBiZXN0ZWh0IGF1cyBkZXIgYmluYWVyZW4gVmVyb2RlcnVuZyBkZXIgb2JlbiBnZW5hbm50ZW4gRmxhZ3MsCisgICAgICAgIHp1c2FtbWVuIG1pdCBkZW4gZm9sZ2VuZGVuOgorICAgICAgICAgICAgVFlQRV9NT0RfVkFSQVJHUyAgICBkaWUgRnVua3Rpb24gaXN0IHZhcmFyZ3MgZGVrbGFyaWVydAorICAgICAgICAgICAgTkFNRV9VTkRFRklORUQgICAgICBkaWUgRnVua3Rpb24gaXN0IG5vY2ggbmljaHQgZGVmaW5pZXJ0LCBhYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW56aWVydAorICAgICAgICAgICAgTkFNRV9DUk9TU19ERUZJTkVEICBkaWUgRnVua3Rpb24gaXN0IGRlZmluaWVydCwgdW0gaW4gZWluZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kZXJlbiBQcm9ncmFtbSB2ZXJ3ZW5kZXQgenUgd2VyZGVuCisgICAgICAgICAgICBUWVBFX01PRF9OT01BU0sgICAgIGRpZSBGdW5rdGlvbiBpc3Qgbm9tYXNrIGRla2xhcmllcnQKKyAgICAgICAgICAgIFRZUEVfTU9EX1BVQkxJQyAgICAgZGllIEZ1bmt0aW9uIGlzdCBwdWJsaWMgZGVrbGFyaWVydAorCitTSUVIRSBBVUNICisgICAgICAgIGluaGVyaXRfbGlzdChFKSwgZnVuY3Rpb25fZXhpc3RzKEUpLCB2YXJpYWJsZV9saXN0KEUpLAorICAgICAgICBjYWxsX3Jlc29sdmVkKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9nYXJiYWdlX2NvbGxlY3Rpb24gYi9kb2MvZWZ1bi9nYXJiYWdlX2NvbGxlY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM2YTczOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2dhcmJhZ2VfY29sbGVjdGlvbgpAQCAtMCwwICsxLDIyIEBACitHRVNDSFVFVFpUCitTWU5PUFNJUworICAgICAgICB2b2lkIGdhcmJhZ2VfY29sbGVjdGlvbigpOworICAgICAgICB2b2lkIGdhcmJhZ2VfY29sbGVjdGlvbihzdHJpbmcgZmlsZW5hbWUpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgQmVmaWVobHQgZGVtIFRyZWliZXIsIG5hY2ggRW5kZSBkZXIgYWt0dWVsbGVuIEF1c2Z1ZWhydW5nIGVpbmUKKyAgICAgICAgR2FyYmFnZSBDb2xsZWN0aW9uIHp1IGJlZ2lubmVuLiBKZSBuYWNoZGVtLCB3ZWxjaGVyIE1lbW9yeSBBbGxvY2F0b3IKKyAgICAgICAgdmVyd2VuZGV0IHdpcmQsIGlzdCBkaWUgR2FyYmFnZSBDb2xsZWN0aW9uIG1laHIgb2RlciB3ZW5pZ2VyCisgICAgICAgIGdydWVuZGxpY2guCisKKyAgICAgICAgV2lyZCBkZXIgc21hbGxvYyBNZW1vcnkgQWxsb2NhdG9yIHZlcndlbmRldCwgZXJ6ZXVndCBHQyBlaW5lbiBPdXRwdXQKKyAgICAgICAgaW4gZWluZW0gTG9nZmlsZS4gRGVyIFN0YW5kYXJkbmFtZSBmdWVyIGRhcyBMb2dmaWxlIHdpcmQgYmVpbQorICAgICAgICBQcm9ncmFtbXN0YXJ0IGZlc3RnZWxlZ3QsIGthbm4gYWJlciB6dXIgTGF1ZnplaXQgdmVyYWVuZGVydCB3ZXJkZW4sCisgICAgICAgIHdlbm4gZGFzIEFyZ3VtZW50IDxmaWxlbmFtZT4gYW5nZWdlYmVuIGlzdC4gRGVyIExvZy1PdXRwdXQgd2lyZCBpbgorICAgICAgICBkaWVzZW0gRmFsbCBhbiBkYXMgYmV6ZWljaG5ldGUgTG9nZmlsZSBhbmdlZnVlZ3QuCisKKyAgICAgICAgRnVlciBhbmRlcmUgTWVtb3J5IEFsbG9jYXRvcnMgZXJ6ZXVndCBnYXJiYWdlX2NvbGxlY3Rpb24oKSBrZWluZW4KKyAgICAgICAgT3V0cHV0LiBFaW4gYWxsZmFlbGxpZ2VzIEFyZ3VtZW50IDxmaWxlbmFtZT4gd2lyZCBpZ25vcmllcnQuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgcnVzYWdlKEUpLCB2YWxpZF93cml0ZShNKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vZ2V0X2RpciBiL2RvYy9lZnVuL2dldF9kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0Mjg4YQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2dldF9kaXIKQEAgLTAsMCArMSwxMTMgQEAKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxmaWxlcy5oPgorCisgICAgICAgIG1peGVkICpnZXRfZGlyKHN0cmluZyBzdHIpCisgICAgICAgIG1peGVkICpnZXRfZGlyKHN0cmluZyBzdHIsIGludCBtYXNrKQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgQmVub2V0aWd0IGVpbmVuIFBmYWQgYWxzIGVyc3RlcyBBcmd1bWVudCB1bmQgbGllZmVydCBlaW4gRmVsZAorICAgICAgICAoQXJyYXkpIG1pdCBEYXRlaW5hbWVuIGJ6dy4gRWlnZW5zY2hhZnRlbiBkZXIgZ2VmdW5kZW5lbiBEYXRlaWVuIGltCisgICAgICAgIGFuZ2VnZWJlbmVuIFZlcnplaWNobmlzLgorCisgICAgICAgIExpZWZlcnQgMCB6dXJ1ZWNrLCB3ZW5uIGVzIGRhcyBWZXJ6ZWljaG5pcywgaW4gZGVtIGdlc3VjaHQgd2VyZGVuCisgICAgICAgIHNvbGwsIG5pY2h0IGdpYnQuCisKKyAgICAgICAgRGVyIERhdGVpbmFtZW4tVGVpbCBkZXMgUGZhZGVzIGRhcmYgIioiIHVuZCAiPyIgYWxzIFBsYXR6aGFsdGVyCisgICAgICAgIGVudGhhbHRlbjogamVkZXIgIioiIHN0ZWh0IGZ1ZXIgZWluZSBiZWxpZWJpZ2UgQW56YWhsIFplaWNoZW4gKG9kZXIKKyAgICAgICAgc2ljaCBzZWxiZXIpLCAiPyIgZnVlciBlaW4gYmVsaWViaWdlcyBaZWljaGVuLiBFbnRzcHJlY2hlbmQgbGllZmVydAorICAgICAgICBnZXRfZGlyKCIvcGZhZC8qIikgZWluIGFscGhhYmV0aXNjaCBzb3J0aWVydGVzIEZlbGQgYWxsZXIgRGF0ZWllbgorICAgICAgICBpbSBWZXJ6ZWljaG5pcyAiL3BmYWQiIG9kZXIgKHsgIi9wZmFkLyoiIH0pLCB3ZW5uIGVzIGRpZXNlIERhdGVpCisgICAgICAgIGdlYmVuIHNvbGx0ZS4KKworICAgICAgICBHaWJ0IG1hbiBkZW4gUGZhZCBlaW5lcyBWZXJ6ZWljaG5pc3NlcyBtaXQgYWJzY2hsaWVzc2VuZGVtICIvIiBvZGVyCisgICAgICAgICIvLiIgYW4gKHouIEIuIGdldF9kaXIoIi9wZmFkLy4iKSksIHNvIGVyaGFlbHQgbWFuIGRlbiBJbmhhbHQgZGVzCisgICAgICAgIFZlcnplaWNobmlzc2VzLiBVbSBJbmZvcm1hdGlvbmVuIHVlYmVyIGRhcyBWZXJ6ZWljaG5pcyBzZWxiZXIgenUKKyAgICAgICAgZXJoYWx0ZW4sIG11c3MgbWFuIGRlbiBQZmFkIGRlcyBWZXJ6ZWljaG5pc3NlcyBhbmdlYmVuLgorCisgICAgICAgIERhcyBvcHRpb25hbGUgendlaXRlIEFyZ3VtZW50IGlzdCBlaW5lIEJpdG1hc2tlLCBtaXQgZGVyIG1hbgorICAgICAgICBhbmdlYmVuIGthbm4sIHdlbGNoZSBJbmZvcm1hdGlvbmVuIG1hbiB1ZWJlciBkaWUgYW5nZWdlYmVuZW4KKyAgICAgICAgRGF0ZWllbiBlcmhhbHRlbiBtb2VjaHRlLgorCisgICAgICAgIEdFVERJUl9FTVBUWSAgICAoMHgwMCkgIGdldF9kaXIoKSBsaWVmZXJ0IGVpbiBsZWVyZXMgRmVsZCAobmljaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lya2xpY2ggc2lubnZvbGwpCisgICAgICAgIEdFVERJUl9OQU1FUyAgICAoMHgwMSkgIGxpZWZlcnQgZGllIGFscGhhYmV0aXNjaCBzb3J0aWVydGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVpbmFtZW4uCisgICAgICAgIEdFVERJUl9TSVpFUyAgICAoMHgwMikgIGxpZWZlcnQgZGllIHVuc29ydGllcnRlbiBEYXRlaWdyb2Vzc2VuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlX3NpemUoKSksIFZlcnplaWNobmlzc2UgaGFiZW4gZGllCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVpZ3JvZXNzZSBGU0laRV9ESVIgKC0yKS4KKyAgICAgICAgR0VURElSX0RBVEVTICAgICgweDA0KSAgbGllZmVydCBkaWUgdW5zb3J0aWVydGVuIFplaXRlbiBkZXIgamV3ZWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXR6dGVuIEFlbmRlcnVuZyBpbiBTZWt1bmRlbiBzZWl0IGRlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMS4wMS4xOTcwLgorICAgICAgICBHRVRESVJfQUNDRVNTICAgKDB4NDApICBsaWVmZXJ0IGRpZSB1bnNvcnRpZXJ0ZW4gWmVpdGVuIGRlcyBqZXdlaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldHp0ZW4gWnVncmlmZmVzIGluIFNla3VuZGVuIHNlaXQgZGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAxLjAxLjE5NzAuCisgICAgICAgIEdFVERJUl9NT0RFUyAgICAoMHg4MCkgIGxpZWZlcnQgZGllIEZpbGVtb2RlLU1hc2tlCisKKyAgICAgICAgR0VURElSX0FMTCAgICAgICgweERGKSAgTGllZmVydCBhbGwgV2VydGUgenVydWVjay4KKworICAgICAgICBHRVRESVJfUEFUSCAgICAgKDB4MTApICBEYXRlaW5hbWVuIHdlcmRlbiBhbHMgdm9sbGUgUGZhZGUgZ2VsaWVmZXJ0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWluIGV2LiBmZWhsZW5kZXMgR0VURElSX05BTUVTIHdpcmQgYWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvcmhhbmRlbiBhbmdlbm9tbWVuKS4KKyAgICAgICAgR0VURElSX1VOU09SVEVEICgweDIwKSAgRGFzIEVyZ2VibmlzIHdpcmQgbmljaHQgc29ydGllcnQuCisKKyAgICAgICAgV2ljaHRpZzogTWFuIG11c3MgR0VURElSX05BTUVTfEdFVERJUl9VTlNPUlRFRCB2ZXJ3ZW5kZW4sIHdlbm4gbWFuCisgICAgICAgIGRpZSBFaW50cmFlZ2UgaW4gZGVyIHNlbGJlbiBSZWloZW5mb2xnZSB3aWUgYmVpIEdFVERJUl9TSVpFUyB1bmQKKyAgICAgICAgR0VURElSX0RBVEVTIGhhYmVuIG1vZWNodGUuCisKKyAgICAgICAgRGllIEVpbnRyYWVnZSBpbiBkZXIgQml0bWFza2Uga29lbm5lbiBtaXRlaW5hbmRlciBrb21iaW5pZXJ0CisgICAgICAgIHdlcmRlbi4KKworQkVJU1BJRUxFCisgICAgICAgIEZ1bmt0aW9uICAgICAgICAgICAgICAgICAgICAgICAgIFJ1ZWNrZ2FiZXdlcnQKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBnZXRfZGlyKCIvb2JqLy4iKSAgICAgICAgICAgICAgICBBbGxlIERhdGVpZW4sIGRpZSBpbSBWZXJ6ZWljaG5pcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvb2JqIGVudGhhbHRlbiBzaW5kLgorICAgICAgICBnZXRfZGlyKCIvb2JqLyIpICAgICAgICAgICAgICAgICBXaWUgZ2V0X2RpcigiL29iai8iKS4KKworICAgICAgICBnZXRfZGlyKCIvb2JqL2ZhY2tlbC5jIikgICAgICAgICh7ICJmYWNrZWwuYyIgfSksIHNvZmVybgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvb2JqL2ZhY2tlbC5jIGV4aXN0aWVydCAoYWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVpIG9kZXIgVmVyemVpY2huaXMpLCBhbnNvbnN0ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHt9KSwgc29mZXJuIC9vYmogZWluIFZlcnplaWNobmlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzdCwgYW5zb25zdGVuIDAuCisKKyAgICAgICAgZ2V0X2RpcigiL29iai8qIikgICAgICAgICAgICAgICAgKHsgIioiIH0pLCBzb2Zlcm4gKiBleGlzdGllcnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuc29uc3RlbiB1bmQgbm9ybWFsZXJ3ZWlzZSBlaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFiZXRpc2NoIHNvcnRpZXJ0ZXMgRmVsZCBtaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVuIE5hbWVuIGFsbGVyIERhdGVpZW4gdW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnplaWNobmlzc2UgaW4gL29iaiwgc29mZXJuIC9vYmoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWluIFZlcnplaWNobmlzIGlzdCwgYW5zb25zdGVuIDAuCisKKyAgICAgICAgZ2V0X2RpcigiL29iai9mYWNrZWwuYyIsIEdFVERJUl9TSVpFUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsgPEdyb2Vzc2Ugdm9uIC9vYmovZmFja2VsLmM+IH0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2Zlcm4gL29iai9mYWNrZWwuYyBleGlzdGllcnQuCisgICAgICAgIGdldF9kaXIoIi9vYmovLiIsIEdFVERJUl9OQU1FUykgIFdpZSBnZXRfZGlyKCIvb2JqLy4iKS4KKyAgICAgICAgZ2V0X2RpcigiL29iai8uIiwgR0VURElSX1NJWkVTKSAgRWluIHVuc29ydGllcnRlcyBGZWxkIG1pdCBkZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvZXNzZW4gZGVyIERhdGVpZW4gaW4gL29iai4KKyAgICAgICAgZ2V0X2RpcigiL29iai8uIiwgR0VURElSX05BTUVTfEdFVERJUl9TSVpFU3xHRVRESVJfREFURVMpCisgICAgICAgICAgICBvZGVyIGt1ZXJ6ZXIKKyAgICAgICAgZ2V0X2RpcigiL29iai8uIiwgR0VURElSX0FMTCkgICAgRWluIGVpbmRpbWVuc2lvbmFsZXMgdW5kIG5hY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZW4gc29ydGllcnRlcyBGZWxkLCBkYXMgZnVlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZWRlIERhdGVpIGluIC9vYmogZGVuIE5hbWVuLCBkaWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvZXNzZSB1bmQgZGVuIFplaXRwdW5rdCBkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0enRlbiBBZW5kZXJ1bmcgZW50aGFlbHQsIHouQi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJheHQuYyIgICAgLCAgOTI3LCA5OTQ1Mzk1ODMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFja2VsLmMiLCAxMjgzLCA5OTgxNTM5MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS4KKworICAgICAgICBnZXRfZGlyKCIvb2JqL2ZhY2tlbC5jIiwgR0VURElSX05BTUVTfEdFVERJUl9QQVRIKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeyAiL29iai9mYWNrZWwuYyIgfSksIHNvZmVybgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3JoYW5kZW4uCisgICAgICAgIGdldF9kaXIoIi9vYmovZmFja2VsLmMiLCBHRVRESVJfUEFUSCkgIEt1cnpmb3JtIGRhZnVlci4KKworICAgICAgICB0cmFuc3Bvc2VfYXJyYXkoKHsgZ2V0X2RpcihzdHIsIEdFVERJUl9OQU1FU3xHRVRESVJfVU5TT1JURUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgLCBnZXRfZGlyKHN0ciwgR0VURElSX1NJWkVTKQorICAgICAgICAgICAgICAgICAgICAgICAgICwgZ2V0X2RpcihzdHIsIEdFVERJUl9EQVRFUykgfSkpOworICAgICAgICBMaWVmZXJ0IGVpbiB1bnNvcnRpZXJ0ZXMgRmVsZCBtaXQgRmVsZGVybiwgdm9uIGRlbmVuIGVpbiBqZWRlcworICAgICAgICBOYW1lLCBHcm9lc3NlIHVuZCBaZWl0IGVpbmVyIERhdGVpIGVudGhhZWx0LCB6LiBCLgorICAgICAgICAoeworICAgICAgICAgICAgKHsgImZhY2tlbC5jIiwgMTI4MywgOTk4MTUzOTAzIH0pLAorICAgICAgICAgICAgKHsgImF4dC5jIiAgICAsICA5MjcsIDk5NDUzOTU4MyB9KSwKKyAgICAgICAgICAgIH0pLgorU0lFSEUgQVVDSAorICAgICAgICBjYXQoRSksIG1rZGlyKEUpLCBybWRpcihFKSwgZmlsZV9zaXplKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9nZXRfZXJyb3JfZmlsZSBiL2RvYy9lZnVuL2dldF9lcnJvcl9maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5N2U1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9nZXRfZXJyb3JfZmlsZQpAQCAtMCwwICsxLDIxIEBACitTWU5PUFNJUworICAgICAgICBtaXhlZCAqIGdldF9lcnJvcl9maWxlKHN0cmluZyBuYW1lLCBpbnQgc2V0X2ZvcmdldF9mbGFnKQorCitERVNDUklQVElPTgorICAgICAgICBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxhc3QgZXJyb3Igd2hpY2ggb2NjdXJlZCBmb3IKKyAgICAgICAgPG5hbWU+ICh3aGVyZSA8bmFtZT4gaXMgYSB2YWxpZCBuYW1lIGZyb20gdGhlIHdpeiBsaXN0KS4KKworICAgICAgICBSZXN1bHQgaXMgYW4gYXJyYXkgb2YgZm91ciBlbGVtZW50czogdGhlIGZpbGVuYW1lIG9mIHRoZQorICAgICAgICBwcm9ncmFtIHdoZXJlIHRoZSBlcnJvciBvY2N1cmVkLCB0aGUgbGluZW51bWJlciBpbiB0aGUKKyAgICAgICAgcHJvZ3JhbSwgdGhlIGVycm9yIG1lc3NhZ2UgKHJ1bnRpbWUgZXJyb3IgbWVzc2FnZXMgdXN1YWxseQorICAgICAgICBzdGFydCB3aXRoIGEgJyonKSwgYW5kIGEgbnVtZXJpY2FsIGZsYWcgKHRoZSAnZm9yZ2V0IGZsYWcnKSBpZgorICAgICAgICB0aGUgZXJyb3IgaW5mb3JtYXRpb24gaGFzIGJlZW4gcXVlcmllZCBhbHJlYWR5LgorCisgICAgICAgIElmIHRoZXJlIGlzIG5vIGVycm9yIHN0b3JlZCBmb3IgdGhlIGdpdmVuIDxuYW1lPiwgMCBpcworICAgICAgICByZXR1cm5lZC4KKworICAgICAgICBJZiA8c2V0X2ZvcmdldF9mbGFnPiBpcyBub24temVybywgdGhlICdmb3JnZXQnIGZsYWcgaXMgc2V0CisgICAgICAgIGZvciB0aGUgZXJyb3IgbWVzc2FnZSBhZnRlciBpdCBoYXMgYmVlbiByZXR1cm5lZC4KKworU0VFIEFMU08KKyAgICAgICAgZWQoRSksIHZhbGlkX3JlYWQoTSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2dldF9ldmFsX2Nvc3QgYi9kb2MvZWZ1bi9nZXRfZXZhbF9jb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYmMwMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9nZXRfZXZhbF9jb3N0CkBAIC0wLDAgKzEsMzMgQEAKK0ZVTktUSU9OOgorICAgICAgICBpbnQgZ2V0X2V2YWxfY29zdCh2b2lkKQorCitCRVNDSFJFSUJVTkc6CisgICAgICAgIExpZWZlcnQgZGllIG5vY2ggdmVyYmxlaWJlbmRlbiBFdmFsIEtvc3RlbiwgZGllIGRhcyBtb21lbnRhbmUKKyAgICAgICAgS29tbWFuZG8gbm9jaCB2ZXJicmF1Y2hlbiBkYXJmLgorICAgICAgICBEZXIgTWF4aW1hbHdlcnQgYmV0cmFlZ3QgenVyIFplaXQgMS41MDAuMDAwIFRpY2tzIChTdGFuZDogMjAwNykuIAorCisgICAgICAgIFNvbGx0ZW4gZGllIEtvc3RlbiBiZWkgZGVyIEF1c2Z1ZWhydW5nIGlyZ2VuZHdvIGdyb2Vzc2VyIHdlcmRlbiwKKyAgICAgICAgd2lyZCBlaW4gRmVobGVyIGRlciBBcnQgInRvbyBsb25nIGV2YWwiIGVyemV1Z3QuIERpZXNlIEZ1bmt0aW9uCisgICAgICAgIGRpZW50IGRhenUsIHNvbGNoZSBGZWhsZXIgZ2VuYXUgenUgbG9rYWxpc2llcmVuIGJ6dy4gCisgICAgICAgIGhlcmF1c3p1ZmluZGVuLCBhbiB3ZWxjaGVuIFN0ZWxsZW4gaW0gQ29kZSB3aWV2aWVsIFJlY2hlbnplaXQgCisgICAgICAgIHZlcmJyYXVjaHQgd2lyZC4KKyAgICAgICAgCitCRUlTUElFTEUKKyAgICAgICAgdm9pZCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgaW50IHByZXYsIHVzZWQsIGk7CisgICAgICAgICAgCisgICAgICAgICAgcHJldj1nZXRfZXZhbF9jb3N0KCk7IC8vIE1lcmtlbiwgd2FzIGJpcyBoaWVyaGluIHZlcmJyYXVjaHQgd3VyZGUgCisgICAgICAgICAgZm9yIChpPTA7aTw9MTAwMDtpKyspIC8vIERhbm4ga29tbXQgZGVyIHp1IHRlc3RlbmRlIENvZGUsIHpCIGVpbmUKKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgLy8gU2NobGVpZmUKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgIH0KKyAgICAgICAgICB1c2VkPXByZXYtZ2V0X2V2YWxfY29zdCgpOyAvLyBCZXJlY2hudW5nIGRlciBEaWZmZXJlbnoKKyAgICAgICAgICBwcmludGYoIkRpZSBTY2hsZWlmZSB2ZXJicmF1Y2h0ZSAlZCBUaWNrcy5cbiIsIHVzZWQpOworICAgICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgICAgIGNhbGxlcl9zdGFja19kZXB0aChFKSwgcnVzYWdlKEUpLCBjb21tYW5kKEUpLCBxdWVyeV9saW1pdHMoRSkKKyAgICAgICAgS29uc3RhbnRlOiBfX01BWF9FVkFMX0NPU1RfXworCis0LkF1ZyAyMDA3IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9nZXRfZXh0cmFfd2l6aW5mbyBiL2RvYy9lZnVuL2dldF9leHRyYV93aXppbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNTZmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9nZXRfZXh0cmFfd2l6aW5mbwpAQCAtMCwwICsxLDE5IEBACitTWU5PUFNJUworICAgICAgICBtaXhlZCBnZXRfZXh0cmFfd2l6aW5mbyAob2JqZWN0IHdpeikKKyAgICAgICAgbWl4ZWQgZ2V0X2V4dHJhX3dpemluZm8gKHN0cmluZyB3aXopCisgICAgICAgIG1peGVkIGdldF9leHRyYV93aXppbmZvIChpbnQgICAgd2l6KQorCitERVNDUklQVElPTgorICAgICAgICBSZXR1cm5zIHRoZSAnZXh0cmEnIGluZm9ybWF0aW9uIHRoYXQgd2FzIHNldCBmb3IgdGhlIGdpdmVuCisgICAgICAgIHdpemFyZCA8d2l6PiBpbiB0aGUgd2l6bGlzdC4KKworICAgICAgICBJZiA8d2l6PiBpcyBhbiBvYmplY3QsIHRoZSBlbnRyeSBvZiBpdHMgY3JlYXRvciAodWlkKSBpcyB1c2VkLgorICAgICAgICBJZiA8d2l6PiBpcyBhIHN0cmluZyAoYSBjcmVhdG9yIGFrYSB1aWQpLCBpdCBuYW1lcyB0aGUgZW50cnkKKyAgICAgICAgdG8gdXNlLgorICAgICAgICBJZiA8d2l6PiBpcyB0aGUgbnVtYmVyIDAsIHRoZSBkYXRhIGlzIGdldCBmcm9tIHRoZSBkZWZhdWx0IHdpemxpc3QKKyAgICAgICAgZW50cnkuCisKKyAgICAgICAgVGhlIGZ1bmN0aW9uIGNhdXNlcyBhIHByaXZpbGVnZSB2aW9sYXRpb24uCisKK1NFRSBBTFNPCisgICAgICAgIHdpemxpc3RfaW5mbyhFKSwgc2V0X2V4dHJhX3dpemluZm8oRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2dldF90eXBlX2luZm8gYi9kb2MvZWZ1bi9nZXRfdHlwZV9pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYjFmOGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9nZXRfdHlwZV9pbmZvCkBAIC0wLDAgKzEsNTcgQEAKK1NZTk9QU0lTCisgICAgICAgIG1peGVkIGdldF90eXBlX2luZm8obWl4ZWQgYXJnLCBpbnQgZmxhZyk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IEluZm9ybWF0aW9uZW4gdWJlciBkZW4gVHlwIHZvbiA8YXJnPiwgd2llIHZvbiA8ZmxhZz4KKyAgICAgICAgYW5nZWdlYmVuLgorCisgICAgICAgIFdlbm4gPGZsYWc+IGtlaW5lIFphaGwgaXN0LCBsaWVmZXJ0IGdldF90eXBlX2luZm8oKSBlaW4gQXJyYXksIGRlc3NlbgorICAgICAgICBlcnN0ZXMgRWxlbWVudCBlaW4gSW50ZWdlciBpc3QsIGRlciBkZW4gRGF0ZW50eXAgYmV6ZWljaG5ldCwgd2llIGluCisgICAgICAgIDxscGN0eXBlcy5oPiBkZWZpbmllcnQuIERlciB6d2VpdGUgRWludHJhZyBrYW5uIHp1c2FldHpsaWNoZQorICAgICAgICBJbmZvcm1hdGlvbmVuIHp1IDxhcmc+IGVudGhhbHRlbi4KKworICAgICAgICBJc3QgPGZsYWc+IDAsIHdpcmQgbnVyIGRhcyBlcnN0ZSBFbGVtZW50IChkLmguIGRlciBEYXRlbnR5cCkgZ2VsaWVmZXJ0LgorICAgICAgICBJc3QgPGZsYWc+IDEsIHdpcmQgbnVyIGRhcyB6d2VpdGUgRWxlbWVudCBnZWxpZWZlcnQuCisKKyAgICAgICAgV2VubiA8YXJnPiBlaW5lIENsb3N1cmUgZW50aGFlbHQsIHNvIGthbm4gZ2V0X3R5cGVfaW5mbygpIGRhcyBPYmpla3QKKyAgICAgICAgZGVyIENsb3N1cmUgbGllZmVybiwgd2VubiBmdWVyIDxmbGFnPiAyIGdlc2V0enQgaXN0LiAoRnVlciAnYWxpZW4KKyAgICAgICAgbGZ1biBjbG9zdXJlcycgaXN0IGRhcyBkYXMgT2JqZWt0LCBpbiBkZW0gZGllIENsb3N1cmUgZGVmaW5pZXJ0IGlzdCwKKyAgICAgICAgbmljaHQgZGFzIE9iamVrdCwgYW4gZGFzIGRpZSBDbG9zdXJlIGdlYnVuZGVuIGlzdC4pCisKKyAgICAgICAgV2VubiA8YXJnPiBlaW5lIExGdW4vQ29udGV4dC1DbG9zdXJlIGVudGhhZWx0LCBzbyBrYW5uIGdldF90eXBlX2luZm8oKQorICAgICAgICBkZW4gTmFtZW4gZGVzIGRlZmluaWVyZW5kZW4gUHJvZ3JhbW1lcyBsaWVmZXJuLCB3ZW5uIGZ1ZXIgPGZsYWc+IDMKKyAgICAgICAgZ2VzZXR6dCBpc3QuIEZ1ciBhbmRlcmUgQ2xvc3VyZXMgd2lyZCAwIHp1cnVlY2tnZWdlYmVuLgorCisgICAgICAgIFdlbm4gPGFyZz4gZWluZSBMRnVuL0NvbnRleHQtQ2xvc3VyZSBlbnRoYWVsdCwgc28ga2FubiBnZXRfdHlwZV9pbmZvKCkKKyAgICAgICAgZGVuIE5hbWVuIGRlciBGdW5rdGlvbiBsaWVmZXJuLCB3ZW5uIGZ1ZXIgPGZsYWc+IDQKKyAgICAgICAgZ2VzZXR6dCBpc3QuIEZ1ciBhbmRlcmUgQ2xvc3VyZXMgd2lyZCAwIHp1cnVlY2tnZWdlYmVuLgorCisgICAgICAgIEZ1ZXIgamVkZW4gYW5kZXJlbiBXZXJ0IGZ1ZXIgPGZsYWc+IGxpZWZlcnQgZGllIEZ1bmt0aW9uIC0xLgorCisgICAgICAgIERpZSB6dXNhZXR6bGljaGVuIEluZm9ybWF0aW9uZW4gKGFsc28gZGVyIHp3ZWl0ZSBFaW50cmFnIGRlcyBBcnJheXMpCisgICAgICAgIGJlaW5oYWx0ZW46CisgICAgICAgICAgLSBmdWVyIE1hcHBpbmdzIGRlcmVuIEJyZWl0ZSwgYWxzbyBkaWUgQW56YWhsIERhdGVud2VydGUgcHJvIEtleS4KKyAgICAgICAgICAtIGZ1ZXIgU3ltYm9sZSB1bmQgZ2VxdW90ZXRlIEFycmF5cyBkaWUgQW56YWhsIFF1b3Rlcy4KKyAgICAgICAgICAtIGZ1ZXIgQ2xvc3VyZXMgZGVuIChpbnRlcm5lbikgVHlwIGRlciBDbG9zdXJlLgorICAgICAgICAgIC0gZnVlciBnZW1laW5zYW0gdmVyd2VuZGV0ZSBTdHJpbmdzIDAsIHVuZ2xlaWNoIDAgZnVlciBhbmRlcmUgU3RyaW5ncworICAgICAgICAgIC0gZnVlciBzdHJ1Y3RzIGRlciBlaW5kZXV0aWdlIElkZW50aWZpemllcnVuZ3NzdHJpbmcKKyAgICAgICAgICAtIC0xIGZ1ZXIgYWxsZSBhbmRlcmVuIERhdGVudHlwZW4KKworQlVHUworICAgICAgICBEaWVzZSBGdW5rdGlvbiB1bnRlcmxpZWd0IGhhZXVmaWdlbiBWZXJhZW5kZXJ1bmdlbiBpbSBadWcgZGVyCisgICAgICAgIFRyZWliZXJlbnR3aWNrbHVuZy4KKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gMy4yQDEyNworICAgICAgICBGbGFnd2VydCAyIGVpbmdlZnVlaHJ0IGluIDMuMi4xQDg0CisgICAgICAgIFp1c2F0emluZm9ybWF0aW9uZW4genUgU3RyaW5ncyBlaW5nZWZ1ZWhydCBpbiAzLjIuNworICAgICAgICBCaXMgdW5kIG1pdCAzLjIuNyBsaWVmZXJ0ZSBnZXRfdHlwZV9pbmZvKGNsb3N1cmUsIDIpIGtlaW5lIE9iamVrdGUKKyAgICAgICAgICAgIHZvbiBMYW1kYSBDbG9zdXJlcyB1bmQgZ2VidW5kZW5lbiBMYW1iZGEgQ2xvc3VyZXMuCisgICAgICAgIEJpcyB1bmQgbWl0IDMuMi43IGxpZWZlcnRlIGdldF90eXBlX2luZm8oY2xvc3VyZSwgMikga2VpbmUgT2JqZWt0ZSB2b24KKyAgICAgICAgICAgIEVmdW4tLCBTaW11bC1FZnVuLSBvZGVyIE9wZXJhdG9yLUNsb3N1cmVzLgorICAgICAgICBMRE11ZCAzLjMuMjc2IGZ1ZWd0ZSBkaWUgenVzYWV0emxpY2hlIEluZm9ybWF0aW9uIGZ1ZXIgc3RydWN0cyBoaW56dS4KKyAgICAgICAgTERNdWQgMy4zLjU0OCBmdWVndGUgRmxhZ3dlcnQgJzMnIGhpbnp1LgorICAgICAgICBMRE11ZCAzLjMuNzA4IGZ1ZWd0ZSBGbGFnd2VydCAnNCcgaGluenUuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgZGVidWdfaW5mbyhFKSwgdHlwZW9mKEUpLCB0b19vYmplY3QoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2dldGV1aWQgYi9kb2MvZWZ1bi9nZXRldWlkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1Y2MzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9nZXRldWlkCkBAIC0wLDAgKzEsMTIgQEAKK1NZTk9QU0lTCisgICAgICAgIHN0cmluZyBnZXRldWlkKG9iamVjdCBvYik7CisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGRpZSBlZmZla3RpdmUgVXNlci1JRCBkZXMgT2JqZWt0cyA8b2JqPiAobm9ybWFsZXJ3ZWlzZSBlaW4KKyAgICAgICAgTWFnaWVyIG9kZXIgZWluZSBEb21haW4pLiBPYmpla3RlLCBkaWUgZHVyY2ggPG9iaj4gZ2VjbG9uZXQgd2VyZGVuLAorICAgICAgICBlcmhhbHRlbiBkaWVzZSBVc2VyLUlELiBEaWUgZWZmZWt0aXZlIFVzZXItSUQgd2lyZCBhdWNoIGZ1ZXIKKyAgICAgICAgWnVncmlmZnNjaGVja3MgdmVyd2VuZGV0LiBXZW5uIDxvYmo+IG5pY2h0IGFuZ2VnZWJlbiB3aXJkLCB3aXJkCisgICAgICAgIHN0YW5kYXJkbWFlc3NpZyB0aGlzX29iamVjdCgpIHZlcndlbmRldC4KKworU0lFSEUgQVVDSAorICAgICAgICBzZXRldWlkKEUpLCBnZXR1aWQoRSksIGdldHV1aWQoRSksIGV4cG9ydF91aWQoRSkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9nZXR1aWQgYi9kb2MvZWZ1bi9nZXR1aWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYzOGZlOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2dldHVpZApAQCAtMCwwICsxLDE3IEBACitTWU5PUFNJUworICAgICAgICBzdHJpbmcgZ2V0dWlkKG9iamVjdCBvYik7CisKK0JFU0NIUkVJQlVORworICAgICAgICBVc2VyLUlEcyB3ZXJkZW4gaW0gQ29tcGF0IE1vZHVzIG5pY2h0IHZlcndlbmRldC4KKworICAgICAgICBEaWUgRnVua3Rpb24gbGllZmVydCBkaWUgVUlEIGRlcyBPYmpla3RzLCBhbHNvIGRlbiBOYW1lbiBkZXMgTWFnaWVycworICAgICAgICBvZGVyIGRlciBEb21haW4gb2RlciBHcnVwcGUsIGRpZSBmdWVyIGRhcyBPYmpla3QgdmVyYW50d29ydGxpY2ggaXN0LgorICAgICAgICBEZXIgTmFtZSBlbnRzcHJpY2h0IGRlbSBOYW1lbiwgZGVyIGluIGRlciBXaXpsaXN0IHZlcndlbmRldCB3aXJkLgorICAgICAgICBXaXJkIDxvYj4gbmljaHQgYW5nZWdlYmVuLCB3aXJkIHN0YW5kYXJkbWFlc3NpZyB0aGlzX29iamVjdCgpCisgICAgICAgIGdlbm9tbWVuLgorCitBRU5ERVJVTkdFTgorICAgICAgICBTZWl0IDMuMi4xQDQ3IGlzdCBkaWVzZSBFZnVuIGVpbiBBbGlhcyBmdWVyIGNyZWF0b3IoKQorCitTSUVIRSBBVUNICisgICAgICAgIHNldGV1aWQoRSksIGdldGV1aWQoRSksIGV4cG9ydF91aWQoRSksIGNyZWF0b3IoRSksIGdldHV1aWQoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2dtdGltZSBiL2RvYy9lZnVuL2dtdGltZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjEyZWZmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vZ210aW1lCkBAIC0wLDAgKzEsMzggQEAKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisgICAgICAgIGludCAqZ210aW1lKGludCBjbG9jayk7CisgICAgICAgIGludCAqZ210aW1lKGludCAqdWNsb2NrKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEludGVycHJldGllcnQgPGNsb2NrPiBhbHMgQW56YWhsIFNla3VuZGVuIHNlaXQgZGVtIDAxLiBKYW51YXIgMTk3MCwKKyAgICAgICAgMDA6MDA6MDAgVWhyIHVuZCBnaWJ0IGRpZSBaZWl0IGluIFVUQyBpbiBlaW5lciBzY2hvZW5lbiBTdHJ1a3R1cgorICAgICAgICBhdXMuIFdpcmQgPGNsb2NrPiBuaWNodCBhbmdlZ2ViZW4sIHdpcmQgc3RhdHRkZXNzZW4gdGltZSgpIHZlcndlbmRldC4KKworICAgICAgICBBbHRlcm5hdGl2IGthbm4gYXVjaCBlaW4gQXJyYXkgbWl0IHp3ZWkgRWxlbWVudGVuIGFuZ2VnZWJlbiB3ZXJkZW4sCisgICAgICAgIHdpZSBlcyB2b24gdWNsb2NrKCkgZ2VsaWVmZXJ0IHdpcmQ6IGRhcyBlcnN0ZSBFbGVtZW50IHdpcmQKKyAgICAgICAgaW50ZXJwcmV0aWVydCB3aWUgPGNsb2NrPiwgZGFzIHp3ZWl0ZSBFbGVtZW50IGJlemVpY2huZXQgZGllCisgICAgICAgIE1pa3Jvc2VrdW5kZW4gaW4gZGVyIGFrdHVlbGxlbiBTZWt1bmRlLiBEaWVzZXMgendlaXRlIEVsZW1lbnQgd2lyZAorICAgICAgICBpZ25vcmllcnQuCisKKyAgICAgICAgRGFzIFJlc3VsdGF0IHZvbiBnbXRpbWUoKSBpc3QgZWluIEFycmF5LCBkYXMgZm9sZ2VuZGUgV2VydGUgYmVpbmhhbHRldDoKKyAgICAgICAgICAgIGludCBUTV9TRUMgICAoMCkgOiBTZWt1bmRlbiAoMC4uNTkpCisgICAgICAgICAgICBpbnQgVE1fTUlOICAgKDEpIDogTWludXRlbiAoMC4uNTkpCisgICAgICAgICAgICBpbnQgVE1fSE9VUiAgKDIpIDogU3R1bmRlbiAoMC4uMjMpCisgICAgICAgICAgICBpbnQgVE1fTURBWSAgKDMpIDogVGFnIGltIE1vbmF0ICgxLi4zMSkKKyAgICAgICAgICAgIGludCBUTV9NT04gICAoNCkgOiBNb25hdCBpbSBKYWhyICgwLi4xMSkKKyAgICAgICAgICAgIGludCBUTV9ZRUFSICAoNSkgOiBKYWhyICh6LkIuICAyMDAxKQorICAgICAgICAgICAgaW50IFRNX1dEQVkgICg2KSA6IFdvY2hlbnRhZyAoU3VuZGF5ID0gMCkKKyAgICAgICAgICAgIGludCBUTV9ZREFZICAoNykgOiBUYWcgaW0gSmFociAoMC4uMzY1KQorICAgICAgICAgICAgaW50IFRNX0lTRFNUICg4KSA6IFRSVUU6IERheWxpZ2h0IHNhdmluZyB0aW1lCisKK0JFSVNQSUVMCisgICAgICAgIHByaW50ZigiSGV1dGUgaXN0ICVzXG4iLCAoeyAiU29ubnRhZyIsICJNb250YWciLCAiRGllbnN0YWciLAorICAgICAgICAgICAgIk1pdHR3b2NoIiwgICAgICAgICJEb25uZXJzdGFnIiwgIkZyZWl0YWciLCAiU2Ftc3RhZyJ9KQorICAgICAgICAgICAgW2dtdGltZSgpW1RNX1dEQVldXSk7CisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi45LgorCitTSUVIRSBBVUNICisgICAgY3RpbWUoRSksIGxvY2FsdGltZShFKSwgdGltZShFKSwgdXRpbWUoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2hhc2ggYi9kb2MvZWZ1bi9oYXNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDU3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9oYXNoCkBAIC0wLDAgKzEsMzYgQEAKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxzeXMvdGxzLmg+CisKKyAgICAgICAgc3RyaW5nIGhhc2goaW50IG1ldGhvZCwgc3RyaW5nIGFyZyBbLCBpbnQgaXRlcmF0aW9ucyBdICkKKyAgICAgICAgc3RyaW5nIGhhc2goaW50IG1ldGhvZCwgaW50ICogIGFyZyBbLCBpbnQgaXRlcmF0aW9ucyBdICkKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEJlcmVjaG5lIGRlbiBIYXNoIDxtZXRob2Q+IHZvbSBBcmd1bWVudCA8YXJnPi4gRGVyIEhhc2ggd2lyZAorICAgICAgICBtaXQgPGl0ZXJhdGlvbnM+IFdpZWRlcmhvbHVuZ2VuIGJlcmVjaG5ldCwgd2lyZCBkZXIgV2VydCB3ZWdnZWxhc3NlbiwKKyAgICAgICAgd2lyZCBlaW5lIFdpZWRlcmhvbHVuZyB2ZXJ3ZW5kZXQuCisKKyAgICAgICAgPG1ldGhvZD4gaXN0IGVpbmUgZGVyIFRMU19IQVNIXy1Lb25zdGFudGVuIGluIHRscy5oOyBuaWNodCBqZWRlCisgICAgICAgIGJlc2NocmllYmVuZSBNZXRob2RlIGlzdCBpbiBlaW5lbSBnZWdlYmVuZW4gRHJpdmVyIHZvcmhhbmRlbjoKKworICAgICAgICAgIFRMU19IQVNIX1NIQTEgICAgICAoMSkKKyAgICAgICAgICBUTFNfSEFTSF9TSEEyMjQgICAgKDIpCisgICAgICAgICAgVExTX0hBU0hfU0hBMjU2ICAgICgzKQorICAgICAgICAgIFRMU19IQVNIX1NIQTM4NCAgICAoNCkKKyAgICAgICAgICBUTFNfSEFTSF9TSEE1MTIgICAgKDUpCisgICAgICAgICAgVExTX0hBU0hfTUQ1ICAgICAgICg2KQorICAgICAgICAgIFRMU19IQVNIX1JJUEVNRDE2MCAoNykKKworICAgICAgICBEaWVzZSBGdW5rdGlvbiBpc3QgbnVyIHZlcmZ1ZWdiYXIgd2VubiBkZXIgRHJpdmVyIG1pdCBPcGVuU1NMCisgICAgICAgIGNvbXBpbGllcnQgd3VyZGUuCisKK0JFSVNQSUVMRQorICAgICAgICBzdHJpbmcgczsKKworICAgICAgICBzID0gaGFzaChUTFNfSEFTSF9TSEExLCAiSGVsbG8iLCAyKTsKKyAgICAgICAgcyA9IGhhc2goVExTX0hBU0hfU0hBMSwgKHsgJ0gnLCAnZScsICdsJywgJ2wnLCAnbycgfSkgKQorCitHRVNDSElDSFRFCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMy43MTQKKworU0lFSEUgQVVDSAorICAgICAgICBjcnlwdChFKSwgbWQ1KEUpLCBtZDVfY3J5cHQoRSksIHNoYTEoRSksIGhtYWMoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2hlYXJ0X2JlYXRfaW5mbyBiL2RvYy9lZnVuL2hlYXJ0X2JlYXRfaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWU4ZDUyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vaGVhcnRfYmVhdF9pbmZvCkBAIC0wLDAgKzEsOSBAQAorU1lOT1BTSVMKKyAgICAgICAgb2JqZWN0ICpoZWFydF9iZWF0X2luZm8oKQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgUmVzdWx0YXQgaXN0IGVpbiBBcnJheSBtaXQgYWxsZW4gT2JqZWt0ZW4sIGRpZSBlaW5lbiBha3RpdmVuCisgICAgICAgIGhlYXJ0X2JlYXQoKSBoYWJlbi4KKworU0lFSEUgQVVDSAorICAgICAgICBzZXRfaGVhcnRfYmVhdChFKSwgaGVhcnRfYmVhdChBKSwgY2FsbF9vdXRfaW5mbyhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vaG1hYyBiL2RvYy9lZnVuL2htYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxZDZkNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2htYWMKQEAgLTAsMCArMSwzNSBAQAorU1lOT1BTSVMKKyAgICAgICAgI2luY2x1ZGUgPHN5cy90bHMuaD4KKworICAgICAgICBzdHJpbmcgaG1hYyhpbnQgbWV0aG9kLCBzdHJpbmcga2V5LCBzdHJpbmcgYXJnICkKKyAgICAgICAgc3RyaW5nIGhtYWMoaW50IG1ldGhvZCwgc3RyaW5nIGtleSwgaW50ICogIGFyZyApCisKK0JFU0NIUkVJQlVORworICAgICAgICBCZXJlY2huZXQgZGVuIEhhc2hlZCBNZXNzYWdlIEF1dGhlbmljYXRpb24gQ29kZSBmdWVyIDxhcmc+CisgICAgICAgIG5hY2ggTWV0aG9kZSA8bWV0aG9kPiB1bmQgZnVlciBkYXMgUGFzc3dvcmQgPGtleT4uCisKKyAgICAgICAgPG1ldGhvZD4gaXN0IGVpbmUgZGVyIFRMU19IQVNIXy1Lb25zdGFudGVuIGluIHRscy5oOyBuaWNodCBqZWRlCisgICAgICAgIGJlc2NocmllYmVuZSBNZXRob2RlIGlzdCBpbiBlaW5lbSBnZWdlYmVuZW4gRHJpdmVyIHZvcmhhbmRlbjoKKworICAgICAgICAgIFRMU19IQVNIX1NIQTEgICAgICAoMSkKKyAgICAgICAgICBUTFNfSEFTSF9TSEEyMjQgICAgKDIpCisgICAgICAgICAgVExTX0hBU0hfU0hBMjU2ICAgICgzKQorICAgICAgICAgIFRMU19IQVNIX1NIQTM4NCAgICAoNCkKKyAgICAgICAgICBUTFNfSEFTSF9TSEE1MTIgICAgKDUpCisgICAgICAgICAgVExTX0hBU0hfTUQ1ICAgICAgICg2KQorICAgICAgICAgIFRMU19IQVNIX1JJUEVNRDE2MCAoNykKKworICAgICAgICBEaWVzZSBGdW5rdGlvbiBpc3QgbnVyIHZlcmZ1ZWdiYXIgd2VubiBkZXIgRHJpdmVyIG1pdCBPcGVuU1NMCisgICAgICAgIGNvbXBpbGllcnQgd3VyZGUuCisKK0JFSVNQSUVMRQorICAgICAgICBzdHJpbmcgczsKKworICAgICAgICBzID0gaG1hYyhUTFNfSEFTSF9TSEExLCAic2VjcmV0IiwgIkhlbGxvIik7CisgICAgICAgIHMgPSBobWFjKFRMU19IQVNIX1NIQTEsICJzZWNyZXQiLCAoeyAnSCcsICdlJywgJ2wnLCAnbCcsICdvJyB9KSApCisKK0dFU0NISUNIVEUKKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4zLjcxNAorCitTSUVIRSBBVUNICisgICAgICAgIGNyeXB0KEUpLCBtZDUoRSksIG1kNV9jcnlwdChFKSwgc2hhMShFKSwgaG1hYyhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vaWRuYV9zdHJpbmdwcmVwIGIvZG9jL2VmdW4vaWRuYV9zdHJpbmdwcmVwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMDExNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9pZG5hX3N0cmluZ3ByZXAKQEAgLTAsMCArMSwyMiBAQAorT1BUSU9OQUwKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxzeXMvaWRuLmg+CisKKyAgICAgICAgc3RyaW5nIGlkbmFfc3RyaW5ncHJlcCAoc3RyaW5nIHN0ciwgaW50IHByb2ZpbGUsIGludCBmbGFncyA9IDApCisKK0JFU0NIUkVJQlVORworICAgICAgICBQcmVwYXJpZXJlIGRlbiBVVEYtOCBTdHJpbmcgPHN0cj4gcGFzc2VuZCB6dW0gUHJvZmlsIDxwcm9maWxlPgorICAgICAgICAoc2llaGUgYXVjaCBsaWJpZG4gc3RyaW5ncHJlcCgzKSkuCisKKyAgICAgICAgPHByb2ZpbGU+IHVuZCA8ZmxhZ3M+IHNpbmQgZGVmaW5pZXJ0IGluIGlkbi5oIC4KKworICAgICAgICBTb2xsdGUgZWluIEZlaGxlciBhdWZ0cmV0ZW4sIHdpcmQgZWluZSBFeGNlcHRpb24gZ2V3b3JmZW4uCisKKyAgICAgICAgRGllc2UgRWZ1biBpcyBudXIgdmVyZnVlZ2JhciBhdWYgU3lzdGVtZW4gbWl0IGxpYmlkbgorICAgICAgICBpbnN0YWxsaWVydCAtIGluIGRpZXNlbSBGYWxsIGlzdCBkYXMgTWFrcm8gX19JRE5BX18gZGVmaW5pZXJ0LgorCitHRVNDSElDSFRFCisgICAgICAgIEludHJvZHVjZWQgaW4gTERNdWQgMy4zLjcxMy4KKworU0lFSEUgQVVDSAorICAgICAgICBjb252ZXJ0X2NoYXJzZXQoRSksIGlkbmFfdG9fYXNjaWkoRSksIGlkbmFfdG9fdW5pY29kZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vaWRuYV90b19hc2NpaSBiL2RvYy9lZnVuL2lkbmFfdG9fYXNjaWkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNjNjZiOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2lkbmFfdG9fYXNjaWkKQEAgLTAsMCArMSwyMCBAQAorT1BUSU9OQUwKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxzeXMvaWRuLmg+CisKKyAgICAgICAgc3RyaW5nIGlkbmFfdG9fYXNjaWkgKHN0cmluZyBuYW1lKQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgV2FuZGxlIGRlbiBTdHJpbmcgPG5hbWU+IHZvbiBVVEYtOCB0byBJRE5BIERhcnN0ZWxsdW5nICg4egorICAgICAgICBwdW55Y29kZSkuCisKKyAgICAgICAgU29sbHRlIGVpbiBGZWhsZXIgYXVmdHJldGVuLCB3aXJkIGVpbmUgRXhjZXB0aW9uIGdld29yZmVuLgorCisgICAgICAgIERpZXNlIEVmdW4gaXMgbnVyIHZlcmZ1ZWdiYXIgYXVmIFN5c3RlbWVuIG1pdCBsaWJpZG4KKyAgICAgICAgaW5zdGFsbGllcnQgLSBpbiBkaWVzZW0gRmFsbCBpc3QgZGFzIE1ha3JvIF9fSUROQV9fIGRlZmluaWVydC4KKworR0VTQ0hJQ0hURQorICAgICAgICBJbnRyb2R1Y2VkIGluIExETXVkIDMuMy43MTMuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgY29udmVydF9jaGFyc2V0KEUpLCBpZG5hX3RvX3VuaWNvZGUoRSksIGlkbmFfc3RyaW5ncHJlcChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vaWRuYV90b191bmljb2RlIGIvZG9jL2VmdW4vaWRuYV90b191bmljb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4M2RjZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9pZG5hX3RvX3VuaWNvZGUKQEAgLTAsMCArMSwyMCBAQAorT1BUSU9OQUwKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxzeXMvaWRuLmg+CisKKyAgICAgICAgc3RyaW5nIGlkbmFfdG9fdW5pY29kZSAoc3RyaW5nIG5hbWUpCisKK0JFU0NIUkVJQlVORworICAgICAgICBXYW5kbGUgZGVuIFN0cmluZyA8bmFtZT4gdm9uIElETkEgRGFyc3RlbGx1bmcgKDh6IHB1bnljb2RlKQorICAgICAgICBuYWNoIFVURi04LgorCisgICAgICAgIFNvbGx0ZSBlaW4gRmVobGVyIGF1ZnRyZXRlbiwgd2lyZCBlaW5lIEV4Y2VwdGlvbiBnZXdvcmZlbi4KKworICAgICAgICBEaWVzZSBFZnVuIGlzIG51ciB2ZXJmdWVnYmFyIGF1ZiBTeXN0ZW1lbiBtaXQgbGliaWRuCisgICAgICAgIGluc3RhbGxpZXJ0IC0gaW4gZGllc2VtIEZhbGwgaXN0IGRhcyBNYWtybyBfX0lETkFfXyBkZWZpbmllcnQuCisKK0dFU0NISUNIVEUKKyAgICAgICAgSW50cm9kdWNlZCBpbiBMRE11ZCAzLjMuNzEzLgorCitTSUVIRSBBVUNICisgICAgICAgIGNvbnZlcnRfY2hhcnNldChFKSwgaWRuYV90b19hc2NpaShFKSwgaWRuYV9zdHJpbmdwcmVwKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9pbXBsb2RlIGIvZG9jL2VmdW4vaW1wbG9kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWE3MjNiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vaW1wbG9kZQpAQCAtMCwwICsxLDI1IEBACitTWU5PUFNJUworICAgICAgICBzdHJpbmcgaW1wbG9kZShtaXhlZCAqYXJyLCBzdHJpbmcgZGVsKQorCitCRVNDSFJFSUJVTkcKKwlTZXR6dCBhbGxlIFplaWNoZW5rZXR0ZW4gKFN0cmluZ3MpIGF1cyBkZW0gRmVsZCAoQXJyYXkpIGFyciB6dQorICAgICAgICBlaW5lciBaZWljaGVua2V0dGUgenVzYW1tZW4gdW5kIGZ1ZWd0IGRhYmVpIGRpZSBaZWljaGVua2V0dGUgZGVsCisgICAgICAgIHp3aXNjaGVuIGplIHp3ZWkgRWxlbWVudGVuIGVpbi4gRWxlbWVudGUgYXVzIGRlbSBGZWxkIGFyciwgd2VsY2hlCisgICAgICAgIGtlaW5lIFplaWNoZW5rZXR0ZW4gc2luZCwgd2VyZGVuIGlnbm9yaWVydC4KKworQkVJU1BJRUxFCisJRnVua3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVlY2tnYWJld2VydAorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJaW1wbG9kZSgoeyAiZm9vIiwgImJhciIsICIiIH0pLCAiKiIpICAgICAgICAgICAgImZvbypiYXIqIgorCWltcGxvZGUoKHsgImEiLCAyLCB0aGlzX29iamVjdCgpLCAiYyIgfSksICJiIikgICJhYmMiCisKKwlLYW5uIHp1c2FtbWVuIG1pdCBleHBsb2RlKCkgYWxzIEZ1bmt0aW9uIHp1bSBFcnNldHplbiB2b24KKyAgICAgICAgWmVpY2hlbmtldHRlbiB2ZXJ3ZW5kZXQgd2VyZGVuOgorICAgICAgICBpbXBsb2RlKGV4cGxvZGUoImEgc2hvcnQgdGV4dCIsICIgIiksICJfIikgICAgICAiYV9zaG9ydF90ZXh0IgorCisJSGV1dHp1dGFnZSBrYW5uIG1hbiBzdGF0dGRlc3NlbiBhdWNoCisJcmVncmVwbGFjZSgiYSBzaG9ydCB0ZXh0IiwgIiAiLCAiXyIsIDEpCisJdmVyd2VuZGVuLgorCitTSUVIRSBBVUNICisgICAgICAgIGV4cGxvZGUoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2luY2x1ZGVfbGlzdCBiL2RvYy9lZnVuL2luY2x1ZGVfbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQ0ZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vaW5jbHVkZV9saXN0CkBAIC0wLDAgKzEsODAgQEAKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxzeXMvaW5jbHVkZV9saXN0Lmg+CisKKyAgICAgICAgc3RyaW5nICppbmNsdWRlX2xpc3QoKTsKKyAgICAgICAgc3RyaW5nICppbmNsdWRlX2xpc3Qob2JqZWN0IG9iKTsKKyAgICAgICAgc3RyaW5nICppbmNsdWRlX2xpc3Qob2JqZWN0IG9iLCBpbnQgZmxhZ3MpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgRGllc2UgRnVua3Rpb24gbGllZmVydCBJbmZvcm1hdGlvbmVuIHVlYmVyIGFsbGUgRGF0ZWllbiwgZGllIGJlaSBkZXIKKyAgICAgICAgS29tcGlsaWVydW5nIHZvbiA8b2I+IGluIGRpZXNlcyBPYmpla3QgZWluZ2VidW5kZW4gd3VyZGVuLCBpbmtsdXNpdmUKKyAgICAgICAgZGVuIFByb2dyYW1tbmFtZW4gdm9uIDxvYj4uIFdpcmQgPG9iPiBuaWNodCBhbmdlZ2ViZW4sIHdpcmQKKyAgICAgICAgc3RhbmRhcmRtYWVzc2lnIGRhcyBha3R1ZWxsZSBPYmpla3QgdmVyd2VuZGV0LgorCisgICAgICAgIEltIHJlc3VsdGllcmVuZGVuIEFycmF5IGJlc3RlaHQgZGllIEluZm9ybWF0aW9uIHp1IGVpbmVtIEluY2x1ZGVmaWxlCisgICAgICAgIGF1cyBkcmVpIEVsZW1lbnRlbjoKKyAgICAgICAgICAtIHN0cmluZyBbaSswXTogZGVyIE5hbWUgZGVzIEluY2x1ZGVmaWxlcywgd2llIGVyIGltIFByb2dyYW1tCisgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZnRhdWNodCwgaW5rbHVzaXZlIGRlbiBUcmVubnplaWNoZW4gd2llICIgIiBvZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgIDwgPi4KKyAgICAgICAgICAtIHN0cmluZyBbaSsxXTogZGVyIGFic29sdXRlIERhdGVpcGZhZCBkZXMgSW5jbHVkZWZpbGVzLgorICAgICAgICAgIC0gaW50ICAgIFtpKzJdOiBkaWUgVGllZmUgZGVyIElua2x1c2lvbiAoZ2V3b2VobmxpY2ggMSwgZnVlcgorICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzY2hhY2h0ZWx0ZSBJbmNsdWRlcyBhdWNoIGdyb2Vzc2VyIGFscyAxKQorCisgICAgICAgIERlciBlcnN0ZSBFaW50cmFnIGltIFJlc3VsdGF0IGlzdCBkZXIgTmFtZSBkZXMgUHJvZ3JhbW1lcyBzZWxic3QgaW4KKyAgICAgICAgW2krMF0sIGRpZSBhbmRlcmVuIGJlaWRlbiBFbGVtZW50ZSBbaSsxXSB1bmQgW2krMl0gc2luZCAwLgorCisgICAgICAgIDxmbGFnPiBiZXplaWNobmV0IGRpZSBTdHJ1a3R1ciBkZXMgRXJnZWJuaXNzZXM6CisgICAgICAgICAgLSA8ZmxhZz4gPSBJTkNMSVNUX0ZMQVQgKDAsIFN0YW5kYXJkKToKKyAgICAgICAgICAgIERhcyBSZXN1bHRhdCBpc3QgZWluIGZsYWNoZXMgQXJyYXkuIERlciBlcnN0ZSBFaW50cmFnIGJlemVpY2huZXQKKyAgICAgICAgICAgIDxvYj4gc2VsYnN0LCBkaWUgcmVzdGxpY2hlbiBFaW50cmFlZ2UgYmV6ZWljaG5lbiBhbGxlIEluY2x1ZGVmaWxlcworICAgICAgICAgICAgaW4gZGVyIFJlaWhlbmZvbGdlLCBpbiBkZXIgc2llIGF1ZnRyZXRlbi4KKyAgICAgICAgICAtIDxmbGFnPiA9IElOQ0xJU1RfVFJFRSAoMSk6CisgICAgICAgICAgICBEYXMgUmVzdWx0YXQgaXN0IGVpbiBBcnJheSwgZGVzc2VuIGVyc3RlciBFaW50cmFnIGRhcyBPYmpla3QgPG9iPgorICAgICAgICAgICAgc2VsYnN0IGJlemVpY2huZXQuIEFsbGUgZm9sZ2VuZGVuIEVpbnRyYWVnZSBiZXplaWNobmVuIGRpZQorICAgICAgICAgICAgSW5jbHVkZWZpbGVzIHZvbiA8b2I+LiBXZW5uIGVpbiBJbmNsdWRlZmlsZSB2b24gPG9iPiBzZWxic3Qga2VpbmUKKyAgICAgICAgICAgIEluY2x1ZGVmaWxlcyBoYXQsIHdpcmQgc2VpbmUgSW5mb3JtYXRpb24gZGlyZWt0IGltIEFycmF5CisgICAgICAgICAgICBnZXNwZWljaGVydC4gRnVlciB2ZXJzY2hhY2h0ZWx0ZSBJbmNsdWRlZmlsZXMgd2lyZCBlaW4gVW50ZXJ2ZWt0b3IKKyAgICAgICAgICAgIGVyemV1Z3QgdW5kIGRhbm4gaW4gZGllc2VtIFVudGVydmVrdG9yIGFiZ2VzcGVpY2hlcnQgKHdpZWRlcnVtCisgICAgICAgICAgICBpbiBbaSswXSwgW2krMV0gdW5kIFtpKzJdIHNpbmQgMCkuIERpZXNlIFVudGVydmVrdG9yZW4gaGFiZW4KKyAgICAgICAgICAgIGRpZSBnbGVpY2hlIFN0cnVrdHVyIHdpZSBkYXMgUmVzdWx0YXRhcnJheS4KKworICAgICAgICBXZW5uIGVpbiBPYmpla3QsIGlua2x1c2l2ZSA8b2I+LCBlaW5lbSByZXBsYWNlX3Byb2dyYW1tKCkgdW50ZXJ3b3JmZW4KKyAgICAgICAgd2FyLCBzcGllZ2VsbiBkaWUgZ2VsaWVmZXJ0ZW4gRGF0ZWluYW1lbiBkYXMgZWZmZWt0aXYgYWt0aXZlIFByb2dyYW1tCisgICAgICAgIHdpZGVyLgorCisgICAgICAgIERpZSBJbmNsdWRlcGZhZGUsIGRpZSBnZWxpZWZlcnQgd2VyZGVuLCBiZWdpbm5lbiBpbW1lciBtaXQgJy8nCisgICAgICAgIChhYnNvbHV0ZSBQZmFkZSksIGF1Y2ggd2VubiBkZXIgVHJlaWJlciBpbSBDT01QQVQgTW9kdXMgbGFldWZ0LgorICAgICAgICBUcm90emRlbSBiZWdpbm50IGRlciB0YXRzYWVjaGxpY2hlIERhdGVpbmFtZSBuaWNodCBtaXQgZWluZW0gJy8nLAorICAgICAgICB3ZW5uIGRlciBUcmVpYmVyIGltIENPTVBBVCBNb2R1cyBsYWV1ZnQuCisKK0JFSVNQSUVMCisgICAgICAgIERpZXNlciBDb2RlIGVyemV1Z3QgKG1pdCAvc3lzIGFscyBJbmNsdWRldmVyemVpY2huaXMgZGVzIFN5c3RlbXMpOgorCisgICAgICAgICAgICBhLmM6ICAjaW5jbHVkZSAiYi5oIgorICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPGMuaD4KKyAgICAgICAgICAgIGIuaDogICNpbmNsdWRlICJkLmgiCisgICAgICAgICAgICBjLmg6ICAjZGVmaW5lIEJBUgorICAgICAgICAgICAgZC5oOiAgI2RlZmluZSBGT08KKworICAgICAgICBEaWUgRWZ1biBsaWVmZXJ0IGRyZWkgUmVzdWx0YXRlOgorCisgICAgICAgICAgICBpbmNsdWRlX2xpc3QoYSwgSU5DTElTVF9GTEFUKQorICAgICAgICAgICAgLT4gKHsgImEuYyIsIDAsIDAKKyAgICAgICAgICAgICAgICAsICJcImIuaFwiIiwgIi8uLi4vYi5oIiwgMQorICAgICAgICAgICAgICAgICwgIlwiZC5oXCIiLCAiLy4uLi9kLmgiLCAyCisgICAgICAgICAgICAgICAgLCAiPGMuaD4iLCAgICIvc3lzL2MuaCIsIDEKKyAgICAgICAgICAgICAgIH0pCisKKyAgICAgICAgICAgICBpbmNsdWRlX2xpc3QoYSwgSU5DTElTVF9UUkVFKQorICAgICAgICAgICAgIC0+ICh7ICJhLmMiLCAwLCAwCisgICAgICAgICAgICAgICAgICwgKHsgIlwiYi5oXCIiLCAiLy4uLi9iLmgiLCAxCisgICAgICAgICAgICAgICAgICAgICwgIlwiZC5oXCIiLCAiLy4uLi9kLmgiLCAyCisgICAgICAgICAgICAgICAgICAgfSksIDAsIDAKKyAgICAgICAgICAgICAgICAgLCAiPGMuaD4iLCAgICIvc3lzL2MuaCIsIDEKKyAgICAgICAgICAgICAgICAgfSkKKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjksIDMuMy4xMjgKKworU0lFSEUgQVVDSAorICAgICAgICBkZWJ1Z19pbmZvKEUpLCBpbmhlcml0X2xpc3QoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2luaGVyaXRfbGlzdCBiL2RvYy9lZnVuL2luaGVyaXRfbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2M3MzhlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vaW5oZXJpdF9saXN0CkBAIC0wLDAgKzEsNjAgQEAKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxzeXMvaW5oZXJpdF9saXN0Lmg+CisKKyAgICAgICAgc3RyaW5nICppbmhlcml0X2xpc3QoKTsKKyAgICAgICAgc3RyaW5nICppbmhlcml0X2xpc3Qob2JqZWN0IG9iKTsKKyAgICAgICAgc3RyaW5nICppbmhlcml0X2xpc3Qob2JqZWN0IG9iLCBpbnQgZmxhZ3MpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBkaWUgTmFtZW4gdm9uIGFsbGVuIERhdGVpZW4sIGRpZSB2b24gPG9iPiBnZWVyYnQgd2VyZGVuLAorICAgICAgICBpbmtsdXNpdmUgPG9iPnMgZWlnZW5lciBEYXRlaW5hbWUuIFdpcmQgPG9iPiBuaWNodCBhbmdlZ2ViZW4sIHdpcmQKKyAgICAgICAgc3RhbmRhcm5kbWFlc3NpZyBkYXMgYWt0dWVsbGUgT2JqZWt0IHZlcndlbmRldC4KKworICAgICAgICBEZXIgV2VydCB2b24gPGZsYWdzPiBiZXN0aW1tdCBkaWUgU3RydWt0dXIgZGVzIFJ1ZWNrZ2FiZXdlcnRlczoKKyAgICAgICAgICAtIDxmbGFnPiA9IElOSExJU1RfRkxBVCAoMCwgZGVmYXVsdCk6CisgICAgICAgICAgICBpbmhlcml0X2xpc3QoKSBsaWVmZXJ0IGVpbiBBcnJheSB2b24gRGF0ZWluYW1lbiwgYmVnaW5uZW5kIG1pdCBkZW0KKyAgICAgICAgICAgIE5hbWVuIHZvbiA8b2I+IHNlbGJzdCwgZ2Vmb2xndCB2b24gZGVuIE5hbWVuIGFsbGVyIGdlZXJidGVuCisgICAgICAgICAgICBPYmpla3Rlbi4KKyAgICAgICAgICAtIDxmbGFnPiA9IElOSExJU1RfVFJFRSAoMSk6CisgICAgICAgICAgICBpbmhlcml0X2xpc3QoKSBsaWVmZXJ0IGVpbiBBcnJheSB2b24gRGF0ZWluYW1lbiwgYmVnaW5uZW5kIG1pdCBkZW0KKyAgICAgICAgICAgIE5hbWVuIHZvbiA8b2I+IHNlbGJzdC4gV2VubiBlaW4gZ2VlcmJ0ZSBGaWxlIHNlbGJzdCBrZWluZSBGaWxlcworICAgICAgICAgICAgZXJidCwgd2lyZCBzZWluIE5hbWUgZGlyZWt0IGluIGRhcyBFcmdlYm5pcyBlaW5nZXRyYWdlbi4gV2VubiBlaW4KKyAgICAgICAgICAgIGdlZXJidGVzIEZpbGUgc2VsYnN0IEZpbGVzIGVyYnQsIHdpcmQgZWluIFVudGVydmVrdG9yIGVyemV1Z3QsIGluCisgICAgICAgICAgICBkZW0gZGllIEluaGVyaXRzIGVpbmdldHJhZ2VuIHdlcmRlbi4gRGVyIFVudGVydmVrdG9yIGhhdCBkaWUKKyAgICAgICAgICAgIGdsZWljaGUgU3RydWt0dXIgd2llIGRlciBIYXVwdmVrdG9yLgorICAgICAgICAgIC0gPGZsYWc+ID0gSU5ITElTVF9UQUdfVklSVFVBTCAoMik6CisgICAgICAgICAgICBBbGxlIE5hbWVuIGltIEVyZ2VibmlzdmVrdG9yIGhhYmVuIGVpbiBsZWVyZXMgVGFnICIgICIgKHp3ZWkKKyAgICAgICAgICAgIExlZXJzY2hsYWVnZSkgZnVlciBub3JtYWxlIEluaGVyaXRzIHVuZCAidiAiIGZ1ZXIgdmlydHVlbGxlCisgICAgICAgICAgICBJbmhlcml0cyBhbHMgUHJhZWZpeCB2b3Jhbmdlc3RlbGx0LgorCisgICAgICAgIEFsbGUgRmxhZ3Mga29lbm5lbiBtaXQgZWluZW0gYmluYWVyZW4gT2RlciB8IHZlcmJ1bmRlbiB3ZXJkZW4sIHdvYmVpCisgICAgICAgIElOSExJU1RfRkxBVCB1bmQgSU5ITElTVF9UUkVFIHNpY2ggZ2VnZW5zZWl0aWcgYXVzc2NobGllc3Nlbi4KKworICAgICAgICBXZW5uIGVpbiBPYmpla3QsIGlua2x1c2l2ZSA8b2I+LCBlaW5lbSByZXBsYWNlX3Byb2dyYW1tKCkgdW50ZXJ3b3JmZW4KKyAgICAgICAgd2FyLCBzcGllZ2VsbiBkaWUgZ2VsaWVmZXJ0ZW4gRGF0ZWluYW1lbiBkYXMgZWZmZWt0aXYgYWt0aXZlIFByb2dyYW1tCisgICAgICAgIHdpZGVyLgorCisgICAgICAgIERpZSBJbmhlcml0cGZhZGUsIGRpZSBnZWxpZWZlcnQgd2VyZGVuLCBiZWdpbm5lbiBpbW1lciBtaXQgJy8nCisgICAgICAgIChhYnNvbHV0ZSBQZmFkZSksIGF1Y2ggd2VubiBkZXIgVHJlaWJlciBpbSBDT01QQVQgTW9kdXMgbGFldWZ0LgorCitCRUlTUElFTAorICAgICAgICBHZWdlYmVuIGZvbGdlbmRlIFZlcmVyYnVuZ3NzdHJ1a3R1cjoKKworICAgICAgICAgICAgLyBjIC0gZAorICAgICAgICAgIGEKKyAgICAgICAgICAgIFwgYgorCisgICAgICAgIFdvYmVpIGQgdmlydHVlbGwgZ2VlcmJ0IHdpcmQsIGVyZ2ViZW4gc2ljaCBmb2xnZW5kZSBSZXN1bHRhdGU6CisKKyAgICAgICAgICAgIGluaGVyaXRfbGlzdChhKSAtPiAoeyAiYSIsICJjIiwgImIiLCAiZCIgfSkKKyAgICAgICAgICAgIGluaGVyaXRfbGlzdChjKSAtPiAoeyAiYyIsICJkIiB9KQorICAgICAgICAgICAgaW5oZXJpdF9saXN0KGEsIDEpIC0+ICh7ICJhIiwgKHsgImMiLCAiZCIgfSksICJiIiB9KQorICAgICAgICAgICAgaW5oZXJpdF9saXN0KGEsIDMpIC0+ICh7ICIgIGEiLCAoeyAiIGMiLCAidiBkIiB9KSwgIiAgYiIgfSkKKworQUVOREVSVU5HRU4KKyAgICAgICAgVm9yIDMuMi44LCBiZWdhbm5lbiBkaWUgZ2VsaWVmZXJ0ZW4gTmFtZW4gbmllbWFscyBtaXQgZWluZW0gJy8nLgorICAgICAgICBMRE11ZCAzLjIuOSBmdWVocnRlIGRpZSBCYXVtc3RydWt0dXIgKF9UUkVFKSB1bmQgVGFncyBmdWVyIHZpcnR1ZWxsZQorICAgICAgICAgICAgSW5oZXJpdHMgKCJ2ICIpIGVpbi4KKworU0lFSEUgQVVDSAorICAgICAgICBkZWJ1Z19pbmZvKEUpLCBpbmNsdWRlX2xpc3QoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2lucHV0X3RvIGIvZG9jL2VmdW4vaW5wdXRfdG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjYmQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2lucHV0X3RvCkBAIC0wLDAgKzEsMTQ2IEBACitTWU5PUFNJUworICAgICAgICAjaW5jbHVkZSA8c3lzL2lucHV0X3RvLmg+CisKKyAgICAgICAgdm9pZCBpbnB1dF90byhzdHJpbmd8Y2xvc3VyZSBmdW4pOworICAgICAgICB2b2lkIGlucHV0X3RvKHN0cmluZ3xjbG9zdXJlIGZ1biwgaW50IGZsYWcsIC4uLik7CisgICAgICAgIHZvaWQgaW5wdXRfdG8oc3RyaW5nfGNsb3N1cmUgZnVuLCBpbnQgZmxhZywgc3RyaW5nfGNsb3N1cmUgcHJvbXB0LCAuLi4pOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgRGllIG5hZWNoc3RlIFplaWxlLCBkaWUgZGVyIFNwaWVsZXIgZWludGlwcHQsIHdpcmQgYWxzIEFyZ3VtZW50IGFuIGRpZQorICAgICAgICBGdW5rdGlvbiA8ZnVuPiB1ZWJlcmdlYmVuLiBBdXNuYWhtZTogd2VubiBkaWUgbmFlY2hzdGUgWmVpbGUgbWl0IGVpbmVtCisgICAgICAgICchJyBiZWdpbm50LCB3aXJkIHNpZSBhbHMgS29tbWFuZG8gYXVzZ2V3ZXJ0ZXQgYnp3LiBhbiBkYXMgbGV0enRlCisgICAgICAgIGlucHV0X3RvKCkgdWViZXJnZWJlbiwgZGFzIGRhcyBJTlBVVF9JR05PUkVfQkFORyBGbGFnIGdlc2V0enQgaGF0LgorICAgICAgICBEaWUgRnVua3Rpb24gPGZ1bj4ga2FubiAic3RhdGljIiBkZWtsYXJpZXJ0IHNlaW4sIG5pY2h0IGFiZXIgInByaXZhdGUiCisgICAgICAgIChzb25zdCB3aXJkIHNpZSBuaWNodCBnZWZ1bmRlbikuCisKKyAgICAgICAgRGVyIEF1ZnJ1ZiB2b24gPGZ1bj4gZXJmb2xndCBuaWNodCBzb2ZvcnQsIHNvbmRlcm4gZXJzdCwgd2VubiBkZXIKKyAgICAgICAgU3BpZWxlciBkaWUgRW50ZXJ0YXN0ZSBkcnVlY2t0LgorCisgICAgICAgIFdlbm4gaW5wdXRfdG8oKSBtZWhyIGFscyBlaW5tYWwgcHJvIEZ1bmt0aW9uIGF1ZmdlcnVmZW4gd2lyZCwKKyAgICAgICAgd2lyZCBub3JtYWxlcndlaXNlIG51ciBkYXMgZXJzdGUgaW5wdXRfdG8oKSBiZXJ1ZWNrc2ljaHRpZ3QuCisgICAgICAgIERpZXNlIFZlcmhhbHRlbiBrYW5uIGR1cmNoIGRpZSBBbmdhYmUgdm9uIElOUFVUX0FQUEVORAorICAgICAgICBtb2RpZml6aWVydCB3ZXJkZW46IGluIGRpZXNlbSBGYWxsIHdpcmQgZGFzIGlucHV0X3RvKCkgYW4gZGllCisgICAgICAgIExpc3RlIGRlciBiZXJlaXRzIGFuaGFlbmdpZ2VuIGlucHV0X3RvcyBhbmdlaGFlbmd0IChzaWVoZQorICAgICAgICBCRUlTUElFTEUpLgorCisgICAgICAgIFdpcmQgYW5kZXJlcnNlaXRzIHdhZWhyZW5kIGVpbmVtIGxhdWZlbmRlbiBpbnB1dF90bygpIChtaXR0ZWxzICIhIiBhbQorICAgICAgICBaZWlsZW5hbmZhbmcpIGVpbmUgbmV1ZSBGdW5rdGlvbiBhdWZnZXJ1ZmVuLCBkaWUgd2llZGVydW0gZWluCisgICAgICAgIGlucHV0X3RvKCkgZW50aGFlbHQsIHdpcmQgZGFzIHVyc3BydWVuZ2xpY2hlIGlucHV0X3RvKCkgc28gbGFuZ2UKKyAgICAgICAgdW50ZXJicm9jaGVuLCBiaXMgZGFzIG5ldWUgaW5wdXRfdG8oKSBhYmdlYXJiZWl0ZXQgd3VyZGUsCisgICAgICAgIGFuc2NobGllc3NlbmQgd2lyZCBlcyB3aWVkZXIgYWt0aXYuCisKKyAgICAgICAgRGFzIG9wdGlvbmFsZSA8ZmxhZz4ga2FubiBlaW4gYmluYWVyZXMgT2RlciAofCkgZGVyIGZvbGdlbmRlbgorICAgICAgICBXZXJ0ZSBzZWluOgorCisgICAgICAgIElOUFVUX05PRUNITyAoMSk6CisgICAgICAgICAgICBEaWUgdm9tIFNwaWVsZXIgZWluZ2VnZWJlbmUgWmVpbGUgZXJ6ZXVndCBrZWluIEVjaG8gdW5kIHdpcmQgYXVjaAorICAgICAgICAgICAgbmljaHQgZXJrYW5udCwgd2VubiBkZXIgU3BpZWxlciBiZW9iYWNodGV0IHdpcmQuCisKKyAgICAgICAgICAgIERpZXNlciBNb2R1cyBrYW5uIG51ciBnZWFlbmRlcnQgd2VyZGVuLCB3ZW5uIHRlbG5ldCBlbmFibGVkIGlzdC4KKworICAgICAgICBJTlBVVF9DSEFSTU9ERSAoMik6CisgICAgICAgICAgICBEaWUgVmVyYmluZHVuZyB6dW0gVXNlciB3ZWNoc2VsdCB2b24gWmVpbGVuLSBhdWYgWmVpY2hlbm1vZHVzLiBTbworICAgICAgICAgICAgd2lyZCBudXIgZWluIGVpbnplbG5lcyBaZWljaGVuICghKSB2b20gU3BpZWxlciBlbXBmYW5nZW4uCisKKyAgICAgICAgICAgIElzdCB0ZWxuZXQgZGlzYWJsZWQsIHdpcmQgbGVkaWdsaWNoIGRpZSBJbnRlcnByZXRhdGlvbiBkZXIKKyAgICAgICAgICAgIGVpbmtvbW1lbmRlbiBEYXRlbiBkdXJjaCBkZW4gRHJpdmVyIHVtZ2VzY2hhbHRldCAtIGRhcworICAgICAgICAgICAgQ2xpZW50cHJvZ3JhbW0gZGVzIFNwaWVsZXIgdmVyYmxlaWJ0IGltIGdlcmFkZSBha3RpdmVuIE1vZHVzLgorCisgICAgICAgICAgICBOYWNoZGVtIGRpZSBGdW5rdGlvbiA8ZnVuPiBhdXNnZWZ1ZWhydCB3dXJkZSwgd2VjaHNlbHQgZGllCisgICAgICAgICAgICBWZXJiaW5kdW5nIHp1cnVlY2sgaW4gWmVpbGVubW9kdXMsIGF1c3NlciBlaW4gbmFjaGZvbGdlbmRlcworICAgICAgICAgICAgaW5wdXRfdG8oICwgMikgd3VyZGUgZ2VzdGFydGV0LgorCisgICAgICAgICAgICBaZWlsZW51bWJydWVjaGUgd2VyZGVuIGplIG5hY2ggQ2xpZW50IHVudGVyc2NoaWVkbGljaCBlbXBmYW5nZW4sCisgICAgICAgICAgICBlbnR3ZWRlciBhbHMgIiIsIGFscyAiXHIiIGdlZm9sZ3Qgdm9uICIiIG9kZXIgYWxzICJcciIgKGxldHp0ZXJlcworICAgICAgICAgICAga29tbXQgdm9yIGFsbGVtIGJlaSBXaW5kb3dzIENsaWVudHMgdm9yKS4KKworICAgICAgICAgICAgRGFzIEZyb250ZW5kIGRlcyBTcGllbGVycyBrYW5uIGRhdWVybmQgaW0gWmVpbGVubW9kdXMgYmxlaWJlbi4KKyAgICAgICAgICAgIEF1Y2ggd2VubiBpbnB1dF90bygpIG51ciBlaW4gZWluemVsbmVzIFplaWNoZW4gZm9yZGVydCwgbXVzcyBkZXIKKyAgICAgICAgICAgIFNwaWVsZXIgdW50ZXIgVW1zdGFlbmRlbiBkYXMgWmVpY2hlbiB1bmQgZWluZW4gWmVpbGVudW1icnVjaAorICAgICAgICAgICAgZHJ1ZWNrZW4gKHVuZCBzZW5kZW4pLiBOb3JtYWxlcndlaXNlIGVyaGFlbHQgPGZ1bj4gZGFubiBkZW4KKyAgICAgICAgICAgIGdlc2FtdGVuIElucHV0IGF1ZiBlaW5tYWwuCisKKyAgICAgICAgICAgIFdpbGwgbWFuIGxhZW5nZXIgaW0gWmVpY2hlbm1vZHVzIGJsZWliZW4sIGthbm4gZGVyIE92ZXJoZWFkCisgICAgICAgICAgICByZWR1emllcnQgd2VyZGVuLCBpbmRlbSBzZXRfY29tYmluZV9jaGFyc2V0KCkgdmVyd2VuZGV0IHdpcmQuIFNvCisgICAgICAgICAgICBrb2VubmVuIFplaWNoZW5zZXF1ZW56ZW4gYWxzIGVpbiBTdHJpbmcgYW5zdGVsbGUgdm9uCisgICAgICAgICAgICBaZWljaGVuLWZ1ZXItWmVpY2hlbiBlbXBmYW5nZW4gd2VyZGVuLiBJbiBlaW5lbSBzY3JlZW5vcmllbnRpZXJ0ZW4KKyAgICAgICAgICAgIEVkaXRvciBnaWx0IGRpZXMgZnVlciBkaWUgbWVpc3RlbiBkcnVja2JhcmVuIFplaWNoZW4uCisKKyAgICAgICAgSU5QVVRfUFJPTVBUICg0KToKKyAgICAgICAgICAgIERhcyBBcmd1bWVudCBuYWNoIGRlbSA8ZmxhZz4gd2lyZCBhbHMgUHJvbXB0IGZ1ZXIgZGllIEVpbmdhYmUKKyAgICAgICAgICAgIHZlcndlbmRldC4gV2VubiBkaWVzZXMgQXJndW1lbnQgbmljaHQgYW5nZWdlYmVuICh1bmQgZGFtaXQga2VpbgorICAgICAgICAgICAgUHJvcG10IGRlZmluaWVydCkgaXN0LCB3aXJkIGtlaW4gUHJvbXB0IGF1c2dlZ2ViZW4uCisKKyAgICAgICAgSU5QVVRfTk9fVEVMTkVUICg4KToKKyAgICAgICAgICAgIE1vZGlmaXppZXJ0IGRhcyBJTlBVVF9DSEFSTU9ERSBBcmd1bWVudDogZGVyIERyaXZlciBhZW5kZXJ0CisgICAgICAgICAgICBzZWluZSBCZWhhbmRsdW5nIHZvbiBlaW5nZWhlbmRlbiBEYXRlbiBlbnRzcHJlY2hlbmQgZGVtIF9DSEFSTU9ERQorICAgICAgICAgICAgQXJndW1lbnQsIHNlbmRldCBhYmVyIGtlaW5lIFRlbG5ldGtvbW1hbmRvcyB6dXIgQW5wYXNzdW5nCisgICAgICAgICAgICBkZXMgVmVyaGFsdGVucyBkZXMgQ2xpZW50cHJvZ3JhbW1lcy4KKworICAgICAgICBJTlBVVF9BUFBFTkQgKDE2KToKKyAgICAgICAgICAgIERhcyBpbnB1dF90bygpIHdpcmQgYW4gZGllIExpc3RlIGRlciBiZXJlaXRzIGFuaGFlbmdpZ2VuCisgICAgICAgICAgICBpbnB1dF90b3MgYW5nZWhhZW5ndC4KKworICAgICAgICBJTlBVVF9JR05PUkVfQkFORyAoMTI4KToKKyAgICAgICAgICAgIEVpbmdhYmVuLCBkaWUgbWl0ICEgYmVnaW5uZW4sIHdlcmRlbiBOSUNIVCBhbHMgS29tbWFuZGkgZ2VwYXJzZXQsCisgICAgICAgICAgICBzb25kZXJuIGF1Y2ggYWxzIEFyZ3VtZW50IGFuIGRpZSBGdW5raW9uIDxmdW4+IHVlYmVyZ2ViZW4uIERpZQorICAgICAgICAgICAgVmVyd2VuZHVuZyBkaWVzZXMgRmxhZ3MgaXN0IGVpbmdlc2NocmFlbmt0LgorCisgICAgICAgIEFsbGUgbmFjaGZvbGdlbmRlbiBBcmd1bWVudGUgd2VyZGVuIGFscyB6d2VpdGVzIGJ6dy4gZHJpdHRlcyB1c3cuCisgICAgICAgIEFyZ3VtZW50IGFuIDxmdW4+IHVlYmVyZ2ViZW4uCisKK0JFSVNQSUVMCisgICAgICAgIHZvaWQgZnVuYygpCisgICAgICAgIHsKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgaW5wdXRfdG8oImVudGVyX25hbWUiLCBJTlBVVF9QUk9NUFQsICJXaWUgbGF1dGV0IGRlaW4gTmFtZT86Iik7CisgICAgICAgICAgICAvKiBGcnVlaGVyIGVybGVkaWd0ZSBtYW4gZGllcyBtaXQ6CisgICAgICAgICAgICAgKiAgIHdyaXRlKCJXaWUgbGF1dGV0IGRlaW4gTmFtZT86Iik7CisgICAgICAgICAgICAgKiAgIGlucHV0X3RvKCJlbnRlcl9uYW1lIik7CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAuLi4KKyAgICAgICAgIH0KKworICAgICAgICAgZW50ZXJfbmFtZShzdHJpbmcgc3RyKQorICAgICAgICAgeworICAgICAgICAgICAgd3JpdGUoIkhlaXNzdCBkdSB3aXJrbGljaCAnIitzdHIrIic/PyAqa2ljaGVyKlxuIik7CisgICAgICAgICAgICAuLi4KKyAgICAgICAgfQorCisgICAgICAgIEJlaSBkZXIgaW5wdXRfdG8oKSBBbndlaXN1bmcgZnVlaHJ0IGRlciBEcml2ZXIgZGllIEZ1bmt0aW9uCisgICAgICAgIGZ1bmMoKSBhdXMsIGVyd2FydGV0IGFiZXIgZ2xlaWNoemVpdGlnIElucHV0IHZvbSBTcGllbGVyLiBXZW5uCisgICAgICAgIGRpZXNlciBldHdhcyBlaW5nZWdlYmVuIFVORCBESUUgRU5URVJUQVNURSBHRURSVUVDS1QgSEFULCBhcmJlaXRldAorICAgICAgICBkZXIgRHJpdmVyIGRpZSBGdW5rdGlvbiBlbnRlcl9uYW1lKCkgbWl0IGRlbSBlaW5nZWdlYmVuZW4gU3RyaW5nCisgICAgICAgIGFscyBBcmd1bWVudCBhYi4KKworCisgICAgICAgIHZvaWQgZnVuYygpIHsKKyAgICAgICAgICAuLgorICAgICAgICAgIGlucHV0X3RvKCJlbnRlcl9maXJzdG5hbWUiKTsKKyAgICAgICAgICBpbnB1dF90bygiZW50ZXJfbGFzdG5hbWUsIElOUFVUX0FQUEVORCk7CisgICAgICAgICAgLi4uCisgICAgICAgIH0KKworICAgICAgICBEaWVzZSBTZXF1ZW56ZSBlcnpldWd0IHp3ZWkgaW5wdXRfdG9zOiBFaW5nYWJlbiBnZWhlbiB6dWVyc3QKKyAgICAgICAgYW4gZW50ZXJfZmlyc3RuYW1lKCk7IHVuZCB3ZW5uIGRpZXNlIEZ1bmt0aW9uIGZlcnRpZyBpc3QKKyAgICAgICAgKGVpbnNjaGxpZXNzbGljaCBldHdhaWdlciBlaWdlbmVyIG5vbi1JTlBVVF9BUFBFTkQgaW5wdXRfdG9zKSwgZ2VodAorICAgICAgICBkaWUgbmFlY2hzdGUgRWluZ2FiZSBhbiBlbnRlcl9sYXN0bmFtZSgpLgorCitBRU5ERVJVTkdFTgorICAgICAgICBEaWUgQmVkZXV0dW5nIHZvbiA8ZmxhZz4gd3VyZGUgaW4gMy4yLjFAOTMgZXJ3ZWl0ZXJ0LgorICAgICAgICBEaWUgTGltaXRpZXJ1bmcgZnVlciBkYXMgInN0YXBlbG4iIHZvbiBpbnB1dF90bygpcyBhdXMgIS1Lb21tYW5kaQorICAgICAgICAgICAgd3VyZGUgaW4gTERNdWQgMy4yLjggaW1wbGVtZW50aWVydC4KKyAgICAgICAgU2VpdCBMRE11ZCAzLjIuOCBrYW5uIDxmdW4+IGluIEZvcm0gZWluZXIgQ2xvc3VyZSBhbmdlZ2ViZW4gd2VyZGVuLgorICAgICAgICBMRE11ZCAzLjIuOSBmdWVocnRlIGRhcyBGbGFnIElOUFVUX1BST01QVCBzYW10IHp1Z2Vob2VyaWdlbSBBcmd1bWVudAorICAgICAgICAgICAgZWluLgorICAgICAgICBMRE11ZCAzLjIuMTEvMy4zLjU5MyBmdWVocnRlIGRhcyBJTlBVVF9OT19URUxORVQgRmxhZyBlaW4uCisgICAgICAgIExETXVkIDMuMi4xMS8zLjMuNjM3IGZ1ZWhydGUgZGFzIElOUFVUX0FQUEVORCBGbGFnIGVpbi4KKworQlVHUworICAgICAgICBJbSBaZWljaGVubW9kdXMgc29sbHRlbiBaZWlsZW51bWJydWVjaGUgZWlnZW50bGljaCBhbHMgIlxuIiB6dXJ1ZWNrCisgICAgICAgIGdlZ2ViZW4gd2VyZGVuLiBEaWVzIGFsbGVyZGluZ3Mga2FubiBleGlzdGllcmVuZGVuIENvZGUgemVyc3RvZXJlbi4KKworU0lFSEUgQVVDSAorICAgICAgICBjYWxsX290aGVyKEUpLCBzc2NhbmYoRSksIHByaXZpbGVnZV92aW9sYXRpb24oTSksCisgICAgICAgIHNldF9jb21iaW5lX2NoYXJzZXQoRSksIHF1ZXJ5X2lucHV0X3BlbmRpbmcoRSksIGZpbmRfaW5wdXRfdG8oRSksCisgICAgICAgIGlucHV0X3RvX2luZm8oRSksIHJlbW92ZV9pbnB1dF90byhFKSwgZW5hYmxlX3RlbG5ldChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vaW5wdXRfdG9faW5mbyBiL2RvYy9lZnVuL2lucHV0X3RvX2luZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRhYzNkMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2lucHV0X3RvX2luZm8KQEAgLTAsMCArMSwyMSBAQAorU1lOT1BTSVMKKyAgICAgICAgKm1peGVkIGlucHV0X3RvX2luZm8ob2JqZWN0IHBsYXllcik7CisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGVpbiBBcnJheSBhbGxlciBmdWVyIDxwbGF5ZXI+IGhhZW5naWdlbiBpbnB1dF90bygpcy4gRGVyCisgICAgICAgIGVyc3RlIEVpbnRyYWcgaW0gQXJyYXkgaXN0IGRlciBhZWx0ZXN0ZSBoYWVuZ2lnZSBpbnB1dF90bygpCisgICAgICAgIChkZXJqZW5pZ2UsIHdlbGNoZXIgYWxzIGVyc3RlcyBnZXN0YXJ0ZXQgd3VyZGUpLCBkZXIgbGV0enRlCisgICAgICAgIEVpbnRyYWcgaXN0IGRlciBuZXVzdGUgaW5wdXRfdG8oKS4KKworICAgICAgICBKZWRlciBFaW50cmFnIGltIEFycmF5IGlzdCB3aWVkZXJ1bSBlaW4gQXJyYXkgdm9uIDIgb2RlciBtZWhyCisgICAgICAgIEVpbnRyYWVnZW4sIGRhcyBmb2xnZW5kZSBFbGVtZW50ZSBlbnRoYWVsdDoKKyAgICAgICAgICAgIDA6ICAgRGFzIE9iamVrdCAobnVyLCB3ZW5uIGRpZSBGdW5rdGlvbiBlaW4gc3RyaW5nIGlzdCkKKyAgICAgICAgICAgIDE6ICAgRGllIEZ1bmt0aW9uIChTdHJpbmcgb2RlciBDbG9zdXJlKQorICAgICAgICAgICAgMmZmOiBEaWUgQXJndW1lbnRlCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi45LgorCitTSUVIRSBBVUNICisgICAgICAgIGlucHV0X3RvKEUpLCBmaW5kX2lucHV0X3RvKEUpLCByZW1vdmVfaW5wdXRfdG8oRSksCisgICAgICAgIHF1ZXJ5X2lucHV0X3BlbmRpbmcoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2luc2VydF9hbGlzdCBiL2RvYy9lZnVuL2luc2VydF9hbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWFjYTRlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vaW5zZXJ0X2FsaXN0CkBAIC0wLDAgKzEsMjggQEAKK09QVElPTkFMLCBWRVJBTFRFVAorU1lOT1BTSVMKKyAgICAgICAgbWl4ZWQgKmluc2VydF9hbGlzdChtaXhlZCBrZXksIG1peGVkIGRhdGEsIC4uLiAsIG1peGVkICphbGlzdCk7CisgICAgICAgIGludCAgICBpbnNlcnRfYWxpc3QobWl4ZWQga2V5LCBtaXhlZCAqa2V5cyk7CisKK0JFU0NIUkVJQlVORworICAgICAxLiBGb3JtOiBFaW5mdWVnZW4gaW4gZWluZSBBbGlzdC4KKyAgICAgICAgRGVyIDxrZXk+IHVuZCBhbGxlIGZvZ2xlbmRlbiA8ZGF0YT4gQXJndW1lbnRlIHdlcmRlbiBpbiBkaWUgQWxpc3QKKyAgICAgICAgZWluZ2VmdWVndC4gV2VubiBiZXJlaXRzIGVpbiBFaW50cmFnIGZ1ZXIgPGtleT4gZXhpc3RpZXJ0LCB3ZXJkZW4KKyAgICAgICAgbnVyIGRpZSA8ZGF0YT4gRWludHJhZWdlIGVyc2V0enQuIE5hdHVlcmxpY2ggbXVzcyBkaWUgQW56YWhsIDxkYXRhPgorICAgICAgICBBcmd1bWVudGUgZGVyIEFuemFobCBkZXIgRGF0ZW5hcnJheXMgaW4gZGVyIEFsaXN0IGVudHNwcmVjaGVuLgorICAgICAgICBEYXMgUmVzdWx0YXQgZGllc2VyIE9wZXJhdGlvbiBpc3QgZGllIG5ldWUgQWxpc3QuCisKKyAgICAgMi4gRm9ybTogRWluZnVlZ2VuIGVpbmVzIEtleXMKKyAgICAgICAgRGVyIDxrZXk+IHdpcmQgaW4gZWluIChnZW9yZG5ldGVzKSBBcnJheSB2b24gPGtleXM+IGVpbmdlb3JkbmV0LAorICAgICAgICBzb2Rhc3MgbmFjaGZvbGdlbmRlcyBhc3NvYygpcyBzY2huZWxsIHN1Y2hlbiBrb2VubmVuLiBEYXMgUmVzdWx0YXQKKyAgICAgICAgaXN0IGRlciBJbmRleCwgdW50ZXIgZGVtIDxrZXk+IGVpbmdlZnVlZ3Qgb2RlciBiZXJlaXRzIGdlZnVuZGVuCisgICAgICAgIHd1cmRlLgorCitBTk1FUktVTkcKKyAgICAgICAgV2lyZCBtaXQgU3RyaW5nLUtleXMgZ2VhcmJlaXRldCwga2FubiBkZXIgSW5kZXggbmFjaCBkZW0gbmFlY2hzdGVuCisgICAgICAgIEF1ZnJ1ZiB2b24gaW5zZXJ0X2FsaXN0KCkgbmljaHQgbWVociBndWVsdGlnIHNlaW4uCisKKyAgICAgICAgS29tcGxleGl0YWV0OiBPKGxnKG4pICsgYSpuKSBmdWVyIG4gZ2xlaWNoIGRlciBBbnphaGwgZGVyIEtleXMgdW5kCisgICAgICAgIGVpbmUgc2VociBrbGVpbmUgS29uc3RhbnRlIHMgKGZ1ZXIgQmxvY2t2ZXJzY2hpZWJ1bmdlbikuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgYWxpc3RzKExQQyksIGFzc29jKEUpLCBvcmRlcl9hbGlzdChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vaW50ZXJhY3RpdmUgYi9kb2MvZWZ1bi9pbnRlcmFjdGl2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzI2ZjhhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vaW50ZXJhY3RpdmUKQEAgLTAsMCArMSwxMCBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IGludGVyYWN0aXZlKG9iamVjdCBvYmopOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCAxIHp1cnVlY2ssIHdlbm4gPG9iaj4gZWluIGludGVyYWt0aXZlciBVc2VyIChlaW4gU3BpZWxlcikKKyAgICAgICAgaXN0LiBXaXJkIDxvYmo+IHdlZ2dlbGFzc2VuLCBkYW5uIHdpcmQgdGhpc19vYmplY3QoKSB2ZXJ3ZW5kZXQuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgcXVlcnlfb25jZV9pbnRlcmFjdGl2ZShFKSwgcXVlcnlfaXBfbnVtYmVyKEUpLCBxdWVyeV9pcF9uYW1lKEUpLAorICAgICAgICBxdWVyeV9pZGxlKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9pbnRlcmFjdGl2ZV9pbmZvIGIvZG9jL2VmdW4vaW50ZXJhY3RpdmVfaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2MyODc3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vaW50ZXJhY3RpdmVfaW5mbwpAQCAtMCwwICsxLDEwNiBAQAorU1lOT1BTSVMKKyAgICAgICAgI2luY2x1ZGUgPGludGVyYWN0aXZlX2luZm8uaD4KKworICAgICAgICBtaXhlZCBpbnRlcmFjdGl2ZV9pbmZvKG9iamVjdCBvYiwgaW50IHdoYXQpCisKK0RFU0NSSVBUSU9OCisgICAgICAgIFJldHVybnMgc29tZSBpbnRlcm5hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW50ZXJhY3RpdmUgdXNlciA8b2I+LgorICAgICAgICBUaGUgYXJndW1lbnQgPHdoYXQ+IGRldGVybWluZXMgd2hpY2ggaW5mb3JtYXRpb24gaXMgcmV0dXJuZWQuCisKKyAgICAgICAgSXQgY2FuIGJlIGVpdGhlciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFzIGdpdmVuIHRvCisgICAgICAgIGNvbmZpZ3VyZV9pbnRlcmFjdGl2ZSgpIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKKworCisgICAgICAgIENvbm5lY3Rpb24gSW5mb3JtYXRpb246CisKKyAgICAgICAgPHdoYXQ+ID09IElJX0lQX05BTUU6CisgICAgICAgICAgVGhlIGhvc3RuYW1lIG9mIDxvYj4uIFRoZSBob3N0bmFtZSB3aWxsIGFzeW5jaHJvbm91c2x5CisgICAgICAgICAgbG9va2VkIHVwIGJ5IHRoZSBFUlEgZGFlbW9uIGFuZCBtaWdodCB0aGVyZWZvcmUgbm90IGJlCisgICAgICAgICAgYXZhaWxhYmxlIGF0IHRoZSB0aW1lIG9mIHRoZSBmaXJzdCBjb25uZWN0aW9uLgorICAgICAgICAgIElmIG5vIG5hbWUgaXMgYXZhaWxhYmxlIHRoZSBhZGRyZXNzIHdpbGwgYmUgcmV0dXJuZWQuCisKKyAgICAgICAgPHdoYXQ+ID09IElJX0lQX05VTUJFUjoKKyAgICAgICAgICBUaGUgSVAgYWRkcmVzcyBvZiA8b2I+IGdpdmVuIGFzIGEgc3RyaW5nLgorCisgICAgICAgIDx3aGF0PiA9PSBJSV9JUF9QT1JUOgorICAgICAgICAgIFRoZSBjbGllbnQgcG9ydCBudW1iZXIgb2YgPG9iPi4KKworICAgICAgICA8d2hhdD4gPT0gSUlfSVBfQUREUkVTUzoKKyAgICAgICAgICBUaGUgZnVsbCBzb2NrZXQgYWRkcmVzcyBzdHJ1Y3R1cmUgZ2l2ZW4gYXMgYW4gYXJyYXkgb2YgYnl0ZXMuCisKKyAgICAgICAgICBGb3IgSVB2NCAoc29ja2FkZHJfaW4pOgorICAgICAgICAgICAgICBhcnJheVswLi4gMV06IHNpbl9mYW1pbHkKKyAgICAgICAgICAgICAgYXJyYXlbMi4uIDNdOiBzaW5fcG9ydAorICAgICAgICAgICAgICBhcnJheVs0Li4gN106IHNpbl9hZGRyCisgICAgICAgICAgICAgIGFycmF5WzguLjE1XTogdW5kZWZpbmVkLgorCisgICAgICAgICAgRm9yIElQdjYgKHNvY2thZGRyX2luNik6CisgICAgICAgICAgICAgIGFycmF5WyAwLi4gMV06IHNpbjZfZmFtaWx5CisgICAgICAgICAgICAgIGFycmF5WyAyLi4gM106IHNpbjZfcG9ydAorICAgICAgICAgICAgICBhcnJheVsgNC4uIDddOiBzaW42X2Zsb3dpbmZvCisgICAgICAgICAgICAgIGFycmF5WyA4Li4yM106IHNpbjZfYWRkcgorICAgICAgICAgICAgICBhcnJheVsyNC4uMjddOiBzaW42X3Njb3BlX2lkCisKKyAgICAgICAgPHdoYXQ+ID09IElJX01VRF9QT1JUOgorICAgICAgICAgIFRoZSBzZXJ2ZXIgcG9ydCBudW1iZXIgdGhhdCA8b2I+IGNvbm5lY3RlZCB0by4KKworCisKKyAgICAgICAgVGVsbmV0IFJlbGF0ZWQgSW5mb3JtYXRpb246CisKKyAgICAgICAgPHdoYXQ+ID09IElJX01DQ1BfU1RBVFM6CisgICAgICAgICAgU3RhdGlzdGljcyBhYm91dCB0aGUgY3VycmVudCBjb21wcmVzc2lvbiBvZiA8b2I+IGdpdmVuCisgICAgICAgICAgYXMgYW4gYXJyYXkgKHsgdW5jb21wcmVzc2VkIGJ5dGVzLCBjb21wcmVzc2VkIGJ5dGVzIH0pLgorCisgICAgICAgICAgSWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IGNvbXByZXNzZWQsIDAgaXMgcmV0dXJuZWQuCisKKyAgICAgICAgICBBdmFpbGFibGUgb25seSBpZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIHdpdGggTUNDUCBlbmFibGVkOworICAgICAgICAgIF9fTUNDUF9fIGlzIGRlZmluZWQgaW4gdGhhdCBjYXNlLgorCisKKworICAgICAgICBJbnB1dCBIYW5kbGluZzoKKworICAgICAgICA8d2hhdD4gPT0gSUlfSU5QVVRfUEVORElORzoKKyAgICAgICAgICBJZiA8b2I+IGhhcyBhbiBpbnB1dF90bygpIHBlbmRpbmcsIHRoZSBvYmplY3QgdGhhdCBoYXMgY2FsbGVkCisgICAgICAgICAgdGhlIGlucHV0X3RvKCkgaXMgcmV0dXJuZWQsIGVsc2UgMC4KKworICAgICAgICA8d2hhdD4gPT0gSUlfRURJVElORzoKKyAgICAgICAgICBJZiA8b2I+IGlzIGN1cnJlbnRseSBlZGl0aW5nIHdpdGggZWQoKSBhbmQgZWQoKSB3YXMgY2FsbGVkIHdpdGgKKyAgICAgICAgICBhbiBleGl0IGZ1bmN0aW9uLCB0aGVuIHRoZSBvYmplY3QgdGhhdCBoYXMgY2FsbGVkIGVkKCkKKyAgICAgICAgICB3aWxsIGJlIHJldHVybmVkLCAwIG90aGVyd2lzZS4KKworICAgICAgICA8d2hhdD4gPT0gSUlfSURMRToKKyAgICAgICAgICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdGhhdCB0aGUgaW50ZXJhY3RpdmUgb2JqZWN0IDxvYj4gaGFzIGJlZW4KKyAgICAgICAgICBpZGxlLgorCisKKworICAgICAgICBPdXRwdXQgSGFuZGxpbmc6CisKKyAgICAgICAgPHdoYXQ+ID09IElJX1NOT09QX05FWFQ6CisgICAgICAgICAgUmV0dXJucyB0aGUgdXNlciB3aG8gaXMgY3VycmVudGx5IHNub29waW5nIDxvYj4uCisgICAgICAgICAgVGhlIGNhbGxpbmcgb2JqZWN0IG11c3QgYmUgcHJpdmlsZWdlZCBieSB0aGUgbWFzdGVyIG9iamVjdAorICAgICAgICAgIHZpYSB2YWxpZF9xdWVyeV9zbm9vcCgpLgorCisgICAgICAgIDx3aGF0PiA9PSBJSV9TTk9PUF9QUkVWOgorICAgICAgICAgIFJldHVybnMgdGhlIHZpY3RpbSB3aG8gaXMgY3VycmVudGx5IHNub29wZWQgYnkgPG9iPi4KKyAgICAgICAgICBUaGUgY2FsbGluZyBvYmplY3QgbXVzdCBiZSBwcml2aWxlZ2VkIGJ5IHRoZSBtYXN0ZXIgb2JqZWN0CisgICAgICAgICAgdmlhIHZhbGlkX3F1ZXJ5X3Nub29wKCkuCisKKyAgICAgICAgPHdoYXQ+ID09IElJX1NOT09QX0FMTDoKKyAgICAgICAgICBSZXR1cm5zIGFsbCBvYmplY3RzIHdobyBhcmUgY3VycmVudGx5IHNub29waW5nIDxvYj4uCisgICAgICAgICAgT25seSBvbmUgb2JqZWN0IGNhbiBzbm9vcCA8b2I+IGRpcmVjdGx5LCBidXQgdGhhdCB1c2VyIG1pZ2h0CisgICAgICAgICAgYmUgc25vb3BlZCwgdG9vLCBhbmQgc28gYnVpbGRpbmcgYSBjaGFpbiB0aGF0IGlzIHJldHVybmVkCisgICAgICAgICAgYXMgYW4gYXJyYXkuCisKKyAgICAgICAgICBUaGUgY2FsbGluZyBvYmplY3QgbXVzdCBiZSBwcml2aWxlZ2VkIGJ5IHRoZSBtYXN0ZXIgb2JqZWN0CisgICAgICAgICAgdmlhIHZhbGlkX3F1ZXJ5X3Nub29wKCkuCisKKworSElTVE9SWQorICAgICAgICBJbnRyb2R1Y2VkIGluIExETXVkIDMuNS4wLgorCitTRUUgQUxTTworICAgICAgICBjb25maWd1cmVfaW50ZXJhY3RpdmUoRSksIG9iamVjdF9pbmZvKEUpLCBkcml2ZXJfaW5mbyhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vaW50cCBiL2RvYy9lZnVuL2ludHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE2YTBmMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2ludHAKQEAgLTAsMCArMSwxMCBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IGludHAobWl4ZWQgYXJnKQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCAxLCB3ZW5uIGRhcyBBcmd1bWVudCBlaW5lIEdhbnp6YWhsIChJbnRlZ2VyKSBpc3QsIGFuc29uc3RlbgorICAgICAgICAwLgorCitTSUVIRSBBVUNICisgICAgICAgIGNsb3N1cmVwKEUpLCBmbG9hdHAoRSksIG1hcHBpbmdwKEUpLCBvYmplY3RwKEUpLCBwb2ludGVycChFKSwKKyAgICAgICAgcmVmZXJlbmNlcChFKSwgc3RyaW5ncChFKSwgc3ltYm9scChFKSwgY2xvbmVwKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9pbnZlcnRfYml0cyBiL2RvYy9lZnVuL2ludmVydF9iaXRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YmJlNmQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9pbnZlcnRfYml0cwpAQCAtMCwwICsxLDE3IEBACitTWU5PUFNJUworICAgICAgICBzdHJpbmcgaW52ZXJ0X2JpdHMoc3RyaW5nIHN0cik7CisKK0JFU0NIUkVJQlVORworICAgICAgICBJbnZlcnRpZXJ0IGRlbiBTdGF0dXMgYWxsZXIgQml0cyBpbSBCaXRzdHJpbmcgPHN0cj4gdW5kIGxpZWZlcnQgZGVuCisgICAgICAgIG5ldWVuIFN0cmluZyB6dXJ1ZWNrLiBEYWJlaSBibGVpYnQgZGllIExhZW5nZSB2b24gPHN0cj4sIGFsc28gZGllCisgICAgICAgIGdlc2FtdGUgQW56YWhsIEJpdHMsIGRpZSBnbGVpY2hlLgorCitCRUlTUElFTAorICAgICAgICBzdHJpbmcgczsKKyAgICAgICAgcyA9IHNldF9iaXQoIiIsIDMpOyBzID0gc2V0X2JpdChzLCA0KTsgcyA9IHNldF9iaXQocywgMTUpOworICAgICAgICAtLT4gcyBpc3QgbnVuICAiOCAoIgorICAgICAgICBpbnZlcnRfYml0cyhzKSAtLT4gbGllZmVydCAiR19XIgorCitTSUVIRSBBVUNICisgICAgICAgIHNldF9iaXQoRSksIGNsZWFyX2JpdChFKSwgdGVzdF9iaXQoRSksIGxhc3RfYml0KEUpLCBhbmRfYml0cyhFKSwKKyAgICAgICAgb3JfYml0cyhFKSwgeG9yX2JpdHMoRSksIGNvdW50X2JpdHMoRSksIGNvcHlfYml0cyhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vanNvbl9wYXJzZSBiL2RvYy9lZnVuL2pzb25fcGFyc2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmNGMzMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2pzb25fcGFyc2UKQEAgLTAsMCArMSw0NSBAQAorT1BUSU9OQUwKK0VYUEVSSU1FTlRBTAorU1lOT1BTSVMKKworICAgICAgICBtaXhlZCBqc29uX3BhcnNlKHN0cmluZyBqc29uc3RyaW5nKQorCitERVNDUklQVElPTgorICAgICAgICBUaGlzIGVmdW4gcGFyc2VzIHRoZSBKU09OIG9iamVjdCBlbmNvZGVkIGFzIHN0cmluZyBpbiA8anNvbnN0cj4gaW50byBhCisgICAgICAgIHN1aXRhYmxlIExQQyB0eXBlLgorICAgICAgICAKKyAgICAgICAgSGFuZGxlcyB0aGUgZm9sbG93aW5nIEpTT04gdHlwZXM6CisgICAgICAgIDxudWxsPiAgICAgICAgLT4gaW50ICgwKQorICAgICAgICA8Ym9vbGVhbj4gICAgIC0+IGludCAoMCBvciAxKQorICAgICAgICA8aW50IHwgaW50NjQ+IC0+IGludAorICAgICAgICA8ZG91YmxlPiAgICAgIC0+IGZsb2F0CisgICAgICAgIDxzdHJpbmc+ICAgICAgLT4gc3RyaW5nCisgICAgICAgIDxvYmplY3Q+ICAgICAgLT4gbWFwcGluZworICAgICAgICA8YXJyYXk+ICAgICAgIC0+IGFycmF5cworICAgICAgICBBbGwgb3RoZXIgSlNPTiB0eXBlcyBjYXVzZSBhIHJ1bnRpbWUgZXJyb3IuCisKKyAgICAgICAgVGhlIEpTT04gb2JqZWN0IGNhbiBuZXN0IG90aGVyIEpTT04gb2JqZWN0cy4KKyAgICAgICAgCisgICAgICAgIFRoZSBmdW5jdGlvbiBpcyBhdmFpbGFibGUgb25seSBpZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIHdpdGggSWtzZW1lbAorICAgICAgICBzdXBwb3J0LiBJbiB0aGF0IGNhc2UsIF9fSlNPTl9fIGlzIGRlZmluZWQuIAorIAorTElNSVRBVElPTlMKKyAgICAgICAgNjQgYml0IHdpZGUgaW50ZWdlcnMgY2FuIG9ubHkgYmUgcGFyc2VkIGxvc3NsZXNzbHkgb24gaG9zdHMgd2l0aAorICAgICAgICBhIDY0IGJpdCB3aWRlIExQQyBpbnQgYW5kIGpzb24tYyBsaWJyYXJ5IG5ld2VyIHRoYW4gMC45MC4KKworQlVHUworICAgICAgICBfX0ZMT0FUX01JTl9fIGlzIG5vdCBzZXJpYWxpemVkL3BhcnNlZCBsb3NzbGVzc2x5LgorCitFWEFNUExFUworICAgICAgICBqc29uX3BhcnNlKCI0MiIpICAgICAgICAgICAgICAtPiA0MgorICAgICAgICBqc29uX3BhcnNlKCI0Mi4wIikgICAgICAgICAgICAtPiA0Mi4wCisgICAgICAgIGpzb25fcGFyc2UoIlwiaGVsbG8gd29ybGRcXG5cIiIpICAgLT4gImhlbGxvIHdvcmxkXG4iCisgICAgICAgIGpzb25fcGFyc2UoIlsgMSwgMiwgMywgNCwgNSwgNiBdIikgLT4gKHsxLDIsMyw0LDUsNn0pCisgICAgICAgIGpzb25fcGFyc2UoInsgXCJ0ZXN0IDJcIjogNDIuMDAwMDAwLCBcInRlc3QgMVwiOiA0MiB9IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gKFsgInRlc3QgMSI6IDQyLCAidGVzdCAyIjogNDIuMCBdKQorICAgICAgICAKK0hJU1RPUlkKKyAgICAgICAgQWRkZWQgaW4gTERNdWQgMy41LjAKKworU0VFIEFMU08KKyAgICAgICAganNvbl9zZXJpYWxpemUoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2pzb25fc2VyaWFsaXplIGIvZG9jL2VmdW4vanNvbl9zZXJpYWxpemUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2OGRlYgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2pzb25fc2VyaWFsaXplCkBAIC0wLDAgKzEsNDUgQEAKK09QVElPTkFMCitFWFBFUklNRU5UQUwKK1NZTk9QU0lTCisKKyAgICAgICAgc3RyaW5nIGpzb25fc2VyaWFsaXplKG1peGVkIDxkYXRhPikKKworREVTQ1JJUFRJT04KKyAgICAgICAgVGhpcyBlZnVuIGNyZWF0ZXMgYSBKU09OIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBMUEMgdmFyaWFibGUgYW5kCisgICAgICAgIHJldHVybnMgdGhlIG9iamVjdCBlbmNvZGVkIGFzIGEgTFBDIHN0cmluZy4gRm9yIGNvbnRhaW5lciB0eXBlcyBsaWtlIAorICAgICAgICBhcnJheXMsIG1hcHBpbmdzIGFuZCBzdHJ1Y3RzLCB0aGlzIHdpbGwgYmUgZG9uZSByZWN1cnNpdmVseS4KKyAgICAgICAgCisgICAgICAgIE9ubHkgdGhlIGZvbGxvd2luZyBMUEMgdHlwZXMgYXJlIHNlcmlhbGl6ZWQuIEFsbCBvdGhlciBMUEMgdHlwZXMgY2F1c2UKKyAgICAgICAgYSAgcnVudGltZSBlcnJvci4KKyAgICAgICAgPGludD4gICAgICAgIC0+IEpTT04gaW50CisgICAgICAgIDxmbG9hdD4gICAgICAtPiBKU09OIGRvdWJsZQorICAgICAgICA8c3RyaW5nPiAgICAgLT4gSlNPTiBzdHJpbmcKKyAgICAgICAgPG1hcHBpbmc+ICAgIC0+IEpTT04gb2JqZWN0cworICAgICAgICA8YXJyYXk+ICAgICAgLT4gSlNPTiBhcnJheXMKKyAgICAgICAgPHN0cnVjdD4gICAgIC0+IEpTT04gb2JqZWN0cworICAgICAgICAKKyAgICAgICAgVGhlIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IGlmIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgd2l0aCBJa3NlbWVsCisgICAgICAgIHN1cHBvcnQuIEluIHRoYXQgY2FzZSwgX19KU09OX18gaXMgZGVmaW5lZC4gCisKK0xJTUlUQVRJT05TIAorICAgICAgICBPbmx5IG1hcHBpbmdzIHdpdGggYSB3aWR0aCBvZiAxIHZhbHVlIHBlciBrZXkgYW5kIG9ubHkgc3RyaW5nIGtleXMKKyAgICAgICAgY2FuIGJlIHNlcmlhbGl6ZWQuCisgICAgICAgIDY0IGJpdCB3aWRlIGludGVnZXJzIGNhbiBvbmx5IGJlIHNlcmlhbGl6ZWQgbG9zc2xlc3NseSBvbiBob3N0cyB3aXRoCisgICAgICAgIGEgNjQgYml0IHdpZGUgTFBDIGludCBhbmQganNvbi1jIGxpYnJhcnkgbmV3ZXIgdGhhbiAwLjkwLgorCitCVUdTCisgICAgICAgIF9fRkxPQVRfTUlOX18gaXMgbm90IHNlcmlhbGl6ZWQvcGFyc2VkIGxvc3NsZXNzbHkuCisKK0VYQU1QTEVTCisgICAgICAgIGpzb25fc2VyaWFsaXplKDQyKSAgICAgICAgICAgICAgLT4gIjQyIgorICAgICAgICBqc29uX3NlcmlhbGl6ZSg0Mi4wKSAgICAgICAgICAgIC0+ICI0Mi4wIgorICAgICAgICBqc29uX3NlcmlhbGl6ZSgiaGVsbG8gd29ybGRcbiIpIC0+ICJcImhlbGxvIHdvcmxkXFxuXCIiCisgICAgICAgIGpzb25fc2VyaWFsaXplKCh7MSwyLDMsNCw1LDZ9KSkgLT4gIlsgMSwgMiwgMywgNCwgNSwgNiBdIgorICAgICAgICBqc29uX3NlcmlhbGl6ZSgoWyAidGVzdCAxIjogNDIsICJ0ZXN0IDIiOiA0Mi4wIF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAieyBcInRlc3QgMlwiOiA0Mi4wMDAwMDAsIFwidGVzdCAxXCI6IDQyIH0iCisgICAgICAgIAorSElTVE9SWQorICAgICAgICBBZGRlZCBpbiBMRE11ZCAzLjUuMAorCitTRUUgQUxTTworICAgICAgICBqc29uX3BhcnNlKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9sYW1iZGEgYi9kb2MvZWZ1bi9sYW1iZGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1Njc5OAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2xhbWJkYQpAQCAtMCwwICsxLDI4IEBACitTWU5PUFNJUworICAgICAgICBjbG9zdXJlIGxhbWJkYShtaXhlZCAqYXJyLCBtaXhlZCk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBFcnpldWd0IGVpbmUgTGFtYmRhIENsb3N1cmUsIGVudHNwcmVjaGVuZCBkZW4gTGFtZGEgQ2xvc3VyZXMgaW4gTElTUC4KKyAgICAgICAgRGllIENsb3N1cmUgaXN0IGFuIGRhcyBPYmpla3QgZ2VidW5kZW4sIGRhcyBzaWUgZXJ6ZXVndCBoYXQsIHVuZCBrYW5uCisgICAgICAgIGRlc2hhbGIgVmVyd2Vpc2UgYXVmIGdsb2JhbGUgVmFyaWFibGVuIGVudGhhbHRlbi4KKworICAgICAgICBEYXMgZXJzdGUgQXJndW1lbnQgaXN0IGVpbiBBcnJheSwgZGFzIGRpZSBBcmd1bWVudGUgKFN5bWJvbGUpCisgICAgICAgIGJlc2NocmVpYnQsIGRpZSBkZXIgQ2xvc3VyZSBiZWkgaWhyZXIgQXVzd2VydHVuZyBkdXJjaCBmdW5jYWxsKCkKKyAgICAgICAgb2RlciBhcHBseSgpIHVlYmVyZ2ViZW4gd2VyZGVuLgorCisgICAgICAgIFZvbiBkZXIgVmVyd2VuZHVuZyB3aXJkIGF1cyBMZXNiYXJrZWl0cy0gdW5kIFdhcnR1bmdzZ3J1ZW5kZW4gZHJpbmdlbmQKKyAgICAgICAgYWJnZXJhdGVuLgorCitCRUlTUElFTAorICAgICAgICAvLyBMYW1iZGFzIHdlcmRlbiBnZXJuIGVpbmdlc2V0enQsIHVtIGtvbXBsZXhlcmUgRmlsdGVyIHp1IHNjaHJlaWJlbgorICAgICAgICAvLyBBbGxlcmRpbmdzIGthbm4gamVkZSBMYW1iZGEgZGFiZWkgYXVjaCBkdXJjaCBlaW5lIElubGluZS1DbG9zdXJlCisgICAgICAgIC8vIG9kZXIgZWluZSBMRnVuLUNsb3N1cmUgZXJzZXR6dCB3ZXJkZW4uCisgICAgICAgIGZpbHRlcih1c2VycygpLCAKKyAgICAgICAgICBsYW1iZGEoKHsneH0pLAorICAgICAgICAgICAgICAgICAoeyMnPT0sCisgICAgICAgICAgICAgICAgICAgKHsjJ2NhbGxfb3RoZXIsJ3gsIlF1ZXJ5UHJvcCIsUF9TRUNPTkR9KSwiZ2xvaW5zb24iCisgICAgICAgICAgICAgICAgfSkpKTsKKworU0lFSEUgQVVDSAorICAgICAgICBWZXJ3YW5kdDogdW5ib3VuZF9sYW1iZGEoRSksIGFwcGx5KEUpLCBmdW5jYWxsKEUpLCBiaW5kX2xhbWJkYShFKQorICAgICAgICBHZW5lcmVsbDogY2xvc3VyZXMtYWJzdHJhY3QoTFBDKSwgY2xvc3VyZXMoTFBDKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vbGFzdF9iaXQgYi9kb2MvZWZ1bi9sYXN0X2JpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGQyNDcxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vbGFzdF9iaXQKQEAgLTAsMCArMSwxOSBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IGxhc3RfYml0KHN0cmluZyBzdHIpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBkaWUgTnVtbWVyIGRlcyBsZXR6dGVuIGdlc2V0enRlbiBCaXRzIGltIEJpdHN0cmluZyA8c3RyPi4KKworICAgICAgICBKZWRlcyBaZWljaGVuIGVudGhhZWx0IDYgQml0cy4gQWxzbyBrYW5uIGluIGplZGVtIFplaWNoZW4gZWluIFdlcnQgdm9uCisgICAgICAgIDAgYmlzIDYzIGdlc3BlaWNoZXJ0IHdlcmRlbiAoMl42PTY0KS4gRGFzIGVyc3RlIFplaWNoZW4gaXN0IGRlcgorICAgICAgICBMZWVyc2NobGFnICIgIiBtaXQgZGVtIFdlcnQgMC4gRGFzIGVyc3RlIFplaWNoZW4gaW0gU3RyaW5nIGlzdCBqZW5lcworICAgICAgICBtaXQgZGVuIG5pZWRyaWdzdGVuIEJpdHMgKDAtNSkuCisKK0JFSVNQSUVMCisgICAgICAgIHN0cmluZyBzOworICAgICAgICBzID0gc2V0X2JpdCgiIiwgNCk7IHMgPSBzZXRfYml0KHMsIDIpOworICAgICAgICBsYXN0X2JpdChzKSAtLT4gbGllZmVydCA0CisKK1NJRUhFIEFVQ0gKKyAgICAgICAgc2V0X2JpdChFKSwgY2xlYXJfYml0KEUpLCBuZXh0X2JpdChFKSwgdGVzdF9iaXQoRSksIGNvdW50X2JpdHMoRSksCisgICAgICAgIGFuZF9iaXRzKEUpLCBvcl9iaXRzKEUpLCB4b3JfYml0cyhFKSwgaW52ZXJ0X2JpdHMoRSksIGNvcHlfYml0cyhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vbGFzdF9pbnN0cnVjdGlvbnMgYi9kb2MvZWZ1bi9sYXN0X2luc3RydWN0aW9ucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTQ0N2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vbGFzdF9pbnN0cnVjdGlvbnMKQEAgLTAsMCArMSwyOCBAQAorR0VTQ0hVRVRaVAorU1lOT1BTSVMKKyAgICAgICAgc3RyaW5nICpsYXN0X2luc3RydWN0aW9ucyhpbnQgbGVuZ2h0LCBpbnQgdmVyYm9zZSk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGVpbiBBcnJheSBtaXQgZGVyICJMYWVuZ2UiIGRlciB6dWxldHp0IGF1c2dlZnVlaHJ0ZW4KKyAgICAgICAgQW53ZWlzdW5nZW4uIFdlbm4gPHZlcmJvc2U+IHVuZ2xlaWNoIDAgaXN0IChzdGFuZGFyZG1hZXNzaWcgc28pLAorICAgICAgICB3ZXJkZW4gYXVjaCBJbmZvcyB6dXIgWmVpbGVubnVtbWVyIGFuZ2V6ZWlndC4gSmVkZXIgU3RyaW5nIGhhdAorICAgICAgICBmb2xnZW5kZSBGb3JtOgorCisgICAgICAgICAgICBPcGNvZGUtQWRyZXNzZTogT3Bjb2RlIE9wZXJhbmQgTW5lbW9uaWMgKFN0YXBlbHRpZWZlKSBaZWlsZW5udW1tZXIKKworICAgICAgICBEaWUgSW5mb3JtYXRpb24genVyIFN0YXBlbHRpZWZlIGJlc3RlaHQgYXVzIHp3ZWkgWmFobGVuIDxyZWw+OjxhYnM+LAorICAgICAgICB3b2JlaSA8cmVsPiBkZXIgcmVsYXRpdmUgU3RhcGVsdmVyYnJhdWNoIGRlciBGdW5rdGlvbiBpc3QsIDxhYnM+IGRlcgorICAgICAgICBhYnNvbHV0ZSBTdGFwZWx2ZXJicmF1Y2guCisKKyAgICAgICAgRGllIEluZm9ybWF0aW9uIHp1ciBaZWlsZW5udW1tZXIgd2lyZCBhbmdlZnVlZ3QsIHdlbm4gZGFzIEZsYWcgZ2VzZXR6dAorICAgICAgICBpc3QgdW5kIGVpbmUgbmV1ZSBaZWlsZSBpbSBRdWVsbGNvZGUgZXJyZWljaHQgd2lyZC4gRWJlbnNvIGVyemV1Z2VuCisgICAgICAgIEF1ZnJ1ZmUgendpc2NoZW4gT2JqZWt0ZW4gZWluZW4gRWludHJhZyBpbSBSZXN1bHRhdGFycmF5IChhbGxlcmRpbmdzCisgICAgICAgIG51ciwgd2VubiBkYXMgdmVyYm9zZS1GbGFnIGdlc2V0enQgaXN0KS4gRGllc2VyIEVpbnRyYWcgaGF0IGRpZSBGb3JtOgorCisgICAgICAgICAgICBPYmpla3RuYW1lIFByb2dyYW1tbmFtZSBaZWlsZW5udW1tZXIuCisKKyAgICAgICAgRXMgZ2lidCBlaW4gdm9ya29uZmlndXJpZXJ0ZXMgb2JlcmVzIExpbWl0LCB3aWUgdmllbGUgSW5zdHJ1a3Rpb25lbgorICAgICAgICB6dXJ1ZWNrdmVyZm9sZ3Qgd2VyZGVuIGtvZW5uZW4uCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgZGVidWdfbWVzc2FnZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vbGltaXRlZCBiL2RvYy9lZnVuL2xpbWl0ZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2NzgxMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2xpbWl0ZWQKQEAgLTAsMCArMSw2NCBAQAorVk9STEFFVUZJRywgR0VTQ0hVRVRaVAorU1lOT1BTSVMKKyAgICAgICAgI2luY2x1ZGUgPHN5cy9ydGxpbWl0cy5oPgorCisgICAgICAgIG1peGVkIGxpbWl0ZWQoY2xvc3VyZSBmdW4pOworICAgICAgICBtaXhlZCBsaW1pdGVkKGNsb3N1cmUgZnVuLCBpbnQgdGFnLCBpbnQgdmFsdWUsIC4uLik7CisgICAgICAgIG1peGVkIGxpbWl0ZWQoY2xvc3VyZSBmdW4sIGludCAqbGltaXRzIFssIG1peGVkICphcmdzXSk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBsaW1pdGVkKCkgcnVmdCBkaWUgRnVua3Rpb24gPGZ1bj4gbWl0IGRlbiBiZXplaWNobmV0ZW4gQXJndW1lbnRlbgorICAgICAgICA8YXJncz4gYXVmIHVuZCBmdWVocnQgc2llIG1pdCBkZW4gZ2VnZWJlbmVuIExhdWZ6ZWl0bGltaXRlbiBhdXMuCisKKyAgICAgICAgQmVpbSBFbmRlIGRlciBGdW5rdGlvbiA8ZnVuPiB3ZXJkZW4gZGllIG1vbWVudGFuIGFrdGl2ZW4KKyAgICAgICAgTGF1ZnplaXRsaW1pdGVuIHdpZWRlcmhlcmdlc3RlbGx0LiBsaW1pdGVkKCkgbGllZmVydCBkZW4KKyAgICAgICAgUnVlY2tnYWJld2VydCBkZXIgQ2xvc3VyZSA8ZnVuPiB6dXJ1ZWNrLgorCisgICAgICAgIERpZSBMYXVmemVpdGxpbWl0ZW4ga29lbm5lbiBpbiB6d2VpIEZvcm1lbiBhbmdlZ2ViZW4gd2VyZGVuOiBhbHMKKyAgICAgICAgQXJyYXkgKHdpZSBlcyB2b24gcXVlcnlfbGltaXRzKCkgZ2VsaWVmZXJ0IHdpcmQpIG9kZXIgYWxzIExpc3RlIHZvbgorICAgICAgICBXZXJ0ZW4gbWl0IFRhZ3MuIFdpcmQgbGltaXRlZCgpIG9obmUgQW5nYWJlIHZvbiBMaW1pdHMgYXVmZ2VydWZlbiwKKyAgICAgICAgZ2VsdGVuIGRpZSBMYXVmemVpdGxpbWl0ZW4gYWxzICd1bmxpbWl0aWVydCcuCisKKyAgICAgICAgRGllIExpbWl0ZW5laW5zdGVsbHVuZyBrZW5udCBkcmVpIHNwZXppZWxsZSBXZXJ0ZSBhdXMgPHJ0bGltaXRzLmg+OgorICAgICAgICAgICAgTElNSVRfVU5MSU1JVEVEOiAgICBlcyBnaWJ0IGtlaW4gTGltaXQKKyAgICAgICAgICAgIExJTUlUX0tFRVA6ICAgICAgICAgZGFzIHp1bGV0enQgZ2VzZXR6dGUgTGltaXQgd2lyZCBiZWliZWhhbHRlbgorICAgICAgICAgICAgTElNSVRfREVGQVVMVDogICAgICBkaWUgJ2dsb2JhbGVuJyBMaW1pdGVuIHdlcmRlbiB2ZXJ3ZW5kZXQKKworICAgICAgICBGdWVyIExJTUlUX0NPU1QsIGRpZSBTcGV6aWFsd2VydGUgaGFiZW4gZGllc2UgQmVkZXV0dW5nOgorICAgICAgICAgICAgTElNSVRfVU5MSU1JVEVEOiBkaWUgQXVzZnVlaHJ1bmcga29zdGVuIGxlZGlnbGljaCBlaW5lbiBUaWNrCisgICAgICAgICAgICBMSU1JVF9LRUVQOiAgICAgIExJTUlUX0NPU1Qgd2lyZCBhdWYgMCBnZXNldHp0CisgICAgICAgICAgICBMSU1JVF9ERUZBVUxUOiAgIExJTUlUX0NPU1Qgd2lyZCBhdWYgLTEwMCBnZXNldHp0CisKKyAgICAgICAgbGltaXRlZCgpIGVyemV1Z3QgZWluZSBTY2h1dHp2ZXJsZXR6dW5nICgibGltaXRlZCIsIGN1cnJlbnRfb2JqZWN0LAorICAgICAgICBmdW4sIGxpbWl0cy1hcnJheSkuCisKK0JFTUVSS1VOR0VOOgorICAgICAgICBEaWVzZSBGdW5rdGlvbiBrYW5uIGJlaSB1bnMgbXVkbGlid2VpdCBnZW51dHp0IHdlcmRlbi4gQWxsZXJkaW5ncyB3aXJkCisgICAgICAgIG51ciBkaWUgX1JlZHVrdGlvbl8gdm9uIExJTUlUX0VWQUwgenVnZWxhc3NlbiwgYWxsZSBhbmRlcmVuIExpbWl0cworICAgICAgICBkdWVyZmVuIF9uaWNodF8gdmVyYWVuZGVydCB3ZXJkZW4uIEhpZXJiZWkgaXN0IHp1IGJlYWNodGVuLCBkYXNzIGRhcworICAgICAgICBMaW1pdCBmdWVyIExJTUlUX0VWQUwgdW0gbWluLiAxMDAwIFRpY2tzIHVudGVyIGRlbiBub2NoIHZlcmZ1ZWdiYXJlbgorICAgICAgICBUaWNrcyBsaWVnZW4gbXVzcyAoZ2V0X2V2YWxfY29zdCgpKS4KKyAgICAgICAgRnVlciBMSU1JVF9DT1NUIHNpbmQgbnVyIDAgdW5kIC0xMDAgenVnZWxhc3Nlbi4KKworQkVJU1BJRUxFCisgICAgICAgIGxpbWl0ZWQoIydmdW5jdGlvbikKKyAgICAgICAgLS0+IGZ1ZWhydCBkaWUgRnVua3Rpb24gb2huZSBMaW1pdGVuIGF1cy4KKworICAgICAgICBsaW1pdGVkKCMnZnVuY3Rpb24sICh7IDIwMDAwMCB9KSwgImZvbyIpCisgICAgICAgIC0tPiBmdWVocnQgZGllIEZ1bmt0aW9uIG1pdCBlaW5lbSBFdmFsLUtvc3RlbiBMaW1pdCB2b24gMjAwMDAwIFRpY2tzCisgICAgICAgICAgICBhdXMuIERpZSBGdW5rdGlvbiB3aXJkIGFscyAnZnVuY3Rpb24oImZvbyIpJyBhdWZnZXJ1ZmVuLgorCisgICAgICAgIGxpbWl0ZWQobGFtYmRhKDAsICh7IydmdW5jdGlvbiwgImZvbyJ9KSksIExJTUlUX0VWQUwsIDIwMDAwMCkKKyAgICAgICAgLS0+IGZ1ZWhydCBkaWUgRnVua3Rpb24gbWl0IGVpbmVtIEV2YWwtS29zdGVuIExpbWl0IHZvbiAyMDAwMDAgVGlja3MKKyAgICAgICAgICAgIGF1cy4gRGllIEZ1bmt0aW9uIHdpcmQgYWxzICdmdW5jdGlvbigiZm9vIiknIGF1ZmdlcnVmZW4uCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi43LgorICAgICAgICBMRE11ZCAzLjMuNTYzIGZ1ZWhydGUgTElNSVRfQ09TVCBlaW4uCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgcXVlcnlfbGltaXRzKEUpLCBzZXRfbGltaXRzKEUpCisgICAgICAgIGdldF9ldmFsX2Nvc3QoRSkKKworMTYuMDUuMjAwNywgWmVzc3RyYQorCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9saXZpbmcgYi9kb2MvZWZ1bi9saXZpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYwYTg4NgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2xpdmluZwpAQCAtMCwwICsxLDEzIEBACitTWU5PUFNJUworICAgICAgICBpbnQgbGl2aW5nKG9iamVjdCBvYik7CisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IDEgenVydWVjaywgd2VubiA8b2I+IGVpbiBsZWJlbmRpZ2VzIE9iamVrdCAobGl2aW5nKSBpc3QuCisgICAgICAgIDxvYj4gaXN0IGxpdmluZywgd2VubiBlbmFibGVfY29tbWFuZHMoKSBhdXMgPG9iaj4gYXVmZ2VydWZlbiB3dXJkZS4KKyAgICAgICAgPG9iPiBrYW5uIGF1Y2ggMCBzZWluLgorCitCRUlTUElFTAorICAgICAgICBsaXZpbmcodGhpc19wbGF5ZXIoKSk7ICAtPiBEaWVzIGxpZWZlcnQgKGhvZmZlbnRsaWNoKSAxIHp1ZXJ1ZWNrLgorCitTSUVIRSBBVUNICisgICAgICAgIGVuYWJsZV9jb21tYW5kcyhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vbG9hZF9uYW1lIGIvZG9jL2VmdW4vbG9hZF9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNmMxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9sb2FkX25hbWUKQEAgLTAsMCArMSw0NyBAQAorU1lOT1BTSVMKKyAgICAgICAgc3RyaW5nIGxvYWRfbmFtZSgpCisgICAgICAgIHN0cmluZyBsb2FkX25hbWUob2JqZWN0fHN0cmluZyBvYmopCisKK0JFU0NIUkVJQlVORworICAgICAgICBEaWUgRnVua3Rpb24gbGllZmVydCBkZW4gTmFtZW4sIG1pdCBkZW0gPG9iaj4gZ2VsYWRlbiB3dXJkZS4gPG9iaj4KKyAgICAgICAga2FubiBkaXJla3QgYWxzIE9iamVrdCBvZGVyIGFscyBTdHJpbmcgbWl0IHNlaW5lbSBOYW1lbiBhbmdlZ2ViZW4KKyAgICAgICAgd2VyZGVuLgorCisgICAgICAgIFdlbm4gPG9iaj4gZWluIENsb24gaXN0LCBsaWVmZXJ0IGRpZSBGdW5rdGlvbiBkZW4gTmFtZW4gZGVzIEJsdWVwcmludHMuCisgICAgICAgIFdlbm4gPG9iaj4gZWluIEJsdWVwcmludCBpc3QsIGxpZWZlcnQgZGllIEZ1bmt0aW9uIGRlbiBOYW1lbiBkZXMgRmlsZXMsCisgICAgICAgIGF1cyBkZW0gZGVyIEJsdWVwcmludCBrb21waWxpZXJ0IHd1cmRlLgorCisgICAgICAgIFdlbm4gPG9iaj4gdWViZXIgc2VpbmVuIE5hbWVuIGFuZ2VnZWJlbiB3dXJkZSwgYWJlciBuaWNodCAvIG5pY2h0IG1laHIKKyAgICAgICAgZXhpc3RpZXJ0LCBnZW5lcmllcnQgZGllIEZ1bmt0aW9uIGRlbiBOYW1lbiwgd2llIGVyIHNlaW4gbXVlc3N0ZSB1bmQKKyAgICAgICAgZ2lidCBkaWVzZW4genVydWVjay4gV2VubiBkZXIgYW5nZWdlYmVuZSBOYW1lIHVuZ3VlbHRpZyBpc3QsIGxpZWZlcnQKKyAgICAgICAgZGllIEZ1bmt0aW9uIDAuCisKKyAgICAgICAgQWxzIFNwZXppYWxmYWxsIGxpZWZlcnQgZGllIEZ1bmt0aW9uIDAsIHdlbm4gPG9iPiAwIGlzdC4KKworICAgICAgICBGdWVyIHZpcnR1ZWxsZSBPYmpla3RlIGxpZWZlcnQgbG9hZF9uYW1lKCkgZGVuIG9yaWdpbmFsZW4gTGFkZW5hbWVuCisgICAgICAgIGRlcyBPYmpla3RzLCB3ZWxjaGVzIGRlciB2aXJ0dWVsbGUgQ29tcGlsZXIgZXJ6ZXVndGUuCisKKyAgICAgICAgV2lyZCA8b2JqPiBuaWNodCBhbmdlZ2ViZW4sIHdpcmQgZGVyIE5hbWUgZnVlciBkYXMgbW9tZW50YW4gZ3VlbHRpZ2UKKyAgICAgICAgT2JqZWt0IGFuZ2VnZWJlbi4KKworICAgICAgICBJbSBHZWdlbnNhdHogenVtIG9iamVjdF9uYW1lKCkga2FubiBkZXIgbG9hZF9uYW1lKCkgbmljaHQgZHVyY2gKKyAgICAgICAgcmVuYW1lX29iamVjdCgpIG9kZXIgZWluZW4gVkMgdmVyYWVuZGVydCB3ZXJkZW4uIElzdCBlaW4gPG9iaj4gamVkb2NoCisgICAgICAgIGVpbmVtIHJlcGxhY2VfcHJvZ3JhbSgpIHVudGVyd29yZmVuLCBzcGllZ2VsdCBkZXIgbG9hZF9uYW1lKCkgbmljaHQKKyAgICAgICAgbWVociBkYXMgZWZmZWt0aXZlIFZlcmhhbHRlbiBkZXMgT2JqZWt0cyB3aWRlci4KKworQkVJU1BJRUxFCisgICAgICAgIG9iamVjdCBvOworICAgICAgICBvID0gY2xvbmVfb2JqZWN0KCIvc3RkL3RoaW5nIik7CisgICAgICAgIHdyaXRlKGxvYWRfbmFtZShvKSk7ICAtLT4gbGllZmVydCAiL3N0ZC90aGluZyIgaW4gIUNvbXBhdCBNb2R1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZCAic3RkL3RoaW5nIiAgaW0gQ29tcGF0IE1vZHVzCisgICAgICAgIHdyaXRlKGxvYWRfbmFtZSgiL3N0ZC90aGluZyIpKTsgIC0tPiBnbGVpY2ggd2llIG9iZW4KKyAgICAgICAgd3JpdGUobG9hZF9uYW1lKCIvc3RkL3RoaW5nIzRuNSIpKTsgLS0+IGxpZWZlcnQgMAorCitHRVNDSElDSFRFCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi42LgorICAgICAgICBTdHJpbmdzIGFscyBBcmd1bWVudGUgc2luZCBtb2VnbGljaCBzZWl0IDMuMi44LgorICAgICAgICAwIGlzdCB6dWxhZXNzaWcgc2VpdCAzLjIuOS4KKworU0lFSEUgQVVDSAorICAgICAgICBjbG9uZV9vYmplY3QoRSksIGNsb25lcChFKSwgb2JqZWN0X25hbWUoRSksIGxvYWRfb2JqZWN0KEUpLAorICAgICAgICByZXBsYWNlX3Byb2dyYW0oRSksIHByb2dyYW1fbmFtZShFKSwgcHJlc2VudF9jbG9uZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vbG9hZF9vYmplY3QgYi9kb2MvZWZ1bi9sb2FkX29iamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDdkMGI4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vbG9hZF9vYmplY3QKQEAgLTAsMCArMSwyMyBAQAorU1lOT1BTSVMKKyAgICAgICAgb2JqZWN0IGxvYWRfb2JqZWN0KHN0cmluZyBuYW1lKQorCitERVNDUklQVElPTgorICAgICAgICBMb2FkIHRoZSBvYmplY3QgZnJvbSB0aGUgZmlsZSA8bmFtZT4gYW5kIHJldHVybiBpdC4gSWYgdGhlCisgICAgICAgIG9iamVjdCBhbHJlYWR5IGV4aXN0cywganVzdCByZXR1cm4gaXQuCisKKyAgICAgICAgVGhpcyBlZnVuIGNhbiBiZSB1c2VkIG9ubHkgdG8gbG9hZCBibHVlcHJpbnRzIC0gZm9yIGNsb25lcywgdXNlCisgICAgICAgIHRoZSBlZnVuIGNsb25lX29iamVjdCgpLgorCisgICAgICAgIElmIHN0cmljdCBldWlkcyBhcmUgZW5mb3JjZWQsIHRoZSBjbG9uaW5nIG9iamVjdCBtdXN0IGhhdmUKKyAgICAgICAgYSBub24temVybyBldWlkLgorCitFWEFNUExFCisgICAgICAgIC8vIFVwZGF0ZSBhbmQgcmVsb2FkIHRoZSBzdGFuZGFyZCBwbGF5ZXIgb2JqZWN0CisgICAgICAgIGRlc3RydWN0KGZpbmRfb2JqZWN0KCIvc3RkL3BsYXllciIpKTsKKyAgICAgICAgbG9hZF9vYmplY3QoIi9zdGQvcGxheWVyIik7CisKK0hJU1RPUlkKKyAgICAgICAgSW50cm9kdWNlZCBpbiBMRE11ZCAzLjIuNi4KKworU0VFIEFMU08KKyAgICAgICAgY2xvbmVfb2JqZWN0KEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9sb2NhbHRpbWUgYi9kb2MvZWZ1bi9sb2NhbHRpbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUyMmRjNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2xvY2FsdGltZQpAQCAtMCwwICsxLDM5IEBACitTWU5PUFNJUworICAgICAgICAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworICAgICAgICBpbnQgKmxvY2FsdGltZShpbnQgY2xvY2spOworICAgICAgICBpbnQgKmxvY2FsdGltZShpbnQgKnVjbG9jayk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBJbnRlcnByZXRpZXJ0IGRhcyBBcmd1bWVudCA8Y2xvY2s+IGFscyBBbnphaGwgU2VrdW5kZW4gc2VpdCBkZW0KKyAgICAgICAgMDEuIEphbnVhciAxOTcwLCAwMDowMDowMCwgdW5kIGdpYnQgZGllIFplaXQgaW4gTG9rYWx6ZWl0IGluIGVpbmVyCisgICAgICAgIHNhdWJlcmVuIFN0cnVrdHVyIHp1cnVlY2suIFdpcmQgPGNsb2NrPiBuaWNodCBhbmdlZ2ViZW4sIHdpcmQKKyAgICAgICAgc3RhbmRhcmRtYWVzc2lnIHRpbWUoKSB2ZXJ3ZW5kZXQuCisKKyAgICAgICAgQWx0ZXJuYXRpdiBrYW5uIGF1Y2ggZWluIEFycmF5IHZvbiB6d2VpIFphaGxlbiBhbHMgQXJndW1lbnQgYW5nZWdlYmVuCisgICAgICAgIHdlcmRlbi4gRGFzIGVyc3RlIEVsZW1lbnQgd2lyZCBpbnRlcnByZXRpZXJ0IHdpZSA8Y2xvY2s+LCBkYXMgendlaXRlCisgICAgICAgIEFyZ3VtZW50IGVudGhhZWx0IGRpZSB2ZXJnYW5nZW5lbiBNaWtyb3Nla3VuZGVuIGluIGRpZXNlciBTZWt1bmRlIHVuZAorICAgICAgICB3aXJkIGlnbm9yaWVydC4KKworICAgICAgICBEYXMgUmVzdWx0YXQgaXN0IGVpbiBBcnJheSBtaXQgZm9sZ2VuZGVuIEVsZW1lbnRlbjoKKworICAgICAgICAgICAgaW50IFRNX1NFQyAgICAoMCk6ICBTZWt1bmRlIGluIGRlciBNaW51dGUgKDAuLjU5KQorICAgICAgICAgICAgaW50IFRNX01JTiAgICAoMSk6ICBNaW51dGUgaW4gZGVyIFN0dW5kZSAoMC4uNTkpCisgICAgICAgICAgICBpbnQgVE1fSE9VUiAgICgyKTogIFN0dW5kZSBkZXMgVGFnZXMgKDAuLjIzKQorICAgICAgICAgICAgaW50IFRNX01EQVkgICAoMyk6ICBUYWcgaW0gTW9uYXQgKDEuLjMxKQorICAgICAgICAgICAgaW50IFRNX01PTiAgICAoNCk6ICBNb25hdCBkZXMgSmFocmVzICgwLi4xMSkKKyAgICAgICAgICAgIGludCBUTV9ZRUFSICAgKDUpOiAgSmFociAoei5CLiAyMDAxKQorICAgICAgICAgICAgaW50IFRNX1dEQVkgICAoNik6ICBXb2NoZW50YWcgKDAuLjYsIFNvbm50YWcgPSAwKQorICAgICAgICAgICAgaW50IFRNX1lEQVkgICAoNyk6ICBUYWcgaW0gSmFociAoMC4uMzY1KQorICAgICAgICAgICAgaW56IFRNX0lTRFNUICAoOCk6ICBUUlVFOiBEYXlsaWdodCBTYXZpbmcgVGltZQorCitCRUlTUElFTAorICAgICAgICBwcmludGYoIlRvZGF5IGlzICVzXG4iLCAoeyAiU29ubnRhZyIsICJNb250YWciLCAiRGllbnN0YWciLAorICAgICAgICAgICAgIk1pdHR3b2NoIiwgIkRvbm5lcnN0YWciLCAiRnJlaXRhZyIsICJTYW1zdGFnIn0pCisgICAgICAgICAgICBbbG9jYWx0aW1lKClbVE1fV0RBWV1dKTsKKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjkKKworU0lFSEUgQVVDSAorICAgIGN0aW1lKEUpLCBnbXRpbWUoRSksIHRpbWUoRSksIHV0aW1lKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9sb2cgYi9kb2MvZWZ1bi9sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyYWJmZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL2xvZwpAQCAtMCwwICsxLDggQEAKK1NZTk9QU0lTCisgICAgICAgIGZsb2F0IGxvZyhpbnR8ZmxvYXQgYXJnKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZGVuIG5hdHVlcmxpY2hlbiBMb2dhcml0aG11cyB2b24gPGFyZz4uCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgZXhwKEUpLCBwb3coRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL2xvd2VyX2Nhc2UgYi9kb2MvZWZ1bi9sb3dlcl9jYXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MDFlMjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9sb3dlcl9jYXNlCkBAIC0wLDAgKzEsMTIgQEAKK1NZTk9QU0lTCisgICAgICAgIHN0cmluZyBsb3dlcl9jYXNlKHN0cmluZyBzdHIpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgS29udmVydGllcnQgYWxsZSBaZWljaGVuIGluIDxzdHI+IGluIEtsZWluYnVjaHN0YWJlbiB1bmQgbGllZmVydCBkZW4KKyAgICAgICAgbmV1ZW4gU3RyaW5nLgorCitCRUlTUElFTAorICAgICAgICBsb3dlcl9jYXNlKCJIYWxsbyBXZUxUISIpIC0+ICJoYWxsbyB3ZWx0ISIKKworU0lFSEUgQVVDSAorICAgICAgICBjYXBpdGFsaXplKEUpLCB1cHBlcl9jYXNlKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9tX2FkZCBiL2RvYy9lZnVuL21fYWRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNGY0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9tX2FkZApAQCAtMCwwICsxLDI5IEBACitTWU5PUFNJUworICAgICAgICBtYXBwaW5nIG1fYWRkKG1hcHBpbmcgbWFwLCBtaXhlZCBrZXksIFttaXhlZCBkYXRhLCAuLi5dKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEZ1ZWd0IGVpbmVuIG5ldWVuIEVpbnRyYWcgbWl0IEluZGV4IDxrZXk+IHp1bSBNYXBwaW5nIDxtYXA+IGhpbnp1CisgICAgICAgIG9kZXIgZXJzZXR6dCBkaWVzZW4uIERhcyB2ZXJhZW5kZXJ0ZSBNYXBwaW5nIHdpcmQgYWxzIEVyZ2VibmlzCisgICAgICAgIHp1cnVlY2sgZ2VsaWVmZXJ0LiBXZXJ0ZSwgZGllIG5pY2h0IHp1Z2VvcmRuZXQgd2VyZGVuIGtvZW5uZW4sIHdlcmRlbgorICAgICAgICBhbHMgMCBpbnRlcnByZXRpZXJ0LCBpcnJlbGV2YW50ZSBBcmd1bWVudGUgd2VyZGVuIGlnbm9yaWVydC4KKworQkVJU1BJRUxFCisgICAgICAgIG1hcHBpbmcgbTsKKyAgICAgICAgbSA9IChbICJmb28iIF0pOworICAgICAgICBtX2FkZChtLCAiYmFyIiwgMSkgLS0+IChbICJmb28iLCAiYmFyIiBdKQorCisgICAgICAgIG0gPSAoWyAiZm9vIjoxIF0pOworICAgICAgICBtX2FkZChtLCAiYmFyIiwgMSkgLS0+IChbICJmb28iOjEsICJiYXIiOjEgXSkKKworICAgICAgICBtID0gKFsgImZvbyI6MTsyIF0pOworICAgICAgICBtX2FkZChtLCAiYmFyIiwgMSkgLS0+IChbICJmb28iOjE7MiwgImJhciI6MTswIF0pCisKKyAgICAgICAgYXBwbHkoIydtX2FkZCwgbSwgImJheiIsICh7IDQsIDUgfSkpCisgICAgICAgIC0tPiAoWyAiZm9vIjoxOzIsICJiYXIiOjE7MCwgImJheiI6NDs1IF0pCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi45LgorCitTSUVIRSBBVUNICisgICAgICAgIG1hcHBpbmdwKEUpLCBta21hcHBpbmcoRSksIG1fZGVsZXRlKEUpLCBtX2VudHJ5KEUpLCBtX2luZGljZXMoRSksCisgICAgICAgIG1fdmFsdWVzKEUpLCBzaXplb2YoRSksIHdpZHRob2YoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL21fYWxsb2NhdGUgYi9kb2MvZWZ1bi9tX2FsbG9jYXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NWYzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9tX2FsbG9jYXRlCkBAIC0wLDAgKzEsNDYgQEAKK1NZTk9QU0lTCisgICAgICAgIG1hcHBpbmcgbV9hbGxvY2F0ZShpbnQgc2l6ZSkKKyAgICAgICAgbWFwcGluZyBtX2FsbG9jYXRlKGludCBzaXplLCBpbnQgd2lkdGgpCisKK0JFU0NIUkVJQlVORworICAgICAgICBEaWUgRnVua3Rpb24gcmVzZXJ2aWVydCBTcGVpY2hlciBmdWVyIGVpbiBNYXBwaW5nLiA8c2l6ZT4gaXN0IGRpZQorICAgICAgICBBbnphaGwgRWludHJhZWdlIChkLmguIGRpZSBBbnphaGwgS2V5cyksIDx3aWR0aD4gaXN0IGRpZSBBbnphaGwKKyAgICAgICAgRGF0ZW5laW50cmFlZ2UgcHJvIEtleS4gV2lyZCA8d2lkdGg+IG5pY2h0IGFuZ2VnZWJlbiwgd2VyZGVuIEtleXMKKyAgICAgICAgbWl0IGVpbmVtIERhdGVuZWxlbWVudCBlcnpldWd0LgorCisgICAgICAgIERpZSBGdW5rdGlvbiBpc3QgbnVyIHNpbm52b2xsLCB3ZW5uIG1hbiBlaW4gTWFwcGluZyBlcnpldWd0LCBkZXNzZW4KKyAgICAgICAgdW5nZWZhZWhyZSBHcm9lc3NlIHZvbiB2b3JuaGVyZWluIGJla2FubnQgaXN0LCB1bSBzbyBkZW4gT3ZlcmhlYWQKKyAgICAgICAgdm9uIHdpZWRlcmhvbHRlbiBTcGVpY2hlcmFsbG9rYXRpb24genUgbWluaW1pZXJlbi4gV2VubiBuaWNodCBhbGxlCisgICAgICAgIGFsbG96aWVydGVuIERhdGVuZWxlbWVudGUgbWl0IERhdGVuIGJlc3R1ZWNrdCB3ZXJkZW4sIHdlcmRlbiBkaWUKKyAgICAgICAgVWViZXJibGVpYnNlbCBlaW5pZ2UgWmVpdCBzcGFldGVyIGJlaSBHZWxlZ2VuaGVpdCB3aWVkZXIgZnJlaWdlZ2ViZW4KKyAgICAgICAgKHMuIEJlbWVya3VuZ2VuKS4KKyAgICAgICAgbV9hbGxvY2F0ZSgpIGlzdCBhdWNoIG51ZXR6bGljaCwgd2VubiBlaW4gTWFwcGluZyBiZXN0aW1tdGVyIEJyZWl0ZQorICAgICAgICBlcnpldWd0IHdlcmRlbiBzb2xsLCBvaG5lIGJlcmVpdHMgZGllIERhdGVuIHp1IGRlbiBLZXlzIGJlcmVpdCB6dQorICAgICAgICBzdGVsbGVuLgorCisgICAgICAgIFdlbm4gYmxvc3MgZWluIGxlZXJlcyBNYXBwaW5nIGJlc3RpbW10ZXIgQnJlaXRlIGVyemV1Z3Qgd2VyZGVuIHNvbGwsCisgICAgICAgIHNvIGthbm4gZm9sZ2VuZGUgTm90YXRpb24gdmVyd2VuZGV0IHdlcmRlbjoKKworICAgICAgICAoWyBdKSA6IGVyemV1Z3QgZWluIGxlZXJlcyBNYXBwaW5nIG1pdCBCcmVpdGUgMS4KKyAgICAgICAgKFs6PHdpZHRoPl0pIDogZXJ6ZXVndCBlaW4gbGVlcmVzIE1hcHBpbmcgZGVyIEJyZWl0ZSA8d2lkdGg+LAorICAgICAgICAgICAgd29iZWkgPHdpZHRoPiBlaW5lIGJlbGllYmlnZSBBbndlaXN1bmcgc2VpbiBrYW5uLCBkaWUgZWluZQorICAgICAgICAgICAgSW50ZWdlcnphaGwgenVydWVjayBsaWVmZXJ0LiBUYXRzYWVjaGxpY2ggd2lyZCBkaWVzZSBOb3RhdGlvbgorICAgICAgICAgICAgYWxzICdtX2FsbG9jYXRlKDAsIDx3aWR0aD4pJyBrb21waWxpZXJ0LgorCitCRUlTUElFTEUKKyAgICAgICAgbV9hbGxvY2F0ZSgzLDcpIC0+IGVyemV1Z3QgZWluIE1hcHBpbmcgbWl0IDcgV2VydGVuIHBybyBLZXkgdW5kIFBsYXR6CisgICAgICAgICAgIGZ1ZXIgMyBFaW50cmFlZ2UuCisgICAgICAgKFs6MiozXSkgLT4gZW50c3ByaWNodCBtX2FsbG9jYXRlKDAsNikuCisKK0JFTUVSS1VOR0VOCisgICAgICAgIFVuZ2VudXR6ZXIgU3BlaWNoZXIgZGVzIGFsbG96aWVydGVuIE1hcHBpbnMgd2lyZCB3YWVocmVuZCBkZXMgc29nLgorICAgICAgICBLb21wYWt0aWVyZW5zIGRlcyBNYXBwaW5ncyBmcmVpZ2VnZWJlbi4gRGllcyBwYXNzaWVydCB3YWVocmVuZCBlaW5lcworICAgICAgICAiZGF0YSBjbGVhbnVwcyIgb2RlciBlaW5lciAiZ2FyYmFnZSBjb2xsZWN0aW9uIi4gRGllIFplaXQgendpc2NoZW4KKyAgICAgICAgImRhdGEgY2xlYW51cHMiIGlzdCBtaXQgY29uZmlndXJlX2RyaXZlcigpIGtvbmZpZ3VyaWVyYmFyLgorCitHRVNDSElDSFRFCisgICAgICAgIFVtYmVuYW5udCB2b24gYWxsb2NhdGVfbWFwcGluZygpIGluIExETXVkIDMuMi42LgorICAgICAgICBEaWUgKFs6PHdpZHRoPl0pIE5vdGF0aW9uIHd1cmRlIGluIDMuMi45IGVpbmdlZnVlaHJ0LgorCitTSUVIRSBBVUNICisgICAgICAgIG1hcHBpbmdzKExQQyksIHdhbGtfbWFwcGluZyhFKSwgZ2V0X3R5cGVfaW5mbyhFKSwgbV9yZWFsbG9jYXRlKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9tX2NvbnRhaW5zIGIvZG9jL2VmdW4vbV9jb250YWlucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTQxZmYzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vbV9jb250YWlucwpAQCAtMCwwICsxLDE4IEBACitTWU5PUFNJUworICAgICAgICBpbnQgbV9jb250YWlucyhtaXhlZCAmZGF0YTEsIC4uLiAsICZkYXRhTiwgbWFwcGluZyBtYXAsIG1peGVkIGtleSk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBXZW5uIDxtYXA+IGRlbiBLZXkgPGtleT4gZW50aGFlbHQsIHdlcmRlbiBkaWUgZW50c3ByZWNoZW5kZW4gV2VydGUKKyAgICAgICAgZGVuIERhdGVuYXJndW1lbnRlbiB2b24gPGtleT4genVnZW9yZG5ldCwgd2VsY2hlIHBlciBSZWZlcmVuegorICAgICAgICB1ZWJlcmdlYmVuIHdlcmRlbiBtdWVzc2VuLiBtX2NvbnRhaW5zIGxpZWZlcnQgaW4gZGllc2VtIEZhbGwgMSB6dXJ1ZWNrLgorICAgICAgICBXZW5uIDxrZXk+IG5pY2h0IGluIDxtYXA+IGVudGhhbHRlbiBpc3QsIGxpZWZlcnQgZGllIEZ1bmt0aW9uIDAKKyAgICAgICAgenVydWVjayB1bmQgZGllIERhdGVuYXJndW1lbnRlIGJsZWliZW4gdW52ZXJhZW5kZXJ0LgorCisgICAgICAgIE1hbiBrYW5uIGRpZXNlIEZ1bmt0aW9uIGF1Y2ggZnVlciAwLVdlcnQgTWFwcGluZ3MgdmVyd2VuZGVuLCB3b2JlaQorICAgICAgICBzaWUgZGVuIGdsZWljaGVuIEVmZmVrdCB3aWUgbWVtYmVyKEUpIGhhdC4KKworQUVOREVSVU5HRU4KKyAgICAgICAgVW1iZW5hbm50IHZvbiAnbWFwcGluZ19jb250YWlucycgaW4gTERNdWQgMy4yLjYuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgbV9lbnRyeShFKSwgbWFwcGluZ3MoTFBDKSwgbWVtYmVyKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9tX2RlbGV0ZSBiL2RvYy9lZnVuL21fZGVsZXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOWQ0NTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9tX2RlbGV0ZQpAQCAtMCwwICsxLDExIEBACitTWU5PUFNJUworICAgICAgICBtYXBwaW5nIG1fZGVsZXRlKG1hcHBpbmcgbWFwLCBtaXhlZCBrZXkpCisKK0JFU0NIUkVJQlVORworICAgICAgICBMb2VzY2h0IGRlbiBFaW50cmFnIG1pdCBkZW0gSW5kZXggPGtleT4gYXVzIGRlbSBNYXBwaW5nIDxtYXA+IHVuZAorICAgICAgICBsaWVmZXJ0IGRhcyB2ZXJhZW5kZXJ0ZSBNYXBwaW5nIHp1cnVlY2suIFdlbm4gPG1hcD4ga2VpbmVuIEVpbnRhZworICAgICAgICBtaXQgZGVtIEluZGV4IDxrZXk+IGVudGhhZWx0LCB3aXJkIG5pY2h0cyB2ZXJhZW5kZXJ0LgorCitTSUVIRSBBVUNICisgICAgICAgIG1hcHBpbmdwKEUpLCBta21hcHBpbmcoRSksIG1fYWRkKEUpLCBtX2luZGljZXMoRSksIG1fdmFsdWVzKEUpLAorICAgICAgICBzaXplb2YoRSksIHdpZHRob2YoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL21fZW50cnkgYi9kb2MvZWZ1bi9tX2VudHJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZWEyYWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9tX2VudHJ5CkBAIC0wLDAgKzEsMjQgQEAKK1NZTk9QU0lTCisgICAgICAgICptaXhlZCBtX2VudHJ5KG1hcHBpbmcgbWFwLCBtaXhlZCBrZXkpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgRHVyY2hzdWNodCBkYXMgTWFwcGluZyA8bWFwPiBuYWNoIGRlbSBFaW50cmFnIG1pdCBJbmRleCA8a2V5PiB1bmQKKyAgICAgICAgbGllZmVydCBhbGxlIFdlcnRlIHZvbiA8a2V5PiBpbiBlaW5lbSBBcnJheSB6dXJ1ZWNrLgorCisgICAgICAgIFdlbm4gPG1hcD4ga2VpbmVuIEVpbnRyYWcgbWl0IEluZGV4IDxrZXk+IGVudGhhZWx0LCBsaWVmZXJ0CisgICAgICAgIG1fZW50cnkoKSAwLgorCitCRUlTUElFTAorICAgICAgICBtYXBwaW5nIG0gPSAoWzE6ImJsYSI6LTEsIDI6ImZhc2VsIjotMiBdKQorICAgICAgICBtX2VudHJ5KG0sIDApIC0+IDAKKyAgICAgICAgbV9lbnRyeShtLCAxKSAtPiAoeyJibGEiLCAtMX0pCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi4xMC4KKworQU5NRUtSVU5HCisgICAgICAgIE1pdCBkZXIgRWZ1biBtX2FkZCgpIGtvZW5uZW4gYWxsZSBXZXJ0ZSBlaW5lcyBFaW50cmFnZXMgYXVmIGVpbm1hbAorICAgICAgICBhZGRpZXJ0IHdlcmRlbi4KKworU0lFSEUgQVVDSAorICAgICAgICBtX2FkZChFKSwgbV9jb250YWlucyhFKSwgbWFwcGluZ3MoTFBDKSwgbWVtYmVyKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9tX2luZGljZXMgYi9kb2MvZWZ1bi9tX2luZGljZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ4NGM0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL21faW5kaWNlcwpAQCAtMCwwICsxLDkgQEAKK1NZTk9QU0lTOgorCW1peGVkICptX2luZGljZXMobWFwcGluZyBtYXApCisKK0RFU0NSSVBUSU9OOgorCVJldHVybiBhbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIG1hcHBpbmcgJ21hcCcuCisKK1NFRSBBTFNPOgorCW1hcHBpbmdwKEUpLCBta21hcHBpbmcoRSksIG1fdmFsdWVzKEUpLCBtX2RlbGV0ZShFKSwKKwlzaXplb2YoRSksIHdpZHRob2YoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL21fcmVhbGxvY2F0ZSBiL2RvYy9lZnVuL21fcmVhbGxvY2F0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjdiYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vbV9yZWFsbG9jYXRlCkBAIC0wLDAgKzEsMjMgQEAKK1NZTk9QU0lTCisgICAgICAgIG1hcHBpbmcgbV9yZWFsbG9jYXRlKG1hcHBpbmcgbSwgaW50IHdpZHRoKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEVyemV1Z3QgZWluIG5ldWVzIE1hcHBpbmcgbWl0IDx3aWR0aD4gV2VydGVuIHBybyBLZXkgdW5kIGZ1ZWxsdCBkYXMKKyAgICAgICAgTWFwcGluZyBtaXQgZGVuIFdlcnRlbiBhdXMgPG0+LiBXZW5uIDxtPiB3ZW5pZ2VyIGFscyA8d2lkdGg+IFdlcnRlCisgICAgICAgIHBybyBLZXkgaGF0LCB3ZXJkZW4gaW0gbmV1ZW4gTWFwcGluZyBkaWUgcmVzdGxpY2hlbiBXZXJ0ZSBhdWYgMAorICAgICAgICBnZXNldHp0LiBXZW5uIDxtPiBtZWhyIGFscyA8d2lkdGg+IFdlcnRlIHBybyBLZXkgaGF0LCB3ZXJkZW4gZGllCisgICAgICAgIHVlYmVyemFlaGxpZ2VuIFdlcnRlIGlnbm9yaWVydC4KKworICAgICAgICBEYXMgdXJzcHJ1ZW5nbGljaGUgTWFwcGluZyA8bT4gd2lyZCBuaWNodCB2ZXJhZW5kZXJ0LgorCitCRUlTUElFTAorICAgICAgICBtYXBwaW5nIG0gPSAoWyAiZm9vIjoxOzI7MywgImJhciI6NDs1OzYgXSkKKworICAgICAgICBtX3JlYWxsb2NhdGUobSwgMSkgLS0+IGxpZWZlcnQgKFsgImZvbyI6MSwgICAgICAgImJhcjo0IF0pCisgICAgICAgIG1fcmVhbGxvY2F0ZShtLCA0KSAtLT4gbGllZmVydCAoWyAiZm9vIjoxOzI7MzswLCAiYmFyOjQ7NTs2OzAgXSkKKworQUVOREVSVU5HRU4KKyAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuNiwgYXVmIFZvcnNjaGxhZyB2b24gVHViTXVkLgorCitTSUVIRSBBVUNICisgICAgICAgIG1fYWxsb2NhdGUoRSksIG1fdmFsdWVzKEUpLCB3aWR0aG9mKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9tX3ZhbHVlcyBiL2RvYy9lZnVuL21fdmFsdWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOTQxNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9tX3ZhbHVlcwpAQCAtMCwwICsxLDE0IEBACitTWU5PUFNJUzoKKyAgICAgICAgbWl4ZWQgKm1fdmFsdWVzKG1hcHBpbmcgbWFwKQorICAgICAgICBtaXhlZCAqbV92YWx1ZXMobWFwcGluZyBtYXAsIGludCBpbmRleCkKKworREVTQ1JJUFRJT046CisgICAgICAgSWYgaW5kZXggaXMgMCBvciBub3QgZ2l2ZW4sIHJldHVybiBhbiBhcnJheSB3aXRoIHRoZSBmaXJzdCB2YWx1ZXMgb2YgCisgICAgICAgbWFwcGluZyAnbWFwJy4KKyAgICAgICBGb3IgdmFsdWVzIG9mIGluZGV4ID4wLCByZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBoaWdoZXIKKyAgICAgICB2YWx1ZXMgb2YgbWFwcGluZyAnbWFwJywgaS5lLiBtX3ZhbHVlcyhtYXAsMikgcmV0dXJucyB0aGUgdGhpcmQgCisgICAgICAgdmFsdWVzLgorCitTRUUgQUxTTzoKKyAgICAgICBtYXBwaW5ncChFKSwgbWttYXBwaW5nKEUpLCBtX2luZGljZXMoRSksIG1fZGVsZXRlKEUpLAorICAgICAgIHNpemVvZihFKSwgd2lkdGhvZihFKSwgbWFwcGluZ3MoTFBDKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vbWFrZV9zaGFyZWRfc3RyaW5nIGIvZG9jL2VmdW4vbWFrZV9zaGFyZWRfc3RyaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjY3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9tYWtlX3NoYXJlZF9zdHJpbmcKQEAgLTAsMCArMSwyNCBAQAorVkVSQUxURVQKK1NZTk9QU0lTCisgICAgICAgIHN0cmluZyBtYWtlX3NoYXJlZF9zdHJpbmcgKHN0cmluZyBzdHIpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgRnVlZ3QgPHN0cj4gaW4gZGllIFRhYmVsbGUgZGVyIGdlbWVpbnNhbSB2ZXJ3ZW5kZXRlbiBTdHJpbmcgZGVzIFNwaWVscworICAgICAgICBlaW4uCisKKyAgICAgICAgV2VubiBlaW4gU3RyaW5nIHZvbiBtZWhyZXJlbiBWYXJpYWJsZW4gLyBPYmpla3RlbiB2ZXJ3ZW5kZXQgd2lyZCwKKyAgICAgICAgc3BhcnQgZGllcyBTcGVpY2hlci4gS2V5cyB2b24gQWxpc3RzIHVuZCBNYXBwaW5ncyBzaW5kIGltbWVyIGdlbWVpbnNhbQorICAgICAgICB2ZXJ3ZW5kZXRlIFN0cmluZ3MuCisKKyAgICAgICAgSW4gTERNdWQgMy4zIGlzdCBkaWVzZSBGdW5rdGlvbiBuaWNodCBsYWVuZ2VyIG51ZXR6bGljaDogU3RyaW5ncworICAgICAgICB3ZXJkZW4gc293aWVzbyBzbyB3ZWl0IHdpZSBtb2VnbGljaCBnZW1laW5zYW0gdmVyd2VuZGV0LCB1bmQgZGVyCisgICAgICAgIERyaXZlciB3YW5kZWx0IHVudGFibGllcnRlIFN0cmluZ3MgbmFjaCBlaW5pZ2VyIFplaXQgYXV0b21hdGlzY2ggaW4KKyAgICAgICAgdGFibGllcnRlIFN0cmluZ3MgdW0gdW0KKworQlVHUworICAgICAgICBFaW4gYmVzc2VyZXMgU3RyaW5naGFuZGxpbmcgaW0gRHJpdmVyIHNvbGx0ZSBkaWVzZSBFZnVuIHVlYmVyZmx1ZXNzaWcKKyAgICAgICAgbWFjaGVuLgorCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuNiwgYXVmIFZvcnNjaGxhZyB2b24gVHViTXVkLgorICAgICAgICBWZXJhbHRldCBzZWl0IExETXVkIDMuMyAuCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9tYXAgYi9kb2MvZWZ1bi9tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4ZjA2NQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL21hcApAQCAtMCwwICsxLDkzIEBACitTWU5PUFNJUworICAgICAgICBtaXhlZCAqIG1hcChtaXhlZCAqYXJnLCBzdHJpbmcgZnVuYywgc3RyaW5nfG9iamVjdCBvYiwgbWl4ZWQgZXh0cmEuLi4pCisgICAgICAgIG1peGVkICogbWFwKG1peGVkICphcmcsIGNsb3N1cmUgY2wsIG1peGVkIGV4dHJhLi4uKQorICAgICAgICBtaXhlZCAqIG1hcChtaXhlZCAqYXJnLCBtYXBwaW5nIG0gWywgaW50IGlkeF0pCisKKyAgICAgICAgbWl4ZWQgKiBtYXAoc3RydWN0IGFyZywgc3RyaW5nIGZ1bmMsIHN0cmluZ3xvYmplY3Qgb2IsIG1peGVkIGV4dHJhLi4uKQorICAgICAgICBtaXhlZCAqIG1hcChzdHJ1Y3QgYXJnLCBjbG9zdXJlIGNsLCBtaXhlZCBleHRyYS4uLikKKyAgICAgICAgbWl4ZWQgKiBtYXAoc3RydWN0IGFyZywgbWFwcGluZyBtIFssIGludCBpZHhdKQorCisgICAgICAgIG1hcHBpbmcgbWFwKG1hcHBpbmcgYXJnLCBzdHJpbmcgZnVuYywgc3RyaW5nfG9iamVjdCBvYiwgbWl4ZWQgZXh0cmEuLi4pCisgICAgICAgIG1hcHBpbmcgbWFwKG1hcHBpbmcgYXJnLCBjbG9zdXJlIGNsLCBtaXhlZCBleHRyYS4uLikKKworICAgICAgICBzdHJpbmcgbWFwKHN0cmluZyBhcmcsIHN0cmluZyBmdW5jLCBzdHJpbmd8b2JqZWN0IG9iLCBtaXhlZCBleHRyYS4uLikKKyAgICAgICAgc3RyaW5nIG1hcChzdHJpbmcgYXJnLCBjbG9zdXJlIGNsLCBtaXhlZCBleHRyYS4uLikKKyAgICAgICAgc3RyaW5nIG1hcChzdHJpbmcgYXJnLCBtYXBwaW5nIG0gWywgaW50IGlkeF0pCisKK0JFU0NIUkVJQlVORworICAgICAgICBSdWZ0IGRpZSBGdW5rdGlvbiA8b2I+LT48ZnVuYz4oKSBiencuIGRpZSBDbG9zdXJlIDxjbD4gZnVlciBqZWRlcworICAgICAgICBFbGVtZW50IGRlcyBTdHJpbmdzLCBBcnJheXMsIE1hcHBpbmdzIG9kZXIgZGVyIFN0cnVrdHVyIDxhcmc+IGF1ZgorICAgICAgICB1bmQgbGllZmVydCBlaW4gUmVzdWx0YXQsIGRhcyBhdXMgZGVuIHZlcnNjaGllZGVuZW4gUnVlY2tnYWJld2VydGVuCisgICAgICAgIGVyc3RlbGx0IHd1cmRlLgorCisgICAgICAgIFd1cmRlIDxvYj4gbmljaHQgYW5nZWdlYmVuLCBvZGVyIGlzdCBlcyB3ZWRlciBlaW4gU3RyaW5nIG5vY2ggZWluCisgICAgICAgIE9iamVrdCwgd2lyZCBzdGF0dGRlc3NlbiB0aGlzX29iamVjdCgpIHZlcndlbmRldC4KKworICAgICAgICBJc3QgPGFyZz4gZWluIEFycmF5LCBlaW4gU3RyaW5nIG9kZXIgZWluZSBTdHJ1a3R1ciwgd2lyZCBkaWUgRnVua3Rpb24KKyAgICAgICAgbWl0IGplZGVtIEVsZW1lbnQgZGVzIEFycmF5cyBhbHMgZXJzdGVtIFBhcmFtZXRlciBhdWZnZXJ1ZmVuLCBnZWZvbGd0CisgICAgICAgIHZvbiBkZW4gPGV4dHJhPiBBcmd1bWVudGVuLiBEYXMgUmVzdWx0YXQgZGVyIEVmdW4gaXN0IGVpbiBBcnJheSwgZGFzCisgICAgICAgIGRpZSBSdWVja2dhYmV3ZXJ0ZSBkZXIgRnVua3Rpb25zYXVmcnVmZSBlbnRoYWVsdC4gTWFuIGtvZW5udGUgZGllCisgICAgICAgIE9wZXJhdGlvbiBtYXAoKSBkZXNoYWxiIHVtc2NocmVpYmVuIGFsczoKKworICAgICAgICAgICAgZm9yZWFjaChpbmRleCkgcmVzdWx0W2luZGV4XSA9IG9iLT5mdW5jKGFyZ1tpbmRleF0sIGV4dHJhLi4uKQorCisgICAgICAgIElzdCA8YXJnPiBlaW4gQXJyYXksIGVpbiBTdHJpbmcgb2RlciBlaW5lIFN0cnVrdHVyLCB1bmQgd3VyZGUgc3RhdHQKKyAgICAgICAgZWluZXIgRnVua3Rpb24gZWluIE1hcHBpbmcgYW5nZWdlYmVuLCBzbyBsaWVmZXJ0IG1hcCgpIGVpbiBBcnJheSBtaXQKKyAgICAgICAgZGVuIFdlcnRlbiwgZGllIGltIE1hcHBpbmcgYW4gU3RlbGxlIGRlciB1cnNwcnVlbmdsaWNoZW4gV2VydGUgc3RlaGVuLAorICAgICAgICBiencuIG1pdCBkZW4gT3JpZ2luYWx3ZXJ0ZW4sIHdlbm4gZnVlciBzaWUga2VpbiBNYXBwaW5nZWludHJhZworICAgICAgICBleGlzdGllcnQuIElzdCA8aWR4PiBhbmdlZ2ViZW4sIHNvIHdpcmQgZGllIGVudHNwcmVjaGVuZGUgU3BhbHRlIGRlcworICAgICAgICBNYXBwaW5ncyB2ZXJ3ZW5kZXQuIE1pdCBhbmRlcmVuIFdvcnRlbjoKKworICAgICAgICAgICAgZm9yZWFjaChpbmRleCkKKyAgICAgICAgICAgICAgICBpZiAoYXJnW2luZGV4XSBpc3QgZWluIEtleSBpbiA8YXJnPikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IG1hcFthcmdbaW5kZXhdXSBvZGVyIG1hcFthcmdbaW5kZXhdXQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGFyZ1tpbmRleF0KKworICAgICAgICBJc3QgPGFyZz4gZWluIE1hcHBpbmcsIHdpcmQgZGllIEZ1bmt0aW9uIGZ1ZXIgamVkZW4gS2V5IGRlcyBNYXBwaW5ncworICAgICAgICBhbHMgZXJzdGVtIFBhcmFtZXRlciB1bmQgZGVuIERhdGVud2VydGVuIChzb2Zlcm4gdm9yaGFuZGVuKSBhbHMKKyAgICAgICAgenVzYWV0emxpY2hlIEFyZ3VtZW50ZSBhdWZnZXJ1ZmVuLCBnZWZvbGd0IHZvbiBkZW4gPGV4dHJhPiBBcmd1bWVudGVuLgorICAgICAgICBEaWUgPGV4dHJhPiBBcmd1bWVudGUgZHVlcmZlbiBrZWluZSBnZXNjaHVldHp0ZW4gUmVmZXJlbnplbiBlbnRoYWx0ZW4KKyAgICAgICAgKHdpZSB6LkIuICYoaVswXSkpLiBEYXMgRXJnZWJuaXMgZGVyIEVmdW4gaXN0IGVpbiBNYXBwaW5nLCBkYXMgZGllCisgICAgICAgIFJlc3VsdGF0ZSBkZXIgRnVua3Rpb25zYXVmcnVmZSBhbHMgWnVvcmRudW5nIHp1bSBqZXdlaWxpZ2VuIEtleQorICAgICAgICBlbnRoYWVsdC4KKworICAgICAgICBBYmhhZW5naWcgdm9uIGRlciBCcmVpdGUgZGVzIE1hcHBpbmdzIDxhcmc+LCBrYW5uIGRpZSBPcGVyYXRpb24KKyAgICAgICAgdW1zY2hyaWViZW4gd2VyZGVuIGFsczoKKworICAgICAgICAgICAgZm9yZWFjaCAoa2V5IGluIGFyZykKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRob2YoYXJnKSkKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gb2ItPmZ1bmMoa2V5LCAwLCBleHRyYS4uLikKKyAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gb2ItPmZ1bmMoa2V5LCBhcmdba2V5XSwgZXh0cmEuLi4pCisgICAgICAgICAgICAgICAgZWxzZSAgOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IG9iLT5mdW5jKCBrZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICh7IGFyZ1trZXksMF0gLi4uYXJnW2tleSx3aWR0aC0xXSB9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZXh0cmEuLi4pCisKKyAgICAgICAgRGVyIFZvcnRlaWwgZGllc2VzIEFuc2F0emVzIGlzdCwgZGFzcyBiZWlkZSBBcnRlbiB2b24gbWVocmRpbWVuc2lvbmFsZW4KKyAgICAgICAgTWFwcGluZ3MgKE1hcHBpbmdzIG1pdCBtZWhyZXJlbiBXZXJ0ZW4gcHJvIEtleSB1bmQgTWFwcGluZ3Mgdm9uIEFycmF5cykKKyAgICAgICAgZ2xlaWNoIGJlaGFuZGVsdCB3ZXJkZW4ga29lbm5lbi4KKworQkVJU1BJRUxFCisgICAgICAgIGFyciA9ICh7IDEsIDIsIDMsIDQgfSk7CisgICAgICAgIG0gPSAoWyAxOi0xLCAzOi0zIF0pOworCisgICAgICAgIG1hcChhcnIsICMnJSwgMikgIC0tPiBsaWVmZXJ0ICh7IDEsIDAsIDEsIDAgfSkKKyAgICAgICAgbWFwKGFyciwgbSkgICAgICAgLS0+IGxpZWZlcnQgKFsgLTEsIDIsIC0zLCA0IH0pCisKK0FOTUVSS1VOR0VOCisgICAgICAgIG1hcCgpIGF1ZiBBcnJheXMgYW5nZXdhbmR0IHZlcmhhZWx0IHNpY2ggd2llIG1hcF9hcnJheSgpLCBhdWYgTWFwcGluZ3MKKyAgICAgICAgYW5nZXdhbmR0IGhpbmdlZ2VuIHZlcmhhZWx0IGVzIHNpY2ggd2llIGVpbmUgVmVyYWxsZ2VtZWluZXJ1bmcgdm9uCisgICAgICAgIG1hcF9pbmRpY2VzKCkuCisKK0dFU0NISUNIVEUKKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjYsIGxvZXN0IG1hcF9hcnJheSgpIGFiLgorICAgICAgICBMRE11ZCAzLjIuOCBmdWVocnQgbmV1IGRpZSBNb2VnbGljaGtlaXQgZWluLCBlaW4gQXJyYXkgZHVyY2ggZWluCisgICAgICAgIE1hcHBpbmcgenUgbWFwcGVuLgorICAgICAgICBMRE11ZCAzLjMuNDM5IGZ1ZWhydCBtYXAoKSBmdWVyIFN0cmluZ3MgZWluLgorICAgICAgICBMRE11ZCAzLjMuNzE5IGZ1ZWhydCBkZW4gPGlkeD4tUGFyYW1ldGVyIGZ1ZXIgbWFwcGVuIG1pdCBNYXBwaW5ncyBlaW4uCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgZmlsdGVyKEUpLCBmaWx0ZXJfaW5kaWNlcyhFKSwgbWFwX2luZGljZXMoRSksIG1hcF9vYmplY3RzKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9tYXBfaW5kaWNlcyBiL2RvYy9lZnVuL21hcF9pbmRpY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlM2IxNWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9tYXBfaW5kaWNlcwpAQCAtMCwwICsxLDc1IEBACittYXBfaW5kaWNlcyhFKQorCitGVU5LVElPTjoKKyAgICAgbWFwcGluZyBtYXBfaW5kaWNlcyhtYXBwaW5nIG0sIHN0cmluZyBmdW4sIG9iamVjdCBvYiBbLCBtaXhlZCBleHRyYV0pCisgICAgIG1hcHBpbmcgbWFwX2luZGljZXMobWFwcGluZyBtLCBjbG9zdXJlIGNsIFssIG1peGVkIGV4dHJhXSkKKworUEFSQU1FVEVSOgorICAgICBhcnIJLSB6dSBtYXBwZW5kZXMgQXJyYXkKKyAgICAgZnVuL2NsCS0genUgcnVmZW5kZSBNZXRob2RlL0Nsb3N1cmUKKyAgICAgb2IJCS0gT2JqZWt0L0RhdGVpbmFtZSwgYW4gZGVtIE1ldGhvZGUgZ2VydWZlbiB3ZXJkZW4gc29sbAorICAgICBleHRyYQktIHdlaXRlcmUgUGFyYW1ldGVyIGZ1ZXIgTWV0aG9kZS9DbG9zdXJlCisKK0JFU0NIUkVJQlVORzoKKyAgICAgTWFwcGVkIGRpZSBFbGVtZW50ZSAoamV3ZWlscyBTY2hsdWVzc2VsKSBhdXMgJ21hcCcgZHVyY2ggZGllIE1ldGhvZGUKKyAgICAgJ2Z1bicgb2RlciBkaWUgQ2xvc3VyZSAnY2wnIGluIGVpbiBuZXVlcyBNYXBwaW5nLgorICAgICBGdWVyIGplZGVzIEVsZW1lbnQgYXVzICdtJyB3aXJkICdmdW4nIG9kZXIgJ2NsJyBtaXQgZGVtIFNjaGx1ZXNzZWwgYWxzCisgICAgIGVyc3RlbSBQYXJhbWV0ZXIgW3VuZCBmb2xnZW5kIGRlbiBvcHRpb25hbGVuIEV4dHJhLVBhcmFtZXRlcm5dIGdlcnVmZW4uCisKKyAgICAgRGVyIFJ1ZWNrZ2FiZXdlcnQgZGVyIE1ldGhvZGUvQ2xvc3VyZSB3aXJkIGluIGZ1ZXIgZGVuIFNjaGx1ZXNzZWwgYWxzCisgICAgIERhdGVud2VydCBpbiBkYXMgbmV1ZSBNYXBwaW5nIGVpbmdldHJhZ2VuLgorCisgICAgIEFDSFRVTkc6IEFsbGUgYW5kZXJlbiBEYXRlbiBiZWkgTWFwcGluZyBtaXQgQnJlaXRlPjEgdmVyZmFsbGVuIQorCisgICAgIFZlcndlbmR1bmcgdm9uIE1ldGhvZGVuOgorCVdlbm4gYmVpIGRlciBBbmdhYmUgdm9uICdmdW4nIGtlaW4gT2JqZWt0ICdvYicgaW4gRm9ybSBlaW5lcyBTdHJpbmdzCisJb2RlciBPYmpla3RzIGFuZ2VnZWJlbiB3aXJkLCB3aXJkIHRoaXNfb2JqZWN0KCkgYW5nZW5vbW1lbi4KKworICAgICBWZXJ3ZW5kdW5nIHZvbiBDbG9zdXJlczoKKwlFcyBrb2VubmVuIHNvd29obCBMZnVuLUNsb3N1cmVzIGFscyBhdWNoIExhbWJkYS1DbG9zdXJlcyB2ZXJ3ZW5kZXQKKwl3ZXJkZW4uIExmdW4tQ2xvc3VyZXMga29lbm5lbiwgd2VubiBpbSBzZWxiZW4gT2JqZWt0IHZvcmhhbmRlbiBhdWNoCisJJ3ByaXZhdGUnIG9kZXIvdW5kICdzdGF0aWMnIGRla2xhcmllcnQgc2VpbiwgbXVlc3NlbiBhYmVyIHp1IGRlbQorCVplaXRwdW5rdCBkZXIgVmVyd2VuZHVuZyBiZWthbm50IHNlaW4gKEZ1bmt0aW9uc3Byb3RvdHlwZW4gYmVudXR6ZW4pLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBNYXBwaW5nIG1pdCBTY2hsdWVzc2VsOlJ1ZWNrZ2FiZXdlcnRlbiBkZXIgTWV0aG9kZS9DbG9zdXJlLgorCitCRUlTUElFTEU6CisgICAgIC8vIGVyc2V0emUgaW4gZWluZW0gTWFwcGluZyBkaWUgRGF0ZW53ZXJ0ZSBkdXJjaCBkYXMgRG9wcGVsdGUsCisgICAgIC8vIG51dHplIGRhYmVpIGRpZSBEYXRlbndlcnRlIGRlcyBBbHRtYXBwaW5ncyBkdXJjaCBVZWJlcmdhYmUgYWxzCisgICAgIC8vIGV4dHJhLVBhcmFtZXRlcgorCisgICAgIC8vIEFubWVya3VuZzogRGFzIGdlaHQgbWl0IHdhbGtfbWFwcGluZygpIGVsZWdhbnRlciEKKworICAgICBpbnQgZG9fZG91YmxlKHN0cmluZyBrZXksIG1hcHBpbmcgbSwgaW50IG11bHQpIHsKKyAgICAgIHJldHVybiBtW2tleV0qbXVsdDsKKyAgICAgfQorCisgICAgIG1hcHBpbmcgeCwgeTsKKyAgICAgeD0oWyJhIjoyLCAiYiI6M10pOworICAgICB5PW1hcF9pbmRpY2VzKChbImEiOjIsICJiIjozXSksICMnZG9fZG91YmxlLCAmeCwgMyk7CisKKyAgICAgeSA9PSAoWyJhIjo2LCJiIjo5XSkKKworQWVRVUlWQUxFTlpDT0RFIChuaWNodCBlbXBmb2hsZW4sIG51ciB6dW0gVmVyc3RhZW5kbmlzISk6CisgICAgIGludCBpOworICAgICBtYXBwaW5nIHJldDsgbWFwcGluZyBpbnB1dDsKKyAgICAgbWl4ZWQgKmluZGV4OworCisgICAgIHJldD1tX2FsbG9jYXRlKDAsIDEpOworICAgICBpbmRleD1tX2luZGljZXMoaW5wdXQpOworICAgICBpPXNpemVvZihpbmRleCk7CisgICAgIHdoaWxlKGktLSkKKyAgICAgICByZXRbaW5kZXhbaV1dPW9iLT5mdW4oaW5kZXhbaV0gWywgZXh0cmExLCBleHRyYTIsIC4uLl0pKQorICAgICAgIC8vIHJldFtpbmRleFtpXV09ZnVuY2FsbChjbCwgaW5kZXhbaV0gWywgZXh0cmExLCBleHRyYTIsIC4uLl0pOworCitTSUVIRSBBVUNIOgorICAgICBBcnJheXM6CQlmaWx0ZXIoRSksIG1hcChFKQorICAgICBPYmpla3RhcnJheXM6CWZpbHRlcl9vYmplY3RzKEUpLCBtYXBfb2JqZWN0cyhFKQorICAgICBNYXBwaW5nczoJCWZpbHRlcl9pbmRpY2VzKEUpCisKKyAgICAgU29uc3RpZ2VzOgkJd2Fsa19tYXBwaW5nKEUpLCBtX2NvbnRhaW5zKEUpCisJCQltZW1iZXIoKQorCQkJbV9pbmRpY2VzKEUpLCBtX3ZhbHVlcyhFKQorCisyOS4xMC4yMDA2IFplc3N0cmEKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL21hcF9vYmplY3RzIGIvZG9jL2VmdW4vbWFwX29iamVjdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU0M2EyZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL21hcF9vYmplY3RzCkBAIC0wLDAgKzEsNTEgQEAKK21hcF9vYmplY3RzKEUpCisKK0ZVTktUSU9OOgorICAgICBvYmplY3QgKm1hcF9vYmplY3RzKG9iamVjdCAqYXJyLCBzdHJpbmcgZnVuIFssIG1peGVkIGV4dHJhXSkKKworUEFSQU1FVEVSOgorICAgICBhcnIJLSB6dSBtYXBwZW5kZXMgQXJyYXkgdm9uIE9iamVrdGVuL09iamVrdHBmYWRlbgorICAgICBmdW4JLSBhbiBPYmpla3RlbiB6dSBydWZlbmRlIE1ldGhvZGUKKyAgICAgZXh0cmEJLSB3ZWl0ZXJlIFBhcmFtZXRlciBmdWVyIE1ldGhvZGUKKworQkVTQ0hSRUlCVU5HOgorICAgICBNYXBwZWQgZGllIEVsZW1lbnRlIGF1cyAnYXJyJyBkdXJjaCBkZW4gQXVmcnVmIGRlciBNZXRob2RlICdmdW4nIGFuCisgICAgIGplZGVtIGRlciBFbGVtZW50ZSB2b24gJ2FycicgaW4gZWluIG5ldWVzIEFycmF5LgorICAgICAwLUVpbnRyYWVnZSB3ZXJkZW4gaWdub3JpZXJ0LgorCisgICAgIERlciBSdWVja2dhYmV3ZXJ0IHZvbgorCWFycltuXS0+ZnVuKFtleHRyYTEsIGV4dHJhMiwgLi4uXSkKKyAgICAgd2lyZCBhbiBkZXIgSW5kZXhwb3NpdGlvbiBkZXMgRWxlbWVudGVzIGluIGRhcyBuZXVlIEFycmF5IGVpbmdldHJhZ2VuLgorCitSVWVDS0dBQkVXRVJUOgorICAgICBBcnJheSBtaXQgUmVzdWx0YXRlbiBkZXIgRnVua3Rpb25zYXVmcnVmZSBhbSBqZXdlaWxpZ2VuIE9iamVrdC4KKworQkVNRVJLVU5HRU46CisgICAgIFdlcmRlbiBQZmFkZSBhbmdlZ2ViZW4sIHNvIHdpcmQgdmVyc3VjaHQgZWluIE9iamVrdCB6dSBsYWRlbiwgZmFsbHMKKyAgICAgZGllc2VzIG5pY2h0IGV4aXN0aWVydC4KKworQkVJU1BJRUw6CisgICAgIC8vIGVyc2V0emUgYWxsZSBPYmpla3RlIGR1cmNoIGlocmUgTmFtZW4KKyAgICAgYXJyPW1hcF9vYmplY3RzKGlucHV0YXJyLCAibmFtZSIpOworCisgICAgIC8vIGVyc2V0emUgYWxsZSBPYmpla3RlIGR1cmNoIGlocmUgTmFtZW4gaW0gR2VuaXRpdgorICAgICBhcnI9bWFwX29iamVjdHMoaW5wdXRhcnIsICJuYW1lIiwgV0VTU0VOKTsKKworQWVRVUlWQUxFTlpDT0RFIChuaWNodCBlbXBmb2hsZW4sIG51ciB6dW0gVmVyc3RhZW5kbmlzISk6CisgICAgIGludCBpOworICAgICBvYmplY3QgKnJldDsgbWl4ZWQgKmlucHV0OworCisgICAgIGk9c2l6ZW9mKGlucHV0KTsKKyAgICAgcmV0PWFsbG9jYXRlKGkpOworICAgICB3aGlsZShpLS0pCisgICAgICAgcmV0W2ldPWlucHV0W2ldLT5mdW4oW2V4dHJhMSwgZXh0cmEyLCAuLi5dKTsKKworU0lFSEUgQVVDSDoKKyAgICAgQXJyYXlzOgkJZmlsdGVyKEUpLCBtYXAoRSkKKyAgICAgT2JqZWt0YXJyYXlzOglmaWx0ZXJfb2JqZWN0cyhFKQorICAgICBNYXBwaW5nczoJCWZpbHRlcl9pbmRpY2VzKEUpLCBtYXBfaW5kaWNlcyhFKQorCisgICAgIFNvbnN0aWdlczoJCXNvcnRfYXJyYXkoRSksIHVuaXF1ZV9hcnJheSgpCisJCQlhbGlzdCwgdHJhbnNwb3NlX2FycmF5KEUpCisKKzIwLkphbiAyMDA1IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9tYXBwaW5ncCBiL2RvYy9lZnVuL21hcHBpbmdwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZjJhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9tYXBwaW5ncApAQCAtMCwwICsxLDkgQEAKK1NZTk9QU0lTOgorCWludCBtYXBwaW5ncChtaXhlZCBhcmcpCisKK0RFU0NSSVBUSU9OOgorCVJldHVybiAxIGlmIHRoZSBhcmd1bWVudCBpcyBhIG1hcHBpbmcsIG9yIDAgaWYgaXQgaXMgbm90LiAKKworU0VFIEFMU086CisJaW50cChFKSwgc3RyaW5ncChFKSwgb2JqZWN0cChFKSwgcG9pbnRlcnAoRSksIG1rbWFwcGluZyhFKSwKKwltX2luZGljZXMoRSksIG1fdmFsdWVzKEUpLCBtX2RlbGV0ZShFKSwgc2l6ZW9mKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9tYXN0ZXIgYi9kb2MvZWZ1bi9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmNTViNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL21hc3RlcgpAQCAtMCwwICsxLDE3IEBACitTWU5PUFNJUworICAgICAgICBvYmplY3QgbWFzdGVyKCk7CisgICAgICAgIG9iamVjdCBtYXN0ZXIoaW50IGRvbnRfbG9hZCk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBEaWUgRnVua3Rpb24gbGllZmVydCBkYXMgTWFzdGVyb2JqZWt0LgorCisgICAgICAgIFdlbm4gPGRvbnRfbG9hZD4gbmljaHQgd2FociBpc3QsIHN0ZWxsdCBtYXN0ZXIoKSB6dWVyc3Qgc2ljaGVyLCBkYXNzCisgICAgICAgIGRhcyBNYXN0ZXJvYmpla3QgYXVmIGV4aXN0aWVydC4gV2VubiA8ZG9udF9sb2FkPiB3YWhyIGlzdCwgbGllZmVydAorICAgICAgICBtYXN0ZXIoKSBudXIgZGFzIE1hc3Rlcm9iamVrdCBvZGVyIDAsIGZhbGxzIGRhcyBha3R1ZWxsZSBNYXN0ZXJvYmpla3QKKyAgICAgICAgemVyc3RvZXJ0IHd1cmRlLgorCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuMTAKKworU0lFSEUgQVVDSAorICAgICAgICBtYXN0ZXIoTSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL21hdGNoX2NvbW1hbmQgYi9kb2MvZWZ1bi9tYXRjaF9jb21tYW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNDk1ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9tYXRjaF9jb21tYW5kCkBAIC0wLDAgKzEsMjcgQEAKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxzeXMvY29tbWFuZHMuaD4KKworICAgICAgICBtaXhlZCAqIG1hdGNoX2NvbW1hbmQgKHN0cmluZyBjb21tYW5kLCBvYmplY3Qgb3JpZ2luKQorCitERVNDUklQVElPTgorICAgICAgICBUYWtlIHRoZSBjb21tYW5kIDxjb21tYW5kPiwgcGFyc2UgaXQsIGFuZCByZXR1cm4gYW4gYXJyYXkgb2YgYWxsCisgICAgICAgIG1hdGNoaW5nIGFjdGlvbnMgYWRkZWQgdG8gPG9yaWdpbj4gKHJlYWQ6IDxvcmlnaW4+IGlzIHRoZSBvYmplY3QKKyAgICAgICAgJ2lzc3VpbmcnIHRoZSBjb21tYW5kKS4KKworICAgICAgICBFYWNoIGVudHJ5IGluIHRoZSByZXN1bHQgYXJyYXkgaXMgaXRzZWxmIGFuIGFycmF5IG9mOgorCisgICAgICAgICAgc3RyaW5nIFtDTURNX1ZFUkJdOiAgIFRoZSBtYXRjaGVkIHZlcmIuCisgICAgICAgICAgc3RyaW5nIFtDTURNX0FSR106ICAgIFRoZSBhcmd1bWVudCBzdHJpbmcgcmVtYWluaW5nLCBvciAwIGlmIG5vbmUuCisgICAgICAgICAgb2JqZWN0IFtDTURNX09CSkVDVF06IFRoZSBvYmplY3QgZGVmaW5pbmcgdGhlIGFjdGlvbi4KKyAgICAgICAgICBzdHJpbmcgW0NNRE1fRlVOXTogICAgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ01ETV9PQkpFQ1QsIHdoaWNoIG1heSBiZSBzdGF0aWMuCisKKyAgICAgICAgVGhlIGVmdW4gaXMgdXNlZnVsIGZvciBib3RoIGRlYnVnZ2luZywgYW5kIGZvciBpbXBsZW1lbnRpbmcgeW91cgorICAgICAgICBvd24gSF9DT01NQU5EIGhhbmRsaW5nLgorCitISVNUT1JZCisgICAgICAgIEludHJvZHVjZWQgaW4gTERNdWQgMy4zLjI1OS4KKworU0VFIEFMU08KKyAgICAgICAgaG9va3MoQyksIGV4ZWN1dGVfY29tbWFuZChFKSwgY29tbWFuZChFKSwgbm90aWZ5X2ZhaWwoRSksCisgICAgICAgIGNvbW1hbmRfc3RhY2soRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL21heCBiL2RvYy9lZnVuL21heApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODlmNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vbWF4CkBAIC0wLDAgKzEsMjMgQEAKK1NZTk9QU0lTCisgICAgICAgIHN0cmluZyBtYXgoc3RyaW5nIGFyZywgLi4uKTsKKyAgICAgICAgc3RyaW5nIG1heChzdHJpbmcgKmFyZyk7CisKKyAgICAgICAgaW50fGZsb2F0IG1heChpbnR8ZmxvYXQgYXJnLCAuLi4pOworICAgICAgICBpbnR8ZmxvYXQgbWF4KGludHxmbG9hdCAqYXJnKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIERpZSBGdW5rdGlvbiBsaWVmZXJ0IGRlbiBncm9lc3N0ZW4gV2VydCBhbGxlciA8YXJnPiB1bmQgbGllZmVydCBpaG4KKyAgICAgICAgenVydWVjay4gV2lyZCBtYXgoKSBudXIgbWl0IGVpbmVtIEFycmF5IGF1ZmdlcnVmZW4gd2lyZCAoZGFzIG5pY2h0CisgICAgICAgIGxlZXIgc2VpbiBkYXJmKSwgbGllZmVydCBkaWUgRnVua3Rpb24gZGFzIGdyb2Vzc3RlIEVsZW1lbnQgYXVzIDxhcmc+LgorCitCRUlTUElFTAorICAgICAgICBtYXgoMSkgICAgICAgICAgICAgICAgICAgICAtIGxpZWZlcnQgMQorICAgICAgICBtYXgoMSwgMS4xKSAgICAgICAgICAgICAgICAtIGxpZWZlcnQgMS4xCisgICAgICAgIG1heCgiZm9vIiwgImJhciIpICAgICAgICAgIC0gbGllZmVydCAiZm9vIgorICAgICAgICBtYXgoICh7ICJmb28iLCAiYmFyIiB9KSApICAtIGxpZWZlcnQgImZvbyIKKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWVkIDMuMi45LgorCitTSUVIRSBBVUNICisgICAgICAgIG1pbihFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vbWQ1X2NyeXB0IGIvZG9jL2VmdW4vbWQ1X2NyeXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MWJhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9tZDVfY3J5cHQKQEAgLTAsMCArMSwyMCBAQAorU1lOT1BTSVMKKyAgICAgICAgc3RyaW5nIG1kNV9jcnlwdChzdHJpbmcgc3RyLCBpbnQgc2VlZCkKKyAgICAgICAgc3RyaW5nIG1kNV9jcnlwdChzdHJpbmcgc3RyLCBzdHJpbmcgc2VlZCkKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIFZlcnNjaGx1ZXNzZWx0IGRlbiBTdHJpbmcgPHN0cj4gbWl0IGRlbSBTY2hsdWVzc2VsIDxzZWVkPi4KKyAgICAgICAgPHNlZWQ+IGthbm4gZW50d2VkZXIgZWluIEludGVnZXIgc2VpbiBvZGVyIHp3ZWkgWmVpY2hlbiBhdXMKKyAgICAgICAgZGVtIFN0cmluZyA8c2VlZD4uICBXZW5uIDxzZWVkPiAwIGlzdCwgd2lyZCBlaW4genVmYWVsbGlnZXIKKyAgICAgICAgU2NobHVlc3NlbCBlcnpldWd0LgorCisgICAgICAgIERhcyBSZXN1bHRhdCBlbnRoYWVsdCBkZW4gU2NobHVlc3NlbCBhbHMgZGllIGVyc3RlbiBiZWlkZW4gWmVpY2hlbi4KKworICAgICAgICBEaWUgRWZ1biB2ZXJ3ZW5kZXQgZGVuIE1ENS1BbGdvcml0aG11cywgdW5kIGRhcyBSZXN1bHRhdCBpc3QKKyAgICAgICAga29tcGF0aWJsZSBtaXQgZGVyIFBhc3N3b3JkdmVyc2NobHVlc3NlbHVuZyBkZXMgQXBhY2hlIFdlYnNlcnZlcnMuCisKKyAgICAgICAgRnVlciBQYXNzd29ydGFiZnJhZ2VuLCBkaWUgb2huZSBFY2hvIGVpbmdlZ2ViZW4gd2VyZGVuIGtvZW5uZW4gc29sbGVuLAorICAgICAgICBiaWV0ZXQgaW5wdXRfdG8oKSBlaW4gc3BlemllbGxlcyBGbGFnLgorCitTSUVIRSBBVUNICisgICAgICAgIGNyeXB0KEUpLCBtZDUoRSksIHNoYTEoRSksIGlucHV0X3RvKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9tZW1iZXIgYi9kb2MvZWZ1bi9tZW1iZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYwZTY2YQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL21lbWJlcgpAQCAtMCwwICsxLDI0IEBACitTWU5PUFNJUworICAgICAgICBpbnQgbWVtYmVyKG1peGVkICphcnJheSwgbWl4ZWQgZWxlbSBbLCBpbnQgc3RhcnRdKTsKKyAgICAgICAgaW50IG1lbWJlcihzdHJpbmcgcywgaW50IGVsZW0gWywgaW50IHN0YXJ0XSk7CisgICAgICAgIGludCBtZW1iZXIobWFwcGluZyBtYXAsIG1peGVkIGtleSk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBGdWVyIEFycmF5cyB1bmQgU3RyaW5nIGxpZWZlcnQgbWVtYmVyKCkgZGVuIEluZGV4IGRlcyBlcnN0ZW4KKyAgICAgICAgQXVmdHJldGVucyB2b24gPGVsZW0+IGluIDxhcmc+LiBJc3QgPGVsZW0+IG5pY2h0IGluIDxhcmc+IGVudGhhbHRlbiwKKyAgICAgICAgd2lyZCAtMSB6dXJ1ZWNrIGdlZ2ViZW4uCisKKyAgICAgICAgSXN0IDxzdGFydD4gYWxzIFphaGwgPj0gMCBnZWdlYmVuLCBiZWdpbm50IGRpZSBTdWNoZSBhYiBkZXIKKyAgICAgICAgYW5nZWdlYmVuZW4gUG9zaXRpb24uIEVpbmUgU3RhcnRwb3NpdGlvbiBncm9lc3NlciBhbHMgZGllCisgICAgICAgIExhZW5nZSBkZXMgU3RyaW5ncy9BcnJheXMgbGllZmVydCBzdGV0cyBkYXMgUmVzdWx0YXQgLTEuCisKKyAgICAgICAgRnVlciBNYXBwaW5nIHBydWVmdCBtZW1iZXIoKSwgb2IgPGtleT4gaW4gPG1hcD4gZW50aGFsdGVuIGlzdCB1bmQKKyAgICAgICAgbGllZmVydCAxIHp1cnVlY2sgZmFsbHMgamEsIDAgc29uc3QuCisKK0JFSVNQSUVMRQorICAgICAgICBtZW1iZXIoICh7ICJhYmMiLCAiZGVmZyIgfSksICJkZWZnIiApID0gMQorICAgICAgICBtZW1iZXIoICh7ICJhYmMiLCAiZGVmZyIgfSksICJ4IiApID0gLTEKKyAgICAgICAgbWVtYmVyKCAiYWJjZGVmZyIsIDEwMCApID0gbWVtYmVyKCAiYWJjZGVmZyIsICdkJyApID0gMworCitTSUVIRSBBVUNICisgICAgICAgIHJtZW1iZXIoRSksIG1hcHBpbmdzKExQQykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9taW4gYi9kb2MvZWZ1bi9taW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExZjliNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL21pbgpAQCAtMCwwICsxLDIyIEBACitTWU5PUFNJUworICAgICAgICBzdHJpbmcgbWluKHN0cmluZyBhcmcsIC4uLiApOworICAgICAgICBzdHJpbmcgbWluKHN0cmluZyAqYXJnX2FycmF5KTsKKyAgICAgICAgaW50fGZsb2F0IG1pbihpbnR8ZmxvYXQgYXJnLCAuLi4pOworICAgICAgICBpbnR8Zmxhb3QgbWluKGludHxmbG9hdCAqYXJnX2FycmF5KTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZGFzIGtsZWluc3RlIGRlciBBcmd1bWVudGUgPGFyZz4uIFdlbm4gbWluKCkgZnVlciBlaW4KKyAgICAgICAgZWluemVsbmVzIChuaWNodCBsZWVyZXMpIEFycmF5IGF1ZmdlcnVmZW4gd2lyZCwgbGllZmVydCBtaW4oKSBkYXMKKyAgICAgICAga2xlaW5zdGUgRWxlbWVudCBpbSBBcnJheS4KKworQkVJU1BJRUwKKyAgICAgICAgbWluKDEpICAgICAgICAgICAgICAgICAgICAgIC0+IGxpZWZlcnQgMQorICAgICAgICBtaW4oMSwgLTEuMSkgICAgICAgICAgICAgICAgLT4gbGllZmVydCAtMS4xCisgICAgICAgIG1pbigiYmxhIiwgImZhc2VsIikgICAgICAgICAtPiBsaWVmZXJ0ICJibGEiCisgICAgICAgIG1pbiggKHsgImJsYSIsICJmYXNlbCIgfSkgKSAtPiBsaWVmZXJ0ICJibGEiCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi45LgorCitTSUVIRSBBVUNICisgICAgICAgIG1heChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vbWtkaXIgYi9kb2MvZWZ1bi9ta2RpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzdhNjgzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vbWtkaXIKQEAgLTAsMCArMSw5IEBACitTWU5PUFNJUworICAgICAgICBpbnQgbWtkaXIoc3RyaW5nIHBhdGgpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgRXJzdGVsbHQgZWluIFZlcnplaWNobmlzIDxwYXRoPiB1bmQgbGllZmVydCAxLCB3ZW5uIGRhcyBWZXJ6ZWljaG5pcworICAgICAgICBlcnN0ZWxsdCB3ZXJkZW4ga29ubnRlLCBzb25zdCAwLgorCitTSUVIRSBBVUNICisgICAgICAgIHJtZGlyKEUpLCBybShFKSwgZ2V0X2RpcihFKSwgZmlsZV9zaXplKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9ta21hcHBpbmcgYi9kb2MvZWZ1bi9ta21hcHBpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjZjgyNwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL21rbWFwcGluZwpAQCAtMCwwICsxLDM3IEBACitTWU5PUFNJUworICAgICAgICBtYXBwaW5nIG1rbWFwcGluZyhtaXhlZCAqYXJyMSwgbWl4ZWQgKmFycjIsIG1peGVkICphcnIzLCAuLi4pOworICAgICAgICBtYXBwaW5nIG1rbWFwcGluZyhzdHJ1Y3Qgc3QpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBlaW4gTWFwcGluZyBtaXQgS2V5cyBhdXMgPGFycjE+IHVuZCBEYXRlbmVsZW1lbnRlbiBhdXMKKyAgICAgICAgPGFycjI+LCA8YXJyMz4uLi4uIERlbSBLZXkgPGFycjFbMF0+IHdlcmRlbiBkaWUgRGF0ZW5lbGVtZW50ZQorICAgICAgICA8YXJyMlswXT4sIDxhcnIzWzBdPi4uLiB6dWdlb3JkbmV0LiBXZW5uIGRpZSBEYXRlbmFycmF5cworICAgICAgICB1bmdsZWljaCBncm9zcyBzaW5kLCBlbnRoYWVsdCBkYXMgTWFwcGluZyBudXIgc28gdmllbGUgRWludHJhZWdlLAorICAgICAgICB3aWUgaW0ga2xlaW5zdGVuIERhdGVuYXJyYXkgZW50aGFsdGVuIHNpbmQuCisKKyAgICAgICAgRGllIHp3ZWl0ZSBGb3JtIGtvbnZlcnRpZXJ0IGRpZSBhbmdlZ2ViZW5lIHN0cnVjdCA8c3Q+IGluIGVpbiBNYXBwaW5nLgorICAgICAgICBIaWVyYmVpIHdlcmRlbiBkaWUgTmFtZW4gZGVzIGpld2VpbGlnZW4gRWxlbWVudGVzIGluIGRlciBzdHJ1Y3QgYWxzCisgICAgICAgIGFscyBTY2hsdWVzc2VsLgorCisgICAgICAgIEdld29laG5saWNoIHdlcmRlbiBNYXBwaW5ncyBlcndlaXRlcnQsIGluZGVtIGVpbmZhY2ggbmV1ZSBFbGVtZW50ZQorICAgICAgICBlaW5nZWZ1ZWd0IHdlcmRlbi4gRGllc2UgRnVua3Rpb24gaXN0IG51ZXR6bGljaCwgd2VubiBkZXIKKyAgICAgICAgdW5nZWZhZWhyIGJlbm9ldGlndGUgU3BlaWNoZXJwbGF0eiBiZXJlaXRzIHZvcmhlciBiZWthbm50IGlzdCwKKyAgICAgICAgdW0gc28gZGVuIE92ZXJoZWFkIGJlaSBkZXIgU3BlaWNoZXJhbGxva2F0aW9uIHp1IG1pbmltaWVyZW4uCisgICAgICAgIEFsbGVuZmFsbHMgenUgdmllbCBhbGxvemllcnRlciBTcGVpY2hlciB3aXJkIGZyZWlnZWdlYmVuLCBzb2JhbGQKKyAgICAgICAgZGllIEZ1bmt0aW9uLCBkaWUgZGllIG1rbWFwcGluZygpIEFud2Vpc3VuZyBlbnRoYWVsdCwgYmVlbmRldCBpc3QuCisKK0JFU0lQSUVMCisgICAgICAgIG1rbWFwcGluZyggKHsgMSwgMiB9KSwgKHsgMTAsIDExIH0pLCAoeyAyMCwgMjEsIDIyfSkpOworICAgICAgICAgIGxpZWZlcnQgKFsgMToxMDsyMCwgMjoxMTsyMSBdKQorCisgICAgICAgIHN0cnVjdCBzIHsgaW50IGEsIGIsIGM7IH07CisgICAgICAgIG1rbWFwcGluZyggKDxzPiAxLCAoeyAyLCAzIH0pLCAzICkKKyAgICAgICAgICBsaWVmZXJ0IChbICJhIjoxLCAiYiI6KHsyLDN9KSwgImMiOjMgXSkKKworQWVOREVSVU5HRU4KKyAgICAgICAgTERNdWQgMy4zLjQzMyBlcm1vZWdsaWNodGUgZGllIEtvbnZlcnNpb24gdm9uIHN0cnVjdHMuCisKK1ZFUkdMRUlDSEUKKyAgICAgICAgbWFwcGluZ3MoTFBDKSwgbWFwcGluZ3AoRSksIG1faW5kaWNlcyhFKSwgbV92YWx1ZXMoRSksCisgICAgICAgIG1fYWRkKEUpLCBtX2RlbGV0ZShFKSwgc2l6ZW9mKEUpLCB3aWR0aG9mKEUpLCB1bm1rbWFwcGluZyhFKSwKKyAgICAgICAgdG9fc3RydWN0KEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9ta3RpbWUgYi9kb2MvZWZ1bi9ta3RpbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxMjI3YgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL21rdGltZQpAQCAtMCwwICsxLDM4IEBACitTWU5PUFNJUworICAgICAgICAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworICAgICAgICBpbnQgbWt0aW1lKGludCAqdHMpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgSXN0IGRhcyBBcmd1bWVudCA8dHM+IGVpbiBBcnJheSBtaXQgOSBFbGVtZW50ZW4gKGludCksIGVudHNwcmVjaGVuZAorICAgICAgICBkZXMgUnVlY2tnYWJld2VydGVzIHZvbiBsb2NhbF90aW1lKCkvZ21fdGltZSgpLCBsaWVmZXJ0IGRpZSBGdW5rdGlvbgorICAgICAgICBkaWUgQW56YWhsIFNla3VuZGVuIHNlaXQgZGVtIDAxLiBKYW51YXIgMTk3MCwgMDA6MDA6MDAgenVydWVjay4KKyAgICAgICAgRGllcyBpc3Qgdm9uIE51dHplbiwgd2VubiBtYW4gZWluIERhdHVtL1VocnplaXQgaGF0LCBkaWVzZSBhYmVyIGFscworICAgICAgICBHYW56emFobC1XZXJ0IHNwZWljaGVybiB3aWxsIG9kZXIgZWluZSBaZWl0ZGlmZmVyZW56IHp3aXNjaGVuIHp3ZWkKKyAgICAgICAgRGF0ZW4gYXVzcmVjaG5lbiB3aWxsLgorCisgICAgICAgIERhcyBBcnJheSBtdXNzIGRhYmVpIHNvIGF1ZmdlYmF1dCBzZWluOgorICAgICAgICAgICAgaW50IFRNX1NFQyAgICAoMCk6ICBTZWt1bmRlIGluIGRlciBNaW51dGUgKDAuLjU5KQorICAgICAgICAgICAgaW50IFRNX01JTiAgICAoMSk6ICBNaW51dGUgaW4gZGVyIFN0dW5kZSAoMC4uNTkpCisgICAgICAgICAgICBpbnQgVE1fSE9VUiAgICgyKTogIFN0dW5kZSBkZXMgVGFnZXMgKDAuLjIzKQorICAgICAgICAgICAgaW50IFRNX01EQVkgICAoMyk6ICBUYWcgaW0gTW9uYXQgKDEuLjMxKQorICAgICAgICAgICAgaW50IFRNX01PTiAgICAoNCk6ICBNb25hdCBkZXMgSmFocmVzICgwLi4xMSkKKyAgICAgICAgICAgIGludCBUTV9ZRUFSICAgKDUpOiAgSmFociAoei5CLiAyMDAxKQorICAgICAgICAgICAgaW50IFRNX1dEQVkgICAoNik6ICBXb2NoZW50YWcgKDAuLjYsIFNvbm50YWcgPSAwKQorICAgICAgICAgICAgaW50IFRNX1lEQVkgICAoNyk6ICBUYWcgaW0gSmFociAoMC4uMzY1KQorICAgICAgICAgICAgaW56IFRNX0lTRFNUICAoOCk6ICBUUlVFOiBEYXlsaWdodCBTYXZpbmcgVGltZQorCisgICAgICBUTV9ZREFZIHVuZCBUTV9XREFZIHdlcmRlbiBpZ25vcmllcnQgdW5kIGtvZW5uZW4gYmVsaWViaWdlIFphaGxlbgorICAgICAgZW50aGFsdGVuLgorCitCRUlTUElFTAorICAgICAgTWFuIGhhdCBlaW4gRGF0dW0vVWhyemVpdCAoei5CLiBCZW51dHplcmVpbmdhYmUpLCB3ZWxjaGVzIGFscworICAgICAgVW5peC1aZWl0c3RtZXBlbCBnZXNwZWljaGVydCB3ZXJkZW4gc29sbDoKKyAgICAgIC8vICJNaXQsIDI0LiBPa3QgMjAwNywgMTA6NDg6MDAiIGVudHNwcmljaHQgZm9sZ2VuZGVtIFplaXRzdGVtcGVsOgorICAgICAgaW50IHVuaXh6ZWl0ID0gbWt0aW1lKCAoezAsIDQ4LCAwOSwgMjQsIDA5LCAyMDA3LCAwLCAwMSwgMH0pICk7CisgICAgICAKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMy43MXgKKworU0lFSEUgQVVDSAorICAgIGN0aW1lKEUpLCBnbXRpbWUoRSksIGxvY2FsX3RpbWUoRSksIHRpbWUoRSksIHV0aW1lKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9tb2RpZnlfY29tbWFuZCBiL2RvYy9lZnVuL21vZGlmeV9jb21tYW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYTYwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9tb2RpZnlfY29tbWFuZApAQCAtMCwwICsxLDIxIEBACitTWU5PUFNJUworCWludHxzdHJpbmcgbW9kaWZ5X2NvbW1hbmQoc3RyaW5nIGNtZCkKKworREVTQ1JJUFRJT04KKwlBZnRlciBzZXRfbW9kaWZ5X2NvbW1hbmQobW9iKSB3YXMgY2FsbGVkIGZvciBhbiBpbnRlcmFjdGl2ZQorCW9iamVjdCBpb2IsIGFsbCBjb21tYW5kcyBmb3IgdGhhdCB1c2VyIHdpbGwgYmUgcGFzc2VkIHRvCisJbW9iLT5tb2RpZnlfY29tbWFuZCgpLCBhbmQgdGhlIHJldHVybiB3aWxsIHRoZW4gYmUgY2hlY2tlZCBmb3IKKwlhY3Rpb25zLgorCisJSWYgdGhlIHJlc3VsdCBpcyBhIHN0cmluZywgaXQgaXMgdGhlIG5ldyBjb21tYW5kIHRvIGV4ZWN1dGUKKwlpbnN0ZWFkIG9mIHRoZSBnaXZlbiBvbmUuIE5vdGUgdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8KKwltYWtlIHNldmVyYWwgY29tbWFuZHMgZnJvbSBvbmUgdGhpcyB3YXkhCisJSWYgdGhlIHJlc3VsdCBpcyBhIG5vbi16ZXJvIG51bWJlciwgdGhlIGdpdmVuIGNvbW1hbmQgaXMgdG8KKwliZSBpZ25vcmVkLiBJbiBjYXNlIG9mIHRoZSBjbG9zdXJlL2xmdW4gc2V0dGluZyB0aGlzIG1heQorCW1lYW4gdGhhdCB0aGUgY2xvc3VyZS9sZnVuIGFscmVhZHkgZXhlY3V0ZWQgaXQuCisJSWYgdGhlIHJlc3VsdCBpcyAwLCB0aGUgb3JpZ2luYWxseSBnaXZlbiBjb21tYW5kIGlzIHRvIGJlCisJdXNlZC4KKworCitTRUUgQUxTTworCXNldF9tb2RpZnlfY29tbWFuZChFKSwgaG9va3MoQykKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL21vdmVfb2JqZWN0IGIvZG9jL2VmdW4vbW92ZV9vYmplY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhiMjNlOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL21vdmVfb2JqZWN0CkBAIC0wLDAgKzEsMTggQEAKK1NZTk9QU0lTOgorICAgICAgICB2b2lkIG1vdmVfb2JqZWN0KG1peGVkIGl0ZW0sIG1peGVkIGRlc3QpCisKKyAgICAgICAgaXRlbS0+bW92ZShvYmplY3QgZGVzdCwgc3RyaW5nIG1ldGhvZHMpCisKK0RFU0NSSVBUSU9OOgorCVRoZSBpdGVtLCB3aGljaCBjYW4gYmUgYSBvYmplY3RfbmFtZSBvciBhbiBvYmplY3QsIGlzIG1vdmVkIGludG8KKwlpdCdzIG5ldyBlbnZpcm9ubWVudCBkZXN0LCB3aGljaCBjYW4gYWxzbyBiZSBvYmplY3RfbmFtZSBvciBhbgorCW9iamVjdC4gIEluIG5hdGl2ZSBtb2RlLCB0aGUgb25seSBvYmplY3QgdGhhdCBjYW4gYmUgbW92ZWQKKwl3aXRoIG1vdmVfb2JqZWN0KCkgaXMgdGhlIGNhbGxpbmcgb2JqZWN0IGl0c2VsZi4gVGhpcyBmdW5jdGlvbgorCWlzIG9ubHkgdXNlZCB0byBpbXBsZW1lbnQgdGhlIGxmdW4gbW92ZSgpLgorICAgICAgICAKKyAgICAgICAgVXNlIHRoZSBsZnVuIG1vdmUoKSBpbnN0ZWFkIGJ5IGluaGVyaXRpbmcgc3RhbmRhcmQgb2JqZWN0cy4KKwltb3ZlKCkgbXVzdCBiZSBjYWxsZWQgaW4gdGhlIG9iamVjdCB0byBiZSBtb3ZlZC4gVGhpcyBnaXZlcworCXRoZSBtb3ZlZCBvYmplY3QgZnVsbCBjb250cm9sIG92ZXIgaXRzIG1vdmVtZW50LgorCitTRUUgQUxTTzoKKyAgICAgICAgbW92ZShMKSwgcmVtb3ZlKEwpLCBpbml0KEwpLCB0cmFuc2ZlcihFKSwgbmF0aXZlKEMpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9uZWdhdGUgYi9kb2MvZWZ1bi9uZWdhdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmMGJkZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL25lZ2F0ZQpAQCAtMCwwICsxLDYgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCBuZWdhdGUoaW50IGFyZyk7CisgICAgICAgIGZsb2F0IG5lZ2F0ZShmbG9hdCBhcmcpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBkZW4gbmVnYXRpdmVuIFdlcnQgdm9uIDxhcmc+LgpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vbmV0X2Nvbm5lY3QgYi9kb2MvZWZ1bi9uZXRfY29ubmVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2FhZTJmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vbmV0X2Nvbm5lY3QKQEAgLTAsMCArMSwzMCBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IG5ldF9jb25uZWN0KHN0cmluZyBob3N0LCBpbnQgcG9ydCkKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIE9lZmZuZSBlaW5lIG5pY2h0LWJsb2NraWVyZW5kZSBUQ1AgTmV0enZlcmJpbmR1bmcgenUKKyAgICAgICAgPGhvc3Q+Ojxwb3J0PiAuICBCZWkgRXJmb2xnIHdpcmQgZGllIFZlcmJpbmR1bmcgenVtCisgICAgICAgIGF1ZnJ1ZmVuZGVuIE9iamVrdCBnZWJ1bmRlbiB1bmQgZGllIGxmdW4gbG9nb24oKSB3aXJkIGluIGRlbQorICAgICAgICBPYmpla3QgYXVmZ2VydWZlbi4KKworICAgICAgICBSZXN1bHRhdCBpc3QgMCBiZWkgRXJmb2xnLCB1bmQgZWluZSBVbml4IEVSUk5PIGJlaSBNaXNzZXJmb2xnLgorCisgICAgICAgIElzdCBkZXIgRHJpdmVyIGZ1ZXIgSVB2NiBrb25maWd1cmllcnQsIHdpcmQgPGhvc3Q+IGVyc3QgYWxzCisgICAgICAgIElQdjYtTmFtZSBpbnRlcnByZXRpZXJ0LCB1bmQgd2VubiBkYXMgZmVobHNjaGxhZWd0LCBhbHMKKyAgICAgICAgSVB2NC1OYW1lLgorCisgICAgICAgIFdlbm4gZGllIFZlcmJpbmR1bmcgbmljaHQgc29mb3J0IGVyemV1Z3Qgd2VyZGVuIGthbm4sIGdpYnQgZGllCisgICAgICAgIEZ1bmt0aW9uICdFcmZvbGcnIHp1cnVlY2ssIHVuZCBkZXIgRHJpdmVyIHZvbGxlbmRldCBkaWUKKyAgICAgICAgRnVua3Rpb24gaW0gSGludGVyZ3J1bmQuIFNvbGx0ZSBkaWUgVmVyYmluZHVuZ3NhdWZiYXUgaW0KKyAgICAgICAgSGludGVyZ3J1bmQgZmVobHNjaGxhZ2VuLCB3aXJkIGxvZ29uKC0xKSBpbSBha3R1ZWxsZW4gT2JqZWt0CisgICAgICAgIGF1ZmdlcnVmZW4uCisKKyAgICAgICAgRGllIEZ1bmt0aW9uIGVyemV1Z3QgZWluZSBwcml2aWxlZ2UgdmlvbGF0aW9uICgibmV0X2Nvbm5lY3QiLAorICAgICAgICBob3N0LCBwb3J0KS4KKworICAgICAgICBXQVJOVU5HOiBJc3QgPGhvc3Q+IGVpbiBOYW1lIHVuZCBrZWluZSBJUCwgZnVlaHJ0IGRpZSBGdW5rdGlvbgorICAgICAgICBlaW5lbiBETlMtQXVmcnVmIGR1cmNoLCBkZXIgZGVuIERyaXZlciBmdWVyIGVpbmlnZSBaZWl0CisgICAgICAgIGJsb2NraWVyZW4ga2Fubi4KKworU0lFSEUgQVVDSAorICAgICAgICBsb2dvbihBKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vbmV4dF9iaXQgYi9kb2MvZWZ1bi9uZXh0X2JpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWZiOTBhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vbmV4dF9iaXQKQEAgLTAsMCArMSwzMiBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IG5leHRfYml0KHN0cmluZyBzdHIsIGludCBzdGFydCk7CisgICAgICAgIGludCBuZXh0X2JpdChzdHJpbmcgc3RyLCBpbnQgc3RhcnQsIGludCBmaW5kX2NsZWFyZWQpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBkZW4gWmFobGVud2VydCBkZXMgbmFlY2hzdGVuIEJpdHMgaW0gQml0c3RyaW5nIDxiaXQ+IG5hY2gKKyAgICAgICAgZGVyIFBvc2l0aW9uIDxzdGFydD4uIEdld29laG5saWNoIGlzdCBkaWVzIGRhcyBuYWVjaHN0ZSBnZXNldHp0ZQorICAgICAgICBCaXQsIGFiZXIgd2VubiA8ZmluZF9jbGVhcmVkPiBhbmdlZ2ViZW4gdW5kIG5pY2h0IDAgaXN0LCB3aXJkCisgICAgICAgIGRpZSBQb3N0aW9uIGRlcyBuYWVjaHN0ZW4gZ2Vsb2VzY2h0ZW4gQml0cyB6dXJ1ZWNrIGdlZ2ViZW4uCisKKyAgICAgICAgRGFiZWkgaXN0IGRhcyBGaW5kZW4gdm9uIGdlbG9lc2NodGVuIEJpdHMgbmFjaCBkZW0gbGV0enRlbiBnZXNldHp0ZW4KKyAgICAgICAgQml0IGF1ZiBkaWUgdGF0c2FlY2hsaWNoZSBMYWVuZ2Ugdm9uIDxzdHI+IGJlc2NocmFlbmt0LgorCisgICAgICAgIEplZGVzIFplaWNoZW4gZW50aGFlbHQgNiBCaXRzLiBJbiBqZWRlbSBaZWljaGVuIGthbm4gZGVzaGFsYiBlaW5lCisgICAgICAgIFphaGwgdm9uIDAgYmlzIDYzIGdlc3BlaWNoZXJ0IHdlcmRlICgyXjY9NjQpLiBEYXMgZXJzdGUgWmVpY2hlbgorICAgICAgICBpc3QgZGVyIExlZXJzY2hsYWcgIiAiIG1pdCBkZW0gV2VydCAwLiBEYXMgZXJzdGUgWmVpY2hlbiBpbSBTdHJpbmcKKyAgICAgICAgaXN0IGplbmVzIG1pdCBkZW4gbmllZHJpZ3N0ZW4gQml0cyAoMC01KS4KKworQkVJU1BJRUwKKyAgICAgICAgc3RyaW5nIHM7CisgICAgICAgIGludCBwOworCisgICAgICAgIHMgPSBzZXRfYml0KCIiLCA0KTsgcyA9IHNldF9iaXQocywgMik7CisKKyAgICAgICAgZm9yIChwID0gLTE7IC0xICE9IChwID0gbmV4dF9iaXQocywgcCk7ICkKKyAgICAgICAgICAgIHdyaXRlKHArIlxuIik7CisKKyAgICAgICAgLS0+IGRhcyBnaWJ0IDIgdW5kIDQgYXVzLgorCitTSUVIRSBBVUNICisgICAgICAgIHNldF9iaXQoRSksIGNsZWFyX2JpdChFKSwgdGVzdF9iaXQoRSksIGxhc3RfYml0KEUpLCBjb3VudF9iaXRzKEUpLAorICAgICAgICBhbmRfYml0cyhFKSwgb3JfYml0cyhFKSwgeG9yX2JpdHMoRSksIGludmVydF9iaXRzKEUpLCBjb3B5X2JpdHMoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL25leHRfaW52ZW50b3J5IGIvZG9jL2VmdW4vbmV4dF9pbnZlbnRvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzNzBhMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL25leHRfaW52ZW50b3J5CkBAIC0wLDAgKzEsMTcgQEAKK1NZTk9QU0lTCisgICAgICAgIG9iamVjdCBuZXh0X2ludmVudG9yeSgpOworICAgICAgICBvYmplY3QgbmV4dF9pbnZlbnRvcnkob2JqZWN0IG9iKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZGFzIG5hZWNoc3RlIE9iamVrdCBhdXMgZGVtIEludmVudGFyIHZvbiA8b2I+LiBXaXJkIDxvYj4KKyAgICAgICAgbmljaHQgYW5nZWdlYmVuLCB3aXJkIHRoaXNfb2JqZWN0KCkgdmVyd2VuZGV0LgorCisgICAgICAgIERpZXNlIEVmdW4gd2lyZCBtZWlzdGVucyB6dXNhbW1lbiBtaXQgZmlyc3RfaW52ZW50b3J5KCkgdmVyd2VuZGV0CisgICAgICAgIHVtIHVlYmVyIFJhdW0tIHVuZCBDb250YWluZXJpbmhhbHRlIHp1IGl0ZXJpZXJlbi4KKyAgICAgICAgRnVlciBlaW4gQmVpc3BpZWwgc2llaGUgZG9ydC4KKworU0lFSEUgQVVDSAorICAgICAgICBmaXJzdF9pbnZlbnRvcnkoRSksIGFsbF9pbnZlbnRvcnkoRSksIGVudmlyb25tZW50KEUpLAorICAgICAgICBkZWVwX2ludmVudG9yeShFKQorCis3LkF1ZyAyMDA3IEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vb2JqZWN0X2luZm8gYi9kb2MvZWZ1bi9vYmplY3RfaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTc3M2ZjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vb2JqZWN0X2luZm8KQEAgLTAsMCArMSwyMDIgQEAKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxvYmplY3RfaW5mby5oPgorCisgICAgICAgIG1peGVkIG9iamVjdF9pbmZvKG9iamVjdCBvYiwgaW50IHdoYXQpCisKK0RFU0NSSVBUSU9OCisgICAgICAgIFJldHVybnMgc29tZSBpbnRlcm5hbCBpbmZvcm1hdGlvbiBhYm91dCBvYmplY3QgPG9iPi4gVGhlCisgICAgICAgIEFyZ3VtZW50IDx3aGF0PiBkZXRlcm1pbmVzIHdoaWNoIGluZm9ybWF0aW9uIGlzIHJldHVybmVkLgorCisgICAgICAgIEl0IGNhbiBiZSBlaXRoZXIgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBhcyBnaXZlbiB0bworICAgICAgICBjb25maWd1cmVfb2JqZWN0KCkgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworCisKKyAgICAgICAgT2JqZWN0IEZsYWdzOgorCisgICAgICAgIDx3aGF0PiA9PSBPSV9PTkNFX0lOVEVSQUNUSVZFOgorICAgICAgICAgICAxIGlmIDxvYj4gd2FzIG9uY2UgKG9yIHN0aWxsIGlzKSBpbnRlcmFjdGl2ZSwgMCBlbHNlLgorCisgICAgICAgIDx3aGF0PiA9PSBPSV9SRVNFVF9TVEFURToKKyAgICAgICAgICAgMSBpZiA8b2I+IGlzIChzdGlsbCkgcmVzZXQsIDAgZWxzZS4KKworICAgICAgICA8d2hhdD4gPT0gT0lfV0lMTF9DTEVBTl9VUDoKKyAgICAgICAgICAgMSBpZiA8b2I+J3MgY2xlYW5fdXAoKSB3aWxsIGJlIGNhbGxlZCwgMCBlbHNlLgorCisgICAgICAgIDx3aGF0PiA9PSBPSV9MQU1CREFfUkVGRVJFTkNFRDoKKyAgICAgICAgICAgMSBpZiA8b2I+IGhhcyBsYW1iZGFzIChhbmQgdGhlcmUgcmVwbGFjZV9wcm9ncmFtKCkKKyAgICAgICAgICAgaXMgbm90IGFsbG93ZWQgYW55bW9yZSksIDAgZWxzZS4KKworICAgICAgICA8d2hhdD4gPT0gT0lfUkVQTEFDRUQ6CisgICAgICAgICAgIDEgaWYgdGhlIHByb2dyYW0gZm9yIDxvYj4gd2FzIHJlcGxhY2VkLCAwIGVsc2UuCisKKworCisgICAgICAgIFByb2dyYW0gRmxhZ3M6CisKKyAgICAgICAgPHdoYXQ+ID09IE9JX05PX0lOSEVSSVQ6CisgICAgICAgICAgIDEgaWYgdGhlIHByb2dyYW0gY2FuJ3QgYmUgaW5oZXJpdGVkLgorCisgICAgICAgIDx3aGF0PiA9PSBPSV9OT19DTE9ORToKKyAgICAgICAgICAgMSBpZiB0aGUgcHJvZ3JhbS9ibHVlcHJpbnQgY2FuJ3QgYmUgY2xvbmVkLgorCisgICAgICAgIDx3aGF0PiA9PSBPSV9OT19TSEFET1c6CisgICAgICAgICAgIDEgaWYgdGhlIHByb2dyYW0ncyBmdW5jdGlvbnMgY2FuJ3QgYmUgc2hhZG93ZWQuCisKKyAgICAgICAgPHdoYXQ+ID09IE9JX1NIQVJFX1ZBUklBQkxFUzoKKyAgICAgICAgICAgMSBpZiBjbG9uZXMgb2YgdGhpcyBwcm9ncmFtIHNoYXJlIHRoZWlyIGluaXRpYWwKKyAgICAgICAgICAgdmFyaWFibGUgdmFsdWVzIHdpdGggdGhlIGJsdWVwcmludC4KKworCisKKyAgICAgICAgU3dhcHBpbmcgSW5mb3JtYXRpb246CisKKyAgICAgICAgPHdoYXQ+ID09IE9JX1NXQVBQRUQ6CisgICAgICAgICAgIDEgaWYgPG9iPiBpcyBzd2FwcGVkLCAwIGVsc2UuCisKKyAgICAgICAgPHdoYXQ+ID09IE9JX1BST0dfU1dBUFBFRDoKKyAgICAgICAgICAgMSBpZiA8b2I+J3MgcHJvZ3JhbSBpcyBzd2FwcGVkLCAwIGVsc2UuCisKKyAgICAgICAgPHdoYXQ+ID09IE9JX1ZBUl9TV0FQUEVEOgorICAgICAgICAgICAxIGlmIDxvYj4ncyB2YXJpYWJsZXMgYXJlIHN3YXBwZWQsIDAgZWxzZS4KKworICAgICAgICA8d2hhdD4gPT0gT0lfU1dBUF9OVU06CisgICAgICAgICAgIFRoZSBzd2FwIG51bWJlciBmb3IgPG9iPnMgcHJvZ3JhbSwgb3IgLTEgaWYgbm90IHN3YXBwZWQuCisKKworCisgICAgICAgIFRpbWUgSW5mb3JtYXRpb246CisKKyAgICAgICAgPHdoYXQ+ID09IE9JX05FWFRfUkVTRVRfVElNRToKKyAgICAgICAgICAgIFRpbWUgb2YgdGhlIG5leHQgcmVzZXQuCisKKyAgICAgICAgPHdoYXQ+ID09IE9JX05FWFRfQ0xFQU5VUF9USU1FOgorICAgICAgICAgICAgVGltZSBvZiB0aGUgbmV4dCBkYXRhIGNsZWFudXAuCisKKyAgICAgICAgPHdoYXQ+ID09IE9JX0xBU1RfUkVGX1RJTUU6CisgICAgICAgICAgICBUaW1lIG9mIHRoZSBsYXN0IGNhbGwgdG8gPG9iPi4KKworCisKKyAgICAgICAgT2JqZWN0IExpc3Q6CisKKyAgICAgICAgPHdoYXQ+ID09IE9JX09CSkVDVF9ORVhUOgorICAgICAgICAgICBUaGUgbmV4dCBvYmplY3QgaW4gdGhlIGdsb2JhbCBvYmplY3QgbGlzdC4KKworICAgICAgICA8d2hhdD4gPT0gT0lfT0JKRUNUX1BSRVY6CisgICAgICAgICAgIFRoZSBwcmV2aW91cyBvYmplY3QgaW4gdGhlIGdsb2JhbCBvYmplY3QgbGlzdC4KKworICAgICAgICA8d2hhdD4gPT0gT0lfT0JKRUNUX1BPUzoKKyAgICAgICAgICAgVGhlIHBvc2l0aW9uIG9mIDxvYj4gaW4gdGhlIGdsb2JhbCBvYmplY3QgbGlzdCwKKyAgICAgICAgICAgY291bnRpbmcgZnJvbSAwIHVwLiBUaGlzIGNhbiBiZSBleHBlbnNpdmUgdG8gY29tcHV0ZS4KKworCisKKyAgICAgICAgU2hhZG93czoKKworICAgICAgICA8d2hhdD4gPT0gT0lfU0hBRE9XX05FWFQ6CisgICAgICAgICAgIFRoZSBuZXh0IG9iamVjdCBpbiB0aGUgc2hhZG93IGxpc3QsIGkuZS4gdGhlIG9iamVjdAorICAgICAgICAgICB0aGF0IGlzIHNoYWRvd2luZyA8b2I+LCBvciAwIGlmIDxvYj4gaXMgbm90IHNoYWRvd2VkLgorCisgICAgICAgIDx3aGF0PiA9PSBPSV9TSEFET1dfUFJFVjoKKyAgICAgICAgICAgVGhlIHByZXZpb3VzIG9iamVjdCBpbiB0aGUgc2hhZG93IGxpc3QsIGkuZS4gdGhlIG9iamVjdAorICAgICAgICAgICB0aGF0IDxvYj4gaXMgY3VycmVudGx5IHNoYWRvd2luZywgb3IgMCBpZiA8b2I+IGlzIG5vdCBhIHNoYWRvdy4KKworICAgICAgICA8d2hhdD4gPT0gT0lfU0hBRE9XX0FMTDoKKyAgICAgICAgICAgUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgb2JqZWN0cyB0aGF0IGFyZSBjdXJyZW50bHkKKyAgICAgICAgICAgc2hhZG93aW5nIDxvYj4sIG9yIGFuIGVtcHR5IGFycmF5IGlmIDxvYj4gaXMgbm90IHNoYWRvd2VkLgorCisKKworICAgICAgICBPYmplY3QgU3RhdGlzdGljczoKKworICAgICAgICA8d2hhdD4gPT0gT0lfT0JKRUNUX1JFRlM6CisgICAgICAgICAgIFRoZSBudW1iZXIgb2YgcmVmZXJlbmNlcyB0byA8b2I+LgorCisgICAgICAgIDx3aGF0PiA9PSBPSV9USUNLUzoKKyAgICAgICAgICAgVGhlIGFjY3VtdWxhdGVkIGV2YWx1YXRpb24gY29zdCBzcGVuZCBpbiA8b2I+IG1vZHVsbyAxMDAwMDAwMDAwLgorCisgICAgICAgIDx3aGF0PiA9PSBPSV9HSUdBVElDS1M6CisgICAgICAgICAgIFRoZSBhY2N1bXVsYXRlZCBldmFsdWF0aW9uIGNvc3Qgc3BlbmQgaW4gPG9iPiBkaXZpZGVkIGJ5IDEwMDAwMDAwMDAuCisKKyAgICAgICAgPHdoYXQ+ID09IE9JX0RBVEFfU0laRToKKyAgICAgICAgICAgVGhlIHRvdGFsIHNpemUgb2YgdGhlIHZhbHVlcyBoZWxkIGluIHRoZSBvYmplY3QncyB2YXJpYWJsZXMsCisgICAgICAgICAgIHNjYWxlZCBkb3duIGFjY29yZGluZyB0byB0aGUgZXh0ZW5kIG9mIGRhdGEgc2hhcmluZy4KKworICAgICAgICA8d2hhdD4gPT0gT0lfREFUQV9TSVpFX1RPVEFMOgorICAgICAgICAgICBUaGUgdW5tb2RpZmllZCB0b3RhbCBzaXplIG9mIHRoZSB2YWx1ZXMgaGVsZCBpbiB0aGUKKyAgICAgICAgICAgb2JqZWN0J3MgdmFyaWFibGVzCisKKworCisgICAgICAgIFByb2dyYW0gU3RhdGlzdGljczoKKworICAgICAgICA8d2hhdD4gPT0gT0lfUFJPR19SRUZTOgorICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHJlZmVyZW5jZXMgdG8gPG9iPidzIHByb2dyYW0uCisKKyAgICAgICAgPHdoYXQ+ID09IE9JX05VTV9GVU5DVElPTlM6CisgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZnVuY3Rpb25zIGluIHRoZSBwcm9ncmFtLgorCisgICAgICAgIDx3aGF0PiA9PSBPSV9OVU1fVkFSSUFCTEVTOgorICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHZhcmlhYmxlcyBpbiB0aGUgcHJvZ3JhbS4KKworICAgICAgICA8d2hhdD4gPT0gT0lfTlVNX1NUUklOR1M6CisgICAgICAgICAgIFRoZSBudW1iZXIgb2Ygc3RyaW5ncyBpbiB0aGUgcHJvZ3JhbS4KKworICAgICAgICA8d2hhdD4gPT0gT0lfTlVNX0lOSEVSSVRFRDoKKyAgICAgICAgICAgVGhlIG51bWJlciBvZiBleHBsaWNpdGVseSBpbmhlcml0ZWQgcHJvZ3JhbXMuCisKKyAgICAgICAgPHdoYXQ+ID09IE9JX05VTV9JTkNMVURFRDoKKyAgICAgICAgICAgVGhlIG51bWJlciBvZiBpbmNsdWRlZCBmaWxlcyBpbiB0aGUgcHJvZ3JhbS4KKworICAgICAgICA8d2hhdD4gPT0gT0lfU0laRV9GVU5DVElPTlM6CisgICAgICAgICAgIFRoZSBzaXplIG5lZWRlZCBmb3IgdGhlIGZ1bmN0aW9uIHN0cnVjdHVyZXMuCisgICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGluY2x1ZGUgc2l6ZSBvZiB0aGUgZnVuY3Rpb24gY29kZS4KKworICAgICAgICA8d2hhdD4gPT0gT0lfU0laRV9WQVJJQUJMRVM6CisgICAgICAgICAgIFRoZSBzaXplIG5lZWRlZCBmb3IgdGhlIHZhcmlhYmxlIHN0cnVjdHVyZXMuCisgICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGluY2x1ZGUgc2l6ZSBvZiB0aGUgdmFyaWFibGUgZGF0YSwKKyAgICAgICAgICAgU2VlIE9JX0RBVEFfU0laRS9PSV9EQVRBX1NJWkVfVE9UQUwgZm9yIHRoYXQuCisKKyAgICAgICAgPHdoYXQ+ID09IE9JX1NJWkVfU1RSSU5HUzoKKyAgICAgICAgICAgVGhlIHNpemUgbmVlZGVkIGZvciB0aGUgc3RyaW5nIHBvaW50ZXJzLgorCisgICAgICAgIDx3aGF0PiA9PSBPSV9TSVpFX1NUUklOR1NfREFUQToKKyAgICAgICAgICAgVGhlIHNpemUgbmVlZGVkIGZvciB0aGUgc3RyaW5nIHZhbHVlcywKKyAgICAgICAgICAgc2NhbGVkIGRvd24gYWNjb3JkaW5nIHRvIHRoZSBleHRlbmQgb2YgZGF0YSBzaGFyaW5nLgorCisgICAgICAgIDx3aGF0PiA9PSBPSV9TSVpFX1NUUklOR1NfREFUQV9UT1RBTDoKKyAgICAgICAgICAgVGhlIHVubW9kaWZpZWQgc2l6ZSBuZWVkZWQgZm9yIHRoZSBzdHJpbmcgdmFsdWVzLgorCisgICAgICAgIDx3aGF0PiA9PSBPSV9TSVpFX0lOSEVSSVRFRDoKKyAgICAgICAgICAgVGhlIHNpemUgbmVlZGVkIGZvciB0aGUgaW5oZXJpdCBzdHJ1Y3R1cmVzLgorCisgICAgICAgIDx3aGF0PiA9PSBPSV9TSVpFX0lOQ0xVREVEOgorICAgICAgICAgICBUaGUgc2l6ZSBuZWVkZWQgZm9yIHRoZSBpbmNsdWRlIHN0cnVjdHVyZXMuCisKKyAgICAgICAgPHdoYXQ+ID09IE9JX1BST0dfU0laRToKKyAgICAgICAgICAgVGhlIHNpemUgb2YgdGhlIHByb2dyYW0gc3RydWN0dXJlLgorCisgICAgICAgIDx3aGF0PiA9PSBPSV9QUk9HX1NJWkVfVE9UQUw6CisgICAgICAgICAgIFRoZSB0b3RhbCBzaXplIG9mIHRoZSBwcm9ncmFtLgorCisKK0hJU1RPUlkKKyAgICAgICAgSW50cm9kdWNlZCBpbiBMRE11ZCAzLjIuNi4KKyAgICAgICAgQ2hhbmdlcyBpbiBMRE11ZCAzLjIuNzoKKyAgICAgICAgICAtIG5ldyBiYXNpYyByZXN1bHQgT0lCX1JFUExBQ0VELgorICAgICAgICAgIC0gYmFzaWMgcmVzdWx0IE9JQl9JU19XSVpBUkQgaXMgYWx3YXlzIDAgaWYgc2V0X2lzX3dpemFyZCgpCisgICAgICAgICAgICAgIGlzIG5vdCBhdmFpbGFibGUuCisgICAgICAgICAgLSBiYXNpYyByZXN1bHQgT0lCX0FQUFJPVkVEIGlzIGdvbmUuCisgICAgICAgIExETXVkIDMuMi44IGFkZGVkIE9JTV9EQVRBX1NJWkUgdG8gdGhlIHJlc3VsdCBvZiBPSU5GT19NRU1PUlkuCisgICAgICAgIExETXVkIDMuMi45IGFkZGVkIHRoZSBpbmRleCBtZWNoYW5pc20sIE9JTV9OVU1fSU5DTFVERVMsCisgICAgICAgICAgT0lNX05PX0lOSEVSSVQsIE9JTV9OT19TSEFET1csIE9JTV9OT19DTE9ORSwgT0lNX1NJWkVfU1RSSU5HU19EQVRBLAorICAgICAgICAgIE9JTV9TSVpFX1NUUklOR1NfVE9UQUwsIGFuZCBPSU1fREFUQV9TSVpFX1RPVEFMIHRvIHRoZSByZXN1bHQKKyAgICAgICAgICBvZiBPSU5GT19NRU1PUlkuCisgICAgICAgIExETXVkIDMuMy4zNzggYWRkZWQgdGhlIE9JTV9TSEFSRV9WQVJJQUJMRVMgdG8gdGhlIHJlc3VsdAorICAgICAgICAgIG9mIE9JTkZPX01FTU9SWS4KKyAgICAgICAgTERNdWQgMy4zLjY1NCBhZGRlZCB0aGUgT0lCX05FWFRfQ0xFQU5VUCB0byB0aGUgcmVzdWx0IG9mIE9JTkZPX0JBU0lDLgorICAgICAgICBMRE11ZCAzLjUuMCByZWRlc2lnbmVkIHRoZSB3aG9sZSBlZnVuLgorCitTRUUgQUxTTworICAgICAgICBjb25maWd1cmVfb2JqZWN0KEUpLCBpbnRlcmFjdGl2ZV9pbmZvKEUpLCBkcml2ZXJfaW5mbyhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vb2JqZWN0X25hbWUgYi9kb2MvZWZ1bi9vYmplY3RfbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmE4MmVkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vb2JqZWN0X25hbWUKQEAgLTAsMCArMSwyNiBAQAorU1lOT1BTSVM6CisgICAgc3RyaW5nIG9iamVjdF9uYW1lKCkKKyAgICBzdHJpbmcgb2JqZWN0X25hbWUob2JqZWN0IG9iKQorCitERVNDUklQVElPTjoKKyAgICBHZXQgdGhlIGZpbGUgbmFtZSBvZiBhbiBvYmplY3Qgb3IgaWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4gb2YgdGhlIGN1cnJlbnQKKyAgICBvYmplY3QuIElmIHRoZSBvYmplY3QgaXMgYSBjbG9uZWQgb2JqZWN0LCB0aGVuIGl0IHdpbGwgbm90IGhhdmUgYQorICAgIGNvcnJlc3BvbmRpbmcgZmlsZSBuYW1lLCBidXQgcmF0aGVyIGEgbmV3IG5hbWUgYmFzZWQgb24gdGhlIG9yaWdpbmFsCisgICAgZmlsZSBuYW1lLgorICAgICAgICAKKyAgICBUaGUgcmV0dXJuZWQgbmFtZSBhbHdheXMgYmVnaW5zIHdpdGggJy8nIChhYnNvbHV0ZSBwYXRoKSwKKyAgCWV4Y2VwdCB3aGVuIHRoZSBwYXJzZXIgcnVucyBpbiBDT01QQVQgKC1vKSBtb2RlLgorCitFWEFNUExFUzoKKyAgICBmaW5kX29iamVjdChvYmplY3RfbmFtZShvYikpID09IG9iICAgIAorICAgIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBiZSB0cnVlIGZvciBhbGwgb2JqZWN0cyBvYiB0aGF0IGFyZSBub3QKKyAgIAlkZXN0cnVjdGVkLgorICAgICAgICAKKyAgICBzaXplb2YoZXhwbG9kZShvYmplY3RfbmFtZShvYiksICIjIikpID09IDEgIAorICAgIFRoaXMgaXMgYWx3YXlzIHRydWUgaWYgb2IgaXMgYSBibHVlIHByaW50LgorICAgICAgICAKK1NFRSBBTFNPOgorICAgICAgICBmaW5kX29iamVjdChFKQorCisyOS4xMC4yMDA2IFplc3N0cmEKKwpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vb2JqZWN0X3RpbWUgYi9kb2MvZWZ1bi9vYmplY3RfdGltZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjRkOTFjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vb2JqZWN0X3RpbWUKQEAgLTAsMCArMSwxMCBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IG9iamVjdF90aW1lKCk7CisgICAgICAgIGludCBvYmplY3RfdGltZShvYmplY3Qgb2IpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBkaWUgWmVpdCwgenUgZGVyIGRhcyBPYmpla3QgPG9iPiBlcnN0ZWxsdCB3dXJkZS4gV2lyZCA8b2JqPgorICAgICAgICBuaWNodCBhbmdlZ2ViZW4sIHdpcmQgc3RhbmRhcmRtYWVzc2lnIHRoaXNfb2JqZWN0KCkgdmVyd2VuZGV0LgorCitTSUVIRSBBVUNICisgICAgICAgIHByb2dyYW1fdGltZShFKSwgcHJvZ3JhbV9uYW1lKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9vYmplY3RwIGIvZG9jL2VmdW4vb2JqZWN0cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjA3NThjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vb2JqZWN0cApAQCAtMCwwICsxLDkgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCBvYmplY3RwKG1peGVkIGFyZyk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IDEsIHdlbm4gPGFyZz4gZWluIE9iamVrdCBpc3QuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgY2xvbmVwKEUpLCBpbnRwKEUpLCBzdHJpbmdwKEUpLCBwb2ludGVycChFKSwgc3ltYm9scChFKSwKKyAgICAgICAgcmVmZXJlbmNlcChFKSwgc3ltYm9scChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vb3JfYml0cyBiL2RvYy9lZnVuL29yX2JpdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU0MDZlNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL29yX2JpdHMKQEAgLTAsMCArMSwyNyBAQAorU1lOT1BTSVMKKyAgICAgICAgc3RyaW5nIG9yX2JpdHMoc3RyaW5nIHN0cjEsIHN0cmluZyBzdHIyKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIDxzdHIxPiB1bmQgPHN0cjI+IHNpbmQgYmVpZGVzIEJpdHN0cmluZ3MuIERhcyBSZXN1bHRhdCB2b24gb3JfYml0cygpCisgICAgICAgIGlzdCBlaW4gQml0c3RyaW5nLCBkZXIgZGFzIGJpbmFlcmUgT2RlciB2b24gPHN0cjE+IHVuZCA8c3RyMj4KKyAgICAgICAgZW50aGFlbHQsIGQuaC4gZWluIFN0cmluZywgaW4gZGVtIGVpbiBCaXQgZ2VzZXR6dCBpc3QsIHdlbm4gZXMKKyAgICAgICAgaW4gPHN0cjE+IG9kZXIgPHN0cjI+IG9kZXIgaW4gYmVpZGVuIGdlc2V0enQgaXN0LgorCisgICAgICAgIEplZGVzIFplaWNoZW4gZW50aGFlbHQgNiBCaXRzLiBJbiBqZWRlbSBaZWljaGVuIGthbm4gZGVzaGFsYiBlaW5lCisgICAgICAgIFphaGwgdm9uIDAgYmlzIDYzIGdlc3BlaWNoZXJ0IHdlcmRlICgyXjY9NjQpLiBEYXMgZXJzdGUgWmVpY2hlbgorICAgICAgICBpc3QgZGVyIExlZXJzY2hsYWcgIiAiIG1pdCBkZW0gV2VydCAwLiBEYXMgZXJzdGUgWmVpY2hlbiBpbSBTdHJpbmcKKyAgICAgICAgaXN0IGplbmVzIG1pdCBkZW4gbmllZHJpZ3N0ZW4gQml0cyAoMC01KS4KKworQkVJU1BJRUwKKyAgICAgICAgc3RyaW5nIHMxLCBzMiwgczM7CisKKyAgICAgICAgczEgPSBzZXRfYml0KCIiLCAzKTsgczEgPSBzZXRfYml0KHMxLCAxNSk7ICAtPiBzMSBpcyAiKCAoIgorICAgICAgICBzMiA9IHNldF9iaXQoIiIsIDMpOyBzMiA9IHNldF9iaXQoczIsIDQpOyAgIC0+IHMyIGlzICI4IgorCisgICAgICAgIHMzID0gb3JfYml0cyhzMSwgczIpOworCisgICAgICAgIC0+IHMzIGlzIG5vdyAiOCAoIiwgaWUuIGEgYml0c3RyaW5nIHdpdGggYml0cyAzLCA0IGFuZCAxNSBzZXQuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgY2xlYXJfYml0KEUpLCBzZXRfYml0KEUpLCB0ZXN0X2JpdChFKSwgbmV4dF9iaXQoRSksIGxhc3RfYml0KEUpLAorICAgICAgICBjb3VudF9iaXRzKEUpLCBhbmRfYml0cyhFKSwgeG9yX2JpdHMoRSksIGludmVydF9iaXRzKEUpLCBjb3B5X2JpdHMoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3BhcnNlX2NvbW1hbmQgYi9kb2MvZWZ1bi9wYXJzZV9jb21tYW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYjc3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9wYXJzZV9jb21tYW5kCkBAIC0wLDAgKzEsMTMyIEBACitPUFRJT05BTAorU1lOT1BTSVMKKyAgICAgICAgaW50IHBhcnNlX2NvbW1hbmQgKHN0cmluZyBjbWQsIG9iamVjdCAgZW52LCBzdHJpbmcgZm10LCBtaXhlZCAmdmFyLCAuLi4pCisgICAgICAgIGludCBwYXJzZV9jb21tYW5kIChzdHJpbmcgY21kLCBvYmplY3QqIGFyciwgc3RyaW5nIGZtdCwgbWl4ZWQgJnZhciwgLi4uKQorCitERVNDUklQVElPTgorICAgICAgICBwYXJzZV9jb21tYW5kKCkgaXMgYmFzaWNhbGx5IGEgc3BpZmZlZCB1cCBzc2NhbmYgb3BlcmF0aW5nCisgICAgICAgIG9uIHdvcmQgYmFzaXMgYW5kIHRhcmdldGVkIGF0IHJlY29nbml6aW5nIG9iamVjdCBkZXNjcmlwdGlvbnMgZnJvbQorICAgICAgICBjb21tYW5kIHN0cmluZ3MuCisKKyAgICAgICAgVGhlIGVmdW4gdGFrZXMgdGhlIGNvbW1hbmQgc3RyaW5nIDxjbWQ+IGFuZCB0aGUgb2JqZWN0KHMpIDxlbnY+LzxhcnI+CisgICAgICAgIGFuZCB0cmllcyB0byBtYXRjaCBpdCBhZ2FpbnN0IHRoZSBmb3JtYXQgc3RyaW5nIDxmbXQ+LiBTdWNjZXNzZnVsbHkKKyAgICAgICAgbWF0Y2hlZCBlbGVtZW50cyBhcmUgYXNzaWduZWQgdG8gdGhlIHZhcmlhYmxlcyA8dmFyPi4uLi4gVGhlIHJlc3VsdAorICAgICAgICBmcm9tIHRoZSBlZnVuIGlzIDEgaWYgdGhlIGNvbW1hbmQgY291bGQgYmUgZnVsbHkgbWF0Y2hlZCwgYW5kIDAKKyAgICAgICAgb3RoZXJ3aXNlLgorCisgICAgICAgIElmIHRoZSBvYmplY3RzIGFyZSBnaXZlbiBhcyBhIHNpbmdsZSBvYmplY3QgPGVudj4sIHRoZSBlZnVuIG1hdGNoZXMKKyAgICAgICAgYWdhaW5zdCB0aGUgZ2l2ZW4gb2JqZWN0IGFuZCBhbGwgb2JqZWN0cyBjb250YWluZWQgdGhlcmVpbi4gT3RoZXJ3aXNlLAorICAgICAgICBpZiB0aGUgb2JqZWN0cyBhcmUgZ2l2ZW4gYXMgYW4gYXJyYXkgPGFycj4gb2Ygb2JqZWN0cywgdGhlIGVmdW4KKyAgICAgICAgbWF0Y2hlcyBvbmx5IGFnYWluc3QgdGhlIGdpdmVuIG9iamVjdHMuCisKKyAgICAgICAgVGhlIGZvcm1hdCBzdHJpbmcgPGZtdD4gY29uc2lzdHMgb2Ygd29yZHMsIHN5bnRhY3RpYyBtYXJrZXJzLCBhbmQKKyAgICAgICAgJS1kaXJlY3RpdmVzIGZvciB0aGUgdmFsdWVzIHRvIHBhcnNlIGFuZCByZXR1cm4gaW4gdGhlIHZhcmlhYmxlcy4KKyAgICAgICAgQSB0eXBpY2FsIGV4YW1wbGUgaXMgIiAnZ2V0JyAvICd0YWtlJyAlaSAiIG9yCisgICAgICAgICIgJ3NwcmF5JyAvICdwYWludCcgW3BhaW50XSAlaSAiLiBUaGUgZWxlbWVudHMgaW4gZGV0YWlsIGFyZToKKworICAgICAgICAgICAnd29yZCc6IG9ibGlnYXRvcnkgdGV4dAorICAgICAgICAgICBbd29yZF06IG9wdGlvbmFsIHRleHQKKyAgICAgICAgICAgLyAgICAgOiBBbHRlcm5hdGl2ZSBtYXJrZXIKKyAgICAgICAgICAgJW8gICAgOiBTaW5nbGUgaXRlbSwgb2JqZWN0CisgICAgICAgICAgICVzICAgIDogQW55IHRleHQKKyAgICAgICAgICAgJXcgICAgOiBBbnkgd29yZAorICAgICAgICAgICAlcCAgICA6IE9uZSBvZiBhIGxpc3Qgb2YgcHJlcG9zaXRpb25zLgorICAgICAgICAgICAgICAgICAgIElmIHRoZSB2YXJpYWJsZSBhc3NvY2lhdGVkIHdpdGggJXAgaXMgdXNlZCB0byBwYXNzCisgICAgICAgICAgICAgICAgICAgYSBsaXN0IG9mIHdvcmRzIHRvIHRoZSBlZnVuLCB0aGUgbWF0Y2hpbmcgd2lsbCB0YWtlCisgICAgICAgICAgICAgICAgICAgb25seSBhZ2FpbnN0IHRoaXMgbGlzdC4KKyAgICAgICAgICAgJWwgICAgOiBub24tY29tcGF0OiBMaXZpbmcgb2JqZWN0cworICAgICAgICAgICAgICAgICAgIGNvbXBhdDogYSBzaW5nbGUgbGl2aW5nIG9iamVjdAorICAgICAgICAgICAlaSAgICA6IEFueSBvYmplY3RzCisgICAgICAgICAgICVkICAgIDogTnVtYmVyID49IDAsIG9yIHdoZW4gZ2l2ZW4gdGV4dHVhbDogMC05OS4KKworICAgICAgICBBIDx3b3JkPiBpbiB0aGlzIGNvbnRleHQgaXMgYW55IHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgbm90IGNvbnRhaW5pbmcKKyAgICAgICAgYSBzcGFjZS4gJ2xpdmluZyBvYmplY3RzJyBhcmUgc2VhcmNoZWQgYnkgY2FsbHMgdG8gdGhlIChzaW11bCllZnVucworICAgICAgICBmaW5kX3BsYXllcigpIGFuZCBmaW5kX2xpdmluZygpOiBib3RoIGZ1bmN0aW9ucyBoYXZlIHRvIGFjY2VwdCBhIG5hbWUKKyAgICAgICAgYXMgYXJndW1lbnQgYW5kIHJldHVybiB0aGUgb2JqZWN0IGZvciB0aGlzIG5hbWUsIG9yIDAgaWYgdGhlcmUKKyAgICAgICAgaXMgbm9uZS4KKworICAgICAgICBUaGUgcmVzdWx0cyBhc3NpZ25lZCB0byB0aGUgdmFyaWFibGVzIGJ5IHRoZSAlLWRpcmVjdGl2ZXMgYXJlOgorCisgICAgICAgICAgICVvIDogcmV0dXJucyBhbiBvYmplY3QKKyAgICAgICAgICAgJXMgOiByZXR1cm5zIGEgc3RyaW5nIG9mIHdvcmRzCisgICAgICAgICAgICV3IDogcmV0dXJucyBhIHN0cmluZyBvZiBvbmUgd29yZAorICAgICAgICAgICAlcCA6IGlmIHBhc3NlZCBlbXB0eTogYSBzdHJpbmcKKyAgICAgICAgICAgICAgICBpZiBwYXNzZWQgYXMgYXJyYXkgb2Ygd29yZHM6IHZhclswXSBpcyB0aGUgbWF0Y2hlZCB3b3JkCisgICAgICAgICAgICVpIDogcmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBmb2xsb3dpbmcgY29udGVudDoKKyAgICAgICAgICAgICAgICAgIFswXTogaW50OiB0aGUgY291bnQvbnVtYmVyIHJlY29nbml6ZWQgaW4gdGhlIG9iamVjdCBzcGVjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiAwOiBhIGNvdW50IChlLmcuICd0aHJlZScsICc0JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IDA6IGFuIG9yZGluYWwgKGUuZy4gJ3NlY29uZCcsICd0aGlyZCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOiAnYWxsJyBvciBhIGdlbmVyaWMgcGx1cmFsIHN1Y2ggYXMgJ2FwcGxlcycKKyAgICAgICAgICAgICAgICAgIFsxLi5dOiBvYmplY3Q6IGFsbCghKSBvYmplY3RzIG1hdGNoaW5nIHRoZSBpdGVtIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhlIDxlbnY+IGZvcm0gdGhpcyBtYXkgYmUgdGhlIHdob2xlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmUgaW52ZW50b3J5IG9mIHRoZSA8ZW52PiBvYmplY3QuCisgICAgICAgICAgICAgICAgSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBpbnRlcnByZXQgdGhlIHJlY29nbml6ZWQgbnVtZXJhbAorICAgICAgICAgICAgICAgIGFuZCB0byBhcHBseSBpdCBvbiB0aGUgbGlzdCBvZiBtYXRjaGVkIG9iamVjdHMuCisgICAgICAgICAgICVsIDogbm9uLWNvbXBhdDogYXMgJWksIGV4Y2VwdCB0aGF0IG9ubHkgbGl2aW5nIG9iamVjdHMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQuCisgICAgICAgICAgICAgICAgY29tcGF0OiBhcyAlbywgZXhjZXB0IHRoYXQgb25seSBhIGxpdmluZyBvYmplY3QgaXMgcmV0dXJuZWQuCisKKyAgICAgICAgJWkgKGFuZCBub24tY29tcGF0LSVsKSBtYXRjaCBkZXNjcmlwdGlvbnMgbGlrZSAndGhyZWUgcmVkIHJvc2VzJywKKyAgICAgICAgJ2FsbCBuYXN0eSBidWdzJyBvciAnc2Vjb25kIGJsdWUgc3dvcmQnLgorCisgICAgICAgIE5vdGU6IFBhdHRlcm5zIG9mIHR5cGU6ICIlcyAldyAlaSIgbWlnaHQgbm90IHdvcmsgYXMgb25lIHdvdWxkIGV4cGVjdC4KKyAgICAgICAgJXcgd2lsbCBhbHdheXMgc3VjY2VlZCBzbyB0aGUgYXJnIGNvcnJlc3BvbmRpbmcgdG8gJXMgd2lsbCBhbHdheXMgYmUKKyAgICAgICAgZW1wdHkuCisKKyAgICAgICAgVG8gbWFrZSB0aGUgZWZ1biB1c2VmdWwgaXQgbXVzdCBoYXZlIGEgY2VydGFpbiBzdXBwb3J0IGZyb20gdGhlCisgICAgICAgIG11ZGxpYjogaXQgY2FsbHMgYSBzZXQgb2YgZnVuY3Rpb25zIGluIG9iamVjdHMgdG8gZ2V0IHRoZQorICAgICAgICBpbmZvcm1hdGlvbiBpdCBuZWVkcyB0byBwYXJzZSBhIHN0cmluZy4KKworICAgICAgICAgIDEuIHN0cmluZyAqcGFyc2VfY29tbWFuZF9pZF9saXN0KCkKKyAgICAgICAgICAgICAgTm9ybWFsIHNpbmd1bGFyIG5hbWVzIG9mIHRoZSBvYmplY3QuCisKKyAgICAgICAgICAyLiBzdHJpbmcgKnBhcnNlX2NvbW1hbmRfcGx1cmFsX2lkX2xpc3QoKSAtIG9wdGlvbmFsCisgICAgICAgICAgICAgIFBsdXJhbCBmb3JtcyBvZiB0aGUgbmFtZXMgcmV0dXJuZWQgYnkgMS4KKyAgICAgICAgICAgICAgSWYgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGV4aXN0LCB0aGUgcGFyc2VyIHRyaWVzIHRvIHBsdXJhbGl6ZQorICAgICAgICAgICAgICB0aGUgbmFtZXMgcmV0dXJuZWQgYnkgMS4KKworICAgICAgICAgIDMuIHN0cmluZyAqcGFyc2VfY29tbWFuZF9hZGplY3Rpdl9pZF9saXN0KCkgLSAgb3B0aW9uYWwKKyAgICAgICAgICAgICAgQWxsIGFkamVjdGl2ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0LgorCisgICAgICAgIEFsbCBuYW1lcyBhbmQgYWRqZWN0aXZlcyBtYXkgY29uc2lzdCBvZiBzZXZlcmFsIHdvcmRzIHNlcGFyYXRlZAorICAgICAgICBieSBzcGFjZXMuCisKKyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBleGlzdCBpbiBhbGwgb2JqZWN0cyBhbmQgYXJlIHRoZXJlZm9yZSBiZXN0CisgICAgICAgIHB1dCBpbnRvIGEgbWFuZGF0b3J5IGluaGVyaXQgZmlsZSAoZS5nLiAvc3RkL29iamVjdC5jKS4KKworICAgICAgICBJbiBhZGRpdGlvbiB0aGUgbWFzdGVyIG9iamVjdCBtYXkgb2ZmZXIgdGhlIHNhbWUgZnVuY3Rpb25zIHRvIHByb3ZpZGUKKyAgICAgICAgcmVhc29uYWJsZSBkZWZhdWx0cyAobGlrZSAndGhpbmcnIGFzIGdlbmVyaWMgc2luZ3VsYXIgbmFtZSk6CisKKyAgICAgICAgICAgICBzdHJpbmcgKnBhcnNlX2NvbW1hbmRfaWRfbGlzdCgpCisgICAgICAgICAgICAgICAtIFdvdWxkIG5vcm1hbGx5IHJldHVybjogKHsgIm9uZSIsICJ0aGluZyIgfSkKKworICAgICAgICAgICAgIHN0cmluZyAqcGFyc2VfY29tbWFuZF9wbHVyYWxfaWRfbGlzdCgpCisgICAgICAgICAgICAgICAtIFdvdWxkIG5vcm1hbGx5IHJldHVybjogKHsgIm9uZXMiLCAidGhpbmdzIiwgInRoZW0iIH0pCisKKyAgICAgICAgICAgICBzdHJpbmcgKnBhcnNlX2NvbW1hbmRfYWRqZWN0aXZfaWRfbGlzdCgpCisgICAgICAgICAgICAgICAtIFdvdWxkIG5vcm1hbGx5IHJldHVybiAoeyAiaWZmaXNoIiB9KQorCisgICAgICAgIFR3byBhZGRpdGlvbmFsIGZ1bmN0aW9ucyBpbiB0aGUgbWFzdGVyIG9iamVjdCBwcm92aWRlIHRoZSBkZWZhdWx0CisgICAgICAgIGxpc3Qgb2YgcHJlcG9zaXRpb25zIChuZWVkZWQgZm9yICVwKSBhbmQgdGhlIHNpbmdsZSAnYWxsJyB3b3JkOgorCisgICAgICAgICAgICAgc3RyaW5nICpwYXJzZV9jb21tYW5kX3ByZXBvc19saXN0KCkKKyAgICAgICAgICAgICAgIC0gV291bGQgbm9ybWFsbHkgcmV0dXJuOiAoeyAiaW4iLCAib24iLCAidW5kZXIiLCAiYmVoaW5kIiwKKyAgICAgICAgICAgICAgICAgImJlc2lkZSIgfSkKKworICAgICAgICAgICAgIHN0cmluZyBwYXJzZV9jb21tYW5kX2FsbF93b3JkKCkKKyAgICAgICAgICAgICAgIC0gV291bGQgbm9ybWFsbHkgcmV0dXJuOiAiYWxsIgorCisKKyAgICAgICAgaW50IHBhcnNlX2NvbW1hbmQoc3RyaW5nLCBvYmplY3R8b2JqZWN0Kiwgc3RyaW5nLCBkZXN0YXJncy4uLikKKworCitFWEFNUExFCisgICAgICAgIG9iamVjdCAqaXRlbXM7CisgICAgICAgIHBhcnNlX2NvbW1hbmQoICJ0YWtlIGFwcGxlIixlbnZpcm9ubWVudCh0aGlzX3BsYXllcigpKQorICAgICAgICAgICAgICAgICAgICAgLCAiICdnZXQnIC8gJ3Rha2UnICVpICIsaXRlbXMpOworCitISVNUT1JZCisgICAgICAgIExETXVkIDMuMy4yNTggcmVtb3ZlZCB0aGUgY29tcGF0LW1vZGUgcGFyc2VfY29tbWFuZCgpLgorCitTRUUgQUxTTworICAgICAgICBzc2NhbmYoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3Blb3BsZSBiL2RvYy9lZnVuL3Blb3BsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDRjM2JmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcGVvcGxlCkBAIC0wLDAgKzEsOCBAQAordm9pZCBwZW9wbGUoKQorCitBIGZ1bmN0aW9uIHRoYXQgd2lsbCBsaXN0IGFsbCBpbnRlcmFjdGl2ZSBwbGF5ZXJzLCBhbmQgc29tZSBpbmZvIGFib3V0IHRoZW0uIAorVGhpcyBmdW5jdGlvbiBpcyBub3JtYWxseQorCitjb25uZWN0ZWQgdG8gdGhlIHBlb3BsZSBjb21tYW5kLCB0aGF0IHdpemFyZHMgaGF2ZS4KKworVEhJUyBGVU5DVElPTiBJUyBPQlNPTEVURS4gTE9PSyBBVCB1c2VycygpIElOU1RFQUQuCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9wZ19jbG9zZSBiL2RvYy9lZnVuL3BnX2Nsb3NlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNGY4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9wZ19jbG9zZQpAQCAtMCwwICsxLDE5IEBACitPUFRJT05BTAorU1lOT1BTSVMKKyAgICAgICAgdm9pZCBwZ19jbG9zZSgpCisKK0RFU0NSSVBUSU9OCisgICAgICAgIENsb3NlIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIGZvciB0aGUgY3VycmVudCBvYmplY3QsIGlmIHRoZXJlIGlzIG9uZS4KKworICAgICAgICBUaGUgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIG9ubHkgaWYgdGhlIGRyaXZlciBpcyBjb21waWxlZCB3aXRoCisgICAgICAgIFBvc3RncmVTUUwgc3VwcG9ydC4gSW4gdGhhdCBjYXNlLCBfX1BHU1FMX18gaXMgZGVmaW5lZC4KKworICAgICAgICBUaGUgZWZ1biB0cmlnZ2VycyBhIHByaXZpbGVnZSB2aW9sYXRpb24gKCJwZ3NxbCIsICJwZ19jbG9zZSIpLgorCitISVNUT1JZCisgICAgICAgIEFkZGVkIGluIDMuMy40NDUuCisgICAgICAgIExETXVkIDMuMy42NDAgYWRkZWQgdGhlIHByaXZpbGVnZSB2aW9sYXRpb24uCisKK1NFRSBBTFNPCisgICAgICAgIHBnc3FsKEMpLCBwZ19jb25uZWN0KEUpLCBwZ19jb252X3N0cmluZyhFKSwgcGdfcXVlcnkoRSksIHBnX3BlbmRpbmcoRSksCisgICAgICAgIHByaXZpbGVnZV92aW9sYXRpb24oTSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3BnX2Nvbm5lY3QgYi9kb2MvZWZ1bi9wZ19jb25uZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZDRkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9wZ19jb25uZWN0CkBAIC0wLDAgKzEsMzkgQEAKK09QVElPTkFMCitTWU5PUFNJUworICAgICAgICBpbnQgcGdfY29ubmVjdCAoc3RyaW5nIGNvbm4sIHN0cmluZyBmdW4pCisgICAgICAgIGludCBwZ19jb25uZWN0IChzdHJpbmcgY29ubiwgc3RyaW5nIGZ1biwgc3RyaW5nfG9iamVjdCBvYmosIG1peGVkIGV4dHJhLCAuLi4pCisgICAgICAgIGludCBwZ19jb25uZWN0IChzdHJpbmcgY29ubiwgY2xvc3VyZSBjbCwgbWl4ZWQgZXh0cmEsIC4uLikKKworREVTQ1JJUFRJT04KKyAgICAgICAgT3BlbiBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gYXMgZGlyZWN0ZWQgYnkgPGNvbm4+LCBhbmQgYXNzaWduIHRoZQorICAgICAgICBjYWxsYmFjayBmdW5jdGlvbiA8ZnVuPi88Y2w+IHdpdGggdGhlIG9wdGlvbmFsIDxleHRyYT4gcGFyYW1ldGVycworICAgICAgICB0byBpdC4KKworICAgICAgICBUaGUgb2JqZWN0IGhvbGRpbmcgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGJlY29tZXMgdGhlIGNvbnRyb2xsaW5nCisgICAgICAgIG9iamVjdDsgb2Jpb3VzbHkgaXQgaXMgYW4gZXJyb3IgdG8gYXNzaWduIG1vcmUgdGhhbiBvbmUgY29ubmVjdGlvbgorICAgICAgICB0byB0aGUgc2FtZSBjb250cm9sbGluZyBvYmplY3QuCisKKyAgICAgICAgVGhlIDxjb25uPiBzdHJpbmcgaXMgaW4gdGhlIGZvcm1hdCBhY2NlcHRlZCBieSBQb3N0Z3JlcycKKyAgICAgICAgUFFjb25uZWN0U3RhcnQoKSBBUEkgZnVuY3Rpb25zLiBQYXNzIGFuIGVtcHR5IHN0cmluZyB0byB1c2UgdGhlCisgICAgICAgIGRlZmF1bHQgb3B0aW9ucywgb3IgYSBzdHJpbmcgaG9sZGluZyB0aGUgJzxrZXk+PTx2YWx1ZT4nIG9wdGlvbnMKKyAgICAgICAgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuCisgICAgICAgIAorICAgICAgICBUaGUgbW9zdCB1c2VmdWwgb3B0aW9ucyBhcmU6CisgICAgICAgICAgZGJuYW1lOiAgIFRoZSBkYXRhYmFzZSBuYW1lCisgICAgICAgICAgdXNlcjogICAgIFRoZSB1c2VyIG5hbWUgdG8gY29ubmVjdCBhcy4KKyAgICAgICAgICBwYXNzd29yZDogUGFzc3dvcmQgdG8gYmUgdXNlZC4KKworICAgICAgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhbmQgLTEgb24gZmFpbHVyZS4KKworICAgICAgICBUaGUgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIG9ubHkgaWYgdGhlIGRyaXZlciBpcyBjb21waWxlZCB3aXRoCisgICAgICAgIFBvc3RncmVTUUwgc3VwcG9ydC4gSW4gdGhhdCBjYXNlLCBfX1BHU1FMX18gaXMgZGVmaW5lZC4KKworICAgICAgICBUaGUgZWZ1biB0cmlnZ2VycyBhIHByaXZpbGVnZSB2aW9sYXRpb24gKCJwZ3NxbCIsICJwZ19jb25uZWN0IikuCisKK0hJU1RPUlkKKyAgICAgICAgQWRkZWQgaW4gMy4zLjQ0NS4KKyAgICAgICAgTERNdWQgMy4zLjY0MCBhZGRlZCB0aGUgcHJpdmlsZWdlIHZpb2xhdGlvbi4KKworU0VFIEFMU08KKyAgICAgICAgcGdzcWwoQyksIHBnX3F1ZXJ5KEUpLCBwZ19wZW5kaW5nKEUpLCBwZ19jb252X3N0cmluZyhFKSwgcGdfY2xvc2UoRSksCisgICAgICAgIHByaXZpbGVnZV92aW9sYXRpb24oTSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3BnX2NvbnZfc3RyaW5nIGIvZG9jL2VmdW4vcGdfY29udl9zdHJpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg0OWQwNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3BnX2NvbnZfc3RyaW5nCkBAIC0wLDAgKzEsMjAgQEAKK09QVElPTkFMCitTWU5PUFNJUworICAgICAgICBzdHJpbmcgcGdfY29udl9zdHJpbmcoc3RyaW5nIHN0cikKKworREVTQ1JJUFRJT04KKyAgICAgICAgQ29udmVydCB0aGUgc3RyaW5nIDxzdHI+IGludG8gYSBzdHJpbmcgdGhhdCBpcyBjb3JyZWN0bHkgaW50ZXJwcmV0YXRlZAorICAgICAgICBmb3IgdXNhZ2UgYXMgYSBzdHJpbmcgaW4gcGdfcXVlcnkoKSwgZS5nLiAnIGlzIHJlcGxhY2VkIHdpdGggXCcgYW5kIHNvCisgICAgICAgIG9uLgorCisgICAgICAgIFRoZSBmdW5jdGlvbiBpcyBhdmFpbGFibGUgb25seSBpZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIHdpdGgKKyAgICAgICAgUG9zdGdyZVNRTCBzdXBwb3J0LiBJbiB0aGF0IGNhc2UsIF9fUEdTUUxfXyBpcyBkZWZpbmVkLgorCisgICAgICAgIFRoZSBlZnVuIHRyaWdnZXJzIGEgcHJpdmlsZWdlIHZpb2xhdGlvbiAoInBnc3FsIiwgInBnX2Nvbm5lY3QiKS4KKworSElTVE9SWQorICAgICAgICBBZGRlZCBpbiAzLjMuNzA4LgorCitTRUUgQUxTTworICAgICAgICBwZ3NxbChDKSwgcGdfcXVlcnkoRSksIHBnX3BlbmRpbmcoRSksIHBnX2NvbnZfc3RyaW5nKEUpLCBwZ19jbG9zZShFKSwKKyAgICAgICAgcHJpdmlsZWdlX3Zpb2xhdGlvbihNKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vcGdfcGVuZGluZyBiL2RvYy9lZnVuL3BnX3BlbmRpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhNmRjYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3BnX3BlbmRpbmcKQEAgLTAsMCArMSwyMiBAQAorT1BUSU9OQUwKK1NZTk9QU0lTCisgICAgICAgIGludCBwZ19wZW5kaW5nICgpCisgICAgICAgIGludCBwZ19wZW5kaW5nIChvYmplY3Qgb2JqKQorCitERVNDUklQVElPTgorICAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBwZW5kaW5nIHF1ZXJpZXMgZm9yIHRoZSBjb25uZWN0aW9uIG9uIHRoZSBnaXZlbgorICAgICAgICBvYmplY3QgPG9iaj4gKGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgb2JqZWN0KS4gVGhlIG9iamVjdCBoYXMgbm8KKyAgICAgICAgZGF0YWJhc2UgY29ubmVjdGlvbiwgcmV0dXJuIC0xLgorCisgICAgICAgIFRoZSBmdW5jdGlvbiBpcyBhdmFpbGFibGUgb25seSBpZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIHdpdGgKKyAgICAgICAgUG9zdGdyZVNRTCBzdXBwb3J0LiBJbiB0aGF0IGNhc2UsIF9fUEdTUUxfXyBpcyBkZWZpbmVkLgorCisgICAgICAgIFRoZSBlZnVuIHRyaWdnZXJzIGEgcHJpdmlsZWdlIHZpb2xhdGlvbiAoInBnc3FsIiwgInBnX3BlbmRpbmciKS4KKworSElTVE9SWQorICAgICAgICBBZGRlZCBpbiAzLjMuNDQ1LgorICAgICAgICBMRE11ZCAzLjMuNjQwIGFkZGVkIHRoZSBwcml2aWxlZ2UgdmlvbGF0aW9uLgorCitTRUUgQUxTTworICAgICAgICBwZ3NxbChDKSwgcGdfY29ubmVjdChFKSwgcGdfY29udl9zdHJpbmcoRSksIHBnX3F1ZXJ5KEUpLCBwZ19jbG9zZShFKSwKKyAgICAgICAgcHJpdmlsZWdlX3Zpb2xhdGlvbihNKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vcGdfcXVlcnkgYi9kb2MvZWZ1bi9wZ19xdWVyeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTVmMmNjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcGdfcXVlcnkKQEAgLTAsMCArMSwyOCBAQAorT1BUSU9OQUwKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxwZ3NxbC5oPgorCisgICAgICAgIGludCBwZ19xdWVyeSAoc3RyaW5nIHF1ZXJ5KQorICAgICAgICBpbnQgcGdfcXVlcnkgKHN0cmluZyBxdWVyeSwgaW50IGZsYWdzKQorCitERVNDUklQVElPTgorICAgICAgICBRdWV1ZSBhIG5ldyBxdWVyeSA8cXVlcnk+IHRvIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIG9uIHRoZSBjdXJyZW50CisgICAgICAgIG9iamVjdC4gUmV0dXJuIHRoZSB1bmlxdWUgaWQgb2YgdGhlIHF1ZXJ5LiBUaGUgcXVlcnkgcmVzdWx0IGl0c2VsZgorICAgICAgICB3aWxsIGJlIHBhc3NlZCBhcyBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisKKyAgICAgICAgPGZsYWdzPiBjYW4gYmUgb25lIG9mIHRoZXNlIHZhbHVlczoKKyAgICAgICAgICBQR19SRVNVTFRfQVJSQVk6IFBhc3MgdGhlIHF1ZXJ5IHJlc3VsdCBhcyBhcnJheS4KKyAgICAgICAgICBQR19SRVNVTFRfTUFQOiAgIFBhc3MgdGhlIHF1ZXJ5IHJlc3VsdCBhcyBtYXBwaW5nLgorCisgICAgICAgIFRoZSBmdW5jdGlvbiBpcyBhdmFpbGFibGUgb25seSBpZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIHdpdGgKKyAgICAgICAgUG9zdGdyZVNRTCBzdXBwb3J0LiBJbiB0aGF0IGNhc2UsIF9fUEdTUUxfXyBpcyBkZWZpbmVkLgorCisgICAgICAgIFRoZSBlZnVuIHRyaWdnZXJzIGEgcHJpdmlsZWdlIHZpb2xhdGlvbiAoInBnc3FsIiwgInBnX3F1ZXJ5IikuCisKK0hJU1RPUlkKKyAgICAgICAgQWRkZWQgaW4gMy4zLjQ0NS4KKyAgICAgICAgTERNdWQgMy4zLjY0MCBhZGRlZCB0aGUgcHJpdmlsZWdlIHZpb2xhdGlvbi4KKworU0VFIEFMU08KKyAgICAgICAgcGdzcWwoQyksIHBnX2Nvbm5lY3QoRSksIHBnX2NvbnZfc3RyaW5nKEUpLCBwZ19wZW5kaW5nKEUpLCBwZ19jbG9zZShFKSwKKyAgICAgICAgcHJpdmlsZWdlX3Zpb2xhdGlvbihNKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vcG9pbnRlcnAgYi9kb2MvZWZ1bi9wb2ludGVycApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmYyYzJjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcG9pbnRlcnAKQEAgLTAsMCArMSw5IEBACitTWU5PUFNJUworICAgICAgICBpbnQgcG9pbnRlcnAobWl4ZWQgYXJnKQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCAxLCB3ZW5uIGRhcyBBcmd1bWVudCBlaW4gRmVsZCAoQXJyYXkpIGlzdCwgYW5zb25zdGVuIDAuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgY2xvc3VyZXAoRSksIGZsb2F0cChFKSwgbWFwcGluZ3AoRSksIG9iamVjdHAoRSksIGludHAoRSksCisgICAgICAgIHJlZmVyZW5jZXAoRSksIHN0cmluZ3AoRSksIHN5bWJvbHAoRSksIGNsb25lcChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vcG93IGIvZG9jL2VmdW4vcG93Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZmY1ODYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9wb3cKQEAgLTAsMCArMSwxNiBAQAorU1lOT1BTSVMKKyAgICAgICAgZmxvYXQgcG93KGludHxmbGFvdCBiYXNlLCBpbnR8Zmxhb3QgZXhwKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIERpZSBQb3RlbnpmdW5rdGlvbi4gU2llIGxpZWZlcnQgZGFzIFJlc3VsdGF0IHZvbiAiPGJhc2U+IGhvY2ggPGV4cD4iLgorCitCRUlTUElFTAorICAgICAgICBwb3coLTIsIDMpIC0+IGxpZWZlcnQgLTguMAorICAgICAgICBwb3coOCwgMS4wLzMuMCkgLT4gbGllZmVydCAyLjAKKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjcuCisgICAgICAgIExETXVkIDMuMi45LiBlcmxhdWJ0ZSBuZXUgSW50ZWdlciBhbHMgQXJndW1lbnRlLgorCitTSUVIRSBBVUNICisgICAgICAgIGV4cChFKSwgbG9nKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9wcmVzZW50IGIvZG9jL2VmdW4vcHJlc2VudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjdkOGQzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcHJlc2VudApAQCAtMCwwICsxLDg0IEBACitTWU5PUFNJUworICAgICAgICBvYmplY3QgcHJlc2VudChzdHJpbmcgc3RyKQorICAgICAgICBvYmplY3QgcHJlc2VudChzdHJpbmcgc3RyLCBpbnQgbikKKyAgICAgICAgb2JqZWN0IHByZXNlbnQoc3RyaW5nIHN0ciwgb2JqZWN0IGVudikKKyAgICAgICAgb2JqZWN0IHByZXNlbnQoc3RyaW5nIHN0ciwgaW50IG4sIG9iamVjdCBlbnYpCisKKyAgICAgICAgb2JqZWN0IHByZXNlbnQob2JqZWN0IG9iKQorICAgICAgICBvYmplY3QgcHJlc2VudChvYmplY3Qgb2IsIG9iamVjdCBlbnYpCisKK0JFU0NIUkVJQlVORworICAgICAgICBXZW5uIGVpbiBPYmpla3QgbWl0IGRlciBJZCA8c3RyPiBzaWNoIGltIEludmVudGFyIG9kZXIgaW4gZGVyIFVtZ2VidW5nCisgICAgICAgIHZvbiB0aGlzX29iamVjdCgpIGJlZmluZGV0LCB3aXJkIGVzIHp1cnVlY2sgZ2VsaWVmZXJ0LgorICAgICAgICAKKyAgICAgICAgSXN0IGRhcyBBcmd1bWVudCA8bj4gZ2VnZWJlbiwgd2lyZCBkYXMgbi10ZSBPYmpla3QgbWl0IE5hbWVuIDxpZD4KKyAgICAgICAgenVydWVjayBnZWxpZWZlcnQuIERhcyBoZWlzc3QsIGRlciBEcml2ZXIgZnVlaHJ0IGZ1ZXIgYWxsZSBPYmpla3RlCisgICAgICAgIGltIEludmVudGFyIHVuZCBpbiBkZXIgVW1nZWJ1bmcgdm9uIHRoaXNfb2JqZWN0KCkgZGllIEZ1bmt0aW9uCisgICAgICAgIGlkKHN0cikgYXVzLCBiaXMgZWluIFRyZWZmZXIgZXJ6aWVsdCB3aXJkICh3ZW5uIHVlYmVyaGF1cHQpLgorCisgICAgICAgIElzdCA8bj4gbmljaHQgZ2VnZWJlbiwgYWJlciA8c3RyPiBoYXQgZGllIEZvcm0gIjxpZD4gPG4+IiAsIHdpcmQKKyAgICAgICAgZWJlbmZhbGxzIGRhcyBuLXRlIE9iamVrdCBtaXQgTmFtZW4gPGlkPiB6dXJ1ZWNrZ2VsaWVmZXJ0LgorCisgICAgICAgIEVzIGlzdDogaWQoc3RyKSB7IHJldHVybiBzdHIgPT0gPG5hbWU+OyB9CisKKyAgICAgICAgPHN0cj4ga2FubiBhdWNoIGVpbiBPYmpla3QgKGFuc3RhdHQgZWluZW0gb2JqZWN0X25hbWUoKSkgc2Vpbiwgd2FzIGRlbgorICAgICAgICBUZXN0IHNjaG5lbGxlciB1bmQgZWluZmFjaGVyIG1hY2h0LgorCisgICAgICAgIERhcyBBcmd1bWVudCA8ZW52PiBpc3Qgb3B0aW9uYWwuIDxlbnY+IGdpYnQgYW4sIHdvIG5hY2ggPHN0cj4gZ2VzdWNodAorICAgICAgICB3aXJkLiBOdXIgZGFzIEludmVudG9yeSB2b24gPGVudj4gd2lyZCBkdXJjaHN1Y2h0LCBuaWNodCBqZWRvY2ggZGVzc2VuCisgICAgICAgIFVtZ2VidW5nLiBPZnRtYWxzIHdpcmQgZnVlciA8ZW52PiB0aGlzX3BsYXllcigpIGdlc2V0enQuCisKKworQU5NRVJLVU5HCisgICAgICAgIERpZXNlIGVmdW4ga2FubiB1LlUuIF9zZWhyXyB0ZXVlciBzZWluISBCaXR0ZSBzY2hhdXQgZXVjaCBhdWYgamVkZW4KKyAgICAgICAgRmFsbCBhdWNoIGRpZSBlZnVuIHByZXNlbnRfY2xvbmUoKSBhbiB1bmQgc2NoYXV0LCBvYiBkaWUgZXZ0bC4gZGFzCisgICAgICAgIGthbm4sIHdhcyBpaHIgbWFjaGVuIHdvbGx0LiBwcmVzZW50X2Nsb25lKCkgaXN0IGVyaGVibGljaCBiaWxsaWdlci4KKworICAgICAgICBXZW5uIGRpZSBlZnVuIHNvd29obCBpbiB0aGlzX29iamVjdCgpIGFscyBhdWNoIGRlc3NlbiBVbWdlYnVuZworICAgICAgICBzdWNodCwgd2VyZGVuLCBzb3dlaXQgZXMgZGllIE51bWVyaWVydW5nIGJldHJpZmZ0LCBkaWUgYmVpZGVuCisgICAgICAgIFVtZ2VidW5nZW4genVzYW1tZW5oYWVuZ2VuZCBiZXRyYWNodGV0LgorCitCRUlTUElFTEUKKyAgICAgICAgcHJlc2VudCgiY2hlc3QiKTsKKyAgICAgICAgICAtLT4gZmluZGV0IGRhcyBlcnN0ZSAnY2hlc3QnIE9iamVrdAorCisgICAgICAgIHByZXNlbnQoImNoZXN0IDIiKTsKKyAgICAgICAgICAtLT4gZmluZGV0IGRhcyB6d2VpdGUgJ2NoZXN0JyBPYmpla3QKKworICAgICAgICBwcmVzZW50KCJjaGVzdCAyIiwgMSk7CisgICAgICAgICAgLS0+IGZpbmRldCBkYXMgZXJzdGUgJ2NoZXN0IDInIE9iamVrdAorCisgICAgICAgIFdlbm4gc2ljaCBlaW5lICJjaGVzdCIgaW0gdGhpc19vYmplY3QoKSBiZWZpbmRldCwgdW5kIHp3ZWkKKyAgICAgICAgYXVzc2VyaGFsYjoKKyAgICAgICAgICBwcmVzZW50KCJjaGVzdCIsIDEpIC0+IGZpbmRldCBkaWUgY2hlc3QgaW0gT2JqZWt0CisgICAgICAgICAgcHJlc2VudCgiY2hlc3QiLCAyKSAtPiBmaW5kZXQgZGllIGVyc3RlIGNoZXN0IGF1c3NlcmhhbGIKKyAgICAgICAgICBwcmVzZW50KCJjaGVzdCIsIDMpIC0+IGZpbmRldCBkaWUgendlaXRlIGNoZXN0IGF1c3NlcmhhbGIKKyAgICAgICAgCisgICAgICAgIFdlbm4gZWluIE9iamVrdCBkaWUgRm9ydW0gIjxpZD4gPG4+IiBpbiBWZXJiaW5kdW5nIG1pdCBlaW5lbSBzZWxic3QKKyAgICAgICAgdWViZXIgYWRkX2FjdGlvbigpIGdlc2V0enRlbiBWZXJiIHVudGVyc3R1ZXR6ZW4gc29sbCAoZGFtaXQgei4gQi4KKyAgICAgICAgIm9lZmZuZSBLaXN0ZSAzIiBmdW5rdGlvbmllcnQpLCBrYW5uIGRhcyBmb2xnZW5kZXJtYXNzZW4gZ2Vsb2VzdAorICAgICAgICB3ZXJkZW46CisKKyAgICAgICAgICAgIHZvaWQgaW5pdCgpIHsgYWRkX2FjdGlvbigib2VmZm5lX2tpc3RlIiwgIm9lZmZuZSIpOyB9CisKKyAgICAgICAgICAgIGludCBvZWZmbmVfa2lzdGUoc3RyaW5nIHN0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZihwcmVzZW50KHN0cikgIT0gdGhpc19vYmplY3QoKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsgLyogbmljaHQgZGllc2UgS2lzdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCitISVNUT1JZCisgICAgICAgIExETXVkIDMuMi4xMS8zLjMuNjEwIGZ1ZWhydGUgZGllIChzdHIsIG4pLUZvcm0gZWluLgorICAgICAgICBMRE11ZCAzLjMuNzEzIGFlbmRlcnRlIGRpZSBOdW1lcmllcnVuZyB3ZW5uIHNvd29obCBJbnZlbnRvcnkKKyAgICAgICAgICBhbHMgYXVjaCBVbWdlYnVuZyBkdXJjaHN1Y2h0IHdlcmRlbi4gSW4gZGVyIHZvcmhlcmlnZW4KKyAgICAgICAgICBJbXBsZW1lbnRpZXJ1bmcgd3VyZGUgZWluZSBOdW1lcmllcnVuZyBhdWYgYmVpZGVuIFVtZ2VidW5nZW4KKyAgICAgICAgICBlaW56ZWxuIGFuZ2V3YW5kdCwgd2FzIHp1ciBGb2xnZSBoYXR0ZSwgZGFzcyBuaWVkZXJlIE9iamVrdGUKKyAgICAgICAgICBpbiBkZXIgYWV1c3NlcmVuIFVtZ2VidW5nIG5pY2h0IGdlZnVuZGVuIHdlcmRlbiBrb2VubnRlbiwgZGEKKyAgICAgICAgICBzaWUgdm9uIGRlbiBPYmpla3RlbiBpbiBJbm5lcmVuIHZlcmRlY2t0IHd1cmRlbi4KKworU0lFSEUgQVVDSAorICAgICAgICBtb3ZlX29iamVjdChFKSwgZW52aXJvbm1lbnQoRSksIHRoaXNfb2JqZWN0KEUpLCBwcmVzZW50X2Nsb25lKEUpLAorICAgICAgICBpZChBKSwgaW5pdChBKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vcHJlc2VudF9jbG9uZSBiL2RvYy9lZnVuL3ByZXNlbnRfY2xvbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q2NDQ4OAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3ByZXNlbnRfY2xvbmUKQEAgLTAsMCArMSw0MSBAQAorVk9STEFFVUZJRworU1lOT1BTSVMKKyAgICAgICAgb2JqZWN0IHByZXNlbnRfY2xvbmUoc3RyaW5nIHN0ciBbLCBvYmplY3QgZW52XSApOworICAgICAgICBvYmplY3QgcHJlc2VudF9jbG9uZShvYmplY3Qgb2JqIFssIG9iamVjdCBlbnZdICk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBEaWVzZSBFZnVuIGR1cmNoc3VjaHQgZGFzIEludmVudGFyIHZvbiA8ZW52PiBuYWNoIGVpbmVtIE9iamVrdCBtaXQKKyAgICAgICAgZWluZW0gYmVzdGltbXRlbiBCbHVlcHJpbnQgLiBXaXJkIDxlbnY+IG5pY2h0IGFuZ2VnZWJlbiwgd2lyZCBpbgorICAgICAgICB0aGlzX29iamVjdCgpIGdlc3VjaHQuIERlciBCbHVlcHJpbnQga2FubiBlbnR3ZWRlciBtaXQgc2VpbmVtIE5hbWVuCisgICAgICAgIDxzdHI+IGFuZ2VnZWJlbiB3ZXJkZW4sIG9kZXIgYWxzIEJsdWVwcmludCBkZXMgT2JqZWt0cyA8b2JqPi4gR2VzdWNodAorICAgICAgICB3aXJkIGluIGJlaWRlbiBGYWVsbGVuIGF1ZmdydW5kIHZvbiBsb2FkX25hbWUoKS4KKyAgICAgICAgV2lyZCBrZWluIHBhc3NlbmRlcyBPYmpla3QgZ2VmdW5kZW4sIGxpZWZlcnQgZGllIEVmdW4gMCB6dXJ1ZWNrLgorCisgICAgICAgIEZ1ZXIgRHJpdmVyIGltIFBsYWluIE1vZHVzIGJlZ2lubnQgZGVyIE5hbWUgaW4gamVkZW0gRmFsbCBtaXQgJy8nLCBpbQorICAgICAgICBDb21wYXQgTW9kdXMgbmljaHQuCisKK0JFSVNQSUVMRQorICAgICAgICBBbmdlbm9tbWVuLCBkYXMgT2JqZWt0IDxlbnY+IGVudGhhbHRlIGRpZSBPYmpla3RlIC9pdGVtcy9tb25leSM4LAorICAgICAgICAvc3RkL3dlYXBvbiM5LCAvc3RkL3dlYXBvbiMxMiB1bmQgL29iai9rZXkgaW4gZGVyIGFuZ2VnZWJlbgorICAgICAgICBSZWloZW5mb2xnZS4KKworICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgICB8IEZ1bmt0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExpZWZlcnQgICAgICAgfAorICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgICB8IHByZXNlbnRfY2xvbmUoIi9pdGVtcy9tb25leSIsIGVudikgICAgICAgICAgICAgICB8IC9pdGVtcy9tb25leSM4fAorICAgICAgICB8IHByZXNlbnRfY2xvbmUoIi9zdGQvd2VhcG9uIzEyIiwgZW52KSAgICAgICAgICAgICB8IC9zdGQvd2VhcG9uIzkgfAorICAgICAgICB8IHByZXNlbnRfY2xvbmUoZmluZF9vYmplY3QoIi9pdGVtcy9tb25leSMxIiksIGVudil8IC9pdGVtcy9tb25leSM4fAorICAgICAgICB8IHByZXNlbnRfY2xvbmUoIi9vYmova2V5IzE4IiwgZW52KSAgICAgICAgICAgICAgICB8IC9vYmova2V5ICAgICAgfAorICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworCisgICAgICAgIEZ1ZXIgRHJpdmVyIGltIENvbXBhdCBNb2R1cyBsaWVmZXJ0IGRpZSBGdW5rdGlvbiBrZWluZSAnLycgYW0gQW5mYW5nLgorCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiAzLjIuNy4KKworQU5NRVJLVU5HCisgICAgICAgIEltIFVudGVyc2NoaWVkIHp1IHByZXNlbnQoKSBzdWNodCBwcmVzZW50X2Nsb25lKCkgbmllbWFscyBpbiBkZXIKKyAgICAgICAgVW1nZWJ1bmcgdm9uIDxlbnY+LgorCitTSUVIRSBBVUNICisgICAgICAgIGxvYWRfbmFtZShFKSwgcHJlc2VudChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vcHJldmlvdXNfb2JqZWN0IGIvZG9jL2VmdW4vcHJldmlvdXNfb2JqZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNzEyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9wcmV2aW91c19vYmplY3QKQEAgLTAsMCArMSw1MCBAQAorU1lOT1BTSVMKKyAgICAgICAgb2JqZWN0IHByZXZpb3VzX29iamVjdCgpOworICAgICAgICBvYmplY3QgcHJldmlvdXNfb2JqZWN0KGludCBpKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZWluZW4gUG9pbnRlciBhdWYgZGFzIGxldHp0ZSBPYmpla3QsIGRhcyBlaW5lbiBBdWZydWYgKG1pdHRlbHMKKyAgICAgICAgY2FsbF9vdGhlcigpLCBmdW5jYWxsKCkgZXRjLikgYXVmIGRhcyBha3R1ZWxsZSBPYmpla3QgdGhpc19vYmplY3QoKQorICAgICAgICBnZW1hY2h0IGhhdC4gV2VubiBkaWVzZXMgYXVmcnVmZW5kZSBPYmpla3QgaW56d2lzY2hlbiB6ZXJzdG9lcnQgd3VyZGUsCisgICAgICAgIGxpZWZlcnQgcHJldmlvdXNfb2JqZWN0KCkgMC4KKyAgICAgICAgQmVpIGVpbmVtIEF1ZnJ1ZiBlaW5lciBlaWdlbmVuIEZ1bmt0aW9uIGR1cmNoIGVpbiBPYmpla3QgYmxlaWJ0IGRhcworICAgICAgICBiaXNoZXJpZ2UgcHJldmlvdXNfb2JqZWN0KCkgdW52ZXJhZW5kZXJ0LgorCisgICAgICAgIFdpcmQgZGFzIEFyZ3VtZW50IDxpPiBhbmdlZ2ViZW4sIHNvIHZlcmZvbGd0IHByZXZpb3VzX29iamVjdCgpIGRlbgorICAgICAgICBBdWZydWYgPGk+IFN0dWZlbiB6dXJ1ZWNrLiBadW0gQmVpc3BpZWwgbGllZmVydCBwcmV2aW91c19vYmplY3QoMSkgZGFzCisgICAgICAgIGF1ZnJ1ZmVuZGUgT2JqZWt0IGRlcyBhdWZydWZlbmRlbiBPYmpla3RzLiBGdWVyIDxpPiBtdXNzIGdlbHRlbjoKKyAgICAgICAgMCA8PSBpIDwgY2FsbF9zdGFja19kZXB0aCgpLiBFaW4gV2VydCA8aT4gPCAwIGxpZWZlcnQgZGFzIGVyc3RlCisgICAgICAgIGF1ZnJ1ZmVuZGUgT2JqZWN0IHp1cnVlY2suCisKKyAgICAgICAgRXMgZ2lidCBlaW5lbiB3aWNodGlnZW4gU3BlemlhbGZhbGw6IGluIEZ1bmt0aW9uZW4sIGRpZSB2b20gR2FtZWRyaXZlcgorICAgICAgICBhdWYgR3J1bmQgZWluZXMgZXh0ZXJuZW4gRXJlaWduaXNlcyBhdWZnZXJ1ZmVuIHd1cmRlbiAoenVtIEJlaXNwaWVsCisgICAgICAgIEtvbW1hbmRpLCBkaWUgbWl0IGFkZF9hY3Rpb24oKSBkZWZpbmllcnQgd3VyZGVuKSwgbGllZmVydAorICAgICAgICBwcmV2aW91c19vYmplY3QoKSB0aGlzX29iamVjdCgpLCBwcmV2aW91c19vYmplY3QoMCkgaGluZ2VnZW4gMC4KKworQkVJU1BJRUwKKyAgICAgICAgaW50IHNpY2hlcmhlaXRzY2hlY2soKQorICAgICAgICB7CisgICAgICAgICAgICBvYmplY3QgcHJldjsKKyAgICAgICAgICAgIGlmKCEocHJldj1wcmV2aW91c19vYmplY3QoKSkpOworICAgICAgICAgICAgZWxzZSBpZihnZXR1aWQocHJldikhPWdldHVpZCh0aGlzX29iamVjdCgpKSk7CisgICAgICAgICAgICBlbHNlIGlmKGdldGV1aWQocHJldikhPWdldGV1aWQodGhpc19vYmplY3QoKSkpOworICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHZvaWQgc2Vuc2libGVfZnVua3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBpZighc2ljaGVyaGVpdHNjaGVjaygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgLi4uCisgICAgICAgIH0KKworICAgICAgICBEaWVzZSBGdW5rdGlvbiB6ZWlndCwgd2llIG1hbiB1ZWJlcnBydWVmZW4ga2Fubiwgb2IgZGVyIGxldHp0ZSBBdWZydWYKKyAgICAgICAgZWluZXIgRnVua3Rpb24gaW0gYWt0dWVsbGVuIE9iamVrdCBzaWNoZXIgd2FyLCBvZGVyIG9iIGRpZQorICAgICAgICBWZXJhcmJlaXR1bmcgYWJnZWJyb2NoZW4gd2VyZGVuIHNvbGx0ZS4KKworRkVITEVSCisgICAgICAgIFdlcnRlIHZvbiA8aT4gPCAwIHdlcmRlbiB3aWUgPGk+ID09IDAgYmVoYW5kZWx0IC0gZGllcyBpc3QgaGlzdG9yaXNjaC4KKworU0lFSEUgQVVDSAorICAgICAgICBjYWxsX290aGVyKEUpLCB0aGlzX29iamVjdChFKSwgdGhpc19wbGF5ZXIoRSkKKyAgICAgICAgY2FsbGVyX3N0YWNrKEUpLCBjYWxsZXJfc3RhY2tfZGVwdGgoRSksIGV4dGVybl9jYWxsKEUpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vcHJpbnRmIGIvZG9jL2VmdW4vcHJpbnRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODIzM2IKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9wcmludGYKQEAgLTAsMCArMSw5IEBACitTWU5PUFNJUworICAgICAgICB2b2lkIHByaW50ZihzdHJpbmcgZm9ybWF0LCAuLi4pOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgRWluZSBNaXNjaHVuZyBhdXMgc3ByaW50ZigpIHVuZCB3cml0ZSgpLiBHaWJ0IHZvaWQgenVydWVjayB1bmQgZGVuCisgICAgICAgIFN0cmluZyBhbiBkZW4gQmVudXR6ZXIgYXVzLgorCitTSUVIRSBBVUNICisgICAgICAgIHNwcmludGYoRSksIHdyaXRlKEUpLCB0ZXJtaW5hbF9jb2xvdXIoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3Byb2dyYW1fbmFtZSBiL2RvYy9lZnVuL3Byb2dyYW1fbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDE2MmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcHJvZ3JhbV9uYW1lCkBAIC0wLDAgKzEsMzggQEAKK1NZTk9QU0lTCisgICAgICAgIHN0cmluZyBwcm9ncmFtX25hbWUoKQorICAgICAgICBzdHJpbmcgcHJvZ3JhbV9uYW1lKG9iamVjdCBvYmopCisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGRlbiBOYW1lIGRlcyBQcm9ncmFtbXMsIGF1cyBkZW0gPG9iaj4ga29tcGlsaWVydCB3dXJkZS4KKyAgICAgICAgV2VubiA8b2JqPiBuaWNodCBhbmdlZ2ViZW4gd2lyZCwgd2lyZCBzdGFuZGFyZG1hZXNzaWcgdGhpc19vYmplY3QoKQorICAgICAgICB2ZXJ3ZW5kZXQuCisKKyAgICAgICAgRGVyIE5hbWUgaXN0IGZ1ZXIgQ2xvbmVzIGRlciBOYW1lIGRlcyBGaWxlcywgYXVzIGRlbSBkZXIgQmx1ZXByaW50CisgICAgICAgIGtvbXBsaWVydCB3dXJkZS4gRGVyIE5hbWUgd2VjaHNlbHQsIHdlbm4gZWluIE9iamVrdCBzZWluIFByb2dyYW1tCisgICAgICAgIGR1cmNoIHJlcGxhY2VfcHJvZ3JhbSgpIGFlbmRlcnQuCisKKyAgICAgICAgRnVlciBkZW4gU3BlemlhbGZhbGwsIGRhc3MgPG9iaj4gYWxzIDAgdWViZXJnZWJlbiB3aXJkLCBsaWVmZXJ0CisgICAgICAgIHByb2dyYW1fbmFtZSgpIDAgenVydWVjay4KKworICAgICAgICBEZXIgTmFtZSBlbmRldCBpbW1lciBtaXQgJy5jJy4gRXIgYmVnaW5udCBtaXQgZWluZW0gJy8nLCB3ZW5uIGRlcgorICAgICAgICBEcml2ZXIgc2ljaCBuaWNodCBpbSBDb21wYXQgTW9kdXMgYmVmaW5kZXQuCisKK0JFSVNQSUVMCisgICAgICAgIG9iamVjdCBvOworICAgICAgICBvID0gY2xvbmVfb2JqZWN0KCIvc3RkL2RpbmdzIik7CisgICAgICAgIHdyaXRlKHByb2dyYW1fbmFtZShvKSk7CisKKyAgICAgICAgbGllZmVydDoKKyAgICAgICAgLS0+ICIvc3RkL2RpbmdzLmMiLCB3ZW5uIGRlciBEcml2ZXIgbmljaHQgaW0gQ29tcGF0IE1vZHVzIGxhZXVmdC4KKyAgICAgICAgLS0+ICJzdGQvZGluZ3MuYyIsIHdlbm4gZGVyIERyaXZlciBpbSBDb21wYXQgTW9kdXMgbGFldWZ0LgorCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuNi4KKyAgICAgICAgU2VpdCAzLjIuOSBpc3QgZGFzIEFyZ3VtZW50IDAgZXJsYXVidC4KKworQU5NRVJLVU5HCisgICAgICAgIERpZSBFZnVuIHN3YXB0IHp1bSBQcm9ncmFtbSwgd2VubiBkaWVzZXMgZ2Vzd2FwdCBpc3QuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgY2xvbmVfb2JqZWN0KEUpLCBjbG9uZXAoRSksIGxvYWRfbmFtZShFKSwgbG9hZF9vYmplY3QoRSksCisgICAgICAgIG9iamVjdF9uYW1lKEUpLCByZXBsYWNlX3Byb2dyYW0oRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3Byb2dyYW1fdGltZSBiL2RvYy9lZnVuL3Byb2dyYW1fdGltZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmE2Mjk3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcHJvZ3JhbV90aW1lCkBAIC0wLDAgKzEsMTcgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCBwcm9ncmFtX3RpbWUoKQorICAgICAgICBpbnQgcHJvZ3JhbV90aW1lKG9iamVjdCBvYikKKworREVTQ1JJUFRJT04KKyAgICAgICAgUmV0dXJucyB0aGUgY3JlYXRpb24gKGNvbXBpbGF0aW9uKSB0aW1lIG9mIHRoZSBvYmplY3QncworICAgICAgICBwcm9ncmFtLiBJbiBvdGhlciB3b3JkcywgdGhpcyBpcyB0aGUgb2JqZWN0X3RpbWUoKSBvZgorICAgICAgICB0aGUgYmx1ZXByaW50LgorCisgICAgICAgIERlZmF1bHQgaXMgdGhpc19vYmplY3QoKSwgaWYgbm8gYXJnIGlzIGdpdmVuLgorCisJCisgICAgICAgIENBVkVBVDogSWYgdGhlIG9iamVjdHMgcHJvZ3JhbSBpcyBzd2FwcGVkIG91dCwgdGhpcyBlZnVuCisgICAgICAgICAgc3dhcHMgaXQgYmFjayBpbi4KKworU0VFIEFMU08KKyAgICAgICAgb2JqZWN0X3RpbWUoRSksIHByb2dyYW1fbmFtZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vcXVlcnlfYWN0aW9ucyBiL2RvYy9lZnVuL3F1ZXJ5X2FjdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBhY2FiYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3F1ZXJ5X2FjdGlvbnMKQEAgLTAsMCArMSwzNyBAQAorU1lOT1BTSVMKKyAgICAgICAgI2luY2x1ZGUgPHN5cy9jb21tYW5kcy5oPgorCisgICAgICAgIG1peGVkICpxdWVyeV9hY3Rpb25zKG9iamVjdHxzdHJpbmcgb2IsIG1peGVkIG1hc2tfb3JfdmVyYik7CisKK0JFU0NIUkVJQlVORworICAgICAgICBEYXMgZXJzdGUgQXJndW1lbnQgdm9uIHF1ZXJ5X2FjdGlvbnMoKSBpc3QgZW50d2VkZXIgZWluIE9iamVrdAorICAgICAgICBvZGVyIGRlciBEYXRlaW5hbWUgZWluZXMgT2JqZWt0cy4gRGFzIHp3ZWl0ZSBBcmd1bWVudCBtdXNzCisgICAgICAgIGVudHdlZGVyIGVpbmUgQml0bWFza2UgKGVpbiBJbnRlZ2VyKSBvZGVyIGVpbiBTdHJpbmcgc2Vpbi4KKworICAgICAgICBJc3QgZGFzIHp3ZWl0ZSBBcmd1bWVudCBlaW4gU3RyaW5nLCBsaWVmZXJ0IHF1ZXJ5X2FjdGlvbnMoKSBlaW4KKyAgICAgICAgQXJyYXkgbWl0IEluZm9ybWF0aW9uZW4gdWViZXIgZGFzIFZlcmIgb2RlciAwIHp1cnVlY2ssIHdlbm4KKyAgICAgICAgZGFzIGxlYmVuZGlnZSBPYmpla3QgPG9iPiBkYXMgVmVyYiBuaWNodCB2ZXJ3ZW5kZW4ga2Fubi4KKworICAgICAgICBXZW5uIGRhcyB6d2VpdGUgQXJndW1lbnQgZWluIEludGVnZXIgaXN0LCBsaWVmZXJ0IHF1ZXJ5X2FjdGlvbnMoKQorICAgICAgICBlaW4gZmxhY2hlcyBBcnJheSBtaXIgZGVuIEluZm9ybWF0aW9uZW4gZW50c3ByZWNoZW5kIGRlciBCaXRtYXNrZQorICAgICAgICB6dSBhbGxlbiBWZXJiZW4gdm9uIDxvYj4uCisKKyAgICAgICAgICAgIFFBX1ZFUkIgICAgICAgICAoIDEpOiAgIGRhcyBWZXJiLAorICAgICAgICAgICAgUUFfVFlQRSAgICAgICAgICggMik6ICAgZGVyIFR5cCwKKyAgICAgICAgICAgIFFBX1NIT1JUX1ZFUkIgICAoIDQpOiAgIGRhcyBzaG9ydF92ZXJiLAorICAgICAgICAgICAgUUFfT0JKRUNUICAgICAgICggOCk6ICAgZGFzIE9iamVrdCwKKyAgICAgICAgICAgIFFBX0ZVTkNUSU9OICAgICAoMTYpOiAgIGRpZSBGdW5rdGlvbi4KKworICAgICAgICBEZXIgVHlwIGlzdCBlaW4gV2VydCB3aWUgaW4gPHNlbnQuaD4gKGJ6dy4gL3N5cy9zZW50LmgpIGRlZmluaWVydCwKKyAgICAgICAgZGVyIHZvbSBQYXJzZXIgUXVlbGxjb2RlIGdlbGllZmVydCB3aXJkLgorCisgICAgICAgICAgICBTRU5UX1BMQUlOICAgICAgIGR1cmNoIGFkZF9hY3Rpb24oZnVuLCBjbWQpIGhpbnp1Z2VmdWVndAorICAgICAgICAgICAgU0VOVF9TSE9SVF9WRVJCICBkdXJjaCBhZGRfYWN0aW9uKGZ1biwgY21kLCAxKSBoaW56dWdlZnVlZ3QKKyAgICAgICAgICAgIFNFTlRfTk9fU1BBQ0UgICAgZHVyY2ggYWRkX2FjdGlvbihmdW4pOyBhZGRfeHZlcmIoY21kKTsKKyAgICAgICAgICAgIFNFTlRfTk9fVkVSQiAgICAgbnVyIGVpbmUgRnVua3Rpb24gbWl0IGFkZF9hY3Rpb24oZnVuKSwgb2huZSBWZXJiCisgICAgICAgICAgICBTRU5UX01BUktFUiAgICAgIGludGVybiwgaXN0IG5pY2h0IGltIEFycmF5IGVudGhhbHRlbgorICAgICAgICAgICAgbmVnYXRpdmVyIFdlcnQgICBkYXMgVmVyYiBtdXNzIG51ciBpbiBkZW4gZXJzdGVuIC08d2VydD4gWmVpY2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZWJlcmVpbnN0aW1tZW4uCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgYWRkX2FjdGlvbihFKSwgaW5pdChBKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vcXVlcnlfY29tbWFuZCBiL2RvYy9lZnVuL3F1ZXJ5X2NvbW1hbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhYmRiZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3F1ZXJ5X2NvbW1hbmQKQEAgLTAsMCArMSwzNCBAQAorU1lOT1BTSVMKKyAgICAgICAgc3RyaW5nIHF1ZXJ5X2NvbW1hbmQoKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZGVuIFRleHQgZGVzIGFrdHVlbGxlbiBLb21tYW5kb3Mgb2RlciAwLCB3ZW5uIGtlaW5lcworICAgICAgICBhdXNnZWZ1ZWhydCB3aXJkLgorCisgICAgICAgIERlciBUZXh0IGVudHNwcmljaHQgZGVtLCB3YXMgZGVyIFBhcnNlciAic2llaHQiLCBhbHNvIG5hY2hkZW0KKyAgICAgICAgbW9kaWZ5X2NvbW1hbmQoKSBhdXNnZWZ1ZWhydCB1bmQgbmFjaGZvbGdlbmRlIExlZXJ6ZWljaGVuCisgICAgICAgIGFiZ2VzY2huaXR0ZW4gd3VyZGVuLgorCisgICAgICAgIHF1ZXJ5X2NvbW1hbmQoKSBsaWVmZXJ0IDAsIHdlbm4gZXMgdm9uIGVpbmVyIEZ1bmt0aW9uIGdlc3RhcnRldCB3dXJkZSwKKyAgICAgICAgZGllIHdpZWRlcnVtIHZvbiBlaW5lbSBjYWxsX291dCgpIG9kZXIgZGVtIGhlYXJ0X2JlYXQoKSBhdWZnZXJ1ZmVuCisgICAgICAgIHd1cmRlLiBBdWNoIEtvbW1hbmRpLCBkaWUgYmVpbSBVc2VybG9naW4gYXVmZ2VydWZlbiB3ZXJkZW4sIGxpZWZlcm4gMC4KKworQkVJU1BJRUwKKyAgICAgICAgdm9pZCBpbml0KCkKKyAgICAgICAgeworICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBhZGRfYWN0aW9uKCJzaW5nIiwic2luZyIpOworICAgICAgICAgICAgLi4uCisgICAgICAgIH0KKworICAgICAgICBpbnQgc2luZyhzdHJpbmcgc3RyKQorICAgICAgICB7CisgICAgICAgICAgICB3cml0ZSgiRGVpbiBLb21tYW5kbyB3YXI6IitxdWVyeV9jb21tYW5kKCkrIlxuIik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIEplZGVzbWFsLCB3ZW5uIGplbWFuZCAic2luZyBibGFmYXNlbCIgZWluZ2lidCwgbGllZmVydCBkYXMgUHJvZ3JhbW0KKyAgICAgICAgIkRlaW4gS29tbWFuZG8gd2FyOiBzaW5nIGJsYWZhc2VsIi4KKworU0lFSEUgQVVDSAorICAgICAgICBhZGRfYWN0aW9uKEUpLCBxdWVyeV92ZXJiKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9xdWVyeV9ub3RpZnlfZmFpbCBiL2RvYy9lZnVuL3F1ZXJ5X25vdGlmeV9mYWlsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOTg0MjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9xdWVyeV9ub3RpZnlfZmFpbApAQCAtMCwwICsxLDIxIEBACitTWU5PUFNJUworICAgICAgICBtaXhlZCBxdWVyeV9ub3RpZnlfZmFpbCgpOworICAgICAgICBtaXhlZCBxdWVyeV9ub3RpZnlfZmFpbChpbnQgZmxhZyk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBXZW5uIDxmbGFnPiBuaWNodCBhbmdlZ2ViZW4gb2RlciAwIGlzdCwgbGllZmVydCBkaWUgRnVua3Rpb24gZGVuIFN0cmluZworICAgICAgICBvZGVyIGRpZSBDbG9zdXJlLCBkaWUgenVsZXR6dCBhbHMgRmVobGVybWVsZHVuZyBmdWVyIGVpbiBLb21tYW5kbworICAgICAgICBnZXNldHp0IHd1cmRlIChtaXQgbm90aWZ5X2ZhaWwoKSkuCisKKyAgICAgICAgV3VyZGUga2VpbmUgTWVsZHVuZyBnZXNldHp0LCB3aXJkIDAgZ2VsaWVmZXJ0LgorCisgICAgICAgIElzdCA8ZmxhZz4gIT0gMCB3aXJkIGRhcyBPYmpla3QgenVydWVja2dlbGllZmVydCwgd2FzIGRhcyBsZXR6dGUKKyAgICAgICAgTm90aWZ5LUZhaWwgZ2VzZXR6dCBoYXQuCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi43LgorICAgICAgICBMRE11ZCAzLjIuOCBmdWVndGUgZGVuIFBhcmFtdGVyIDxmbGFnPiBoaW56dS4KKworU0lFSEUgQVVDSAorICAgICAgICBhZGRfYWN0aW9uKEUpLCBxdWVyeV92ZXJiKEUpLCBxdWVyeV9jb21tYW5kKEUpLCBub3RpZnlfZmFpbChFKSwKKyAgICAgICAgaG9va3MoQykKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3F1ZXJ5X3ZlcmIgYi9kb2MvZWZ1bi9xdWVyeV92ZXJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMTY1OTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9xdWVyeV92ZXJiCkBAIC0wLDAgKzEsNTMgQEAKK1NZTk9QU0lTCisgICAgICAgIHN0cmluZyBxdWVyeV92ZXJiKCk7CisgICAgICAgIHN0cmluZyBxdWVyeV92ZXJiKGludCBmbGFnKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZGFzIFZlcmIgZGVzIGFrdHVlbGxlbiBLb21tYW5kb3Mgb2RlciAwLCB3ZW5uIGtlaW4gS29tbWFuZG8KKyAgICAgICAgYmVhcmJlaXRldCB3aXJkLgorCisgICAgICAgIFdlbm4gPGZsYWc+IG5pY2h0IGFuZ2VnZWJlbiBvZGVyIDAgaXN0LCB3aXJkIGRhcyBWZXJiIHdpZSB2b20gVXNlcgorICAgICAgICBlaW5nZWdlYmVuIGdlbGllZmVydCAoZGFzIGlzdCBkYXMgZXJzdGUgV29ydCBkZXIgSW5wdXR6ZWlsZSBkZXMKKyAgICAgICAgU3BpZWxlcnMsIGJpcyB6dW0gKGFiZXIgb2huZSkgZGVuIGVyc3RlbiBMZWVyc2NobGFnIC8gWmVpbGVudW1icnVjaCkuCisgICAgICAgIFdlbm4gPGZsYWc+IG5pY2h0IDAgaXN0LCB3aXJkIGRhcyBWZXJiIGVudHNwcmVjaGVuZCBkZXIgYWRkX2FjdGlvbigpCisgICAgICAgIHp1cnVlY2sgZ2VnZWJlbi4KKworICAgICAgICBJbm5lcmhhbGIgZWluZXIgYWRkX2FjdGlvbigpLUZ1bmt0aW9uLCBkaWUgdm9uIG1laHJlcmVuIEtvbW1hbmRvcworICAgICAgICBhdWZnZXJ1ZmVuIHdpcmQga2FubiBtYW4gc28gendpc2NoZW4gZGllc2VuIEtvbW1hbmRvcyB1bnRlcnNjaGVpZGVuLgorCitCRU1FUktVTkdFTgorICAgICAgICBEaWUgZnJ1ZWhlcmUgRWluc2NocmFlbmt1bmcsIGRhc3MgYmVpIGdlc2NoYWNodGVsdGVuIEtvbW1hbmRvcworICAgICAgICBxdWVyeS12ZXJiKCkgbmFjaCBkZW0gaW5uZXJlbiBLb21tYW5kbyAwIHp1cnVlY2sgZ2lidCBpc3QgamV0enQKKyAgICAgICAgZW50ZmFsbGVuLgorCitCRUlTUElFTAorICAgICAgICB2b2lkIGluaXQoKQorICAgICAgICB7CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIGFkZF9hY3Rpb24oInNpbmciLCJzaW5nZSIpOworICAgICAgICAgICAgYWRkX2FjdGlvbigic2luZyIsImpvZGVsIiwgMSk7CisgICAgICAgICAgICAuLi4KKyAgICAgICAgfQorCisgICAgICAgIGludCBzaW5nKHN0cmluZyBzdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdyaXRlKCJEYXMgS29tbWFuZG8gd2FyOiIrcXVlcnlfdmVyYigpKyhzdHIgPyBzdHIgOiAiIikrIlxuIik7CisgICAgICAgICAgICB3cml0ZSgiRGFzIFZlcmIgd2FyOiIrcXVlcnlfdmVyYigxKSsoc3RyID8gc3RyIDogIiIpKyJcbiIpOworICAgICAgICB9CisKKyAgICAgICAgRGFzIEtvbW1hbmRvICJzaW5nIGJsYWZhc2VsIiBsaWVmZXJ0OgorICAgICAgICAgICAgRGFzIEtvbW1hbmRvIHdhcjogc2luZworICAgICAgICAgICAgRGFzIFZlcmIgd2FyOiBzaW5nCisKKyAgICAgICAgRGFzIEtvbW1hbmRvICJqb2RlbCBibGFmYXNlbCIgbGllZmVydDoKKyAgICAgICAgICAgIERhcyBLb21tYW5kbyB3YXI6IGpvZGVsCisgICAgICAgICAgICBEYXMgVmVyYiB3YXI6IGpvZGVsCisKKyAgICAgICAgRGFzIEtvbW1hbmRvICJqb2RlbGUgYmxhZmFzZWwiIGxpZWZlcnQ6CisgICAgICAgICAgICBEYXMgS29tbWFuZG8gd2FyOiBqb2RlbGUKKyAgICAgICAgICAgIERhcyBWZXJiIHdhcjogam9kZWwKKworU0lFSEUgQVVDSAorICAgICAgICBxdWVyeV9jb21tYW5kKEUpLCBhZGRfYWN0aW9uKEUpLCBBZGRDbWQoTCksIEFkZEFjdGlvbihMKQorCis3LkF1ZyAyMDA3IEdsb2luc29uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vcXVvdGUgYi9kb2MvZWZ1bi9xdW90ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTAxZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcXVvdGUKQEAgLTAsMCArMSwxMyBAQAorU1lOT1BTSVMKKyAgICAgICAgbWl4ZWQgcXVvdGUobWl4ZWQgYXJnKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEtvbnZlcnRpZXJ0IGVpbiBBcnJheSB6dSBlaW5lbSBxdW90ZWQgQXJyYXkgdW5kIFN0cmluZ3MgenUgU3ltYm9sZW4uCisgICAgICAgIFN5bWJvbGUgdW5kIHF1b3RlZCBBcnJheXMgd2VyZGVuIGVybmV1dCBnZXF1b3RlZC4KKworQkVJU1BJRUwKKyAgICAgICAgcXVvdGUoImZvbyIpIC0+ICdmb28KKyAgICAgICAgcXVvdGUoKHsxLDIsM30pKSAtPiAnKHsxLDIsM30pCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgc3ltcG9scChFKSwgdW5xdW90ZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vcmFpc2VfZXJyb3IgYi9kb2MvZWZ1bi9yYWlzZV9lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGFjMjM0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcmFpc2VfZXJyb3IKQEAgLTAsMCArMSwyMyBAQAorU1lOT1BTSVMKKyAgICAgICAgdm9pZCByYWlzZV9lcnJvcihzdHJpbmcgYXJnKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEJyaWNodCBkaWUgQXVzZnVlaHJ1bmcgZGVzIGxhdWZlbmRlbiBQcm9ncmFtbXMgYWIuIFdlbm4gZGFzIFByb2dyYW1tCisgICAgICAgIGR1cmNoIGNhdGNoKCkgYXVmZ2VydWZlbiB3dXJkZSwgbGllZmVydCBkaWVzZXMgY2F0Y2goKSA8YXJnPiBhbHMKKyAgICAgICAgRmVobGVyY29kZSwgc29uc3Qgd2lyZCA8YXJnPiBhbHMgRmVobGVybWVsZHVuZyBhdXNnZWdlYmVuLgorCisgICAgICAgIHJhaXNlX2Vycm9yKCkgZ2xlaWNodCBpbiBkZXIgRnVua3Rpb24gdGhyb3coKSwgYWJlciB3YWVocmVuZCB0aHJvdygpCisgICAgICAgIGF1cyBjYXRjaCgpIGhlcmF1cyBhdWZnZXJ1ZmVuIHdlcmRlbiBzb2xsLCBrYW5uIHJhaXNlX2Vycm9yKCkgdm9uCisgICAgICAgIHVlYmVyYWxsIGhlciBhdWZnZXJ1ZmVuIHdlcmRlbi4KKworICAgICAgICBEYSByYWlzZV9lcnJvcigpIHNpY2ggd2llIGFuZGVyZSAnZWNodGUnIExhdWZ6ZWl0ZmVobGVyIHZlcmhhZWx0LAorICAgICAgICBlaW5zY2hsaWVzc2xpY2ggZGVyIEVyemV1Z3VuZyBlaW5lcyBTdGFjayBCYWNrdHJhY2VzLCBpc3QgZGllc2UKKyAgICAgICAgRnVua3Rpb24gc2VociB6ZWl0aW50ZW5zaXYuCisKK0JFTUVSS1VOR0VOCisgICAgICAgIERlciBTdHJpbmcgc29sbHRlIHVtZ2Vicm9jaGVuIG9kZXIgd2VuaWdzdGVucyBtaXQgZWluZW0gXG4gdGVybWluaWVydAorCXdlcmRlbiwgZGEgZGllIEF1c2dhYmUgZGlyZWt0IGFuIGRlbiBpbnRlcmFrdGl2ZW4gTWFnaWVyIGVyZm9sZ2VuCisJa2FubiBiencuIGF1ZiBkZW0gRGVidWctS2FuYWwgZGFzIGxldHp0ZSBaZWljaGVuIGVudGZlcm50IHdpcmQuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgY2F0Y2goRSksIHRocm93KEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9yYW5kb20gYi9kb2MvZWZ1bi9yYW5kb20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4NTQyYgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3JhbmRvbQpAQCAtMCwwICsxLDQyIEBACitGVU5LVElPTjoKKyAgICAgICAgaW50IHJhbmRvbShpbnQgbikKKworQVJHVU1FTlRFOgorICAgICAgICBuOiBaYWhsZW4tQmVyZWljaCBhdXMgZGVtIGdld2FlaGx0IHdlcmRlbiBzb2xsLgorCitCRVNDSFJFSUJVTkc6CisgICAgICAgIEdpYnQgZWluZSB6dWZhZWxsaWdlIFphaGwgaW0gQmVyZWljaCB2b24gMC4uKG4tMSkgenVydWVjay4KKworQkVNRVJLVU5HRU46CisgICAgICAgIERlciBOYWNodGVpbCBkZXIgWnVmYWVsbGlna2VpdCAodWViZXIgZ3Jvc3NlIFphaGxlbikgaXN0LCBkYXNzIHdlbm4KKyAgICAgICAgdmllbGUgWmFobGVuIGluIGVpbmVtIGtsZWluZW4gQmVyZWljaCBpbiBrdXJ6ZXIgWmVpdCBnZW5lcmllcnQKKyAgICAgICAgd2VyZGVuLCBlaW5pZ2UgWmFobGVuIHNlaHIgdmllbCBoYWV1ZmlnZXIgYXVmdHJldGVuIGFscyBhbmRlcmUuCisKKyAgICAgICAgRXMgc2VpIG5vY2htYWwgZGFyYXVmIGhpbmdld2llc2VuLCBkYXNzIGRlciBCZXJlaWNoIGltbWVyIGJlaSAwIAorICAgICAgICB1bmQgTklDSFQgYmVpIDEgYW5mYWVuZ3QuIEVpbiByYW5kb20oMTApIGdlaHQgYWxzbyBuaWNodCB2b24gCisgICAgICAgIDEuLjEwIHNvbmRlcm4gdm9uIDAuLjkhCisKK0JFSVNQSUVMRToKKyAgICAgICAgLy8gRWluZmFjaGUgQWJmcmFnZSB6LkIuIGF1cyBkZXIgSGl0RnVuYyBlaW5lciBXYWZmZToKKworICAgICAgICBpZihyYW5kb20oMTAxKSA+PSA3MCkgcmV0dXJuIHJhbmRvbSgxMSk7CisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAvLyBTcGllbGVyIHNvbGwgaW4gZWluZW4genVmYWVsbGlnIGF1c2dld2FlaGx0ZW4gUmF1bSBnZW1vdnQKKyAgICAgICAgLy8gd2VyZGVuOiAKKworICAgICAgICBzdHJpbmcgKmRlc3QgPSAoeyAicmF1bTEiLCJyYXVtMiIsInJhdW0zIiwicmF1bTQiLCJyYXVtNSIgfSk7CisgICAgICAgIHRoaXNfcGxheWVyKCktPm1vdmUoZGVzdFtyYW5kb20oc2l6ZW9mKGRlc3QpKV0sTV9HT3xNX05PQ0hFQ0spOworCisgICAgICAgIC8vIEVzIHNvbGwgZWluZSB6dWZhZWxsaWdlIE1lbGR1bmcgYXVzZ2VnZWJlbiB3ZXJkZW46CisKKyAgICAgICAgdGVsbF9vYmplY3QodGhpc19wbGF5ZXIoKSwKKyAgICAgICAgICh7ICJFcyBrbmFja3QuXG4iLCAiRGlyIGlzdCBrYWx0LlxuIiwgIkR1IHNjaHdpdHp0LlxuIiwKKyAgICAgICAgICAgICJEdSBiZWtvbW1zdCBBbmdzdC5cbiIsICJIaW50ZXIgRGlyIGtuYWNrdCBlcyBpbSBHZWJ1ZXNjaC5cbiIsCisgICAgICAgICAgICAiRWluIGt1ZWhsZXIgV2luZCBrb21tdCBhdWYuXG4iIH0pW3JhbmRvbSg2KV0pOworCisgICAgICAgIFdpZSBtYW4gc2llaHQsIGdpYnQgZXMgZnVlciByYW5kb20oKSB2aWVsZSBzY2hvZW5lIEVpbnNhdHotCisgICAgICAgIG1vZWdsaWNoa2VpdGVuLiBXb2JlaSBsZXR6dGVyZXMgQmVpc3BpZWwgdWViZXIgQWRkUm9vbU1lc3NhZ2UKKyAgICAgICAgKGZ1ZXIgUmFldW1lKSB2aWVsIGVpbmZhY2hlciB1bXp1c2V0emVuIGlzdC4KKworNy5BdWcgMjAwNyBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vcmVhZF9ieXRlcyBiL2RvYy9lZnVuL3JlYWRfYnl0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVjYWJiZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3JlYWRfYnl0ZXMKQEAgLTAsMCArMSwxOSBAQAorU1lOT1BTSVMKKyAgICAgICAgc3RyaW5nIHJlYWRfYnl0ZXMoc3RyaW5nIGZpbGUsIGludCBzdGFydCwgaW50IGFuemFobCkKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZXN0IGVpbmUgYmVzdGltbXRlIEFuemFobCBCeXRlcyBhdXMgZGVtIEZpbGUgPGZpbGU+LiBXZW5uIDxzdGFydD4KKyAgICAgICAgbmljaHQgYW5nZWdlYmVuIG9kZXIgMCBpc3QsIHdpcmQgZGFzIEZpbGUgdm9uIEJlZ2lubiB3ZWcgZ2VsZXNlbiwKKyAgICAgICAgc29uc3Qgdm9tIEJ5dGUgbWl0IGRlciBOdW1tZXIgPHN0YXJ0Pi4gV2VubiA8c3RhcnQ+IG5lZ2F0aXYgaXN0LAorICAgICAgICB3ZXJkZW4gZGllIEJ5dGVzIHZvbSBFbmRlIGRlcyBGaWxlcyBoZXIgZ2V6YWVobHQuIDxhbnphaGw+IGlzdCBkaWUKKyAgICAgICAgQW56YWhsIEJ5dGVzLCBkaWUgZ2VsZXNlbiB3ZXJkZW4gc29sbGVuLiBXZXJ0ZSB2b24gMCBvZGVyIG5lZ2F0aXZlCisgICAgICAgIFdlcnRlIHNpbmQgendhciBtb2VnbGljaCwgYWJlciB3ZW5pZyBzaW5udm9sbC4KKworICAgICAgICBXZW5uIDxzdGFydD4gYXVzc2VyaGFsYiBkZXIgR3JvZXNzZSBkZXMgRmlsZXMgbGllZ3QsIGxpZWZlcnQKKyAgICAgICAgcmVhZF9ieXRlKCkgYW5zdGVsbGUgZWluZXMgU3RyaW5ncyAwIHp1cnVlY2suCisKKyAgICAgICAgRGllIG1heC4gQW56YWhsIGVpbnp1bGVzZW5kZXIgQnl0ZXMgcHJvIEF1ZnJ1ZiBkaWVzZXIgRnVua3Rpb24KKyAgICAgICAgYmV0cmFlZ3QgTElNSVRfQllURSAocy4gcXVlcnlfbGltaXRzKCkpLgorCitTSUVIRSBBVUNICisgICAgICAgIHJlYWRfZmlsZShFKSwgd3JpdGVfYnl0ZXMoRSksIHdyaXRlX2ZpbGUoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3JlYWRfZmlsZSBiL2RvYy9lZnVuL3JlYWRfZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjFjY2ZjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcmVhZF9maWxlCkBAIC0wLDAgKzEsMTkgQEAKK1NZTk9QU0lTCisgICAgICAgIHN0cmluZyByZWFkX2ZpbGUoc3RyaW5nIGZpbGUsIGludCBzdGFydCwgaW50IGFuemFobCkKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZXN0IFplaWxlbiBhdXMgZWluZW0gRmlsZSA8ZmlsZT4uIFdlbm4gPHN0YXJ0PiBhbmdlZ2ViZW4gaXN0IHVuZAorICAgICAgICBuaWNodCAwLCB3aXJkIHZvbiBCZWdpbm4gZGVyIFplaWxlIDxzdGFydD4gYW4gZ2VsZXNlbjsgaXN0IDxzdGFydD4gMAorICAgICAgICBvZGVyIG5pY2h0IGFuZ2VnZWJlbiwgd2lyZCB2b20gQmVnaW5uIGRlcyBGaWxlcyBnZWxlc2VuLgorCisgICAgICAgIFdlbm4gPGFuemFobD4gbmljaHQgYW5nZWdlYmVuIG9kZXIgMCBpc3QsIHdpcmQgZGFzIGdlc2FtdGUgRmlsZQorICAgICAgICBnZWxlc2VuLCBzb25zdCBudXIgPGFuemFobD4gWmVpbGVuLgorCisgICAgICAgIFdlbm4gPHN0YXJ0PiBhdXNzZXJoYWxiIGRlciBHcm9lc3NlIGRlcyBGaWxlcyBsaWVndCwgbGllZmVydAorICAgICAgICByZWFkX2ZpbGUoKSBhbnN0ZWxsZSBlaW5lcyBTdHJpbmdzIDAgenVydWVjay4KKworICAgICAgICBEaWUgbWF4LiBBbnphaGwgZWluenVsZXNlbmRlciBCeXRlcyAobmljaHQgWmVpbGVuISkgcHJvIEF1ZnJ1ZiBkaWVzZXIKKyAgICAgICAgRnVua3Rpb24gYmV0cmFlZ3QgTElNSVRfRklMRSAocy4gcXVlcnlfbGltaXRzKCkpLgorCitTSUVIRSBBVUNICisgICAgICAgIHJlYWRfYnl0ZXMoRSksIHdyaXRlX2ZpbGUoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3JlZmVyZW5jZXAgYi9kb2MvZWZ1bi9yZWZlcmVuY2VwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMmMwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9yZWZlcmVuY2VwCkBAIC0wLDAgKzEsMTMgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCByZWZlcmVuY2VwKG1peGVkIGFyZykKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgMSwgd2VubiBkYXMgQXJndW1lbnQgYW4gZGllIGFrdHVlbGxlIEZ1bmt0aW9uIHBlciBSZWZlcmVuegorICAgICAgICB1ZWJlcmdlYmVuIHd1cmRlLCBhbnNvbnN0ZW4gMC4KKworICAgICAgICBNYW4gYmVhY2h0ZSwgZGFzcyBkYXMgQXJndW1lbnQgYWxzIFJlZmVyZW56IGFuIHJlZmVyZW5jZXAoKQorICAgICAgICB1ZWJlcmdlYmVuIHdlcmRlbiBtdXNzLCB6LiBCLiByZWZlcmVuY2VwKCZ4KS4KKworU0lFSEUgQVVDSAorICAgICAgICBjbG9zdXJlcChFKSwgZmxvYXRwKEUpLCBtYXBwaW5ncChFKSwgb2JqZWN0cChFKSwgaW50cChFKSwKKyAgICAgICAgcG9pbnRlcnAoRSksIHN0cmluZ3AoRSksIHN5bWJvbHAoRSksIGNsb25lcChFKSwgcmVmZXJlbmNlcyhMUEMpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9yZWdleHAgYi9kb2MvZWZ1bi9yZWdleHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0ZTZhNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3JlZ2V4cApAQCAtMCwwICsxLDQxIEBACitTWU5PUFNJUworICAgICAgICAjaW5jbHVkZSA8cmVnZXhwLmg+CisKKyAgICAgICAgc3RyaW5nICpyZWdleHAoc3RyaW5nICpsaXN0LCBzdHJpbmcgcGF0dGVybikKKyAgICAgICAgc3RyaW5nICpyZWdleHAoc3RyaW5nICpsaXN0LCBzdHJpbmcgcGF0dGVybiwgaW50IG9wdCkKKworREVTQ1JJUFRJT04KKyAgICAgICAgTWF0Y2ggdGhlIHBhdHRlcm4gPHBhdHRlcm4+IChpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gPG9wdD4gaWYKKyAgICAgICAgZ2l2ZW4pIGFnYWluc3QgYWxsIHN0cmluZ3MgaW4gbGlzdCwgYW5kIHJldHVybiBhIG5ldyBhcnJheSB3aXRoIGFsbAorICAgICAgICBzdHJpbmdzIHRoYXQgbWF0Y2hlZC4KKworICAgICAgICBJZiB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uLCBhIHJ1bnRpbWUKKyAgICAgICAgZXJyb3Igd2lsbCBiZSByYWlzZWQuCisKK0VYQU1QTEUKKyAgICAgICAgc3RyaW5nIHN0cnM7CisgICAgICAgIHN0cmluZyBwYXR0ZXJuOworICAgICAgICAKKyAgICAgICAgaWYgKHJlZ2V4cF9wYWNrYWdlKCkgPT0gUkVfUENSRSkKKyAgICAgICAgICAgIHBhdHRlcm4gPSAiXFw8aGVscFxcPi4qXFw8bWVcXD4iOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXR0ZXJuID0gIlxcYmhlbHBcXGIuKlxcYm1lXFxiIjsKKworICAgICAgICBpZiAoc3RycyA9IHJlZ2V4cCggKHsicGxlYXNlLCBoZWxwIG1lIFNpciBKb2huLiJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAsIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgICAgICAgICApKQorICAgICAgICB7CisgICAgICAgICAgIGlmIChzaXplb2Yoc3RycykKKyAgICAgICAgICAgICAgd3JpdGUoIkl0IG1hdGNoZXMuXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gd2lsbCB0ZXN0IHRoZSBnaXZlbiBzdHJpbmcgKHdoaWNoIGlzCisgICAgICAgIHBhY2tlZCBpbnRvIGFuIGFycmF5KSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgbGlrZSAiaGVscCAuLi4gbWUiCisgICAgICAgIGluc2lkZSBvZiBpdC4KKworSElTVE9SWQorICAgICAgICBMRE11ZCAzLjMgYWRkZWQgdGhlIG9wdGlvbmFsIDxvcHQ+IGFyZ3VtZW50LgorCitTRUUgQUxTTworICAgICAgICByZWdleHBsb2RlKEUpLCByZWdtYXRjaChFKSwgcmVncmVwbGFjZShFKSwgcmVnZXhwX3BhY2thZ2UoRSksIHNzY2FuZihFKSwKKyAgICAgICAgcmVnZXhwKEMpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9yZWdleHBfcGFja2FnZSBiL2RvYy9lZnVuL3JlZ2V4cF9wYWNrYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOGQyOWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9yZWdleHBfcGFja2FnZQpAQCAtMCwwICsxLDQ4IEBACitTWU5PUFNJUworICAgICAgICAjaW5jbHVkZSA8cmVnZXhwLmg+CisKKyAgICAgICAgaW50IHJlZ2V4cF9wYWNrYWdlKCkKKworREVTQ1JJUFRJT04KKyAgICAgICAgUmV0dXJuIHdoaWNoIHJlZ2V4cCBwYWNrYWdlIGlzIHVzZWQgYnkgZGVmYXVsdDoKKworICAgICAgICAgIFJFX1RSQURJVElPTkFMOiB0cmFkaXRpb25hbCByZWdleHBzCisgICAgICAgICAgUkVfUENSRTogICAgICAgIFBDUkUKKworICAgICAgICBBcyB0aGUgcGFja2FnZSBjYW4gYmUgc2VsZWN0ZWQgYXQgcnVudGltZSB0aHJvdWdoIHRoZQorICAgICAgICBSRUdFWFBfUEFDS0FHRSBkcml2ZXIgaG9vaywgdGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gZGV0ZXJtaW5lCisgICAgICAgIHRoZSBwYWNrYWdlIGF0IExQQyBjb21waWxlIHRpbWUuCisgICAgICAgIE1hdGNoIHRoZSBwYXR0ZXJuIDxwYXR0ZXJuPiAoaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIDxvcHQ+IGlmCisgICAgICAgIGdpdmVuKSBhZ2FpbnN0IGFsbCBzdHJpbmdzIGluIGxpc3QsIGFuZCByZXR1cm4gYSBuZXcgYXJyYXkgd2l0aCBhbGwKKyAgICAgICAgc3RyaW5ncyB0aGF0IG1hdGNoZWQuCisKKyAgICAgICAgSWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYSBydW50aW1lCisgICAgICAgIGVycm9yIHdpbGwgYmUgcmFpc2VkLgorCitFWEFNUExFCisgICAgICAgIHN0cmluZyBzdHJzOworICAgICAgICBzdHJpbmcgcGF0dGVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChyZWdleHBfcGFja2FnZSgpID09IFJFX1BDUkUpCisgICAgICAgICAgICBwYXR0ZXJuID0gIlxcPGhlbHBcXD4uKlxcPG1lXFw+IjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGF0dGVybiA9ICJcXGJoZWxwXFxiLipcXGJtZVxcYiI7CisKKyAgICAgICAgaWYgKHN0cnMgPSByZWdleHAoICh7InBsZWFzZSwgaGVscCBtZSBTaXIgSm9obi4ifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgLCBwYXR0ZXJuCisgICAgICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgeworICAgICAgICAgICBpZiAoc2l6ZW9mKHN0cnMpCisgICAgICAgICAgICAgIHdyaXRlKCJJdCBtYXRjaGVzLlxuIik7CisgICAgICAgIH0KKworICAgICAgICBUaGUgcmVndWxhciBleHByZXNzaW9uIHdpbGwgdGVzdCB0aGUgZ2l2ZW4gc3RyaW5nICh3aGljaCBpcworICAgICAgICBwYWNrZWQgaW50byBhbiBhcnJheSkgaWYgdGhlcmUgaXMgc29tZXRoaW5nIGxpa2UgImhlbHAgLi4uIG1lIgorICAgICAgICBpbnNpZGUgb2YgaXQuCisKK0hJU1RPUlkKKyAgICAgICAgSW50cm9kdWNlZCBpbiBMRE11ZCAzLjMuNjM0LgorCitTRUUgQUxTTworICAgICAgICByZWdleHAoRSksIHJlZ2V4cGxvZGUoRSksIHJlZ21hdGNoKEUpLCByZWdyZXBsYWNlKEUpLCBzc2NhbmYoRSksCisgICAgICAgIHJlZ2V4cChDKSwgcmVnZXhwX3BhY2thZ2UoSCkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3JlZ2V4cGxvZGUgYi9kb2MvZWZ1bi9yZWdleHBsb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NWU5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9yZWdleHBsb2RlCkBAIC0wLDAgKzEsMjggQEAKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxyZWdleHAuaD4KKworICAgICAgICBzdHJpbmcgKnJlZ2V4cGxvZGUgKHN0cmluZyB0ZXh0LCBzdHJpbmcgcGF0dGVybikKKyAgICAgICAgc3RyaW5nICpyZWdleHBsb2RlIChzdHJpbmcgdGV4dCwgc3RyaW5nIHBhdHRlcm4sIGludCBvcHQpCisKK0RFU0NSSVBUSU9OCisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byBleHBsb2RlIGJ1dCBhY2NlcHRzIGEgcmVndWxhcgorICAgICAgICBleHByZXNzaW9uIDxwYXR0ZXJuPiBhcyBkZWxpbWl0ZXIgKGludGVycHJldGVkIGFjY29yZGluZyB0byA8b3B0PgorICAgICAgICBpZiBnaXZlbikuCisKKyAgICAgICAgSWYgZmxhZyBSRV9PTUlUX0RFTElNIGlzIG5vdCBzZXQgaW4gPG9wdD4sIHRoZW4gZXZlcnkgc2Vjb25kIGVsZW1lbnQKKyAgICAgICAgaW4gdGhlIHJlc3VsdCB2ZWN0b3Igd2lsbCBiZSB0aGUgdGV4dCB0aGF0IG1hdGNoZWQgdGhlIGRlbGltaXRlci4KKyAgICAgICAgSWYgdGhlIGZsYWcgaXMgc2V0LCB0aGVuIHRoZSByZXN1bHQgdmVjdG9yIHdpbGwgY29udGFpbiBvbmx5CisgICAgICAgIHRoZSB0ZXh0IGJldHdlZW4gdGhlIGRlbGltaXRlcnMuCisKK0VYQU1QTEVTCisgICAgICAgIHJlZ2V4cGxvZGUoImFiY2RlZiIsICJjZGUiKSAgICAgICAgICAgICAgICAtPiAoeyAiYWIiLCAiY2RlIiwgImYiIH0pCisgICAgICAgIHJlZ2V4cGxvZGUoImFiY2RlZiIsICJjZGUiLCBSRV9PTUlUX0RFTElNKSAtPiAoeyAiYWIiLCAiZiIgfSkKKworSElTVE9SWQorICAgICAgICBJbnRyb2R1Y2VkIGluIDMuMkA2MQorICAgICAgICBMRE11ZCAzLjMgYWRkZWQgdGhlIG9wdGlvbmFsIDxvcHQ+IGFyZ3VtZW50IGFuZCB0aGUgUkVfT01JVF9ERUxJTQorICAgICAgICAgIGZsYWcuCisKK1NFRSBBTFNPCisgICAgICAgIGV4cGxvZGUoRSksIHJlZ2V4cChFKSwgcmVnbWF0Y2goRSksIHJlZ3JlcGxhY2UoRSksCisgICAgICAgIHJlZ2V4cF9wYWNrYWdlKEUpLCByZWdleHAoQykKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3JlZ21hdGNoIGIvZG9jL2VmdW4vcmVnbWF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiNzNmNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3JlZ21hdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1NZTk9QU0lTCisgICAgICAgICNpbmNsdWRlIDxyZWdleHAuaD4KKworICAgICAgICBzdHJpbmcgIHJlZ21hdGNoIChzdHJpbmcgdGV4dCwgc3RyaW5nIHBhdHRlcm4pCisgICAgICAgIHN0cmluZyAgcmVnbWF0Y2ggKHN0cmluZyB0ZXh0LCBzdHJpbmcgcGF0dGVybiwgaW50IG9wdCkKKyAgICAgICAgc3RyaW5nICByZWdtYXRjaCAoc3RyaW5nIHRleHQsIHN0cmluZyBwYXR0ZXJuLCBpbnQgb3B0LCBpbnQgc3RhcnQpCisgICAgICAgIHN0cmluZyAqcmVnbWF0Y2ggKHN0cmluZyB0ZXh0LCBzdHJpbmcgcGF0dGVybiwgaW50IG9wdCkKKyAgICAgICAgc3RyaW5nICpyZWdtYXRjaCAoc3RyaW5nIHRleHQsIHN0cmluZyBwYXR0ZXJuLCBpbnQgb3B0LCBpbnQgc3RhcnQpCisKK0RFU0NSSVBUSU9OCisgICAgICAgIE1hdGNoIHRoZSBzdHJpbmcgPHR4dD4gYWdhaW5zdCA8cGF0dGVybj4gKGludGVycHJldGVkIGFjY29yZGluZworICAgICAgICB0byA8b3B0PiBpZiBnaXZlbikuIElmIDxzdGFydD4gaXMgZ2l2ZW4sIGl0IGlzIHRoZSBzdGFydAorICAgICAgICBwb3NpdGlvbiBmb3IgdGhlIG1hdGNoIGFuZCBtdXN0IGJlIGluIHRoZSByYW5nZSBbMC4uc3RybGVuKHRleHQpXS4KKworICAgICAgICBJZiB0aGVyZSBpcyBubyBtYXRjaCwgdGhlIHJlc3VsdCBpcyAwLiBJZiB0aGVyZSBpcyBhIG1hdGNoLCB0aGUgZXhhY3QKKyAgICAgICAgcmVzdWx0IGlzIGRldGVybWluZWQgYnkgdGhlIGZsYWcgUkVfTUFUQ0hfU1VCUzoKKworICAgICAgICBJZiB0aGUgZmxhZyBSRV9NQVRDSF9TVUJTIGlzIG5vdCBzZXQsIHRoZSByZXN1bHQgaXMgdGhlIG1hdGNoZWQKKyAgICAgICAgZXhwcmVzc2lvbi4KKworICAgICAgICBJZiB0aGUgZmxhZyBSRV9NQVRDSF9TVUJTIGlzIHNldCwgdGhlIHJlc3VsdCBpcyBhbiBhcnJheSBvZiB0aGUKKyAgICAgICAgbWF0Y2hlZCBzdHJpbmcocykgb2YgdGhlIGZpcnN0IG1hdGNoLiBFbnRyeSBbMF0gaXMgdGhlIGZ1bGwgc3RyaW5nCisgICAgICAgIG1hdGNoaW5nIHRoZSA8cGF0dGVybj4sIGZvbGxvd2luZyBlbnRyaWVzIGFyZSB0aGUgc3RyaW5nIHNlZ21lbnRzCisgICAgICAgIG1hdGNoaW5nIHBhcmVudGhlc2l6ZWQgc3ViZXhwcmVzc2lvbnMgaW4gPHBhdHRlcm4+LiBJZiBhIHBhcnRpY3VsYXIKKyAgICAgICAgc3ViZXhwcmVzc2lvbiBkaWRuJ3QgaGF2ZSBhIG1hdGNoLCB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBlbnRyeSB3aWxsCisgICAgICAgIGJlIDAuCisKKyAgICAgICAgVGhlIGxhc3QgZW50cnkgaW4gdGhlIGFycmF5IHdpbGwgYmUgdGhlIG5ldyBzdGFydCBpbmRleCBpbiBjYXNlIHlvdQorICAgICAgICB3YW50IHRvIHJlcGVhdCB0aGUgbWF0Y2ggb24gdGhlIHJlbWFpbmluZyBwYXJ0cyBvZiB0aGUgc3RyaW5nLiBUaGlzCisgICAgICAgIG5ldyBpbmRleCBpcyB1c3VhbGx5IGVxdWFsIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoLCBidXQgYXQgbGVhc3Qgb25lCisgICAgICAgIGhpZ2hlciB0aGFuIHRoZSBvcmlnaW5hbCBzdGFydCBpbmRleC4KKworRVhBTVBMRQorICAgICAgICByZWdtYXRjaCgiYWJjZGVmY2RmIiwgImNkIikgICAgLT4gImNkIgorICAgICAgICByZWdtYXRjaCgiYWJjZGVmY2RmIiwgImNkKGUpIikgLT4gImNkZSIKKworICAgICAgICByZWdtYXRjaCgiYWJjZGVmY2RmIiwgImNkIiwgUkVfTUFUQ0hfU1VCUykgICAgLT4gKHsgImNkIiB9KQorICAgICAgICByZWdtYXRjaCgiYWJjZGVmY2RmIiwgImNkKGUpIiwgUkVfTUFUQ0hfU1VCUykgLT4gKHsgImNkZSIsICJlIiB9KQorCitISVNUT1JZCisgICAgICAgIEludHJvZHVjZWQgaW4gTERNdWQgMy4zLjE5OC4KKyAgICAgICAgTW9kaWZpZWQgaW4gMy4zLjIxNCB0byByZXR1cm4gMCBmb3Igbm9uLW1hdGNoZXMsIGFuZCB0byB0YWtlIGFuZAorICAgICAgICByZXR1cm4gYSBzdGFydCBwb3NpdGlvbi4KKworU0VFIEFMU08KKyAgICAgICAgcmVnZXhwbG9kZShFKSwgcmVncmVwbGFjZShFKSwgcmVnZXhwKEUpLCByZWdleHBfcGFja2FnZShFKSwgcmVnZXhwKEMpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9yZWdyZXBsYWNlIGIvZG9jL2VmdW4vcmVncmVwbGFjZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDU5YmIyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcmVncmVwbGFjZQpAQCAtMCwwICsxLDU3IEBACitTWU5PUFNJUworICAgICBzdHJpbmcgcmVncmVwbGFjZShzdHJpbmcgdHh0LCBzdHJpbmcgcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nfGNsb3N1cmUgcmVwbGFjZXBhdHRlcm4sIGludCBmbGFncykKKworQkVTQ0hSRUlCVU5HCisgICAgIERpZSBGdW5rdGlvbiBkdXJjaHN1Y2h0IGRlbiBTdHJpbmcgdHh0IG5hY2ggZWluZW0gVm9ya29tbWVuCisgICAgIGRlcyByZWd1bGFlcmVuIEF1c2RydWNrcyBwYXR0ZXJuLCB1bmQgZXJzZXR6dCBpaG4gZHVyY2gKKyAgICAgZGVuIFN0cmluZyByZXBsYWNlcGF0dGVybi4gKHJlcGxhY2VwYXR0ZXJuIGthbm4gYXVjaCBlaW5lIENsb3N1cmUKKyAgICAgc2Vpbi4gU2llIGJla29tbXQgYWxzIGFyZ3VtZW50IGRlbiBwYXNzZW5kZW4gU3Vic3RyaW5nIHVuZCBtdXNzCisgICAgIGRlbiBFcnNhdHpzdHJpbmcgenVydWVja2xpZWZlcm4uKQorCisgICAgIEltIHJlcGxhY2VzdHJpbmcga2FubiBtYW4gdmlhICcmJyBhdWYgZGVuIHp1bSBTdWNoYXVzZHJ1Y2sKKyAgICAgcGFzc2VuZGVuIFRlaWxzdHJpbmcgaW0gT3JpZ2luYWwgenVncmVpZmVuLiBNaXQgXG4gKHdvYmVpIG4KKyAgICAgZWluZSBHYW56emFobCBpc3QpIGthbm4gbWFuIGF1ZiBkZW4gbi10ZW4gVW50ZXJhdXNkcnVjaworICAgICBkZXMgcmVndWxhZXJlbiBBdXNkcnVja3MgenVncmVpZmVuLiBVbSAiJiIgb2RlciAiXFwxIiBhbHMKKyAgICAgRXJzZXR6dW5nIHp1IGVycmVpY2hlbiwgbXVzcyAiXFwmIiBiencgIlxcXFwxIiB2ZXJ3ZW5kZXQgd2VyZGVuLgorCisgICAgIEJlaW0gRmxhZyBiZXN0aW1tdCBlaW4gZ2VzZXR6dGVzIEJpdCAwLCBkYXNzIGRlciBBdXNkcnVjayBzbyBvZnQKKyAgICAgd2llIHZvcmhhbmRlbiBlcnNldHp0IHdpcmQsIHNvbnN0IG51ciBkYXMgZXJzdGUgQXVmdHJldGVuLgorICAgICBCaXQgMSBiZXN0aW1tdCwgb2IgZGVyIHJlZ3VsYWVyZSBBdXNkcnVjayAnZWQnIG9kZXIgJ3NlZCcga29tcGF0aWJlbAorICAgICBpc3QgKEJpdCBnZWxvZXNjaHQpIG9kZXIgJ2V4JyBrb21wYXRpYmVsIChnZXNldHp0KS4KKworICAgICBEaWUgRnVua3Rpb24gd2lya3Qgd2llIHMvcGF0dGVybi9yZXBsYWNlcGF0dGVybi9mbGFncyBpbgorICAgICBFZGl0b3JlbiB3aWUgdmkgb2RlciBzZWQuIFNpZSBpc3QgYmVzb25kZXJzIGd1dCBnZWVpZ25ldCB1bQorICAgICB2YXJpYWJsZSBTdHJpbmdzIHp1IGVyc2V0emVuLCBpbSBHZWdlbnNhdHogenUgcmVnZXhwbG9kZSwgd28KKyAgICAgbWFuIGRlbiBTdHJpbmcgbnVyIG5hY2ggZWluZW0gcmVndWxhZXJlbiBBdXNkcnVjayB6ZXJsZWdlbiBrYW5uLgorCitCRUlTUElFTEUKKyAgICAgLy8gZXJzZXR6dCBAQHdlckBAIGR1cmNoIGRlbiBOYW1lbiBkZXMgT2JqZWt0ZXMKKyAgICAgcmVncmVwbGFjZShzdHIsIkBAd2VyQEAiLChzdHJpbmcpb2JqLT5uYW1lKFdFUiwyKSwxKQorCisgICAgIC8vIGVyc2V0emUgYWxsZSBkb3BwZWx0ZW4gTGVlcnplaWNoZW4gZHVyY2ggZWluIGVpbnplbG5lcworICAgICByZWdyZXBsYWNlKHN0ciwgIiAgKiIsICIgIiwgMSk7CisKKyAgICAgLy8gU3VjaHQgbmFjaCAndGVpbHQgRGlyIG1pdDogJyB1bmQgc2NobGllc3N0IGRlbiBuYWNoZm9sZ2VuZGVuCisgICAgIC8vIFRleHQgbWl0IDx1bmRlcmxpbmU+IHVuZCA8L3VuZGVybGluZT4gZWluOyBiZWkgamVkZW0gQXVmdHJldGVuLgorCisgICAgIG1zZ2luID0gcmVncmVwbGFjZShtc2dpbiwgInRlaWx0IERpciBtaXQ6ICguKikiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZWlsdCBEaXIgbWl0OiA8dW5kZXJsaW5lPlxcMTwvdW5kZXJsaW5lPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSk7CisKKyAgICAgLy8gRXJzZXR6dCBkaWUgPHVuZGVybGluZT4gaHRtbC1UYWdzIGR1cmNoIGRpZSB2dDEwMAorICAgICAvLyBFc2NhcGUtU2VxdWVuemVuIGZ1ZXIgVW50ZXJzdHJlaWNodW5nCisgICAgIHR4dCA9IHJlZ3JlcGxhY2UodHh0LCAiPHVuZGVybGluZT4iLCAiPEVTQz5bNW0iLCAxKTsKKworICAgICAvLyBFcnNldHp0IGRhcyBXb3J0IEhPVVNFIGluIEtsZWluYnVjaHN0YWJlbi4KKyAgICAgdHh0ID0gcmVncmVwbGFjZSh0eHQsICJIT1VTRSIsICMnbG93ZXJfY2FzZSwgMSk7CisKK0JVR1M6CisgICAgIEkgaGF2ZSB3cml0dGVuIHRoYXQgZWZ1bi4gSXQgZG9lc24ndCBoYXZlIEJVR1MuIEJ5IGRlZmluaXRpb24uCisgICAgIFdlbGwsIGluIGZhY3QgaXQgY3Jhc2hlZCBhcyBJIGZpcnN0IHRyaWVkIGl0IG9uIHJ1bm5pbmcgVEFQUE11ZC4KKyAgICAgKnNpZ2gqCisgICAgIE1hcmN1c0BUQVBQTXVkCisKK1NJRUhFIEFVQ0gKKyAgICAgVmVyd2FuZHQ6IHJlZ2V4cChFKSwgcmVnZXhwbG9kZShFKSwgc3NjYW5mKEUpCisgICAgIEFlaG5saWNoOiByZXBsYWNlX3BlcnNvbmFsKEwpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9yZW1vdmVfYWN0aW9uIGIvZG9jL2VmdW4vcmVtb3ZlX2FjdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTM5YTUxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcmVtb3ZlX2FjdGlvbgpAQCAtMCwwICsxLDIxIEBACitTWU5PUFNJUworICAgICAgICBpbnQgcmVtb3ZlX2FjdGlvbihpbnR8c3RyaW5nIHZlcmIpOworICAgICAgICBpbnQgcmVtb3ZlX2FjdGlvbihpbnR8c3RyaW5nIHZlcmIsIG9iamVjdCBvYmopOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgV2VubiA8dmVyYj4gZWluIFN0cmluZyBpc3Q6IGVudGZlcm5lIGRhcyBlcnN0ZSBpbSBPYmpla3QgPG9iaj4gZHVyY2gKKyAgICAgICAgYWRkX2FjdGlvbigpIGRlZmluaWVydGUgS29tbWFuZG8gPHZlcmI+LiBXZW5uIDxvYmo+IG5pY2h0CisgICAgICAgIGFuZ2VnZWJlbiB3aXJkLCB3aXJkIHN0YW5kYXJkbWFlc3NpZyB0aGlzX3BsYXllcigpIHZlcndlbmRldC4KKyAgICAgICAgR2liIDEgenVydWVjaywgd2VubiBlaW4gS29tbWFuZG8gZ2VmdW5kZW4gdW5kIGVudGZlcm50IHd1cmRlLAorICAgICAgICBzb25zdCAwLgorCisgICAgICAgIFdlbm4gPHZlcmI+IGVpbiBJbnRlZ2VyIGlzdDogd2VubiB2ZXJiIG5pY2h0IDAgaXN0LCBlbnRmZXJuZSBhbGxlCisgICAgICAgIGR1cmNoIGRhcyBPYmpla3QgPG9iaj4gZGVmaW5pZXJ0ZW4gS29tbWFuZGkuIFdlbm4gPG9iaj4gbmljaHQKKyAgICAgICAgYW5nZWdlYmVuIHdpcmQsIHdpcmQgc3RhbmRhcmRtYWVzc2lnIHRoaXNfcGxheWVyKCkgdmVyd2VuZGV0LiBHaWJ0CisgICAgICAgIGRpZSBBbnphaGwgZGVyIGVudGZlcm50ZW4gS29tbWFuZGkgenVydWVjay4KKworU0lFSEUgQVVDSAorICAgICBWZXJ3YW5kdDogICAgICBhZGRfYWN0aW9uKEUpLCBpbml0KEUpCisgICAgIEFsdGVybmF0aXY6CUFkZEFjdGlvbihMKSwgQWRkQ21kKEwpCisKKzcuQXVnIDIwMDcgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3JlbW92ZV9jYWxsX291dCBiL2RvYy9lZnVuL3JlbW92ZV9jYWxsX291dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWEyMmRiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcmVtb3ZlX2NhbGxfb3V0CkBAIC0wLDAgKzEsMzIgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCByZW1vdmVfY2FsbF9vdXQoc3RyaW5nIGZ1bik7CisgICAgICAgIGludCByZW1vdmVfY2FsbF9vdXQoY2xvc3VyZSBmdW4pOworCitCRVNDSFJFSUJVTkc6CisgICAgICAgIEVudGZlcm50IGRlbiBuYWVjaHN0ZW4gbGF1ZmVuZGVuIGNhbGxfb3V0KCkgYXVmIGRpZSBGdW5rdGlvbiA8ZnVuPgorICAgICAgICBpbSBha3R1ZWxsZW4gT2JqZWt0IGJ6dy4gZGVuIG5hZWNoc3RlbiBsYXVmZW5kZW4gY2FsbF9vdXQoKSBhdWYgZGllCisgICAgICAgIENsb3N1cmUgPGZ1bj4uIERpZSB2ZXJibGVpYmVuZGUgWmVpdCB3aXJkIHp1cnVlY2tnZWxpZWZlcnQuCisKKyAgICAgICAgV2VubiBlcyBrZWluZSBsYXVmZW5kZW4gY2FsbF9vdXQoKXMgYXVmIGdpYnQsIHdpcmQgLTEgenVydWVjaworICAgICAgICBnZWxpZWZlcnQuCisKK0JFSVNQSUVMCisgICAgICAgIFVtIGFsbGUgY2FsbF9vdXQoKXMgYXVmIE1laW5lRnVua3Rpb24oKSB6dSBlbnRmZXJuZW46CisKKyAgICAgICAgd2hpbGUocmVtb3ZlX2NhbGxfb3V0KCJNZWluZUZ1bmt0aW9uIikgIT0gLTEpOyAgICAgIC8qIHdpZWRlcmhvbGUgKi8KKworQlVHUworICAgICAgICBEYXMgRW50ZmVybmVuIHZvbiBjYWxsX291dCgpcyBhdWYgQ2xvc3VyZXMgZnVua3Rpb25pZXJ0IG51ciwgd2VubiBkZXIKKyAgICAgICAgZXhha3QgZ2xlaWNoZSBXZXJ0IGZ1ZXIgZGllIENsb3N1cmUgdmVyd2VuZGV0IHdpcmQuCisKKyAgICAgICAgRGFzIGZ1bmt0aW9uaWVydDoKKyAgICAgICAgICAgIGNsb3N1cmUgY2wgPSBzeW1ib2xfZnVuY3Rpb24oIm1haW4iLCBvYmopOworICAgICAgICAgICAgY2FsbF9vdXQoY2wsIDIpOworICAgICAgICAgICAgcmVtb3ZlX2NhbGxfb3V0KGNsKTsKKworICAgICAgICBEYXMgZnVua3Rpb25pZXJ0IG5pY2h0OgorICAgICAgICAgICAgY2FsbF9vdXQoc3ltYm9sX2Z1bmN0aW9uKCJtYWluIiwgb2JqKSwgMik7CisgICAgICAgICAgICByZW1vdmVfY2FsbF9vdXQoc3ltYm9sX2Z1bmN0aW9uKCJtYWluIiwgb2JqKSk7CisKK1NJRUhFIEFVQ0gKKyAgICAgICAgY2FsbF9vdXQoRSksIGNhbGxfb3V0X2luZm8oRSksIGZpbmRfY2FsbF9vdXQoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3JlbW92ZV9pbnB1dF90byBiL2RvYy9lZnVuL3JlbW92ZV9pbnB1dF90bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2Q5MzkzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcmVtb3ZlX2lucHV0X3RvCkBAIC0wLDAgKzEsMzggQEAKK1NZTk9QU0lTCisgICAgICAgIGludCByZW1vdmVfaW5wdXRfdG8gKG9iamVjdCBwbGF5ZXIpOworICAgICAgICBpbnQgcmVtb3ZlX2lucHV0X3RvIChvYmplY3QgcGxheWVyLCBzdHJpbmcgZnVuKTsKKyAgICAgICAgaW50IHJlbW92ZV9pbnB1dF90byAob2JqZWN0IHBsYXllciwgY2xvc3VyZSBmdW4pOworICAgICAgICBpbnQgcmVtb3ZlX2lucHV0X3RvIChvYmplY3QgcGxheWVyLCBvYmplY3QgZnVuKTsKKyAgICAgICAgaW50IHJlbW92ZV9pbnB1dF90byAob2JqZWN0IHBsYXllciwgb2JqZWN0IG9iaiwgc3RyaW5nIGZ1bik7CisKK0JFU0NIUkVJQlVORworICAgICAgICBFbnRmZXJudCBlaW4gaGFlbmdpZ2VzIGlucHV0X3RvKCkgYXVzIGRlbSBpbnRlcmFrdGl2ZW4gUGxheWVyb2JqZWt0LgorICAgICAgICBXZW5uIDxmdW4+IG5pY2h0IGFuZ2VnZWJlbiBpc3QsIHdpcmQgZGVyIHp1bGV0enQgYXVmZ2VydWZlbiBpbnB1dF90bygpCisgICAgICAgIGVudGZlcm50LgorCisgICAgICAgIFd1cmRlIDxmdW4+IGFuZ2VnZWJlbiwgZW50ZmVybnQgcmVtb3ZlX2lucHV0X3RvIGRhcyBuZXVlc3RlIGF1ZiA8ZnVuPgorICAgICAgICBhdWZnZXJ1ZmVuZSBpbnB1dF90by4gSmUgbmFjaCBkZXIgRGVmaW5pdGlvbiB2b24gPGZ1bj4gd2lyZCBuYWNoCisgICAgICAgIHVudGVyc2NoaWVkbGljaGVuIEtyaXRlcmllbiBnZXN1Y2h0OgorICAgICAgICAgIC0gPGZ1bj4gaXN0IGVpbiBTdHJpbmc6IGdlc3VjaHQgd2lyZCBuYWNoIGRlbSBGdW5rdGlvbnNuYW1lbgorICAgICAgICAgIC0gPGZ1bj4gaXN0IGVpbiBPYmpla3Q6IGdlc3VjaHQgd2lyZCBuYWNoIGRlbSBPYmpla3QsIGluIGRlbQorICAgICAgICAgICAgaW5wdXRfdG8oKSBhdWZnZXJ1ZmVuIHd1cmRlCisgICAgICAgICAgLSA8ZnVuPiBpc3QgZWluZSBDbG9zdXJlOiBnZXN1Y2h0IHdpcmQgbmFjaCBkZXIgQ2xvc3VyZSwgZGllCisgICAgICAgICAgICBpbnB1dF90bygpIGVudGhhZWx0CisgICAgICAgICAgLSA8b2JqPiB1bmQgPGZ1bj4gd3VyZGVuIGFuZ2VnZWJlbjogZXMgd2lyZCBuYWNoIE9iamVrdCB1bmQKKyAgICAgICAgICAgIEZ1bmt0aW9uc25hbWUgZ2VzdWNodC4gQmVpZGUgbXVlc3NlbiB1ZWJlcmVpbnN0aW1tZW4uCisKKyAgICAgICAgcmVtb3ZlX2lucHV0X3RvKCkgbGllZmVydCAxIGJlaSBFcmZvbGcsIHNvbnN0IDAgKGVzIHd1cmRlIGtlaW4KKyAgICAgICAgaW5wdXRfdG8oKSBnZWZ1bmRlbiwgZGFzIE9iamVrdCBpc3QgbmljaHQgaW50ZXJha3RpdiBvZGVyIGVzIGdpYnQKKyAgICAgICAga2VpbiBoYWVuZ2lnZXMgaW5wdXRfdG8oKSBhdWYgZGVtIE9iamVrdCkuCisKK0JFSVNQSUVMRQorICAgICAgICBFbnRmZXJudCBhbGxlIGhhZW5naWdlbiBpbnB1dF90bygpcyBkZXMgYWt0dWVsbGVuIFNwaWVsZXJzLCBmYWxscworICAgICAgICB2b3JoYW5kZW46CisgICAgICAgICAgICB3aGlsZShyZW1vdmVfaW5wdXRfdG8odGhpc19pbnRlcmFjdGl2ZSgpKSk7CisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi45LgorCitTSUVIRSBBVUNICisgICAgICAgIGlucHV0X3RvKEUpLCBmaW5kX2lucHV0X3RvKEUpLCBpbnB1dF90b19pbmZvKEUpLAorICAgICAgICBxdWVyeV9pbnB1dF9wZW5kaW5nKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9yZW1vdmVfaW50ZXJhY3RpdmUgYi9kb2MvZWZ1bi9yZW1vdmVfaW50ZXJhY3RpdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ2ZDIwMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3JlbW92ZV9pbnRlcmFjdGl2ZQpAQCAtMCwwICsxLDEzIEBACitTWU5PUFNJUworICAgICAgICB2b2lkIHJlbW92ZV9pbnRlcmFjdGl2ZShvYmplY3Qgb2IpCisKK0RFU0NSSVBUSU9OCisgICAgICAgIENsb3NlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3Qgb2IuCisKKyAgICAgICAgRm9yIHRoZSB0aW1lIG9mIHRoZSBMUEMgZXhlY3V0aW9uLCB0aGUgb2JqZWN0IGlzIG9ubHkgbWFya2VkCisgICAgICAgIGludGVybmFsbHkgYXMgJ2Fib3V0IHRvIGJlIGNsb3NlZCcsIG1lYW5pbmcgdGhhdCB3aGlsZSBhbGwKKyAgICAgICAgb3V0cHV0IHdpbGwgYmUgcmVkaXJlY3RlZCB0byBzdGRvdXQsIHRoZSBhY3R1YWwgbmV0d29yayBjb25uZWN0aW9uCisgICAgICAgIHdpbGwgY29udGludWUgdG8gZXhpc3QgdW50aWwgdGhlIExQQyBleGVjdXRpb24gZW5kcy4KKworU0VFIEFMU08KKyAgICAgICAgY29ubmVjdChNKSwgbG9nb24oQSksIGRpc2Nvbm5lY3QoTSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3JlbmFtZSBiL2RvYy9lZnVuL3JlbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjc0NDkyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcmVuYW1lCkBAIC0wLDAgKzEsMjUgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCByZW5hbWUoc3RyaW5nIGZyb20sIHN0cmluZyB0byk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBEaWUgRWZ1biByZW5hbWUoKSB2ZXJzY2hpZWJ0IDxmcm9tPiBuYWNoIDx0bz4uIFdlbm4gPGZyb20+IGVpbiBGaWxlCisgICAgICAgIGlzdCwga2FubiA8dG8+IGVudHdlZGVyIGVpbiBhbmRlcmUgRmlsZSBvZGVyIGVpbiBWZXJ6ZWljaG5pcyBzZWluLgorICAgICAgICBXZW5uIDxmcm9tPiBlaW4gVmVyemVpY2huaXMgaXN0LCBtdXNzIDx0bz4gYXVjaCBlaW4gVmVyemVpY2huaXMgc2Vpbi4KKyAgICAgICAgV2VubiBpbiBkaWVzZW0gRmFsbCA8dG8+IGV4aXN0aWVydCB1bmQgZWluIFZlcnplaWNobmlzIGlzdCwgd2lyZAorICAgICAgICA8ZnJvbT4gaW4gPHRvPiB2ZXJzY2hvYmVuIHVuZCBiZWhhZWx0IHNlaW5lbiBOYW1lbi4KKworICAgICAgICA8ZnJvbT4gdW16dWJlbmVubmVuIGVyZm9yZGVydCBTY2hyZWlicmVjaHRlIGF1ZiA8ZnJvbT4uCisKKyAgICAgICAgVW50ZXJ2ZXJ6ZWljaG5pc3NlIChWZXJ6ZWljaG5pc3NlIGluIFZlcnplaWNobmlzc2VuKSBrb2VubmVuIG51ciBhdWYKKyAgICAgICAgTWFzY2hpbmVuIHVtYmVuYW5udCB3ZXJkZW4sIGRpZSB1bnRlciBTeXN0ZW0gViBsYXVmZW4sIGQuaC4gZXMgaXN0CisgICAgICAgIG5pY2h0IG1vZWdsaWNoLCBkaWVzZSBpbiBlaW4gYW5kZXJlcyBWZXJ6ZWljaG5pcyB6dSB2ZXJzY2hpZWJlbi4gRGFzCisgICAgICAgIFZlcnNjaGllYmVuIHZvbiBWZXJ6ZWljaG5pc3NlbiB2b24gZWluZW0gRmlsZXN5c3RlbSB6dW0gYW5kcmVyZW4gaXN0CisgICAgICAgIHVudGVyIGtlaW5lbSBTeXN0ZW0gbW9lZ2xpY2guCisKKyAgICAgICAgQmVpIEVyZm9sZyBsaWVmZXJ0IHJlbmFtZSgpIDAsIGJlaSBGZWhsc2NobGFnIGVpbmVuIFdlcnQgdW5nbGVpY2ggMC4KKworQkVJU1BJRUwKKyAgICAgICAgcmVuYW1lKCIvcGxheWVycy93aXphcmQvb2JqLmMiLCAiL3BsYXllcnMvd2l6YXJkL25ld29iai5jIik7CisKK1NJRUhFIEFVQ0gKKyAgICAgICAgY29weV9maWxlKEUpLCBta2RpcihFKSwgcm1kaXIoRSksIHJtKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9yZW5hbWVfb2JqZWN0IGIvZG9jL2VmdW4vcmVuYW1lX29iamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDMxNjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcmVuYW1lX29iamVjdApAQCAtMCwwICsxLDEwIEBACitTWU5PUFNJUzoKKwl2b2lkIHJlbmFtZV9vYmplY3QgKG9iamVjdCBvYiwgc3RyaW5nIG5ld19uYW1lKTsKKworREVTQ1JJUFRJT046CisJR2l2ZSB0aGUgY3VycmVudCBvYmplY3QgYSBuZXcgb2JqZWN0X25hbWUuIENhdXNlcyBhIHByaXZpbGVnZQorCXZpb2xhdGlvbi4gVGhlIG5ldyBuYW1lIG11c3Qgbm90IGNvbnRhaW4gYSAjIGNoYXJhY3RlciwgZXhjZXB0CisJYXQgdGhlIGVuZCwgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggY2xvbmUgbnVtYmVycy4KKworU0VFIEFMU086CisJY3JlYXRvcihFKSwgb2JqZWN0X25hbWUoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3JlcGxhY2VfcHJvZ3JhbSBiL2RvYy9lZnVuL3JlcGxhY2VfcHJvZ3JhbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODEyZDRlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcmVwbGFjZV9wcm9ncmFtCkBAIC0wLDAgKzEsNTIgQEAKK1NZTk9QU0lTCisgICAgICAgIHZvaWQgcmVwbGFjZV9wcm9ncmFtKCk7CisgICAgICAgIHZvaWQgcmVwbGFjZV9wcm9ncmFtKHN0cmluZyBwcm9ncmFtKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEVyc2V0enQgZWluIFByb2dyYW1tIG1pdCBkZW0gZ2VlcmJ0ZW4gUHJvZ3JhbW0gKGluaGVyaXQpIDxwcm9ncmFtPi4KKyAgICAgICAgRGFzIEFyZ3VtZW50IDxwcm9ncmFtPiBrYW5uIHdlZ2dlbGFzc2VuIHdlcmRlbiwgd2VubiBudXIgZWluIFByb2dyYW1tCisgICAgICAgIGdlZXJidCB3aXJkLiBJbiBkaWVzZW0gRmFsbCB3YWVobHQgZGVyIFRyZWliZXIgYXV0b21hdGlzY2ggZGllc2VzIGVpbmUKKyAgICAgICAgZ2VlcmJ0ZSBQcm9ncmFtbS4KKworICAgICAgICBEaWVzZSBFZnVuIGlzdCBudWV0emxpY2gsIHdlbm4gZXMgdW0gTGVpc3R1bmcgdW5kIFNwZWljaGVydmVyYnJhdWNoCisgICAgICAgIGRlcyBUcmVpYmVycyBnZWh0LiBFaW4gUHJvZ3JhbW0sIHdlbGNoZXMga2VpbmUgenVzYWV0emxpY2hlbiBWYXJpYWJsZW4KKyAgICAgICAgb2RlciBGdW5rdGlvbmVuIGJyYXVjaHQgKGF1c3NlciB3YWVocmVuZCBkZXIgRXJzdGVsbHVuZyksIGthbm4KKyAgICAgICAgcmVwbGFjZV9wcm9ncmFtKCkgYXVmcnVmZW4sIHVtIGRpZSBUcmVmZmVycXVvdGUgZGVzIFRyZWliZXJzIGF1ZiBkZW4KKyAgICAgICAgRnVua3Rpb25lbi1DYWNoZXMgenUgZXJob2VoZW4uIERpZXMgdmVycmluZ2VydCBkaWUgQW56YWhsIFByb2dyYW1tZQorICAgICAgICBpbSBTeXN0ZW0uCisKKyAgICAgICAgUmFldW1lIHNpbmQgZWluIGd1dGVzIEJlaXNwaWVsIGZ1ZXIgZGllIEFud2VuZHVuZyBkaWVzZXIgRnVua3Rpb24sIGRhCisgICAgICAgIHZpZWxlIFJhZXVtZSBudXIgYXVzIGVpbmVtIEluaGVyaXQgdW5kIGVpbmVyIEtvbmZpZ3VyYXRpb25zZnVua3Rpb24KKyAgICAgICAgYmVzdGVoZW4uIEplZGVzIE9iamVrdCBrYW5uIHJlcGxhY2VfcHJvZ3JhbSgpIGF1ZnJ1ZmVuLCB2ZXJsaWVydCBkYWJlaQorICAgICAgICBqZWRvY2ggYWxsZSBWYXJpYWJsZW4gdW5kIEZ1bmt0aW9uZW4sIGRpZSBuaWNodCBpbSBnZWVyYnRlbiBQcm9ncmFtbQorICAgICAgICBkZWZpbmllcnQgc2luZC4KKworICAgICAgICBXZW5uIHJlcGxhY2VfcHJvZ3JhbSgpIGFuZ2V3ZW5kZXQgd2lyZCwgd2VyZGVuIFNoYWRvd3Mgdm9tIE9iamVrdAorICAgICAgICBlbnRmZXJudCwgaW4gZGVtIHJlcGxhY2VfcHJvZ3JhbSgpIHN0YXR0ZmluZGV0LiBEaWVzIGlzdCBzbyBzZWl0CisgICAgICAgIDMuMkAxNjYuCisKKyAgICAgICAgRXMgaXN0IG5pY2h0IG1vZWdsaWNoLCByZXBsYWNlX3Byb2dyYW0oKSBhdWZ6dXJ1ZmVuLCB3ZW5uIGVzIGFuIGRhcworICAgICAgICBPYmpla3QgZ2VidW5kZW5lIChMYW1iZGEtKSBDbG9zdXJlcyBnaWJ0LiBIaW5nZWdlbiBpc3QgZXMgbW9lZ2xpY2gsCisgICAgICAgIHp1ZXJzdCBkYXMgUHJvZ3JhbW0gZGVzIE9iamVrdHMgenUgZXJzZXR6ZW4gdW5kIGRhbm4gTGFtYmRhY2xvc3VyZXMKKyAgICAgICAgZGFyYW4genUgYmluZGVuLgorCisgICAgICAgIERhcyBFcnNldHplbiBkZXMgUHJvZ3JhbW1zIGZpbmRldCBlcnN0IHN0YXR0LCB3ZW5uIGRhcyBPYmpla3QKKyAgICAgICAgdm9sbHN0YWVuZGlnIGFiZ2VhcmJlaXRldCB3dXJkZSwgbmljaHQgc2Nob24gYmVpbSBBdWZydWYgZGVyIEZ1bmt0aW9uCisgICAgICAgIHJlcGxhY2VfcHJvZ3JhbSgpLiBEYXMga2FubiBkYXp1IGZ1ZWhyZW4sIGRhc3MgQ2xvc3VyZXMgYXVmIGluendpc2NoZW4KKyAgICAgICAgdmVyc2Nod3VuZGVuZSBMZnVucyBkZXMgT2JqZWt0cyByZWZlcmVuemllcmVuLiBEYXMgc3RlbGx0IGFsbGVyZGluZ3MKKyAgICAgICAga2VpbiBQcm9ibGVtIGRhciwgc29sYW5nZSBkaWVzZSBSZWZlcmVuemVuIG5pY2h0IGF1c2dlZnVlaHJ0IHdlcmRlbi4KKworQkVNRVJLVU5HRU4KKyAgICAgICAgUmFldW1lIGJlbnV0emVuIHJlcGxhY2VfcHJvZ3JhbSBhdXRvbWF0aXNjaC4gRXMgaXN0IG5pY2h0IHNpbm52b2xsCisgICAgICAgIG9kZXIgbm90d2VuZGlnLCByZXBsYWNlX3Byb2dyYW0gc2VsYnN0IG9obmUgS29uc3VsdGF0b24gbWl0IGVpbmVtCisgICAgICAgIEVyem1hZ2llciBlaW56dXNldHplbiEKKworQlVHUworICAgICAgICBXZW5uIGVpbiBlcnNldHplbmRlcyBQcm9ncmFtbSB2aXJ0dWVsbCBnZWVyYnRlIFZhcmlhYmxlbiBlbnRoYWVsdCwKKyAgICAgICAgbXVzcyBkaWVzZXMgUHJvZ3JhbW0gYWxzIGVyc3RlcyBnZWVyYnQgd2VyZGVuLiBPaG5lIGRpZXNlCisgICAgICAgIEVpbnNjaHJhZW5rdW5nIHVlYmVybGViZW4gZGllIGZhbHNjaGVuIFZhcmlhYmxlbiBkZW4KKyAgICAgICAgRXJzZXR6dW5nc3Byb3plc3MuCisKK0FFTkRFUlVOR0VOCisgICAgICAgIExETXVkIDMuMi45IGxpZXNzIHp1LCBkYXNzIGRhcyBBcmd1bWVudCA8cHJvZ3JhbT4gd2VnZ2VsYXNzZW4gd2lyZCwKKyAgICAgICAgd2VubiBudXIgZWluIEluaGVyaXQgZXhpc3RpZXJ0LgpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vcmVzdG9yZV9vYmplY3QgYi9kb2MvZWZ1bi9yZXN0b3JlX29iamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTk5MWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcmVzdG9yZV9vYmplY3QKQEAgLTAsMCArMSw0NSBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IHJlc3RvcmVfb2JqZWN0KHN0cmluZyBuYW1lKTsKKyAgICAgICAgaW50IHJlc3RvcmVfb2JqZWN0KHN0cmluZyBzdHIpOyAgICAgKFZPUkxBRVVGSUcpCisKK0JFU0NIUkVJQlVORworICAgICAgICBMYWVkdCBXZXJ0ZSB2b24gVmFyaWFibGVuIGZ1ZXIgZGFzIGFrdHVlbGxlIE9iamVrdCBhdXMgZGVyIERhdGVpCisgICAgICAgIDxuYW1lPiBvZGVyIGRpcmVrdCBhdXMgZGVtIFN0cmluZyA8c3RyPi4KKworICAgICAgICBVbSBkaXJla3QgYXVzIGVpbmVtIFN0cmluZyBWYXJpYWJsZW4gbGFkZW4genUga29lbm5lbiwgbXVzcyBkaWVzZXIKKyAgICAgICAgbWl0IGRlciB0eXBpc2NoZW4gWmVpbGUgIiN4OnkiIGJlZ2lubmVuLiBTdHJpbmdzLCBkaWUgdm9uIGRlciBFZnVuCisgICAgICAgIHNhdmVfb2JqZWN0KCkgZXJ6ZXVndCB3dXJkZW4sIGJlZ2lubmVuIHNvLgorCisgICAgICAgIFdlbm4gVmFyaWFibGVuIGF1cyBlaW5lciBEYXRlaSBnZWxhZGVuIHdlcmRlbiwga2FubiA8bmFtZT4gbWl0IC5jCisgICAgICAgIGVuZGVuLiBEaWVzZSBEYXRlaWVuZHVuZyB3aXJkIHZvbSBUcmVpYmVyIGVudGZlcm50LiBEYXMgTWFzdGVyb2JqZWt0CisgICAgICAgIGZ1ZWd0IGRlbSBEYXRlaW5hbWVuIGVpbiAubyBoaW56dS4gRGllIEd1ZWx0aWdrZWl0IGRlcyBEYXRlaW5hbWVucworICAgICAgICB3aXJkIG1pdCBkZXIgRnVua3Rpb24gY2hlY2tfdmFsaWRfcGF0aCgpIGF1dG9tYXRpc2NoIHVlYmVycHJ1ZWZ0LgorCisgICAgICAgIERpZSBGdW5rdGlvbiBnaWJ0IDEgenVydWVjaywgd2VubiBkaWUgVmFyaWFibGVuIGVyZm9sZ3JlaWNoIGdlbGFkZW4KKyAgICAgICAgd3VyZGVuIHVuZCAwLCB3ZW5uIGVzIG5pY2h0cyB6dSBsYWRlbiBnYWIuCisKKyAgICAgICAgVmFyaWFibGVuIG1pdCBkZW0gVHlwZW52ZXJtZXJrIG5vc2F2ZSB3ZXJkZW4gbmljaHQgZ2VsYWRlbiwgenVtCisgICAgICAgIEJlaXNwaWVsIG5vc2F2ZSBpbnQgeHh4OworCisgICAgICAgIENsb3N1cmVzIGF1cyBMZnVucywgVmFyaWFibG5lIHVuZCBzaW11bF9lZnVucyB3ZXJkZW4gbnVyIGdlbGFkZW4sCisgICAgICAgIHdlbm4gc2llIGdlZnVuZGVuIHdlcmRlbi4gRmFsbHMgbmljaHQsIHdlcmRlbiBzaWUgbWl0IGRlbSBXZXJ0ICcwJworICAgICAgICBnZWxhZGVuLgorCisgICAgICAgIFdlbm4gVmVyZXJidW5nIHZlcndlbmRldCB3aXJkLCBrYW5uIGVzIHZvcmtvbW1lbiwgZGFzcyBtZWhyZXJlCisgICAgICAgIFZhcmlhYmxlbiBtaXQgZGVtIGdsZWljaGVuIE5hbWVuIGFuIHVudGVyc2NoaWVkbGljaGVuIE9ydGVuIHZvcmtvbW1lbgorICAgICAgICB1bmQgZGVzaGFsYiBpbiBkZXIgU3BlaWNoZXJkYXRlaSBtZWhybWFscyBhdWZ0cmV0ZW4uIEJlaW0gTGFkZW4gZGVyCisgICAgICAgIFZhcmlhYmxlbiB3ZXJkZW4gc2llIGluIFJlaWhlbmZvbGdlIGlocmVzIEF1ZnRyZXRlbnMgaW0gVmVyZXJidW5nc2JhdW0KKyAgICAgICAgZ2VsYWRlbi4gRWluIGdlZWlnbmV0ZXMgVm9yZ2VoZW4gaXN0IGRpZSBWZXJ3ZW5kdW5nIHZvbiBWZXJib3NlIHVuZAorICAgICAgICBlaW56aWdhcnRpZ2VuIE5hbWVuIGJlaSBuaWNodC1zdGF0aXNjaGVuIFZhcmlhYmxlbi4gU28gd2lyZCBhdWNoIGRhcworICAgICAgICBtYW51ZWxsZSBMZXNlbiBvZGVyIEVkaXRpZXJlbiBkZXMgU2F2ZWZpbGVzIGVpbmZhY2hlci4KKworQUVOREVSVU5HRU4KKyAgICAgICAgRGFzIGRpcmVrdGUgTGFkZW4gYXVzIGVpbmVtIFN0cmluZyB3dXJkZSBpbiBMRE11ZCAzLjIuOCBlaW5nZWZ1ZWhydCwKKyAgICAgICAgICAgIHdpcmQgYWJlciBtb2VnbGljaGVyd2Vpc2UgaW4gWnVrdW5mdCBpbiBlaW5lIHNlcGFyYXRlIEVmdW4KKyAgICAgICAgICAgIGF1c2dlbGFnZXJ0LgorICAgICAgICBMRE11ZCAzLjIuOSBlcmdhZW56dGUgZGllIEZ1bmt0aW9uIHVtIGRpZSBNb2VnbGljaGtlaXQsCisgICAgICAgICAgICBOb25MYW1iZGEtQ2xvc3VyZXMsIFN5bWJvbGUgdW5kIGdlcXVvdGV0ZSBBcnJheXMgenUgbGFkZW4sCisgICAgICAgICAgICBpbmRlbSBlaW4gbmV1ZXMgRm9ybWF0IGZ1ZXIgZGFzIFNhdmVmaWxlIHZlcndlbmRldCB3aXJkLgorCitTSUVIRSBBVUNICisgICAgICAgIHNhdmVfb2JqZWN0KEUpLCByZXN0b3JlX3ZhbHVlKEUpLCB2YWxpZF9yZWFkKE0pCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9yZXN0b3JlX3ZhbHVlIGIvZG9jL2VmdW4vcmVzdG9yZV92YWx1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQ0YjE4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcmVzdG9yZV92YWx1ZQpAQCAtMCwwICsxLDE3IEBACitTWU5PUFNJUworICAgICAgICBtaXhlZCByZXN0b3JlX3ZhbHVlKHN0cmluZyBzdHIpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgV2FuZGVsdCBkaWUgU3RyaW5nLUVudHNwcmVjaHVuZyA8c3RyPiBlaW5lcyBXZXJ0ZXMgenVydWVjayBpbiBkZW4gV2VydAorICAgICAgICBzZWxic3QgdW5kIGdpYnQgZGllc2VuIFdlcnQgenVydWVjay4gPHN0cj4gaXN0IGVpbiBTdHJpbmcsIHdpZSBlciB2b24KKyAgICAgICAgc2F2ZV92YWx1ZSgpIGVyemV1Z3Qgd2lyZC4gRGllIFNwZXppZmlrYXRpb24gZGVzIFNwZWljaGVyZm9ybWF0ZXMKKyAgICAgICAgJyN4OnknIGlzdCBvcHRpb25hbC4KKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjguCisgICAgICAgIE1pdCBMRE11ZCAzLjIuOSBrYW0gZGFzIExhZGVuIHZvbiBOb24tTGFtYmRhIENsb3N1cmVzLCBTeW1ib2xlbiB1bmQKKyAgICAgICAgZ2VxdW90ZXRlbiBBcnJheXMgaGluenUsIHdvenUgZWluIG5ldWVzIEZvcm1hdCBmdWVyIGRpZSBTcGVpY2hlcmRhdGVpCisgICAgICAgIHZlcndlbmRldCB3aXJkLgorCitTSUVIRSBBVUNICisgICAgICAgIHNhdmVfdmFsdWUoRSksIHJlc3RvcmVfb2JqZWN0KEUpLCBzYXZlX29iamVjdChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vcmV2ZXJzZSBiL2RvYy9lZnVuL3JldmVyc2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjNzg5MAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3JldmVyc2UKQEAgLTAsMCArMSwzMSBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50aSAgICByZXZlcnNlIChpbnQgYXJnKQorICAgICAgICBzdHJpbmcgIHJldmVyc2UgKHN0cmluZyBhcmcpCisgICAgICAgIG1peGVkICogcmV2ZXJzZSAobWl4ZWQgKiBhcmcpCisgICAgICAgIG1peGVkICogcmV2ZXJzZSAobWl4ZWQgKiAmIGFyZykKKworREVTQ1JJUFRJT04KKyAgICAgICAgS2VocnQgZGllIFJlaWhlbmZvbGdlIGRlcyBJbmhhbHRlcyB2b24gQXJyYXkgb2RlciBTdHJpbmcgPGFyZz4KKyAgICAgICAgdW0gdW5kIGxpZWZlcnQgZGVuIG5ldWVuIFdlcnQgYWxzIFJlc3VsdGF0LgorICAgICAgICBJc3QgPGFyZz4gZWluZSBaYWhsLCB3aXJkIGRpZSBSZWloZW5mb2xnZSBkZXIgQml0cyBpbiA8YXJnPiB1bWdla2VocnQuCisKKyAgICAgICAgV2VubiBpbiBkZXIgUmVmZXJlbnotVmFyaWFudGUgdmVyd2VuZGV0LCB3aXJkIGRhcyBBcmd1bWVudGFycmF5IHNlbGJlcgorICAgICAgICBpbnZlcnRpZXJ0IHVuZCBhdWNoIHp1cnVlY2tnZWdlYmVuLgorCitFWEFNUExFUworICAgICAgICByZXZlcnNlICgweDMwNmEpIC0gcmV0dXJuIDB4NTYwYzAwMDAKKworICAgICAgICByZXZlcnNlICgidGVzdCIpIC0gcmV0dXJuICJ0c2V0IgorCisgICAgICAgIG1peGVkICogYSA9ICh7IDEsIDIgfSk7CisgICAgICAgIHJldmVyc2UoYSkgIC0gcmV0dXJucyAoeyAyLCAxIH0pLCBhIGlzdCB1bnZlcmFlbmRlcnQuCisgICAgICAgIHJldmVyc2UoJmEpIC0gcmV0dXJucyAoeyAyLCAxIH0pLCBhIGlzdCBudW4gKHsgMiwgMSB9KQorCitCVUdTCisgICAgICAgIFJlZmVyZW56LVRlaWxhcnJheXMgd2llIHJldmVyc2UoJihhWzEuLjJdKSkgc2luZCBuaWNodCB1bnRlcnN0dWV0enQuCisKK0dFU0NISUNIVEUKKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4zLjUyOS4KKyAgICAgICAgTERNdWQgMy4zLjUzMiBmdWVndGUgZGllIEJpdHVta2VociB2b24gWmFobGVuIGVpbi4KKworU0VFIEFMU08KZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3JtIGIvZG9jL2VmdW4vcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiNTllMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3JtCkBAIC0wLDAgKzEsOSBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IHJtKHN0cmluZyBmaWxlKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExvZXNjaHQgZGllIERhdGVpIDxmaWxlPi4gR2lidCAwIHp1cnVlY2ssIHdlbm4gZXR3YXMgbmljaHQgZ2VrbGFwcHQKKyAgICAgICAgaGF0LCAxIGJlaSBFcmZvbGcuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgbWtkaXIoRSksIHJtZGlyKEUpLCByZW5hbWUoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3JtZGlyIGIvZG9jL2VmdW4vcm1kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhZjMyOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3JtZGlyCkBAIC0wLDAgKzEsOCBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IHJtZGlyKHN0cmluZyBkaXIpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTG9lc2NodCBkYXMgVmVyemVpY2huaXMgPGRpcj4uIExpZWZlcnQgMSBiZWkgRXJmb2xnLCAwIGJlaSBNaXNzZXJmb2xnLgorCitTSUVIRSBBVUNICisgICAgICAgIG1rZGlyKEUpLCBybShFKSwgcmVuYW1lKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9ybWVtYmVyIGIvZG9jL2VmdW4vcm1lbWJlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzE5NjJjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vcm1lbWJlcgpAQCAtMCwwICsxLDIwIEBACitTWU5PUFNJUworICAgICAgICBpbnQgcm1lbWJlcihtaXhlZCAqYXJyYXksIG1peGVkIGVsZW0gWywgaW50IHN0YXJ0XSk7CisgICAgICAgIGludCBybWVtYmVyKHN0cmluZyBzdHIsIGludCBlbGVtIFssIGludCBzdGFydF0pOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBmdWVyIEFycmF5cyB1bmQgU3RyaW5ncyBkZW4gSW5kZXggZGVzIGxldHp0ZW4gQXVmdHJldGVucyBkZXMKKyAgICAgICAgQXJndW1lbnRzIDxlbGVtPiBpbSBBcnJheSA8KmFycmF5PiAgYnp3LiBpbSBTdHJpbmcgPHN0cj4uIFdlbm4gPGVsZW0+CisgICAgICAgIG5pY2h0IGdlZnVuZGVuIHdpcmQsIGxpZWZlcnQgZGllIEZ1bmt0aW9uIC0xIHp1cnVlY2suCisKKyAgICAgICAgSXN0IDxzdGFydD4gYWxzIFphaGwgPj0gMCBnZWdlYmVuLCBiZWdpbm50IGRpZSBTdWNoZSBhYiBkZXIKKyAgICAgICAgYW5nZWdlYmVuZW4gUG9zaXRpb24uIEVpbmUgU3RhcnRwb3NpdGlvbiBncm9lc3NlciBhbHMgZGllCisgICAgICAgIExhZW5nZSBkZXMgU3RyaW5ncy9BcnJheXMgbGllZmVydCBzdGV0cyBkYXMgUmVzdWx0YXQgLTEuCisKKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjEwLgorICAgICAgICBMRE11ZCAzLjMuNTU2IGZ1ZWd0ZSBkZW4gPHN0YXJ0Pi1QYXJhbWV0ZXIgaGluenUuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgbWVtYmVyKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9ydXNhZ2UgYi9kb2MvZWZ1bi9ydXNhZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRjMjUyMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3J1c2FnZQpAQCAtMCwwICsxLDE4IEBACitPUFRJT05BTAorU1lOT1BTSVMKKyAgICAgICAgaW50ICpydXNhZ2UoKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZWluIEFycmF5IG1pdCBJbmZvcm1hdGlvbmVuIHVlYmVyIGRlbiBtb21lbnRhbmVuCisgICAgICAgIFN5c3RlbXp1c3RhbmQ7IEJlbnV0enVuZ3NzdGF0aXN0aWtlbiwgd2llIHNpZSB2b20gVW5peC1Lb21tYW5kbworICAgICAgICBnZXRydXNhZ2UoMikgZ2VuZXJpZXJ0IHdlcmRlbiwgbmFtZW50bGljaDoKKyAgICAgICAgICAgIHV0aW1lLCBzdGltZSwgbWF4cnNzLCBydXMucnVfaXhyc3MsIHJ1cy5ydV9pZHJzcywgcnVzLnJ1X2lzcnNzLAorICAgICAgICAgICAgcnVzLnJ1X21pbmZsdCwgcnVzLnJ1X21hamZsdCwgcnVzLnJ1X25zd2FwLCBydXMucnVfaW5ibG9jaywKKyAgICAgICAgICAgIHJ1cy5ydV9vdWJsb2NrLCBydXMucnVfbXNnc25kLCBydXMucnVfbXNncmN2LCBydXMucnVfbnNpZ25hbHMsCisgICAgICAgICAgICBydXMucnVfbnZjc3csIHJ1cy5ydV9uaXZjc3cKKworQU5NRVJLVU5HCisgICAgRGllc2UgRnVua3Rpb24gaXN0IG9wdGlvbmFsLgorCitTSUVIRSBBVUNICisgICAgICAgIHN5cy9yZXNvdXJjZS5oKFVuaXgpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9zYXZlX29iamVjdCBiL2RvYy9lZnVuL3NhdmVfb2JqZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MTk0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9zYXZlX29iamVjdApAQCAtMCwwICsxLDU0IEBACitTWU5PUFNJUworICAgICAgICBpbnQgc2F2ZV9vYmplY3Qoc3RyaW5nIG5hbWUgWywgaW50IGZvcm1hdF0pOworICAgICAgICBzdHJpbmcgc2F2ZV9vYmplY3QoW2ludCBmb3JtYXRdKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIENvZGllcnQgZGllIHNwZWljaGVyYmFyZW4gKHMudS4pIFZhcmlhYmxlbiBkZXMgYWt0dWVsbGVuIE9iamVrdHMgaW4KKyAgICAgICAgZWluZW4gU3RyaW5nLgorCisgICAgICAgIEluIGRlciBlcnN0ZW4gRm9ybSB3aXIgZGVyIFN0cmluZyBpbiBkaWUgRGF0ZWkgPG5hbWU+IGdlc2NocmllYmVuLiBFaW5lCisgICAgICAgIEVuZHVuZyAiLmMiIGluIDxuYW1lPiB3aXJkIGVudGZlcm50LCBkYWZ1ZXIga2FubiBlaW5lIEVuZHVuZyAiLm8iCisgICAgICAgIGR1cmNoIGRhcyBNYXN0ZXJvYmpla3QgYW5nZWZ1ZWd0IHdlcmRlbiwgd2FlaHJlbmQgZGVyIFVlYmVycHJ1ZWZ1bmcKKyAgICAgICAgZHVyY2ggdmFsaWRfcmVhZCgpLiBEaWUgRWZ1biBzYXZlX29iamVjdCgpIGxpZWZlcnQgMCwgd2VubiBkaWUKKyAgICAgICAgU3BlaWNoZXJkYXRlaSBlcmZvbGdyZWljaCBlcnN0ZWxsdCB3dXJkZSwgc29uc3QgZWluZSBaYWhsIHVuZ2xlaWNoIDAsCisgICAgICAgIHdlbm4gZWluIG5pY2h0IHNjaHdlcndpZWdlbmRlZSBGZWhsZXIgYXVmZ2V0cmV0ZW4gaXN0IChkaWUgRGF0ZWkKKyAgICAgICAga29ubnRlIG5pY2h0IGdlc2NocmllYmVuIHdlcmRlbiBvZGVyIGRhcyBha3R1ZWxsZSBPYmpla3Qgd3VyZGUKKyAgICAgICAgaW56d2lzY2hlbiB6ZXJzdG9lcnQpLgorCisgICAgICAgIEluIGRlciB6d2VpdGVuIEZvcm0gd2lyZCBkZXIgU3RyaW5nIGRpcmVrdCB6dXJ1ZWNrIGdlZ2ViZW4uIFdlbm4gZGFzCisgICAgICAgIE9iamVrdCB6ZXJzdG9lcnQgd3VyZGUsIHdpcmQgMCB6dXJ1ZWNrIGdlZ2ViZW4uIEluIGJlaWRlbiBGYWVsbGVuIGthbm4KKyAgICAgICAgZHVyY2ggZGFzIG9wdGlvbmFsZSBBcmd1bWVudCA8Zm9ybWF0PiBkYXMgRm9ybWF0IGRlciBTcGVpY2hlcmRhdGVpCisgICAgICAgIGFuZ2VnZWJlbiB3ZXJkZW46CisKKyAgICAgICAgICAgIC0xOiBkYXMgbm9ybWFsZSBGb3JtYXQgZGVzIFRyZWliZXJzIChTdGFuZGFyZCkKKyAgICAgICAgICAgICAwOiBkYXMgT3JpZ2luYWxmb3JtYXQgbmFjaCBBbXlsYWFyJ3MgTFBNdWQgdW5kIExETXVkIDw9My4yLjgKKyAgICAgICAgICAgICAxOiBMRE11ZCA+PSAzLjIuOTogTm9uLUxhbWJkYSBDbG9zdXJlcywgU3ltYm9sZSB1bmQgZ2VxdW90ZXRlCisgICAgICAgICAgICAgICAgQXJyYXlzIGtvZW5uZW4gZ2VzcGVpY2hlcnQgd2VyZGVuCisKKyAgICAgICAgRWluZSBWYXJpYWJsZSB3aXJkIGFscyAnc3BlaWNoZXJiYXInIGJldHJhY2h0ZXQsIHdlbm4gc2llIG5pY2h0IGFscworICAgICAgICAnbm9zYXZlJyBvZGVyICdzdGF0aWMnIGRla2xhcmllcnQgaXN0LgorCisgICAgICAgIEJpdHRlIGJlYWNodGVuLCBkYXNzIGRpZXNlIGVmdW4gaW0gTUcgZHVyY2ggZWluZSBTZWZ1biB1ZWJlcnNjaHJpZWJlbgorICAgICAgICB3aXJkIHVuZCBkZXJlbiBNYW5wYWdlIGF1Y2ggbGVzZW4hCisKK0JFTUVSS1VOR0VOOgorICAgICAgICBEYW1pdCBlaW4gT2JqZWt0IGluIFZlcnplaWNobmlzc2UgZGVyIFJlZ2lvbi9kZXMgTWFnaWVycyBzY2hyZWliZW4KKyAgICAgICAga2FubiwgbXVzcyBlcyBlbnRzcHJlY2hlbmRlIFJlY2h0ZSwgYWxzbyBlaW5lIGd1ZWx0aWdlIEVVSUQKKyAgICAgICAgYmVzaXR6ZW4uIEltIGNyZWF0ZSgpIHNvbGx0ZSBkYWhlciBlaW46CisKKyAgICAgICAgc2V0ZXVpZChnZXR1aWQodGhpc19vYmplY3QoKSkpOworCisgICAgICAgIHN0ZWhlbi4KKworQUVOREVSVU5HRU4KKyAgICAgICAgU2VpdCBMRE11ZCAzLjIuOCBsaWVmZXJ0IHNhdmVfb2JqZWN0KCkgZWluZW4gZml4ZW4gV2VydCBiZWkgRXJmb2xnLgorICAgICAgICBEYXMgZGlyZWt0ZSBBYnNwZWljaGVybiBpbiBlaW5lbiBTdHJpbmcgd3VyZGUgaW4gTERNdWQgMy4yLjgKKyAgICAgICAgICAgIGVpbmdlZnVlaHJ0LCB3aXJkIGFiZXIgaW4gWnVrdW5mdCBldmVudHVlbGwgaW4gZWluZSBzZXBhcmF0ZSBFZnVuCisgICAgICAgICAgICB1bWdlem9nZW4uCisgICAgICAgIExETXVkIDMuMi45IGVyZ2Flbnp0ZSBkaWUgRnVua3Rpb24gdW0gZGFzIFNwZWljaGVybiB2b24gTm9uLUxhbWJkYQorICAgICAgICAgICAgQ2xvc3VyZXMsIFN5bWJvbGVuIHVuZCBnZXF1b3RldGVuIEFycmF5cy4gRGF6dSB3dXJkZSBlaW4gbmV1ZXMKKyAgICAgICAgICAgIEZvcm1hdCBmdWVyIGRpZSBTcGVpY2hlcmRhdGVpIGVpbmdlZnVlaHJ0LgorICAgICAgICBMRE11ZCAzLjIuMTAgZnVlaHJ0ZSBkYXMgQXJndW1lbnQgPGZvcm1hdD4gZWluLgorCitTSUVIRSBBVUNICisgICAgICAgIHJlc3RvcmVfb2JqZWN0KEUpLCBzYXZlX3ZhbHVlKEUpLCBzYXZlX29iamVjdCAoU2VmdW4pCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9zYXZlX3ZhbHVlIGIvZG9jL2VmdW4vc2F2ZV92YWx1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWUxNDg2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc2F2ZV92YWx1ZQpAQCAtMCwwICsxLDMxIEBACitTWU5PUFNJUworICAgICAgICBzdHJpbmcgc2F2ZV92YWx1ZShtaXhlZCB3ZXJ0IFssIGludCBmb3JtYXRdKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIFNjaHJlaWJ0IDx3ZXJ0PiBpbiBlaW5lbiBTdHJpbmcsIGRlciBzaWNoIG1pdCByZXN0b3JlX3ZhbHVlKCkKKyAgICAgICAgYXVzd2VydGVuIGxhZXNzdC4gRGVyIFN0cmluZyB3aXJkIHp1cnVlY2sgZ2VnZWJlbi4KKworICAgICAgICBEYXMgb3B0aW9uYWxlIEFyZ3VtZW50IDxmb3JtYXQ+IGJlc3RpbW10IGRhcyBGb3JtYXQgZGVzIFN0cmluZ3M6CisKKyAgICAgICAgICAgIC0xOiBkYXMgbm9ybWFsZSBGb3JtYXQgZGVzIFRyZWliZXJzIChTdGFuZGFyZCkKKyAgICAgICAgICAgICAwOiBkYXMgT3JpZ2luYWxmb3JtYXQgbmFjaCBBbXlsYWFyJ3MgTFBNdWQgdW5kIExETXVkIDw9My4yLjgKKyAgICAgICAgICAgICAxOiBMRE11ZCA+PSAzLjIuOTogTm9uLUxhbWJkYSBDbG9zdXJlcywgU3ltYm9sZSB1bmQgZ2VxdW90ZXRlCisgICAgICAgICAgICAgICAgQXJyYXlzIGtvZW5uZW4gZ2VzcGVpY2hlcnQgd2VyZGVuCisKKyAgICAgICAgRGVyIGVyemV1Z3RlIFN0cmluZyBiZXN0ZWh0IGF1cyB6d2VpIFplaWxlbiwgZGllIGpld2VpbHMgbWl0IGVpbmVtCisgICAgICAgIFplaWxlbnVtYnJ1Y2ggZW5kZW4uIERpZSBlcnN0ZSBaZWlsZSBiZXNjaHJlaWJ0IGRhcyBGb3JtYXQsIGluIGRlbSBkZXIKKyAgICAgICAgV2VydCBnZXNwZWljaGVydCB3aXJkLCBpbiBkZXIgJyN4OnknLVNjaHJlaWJ3ZWlzZS4gRGllIHp3ZWl0ZSBaZWlsZQorICAgICAgICBzdGVsbHQgZGVuIGVpZ2VudGxpY2hlbiBXZXJ0IGRhLgorCisgICAgICAgIERhcyBGb3JtYXQgenVtIFNjaHJlaWJlbiBkZXMgV2VydGVzIGluIGRlbiBTdHJpbmcgZW50c3ByaWNodCBkZW0gdm9uCisgICAgICAgIHNhdmVfb2JqZWN0KCkgdW5kIHJlc3RvcmVfb2JqZWN0KCkgdmVyd2VuZGV0ZW4gRm9ybWF0LgorCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuOC4KKyAgICAgICAgTERNdWQgMy4yLjkuIGVyZ2Flbnp0ZSBkaWUgRnVua3Rpb24gdW0gZGllIE1vZWdsaWNoa2VpdCwgTm9uLUxhbWJkYQorICAgICAgICAgICAgQ2xvc3VyZXMsIFN5bWJvbGUgdW5kIGdlcXVvdGV0ZSBBcnJheXMgenUgc3BlaWNoZXJuLiBEYXp1IHd1cmRlCisgICAgICAgICAgICBlaW4gbmV1ZXMgRm9ybWF0IGZ1ZXIgZGVuIFN0cmluZyBlaW5nZWZ1ZWhydC4KKyAgICAgICAgTERNdWQgMy4yLjEwIGZ1ZWhydGUgZGFzIEFyZ3VtZW50IDxmb3JtYXQ+IGVpbi4KKworU0lFSEUgQVVDSAorICAgICAgICByZXN0b3JlX3ZhbHVlKEUpLCByZXN0b3JlX29iamVjdChFKSwgc2F2ZV9vYmplY3QoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3NheSBiL2RvYy9lZnVuL3NheQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjA5NThmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc2F5CkBAIC0wLDAgKzEsOTggQEAKK1NZTk9QU0lTCisgICAgICAgIHZvaWQgc2F5KHN0cmluZyBzdHIpOworICAgICAgICB2b2lkIHNheShzdHJpbmcgc3RyLCBvYmplY3QgZXhjbHVkZSk7CisgICAgICAgIHZvaWQgc2F5KHN0cmluZyBzdHIsIG9iamVjdCAqZXhjbHVkZXMpOworCisgICAgICAgIHZvaWQgc2F5KG1peGVkICp8bWFwcGluZ3xzdHJ1Y3R8b2JqZWN0IG1zZyk7CisgICAgICAgIHZvaWQgc2F5KG1peGVkICp8bWFwcGluZ3xzdHJ1Y3R8b2JqZWN0IG1zZywgb2JqZWN0IGV4Y2x1ZGUpOworICAgICAgICB2b2lkIHNheShtaXhlZCAqfG1hcHBpbmd8c3RydWN0fG9iamVjdCBtc2csIG9iamVjdCAqZXhjbHVkZXMpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgRXMgYmVzdGVoZW4gendlaSBIYXVwdGFud2VuZHVuZ2VuIGZ1ZXIgc2F5KCk6CisKKyAgICAgICAgV2VubiBkYXMgZXJzdGUgQXJndW1lbnQgZWluIFN0cmluZyA8c3RyPiBpc3QsIHdpcmQgZXIgYW4gYWxsZQorICAgICAgICBsZWJlbmRpZ2VuIE9iamVrdGUgaW0gYWt0dWVsbGVuIFJhdW0gZ2VzZW5kZXQsIGF1c3NlciB6dW0gT2JqZWt0LAorICAgICAgICBkYXMgZGllIEZ1bmt0aW9uIGF1ZmdlcnVmZW4gaGF0LgorCisgICAgICAgIElzdCBkaWUgTmFjaHJpY2h0IGVpbiBTdHJpbmcsIHdpcmQgZGVyIFRleHQgYW4gaW50ZXJha3RpdmUgT2JqZWt0ZQorICAgICAgICBkaXJla3QgYXVzZ2VnZWJlbiwgZnVlciBhbmRlcmUgT2JqZWt0ZSB3aXJkIGRpZSBsZnVuIGNhdGNoX3RlbGwoKQorICAgICAgICBpbiBkaWVzZW4gYXVmZ2VydWZlbi4KKyAgICAgICAgRmFsbHMgZWluIExld2ViZXNlbiBkaWUgRnVua3Rpb24gY2F0Y2hfdGVsbCgpIGRlZmluaWVydCAoLT4gc2hhZG93KSwKKyAgICAgICAgc28gd2lyZCBkZXIgVGV4dCBoaWVyIGF1c2dld2VydGV0IHVuZCBuaWNodCBhbiBkZW4gVXNlciBhdXNnZWdlYmVuLgorCisgICAgICAgIFdlbm4gZGFzIHp3ZWl0ZSBBcmd1bWVudCwgZGllIE5hY2hyaWNodCwga2VpbiBTdHJpbmcgaXN0LCB3aXJkIGluCisgICAgICAgIGFsbGVuIExlYmV3ZXNlbiwgZGllIGRlbiBUZXh0IGVyaGFsdGVuLCBjYXRjaF9tc2coKSBhbnN0YXR0CisgICAgICAgIGNhdGNoX3RlbGwoKSBhdWZnZXJ1ZmVuLgorCisgICAgICAgIE1pdCBkZW0gQXJyYXkgPCpleGNsdWRlPiBrYW5uIG1hbiB2ZXJoaW5kZXJuLCBkYXNzIGRpZSBOYWNocmljaHQgYW4KKyAgICAgICAgZGllIGRhcmluIGVudGhhbHRlbmVuIE9iamVrdGUgZ2VzZW5kZXQgd2lyZC4gRGVyIFNlbmRlciBtdXNzIG5pY2h0CisgICAgICAgIG5vY2ggZWlubWFsIGF1ZmdlZnVlaHJ0IHdlcmRlbi4KKyAgICAgICAgRGFzIGlzdCBzaW5udm9sbCwgd2VubiB6QiBlaW5lIFNwaWVsZXJncnVwcGUgQXVzbG9lc2VyIGVpbmVyIE1lbGR1bmcKKyAgICAgICAgaXN0IHVuZCBkaWVzZSBzZWxic3QgbmljaHQgZXJoYWx0ZW4gc29sbC4KKworICAgICAgICBEYXMgYXVmcnVmZW5kZSBPYmpla3Qgd2lyZCBuYWNoIGZvbGdlbmRlbiBSZWdlbG4gYmVzdGltbXQ6CisgICAgICAgICAgLSBXZW5uIHNheSgpIGF1cyBlaW5lbSBsZWJlbmRpZ2VuIE9iamVrdCBhdWZnZXJ1ZmVuIHdpcmQsIGdpbHQKKyAgICAgICAgICAgIGRpZXNlcyBhbHMgZGFzIGF1ZnJ1ZmVuZGUgT2JqZWt0LgorICAgICAgICAgIC0gV2VubiBzYXkoKSBhdXMgZWluZW0gbmljaHQtbGViZW5kaWdlbiBPYmpla3QgYWxzIFJlc3VsdGF0IGVpbmVyCisgICAgICAgICAgICBIYW5kbHVuZyBlaW5lcyBCZW51dHplcnMgYXVmZ2VydWZlbiB3aXJkIChkYXMgaGVpc3N0LAorICAgICAgICAgICAgdGhpc19wbGF5ZXIoKSBpc3QgZ3VlbHRpZyksIGdpbHQgdGhpc19wbGF5ZXIoKSBhbHMgYXVmcnVmZW5kZXMKKyAgICAgICAgICAgIE9iamVrdC4KKyAgICAgICAgICAtIEluIGFsbGVuIGFuZGVyZW4gRmFlbGxlbiAoQXVmcnVmIGF1cyByZXNldCB6QikgZ2lsdCBkYXMgT2JqZWt0LAorICAgICAgICAgICAgZGFzIHNheSgpIGF1ZmdlcnVmZW4gaGF0LCBhbHMgYXVmcnVmZW5kZXMgT2JqZWt0LgorCitCRU1FUktVTkdFTgorICAgICAgICAtIGZ1ZXIgbGFlbmdlcmUgTWVsZHVuZ2VuIHNvbGx0ZSBicmVha19zdHJpbmcoKSB2ZXJ3ZW5kZXQgd2VyZGVuCisgICAgICAgIC0gd2lyZCBpbiBlaW5lbSBjYXRjaF9tc2coKSBkZXIgV2VydCB2b24gPG1zZz4gdmVyYWVuZGVydCwgZXJoYWx0ZW4KKyAgICAgICAgICBhbGxlIG5hY2hmb2xnZW5kZW4gT2JqZWt0ZSBkYXMgdmVyYWVuZGVydGUgPG1zZz4gKFJlZmVyZW56ISkKKworICAgICAgICAtIHNheSg8c3RyPikgaXN0IHZlcmhhbHRlbnNnbGVpY2ggenUKKyAgICAgICAgICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSwgPHN0cj4sICh7dGhpc19wbGF5ZXIoKXx8dGhpc19vYmplY3QoKX0pKQorCitCRUlTUElFTEUKKyAgICAgICAgLy8gRm9sZ2VuZGUgQXVmcnVmZSBzaW5kIGdsZWljaCwgd2VubiBzaWUgZHVyY2ggZWluIFNwaWVsZXJrb21tYW5kbworICAgICAgICAvLyBpbiBlaW5lbSBuaWNodCBsZWJlbmRpZ2VuIE9iamVrdCBhdWZnZWxvZXN0IHdlcmRlbjoKKworICAgICAgICAgICAgc2F5KCJIaSFcbiIpOworICAgICAgICAgICAgc2F5KCJIaSFcbiIsIHRoaXNfcGxheWVyKCkpOworCisgICAgICAgIC8vIERhcyBmb2xnZW5kZSBCZWlzcGllbCB6ZWlndCwgd2llIHNheSgpIHp1c2FtbWVuIG1pdCBjYXRjaF90ZWxsKCkKKyAgICAgICAgLy8gZnVua3Rpb25pZXJ0LiBEYXMgendlaXRlIE9iamVrdCBkYXJmIG5pY2h0IGxlYmVuZGlnIHNlaW4sIGRhbWl0CisgICAgICAgIC8vIHdyaXRlKCkgYW4gZGVuIGFrdHVlbGxlbiBCZW51dHplciBnZWh0LgorCisgICAgICAgIE9iamVrdCAxIChsaXZpbmcpOgorICAgICAgICAgICAgdm9pZCBjYXRjaF90ZWxsKHN0cmluZyBzdHIpIHsKKyAgICAgICAgICAgICAgICB3cml0ZSgiRW1wZmFuZ2VuOiAiK3N0cisiXG4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBPYmpla3QgMiAobmljaHQgbGl2aW5nKToKKyAgICAgICAgICAgIHZvaWQgZnVuYygpIHsKKyAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICBzYXkoIkhpSG8hXG4iKTsKKyAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBFaW4gZXR3YXMga29tcGxleGVyZXMgQmVpc3BpZWwgemVpZ3QgZGFzIFp1c2FtbWVuc3BpZWwgdm9uIHNheSgpCisgICAgICAgIC8vIHVuZCBjYXRjaF9tc2coKS4gQXVjaCBoaWVyIHdpcmQgZWluIG5pY2h0LWxlYmVuZGlnZXMgT2JqZWt0CisgICAgICAgIC8vIHZlcndlbmRldCwgZGFzIGRpZSBOYWNocmljaHQgYXVzZ2lidCwgc29kYXNzIGRhcyAnd2VyJyBpbgorICAgICAgICAvLyBjYXRjaF9tc2coKSBhdWYgZGVuIGFrdHVlbGxlbiBCZW51dHplciB6ZWlndC4KKworICAgICAgICBPYmplY3QgMSAobGl2aW5nKToKKyAgICAgICAgICAgIHZvaWQgY2F0Y2hfbXNnKG1peGVkICphcnIsIG9iamVjdCB3aG8pIHsKKyAgICAgICAgICAgICAgICBmb3JlYWNoKG1peGVkIGVsZW1lbnQ6IGFycikKKyAgICAgICAgICAgICAgICAgICAgdGVsbF9vYmplY3Qod2hvLCBzcHJpbnRmKCIlT1xuIiwgZWxlbWVudCkpOworICAgICAgICAgICAgfQorCisgICAgICAgIE9iamVjdCAyIChuaWNodCBsaXZpbmcpOgorICAgICAgICAgICAgdm9pZCBmdW5jKCkgeworICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgIHNheSggKHsgIkhlbGxvIiwgInRoZXJlISIgfSkgKTsKKyAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIH0KKworU0lFSEUgQVVDSAorICAgICAgICBBZWhubGljaDogICB0ZWxsX3Jvb20oRSksIHdyaXRlKEUpLCBzaG91dChFKSwgdGVsbF9vYmplY3QoRSksCisgICAgICAgICAgICAgICAgICAgIHByaW50ZihFKQorICAgICAgICBWZXJ3YW5kdDogICBjYXRjaF90ZWxsKEUpLCBjYXRjaF9tc2coQSkKKyAgICAgICAgU29uc3RpZ2VzOiAgb2JqZWN0X25hbWUoRSkKKworNy5BdWcgMjAwNyBHbG9pbnNvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3NlbmRfZXJxIGIvZG9jL2VmdW4vc2VuZF9lcnEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1MjFlMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3NlbmRfZXJxCkBAIC0wLDAgKzEsMjQgQEAKK0dFU0NIVUVUWlQKK1NZTk9QU0lTCisgICAgICAgIGludCBzZW5kX2VycShpbnQgcmVxdWVzdCwgc3RyaW5nfGludCAqZGF0YSwgY2xvc3VyZSBjYWxsYmFjayk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBFaW5lIEFuZnJhZ2Ugdm9tIFR5cCA8cmVxdWVzdD4gKHN0YW5kYXJkbWFlc3NpZyAwKSB3aXJkIG1pdCBJbmhhbHQKKyAgICAgICAgPGRhdGE+IHdvcmQgYW4gZGVuIEVSUSBnZXNhbmR0LiBXZW5uIDxjYWxsYmFjaz4gYW5nZWdlYmVuIGlzdCwKKyAgICAgICAgd2lyZCBkaWVzZSBDbG9zdXJlIGF1ZmdlcnVmZW4sIHdlbm4gZWluZSBBbnR3b3J0IHZvbSBFUlEgZWludHJpZmZ0CisgICAgICAgIChlaW4gU3RhdHVzIENvZGUpLCB2b3JhdXNnZXNldHp0IGRpZSBBbnR3b3J0IGVudGhhZWx0IGF1c3JlaWNoZW5kCisgICAgICAgIERhdGVuLCB1bSBkYW1pdCB6dSBhcmJlaXRlbjoKKworICAgICAgICAgICAgdm9pZCA8Y2xvc3VyZT4oaW50ICpyZXNwb25zZV9kYXRhLCBpbnQgbGVuKTsKKworICAgICAgICA8ZGF0YT4ga2FubiBlbnR3ZWRlciBlaW4gU3RyaW5nIG9kZXIgZWluIEFycmF5IHZvbiBJbnRlZ2VycyBzZWluLAorICAgICAgICB3b2JlaSBpbSB6d2VpdGVuIEZhbGwgZGllIFphaGxlbiBhbHMgWmVpY2hlbiBpbnRlcnByZXRpZXJ0IHdlcmRlbi4KKyAgICAgICAgRGllIHVudGVyc2NoaWVkbGljaGVuIEFuZnJhZ2VuIHNpbmQgaW4gL3N5cy9lcnEuaCBkZWZpbmllcnQuCisKKyAgICAgICAgRGllIEZ1bmt0aW9uIGxpZWZlcnQgMCB6dXJ1ZWNrLCB3ZW5uIGRhcyBTZW5kZW4gZmVobGdlc2NobGFnZW4gaXN0LAorICAgICAgICBldHdhcyBhbmRlcmVzIHNvc3QuCisKKyAgICAgICAgRGllIEZ1bmt0aW9uIHZlcnVyc2FjaHQgZWluZSBTY2h1dHp2ZXJsZXR6dW5nICJlcnEiLgorCitTSUVIRSBBVUNICisgICAgICAgIGF0dGFjaF9lcnFfZGVtb24oRSksIGVycShDKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vc2VuZF91ZHAgYi9kb2MvZWZ1bi9zZW5kX3VkcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWQwYzMzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc2VuZF91ZHAKQEAgLTAsMCArMSwxMiBAQAorU1lOT1BTSVM6CisJaW50IHNlbmRfdWRwKHN0cmluZyBob3N0LCBpbnQgcG9ydCwgc3RyaW5nIG1lc3NhZ2UpCisKK0RFU0NSSVBUSU9OOgorCVNlbmRzIFRoZSBtZXNzYWdlIGluIGFuIFVEUCBwYWNrZXQgdG8gdGhlIGdpdmVuIGhvc3QgYW5kIHBvcnQKKwludW1iZXIuIENhdXNlcyBhIHByaXZpbGVnZSB2aW9sYXRpb24uCisJUmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZS4KKworU0VFIEFMU086CisJcmVjZWl2ZV91ZHAoTSkKKworMjkuMTAuMjAwNiBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9zZXRfYXV0b19pbmNsdWRlX3N0cmluZyBiL2RvYy9lZnVuL3NldF9hdXRvX2luY2x1ZGVfc3RyaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0N2U1MGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9zZXRfYXV0b19pbmNsdWRlX3N0cmluZwpAQCAtMCwwICsxLDE5IEBACitERVBSRUNBVEVECitTWU5PUFNJUzoKKwl2b2lkIHNldF9hdXRvX2luY2x1ZGVfc3RyaW5nKHN0cmluZyBhcmcpCisKK0RFU0NSSVBUSU9OOgorCisJVGhlIGFyZyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgaW50byBldmVyeSBjb21waWxlZCBMUEMKKwlvYmplY3QuIFRoaXMgaXMgdXNlZnVsIHRvIGVuZm9yY2UgZ2xvYmFsIGRlZmluaXRpb25zLCBlLmcuCisJYGAjcHJhZ21hIGNvbWJpbmVfc3RyaW5ncycnIG9yIGBgI3ByYWdtYSBzdHJpY3RfdHlwZXMnJy4gIFRoZQorCWNhbGxpbmcgb2JqZWN0bmVlZHMgdG8gYmUgcHJpdmlsZWdlZCBieSB0aGUgbWFzdGVyIG9iamVjdC4KKworTk9URToKKyAgTm90IGF2YWlsYWJsZSBpbiBMRE11ZCAzLjMueAorICBQbGVhc2UgdXNlIHRoZSBkcml2ZXIgaG9vayBIX0FVVE9fSU5DTFVERSBpbiBMRE11ZCA+IDMuMi45CisKK1NFRSBBTFNPOgorCXByaXZpbGVnZV92aW9sYXRpb24oTSksIHByYWdtYShMUEMpCisgIAorMjkuMTAuMjAwNiBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9zZXRfYml0IGIvZG9jL2VmdW4vc2V0X2JpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDdjNmI1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc2V0X2JpdApAQCAtMCwwICsxLDMwIEBACitTWU5PUFNJUworICAgICAgICBzdHJpbmcgc2V0X2JpdChzdHJpbmcgc3RyLCBpbnQgbik7CisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGVpbmVuIG5ldWVuIFN0cmluZywgYmVpIGRlbSBkYXMgQml0IDxuPiBpbiA8c3RyPiBnZXNldHp0CisgICAgICAgIGlzdC4gRGFiZWkgd2lyZCBkZXIgdXJzcHJ1ZW5nbGljaGUgU3RyaW5nIDxzdHI+IG5pY2h0IHZlcmFlbmRlcnQuCisKKyAgICAgICAgSmVkZXMgWmVpY2hlbiBlbnRoYWVsdCA2IEJpdHMuIEluIGplZGVtIFplaWNoZW4ga2FubiBkZXNoYWxiIGVpbmUKKyAgICAgICAgWmFobCB2b24gMCBiaXMgNjMgZ2VzcGVpY2hlcnQgd2VyZGUgKDJeNj02NCkuIERhcyBlcnN0ZSBaZWljaGVuCisgICAgICAgIGlzdCBkZXIgTGVlcnNjaGxhZyAiICIgbWl0IGRlbSBXZXJ0IDAuIERhcyBlcnN0ZSBaZWljaGVuIGltIFN0cmluZworICAgICAgICBpc3QgamVuZXMgbWl0IGRlbiBuaWVkcmlnc3RlbiBCaXRzICgwLTUpLgorCisgICAgICAgIERlciBuZXVlIFN0cmluZyB3aXJkIGF1dG9tYXRpc2NoIHZlcmxhZW5nZXJ0LCBmYWxscyBub2V0aWcuCisKK0JFSVNQSUVMCisgICAgICAgIHN0cmluZyBzOworICAgICAgICBzPXNldF9iaXQoIj8iLDUpOworCisgICAgICAgIFdlaWwgIj8iIGVpbmVuIFdlcnQgdm9uIDMxIGhhdCwgaXN0IGRhcyA2LiBCaXQgbmljaHQgZ2VzZXR6dC4gV2lyZAorICAgICAgICBlcyBnZXNldHp0LCBzbyBlcmdpYnQgc2ljaCAiXyIuIERlciBTdHJpbmcgcyBlbnRoYWVsdCBudW4gYWxzbyAiXyIuCisKKyAgICAgICAgc3RyaW5nIHM7CisgICAgICAgIHM9c2V0X2JpdCgiNzgiLDMpOworICAgICAgICBzPXNldF9iaXQocyw4KTsKKworICAgICAgICBzIGVudGhhZWx0IG51biAiPzwiLgorCitTSUVIRSBBVUNICisgICAgICAgIGNsZWFyX2JpdChFKSwgbGFzdF9iaXQoRSksIG5leHRfYml0KEUpLCB0ZXN0X2JpdChFKSwgY291bnRfYml0cyhFKSwKKyAgICAgICAgYW5kX2JpdHMoRSksIG9yX2JpdHMoRSksIHhvcl9iaXRzKEUpLCBpbnZlcnRfYml0cyhFKSwgY29weV9iaXRzKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9zZXRfZHJpdmVyX2hvb2sgYi9kb2MvZWZ1bi9zZXRfZHJpdmVyX2hvb2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4OTEyMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3NldF9kcml2ZXJfaG9vawpAQCAtMCwwICsxLDk4IEBACitTWU5PUFNJUworICAgICAgICB2b2lkIHNldF9kcml2ZXJfaG9vayhpbnQgd2hhdCwgY2xvc3VyZSBhcmcpCisgICAgICAgIHZvaWQgc2V0X2RyaXZlcl9ob29rKGludCB3aGF0LCBzdHJpbmcgYXJnKQorICAgICAgICB2b2lkIHNldF9kcml2ZXJfaG9vayhpbnQgd2hhdCwgc3RyaW5nICogYXJnKQorCitERVNDUklQVElPTgorICAgICAgICBUaGlzIHByaXZpbGVnZWQgZWZ1biBzZXRzIHRoZSBkcml2ZXIgaG9vayAnd2hhdCcgKHZhbHVlcyBhcmUKKyAgICAgICAgZGVmaW5lZCBpbiAvc3lzL2RyaXZlcl9ob29rLmgpIHRvICdhcmcnLgorICAgICAgICBUaGUgZXhhY3QgbWVhbmluZ3MgYW5kIHR5cGVzIG9mICdhcmcnIGRlcGVuZCBvZiB0aGUgaG9vayBzZXQuCisgICAgICAgIFRvIHJlbW92ZSBhIGhvb2ssIHNldCAnYXJnJyB0byAwLgorCisgICAgICAgIFRoZXNlIGhvb2tzIGV4aXN0OgorCisgICAgICAgIEhfTU9WRV9PQkpFQ1QwCisgICAgICAgIEhfTU9WRV9PQkpFQ1QxCisgICAgICAgICAgYXJnOiB1bmJvdW5kIGxhbWJkYQorICAgICAgICAgIE1hbmRhdG9yeSBob29rcyBpbXBsZW1lbnRpbmcgdGhlIG1vdmVfb2JqZWN0KCkgZWZ1bi4KKworICAgICAgICBIX0xPQURfVUlEUworICAgICAgICBIX0NMT05FX1VJRFMKKyAgICAgICAgICBhcmc6IHVuYm91bmQgbGFtYmRhIG9yIGxmdW4gY2xvc3VyZQorICAgICAgICAgIE1hbmRhdG9yeSBob29rcyB0byBkZXRlcm1pbmUgdGhlIChlKXVpZCBvZiBuZXcgb2JqZWN0cy4KKworICAgICAgICBIX0NSRUFURV9TVVBFUgorICAgICAgICBIX0NSRUFURV9PQgorICAgICAgICBIX0NSRUFURV9DTE9ORQorICAgICAgICBIX1JFU0VUCisgICAgICAgIEhfQ0xFQU5fVVAKKyAgICAgICAgICBhcmc6IGxhbWJkYSBjbG9zdXJlIChIX0NMRUFOX1VQIGFsc28gYWNjZXB0cyBhIGxmdW4KKyAgICAgICAgICAgIGNsb3N1cmUpLCBmdW5jdGlvbiBuYW1lLgorICAgICAgICAgIE9wdGlvbmFsIGhvb2tzIGZvciBjcmVhdGlvbi9yZXNldC9jbGVhbiB1cC1hY3Rpb25zLgorCisgICAgICAgIEhfREVGQVVMVF9NRVRIT0QKKyAgICAgICAgICBhcmc6IGxhbWJkYSBjbG9zdXJlLCBsZnVuIGNsb3N1cmUsIGZ1bmN0aW9uIG5hbWUuCisgICAgICAgICAgT3B0aW9uYWwgaG9vayBmb3IgZGVmYXVsdCBtZXRob2QgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgSF9ERUZBVUxUX1BST01QVAorICAgICAgICAgIGFyZzogbGFtYmRhIGNsb3N1cmUsIGxmdW4gY2xvc3VyZSwgcHJvbXB0IHN0cmluZy4KKyAgICAgICAgICBPcHRpb25hbCBob29rIGZvciB0aGUgZGVmYXVsdCBjb21tYW5kIHByb21wdC4KKworICAgICAgICBIX1BSSU5UX1BST01QVAorICAgICAgICAgIGFyZzogbGFtYmRhIGNsb3N1cmUsIGxmdW4gY2xvc3VyZSwgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgICBPcHRpb25hbCBob29rIHRvIHByaW50IHRoZSBjb21tYW5kIHByb21wdC4KKworICAgICAgICBIX01PRElGWV9DT01NQU5ECisgICAgICAgICAgYXJnOiBsYW1iZGEgY2xvc3VyZSwgbGZ1biBjbG9zdXJlLCBmdW5jdGlvbiBuYW1lLCBtYXBwaW5nCisgICAgICAgICAgT3B0aW9uYWwgaG9vayBmb3IgbW9kaWZ5aW5nIHBsYXllciBjb21tYW5kcyBiZWZvcmUgdGhlCisgICAgICAgICAgcGFyc2VyIHNlZXMgdGhlbS4KKworICAgICAgICBIX05PVElGWV9GQUlMCisgICAgICAgICAgYXJnOiBsYW1iZGEgY2xvc3VyZSwgbGZ1biBjbG9zdXJlLCBzdHJpbmcuCisgICAgICAgICAgTWFuZGF0b3J5IGhvb2sgdG8gZ2VuZXJhdGUgdGhlIGRlZmF1bHQgbWVzc2FnZSBpZiBhbiBlbnRlcmVkCisgICAgICAgICAgY29tbWFuZCBjb3VsZG4ndCBiZSBwYXJzZWQgYW5kIG5vIG5vdGlmeV9mYWlsKCkgY29tbWFuZCBpcworICAgICAgICAgIGluIGVmZmVjdC4KKworICAgICAgICBIX1NFTkRfTk9USUZZX0ZBSUwKKyAgICAgICAgICBhcmc6IGxhbWJkYSBjbG9zdXJlLCBsZnVuIGNsb3N1cmUsIHN0cmluZy4KKyAgICAgICAgICBPcHRpb25hbCBob29rIHRvIGRlbGl2ZXIgdGhlIG5vdGlmeSBmYWlsIG1lc3NhZ2UgZnJvbSBhIGZhaWxlZAorICAgICAgICAgIGNvbW1hbmQuCisKKyAgICAgICAgSF9OT19JUENfU0xPVAorICAgICAgICAgIGFyZzogc3RyaW5nLgorICAgICAgICAgIE9wdGlvbmFsIGhvb2sgc3BlY2lmeWluZyB0aGUgJ3NvcnJ5JyBtZXNzYWdlcyBpZiBsb2dpbnMgYXJlCisgICAgICAgICAgcmVqZWN0ZWQgZHVlIHRvIGZ1bGxuZXNzIG9mIHRoZSBtdWQuCisKKyAgICAgICAgSF9JTkNMVURFX0RJUlMKKyAgICAgICAgICBhcmc6IGxhbWJkYSBjbG9zdXJlLCBsZnVuIGNsb3N1cmUsIHN0cmluZyBhcnJheS4KKyAgICAgICAgICBTZW1pLW1hbmRhdG9yeSBob29rIHNwZWNpZnlpbmcgdGhlIGRpcmVjdG9yaWVzIHdoZXJlIDw+LXR5cGUKKyAgICAgICAgICBpbmNsdWRlIGZpbGVzIGFyZSBzZWFyY2hlZC4KKworICAgICAgICBIX0FVVE9fSU5DTFVERQorICAgICAgICAgIGFyZzogbGFtYmRhIGNsb3N1cmUsIGxmdW4gY2xvc3VyZSwgc3RyaW5nCisgICAgICAgICAgT3B0aW9uYWwgaG9vayB0byBzcGVjaWZ5IGEgc3RyaW5nIHRvIGJlIGluY2x1ZGVkIGJlZm9yZSB0aGUKKyAgICAgICAgICBzb3VyY2Ugb2YgZXZlcnkgY29tcGlsZWQgTFBDIG9iamVjdC4KKworICAgICAgICBIX1RFTE5FVF9ORUcKKyAgICAgICAgICBhcmc6IGxhbWJkYSBjbG9zdXJlLCBsZnVuIGNsb3N1cmUsIHN0cmluZy4KKyAgICAgICAgICBPcHRpb25hbCBob29rIHRvIHNwZWNpZml5IGhvdyB0byBwZXJmb3JtIGEgc2luZ2xlIHRlbG5ldAorICAgICAgICAgIG5lZ290aWF0aW9uLgorCisgICAgICAgIEhfTk9FQ0hPCisgICAgICAgICAgYXJnOiBsYW1iZGEgY2xvc3VyZSwgbGZ1biBjbG9zdXJlLCBzdHJpbmcuCisgICAgICAgICAgT3B0aW9uYWwgaG9vayB0byBzcGVjaWZpeSBob3cgdG8gcGVyZm9ybSB0aGUgdGVsbmV0IGFjdGlvbnMKKyAgICAgICAgICB0byBzd2l0Y2ggdGhlIGVjaG8gbW9kZSAodXNlZCBmb3IgZS5nLiBwYXNzd29yZCBpbnB1dF90bygpcykuCisKKyAgICAgICAgSF9FUlFfU1RPUAorICAgICAgICAgIGFyZzogbGFtYmRhIGNsb3N1cmUsIGxmdW4gY2xvc3VyZS4KKyAgICAgICAgICBPcHRpb25hbCBob29rIHRvIG5vdGlmeSB0aGUgbXVkbGliIGFib3V0IHRoZSB0ZXJtaW5hdGlvbiBvZgorICAgICAgICAgIHRoZSBlcnEgZGVtb24uCisKKyAgICAgICAgU2VlIGhvb2tzKEMpIGZvciBhIGRldGFpbGVkIGRpc2N1c3Npb24uCisKK0hJU1RPUlkKKyAgICAgICAgSW50cm9kdWNlZCBpbiAzLjIuMUAxIGFzIGVmdW4zMDkoKSwgcmVuYW1lZCB0bworICAgICAgICBzZXRfZHJpdmVyX2hvb2soKSBpbiAzLjIuMUAxMworCitTRUUgQUxTTworICAgICAgICBob29rcyhDKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vc2V0X2Vudmlyb25tZW50IGIvZG9jL2VmdW4vc2V0X2Vudmlyb25tZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlM2E5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9zZXRfZW52aXJvbm1lbnQKQEAgLTAsMCArMSwyMCBAQAorU1lOT1BTSVMKKwl2b2lkIHNldF9lbnZpcm9ubWVudChvYmplY3QgaXRlbSwgb2JqZWN0IGVudikKKworREVTQ1JJUFRJT04KKwlUaGUgaXRlbSBpcyBtb3ZlZCBpbnRvIGl0cyBuZXcgZW52aXJvbm1lbnQgZW52LCB3aGljaCBtYXkgYmUgMC4KKwlUaGlzIGVmdW4gaXMgdG8gYmUgdXNlZCBpbiB0aGUgbW92ZV9vYmplY3QoKSBob29rLCBhcyBpdCBkb2VzCisJbm90aGluZyBlbHNlIHRoYW4gbW92aW5nIHRoZSBpdGVtIC0gbm8gY2FsbHMgdG8gaW5pdCgpIG9yIHN1Y2guCisKKwlEb24ndCB1c2UgaXQgaW4geW91ciBvd24gb2JqZWN0cyEKKworSElTVE9SWQorICBJbnRyb2R1Y2VkIGluIDMuMi4xQDEgYXMgJ2VmdW4zMDgoKScsIHJlbmFtZWQgdG8gJ3NldF9lbnZpcm9ubWVudCgpJworICAgICAgICAgICAgICAgIGluIDMuMi42IGFuZCBMUCAiMDMuMDIuMUAxNTAiLgorCitTRUUgQUxTTworCXJlbW92ZShBKSwgaW5pdChBKSwgbW92ZV9vYmplY3QoRSksIHRyYW5zZmVyKEUpLCBob29rcyhDKSwKKwluYXRpdmUoQykKKworMjkuMTAuMjAwNiBaZXNzdHJhCisKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3NldF9leHRyYV93aXppbmZvIGIvZG9jL2VmdW4vc2V0X2V4dHJhX3dpemluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwOTVjOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3NldF9leHRyYV93aXppbmZvCkBAIC0wLDAgKzEsMjIgQEAKK1NZTk9QU0lTCisgICAgICAgIHZvaWQgc2V0X2V4dHJhX3dpemluZm8gKG9iamVjdCB3aXosIG1peGVkIGV4dHJhKQorICAgICAgICB2b2lkIHNldF9leHRyYV93aXppbmZvIChzdHJpbmcgd2l6LCBtaXhlZCBleHRyYSkKKyAgICAgICAgdm9pZCBzZXRfZXh0cmFfd2l6aW5mbyAoaW50ICAgIHdpeiwgbWl4ZWQgZXh0cmEpCisKK0RFU0NSSVBUSU9OCisgICAgICAgIFNldCB0aGUgdmFsdWUgPGV4dHJhPiBhcyB0aGUgJ2V4dHJhJyBpbmZvcm1hdGlvbiBmb3IgdGhlIHdpemxpc3QKKyAgICAgICAgZW50cnkgb2YgPHdpej4uCisKKyAgICAgICAgSWYgPHdpej4gaXMgYW4gb2JqZWN0LCB0aGUgZW50cnkgb2YgaXRzIGNyZWF0b3IgKHVpZCkgaXMgdXNlZC4KKyAgICAgICAgSWYgPHdpej4gaXMgYSBzdHJpbmcgKGEgY3JlYXRvciBha2EgdWlkKSwgaXQgbmFtZXMgdGhlIGVudHJ5CisgICAgICAgIHRvIHVzZS4KKyAgICAgICAgSWYgPHdpej4gaXMgdGhlIG51bWJlciAwLCB0aGUgZGF0YSBpcyBzZXQgaW4gdGhlIGRlZmF1bHQgd2l6bGlzdAorICAgICAgICBlbnRyeS4gSXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgZGF0YSBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoaXMKKyAgICAgICAgZHJpdmVyIHJ1biwgbGlrZSB0aGUgdGltZSBvZiB0aGUgbGFzdCByZWJvb3QuCisKKyAgICAgICAgVGhlIDxleHRyYT4gYXJndW1lbnQgbWF5IGJlIGFueSB2YWx1ZS4KKworICAgICAgICBUaGUgZnVuY3Rpb24gY2F1c2VzIGEgcHJpdmlsZWdlIHZpb2xhdGlvbi4KKworU0VFIEFMU08KKyAgICAgICAgZ2V0X2V4dHJhX3dpemluZm8oRSksIHNldF9leHRyYV93aXppbmZvX3NpemUoRSksIHdpemxpc3RfaW5mbyhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vc2V0X25leHRfcmVzZXQgYi9kb2MvZWZ1bi9zZXRfbmV4dF9yZXNldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGNkM2I3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc2V0X25leHRfcmVzZXQKQEAgLTAsMCArMSw1NSBAQAorRlVOS1RJT04KKyAgICAgaW50IHNldF9uZXh0X3Jlc2V0KGludCBkZWxheSkKKworQVJHVU1FTlRFCisgICAgIGRlbGF5IC0gbWluaW1hbGUgWmVpdCBiaXMgenVtIG5hZWNoc3RlbiBSZXNldCBkZXMgT2JqZWt0ZXMKKworQkVTQ0hSRUlCVU5HCisgICAgIE1pdCBkaWVzZXIgZWZ1biBpc3QgZXMgbW9lZ2xpY2ggRWluZmx1c3MgYXVmIGRhcyBSZXNldHZlcmhhbHRlbiBkZXMKKyAgICAgT2JqZWt0ZXMgenUgbmVobWVuOgorCisgICAgIERhcyBPYmpla3QgYmVrb21tdCBlaW5lbiByZXNldCgpLUF1ZnJ1ZiBmcnVlaGVzdGVucyBpbiA8ZGVsYXk+IFNla3VuZGVuLgorICAgICBCZWkgQW5nYWJlIGVpbmVzIFdlcnRlcyA8MCB3aXJkIGRlciByZXNldCgpIGb8ciBkYXMgT2JqZWt0IGFiZ2VzY2hhbHRldCwKKyAgICAgd2FzIGZ1ZXIgQmx1ZXByaW50cyBnZWxlZ2VudGxpY2ggc2lubnZvbGwgaXN0LgorCisgICAgIEludGVybiB3aXJkIGluIGdsZWljaGJsZWliZW5kZW4gQWJzdGFlbmRlbiAoZGVyemVpdDogaW4gZGVyIFJlZ2VsIDJzLAorICAgICBrYW5uIHNpY2ggYWJlciBhdWNoIHZlcnpvZWdlcm4sIHdlbm4gZGVyIERyaXZlciB2aWVsIHp1IGhhdCwgei5CLiBhdWYgCisgICAgIDRzKSBnZXBydWVmdCBvYiBkaWUgWmVpdCB6dW0genVtIG5hZWNoc3RlbiByZXNldCgpIGFiZ2VsYXVmZW4gaXN0LiAKKyAgICAgU29sbHRlIGRpZXMgZGVyIEZhbGwgc2Vpbiwgd2lyZCBkaWUgRnVua3Rpb24gcmVzZXQoKSBpbSBPYmpla3QgCisgICAgIGF1ZmdlcnVmZW4uCisKKyAgICAgRGllIEZ1bmt0aW9uIGdpYnQgZGllIHZlcmJsZWliZW5kZSBaZWl0IGJpcyB6dW0gbmFlY2hzdGVuIFJlc2V0CisgICAgIHp1cnVlY2ssIGJldm9yIDxkZWxheT4gZ2VzZXR6dCB3dXJkZS4gRGVyIFdlcnQga2FubiBhdWNoIG5lZ2F0aXYKKyAgICAgc2Vpbiwgd2VubiBkZXIgUmVzZXQgdWViZXJmYWVsbGlnIHdhci4KKworICAgICBBY2h0dW5nOiBkaWUgdGF0c2FlY2hsaWNoZSBaZWl0LCB3YW5uIGRlciBSZXNldCBpbSBPYmpla3QgZHVyY2hnZWZ1ZWhydAorICAgICB3aXJkLCBoYWVuZ3QgYXVjaCBkYXZvbiBhYiwgb2IgZGFzIE9iamVrdCBuYWNoIEFibGF1ZiB2b24gPGRlbGF5PgorICAgICB2ZXJ3ZW5kZXQgd2lyZC4KKworQkVJU1BJRUxFCisgICAgIC8vIGVpbiBPYmpla3QgbWl0IHZlcmt1ZXJ6dGVyIHJlc2V0KCktWmVpdAorICAgICB2b2lkIGNyZWF0ZSgpIHsKKyAgICAgICAuLi4KKyAgICAgICBzZXRfbmV4dF9yZXNldCgxNSo2MCk7CS8vIH4gMTUgTWludXRlbgorICAgICAgIC4uLgorICAgICB9CisKKyAgICAgdm9pZCByZXNldCgpIHsKKyAgICAgICBzZXRfbmV4dF9yZXNldCg5MDApOwkvLyBkaWUgbXVzcyBpbSByZXNldCgpIGltbWVyIHdpZWRlcgorICAgICAgIDo6cmVzZXQoKTsgICAgICAgICAgIC8vIG5ldSBnZXNldHp0IHdlcmRlbgorICAgICB9CisKKyAgICAgLy8gZWluIE9iamVrdCwgZGVzc2VuIEJsdWVwcmludCBrZWluZW4gcmVzZXQoKSBiZWtvbW1lbiBzb2xsCisgICAgIHZvaWQgY3JlYXRlKCkgeworICAgICAgIGlmKCFjbG9uZXAodGhpc19vYmplY3QoKSkpIHsKKyAgICAgICAgIHNldF9uZXh0X3Jlc2V0KC0xKTsKKyAgICAgICAgIHJldHVybjsKKyAgICAgICB9CisgICAgICAgOjpjcmVhdGUoKTsKKyAgICAgICAuLi4KKyAgICAgfQorCitTSUVIRSBBVUNICisgICAgIGNhbGxfb3V0KEUpLCBvYmplY3RfaW5mbyhFKSwgcmVzZXQoTCksIHF1ZXJ5X25leHRfcmVzZXQoRSkKKworNy5BdWcgMjAwNyBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vc2V0X3RoaXNfb2JqZWN0IGIvZG9jL2VmdW4vc2V0X3RoaXNfb2JqZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZmRhNTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9zZXRfdGhpc19vYmplY3QKQEAgLTAsMCArMSw2MCBAQAorR0VTQ0hVRVRaVAorU1lOT1BTSVMKKyAgICAgICAgdm9pZCBzZXRfdGhpc19vYmplY3Qob2JqZWN0IG9iamVrdC1hbi1zdGVsbGUtdm9uLW9yaWdpbmFsb2JqZWt0KTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIERpZXMgaXN0IGVpbmUgZ2VzY2h1ZXR6dGUgRnVua3Rpb24sIGRpZSBudXIgdm9tIE1hc3Rlci1PYmpla3QgdW5kIGltCisgICAgICAgIFNpbXVsLUVmdW4tT2JqZWt0IGdlbnV0enQgd2VyZGVuIGRhcmYuIEJlaSBzb25zdGlnZXIgQmVudXR6dW5nCisgICAgICAgIGVyemV1Z3QgZGllc2UgRnVua3Rpb24gZWluZW4gRmVobGVyLgorCisgICAgICAgIERpZSBGdW5rdGlvbiBhZW5kZXJ0IGRhcyBSZXN1bHRhdCB2b24gdGhpc19vYmplY3QoKSBpbiBkZXIgbGF1ZmVuZGVuCisgICAgICAgIEZ1bmt0aW9uLCBlYmVuc28gZGFzIFJlc3VsdGF0IHZvbiBwcmV2aW91c19vYmplY3QoKSBpbiBGdW5rdGlvbmVuIGluCisgICAgICAgIGFuZGVyZW4gT2JqZWt0ZW4sIGRpZSBlaW5lbiBjYWxsX290aGVyKCkgQXVmcnVmIG1hY2hlbi4KKworICAgICAgICBEZXIgRWZmZWt0IHZvbiBzZXRfdGhpc19vYmplY3QoKSBibGVpYnQgYmVzdGVoZW4sIGJpcyBlaW4gZXh0ZXJuZXIKKyAgICAgICAgRnVua3Rpb25zYXVmcnVmIGFiZ2VzY2hsb3NzZW4gaXN0IG9kZXIgYmlzIHp1IGVpbmVtIGVybmV1dGVuCisgICAgICAgIHNldF90aGlzX29iamVjdCgpLiBXYWVocmVuZCBkZXIgQXVzZnVlaHJ1bmcgdm9uIENvZGUgaW0gTWFzdGVyLU9iamVrdAorICAgICAgICBvZGVyIGltIFNpbXVsLUVmdW4tT2JqZWt0IGlzdCBzZXRfdGhpc19vYmplY3QoKSBnYXJhbnRpZXJ0LCBhdWNoIHdlbm4KKyAgICAgICAgdGhpc19vYmplY3QoKSBkdXJjaCBzZXRfdGhpc19vYmplY3QoKSB2ZXJhZW5kZXJ0IHdpcmQuIERpZSBnaWx0CisgICAgICAgIG5pY2h0IGZ1ZXIgRnVua3Rpb25lbiwgZGllIGF1cyBhbmRlcmVuIFByb2dyYW1tZW4gaW5oZXJpdGV0IHdlcmRlbi4KKworICAgICAgICBEaWVzZSBGdW5rdGlvbiBkYXJmIG51ciBtaXQgaG9lY2hzdGVyIFNvcmdmYWx0IHZlcndlbmRldCB3ZXJkZW4sIHVtCisgICAgICAgIElua29uc2lzdGVuemVuIHp1IHZlcm1laWRlbi4gTmFjaCBlaW5lbSBBdWZydWYgdm9uIHNldF90aGlzX29iamVjdCgpCisgICAgICAgIGtvZW5uZW4gc2ljaCBnZXdpc3NlIExQQy1Lb25zdHJ1a3RlIG1lcmt3dWVyZGlnIHZlcmhhbHRlbiBvZGVyIGdhcgorICAgICAgICBkYXMgU3lzdGVtIHp1bSBBYnN0dXJ6IGJyaW5nZW4uIEluc2Jlc29uZGVyZSBkaWUgVmVyd2VuZHVuZyB2b24KKyAgICAgICAgZ2xvYmFsZW4gVmFyaWFibGVuIG9kZXIgZGVyIEF1ZnJ1ZiB2b24gbG9rYWxlbiBGdW5rdGlvbmVuIChhdXNzZXIKKyAgICAgICAgZHVyY2ggY2FsbF9vdGhlcigpKSBpc3QgdW56dWxhZXNzaWcgdW5kIHdpcmQgYWt0aXYgdmVyaGluZGVydC4KKworICAgICAgICBFcmxhdWJ0IHNpbmQgY2FsbF9vdGhlcigpLCBtYXAoKSwgZGVyIFp1Z3JpZmYgYXVmIGxva2FsZSBWYXJpYWJsZW4KKyAgICAgICAgKGRpZSBhdWNoIFBvaW50ZXIgYXVmIGdsb2JhbGUgQXJyYXlzIGVudGhhbHRlbiBkdWVyZmVuKSwgZWluZmFjaGUKKyAgICAgICAgQXJpdGhtZXRpayB1bmQgZGVyIFp1d2Vpc3VuZ3MtT3BlcmF0b3IuCisKK0JVR1MKKyAgICAgICAgRXMgaXN0IG1vbWVudGFuIG5pY2h0IG1vZWdsaWNoLCBkYXMgb3JpZ2luYWxlIGd1ZWx0aWdlIE9iamVrdCB3aWVkZXIKKyAgICAgICAgaGVyenVzdGVsbGVuLiBBbnN0ZWxsZSB2b246CisKKyAgICAgICAgICAgIG9iamVjdCBpY2ggPSB0aGlzX29iamVjdCgpOworICAgICAgICAgICAgc2V0X3RoaXNfb2JqZWN0KGRpbmdzKTsKKyAgICAgICAgICAgIDxpcmdlbmR3ZWxjaGVyIENvZGU+CisgICAgICAgICAgICBzZXRfdGhpc19vYmplY3QoaWNoKTsKKyAgICAgICAgICAgIDxtZWhyIENvZGU+CisKKyAgICAgICAgbXVzcyBkYXMgdWViZXIgZWluZW4gVW13ZWcgZ2Vsb2VzdCB3ZXJkZW46CisKKyAgICAgICAgICAgIHByaXZhdGUgdm9pZCB0dXdhcyhvYmplY3QgZGluZ3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2V0X3RoaXNfb2JqZWN0KGRpbmdzKTsKKyAgICAgICAgICAgICAgICA8aXJnZW5kd2VsY2hlciBjb2RlPgorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jYWxsKCMndHV3YXMsIGRpbmdzKTsKKyAgICAgICAgICAgIDxtZWhyIENvZGU+CisKKyAgICAgICAgTWFuY2hlIExldXRlIGJlemVpY2huZW4gZGFzIGFscyBGZWF0dXJlLgorCitBRU5ERVJVTkdFTgorICAgICAgICBMRE11ZCAzLjIuMTAgdmVyaGluZGVydCBha3RpdiBkaWUgUmVmZXJlbnogYXVmIGdsb2JhbGUgVmFyaWFibGVuIHVuZAorICAgICAgICAgICAgRnVua3Rpb25zYXVmcnVmZSBuYWNoIEFkcmVzc2UsIHdhZWhyZW4gc2V0X3RoaXNfb2JqZWN0KCkgZ2lsdC4KKworU0lFSEUgQVVDSAorICAgICAgICB0aGlzX29iamVjdChFKSwgc2V0X3RoaXNfcGxheWVyKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9zZXRfdGhpc19wbGF5ZXIgYi9kb2MvZWZ1bi9zZXRfdGhpc19wbGF5ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1YzUyOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3NldF90aGlzX3BsYXllcgpAQCAtMCwwICsxLDMxIEBACitHRVNDSFVFVFpUCitTWU5PUFNJUworICAgICAgICB2b2lkIHNldF90aGlzX3BsYXllcihvYmplY3Qgb2IpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgQWVuZGVydCBkZW4gbW9tZW50YW5lbiBLb21tYW5kb2dlYmVyIHp1IDxvYj4uIERhYmVpIGthbm4gPG9iPiBhdWNoCisgICAgICAgIDAgc2Vpbiwgd2VubiBkZXIgYWt0dWVsbGUgS29tbWFuZG9nZWJlciAnZGVha3RpdmllcnQnIHdlcmRlbiBzb2xsLgorCisgICAgICAgIERpZXNlIEZ1bmt0aW9uIGlzdCBuaWNodCBnZXNjaHVldHp0IHVuZCBzb2xsdGUgZGVzaGFsYiB2b24gZWluZXIKKyAgICAgICAgc2ltdWxfZWZ1biB1ZWJlcmxhZ2VydCB3ZXJkZW4sIGRpZSBkaWUgRWZ1biBlbnR3ZWRlciBrb21wbGV0dAorICAgICAgICBhYnNjaGFsdGV0LCBvZGVyIG1pbmRlc3RlbnMgZ2V3aXNzZSBTaWNoZXJoZWl0c2NoZWNrcyBkdXJjaGZ1ZWhydC4KKyAgICAgICAgRXMgaXN0IHNvbnN0IGVpbmZhY2gsIGRpZSBTaWNoZXJoZWl0IGVpbmVzIE11ZHMgbWl0IEhpbGZlIGRpZXNlcgorICAgICAgICBFZnVuIHp1IHVudGVyZ3JhYmVuLgorCisgICAgICAgIERpZSBFZnVuIGlzdCBudXIgaW4gMy4yLjEgdmVyZnVlZ2Jhci4gRWluZSBtb2VnbGljaGUgU2ltdWxhdGlvbiBmdWVyCisgICAgICAgIDMuMiBrb2VubnRlIGV0d2Egc28gYXVzc2VoZW46CisKKyAgICAgICAgICAgIHZvaWQgc2V0X3RoaXNfcGxheWVyKG9iamVjdCBvYikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBJbnNlcnQgeW91ciBwcml2aWxlZ2UgY2hlY2tzIGhlcmUgKi8KKyAgICAgICAgICAgICAgICBpZiAobGl2aW5nKG9iKSkKKyAgICAgICAgICAgICAgICAgICAgZnVuY2FsbChiaW5kX2xhbWJkYSgjJ2VuYWJsZV9jb21tYW5kcywgb2IpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIChzdWdnZXN0ZWQgYnkgTWFyayBMZXdpcyAoTm9zdHJhZGFtdXNAWmViZWRlZSkpCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi4xLgorICAgICAgICBMRE11ZCAzLjIuNiBmdWVocnRlIGRpZSAwIGFscyBtb2VnbGljaGVuIFBhcmFtZXRlciBlaW4uCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgc2V0X3RoaXNfb2JqZWN0KEUpLCB0aGlzX3BsYXllcihFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vc2V0ZXVpZCBiL2RvYy9lZnVuL3NldGV1aWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyNzkzYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3NldGV1aWQKQEAgLTAsMCArMSwxNyBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IHNldGV1aWQoc3RyaW5nIHN0cik7CisKK0JFU0NIUkVJQlVORworICAgICAgICBTZXR6dCBkaWUgZWZmZWt0aXZlIFVJRCBhdWYgPHN0cj4uIERhcyBhdWZydWZlbmRlIE9iamVrdCBtdXNzIGRhenUKKyAgICAgICAgdm9tIE1hc3Rlcm9iamVrdCBiZXJlY2h0aWd0IHNlaW4uIEluIGRlbiBtZWlzdGVuIEluc3RhbGxhdGlvbmVuCisgICAgICAgIGthbm4gZGllIGVmZmVrdGl2ZSBVSUQgamVkZXJ6ZWl0IGF1ZiBkaWUgbW9tZW50YW5lIFVJRCBkZXMgT2JqZWt0cywKKyAgICAgICAgYXVmIGRpZSBVSUQgZGVzIEVyc2NoYWZmZXJzIGRlcyBPYmpla3RzIG9kZXIgYXVmIDAgZ2VzZXR6dCB3ZXJkZW4uCisKKyAgICAgICAgTnVyIHdlbm4gZGllc2VyIFdlcnQgMCBpc3QsIGthbm4gZGllIFVJRCBkZXMgT2JqZWt0cyBkdXJjaAorICAgICAgICBleHBvcnRfdWlkKCkgdmVyYWVuZGVydCB3ZXJkZW4uCisKKyAgICAgICAgVW50ZXIgc3RyaWt0ZW4gZVVJRCBSZWdlbG4ga29lbm5lbiBPYmpla3RlIG1pdCBVSUQgMCBrZWluZSBhbmRlcmVuCisgICAgICAgIE9iamVrdGUgbGFkZW4gb2RlciBjbG9uZW4uCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgZXhwb3J0X3VpZChFKSwgZ2V0dWlkKEUpLCBnZXR1dWlkKEUpLCBnZXRldWlkKEUpLCBuYXRpdmUoQykKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3NnbiBiL2RvYy9lZnVuL3NnbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzMxYzBkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc2duCkBAIC0wLDAgKzEsMTcgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCBzZ24gKGludHxmbG9hdCBhcmcpCisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGRhcyBWb3J6ZWljaGVuIGRlcyBBcmd1bWVudGVzLgorCisgICAgICAgIGFyZyAgc2duKGFyZykKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgPiAwICAgMQorICAgICAgICAgIDAgICAwCisgICAgICAgIDwgMCAgLTEKKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjkuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgYWJzKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9zaHV0ZG93biBiL2RvYy9lZnVuL3NodXRkb3duCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZWYwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9zaHV0ZG93bgpAQCAtMCwwICsxLDE4IEBACitTWU5PUFNJUworICAgICAgICB2b2lkIHNodXRkb3duKCk7CisgICAgICAgIHZvaWQgc2h1dGRvd24oaW50IGV4aXRfY29kZSk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBGYWVocnQgZGFzIE11ZCBoZXJ1bnRlci4gRGllc2UgRnVua3Rpb24gZGFyZiBuaWUgdmVyd2VuZGV0IHdlcmRlbiEKKyAgICAgICAgV2VubiBkYXMgTXVkIGhlcnVudGVyZ2VmYWhyZW4gd2VyZGVuIG11c3MsIHNvIGhhdCBkaWVzIHVlYmVyIGRlbgorICAgICAgICBTaHV0ZG93bmJlZmVobCB6dSBlcmZvbGdlbi4KKworICAgICAgICBJc3QgZWluIDxleGl0X2NvZGU+IEFyZ3VtZW50IGdlZ2ViZW4sIHdpcmQgc2VpbiBXZXJ0IGFscyBkZXIKKyAgICAgICAgVW5peC1SZXN1bHRhdHdlcnQgdmVyd2VuZGV0OyBhbmRlcm5mYWxscyB3aXJkIDAgdmVyd2VuZGV0LgorCisgICAgICAgIE1hbiBmcmFndCBzaWNoIG51biB2aWVsbGVpY2h0LCB3b3p1IGVzIGRhbm4gZGllc2UgRnVua3Rpb24gZ2lidCwKKyAgICAgICAgd2VubiBtYW4gc2llIG5pY2h0IHZlcndlbmRlbiBkYXJmLiBTb3JyeSwgZGFzIGRhcmYgaGllciBuaWNodAorICAgICAgICBiZWthbm50IGdlZ2ViZW4gd2VyZGVuLiBTdHJlbmcgZ2VoZWltLgorCitTSUVIRSBBVUNICisgICAgICAgIGJyZWFrX3BvaW50KEUpLCBzd2FwKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9zaW4gYi9kb2MvZWZ1bi9zaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhYjdlYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3NpbgpAQCAtMCwwICsxLDggQEAKK1NZTk9QU0lTCisgICAgICAgIGZsb2F0IHNpbihpbnR8ZmxvYXQpCisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGRlbiBTaW51cyBkZXMgQXJndW1lbnRlcy4KKworU0lFSEUgQVVDSAorICAgICAgICBhc2luKEUpLCBjb3MoRSksIGFjb3MoRSksIHRhbihFKSwgYXRhbihFKSwgYXRhbjIoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3NpemVvZiBiL2RvYy9lZnVuL3NpemVvZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTAyM2I0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc2l6ZW9mCkBAIC0wLDAgKzEsMTYgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCBzaXplb2YobWl4ZWQgKiB2YWwpOworICAgICAgICBpbnQgc2l6ZW9mKHN0cmluZyAgdmFsKTsKKyAgICAgICAgaW50IHNpemVvZihtYXBwaW5nIHZhbCk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGRpZSBBbnphaGwgRWxlbWVudGUgaW4gZWluZW0gQXJyYXkgPHZhbD4sIGRpZSBBbnphaGwKKyAgICAgICAgWmVpY2hlbiBpbiBlaW5lbSBTdHJpbmcgPHZhbD4gb2RlciBkaWUgQW56YWhsIEtleXMgaW4gZWluZW0gTWFwcGluZworICAgICAgICA8dmFsPi4KKworICAgICAgICBBbHMgU3BlemlhbGZhbGwga2FubiA8dmFsPiBhdWNoIDAgc2Vpbi4gSW4gZGllc2VtIEZhbGwgbGllZmVydCBkaWUKKyAgICAgICAgRnVua3Rpb24gMCB6dXJ1ZWNrLgorCitTSUVIRSBBVUNICisgICAgICAgIGFsbG9jYXRlKEUpLCBwb2ludGVycChFKSwgbWFwcGluZ3AoRSksIG1fYWxsb2NhdGUoRSksCisgICAgICAgIHdpZHRob2YoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3NsX2Nsb3NlIGIvZG9jL2VmdW4vc2xfY2xvc2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzOTQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3NsX2Nsb3NlCkBAIC0wLDAgKzEsMTcgQEAKK09QVElPTkFMCitTWU5PUFNJUworICAgICAgICB2b2lkIHNsX2Nsb3NlKCkKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIFNjaGxpZXNzdCBkaWUgU1FMaXRlLURhdGVuYmFuaywgd2VsY2hlIHZvbSBha3R1ZWxsZW4gT2JqZWt0CisgICAgICAgIGdlb2VmZm5ldCB3dXJkZS4KKworICAgICAgICBEaWVzZSBGdW5rdGlvbiBpc3QgbnVyIHZlcmZ1ZWdiYXIsIHdlbm4gZGVyIERyaXZlciBtaXQgU1FMaXRlLQorICAgICAgICBVbnRlcnN0dWV0enVuZyBjb21waWxpZXJ0IHd1cmRlLiBJbiBkaWVzZW0gRmFsbCBpc3QgZGFzIE1ha3JvCisgICAgICAgIF9fU1FMSVRFX18gZGVmaW5pZXJ0LgorCitHRVNDSElDSFRFCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMy43MTMuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgc2xfb3BlbihFKSwgc2xfZXhlYyhFKSwgc2xfaW5zZXJ0X2lkKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9zbF9leGVjIGIvZG9jL2VmdW4vc2xfZXhlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGM0YThmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc2xfZXhlYwpAQCAtMCwwICsxLDI1IEBACitPUFRJT05BTAorU1lOT1BTSVMKKyAgICAgICAgbWl4ZWQqIHNsX2V4ZWMoc3RyaW5nIHN0YXRlbWVudCwgLi4uKQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgRnVlaHJ0IGRlbiBTUUwtQmVmZWhsIDxzdGF0ZW1lbnQ+IGluIGRlciBha3R1ZWxsIGdlb2VmZm5ldGVuCisgICAgICAgIFNRTGl0ZS1EYXRlbmJhbmsgYXVzLiBEaWVzZXIgU1FMLUJlZmVobCBrYW5uIFdpbGRjYXJkcyB3aWUgJz8nCisgICAgICAgIG5kICc/bm5uJywgd29iZWkgJ25ubicgZWluZSBaYWhsIGlzdCwgZW50aGFsdGVuLiBEaWVzZSBXaWxkY2FyZHMKKyAgICAgICAga29lbm5lbiBhbHMgd2VpdGVyZSBQYXJhbWV0ZXIgYW4gc2xfZXhlYyB1ZWJlcmdlYmVuIHdlcmRlbi4KKyAgICAgICAgTWl0ICc/bm5uJyBrYW5uIGRpcmVrdCBkaWUgTnVtbWVyIGVpbmVzIGJlc3RpbW10ZW4gUGFyYW1ldGVycworICAgICAgICBhbmdlZ2ViZW4gd2VyZGVuLCBkZXIgZXJzdGUgUGFyYW1ldGVyIGhhdCBkaWUgTnVtbWVyIDEuCisKKyAgICAgICAgRmFsbHMgZGVyIFNRTC1CZWZlaGwgRGF0ZW4genVydWVja2xpZWZlcnQsIGxpZWZlcnQgc2xfZXhlYyBlaW4KKyAgICAgICAgQXJyYXkgYXVzIGRlbiBlaW56ZWxuZW4gWmVpbGVuICh3ZWxjaGUgd2llZGVyIEFycmF5cyBkZXIgZWluemVsbmVuCisgICAgICAgIEZlbGRlciBzaW5kKSB6dXJ1ZWNrLgorCisgICAgICAgIERpZXNlIEZ1bmt0aW9uIGlzdCBudXIgdmVyZnVlZ2Jhciwgd2VubiBkZXIgRHJpdmVyIG1pdCBTUUxpdGUtCisgICAgICAgIFVudGVyc3R1ZXR6dW5nIGNvbXBpbGllcnQgd3VyZGUuIEluIGRpZXNlbSBGYWxsIGlzdCBkYXMgTWFrcm8KKyAgICAgICAgX19TUUxJVEVfXyBkZWZpbmllcnQuCisKK0dFU0NISUNIVEUKKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4zLjcxMy4KKworU0lFSEUgQVVDSAorICAgICAgICBzbF9vcGVuKEUpLCBzbF9pbnNlcnRfaWQoRSksIHNsX2Nsb3NlKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9zbF9pbnNlcnRfaWQgYi9kb2MvZWZ1bi9zbF9pbnNlcnRfaWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQyNWNlZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3NsX2luc2VydF9pZApAQCAtMCwwICsxLDE4IEBACitPUFRJT05BTAorU1lOT1BTSVMKKyAgICAgICAgaW50IHNsX2luc2VydF9pZCgpCisKK0JFU0NIUkVJQlVORworICAgICAgICBOYWNoZGVtIGVpbmUgWmVpbGUgaW4gZWluZSBUYWJlbGxlIG1pdCBlaW5lciBBVVRPX0lOQ1JFTUVOVC1TcGFsdGUKKyAgICAgICAgZWluZ2VmdWVndCB3dXJkZSwga2FubiBtYW4gbWl0IGRpZXNlciBGdW5rdGlvbiBkZW4gKG5ldWVuKSBXZXJ0CisgICAgICAgIGRpZXNlcyBBVVRPX0lOQ1JFTUVOVC1GZWxkZXMgZGVyIGVpbmdlZnVlZ3RlbiBaZWlsZSBhYmZyYWdlbi4KKworICAgICAgICBEaWVzZSBGdW5rdGlvbiBpc3QgbnVyIHZlcmZ1ZWdiYXIsIHdlbm4gZGVyIERyaXZlciBtaXQgU1FMaXRlLQorICAgICAgICBVbnRlcnN0dWV0enVuZyBjb21waWxpZXJ0IHd1cmRlLiBJbiBkaWVzZW0gRmFsbCBpc3QgZGFzIE1ha3JvCisgICAgICAgIF9fU1FMSVRFX18gZGVmaW5pZXJ0LgorCitHRVNDSElDSFRFCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMy43MTMuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgc2xfb3BlbihFKSwgc2xfZXhlYyhFKSwgc2xfY2xvc2UoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3NsX29wZW4gYi9kb2MvZWZ1bi9zbF9vcGVuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NDY4NWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9zbF9vcGVuCkBAIC0wLDAgKzEsMjAgQEAKK09QVElPTkFMCitTWU5PUFNJUworICAgICAgICBpbnQgc2xfb3BlbihzdHJpbmcgZmlsZW5hbWUpCisKK0JFU0NIUkVJQlVORworICAgICAgICBPZWZmbmV0IGRpZSBEYXRlaSA8ZmlsZW5hbWU+IGFscyBTUUxpdGUtRGF0ZW5iYW5rLiBGYWxscworICAgICAgICBzaWUgbm9jaCBuaWNodCBleGlzdGllcnQsIHdpcmQgc2llIGVyc3RlbGx0LiBFcyBpc3QgbnVyCisgICAgICAgIGVpbmUgZ2VvZWZmbmV0ZSBEYXRlbmJhbmsgcHJvIE9iamVrdCBlcmxhdWJ0LiBJbSBFcmZvbGdzZmFsbGUKKyAgICAgICAgbGllZmVydCBkaWVzZSBGdW5rdGlvbiAxIHp1cnVlY2ssIGFuZGVyZW5mYWxscyB3aXJkCisgICAgICAgIG5vcm1hbGVyd2Vpc2UgZWluIEZlaGxlciBhdXNnZWxvZXN0LgorCisgICAgICAgIERpZXNlIEZ1bmt0aW9uIGlzdCBudXIgdmVyZnVlZ2Jhciwgd2VubiBkZXIgRHJpdmVyIG1pdCBTUUxpdGUtCisgICAgICAgIFVudGVyc3R1ZXR6dW5nIGNvbXBpbGllcnQgd3VyZGUuIEluIGRpZXNlbSBGYWxsIGlzdCBkYXMgTWFrcm8KKyAgICAgICAgX19TUUxJVEVfXyBkZWZpbmllcnQuCisKK0dFU0NISUNIVEUKKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4zLjcxMy4KKworU0lFSEUgQVVDSAorICAgICAgICBzbF9leGVjKEUpLCBzbF9pbnNlcnRfaWQoRSksIHNsX2Nsb3NlKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9zbm9vcCBiL2RvYy9lZnVuL3Nub29wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NGIyMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9zbm9vcApAQCAtMCwwICsxLDIyIEBACitHRVNDSFVFVFpUCitTWU5PUFNJUworICAgICAgICBpbnQgc25vb3Aob2JqZWN0IHNub29wZXIpOworICAgICAgICBpbnQgc25vb3Aob2JqZWN0IHNub29wZXIsIG9iamVjdCBzbm9vcGVlKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEJlZ2lubnQgZGllIEJlb2JhY2h0dW5nIGRlcyBPYmpla3RzIDxzbm9vcGVlPiBkdXJjaCA8c25vb3Blcj4uIFdlbm4KKyAgICAgICAgPHNub29wZWU+IG5pY2h0IGFuZ2VnZWJlbiB3aXJkLCB3ZXJkZW4gYWxsZSBCZW9iYWNodHVuZ2VuIHZvbgorICAgICAgICA8c25vb3Blcj4gYmVlbmRldC4KKworICAgICAgICBEaWUgRnVua3Rpb24gbGllZmVydCAxIGJlaSBFcmZvbGcsIC0xIHdlbm4gZWluZSBTY2hsZWlmZSBlbnRzdGVoZW4KKyAgICAgICAgd3VlcmRlIHVuZCAwIGZ1ZXIgYWxsZSBhbmRlcmVuIEZlaGxlci4KKworICAgICAgICBEaWUgQmVvYmFjaHR1bmcgd2lyZCBtaXQgZGVtIE1hc3Rlci1PYmpla3QgYXVmIEd1ZWx0aWdrZWl0IGdlcHJ1ZWZ0LgorICAgICAgICBFcyB3aXJkIGF1Y2ggZWluIEZlaGxlciB2ZXJ1cnNhY2h0LCB3ZW5uIGVpbmUgQmVvYmFjaHR1bmcgenUgZWluZXIKKyAgICAgICAgUmVrdXJzaW9uIGZ1ZWhyZW4gd3VlcmRlLgorCitBTk1FUktVTkcKKyAgICAgICAgRGllc2UgRnVua3Rpb24gaXN0IGdlc2NodWV0enQuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgcXVlcnlfc25vb3AoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3NvcnRfYXJyYXkgYi9kb2MvZWZ1bi9zb3J0X2FycmF5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YTY1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9zb3J0X2FycmF5CkBAIC0wLDAgKzEsMTExIEBACitzb3J0X2FycmF5KEUpCisKK0ZVTktUSU9OOgorICAgICBtaXhlZCAqc29ydF9hcnJheShtaXhlZCAqYXJyLCBtaXhlZCBmdW5jIFssIG1peGVkIG9iXSkKKworUEFSQU1FVEVSOgorICAgICBhcnIgIC0genUgc29ydGllcmVuZGVzIEFycmF5CisgICAgIGZ1bmMgLSB6dSBydWZlbmRlIE1ldGhvZGU7IGthbm4gYWxzIFN0cmluZyAoRnVua3Rpb25zbmFtZSkgb2RlciAKKyAgICAgICAgICAgIENsb3N1cmUgdWViZXJnZWJlbiB3ZXJkZW4KKyAgICAgb2IgICAtIE9iamVrdCwgYW4gZGVtIE1ldGhvZGUgZ2VydWZlbiB3ZXJkZW4gc29sbDsga2FubiBhbHMgU3RyaW5nCisgICAgICAgICAgICAoRmlsZW5hbWUpIG9kZXIgT2JqZWt0cG9pbnRlciB1ZWJlcmdlYmVuIHdlcmRlbgorCitCRVNDSFJFSUJVTkcKKyAgICAgRXJ6ZXVndCBlaW5lIChmbGFjaGUpIEtvcGllIGRlcyBBcnJheXMgJ2FycicgdW5kIHNvcnRpZXJ0IGRpZXNlIG1pdCBkZXIKKyAgICAgU29ydGllcmZ1bmt0aW9uICdmdW5jJy4gRGllIHNvcnRpZXJ0ZSBLb3BpZSB3aXJkIGRhbm4genVydWVja2dlZ2ViZW4uCisKKyAgICAgRGllIEVsZW1lbnRlIGRlcyB6dSBzb3J0aWVyZW5kZW4gQXJyYXlzIHdlcmRlbiBwYWFyd2Vpc2UgYW4gZGllCisgICAgIFNvcnRpZXJmdW5rdGlvbiBhbHMgQXJndW1lbnRlIHVlYmVyZ2ViZW4uCisgICAgIERpZSBTb3J0aWVyZnVua3Rpb24gc29sbHRlIGVpbmUgWmFobAorICAgICAtID4wIHp1cnVlY2tnZWJlbiwgd2VubiBkaWUgRWxlbWVudGUgaW4gZGVyIGZhbHNjaGVuCisgICAgICAgUmVpaGVuZm9sZ2Ugc2luZAorICAgICAtIDw9MCB6dXJ1ZWNrZ2ViZW4sIHdlbm4gZGllIEVsZW1lbnRlIGluIGRlciByaWNodGlnZW4KKyAgICAgICBSZWloZW5mb2xnZSBzaW5kLgorCisgICAgIFZlcndlbmR1bmcgdm9uIE1ldGhvZGVuOgorICAgICAgIFdlbm4gYmVpIGRlciBBbmdhYmUgdm9uICdmdW5jJyBrZWluIE9iamVrdCAnb2InIGluIEZvcm0gZWluZXMgU3RyaW5ncworICAgICAgIG9kZXIgT2JqZWt0cyBhbmdlZ2ViZW4gd2lyZCwgd2lyZCB0aGlzX29iamVjdCgpIGFuZ2Vub21tZW4uCisKKyAgICAgVmVyd2VuZHVuZyB2b24gQ2xvc3VyZXM6CisgICAgICAgRXMga29lbm5lbiBMZnVuLSwgTGFtYmRhLSB1bmQgSW5saW5lLUNsb3N1cmVzIHZlcndlbmRldCB3ZXJkZW4uIAorICAgICAgIExmdW4tQ2xvc3VyZXMga29lbm5lbiwgd2VubiBpbSBzZWxiZW4gT2JqZWt0IHZvcmhhbmRlbiwgYXVjaAorICAgICAgICdwcml2YXRlJyBvZGVyL3VuZCAnc3RhdGljJyBkZWtsYXJpZXJ0IHNlaW4sIG11ZXNzZW4gYWJlciB6dSBkZW0KKyAgICAgICBaZWl0cHVua3QgZGVyIFZlcndlbmR1bmcgYmVrYW5udCBzZWluIChGdW5rdGlvbnNwcm90b3R5cGVuIGJlbnV0emVuKS4KKyAgICAgICBWb24gZGVyIFZlcndlbmR1bmcgdm9uIExhbWJkYS1DbG9zdXJlcyB3aXJkIGF1c2RydWVja2xpY2ggYWJnZXJhdGVuLgorCitCRU1FUktVTkdFTjoKKyAgICAgKDEpIHNvcnRfYXJyYXkoKSB1bnRlcnN0dWV0enQga2VpbmVuIGV4dHJhLVBhcmFtZXRlcgorCisgICAgICgyKSBBY2h0dW5nLCBkaWUgRWxlbWVudGUgaW4gJ2Fycicgd2VyZGVuIG5pY2h0IHRpZWYga29waWVydCwgc2luZCBzaWUKKyAgICAgYWxzbyBzZWxic3QgQXJyYXlzIG9kZXIgTWFwcGluZ3MsIHNvIGZ1ZWhydCBlaW5lIEFlbmRlcnVuZyBpbSBSdWVja2dhYmUtCisgICAgIEFycmF5IHp1ciBBZW5kZXJ1bmcgaW0gVXJzcHJ1bmdzYXJyYXk6CisKKyAgICAgaW50ICppLCAqajsKKyAgICAgaT0oeyh7MX0pLCh7MiwzfSksKHs0LDUsNn0pfSk7CisgICAgIGo9c29ydF9hcnJheShpLCAgICAgICAgLy8gc29ydGllcnQgZGVyIEdyb2Vzc2UgbmFjaCBhYnN0ZWlnZW5kCisgICAgICAgICBmdW5jdGlvbiBpbnQgKCBtaXhlZCB4LCBtaXhlZCB5ICkgeworICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHgpIDwgc2l6ZW9mKHkpOyB9CisgICAgICAgICApOworICAgICAKKyAgICAgWnUgZGllc2VtIFplaXRwdW5rdCBpc3QgIGkgPT0gKHsgKHsxfSksKHsyLDN9KSwoezQsNSw2fSkgfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPT0gKHsgKHs0LDUsNn0pLCh7MiwzfSksKHsxfSkgfSkKKyAgICAgCisgICAgIEZ1ZWhydCBtYW4gamV0enQgZGllIFp1d2Vpc3VuZyBqWzBdWzBdPTg7IGF1cworCisgICAgIHJlc3VsdGllcmVuIGZvbGdlbmRlIEFycmF5czogaSA9PSAoeyAoezF9KSwoezIsM30pLCh7OCw1LDZ9KSB9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPT0gKHsgKHs4LDUsNn0pLCh7MiwzfSksKHsxfSkgfSkKKworQkVJU1BJRUxFOgorICAgICAjIyMgU29ydGllcmVuIHZvbiBaYWhsZW4gaW4gYXVmc3RlaWdlbmRlciBSZWloZW5mb2xnZSAjIyMKKyAgICAgCisgICAgIGludCAqYXJyID0gKHsgMywgOCwgMSwgMyB9KQorCisgICAgIC8vIEZvbGdlbmQgaWRlbnRpc2NoZSBSZXN1bHRhdGUsIGFiZXIgYW5kZXJlIEFuc2FldHplOgorCisgICAgICMxOiBudXR6dCBkaWUgJ0VmdW4nID4gYWxzIExmdW4tQ2xvc3VyZSAoaWRlYWwgaGllcik6CisgICAgICAgICBzb3J0X2FycmF5KGFyciwgIyc+KTsKKworICAgICAjMjogbWl0IFNvcnRpZXJmdW5rdGlvbiBpbSBzZWxiZW4gT2JqZWt0OgorICAgICAgICAgaW50IGlzX2dyZWF0ZXIgKGludCBhLCBpbnQgYikgeworICAgICAgICAgICByZXR1cm4gYSA+IGI7CisgICAgICAgICB9CisgICAgICAgICAKKyAgICAgICAgICMyYTogc29ydGllcnQgbWl0dGVscyBkZXIgTGZ1biBpbSBzZWxiZW4gT2JqZWt0IGRpZSBFbGVtZW50ZSBpbiBkYXMKKyAgICAgICAgICAgICAgUnVlY2tnYWJlYXJyYXkKKyAgICAgICAgICAgICAgc29ydF9hcnJheShhcnIsICJpc19ncmVhdGVyIiwgdGhpc19vYmplY3QoKSkKKyAgICAgICAgICAgICAgc29ydF9hcnJheShhcnIsICJpc19ncmVhdGVyIikKKworICAgICAgICAgIzJiOiBudXR6dCBkaWUgTGZ1biBpc19ncmVhdGVyKCkgYWxzIExmdW4tQ2xvc3VyZSAoRnVua3Rpb25zcG9pbnRlcikKKyAgICAgICAgICAgICAgc29ydF9hcnJheShhcnIsICMnaXNfZ3JlYXRlcikKKworICAgICAjMzogbnV0enQgZWluZSBMYW1iZGEtQ2xvc3VyZSAobGFuZ3NhbWVyLCBuaWNodCBmdWVyIGFsbGUgbGVzZXJsaWNoKQorICAgICAgICAgc29ydF9hcnJheShhcnIsIGxhbWJkYSgoeydhLCAnYn0pLCAoeyMnPiwgJ2EsICdifSkpKQorCisgICAgICM0OiBhbmFsb2cgenUgMywgbWl0IElubGluZS1DbG9zdXJlCisgICAgICAgICBzb3J0X2FycmF5KGFyciwgZnVuY3Rpb24gaW50IChpbnQgYSwgaW50IGIpIHsKKyAgICAgICAgICAgcmV0dXJuIGEgPiBiOyB9ICk7CisKKyAgICAgUmVzdWx0YXQgaW4gYWxsZW4gRmFlbGxlbjogKHsxLDMsMyw4fSkKKworICAgICAjIyMgU29ydGllcmVuIHZvbiBnZXNjaGFjaHRlbHRlbiBBcnJheXMgIyMjCisKKyAgICAgYXJyID0gKHsgKHsgImZvbyIsIDMgfSksICh7ICJxdXV4IiwgMSB9KSwgLi4uIH0pCisKKyAgICAgLy8gVm9yZ2VoZW4gaWRlbnRpc2NoLCBhbGxlcmRpbmdzIG11c3MgZGllIFNvcnRpZXJmdW5rdGlvbgorICAgICAvLyBhbmdlcGFzc3Qgd2VyZGVuIChzaWVoZSBhdWNoIGRhcyBCZWlzcGllbCB1bnRlciBWZXJ3ZW5kdW5nIHZvbgorICAgICAvLyBJbmxpbmUtQ2xvc3VyZXMgb2JlbiB1bnRlciAiQmVtZXJrdW5nZW4iKToKKyAgICAgCisgICAgIGludCBpc19ncmVhdGVyIChtaXhlZCAqYSwgbWl4ZWQgKmIpIHsKKyAgICAgICByZXR1cm4gYVsxXSA+IGJbMV07CisgICAgIH0KKworU0lFSEUgQVVDSDoKKyAgICAgQXJyYXlzOiAgICAgICAgZmlsdGVyKEUpLCBtYXAoRSkKKyAgICAgT2JqZWt0YXJyYXlzOiAgZmlsdGVyX29iamVjdHMoRSksIG1hcF9vYmplY3RzKEUpCisgICAgIE1hcHBpbmdzOiAgICAgIGZpbHRlcl9pbmRpY2VzKEUpLCBtYXBfaW5kaWNlcyhFKQorCisgICAgIFNvbnN0aWdlczogICAgIHVuaXF1ZV9hcnJheSgpCisgICAgICAgICAgICAgICAgICAgIGFsaXN0LCB0cmFuc3Bvc2VfYXJyYXkoRSkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGFzdCBtb2RpZmllZDogTW9uIEZlYiAxOCAyMzowOSAyMDA4IGJ5IEFyYXRob3JuCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9zcHJpbnRmIGIvZG9jL2VmdW4vc3ByaW50ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2I2OTcwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc3ByaW50ZgpAQCAtMCwwICsxLDE0NyBAQAorU1lOT1BTSVMNCisgICAgICAgIHN0cmluZyBzcHJpbnRmKHN0cmluZyBmbXQsIC4uLikNCisNCitCRVNDSFJFSUJVTkcNCisgICAgICAgIE1pdCBkaWVzZXIgRnVua3Rpb24ga2FubiBtYW4gYXVmIGVpbmZhY2hlIFdlaXNlIGF1cyBkZW0gSW5oYWx0DQorICAgICAgICB2b24gVmFyaWFibGVuIGVpbmVuIFN0cmluZyBiYXVlbjsgdW5kIGRpZXMgZWZmZWt0aXZlciBhbHMNCisgICAgICAgIG1pdCBkZXIgdWVibGljaGVuICJEdSBoYXN0ICIrYW56YWhsKyIgUHVua3QoZSkiLU1ldGhvZGUuDQorDQorICAgICAgICBEaWUgRnVua3Rpb24gYmVrb21tdCBhbHMgZXJzdGVzIEFyZ3VtZW50IGVpbmVuIEZvcm1hdHN0cmluZyBmbXQsDQorICAgICAgICBkZXIgSW5mb3JtYXRpb25lbiBkYXJ1ZWJlciBlbnRoYWVsdCwgd2llIGRpZSB3ZWl0ZXJlbiBiZWxpZWJpZ2VuDQorICAgICAgICBBcmd1bWVudGUgaW4gZGVuIEVyZ2Vibmlzc3RyaW5nIGVpbmdlYmF1dCB3ZXJkZW4gc29sbGVuLg0KKyAgICAgICAgRGllIG1laXN0ZW4gWmVpY2hlbiBnZWxhbmdlbiB2b20gRm9ybWF0c3RyaW5nIHVudmVyYWVuZGVydCBpbg0KKyAgICAgICAgZGVuIEF1c2dhYmVzdHJpbmcuIERpZSBSZWdlbG4genVtIEVpbmJhdSBlaW5lcyBBcmd1bWVudHMgd2VyZGVuDQorICAgICAgICBpbW1lciBtaXQgJyUnIGVpbmdlbGVpdGV0LiBNb2VjaHRlIG1hbiBlaW4gJyUnIGluIGRpZSBBdXNnYWJlDQorICAgICAgICBicmluZ2VuLCBzbyBtdXNzIG1hbiBpbSBGb3JtYXRzdHJpbmcgIiUlIiB2ZXJ3ZW5kZW4uDQorDQorICAgICAgICBFaW4gZWluZmFjaGVzIEJlaXNwaWVsIGlzdCBlcmc9c3ByaW50ZigiJXMgJWQiLCBzdHIsIGkpOw0KKyAgICAgICAgJyUnIGxlaXRldCBlaW5lbiBBcmd1bWVudGZvcm1hdHN0cmluZyAoQUZTKSBlaW4uIERhcyAncycgc2NobGllc3N0DQorICAgICAgICBpaG4gYWIgdW5kIGJlc2FndCwgZGFzcyBlaW4gU3RyaW5nIGVpbmdlYmF1dCB3ZXJkZW4gc29sbC4gRGFzDQorICAgICAgICBmb2xnZW5kZSBMZWVyemVpY2hlbiB3aXJkIHVudmVyYWVuZGVydCB1ZWJlcm5vbW1lbi4gJyUnIGxlaXRldA0KKyAgICAgICAgd2llZGVyIGVpbmVuIG5ldWVuIEZvcm1hdHN0cmluZyBlaW4sIHdvYmVpICdkJyBlaW5lIEdhbnp6YWhsDQorICAgICAgICBiZXplaWNobmV0IChlaW5lIFZhcmlhYmxlIHZvbiBUeXAgaW50KS4NCisgICAgICAgIERpZXMgaXN0IGVpbiBhbGxlcmRpbmdzIG51ciBlaW4gc2VociBlaW5mYWNoZXMgQmVpc3BpZWwuDQorDQorICAgICAgICBKZWRlciBBcmd1bWVudGZvcm1hdHN0cmluZyBrZW5uemVpY2huZXQgYWxzbywgYXVmIHdlbGNoZSBBcnQNCisgICAgICAgIGVpbiBBcmd1bWVudCBpbiBkYXMgRXJnZWJuaXMgZWluZ2ViYXV0IHdlcmRlbiBzb2xsLiBEZXIgZXJzdGUNCisgICAgICAgIEFGUyBpc3QgZnVlciBkYXMgendlaXRlIEFyZ3VtZW50IGRlciBGdW5rdGlvbiwgZGVyIHp3ZWl0ZSBBRlMNCisgICAgICAgIGZ1ZXIgZGFzIGRyaXR0ZSBBcmd1bWVudCB1LnMudy4gKGRhcyBlcnN0ZSBBcmd1bWVudCBkZXIgRnVua3Rpb24NCisgICAgICAgIGlzdCBqYSBkZXIgRm9ybWF0c3RyaW5nIHNlbGJzdCkuDQorDQorICAgICAgICBKZWRlciBBRlMgYmVnaW5udCBtaXQgZWluZW0gJyUnIHVuZCBlbmRldCBtaXQgZWluZW0gZGVyDQorICAgICAgICBmb2xnZW5kZW4gWmVpY2hlbiAoQXJndW1lbnR0eXAtS2VubnplaWNobmVyKToNCisgICAgICAgIFplaWNoZW4gICAgQXJndW1lbnR0eXAgICAgQmVtZXJrdW5nDQorICAgICAgICAncycgICAgICAgIHN0cmluZw0KKyAgICAgICAgJ2MnICAgICAgICBpbnRlZ2VyICAgICAgICBhbHMgQVNDSUktWmVpY2hlbg0KKyAgICAgICAgJ2QnICdpJyAgICBpbnRlZ2VyICAgICAgICBEZXppbWFsc2NocmVpYndlaXNlDQorICAgICAgICAnbycgICAgICAgIGludGVnZXIgICAgICAgIE9rdGFsc2NocmVpYndlaXNlDQorICAgICAgICAnYicgJ0InICAgIGludGVnZXIgICAgICAgIEJpbmFlcnNjaHJlaWJ3ZWlzZQ0KKyAgICAgICAgJ3gnICdYJyAgICBpbnRlZ2VyICAgICAgICBIZXhhZGV6aW1hbHNjaHJlaWJ3ZWlzZQ0KKyAgICAgICAgJ2UnICdFJyAgICBmbG9hdCAgICAgICAgICBFeHBvbmVudGlhbHNjaHJlaWJ3ZWlzZQ0KKyAgICAgICAgJ2YnICdGJyAgICBmbG9hdCAgICAgICAgICBHbGVpdGtvbW1hZGFyc3RlbGx1bmcNCisgICAgICAgICdnJyAnRycgICAgZmxvYXQgICAgICAgICAgR2xlaXRrb21tYWRhcnN0ZWxsdW5nDQorICAgICAgICAnTycgICAgICAgIG1peGVkICAgICAgICAgIEdpYnQgZnVlciBEZWJ1Z2dpbmcgYWxsZXMgaXJnZW5kd2llDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlc2JhciBhdXMsIGF1Y2ggQXJyYXlzIHVuZCBNYXBwaW5ncw0KKyAgICAgICAgJ1EnICAgICAgICBtaXhlZCAgICAgICAgICBXaWUgJ08nLCBnaWJ0IGplZG9jaCBTb25kZXJ6ZWljaGVuIGluDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ3MgaW4gZGVyIExQQy1Ob3RhdGlvbiBhdXMNCisgICAgICAgIA0KKyAgICAgICAgWndpc2NoZW4gZGVtICclJyB1bmQgZGVtIEFyZ3VtZW50dHlwLUtlbm56ZWljaG5lciBrYW5uIG1hbg0KKyAgICAgICAgbm9jaCBtZWhyZXJlIE1vZGlmaWthdG9yZW4gc2V0emVuLCBkaWUgZGFzIFZlcmhhbHRlbg0KKyAgICAgICAgYmVlaW5mbHVzc2VuLg0KKyAgICAgICAgSGllciBlaW5lIFVlYmVyc2ljaHQuIG4gc3RlaHQgaGllciBmdWVyIGVpbmUgR2FuenphaGwsIGFsc28NCisgICAgICAgIHp1bSBCZWlzcGllbCAiMTIiLg0KKyAgICAgICAgTW9kaWZpa2F0b3IgIEJlZGV1dHVuZw0KKyAgICAgICAgbiAgICAgICAgICAgIE1pbmltYWxlIFN0cmluZ2xhZW5nZSwgZGllIGZ1ZXIgZGllc2VzIEFyZ3VtZW50DQorICAgICAgICAgICAgICAgICAgICAgdmVyd2VuZGV0IHdlcmRlbiBzb2xsLiBGZWhsZW5kZSBaZWljaGVuIHdlcmRlbiBtaXQNCisgICAgICAgICAgICAgICAgICAgICBlaW5lbSBGdWVsbHplaWNoZW4gYXVmZ2VmdWVsbHQuIEJlZ2lubnQgbiBtaXQgZWluZXINCisgICAgICAgICAgICAgICAgICAgICAnMCcgKGV0d2EgIjA4Iikgc28gaXN0IGRhcyBGdWVsbHplaWNoZW4gJzAnIHNvbnN0DQorICAgICAgICAgICAgICAgICAgICAgaXN0IGVzIHBlciBEZWZhdWx0ICcgJy4gKHNvZ2VuYW5udGUgJ0ZlbGRicmVpdGUnKQ0KKyAgICAgICAgLm4gICAgICAgICAgIEJlaSBHYW56emFobGVuIGRpZSBNYXhhbnphaGwgZGVyIFN0ZWxsZW4sIGJlaSBHbGVpdC0NCisgICAgICAgICAgICAgICAgICAgICBrb21tYXphaGxlbiBkaWUgTWF4aW1hbHphaGwgZGVyIE5hY2hrb21tYXN0ZWxsZW4uDQorICAgICAgICAgICAgICAgICAgICAgQmVpIChlaW5mYWNoZW4pIFN0cmluZ3MgZGllIE1heGltYWxsYWVuZ2UuDQorICAgICAgICA6biAgICAgICAgICAgSXN0IGRhc3NlbGJlIHdpZSBuLm4gLSBzZXR6dCBhbHNvIGJlaWRlIFdlcnRlIGF1Zg0KKyAgICAgICAgICAgICAgICAgICAgIGRpZXNlbGJlIFphaGwuDQorICAgICAgICAnWCcgICAgICAgICAgQWxzIEZ1ZWxsemVpY2hlbiB3aXJkIFggZ2VudXR6dC4gWCBrb2VubmVuIGRhYmVpDQorICAgICAgICAgICAgICAgICAgICAgYXVjaCBtZWhyZXJlIFplaWNoZW4gc2VpbiwgZXR3YSBmdWVocnQgJy09JyB6dQ0KKyAgICAgICAgICAgICAgICAgICAgIEZ1ZWxsdW5nZW4gZGVyIEFydCAiLT0tPS09LT0iLiBVbSBtaXQgSG9jaGtvbW1hcw0KKyAgICAgICAgICAgICAgICAgICAgIHp1IGZ1ZWxsZW4gaXN0ICdcXCcnIGFuenVnZWJlbi4gUnVlY2t3YWVydHMtDQorICAgICAgICAgICAgICAgICAgICAgc2NocmFlZ3N0cmljaCBlbnRzcHJlY2hlbmQgbWl0ICdcXFxcJy4NCisgICAgICAgIDxTcGFjZT4gICAgICBWb3IgcG9zaXRpdmUgWmFobGVuIHdpcmQgZWluIExlZXJ6ZWljaGVuIGdlZnVlZ3QuDQorICAgICAgICArICAgICAgICAgICAgVm9yIHBvc2l0aXZlIFphaGxlbiB3aXJkIGVpbiAnKycgZ2VmdWVndC4NCisgICAgICAgIC0gICAgICAgICAgICBEZXIgV2VydCB3aXJkIGxpbmtzYnVlbmRpZyBpbiBkYXMgZnVlciBkaWVzZXMgQXJndW1lbnQNCisgICAgICAgICAgICAgICAgICAgICB2b3JnZXNlaGVuZSBGZWxkIGVpbmdlZnVlZ3QgKFN0YW5kYXJkIGlzdCByZWNodHMtDQorICAgICAgICAgICAgICAgICAgICAgYnVlbmRpZykuIEJlaSBTdHJpbmdzIHdpcmQgbWVpc3RlbnMgZGllc2UgQXVzcmljaHR1bmcNCisgICAgICAgICAgICAgICAgICAgICBkaWUgc2lubnZvbGxzdGUgc2Vpbi4NCisgICAgICAgIHwgICAgICAgICAgICBEZXIgV2VydCB3aXJkIHplbnRyaWVydCBpbiBkYXMgRmVsZCBlaW5nZWZ1ZWd0Lg0KKyAgICAgICAgICAgICAgICAgICAgIChTaWVoZSBNb2RpZmlrYXRvciBuLCBGZWxkYnJlaXRlKQ0KKyAgICAgICAgJCAgICAgICAgICAgIEJsb2Nrc2F0ei4gQmVub2V0aWd0IGVpbmUgRmVsZGJyZWl0ZSwgZnVua3Rpb25pZXJ0IG51cg0KKyAgICAgICAgICAgICAgICAgICAgIGJlaSBTdHJpbmdzIChhdWNoIGltIFNwYWx0ZW5tb2R1cykuDQorICAgICAgICA9ICAgICAgICAgICAgU3BhbHRlbm1vZHVzIChzaWVoZSB1bnRlbikuDQorICAgICAgICAjICAgICAgICAgICAgRnVlciBTdHJpbmdzOiBUYWJlbGxlbm1vZHVzIChzaWVoZSB1bnRlbikuDQorICAgICAgICAgICAgICAgICAgICAgRnVlciAnJU8nLyclUSc6IGtvbXBha3RlIEF1c2dhYmUuDQorICAgICAgICBAICAgICAgICAgICAgQXJyYXltb2R1cyAoc2llaGUgdW50ZW4pLg0KKyAgICAgICAgKiAgICAgICAgICAgIEVpbiBTdGVybiBrYW5uIGltbWVyIGRvcnQgZWluZ2VzZXR6dCB3ZXJkZW4sIHdvDQorICAgICAgICAgICAgICAgICAgICAgaGllciB3ZWl0ZXIgb2JlbiBlaW4gbiBmdWVyIGVpbmUgR2FuenphaGwgc3RlaHQuDQorICAgICAgICAgICAgICAgICAgICAgRGVyIFdlcnQgZGVyIFphaGwgbXVzcyBkYW5uIGFscyB3ZWl0ZXJlciBQYXJhbWV0ZXINCisgICAgICAgICAgICAgICAgICAgICBhbiBkaWUgRnVua3Rpb24gdWViZXJnZWJlbiB3ZXJkZW4uDQorDQorQkVJU1BJRUxFDQorICAgICAgICBNaXQgZGVuIGJpcyBqZXR6dCBlcndhZWhudGVuIE1vZWdsaWNoa2VpdGVuIGthbm4gbWFuIHpCIG1hY2hlbjoNCisNCisgICAgICAgIHNwcmludGYoIiVkIChkZWMpID09ICVvIChvY3RhbCkgPT0gJXggKGhleCkiLCAyMCwgMjAsIDIwKTsNCisgICAgICAgID0+ICIyMCAoZGVjKSA9PSAyNCAob2N0YWwpID09IDE0IChoZXgpIg0KKw0KKyAgICAgICAgc3ByaW50ZigiRHUgZHJlaHN0IGRlbiBLbm9wZiB1bSAlLjNmIFVtZHJlaHVuZ2VuIiwgMTIuMzQ1Nik7DQorICAgICAgICA9PiAiRHUgZHJlaHN0IGRlbiBLbm9wZiB1bSAxMi4zNDUgVW1kcmVodW5nZW4iDQorDQorICAgICAgICBzcHJpbnRmKCJEdSBsaWVzdCAlfCcqJzo5cyIsICJGaW9uYSIpOw0KKyAgICAgICAgPT4gIkR1IGxpZXN0ICoqRmlvbmEqKiINCisNCisgICAgICAgIHNwcmludGYoIkF1ZiBkZW0gWmV0dGVsc3R1ZWNrIHN0ZWh0OiAlLS4qcy4uLiIsIDcsICJIYWxsbyBEdSBkYSIpOw0KKyAgICAgICAgPT4gIkF1ZiBkZW0gWmV0dGVsc3R1ZWNrIHN0ZWh0OiBIYWxsbyBELi4uDQorDQorRVJXRUlURVJURSBNT0RJDQorICAgICAgICBNaXQgZGVtIE1vZGlmaWthdG9yZW4gPSAjIHVuZCBAIHN0ZWhlbiBtYWVjaHRpZ2UgV2Vya3pldWdlIHp1cg0KKyAgICAgICAgVmVyZnVlZ3VuZy4gTWl0IGVpbiB3ZW5pZyBVZWJlcmxlZ3VuZyBrYW5uIG1hbiBzaWNoIG9mdCB2aWVsZQ0KKyAgICAgICAgWmVpbGVuIENvZGUgZXJzcGFyZW4uDQorICAgICAgICBBcnJheW1vZHVzIChAKToNCisgICAgICAgICAgc3ByaW50ZigiJUBzIiwgYXJyX29mX3N0cmluZyk7DQorICAgICAgICAgIERlciBBcmd1bWVudGZvcm1hdHN0cmluZyAoYWxsZXJkaW5ncyBvaG5lIGRhcyBAKSB3aXJkIHNvb2Z0DQorICAgICAgICAgIGhpbnRlcmVpbmFuZGVyZ2VyZWlodCwgd2lldmllbGUgRWxlbWVudGUgZGFzIEFycmF5IGhhdC4NCisgICAgICAgICAgSmVkZXIgQUZTIHdpcmQgZGFubiBmdWVyIGVpbiBFbGVtZW50IGRlcyBBcnJheXMgYmVudXR6dC4NCisgICAgICAgICAgc3ByaW50ZigiJUBzIiwgKHsiYWFhIiwiYmJiIn0pKSBpc3Qgc29taXQgZGFzc2VsYmUgd2llDQorICAgICAgICAgIHNwcmludGYoIiVzJXMiLCAiYWFhIiwgImJiYiIpLiBBbGxlcmRpbmdzIHBhc3N0IGVzIHNpY2gNCisgICAgICAgICAgaW1tZXIgYW4gZGllIEVsZW1lbnR6YWhsIGRlciB1ZWJlcmdlYmVuZGVuIEFycmF5cyBhbi4NCisgICAgICAgICAgRGllcyBpc3QgbnVldHpsaWNoIHVtIEVyZ2Vibmlzc2Ugdm9uIG1hcCgpIG9kZXIgYWVobmxpY2gNCisgICAgICAgICAgYXVzenVnZWJlbi4NCisgICAgICAgICAgc3ByaW50ZigiJUBzIiwgbWFwX29iamVjdHMoYWxsX2ludmVudG9yeSgpLCAic2hvcnQiKSk7DQorICAgICAgICAgIERlciBBcmd1bWVudHR5cC1LZW5uemVpY2huZXIgbXVzcyBoaWVyYmVpIGltbWVyIGRlbSBUeXBlbg0KKyAgICAgICAgICBlaW5lcyBFbGVtZW50ZXMgZGVzIEFycmF5cyBlbnRzcHJlY2hlbi4NCisgICAgICAgIFNwYWx0ZW5tb2R1cyAoPSk6DQorICAgICAgICAgIERpZXNlIEZ1bmt0aW9uIGJyaWNodCBUZXh0IHVtLiBEaWUgRmVsZGJyZWl0ZSBtdXNzIGFuZ2VnZWJlbg0KKyAgICAgICAgICB3ZXJkZW4uIFdpcmQgbmViZW4gZGVyIEZlbGRicmVpdGUgYXVjaCBlaW5lIG1heGltYWxlIFN0cmluZy0NCisgICAgICAgICAgbGFlbmdlIGFuZ2VnZWJlbiwgc28gd2lyZCBkaWUgbGV0enRlcmUgZnVlciBkaWUgQnJlaXRlIGRlcw0KKyAgICAgICAgICBVbWJyZWNoZW5zIHZlcndlbmRldCwgZGllIEZlbGRicmVpdGUgd2lyZCBtaXQgRnVlbGx6ZWljaGVuDQorICAgICAgICAgIGF1ZmdlZnVlbGx0Lg0KKyAgICAgICAgICBzcHJpbnRmKCIlPS0yMHMiLCBzdHIpOyBicmljaHQgZGVuIFN0cmluZyBzdHIgJ3dvcmR3cmFwJ2VuZA0KKyAgICAgICAgICBhdWYgMjAgWmVpY2hlbiBMYWVuZ2UgdW0uIHNwcmludGYoIiU9LSpzIiwgbGVuLCBzdHIpOw0KKyAgICAgICAgICBpc3Qgc2Nob24gZWluZSBlaW5mYWNoZSBicmVha19zdHJpbmcoKSBWYXJpYW50ZS4NCisgICAgICAgIFRhYmVsbGVubW9kdXMgKCMpOg0KKyAgICAgICAgICBEaWVzZSBGdW5rdGlvbiBnaWJ0IFN0cmluZ3MgdGFiZWxsZW5hcnRpZyBhdXMuIERpZSBUZWlsc3RyaW5ncw0KKyAgICAgICAgICBtdWVzc2VuIG1pdCBcbiBnZXRyZW5udCBhbHMgZWluIFN0cmluZyBhbHMgQXJndW1lbnQgdWViZXJnZWJlbg0KKyAgICAgICAgICB3ZXJkZW4uIERpZSBGZWxkYnJlaXRlIG11c3MgYW5nZWdlYmVuIHdlcmRlbiB1bmQgYmV6ZWljaG5ldA0KKyAgICAgICAgICBkaWUgKG1heGltYWxlKSBHZXNhbXRicmVpdGUgZGVyIFRhYmVsbGUuDQorICAgICAgICAgIERpZSBBbnphaGwgZGVyIFNwYWx0ZW4gZGVyIFRhYmVsbGUgd2lyZCBtb2VnbGljaHN0IG9wdGltYWwNCisgICAgICAgICAgYmVzdGltbXQsIHVuZCBpc3QgZnVlciBhbGxlIFNwYWx0ZW4gZ2xlaWNoLiBXaXJkIGVpbg0KKyAgICAgICAgICBXZXJ0IGFscyAnUHJhZXppc2lvbicgYW5nZWdlYmVuLCBzbyBpc3QgZGllcyBkaWUgQW56YWhsIHZvbg0KKyAgICAgICAgICBTcGFsdGVuLCBkaWUgdmVyd2VuZGV0IHdlcmRlbiBzb2xsLg0KKyAgICAgICAgICBzcHJpbnRmKCIlIzMwLjRzIiwgc3RyKSBlcnpldWd0IGVpbmUgVGFiZWxsZSwgZGllIG1heGltYWwNCisgICAgICAgICAgMzAgWmVpY2hlbiBicmVpdCBpc3QgdW5kIDQgU3BhbHRlbiBlbnRoYWVsdC4NCisgICAgICAgICAgc3ByaW50ZigiJSMzMHMiLCBzdHIpIGxlZ3QgZGllIFNwYWx0ZW56YWhsIGR5bmFtaXNjaCBhbmhhbmQNCisgICAgICAgICAgZGVyIEVpbnplbHN0cmluZ2xhZW5nZW4gZmVzdCwgc28gZGFzcyBkZXIgbGFlbmdzdGUgU3RyaW5nDQorICAgICAgICAgIG5vY2ggZ2VuYXUgaW4gZGllIFRhYmVsbGUgcGFzc3QuDQorICAgICAgICAgIFdlbm4gc3RyaW5nKiB3b3J0ZSBkaWUgaW4gZGllIFRhYmVsbGUgZWluenViZXR0ZW5kZW4gV29ydGUNCisgICAgICAgICAgZW50aGFlbHQsIHNvIG11c3Mgc3RyPWltcGxvZGUod29ydGUsIlxuIikgc2Vpbi4NCisNCitTSUVIRSBBVUNIOg0KKyAgICAgICAgcHJpbnRmKEUpDQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vc3FydCBiL2RvYy9lZnVuL3NxcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNDgwNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3NxcnQKQEAgLTAsMCArMSw5IEBACitTWU5PUFNJUworICAgICAgICBmbG9hdCBzcXJ0KGludCB2YWx1ZSk7CisgICAgICAgIGZsb2F0IHNxcnQoZmxvYWcgdmFsdWUpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBkaWUgUXVhZHJhdHd1cnplbCB2b24gPHZhbHVlPi4KKworU0lFSEUgQVVDSAorICAgICAgICBsb2coRSksIHBvdyhFKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3NzY2FuZiBiL2RvYy9lZnVuL3NzY2FuZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjE2YmYyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc3NjYW5mCkBAIC0wLDAgKzEsMTE1IEBACitGVU5LVElPTjoKKyBpbnQgc3NjYW5mKHN0cmluZyBzdHIsc3RyaW5nIGZtdCxtaXhlZCB2YXIxLG1peGVkIHZhcjIsLi4uKQorCitBUkdVTUVOVEU6CisgICAgICBzdHIKKyAgICAgICAgLSBTdHJpbmcsIGRlciBuYWNoIGVpbmVtIE11c3RlciB6dSBkdXJjaHN1Y2hlbiBpc3QKKyAgICAgICAgLSBkYXJmIG5pY2h0IE5VTEwgc2VpbgorICAgICAgZm10CisgICAgICAgIC0gRm9ybWF0LVN0cmluZywgbmFjaCBkZXNzZW4gTXVzdGVyIHVudGVyc3VjaHQgd2lyZAorICAgICAgdmFyMSx2YXIyLC4uLgorICAgICAgICAtIEFyZ3VtZW50ZSBkaWUgbWl0ICVkIG9kZXIgJXMga29ycmVzcG9uZGllcmVuCisKK1JVZUNLR0FCRVdFUlQ6CisgICAgIEFuemFobCBkZXIgZ2VmdW5kZW5lbiBBcmd1bWVudGUuCisKK0JFU0NIUkVJQlVORzoKKyAgICAgV2VydGV0IGVpbmVuIFN0cmluZyA8c3RyPiB1bnRlciBCZXJ1ZWNrc2ljaHRpZ3VuZyBkZXMgRm9ybWF0cyA8Zm10PgorICAgICBhdXMuIDxmbXQ+IGthbm4gU3RyaW5ncyBiZWluaGFsdGVuLCBkaWUgZHVyY2ggJWQgdW5kICVzIGdldHJlbm50CisgICAgIHdlcmRlbi4gSmVkZXMgJWQgdW5kICVzIGVudHNwcmljaHQgZWluZXIgZGVyIFZhcmlhYmxlbiA8dmFyMT4sIDx2YXIyPiwKKyAgICAgZXRjLiBpbiBkaWUgZ2VzcGVpY2hlcnQgd2VyZGVuIHNvbGwuCisKKyAgICAgRGllIE9wZXJhdG9yZW4gaW0gRm9ybWF0LVN0cmluZyA8Zm10PiBoYWJlbiBlaW5lcyBkZXIgZm9sZ2VuZGVuCisgICAgIEZvcm1hdGU6CisKKyAgICAgICAgICVbK11bIXx+XVs8c2l6ZT5bLjxtaW5tYXRjaD5dXTx0eXBlPgorCisgICAgICAgIDx0eXBlPiBrYW5uIGZvbGdlbmRlcyBzZWluOgorICAgICAgICAgICAgZDogc3RlaHQgZnVlciBlaW5lIFphaGwKKyAgICAgICAgICAgIEQ6IHN0ZWh0IGZ1ZXIgZWluZSBaYWhsCisgICAgICAgICAgICBVOgorICAgICAgICAgICAgczogc3RlaHQgZnVlciBlaW5lIFplaWNoZW5rZXR0ZQorICAgICAgICAgICAgJTogc3RlaHQgZnVlciBkYXMgJS1aZWljaGVuCisgICAgICAgICAgICB0OiBzdGVodCBmdWVyIFdoaXRlc3BhY2VzIChhbHNvIExlZXJzY2hsYWVnZSB1bmQgVGFidWxhdG9yZW4pLAorICAgICAgICAgICAgICAgc3BlaWNoZXJ0IGRpZXNlIGFiZXIgbmljaHQuCisKKyAgICAgPHNpemU+IGlzdCBkaWUgZXJ3YXJ0ZXRlIEZlbGRncm9lc3NlLCA8bWlubWF0Y2g+IGRpZSB2ZXJsYW5ndGUKKyAgICAgbWluaW1hbGUgTGFlbmdlIGZ1ZXIgZWluZW4gVHJlZmZlciAoU3RhbmRhcmR3ZXJ0ZSBzaW5kIDAgZnVlcgorICAgICBTdHJpbmdzIHVuZCAxIGZ1ZXIgTnVtbWVybikuIFNvd29obCA8c2l6ZT4gYWxzIGF1Y2ggPG1pbm1hdGNoPiBrYW5uCisgICAgIGVudHdlZGVyIG51bWVyaXNjaCBvZGVyIG1pdCAnKicgYW5nZWdlYmVuIHdlcmRlbiAtIGltIHp3ZWl0ZW4gRmFsbAorICAgICB3aXJkIGRpZSBndWVsdGlnZSBWYXJpYWJsZSBpbiBkZXIgTGlzdGUgZGVyIEFyZ3VtZW50ZSBiZW51dHp0LgorCisgICAgIFdpcmQgKyBhbmdlZ2ViZW4sIG11ZXNzZW4gZGllIFplaWNoZW4gbmFjaCBkZW0gRmVsZCBlYmVuZmFsbHMKKyAgICAgbWF0Y2hlbi4gSXN0IGRpZXMgbmljaHQgZGVyIEZhbGwsIHdpcmQgYXVjaCBkaWVzZXMgRmVsZCBhbHMKKyAgICAgTWlzc2VyZm9sZyBpbiBkZXIgUnVlY2tnYWJlIGJldHJhY2h0ZXQgKGF1Y2ggd2VubiBkZXIgV2VydAorICAgICBiZXJlaXRzIGFuIGRpZSB6dWdlaG9lcmlnZSBWYXJpYWJsZSB6dWdld2llc2VuIHd1cmRlKS4KKworICAgICBXaXJkICEgYW5nZWdlYmVuLCB3aXJkIHp3YXIgZGllIFN1Y2hlIGR1cmNoZ2VmdWVocnQsIGFiZXIgVHJlZmZlcgorICAgICB3ZXJkZW4gd2VkZXIgZ2VzcGVpY2hlcnQgbm9jaCBnZXphZWhsdC4gTWl0IH4gYWxzIEFyZ3VtZW50IHdpcmQKKyAgICAgendhciBkaWUgU3VjaGUgZHVyY2hnZWZ1ZWhydCB1bmQgZGllIFRyZWZmZXIgZ2V6YWVobHQsIGRhcyBSZXN1bHRhdAorICAgICB3aXJkIGFiZXIgbmljaHQgZ2VzcGVpY2hlcnQuCisKKyAgICAgV2VubiBlaW4gJXMgbmljaHQgYW0gRW5kZSB2b24gPGZtdD4gc3RlaHQsIHdpcmQgbnVyIGVpbiBUcmVmZmVyCisgICAgIHJlZ2lzdHJpZXJ0LCB3ZW5uIGF1Y2ggZGVyIG5hY2hmb2xnZW5kZSBTdHJpbmcgYnp3LiBkYXMKKyAgICAgbmFjaGZvbGdlbmRlIEZvcm1hdCBnZWZ1bmRlbiB3aXJkLiBXZWl0ZXIgdW50ZW4gZ2lidCBlcyBkYXp1CisgICAgIGVpbiBCZWlzcGllbC4KKyAgICAgQmVpIGVpbmVtICVkIGFsbGVyZGluZ3MgbXVzcyBkaWVzZXMgVmVyaGFsdGVuIG1pdCBlaW5lbSAnKycKKyAgICAgZXJ6d3VuZ2VuIHdlcmRlbi4KKworICAgICBEZXIgVW50ZXJzY2hpZWQgendpc2NoZW4gJWQgdW5kICVEICVVIGlzdCwgZGFzcyBsZXR6dGVyZXMgZWluCisgICAgIHVubWl0dGVsYmFyIHZvcmF1c2dlaGVuZGVzICVzIHNvIGJhbGQgYWxzIG1vZWdsaWNoIGFiYnJpY2h0LAorICAgICB3YWVocmVuZCBlcnN0ZXJlcyB6dWVyc3QgdmVyc3VjaHQsIGVpbmVuIG1vZWdsaWNoc3QgZ3Jvc3NlbiBUcmVmZmVyCisgICAgIGZ1ZXIgJXMgenUgZXJ6aWVsZW4uIFRyb3R6ZGVtIHVlYmVyc3ByaW5ndCAlRC8lVSBrZWluZSBXaGl0ZXNwYWNlcywKKyAgICAgZGF6dSBtdXNzICUuMHQlRCBnZXNldHp0IHdlcmRlbi4KKworICAgICBEaWUgRnVua3Rpb24gc3NjYW5mKCkgaXN0IGluc29mZXJuIGVpbiBTcGV6aWFsZmFsbCwgYWxzIGRhc3MKKyAgICAgQXJndW1lbnRlIGF1dG9tYXRpc2NoIG5hY2ggUmVmZXJlbnogdWViZXJnZWJlbiB3ZXJkZW4uCisKK0JFSVNQSUVMRToKKyAgICAgc3RyaW5nIHdobywgd2hhdDsKKyAgICAgICAgIGlmIChzc2NhbmYoIndpcmYgZnJpc2JlZSB6dSByZXgiLAorICAgICAgICAgICAgICAgICAgICAid2lyZiAlcyB6dSAlcyIsIHdoYXQsIHdobykgIT0gMikKKyAgICAgICAgICAgICB3cml0ZSgiVXNhZ2U6IFdpcmYgPHdoYXQ+IHp1IDx3aG8+XG4iKTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICB3cml0ZSgiRHUgd2lyZnN0IGVpbmVuICIrd2hhdCsiIHp1ICIrd2hvKyIuXG4iKTsKKworICAgICBzc2NhbmYoImFiIiwgIiVzJXMiLCB3aG8sIHdoYXQpCisgICAgID09PiBsaWVmZXJ0IDIsIHdobyA9ICIiLCB3aGF0ID0gImFiIgorCisgICAgIHNzY2FuZigiYWIiLCAiJXMgJXMiLCB3aG8sIHdoYXQpCisgICAgID09PiBsaWVmZXJ0IDAsIHdobyA9IDAsIHdoYXQgPSAwCisKKyAgICAgc3NjYW5mKCJhYiAiLCAiJXMgJXMiLCB3aG8sIHdoYXQpCisgICAgID09PiBsaWVmZXJ0IDIsIHdobyA9ICJhYiIsIHdoYXQgPSAiIgorCisKKyAgICAgLy8gQWNodHVuZyBiZWkgJWQKKyAgICAgc3NjYW5mKCIxMiAiLCIlZCB4eXoiLCBudW0xKTsKKyAgICAgPT0+IGxpZWZlcnQgMSwgbnVtMSA9IDEyCisKKyAgICAgc3NjYW5mKCIxMiAiLCIlcyB4eXoiLCBudW0xKTsKKyAgICAgPT0+IGxpZWZlcnQgMCwgbnVtMSA9IDAKKworICAgICAvLyBtaXQgJysnIHdpcmQgZGFzIFBhcnNlbiBkZXMgUmVzdGZvcm1hdHMgZXJ6d3VuZ2VuOgorICAgICBzc2NhbmYoIjEyICIsIiUrZCB4eXoiLCBudW0xKTsKKyAgICAgPT0+IGxpZWZlcnQgMCwgbnVtMSA9IDEyCisKKworICAgICAvLyBXZWl0ZXJlcyBCZWlzcGllbCB6dSAlZDoKKyAgICAgc3NjYW5mKCJnZXQgMTIgY29pbnMiLCJnZXQgJWQgcnVieXMiLG51bSkKKyAgICAgPT0+IGVyZ2lidCAxLCB3ZWlsICdydWJ5cycgaWdub3JpZXJ0IHdpcmQKKworICAgICAvLyBCZWlzcGllbCBGb3JtYXQtSWdub3JlIDIKKyAgICAgc3NjYW5mKCJnZXQgMTIgY29pbnMiLCJnZXQgJStkIHJ1YnlzIixudW0pOworICAgICA9PT4gZXJnaWJ0IDAsIGRhIG1pdCBkZW0gJysnIGRhcyBQYXJzZW4gZGVzIFJlc3Rmb3JtYXRzIGVyend1bmdlbiB3aXJkCisgICAgID09PiBlcmdpYnQgMSBiZWkgJ2dldCAxMiBydWJ5cycKKworICAgICAvLyBCZWlzcGllbCBGb3JtYXQtSWdub3JlIDMgW2FsdGUgVmFyaWFudGVdCisgICAgIHNzY2FuZigiZ2V0IDEyIGNvaW5zIiwiZ2V0ICVkIHJ1YnlzJXMiLCBudW0sIGR1bW15KQorICAgICA9PT4gZXJnaWJ0IDEKKyAgICAgPT0+IGVyZ2lidCAyIGJlaSAiZ2V0IDEyIHJ1YnlzIgorCitTSUVIRSBBVUNIOgorICAgICAgICBleHBsb2RlKEUpLCByZWdleHAoRSkKKworOC5BdWcgMjAwNyBHbG9pbnNvbgpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vc3RyZnRpbWUgYi9kb2MvZWZ1bi9zdHJmdGltZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTY3YWZiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc3RyZnRpbWUKQEAgLTAsMCArMSwxMTIgQEAKK1NZTk9QU0lTCisgICAgIHN0cmluZyBzdHJmdGltZSgpCisgICAgIHN0cmluZyBzdHJmdGltZShzdHJpbmcgZm10KQorICAgICBzdHJpbmcgc3RyZnRpbWUoaW50IGNsb2NrKQorICAgICBzdHJpbmcgc3RyZnRpbWUoc3RyaW5nIGZtdCwgaW50IGNsb2NrKQorICAgICBzdHJpbmcgc3RyZnRpbWUoc3RyaW5nIGZtdCwgaW50IGNsb2NrLCBpbnQgbG9jYWxpemVkKQorCitCRVNDSFJFSUJVTkcKKyAgICAgR2lidCwgYWVobmxpY2hlIHdpZSBjdGltZSgpLCBlaW5lIFplaXQgYWxzIGZvcm1hdGllcnRlbiBTdHJpbmcgenVydWVjay4KKyAgICAgSGllcmJlaSBrYW5uIGVpbiBTdHJpbmcgbWl0IGRpdi4gUGxhdHpoYWx0ZXJuIHZvbSBCZW51dHplciBhbmdlZ2ViZW4KKyAgICAgd2VyZGVuIChzLnUuKS4gV2lyZCBrZWluIFN0cmluZyBhbmdlZ2ViZW4sIHdpcmQgIiVjIiBhbHMgRm9ybWF0c3RyaW5nCisgICAgIGJlbnV0enQuCisKKyAgICAgRGFzIEFyZ3VtZW50IDxjbG9jaz4gd2lyZCBhbHMgQW56YWhsIFNla3VuZGVuIHNlaXQgZGVtIDAxLjAxLjE5NzAsIDAwOjAwCisgICAgIFVociBpbnRlcnByZXRpZXJ0LiBXZW5uIDxjbG9jaz4gbmljaHQgYW5nZWdlYmVuIHdpcmQsIHdpcmQgdGltZSgpCisgICAgIHZlcndlbmRldC4KKworICAgICBEYXMgQXJndW1lbnQgPGxvY2FsaXplZD4gZ2lidCBhbiwgb2IgZGllIEF1c2dhYmUgZW5nbGlzY2ggKGRhcyBzb2cuCisgICAgIGtsYXNzaXNjaGUgIkMiIGxvY2FsZSkgb2RlciBpbiBkZXIgamV3ZWlsaWdlbiBMYW5kZXNzcHJhY2hlICh6LkIuCisgICAgIGRldXRzY2gpIGVyZm9sZ2VuIHNvbGwuIEhpZXJiZWkgaGFlbmd0IGRpZSBTcHJhY2hlIGFsbGVyZGluZ3Mgdm9uIGRlbiBhdWYKKyAgICAgZGVtIE11ZHJlY2huZXIgZ2VzZXR6dGVuIFVtZ2VidW5nc3ZhcmlhYmxlbiBMQ19USU1FIG9kZXIgTENfQUxMIGFiLCBzaWUKKyAgICAga2FubiBuaWNodCBzZWxiZXIgZ2V3YWVobHQgd2VyZGVuLiBXaXJkIGtlaW4gPGxvY2FsaXplZD4gYW5nZWdlYmVuLCB3aXJkCisgICAgIDEgdmVyd2VuZGV0LCB3YXMgZWluZXIgQXVzZ2FiZSBpbiBMYW5kZXNzcHJhY2hlIGVudHNwcmljaHQuCisgICAgIDA6IEF1c2dhYmUgaW0ga2xhc3Npc2NoZW4gIkMiIGxvY2FsZSAoZW5nbGlzaCkKKyAgICAgMTogQXVzZ2FiZSBpbiBMYW5kZXNzcHJhY2hlIGRlcyBNdWRyZWNobmVycy4KKworQkVNRVJLVU5HRU46CisgICAgIERlciB6dXJ1ZWNrZ2ViZW5lIEVyZ2Vibmlzc3RyaW5nIGlzdCBtYXguIDUxMSBaZWljaGVuIGxhbmcuCisKK1BMQVRaSEFMVEVSOgorICAgICBEaWVzZSBGdW5rdGlvbiB2ZXJzdGVodCBhbGxlIFBsYXR6aGFsdGVyLCBkaWUgZGllIEZ1bmt0aW9uIHN0cmZ0aW1lKCkgYXVzCisgICAgIGRlciBDLVN0YW5kYXJkYmlibGlvdGhlayB2ZXJzdGVodC4gTW9tZW50YW4gc2luZCBkaWVzOgorICAgICAgICVhICAgICBEZXIgYWJnZWt1ZXJ6dGUgV29jaGVudGFnIGFiaGFlbmdpZyB2b24gZGVyIG1vbWVudGFuZW4gTG9jYWxlLgorICAgICAgICVBICAgICBEZXIgZ2VzYW10ZSBXb2NoZW50YWcgYWJoYWVuZ2lnIHZvbiBkZXIgbW9tZW50YW5lbiBMb2NhbGUuCisgICAgICAgJWIgICAgIERlciBhYmdla3Vlcnp0ZSBNb25hdHNuYW1lIGFiaGFlbmdpZyB2b24gZGVyIG1vbWVudGFuZW4gTG9jYWxlLgorICAgICAgICVCICAgICBEZXIgdm9sbGUgTW9uYXRzbmFtZSBhYmhhZW5naWcgdm9uIGRlciBtb21lbnRhbmVuIExvY2FsZS4KKyAgICAgICAlYyAgICAgRGFzIGJldm9yenVndGUgRGF0dW1zLSB1bmQgVWhyemVpdC1SZXByYWVzZW50YXRpb24gbGF1dCBFaW5zdGVsLQorICAgICAgICAgICAgICBsdW5nZW4gZGVyIG1vbWVudGFuZW4gTG9jYWxlLgorICAgICAgICVDICAgICBEYXMgSmFocmh1bmRlcnQgYWxzIHp3ZWlzdGVsbGlnZSBaYWhsLgorICAgICAgICVkICAgICBEZXIgVGFnIGltIE1vbmF0IGFscyBEZXppbWFsemFobCAoMDEgLSAzMSkuCisgICAgICAgJUQgICAgIEFlcXVpdmFsZW50ICB6dSAlbS8lZC8leS4gIChVUy1hbWVyaWthbmlzY2hlcyBGb3JtYXQuICBJbiBhbmRlcmVuCisgICAgICAgICAgICAgIExhZW5kZXJuIGlzdCAlZC8lbS8leSBkdXJjaGF1cyB1ZWJsaWNoIC4gSW4gaW50ZXJuYXRpb25hbGVtIEtvbi0gCisgICAgICAgICAgICAgIHRleHQgaXN0IGRpZXNlcyBGb3JtYXQgZGFoZXIgbWVocmRldXRpZyB1bmQgc29sbHRlIG5pY2h0IHZlcndlbi0KKyAgICAgICAgICAgICAgZGV0IHdlcmRlbi4pCisgICAgICAgJWUgICAgIFdpZSAlZCwgZGVyIFRhZyBpbSBNb25hdCBhbHMgRGV6aW1hbHphaGwsIGFiZXIgZWluZSBmdWVocmVuZGUKKyAgICAgICAgICAgICAgTnVsbCBpc3QgZHVyY2ggZWluIExlZXJ6ZWljaGVuIGVyc2V0enQuCisgICAgICAgJUUgICAgIE1vZGlmaWthdG9yOiBBbHRlcm5hdGl2ZXMgRm9ybWF0IGJlbnV0emVuLCBzLnUuCisgICAgICAgJWcgICAgIFdpZSAgJUcsICBhYmVyIG9obmUgZGFzIEphaHJodW5kZXJ0LCBhbHNvIG1pdCB6d2Vpc3RlbGxpZ2VtIEphaHIKKyAgICAgICAgICAgICAgKDAwLTk5KS4KKyAgICAgICAlRyAgICAgRGFzIEphaHIgbGF1dCBJU08gODYwMSBtaXQgZGVtIEphaHJodW5kZXJ0IGFscyBEZXppbWFsemFobC4gIERhcworICAgICAgICAgICAgICB2aWVyc3RlbGxpZ2UgSmFociwgZGFzIHp1IElTTy1Xb2NoZW5udW1tZXIgKHNpZWhlICVWKSBwYXNzdC4gIEVzCisgICAgICAgICAgICAgIGhhdCBkYXNzZWxiZSBGb3JtYXQgdW5kIGRlbnNlbGJlbiBXZXJ0IHdpZSAleSwgIG51ciAgZGFzcywgIHdlbm4KKyAgICAgICAgICAgICAgZGllICBJU08tV29jaGVubnVtbWVyICB6dW0gIHZvcmhlcmdlaGVuZGVuICBvZGVyICBuYWVjaHN0ZW4gIEphaHIKKyAgICAgICAgICAgICAgZ2Vob2VydCwgZGllc2VzIEphaHIgc3RhdHRkZXNzZW4gYmVudXR6dCB3aXJkLgorICAgICAgICVoICAgICBBZXF1aXZhbGVudCB6dSAlYi4KKyAgICAgICAlSCAgICAgRGllIFN0dW5kZSBpbSAyNGgtRm9ybWF0IGFscyBHYW56emFobCAoMDAgLSAyMykuCisgICAgICAgJUkgICAgIERpZSBTdHVuZGUgaW0gMTJoLUZvcm1hdCBhbHMgR2FuenphaGwgKDAxIC0gMTIpLgorICAgICAgICVqICAgICBEZXIgVGFnIGltIEphaHIgYWxzIEdhbnp6YWhsICgwMDEgLSAzNjYpLgorICAgICAgICVrICAgICBEaWUgU3R1bmRlIGltIDI0aC1Gb3JtYXQgYWxzIEdhbnp6YWhsICgwIC0gMjMpOyBlaW56ZWxuZSBaaWZmZXJuCisgICAgICAgICAgICAgIGhhYmVuIGVpbiB2b3Jhbmdlc3RlbGx0ZXMgTGVlcnplaWNoZW4uIChTaWVoZSAlSC4pCisgICAgICAgJWwgICAgIERpZSBTdHVuZGUgaW0gMTJoLUZvcm1hdCBhbHMgR2FuenphaGwgKDAgLSAxMik7IGVpbnplbG5lIFppZmZlcm4KKyAgICAgICAgICAgICAgaGFiZW4gZWluIHZvcmFuZ2VzdGVsbHRlcyBMZWVyemVpY2hlbi4gKFNpZWhlICVJLikKKyAgICAgICAlbSAgICAgRGVyIE1vbmF0IGFscyBHYW56emFobCAoMDEgLSAxMikuCisgICAgICAgJU0gICAgIERpZSBNaW51dGUgYWxzIEdhbnp6YWhsICgwMCAtIDU5KS4KKyAgICAgICAlbiAgICAgRWluIFplaWxlbnZvcnNjaHViLgorICAgICAgICVwICAgICBFbnR3ZWRlciAnQU0nIG9kZXIgJ1BNJywgamUgbmFjaCBkZXIgdWViZXJnZWJlbmVuICBVaHJ6ZWl0LCAgb2RlcgorICAgICAgICAgICAgICBkaWUgIHp1Z2Vob2VyaWdlbiBaZWljaGVua2V0dGVuIGluIGRlciBtb21lbnRhbmVuIExvY2FsZS4gIE1pdHRhZworICAgICAgICAgICAgICBlcmhhZWx0ICdQTScsIE1pdHRlcm5hY2h0ICdBTScuCisgICAgICAgJVAgICAgIFdpZSAlcCwgYWJlciBpbiBLbGVpbmJ1Y2hzdGFiZW4uCisgICAgICAgJXIgICAgIFplaXQgaW4gQU0vUE0tTm90YXRpb247IGluIGRlciBQT1NJWC1Mb2NhbGUgaXN0IGRhcyBBZXF1aXZhbGVudAorICAgICAgICAgICAgICB6dSAnJUk6JU06JVMgJXAnLgorICAgICAgICVSICAgICBaZWl0IGluIDI0aC1Ob3RhdGlvbiAoJUg6JU0pLiAoU1UpIEZ1ZXIgZWluZSBWZXJzaW9uIG1pdCBTZWt1bmRlbgorICAgICAgICAgICAgICBzaWVoZSAlVC4KKyAgICAgICAlcyAgICAgRGllIFphaGwgZGVyIFNla3VuZGVuIHNlaXQgIGRlciAgRXBvY2hlLCAgYWxzbyAgc2VpdCAgMTk3MC0wMS0wMQorICAgICAgICAgICAgICAwMDowMDowMCBVVEMuCisgICAgICAgJVMgICAgIERpZSBTZWt1bmRlIGFscyBHYW56emFobCAoMDAgLSA2MSkuCisgICAgICAgJXQgICAgIEVpbiBUYWJ1bGF0b3J6ZWljaGVuLgorICAgICAgICVUICAgICBaZWl0IGluIDI0aC1Ob3RhdGlvbiAoJUg6JU06JVMpLgorICAgICAgICV1ICAgICBEZXIgVGFnIGRlciBXb2NoZSBhbHMgWmFobCB2b24gMSBiaXMgNywgbWl0IE1vbnRhZyBhbHMgMS4gIFNpZWhlCisgICAgICAgICAgICAgIGF1Y2ggJXcuCisgICAgICAgJVUgICAgIERpZSBXb2NoZW5udW1tZXIgZGVzIGFrdHVlbGxlbiBKYWhyZXMgYWxzIEdhbnp6YWhsICB2b24gIDAwICBiaXMKKyAgICAgICAgICAgICAgNTMsICBiZWdpbm5lbmQgIG1pdCBkZW0gZXJzdGVuIFNvbm50YWcgYWxzIGVyc3RlciBUYWcgZGVyIGVyc3RlbgorICAgICAgICAgICAgICBXb2NoZS4gIFNpZWhlIGF1Y2ggJVYgdW5kICVXLgorICAgICAgICVWICAgICBEaWUgV29jaGVubnVtbWVyIG5hY2ggSVNPIDg2MDE6MTk4OCBhbHMgRGV6aW1hbHphaGwgdm9uICAwMSAgYmlzCisgICAgICAgICAgICAgIDUzLCAgd29iZWkgV29jaGUgMSBkaWUgZXJzdGUgV29jaGUgaXN0LCBkaWUgd2VuaWdzdGVucyA0IFRhZ2UgaW0KKyAgICAgICAgICAgICAgbGF1ZmVuZGVuIEphaHIgaGF0LCBtaXQgTW9udGFnIGFscyBkZW0gIGVyc3RlbiAgVGFnICBkZXIgIFdvY2hlLgorICAgICAgICAgICAgICBTaWVoZSBhdWNoICVVIHVuZCAlVy4KKyAgICAgICAldyAgICAgRGVyICBUYWcgIGRlciAgV29jaGUgIGFscyAgWmFobCAgdm9uIDAgYmlzIDYsIG1pdCBTb25udGFnIGFscyAwLgorICAgICAgICAgICAgICBTaWVoZSBhdWNoICV1LgorICAgICAgICVXICAgICBEaWUgV29jaGVubnVtbWVyIGRlcyBha3R1ZWxsZW4gSmFocmVzIGFscyBHYW56emFobCAgdm9uICAwMCAgYmlzCisgICAgICAgICAgICAgIDUzLCAgYmVnaW5uZW5kICBtaXQgIGRlbSBlcnN0ZW4gTW9udGFnIGFscyBlcnN0ZXIgVGFnIGRlciBlcnN0ZW4KKyAgICAgICAgICAgICAgV29jaGUuCisgICAgICAgJXggICAgIERpZSBiZXZvcnp1Z3RlIERhdHVtcy1SZXByYWVzZW50YXRpb24gb2huZSBkaWUgWmVpdCBpbiBkZXIgbW9tZW4tCisgICAgICAgICAgICAgIHRhbmVuIExvY2FsZS4KKyAgICAgICAlWCAgICAgRGllICBiZXZvcnp1Z3RlICBVaHJ6ZWl0LVJlcHJhZXNlbnRhdGlvbiAgb2huZSAgZGFzICBEYXR1bSBpbiBkZXIKKyAgICAgICAgICAgICAgbW9tZW50YW5lbiBMb2NhbGUuCisgICAgICAgJXkgICAgIERhcyBKYWhyIGFscyBHYW56emFobCBvaG5lIGRhcyBKYWhyaHVuZGVydCAoMDAgLSA5OSkuCisgICAgICAgJVkgICAgIERhcyBKYWhyIGFscyBHYW56emFobCBtaXQgZGVtIEphaHJodW5kZXJ0LgorICAgICAgICV6ICAgICBEaWUgIFplaXR6b25lICBhbHMgIFN0dW5kZW5kaWZmZXJlbnogIHp1ICBHTVQuIEJlbm9ldGlndCwgdW0KKyAgICAgICAgICAgICAgUkZDODIyLWtvbmZvcm1lICBEYXR1bXNhbmdhYmVuICB6dSAgZXJoYWx0ZW4gIChtaXQgJyVhLCAlZCAlYiAlWQorICAgICAgICAgICAgICAlSDolTTolUyAleicpLgorICAgICAgICVaICAgICBEaWUgWmVpdHpvbmUgb2RlciBkZXIgTmFtZSBvZGVyIGRpZSBBYmt1ZXJ6dW5nLgorICAgICAgICUrICAgICBEYXR1bSB1bmQgWmVpdCBpbSBGb3JtYXQgdm9uIGRhdGUoMSkuCisgICAgICAgJSUgICAgIERhcyBaZWljaGVuICclJy4KKyAgICAgCitCRUlTUElFTAorICAgICB3cml0ZShzdHJmdGltZSgiSGV1dGUgaXN0ICVBLCBkZXIgJWQuICVCICVZLlxuIikpCisgICAgIGVyZ2lidCB6LkIuCisgICAgICJIZXV0ZSBpc3QgTW9udGFnLCBkZXIgMjQuIFNlcHRlbWJlciAyMDA3LlxuIgorCitTSUVIRSBBVUNICisgICAgIGN0aW1lKEUpLCBnbXRpbWUoRSksIGxvY2FsdGltZShFKSwgbWt0aW1lKEUpLCB0aW1lKEUpLCB1dGltZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vc3RyZnRpbWUuZW4gYi9kb2MvZWZ1bi9zdHJmdGltZS5lbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTBhYTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc3RyZnRpbWUuZW4KQEAgLTAsMCArMSwxMjIgQEAKK1NZTk9QU0lTCisgICAgIHN0cmluZyBzdHJmdGltZSgpCisgICAgIHN0cmluZyBzdHJmdGltZShzdHJpbmcgZm10KQorICAgICBzdHJpbmcgc3RyZnRpbWUoaW50IGNsb2NrKQorICAgICBzdHJpbmcgc3RyZnRpbWUoc3RyaW5nIGZtdCwgaW50IGNsb2NrKQorICAgICBzdHJpbmcgc3RyZnRpbWUoc3RyaW5nIGZtdCwgaW50IGNsb2NrLCBpbnQgbG9jYWxpemVkKQorCitCRVNDSFJFSUJVTkcKKyAgICAgR2lidCwgYWVobmxpY2hlIHdpZSBjdGltZSgpLCBlaW5lIFplaXQgYWxzIGZvcm1hdGllcnRlbiBTdHJpbmcgenVydWVjay4KKyAgICAgSGllcmJlaSBrYW5uIGVpbiBTdHJpbmcgbWl0IGRpdi4gUGxhdHpoYWx0ZXJuIHZvbSBCZW51dHplciBhbmdlZ2ViZW4KKyAgICAgd2VyZGVuIChzLnUuKS4gV2lyZCBrZWluIFN0cmluZyBhbmdlZ2ViZW4sIHdpcmQgIiVjIiBhbHMgRm9ybWF0c3RyaW5nCisgICAgIGJlbnV0enQuCisKKyAgICAgRGFzIEFyZ3VtZW50IDxjbG9jaz4gd2lyZCBhbHMgQW56YWhsIFNla3VuZGVuIHNlaXQgZGVtIDAxLjAxLjE5NzAsIDAwOjAwCisgICAgIFVociBpbnRlcnByZXRpZXJ0LiBXZW5uIDxjbG9jaz4gbmljaHQgYW5nZWdlYmVuIHdpcmQsIHdpcmQgdGltZSgpCisgICAgIHZlcndlbmRldC4KKworICAgICBEYXMgQXJndW1lbnQgPGxvY2FsaXplZD4gZ2lidCBhbiwgb2IgZGllIEF1c2dhYmUgZW5nbGlzY2ggKGRhcyBzb2cuCisgICAgIGtsYXNzaXNjaGUgIkMiIGxvY2FsZSkgb2RlciBpbiBkZXIgamV3ZWlsaWdlbiBMYW5kZXNzcHJhY2hlICh6LkIuCisgICAgIGRldXRzY2gpIGVyZm9sZ2VuIHNvbGwuIEhpZXJiZWkgaGFlbmd0IGRpZSBTcHJhY2hlIGFsbGVyZGluZ3Mgdm9uIGRlbiBhdWYKKyAgICAgZGVtIE11ZHJlY2huZXIgZ2VzZXR6dGVuIFVtZ2VidW5nc3ZhcmlhYmxlbiBMQ19USU1FIG9kZXIgTENfQUxMIGFiLCBzaWUKKyAgICAga2FubiBuaWNodCBzZWxiZXIgZ2V3YWVobHQgd2VyZGVuLiBXaXJkIGtlaW4gPGxvY2FsaXplZD4gYW5nZWdlYmVuLCB3aXJkCisgICAgIDEgdmVyd2VuZGV0LCB3YXMgZWluZXIgQXVzZ2FiZSBpbiBMYW5kZXNzcHJhY2hlIGVudHNwcmljaHQuCisKK0JFTUVSS1VOR0VOOgorICAgICBEZXIgenVydWVja2dlYmVuZSBFcmdlYm5pc3N0cmluZyBpc3QgbWF4LiA1MTEgWmVpY2hlbiBsYW5nLgorICAgICBJbSBNRyBlcmZvbGd0IG1vbWVudGFuIGltbWVyIGVpbmUgZW5nbGlzY2hlIEF1c2dhYmUuCisKK1BMQVRaSEFMVEVSOgorICAgICBEaWVzZSBGdW5rdGlvbiB2ZXJzdGVodCBhbGxlIFBsYXR6aGFsdGVyLCBkaWUgZGllIEZ1bmt0aW9uIHN0cmZ0aW1lKCkgYXVzCisgICAgIGRlciBDLVN0YW5kYXJkYmlibGlvdGhlayB2ZXJzdGVodC4gTW9tZW50YW4gc2luZCBkaWVzOgorICAgICAKKyAgICAgJWEKKyAgICAgICAgaXMgcmVwbGFjZWQgYnkgdGhlIGxvY2FsZSdzIGFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZS4gCisgICAgICVBCisgICAgICAgIGlzIHJlcGxhY2VkIGJ5IHRoZSBsb2NhbGUncyBmdWxsIHdlZWtkYXkgbmFtZS4gCisgICAgICViCisgICAgICAgIGlzIHJlcGxhY2VkIGJ5IHRoZSBsb2NhbGUncyBhYmJyZXZpYXRlZCBtb250aCBuYW1lLiAKKyAgICAgJUIKKyAgICAgICAgaXMgcmVwbGFjZWQgYnkgdGhlIGxvY2FsZSdzIGZ1bGwgbW9udGggbmFtZS4gCisgICAgICVjCisgICAgICAgIGlzIHJlcGxhY2VkIGJ5IHRoZSBsb2NhbGUncyBhcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uLiAKKyAgICAgJUMKKyAgICAgICAgaXMgcmVwbGFjZWQgYnkgdGhlIGNlbnR1cnkgbnVtYmVyICh0aGUgeWVhciBkaXZpZGVkIGJ5IDEwMCBhbmQgCisgICAgICAgIHRydW5jYXRlZCB0byBhbiBpbnRlZ2VyKSBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMC05OV0uIAorICAgICAlZAorICAgICAgICBpcyByZXBsYWNlZCBieSB0aGUgZGF5IG9mIHRoZSBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMSwzMV0uCisgICAgICVECisgICAgICAgIHNhbWUgYXMgJW0vJWQvJXkuIAorICAgICAlZQorICAgICAgICBpcyByZXBsYWNlZCBieSB0aGUgZGF5IG9mIHRoZSBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyIFsxLDMxXTsgYSAKKyAgICAgICAgc2luZ2xlIGRpZ2l0IGlzIHByZWNlZGVkIGJ5IGEgc3BhY2UuIAorICAgICAlaAorICAgICAgICBzYW1lIGFzICViLiAKKyAgICAgJUgKKyAgICAgICAgaXMgcmVwbGFjZWQgYnkgdGhlIGhvdXIgKDI0LWhvdXIgY2xvY2spIGFzIGEgZGVjaW1hbCBudW1iZXIgCisgICAgICAgIFswMCwyM10uIAorICAgICAlSQorICAgICAgICBpcyByZXBsYWNlZCBieSB0aGUgaG91ciAoMTItaG91ciBjbG9jaykgYXMgYSBkZWNpbWFsIG51bWJlciAKKyAgICAgICAgWzAxLDEyXS4gCisgICAgICVqCisgICAgICAgIGlzIHJlcGxhY2VkIGJ5IHRoZSBkYXkgb2YgdGhlIHllYXIgYXMgYSBkZWNpbWFsIG51bWJlciAKKyAgICAgICAgWzAwMSwzNjZdLiAKKyAgICAgJW0KKyAgICAgICAgaXMgcmVwbGFjZWQgYnkgdGhlIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAxLDEyXS4gCisgICAgICVNCisgICAgICAgIGlzIHJlcGxhY2VkIGJ5IHRoZSBtaW51dGUgYXMgYSBkZWNpbWFsIG51bWJlciBbMDAsNTldLiAKKyAgICAgJW4KKyAgICAgICAgaXMgcmVwbGFjZWQgYnkgYSBuZXdsaW5lIGNoYXJhY3Rlci4gCisgICAgICVwCisgICAgICAgIGlzIHJlcGxhY2VkIGJ5IHRoZSBsb2NhbGUncyBlcXVpdmFsZW50IG9mIGVpdGhlciBhLm0uIG9yIHAubS4gCisgICAgICVyCisgICAgICAgIGlzIHJlcGxhY2VkIGJ5IHRoZSB0aW1lIGluIGEubS4gYW5kIHAubS4gbm90YXRpb247IGluIHRoZSBQT1NJWCAKKyAgICAgICAgbG9jYWxlIHRoaXMgaXMgZXF1aXZhbGVudCB0byAlSTolTTolUyAlcC4gCisgICAgICVSCisgICAgICAgIGlzIHJlcGxhY2VkIGJ5IHRoZSB0aW1lIGluIDI0IGhvdXIgbm90YXRpb24gKCVIOiVNKS4gCisgICAgICVTCisgICAgICAgIGlzIHJlcGxhY2VkIGJ5IHRoZSBzZWNvbmQgYXMgYSBkZWNpbWFsIG51bWJlciBbMDAsNjFdLiAKKyAgICAgJXQKKyAgICAgICAgaXMgcmVwbGFjZWQgYnkgYSB0YWIgY2hhcmFjdGVyLiAKKyAgICAgJVQKKyAgICAgICAgaXMgcmVwbGFjZWQgYnkgdGhlIHRpbWUgKCVIOiVNOiVTKS4gCisgICAgICV1CisgICAgICAgIGlzIHJlcGxhY2VkIGJ5IHRoZSB3ZWVrZGF5IGFzIGEgZGVjaW1hbCBudW1iZXIgWzEsN10sIHdpdGggMSAKKyAgICAgICAgcmVwcmVzZW50aW5nIE1vbmRheS4gCisgICAgICVVCisgICAgICAgIGlzIHJlcGxhY2VkIGJ5IHRoZSB3ZWVrIG51bWJlciBvZiB0aGUgeWVhciAoU3VuZGF5IGFzIHRoZSBmaXJzdCBkYXkgCisgICAgICAgIG9mIHRoZSB3ZWVrKSBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMCw1M10uIAorICAgICAlVgorICAgICAgICBpcyByZXBsYWNlZCBieSB0aGUgd2VlayBudW1iZXIgb2YgdGhlIHllYXIgKE1vbmRheSBhcyB0aGUgZmlyc3QgZGF5IAorICAgICAgICBvZiB0aGUgd2VlaykgYXMgYSBkZWNpbWFsIG51bWJlciBbMDEsNTNdLiBJZiB0aGUgd2VlayBjb250YWluaW5nIDEgCisgICAgICAgIEphbnVhcnkgaGFzIGZvdXIgb3IgbW9yZSBkYXlzIGluIHRoZSBuZXcgeWVhciwgdGhlbiBpdCBpcyBjb25zaWRlcmVkIAorICAgICAgICB3ZWVrIDEuIE90aGVyd2lzZSwgaXQgaXMgdGhlIGxhc3Qgd2VlayBvZiB0aGUgcHJldmlvdXMgeWVhciwgYW5kIHRoZSAKKyAgICAgICAgbmV4dCB3ZWVrIGlzIHdlZWsgMS4gCisgICAgICV3CisgICAgICAgIGlzIHJlcGxhY2VkIGJ5IHRoZSB3ZWVrZGF5IGFzIGEgZGVjaW1hbCBudW1iZXIgWzAsNl0sIHdpdGggMCAKKyAgICAgICAgcmVwcmVzZW50aW5nIFN1bmRheS4gCisgICAgICVXCisgICAgICAgIGlzIHJlcGxhY2VkIGJ5IHRoZSB3ZWVrIG51bWJlciBvZiB0aGUgeWVhciAoTW9uZGF5IGFzIHRoZSBmaXJzdCBkYXkgCisgICAgICAgIG9mIHRoZSB3ZWVrKSBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMCw1M10uIEFsbCBkYXlzIGluIGEgbmV3IHllYXIgCisgICAgICAgIHByZWNlZGluZyB0aGUgZmlyc3QgTW9uZGF5IGFyZSBjb25zaWRlcmVkIHRvIGJlIGluIHdlZWsgMC4gCisgICAgICV4CisgICAgICAgIGlzIHJlcGxhY2VkIGJ5IHRoZSBsb2NhbGUncyBhcHByb3ByaWF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uLiAKKyAgICAgJVgKKyAgICAgICAgaXMgcmVwbGFjZWQgYnkgdGhlIGxvY2FsZSdzIGFwcHJvcHJpYXRlIHRpbWUgcmVwcmVzZW50YXRpb24uIAorICAgICAleQorICAgICAgICBpcyByZXBsYWNlZCBieSB0aGUgeWVhciB3aXRob3V0IGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlciBbMDAsOTldLiAKKyAgICAgJVkKKyAgICAgICAgaXMgcmVwbGFjZWQgYnkgdGhlIHllYXIgd2l0aCBjZW50dXJ5IGFzIGEgZGVjaW1hbCBudW1iZXIuIAorICAgICAlWgorICAgICAgICBpcyByZXBsYWNlZCBieSB0aGUgdGltZXpvbmUgbmFtZSBvciBhYmJyZXZpYXRpb24sIG9yIGJ5IG5vIGJ5dGVzIGlmIAorICAgICAgICBubyB0aW1lem9uZSBpbmZvcm1hdGlvbiBleGlzdHMuIAorICAgICAlJQorICAgICAgICBpcyByZXBsYWNlZCBieSAlLgorCitCRUlTUElFTAorICAgICB3cml0ZShzdHJmdGltZSgiSGV1dGUgaXN0ICVBLCBkZXIgJWQuICVCICVZLlxuIikpCisgICAgIGVyZ2lidCB6LkIuCisgICAgICJIZXV0ZSBpc3QgTW9udGFnLCBkZXIgMjQuIFNlcHRlbWJlciAyMDA3LlxuIgorCitTSUVIRSBBVUNICisgICAgIGdtdGltZShFKSwgbG9jYWx0aW1lKEUpLCBta3RpbWUoKSwgdGltZShFKSwgdXRpbWUoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3N0cmluZ3AgYi9kb2MvZWZ1bi9zdHJpbmdwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZDgyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9zdHJpbmdwCkBAIC0wLDAgKzEsMTAgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCBzdHJpbmdwKG1peGVkIGFyZykKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgMSwgd2VubiBkYXMgQXJndW1lbnQgZWluZSBaZWljaGVua2V0dGUgKFN0cmluZykgaXN0LAorICAgICAgICBhbnNvbnN0ZW4gMC4KKworU0lFSEUgQVVDSAorICAgICAgICBjbG9zdXJlcChFKSwgZmxvYXRwKEUpLCBtYXBwaW5ncChFKSwgb2JqZWN0cChFKSwgaW50cChFKSwKKyAgICAgICAgcmVmZXJlbmNlcChFKSwgcG9pbnRlcnAoRSksIHN5bWJvbHAoRSksIGNsb25lcChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vc3RybGVuIGIvZG9jL2VmdW4vc3RybGVuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwODFhN2EKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9zdHJsZW4KQEAgLTAsMCArMSwxMSBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IHN0cmxlbihzdHJpbmcgc3RyKQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBkaWUgTGFlbmdlIGVpbmVzIFN0cmluZ3MuCisgICAgICAgIERpZXNlIGVmdW4gaXN0IFZFUkFMVEVUIHVuZCBlcnNldHp0IGR1cmNoIHNpemVvZigpLgorICAgICAgICBCaXR0ZSBpbiBuZXVlbSBDb2RlIG5pY2h0IG1laHIgYmVudXR6ZW4gdW5kIGluIGFsdGVtCisgICAgICAgIENvZGUgc3VremVzc2l2ZSBlcnNldHplbi4KKworU0lFSEUgQVVDSAorICAgICAgICBzaXplb2YoRSksIGV4dHJhY3QoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3N0cnJzdHIgYi9kb2MvZWZ1bi9zdHJyc3RyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMDM5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9zdHJyc3RyCkBAIC0wLDAgKzEsMjUgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCBzdHJyc3RyKHN0cmluZyBzdHIsIHN0cmluZyBtdXN0ZXIpOworICAgICAgICBpbnQgc3RycnN0cihzdHJpbmcgc3RyLCBzdHJpbmcgbXVzdGVyLCBpbnQgcG9zKTsKKworQkVTQ0hSRUlCVU5HOgorICAgICAgICBMaWVmZXJ0IGRlbiBJbmRleCBkZXMgZXJzdGVuIEF1ZnRyZXRlbnMgdm9uIDxtdXN0ZXI+IGltIFN0cmluZyA8c3RyPiwKKyAgICAgICAgYXVzZ2VoZW5kIHZvbiBkZXIgUG9zaXRpb24gPHBvcz4gaGVyIHJ1ZWNrd2FlcnRzIGdlc3VjaHQuIFdpcmQgPHBvcz4KKyAgICAgICAgbmljaHQgYW5nZWdlYmVuLCB3aXJkIGFscyBTdGFuZGFyZCAtMSBnZXNldHp0LCB3YXMgZGVtIEVuZGUgdm9uIDxzdHI+CisgICAgICAgIGVudHNwcmljaHQuIE1pdCBhbmRlcmVuIFdvcnRlbjogZGllIEZ1bmt0aW9uIGxpZWZlcnQgZGVuIEluZGV4IGRlcworICAgICAgICBsZXR6dGVuIEF1ZnRyZXRlbnMgdm9uIDxtdXN0ZXI+IHZvciA8cG9zPi4KKworICAgICAgICBEZXIgSW5kZXgsIGRlciB6dXJ1ZWNrIGdlZ2ViZW4gd2lyZCwgaXN0IHJlbGF0aXYgenVtIEJlZ2lubiBkZXMKKyAgICAgICAgU3RyaW5ncyA8c3RyPi4KKworICAgICAgICBXZW5uIDxtdXN0ZXI+IG5pY2h0IGluIDxzdHI+IGdlZnVuZGVuIHdpcmQsIHdpcmQgLTEgenVydWVjayBnZWdlYmVuLgorCisgICAgICAgIFdlbm4gPHBvcz4gbmVnYXRpdiBpc3QsIGJlemVpY2huZXQgPHBvcz4gZGVuIEluZGV4IHZvbSBFbmRlIGRlcworICAgICAgICBTdHJpbmdzIGF1cyBnZXphZWhsdC4gRGFiZWkgd2lyZCBkaWUgU3VjaGUgYWJlciBkZW5ub2NoIHJ1ZWNrd2FlcnRzCisgICAgICAgIGltIFN0cmluZyA8c3RyPiBkdXJjaGdlZnVlaHJ0LgorCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuMTAKKworU0lFSEUgQVVDSAorICAgICAgICBzdHJzdHIoRSksIHN0cmxlbihFKSwgc3NjYW5mKEUpLCBzcHJpbnRmKEUpLCBleHBsb2RlKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9zdHJzdHIgYi9kb2MvZWZ1bi9zdHJzdHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE1Y2I4MwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3N0cnN0cgpAQCAtMCwwICsxLDE3IEBACitTWU5PUFNJUworICAgICAgICBpbnQgc3Ryc3RyKHN0cmluZyBzdHIsIHN0cmluZyBtdXN0ZXIpOworICAgICAgICBpbnQgc3Ryc3RyKHN0cmluZyBzdHIsIHN0cmluZyBtdXN0ZXIsIGludCBwb3MpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBkZW4gSW5kZXggZGVzIGVyc3RlbiBBdWZ0cmV0ZW5zIHZvbiA8bXVzdGVyPiBpbiA8c3RyPiwKKyAgICAgICAgYXVzZ2VoZW5kIHZvbiBkZXIgUG9zaXRpb24gPHBvcz4sIHdvYmVpIGluIDxzdHI+IHZvcndhZXJ0cyBnZXN1Y2h0CisgICAgICAgIHdpcmQuIFdpcmQgPHBvcz4gbmljaHQgYW5nZWdlYmVuLCB3aXJkIGFscyBTdGFuZGFyZHdlcnQgMCBnZXNldHp0LAorICAgICAgICBhbHNvIHZvbSBCZWdpbm4gdm9uIDxzdHI+IGhlciBnZXN1Y2h0LgorCisgICAgICAgIFdlbm4gPG11c3Rlcj4gbmljaHQgZ2VmdW5kZW4gd2lyZCwgd2lyZCAtMSB6dXJ1ZWNrIGdlbGllZmVydC4KKworICAgICAgICBXZW5uIDxwb3M+IG5lZ2F0aXYgaXN0LCBiZXplaWNobmV0IDxwb3M+IGRpZSBTdGFydHBvc2l0aW9uIGRlciBTdWNoZQorICAgICAgICByZWxhdGl2IHp1bSBFbmRlIHZvbiA8c3RyPiwgZXMgd2lyZCBhYmVyIHdlaXRlcmhpbiB2b3J3YWVydHMgZ2VzdWNodC4KKworU0lFSEUgQVVDSAorICAgICAgICBzdHJyc3RyKEUpLCBzdHJsZW4oRSksIHNzY2FuZihFKSwgc3ByaW50ZihFKSwgZXhwbG9kZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vc3RydWN0X2luZm8gYi9kb2MvZWZ1bi9zdHJ1Y3RfaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDRjZDBiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc3RydWN0X2luZm8KQEAgLTAsMCArMSw0NiBAQAorU1lOT1BTSVMKKyAgICAgICAgI2luY2x1ZGUgPHN0cnVjdF9pbmZvLmg+CisgICAgICAgICNpbmNsdWRlIDxscGN0eXBlcy5oPgorCisgICAgICAgIG1peGVkICogc3RydWN0X2luZm8gKHN0cnVjdCBzdCwgaW50IHdoYXQpCisKK0RFU0NSSVBUSU9OCisgICAgICAgIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RydWN0dXJlIG9mIHN0cnVjdCA8c3Q+IGluIGFuIGFycmF5LgorICAgICAgICBJZiA8c3Q+IGhhcyBhIGJhc2Ugc3RydWN0LCA8d2hhdD4gZGV0ZXJtaW5lcyBob3cgdGhlIGluZm9ybWF0aW9uCisgICAgICAgIGlzIHJldHVybmVkOgorCisgICAgICAgIDx3aGF0PiA9PSBTSU5GT19GTEFUOgorICAgICAgICAgICAgQWxsIG1lbWJlcnMgb2YgPHN0PiwgaW5jbHVkaW5nIHRob3NlIGluaGVyaXRlZCBmcm9tIHRoZSBiYXNlCisgICAgICAgICAgICBzdHJ1Y3QsIGFyZSByZXR1cm5lZCBvbiB0aGUgdG9wIGxldmVsIG9mIHRoZSByZXN1bHQuCisgICAgICAgICAgICBUaGUgYmFzZSBzdHJ1Y3QgaXMgc2lnbmlmaWVkIGJ5IGp1c3QgaXRzIG5hbWUuCisKKyAgICAgICAgPHdoYXQ+ID09IFNJTkZPX05FU1RFRDoKKyAgICAgICAgICAgIE9ubHkgdGhlIG1lbWJlcnMgZGVmaW5lZCBpbiA8c3Q+IGl0c2VsZiBhcmUgcmV0dXJuZWQgb24KKyAgICAgICAgICAgIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHJlc3VsdC4gVGhlIGluZm9ybWF0aW9uIGZvciB0aGUgYmFzZQorICAgICAgICAgICAgc3RydWN0IGlzIGEgYXJyYXkgYnkgaXRzZWxmLCBhcyBpdCB3b3VsZCBiZSByZXR1cm5lZAorICAgICAgICAgICAgYnkgYSBjYWxsIHRvIHN0cnVjdF9pbmZvKCkgZm9yIGEgYmFzZSBzdHJ1Y3QgaW5zdGFuY2UuCisKKyAgICAgICAgVGhlIGVsZW1lbnRzIGluIHRoZSByZXN1bHRpbmcgYXJyYXkgYXJlOgorCisgICAgICAgICAgc3RyaW5nIFtTSV9OQU1FXTogICAgICAgIHRoZSBuYW1lIG9mIHRoZSBzdHJ1Y3QKKyAgICAgICAgICBzdHJpbmcgW1NJX1BST0dfTkFNRV06ICAgdGhlIG5hbWUgb2YgcHJvZ3JhbSBkZWZpbmluZyB0aGUgc3RydWN0CisgICAgICAgICAgc3RyaW5nIFtTSV9QUk9HX0lEXTogICAgIHRoZSBpZCBvZiB0aGUgcHJvZ3JhbSBkZWZpbmluZyB0aGUgc3RydWN0CisgICAgICAgICAgbWl4ZWQgIFtTSV9CQVNFXTogICAgICAgIDAsIG9yIHRoZSBiYXNlIHN0cnVjdCBpbmZvcm1hdGlvbgorICAgICAgICAgIG1peGVkKiBbU0lfTUVNQkVSKzBdOiAgICB0aGUgZmlyc3QgbWVtYmVyIGluZm9ybWF0aW9uCisgICAgICAgICAgbWl4ZWQqIFtTSV9NRU1CRVIrbl06ICAgIHRoZSBsYXN0IG1lbWJlciBpbmZvcm1hdGlvbgorCisgICAgICAgIFRoZSBtZW1iZXIgaW5mb3JtYXRpb24gZW50cmllcyBhcmUgYXJyYXlzIHRoZW1zZWx2ZXMgd2l0aAorICAgICAgICB0aGVzZSBlbGVtZW50czoKKworICAgICAgICAgIHN0cmluZyBbU0lNX05BTUVdOiAgbmFtZSBvZiB0aGUgbWVtYmVyCisgICAgICAgICAgaW50ICAgIFtTSU1fVFlQRV06ICB0aGUgdHlwZSBvZiB0aGUgbWVtYmVyIChjb21waWxlLXRpbWUgdmFsdWUpCisgICAgICAgICAgc3RyaW5nIFtTSU1fRVhUUkFdOiAwLCBvciBpZiB0aGUgbWVtYmVyIGlzIGEgc3RydWN0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuYW1lCisKK0hJU1RPUlkKKyAgICAgICAgSW50cm9kdWNlZCBpbiBMRE11ZCAzLjMuMzQ0LgorICAgICAgICBMRE11ZCAzLjMuNDE3IGludHJvZHVjZWQgU0lfUFJPR19OQU1FIGFuZCBTSV9QUk9HX0lEIGluIGV4Y2hhbmdlCisgICAgICAgICAgZm9yIFNJX1VOSVFVRV9OQU1FLgorCitTRUUgQUxTTworICAgICAgICBzdHJ1Y3RzKExQQykKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3N0cnVjdHAgYi9kb2MvZWZ1bi9zdHJ1Y3RwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMTY2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9zdHJ1Y3RwCkBAIC0wLDAgKzEsMTMgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCBzdHJ1Y3RwKG1peGVkIGFyZykKKworREVTQ1JJUFRJT04KKyAgICAgICAgUmV0dXJuIDEgaWYgYXJnIGlzIGEgc3RydWN0LgorCitISVNUT1JZCisgICAgICAgIEludHJvZHVjdGVkIGluIExETXVkIDMuMy4yNzMuCisKK1NFRSBBTFNPCisgICAgICAgIGJhc2VvZihFKSwgY2xvc3VyZXAoRSksIGZsb2F0cChFKSwgbWFwcGluZ3AoRSksIG9iamVjdHAoRSksCisgICAgICAgIGludHAoRSksIHJlZmVyZW5jZXAoRSksIHBvaW50ZXJwKEUpLCBzdHJpbmdwKEUpLCBzeW1ib2xwKEUpLAorICAgICAgICBjbG9uZXAoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3N3YXAgYi9kb2MvZWZ1bi9zd2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMjQyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9zd2FwCkBAIC0wLDAgKzEsNyBAQAorR0VTQ0hVRVRaVAorU1lOT1BTSVMKKyAgICAgICAgdm9pZCBzd2FwKG9iamVjdCBvYmopOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGFnZXJ0IGVpbiBPYmpla3QgYXVzLiBEaWVzZSBFZnVuIGlzdCBudXIgZnVlciBzeXN0ZW1pbnRlcm5lcworICAgICAgICBEZWJ1Z2dpbmcgdW5kIGthbm4gZWluZW4gQWJzdHVyeiB2ZXJ1cnNhY2hlbi4KZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3N5bWJvbF9mdW5jdGlvbiBiL2RvYy9lZnVuL3N5bWJvbF9mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmI1M2QwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc3ltYm9sX2Z1bmN0aW9uCkBAIC0wLDAgKzEsMzYgQEAKK1NZTk9QU0lTCisgICAgICAgIGNsb3N1cmUgc3ltYm9sX2Z1bmN0aW9uKHN5bWJvbCBhcmcpOworICAgICAgICBjbG9zcnVlIHN5bWJvbF9mdW5jdGlvbihzdHJpbmcgYXJnKTsKKyAgICAgICAgY2xvc3VyZSBzeW1ib2xfZnVuY3Rpb24oc3RyaW5nIGFyZywgb2JqZWN0fHN0cmluZyBvYmopOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgRXJ6ZXVndCBlaW5lIExmdW4tLCBFZnVuLSBvZGVyIE9wZXJhdG9yLUNsb3N1cmUgYXVzIDxhcmc+LCB3b2JlaQorICAgICAgICA8YXJnPiBlbnR3ZWRlciBlaW4gc3RyaW5nIG9kZXIgZWluIHN5bWJvbCBzZWluIG11c3MuIEZ1ZXIKKyAgICAgICAgTGZ1bi1DbG9zdXJlcyBnaWJ0IDxvYmo+IGFuLCB6dSB3ZWxjaGVtIE9iamVrdCBkaWUgTGZ1biBnZWhvZXJ0LAorICAgICAgICBlbnR3ZWRlciBhbmdlZ2ViZW4gZHVyY2ggZGFzIE9iamVrdCBzZWxic3QgKGJ6dy4gZWluZW4gcG9pbnRlcgorICAgICAgICBkYXJhdWYpIG9kZXIgZHVyY2ggZGVuIE9iamVrdG5hbWVuIGFscyBTdHJpbmcuIFdlbm4gZWluIFN0cmluZworICAgICAgICBhbmdlZ2ViZW4gd2lyZCwgd2lyZCBkYXMgT2JqZWt0IGJlaW0gQXVmcnVmIGdlbGFkZW4uCisKKyAgICAgICAgV2VubiBkaWUgQ2xvc3VyZSBmdWVyIGVpbmUgTGZ1biBpbiBlaW5lbSBhbmRlcmVuIGFscyBkZW0gbW9tZW50YW5lbgorICAgICAgICBPYmpla3QgZXJ6ZXVndCB3aXJkLCBlcmdpYnQgZGllcyBlaW5lICJhbGllbiBsZnVuIGNsb3N1cmUiLiBTb2xjaGUKKyAgICAgICAgQ2xvc3VyZXMgc2luZCBhbiBkYXMgT2JqZWt0IGdlYnVuZGVuLCBkYXMgc3ltYm9sX2Z1bmN0aW9uKCkKKyAgICAgICAgYXVmZ2VydWZlbiBoYXQgKGRpZXNlcyBPYmpla3Qgd2lyZCB2b24gdG9fb2JqZWN0KCkgZ2VsaWVmZXJ0KSwKKyAgICAgICAgb2J3b2hsIGRlciBlaWdlbnRsaWNoZSBDb2RlIGluIGVpbmVtIGFuZGVyZW4gT2JqZWt0IHN0ZWh0IChkYXMgbWl0CisgICAgICAgIGdldF90eXBlX2luZm8oKSBnZWZ1bmRlbiB3ZXJkZW4ga2FubikuCisKKyAgICAgICAgQWxzICJwcml2YXRlIiBkZWtsYXJpZXJ0ZSBGdW5rdGlvbmVuIGtvZW5uZW4gYXVmIGRpZXNlIFdlaXNlIG5pZQorICAgICAgICB6dSBlaW5lciBDbG9zdXJlIGdld2FuZGVsdCB3ZXJkZW4sICJzdGF0aWMiIHVuZCAicHJvdGVjdGVkIgorICAgICAgICBkZWtsYXJpZXJ0ZSBMZnVucyBudXIgZGFubiwgd2VubiA8b2JqPiBkYXMgZ3VlbHRpZ2UgT2JqZWt0CisgICAgICAgIChkLmguIHRoaXNfb2JqZWN0KCkpIGlzdC4KKyAgICAgICAgRXhwb3JkLmguIHRpZXJ0IG1hbiBkaWUgQ2xvc3VyZXMsIGtvZW5uZW4gc2llIHVuYWJoYWVuZ2lnIHZvbSBNb2RpZmllciBkZXIKKyAgICAgICAgVXJzcHJ1bmdzZnVua3Rpb25lbiB2b24gamVkZW0gZ2VydWZlbiB3ZXJkZW4uCisgICAgICAgIHVtZ2VoZW4pLgorCitCRUlTUElFTEUKKyAgICAgICAgc3ltYm9sX2Z1bmN0aW9uKCJlZnVuOjp1c2VycyIpOworICAgICAgICAgICAgLS0+IGVyZ2lidDogIyd1c2VycworICAgICAgICBzeW1ib2xfZnVuY3Rpb24oIlF1ZXJ5UHJvcCIsIG90aGVyX29iaik7CisgICAgICAgICAgICAtLT4gZXJnaWJ0OiBvdGhlcl9vYmotPlF1ZXJ5UHJvcCgpCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgbGFtYmRhKEUpLCBxdW90ZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vc3ltYm9sX3ZhcmlhYmxlIGIvZG9jL2VmdW4vc3ltYm9sX3ZhcmlhYmxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYTY2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi9zeW1ib2xfdmFyaWFibGUKQEAgLTAsMCArMSwyOSBAQAorU1lOT1BTSVMKKyAgICAgICAgY2xvc3VyZSBzeW1ib2xfdmFyaWFibGUoc3RyaW5nIGFyZyk7CisgICAgICAgIGNsb3N1cmUgc3ltYm9sX3ZhcmlhYmxlKHN5bWJvbCBhcmcpOworICAgICAgICBjbG9zdXJlIHN5bWJvbF92YXJpYWJsZShpbnQgYXJnKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEVyemV1Z3QgZWluZSBJZGVudGlmaWVyIChMZnVuKSBDbG9zdXJlIGF1cyBkZXIgZ2xvYmFsZW4gVmFyaWFibGVuCisgICAgICAgIDxhcmc+IGRlcyBndWVsdGlnZW4gT2JqZWt0cy4gRGllIFZhcmlhYmxlIGthbm4gYW5nZWdlYmVuIHdlcmRlbgorICAgICAgICBhbHMgU3ltYm9sLCBtaXQgaWhyZW0gTmFtZW4gb2RlciBkdXJjaCBkaWUgb3JkaW5hbGUgTnVtbWVyIGluIGRlcgorICAgICAgICBWYXJpYWJsZW50YWJlbGxlIGRlcyBPYmpla3RzLgorCisgICAgICAgIFdlbm4ga2VpbmUgc29sY2hlIFZhcmlhYmxlIGV4aXN0aWVydCBvZGVyIHNpZSB2b24gYXVzc2VuIG5pY2h0CisgICAgICAgIHNpY2h0YmFyIGlzdCwgd2lyZCAwIHp1cnVlY2sgZ2VsaWVmZXJ0LgorCisgICAgICAgIFdlbm4gPGFyZz4gZWluIEludGVnZXIgaXN0IHVuZCBzaWNoIGF1ZiBlaW5lIGdlZXJidGUgVmFyaWFibGUKKyAgICAgICAgYmV6aWVodCwgZGllIGltIGdlZXJidGVuIE9iamVrdCAicHJpdmF0ZSIgZGVrbGFyaWVydCBpc3QgKGQuaC4KKyAgICAgICAgdmVyc3RlY2t0KSwgZnVlaHJ0IGRpZXMgenUgZWluZXIgU2NodXR6dmVybGV0enVuZy4KKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gMy4yLjFAOAorCitCRUlTUElFTEUKKyAgICAgICAgaW50IGJhc2U7CisgICAgICAgIGludCB2YXI7CisgICAgICAgIHN5bWJvbF92YXJpYWJsZSgidmFyIik7ICAgICAgICAgZXJnaWJ0OiAjJzx0aGlzX29iamVjdD4tPnZhcgorICAgICAgICBzeW1ib2xfdmFyaWFibGUoMCk7ICAgICAgICAgICAgIGVyZ2lidDogIyc8dGhpc19vYmplY3Q+LT5iYXNlCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgbGFtYmRhKEUpLCBxdW90ZShFKSwgc3ltYm9sX2Z1bmN0aW9uKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi9zeW1ib2xwIGIvZG9jL2VmdW4vc3ltYm9scApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmM2NGI3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vc3ltYm9scApAQCAtMCwwICsxLDE0IEBACitTWU5PUFNJUworICAgICAgICBpbnQgc3ltYm9scChtaXhlZCBhcmcpCisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IDEsIHdlbm4gZGFzIEFyZ3VtZW50IGVpbiBTeW1ib2wgaXN0LCBhbnNvbnN0ZW4gMC4KKworQkVJU1BJRUwKKyAgICAgICAgc3ltYm9scCgnZm9vKSBsaWVmZXJ0IDEuCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIDMuMkA3MC4KKworU0lFSEUgQVVDSAorICAgICAgICBpbnRwKEUpLCBxdW90ZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdGFpbCBiL2RvYy9lZnVuL3RhaWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1MGIzNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3RhaWwKQEAgLTAsMCArMSw5IEBACitTWU5PUFNJUworICAgICAgICB2b2lkIHRhaWwoc3RyaW5nIGZpbGUpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGlzdGV0IGRhcyBFbmRlIGVpbmVzIEZpbGVzLiBFcyBnaWJ0IGtlaW4gWmVpbGVubGltaXQsIGVzIHdlcmRlbiBhYmVyCisgICAgICAgIG1heGltYWwgMTAwMCBCeXRlcyBhdXNnZWdlYmVuLgorCitTSUVIRSBBVUNICisgICAgICAgIGNhdChFKSwgZWQoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3RhbiBiL2RvYy9lZnVuL3RhbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTlhMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdGFuCkBAIC0wLDAgKzEsMTEgQEAKK1NZTk9QU0lTCisgICAgICAgIGZsb2F0IHRhbihpbnR8ZmxvYXQpCisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGRlbiBUYW5nZW5zIGRlcyBBcmd1bWVudGVzLgorCitBRU5ERVJVTkdFTgorICAgICAgICBMRE11ZCAzLjIuOTogR2FuenphaGxlbiAoSW50ZWdlcnMpIGFscyBBcmd1bWVudCBoaW56dWdlZnVlZ3QuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgc2luKEUpLCBhc2luKEUpLCBjb3MoRSksIGFjb3MoRSksIGF0YW4oRSksIGF0YW4yKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi90ZWxsX29iamVjdCBiL2RvYy9lZnVuL3RlbGxfb2JqZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyY2ZkOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi90ZWxsX29iamVjdApAQCAtMCwwICsxLDQ3IEBACitTWU5PUFNJUworICAgICAgICB2b2lkIHRlbGxfb2JqZWN0KG9iamVjdHxzdHJpbmcgb2JqLCBzdHJpbmcgc3RyKTsKKyAgICAgICAgdm9pZCB0ZWxsX29iamVjdChvYmplY3R8c3RyaW5nIG9iaiwgbWl4ZWQgKnxtYXBwaW5nfHN0cnVjdHxvYmplY3QgbXNnKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIFNlbmRldCBlaW5lbiBOYWNocmljaHQgYW4gZGFzIE9iamVrdCA8b2JqPiAoZGFzIGF1Y2ggZHVyY2ggc2VpbmVuCisgICAgICAgIE9iamVrdG5hbWVuIGFuZ2VnZWJlbiB3ZXJkZW4ga2FubikuCisKKyAgICAgICAgSXN0IGRpZSBOYWNocmljaHQgZWluIFN0cmluZywgd2lyZCBkZXIgVGV4dCBhbiBpbnRlcmFrdGl2ZSBPYmpla3RlCisgICAgICAgIGRpcmVrdCBhdXNnZWdlYmVuLCBmdWVyIGFuZGVyZSBPYmpla3RlIHdpcmQgZGllIGxmdW4gY2F0Y2hfdGVsbCgpCisgICAgICAgIGluIGRpZXNlbiBhdWZnZXJ1ZmVuLgorCisgICAgICAgIElzdCBkaWUgTmFjaHJpY2h0IGVpbiBhbmRlcmVyIFR5cCwgd2lyZCBkaWUgbGZ1biBjYXRjaF9tc2coKSBpbQorICAgICAgICBFbXBmYWVuZ2VyIGF1ZmdlcnVmZW4uCisKK0JFTUVSS1VOR0VOCisgICAgICAgIC0gd2lyZCBpbiBlaW5lbSBjYXRjaF9tc2coKSBkZXIgV2VydCB2b24gPG1zZz4gdmVyYWVuZGVydCwgZXJoYWx0ZW4KKyAgICAgICAgICBhbGxlIG5hY2hmb2xnZW5kZW4gT2JqZWt0ZSBkYXMgdmVyYWVuZGVydGUgPG1zZz4gKFJlZmVyZW56ISkKKworQkVJU1BJRUxFCisgICAgICAgIC8vIERpZXMgZ2lidCBlaW4gZWluZmFjaGVzICJIaSEiIGFuIGRlbiBTcGllbGVyIFRob21hcyBhdXM6CisKKyAgICAgICAgICAgIG9iamVjdCB3ZXI7CisgICAgICAgICAgICB3ZXIgPSBmaW5kX3BsYXllcigidGhvbWFzIik7CisgICAgICAgICAgICB0ZWxsX29iamVjdCh3ZXIsICJIaSFcbiIpOworCisgICAgICAgIC8vIEVpbiBCZWlzcGllbCBtaXQgendlaSBPYmpla3RlbiwgZGFzIHplaWd0LCB3aWUgZGFzIFp1c2FtbWVuc3BpZWwKKyAgICAgICAgLy8gdm9uIGNhdGNoX3RlbGwoKSB1bmQgdGVsbF9vYmplY3QoKSBhYmxhdWVmdC4gT2JqZWt0MSBpc3QgZWluCisgICAgICAgIC8vIExlYmV3ZXNlbiBtaXQgTmFtZW4gIkR1bW15bW9uc3RlciIsIE9iamVrdDIgdmVydGVpbHQgZGllIE1lbGR1bmc6CisKKyAgICAgICAgT2JqZWt0MToKKyAgICAgICAgICAgIHZvaWQgY2F0Y2hfdGVsbChzdHJpbmcgc3RyKSB7CisgICAgICAgICAgICAgICAgd3JpdGUoIkVyaGFsdGVuZXIgVGV4dDogIitzdHIrIlxuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgT2JqZWt0MjoKKyAgICAgICAgICAgIHZvaWQgZnVuKCkgeworICAgICAgICAgICAgICAgIG9iamVjdCB3ZXI7CisgICAgICAgICAgICAgICAgd2VyID0gZmluZF9saXZpbmcoImR1bW15bW9uc3RlciIpOworICAgICAgICAgICAgICAgIHRlbGxfb2JqZWN0KHdlciwgIkZvbGdlIG1pciwgU3RlcmJsaWNoZXIhXG4iKTsKKyAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIH0KKworU0lFSEUgQVVDSAorICAgICAgICBBZWhubGljaDogICB3cml0ZShFKSwgc2hvdXQoRSksIHNheShFKSwgdGVsbF9yb29tKEUpLCBwcmludGYoRSkKKyAgICAgICAgVmVyd2FuZHQ6ICAgY2F0Y2hfdGVsbChFKSwgY2F0Y2hfbXNnKEEpCisgICAgICAgIFNvbnN0aWdlczogIG9iamVjdF9uYW1lKEUpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdGVsbF9yb29tIGIvZG9jL2VmdW4vdGVsbF9yb29tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZjMwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi90ZWxsX3Jvb20KQEAgLTAsMCArMSw3OSBAQAorRlVOS1RJT046CisgICAgICAgIHZvaWQgdGVsbF9yb29tKHN0cmluZ3xvYmplY3Qgb2JqLCBzdHJpbmcgc3RyKTsKKyAgICAgICAgdm9pZCB0ZWxsX3Jvb20oc3RyaW5nfG9iamVjdCBvYmosIHN0cmluZyBzdHIsIG9iamVjdCAqZXhjbHVkZSk7CisKKyAgICAgICAgdm9pZCB0ZWxsX3Jvb20oc3RyaW5nfG9iamVjdCBvYmosIG1peGVkICp8bWFwcGluZ3xzdHJ1Y3R8b2JqZWN0IG1zZykKKyAgICAgICAgdm9pZCB0ZWxsX3Jvb20oc3RyaW5nfG9iamVjdCBvYmosIG1peGVkICp8bWFwcGluZ3xzdHJ1Y3R8b2JqZWN0ICBtc2cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIG9iamVjdCAqZXhjbHVkZSk7CisKK0JFU0NIUkVJQlVORzoKKyAgICAgICAgR2lidCBlaW5lbiBUZXh0IDxzdHI+IGFuIGRlbiBSYXVtIDxvYmo+IGF1cy4gPG9iaj4ga2FubiBhdWNoIGRlcgorICAgICAgICBPYmpla3RuYW1lIGRlcyBSYXVtZXMgYWxzIFN0cmluZyBzZWluLgorICAgICAgICBXZW5uIGRhcyBSYXVtb2JqZWt0IG1pdCBzZWluZW0gTmFtZW4gYW5nZWdlYmVuIGlzdCwgc3VjaHQgZGVyIERyaXZlcgorICAgICAgICBkYXMgT2JqZWt0IHVudGVyIGRpZXNlbSBOYW1lbiB1bmQgbGFlZHQgZXMsIGZhbGxzIG5vdHdlbmRpZy4KKworICAgICAgICBJc3QgZGllIE5hY2hyaWNodCBlaW4gU3RyaW5nLCB3aXJkIGRlciBUZXh0IGFuIGludGVyYWt0aXZlIE9iamVrdGUKKyAgICAgICAgZGlyZWt0IGF1c2dlZ2ViZW4sIGZ1ZXIgYW5kZXJlIE9iamVrdGUgd2lyZCBkaWUgbGZ1biBjYXRjaF90ZWxsKCkKKyAgICAgICAgaW4gZGllc2VuIGF1ZmdlcnVmZW4uCisgICAgICAgIEZhbGxzIGVpbiBMZXdlYmVzZW4gZGllIEZ1bmt0aW9uIGNhdGNoX3RlbGwoKSBkZWZpbmllcnQgKC0+IHNoYWRvdyksCisgICAgICAgIHNvIHdpcmQgZGVyIFRleHQgaGllciBhdXNnZXdlcnRldCB1bmQgbmljaHQgYW4gZGVuIFVzZXIgYXVzZ2VnZWJlbi4KKworICAgICAgICBXZW5uIGRhcyB6d2VpdGUgQXJndW1lbnQsIGRpZSBOYWNocmljaHQsIGtlaW4gU3RyaW5nIGlzdCwgd2lyZCBpbgorICAgICAgICBhbGxlbiBMZWJld2VzZW4sIGRpZSBkZW4gVGV4dCBlcmhhbHRlbiwgY2F0Y2hfbXNnKCkgYW5zdGF0dAorICAgICAgICBjYXRjaF90ZWxsKCkgYXVmZ2VydWZlbi4KKworICAgICAgICBNaXQgZGVtIEFycmF5IDwqZXhjbHVkZT4ga2FubiBtYW4gdmVyaGluZGVybiwgZGFzcyBkaWUgTmFjaHJpY2h0IGFuCisgICAgICAgIGRpZSBkYXJpbiBlbnRoYWx0ZW5lbiBPYmpla3RlIGdlc2VuZGV0IHdpcmQuCisgICAgICAgIERhcyBpc3Qgc2lubnZvbGwsIHdlbm4gekIgZWluIFNwaWVsZXIgQXVzbG9lc2VyIGVpbmVyIE1lbGR1bmcgaXN0CisgICAgICAgIHVuZCBkaWVzZSBzZWxic3QgbmljaHQgZXJoYWx0ZW4gc29sbC4KKworQkVNRVJLVU5HRU46CisgICAgICAgIC0gZGVyIEVpbnRyYWcgdm9uIG1laHJlcmVuIEFud2VzZW5kZW4gaW4gKmV4Y2x1ZGUgaXN0IG1vZWdsaWNoCisgICAgICAgIC0gd2lyZCBpbiBlaW5lbSBjYXRjaF9tc2coKSBkZXIgV2VydCB2b24gPG1zZz4gdmVyYWVuZGVydCwgZXJoYWx0ZW4KKyAgICAgICAgICBhbGxlIG5hY2hmb2xnZW5kZW4gT2JqZWt0ZSBkYXMgdmVyYWVuZGVydGUgPG1zZz4gKFJlZmVyZW56ISkKKworICAgICAgICAtIHNheSgic3RyIikgaXN0IHZlcmhhbHRlbnNnbGVpY2ggenUKKyAgICAgICAgICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSwgInN0ciIsICh7dGhpc19wbGF5ZXIoKXx8dGhpc19vYmplY3QoKX0pKQorCitCRUlTUElFTEU6CisgICAgICAgIC8vIERpZXMgaXN0IGVpbiBlaW5mYWNoZXMgQmVpc3BpZWwgZnVlciBlaW5lIE1lbGR1bmcgYW4gYWxsZSBBbi0KKyAgICAgICAgLy8gd2VzZW5kZW4gaW0gUmF1bS4KKworICAgICAgICB0ZWxsX3Jvb20odGhpc19vYmplY3QoKSwiRWluIGxlaWNodGVyIFdpbmQga29tbXQgYXVmLlxuIik7CisKKyAgICAgICAgLy8gRGllc2UgTWVsZHVuZyB3aXJkIGltIFJhdW0gL2QvZWJlbmUvYXJrL3JhdW0uYyBhdXNnZWdlYmVuLCBkaWVzZXIKKyAgICAgICAgLy8gUmF1bSBtdXNzIG5pY2h0IGRlcmplbmlnZSBzZWluLCBpbiBkZW0gZGFzIHRlbGxfcm9vbSgpIGF1c2dlZnVlaHJ0CisgICAgICAgIC8vIHdpcmQuCisKKyAgICAgICAgdGVsbF9yb29tKCIvZC9lYmVuZS9hcmsvcmF1bSIsIkVpbiBsZWljaHRlciBXaW5kIGtvbW10IGF1Zi5cbiIpOworCisKKyAgICAgICAgLy8gRGllc2UgTWVsZHVuZyB3aXJkIGFuIGFsbGUgQW53ZXNlbmRlbiBpbSBSYXVtIEFVU1NFUiB0aGlzX3BsYXllcigpCisgICAgICAgIC8vIChkZXIgZGllc2UgTWVsZHVuZyBhdXNnZWxvZXN0IGhhdCkgYXVzZ2VnZWJlbi4gRGVyIG11c3MgZWluZSBnZS0KKyAgICAgICAgLy8gc29uZGVydGUgTWVsZHVuZyB1ZWJlciBzZWluIFN0b2xwZXJuIHBlciB3cml0ZSgpIG9kZXIKKyAgICAgICAgLy8gdGVsbF9vYmplY3QoKSBiZWtvbW1lbi4KKyAgICAgICAgdGVsbF9yb29tKHRoaXNfb2JqZWN0KCksCisgICAgICAgICAgICAgICAgICBicmVha19zdHJpbmcodGhpc19wbGF5ZXIoKS0+TmFtZSgpKyIgc3RvbHBlcnQuIiwgNzgpLAorICAgICAgICAgICAgICAgICAgKHsgdGhpc19wbGF5ZXIoKSB9KSk7CisgICAgICAgIHRlbGxfb2JqZWN0KHRoaXNfcGxheWVyKCksICJEdSBzdG9scGVyc3QuXG4iKTsKKworICAgICAgICAvLyBFaW4gQmVpc3BpZWwgbWl0IHp3ZWkgT2JqZWt0ZW4sIGRhcyB6ZWlndCwgd2llIGRhcyBadXNhbW1lbnNwaWVsCisgICAgICAgIC8vIHZvbiBjYXRjaF90ZWxsKCkgdW5kIHRlbGxfcm9vbSgpIGFibGF1ZWZ0LiBPYmpla3QxIGlzdCBlaW4KKyAgICAgICAgLy8gTGViZXdlc2VuIG1pdCBOYW1lbiAiRHVtbXltb25zdGVyIiwgT2JqZWt0MiB2ZXJ0ZWlsdCBkaWUgTWVsZHVuZzoKKworICAgICAgICBPYmpla3QxIChlaW4gTGViZXdlc2VuLCBzdGVodCBpbSBFbnYgdm9uIHRoaXNfcGxheWVyKCkpOgorICAgICAgICAgICAgdm9pZCBjYXRjaF90ZWxsKHN0cmluZyBzdHIpIHsKKyAgICAgICAgICAgICAgICB3cml0ZSgiRW1wZmFuZ2VuOiAiK3N0cisiXG4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBPYmpla3QyOgorICAgICAgICAgICAgdm9pZCBmdW4oKSB7CisgICAgICAgICAgICAgICAgdGVsbF9yb29tKGVudmlyb25tZW50KHRoaXNfcGxheWVyKCkpLCAiSGFsbG8gV2VsdCFcbiIpOworICAgICAgICAgICAgfQorCitTSUVIRSBBVUNICisgICAgICAgIEFlaG5saWNoOiAgIHRlbGxfb2JqZWN0KEUpLCB3cml0ZShFKSwgc2hvdXQoRSksIHNheShFKSwgcHJpbnRmKEUpCisgICAgICAgIFZlcndhbmR0OiAgIGNhdGNoX3RlbGwoRSksIGNhdGNoX21zZyhBKQorICAgICAgICBTb25zdGlnZXM6ICBvYmplY3RfbmFtZShFKQorCis3LkF1ZyAyMDA3IEdsb2luc29uCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi90ZXJtaW5hbF9jb2xvdXIgYi9kb2MvZWZ1bi90ZXJtaW5hbF9jb2xvdXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkMWJjZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3Rlcm1pbmFsX2NvbG91cgpAQCAtMCwwICsxLDEyNyBAQAorU1lOT1BTSVMKKyAgICAgICAgdmFyYXJncyBzdHJpbmcgdGVybWluYWxfY29sb3VyKHN0cmluZyBzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIHwgbWFwcGluZyB8IGNsb3N1cmUgbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdyYXAsIGludCBpbmRlbnQpOworQkVTQ0hSRUlCVU5HCisgICAgICAgIElzdCA8bWFwPiBlaW4gV2VydCB1bmdsZWljaCAwLCBlcnNldHp0IGRpZXNlIEVmdW4gYWxsZSBGYXJiLQorICAgICAgICBEZWZpbml0aW9uZW4gZGVyIEZvcm0gIiVeS0VZJV4iIChzaWVoZSB1bnRlbiBmdWVyIERldGFpbHMpIGltCisgICAgICAgIFN0cmluZyA8c3RyPiB1bmQgZXJzZXR6dCBzaWUgZHVyY2ggZGllIGVudHNwcmVjaGVuZGVuIFdlcnRlIGF1cyBkZW0KKyAgICAgICAgdW50ZXIgPG1hcD4gYW5nZWdlYmVuZW4gRmFyYnNjaGx1ZXNzZWwuCisKKyAgICAgICAgSXN0IDxtYXA+IGVpbiBNYXBwaW5nLCBtdWVzc2VuIGRpZSBFaW50cmFlZ2UgZGFzIEZvcm1hdAorICAgICAgICAiS0VZIiA6ICJ3ZXJ0IiBoYWJlbjsgRWludHJhZWdlLCBkaWUga2VpbmUgU3RyaW5ncyBlbnRoYWx0ZW4sCisgICAgICAgIHdlcmRlbiBpZ25vcmllcnQuIEVpbnppZ2UgQXVzbmFobWUgZGF6dTogZW50aGFlbHQgPG1hcD4gZWluZW4KKyAgICAgICAgRWludHJhZyBkZXIgRm9ybSAwOndlcnQsIHdpcmQgZGllc2VyIGZ1ZXIgYWxsZSBGYXJiZGVmaW5pdGlvbmVuCisgICAgICAgIHZlcndlbmRldCwgZGllIGtlaW5lbSBhbmRlcmVuIFNjaGx1ZXNzZWwgenVnZW9yZG5ldCB3ZXJkZW4ga29lbm5lbi4KKyAgICAgICAgPHdlcnQ+IGthbm4gaW4gZGllc2VtIEZhbGwgZWluIFN0cmluZyBvZGVyIGVpbmUgQ2xvc3VyZSBzZWluLiBIYW5kZWx0CisgICAgICAgIGVzIHNpY2ggdW0gZWluZSBDbG9zdXJlLCBlcmhhZWx0IGRpZXNlIGRlbiA8S0VZPiBhbHMgQXJndW1lbnQgdW5kCisgICAgICAgIG11c3MgZWluZW4gU3RyaW5nIHp1cnVlY2sgbGllZmVybiwgZGVyIDxLRVk+IGVyc2V0enQuCisKKyAgICAgICAgSXN0IDxtYXA+IGVpbmUgQ2xvc3VyZSwgd2lyZCBkaWVzZSBtaXQgZGVuIEZhcmJkZWZpbml0aW9uZW4gPEtFWT4KKyAgICAgICAgYWxzIEFyZ3VtZW50IGF1ZmdlcnVmZW4gdW5kIG11c3MgZWluZW4gU3RyaW5nIHp1cnVlY2sgbGllZmVybiwgZGVyCisgICAgICAgIGRpZSA8S0VZPnMgZXJzZXR6dC4KKworICAgICAgICBEaWUgc3BlemllbGxlbiBTY2hsdWVzc2VsICIlXiVeIiB1bmQgIiUlXl4iIHdlcmRlbiBpbW1lciBkdXJjaCBkYXMKKyAgICAgICAgTGl0ZXJhbCAiJV4iIGVyc2V0enQuCisKKyAgICAgICAgRGllIFBhcmFtZXRlciA8d3JhcD4gdW5kIDxpbmRlbnQ+IHNpbmQgb3B0aW9uYWwuIElzdCBudXIgPHdyYXA+CisgICAgICAgIGFuZ2VnZWJlbiwgd2lyZCA8c3RyPiBpbiBkZXIgU3BhbHRlIDx3cmFwPiB1bWdlYnJvY2hlbi4gSXN0CisgICAgICAgIHp1c2FldHpsaWNoIDxpbmRlbnQ+IGFuZ2VnZWJlbiwgd2VyZGVuIGFsbGUgdW1nZWJyb2NoZW5lbiBaZWlsZW4KKyAgICAgICAgdW0gPGluZGVudD4gU3BhbHRlbiBlaW5nZXJ1ZWNrdC4KKworICAgICAgICBEZXIgWmVpbGVudW1icnVjaCBpZ25vcmllcnQgZGllIExhZW5nZSBkZXIgRmFyYm1ha3JvcyB1bmQgaWhyZXIKKyAgICAgICAgSW5oYWx0ZS4gRXIgYnJpY2h0IDxzdHI+IGFuaGFuZCBkZXIgTGFlbmdlIGRlciB1ZWJyaWdlbiBaZWljaGVuCisgICAgICAgIHVtLCBpc3QgYWxzbyBmYXJiLW5ldXRyYWwuCisKKyAgICAgICAgSXN0IDxtYXA+IGFscyAwIGFuZ2VnZWJlbiwgZnVlaHJ0IGRpZSBFZnVuIGtlaW4gU3VjaGVuIHVuZCBFcnNldHplbgorICAgICAgICB2b24gRmFyYmRlZmluaXRpb25lbiBkdXJjaC4gRGllIEZ1bmt0aW9uYWxpdGFldCB2b24gWmVpbGVudW1icnVjaAorICAgICAgICB1bmQgRWlucnVlY2t1bmcgYmxlaWJlbiBlcmhhbHRlbiwgd2VubiBnZXd1ZW5zY2h0LiBBdWYgZGllc2UgV2Vpc2UKKyAgICAgICAgZHVwbGl6aWVydCB0ZXJtaW5hbF9jb2xvdXIoKSBkaWUgRnVua3Rpb24gdm9uIHNwcmludGYoIiUtPXMiKSB1bmQKKyAgICAgICAgd2lya3QgYWxzIGVpbmZhY2hlIFplaWxlbnVtYnJ1Y2ggRnVua3Rpb24uCisKKworICAgICAgICBFUktFTk5FTiBWT04gRkFSQkRFRklOSVRJT05FTgorCisgICAgICAgIFdpZSBiZXJlaXRzIGVyd2FlaG50LCB3ZXJkZW4gZGllIHNwZXppZWxsZW4gU2NobHVlc3NlbCAiJV4lXiIgdW5kCisgICAgICAgICIlJV5eIiBkdXJjaCBkYXMgTGl0ZXJhbCAiJV4iIGVyc2V0enQgdW5kIHNwaWVsZW4gaW0gV2VpdGVyZW4KKyAgICAgICAga2VpbmUgUm9sbGUuCisKKyAgICAgICAgRnVlciBkZW4gRWluZ2FiZXN0cmluZyB3aXJkIGRhcyBmb2xnZW5kZSBGb3JtYXQgdm9yYXVzZ2VzZXR6dDoKKworICAgICAgICAgICAgdGV4dCB7ICclXicgY29sb3JrZXkgJyVeJyB0ZXh0IH0gWyAnJV4nIGNvbG9ya2V5IF0KKworICAgICAgICBPZGVyIGluIFdvcnRlbjogZGllIEVmdW4gdHJlbm50IGRlbiBTdHJpbmcgYmVpIGplZGVtICclXicsIGRhcworICAgICAgICBzaWUgYW50cmlmZnQgdW5kIGJlaGFuZGVsdCBhbnNjaGxpZXNzZW5kIGplZGVuIHp3ZWl0ZW4gVGVpbHN0cmluZworICAgICAgICBhbHMgRmFyYnNjaGx1ZXNzZWwuCisKKyAgICAgICAgTWVya2U6IGRpZXNlcyBWZXJoYWx0ZW4gdW50ZXJzY2hlaWRldCBzaWNoIHZvbiBkZXIgQmVoYW5kbHVuZyBkZXMKKyAgICAgICAgRWluZ2FiZXN0cmluZ3MgdW50ZXIgTXVkT1MuIERvcnQgbGF1dGV0IGRpZSBTeW50YXg6CisKKyAgICAgICAgICAgIGtleV9vZGVyX3RleHQgeyAnJV4nIGtleV9vZGVyX3RleHQgfQorCisgICAgICAgIE9kZXIgaW4gV29ydGVuOiBkaWUgTXVkT1MgRWZ1biB0cmVubnQgZGVuIFN0cmluZyBiZWkgamVkZW0gJyVeJworICAgICAgICB1bmQgdmVyc3VjaHQgZGFubiBqZWRlbiBUZWlsc3RyaW5nIGFscyBGYXJic2NobHVlc3NlbCB6dSBiZWhhbmRlbG4uCisgICAgICAgIERpZXNlcyBWZXJoYWx0ZW4gbGFlc3N0IHNpY2ggYXVjaCB1bnRlciBMUEMgZXJyZWljaGVuOgorCisgICAgICAgICAgc3RyaW5nIG11ZG9zX3Rlcm1pbmFsX2NvbG91cihzdHJpbmcgc3RyLCBtYXBwaW5nIGV4dCwgaW50IHcsIGludCBpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0ZXJtaW5hbF9jb2xvdXIoIiVeIitpbXBsb2RlKGV4cGxvZGUoc3RyLCAiJV4iKS0oeyIifSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCIlXiVeIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGV4dCwgdywgaSk7CisgICAgICAgICAgfQorCisKK0JFSVNQSUVMRQorICAgICAgICBtYXBwaW5nIHRyYW5zOworICAgICAgICBzdHJpbmcgc3RyOworCisgICAgICAgIHRyYW5zID0gKFsgIkdSRUVOIiA6ICJhbnNpLWdyZWVuIiwgIlJFRCIgOiAiIiwgIkJMVUUiIDogMSBdKTsKKworICAgICAgICBzdHIgPSB0ZXJtaW5hbF9jb2xvdXIoICIlXkdSRUVOJV4gYW5kICVeUkVEJV4gYW5kICVeQkxVRSVeIiwgdHJhbnMgKTsKKworICAgICAgICBEaWVzIGZ1ZWhydCB6dSBzdHIgPT0gImFuc2ktZ3JlZW4gYW5kICBhbmQgQkxVRSIuCisKKyAgICAgICAgIiVeR1JFRU5eJSIgd2lyZCBlcnNldHp0IGR1cmNoICJhbnNpLWdyZWVuIiwgd2VpbCA8dHJhbnM+IGRhcyBzbworICAgICAgICBkZWZpbmllcnQsCisgICAgICAgICIlXlJFRCVeIiB3aXJkIGF1cyA8c3RyPiBlbnRmZXJudCwgd2VpbCBlcyBtaXQgIiIgZXJzZXR6dCB3aXJkLCB1bmQKKyAgICAgICAgIiVeQkxVRSVeIiB3aXJkIHVtIGRpZSAiJV4iIHZlcmt1ZXJ0LCB3ZWlsIGRlciBFaW50cmFnIHp1IEJMVUUgaW4KKyAgICAgICAgPHRyYW5zPiBrZWluZW4gZ3VlbHRpZ2VuIFdlcnQgZW50aGFlbHQgKGQuaC4ga2VpbiBTdHJpbmcgaXN0KS4gRGFzCisgICAgICAgIHNlbGJlIHd1ZXJkZSBwYXNzaWVyZW4sIHdlbm4gPHN0cj4gIiVeREVGSU5FJV4iIGVudGhhbHRlbiB3dWVyZGUsCisgICAgICAgIHp1IGRlbSBlcyBrZWluZW4gRWludHJhZyBpbiA8dHJhbnM+IGdpYnQuCisKKyAgICAgICAgTWVya2U6IHVtIGRpcmVrdCBiZW5hY2hiYXJ0ZSBTY2hsdWVzc2VsIHp1IGVyc2V0emVuLCBzb2xsIGRpZQorICAgICAgICBFZnVuIHdpZSBmb2xndCB2ZXJ3ZW5kZXQgd2VyZGVuOgorCisgICAgICAgICAgICBzdHIgPSB0ZXJtaW5hbF9jb2xvdXIoICIlXkdSRUVOJV4lXlJFRCVeIiwgdHJhbnMgKTsKKworICAgICAgICBFaW5lIEVpbmdhYmUgZGVyIEZvcm0KKworICAgICAgICAgICAgc3RyID0gdGVybWluYWxfY29sb3VyKCAiJV5HUkVFTiVeUkVEJV4iLCB0cmFucyApOworCisgICAgICAgIGZ1ZWhydCB6dW0gbG9naXNjaGVuLCBhYmVyIHZpZWxsZWljaHQgdW5lcndhcnRldGVuIEVyZ2VibmlzCisgICAgICAgICJhbnNpLWdyZWVuUkVEIi4KKworCisgICAgICAgIEVpbmlnZSBXb3J0ZSB6dW0gWmVpbGVudW1icnVjaDoKKworICAgICAgICBFaW4gU3RyaW5nLCBkZXIgb2huZSBFaW5ydWVja3VuZyB1bWdlYnJvY2hlbiB3aXJkICg8aW5kZW50PiBpc3QgMCksCisgICAgICAgIHNpZWh0IHNvIGF1czoKKworICAgICAgICAgICAgImRpZXMgaXN0IGRpZSBlcnN0ZSBaZWlsZVxudW5kIGRpZXMgaXN0IGRpZSB6d2VpdGUgWmVpbGUiCisKKyAgICAgICAgRWluIFN0cmluZywgZGVyIG1pdCA8aW5kZW50PiAzIHVtZ2Vicm9jaGVuIHdpcmQsIHNpZWh0IHNvIGF1czoKKworICAgICAgICAgICAgImRpZXMgaXN0IGRpZSBlcnN0ZSBaZWlsZVxuICAgdW5kIGRpZXMgaXN0IGRpZSB6d2VpdGUgWmVpbGUiCisKK0FFTkRFUlVOR0VOCisgICAgICAgIERpZSBJZGVlIGZ1ZXIgZGllc2UgRWZ1biB1bmQgZGllIGVyc3RlIEltcGxlbWVudGllcnVuZyBzdGFtbWVuCisgICAgICAgIGF1cyBNdWRPUzsgZGllIFN0cmF0ZWdpZSBmdWVyIGRhcyBFcmtlbm5lbiB2b24gU2NobHVlc3NlbG4KKyAgICAgICAgKGVpbmdlc2NobG9zc2VuIGRpZSBwdXJlIFplaWxlbnVtYnJ1Y2ggRnVua3Rpb24pIHd1cmRlIGluCisgICAgICAgIExETXVkIDMuMi44IGdlZ2xhZXR0ZXQuCisgICAgICAgIExETXVkIDMuMi45IGZ1ZWd0ZSBkaWUgVmVyd2VuZHVuZyB2b24gQ2xvc3VyZXMgenVyIERlZmluaXRpb24KKyAgICAgICAgdm9uIEZhcmJzY2hsdWVzc2VsbiBoaW56dS4gRXMgZXJrbGFlcnRlIHp1ZGVtIG9mZml6aWVsbCBkYXMKKyAgICAgICAgVmVyaGFsdGVuIGJldHJlZmZlbiAiJSVeXiIgYXVzIEdydWVuZGVuIGJlc3NlcmVyIEtvbXBhdGliaWxpdGFldAorICAgICAgICBtaXQgTXVkT1MuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgc3ByaW50ZihFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdGVzdF9iaXQgYi9kb2MvZWZ1bi90ZXN0X2JpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjgyYzk1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdGVzdF9iaXQKQEAgLTAsMCArMSwyMSBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IHRlc3RfYml0KHN0cmluZyBzdHIsIGludCBuKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEdpYnQgMCBvZGVyIDEgZGVzIDxuPi10ZW4gQml0cyBpbSBTdHJpbmcgPHN0cj4genVydWVjay4KKworICAgICAgICBKZWRlcyBaZWljaGVuIGJlc3RlaHQgYXVzIDYgQml0cy4gSmVkZW0gWmVpY2hlbiBpc3QgYWxzbyBlaW4gV2VydAorICAgICAgICB6d2lzY2hlbiAwIHVuZCA2MyB6dWdlb3JkbmV0ICh3ZWlsIDJeNj02NCkuIERhcyBlcnN0ZSBaZWljaGVuIGlzdCBkZXIKKyAgICAgICAgTGVlcnNjaGxhZyAiICIgbWl0IGRlbSBXZXJ0IDAgKGtlaW5lcyBkZXIgQml0cyBpc3QgZ2VzZXR6dCkuIERhcworICAgICAgICBlcnN0ZSBaZWljaGVuIGltIFN0cmluZyBpc3QgZGFzamVuaWdlIG1pdCBkZW4gbmllZHJpZ3N0ZW4gQml0cyAoMC01KS4KKworQkVJU1BJRUxFCisgICAgICAgIHRlc3RfYml0KCJfIiwgNSk7ICAgTGllZmVydCAxLCB3ZWlsICJfIiBkYXMgNjMuIFplaWNoZW4gaXN0IHVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2hhbGIgZGFzIDUuIEJpdCBnZXNldHp0IGhhdC4KKworICAgICAgICB0ZXN0X2JpdCgiICIsIDMpOyAgIExpZWZlcnQgMCwgd2VpbCAiICIgZGFzIDAuIFplaWNoZW4gaXN0IHVuZCBkZXNoYWxiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VpbiBCaXQgZ2VzZXR6dCBoYXQuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgc2V0X2JpdChFKSwgY2xlYXJfYml0KEUpLCBsYXN0X2JpdChFKSwgbmV4dF9iaXQoRSksIGNvdW50X2JpdHMoRSksCisgICAgICAgIGFuZF9iaXRzKEUpLCBvcl9iaXRzKEUpLCB4b3JfYml0cyhFKSwgaW52ZXJ0X2JpdHMoRSksIGNvcHlfYml0cyhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdGhpc19pbnRlcmFjdGl2ZSBiL2RvYy9lZnVuL3RoaXNfaW50ZXJhY3RpdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI5MzhiYgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3RoaXNfaW50ZXJhY3RpdmUKQEAgLTAsMCArMSw5IEBACitTWU5PUFNJUworICAgICAgICBvYmplY3QgdGhpc19pbnRlcmFjdGl2ZSgpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgRGllIEZ1bmt0aW9uIGdpYnQgZGFzIG1vbWVudGFuZSBpbnRlcmFrdGl2ZSBPYmpla3QgenVydWVjaywgZmFsbHMKKyAgICAgICAgdm9yaGFuZGVuLCBhbHNvIGRhc2plbmlnZSB3ZWxjaGVzICJkaWUgRW50ZXJ0YXN0ZSBnZWRydWVja3QgaGF0Ii4KKworU0lFSEUgQVVDSAorICAgICAgICB0aGlzX3BsYXllcihFKSwgcHJldmlvdXNfb2JqZWN0KEUpLCBpbnRlcmFjdGl2ZShFKSwgbGl2aW5nKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi90aGlzX29iamVjdCBiL2RvYy9lZnVuL3RoaXNfb2JqZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNjAyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi90aGlzX29iamVjdApAQCAtMCwwICsxLDEwIEBACitTWU5PUFNJUzoKKyAgICAgICAgb2JqZWN0IHRoaXNfb2JqZWN0KHZvaWQpCisKK0RFU0NSSVBUSU9OOgorICAgICAgICBSZXR1cm4gdGhlIG9iamVjdCBwb2ludGVyIGZvciB0aGlzIG9iamVjdC4gVGhpcyBpcyBub3QgdG8gYmUKKyAgICAgICAgY29uZnVzZWQgd2l0aCB0aGUgaW50ZXJuYWwgbmFtZSBvZiBhbiBvYmplY3QsIHdoaWNoIGlzIHVzZWQgYnkKKyAgICAgICAgdGhlIGlkKCkgZnVuY3Rpb24uCisKK1NFRSBBTFNPOgorICAgICAgICB0aGlzX3BsYXllcihFKSwgcHJldmlvdXNfb2JqZWN0KEUpLCBvYmplY3RfbmFtZShFKSwgZmluZF9vYmplY3QoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3RoaXNfcGxheWVyIGIvZG9jL2VmdW4vdGhpc19wbGF5ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFiNjQyMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3RoaXNfcGxheWVyCkBAIC0wLDAgKzEsMTggQEAKK1NZTk9QU0lTCisgICAgICAgIG9iamVjdCB0aGlzX3BsYXllcigpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgTGllZmVydCBkZW4gbW9tZW50YW5lbiBLb21tYW5kb2dlYmVyLiBEYXMga2FubiBlaW4gaW50ZXJha3RpdmVyCisgICAgICAgIEJlbnV0emVyIG9kZXIgZWluIGxlYmVuZGlnZXMgT2JqZWt0IHNlaW4sIHp1bSBCZWlzcGllbCBlaW4gTlBDLgorCisgICAgICAgIFdlbm4gZGllIEZ1bmt0aW9uIHZvbiBpbm5lcmhhbGIgZGVzIGhlYXJ0X2JlYXQoKSBlaW5lcyBuaWNodAorICAgICAgICBsZWJlbmRpZ2VuIE9iamVrdHMgYXVmZ2VydWZlbiB3aXJkLCB3aXJkIDAgenVydWVjayBnZWdlYmVuLgorCitCRUlTUElFTAorICAgICAgICBpZih0aGlzX3BsYXllcigpICE9IHRoaXNfaW50ZXJhY3RpdmUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgd3JpdGUoIkhleSwgamVtYW5kIHp3aW5ndCB1bnMsIEtvbW1hbmRvcyBhdXN6dWZ1ZWhyZW4hXG4iKTsKKyAgICAgICAgfQorCitTSUVIRSBBVUNICisgICAgICAgIHRoaXNfb2JqZWN0KEUpLCBwcmV2aW91c19vYmplY3QoRSksIGludGVyYWN0aXZlKEUpLCBsaXZpbmcoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3Rocm93IGIvZG9jL2VmdW4vdGhyb3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEyMWNkZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3Rocm93CkBAIC0wLDAgKzEsMTYgQEAKK1NZTk9QU0lTCisgICAgICAgIHZvaWQgdGhyb3cobWl4ZWQgYXJnKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEJyaWNodCBkaWUgUHJvZ3JhbW12ZXJhcmJlaXR1bmcgYWIuIFdlbm4gZGllIFZlcmFyYmVpdHVuZyBtaXQgY2F0Y2goKQorICAgICAgICBnZXN0YXJ0ZXQgd3VyZGUsIGdpYnQgZGllc2VzIGNhdGNoKCkgPGFyZz4gYWxzIEZlaGxlcm1lbGR1bmcgYXVzLgorCisgICAgICAgIERlciBBdWZydWYgdm9uIHRocm93KCkgb2huZSB2b3JoZXJpZ2VzIGNhdGNoKCkgaXN0IHNpbm5sb3MgdW5kCisgICAgICAgIGVyemV1Z3QgZWluZW4gInRocm93IHdpdGhvdXQgY2F0Y2giIEZlaGxlci4KKworQkVJU1BJRUwKKyAgICAgICAgY2F0Y2godGhyb3coIlZlcmFyYmVpdHVuZyBhYmdlYnJvY2hlbiEiKSk7CisgICAgICAgIERhcyBtYWNodCBuaWNodHMgYWxzICJWZXJhcmJlaXR1bmcgYWJnZWJyb2NoZW4hIiBhdXN6dWdlYmVuLgorCitTSUVIRSBBVUNICisgICAgICAgIGNhdGNoKEUpLCByYWlzZV9lcnJvcihFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdGltZSBiL2RvYy9lZnVuL3RpbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwMTZhNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3RpbWUKQEAgLTAsMCArMSwyMSBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IHRpbWUoKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZGllIEFuemFobCBTZWt1bmRlbiwgZGllIHNlaXQgZGVtIDAxLiBKYW51YXIgMTk3MCwKKyAgICAgICAgMDA6MDA6MDAgR01UIHZlcnN0cmljaGVuIHNpbmQuCisKKyAgICAgICAgRGllIFplaXRhbmdhYmUgYmFzaWVydCBhdWYgZGVyIFN5c3RlbXplaXQgZGVzIEhvc3RzLCBkZXIgRHJpdmVyCisgICAgICAgIHN0ZWxsdCBqZWRvY2ggc2ljaGVyLCBkYXNzIGRhcyBSZXN1bHRhdCB2b24gdGltZSgpIG1vbm90b24gYW5zdGVpZ3QKKyAgICAgICAgKGFsc28gaW1tZXIgbnVyIHp1IGhvZWhlcmVuIFdlcnRlbiB3ZWNoc2VsdCkuCisKKyAgICAgICAgRGFzIFJlc3VsdGF0IHZvbiB0aW1lKCkgdmVyYWVuZGVydCBzaWNoIG5pY2h0IHdhZWhyZW5kIGRlbSBBYmFyYmVpdGVuCisgICAgICAgIGVpbmVzIEtvbW1hbmRvcy4KKworQkVJU1BJRUwKKyAgICAgICAgVW0gZGFzIGFrdHVlbGxlIERhdHVtIHVuZCBkaWUgYWt0dWVsbGUgWmVpdCBhbnp1emVpZ2VuOgorCisgICAgICAgICAgICB3cml0ZShjdGltZSh0aW1lKCkpKyJcbiIpOworCitTSUVIRSBBVUNICisgICAgICAgIGN0aW1lKEUpLCBnbXRpbWUoRSksIGxvY2FsdGltZShFKSwgdXRpbWUoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3Rsc19hdmFpbGFibGUgYi9kb2MvZWZ1bi90bHNfYXZhaWxhYmxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNGEwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi90bHNfYXZhaWxhYmxlCkBAIC0wLDAgKzEsMTkgQEAKK1BSRUxJTUlOQVJZCitTWU5PUFNJUworICAgICAgICBpbnQgdGxzX2F2YWlsYWJsZSgpCisKK0RFU0NSSVBUSU9OCisgICAgICAgIElmIHRoZSBnbG9iYWwgVExTIGluaXRpYWxpc2F0aW9uIGNvdWxkIG5vdCBiZWVuIHNldCB1cCwgCisgICAgICAgIHRsc19pc19hdmFpbGFibGUoKSByZXR1cm5zIDAsIG90aGVyd2lzZSAxLgorICAgICAgICBJdCBpcyBub3QgdmVyeSB1c2VmdWwgY2FsbGluZyBhbnkgb3RoZXIgdGxzXyotZWZ1biBpZiB0aGlzIG9uZSAKKyAgICAgICAgcmV0dXJucyAwLCBzaW5jZSB0aGVyZSBpcyBubyBUTFMtZW5jcnlwdGlvbiBhdmFpbGFibGUuCisgICAgICAgIE1vc3QgbGlrZWx5IHRoZSBnbG9iYWwgaW5pdGlhbGlzYXRpb24gZmFpbHMgZHVlIHRvIG1pc3Npbmcgb3IgCisgICAgICAgIHVucmVhZGFibGUga2V5IHJlc3AuIGNlcnRpZmljYXRlLWZpbGUuCisKK0hJU1RPUlkKKyAgICAgICAgSW50cm9kdWNlZCBpbiBMRE11ZCAzLjMuNDc0IGFuZCBmb2xsb3dpbmcsIGJhY2twb3J0ZWQgdG8gMy4yLjExLgorCitTRUUgQUxTTworICAgICAgICB0bHNfaW5pdF9jb25uZWN0aW9uKEUpLCB0bHNfZGVpbml0X2Nvbm5lY3Rpb24oRSksIAorICAgICAgICB0bHNfcXVlcnlfY29ubmVjdGlvbl9zdGF0ZShFKSwgdGxzX3F1ZXJ5X2Nvbm5lY3Rpb25faW5mbyhFKSwKKyAgICAgICAgdGxzX2NoZWNrX2NlcnRpZmljYXRlKEUpLCB0bHNfcmVmcmVzaF9jZXJ0cyhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdGxzX2NoZWNrX2NlcnRpZmljYXRlIGIvZG9jL2VmdW4vdGxzX2NoZWNrX2NlcnRpZmljYXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YWZjOGUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi90bHNfY2hlY2tfY2VydGlmaWNhdGUKQEAgLTAsMCArMSw0OSBAQAorUFJFTElNSU5BUlkKK1NZTk9QU0lTCisgICAgICAgIG1peGVkICp0bHNfY2hlY2tfY2VydGlmaWNhdGUob2JqZWN0IG9iaik7CisgICAgICAgIG1peGVkICp0bHNfY2hlY2tfY2VydGlmaWNhdGUob2JqZWN0IG9iaiwgaW50IGV4dHJhKTsKKworREVTQ1JJUFRJT04KKyAgICAgICAgdGxzX2NoZWNrX2NlcnRpZmljYXRlKCkgY2hlY2tzIHRoZSBjZXJ0aWZpY2F0ZSBvZiB0aGUgc2VjdXJlZAorICAgICAgICBjb25uZWN0aW9uIGJvdW5kIHRvIDxvYmo+IChkZWZhdWx0IGlzIHRoZSBjdXJyZW50IG9iamVjdCkuICBJZgorICAgICAgICA8b2JqPiBpcyBub3QgaW50ZXJhY3RpdmUsIG9yIGlmIFRMUyBpcyBub3QgYXZhaWxhYmxlLCBhbiBlcnJvcgorICAgICAgICBpcyB0aHJvd24uCisKKyAgICAgICAgSWYgPG9iaj4gZG9lc24ndCBoYXZlIGEgc2VjdXJlIGNvbm5lY3Rpb24gdXAgYW5kIHJ1bm5pbmcsIGFuCisgICAgICAgIGVycm9yIGlzIHRocm93bi4KKyAgICAgICAgT3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGlzIGFuIGFycmF5IHdpdGggdGhlc2UgdmFsdWVzOgorCisgICAgICAgICAgaW50IFswXSAgICAgIDogUmVzdWx0IGNvZGUgb2YgU1NMX2dldF92ZXJpZnlfcmVzdWx0IChzZWUgbWFuIDEgdmVyaWZ5CisgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2VjdGlvbiBESUFHTk9TVElDUyBmb3IgcG9zc2libGUgdmFsdWVzKQorICAgICAgICAgIGFycmF5IFsxXSAgICA6IGFycmF5IHdpdGggMypuIGVudHJpZXMgb2YgZXh0cmEgeDUwOSBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSBpczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzKmkgICAgOiBudW1lcmljYWwgZm9ybSBvZiBvYmplY3QgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmcuICIyLjUuNC4zIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMqaSArIDE6IGxvbmcgb3Igc2hvcnQgbmFtZSBpZiBhdmFpbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nLiAiY29tbW9uTmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzKmkgKyAyOiB2YWx1ZQorICAgICAgICAgIGFycmF5IFsyXSAgICA6IGlmIGV4dHJhIGlzIHNldDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSB3aXRoIDMqbiBlbnRyaWVzIG9mIHg1MDkgZXh0ZW5zaW9uIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHN0cnVjdHVyZSBpczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzKmkgICAgOiBudW1lcmljYWwgZm9ybSBvZiBleHRlbnNpb24gbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMqaSArIDE6IGxvbmcgb3Igc2hvcnQgbmFtZSBvZiBleHRlbnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIGlmIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMqaSArIDI6IGFycmF5IG9mIHN0cmluZ3Mgd2l0aCB0aGUgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSBvZiBbMV0KKworICAgICAgICBOb3RlOiBhIHg1MDkgY2VydGlmaWNhdGUgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBvYmplY3Qgd2l0aAorICAgICAgICB0aGUgc2FtZSBuYW1lCisKK0JVR1MKKyAgICAgICAgTm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIEdudVRMUy4KKworSElTVE9SWQorICAgICAgICBJbnRyb2R1Y2VkIGluIExETXVkIDMuMy42NzIvMy4yLjExLgorICAgICAgICBMRE11ZCAzLjMuNzExLzMuMi4xMiBtb2RpZmllZCB0aGUgYmVoYXZpb3VyIHRvIHJldHVybiB0aGUKKyAgICAgICAgbG93LWxldmVsIEFQSSByZXN1bHQgdmFsdWUsIGFuZCB0byB0aHJvdyBhbiBlcnJvciBpZiB0aGUgY29ubmVjdGlvbgorICAgICAgICBpcyBub3Qgc2VjdXJlLgorCitTRUUgQUxTTworICAgICAgICB0bHNfaW5pdF9jb25uZWN0aW9uKEUpLCB0bHNfZGVpbml0X2Nvbm5lY3Rpb24oRSksIHRsc19lcnJvcihFKSwKKyAgICAgICAgdGxzX3F1ZXJ5X2Nvbm5lY3Rpb25fc3RhdGUoRSksIHRsc19xdWVyeV9jb25uZWN0aW9uX2luZm8oRSksCisgICAgICAgIHRsc19hdmFpbGFibGUoRSksIHRsc19yZWZyZXNoX2NlcnRzKEUpLCBtdWRsaWIvcHN5Yy10bHMuYwpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdGxzX2RlaW5pdF9jb25uZWN0aW9uIGIvZG9jL2VmdW4vdGxzX2RlaW5pdF9jb25uZWN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ODM4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi90bHNfZGVpbml0X2Nvbm5lY3Rpb24KQEAgLTAsMCArMSwyMCBAQAorUFJFTElNSU5BUlkKK1NZTk9QU0lTCisgICAgICAgIHZvaWQgdGxzX2RlaW5pdF9jb25uZWN0aW9uKG9iamVjdCBvYikKKworREVTQ1JJUFRJT04KKyAgICAgICAgdGxzX2RlaW5pdF9jb25uZWN0aW9uKCkgc2h1dHMgZG93biBhIFRMUyBjb25uZWN0aW9uIHRvCisgICAgICAgIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3QgPG9iPiAob3IgdGhpc19vYmplY3QoKSBpZiA8b2I+IGlzIG5vdAorICAgICAgICBnaXZlbikgYnV0IHRoZSBjb25uZWN0aW9uIGlzIG5vdCBjbG9zZWQuCisKKyAgICAgICAgVW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMgdGhlcmUgaXMgbm8gbmVlZCB0byB1c2UgdGhpcyBlZnVuOiBtb3N0CisgICAgICAgIGNsaWVudHMgb3BlcmF0ZSBpbiBlaXRoZXIgc2VjdXJlIG9yIHVuc2VjdXJlIG1vZGUsIGJ1dCBkb24ndCBhbGxvdworICAgICAgICBzd2l0Y2hpbmcgY29ubmVjdGlvbiBzZWN1cml0eSBvbiB0aGUgZmx5LgorCitISVNUT1JZCisgICAgICAgIEludHJvZHVjZWQgaW4gTERNdWQgMy4zLjQ3NCBhbmQgZm9sbG93aW5nLCBiYWNrcG9ydGVkIHRvIDMuMi4xMS4KKworU0VFIEFMU08KKyAgICAgICAgdGxzX2luaXRfY29ubmVjdGlvbihFKSwgdGxzX2Vycm9yKEUpLCB0bHNfcXVlcnlfY29ubmVjdGlvbl9zdGF0ZShFKSwKKyAgICAgICAgdGxzX3F1ZXJ5X2Nvbm5lY3Rpb25faW5mbyhFKSwgdGxzX2F2YWlsYWJsZShFKSwKKyAgICAgICAgdGxzX2NoZWNrX2NlcnRpZmljYXRlKEUpLCB0bHNfcmVmcmVzaF9jZXJ0cyhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdGxzX2Vycm9yIGIvZG9jL2VmdW4vdGxzX2Vycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNWM3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi90bHNfZXJyb3IKQEAgLTAsMCArMSwxNSBAQAorUFJFTElNSU5BUlkKK1NZTk9QU0lTCisgICAgICAgIHN0cmluZyB0bHNfZXJyb3IoaW50IGVycm9ybm8pCisKK0RFU0NSSVBUSU9OCisgICAgICAgIHRsc19lcnJvcigpIHJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZXJyb3IgYmVoaW5kIHRoZQorICAgICAgICBlcnJvciBudW1iZXIgZXJyb3Juby4KKworSElTVE9SWQorICAgICAgICBJbnRyb2R1Y2VkIGluIExETXVkIDMuMy40NzQgYW5kIGZvbGxvd2luZywgYmFja3BvcnRlZCB0byAzLjIuMTEuCisKK1NFRSBBTFNPCisgICAgICAgIHRsc19pbml0X2Nvbm5lY3Rpb24oRSksIHRsc19kZWluaXRfY29ubmVjdGlvbihFKSwgCisgICAgICAgIHRsc19xdWVyeV9jb25uZWN0aW9uX3N0YXRlKEUpLCB0bHNfcXVlcnlfY29ubmVjdGlvbl9pbmZvKEUpLAorICAgICAgICB0bHNfYXZhaWxhYmxlKEUpLCB0bHNfY2hlY2tfY2VydGlmaWNhdGUoRSksIHRsc19yZWZyZXNoX2NlcnRzKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi90bHNfaW5pdF9jb25uZWN0aW9uIGIvZG9jL2VmdW4vdGxzX2luaXRfY29ubmVjdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzNhZmFlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdGxzX2luaXRfY29ubmVjdGlvbgpAQCAtMCwwICsxLDUwIEBACitQUkVMSU1JTkFSWQorU1lOT1BTSVMKKyAgICAgICAgaW50IHRsc19pbml0X2Nvbm5lY3Rpb24ob2JqZWN0IG9iKQorICAgICAgICBpbnQgdGxzX2luaXRfY29ubmVjdGlvbihvYmplY3Qgb2IsIHN0cmluZyBmdW4sIHN0cmluZ3xvYmplY3QgZm9iLCBtaXhlZCBleHRyYS4uLikKKyAgICAgICAgaW50IHRsc19pbml0X2Nvbm5lY3Rpb24ob2JqZWN0IG9iLCBjbG9zdXJlIGZ1biwgbWl4ZWQgZXh0cmEuLi4pCisKK0RFU0NSSVBUSU9OCisgICAgICAgIHRsc19pbml0X2Nvbm5lY3Rpb24oKSB0cmllcyB0byBzdGFydCBhIFRMUyBzZWN1cmVkIGNvbm5lY3Rpb24gdG8gCisgICAgICAgIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3QgPG9iPiAob3IgdGhpc19vYmplY3QoKSBpZiA8b2I+IGlzIG5vdCBnaXZlbikuCisKKyAgICAgICAgUmVzdWx0OgorICAgICAgICAgIGVycm9yY29kZSA8IDA6IHVuc3VjY2Vzc2Z1bCwgdXNlIHRsc19lcnJvcigpIHRvIGdldCBhbiB1c2VmdWwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IKKyAgICAgICAgICAgICBudW1iZXIgPiAwOiB0aGUgc2VjdXJlIGNvbm5lY3Rpb24gaXMgc3RpbGwgYmVpbmcgc2V0IHVwIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kCisgICAgICAgICAgICBudW1iZXIgPT0gMDogdGhlIHNlY3VyZSBjb25uZWN0aW9uIGlzIGFjdGl2ZS4KKyAgICAgICAgCisgICAgICAgIE9wZW5TU0wgb25seToKKworICAgICAgICAgICAgSWYgdGhlIGNhbGxiYWNrIDxmdW4+LzxmdW4+Ojxmb2I+IGlzIHNwZWNpZmllZCwgaXQgd2lsbCBiZSBjYWxsZWQKKyAgICAgICAgICAgIG9uY2UgdGhlIGZhdGUgb2YgdGhlIHNlY3VyZSBjb25uZWN0aW9uIGhhcyBiZWVuIGRldGVybWluZWQuIFRoZQorICAgICAgICAgICAgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSB0aGUgcmV0dXJuIGNvZGUgZnJvbSB0aGUgaGFuZHNoYWtlCisgICAgICAgICAgICAoZXJyb3Jjb2RlIDwgMCBvbiBmYWlsdXJlLCBvciAwIG9uIHN1Y2Nlc3MpLCBmb2xsb3dlZCBieSB0aGUKKyAgICAgICAgICAgIGludGVyYWN0aXZlIG9iamVjdCA8b2I+IGFuZCBhbnkgPGV4dHJhPiBhcmd1bWVudHMuCisKKyAgICAgICAgSWYgdGhlIFRMUyBzZXR1cCBmYWlscywgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjYWxsCisgICAgICAgIHRsc19kZWluaXRfY29ubmVjdGlvbigpLgorCisgICAgICAgIElNUE9SVEFOVDogRHVyaW5nIHRoZSBUTFMgaGFuZHNoYWtlIG5vdGhpbmcgZWxzZSBtdXN0IGJlIHNlbnQKKyAgICAgICAgdG8gdGhlIGNsaWVudCEgRm9yIHRoZSBtb3N0IGNhc2VzIChUTFMtY2FwYWJsZSBjbGllbnRzIGxvZ2dpbmcgaW4pCisgICAgICAgIHRoaXMgbWVhbnMgdGhhdCB0aGUgVExTIGhhbmRzaGFrZSBpcyB0aGUgZmlyc3QgYW5kIG9ubHkgdGhpbmcgdGhlCisgICAgICAgIGNsaWVudCBnZXRzIHRvIHNlZSB3aGlsZSB0aGUgaGFuZHNoYWtlIGlzIGluIHByb2dyZXNzLgorCisgICAgICAgIFRoZSBkcml2ZXIgYXV0b21hdGljYWxseSBzdXBwcmVzc2VzIHRoZSBwcmludGluZyBvZiB0aGUgcHJvbXB0CisgICAgICAgIHdoaWxlIHRoZSBUTFMgaGFuZHNoYWtlIGlzIGluIHByb2dyZXNzLgorCisgICAgICAgIElmIHRsc19pbml0X2Nvbm5lY3Rpb24oKSBpcyBjYWxsZWQgaW4gdGhlIG1hc3Rlcjo6Y29ubmVjdCgpIGZ1bmN0aW9uLAorICAgICAgICB0aGUgZHJpdmVyIHdpbGwgZWl0aGVyIGNhbGwgdGhlIHNldCBjYWxsYmFjayBpbiBwbGFjZSBvZiBsb2dvbigpLCBvcgorICAgICAgICBpZiBub3QgY2FsbGJhY2sgaGFzIGJlZW4gc2V0LCBkZWxheSB0aGUgY2FsbCBvZiBsb2dvbigpIHVudGlsIHRoZQorICAgICAgICBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbiBpcyBjbGVhci4KKworSElTVE9SWQorICAgICAgICBJbnRyb2R1Y2VkIGluIExETXVkIDMuMy40NzQgYW5kIGZvbGxvd2luZywgYmFja3BvcnRlZCB0byAzLjIuMTEuCisgICAgICAgIExETXVkIDMuMi4xMy8zLjMuNzEzIHN0cmVhbWxpbmVkIHRoZSBoYW5kbGluZyBvZiBzZWN1cmUgY29ubmVjdGlvbnMKKyAgICAgICAgZHVyaW5nIGxvZ29uLgorCitTRUUgQUxTTworICAgICAgICB0bHNfZGVpbml0X2Nvbm5lY3Rpb24oRSksIHRsc19lcnJvcihFKSwgdGxzX3F1ZXJ5X2Nvbm5lY3Rpb25fc3RhdGUoRSksCisgICAgICAgIHRsc19xdWVyeV9jb25uZWN0aW9uX2luZm8oRSksIHRsc19hdmFpbGFibGUoRSksCisgICAgICAgIHRsc19jaGVja19jZXJ0aWZpY2F0ZShFKSwgdGxzX3JlZnJlc2hfY2VydHMoRSksIGNvbm5lY3QoTSksIGxvZ29uKEEpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi90bHNfcXVlcnlfY29ubmVjdGlvbl9pbmZvIGIvZG9jL2VmdW4vdGxzX3F1ZXJ5X2Nvbm5lY3Rpb25faW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmFlZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdGxzX3F1ZXJ5X2Nvbm5lY3Rpb25faW5mbwpAQCAtMCwwICsxLDM3IEBACitQUkVMSU1JTkFSWQorU1lOT1BTSVMKKyAgICAgICAgI2luY2x1ZGUgPHN5cy8gdGxzLmg+CisgICAgICAgIGludCAqdGxzX3F1ZXJ5X2Nvbm5lY3Rpb25faW5mbyAob2JqZWN0IG9iKQorCitERVNDUklQVElPTgorICAgICAgICBJZiA8b2I+IGRvZXMgbm90IGhhdmUgYSBUTFMgY29ubmVjdGlvbiBvciBpZiB0aGUgY29ubmVjdGlvbgorICAgICAgICBpcyBzdGlsbCBiZWluZyBzZXQtdXAsIG9yIGlmIDxvYj4gaXMgbm90IGludGVyYWN0aXZlLCB0aGUgZWZ1bgorICAgICAgICByZXR1cm5zIDAuCisKKyAgICAgICAgSWYgPG9iPiBoYXMgYSBUTFMgY29ubmVjdGlvbiwgdGxzX3F1ZXJ5X2Nvbm5lY3Rpb25faW5mbygpCisgICAgICAgIHJldHVybnMgYW4gYXJyYXkgdGhhdCBjb250YWlucyBzb21lIHBhcmFtZXRlcnMgb2YgPG9iPidzCisgICAgICAgIGNvbm5lY3Rpb246CisKKyAgICAgICAgICBpbnR8c3RyaW5nIFtUTFNfQ0lQSEVSXTogdGhlIGNpcGhlciB1c2VkCisgICAgICAgICAgaW50ICAgICAgICBbVExTX0NPTVBdOiAgIHRoZSBjb21wcmVzc2lvbiB1c2VkCisgICAgICAgICAgaW50ICAgICAgICBbVExTX0tYXTogICAgIHRoZSBrZXktZXhjaGFuZ2UgdXNlZAorICAgICAgICAgIGludCAgICAgICAgW1RMU19NQUNdOiAgICB0aGUgZGlnZXN0IGFsZ29yaXRobSB1c2VkCisgICAgICAgICAgaW50fHN0cmluZyBbVExTX1BST1RdOiAgIHRoZSBwcm90b2NvbCB1c2VkCisKKyAgICAgICAgVG8gdHJhbnNsYXRlIHRoZXNlIG51bWJlcnMgaW50byBzdHJpbmdzLCA8dGxzLmg+IG9mZmVycyBhCisgICAgICAgIG51bWJlciBvZiBtYWNyb3M6CisKKyAgICAgICAgICBUTFNfeHh4X1RBQkxFOiBhIGxpdGVyYWwgYXJyYXkgb2Ygc3RyaW5ncyBkZXNjcmliaW5nIHRoZQorICAgICAgICAgICAgdmFsdWUgaW4gcXVlc3Rpb24uCisgICAgICAgICAgVExTX3h4eF9OQU1FKHgpOiBhIG1hY3JvIHRyYW5zbGF0aW5nIHRoZSBudW1lcmljIHJlc3VsdAorICAgICAgICAgICAgdmFsdWUgaW50byBhIHN0cmluZy4KKworICAgICAgICAgIHh4eDogQ0lQSEVSLCBDT01QLCBLWCwgTUFDLCBQUk9UCisKK0hJU1RPUlkKKyAgICAgICAgSW50cm9kdWNlZCBpbiBMRE11ZCAzLjMuNDc0IGFuZCBmb2xsb3dpbmcsIGJhY2twb3J0ZWQgdG8gMy4yLjExLgorCitTRUUgQUxTTworCXRsc19pbml0X2Nvbm5lY3Rpb24oRSksIHRsc19kZWluaXRfY29ubmVjdGlvbihFKSwgdGxzX2Vycm9yKEUpLAorCXRsc19xdWVyeV9jb25uZWN0aW9uX3N0YXRlKEUpLCB0bHNfYXZhaWxhYmxlKEUpLAorICAgICAgICB0bHNfY2hlY2tfY2VydGlmaWNhdGUoRSksIHRsc19yZWZyZXNoX2NlcnRzKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi90bHNfcXVlcnlfY29ubmVjdGlvbl9zdGF0ZSBiL2RvYy9lZnVuL3Rsc19xdWVyeV9jb25uZWN0aW9uX3N0YXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MjRmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi90bHNfcXVlcnlfY29ubmVjdGlvbl9zdGF0ZQpAQCAtMCwwICsxLDE2IEBACitQUkVMSU1JTkFSWQorU1lOT1BTSVMKKyAgICAgICAgaW50IHRsc19xdWVyeV9jb25uZWN0aW9uX3N0YXRlKG9iamVjdCBvYikKKworREVTQ1JJUFRJT04KKyAgICAgICAgdGxzX3F1ZXJ5X2Nvbm5lY3Rpb25fc3RhdGUoKSByZXR1cm5zIGEgcG9zaXRpdmUgbnVtYmVyIGlmIDxvYj4ncworICAgICAgICBjb25uZWN0aW9uIGlzIFRMUyBzZWN1cmVkLCAwIGlmIGl0J3MgdW5zZWN1cmVkLCBhbmQgYSBuZWdhdGl2ZSBudW1iZXIKKyAgICAgICAgaWYgdGhlIFRMUyBjb25uZWN0aW9uIHNldHVwIGlzIHN0aWxsIGJlaW5nIHNldC11cC4KKworSElTVE9SWQorICAgICAgICBJbnRyb2R1Y2VkIGluIExETXVkIDMuMy40NzQgYW5kIGZvbGxvd2luZywgYmFja3BvcnRlZCB0byAzLjIuMTEuCisKK1NFRSBBTFNPCisJdGxzX2luaXRfY29ubmVjdGlvbihFKSwgdGxzX2RlaW5pdF9jb25uZWN0aW9uKEUpLCB0bHNfZXJyb3IoRSksIAorCXRsc19xdWVyeV9jb25uZWN0aW9uX2luZm8oRSksIHRsc19hdmFpbGFibGUoRSksCisgICAgICAgIHRsc19jaGVja19jZXJ0aWZpY2F0ZShFKSwgdGxzX3JlZnJlc2hfY2VydHMoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3Rsc19yZWZyZXNoX2NlcnRzIGIvZG9jL2VmdW4vdGxzX3JlZnJlc2hfY2VydHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzNjRjNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3Rsc19yZWZyZXNoX2NlcnRzCkBAIC0wLDAgKzEsMTcgQEAKK1BSRUxJTUlOQVJZCitTWU5PUFNJUworICAgICAgICB2b2lkIHRsc19yZWZyZXNoX2NlcnRzKCkKKworREVTQ1JJUFRJT04KKyAgICAgICAgUmVsb2FkIHRoZSBjZXJ0aWZpY2F0ZXMgYW5kIGNlcnRpZmljYXRlIHJldm9jYXRpb24gaW5mb3JtYXRpb24uCisKK0JVR1MKKyAgICAgICAgTm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIEdudVRMUy4KKworSElTVE9SWQorICAgICAgICBJbnRyb2R1Y2VkIGluIExETXVkIDMuMy43MTQvMy4yLjE1LgorCitTRUUgQUxTTworICAgICAgICB0bHNfaW5pdF9jb25uZWN0aW9uKEUpLCB0bHNfZGVpbml0X2Nvbm5lY3Rpb24oRSksIHRsc19lcnJvcihFKSwKKyAgICAgICAgdGxzX3F1ZXJ5X2Nvbm5lY3Rpb25fc3RhdGUoRSksIHRsc19xdWVyeV9jb25uZWN0aW9uX2luZm8oRSksCisgICAgICAgIHRsc19hdmFpbGFibGUoRSksIHRsc19jaGVja19jZXJ0aWZpY2F0ZShFKSwgbXVkbGliL3BzeWMtdGxzLmMKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3RvX2FycmF5IGIvZG9jL2VmdW4vdG9fYXJyYXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiMWE5MwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3RvX2FycmF5CkBAIC0wLDAgKzEsMzAgQEAKK1NZTk9QU0lTCisgICAgICAgIG1peGVkICp0b19hcnJheShzdHJpbmcgYXJnKTsKKyAgICAgICAgbWl4ZWQgKnRvX2FycmF5KHN5bWJvbCBhcmcpOworICAgICAgICBtaXhlZCAqdG9fYXJyYXkocXVvdGVkYXJyYXkgYXJyKTsKKyAgICAgICAgbWl4ZWQgKnRvX2FycmF5KG1peGVkICphcmcpOworICAgICAgICBtaXhlZCAqdG9fYXJyYXkoc3RydWN0KTsKKworICAgICAgICAoaW50Kik8dmFsdWU+CisKK0JFU0NIUkVJQlVORworICAgICAgICBTdHJpbmdzIHVuZCBTeW1ib2xlIHdlcmRlbiB1bWdld2FuZGVsdCBpbiBlaW4gSW50ZWdlci1BcnJheSwgZGFzIGF1cworICAgICAgICBkZW4gWmVpY2hlbiB2b24gPGFyZz4gYmVzdGVodC4KKworICAgICAgICBHZXF1b3RldGUgQXJyYXlzIHdlcmRlbiAiZW50cXVvdGV0IiwgdW5kIEFycmF5cyBibGVpYmVuLCB3aWUgc2llIHNpbmQuCisKKyAgICAgICAgU3RydWN0cyB3ZXJkZW4gaW4gbm9ybWFsZSBBcnJheXMgdW1nZXdhbmRlbHQuCisKK0JFSVNQSUVMRToKKyAgICAgICAgdG9fYXJyYXkoIjEyIikgbGllZmVydCAoezMzLDM0fSkuCisKK0JVR1MKKyAgICAgICAgRGllIENhc3QtU2NocmVpYndlaXNlIGZ1bmt0aW9uaWVydCBudXIsIHdlbm4gZGVyIGdlbmF1ZSBXZXJ0IHZvbgorICAgICAgICA8dmFsdWU+IHp1bSBaZWl0cHVua3QgZGVyIEtvbXBpbGllcnVuZyBiZWthbm50IGlzdC4gRGllcyB3aXJkCisgICAgICAgIG5pY2h0IGdlYWVuZGVydCB3ZXJkZW4sIGRhIGRpZSBGdW5rdGlvbnNmb3JtIHZlcndlbmRldCB3ZXJkZW4ga2Fubi4KKworSElTVE9SWQorICAgICAgICBMRE11ZCAzLjMuMjUwIGFkZGVkIHN0cnVjdHMgdG8gdGhlIGFjY2VwdGVkIGRhdGEgdHlwZXMuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgdG9faW50KEUpLCB0b19zdHJpbmcoRSksIHRvX3N0cnVjdChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdG9fZmxvYXQgYi9kb2MvZWZ1bi90b19mbG9hdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjk4OWNlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdG9fZmxvYXQKQEAgLTAsMCArMSwxOSBAQAorU1lOT1BTSVMKKyAgICAgICAgZmxvYXQgdG9fZmxvYXQoaW50IGFyZyk7CisgICAgICAgIGZsb2F0IHRvX2Zsb2F0KHN0cmluZyBhcmcpOworICAgICAgICBmbG9hdCB0b19mbGFvdChmbG9hdCBhcmcpOworCisgICAgICAgIChmbG9hdCk8dmFsdWU+CisKK0JFU0NIUkVJQlVORworICAgICAgICBJbnRlZ2VycyB3ZXJkZW4genUgRmxvYXRzIGVyd2VpdGVydCwgU3RyaW5ncyB3ZXJkZW4gaW4gRmxvYXRzCisgICAgICAgIGtvbnZlcnRpZXJ0IGJpcyB6dW0gZXJzdGVuIFplaWNoZW4sIGRhcyBuaWNodCBtZWhyIHp1bSBGbG9hdAorICAgICAgICBnZWhvZXJ0LiBGbG9hdHMgd2VyZGVuIGRpcmVrdCB6dXJ1ZWNrIGdlZ2ViZW4uCisKK0JVR1MKKyAgICAgICAgRGllIENhc3QtU2NocmVpYndlaXNlIGZ1bmt0aW9uaWVydCBudXIsIHdlbm4gZGVyIGdlbmF1ZSBXZXJ0IHZvbgorICAgICAgICA8dmFsdWU+IHp1bSBaZWl0cHVua3QgZGVyIEtvbXBpbGllcnVuZyBiZWthbm50IGlzdC4gRGllcyB3aXJkIG5pY2h0CisgICAgICAgIGdlYWVuZGVydCB3ZXJkZW4sIGRhIGRpZSBGdW5rdGlvbnNmb3JtIHZlcndlbmRldCB3ZXJkZW4ga2Fubi4KKworU0lFSEUgQVVDSAorICAgICAgICB0b19zdHJpbmcoRSksIHRvX2ludChFKSwgc3NjYW5mKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi90b19pbnQgYi9kb2MvZWZ1bi90b19pbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2NDhlNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3RvX2ludApAQCAtMCwwICsxLDMyIEBACitTWU5PUFNJUworICAgICAgICBpbnQgdG9faW50KHN0cmluZyBhcmcpOworICAgICAgICBpbnQgdG9faW50KGZsb2F0IGFyZyk7CisgICAgICAgIGludCB0b19pbnQoaW50IGFyZyk7CisgICAgICAgIGludCB0b19pbnQoY2xvc3VyZSBhcmcpOworCisgICAgICAgIChpbnQpPHZhbHVlPgorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgQmVpIEZsb2F0cyB3ZXJkZW4gZGllIE5hY2hrb21tYXN0ZWxsZW4gYWJnZXNjaG5pdHRlbiwgU3RyaW5ncyBtaXQKKyAgICAgICAgWmlmZmVybiBhbSBBbmZhbmcgd2VyZGVuIGJpcyB6dW0gZXJzdGVuIE5pY2h0LVppZmZlcm4tWmVpY2hlbiBpbgorICAgICAgICBJbnRlZ2VycyB1bWdld2FuZGVsdC4gTGZ1bi1DbG9zdXJlcyB3ZXJkZW4gaW4gaWhyZW4gRnVua3Rpb25zaW5kZXgKKyAgICAgICAga29udmVydGllcnQsIFZhcmlhYmxlbi1DbG9zdXJlcyBpbiBpaHJlbiBWYXJpYWJsZW5pbmRleC4gSW50ZWdlcnMKKyAgICAgICAgd2VyZGVuIHVudmVyYWVuZGVydCB6dXJ1ZWNrIGdlZ2ViZW4uCisKKyAgICAgICAgQmV6dWVnbGljaCBGbG9hdHMgaXN0IGVzIHdpY2h0aWcsIFJ1bmR1bmdzZWZmZWt0ZSB6dSBiZWFjaHRlbjoKKyAgICAgICAgdG9faW50KDMuMSoxMC4wKSBlcmdpYnQgbmljaHQgMzEsIHNvbmRlcm4gMzAsIHdlaWwgaW50ZXJuIGRhcworICAgICAgICBSZXN1bHRhdCBkZXIgTXVsdGlwbGlrYXRpb24gMzAuOTk5OTk5IGVyZ2lidC4KKyAgICAgCisgICAgICAgIERpZXNlIEZ1bmt0aW9uIHVudGVyc3R1ZXR6dCBkaWUgQmFzaXNwcmVmaXhlICcweCcsICcwbycgdW5kICcwYicuCisKK0JVR1MKKyAgICAgICAgRGllIENhc3QtU2NocmVpYndlaXNlIGZ1bmt0aW9uaWVydCBudXIsIHdlbm4gZGVyIGdlbmF1ZSBXZXJ0IHZvbgorICAgICAgICA8dmFsdWU+IHp1bSBaZWl0cHVua3QgZGVyIEtvbXBpbGllcnVuZyBiZWthbm50IGlzdC4gRGllcyB3aXJkCisgICAgICAgIG5pY2h0IGdlYWVuZGVydCB3ZXJkZW4sIGRhIGRpZSBGdW5rdGlvbnNmb3JtIHZlcndlbmRldCB3ZXJkZW4ga2Fubi4KKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gMy4yLjFAMgorICAgICAgICBMRE11ZCAzLjIuMTEgZnVlaHJ0ZSBkaWUgQmFzaXNwcmVmaXhlIGVpbi4KKworU0lFSEUgQVVDSAorICAgICAgICB0b19zdHJpbmcoRSksIHNzY2FuZihFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdG9fb2JqZWN0IGIvZG9jL2VmdW4vdG9fb2JqZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNTc3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi90b19vYmplY3QKQEAgLTAsMCArMSwxNSBAQAorU1lOT1BTSVMKKwlvYmplY3QgdG9fb2JqZWN0KHN0cmluZyBhcmcpCisJb2JqZWN0IHRvX29iamVjdChjbG9zdXJlIGFyZykKKwlvYmplY3QgdG9fb2JqZWN0KG9iamVjdCBhcmcpCisKK0RFU0NSSVBUSU9OCisJVGhlIGFyZ3VtZW50IGlzIGNvbnZlcnRlZCBpbnRvIGFuIG9iamVjdCwgaWYgcG9zc2libGUuCisJRm9yIHN0cmluZ3MsIHRoZSBvYmplY3Qgd2l0aCBhIG1hdGNoaW5nIG9iamVjdF9uYW1lKCkgaXMKKwlyZXR1cm5lZCwgb3IgMCBpZiB0aGVyZSBpcyBub25lLCBhcyBmaW5kX29iamVjdCgpIGRvZXMuCisJRm9yIChib3VuZCEpIGNsb3N1cmVzLCB0aGUgb2JqZWN0IGhvbGRpbmcgdGhlIGNsb3N1cmUgaXMKKwlyZXR1cm5lZC4KKwlPYmplY3RzIGFuZCB0aGUgbnVtYmVyIDAgcmV0dXJuIHRoZW1zZWx2ZXMuCisKK1NFRSBBTFNPCisJZmluZF9vYmplY3QoRSksIHRvX2FycmF5KEUpLCB0b19pbnQoRSksIHRvX3N0cmluZyhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdG9fc3RyaW5nIGIvZG9jL2VmdW4vdG9fc3RyaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMjNlZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi90b19zdHJpbmcKQEAgLTAsMCArMSwyOSBAQAorU1lOT1BTSVMKKyAgICAgICAgc3RyaW5nIHRvX3N0cmluZyhtaXhlZCBhcmcpCisKK0JFU0NIUkVJQlVORworICAgICAgICA8YXJnPiB3aXJkIGluIGVpbmVuIFN0cmluZyB1bWdld2FuZGVsdC4gRGFzIGtsYXBwdCBtaXQgV2VydGVuIHZvbSBUeXAKKyAgICAgICAgaW50LCBmbG9hdCwgb2JqZWN0LCBhcnJheSwgc3RydWN0LCBzeW1ib2wsIHN0cmluZyBvZGVyIGNsb3N1cmUuCisKKyAgICAgICAgQ2xvc3VyZXMgd2VyZGVuIGluIGVpbmVuIHBhc3NlbmRlbiBOYW1lbiB1bWdld2FuZGVsdCAodm9yd2llZ2VuZCBmdWVyCisgICAgICAgIERlYnVnZ2luZy1ad2Vja2UgZ2VlaWduZXQpLgorCitBTk1FUktVTkdFTgorICAgICAgICBBcnJheXMgd2VyZGVuIGFscyAiZXhwbG9kZXRlIiBTdHJpbmdzIGJldHJhY2h0ZXQsIGFsc28gQXJyYXlzIHZvbgorICAgICAgICBaZWljaGVuY29kZXMuIFNpZSB3ZXJkZW4gYmlzIHp1ciBlcnN0ZW4gMCBvZGVyIGJpcyB6dW0gZXJzdGVuCisgICAgICAgIG5pY2h0LW51bWVyaXNjaGVuIEVpbnRyYWcgImltcGxvZGV0IiwgamUgbmFjaGRlbSwgd2FzIHp1ZXJzdCBlaW50cml0dC4KKworICAgICAgICBEYXMgYmVkZXV0ZXQsIGRhc3MgdG9fc3RyaW5nKCAoeyA0OSwgNTAgfSkgKTsgIjEyIiBsaWVmZXJ0LCB1bmQgbmljaHQKKyAgICAgICAgIih7IDQ5LCA1MCB9KSIKKworRkVITEVSCisgICAgICAgIERpZSBDYXN0LVNjaHJlaWJ3ZWlzZSBmdW5rdGlvbmllcnQgbnVyLCB3ZW5uIGRlciBnZW5hdWUgV2VydCB2b24KKyAgICAgICAgPHZhbHVlPiB6dW0gWmVpdHB1bmt0IGRlciBLb21waWxpZXJ1bmcgYmVrYW5udCBpc3QuIERpZXMgd2lyZCBuaWNodAorICAgICAgICBnZWFlbmRlcnQgd2VyZGVuLCBkYSBkaWUgRnVua3Rpb25zZm9ybSB2ZXJ3ZW5kZXQgd2VyZGVuIGthbm4uCisKK0dFU0NISUNIVEUKKyAgICAgICAgTERNdWQgMy4yLjggbGFlc3N0IExhbWJkYWNsb3N1cmVzIGFscyBndWVsdGlnZSBEYXRlbnR5cGVuIHp1LgorICAgICAgICBMRE11ZCAzLjMuMjUwIGxhZXNzdCBzdHJ1Y3RzIGFscyBndWVsdGlnZSBEYXRlbnR5cGVuIHp1LgorCitTSUVIRSBBVUNICisgICAgICAgIHRvX2FycmF5KEUpLCB0b19pbnQoRSksIHRvX29iamVjdChFKSwgdG9fc3RydWN0KEUpLCBzcHJpbnRmKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi90b19zdHJ1Y3QgYi9kb2MvZWZ1bi90b19zdHJ1Y3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViMGJmYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3RvX3N0cnVjdApAQCAtMCwwICsxLDQ3IEBACitTWU5PUFNJUworICAgICAgICBtaXhlZCB0b19zdHJ1Y3QobWl4ZWQgKnxtYXBwaW5nIGRhdGEpCisgICAgICAgIG1peGVkIHRvX3N0cnVjdChtaXhlZCAqfG1hcHBpbmcgZGF0YSwgc3RydWN0IHRlbXBsYXRlKQorICAgICAgICBtaXhlZCB0b19zdHJ1Y3Qoc3RydWN0IGRhdGEpCisgICAgICAgIG1peGVkIHRvX3N0cnVjdChzdHJ1Y3QgZGF0YSwgc3RydWN0IHRlbXBsYXRlKQorCitERVNDUklQVElPTgorICAgICAgICBUaGUgZ2l2ZW4gYXJyYXksIG1hcHBpbmcgb3Igc3RydWN0IDxkYXRhPiBpcyByZXR1cm5lZCBhcyBhIHN0cnVjdC4KKyAgICAgICAgSWYgYSA8dGVtcGxhdGU+IHN0cnVjdCBpcyBnaXZlbiwgdGhlIHJldHVybmVkIHN0cnVjdCBpcyBvZiB0aGUgc2FtZQorICAgICAgICB0eXBlLiBXaXRob3V0IGEgdGVtcGxhdGUsIGFuIGFub255bW91cyBzdHJ1Y3QgaXMgcmV0dXJuZWQgaW4gY2FzZSBvZgorICAgICAgICBhcnJheXMgYW5kIG1hcHBpbmdzIGFuZCBpbiBjYXNlIG9mIHN0cnVjdHMgPGRhdGE+IGlzIHJldHVybmVkCisgICAgICAgIHVuY2hhbmdlZC4KKworICAgICAgICBJZiA8ZGF0YT4gaXMgYW4gYXJyYXksIGl0cyBlbGVtZW50cyBhcmUgYXNzaWduZWQgaW4gb3JkZXIgdG8gdGhlCisgICAgICAgIHJlc3VsdGluZyBzdHJ1Y3QuIEZvciBhbiBhbm9ueW1vdXMgc3RydWN0LCBhbGwgZWxlbWVudHMgb2YgPGRhdGE+CisgICAgICAgIGFyZSBhc3NpZ25lZCwgZm9yIGEgdGVtcGxhdGVkIHN0cnVjdCBvbmx5IGFzIG1hbnkgYXMgZml0IGludG8KKyAgICAgICAgdGhlIHN0cnVjdC4KKworICAgICAgICBJZiA8ZGF0YT4gaXMgYSBtYXBwaW5nIGFuZCBubyB0ZW1wbGF0ZSBpcyBnaXZlbiwgdGhlIHJlc3VsdGluZworICAgICAgICBhbm9ueW1vdXMgc3RydWN0IGNvbnRhaW5zIGFsbCBlbGVtZW50cyBmcm9tIDxkYXRhPiB3aXRoIGEgc3RyaW5nCisgICAgICAgIGtleTsgdGhlIGtleSBuYW1lIGlzIHVzZWQgYXMgc3RydWN0IG1lbWJlciBuYW1lLgorCisgICAgICAgIElmIDxkYXRhPiBpcyBhIG1hcHBpbmcgYW5kIGEgdGVtcGxhdGUgaXMgZ2l2ZW4sIHRoZSBzdHJ1Y3QKKyAgICAgICAgbWVtYmVyIG5hbWVzIGFyZSB1c2VkIGFzIGtleXMgZm9yIGxvb2t1cHMgaW4gPGRhdGE+OyB0aGUgZm91bmQKKyAgICAgICAgZGF0YSBpcyBhc3NpZ25lZCB0byB0aGUgc3RydWN0IG1lbWJlcnMuCisKKyAgICAgICAgSWYgPGRhdGE+IGlzIGEgc3RydWN0IGFuZCBhIHRlbXBsYXRlIGlzIGdpdmVuLCBhIHN0cnVjdCBvZiB0aGUgdHlwZQorICAgICAgICBvZiB0ZW1wbGF0ZSBpcyBjcmVhdGVkIGFuZCBhbGwgbWVtYmVycyBmcm9tIDxkYXRhPiBhcmUgY29waWVkIHRvIHRoZQorICAgICAgICBuZXcgc3RydWN0LCB3aGljaCBleGlzdCBpbiBib3RoIHN0cnVjdHMuIFRoaXMgY29udmVyc2lvbiBpcyBvbmx5CisgICAgICAgIGFsbG93ZWQgYmV0d2VlbiBhIHN0cnVjdCBhbmQgb25lIG9mIGl0cyBiYXNlIHN0cnVjdHMgb3IgYSBiYXNlIHN0cnVjdAorICAgICAgICBhbmQgb25lIG9mIGl0cyBjaGlsZHJlbi4gT3RoZXJ3aXNlIGFuIGVycm9yIGlzIHJhaXNlZC4KKworICAgICAgICBOZWl0aGVyIDxkYXRhPiBub3IgPHRlbXBsYXRlPiB3aWxsIGJlIGNoYW5nZWQgaW4gdGhpcyBwcm9jZXNzIC0gdGhlCisgICAgICAgIHJlc3VsdCBpcyBhIG5ldyBzdHJ1Y3QgdmFsdWUuIFRoZSBhY3R1YWwgdmFsdWUgb2YgPHRlbXBsYXRlPiBkb2VzIG5vdAorICAgICAgICBtYXR0ZXIsIG9ubHkgaXRzIHR5cGUuCisKKyAgICAgICAgU2luY2UgdGhlIHJldHVybmVkIHN0cnVjdCBjYW4ndCBiZSBrbm93biBhdCBjb21waWxlIHRpbWUsIHRoZQorICAgICAgICBlZnVuIGlzIGRlY2xhcmVkIHRvIHJldHVybiAnbWl4ZWQnLgorCitISVNUT1JZCisgICAgICAgIEludHJvZHVjZWQgaW4gTERNdWQgMy4zLjI1MCAuCisgICAgICAgIExETXVkIDMuMy4zNDQgYWRkZWQgdGhlIHRlbXBsYXRlIGFyZ3VtZW50LgorICAgICAgICBMRE11ZCAzLjMuNDMzIGFkZGVkIHRoZSBjb252ZXJzaW9uIGZyb20gbWFwcGluZ3MuCisgICAgICAgIExETXVkIDMuMy43MjAgYWRkZWQgdGhlIGNvbnZlcnNpb24gb2Ygc3RydWN0cyBpbnRvIGFub3RoZXIgc3RydWN0LgorCitTRUUgQUxTTworICAgICAgICB0b19hcnJheShFKSwgdG9fc3RyaW5nKEUpLCBta21hcHBpbmcoRSksIHN0cnVjdHMoTFBDKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdHJhY2UgYi9kb2MvZWZ1bi90cmFjZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmVkYzc5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdHJhY2UKQEAgLTAsMCArMSw1NCBAQAorR0VTQ0hVRVRaVAorU1lOT1BTSVMKKyAgICAgICAgI2luY2x1ZGUgPHN5cy90cmFjZS5oPgorCisgICAgICAgIGludCB0cmFjZShpbnQgdHJhY2VmbGFncyk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBTZXR6dCBkaWUgVHJhY2UgRmxhZ3MgdW5kIGxpZWZlcnQgZGllIGFsdGVuIFRyYWNlIEZsYWdzIHp1cnVlY2suCisgICAgICAgIFdlbm4gVHJhY2luZyBlaW5nZXNjaGFsdGV0IGlzdCwgd2lyZCB3YWVocmVuZCBkZXIgQXVzZnVlaHJ1bmcgZWluZQorICAgICAgICBNZW5nZSBJbmZvcm1hdGlvbmVuIGF1c2dlZ2ViZW4uIFp1IHZpZWwgT3V0cHV0IGthbm4gZGllIFZlcmJpbmR1bmcKKyAgICAgICAgbGFobSBsZWdlbiBvZGVyIHNvZ2FyIGRlbiBnYW56ZW4gVHJlaWJlciB6dW0gQWJzdHVyeiBicmluZ2VuLgorCisgICAgICAgIFRyYWNpbmcgZXJmb2xndCBhdWYgZWluZXIgUHJvLVZlcmJpbmR1bmctQmFzaXM6IGplZGVyIGludGVyYWt0aXZlICghKQorICAgICAgICBVc2VyIGthbm4gc2VpbiBlaWdlbmVzIFRyYWNlbGV2ZWwgdW5kIC1wcmFlZml4IGZlc3RsZWdlbi4gSmVkZXIKKyAgICAgICAgZXJoYWVsdCBudXIgZGVuIFRyYWNlb3V0cHV0IGZ1ZXIgZGVuIENvZGUsIGRlciB3YWVocmVuZCBkZXIKKyAgICAgICAgQXVzd2VydHVuZyBlaW5lcyB2b20gVXNlciBlaW5nZWdlYmVuIEtvbW1hbmRvcyBhdXNnZWZ1ZWhydCB3aXJkLgorCisgICAgICAgIERpZSBUcmFjZS1CaXRzIChhdXMgPHRyYWNlLmg+KSBzaW5kOgorCisgICAgICAgICAgICBUUkFDRV9OT1RISU5HICAgICAgICggIDApOiBCZWVuZGV0IGRhcyBUcmFjaW5nCisgICAgICAgICAgICBUUkFDRV9DQUxMICAgICAgICAgICggIDEpOiBUcmFjZXQgYWxsZSBBdWZydWZlIHZvbiBMZnVucworICAgICAgICAgICAgVFJBQ0VfQ0FMTF9PVEhFUiAgICAoICAyKTogVHJhY2V0IGFsbGUgY2FsbF9vdGhlcigpIEF1ZnJ1ZmUKKyAgICAgICAgICAgIFRSQUNFX1JFVFVSTiAgICAgICAgKCAgNCk6IFRyYWNldCBSZXN1bHRhdGUgdm9uIEZ1bmt0aW9uZW4KKyAgICAgICAgICAgIFRSQUNFX0FSR1MgICAgICAgICAgKCAgOCk6IEdpYnQgQXJndW1lbnRlIHVuZCBSZXN1bHRhdGUgdm9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5rdGlvbmVuIGF1cworICAgICAgICAgICAgVFJBQ0VfRVhFQyAgICAgICAgICAoIDE2KTogVHJhY2V0IGFsbGUgYXVzZ2VmdWVocnRlbiBBbndlaXN1bmdlbgorICAgICAgICAgICAgVFJBQ0VfSEVBUlRfQkVBVCAgICAoIDMyKTogVHJhY2V0IGRlbiBIZWFydGJlYXQgQ29kZQorICAgICAgICAgICAgVFJBQ0VfQVBQTFkgICAgICAgICAoIDY0KTogVHJhY2V0IFRyZWliZXItQXBwbGllcworICAgICAgICAgICAgVFJBQ0VfT0JKTkFNRSAgICAgICAoMTI4KTogR2lidCBkZW4gTmFtZW4gZGVzIE9iamVrdGVzIGF1cworCisgICAgICAgIFRSQUNFX0VYRUMgdW5kIFRSQUNFX0hFQVJUX0JFQVQgc29sbHRlbiBuaWNodCB2ZXJ3ZW5kZXQgd2VyZGVuLCB3ZWlsCisgICAgICAgIHNpZSBtYXNzaXZlbiBPdXRwdXQgdmVydXJzYWNoZW4uIFRSQUNFX09CSk5BTUUgc29sbHRlIG5pY2h0IHZlcndlbmRldAorICAgICAgICB3ZXJkZW4sIHdlbm4gYmVrYW5udCBpc3QsIHdlbGNoZXMgT2JqZWt0IGdldHJhY2V0IHdpcmQuCisKKyAgICAgICAgRGllIE1hc3Rlci1MZnVuIHZhbGlkX3RyYWNlKCkgd2lyZCBtaXQgKCJ0cmFjZSIsIHRyYWNlZmxhZ3MpCisgICAgICAgIGF1ZmdlcnVmZW4sIHVtIGRpZSBFcmxhdWJuaXMgZnVlciBkaWUgTnV0enVuZyB2b24gdHJhY2UoKSB6dSBlcmhhbHRlbi4KKworQkVJU1BJRUwKKyAgICAgICAgb2JqZWN0IG9iajsKKyAgICAgICAgc3RyaW5nIHByZWZpeDsKKyAgICAgICAgb2JqPWZpbmRfcGxheWVyKCJ0aG9tYXMiKTsKKyAgICAgICAgcHJlZml4PW9iamVjX25hbWUob2JqKTsKKyAgICAgICAgcHJlZml4PXByZWZpeFsxLi5zdHJsZW4ocHJlZml4KS0xXTsgIC8qIGVudGZlcm50IGRlbiBQcmFlZml4ICIvIiAqLworICAgICAgICB0cmFjZXByZWZpeChwcmVmaXgpOworICAgICAgICAvKiBWb24gaGllciBhbiB3aXJkIG51ciBDb2RlIGltIE9iamVrdCBzdGQvcGxheWVyIzY5IGdldHJhY2V0ICovCisgICAgICAgIHRyYWNlKFRSQUNFX0NBTEx8VFJBQ0VfQ0FMTF9PVEhFUnxUUkFDRV9SRVRVUk58VFJBQ0VfQVJHUyk7CisgICAgICAgIC4uLgorICAgICAgICB0cmFjZShUUkFDRV9OT1RISU5HKTsKKworQUVOREVSVU5HRU4KKyAgICAgICAgTERNdWQgMy4yLjkgdWViZXJnaWJ0IGF1Y2ggPHRyYWNlZmxhZ3M+IGFuIHZhbGlkX3RyYWNlKCkKKworU0lFSEUgQVVDSAorICAgICAgICB0cmFjZXByZWZpeChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdHJhY2VwcmVmaXggYi9kb2MvZWZ1bi90cmFjZXByZWZpeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjQ2ZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdHJhY2VwcmVmaXgKQEAgLTAsMCArMSwyNSBAQAorU1lOT1BTSVM6CisgICAgICAgIHN0cmluZyB0cmFjZXByZWZpeChzdHJpbmcgcHJlZml4KQorICAgICAgICBzdHJpbmcgdHJhY2VwcmVmaXgoaW50IGR1bW15KQorCitERVNDUklQVElPTjoKKyAgICAgICAgSWYgY2FsbGVkIHdpdGggYSBzdHJpbmcsIG9ubHkgb2JqZWN0cyBtYXRjaGluZyB0aGlzIHByZWZpeCB3aWxsCisgICAgICAgIGJlIHRyYWNlZC4gVGhlIHN0cmluZyBtdXN0IG5vdCBjb250YWluIGEgbGVhZGluZyAiLyIgYmVjYXVzZQorICAgICAgICB0aGUgb2JqZWN0IG5hbWVzIGFyZSBzdG9yZWQgaW50ZXJuYWxseSB3aXRob3V0IGl0LiBJZiBjYWxsZWQKKyAgICAgICAgd2l0aCBhIG51bWJlciwgdGhlIHRyYWNlcHJlZml4IHdpbGwgYmUgaWdub3JlZCBhbmQgYWxsIG9iamVjdHMKKyAgICAgICAgd2lsbCBiZSB0cmFjZWQuIFJldHVybnMgdGhlIGxhc3QgdHJhY2VwcmVmaXggb3IgMCBpZiB0aGVyZQorICAgICAgICB3YXNuJ3QgYW55LgorCitFWEFNUExFOgorICAgICAgICBvYmplY3Qgb2JqOworICAgICAgICBzdHJpbmcgcHJlZml4OworICAgICAgICBvYmogPSBmaW5kX3BsYXllcigiZGVlcHRob3VnaHQiKTsKKyAgICAgICAgcHJlZml4ID0gb2JqZWN0X25hbWUob2JqKTsKKyAgICAgICAgcHJlZml4ID0gcHJlZml4WzEuLnN0cmxlbihwcmVmaXgpLTFdOyAvKiBjdXQgb2ZmIHRoZSBsZWFkaW5nICIvIiAqLworICAgICAgICB0cmFjZXByZWZpeChwcmVmaXgpOworICAgICAgICB0cmFjZSgxfDJ8NHw4KTsKKyAgICAgICAgLi4uCisgICAgICAgIHRyYWNlKDApOworICAgICAgICAKK1NFRSBBTFNPOgorICAgICAgICB0cmFjZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdHJhbnNmZXIgYi9kb2MvZWZ1bi90cmFuc2ZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDEzZjAyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdHJhbnNmZXIKQEAgLTAsMCArMSwyNSBAQAorVkVSQUxURVQKK1NZTk9QU0lTCisgICAgICAgIGludCB0cmFuc2ZlcihvYmplY3QgaXRlbSwgb2JqZWN0IGRlc3QpCisKK0JFU0NIUkVJQlVORworICAgICAgICBEaWVzZSBGdW5rdGlvbiBleGlzdGllcnQgbGVkaWdsaWNoIGF1cyBLb21wYXRpYmlsaXRhZXRzZ3J1bmRlbiwgdW5kCisgICAgICAgIGRhbm4gYXVjaCBudXIsIHdlbm5uIGRlciBEcml2ZXIgbWl0IFVTRV9ERVBSRUNBVEVEIGtvbXBpbGllcnQgd2lyZC4KKworICAgICAgICBEYXMgT2JqZWN0IDxpdGVtPiB3aXJkIGluIE9iamVrdCA8ZGVzdD4gYmV3ZWd0LiBWZXJzY2hpZWRlbmUgVGVzdHMKKyAgICAgICAgd2VyZGVuIGR1cmNoZ2VmdWVocnQsIHVuZCBkYXMgUmVzdWx0YXQgYmVzY2hyZWlidCBkZW4gKE1pc3MpRXJmb2xnOgorCisgICAgICAgIDA6IEVyZm9sZy4KKyAgICAgICAgMTogWnUgc2Nod2VyIGZ1ZXIgPGRlc3Q+CisgICAgICAgIDI6IEthbm4gbmljaHQgZmFsbGVuIGdlbGFzc2VuIHdlcmRlbi4KKyAgICAgICAgMzogS2FubiBuaWNodCBhdXMgc2VpbmVtICBCZWhhZWx0ZXIgZ2Vub21tZW4gd2VyZGVuLgorICAgICAgICA0OiA8aXRlbT4ga2FubiBpbiBrZWluZW4gQmVoYWVsdGVyIGdlc3RlY2t0IHdlcmRlbi4KKyAgICAgICAgNTogPGRlc3Q+IGFremVwdGllcnQgPGl0ZW0+IG5pY2h0LgorICAgICAgICA2OiA8aXRlbT4ga2FubiBuaWNodCBhdWZnZW5vbW1lbiB3ZXJkZW4uCisKKyAgICAgICAgRGllIEZ1bmt0aW9uIHJ1ZnQgZGllIGxmdW5zIGFkZF93ZWlnaHQoKSwgZHJvcCgpLCBnZXQoKSwKKyAgICAgICAgcHJldmVudF9pbnNlcnQoKSwgYWRkX3dlaWdodCgpLCB1bmQgY2FuX3B1dF9hbmRfZ2V0KCkgbmFjaCBCZWRhcmYuLgorCitTSUVIRSBBVUNICisgICAgICAgICBtb3ZlX29iamVjdChFKSwgZHJvcChBKSwgZ2V0KEEpLCBwcmV2ZW50X2luc2VydChBKSwKKyAgICAgICAgIGNhbl9wdXRfYW5kX2dldChBKSwgYWRkX3dlaWdodChBKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdHJhbnNwb3NlX2FycmF5IGIvZG9jL2VmdW4vdHJhbnNwb3NlX2FycmF5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZTJhNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi90cmFuc3Bvc2VfYXJyYXkKQEAgLTAsMCArMSwyMiBAQAorU1lOT1BTSVM6CisJbWl4ZWQgKnRyYW5zcG9zZV9hcnJheSAobWl4ZWQgKmFycik7CisKK0RFU0NSSVBUSU9OOgorCXRyYW5zcG9zZV9hcnJheSAoICh7ICh7MSwyLDN9KSwgKHthLGIsY30pIH0pICkKKwkJCT09ICh7ICh7MSxhfSksICh7MixiKX0sICh7MyxjfSkgfSkgCisKKwl0cmFuc3Bvc2VfYXJyYXkoKSBhcHBsaWVkIHRvIGFuIGFsaXN0IHJlc3VsdHMgaW4gYW4gYXJyYXkgb2YKKwkoeyBrZXksIGRhdGEgfSkgcGFpcnMsIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byB1c2Ugc29ydF9hcnJheSgpCisJb3IgZmlsdGVyKCkgb24gdGhlIGFsaXN0LgorCitFWEFNUExFOgorCXNvcnRfYXJyYXkodHJhbnNwb3NlX2FycmF5KCAoeyBtX2luZGljZXMobWFwKSwgbV92YWx1ZXMobWFwKSB9KSApLAorCQkgICBsYW1iZGEoICh7ICdhLCAnYiB9KSwKKwkJCSAgICh7ICMnPCwgKHsgIydbLCAnYSwgMCB9KSwKKwkJCQkgICAoeyAjJ1ssICdiLCAwfSkgfSkgKSApCisKKwlUaGUgZ2l2ZW4gbWFwcGluZyAnbWFwJyBpcyByZXR1cm5lZCBhcyBhbiBhcnJheSBvZiAKKwkoeyBrZXksCWRhdGEgfSkgIHBhaXJzLCBzb3J0ZWQgYnkgdGhlIGtleXMuCisKK1NFRSBBTFNPOgorCWFsaXN0cyhMUEMpLCBzb3J0X2FycmF5KEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi90cmltIGIvZG9jL2VmdW4vdHJpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTI1YTgyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdHJpbQpAQCAtMCwwICsxLDMzIEBACitTWU5PUFNJUworICAgICAgICAjaW5jbHVkZSA8c3lzL3N0cmluZ3MuaD4KKworICAgICAgICBzdHJpbmcgdHJpbShzdHJpbmcgc3RyKTsKKyAgICAgICAgc3RyaW5nIHRyaW0oc3RyaW5nIHN0ciwgaW50IHdoZXJlKTsKKyAgICAgICAgc3RyaW5nIHRyaW0oc3RyaW5nIHN0ciwgaW50IHdoZXJlLCBzdHJpbmcgY2hhcik7CisKK0JFU0NIUkVJQlVORworICAgICAgICBFbnRmZXJudCBhbGxlIHZvcmF1c2dlaGVuZGVuIHVuZCBhYnNjaGxpZXNzZW5kZW4gWmVpY2hlbiA8Y2hhcj4gaW4KKyAgICAgICAgZWluZW0gU3RyaW5nIDxzdHI+IHVuZCBnaWJ0IGRlbiBuZXVlbiBTdHJpbmcgenVydWVjay4KKworICAgICAgICA8Y2hhcj4ga2FubiBlbnR3ZWRlciBlaW4gb2RlciBtZWhyZXJlIFplaWNoZW4gc2Vpbi4gV2lyZCA8Y2hhcj4gbmljaHQKKyAgICAgICAgYW5nZWdlYmVuLCB3aXJkIHN0YW5kYXJkbWFlc3NpZyBkZXIgTGVlcnNjaGxhZyAiIFx0IiBnZW51dHp0LgorCisgICAgICAgIE1pdCA8d2hlcmU+IGthbm4gYW5nZWdlYmVuIHdlcmRlbiwgd28gWmVpY2hlbiBlbnRmZXJudCB3ZXJkZW46CisKKyAgICAgICAgICAgIFRSSU1fTEVGVCAgICgxKTogICAgICAgIGVudGZlcm50IGFsbGUgdm9yYXVzZ2VoZW5kZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFplaWNoZW4gPGNoYXI+CisgICAgICAgICAgICBUUklNX1JJR0hUICAoMik6ICAgICAgICBlbnRmZXJudCBhbGxlIGFic2NobGllc3NlbmRlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWmVpY2hlbiA8Y2hhcj4KKyAgICAgICAgICAgIFRSSU1fQk9USCAgICgzIG9kZXIgMCk6IGVudGZlcm50IHNvd29obCB2b3JhdXNnZWhlbmRlIGFscyBhdWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNjaGxpZXNzZW5kZSBaZWljaGVuIDxjaGFyPgorCitCRUlTUElFTAorICAgICAgICB0cmltKCIgICAgMTIzNCAgICAiKTsgICAgICAgICAgICAgICAgICAgICAgIGVyZ2lidDogIjEyMzQiCisgICAgICAgIHRyaW0oIiAgICAxMjM0ICAgICIsIFRSSU1fUklHSFQpOyAgICAgICAgICAgZXJnaWJ0OiAiICAgIDEyMzQiCisgICAgICAgIHRyaW0oIiAgICAxMjM0ICAgICIsIFRSSU1fQk9USCwgIiAxIik7ICAgICAgZXJnaWJ0OiAiMjM0IgorCitBRU5ERVJVTkdFTgorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjIuNworCitTSUVIRSBBVUNICisgICAgICAgIHJlZ3JlcGxhY2UoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3R5cGVvZiBiL2RvYy9lZnVuL3R5cGVvZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTFiYjk2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdHlwZW9mCkBAIC0wLDAgKzEsMTMgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCB0eXBlb2YobWl4ZWQgYXJnKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEdpYnQgZWluZW4gQ29kZSBmdWVyIGRlbiBUeXAgZGVzIEFyZ3VtZW50cyA8YXJnPi4gRGllIFR5cGVuIHNpbmQKKyAgICAgICAgZGVmaW5pZXJ0IGluIDxzeXMvbHBjdHlwZXMuaD4KKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gMy4yQDYzCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgZ2V0X3R5cGVfaW5mbyhFKSwgaW50cChFKSwgb2JqZWN0cChFKSwgZmxvYXRwKEUpLCBwb2ludGVycChFKSwKKyAgICAgICAgY2xvc3VyZXAoRSksIHN5bWJvbHAoRSksIHN0cmluZ3AoRSksIG1hcHBpbmdwKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi91bmJvdW5kX2xhbWJkYSBiL2RvYy9lZnVuL3VuYm91bmRfbGFtYmRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNGIxYjUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi91bmJvdW5kX2xhbWJkYQpAQCAtMCwwICsxLDI3IEBACitTWU5PUFNJUworICAgICAgICBjbG9zdXJlIHVuYm91bmRfbGFtYmRhKG1peGVkICphcmcsIG1peGVkIGNvZGUpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgRXJ6ZXVndCBlaW5lIExhbWJkYS1DbG9zdXJlLCBkaWUgbmljaHQgYW4gZWluIE9iamVrdCBnZWJ1bmRlbiBpc3QsCisgICAgICAgIGVudHNwcmVjaGVuZCBlaW5lciBMYW1iZGEtRnVua3Rpb24gaW4gTElTUC4KKworICAgICAgICBEaWUgQ2xvc3VyZSBrYW5uIGtlaW5lIFJlZmVyZW56IHp1IGdsb2JhbGVuIFZhcmlhYmxlbiBlbnRoYWx0ZW4uCisgICAgICAgIExmdW4tQ2xvc3VyZXMgd2VyZGVuIHVudmVyYWVuZGVydCBpbiBkaWUgQ2xvc3VyZSBlaW5nZWJ1bmRlbiwgZGEgZXMKKyAgICAgICAga2VpbiBVcnNwcnVuZ3NvYmpla3QgZnVlciBkaWVzZSBDbG9zdXJlIGdpYnQuCisKKyAgICAgICAgQmV2b3IgZGllIENsb3N1cmUgYXVmZ2VydWZlbiB3ZXJkZW4ga2FubiwgbXVzcyBzaWUgYW4gZWluIE9iamVrdAorICAgICAgICBnZWJ1bmRlbiB3ZXJkZW4uIE5vcm1hbGUgT2JqZWt0ZSBrb2VubmVuIENsb3N1cmVzIG51ciBhbiBzaWNoIHNlbGJzdAorICAgICAgICBiaW5kZW4sIGRhcyBCaW5kZW4gYW4gYW5kZXJlIE9iamVrdGUgZXJ6ZXVndCBlaW5lIFNjaHV0enZlcmxldHp1bmcuCisKKyAgICAgICAgRGVyIFB1bmt0IGlzdCwgZGFzcyBwcmV2aW91c19vYmplY3QoKSBmdWVyIEF1ZnJ1ZmUgaW5uZXJoYWxiIGRlcgorICAgICAgICBDbG9zdXJlIGF1ZiBkYXMgT2JqZWt0IHplaWd0LCBkYXMgYmluZF9sYW1iZGEoKSBhdWZnZXJ1ZmVuIGhhdCwgdW5kCisgICAgICAgIGFsbGUgb2JqZWt0LSBvZGVyIHVpZC1iYXNpZXJ0ZW4gU2ljaGVyaGVpdHNjaGVja3MgYmV6aWVoZW4gc2ljaAorICAgICAgICBhdWYgamVuZXMgT2JqZWt0LgorCisgICAgICAgIERhcyBlcnN0ZSBBcmd1bWVudCA8KmFyZz4gaXN0IGVpbiBBcnJheSwgZGFzIGRpZSBBcmd1bWVudGUgKFN5bWJvbGUpCisgICAgICAgIGVudGhhZWx0LCBkaWUgYW4gZGllIENsb3N1cmUgdWViZXJnZWJlbiB3ZXJkZW4sIHdlbm4gZGllc2UgbWl0CisgICAgICAgIGZ1bmNhbGwoKSBvZGVyIGFwcGx5KCkgYXVzZ2V3ZXJ0ZXQgd2lyZC4gRGFzIHp3ZWl0ZSBBcmd1bWVudCA8Y29kZT4KKyAgICAgICAgZW50aGFlbHQgZGVuIENvZGUgZGVyIENsb3N1cmUuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgY2xvc3VyZXMoTFBDKSwgbGFtYmRhKEUpLCBhcHBseShFKSwgZnVuY2FsbChFKSwgYmluZF9sYW1iZGEoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3VuaXF1ZV9hcnJheSBiL2RvYy9lZnVuL3VuaXF1ZV9hcnJheQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTBjNTZlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdW5pcXVlX2FycmF5CkBAIC0wLDAgKzEsNDcgQEAKK1NZTk9QU0lTCisgICAgICAgIG1peGVkIHVuaXF1ZV9hcnJheShvYmplY3QgKm9iaiwgc3RyaW5nfGNsb3N1cmUgZnVuKQorICAgICAgICBtaXhlZCB1bmlxdWVfYXJyYXkob2JqZWN0ICpvYmosIHN0cmluZ3xjbG9zdXJlIGZ1biwgbWl4ZWQgc2tpcCkKKyAgICAgICAgbWl4ZWQgdW5pcXVlX2FycmF5KG9iamVjdCAqb2JqLCBzdHJpbmd8Y2xvc3VyZSBmdW4sIG1peGVkIGV4dHJhLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbWl4ZWQgc2tpcCkKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEdydXBwaWVydCBhbGxlIE9iamVrdGUgYXVzIDwqb2JqPiwgZnVlciBkaWUgZGllIEZ1bmt0aW9uIDxmdW4+CisgICAgICAgIGRlbiBnbGVpY2hlbiBXZXJ0IGxpZWZlcnQuIFdlbm4gPCpvYmo+IGV0d2FzIGFuZGVyZXMgYWxzIE9iamVrdGUKKyAgICAgICAgZW50aGFlbHQsIHdlcmRlbiBkaWVzZSBpZ25vcmllcnQuCisgICAgICAgIAorICAgICAgICBJc3QgZGllIEZ1bmt0aW9uIG1pdCBOYW1lbiBhbmdlZ2ViZW4sIHdpcmQgc2llIGluIGplZGVtIE9iamVrdAorICAgICAgICBpbiA8Km9iaj4gZWlubWFsIGF1ZmdlcnVmZW4uIFd1cmRlbiA8ZXh0cmE+IEFyZ3VtZW50ZQorICAgICAgICBnZWdlYmVuLCB3ZXJkZW4gZGllc2UgYW4gZGllIEZ1bmt0aW9uIGJlaSBqZWRlbSBBdWZydWYgYWxzCisgICAgICAgIFBhcmFtZXRlciB1ZWJlcmdlYmVuLgorCisgICAgICAgIElzdCBkaWUgRnVua3Rpb24gYWxzIENsb3N1cmUgYW5nZWdlYmVuLCB3aXJkIHNpZSBmdWVyIGplZGVzIE9iamVrdAorICAgICAgICBpbiA8Km9iaj4gZWlubWFsIGF1ZmdlcnVmZW4sIHdvYmVpIGRhcyBPYmpla3QgYWxzIGVyc3RlcyBBcmd1bWVudAorICAgICAgICB1ZWJlcmdlYmVuIHdpcmQsIGdlZm9sZ3Qgdm9uIGV0d2FpaWdlbiA8ZXh0cmE+IEFyZ3VtZW50ZW4uCisKKyAgICAgICAgV2lyZCBlaW4gQXJndW1lbnQgPHNraXA+IGFuZ2VnZWJlbiAoYmVpIFZlcndlbmR1bmcgdm9uIDxleHRyYT4KKyAgICAgICAgQXJndW1lbnRlbiBtdXNzIGRpZXMgZ2VzY2hlaGVuKSwgdW5kIGVudHNwcmljaHQgPHNraXA+IGRlbQorICAgICAgICBSZXN1bHRhdCB2b24gPHNlcGFyYXRvcj4gZnVlciBlaW4gRWxlbWVudCBhdXMgPCpvYmo+LCBzbyB3aXJkCisgICAgICAgIGRpZXNlcyBFbGVtZW50IG5pY2h0IGluIGRhcyBSZXN1bHRhdCB2b24gdW5pcXVlX2FycmF5KCkKKyAgICAgICAgdWViZXJub21tZW4uCisgICAgICAgIAorICAgICAgICBEYXMgUmVzdWx0YXQgdm9uIHVuaXF1ZV9hcnJheSgpIGhhdCBkaWUgRm9ybToKKworICAgICAgICAgICAgKHsgKHtzYW1lMToxLCBzYW1lMToyLCAuLi4gc2FtZTE6bn0pLAorICAgICAgICAgICAgICAgKHtzYW1lMjoxLCBzYW1lMjoyLCAuLi4gc2FtZTI6bn0pLAorICAgICAgICAgICAgICAgKHtzYW1lbToxLCBzYW1lbToyLCAuLi4gc2FtZW06bn0pIH0pCisKK0JFSVNQSUVMCisgICAgICAgIFVtIGVpbiBBcnJheSB2b24gQXJyYXlzIHp1IGVyaGFsdGVuLCBkYXMgYWxsZSBCZW51dHplciwgbmFjaCBMZXZlbAorICAgICAgICBncnVwcGllcnQsIGVudGhhZWx0OgorCisgICAgICAgICAgICBtaXhlZCAqYXJyOworICAgICAgICAgICAgYXJyPXVuaXF1ZV9hcnJheSh1c2VycygpLCAiX3F1ZXJ5X2xldmVsIiwgLTEpOworCisgICAgICAgIEdvZXR0ZXIgaGFiZW4gZWluZW4gTGV2ZWwgdm9uIC0xLiBTaWUgd2VyZGVuIG5pY2h0IGluIGFyciBhdWZnZW5vbW1lbiwKKyAgICAgICAgd2VpbCA8c2tpcD4gPT0gLTEuCisKK1NJRUhFIEFVQ0gKKyAgICAgIEFycmF5czogICAgICAgZmlsdGVyKEUpLCBtYXAoRSkKKyAgICAgIE9iamVrdGFycmF5czogZmlsdGVyX29iamVjdHMoRSksIG1hcF9vYmplY3RzKEUpCisgICAgICBNYXBwaW5nczogICAgIGZpbHRlcihFKSwgbWFwKEUpLCBmaWx0ZXJfaW5kaWNlcyhFKSwgbWFwX2luZGljZXMoRSkKKwpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdW5ta21hcHBpbmcgYi9kb2MvZWZ1bi91bm1rbWFwcGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmVlY2NiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdW5ta21hcHBpbmcKQEAgLTAsMCArMSwyNyBAQAorU1lOT1BTSVMKKyAgICAgICAgKm1peGVkIHVubWttYXBwaW5nKG1hcHBpbmcgbWFwKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIFdhbmRlbHQgZGFzIE1hcHBpbmcgPG1hcD4gaW4gZWluIEFycmF5IHZvbiBBcnJheXMgYXVzLCBkYXMgYWxsZSBLZXlzCisgICAgICAgIHVuZCBXZXJ0ZSB2b24gPG1hcD4gZW50aGFlbHQgdW5kIGdpYnQgZGllc2VzIEFycmF5IHp1cnVlY2suCisKKyAgICAgICAgRGFzIFJlc3VsdGF0IHZvbiB1bm1rbWFwcGluZygpIGhhdCBkaWUgRm9ybSAoeyBrZXlzW10sIGRhdGEwW10sCisgICAgICAgIGRhdGExW10gLi4uIH0pLCB3b2JlaSBrZXlzW10gZWluIEFycmF5IGFsbGVyIEtleXMgaXN0LCBkYXRhMFtdIGVpbgorICAgICAgICBBcnJheSBtaXQgYWxsZW4gV2VydGVuIGF1cyBkZXIgZXJzdGVuIFNwYWx0ZSwgZGF0YTFbXSBlaW4gQXJyYXkgbWl0CisgICAgICAgIGFsbGVuIFdlcnRlbiBhdXMgZGVyIHp3ZWl0ZW4gU3BhbHRlIGV0Yy4gRGFzIGhlaXNzdCwgZGFzcyBkaWUKKyAgICAgICAgV2VydGUgdm9uIGtleVt4XSBpbiBkYXRhMFt4XSwgZGF0YTFbeF0gdXN3LiBnZXNwZWljaGVydCBzaW5kLgorCisgICAgICAgIHVubWttYXBwaW5nKCkgaXN0IGRpZSBVbWtlaHJmdW5rdGlvbiB2b24gbWttYXBwaW5nKCksIHNvZGFzcyBnaWx0OgorCisgICAgICAgICAgICBhcHBseSgjJ21rbWFwcGluZywgdW5ta21hcHBpbmcobSkpID09IG0KKworQkVJU1BJRUwKKyAgICAgICAgbWFwcGluZyBtID0gKFsgMToxMDsyMCwgMjoxMTsyMSBdKTsKKyAgICAgICAgdW5ta21hcHBpbmcobSkgZXJnaWJ0OiAoeyAoezEsIDJ9KSAsICh7MTAsIDExfSkgLCAoezIwLCAyMX0pIH0pCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi42LgorCitTSUVIRSBBVUNICisgICAgICAgIG1hcHBpbmdzKExQQyksIG1hcHBpbmdwKEUpLCBtX2luZGljZXMoRSksIG1fdmFsdWVzKEUpLCBtX2RlbGV0ZShFKSwKKyAgICAgICAgc2l6ZW9mKEUpLCB3aWR0aG9mKEUpLgpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdW5xdW90ZSBiL2RvYy9lZnVuL3VucXVvdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAwMDA2MAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3VucXVvdGUKQEAgLTAsMCArMSwxNyBAQAorU1lOT1BTSVMKKyAgICAgICAgcXVvdGVkX2FycmF5IHVucXVvdGUocXVvdGVkX2FycmF5IGFycik7CisgICAgICAgIHN0cmluZ3xzeW1ib2wgdW5xdW90ZShzeW1ib2wgc3ltKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEVudGZlcm50IGVpbiBRdW90ZSB2b24gZWluZW0gZ2VxdW90ZXRlbiBBcnJheSBvZGVyIFN5bWJvbC4gV2VubiBkYXMKKyAgICAgICAgbGV0enRlIFF1b3RlIHZvbiBlaW5lbSBTeW1ib2wgZW50ZmVybnQgd2lyZCwgZW50c3RlaHQgZWluIFN0cmluZy4KKworQkVJU1BJRUxFOgorICAgICAgICB1bnF1b3RlKCdmb28pOyAgICAgICAgICAgICAgZXJnaWJ0OiAiZm9vIgorICAgICAgICB1bnF1b3RlKCAnKHsxLDIsM30pICk7ICAgICAgZXJnaWJ0OiAoezEsMiwzfSkKKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjkuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgcXVvdGUoRSksIHN5bWJvbHAoRSkKZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3Vuc2hhZG93IGIvZG9jL2VmdW4vdW5zaGFkb3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg4ZDVmZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3Vuc2hhZG93CkBAIC0wLDAgKzEsMjEgQEAKK0ZVTktUSU9OCisgICAgIHZvaWQgdW5zaGFkb3coKQorCitCRVNDSFJFSUJVTkcKKyAgICAgRGFzIGF1ZnJ1ZmVuZGUgT2JqZWt0IHdpcmQgYWxzIFNoYWRvdyB2b24gYWxsZW4gYW5kZXJlbiBPYmpla3RlbgorICAgICBlbnRmZXJudCwgZGVuZW4gZXMgdWViZXJnZXdvcmZlbiB3YXIuIFdlbm4gZGVtIGF1ZnJ1ZmVuZGVuIE9iamVrdAorICAgICBzZWxic3QgZWluIFNoYWRvdyB1ZWJlcmdld29yZmVuIHdhciwgd2lyZCBkaWVzZXIgZW50ZmVybnQuCisgICAgIE1hbiBzb2xsdGUgZGllc2UgKHMpZWZ1biBydWZlbiwgYmV2b3IgbWFuIGRlbiBTY2hhdHRlbiB6ZXJzdG9lcnQuCisKK0JFSVNQSUVMRQorICAgICAvLyBCIGJlc2NoYXR0ZXQgQQorICAgICB2b2lkIGI6OnN0b3Bfc2hhZG93aW5nKCkgeworICAgICAgIHVuc2hhZG93KCk7CisgICAgIH0KKworU0lFSEUgQVVDSAorICAgICBHZW5lcmVsbDoJICAgICBzaGFkb3coRSkKKyAgICAgUmVjaHRlOgkgICAgIHF1ZXJ5X2FsbG93X3NoYWRvdyhNKSwgcXVlcnlfcHJldmVudF9zaGFkb3coTCkKKyAgICAgSW5mb3JtYXRpb25lbjogIHF1ZXJ5X3NoYWRvd2luZyhFKQorCisyMC4wOC4yMDA5LCBaZXNzdHJhCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi91cHBlcl9jYXNlIGIvZG9jL2VmdW4vdXBwZXJfY2FzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzFmZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdXBwZXJfY2FzZQpAQCAtMCwwICsxLDEyIEBACitTWU5PUFNJUworICAgICAgICBzdHJpbmcgdXBwZXJfY2FzZShzdHJpbmcgc3RyKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIFdhbmRlbHQgYWxsZSBaZWljaGVuIGluIDxzdHI+IGluIEdyb3NzYnVjaHN0YWJlbiB1bSB1bmQgZ2lidCBkYXMKKyAgICAgICAgUmVzdWx0YXQgenVydWVjay4KKworQkVJU1BJRUwKKyAgICAgICAgdXBwZXJfY2FzZSgiSGV5YSEiKSAgICAgZXJnaWJ0OiAiSEVZQSEiCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgY2FwaXRhbGl6ZShFKSwgbG93ZXJfY2FzZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdXNlcnMgYi9kb2MvZWZ1bi91c2VycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGI0YWUzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdXNlcnMKQEAgLTAsMCArMSw1IEBACitTWU5PUFNJUworICAgICAgICAqb2JqZWN0IHVzZXJzKCk7CisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGVpbiBBcnJheSwgZGFzIGFsbGUgaW50ZXJha3RpdmVuIEJlbnV0emVyIGVudGhhZWx0LgpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdXRpbWUgYi9kb2MvZWZ1bi91dGltZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjIxOGFmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vdXRpbWUKQEAgLTAsMCArMSwyMiBAQAorU1lOT1BTSVMKKyAgICAgICAgKmludCB1dGltZSgpCisKK0JFU0NIUkVJQlVORworICAgICAgICBMaWVmZXJ0IGVpbiBBcnJheSBkZXIgWmVpdCwgZGllIHNlaXQgZGVtIDAxLiBKYW51YXIgMTk3MCwKKyAgICAgICAgMDA6MDA6MDAgR01UIHZlcmdhbmdlbiBpc3QsIG1pdCBHZW5hdWlna2VpdCBpbiBNaWtyb3Nla3VuZGVuCisgICAgICAgICgwLjAwMDAwMSBTZWt1bmRlbikuCisKKyAgICAgICAgWnVydWVjayBnZWdlYmVuIHdpcmQgZWluIEFycmF5IGRlciBGb3JtOgorICAgICAgICAgICAgaW50WzBdOiBBbnphaGwgU2VrdW5kZW4gc2VpdCBCZWdpbm4gZGVyIFplaXRyZWNobnVuZworICAgICAgICAgICAgaW50WzFdOiBBbnphaGwgTWlrcm9zZWt1bmRlbiBpbm5lcmhhbGIgZGVyIGFrdHVlbGxlbiBTZWt1bmRlCisKK0JFSVNQSUVMCisgICAgICAgIHdyaXRlKGN0aW1lKHV0aW1lKCkpKyJcbiIpOworCisgICAgICAgIEdpYnQgZGFzIGFrdHVlbGxlIERhdHVtIHVuZCBaZWl0IHp1cnVlY2suCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi45LgorCitTSUVIRSBBVUNICisgICAgICAgIGN0aW1lKEUpLCBnbXRpbWUoRSksIGxvY2FsdGltZShFKSwgdGltZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdmFyaWFibGVfZXhpc3RzIGIvZG9jL2VmdW4vdmFyaWFibGVfZXhpc3RzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYmQ4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi92YXJpYWJsZV9leGlzdHMKQEAgLTAsMCArMSwyOSBAQAorU1lOT1BTSVMKKyAgICAgICAgI2luY2x1ZGUgPGZ1bmN0aW9ubGlzdC5oPgorCisgICAgICAgIHN0cmluZyB2YXJpYWJsZV9leGlzdHMoc3RyaW5nIHN0ciBbLCBpbnQgZmxhZ3NdKTsKKyAgICAgICAgc3RyaW5nIHZhcmlhYmxlX2V4aXN0cyhzdHJpbmcgc3RyLCBvYmplY3Qgb2JqIFssIGludCBmbGFnc10pOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgU3VjaHQgZWluZSBWYXJpYWxiZSA8c3RyPiBpbiB0aGlzX29iamVjdCgpIG9kZXIgKGZhbGxzIGFuZ2VnZWJlbikKKyAgICAgICAgaW0gT2JqZWt0IDxvYmo+LgorCisgICAgICAgIERhcyBSZXN1bHRhdCBpc3QgZGVyIE5hbWUgZGVzIFByb2dyYW1tcywgaW4gZGVtIGRpZSBWYXJpYWJsZSBkZWZpbmllcnQKKyAgICAgICAgaXN0LiBEYXMga2FubiBlbnR3ZWRlciBvYmplY3RfbmFtZShvYmopIHNlaW4gb2RlciBkZXIgTmFtZSBlaW5lcworICAgICAgICBnZWVyYnRlbiBQcm9ncmFtbXMuIFdlbm4gc2ljaCBkZXIgVHJlaWJlciBuaWNodCBpbSBDb21wYXQtTW9kdXMKKyAgICAgICAgYmVmaW5kZXQsIGJlZ2lubnQgZGVyIHp1cnVlY2sgZ2VsaWVmZXJ0ZSBOYW1lIGltbWVyIG1pdCAnLycuCisKKyAgICAgICAgV2lyZCA8ZmxhZ3M+IE5BTUVfSElEREVOIGdlc2V0enQsIHNvIGxpZWZlcnQgdmFyaWFibGVfZXhpc3RzKCkgYXVjaAorICAgICAgICBJbmZvcm1hdGlvbmVuIHVlYmVyIFZhcmlhYmxlbiB2b20gVHlwICJzdGF0aWMiIHVuZCAicHJvdGVjdGVkIiBpbgorICAgICAgICBhbmRlcmVuIE9iamVrdGVuLiBFcyBpc3QgbmljaHQgbW9lZ2xpY2gsIEluZm9ybWF0aW9uZW4gdWViZXIgInByaXZhdGUiCisgICAgICAgIGRla2xhcmllcnRlIFZhcmlhYmxlbiB6dSBlcmhhbHRlbi4KKworICAgICAgICBXaXJkIGRpZSBWYXJpYWJsZSBuaWNodCBnZWZ1bmRlbiAod2VpbCBzaWUgbmljaHQgZXhpc3RpZXJ0IG9kZXIgd2VpbAorICAgICAgICBzaWUgZnVlciBkYXMgYXVmcnVmZW5kZSBPYmpla3QgbmljaHQgc2ljaHRiYXIgc2luZCksIHdpcmQgMCB6dXJ1ZWNrCisgICAgICAgIGdlbGllZmVydC4KKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjEwLgorCitTSUVIRSBBVUNICisgICAgICAgIGZ1bmN0aW9uX2V4aXN0cyhFKSwgdmFyaWFibGVfbGlzdChFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vdmFyaWFibGVfbGlzdCBiL2RvYy9lZnVuL3ZhcmlhYmxlX2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjczYjM3NwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3ZhcmlhYmxlX2xpc3QKQEAgLTAsMCArMSw2MCBAQAorR0VTQ0hVRVRaVAorU1lOT1BTSVMKKyAgICAgICAgI2luY2x1ZGUgPHN5cy9mdW5jdGlvbmxpc3QuaD4KKyAgICAgICAgI2luY2x1ZGUgPHN5cy9scGN0eXBlcy5oPgorCisgICAgICAgICptaXhlZCB2YXJpYWJsZV9saXN0KG9iamVjdCBvYmosIGludCBmbGFncyA9IFJFVFVSTl9GVU5DVElPTl9OQU1FKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZWluIEFycmF5IG1pdCBJbmZvcm1hdGlvbmVuIHVlYmVyIGRpZSBWYXJpYWJsZW4gdm9uIDxvYmo+LgorICAgICAgICBGdWVyIGplZGUgVmFyaWFibGUgd2VyZGVuIDEgYmlzIDQgV2VydGUgaW4gZGllc2VtIEFycmF5IGdlc3BlaWNoZXJ0LAorICAgICAgICBhYmhhZW5naWcgdm9uIDxmbGFncz4uIERpZSBSZXN1bHRhdGUgd2VyZGVuIGluIGRpZXNlciBSZWloZW5mb2xnZQorICAgICAgICBpbSBBcnJheSBhYmdlc3BlaWNoZXJ0OgorICAgICAgICAgIC0gZGVyIE5hbWUgZGVyIFZhcmlhYmxlbgorICAgICAgICAgIC0gZGllIEZsYWdzIGRlciBWYXJpYWJsZW4gKHNpZWhlIHdlaXRlciB1bnRlbikKKyAgICAgICAgICAtIGRlciBSdWVja2dhYmV0eXAgKGdlbWFlc3MgbXVkbGliL3N5cy9scGN0eXBlcy5oKQorICAgICAgICAgIC0gZGVyIFdlcnQgZGVyIFZhcmlhYmxlbgorCisgICAgICAgIDxvYmo+IGthbm4gYWxzIE9iamVrdCBvZGVyIGFscyBEYXRlaW5hbWVuIHVlYmVyZ2ViZW4gd2VyZGVuLiBJbQorICAgICAgICB6d2VpdGVuIEZhbGwgdmVyc3VjaHQgdmFyaWFibGVfbGlzdCgpIG5pY2h0LCBkYXMgT2JqZWt0IHZvciBkZXIKKyAgICAgICAgVmVyYXJiZWl0dW5nIHp1IGxhZGVuLgorCisgICAgICAgIFdlbm4gPG9iaj4gbmljaHQgZGFzIGF1ZnJ1ZmVuZGUgT2JqZWt0IGlzdCB1bmQgZGVyIFdlcnQgZGVyIFZhcmlhYmxlbgorICAgICAgICBhYmdlZnJhZ3Qgd2lyZCwgZXJ6ZXVndCBkaWVzIGVpbmUgU2NodXR6dmVybGV0enVuZyAoInZhcmlhYmxlX2xpc3QiLAorICAgICAgICA8b2JqPikuCisKKyAgICAgICAgTWl0IDxmbGFncz4gd2lyZCBmZXN0Z2VsZWd0LCB3ZWxjaGUgSW5mb3JtYXRpb25lbiB1ZWJlciB3ZWxjaGUKKyAgICAgICAgVmFyaWFibGVuIGFiZ2VmcmFndCB3ZXJkZW4uIEZvbGdlbmRlIEZsYWdzIGF1cyA8c3lzL2Z1bmN0aW9ubGlzdC5oPgorICAgICAgICBrb2VubmVuIG1pdCBiaW5hZXJlbSBPZGVyIGtvbWJpbmllcnQgd2VyZGVuOgorCisgICAgICAgIEF1c3dhaGwgZGVyIGdlc2FtbWVsdGVuIEluZm9ybWF0aW9uOgorICAgICAgICAgICAgUkVUVVJOX0ZVTkNUSU9OX05BTUUgICAgbGllZmVydCBkZW4gTmFtZW4gZGVyIFZhcmlhYmxlbgorICAgICAgICAgICAgUkVUVVJOX0ZVTkNUSU9OX0ZMQUdTICAgbGllZmVydCBkaWUgRmxhZ3MgZGVyIFZhcmlhYmxlbiAocy4gdW50ZW4pCisgICAgICAgICAgICBSRVRVUk5fRlVOQ1RJT05fVFlQRSAgICBsaWVmZXJ0IGRlbiBSdWVja2dhYmV0eXAKKyAgICAgICAgICAgIFJFVFVSTl9WQVJJQUJMRV9WQUxVRSAgIGxpZWZlcnQgZGVuIFdlcnQgZGVyIFZhcmlhYmxlbgorCisgICAgICAgIEF1c3dhaGwgZGVyIFZhcmlhYmxlbiwgZGllIGF1c2dld2VydGV0IHdlcmRlbjoKKyAgICAgICAgICAgIE5BTUVfSU5IRVJJVEVEICAgICAgICBzY2hsaWVzc3QgZ2VlcmJ0ZSBWYXJpYWJsZW4gYXVzCisgICAgICAgICAgICBUWVBFX01PRF9TVEFUSUMgICAgICAgc2NobGllc3N0ICJzdGF0aWMiIGRla2xhcmllcnRlIFZhcmlhYmxlbiBhdXMKKyAgICAgICAgICAgIFRZUEVfTU9EX05PU0FWRSAgICAgICBzY2hsaWVzc3QgIm5vc2F2ZSIgZGVrbGFyaWVydGUgVmFyaWFibGVuIGF1cworICAgICAgICAgICAgVFlQRV9NT0RfUFJJVkFURSAgICAgIHNjaGxpZXNzdCAicHJpdmF0ZSIgZGVrbGFyaWVydGUgVmFyaWFibGVuIGF1cworICAgICAgICAgICAgVFlQRV9NT0RfUFJPVEVDVEVEICAgIHNjaGxpZXNzdCAicHJvdGVjdGVkIiBkZWtsYXJpZXJ0ZSBWYXJpYWJsZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXMKKyAgICAgICAgICAgIE5BTUVfSElEREVOICAgICAgICAgICBlbnRoYWVsdCBWYXJpYWJsZW4sIGRpZSBnZWVyYnQgd3VyZGVuLgorCisgICAgICAgIERpZSBGbGFncyBkZXIgVmFyaWFibGVuIGtvZW5uZW4gZGllIEF1c3dhaGwtRmxhZ3MgZW50aGFsdGVuIHVuZAorICAgICAgICB6dXNhZXp0bGljaCBmb2xnZW5kZSBXZXJ0ZToKKyAgICAgICAgICAgIFRZUEVfTU9EX1ZJUlRVQUwgICAgICBkaWUgVmFyaWFibGUgd3VyZGUgdmlydHVlbGwgZ2VlcmJ0CisgICAgICAgICAgICBUWVBFX01PRF9OT19NQVNHSyAgICAgZGllIFZhcmlhYmxlIGlzdCAibm9tYXNrIiBkZWtsYXJpZXJ0CisgICAgICAgICAgICBUWVBFX01PRF9QVUJMSUMgICAgICAgZGllIFZhcmlhYmxlIGlzdCAicHVibGljIiBkZWtsYXJpZXJ0CisKKyAgICAgICAgQWxsIGRpZXNlIEZsYWdzIHNpbmQgaW4gbXVkbGliL3N5cy9mdW5jdGlvbmxpc3QuaCBkZWZpbmllcnQgdW5kCisgICAgICAgIHNvbGx0ZW4gYW4gZWluZW4gYWxsZ2VtZWluIHp1Z2FlbmdsaWNoZW4gUGxhdHoga29waWVydCB3ZXJkZW4uCisgICAgICAgIERpZSBSdWVja2dhYmV3ZXJ0ZSBzaW5kIGluIG11ZGxpYi9zeXMvbHBjdHlwZXMuaCBkZWZpbmllcnQsIGRpZQorICAgICAgICBhdWNoIGluIGRpZSBNdWRsaWIga29waWVydCB3ZXJkZW4gc29sbHRlbi4KKworQUVOREVSVU5HRU4KKyAgICAgICAgRWluZ2VmdWVocnQgaW4gTERNdWQgMy4yLjEwCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgaW5oZXJpdF9saXN0KEUpLCBmdW5jdGlvbmxpc3QoRSksIHZhcmlhYmxlX2V4aXN0cyhFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vd2Fsa19tYXBwaW5nIGIvZG9jL2VmdW4vd2Fsa19tYXBwaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOTZmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi93YWxrX21hcHBpbmcKQEAgLTAsMCArMSw4OCBAQAord2Fsa19tYXBwaW5nKEUpCisKK0ZVTktUSU9OOgorICAgICAgICB2b2lkIHdhbGtfbWFwcGluZyhtYXBwaW5nIG0sIHN0cmluZyBmdW4gWywgbWl4ZWQgZXh0cmEsIC4uLl0pCisgICAgICAgIHZvaWQgd2Fsa19tYXBwaW5nKG1hcHBpbmcgbSwgc3RyaW5nIGZ1biwgc3RyaW5nfG9iamVjdCBvYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBtaXhlZCBleHRyYSwuLi4pCisgICAgICAgIHZvaWQgd2Fsa19tYXBwaW5nKG1hcHBpbmcgbSwgY2xvc3VyZSBjbCwgbWl4ZWQgZXh0cmEsLi4uKQorCitQQVJBTUVURVI6CisgICAgIG0JCS0gZHVyY2h6dWdlaGVuZGVzIE1hcHBpbmcKKyAgICAgZnVuL2NsCS0genUgcnVmZW5kZSBNZXRob2RlL0Nsb3N1cmUKKyAgICAgb2IJCS0gT2JqZWt0L0RhdGVpbmFtZSwgYW4gZGVtIE1ldGhvZGUgZ2VydWZlbiB3ZXJkZW4gc29sbAorICAgICBleHRyYQktIHdlaXRlcmUgUGFyYW1ldGVyIGZ1ZXIgTWV0aG9kZS9DbG9zdXJlCisKK0JFU0NIUkVJQlVORzoKKyAgICAgUnVmdCBkaWUgTWV0aG9kZSBmdWVyIGplZGVuIEVpbnRyYWcgaW0gTWFwcGluZzoKKyAgICAgIG9iLT5mdW5jKGtleSwgdmFsdWUxLCAuLi4sIHZhbHVlTiwgZXh0cmEsLi4uKQorICAgICBiZXppZWh1bmdzd2Vpc2UgZnVlaHJ0IGRpZSBDbG9zdXJlIGZ1ZXIgamVkZW4gZGllc2VyIEVpbnRyYWVnZSBhdXM6CisgICAgICBmdW5jYWxsKGNsLCBrZXksIHZhbHVlMSwgLi4uLCB2YWx1ZU4sIGV4dHJhLC4uLikKKworICAgICBEaWUgU2NobHVlc3NlbCB3ZXJkZW4gYWxzIFdlcnQgdWViZXJnZWJlbiB1bmQgZGllIGRhenVnZWhvZXJpZ2VuIFdlcnRlCisgICAgIHBlciBSZWZlcmVueiwgZGllc2Uga29lbm5lbiBzb21pdCBhbHNvIGluIGRlciBGdW5rdGlvbi9DbG9zdXJlIGdlYWVuZGVydAorICAgICB3ZXJkZW4uCisKKworICAgICBWZXJ3ZW5kdW5nIHZvbiBNZXRob2RlbjoKKwlXZW5uIGJlaSBkZXIgQW5nYWJlIHZvbiAnZnVuJyBrZWluIE9iamVrdCAnb2InIGluIEZvcm0gZWluZXMgU3RyaW5ncworCW9kZXIgT2JqZWt0cyBhbmdlZ2ViZW4gd2lyZCwgd2lyZCB0aGlzX29iamVjdCgpIGFuZ2Vub21tZW4uCisKKyAgICAgVmVyd2VuZHVuZyB2b24gQ2xvc3VyZXM6CisJRXMga29lbm5lbiBzb3dvaGwgTGZ1bi1DbG9zdXJlcyBhbHMgYXVjaCBMYW1iZGEtQ2xvc3VyZXMgdmVyd2VuZGV0CisJd2VyZGVuLiBMZnVuLUNsb3N1cmVzIGtvZW5uZW4sIHdlbm4gaW0gc2VsYmVuIE9iamVrdCB2b3JoYW5kZW4gYXVjaAorCSdwcml2YXRlJyBvZGVyL3VuZCAnc3RhdGljJyBkZWtsYXJpZXJ0IHNlaW4sIG11ZXNzZW4gYWJlciB6dSBkZW0KKwlaZWl0cHVua3QgZGVyIFZlcndlbmR1bmcgYmVrYW5udCBzZWluIChGdW5rdGlvbnNwcm90b3R5cGVuIGJlbnV0emVuKS4KKworQkVJU1BJRUxFOgorICAgICAvLyBMaXN0ZSBtaXQgU3BpZWxlcm4gZHVyY2hnZWhlbiAuLi4KKyAgICAgbWFwcGluZyB4PShbIFsvaHVtYW46bGlhZmFyXTogIDIwLAorCQkgIFsvZHdhcmY6bWVzaXJpaV06IDUwLAorCQkgIFsvZWxmOnphcm5peWFdOiAgIDQwLAorCQkgIFsvZmVsaW5lOnR1cmJvXTogIDMwXSk7CisKKyAgICAgLy8gLi4uIHVuZCBXZXJ0ZSBhZW5kZXJuOgorICAgICB2b2lkIGFkZF92YWwob2JqZWN0IGtleSwgaW50IHZhbCwgaW50IGFkZCkgeworICAgICAgIGlmKGtleS0+SW5GaWdodCgpKQorICAgICAgICAgdmFsKz1hZGQ7CisgICAgICAgZWxzZQorICAgICAgICAgdmFsLT1hZGQ7CisgICAgIH0KKworICAgICAvLyB2ZXJzY2hpZWRlbmUgQXVmcnVmYXJ0ZW4sIGlkZW50aXNjaGVzIFJlc3VsdGF0OgorICAgICB3YWxrX21hcHBpbmcoeCwgImFkZF92YWwiLCAwLCAxMCk7CisgICAgIHdhbGtfbWFwcGluZyh4LCAiYWRkX3ZhbCIsIHRoaXNfb2JqZWN0KCksIDEwCisgICAgIHdhbGtfbWFwcGluZyh4LCAiYWRkX3ZhbCIsICIvcGxheWVycy9qb2YvYWRkaWVyb2JqZWt0bWl0bWV0aG9kZSIsIDEwKTsKKworICAgICB3YWxrX21hcHBpbmcoeCwgIydhZGRfdmFsLCAxMCk7CisKKworQWVRVUlWQUxFTlpDT0RFIChuaWNodCBlbXBmb2hsZW4sIG51ciB6dW0gVmVyc3RhZW5kbmlzISk6CisgICAgIC8vIHNvIHJpY2h0aWcgYWVxdWl2YWxlbnQgd2lyZCBlcyBudXIgbWl0IGVpbmVyIENsb3N1cmUgaGllcgorICAgICBpbnQgaSwgd2lkdGg7CisgICAgIG1hcHBpbmcgaW5wdXQ7CisgICAgIG1peGVkICppbmRleCwgKnBhcmFtOworCisgICAgIHdpZHRoPWdldF90eXBlX2luZm8oaW5wdXQpWzFdOworICAgICBwYXJhbT1hbGxvY2F0ZSh3aWR0aCk7CisgICAgIGluZGV4PW1faW5kaWNlcyhpbnB1dCk7CisgICAgIGk9c2l6ZW9mKGluZGV4KTsKKyAgICAgd2hpbGUoaS0tKSB7CisgICAgICAgaj13aWR0aDsKKyAgICAgICB3aGlsZShqLS0gPiAxKQorICAgICAgICAgcGFyYW1bal09aW5wdXRbaW5kZXhbaV0sal07CisgICAgICAgalswXT1pbmRleFtpXTsKKworICAgICAgIGFwcGx5KGNsLCBwYXJhbSk7CisgICAgICAgLy8gZnVuKGluZGV4W2ldLCBpbnB1dFtpbmRleFtpXSwwXSwgaW5wdXRbaW5kZXhbaV0sMV0sIC4uLik7CisgICAgICB9CisKK1NJRUhFIEFVQ0g6CisgICAgIEFycmF5czoJCWZpbHRlcihFKSwgbWFwKEUpCisgICAgIE9iamVrdGFycmF5czoJZmlsdGVyX29iamVjdHMoRSksIG1hcF9vYmplY3RzKEUpCisgICAgIE1hcHBpbmdzOgkJZmlsdGVyX2luZGljZXMoRSksIG1hcF9pbmRpY2VzKEUpCisKKyAgICAgU29uc3RpZ2VzOgkJbV9jb250YWlucyhFKQorCQkJbWVtYmVyKCkKKwkJCW1faW5kaWNlcyhFKSwgbV92YWx1ZXMoRSkKKworMjAuSmFuIDIwMDUgR2xvaW5zb24KZGlmZiAtLWdpdCBhL2RvYy9lZnVuL3dpZHRob2YgYi9kb2MvZWZ1bi93aWR0aG9mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYWM1OTkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi93aWR0aG9mCkBAIC0wLDAgKzEsMTYgQEAKK1NZTk9QU0lTCisgICAgICAgIGludCB3aWR0aG9mKG1hcHBpbmcgbWFwKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIExpZWZlcnQgZGllIEFuemFobCBWYWx1ZXMgcHJvIEtleSBpbSBNYXBwaW5nIDxtYXA+LiBXZW5uIDxtYXA+IDAgaXN0LAorICAgICAgICBpc3QgZGFzIFJlc3VsdGF0IDAuCisKK0JFSVNQSUVMCisgICAgICAgIG1hcHBpbmcgbWFwID0gKFsiZm9vIiA6IDE7Ml0pOworICAgICAgICB3aWR0aG9mKG1hcCkgICAgZXJnaWJ0IDIuCisKK0FFTkRFUlVOR0VOCisgICAgICAgIEVpbmdlZnVlaHJ0IGluIExETXVkIDMuMi42CisKK1NJRUhFIEFVQ0gKKyAgICAgICAgc2l6ZW9mKEUpLCBta21hcHBpbmcoRSksIG1fcmVhbGxvY2F0ZShFKSwgbV92YWx1ZXMoRSksIHVubWttYXBwaW5nKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi93aXpsaXN0X2luZm8gYi9kb2MvZWZ1bi93aXpsaXN0X2luZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0ZWM5YQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3dpemxpc3RfaW5mbwpAQCAtMCwwICsxLDM4IEBACitTWU5PUFNJUworICAgICAgICAjaW5jbHVkZSA8d2l6bGlzdC5oPgorCisgICAgICAgIG1peGVkICogd2l6bGlzdF9pbmZvKCkKKworREVTQ1JJUFRJT04KKyAgICAgICAgUmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBpbnRlcmVzdGluZyBlbnRyaWVzIG9mIHRoZSB3aXpsaXN0LgorICAgICAgICBOZWVkcyB0byBiZSBwcml2aWxlZ2VkIGJ5IHRoZSBtYXN0ZXIgb2JqZWN0LgorCisgICAgICAgIFRoZSByZXN1bHQgaXMgYW4gYXJyYXkgd2l0aCBvbmUgZW50cnkgZm9yIGV2ZXJ5IHdpemFyZCAodWlkKS4KKyAgICAgICAgRXZlcnkgZW50cnkgaXMgYW4gYXJyYXkgaXRzZWxmOgorCisgICAgICAgICAgc3RyaW5nIHdbV0xfTkFNRV0gICAgICAgID0gTmFtZSBvZiB0aGUgd2l6YXJkLgorICAgICAgICAgIGludCAgICB3W1dMX0NPTU1BTkRTXSAgICA9IFdlaWdodGVkIG51bWJlciBvZiBjb21tYW5kcyBleGVjdXRlIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBvZiB0aGlzIHdpemFyZC4KKyAgICAgICAgICBpbnQgICAgd1tXTF9DT1NUXSwKKyAgICAgICAgICBpbnQgICAgd1tXTF9HSUdBQ09TVF0gICAgICAgPSBXZWlnaHRlZCBzdW0gb2YgZXZhbF9jb3N0cy4KKyAgICAgICAgICBpbnQgICAgd1tXTF9UT1RBTF9DT1NUXSwKKyAgICAgICAgICBpbnQgICAgd1tXTF9UT1RBTF9HSUdBQ09TVF0gPSBUb3RhbCBzdW0gb2YgZXZhbF9jb3N0cy4KKyAgICAgICAgICBpbnQgICAgd1tXTF9IRUFSVF9CRUFUU10gICA9IFdlaWdodGVkIGNvdW50IG9mIGhlYXJ0X2JlYXRzLgorICAgICAgICAgIGludCAgICB3W1dMX0NBTExfT1VUXSAgICAgID0gUmVzZXJ2ZWQgZm9yIGNhbGxfb3V0KCkgKHVudXNlZCB5ZXQpLgorICAgICAgICAgIGludCAgICB3W1dMX0FSUkFZX1RPVEFMXSAgID0gVG90YWwgc2l6ZSBvZiBhcnJheXMgaW4gZWxlbWVudHMuCisgICAgICAgICAgaW50ICAgIHdbV0xfTUFQUElOR19UT1RBTF0gPSBUb3RhbCBzaXplIG9mIG1hcHBpbmdzIGluIGVsZW1lbnRzLgorICAgICAgICAgIGludCAgICB3W1dMX1NUUlVDVF9UT1RBTF0gID0gVG90YWwgc2l6ZSBvZiBzdHJ1Y3RzIGluIGVsZW1lbnRzLgorICAgICAgICAgIG1peGVkICB3W1dMX0VYVFJBXSAgICAgICAgID0gRXh0cmEgd2l6bGlzdC1pbmZvIGlmIHNldC4KKworICAgICAgICBUaGUgJ3dlaWdodGVkJyBlbnRyaWVzIGRlY2F5IGV2ZXJ5IGhvdXIgYnkgMTAlLgorCitISVNUT1JZCisgICAgICAgIExETXVkIDMuMi4xMCBzcGxpdCB0aGUgb2xkIFdMX0VWQUxfQ09TVCBpbnRvIFdMX0NPU1QgYW5kIFdMX0dJR0FDT1NUCisgICAgICAgICAgdG8gYWNjb21vZGF0ZSBmb3IgbG9uZ2VyIHVwdGltZXMsIGFuZCBpbnRyb2R1Y2VkCisgICAgICAgICAgV0xfVE9UQUxfQ09TVC9XTF9UT1RBTF9HSUdBQ09TVC4KKyAgICAgICAgTERNdWQgMy4zLjE3NCBhZGRlZCBXTF9NQVBQSU5HX1RPVEFMLgorICAgICAgICBMRE11ZCAzLjMuPyBhZGRlZCBXTF9TVFJVQ1RfVE9UQUwuCisKK1NFRSBBTFNPCisgICAgICAgIHByaXZpbGVnZV92aW9sYXRpb24oTSksIHNldF9leHRyYV93aXppbmZvX3NpemUoRSkKKyAgICAgICAgZ2V0X2V4dHJhX3dpemluZm8oRSksIHNldF9leHRyYV93aXppbmZvKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi93cml0ZSBiL2RvYy9lZnVuL3dyaXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMDQxYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi93cml0ZQpAQCAtMCwwICsxLDM3IEBACitTWU5PUFNJUzoKKyAgICAgICAgdm9pZCB3cml0ZShtaXhlZCBtc2cpCisKK0RFU0NSSVBUSU9OOgorICAgICAgICBXcml0ZSBvdXQgc29tZXRoaW5nIHRvIHRoZSBjdXJyZW50IHBsYXllci4gV2hhdCBleGFjdGx5IHdpbGwKKyAgICAgICAgYmUgcHJpbnRlZCBpbiB0aGUgZW5kIGRlcGVuZHMgb2YgdGhlIHR5cGUgb2YgbXNnLgorICAgICAgICBQbGVhc2UgbWluZDogaWYgdGhlcmUgaXMgbm8gY3VycmVudCBwbGF5ZXIgKHRoaXNfcGxheWVyKCkpLCB0aGUKKyAgICAgICAgZnVuY3Rpb24gd2lsbCBvdXRwdXQgZGlyZWN0bHkgdG8gdGhlIGRyaXZlciBkZWJ1ZyBsb2cuIFBsZWFzZSBjaGVjaworICAgICAgICBiZWZvcmUhCisgICAgICAgIAorICAgICAgICBJZiBpdCBpcyBhIHN0cmluZyBvciBhIG51bWJlciB0aGVuIGp1c3QgcHJpbnRzIGl0IG91dC4KKyAgICAgICAgCisgICAgICAgIElmIGl0IGlzIGFuIG9iamVjdCB0aGVuIHRoZSBvYmplY3Qgd2lsbCBiZSBwcmludGVkIGluIHRoZQorICAgICAgICBmb3JtOiAiT0JKKCIrb2JqZWN0X25hbWUoKG9iamVjdCltaXgpKyIpIgorICAgICAgICAKKyAgICAgICAgSWYgaXQgaXMgYW4gYXJyYXkganVzdCAiPEFSUkFZPiIgd2lsbCBiZSBwcmludGVkLgorICAgICAgICAKKyAgICAgICAgSWYgdGhlIHdyaXRlKCkgZnVuY3Rpb24gaXMgaW52b2tlZCBieSBhIGNvbW1hbmQgb2YgYW4gbGl2aW5nCisgICAgICAgIGJ1dCBub3QgaW50ZXJhY3RpdmUgb2JqZWN0IGFuZCB0aGUgZ2l2ZW4gYXJndW1lbnQgaXMgYSBzdHJpbmcKKyAgICAgICAgdGhlbiB0aGUgbGZ1biBjYXRjaF90ZWxsKCkgb2YgdGhlIGxpdmluZyB3aWxsIGJlIGludm9rZWQgd2l0aAorICAgICAgICB0aGUgbWVzc2FnZSBhcyBhcmd1bWVudC4KKworRVhBTVBMRVM6CisgICAgICAgIHdyaXRlKCJIZWxsbyB3b3JsZCFcbiIpOworICAgICAgICAKKyAgICAgICAgSnVzdCBwcmludCBvdXQgYSBzdHJpbmcuCisgICAgICAgIAorICAgICAgICB3cml0ZSh0aGlzX3BsYXllcigpKTsKKyAgICAgICAgCisgICAgICAgIFRoaXMgd2lsbCBwcmludCBvdXQgc29tZXRoaW5nIGxpa2UgIk9CSihzdGQvcGxheWVyIzEyMzQpIi4KKyAgICAgICAgCisgICAgICAgIHdyaXRlKCAoeyAiYmx1YiIgfSkgKTsKKyAgICAgICAgCisgICAgICAgIFdpbGwgcHJpbnQgb3V0ICI8QVJSQVk+Ii4KKyAgICAgICAgCitTRUUgQUxTTzoKKyAgICAgICAgc2F5KEUpLCB0ZWxsX29iamVjdChFKSwgdGVsbF9yb29tKEUpLCBzaG91dChFKSwgY2F0Y2hfdGVsbChMKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vd3JpdGVfYnl0ZXMgYi9kb2MvZWZ1bi93cml0ZV9ieXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjc1NDg0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4vd3JpdGVfYnl0ZXMKQEAgLTAsMCArMSwxMSBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IHdyaXRlX2J5dGVzKHN0cmluZyBmaWxlLCBpbnQgc3RhcnQsIHN0cmluZyBzdHIpOworCitCRVNDSFJFSUJVTkcKKyAgICAgICAgU2NocmVpYnQgZGVuIFN0cmluZyA8c3RyPiBpbnMgRmlsZSA8ZmlsZT4gdW5kIHVlYmVyc2NocmVpYnQgZGFiZWkgZGllCisgICAgICAgIGFsdGVuIEJ5dGVzIGFiIFBvc2l0aW9uIDxzdGFydD4uIFdlbm4gPHN0YXJ0PiBlaW5lIG5lZ2F0aXZlIFphaGwgaXN0LAorICAgICAgICB3ZXJkZW4gZGllIFplaWNoZW4gdm9tIEVuZGUgdm9uIDxmaWxlPiBhbiBnZXphZWhsdC4gd3JpdGVfYnl0ZXMoKQorICAgICAgICBsaWVmZXJ0IDEgYmVpIEVyZm9sZywgMCBiZWkgTWlzc2VyZm9sZy4KKworU0lFSEUgQVVDSAorICAgICAgICBzYXZlX29iamVjdChFKSwgd3JpdGVfZmlsZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4vd3JpdGVfZmlsZSBiL2RvYy9lZnVuL3dyaXRlX2ZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc5ZmI2YgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3dyaXRlX2ZpbGUKQEAgLTAsMCArMSwxNCBAQAorU1lOT1BTSVMKKyAgICAgICAgaW50IHdyaXRlX2ZpbGUoc3RyaW5nIGZpbGUsIHN0cmluZyBzdHIpOworICAgICAgICBpbnQgd3JpdGVfZmlsZShzdHJpbmcgZmlsZSwgc3RyaW5nIHN0ciwgaW50IGZsYWdzKTsKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIEhhZW5ndCBkZW4gU3RyaW5nIDxzdHI+IGFuIGRpZSBEYXRlaSA8ZmlsZT4gYW4uIExpZWZlcnQgMSBiZWkgRXJmb2xnLAorICAgICAgICAwIGJlaSBNaXNzZXJmb2xnLgorCisgICAgICAgIElmIDxmbGFncz4gPSAxLCBkYW5uIHdpcmQgZGllIERhdGVpIHZvciBkZW0gZWlnZW50bGljaGVuCisgICAgICAgIFNjaHJlaWJlbiBnZWxvZXNjaHQ7IGRhcyAnYW5oYWVuZ2VuJyB3aXJkIHNvIGVmZmVrdGl2IGVpbgorICAgICAgICAndWViZXJzY2hyZWliZW4nLiBEZWZhdWx0d2VydCBmdWVyIDxmbGFncz4gaXN0IDAuCisKK1NJRUhFIEFVQ0gKKyAgICAgICAgZmlsZV9zaXplKEUpLCBjYXQoRSksIHdyaXRlX2J5dGVzKEUpLCByZWFkX2ZpbGUoRSksIHJtKEUpCmRpZmYgLS1naXQgYS9kb2MvZWZ1bi94bWxfZ2VuZXJhdGUgYi9kb2MvZWZ1bi94bWxfZ2VuZXJhdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1MDZlMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9lZnVuL3htbF9nZW5lcmF0ZQpAQCAtMCwwICsxLDc3IEBACitPUFRJT05BTAorRVhQRVJJTUVOVEFMCitTWU5PUFNJUworICAgICAgICAjaW5jbHVkZSA8eG1sLmg+CisKKyAgICAgICAgc3RyaW5nIHhtbF9nZW5lcmF0ZShtaXhlZCAqeG1sKQorCitCRVNDSFJFSUJVTkcKKyAgICAgICAgV2FuZGVsdCBkYXMgdWViZXJnZWJlbmUgPHhtbD4tQXJyYXkgaW4gZWluZW4gWE1MLWtvbmZvcm1lbiBTdHJpbmcgdW0sCisgICAgICAgIHNvZmVybiBtb2VnbGljaC4gRGVyIDx4bWw+LVBhcmFtZXRlciBtdXNzIGZvbGdlbmRlIFN0cnVrdHVyIGhhYmVuOgorCisgICAgICAgIEVyIG11c3MgVGFnLUFycmF5cyBtaXQgZm9sZ2VuZGVuIGRyZWkgRWxlbWVudGVuIGVudGhhbHRlbjoKKworICAgICAgICAgICAgc3RyaW5nIFhNTF9UQUdfTkFNRQorICAgICAgICAgICAgICAgIERlciBOYW1lIGRlcyBYTUwtVGFncy4KKworICAgICAgICAgICAgbWFwcGluZyBYTUxfVEFHX0FUVFJJQlVURVMKKyAgICAgICAgICAgICAgICBBbGxlIEF0dHJpYnV0ZSBkaWVzZXMgWE1MLVRhZ3MgYWxzIGVpbiBNYXBwaW5nIG1pdCBkZW0KKyAgICAgICAgICAgICAgICBqZXdlaWxpZ2VuIEF0dHJpYnV0bmFtZW4gYWxzIFNjaGx1ZXNzZWwgdW5kIGRlbiBBdHRyaWJ1dHdlcnQKKyAgICAgICAgICAgICAgICBhbHMgZGVyIGRhenVnZWhvZXJpZ2UgU3RyaW5nLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEZhbGxzIGVpbiBYTUwtVGFnIGtlaW5lIEF0dHJpYnV0ZSBlbnRoYWVsdCwgc28gaXN0IGRpZXNlcworICAgICAgICAgICAgICAgIEVsZW1lbnQgMC4KKworICAgICAgICAgICAgbWl4ZWQgKiBYTUxfVEFHX0NPTlRFTlRTCisgICAgICAgICAgICAgICAgRGVyIEluaGFsdCBkZXMgWE1MLVRhZ3MgYWxzIGVpbiBBcnJheS4gRGllc2VzIEFycmF5IGthbm4KKyAgICAgICAgICAgICAgICBlbnR3ZWRlciBTdHJpbmdzIChyZWluZSBaZWljaGVuZGF0ZW4pIG9kZXIgQXJyYXlzCisgICAgICAgICAgICAgICAgYWxzIHdlaXRlcmUgVGFncyBlbnRoYWx0ZW4sIHdlbGNoZSB3aWVkZXJ1bSBkaWVzZQorICAgICAgICAgICAgICAgIGRyZWkgRWxlbWVudGUgYmVzaXR6ZW4uCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgRmFsbHMgZGFzIFhNTC1UYWcgbmljaHRzIGVudGhhZWx0LCBzbyBpc3QgZGllc2VzIEVsZW1lbnQgMC4KKworICAgICAgICBGYWxscyBkZXIgdWViZXJnZWJlIFBhcmFtZXRlciBuaWNodCBkaWVzZSBTdHJ1a3R1ciBiZXNpdHp0LCBzbyB3aXJkCisgICAgICAgIGVpbmUgRmVobGVybWVsZHVuZyBhdXNnZWdlYmVuLiBBbnNvbnN0ZW4gaXN0IGVpbiBndWVsdGlnZXIgWE1MLVN0cmluZworICAgICAgICBkYXMgUmVzdWx0YXQuCisKKyAgICAgICAgRGllc2UgRnVua3Rpb24gaXN0IG51ciB2ZXJmdWVnYmFyLCB3ZW5uIGRlciBEcml2ZXIgbWl0IElrc2VtZWwtCisgICAgICAgIFVudGVyc3R1ZXR6dW5nIGNvbXBpbGllcnQgd3VyZGUuIEluIGRpZXNlbSBGYWxsIGlzdCBkYXMgTWFrcm8KKyAgICAgICAgX19YTUxfRE9NX18gZGVmaW5pZXJ0LgorCitCRUlTUElFTAorICAgICAgICB4bWxfZ2VuZXJhdGUoKHsgImFiYyIsIDAsIDAgfSkpIC0+ICI8YWJjLz4iCisgICAgICAgIHhtbF9nZW5lcmF0ZSgoeyAiYWJjIiwgKFsgInh5eiIgOiAiY2RlIiBdKSwgMCB9KSkgLT4gIjxhYmMgeHl6PSJjZGUiLz4iCisKKyAgICAgICAgbWl4ZWQqIHhtbCA9ICh7ICJidWNoIgorICAgICAgICAgICAgICAgICAgICAgICwgKFsgInNwcmFjaGUiIDogImRldXRzY2giIF0pCisgICAgICAgICAgICAgICAgICAgICAgLCAoeyAoeyAidGl0ZWwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAoeyAiRGllcyBpc3QgZGVyIFRpdGVsIiB9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAsICh7ICJrYXBpdGVsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgKHsgIkRpZXMgaXN0IGVpbiBLYXBpdGVsIiB9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAsICh7ICJrYXBpdGVsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgKHsgIkRhcyBzb2xsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICh7ICJiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICh7ICJmZXR0Z2VkcnVja3QiIH0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIiBzZWluLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgIH0pCisKKyAgICAgICAgeG1sX2dlbmVyYXRlKHhtbCkKKyAgICAgICAgICAgIC0+ICI8YnVjaCBzcHJhY2hlPSJkZXV0c2NoIj48dGl0ZWw+RGllcyBpc3QgZGVyIFRpdGVsPC90aXRlbD4iCisgICAgICAgICAgICAgICAiPGthcGl0ZWw+RGllcyBpc3QgZWluIEthcGl0ZWw8L2thcGl0ZWw+PGthcGl0ZWw+RGFzIHNvbGwgIgorICAgICAgICAgICAgICAgIjxiPmZldHRnZWRydWNrdDwvYj4gc2Vpbi48L2thcGl0ZWw+PC9idWNoPiIKKworR0VTQ0hJQ0hURQorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjMuNzE4LgorCitTSUVIRSBBVUNICisgICAgICAgIHhtbF9wYXJzZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4veG1sX3BhcnNlIGIvZG9jL2VmdW4veG1sX3BhcnNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NDljOWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZWZ1bi94bWxfcGFyc2UKQEAgLTAsMCArMSw3OCBAQAorT1BUSU9OQUwKK0VYUEVSSU1FTlRBTAorU1lOT1BTSVMKKyAgICAgICAgI2luY2x1ZGUgPHhtbC5oPgorCisgICAgICAgIG1peGVkKiB4bWxfcGFyc2Uoc3RyaW5nIHhtbCkKKworQkVTQ0hSRUlCVU5HCisgICAgICAgIFBhcnN0IGRlbiBhbmdlZ2ViZW5lbiBTdHJpbmcgPHhtbD4gYWxzIFhNTC4gRGVyIFN0cmluZyBkYXJmIG51ciBlaW4KKyAgICAgICAgZWluemlnZXMgUm9vdC1UYWcgZW50aGFsdGVuLCB3ZWl0ZXJlIFJvb3QtVGFncyB3ZXJkZW4gaWdub3JpZXJ0LgorCisgICAgICAgIEZhbGxzIGRlciBTdHJpbmcgWE1MLWtvbmZvcm0gd2FyLCBzbyB3aXJkIGVpbiBBcnJheSBtaXQgZHJlaSBFbGVtZW50ZW4KKyAgICAgICAgenVydWVja2dlZ2ViZW4sIGRlc3NlbiBFbGVtZW50ZSBmb2xnZW5kZXJtYXNzZW4gZGVmaW5pZXJ0IHNpbmQ6CisKKyAgICAgICAgICAgIHN0cmluZyBYTUxfVEFHX05BTUUKKyAgICAgICAgICAgICAgICBEZXIgTmFtZSBkZXMgWE1MLVRhZ3MuCisKKyAgICAgICAgICAgIG1hcHBpbmcgWE1MX1RBR19BVFRSSUJVVEVTCisgICAgICAgICAgICAgICAgQWxsZSBBdHRyaWJ1dGUgZGllc2VzIFhNTC1UYWdzIGFscyBlaW4gTWFwcGluZyBtaXQgZGVtCisgICAgICAgICAgICAgICAgamV3ZWlsaWdlbiBBdHRyaWJ1dG5hbWVuIGFscyBTY2hsdWVzc2VsIHVuZCBkZW4gQXR0cmlidXR3ZXJ0CisgICAgICAgICAgICAgICAgYWxzIGRlciBkYXp1Z2Vob2VyaWdlIFN0cmluZy4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBGYWxscyBlaW4gWE1MLVRhZyBrZWluZSBBdHRyaWJ1dGUgZW50aGFlbHQsIHNvIGlzdCBkaWVzZXMKKyAgICAgICAgICAgICAgICBFbGVtZW50IDAuCisKKyAgICAgICAgICAgIG1peGVkICogWE1MX1RBR19DT05URU5UUworICAgICAgICAgICAgICAgIERlciBJbmhhbHQgZGVzIFhNTC1UYWdzIGFscyBlaW4gQXJyYXkuIERpZXNlcyBBcnJheSBrYW5uCisgICAgICAgICAgICAgICAgZW50d2VkZXIgU3RyaW5ncyAocmVpbmUgWmVpY2hlbmRhdGVuKSBvZGVyIEFycmF5cworICAgICAgICAgICAgICAgIGFscyB3ZWl0ZXJlIFRhZ3MgZW50aGFsdGVuLCB3ZWxjaGUgd2llZGVydW0gZGllc2UKKyAgICAgICAgICAgICAgICBkcmVpIEVsZW1lbnRlIGJlc2l0emVuLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEZhbGxzIGRhcyBYTUwtVGFnIG5pY2h0cyBlbnRoYWVsdCwgc28gaXN0IGRpZXNlcyBFbGVtZW50IDAuCisKKyAgICAgICAgRmFsbHMgZGVyIFhNTC1TdHJpbmcgbmljaHQgd29obGdlZm9ybXQgaXN0IG9kZXIgZmFsbHMgbmljaHQgZ2VudWcgU3BlaWNoZXIKKyAgICAgICAgenVyIFZlcmZ1ZWd1bmcgc3RlaHQsIHdpcmQgZWluZSBGZWhsZXJtZWxkdW5nIGF1c2dlZ2ViZW4uCisKKyAgICAgICAgRGllc2UgRnVua3Rpb24gaXN0IG51ciB2ZXJmdWVnYmFyLCB3ZW5uIGRlciBEcml2ZXIgbWl0IElrc2VtZWwtCisgICAgICAgIFVudGVyc3R1ZXR6dW5nIGNvbXBpbGllcnQgd3VyZGUuIEluIGRpZXNlbSBGYWxsIGlzdCBkYXMgTWFrcm8KKyAgICAgICAgX19YTUxfRE9NX18gZGVmaW5pZXJ0LgorCitCRUlTUElFTAorICAgICAgICB4bWxfcGFyc2UoIjxhYmMvPiIpICAgICAgICAgICAtPiAoeyAiYWJjIiwgMCwgMCB9KQorICAgICAgICB4bWxfcGFyc2UoIjxhYmMgeHl6PSJjZGUiLz4iKSAtPiAoeyAiYWJjIiwgKFsgInh5eiIgOiAiY2RlIiBdKSwgMCB9KQorCisgICAgICAgIHhtbF9wYXJzZSgiPGJ1Y2ggc3ByYWNoZT0iZGV1dHNjaCI+IiArIAorICAgICAgICAgICAgICAgICAgIiAgICA8dGl0ZWw+RGllcyBpc3QgZGVyIFRpdGVsPC90aXRlbD4iICsgCisgICAgICAgICAgICAgICAgICAiICAgIDxrYXBpdGVsPkRpZXMgaXN0IGVpbiBLYXBpdGVsPC9rYXBpdGVsPiIgKyAKKyAgICAgICAgICAgICAgICAgICIgICAgPGthcGl0ZWw+RGFzIHNvbGwgPGI+ZmV0dGdlZHJ1Y2t0PC9iPiBzZWluLjwva2FwaXRlbD4iICsKKyAgICAgICAgICAgICAgICAgICI8L2J1Y2g+IikKKworICAgICAgICAgICAgLT4gKHsgImJ1Y2giCisgICAgICAgICAgICAgICAgLCAoWyAic3ByYWNoZSIgOiAiZGV1dHNjaCIgXSkKKyAgICAgICAgICAgICAgICAsICh7ICh7ICJ0aXRlbCIKKyAgICAgICAgICAgICAgICAgICAgICAsIDAKKyAgICAgICAgICAgICAgICAgICAgICAsICh7ICJEaWVzIGlzdCBkZXIgVGl0ZWwiIH0pCisgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICwgKHsgImthcGl0ZWwiCisgICAgICAgICAgICAgICAgICAgICAgLCAwCisgICAgICAgICAgICAgICAgICAgICAgLCAoeyAiRGllcyBpc3QgZWluIEthcGl0ZWwiIH0pCisgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICwgKHsgImthcGl0ZWwiCisgICAgICAgICAgICAgICAgICAgICAgLCAwCisgICAgICAgICAgICAgICAgICAgICAgLCAoeyAiRGllcyBzb2xsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAsICh7ICJiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICh7ICJmZXR0Z2VkcnVja3QiIH0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICAgICAgICwgInNlaW4uIgorICAgICAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgfSkKKworR0VTQ0hJQ0hURQorICAgICAgICBFaW5nZWZ1ZWhydCBpbiBMRE11ZCAzLjMuNzE4LgorCitTSUVIRSBBVUNICisgICAgICAgIHhtbF9nZW5lcmF0ZShFKQpkaWZmIC0tZ2l0IGEvZG9jL2VmdW4veG9yX2JpdHMgYi9kb2MvZWZ1bi94b3JfYml0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjllYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2VmdW4veG9yX2JpdHMKQEAgLTAsMCArMSwxOSBAQAorU1lOT1BTSVMKKyAgICAgICAgc3RyaW5nIHhvcl9iaXRzKHN0cmluZyBzdHIxLCBzdHJpbmcgc3RyMik7CisKK0JFU0NIUkVJQlVORworICAgICAgICA8c3RyMT4gdW5kIDxzdHIyPiBzaW5kIGJlaWRlbiBCaXRzdHJpbmdzLiBEYXMgUmVzdWx0YXQgdm9uIHhvcl9iaXRzKCkKKyAgICAgICAgaXN0IGVpbiBCaXRzdHJpbmcgbWl0IGRlbSBiaW5hZXJlbiBYT1Igdm9uIDxzdHIxPiB1bmQgPHN0cjI+LCBhbHNvCisgICAgICAgIGVpbiBTdHJpbmcsIGluIGRlbSBlaW4gQml0IG51ciBnZXNldHp0IGlzdCwgd2VubiBlcyBlbnR3ZWRlciBpbiA8c3RyMT4KKyAgICAgICAgb2RlciBpbiA8c3RyMj4gdm9ya29tbXQsIG5pY2h0IGFiZXIgaW4gYmVpZGVuLgorCitCRUlTUElFTEUKKyAgICAgICAgc3RyaW5nIHMxLCBzMiwgczM7CisgICAgICAgIHMxID0gc2V0X2JpdCgiIiwgMyk7IHMxID0gc2V0X2JpdChzMSwgMTUpOyAgLT4gczEgaXN0ICIoICgiCisgICAgICAgIHMyID0gc2V0X2JpdCgiIiwgMyk7IHMyID0gc2V0X2JpdChzMiwgNCk7ICAgLT4gczIgaXN0ICI4IgorICAgICAgICBzMyA9IHhvcl9iaXRzKHMxLCBzMik7CisgICAgICAgIC0+IHMzIGlzdCAiMCAoIiwgZXMgc2luZCBhbHNvIGRhcyA0LiB1bmQgZGFzIDE1LiBCaXQgZ2VzZXR6dC4KKworU0lFSEUgQVVDSAorICAgICAgICBjbGVhcl9iaXQoRSksIHNldF9iaXQoRSksIHRlc3RfYml0KEUpLCBuZXh0X2JpdChFKSwgbGFzdF9iaXQoRSkKKyAgICAgICAgY291bnRfYml0cyhFKSwgYW5kX2JpdHMoRSksIG9yX2JpdHMoRSksIGludmVydF9iaXRzKEUpLCBjb3B5X2JpdHMoRSkK