ZGlmZiAtLWdpdCBhL3NyYy9seW5xL2xpYi9saWJseW5xLXdpZmk2L2xpYndpZmk2LmMgYi9zcmMvbHlucS9saWIvbGlibHlucS13aWZpNi9saWJ3aWZpNi5jCmluZGV4IGQxNTA3MmQuLmVkMzhmYmYgMTAwNzU1Ci0tLSBhL3NyYy9seW5xL2xpYi9saWJseW5xLXdpZmk2L2xpYndpZmk2LmMKKysrIGIvc3JjL2x5bnEvbGliL2xpYmx5bnEtd2lmaTYvbGlid2lmaTYuYwpAQCAtNTEsMTAgKzUxLDE2IEBACiB2b2xhdGlsZSBpbnQgZ19zdGFfc2Nhbl9maW5pc2hfZmxhZyA9IDE7CiB2b2xhdGlsZSBpbnQgZ19zdGFfd2F0Y2hlcl9zdGFydGVkX2ZsYWcgPSAwOwogCitwdGhyZWFkX3QgZ19zdGFfYXV0b193YXRjaGVyX3BpZCA9IDA7Cit2b2xhdGlsZSBpbnQgZ19zdGFfYXV0b193YXRjaGVyX3N0b3BfZmxhZyA9IDA7Cit2b2xhdGlsZSBpbnQgZ19zdGFfYXV0b19zY2FuX2ZpbmlzaF9mbGFnID0gMTsKK3ZvbGF0aWxlIGludCBnX3N0YV9hdXRvX3dhdGNoZXJfc3RhcnRlZF9mbGFnID0gMDsKIHZvaWQgKiBnX2FwX2NhbGxiYWNrX3ByaXYgPSBOVUxMOwogQVBfQ0FMTEJBQ0tfRlVOQ19QVFIgZ19hcF9jYWxsYmFja19mdW5jID0gTlVMTDsKIHZvaWQgKiBnX3N0YV9jYWxsYmFja19wcml2ID0gTlVMTDsKIFNUQV9DQUxMQkFDS19GVU5DX1BUUiBnX3N0YV9jYWxsYmFja19mdW5jID0gTlVMTDsKK3ZvaWQgKiBnX3N0YV9hdXRvX2NhbGxiYWNrX3ByaXYgPSBOVUxMOworU1RBX0FVVE9fQ0FMTEJBQ0tfRlVOQ19QVFIgZ19zdGFfYXV0b19jYWxsYmFja19mdW5jID0gTlVMTDsKIAogLy9jb25zdCBjaGFyICogQ1RSTF9QQVRIPSIvdmFyL3J1bi93cGFfc3VwcGxpY2FudCI7CiBjb25zdCBjaGFyICogQ1RSTF9QQVRIWzJdID0geyIvdmFyL3J1bi93cGFfc3VwcGxpY2FudC93bGFuMCIsICIvdmFyL3J1bi93cGFfc3VwcGxpY2FudC9hcDAifTsKQEAgLTg5LDYgKzk1LDggQEAKIHN0YXRpYyBwdGhyZWFkX211dGV4X3Qgc19jaGVja193cGFfY3RybF9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiBzdGF0aWMgcHRocmVhZF9tdXRleF90IHNfc3RhX2NhbGxiYWNrX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKIHN0YXRpYyBwdGhyZWFkX211dGV4X3Qgc19hcF9jYWxsYmFja19tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisvLyBhZGQgZm9yIGF1dG8gY29ubmVjdAorc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBzX3N0YV9hdXRvX2NhbGxiYWNrX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKIAogc3RhdGljIHN0cnVjdCBsb2NhbF93cGFfY3RybCAqIGdfbHlucV93cGFfY3RybFsyXSA9IHswfTsKIApAQCAtNjYyLDYgKzY3MCwxNDIgQEAKIAogfQogCit2b2lkIGdldF9zdGF0ZV9lcnJvcl9uZXR3b3JraWQoY29uc3QgY2hhciogbW9kaWZ5LCBseW5xX3dpZmlfc3RhX3N0YXR1c19zKiBzdGF0ZSwgZXJyb3JfbnVtYmVyX3MqIGVycm9yLGludCAqbmV0d29ya2lkKQoreworICAgIGNoYXIgKnBSZWFzb247CisgICAgY2hhciAqd3BhbmV0aWQ7CisgICAgY2hhciBkZXN0aWRbM107CisgICAgKmVycm9yID0gTFlOUV9XQUlUX0NPTk5FQ1RfQUNUSVZFOworICAgICpuZXR3b3JraWQgPSAtMTsKKyAgICBpZiAoc3Ryc3RyKG1vZGlmeSwgIkNUUkwtRVZFTlQtU0NBTi1SRVNVTFRTIikgIT0gTlVMTCkKKyAgICB7CisgICAgICAgICpzdGF0ZSA9IExZTlFfV0lGSV9TVEFfU1RBVFVTX1NDQU5fUkVTVUxUOworICAgICAgICBSTE9HRCgiQ1RSTC1FVkVOVC1TQ0FOLVJFU1VMVFMgc3RhdGU6JWQsZXJyb3I6JWQsLG5ldHdvcmtpZDolZFxuIiwqc3RhdGUsKmVycm9yLCpuZXR3b3JraWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzdHJzdHIobW9kaWZ5LCAiQ1RSTC1FVkVOVC1DT05ORUNURUQiKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgUkxPR0QoIlt4aW9uZ106d3BhbmV0aWQgPSBzdHJzdHJtb2RpZnk7XG4iKTsKKyAgICAgICAgd3BhbmV0aWQgPSBzdHJzdHIobW9kaWZ5LCJpZD0iKTsKKyAgICAgICAgaWYgKCB3cGFuZXRpZCAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgd3BhbmV0aWQgKz1zdHJsZW4oImlkPSIpOworICAgICAgICAgICAgUkxPR0QoIlt4aW9uZ106bWVtY3B5KGRlc3RpZCx3cGFuZXRpZCwwXG4iKTsKKyAgICAgICAgICAgIGlmIChtZW1jcHkoZGVzdGlkLHdwYW5ldGlkLDIpICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIFJMT0dEKCJbeGlvbmddOm1lbWNweShkZXN0aWQsd3BhbmV0aWQsMVxuIik7CisgICAgICAgICAgICAgICAgKm5ldHdvcmtpZCA9IGF0b2koZGVzdGlkKTsKKyAgICAgICAgICAgICAgICBSTE9HRCgiZ2V0IG5ldHdvcmtpZCBpcyAlZFxuIiwqbmV0d29ya2lkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBSTE9HRCgiW3hpb25nXTptZW1jcHkoZGVzdGlkLHdwYW5ldGlkLDJcbiIpOworICAgICAgICB9CisgICAgICAgICpzdGF0ZSA9IExZTlFfV0lGSV9TVEFfU1RBVFVTX0NPTk5FQ1Q7CisgICAgICAgIFJMT0dEKCJDVFJMLUVWRU5ULUNPTk5FQ1RFRCBzdGF0ZTolZCxlcnJvcjolZCxuZXR3b3JraWQ6JWRcbiIsKnN0YXRlLCplcnJvciwqbmV0d29ya2lkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc3Ryc3RyKG1vZGlmeSwgIkNUUkwtRVZFTlQtU1NJRC1URU1QLURJU0FCTEVEIikgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHdwYW5ldGlkID0gc3Ryc3RyKG1vZGlmeSwiaWQ9Iik7CisgICAgICAgIGlmICggd3BhbmV0aWQgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHdwYW5ldGlkICs9c3RybGVuKCJpZD0iKTsKKyAgICAgICAgICAgIGlmIChtZW1jcHkoZGVzdGlkLHdwYW5ldGlkLDIpICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKm5ldHdvcmtpZCA9IGF0b2koZGVzdGlkKTsKKyAgICAgICAgICAgICAgICBSTE9HRCgiZ2V0IG5ldHdvcmtpZCBpcyAlZFxuIiwqbmV0d29ya2lkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwUmVhc29uID0gc3Ryc3RyKG1vZGlmeSwgInJlYXNvbj0iKTsKKyAgICAgICAgaWYgKHBSZWFzb24gIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcFJlYXNvbiArPSBzdHJsZW4oInJlYXNvbj0iKTsKKyAgICAgICAgICAgIGlmIChtZW1jbXAocFJlYXNvbiwgIkNPTk5fRkFJTEVEIiwgMTEpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmVycm9yID0gTFlOUV9USU1FX09VVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1lbWNtcChwUmVhc29uLCAiV1JPTkdfS0VZIiwgOSkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqZXJyb3IgPSBMWU5RX1BTV19FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmVycm9yID0gTFlOUV9VTlNQRUNJRklFRF9SRUFTT047CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqc3RhdGUgPSBMWU5RX1dJRklfU1RBX1NUQVRVU19DT05ORUNUX0ZBSUw7CisgICAgICAgICAgICBSTE9HRCgiQ1RSTC1FVkVOVC1TU0lELVRFTVAtRElTQUJMRUQgc3RhdGU6JWQsZXJyb3I6JWQsbmV0d29ya2lkOiVkXG4iLCpzdGF0ZSwqZXJyb3IsKm5ldHdvcmtpZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqZXJyb3IgPSBMWU5RX1VOU1BFQ0lGSUVEX1JFQVNPTjsKKyAgICAgICAgICAgICpzdGF0ZSA9IExZTlFfV0lGSV9TVEFfU1RBVFVTX0NPTk5FQ1RfRkFJTDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc3Ryc3RyKG1vZGlmeSwgIkNUUkwtRVZFTlQtQVNTT0MtUkVKRUNUIikgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHdwYW5ldGlkID0gc3Ryc3RyKG1vZGlmeSwiaWQ9Iik7CisgICAgICAgIGlmICggd3BhbmV0aWQgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHdwYW5ldGlkICs9c3RybGVuKCJpZD0iKTsKKyAgICAgICAgICAgIGlmIChtZW1jcHkoZGVzdGlkLHdwYW5ldGlkLDIpICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKm5ldHdvcmtpZCA9IGF0b2koZGVzdGlkKTsKKyAgICAgICAgICAgICAgICBSTE9HRCgiZ2V0IG5ldHdvcmtpZCBpcyAlZFxuIiwqbmV0d29ya2lkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSTE9HRCgiRklORCBDVFJMIEVWRU5UIDogQ1RSTC1FVkVOVC1BU1NPQy1SRUpFQ1RcbiIpOworICAgICAgICBwUmVhc29uID0gc3Ryc3RyKG1vZGlmeSwgInN0YXR1c19jb2RlPSIpOworICAgICAgICBpZiAocFJlYXNvbiAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBwUmVhc29uICs9IHN0cmxlbigic3RhdHVzX2NvZGU9Iik7CisgICAgICAgICAgICBpZiAobWVtY21wKHBSZWFzb24sICIxNyIsIDIpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmVycm9yID0gTFlOUV9BUF9VTkFCTEVfSEFORExFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobWVtY21wKHBSZWFzb24sICIxIiwxKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICplcnJvciA9IExZTlFfVU5TUEVDSUZJRURfUkVBU09OOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICplcnJvciA9IExZTlFfVU5TUEVDSUZJRURfUkVBU09OOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICpzdGF0ZSA9IExZTlFfV0lGSV9TVEFfU1RBVFVTX0RJU0NPTk5FQ1Q7CisgICAgICAgICAgICAgUkxPR0QoIkNUUkwtRVZFTlQtQVNTT0MtUkVKRUNUIEJVVCBOT1QgU1RBVFVTX0NPREUgTk9UIDEgb3IgMTcgc3RhdGU6JWQsZXJyb3I6JWQsbmV0d29ya2lkOiVkXG4iLCpzdGF0ZSwqZXJyb3IsKm5ldHdvcmtpZCk7CisgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgUkxPR0QoIkZJTkQgQ1RSTCBFVkVOVCA6IENUUkwtRVZFTlQtQVNTT0MtUkVKRUNUIEJVVCBOT1QgRk9VTkQgU1RBVFVTX0NPREVcbiIpOworICAgICAgICAgICAgKmVycm9yID0gTFlOUV9VTlNQRUNJRklFRF9SRUFTT047CisgICAgICAgICAgICAqc3RhdGUgPSBMWU5RX1dJRklfU1RBX1NUQVRVU19ESVNDT05ORUNUOworICAgICAgICAgICAgUkxPR0QoIkNUUkwtRVZFTlQtQVNTT0MtUkVKRUNUIHN0YXRlOiVkLGVycm9yOiVko6xuZXR3b3JraWQ6JWRcbiIsKnN0YXRlLCplcnJvciwqbmV0d29ya2lkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc3Ryc3RyKG1vZGlmeSwgIkNUUkwtRVZFTlQtU0FFLVVOS05PV04tUEFTU1dPUkQtSURFTlRJRklFUiIpICE9IE5VTEwpCisgICAgeworICAgICAgICBSTE9HRCgiRklORCBDVFJMIEVWRU5UIDogQ1RSTC1FVkVOVC1TQUUtVU5LTk9XTi1QQVNTV09SRC1JREVOVElGSUVSXG4iKTsKKyAgICAgICAgKmVycm9yID0gTFlOUV9BVVRIRU5USUNBVElPTl9OT19MT05HRVJfVkFMSUQ7CisgICAgICAgICpzdGF0ZSA9IExZTlFfV0lGSV9TVEFfU1RBVFVTX0RJU0NPTk5FQ1Q7CisgICAgICAgIFJMT0dEKCJDVFJMLUVWRU5ULVNBRS1VTktOT1dOLVBBU1NXT1JELUlERU5USUZJRVIgc3RhdGU6JWQsZXJyb3I6JWQsbmV0d29ya2lkOiVkXG4iLCpzdGF0ZSwqZXJyb3IsKm5ldHdvcmtpZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHN0cnN0cihtb2RpZnksICJDVFJMLUVWRU5ULURJU0NPTk5FQ1RFRCIpICE9IE5VTEwpCisgICAgeworICAgICAgICBSTE9HRCgiRklORCBDVFJMIEVWRU5UIDogQ1RSTC1FVkVOVC1ESVNDT05ORUNURURcbiIpOworICAgICAgICAqZXJyb3IgPSBMWU5RX1dBSVRfQ09OTkVDVF9BQ1RJVkU7CisgICAgICAgICpzdGF0ZSA9IExZTlFfV0lGSV9TVEFfU1RBVFVTX0RJU0NPTk5FQ1Q7CisgICAgICAgIFJMT0dEKCJDVFJMLUVWRU5ULURJU0NPTk5FQ1RFRCBzdGF0ZTolZCxlcnJvcjolZCxuZXR3b3JraWQ6JWRcbiIsKnN0YXRlLCplcnJvciwqbmV0d29ya2lkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSTE9HRCgiRVZFTlQgOiAlc1xuIiwgbW9kaWZ5KTsKKyAgICAqZXJyb3IgPSBMWU5RX1VOU1BFQ0lGSUVEX1JFQVNPTjsKKyAgICAqc3RhdGUgPSBMWU5RX1dJRklfU1RBVFVTX0VHTk9SRTsKKyAgICBSTE9HRCgiTEFTVCA6IFNUQSBzdGF0ZTolZCxlcnJvcjolZCxuZXR3b3JrOiVkXG4iLCpzdGF0ZSwqZXJyb3IsKm5ldHdvcmtpZCk7CisgICAgcmV0dXJuOworfQogc3RhdGljIHZvaWQgbm90aWZ5X2Nvbm5lY3Rfc3RhdHVzKGx5bnFfd2lmaV9zdGFfc3RhdHVzX3Mgc3RhdGUsIGVycm9yX251bWJlcl9zIGVycm9yKQogewogICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmc19zdGFfY2FsbGJhY2tfbXV0ZXgpOwpAQCAtNjczLDYgKzgxNywxNyBAQAogICAgIH0KICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmc19zdGFfY2FsbGJhY2tfbXV0ZXgpOwogfQorc3RhdGljIHZvaWQgbm90aWZ5X2F1dG9fY29ubmVjdF9zdGF0dXMobHlucV93aWZpX3N0YV9zdGF0dXNfcyBzdGF0ZSwgZXJyb3JfbnVtYmVyX3MgZXJyb3IsaW50IG5ldHdvcmtpZCkKK3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJnNfc3RhX2NhbGxiYWNrX211dGV4KTsKKyAgICBpZiAoZ19zdGFfY2FsbGJhY2tfZnVuYyAhPSBOVUxMICYmIHN0YXRlICE9IExZTlFfV0lGSV9TVEFUVVNfRUdOT1JFKQorICAgIHsKKyAgICAgICAgUkxPR0QoIlNUQVdhdGNoZXJUaHJlYWRQcm9jIGNhbGxiYWNrIGJlZ2luIC0tLS0tLT4gJWQgJWQgJWRcbiIsIHN0YXRlLCBlcnJvcixuZXR3b3JraWQpOworICAgICAgICBnX3N0YV9hdXRvX2NhbGxiYWNrX2Z1bmMoZ19zdGFfYXV0b19jYWxsYmFja19wcml2LCBzdGF0ZSwgZXJyb3IsbmV0d29ya2lkKTsKKyAgICAgICAgUkxPR0QoIlNUQUF1dG9XYXRjaGVyVGhyZWFkUHJvYyBjYWxsYmFjayBlbmQgLS0tLS0tPiAlZCAlZCAlZFxuIiwgc3RhdGUsIGVycm9yLG5ldHdvcmtpZCk7CisgICAgfQorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzX3N0YV9jYWxsYmFja19tdXRleCk7Cit9CiAKIHN0YXRpYyB2b2lkIFNUQVdhdGNoZXJUaHJlYWRQcm9jKCkgewogICAgIHNpemVfdCBsZW4gPSBNQVhfUkVUOwpAQCAtNzM1LDYgKzg5MCw2MiBAQAogICAgICAgICB3cGFfY3RybF9jbG9zZShseW5xX3dwYV9jdHJsKTsKICAgICB9CiB9CitzdGF0aWMgdm9pZCBTVEFBdXRvV2F0Y2hlclRocmVhZFByb2MoKSB7CisgICAgc2l6ZV90IGxlbiA9IE1BWF9SRVQ7CisgICAgY2hhciBtc2dfbm90aWZ5W01BWF9SRVRdOworICAgIGVycm9yX251bWJlcl9zIGVycm9yOworICAgIGx5bnFfd2lmaV9zdGFfc3RhdHVzX3Mgc3RhdGUsIGxhc3Rfc3RhdGUgPSAtMTsKKyAgICBpbnQgaWRsZV9jb3VudCA9IDA7CisgICAgaW50IG5ldHdvcmtpZDsKKyAgICBzdHJ1Y3Qgd3BhX2N0cmwgKmx5bnFfd3BhX2N0cmwgPSBOVUxMOworICAgIGdfc3RhX2F1dG9fd2F0Y2hlcl9zdG9wX2ZsYWcgPSAwOworICAgIFJMT0dEKCJTVEFBdXRvV2F0Y2hlclRocmVhZFByb2MgdGhyZWFkIHN0YXJ0ZWQgLS0tLS0tIik7CisgICAgd2hpbGUgKGdfc3RhX2F1dG9fd2F0Y2hlcl9zdG9wX2ZsYWcgPT0gMCkKKyAgICB7CisgICAgICAgIGlmIChjaGVja19wZW5kaW5nX21zZygmbHlucV93cGFfY3RybCwgQ1RSTF9TVEEsICZpZGxlX2NvdW50LCAmZ19zdGFfYXV0b193YXRjaGVyX3N0YXJ0ZWRfZmxhZykgIT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgbWVtc2V0KG1zZ19ub3RpZnksIDAsIE1BWF9SRVQpOworICAgICAgICBsZW4gPSBNQVhfUkVUOworICAgICAgICBpZiAoIXdwYV9jdHJsX3JlY3YobHlucV93cGFfY3RybCwgbXNnX25vdGlmeSwgJmxlbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1zZ19ub3RpZnlbbGVuKzFdID0gJ1wwJzsKKyAgICAgICAgICAgIFJMT0dEKCJTVEFBdXRvV2F0Y2hlclRocmVhZFByb2Mgc3RhIC0tLS0tLT4gJXNcbiIsIG1zZ19ub3RpZnkpOworICAgICAgICAgICAgaWYgKHN0cnN0cihtc2dfbm90aWZ5LCBzdGF0ZV9zY2FuX3Jlc3VsdCkgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnX3N0YV9hdXRvX3NjYW5fZmluaXNoX2ZsYWcgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGdfc3RhX2F1dG9fY2FsbGJhY2tfZnVuYyA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2V0X3N0YXRlX2Vycm9yX25ldHdvcmtpZChtc2dfbm90aWZ5LCZzdGF0ZSwmZXJyb3IsJm5ldHdvcmtpZCk7IC8vIGFkZCBuZXQgc3RhdGUgZXJyb3IgbmV0d29yayBmdW5jdGlvbgorICAgICAgICAgICAgbm90aWZ5X2F1dG9fY29ubmVjdF9zdGF0dXMoc3RhdGUsIGVycm9yLG5ldHdvcmtpZCk7CisgICAgICAgICAgICBpZiAoc3RhdGUgIT0gTFlOUV9XSUZJX1NUQV9TVEFUVVNfU0NBTl9SRVNVTFQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5uZXJfY2hlY2tfY29ubmVjdF9lcnJvcihtc2dfbm90aWZ5LCBzdGF0ZSwgZXJyb3IpOworICAgICAgICAgICAgICAgIGlmIChsYXN0X3N0YXRlICE9IHN0YXRlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09IExZTlFfV0lGSV9TVEFfU1RBVFVTX0NPTk5FQ1QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9jYWxsX3YoIiVzICVzIiwgc3RhX3N0YXR1c19jaGFuZ2Vfc2NyaXB0LCAiY29ubmVjdCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlID09IExZTlFfV0lGSV9TVEFfU1RBVFVTX0RJU0NPTk5FQ1QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9jYWxsX3YoIiVzICVzIiwgc3RhX3N0YXR1c19jaGFuZ2Vfc2NyaXB0LCAiZGlzY29ubmVjdCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxhc3Rfc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobHlucV93cGFfY3RybCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgd3BhX2N0cmxfZGV0YWNoKGx5bnFfd3BhX2N0cmwpOworICAgICAgICB3cGFfY3RybF9jbG9zZShseW5xX3dwYV9jdHJsKTsKKyAgICB9Cit9CiAKIC8vIHRoaXMgdGhyZWFkIHdpbGwgbm90IGV4aXQgd2hlbiBseW5xX3dpZmlfZGlzYWJsZSBjYWxsZWQsdG8gYXZvaWQgZGVhZCBsb2NrLHRha2UgY2FyZQogc3RhdGljIHZvaWQgR2xvYmFsV2F0Y2hlclRocmVhZFByb2MoKQpAQCAtOTA0LDE2ICsxMTE1LDIwIEBACiAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZzX2NoZWNrX3dwYV9jdHJsX211dGV4KTsKICAgICBnX2FwX3dhdGNoZXJfc3RvcF9mbGFnID0gMTsKICAgICBnX3N0YV93YXRjaGVyX3N0b3BfZmxhZyA9IDE7CisgICAgZ19zdGFfYXV0b193YXRjaGVyX3N0b3BfZmxhZyA9IDE7CiAgICAgaWYgKGdfYXBfd2F0Y2hlcl9waWQgIT0gMCkKICAgICAgICAgcHRocmVhZF9qb2luKGdfYXBfd2F0Y2hlcl9waWQsIE5VTEwpOwogICAgIGlmIChnX3N0YV93YXRjaGVyX3BpZCAhPSAwKQogICAgICAgICBwdGhyZWFkX2pvaW4oZ19zdGFfd2F0Y2hlcl9waWQsIE5VTEwpOworICAgIGlmIChnX3N0YV9hdXRvX3dhdGNoZXJfcGlkICE9IDApCisgICAgICAgIHB0aHJlYWRfam9pbihnX3N0YV9hdXRvX3dhdGNoZXJfcGlkLCBOVUxMKTsKICAgICBpZiAoZ19seW5xX3dwYV9jdHJsWzBdICE9IE5VTEwpCiAgICAgICAgIHdwYV9jdHJsX2Nsb3NlKGdfbHlucV93cGFfY3RybFswXSk7CiAgICAgaWYgKGdfbHlucV93cGFfY3RybFsxXSAhPSBOVUxMKQogICAgICAgICB3cGFfY3RybF9jbG9zZShnX2x5bnFfd3BhX2N0cmxbMV0pOwogICAgIGdfYXBfd2F0Y2hlcl9waWQgPSAwOwogICAgIGdfc3RhX3dhdGNoZXJfcGlkID0gMDsKKyAgICBnX3N0YV9hdXRvX3dhdGNoZXJfcGlkID0gMDsKICAgICBnX2x5bnFfd3BhX2N0cmxbMF0gPSBOVUxMOwogICAgIGdfbHlucV93cGFfY3RybFsxXSA9IE5VTEw7CiAgICAgc3lzdGVtKCJzeXN0ZW1jdGwgc3RvcCB3Zzg3MF9kcnZfaW5zbW9kLnNlcnZpY2UiKTsKQEAgLTMwNjUsNiArMzI4MCwxNiBAQAogICAgIHJldHVybiAwOwogLy8gICAgcmV0dXJuIHN5c3RlbSgiY29ubm1hbmN0bCBkaXNhYmxlIHdpZmkiKTsKIH0KK2ludCBseW5xX3dpZmlfc3RhX3N0b3BfbmV0KGx5bnFfd2lmaV9pbmRleF9lIGlkeCxpbnQgbmV0d29ya2lkKQoreworICAgIGNoYXIgTFlOUV9ESVNBQkxFX0NNRFsxMjhdPXswfTsKKyAgICBDSEVDS19JRFgoaWR4LCBDVFJMX1NUQSk7CisgICAgQ0hFQ0tfV1BBX0NUUkwoQ1RSTF9TVEEpOworICAgIHNwcmludGYoTFlOUV9ESVNBQkxFX0NNRCwiRElTQUJMRV9ORVRXT1JLICVkIixuZXR3b3JraWQpOworICAgIFJMT0dEKCJMWU5RX0RJU0FCTEVfQ01EIGlzOiVkXG4iLExZTlFfRElTQUJMRV9DTUQpOworICAgIERPX09LX0ZBSUxfUkVRVUVTVChMWU5RX0RJU0FCTEVfQ01EKTsKKyAgICByZXR1cm4gMDsKK30KIAogLy9zdGF0aWMgaW50IGlubmVyX2dldF9zdGFfaW5mbyhseW5xX3dpZmlfaW5kZXhfZSBpZHgsIGNvbnN0IGNoYXIgKiBic3NpZCwgZGV2aWNlX2luZm9fcyAqZGV2KSB7CiAvLyAgICBpbnQgaSwgY291bnQ7CkBAIC0zNDUyLDYgKzM2NzcsNDggQEAKICAgICByZXR1cm4gLTE7CiB9CiAKK2ludCBseW5xX3JlZ19zdGFfYXV0b19ldmVudF9jYWxsYmFjayh2b2lkICogcHJpdiwgU1RBX0FVVE9fQ0FMTEJBQ0tfRlVOQ19QVFIgY2IpeworICAgIGlmIChjYiA9PSBOVUxMKSAKKyAgICB7CisgICAgICAgIFJMT0dFKCJseW5xX3JlZ19zdGFfYXV0b19ldmVudF9jYWxsYmFjayBwdHIgaXMgTlVMTCxwbGVzZSBjaGVjayFcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmc19zdGFfYXV0b19jYWxsYmFja19tdXRleCk7CisgICAgZ19zdGFfYXV0b19jYWxsYmFja19wcml2ID0gcHJpdjsKKyAgICBnX3N0YV9hdXRvX2NhbGxiYWNrX2Z1bmMgPSBjYjsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmc19zdGFfYXV0b19jYWxsYmFja19tdXRleCk7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZzX2NoZWNrX3dwYV9jdHJsX211dGV4KTsKKyAgICBpZiAoZ19zdGFfYXV0b193YXRjaGVyX3BpZCA9PSAwICkgeworICAgICAgICBpZihwdGhyZWFkX2NyZWF0ZSgmZ19zdGFfYXV0b193YXRjaGVyX3BpZCxOVUxMLFNUQUF1dG9XYXRjaGVyVGhyZWFkUHJvYyxOVUxMKSA8IDApICAvL2NyZWF0ZSBTVEFBdXRvV2F0Y2hlclRocmVhZFByb2MKKyAgICAgICAgeworICAgICAgICAgICAgZ19zdGFfYXV0b193YXRjaGVyX3BpZCA9IDA7CisgICAgICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmc19jaGVja193cGFfY3RybF9tdXRleCk7CisgICAgICAgICAgICBSTE9HRSgiW3dpZmkgZXJyb3JdY3JlYXQgU1RBV2F0Y2hlclRocmVhZFByb2MgZmFpbCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzX2NoZWNrX3dwYV9jdHJsX211dGV4KTsKKyAgICBSTE9HRCgiY3JlYXQgU1RBV2F0Y2hlclRoZXJhZFByb2Mgc3VzY2NzIik7CisgICAgcmV0dXJuIDA7Cit9CitpbnQgbHlucV91bnJlZ19zdGFfYXV0b19ldmVudF9jYWxsYmFjayh2b2lkICogcHJpdikgeworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmc19zdGFfYXV0b19jYWxsYmFja19tdXRleCk7CisgICAgaWYgKGdfc3RhX2F1dG9fY2FsbGJhY2tfcHJpdiA9PSBwcml2KQorICAgIHsgIAorICAgICAgICBnX3N0YV9hdXRvX3dhdGNoZXJfc3RvcF9mbGFnID0gMTsKKyAgICAgICAgaWYgKGdfc3RhX2F1dG9fd2F0Y2hlcl9waWQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcHRocmVhZF9qb2luKGdfc3RhX2F1dG9fd2F0Y2hlcl9waWQsIE5VTEwpOworICAgICAgICB9CisgICAgZ19zdGFfYXV0b193YXRjaGVyX3BpZCA9IDA7CisgICAgICAgIGdfc3RhX2F1dG9fY2FsbGJhY2tfZnVuYyA9IE5VTEw7CisgICAgICAgIGdfc3RhX2F1dG9fY2FsbGJhY2tfcHJpdiA9IE5VTEw7CisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzX3N0YV9hdXRvX2NhbGxiYWNrX211dGV4KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzX3N0YV9hdXRvX2NhbGxiYWNrX211dGV4KTsKKyAgICByZXR1cm4gLTE7Cit9CiBpbnQgbHlucV9nZXRfYXBfc3RhdHVzKGx5bnFfd2lmaV9pbmRleF9lIGlkeCwgbHlucV93aWZpX2FwX3J1bl9zdGF0dXNfcyAqIGFwX3N0YXR1cykKIHsKICAgICBjaGFyIHN0YXRlW01BWF9DTURdOwo=