ZGlmZiAtLWdpdCBhL2ZwZGZzZGsvZnBkZmZvcm1maWxsX2VtYmVkZGVydGVzdC5jcHAgYi9mcGRmc2RrL2ZwZGZmb3JtZmlsbF9lbWJlZGRlcnRlc3QuY3BwCmluZGV4IGRmYmZjNjYuLjIwZWJhMDkgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvZnBkZmZvcm1maWxsX2VtYmVkZGVydGVzdC5jcHAKKysrIGIvZnBkZnNkay9mcGRmZm9ybWZpbGxfZW1iZWRkZXJ0ZXN0LmNwcApAQCAtMTI1LDQgKzEyNSwyNiBAQAogICBFWFBFQ1RfRVEoMlUsIGFsZXJ0cy5zaXplKCkpOwogfQogCitURVNUX0YoRlBERkZvcm1GaWxsRW1iZWRkZXJ0ZXN0LCBCVUdfNjM0NzE2KSB7CisgIEVtYmVkZGVyVGVzdFRpbWVySGFuZGxpbmdEZWxlZ2F0ZSBkZWxlZ2F0ZTsKKyAgU2V0RGVsZWdhdGUoJmRlbGVnYXRlKTsKKworICBFWFBFQ1RfVFJVRShPcGVuRG9jdW1lbnQoImJ1Z182MzQ3MTYucGRmIikpOworICBGUERGX1BBR0UgcGFnZSA9IExvYWRQYWdlKDApOworICBFWFBFQ1RfVFJVRShwYWdlKTsKKyAgRG9PcGVuQWN0aW9ucygpOworCisgIC8vIFRpbWVycyBmaXJlIGF0IG1vc3Qgb25jZSBwZXIgQWR2YW5jZVRpbWUoKSwgYWxsb3cgaW50ZXJ2YWxzCisgIC8vIHRvIGZpcmUgc2V2ZXJhbCB0aW1lcyBpZiBwb3NzaWJsZS4KKyAgZGVsZWdhdGUuQWR2YW5jZVRpbWUoMTAwMCk7CisgIGRlbGVnYXRlLkFkdmFuY2VUaW1lKDEwMDApOworICBkZWxlZ2F0ZS5BZHZhbmNlVGltZSgxMDAwKTsKKyAgZGVsZWdhdGUuQWR2YW5jZVRpbWUoMTAwMCk7CisgIGRlbGVnYXRlLkFkdmFuY2VUaW1lKDEwMDApOworICBVbmxvYWRQYWdlKHBhZ2UpOworCisgIGNvbnN0IGF1dG8mIGFsZXJ0cyA9IGRlbGVnYXRlLkdldEFsZXJ0cygpOworICBFWFBFQ1RfRVEoMlUsIGFsZXJ0cy5zaXplKCkpOworfQorCiAjZW5kaWYgIC8vIFBERl9FTkFCTEVfVjgKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvamF2YXNjcmlwdC9KU19PYmplY3QuY3BwIGIvZnBkZnNkay9qYXZhc2NyaXB0L0pTX09iamVjdC5jcHAKaW5kZXggOTUwNTc5OS4uNjQxYzZhNiAxMDA2NDQKLS0tIGEvZnBkZnNkay9qYXZhc2NyaXB0L0pTX09iamVjdC5jcHAKKysrIGIvZnBkZnNkay9qYXZhc2NyaXB0L0pTX09iamVjdC5jcHAKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgbV9wUnVudGltZShwUnVudGltZSksCiAgICAgICBtX3BBcHAocEFwcCkgewogICBDRlhfU3lzdGVtSGFuZGxlciogcEhhbmRsZXIgPSBtX3BBcHAtPkdldFN5c0hhbmRsZXIoKTsKLSAgbV9uVGltZXJJRCA9IHBIYW5kbGVyLT5TZXRUaW1lcihkd0VsYXBzZSwgVGltZXJQcm9jKTsKKyAgbV9uVGltZXJJRCA9IHBIYW5kbGVyLT5TZXRUaW1lcihkd0VsYXBzZSwgVHJpZ2dlcik7CiAgICgqR2V0R2xvYmFsVGltZXJNYXAoKSlbbV9uVGltZXJJRF0gPSB0aGlzOwogICBtX3BSdW50aW1lLT5BZGRPYnNlcnZlcih0aGlzKTsKIH0KQEAgLTEyOSwyMyArMTI5LDE5IEBACiAgIENKU19SdW50aW1lKiBwUnVudGltZSA9IEdldFJ1bnRpbWUoKTsKICAgaWYgKHBSdW50aW1lKQogICAgIHBSdW50aW1lLT5SZW1vdmVPYnNlcnZlcih0aGlzKTsKLSAgS2lsbEpTVGltZXIoKTsKLX0KIAotdm9pZCBDSlNfVGltZXI6OktpbGxKU1RpbWVyKCkgewotICBpZiAobV9uVGltZXJJRCkgewotICAgIGlmIChtX2JWYWxpZCkgewotICAgICAgQ0ZYX1N5c3RlbUhhbmRsZXIqIHBIYW5kbGVyID0gbV9wQXBwLT5HZXRTeXNIYW5kbGVyKCk7Ci0gICAgICBwSGFuZGxlci0+S2lsbFRpbWVyKG1fblRpbWVySUQpOwotICAgIH0KLSAgICBHZXRHbG9iYWxUaW1lck1hcCgpLT5lcmFzZShtX25UaW1lcklEKTsKLSAgICBtX25UaW1lcklEID0gMDsKLSAgfQorICBpZiAoIW1fblRpbWVySUQpCisgICAgcmV0dXJuOworCisgIGlmIChtX2JWYWxpZCkKKyAgICBtX3BBcHAtPkdldFN5c0hhbmRsZXIoKS0+S2lsbFRpbWVyKG1fblRpbWVySUQpOworCisgIEdldEdsb2JhbFRpbWVyTWFwKCktPmVyYXNlKG1fblRpbWVySUQpOwogfQogCiAvLyBzdGF0aWMKLXZvaWQgQ0pTX1RpbWVyOjpUaW1lclByb2MoaW50IGlkRXZlbnQpIHsKLSAgYXV0byBpdCA9IEdldEdsb2JhbFRpbWVyTWFwKCktPmZpbmQoaWRFdmVudCk7Cit2b2lkIENKU19UaW1lcjo6VHJpZ2dlcihpbnQgblRpbWVySUQpIHsKKyAgYXV0byBpdCA9IEdldEdsb2JhbFRpbWVyTWFwKCktPmZpbmQoblRpbWVySUQpOwogICBpZiAoaXQgPT0gR2V0R2xvYmFsVGltZXJNYXAoKS0+ZW5kKCkpCiAgICAgcmV0dXJuOwogCkBAIC0xNTgsMTIgKzE1NCwyNCBAQAogICAgIHBUaW1lci0+bV9wRW1iZWRPYmotPlRpbWVyUHJvYyhwVGltZXIpOwogCiAgIC8vIFRpbWVyIHByb2MgbWF5IGhhdmUgZGVzdHJveWVkIHRpbWVyLCBmaW5kIGl0IGFnYWluLgotICBpdCA9IEdldEdsb2JhbFRpbWVyTWFwKCktPmZpbmQoaWRFdmVudCk7CisgIGl0ID0gR2V0R2xvYmFsVGltZXJNYXAoKS0+ZmluZChuVGltZXJJRCk7CiAgIGlmIChpdCA9PSBHZXRHbG9iYWxUaW1lck1hcCgpLT5lbmQoKSkKICAgICByZXR1cm47CiAKICAgcFRpbWVyID0gaXQtPnNlY29uZDsKICAgcFRpbWVyLT5tX2JQcm9jZXNzaW5nID0gZmFsc2U7CisgIGlmIChwVGltZXItPklzT25lU2hvdCgpKQorICAgIHBUaW1lci0+bV9wRW1iZWRPYmotPkNhbmNlbFByb2MocFRpbWVyKTsKK30KKworLy8gc3RhdGljCit2b2lkIENKU19UaW1lcjo6Q2FuY2VsKGludCBuVGltZXJJRCkgeworICBhdXRvIGl0ID0gR2V0R2xvYmFsVGltZXJNYXAoKS0+ZmluZChuVGltZXJJRCk7CisgIGlmIChpdCA9PSBHZXRHbG9iYWxUaW1lck1hcCgpLT5lbmQoKSkKKyAgICByZXR1cm47CisKKyAgQ0pTX1RpbWVyKiBwVGltZXIgPSBpdC0+c2Vjb25kOworICBwVGltZXItPm1fcEVtYmVkT2JqLT5DYW5jZWxQcm9jKHBUaW1lcik7CiB9CiAKIC8vIHN0YXRpYwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9qYXZhc2NyaXB0L0pTX09iamVjdC5oIGIvZnBkZnNkay9qYXZhc2NyaXB0L0pTX09iamVjdC5oCmluZGV4IDkwODY0NWMuLjk3NDAwODIgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvamF2YXNjcmlwdC9KU19PYmplY3QuaAorKysgYi9mcGRmc2RrL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgKQEAgLTE4LDEyICsxOCwxNCBAQAogY2xhc3MgQ0pTX09iamVjdDsKIGNsYXNzIENKU19UaW1lcjsKIGNsYXNzIENQREZEb2NfRW52aXJvbm1lbnQ7CisKIGNsYXNzIENKU19FbWJlZE9iaiB7CiAgcHVibGljOgogICBleHBsaWNpdCBDSlNfRW1iZWRPYmooQ0pTX09iamVjdCogcEpTT2JqZWN0KTsKICAgdmlydHVhbCB+Q0pTX0VtYmVkT2JqKCk7CiAKICAgdmlydHVhbCB2b2lkIFRpbWVyUHJvYyhDSlNfVGltZXIqIHBUaW1lcikge30KKyAgdmlydHVhbCB2b2lkIENhbmNlbFByb2MoQ0pTX1RpbWVyKiBwVGltZXIpIHt9CiAKICAgQ0pTX09iamVjdCogR2V0SlNPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3BKU09iamVjdDsgfQogCkBAIC04NCwxNSArODYsMTUgQEAKICAgICAgICAgICAgIHVpbnQzMl90IGR3VGltZU91dCk7CiAgIH5DSlNfVGltZXIoKSBvdmVycmlkZTsKIAotICB2b2lkIEtpbGxKU1RpbWVyKCk7CisgIHN0YXRpYyB2b2lkIFRyaWdnZXIoaW50IG5UaW1lcklEKTsKKyAgc3RhdGljIHZvaWQgQ2FuY2VsKGludCBuVGltZXJJRCk7CiAKLSAgaW50IEdldFR5cGUoKSBjb25zdCB7IHJldHVybiBtX25UeXBlOyB9CisgIGJvb2wgSXNPbmVTaG90KCkgY29uc3QgeyByZXR1cm4gbV9uVHlwZSA9PSAxOyB9CiAgIHVpbnQzMl90IEdldFRpbWVPdXQoKSBjb25zdCB7IHJldHVybiBtX2R3VGltZU91dDsgfQorICBpbnQgR2V0VGltZXJJRCgpIGNvbnN0IHsgcmV0dXJuIG1fblRpbWVySUQ7IH0KICAgQ0pTX1J1bnRpbWUqIEdldFJ1bnRpbWUoKSBjb25zdCB7IHJldHVybiBtX2JWYWxpZCA/IG1fcFJ1bnRpbWUgOiBudWxscHRyOyB9CiAgIENGWF9XaWRlU3RyaW5nIEdldEpTY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX3N3SlNjcmlwdDsgfQogCi0gIHN0YXRpYyB2b2lkIFRpbWVyUHJvYyhpbnQgaWRFdmVudCk7Ci0KICBwcml2YXRlOgogICB1c2luZyBUaW1lck1hcCA9IHN0ZDo6bWFwPEZYX1VJTlQsIENKU19UaW1lcio+OwogICBzdGF0aWMgVGltZXJNYXAqIEdldEdsb2JhbFRpbWVyTWFwKCk7CmRpZmYgLS1naXQgYS9mcGRmc2RrL2phdmFzY3JpcHQvYXBwLmNwcCBiL2ZwZGZzZGsvamF2YXNjcmlwdC9hcHAuY3BwCmluZGV4IGRkNzA2ZWIuLjc4YjdiY2EgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvamF2YXNjcmlwdC9hcHAuY3BwCisrKyBiL2ZwZGZzZGsvamF2YXNjcmlwdC9hcHAuY3BwCkBAIC0zMSwxNiArMzEsMTIgQEAKIElNUExFTUVOVF9KU19DTEFTUyhDSlNfVGltZXJPYmosIFRpbWVyT2JqKQogCiBUaW1lck9iajo6VGltZXJPYmooQ0pTX09iamVjdCogcEpTT2JqZWN0KQotICAgIDogQ0pTX0VtYmVkT2JqKHBKU09iamVjdCksIG1fcFRpbWVyKG51bGxwdHIpIHt9CisgICAgOiBDSlNfRW1iZWRPYmoocEpTT2JqZWN0KSwgbV9uVGltZXJJRCgwKSB7fQogCiBUaW1lck9iajo6flRpbWVyT2JqKCkge30KIAogdm9pZCBUaW1lck9iajo6U2V0VGltZXIoQ0pTX1RpbWVyKiBwVGltZXIpIHsKLSAgbV9wVGltZXIgPSBwVGltZXI7Ci19Ci0KLUNKU19UaW1lciogVGltZXJPYmo6OkdldFRpbWVyKCkgY29uc3QgewotICByZXR1cm4gbV9wVGltZXI7CisgIG1fblRpbWVySUQgPSBwVGltZXItPkdldFRpbWVySUQoKTsKIH0KIAogI2RlZmluZSBKU19TVFJfVklFV0VSVFlQRSBMInBkZml1bSIKQEAgLTQ3MywyMCArNDY5LDcgQEAKICAgaWYgKCFwVGltZXJPYmopCiAgICAgcmV0dXJuOwogCi0gIENKU19UaW1lciogcFRpbWVyID0gcFRpbWVyT2JqLT5HZXRUaW1lcigpOwotICBpZiAoIXBUaW1lcikKLSAgICByZXR1cm47Ci0KLSAgcFRpbWVyLT5LaWxsSlNUaW1lcigpOwotICBhdXRvIGl0ZXIgPSBzdGQ6OmZpbmRfaWYobV9UaW1lcnMuYmVnaW4oKSwgbV9UaW1lcnMuZW5kKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbcFRpbWVyXShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Q0pTX1RpbWVyPiYgdGhhdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcFRpbWVyID09IHRoYXQuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLQotICBpZiAoaXRlciAhPSBtX1RpbWVycy5lbmQoKSkKLSAgICBtX1RpbWVycy5lcmFzZShpdGVyKTsKLQotICBwVGltZXJPYmotPlNldFRpbWVyKG51bGxwdHIpOworICBDSlNfVGltZXI6OkNhbmNlbChwVGltZXJPYmotPkdldFRpbWVySUQoKSk7CiB9CiAKIEZYX0JPT0wgYXBwOjpleGVjTWVudUl0ZW0oSUpTX0NvbnRleHQqIGNjLApAQCAtNDk4LDIwICs0ODEsMTggQEAKIAogdm9pZCBhcHA6OlRpbWVyUHJvYyhDSlNfVGltZXIqIHBUaW1lcikgewogICBDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwVGltZXItPkdldFJ1bnRpbWUoKTsKKyAgaWYgKHBSdW50aW1lICYmICghcFRpbWVyLT5Jc09uZVNob3QoKSB8fCBwVGltZXItPkdldFRpbWVPdXQoKSA+IDApKQorICAgIFJ1bkpzU2NyaXB0KHBSdW50aW1lLCBwVGltZXItPkdldEpTY3JpcHQoKSk7Cit9CiAKLSAgc3dpdGNoIChwVGltZXItPkdldFR5cGUoKSkgewotICAgIGNhc2UgMDogIC8vIGludGVydmFsCi0gICAgICBpZiAocFJ1bnRpbWUpCi0gICAgICAgIFJ1bkpzU2NyaXB0KHBSdW50aW1lLCBwVGltZXItPkdldEpTY3JpcHQoKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICBpZiAocFRpbWVyLT5HZXRUaW1lT3V0KCkgPiAwKSB7Ci0gICAgICAgIGlmIChwUnVudGltZSkKLSAgICAgICAgICBSdW5Kc1NjcmlwdChwUnVudGltZSwgcFRpbWVyLT5HZXRKU2NyaXB0KCkpOwotICAgICAgICBwVGltZXItPktpbGxKU1RpbWVyKCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgfQordm9pZCBhcHA6OkNhbmNlbFByb2MoQ0pTX1RpbWVyKiBwVGltZXIpIHsKKyAgYXV0byBpdGVyID0gc3RkOjpmaW5kX2lmKG1fVGltZXJzLmJlZ2luKCksIG1fVGltZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BUaW1lcl0oY29uc3Qgc3RkOjp1bmlxdWVfcHRyPENKU19UaW1lcj4mIHRoYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBUaW1lciA9PSB0aGF0LmdldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgaWYgKGl0ZXIgIT0gbV9UaW1lcnMuZW5kKCkpCisgICAgbV9UaW1lcnMuZXJhc2UoaXRlcik7CiB9CiAKIHZvaWQgYXBwOjpSdW5Kc1NjcmlwdChDSlNfUnVudGltZSogcFJ1bnRpbWUsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiB3c1NjcmlwdCkgewpkaWZmIC0tZ2l0IGEvZnBkZnNkay9qYXZhc2NyaXB0L2FwcC5oIGIvZnBkZnNkay9qYXZhc2NyaXB0L2FwcC5oCmluZGV4IGM2Y2RhNTUuLmJiMDgzY2UgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvamF2YXNjcmlwdC9hcHAuaAorKysgYi9mcGRmc2RrL2phdmFzY3JpcHQvYXBwLmgKQEAgLTIwLDEyICsyMCwxMSBAQAogICBUaW1lck9iaihDSlNfT2JqZWN0KiBwSlNPYmplY3QpOwogICB+VGltZXJPYmooKSBvdmVycmlkZTsKIAotIHB1YmxpYzoKICAgdm9pZCBTZXRUaW1lcihDSlNfVGltZXIqIHBUaW1lcik7Ci0gIENKU19UaW1lciogR2V0VGltZXIoKSBjb25zdDsKKyAgaW50IEdldFRpbWVySUQoKSBjb25zdCB7IHJldHVybiBtX25UaW1lcklEOyB9CiAKICBwcml2YXRlOgotICBDSlNfVGltZXIqIG1fcFRpbWVyOworICBpbnQgbV9uVGltZXJJRDsgIC8vIFdlYWsgcmVmZXJlbmNlIHRvIHRpbWVyIHRocm91Z2ggZ2xvYmFsIG1hcC4KIH07CiAKIGNsYXNzIENKU19UaW1lck9iaiA6IHB1YmxpYyBDSlNfT2JqZWN0IHsKQEAgLTE1OCw2ICsxNTcsNyBAQAogIHByaXZhdGU6CiAgIC8vIENKU19FbWJlZE9iagogICB2b2lkIFRpbWVyUHJvYyhDSlNfVGltZXIqIHBUaW1lcikgb3ZlcnJpZGU7CisgIHZvaWQgQ2FuY2VsUHJvYyhDSlNfVGltZXIqIHBUaW1lcikgb3ZlcnJpZGU7CiAgIHZvaWQgUnVuSnNTY3JpcHQoQ0pTX1J1bnRpbWUqIHBSdW50aW1lLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgd3NTY3JpcHQpOwogCiAgIHZvaWQgQ2xlYXJUaW1lckNvbW1vbihjb25zdCBDSlNfVmFsdWUmIHBhcmFtKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvcmVzb3VyY2VzL2J1Z182MzQ3MTYuaW4gYi90ZXN0aW5nL3Jlc291cmNlcy9idWdfNjM0NzE2LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODVkYWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL3Jlc291cmNlcy9idWdfNjM0NzE2LmluCkBAIC0wLDAgKzEsMTI2IEBACit7e2hlYWRlcn19Cit7e29iamVjdCAxIDB9fSA8PAorICAvVHlwZSAvQ2F0YWxvZworICAvUGFnZXMgMiAwIFIKKyAgL0Fjcm9Gb3JtIDYgMCBSCisgIC9OYW1lcyA8PC9KYXZhU2NyaXB0IDEzIDAgUj4+Cis+PgorZW5kb2JqCit7e29iamVjdCAyIDB9fSA8PAorICAvVHlwZSAvUGFnZXMKKyAgL0NvdW50IDEKKyAgL0tpZHMgWzQgMCBSXQorPj4KK2VuZG9iagore3tvYmplY3QgNCAwfX0gPDwKKyAgL1R5cGUgL1BhZ2UKKyAgL1BhcmVudCAyIDAgUgorICAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQorICAvQ3JvcEJveCBbMCAwIDYxMiA3OTJdCisgIC9SZXNvdXJjZXMgIDw8Pj4KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDYgMH19IDw8CisgIC9EUiA8PAorICAgIC9Gb250IDw8L0hlbHYgNyAwIFI+PgorICA+PgorICAvREEgKC9IZWx2IDAgVGYgMCBnKQorICAvRmllbGRzIFs1IDAgUl0KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDcgMH19IDw8CisgIC9UeXBlIC9Gb250CisgIC9TdWJ0eXBlIC9UeXBlMQorICAvQmFzZUZvbnQgL0hlbHZldGljYQorICAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZworPj4KK2VuZG9iagore3tvYmplY3QgOCAwfX0gPDwKKyAgL1R5cGUgL1hPYmplY3QKKyAgL1N1YnR5cGUgL0Zvcm0KKyAgL0Zvcm1UeXBlIDEKKyAgL01hdHJpeCBbMSAwIDAgMSAwIDBdCisgIC9CQm94IFswIDAgNzUuOTA3IDI4LjQ3Ml0KKyAgL1Jlc291cmNlcyAgPDwKKyAgICAvRm9udCA8PC9GWEYwIDcgMCBSPj4KKyAgPj4KKz4+CitzdHJlYW0KK3EKK1EKKworCitlbmRzdHJlYW0KK2VuZG9iagore3tvYmplY3QgMTEgMH19IDw8CisgIC9UeXBlIC9BY3Rpb24KKyAgL1MgL0phdmFTY3JpcHQKKyAgL0pTIDUwIDAgUgorPj4KK2VuZG9iagore3tvYmplY3QgMTMgMH19IDw8CisgIC9OYW1lcyBbKHN0YXJ0RGVsYXkpIDExIDAgUl0KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDUwIDB9fSA8PAorPj4KK3N0cmVhbQordmFyIHRpbWVPdXQgPSAwOwordmFyIGFycmF5ID0gbmV3IEFycmF5KDEwMjQqNCk7Cit2YXIgZG9jID0gdGhpczsKKworZnVuY3Rpb24gbXlGdW5jdGlvbigpIHsKKyAgdHJ5IHsKKyAgICAvLyBGcmVlIHRoZSBUaW1lciBPYmplY3RzCisgICAgYXBwLmNsZWFyVGltZU91dCh0aW1lT3V0KTsKKyAgICBmb3IgKHZhciBpPTA7IGk8YXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgIGZvciAodmFyIGo9MDsgajxhcnJheVtpXS5sZW5ndGg7IGorKykgeworICAgICAgICBhcHAuY2xlYXJUaW1lT3V0KGFycmF5W2ldW2pdKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUcmlnZ2VyIHRoZSBHYXJiYWdlIENvbGxlY3Rpb24KKyAgICBhcnJheS5sZW5ndGggPSAwOworICAgIGFycmF5LnB1c2gobmV3IEFycmF5QnVmZmVyKDEwMjQqMTAyNCkpOworICAgIGFycmF5Lmxlbmd0aD0wOworICAgIGFycmF5Lmxlbmd0aD0xMDI0KjQ7CisgICAgdmFyIHN0ciA9ICdBQSc7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggOyBpKyspIHsKKyAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTA7IGorKyApIHsKKyAgICAgICAgZG9jLmFkZEljb24oc3RyICsgIi0iICsgc3RyICsgc3RyICsgc3RyICsgc3RyICsgc3RyLCBkb2MuaWNvbnMpOworICAgICAgfQorICAgIH0KKyAgfSBjYXRjaChlcnIpIHsKKyAgICBhcHAuYWxlcnQoZXJyKTsKKyAgfQorfQorCitmdW5jdGlvbiBtYWluKCkgeworICB0cnkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoIDsgaSsrKSB7CisgICAgICBpZiAoaSA9PSBhcnJheS5sZW5ndGggLyAyKSB7CisgICAgICAgIHRpbWVPdXQgPSBhcHAuc2V0VGltZU91dCgibXlGdW5jdGlvbigpIiwgMTAwMCk7CisgICAgICB9CisgICAgICBhcnJheVtpXSA9IG5ldyBBcnJheSg0KTsKKyAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJyYXlbaV0ubGVuZ3RoIDsgaisrICkgeworICAgICAgICBhcnJheVtpXVtqXSA9IGFwcC5zZXRUaW1lT3V0KCJhYWFhYWFhYWFhKCkiLCAxMDAwMDApOworICAgICAgfQorICAgIH0KKyAgfSBjYXRjaChlcnIpIHsKKyAgICBhcHAuYWxlcnQoZXJyKTsKKyAgfQorfQorCisvLyBFeGVjdXRlIHRoZSBKUy4KK2FwcC5zZXRUaW1lT3V0KCJtYWluKCkiLCAxMDAwKTsKKworLy8gQmUgc3VyZSBhbGwgb2YgdGhpcyBjb2RlIHJhbiB0byBjb21wbGV0aW9uLgorYXBwLmFsZXJ0KCJkb25lIik7CitlbmRzdHJlYW0KK2VuZG9iagore3t4cmVmfX0KK3RyYWlsZXIgPDwKKyAgL1Jvb3QgMSAwIFIKKz4+Cit7e3N0YXJ0eHJlZn19CislJUVPRgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzYzNDcxNi5wZGYgYi90ZXN0aW5nL3Jlc291cmNlcy9idWdfNjM0NzE2LnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzMwYjlhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzYzNDcxNi5wZGYKQEAgLTAsMCArMSwxODAgQEAKKyVQREYtMS43CisloPKk9AorMSAwIG9iaiA8PAorICAvVHlwZSAvQ2F0YWxvZworICAvUGFnZXMgMiAwIFIKKyAgL0Fjcm9Gb3JtIDYgMCBSCisgIC9OYW1lcyA8PC9KYXZhU2NyaXB0IDEzIDAgUj4+Cis+PgorZW5kb2JqCisyIDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlcworICAvQ291bnQgMQorICAvS2lkcyBbNCAwIFJdCis+PgorZW5kb2JqCis0IDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL01lZGlhQm94IFswIDAgNjEyIDc5Ml0KKyAgL0Nyb3BCb3ggWzAgMCA2MTIgNzkyXQorICAvUmVzb3VyY2VzICA8PD4+Cis+PgorZW5kb2JqCis2IDAgb2JqIDw8CisgIC9EUiA8PAorICAgIC9Gb250IDw8L0hlbHYgNyAwIFI+PgorICA+PgorICAvREEgKC9IZWx2IDAgVGYgMCBnKQorICAvRmllbGRzIFs1IDAgUl0KKz4+CitlbmRvYmoKKzcgMCBvYmogPDwKKyAgL1R5cGUgL0ZvbnQKKyAgL1N1YnR5cGUgL1R5cGUxCisgIC9CYXNlRm9udCAvSGVsdmV0aWNhCisgIC9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCis+PgorZW5kb2JqCis4IDAgb2JqIDw8CisgIC9UeXBlIC9YT2JqZWN0CisgIC9TdWJ0eXBlIC9Gb3JtCisgIC9Gb3JtVHlwZSAxCisgIC9NYXRyaXggWzEgMCAwIDEgMCAwXQorICAvQkJveCBbMCAwIDc1LjkwNyAyOC40NzJdCisgIC9SZXNvdXJjZXMgIDw8CisgICAgL0ZvbnQgPDwvRlhGMCA3IDAgUj4+CisgID4+Cis+Pgorc3RyZWFtCitxCitRCisKKworZW5kc3RyZWFtCitlbmRvYmoKKzExIDAgb2JqIDw8CisgIC9UeXBlIC9BY3Rpb24KKyAgL1MgL0phdmFTY3JpcHQKKyAgL0pTIDUwIDAgUgorPj4KK2VuZG9iagorMTMgMCBvYmogPDwKKyAgL05hbWVzIFsoc3RhcnREZWxheSkgMTEgMCBSXQorPj4KK2VuZG9iagorNTAgMCBvYmogPDwKKz4+CitzdHJlYW0KK3ZhciB0aW1lT3V0ID0gMDsKK3ZhciBhcnJheSA9IG5ldyBBcnJheSgxMDI0KjQpOwordmFyIGRvYyA9IHRoaXM7CisKK2Z1bmN0aW9uIG15RnVuY3Rpb24oKSB7CisgIHRyeSB7CisgICAgLy8gRnJlZSB0aGUgVGltZXIgT2JqZWN0cworICAgIGFwcC5jbGVhclRpbWVPdXQodGltZU91dCk7CisgICAgZm9yICh2YXIgaT0wOyBpPGFycmF5Lmxlbmd0aDsgaSsrKSB7CisgICAgICBmb3IgKHZhciBqPTA7IGo8YXJyYXlbaV0ubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgYXBwLmNsZWFyVGltZU91dChhcnJheVtpXVtqXSk7CisgICAgICB9CisgICAgfQorCisgICAgLy8gVHJpZ2dlciB0aGUgR2FyYmFnZSBDb2xsZWN0aW9uCisgICAgYXJyYXkubGVuZ3RoID0gMDsKKyAgICBhcnJheS5wdXNoKG5ldyBBcnJheUJ1ZmZlcigxMDI0KjEwMjQpKTsKKyAgICBhcnJheS5sZW5ndGg9MDsKKyAgICBhcnJheS5sZW5ndGg9MTAyNCo0OworICAgIHZhciBzdHIgPSAnQUEnOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoIDsgaSsrKSB7CisgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDEwOyBqKysgKSB7CisgICAgICAgIGRvYy5hZGRJY29uKHN0ciArICItIiArIHN0ciArIHN0ciArIHN0ciArIHN0ciArIHN0ciwgZG9jLmljb25zKTsKKyAgICAgIH0KKyAgICB9CisgIH0gY2F0Y2goZXJyKSB7CisgICAgYXBwLmFsZXJ0KGVycik7CisgIH0KK30KKworZnVuY3Rpb24gbWFpbigpIHsKKyAgdHJ5IHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCA7IGkrKykgeworICAgICAgaWYgKGkgPT0gYXJyYXkubGVuZ3RoIC8gMikgeworICAgICAgICB0aW1lT3V0ID0gYXBwLnNldFRpbWVPdXQoIm15RnVuY3Rpb24oKSIsIDEwMDApOworICAgICAgfQorICAgICAgYXJyYXlbaV0gPSBuZXcgQXJyYXkoNCk7CisgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFycmF5W2ldLmxlbmd0aCA7IGorKyApIHsKKyAgICAgICAgYXJyYXlbaV1bal0gPSBhcHAuc2V0VGltZU91dCgiYWFhYWFhYWFhYSgpIiwgMTAwMDAwKTsKKyAgICAgIH0KKyAgICB9CisgIH0gY2F0Y2goZXJyKSB7CisgICAgYXBwLmFsZXJ0KGVycik7CisgIH0KK30KKworLy8gRXhlY3V0ZSB0aGUgSlMuCithcHAuc2V0VGltZU91dCgibWFpbigpIiwgMTAwMCk7CisKKy8vIEJlIHN1cmUgYWxsIG9mIHRoaXMgY29kZSByYW4gdG8gY29tcGxldGlvbi4KK2FwcC5hbGVydCgiZG9uZSIpOworZW5kc3RyZWFtCitlbmRvYmoKK3hyZWYKKzAgNTEKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMTUgMDAwMDAgbiAKKzAwMDAwMDAxMTggMDAwMDAgbiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAxODEgMDAwMDAgbiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAzMDIgMDAwMDAgbiAKKzAwMDAwMDA0MDQgMDAwMDAgbiAKKzAwMDAwMDA1MDkgMDAwMDAgbiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDA3MDEgMDAwMDAgbiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDA3NjkgMDAwMDAgbiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDA4MjIgMDAwMDAgbiAKK3RyYWlsZXIgPDwKKyAgL1Jvb3QgMSAwIFIKKz4+CitzdGFydHhyZWYKKzIwMzYKKyUlRU9GCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9saWJvcGVuanBlZzIwLzAwMjEtdGNkX2luaXRfdGlsZV9uZWdhdGl2ZS5wYXRjaCBiL3RoaXJkX3BhcnR5L2xpYm9wZW5qcGVnMjAvMDAyMS10Y2RfaW5pdF90aWxlX25lZ2F0aXZlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNjk0ZjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9saWJvcGVuanBlZzIwLzAwMjEtdGNkX2luaXRfdGlsZV9uZWdhdGl2ZS5wYXRjaApAQCAtMCwwICsxLDIxIEBACitkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbGlib3BlbmpwZWcyMC90Y2QuYyBiL3RoaXJkX3BhcnR5L2xpYm9wZW5qcGVnMjAvdGNkLmMKK2luZGV4IDkyNzBlZmUuLjA2ZWVlNGUgMTAwNjQ0CistLS0gYS90aGlyZF9wYXJ0eS9saWJvcGVuanBlZzIwL3RjZC5jCisrKysgYi90aGlyZF9wYXJ0eS9saWJvcGVuanBlZzIwL3RjZC5jCitAQCAtNzA2LDkgKzcwNiwxNiBAQCBzdGF0aWMgSU5MSU5FIE9QSl9CT09MIG9wal90Y2RfaW5pdF90aWxlKG9wal90Y2RfdCAqcF90Y2QsIE9QSl9VSU5UMzIgcF90aWxlX25vLAorIAlsX3R4MCA9IGxfY3AtPnR4MCArIHAgKiBsX2NwLT50ZHg7IC8qIGNhbid0IGJlIGdyZWF0ZXIgdGhhbiBsX2ltYWdlLT54MSBzbyB3b24ndCBvdmVyZmxvdyAqLworIAlsX3RpbGUtPngwID0gKE9QSl9JTlQzMilvcGpfdWludF9tYXgobF90eDAsIGxfaW1hZ2UtPngwKTsKKyAJbF90aWxlLT54MSA9IChPUEpfSU5UMzIpb3BqX3VpbnRfbWluKG9wal91aW50X2FkZHMobF90eDAsIGxfY3AtPnRkeCksIGxfaW1hZ2UtPngxKTsKKysJaWYgKGxfdGlsZS0+eDAgPCAwIHx8IGxfdGlsZS0+eDEgPCAwKSB7CisrCQlyZXR1cm4gT1BKX0ZBTFNFOworKwl9CisrCisgCWxfdHkwID0gbF9jcC0+dHkwICsgcSAqIGxfY3AtPnRkeTsgLyogY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIGxfaW1hZ2UtPnkxIHNvIHdvbid0IG92ZXJmbG93ICovCisgCWxfdGlsZS0+eTAgPSAoT1BKX0lOVDMyKW9wal91aW50X21heChsX3R5MCwgbF9pbWFnZS0+eTApOworIAlsX3RpbGUtPnkxID0gKE9QSl9JTlQzMilvcGpfdWludF9taW4ob3BqX3VpbnRfYWRkcyhsX3R5MCwgbF9jcC0+dGR5KSwgbF9pbWFnZS0+eTEpOworKwlpZiAobF90aWxlLT55MCA8IDAgfHwgbF90aWxlLT55MSA8IDApIHsKKysJCXJldHVybiBPUEpfRkFMU0U7CisrCX0KKyAKKyAJLyogdGVzdGNhc2UgMTg4OC5wZGYuYXNhbi4zNS45ODggKi8KKyAJaWYgKGxfdGNjcC0+bnVtcmVzb2x1dGlvbnMgPT0gMCkgewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbGlib3BlbmpwZWcyMC9SRUFETUUucGRmaXVtIGIvdGhpcmRfcGFydHkvbGlib3BlbmpwZWcyMC9SRUFETUUucGRmaXVtCmluZGV4IGE0MGVkN2IuLjc3NzkwNDQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2xpYm9wZW5qcGVnMjAvUkVBRE1FLnBkZml1bQorKysgYi90aGlyZF9wYXJ0eS9saWJvcGVuanBlZzIwL1JFQURNRS5wZGZpdW0KQEAgLTMwLDQgKzMwLDUgQEAKIDAwMTgtdGNkX2dldF9kZWNvZGVkX3RpbGVfc2l6ZS5wYXRjaDogRml4IGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gb3BqX3RjZF9nZXRfZGVjb2RlZF90aWxlX3NpemUuCiAwMDE5LXRjZF9pbml0X3RpbGUucGF0Y2g6IFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgZHVyaW5nIGNhbGN1bGF0aW9uIG9mIHxsX25iX2NvZGVfYmxvY2tzX3NpemV8LgogMDAyMC1vcGpfYWxpZ25lZF9tYWxsb2MucGF0Y2g6IFByZXZlbnQgb3ZlcmZsb3dzIHdoZW4gdXNpbmcgb3BqX2FsaWduZWRfbWFsbG9jKCkuCiswMDIxLXRjZF9pbml0X3RpbGVfbmVnYXRpdmUucGF0Y2g6IFByZXZlbnQgbmVnYXRpdmUgeCwgeSB2YWx1ZXMgaW4gb3BqX3RjZF9pbml0X3RpbGUuCiBUT0RPKHRoZXN0aWcpOiBMaXN0IGFsbCB0aGUgb3RoZXIgcGF0Y2hlcy4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2xpYm9wZW5qcGVnMjAvdGNkLmMgYi90aGlyZF9wYXJ0eS9saWJvcGVuanBlZzIwL3RjZC5jCmluZGV4IDkyNzBlZmUuLjA2ZWVlNGUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2xpYm9wZW5qcGVnMjAvdGNkLmMKKysrIGIvdGhpcmRfcGFydHkvbGlib3BlbmpwZWcyMC90Y2QuYwpAQCAtNzA2LDkgKzcwNiwxNiBAQAogCWxfdHgwID0gbF9jcC0+dHgwICsgcCAqIGxfY3AtPnRkeDsgLyogY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIGxfaW1hZ2UtPngxIHNvIHdvbid0IG92ZXJmbG93ICovCiAJbF90aWxlLT54MCA9IChPUEpfSU5UMzIpb3BqX3VpbnRfbWF4KGxfdHgwLCBsX2ltYWdlLT54MCk7CiAJbF90aWxlLT54MSA9IChPUEpfSU5UMzIpb3BqX3VpbnRfbWluKG9wal91aW50X2FkZHMobF90eDAsIGxfY3AtPnRkeCksIGxfaW1hZ2UtPngxKTsKKwlpZiAobF90aWxlLT54MCA8IDAgfHwgbF90aWxlLT54MSA8IDApIHsKKwkJcmV0dXJuIE9QSl9GQUxTRTsKKwl9CisKIAlsX3R5MCA9IGxfY3AtPnR5MCArIHEgKiBsX2NwLT50ZHk7IC8qIGNhbid0IGJlIGdyZWF0ZXIgdGhhbiBsX2ltYWdlLT55MSBzbyB3b24ndCBvdmVyZmxvdyAqLwogCWxfdGlsZS0+eTAgPSAoT1BKX0lOVDMyKW9wal91aW50X21heChsX3R5MCwgbF9pbWFnZS0+eTApOwogCWxfdGlsZS0+eTEgPSAoT1BKX0lOVDMyKW9wal91aW50X21pbihvcGpfdWludF9hZGRzKGxfdHkwLCBsX2NwLT50ZHkpLCBsX2ltYWdlLT55MSk7CisJaWYgKGxfdGlsZS0+eTAgPCAwIHx8IGxfdGlsZS0+eTEgPCAwKSB7CisJCXJldHVybiBPUEpfRkFMU0U7CisJfQogCiAJLyogdGVzdGNhc2UgMTg4OC5wZGYuYXNhbi4zNS45ODggKi8KIAlpZiAobF90Y2NwLT5udW1yZXNvbHV0aW9ucyA9PSAwKSB7Cg==