ZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weSBiL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQppbmRleCA0ZThmZmU1Li4xMDNkMWEzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CkBAIC01NDUsNiArNTQ1LDM3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHVuaWNvZGUoIiAgMy4xNCAgIikpLCAzLjE0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCh1bmljb2RlKCIgIFx1MDY2My5cdTA2NjFcdTA2NjQgICIsJ3Jhdy11bmljb2RlLWVzY2FwZScpKSwgMy4xNCkKIAorICAgIGRlZiB0ZXN0X2Zsb2F0Y29udmVyc2lvbihzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBjYWxscyB0byBfX2Zsb2F0X18oKSB3b3JrIHByb3Blcmx5CisgICAgICAgIGNsYXNzIEZvbzA6CisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0Mi4KKworICAgICAgICBjbGFzcyBGb28xKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0Mi4KKworICAgICAgICBjbGFzcyBGb28yKGZsb2F0KToKKyAgICAgICAgICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyLgorCisgICAgICAgIGNsYXNzIEZvbzMoZmxvYXQpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCB2YWx1ZT0wLik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0Ll9fbmV3X18oY2xzLCAyKnZhbHVlKQorCisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgY2xhc3MgRm9vNChmbG9hdCk6CisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZmxvYXQoRm9vMCgpKSwgNDIuKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZsb2F0KEZvbzEoKSksIDQyLikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChmbG9hdChGb28yKCkpLCA0Mi4pCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZmxvYXQoRm9vMygyMSkpLCA0Mi4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmxvYXQsIEZvbzQoNDIpKQorCiAgICAgZGVmIHRlc3RfZ2V0YXR0cihzZWxmKToKICAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBzZWxmLmFzc2VydF8oZ2V0YXR0cihzeXMsICdzdGRvdXQnKSBpcyBzeXMuc3Rkb3V0KQpAQCAtNjUwLDYgKzY4MSwzOSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwMTIzJywgMCksIDgzKQogCisgICAgZGVmIHRlc3RfaW50Y29udmVyc2lvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IF9faW50X18oKQorICAgICAgICBjbGFzcyBGb28wOgorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgY2xhc3MgRm9vMShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgY2xhc3MgRm9vMihpbnQpOgorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgY2xhc3MgRm9vMyhpbnQpOgorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBjbGFzcyBGb280KGludCk6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDJMCisKKyAgICAgICAgY2xhc3MgRm9vNShpbnQpOgorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyLgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KEZvbzAoKSksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChGb28xKCkpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoRm9vMigpKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KEZvbzMoKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KEZvbzQoKSksIDQyTCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnQsIEZvbzUoKSkKKwogICAgIGRlZiB0ZXN0X2ludGVybihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnRlcm4pCiAgICAgICAgIHMgPSAibmV2ZXIgaW50ZXJuZWQgYmVmb3JlIgpAQCAtODEwLDYgKzg3NCwzOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb25nLCAnNTMnLCA0MCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsb25nLCAxLCAxMikKIAorICAgIGRlZiB0ZXN0X2xvbmdjb252ZXJzaW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgX19sb25nX18oKQorICAgICAgICBjbGFzcyBGb28wOgorICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MkwKKworICAgICAgICBjbGFzcyBGb28xKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyTAorCisgICAgICAgIGNsYXNzIEZvbzIobG9uZyk6CisgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyTAorCisgICAgICAgIGNsYXNzIEZvbzMobG9uZyk6CisgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBjbGFzcyBGb280KGxvbmcpOgorICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIGNsYXNzIEZvbzUobG9uZyk6CisgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyLgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhGb28wKCkpLCA0MkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhGb28xKCkpLCA0MkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhGb28yKCkpLCA0MkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhGb28zKCkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoRm9vNCgpKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbG9uZywgRm9vNSgpKQorCiAgICAgZGVmIHRlc3RfbWFwKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgbWFwKE5vbmUsICdoZWxsbyB3b3JsZCcpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5IGIvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5CmluZGV4IDE1ZjRiNjUuLjcwZTkxYzEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBsZXgucHkKQEAgLTI3Myw2ICsyNzMsMjggQEAKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KHJlYWw9ZmxvYXQyKDE3LiksIGltYWc9ZmxvYXQyKDIzLikpLCAxNysyM2opCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgZmxvYXQyKE5vbmUpKQogCisgICAgICAgIGNsYXNzIGNvbXBsZXgwKGNvbXBsZXgpOgorICAgICAgICAgICAgIiIiVGVzdCB1c2FnZSBvZiBfX2NvbXBsZXhfXygpIHdoZW4gaW5oZXJpdGluZyBmcm9tICdjb21wbGV4JyIiIgorICAgICAgICAgICAgZGVmIF9fY29tcGxleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MmoKKworICAgICAgICBjbGFzcyBjb21wbGV4MShjb21wbGV4KToKKyAgICAgICAgICAgICIiIlRlc3QgdXNhZ2Ugb2YgX19jb21wbGV4X18oKSB3aXRoIGEgX19uZXdfXygpIG1ldGhvZCIiIgorICAgICAgICAgICAgZGVmIF9fbmV3X18oc2VsZiwgdmFsdWU9MGopOgorICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV4Ll9fbmV3X18oc2VsZiwgMip2YWx1ZSkKKyAgICAgICAgICAgIGRlZiBfX2NvbXBsZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGNsYXNzIGNvbXBsZXgyKGNvbXBsZXgpOgorICAgICAgICAgICAgIiIiTWFrZSBzdXJlIHRoYXQgX19jb21wbGV4X18oKSBjYWxscyBmYWlsIGlmIGFueXRoaW5nIG90aGVyIHRoYW4gYQorICAgICAgICAgICAgY29tcGxleCBpcyByZXR1cm5lZCIiIgorICAgICAgICAgICAgZGVmIF9fY29tcGxleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KGNvbXBsZXgwKDFqKSksIDQyaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KGNvbXBsZXgxKDFqKSksIDJqKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIGNvbXBsZXgyKDFqKSkKKwogICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CiAgICAgICAgIGZvciB4IGluIHhyYW5nZSgtMzAsIDMwKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh4KSwgaGFzaChjb21wbGV4KHgsIDApKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RyLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHIucHkKaW5kZXggODI2MzJmMS4uNDU5NDJhNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHIucHkKQEAgLTE5LDYgKzE5LDY5IEBACiAgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X2Zvcm1hdHRpbmcoc2VsZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgJyVjJy5fX21vZF9fLCAweDEyMzQpCiAKKyAgICBkZWYgdGVzdF9jb252ZXJzaW9uKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBfX3N0cl9fKCkgYmVoYXZlcyBwcm9wZXJseQorICAgICAgICBjbGFzcyBGb28wOgorICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1ImZvbyIKKworICAgICAgICBjbGFzcyBGb28xOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJmb28iCisKKyAgICAgICAgY2xhc3MgRm9vMihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJmb28iCisKKyAgICAgICAgY2xhc3MgRm9vMyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUiZm9vIgorCisgICAgICAgIGNsYXNzIEZvbzQodW5pY29kZSk6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdSJmb28iCisKKyAgICAgICAgY2xhc3MgRm9vNShzdHIpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUiZm9vIgorCisgICAgICAgIGNsYXNzIEZvbzYoc3RyKToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZm9vcyIKKworICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1ImZvb3UiCisKKyAgICAgICAgY2xhc3MgRm9vNyh1bmljb2RlKToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZm9vcyIKKyAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdSJmb291IgorCisgICAgICAgIGNsYXNzIEZvbzgoc3RyKToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgY29udGVudD0iIik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5fX25ld19fKGNscywgMipjb250ZW50KQorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBjbGFzcyBGb285KHN0cik6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZyIKKyAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIm5vdCB1bmljb2RlIgorCisgICAgICAgIHNlbGYuYXNzZXJ0XyhzdHIoRm9vMCgpKS5zdGFydHN3aXRoKCI8IikpICMgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBfX3VuaWNvZGVfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb28xKCkpLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vMigpKSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzMoKSksICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb280KCJiYXIiKSksICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb281KCJiYXIiKSksICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb282KCJiYXIiKSksICJmb29zIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vNygiYmFyIikpLCAiZm9vcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzgoImZvbyIpKSwgImZvb2ZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzkoImZvbyIpKSwgInN0cmluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShGb285KCJmb28iKSksIHUibm90IHVuaWNvZGUiKQorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTdHJUZXN0KQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKaW5kZXggNjkyNDRmMC4uODAyNDJkNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQpAQCAtMzg5LDcgKzM4OSw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyVpJXMgJSouKnMnICUgKDEwLCAzLCA1LCAzLCB1J2FiYycsKSwgdScxMDMgICBhYmMnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclYycgJSB1J2EnLCB1J2EnKQogCi0KICAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKICAgICAgICAgIyB1bmljb2RlKG9iaikgdGVzdHMgKHRoaXMgbWFwcyB0byBQeU9iamVjdF9Vbmljb2RlKCkgYXQgQyBsZXZlbCkKIApAQCAtNzI1LDYgKzcyNCw2OSBAQAogICAgICAgICB5ID0geC5lbmNvZGUoInJhdy11bmljb2RlLWVzY2FwZSIpLmRlY29kZSgicmF3LXVuaWNvZGUtZXNjYXBlIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQogCisgICAgZGVmIHRlc3RfY29udmVyc2lvbihzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgX191bmljb2RlX18oKSB3b3JrcyBwcm9wZXJseQorICAgICAgICBjbGFzcyBGb28wOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJmb28iCisKKyAgICAgICAgY2xhc3MgRm9vMToKKyAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdSJmb28iCisKKyAgICAgICAgY2xhc3MgRm9vMihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1ImZvbyIKKworICAgICAgICBjbGFzcyBGb28zKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJmb28iCisKKyAgICAgICAgY2xhc3MgRm9vNChzdHIpOgorICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZm9vIgorCisgICAgICAgIGNsYXNzIEZvbzUodW5pY29kZSk6CisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJmb28iCisKKyAgICAgICAgY2xhc3MgRm9vNihzdHIpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJmb29zIgorCisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUiZm9vdSIKKworICAgICAgICBjbGFzcyBGb283KHVuaWNvZGUpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJmb29zIgorICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1ImZvb3UiCisKKyAgICAgICAgY2xhc3MgRm9vOCh1bmljb2RlKToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgY29udGVudD0iIik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGUuX19uZXdfXyhjbHMsIDIqY29udGVudCkKKyAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGNsYXNzIEZvbzkodW5pY29kZSk6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZyIKKyAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIm5vdCB1bmljb2RlIgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShGb28wKCkpLCB1ImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShGb28xKCkpLCB1ImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShGb28yKCkpLCB1ImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShGb28zKCkpLCB1ImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShGb280KCJiYXIiKSksIHUiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKEZvbzUoImJhciIpKSwgdSJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoRm9vNigiYmFyIikpLCB1ImZvb3UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoRm9vNygiYmFyIikpLCB1ImZvb3UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoRm9vOCgiZm9vIikpLCB1ImZvb2ZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzkoImZvbyIpKSwgInN0cmluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShGb285KCJmb28iKSksIHUibm90IHVuaWNvZGUiKQorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChVbmljb2RlVGVzdCkKIApkaWZmIC0tZ2l0IGEvTWlzYy9ORVdTIGIvTWlzYy9ORVdTCmluZGV4IDNjNmI2YzEuLjhkNzBmY2UgMTAwNjQ0Ci0tLSBhL01pc2MvTkVXUworKysgYi9NaXNjL05FV1MKQEAgLTEyLDYgKzEyLDE0IEBACiBDb3JlIGFuZCBidWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBwYXRjaCAjMTEwOTQyNDogaW50LCBsb25nLCBmbG9hdCwgY29tcGxleCwgYW5kIHVuaWNvZGUgbm93IGNoZWNrIGZvciB0aGUKKyAgcHJvcGVyIG1hZ2ljIHNsb3QgZm9yIHR5cGUgY29udmVyc2lvbnMgd2hlbiBzdWJjbGFzc2VkLiAgUHJldmlvdXNseSB0aGUKKyAgbWFnaWMgc2xvdCB3YXMgaWdub3JlZCBkdXJpbmcgY29udmVyc2lvbi4gIFNlbWFudGljcyBub3cgbWF0Y2ggdGhlIHdheQorICBzdWJjbGFzc2VzIG9mIHN0ciBhbHdheXMgYmVoYXZlZC4gIGludC9sb25nL2Zsb2F0LCBjb252ZXJzaW9uIG9mIGFuIGluc3RhbmNlCisgIHRvIHRoZSBiYXNlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRoZSBwcnJvcGVyIG5iXyogbWFnaWMgc2xvdCBhbmQgb3V0IG9mCisgIFB5TnVtYmVyXyooKS4KKyAgVGhhbmtzIFdhbHRlciBE9nJ3YWxkLgorCiAtIERlc2NyaXB0b3JzIGRlZmluZWQgaW4gQyB3aXRoIGEgUHlHZXRTZXREZWYgc3RydWN0dXJlLCB3aGVyZSB0aGUgc2V0dGVyIGlzCiAgIE5VTEwsIG5vdyByYWlzZSBhbiBBdHRyaWJ1dGVFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gc2V0IG9yIGRlbGV0ZSB0aGUKICAgYXR0cmlidXRlLiAgUHJldmlvdXNseSBhIFR5cGVFcnJvciB3YXMgcmFpc2VkLCBidXQgdGhpcyB3YXMgaW5jb25zaXN0ZW50CmRpZmYgLS1naXQgYS9PYmplY3RzL2Fic3RyYWN0LmMgYi9PYmplY3RzL2Fic3RyYWN0LmMKaW5kZXggODc1Yzg4MC4uZDI4MDA2YSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9hYnN0cmFjdC5jCisrKyBiL09iamVjdHMvYWJzdHJhY3QuYwpAQCAtOTUxLDcgKzk1MSwxOSBAQAogCQlQeV9JTkNSRUYobyk7CiAJCXJldHVybiBvOwogCX0KLQlpZiAoUHlJbnRfQ2hlY2sobykpIHsKKwltID0gby0+b2JfdHlwZS0+dHBfYXNfbnVtYmVyOworCWlmIChtICYmIG0tPm5iX2ludCkgeyAvKiBUaGlzIHNob3VsZCBpbmNsdWRlIHN1YmNsYXNzZXMgb2YgaW50ICovCisJCVB5T2JqZWN0ICpyZXMgPSBtLT5uYl9pbnQobyk7CisJCWlmIChyZXMgJiYgKCFQeUludF9DaGVjayhyZXMpICYmICFQeUxvbmdfQ2hlY2socmVzKSkpIHsKKwkJCVB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisJCQkJICAgICAiX19pbnRfXyByZXR1cm5lZCBub24taW50ICh0eXBlICUuMjAwcykiLAorCQkJCSAgICAgcmVzLT5vYl90eXBlLT50cF9uYW1lKTsKKwkJCVB5X0RFQ1JFRihyZXMpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcmV0dXJuIHJlczsKKwl9CisJaWYgKFB5SW50X0NoZWNrKG8pKSB7IC8qIEEgaW50IHN1YmNsYXNzIHdpdGhvdXQgbmJfaW50ICovCiAJCVB5SW50T2JqZWN0ICppbyA9IChQeUludE9iamVjdCopbzsKIAkJcmV0dXJuIFB5SW50X0Zyb21Mb25nKGlvLT5vYl9pdmFsKTsKIAl9CkBAIC05NjQsMTggKzk3Niw2IEBACiAJCQkJCSBQeVVuaWNvZGVfR0VUX1NJWkUobyksCiAJCQkJCSAxMCk7CiAjZW5kaWYKLQltID0gby0+b2JfdHlwZS0+dHBfYXNfbnVtYmVyOwotCWlmIChtICYmIG0tPm5iX2ludCkgewotCQlQeU9iamVjdCAqcmVzID0gbS0+bmJfaW50KG8pOwotCQlpZiAocmVzICYmICghUHlJbnRfQ2hlY2socmVzKSAmJiAhUHlMb25nX0NoZWNrKHJlcykpKSB7Ci0JCQlQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotCQkJCSAgICAgIl9faW50X18gcmV0dXJuZWQgbm9uLWludCAodHlwZSAlLjIwMHMpIiwKLQkJCQkgICAgIHJlcy0+b2JfdHlwZS0+dHBfbmFtZSk7Ci0JCQlQeV9ERUNSRUYocmVzKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCXJldHVybiByZXM7Ci0JfQogCWlmICghUHlPYmplY3RfQXNDaGFyQnVmZmVyKG8sICZidWZmZXIsICZidWZmZXJfbGVuKSkKIAkJcmV0dXJuIGludF9mcm9tX3N0cmluZygoY2hhciopYnVmZmVyLCBidWZmZXJfbGVuKTsKIApAQCAtMTAxMCwxMSArMTAxMCwxOSBAQAogCiAJaWYgKG8gPT0gTlVMTCkKIAkJcmV0dXJuIG51bGxfZXJyb3IoKTsKLQlpZiAoUHlMb25nX0NoZWNrRXhhY3QobykpIHsKLQkJUHlfSU5DUkVGKG8pOwotCQlyZXR1cm4gbzsKKwltID0gby0+b2JfdHlwZS0+dHBfYXNfbnVtYmVyOworCWlmIChtICYmIG0tPm5iX2xvbmcpIHsgLyogVGhpcyBzaG91bGQgaW5jbHVkZSBzdWJjbGFzc2VzIG9mIGxvbmcgKi8KKwkJUHlPYmplY3QgKnJlcyA9IG0tPm5iX2xvbmcobyk7CisJCWlmIChyZXMgJiYgKCFQeUludF9DaGVjayhyZXMpICYmICFQeUxvbmdfQ2hlY2socmVzKSkpIHsKKwkJCVB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisJCQkJICAgICAiX19sb25nX18gcmV0dXJuZWQgbm9uLWxvbmcgKHR5cGUgJS4yMDBzKSIsCisJCQkJICAgICByZXMtPm9iX3R5cGUtPnRwX25hbWUpOworCQkJUHlfREVDUkVGKHJlcyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlyZXR1cm4gcmVzOwogCX0KLQlpZiAoUHlMb25nX0NoZWNrKG8pKQorCWlmIChQeUxvbmdfQ2hlY2sobykpIC8qIEEgbG9uZyBzdWJjbGFzcyB3aXRob3V0IG5iX2xvbmcgKi8KIAkJcmV0dXJuIF9QeUxvbmdfQ29weSgoUHlMb25nT2JqZWN0ICopbyk7CiAJaWYgKFB5U3RyaW5nX0NoZWNrKG8pKQogCQkvKiBuZWVkIHRvIGRvIGV4dHJhIGVycm9yIGNoZWNraW5nIHRoYXQgUHlMb25nX0Zyb21TdHJpbmcoKQpAQCAtMTAzMCwxOCArMTAzOCw2IEBACiAJCQkJCSAgUHlVbmljb2RlX0dFVF9TSVpFKG8pLAogCQkJCQkgIDEwKTsKICNlbmRpZgotCW0gPSBvLT5vYl90eXBlLT50cF9hc19udW1iZXI7Ci0JaWYgKG0gJiYgbS0+bmJfbG9uZykgewotCQlQeU9iamVjdCAqcmVzID0gbS0+bmJfbG9uZyhvKTsKLQkJaWYgKHJlcyAmJiAoIVB5SW50X0NoZWNrKHJlcykgJiYgIVB5TG9uZ19DaGVjayhyZXMpKSkgewotCQkJUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLQkJCQkgICAgICJfX2xvbmdfXyByZXR1cm5lZCBub24tbG9uZyAodHlwZSAlLjIwMHMpIiwKLQkJCQkgICAgIHJlcy0+b2JfdHlwZS0+dHBfbmFtZSk7Ci0JCQlQeV9ERUNSRUYocmVzKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCXJldHVybiByZXM7Ci0JfQogCWlmICghUHlPYmplY3RfQXNDaGFyQnVmZmVyKG8sICZidWZmZXIsICZidWZmZXJfbGVuKSkKIAkJcmV0dXJuIGxvbmdfZnJvbV9zdHJpbmcoYnVmZmVyLCBidWZmZXJfbGVuKTsKIApAQCAtMTA1NSwyOCArMTA1MSwyMiBAQAogCiAJaWYgKG8gPT0gTlVMTCkKIAkJcmV0dXJuIG51bGxfZXJyb3IoKTsKLQlpZiAoUHlGbG9hdF9DaGVja0V4YWN0KG8pKSB7Ci0JCVB5X0lOQ1JFRihvKTsKLQkJcmV0dXJuIG87CisJbSA9IG8tPm9iX3R5cGUtPnRwX2FzX251bWJlcjsKKwlpZiAobSAmJiBtLT5uYl9mbG9hdCkgeyAvKiBUaGlzIHNob3VsZCBpbmNsdWRlIHN1YmNsYXNzZXMgb2YgZmxvYXQgKi8KKwkJUHlPYmplY3QgKnJlcyA9IG0tPm5iX2Zsb2F0KG8pOworCQlpZiAocmVzICYmICFQeUZsb2F0X0NoZWNrKHJlcykpIHsKKwkJCVB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisJCSAgICAgICAgICAiX19mbG9hdF9fIHJldHVybmVkIG5vbi1mbG9hdCAodHlwZSAlLjIwMHMpIiwKKwkJICAgICAgICAgIHJlcy0+b2JfdHlwZS0+dHBfbmFtZSk7CisJCQlQeV9ERUNSRUYocmVzKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXJldHVybiByZXM7CiAJfQotCWlmIChQeUZsb2F0X0NoZWNrKG8pKSB7CisJaWYgKFB5RmxvYXRfQ2hlY2sobykpIHsgLyogQSBmbG9hdCBzdWJjbGFzcyB3aXRoIG5iX2Zsb2F0ID09IE5VTEwgKi8KIAkJUHlGbG9hdE9iamVjdCAqcG8gPSAoUHlGbG9hdE9iamVjdCAqKW87CiAJCXJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUocG8tPm9iX2Z2YWwpOwogCX0KLQlpZiAoIVB5U3RyaW5nX0NoZWNrKG8pKSB7Ci0JCW0gPSBvLT5vYl90eXBlLT50cF9hc19udW1iZXI7Ci0JCWlmIChtICYmIG0tPm5iX2Zsb2F0KSB7Ci0JCQlQeU9iamVjdCAqcmVzID0gbS0+bmJfZmxvYXQobyk7Ci0JCQlpZiAocmVzICYmICFQeUZsb2F0X0NoZWNrKHJlcykpIHsKLQkJCQlQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotCQkJICAgICAgICAgICJfX2Zsb2F0X18gcmV0dXJuZWQgbm9uLWZsb2F0ICh0eXBlICUuMjAwcykiLAotCQkJICAgICAgICAgIHJlcy0+b2JfdHlwZS0+dHBfbmFtZSk7Ci0JCQkJUHlfREVDUkVGKHJlcyk7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCQlyZXR1cm4gcmVzOwotCQl9Ci0JfQogCXJldHVybiBQeUZsb2F0X0Zyb21TdHJpbmcobywgTlVMTCk7CiB9CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvZmxvYXRvYmplY3QuYyBiL09iamVjdHMvZmxvYXRvYmplY3QuYwppbmRleCA1MzljNGE5Li41NWY0M2NiIDEwMDY0NAotLS0gYS9PYmplY3RzL2Zsb2F0b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9mbG9hdG9iamVjdC5jCkBAIC05MjYsNyArOTI2LDEwIEBACiBzdGF0aWMgUHlPYmplY3QgKgogZmxvYXRfZmxvYXQoUHlPYmplY3QgKnYpCiB7Ci0JUHlfSU5DUkVGKHYpOworCWlmIChQeUZsb2F0X0NoZWNrRXhhY3QodikpCisJCVB5X0lOQ1JFRih2KTsKKwllbHNlCisJCXYgPSBQeUZsb2F0X0Zyb21Eb3VibGUoKChQeUZsb2F0T2JqZWN0ICopdiktPm9iX2Z2YWwpOwogCXJldHVybiB2OwogfQogCmRpZmYgLS1naXQgYS9PYmplY3RzL2ludG9iamVjdC5jIGIvT2JqZWN0cy9pbnRvYmplY3QuYwppbmRleCA3NjNlZDUzLi4wZWFkNzRiIDEwMDY0NAotLS0gYS9PYmplY3RzL2ludG9iamVjdC5jCisrKyBiL09iamVjdHMvaW50b2JqZWN0LmMKQEAgLTgyNiw3ICs4MjYsMTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBpbnRfaW50KFB5SW50T2JqZWN0ICp2KQogewotCVB5X0lOQ1JFRih2KTsKKwlpZiAoUHlJbnRfQ2hlY2tFeGFjdCh2KSkKKwkJUHlfSU5DUkVGKHYpOworCWVsc2UKKwkJdiA9IChQeUludE9iamVjdCAqKVB5SW50X0Zyb21Mb25nKHYtPm9iX2l2YWwpOwogCXJldHVybiAoUHlPYmplY3QgKil2OwogfQogCmRpZmYgLS1naXQgYS9PYmplY3RzL2xvbmdvYmplY3QuYyBiL09iamVjdHMvbG9uZ29iamVjdC5jCmluZGV4IDExYTcwMjQuLmU0ZmM1NTMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbG9uZ29iamVjdC5jCisrKyBiL09iamVjdHMvbG9uZ29iamVjdC5jCkBAIC0yODYxLDcgKzI4NjEsMTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBsb25nX2xvbmcoUHlPYmplY3QgKnYpCiB7Ci0JUHlfSU5DUkVGKHYpOworCWlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSkKKwkJUHlfSU5DUkVGKHYpOworCWVsc2UKKwkJdiA9IF9QeUxvbmdfQ29weSgoUHlMb25nT2JqZWN0ICopdik7CiAJcmV0dXJuIHY7CiB9CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvb2JqZWN0LmMgYi9PYmplY3RzL29iamVjdC5jCmluZGV4IGQ4NmQ3NGYuLjk3NWM5NjcgMTAwNjQ0Ci0tLSBhL09iamVjdHMvb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9vYmplY3QuYwpAQCAtMzczLDYgKzM3Myw4IEBACiBQeU9iamVjdF9Vbmljb2RlKFB5T2JqZWN0ICp2KQogewogCVB5T2JqZWN0ICpyZXM7CisJUHlPYmplY3QgKmZ1bmM7CisJc3RhdGljIFB5T2JqZWN0ICp1bmljb2Rlc3RyOwogCiAJaWYgKHYgPT0gTlVMTCkKIAkJcmVzID0gUHlTdHJpbmdfRnJvbVN0cmluZygiPE5VTEw+Iik7CkBAIC0zODAsMzUgKzM4MiwzMiBAQAogCQlQeV9JTkNSRUYodik7CiAJCXJldHVybiB2OwogCX0KLQlpZiAoUHlVbmljb2RlX0NoZWNrKHYpKSB7Ci0JCS8qIEZvciBhIFVuaWNvZGUgc3VidHlwZSB0aGF0J3Mgbm90IGEgVW5pY29kZSBvYmplY3QsCi0JCSAgIHJldHVybiBhIHRydWUgVW5pY29kZSBvYmplY3Qgd2l0aCB0aGUgc2FtZSBkYXRhLiAqLwotCQlyZXR1cm4gUHlVbmljb2RlX0Zyb21Vbmljb2RlKFB5VW5pY29kZV9BU19VTklDT0RFKHYpLAotCQkJCQkgICAgIFB5VW5pY29kZV9HRVRfU0laRSh2KSk7CisJLyogWFhYIEFzIHNvb24gYXMgd2UgaGF2ZSBhIHRwX3VuaWNvZGUgc2xvdCwgd2Ugc2hvdWxkCisJICAgY2hlY2sgdGhpcyBiZWZvcmUgdHJ5aW5nIHRoZSBfX3VuaWNvZGVfXworCSAgIG1ldGhvZC4gKi8KKwlpZiAodW5pY29kZXN0ciA9PSBOVUxMKSB7CisJCXVuaWNvZGVzdHI9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIl9fdW5pY29kZV9fIik7CisJCWlmICh1bmljb2Rlc3RyID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaWYgKFB5U3RyaW5nX0NoZWNrKHYpKSB7Ci0JCVB5X0lOQ1JFRih2KTsKLQkgICAgCXJlcyA9IHY7Ci0gICAgCX0KKwlmdW5jID0gUHlPYmplY3RfR2V0QXR0cih2LCB1bmljb2Rlc3RyKTsKKwlpZiAoZnVuYyAhPSBOVUxMKSB7CisJCXJlcyA9IFB5RXZhbF9DYWxsT2JqZWN0KGZ1bmMsIChQeU9iamVjdCAqKU5VTEwpOworCQlQeV9ERUNSRUYoZnVuYyk7CisJfQogCWVsc2UgewotCQlQeU9iamVjdCAqZnVuYzsKLQkJc3RhdGljIFB5T2JqZWN0ICp1bmljb2Rlc3RyOwotCQkvKiBYWFggQXMgc29vbiBhcyB3ZSBoYXZlIGEgdHBfdW5pY29kZSBzbG90LCB3ZSBzaG91bGQKLQkJICAgICAgIGNoZWNrIHRoaXMgYmVmb3JlIHRyeWluZyB0aGUgX191bmljb2RlX18KLQkJICAgICAgIG1ldGhvZC4gKi8KLQkJaWYgKHVuaWNvZGVzdHIgPT0gTlVMTCkgewotCQkJdW5pY29kZXN0cj0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygKLQkJCQkJCSAgICAgICAiX191bmljb2RlX18iKTsKLQkJCWlmICh1bmljb2Rlc3RyID09IE5VTEwpCi0JCQkJcmV0dXJuIE5VTEw7CisJCVB5RXJyX0NsZWFyKCk7CisJCWlmIChQeVVuaWNvZGVfQ2hlY2sodikpIHsKKwkJCS8qIEZvciBhIFVuaWNvZGUgc3VidHlwZSB0aGF0J3MgZGlkbid0IG92ZXJ3cml0ZSBfX3VuaWNvZGVfXywKKwkJCSAgIHJldHVybiBhIHRydWUgVW5pY29kZSBvYmplY3Qgd2l0aCB0aGUgc2FtZSBkYXRhLiAqLworCQkJcmV0dXJuIFB5VW5pY29kZV9Gcm9tVW5pY29kZShQeVVuaWNvZGVfQVNfVU5JQ09ERSh2KSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHYpKTsKIAkJfQotCQlmdW5jID0gUHlPYmplY3RfR2V0QXR0cih2LCB1bmljb2Rlc3RyKTsKLQkJaWYgKGZ1bmMgIT0gTlVMTCkgewotCQkgICAgCXJlcyA9IFB5RXZhbF9DYWxsT2JqZWN0KGZ1bmMsIChQeU9iamVjdCAqKU5VTEwpOwotCQkJUHlfREVDUkVGKGZ1bmMpOworCQlpZiAoUHlTdHJpbmdfQ2hlY2tFeGFjdCh2KSkgeworCQkJUHlfSU5DUkVGKHYpOworCQkJcmVzID0gdjsKIAkJfQogCQllbHNlIHsKLQkJCVB5RXJyX0NsZWFyKCk7CiAJCQlpZiAodi0+b2JfdHlwZS0+dHBfc3RyICE9IE5VTEwpCiAJCQkJcmVzID0gKCp2LT5vYl90eXBlLT50cF9zdHIpKHYpOwogCQkJZWxzZQpAQCAtNDI0LDcgKzQyMyw3IEBACiAJCWlmIChzdHIpCiAJCQlyZXMgPSBzdHI7CiAJCWVsc2UKLQkJICAgIAlyZXR1cm4gTlVMTDsKKwkJCXJldHVybiBOVUxMOwogCX0KIAlyZXR1cm4gcmVzOwogfQo=