R2l0IGNvbW1pdCBhODUzMWNiMGFkZjJmNmVkNjVhY2ZkYjc1OGIxNmQ1ZjUxZTI4OThjIGJ5IERt aXRyeSBLYXpha292LgpDb21taXR0ZWQgb24gMTEvMDYvMjAxNSBhdCAxNTozNC4KUHVzaGVkIGJ5 IGRrYXpha292IGludG8gYnJhbmNoICdjYWxsaWdyYS8yLjknLgoKW0ZFQVRVUkVdIEltcGxlbWVu dGVkIGEgY29tcG9zaXRlIFJHQiBjdXJ2ZSBmb3IgQ3VydmVzIGZpbHRlcgoKTm93IHRoZSBjdXJ2 ZXMgZmlsdGVyIHByb3ZpZGVzIHR3byB3YXlzIG9mIGFkanVzdGluZyBpbWFnZSBicmlnaHRuZXNz OgoKMSkgQWRqdXN0aW5nIGEgZ3JvdXBlZCBSR0IgY3VydmUKMikgQWRqdXN0aW5nIEwgY2hhbm5l bCBvZiBMYWIgc2VwYXJhdGlvbiBvZiB0aGUgaW1hZ2UgdXNpbmcgJ0xpZ2h0bmVzcycKICAgY3Vy dmUKCmh0dHA6Ly9ub25heW5ldmVyLnJ1L2t3aWtpL2tyaXRhL3B1Ymxpc2hlZC9MX3ZzX1JHQl9j dXJ2ZV9jb21wYXJpc29uCgpSZWYgVDM1MgpDQzpraW1hZ2VzaG9wQGtkZS5vcmcKCk0gICs1OSAg IC0yNyAgIGtyaXRhL3BsdWdpbnMvZmlsdGVycy9jb2xvcnNmaWx0ZXJzL2tpc19wZXJjaGFubmVs X2ZpbHRlci5jcHAKTSAgKzIxICAgLTQgICAga3JpdGEvcGx1Z2lucy9maWx0ZXJzL2NvbG9yc2Zp bHRlcnMvdmlydHVhbF9jaGFubmVsX2luZm8uY3BwCk0gICsxMSAgIC0yICAgIGtyaXRhL3BsdWdp bnMvZmlsdGVycy9jb2xvcnNmaWx0ZXJzL3ZpcnR1YWxfY2hhbm5lbF9pbmZvLmgKTSAgKzM3ICAg LTEgICAgbGlicy9waWdtZW50L0tvQ29tcG9zaXRlQ29sb3JUcmFuc2Zvcm1hdGlvbi5jcHAKTSAg KzIgICAgLTAgICAgbGlicy9waWdtZW50L0tvQ29tcG9zaXRlQ29sb3JUcmFuc2Zvcm1hdGlvbi5o Ck0gICs2ICAgIC0yICAgIHBsdWdpbnMvY29sb3JlbmdpbmVzL2xjbXMyL0xjbXNDb2xvclNwYWNl LmgKCmh0dHA6Ly9jb21taXRzLmtkZS5vcmcvY2FsbGlncmEvYTg1MzFjYjBhZGYyZjZlZDY1YWNm ZGI3NThiMTZkNWY1MWUyODk4YwoKZGlmZiAtLWdpdCBhL2tyaXRhL3BsdWdpbnMvZmlsdGVycy9j b2xvcnNmaWx0ZXJzL2tpc19wZXJjaGFubmVsX2ZpbHRlci5jcHAgYi9rcml0YS9wbHVnaW5zL2Zp bHRlcnMvY29sb3JzZmlsdGVycy9raXNfcGVyY2hhbm5lbF9maWx0ZXIuY3BwCmluZGV4IDZiZGM4 MjguLmU5YWEzMDcgMTAwNjQ0Ci0tLSBhL2tyaXRhL3BsdWdpbnMvZmlsdGVycy9jb2xvcnNmaWx0 ZXJzL2tpc19wZXJjaGFubmVsX2ZpbHRlci5jcHAKKysrIGIva3JpdGEvcGx1Z2lucy9maWx0ZXJz L2NvbG9yc2ZpbHRlcnMva2lzX3BlcmNoYW5uZWxfZmlsdGVyLmNwcApAQCAtNTcsMTMgKzU3LDE1 IEBAIFFWZWN0b3I8VmlydHVhbENoYW5uZWxJbmZvPiBnZXRWaXJ0dWFsQ2hhbm5lbHMoY29uc3Qg S29Db2xvclNwYWNlICpjcykKICAgICBRTGlzdDxLb0NoYW5uZWxJbmZvICo+IHNvcnRlZENoYW5u ZWxzID0KICAgICAgICAgS29DaGFubmVsSW5mbzo6ZGlzcGxheU9yZGVyU29ydGVkKGNzLT5jaGFu bmVscygpKTsKIAotICAgIHZjaGFubmVscyA8PCBWaXJ0dWFsQ2hhbm5lbEluZm8oVmlydHVhbENo YW5uZWxJbmZvOjpMSUdIVE5FU1MsIC0xLCAwKTsKKyAgICB2Y2hhbm5lbHMgPDwgVmlydHVhbENo YW5uZWxJbmZvKFZpcnR1YWxDaGFubmVsSW5mbzo6QUxMX0NPTE9SUywgLTEsIDAsIGNzKTsKIAog ICAgIGZvcmVhY2goS29DaGFubmVsSW5mbyAqY2hhbm5lbCwgc29ydGVkQ2hhbm5lbHMpIHsKICAg ICAgICAgaW50IHBpeGVsSW5kZXggPSBLb0NoYW5uZWxJbmZvOjpkaXNwbGF5UG9zaXRpb25Ub0No YW5uZWxJbmRleChjaGFubmVsLT5kaXNwbGF5UG9zaXRpb24oKSwgc29ydGVkQ2hhbm5lbHMpOwot ICAgICAgICB2Y2hhbm5lbHMgPDwgVmlydHVhbENoYW5uZWxJbmZvKFZpcnR1YWxDaGFubmVsSW5m bzo6UkVBTCwgcGl4ZWxJbmRleCwgY2hhbm5lbCk7CisgICAgICAgIHZjaGFubmVscyA8PCBWaXJ0 dWFsQ2hhbm5lbEluZm8oVmlydHVhbENoYW5uZWxJbmZvOjpSRUFMLCBwaXhlbEluZGV4LCBjaGFu bmVsLCBjcyk7CiAgICAgfQogCisgICAgdmNoYW5uZWxzIDw8IFZpcnR1YWxDaGFubmVsSW5mbyhW aXJ0dWFsQ2hhbm5lbEluZm86OkxJR0hUTkVTUywgLTEsIDAsIGNzKTsKKwogICAgIHJldHVybiB2 Y2hhbm5lbHM7CiB9CiAKQEAgLTQ4MSw2MCArNDgzLDkwIEBAIEtvQ29sb3JUcmFuc2Zvcm1hdGlv biogS2lzUGVyQ2hhbm5lbEZpbHRlcjo6Y3JlYXRlVHJhbnNmb3JtYXRpb24oY29uc3QgS29Db2xv clNwCiAKICAgICBib29sIGNvbG9yc051bGwgPSB0cnVlOwogICAgIGJvb2wgbGlnaHRuZXNzTnVs bCA9IHRydWU7CisgICAgYm9vbCBhbGxDb2xvcnNOdWxsID0gdHJ1ZTsKKyAgICBpbnQgYWxwaGFJ bmRleEluUmVhbCA9IC0xOwogCiAgICAgUVZlY3RvcjxRVmVjdG9yPHF1aW50MTY+ID4gcmVhbFRy YW5zZmVyczsKLSAgICBRVmVjdG9yPHF1aW50MTY+IGxpZ2h0bmVzc1RhbnNmZXI7CisgICAgUVZl Y3RvcjxxdWludDE2PiBsaWdodG5lc3NUcmFuc2ZlcjsKKyAgICBRVmVjdG9yPHF1aW50MTY+IGFs bENvbG9yc1RyYW5zZmVyOworCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2aXJ0dWFsQ2hhbm5l bHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKHZpcnR1YWxDaGFubmVsc1tpXS50eXBlKCkg PT0gVmlydHVhbENoYW5uZWxJbmZvOjpSRUFMKSB7CiAgICAgICAgICAgICByZWFsVHJhbnNmZXJz IDw8IG9yaWdpbmFsVHJhbnNmZXJzW2ldOworCisgICAgICAgICAgICBpZiAodmlydHVhbENoYW5u ZWxzW2ldLmlzQWxwaGEoKSkgeworICAgICAgICAgICAgICAgIGFscGhhSW5kZXhJblJlYWwgPSBy ZWFsVHJhbnNmZXJzLnNpemUoKSAtIDE7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlm IChjb2xvcnNOdWxsICYmICFvcmlnaW5hbEN1cnZlc1tpXS5pc051bGwoKSkgewogICAgICAgICAg ICAgICAgIGNvbG9yc051bGwgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl IGlmICh2aXJ0dWFsQ2hhbm5lbHNbaV0udHlwZSgpID09IFZpcnR1YWxDaGFubmVsSW5mbzo6TElH SFRORVNTKSB7Ci0gICAgICAgICAgICBLSVNfQVNTRVJUX1JFQ09WRVJfTk9PUChsaWdodG5lc3NU YW5zZmVyLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBsaWdodG5lc3NUYW5zZmVyID0gb3JpZ2lu YWxUcmFuc2ZlcnNbaV07CisgICAgICAgICAgICBLSVNfQVNTRVJUX1JFQ09WRVJfTk9PUChsaWdo dG5lc3NUcmFuc2Zlci5pc0VtcHR5KCkpOworICAgICAgICAgICAgbGlnaHRuZXNzVHJhbnNmZXIg PSBvcmlnaW5hbFRyYW5zZmVyc1tpXTsKIAogICAgICAgICAgICAgaWYgKGxpZ2h0bmVzc051bGwg JiYgIW9yaWdpbmFsQ3VydmVzW2ldLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgbGlnaHRu ZXNzTnVsbCA9IGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgICAg ICB9IGVsc2UgaWYgKHZpcnR1YWxDaGFubmVsc1tpXS50eXBlKCkgPT0gVmlydHVhbENoYW5uZWxJ bmZvOjpBTExfQ09MT1JTKSB7CisgICAgICAgICAgICBLSVNfQVNTRVJUX1JFQ09WRVJfTk9PUChh bGxDb2xvcnNUcmFuc2Zlci5pc0VtcHR5KCkpOworICAgICAgICAgICAgYWxsQ29sb3JzVHJhbnNm ZXIgPSBvcmlnaW5hbFRyYW5zZmVyc1tpXTsKIAotICAgIGNvbnN0IHF1aW50MTYqKiB0cmFuc2Zl cnMgPSBuZXcgY29uc3QgcXVpbnQxNipbY29uZmlnQkMtPmN1cnZlcygpLnNpemUoKV07Ci0gICAg Zm9yKGludCBpID0gMDsgaSA8IHJlYWxUcmFuc2ZlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg dHJhbnNmZXJzW2ldID0gcmVhbFRyYW5zZmVyc1tpXS5jb25zdERhdGEoKTsKKyAgICAgICAgICAg IGlmIChhbGxDb2xvcnNOdWxsICYmICFvcmlnaW5hbEN1cnZlc1tpXS5pc051bGwoKSkgeworICAg ICAgICAgICAgICAgIGFsbENvbG9yc051bGwgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQogICAgIH0KIAogICAgIEtvQ29sb3JUcmFuc2Zvcm1hdGlvbiAqbGlnaHRuZXNzVHJhbnNm b3JtID0gMDsKKyAgICBLb0NvbG9yVHJhbnNmb3JtYXRpb24gKmFsbENvbG9yc1RyYW5zZm9ybSA9 IDA7CiAgICAgS29Db2xvclRyYW5zZm9ybWF0aW9uICpjb2xvclRyYW5zZm9ybSA9IDA7CiAKICAg ICBpZiAoIWNvbG9yc051bGwpIHsKKyAgICAgICAgY29uc3QgcXVpbnQxNioqIHRyYW5zZmVycyA9 IG5ldyBjb25zdCBxdWludDE2KltyZWFsVHJhbnNmZXJzLnNpemUoKV07CisgICAgICAgIGZvcihp bnQgaSA9IDA7IGkgPCByZWFsVHJhbnNmZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICB0 cmFuc2ZlcnNbaV0gPSByZWFsVHJhbnNmZXJzW2ldLmNvbnN0RGF0YSgpOworCisgICAgICAgICAg ICAvKioKKyAgICAgICAgICAgICAqIGNyZWF0ZVBlckNoYW5uZWxBZGp1c3RtZW50KCkgZXhwZWN0 cyBhbHBoYSBjaGFubmVsIHRvCisgICAgICAgICAgICAgKiBiZSB0aGUgbGFzdCBjaGFubmVsIGlu IHRoZSBsaXN0LCBzbyBqdXN0IGl0IGhlcmUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAg S0lTX0FTU0VSVF9SRUNPVkVSX05PT1AoaSAhPSBhbHBoYUluZGV4SW5SZWFsIHx8CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYUluZGV4SW5SZWFsID09IChyZWFsVHJh bnNmZXJzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGNvbG9yVHJhbnNmb3Jt ID0gY3MtPmNyZWF0ZVBlckNoYW5uZWxBZGp1c3RtZW50KHRyYW5zZmVycyk7CisgICAgICAgIGRl bGV0ZSBbXSB0cmFuc2ZlcnM7CiAgICAgfQogCiAgICAgaWYgKCFsaWdodG5lc3NOdWxsKSB7Ci0g ICAgICAgIGxpZ2h0bmVzc1RyYW5zZm9ybSA9IGNzLT5jcmVhdGVCcmlnaHRuZXNzQ29udHJhc3RB ZGp1c3RtZW50KGxpZ2h0bmVzc1RhbnNmZXIuY29uc3REYXRhKCkpOworICAgICAgICBsaWdodG5l c3NUcmFuc2Zvcm0gPSBjcy0+Y3JlYXRlQnJpZ2h0bmVzc0NvbnRyYXN0QWRqdXN0bWVudChsaWdo dG5lc3NUcmFuc2Zlci5jb25zdERhdGEoKSk7CiAgICAgfQogCi0gICAgS29Db2xvclRyYW5zZm9y bWF0aW9uICpmaW5hbFRyYW5zZm9ybSA9IDA7Ci0KLSAgICBpZiAoY29sb3JUcmFuc2Zvcm0gJiYg bGlnaHRuZXNzVHJhbnNmb3JtKSB7Ci0gICAgICAgIEtvQ29tcG9zaXRlQ29sb3JUcmFuc2Zvcm1h dGlvbiAqY29tcG9zaXRlVHJhbnNmb3JtID0KLSAgICAgICAgICAgIG5ldyBLb0NvbXBvc2l0ZUNv bG9yVHJhbnNmb3JtYXRpb24oCi0gICAgICAgICAgICAgICAgS29Db21wb3NpdGVDb2xvclRyYW5z Zm9ybWF0aW9uOjpJTlBMQUNFKTsKLQotICAgICAgICBjb21wb3NpdGVUcmFuc2Zvcm0tPmFwcGVu ZFRyYW5zZm9ybShjb2xvclRyYW5zZm9ybSk7Ci0gICAgICAgIGNvbXBvc2l0ZVRyYW5zZm9ybS0+ YXBwZW5kVHJhbnNmb3JtKGxpZ2h0bmVzc1RyYW5zZm9ybSk7CisgICAgaWYgKCFhbGxDb2xvcnNO dWxsKSB7CisgICAgICAgIGNvbnN0IHF1aW50MTYqKiBhbGxDb2xvcnNUcmFuc2ZlcnMgPSBuZXcg Y29uc3QgcXVpbnQxNipbcmVhbFRyYW5zZmVycy5zaXplKCldOworICAgICAgICBmb3IoaW50IGkg PSAwOyBpIDwgcmVhbFRyYW5zZmVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYWxsQ29s b3JzVHJhbnNmZXJzW2ldID0gKGkgIT0gYWxwaGFJbmRleEluUmVhbCkgPworICAgICAgICAgICAg ICAgIGFsbENvbG9yc1RyYW5zZmVyLmNvbnN0RGF0YSgpIDogMDsKKworICAgICAgICAgICAgLyoq CisgICAgICAgICAgICAgKiBjcmVhdGVQZXJDaGFubmVsQWRqdXN0bWVudCgpIGV4cGVjdHMgYWxw aGEgY2hhbm5lbCB0bworICAgICAgICAgICAgICogYmUgdGhlIGxhc3QgY2hhbm5lbCBpbiB0aGUg bGlzdCwgc28ganVzdCBpdCBoZXJlCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIEtJU19B U1NFUlRfUkVDT1ZFUl9OT09QKGkgIT0gYWxwaGFJbmRleEluUmVhbCB8fAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFJbmRleEluUmVhbCA9PSAocmVhbFRyYW5zZmVy cy5zaXplKCkgLSAxKSk7CisgICAgICAgIH0KIAotICAgICAgICBmaW5hbFRyYW5zZm9ybSA9IGNv bXBvc2l0ZVRyYW5zZm9ybTsKLSAgICB9IGVsc2UgaWYgKGxpZ2h0bmVzc1RyYW5zZm9ybSkgewot ICAgICAgICBmaW5hbFRyYW5zZm9ybSA9IGxpZ2h0bmVzc1RyYW5zZm9ybTsKLSAgICB9IGVsc2Ug IGlmIChjb2xvclRyYW5zZm9ybSkgewotICAgICAgICBmaW5hbFRyYW5zZm9ybSA9IGNvbG9yVHJh bnNmb3JtOworICAgICAgICBhbGxDb2xvcnNUcmFuc2Zvcm0gPSBjcy0+Y3JlYXRlUGVyQ2hhbm5l bEFkanVzdG1lbnQoYWxsQ29sb3JzVHJhbnNmZXJzKTsKKyAgICAgICAgZGVsZXRlW10gYWxsQ29s b3JzVHJhbnNmZXJzOwogICAgIH0KIAotICAgIGRlbGV0ZSBbXSB0cmFuc2ZlcnM7Ci0gICAgcmV0 dXJuIGZpbmFsVHJhbnNmb3JtOworICAgIFFWZWN0b3I8S29Db2xvclRyYW5zZm9ybWF0aW9uKj4g YWxsVHJhbnNmb3JtczsKKyAgICBhbGxUcmFuc2Zvcm1zIDw8IGxpZ2h0bmVzc1RyYW5zZm9ybTsK KyAgICBhbGxUcmFuc2Zvcm1zIDw8IGFsbENvbG9yc1RyYW5zZm9ybTsKKyAgICBhbGxUcmFuc2Zv cm1zIDw8IGNvbG9yVHJhbnNmb3JtOworCisgICAgcmV0dXJuIEtvQ29tcG9zaXRlQ29sb3JUcmFu c2Zvcm1hdGlvbjo6Y3JlYXRlT3B0aW1pemVkQ29tcG9zaXRlVHJhbnNmb3JtKGFsbFRyYW5zZm9y bXMpOwogfQogCiAjaW5jbHVkZSAia2lzX3BlcmNoYW5uZWxfZmlsdGVyLm1vYyIKZGlmZiAtLWdp dCBhL2tyaXRhL3BsdWdpbnMvZmlsdGVycy9jb2xvcnNmaWx0ZXJzL3ZpcnR1YWxfY2hhbm5lbF9p bmZvLmNwcCBiL2tyaXRhL3BsdWdpbnMvZmlsdGVycy9jb2xvcnNmaWx0ZXJzL3ZpcnR1YWxfY2hh bm5lbF9pbmZvLmNwcAppbmRleCBhYWU1ODA2Li4zYjA0MmFkIDEwMDY0NAotLS0gYS9rcml0YS9w bHVnaW5zL2ZpbHRlcnMvY29sb3JzZmlsdGVycy92aXJ0dWFsX2NoYW5uZWxfaW5mby5jcHAKKysr IGIva3JpdGEvcGx1Z2lucy9maWx0ZXJzL2NvbG9yc2ZpbHRlcnMvdmlydHVhbF9jaGFubmVsX2lu Zm8uY3BwCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAidmlydHVhbF9jaGFubmVsX2luZm8u aCIKICNpbmNsdWRlIDxrbG9jYWxlLmg+CiAKKyNpbmNsdWRlIDxLb0NvbG9yU3BhY2UuaD4KIAog CiBWaXJ0dWFsQ2hhbm5lbEluZm86OlZpcnR1YWxDaGFubmVsSW5mbygpCkBAIC0zMCwxMSArMzEs MjEgQEAgVmlydHVhbENoYW5uZWxJbmZvOjpWaXJ0dWFsQ2hhbm5lbEluZm8oKQogCiBWaXJ0dWFs Q2hhbm5lbEluZm86OlZpcnR1YWxDaGFubmVsSW5mbyhUeXBlIHR5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJbmRleCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEtvQ2hhbm5lbEluZm8gKnJlYWxDaGFubmVsSW5mbykK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtvQ2hhbm5lbEluZm8gKnJl YWxDaGFubmVsSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEtvQ29sb3JTcGFjZSAqY3MpCiAgICAgOiBtX3R5cGUodHlwZSksCiAgICAgICBtX3BpeGVs SW5kZXgocGl4ZWxJbmRleCksCiAgICAgICBtX3JlYWxDaGFubmVsSW5mbyhyZWFsQ2hhbm5lbElu Zm8pCiB7CisgICAgaWYgKG1fdHlwZSA9PSBMSUdIVE5FU1MpIHsKKyAgICAgICAgbV9uYW1lT3Zl cnJpZGUgPSBpMThuKCJMaWdodG5lc3MiKTsKKyAgICAgICAgbV92YWx1ZVR5cGVPdmVycmlkZSA9 IEtvQ2hhbm5lbEluZm86OkZMT0FUMzI7CisgICAgICAgIG1fY2hhbm5lbFNpemVPdmVycmlkZSA9 IDQ7CisgICAgfSBlbHNlIGlmIChtX3R5cGUgPT0gQUxMX0NPTE9SUykgeworICAgICAgICBtX25h bWVPdmVycmlkZSA9IGNzLT5jb2xvck1vZGVsSWQoKS5pZCgpOworICAgICAgICBtX3ZhbHVlVHlw ZU92ZXJyaWRlID0gY3MtPmNoYW5uZWxzKCkuZmlyc3QoKS0+Y2hhbm5lbFZhbHVlVHlwZSgpOwor ICAgICAgICBtX2NoYW5uZWxTaXplT3ZlcnJpZGUgPSBjcy0+Y2hhbm5lbHMoKS5maXJzdCgpLT5z aXplKCk7CisgICAgfQogfQogCiBWaXJ0dWFsQ2hhbm5lbEluZm86OlR5cGUgVmlydHVhbENoYW5u ZWxJbmZvOjp0eXBlKCkgY29uc3QgewpAQCAtNDYsNyArNTcsNyBAQCBLb0NoYW5uZWxJbmZvKiBW aXJ0dWFsQ2hhbm5lbEluZm86OmNoYW5uZWxJbmZvKCkgY29uc3QgewogfQogCiBRU3RyaW5nIFZp cnR1YWxDaGFubmVsSW5mbzo6bmFtZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gbV90eXBlID09IFJF QUwgPyBtX3JlYWxDaGFubmVsSW5mby0+bmFtZSgpIDogaTE4bigiTGlnaHRuZXNzIik7CisgICAg cmV0dXJuIG1fdHlwZSA9PSBSRUFMID8gbV9yZWFsQ2hhbm5lbEluZm8tPm5hbWUoKSA6IG1fbmFt ZU92ZXJyaWRlOwogfQogCiBpbnQgVmlydHVhbENoYW5uZWxJbmZvOjpwaXhlbEluZGV4KCkgY29u c3QgewpAQCAtNTQsOSArNjUsMTUgQEAgaW50IFZpcnR1YWxDaGFubmVsSW5mbzo6cGl4ZWxJbmRl eCgpIGNvbnN0IHsKIH0KIAogS29DaGFubmVsSW5mbzo6ZW51bUNoYW5uZWxWYWx1ZVR5cGUgVmly dHVhbENoYW5uZWxJbmZvOjp2YWx1ZVR5cGUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIG1fdHlwZSA9 PSBSRUFMID8gbV9yZWFsQ2hhbm5lbEluZm8tPmNoYW5uZWxWYWx1ZVR5cGUoKSA6IEtvQ2hhbm5l bEluZm86OkZMT0FUMzI7CisgICAgcmV0dXJuIG1fdHlwZSA9PSBSRUFMID8gbV9yZWFsQ2hhbm5l bEluZm8tPmNoYW5uZWxWYWx1ZVR5cGUoKSA6IG1fdmFsdWVUeXBlT3ZlcnJpZGU7CiB9CiAKIGlu dCBWaXJ0dWFsQ2hhbm5lbEluZm86OmNoYW5uZWxTaXplKCkgY29uc3QgewotICAgIHJldHVybiBt X3R5cGUgPT0gUkVBTCA/IG1fcmVhbENoYW5uZWxJbmZvLT5zaXplKCkgOiA0OworICAgIHJldHVy biBtX3R5cGUgPT0gUkVBTCA/IG1fcmVhbENoYW5uZWxJbmZvLT5zaXplKCkgOiBtX2NoYW5uZWxT aXplT3ZlcnJpZGU7Cit9CisKK2Jvb2wgVmlydHVhbENoYW5uZWxJbmZvOjppc0FscGhhKCkgY29u c3QKK3sKKyAgICByZXR1cm4gbV90eXBlID09IFJFQUwgJiYKKyAgICAgICAgbV9yZWFsQ2hhbm5l bEluZm8tPmNoYW5uZWxUeXBlKCkgPT0gS29DaGFubmVsSW5mbzo6QUxQSEE7CiB9CmRpZmYgLS1n aXQgYS9rcml0YS9wbHVnaW5zL2ZpbHRlcnMvY29sb3JzZmlsdGVycy92aXJ0dWFsX2NoYW5uZWxf aW5mby5oIGIva3JpdGEvcGx1Z2lucy9maWx0ZXJzL2NvbG9yc2ZpbHRlcnMvdmlydHVhbF9jaGFu bmVsX2luZm8uaAppbmRleCA5YWYzYWI1Li4yMDRmYThmIDEwMDY0NAotLS0gYS9rcml0YS9wbHVn aW5zL2ZpbHRlcnMvY29sb3JzZmlsdGVycy92aXJ0dWFsX2NoYW5uZWxfaW5mby5oCisrKyBiL2ty aXRhL3BsdWdpbnMvZmlsdGVycy9jb2xvcnNmaWx0ZXJzL3ZpcnR1YWxfY2hhbm5lbF9pbmZvLmgK QEAgLTIwLDE4ICsyMCwyMSBAQAogI2RlZmluZSBfX1ZJUlRVQUxfQ0hBTk5FTF9JTkZPX0gKIAog I2luY2x1ZGUgPEtvQ2hhbm5lbEluZm8uaD4KK2NsYXNzIEtvQ29sb3JTcGFjZTsKKwogCiBjbGFz cyBWaXJ0dWFsQ2hhbm5lbEluZm8KIHsKIHB1YmxpYzoKICAgICBlbnVtIFR5cGUgewogICAgICAg ICBSRUFMLAotICAgICAgICBMSUdIVE5FU1MKKyAgICAgICAgTElHSFRORVNTLAorICAgICAgICBB TExfQ09MT1JTCiAgICAgfTsKIAogICAgIFZpcnR1YWxDaGFubmVsSW5mbygpOwogCi0gICAgVmly dHVhbENoYW5uZWxJbmZvKFR5cGUgdHlwZSwgaW50IHBpeGVsSW5kZXgsIEtvQ2hhbm5lbEluZm8g KnJlYWxDaGFubmVsSW5mbyk7CisgICAgVmlydHVhbENoYW5uZWxJbmZvKFR5cGUgdHlwZSwgaW50 IHBpeGVsSW5kZXgsIEtvQ2hhbm5lbEluZm8gKnJlYWxDaGFubmVsSW5mbywgY29uc3QgS29Db2xv clNwYWNlICpjcyk7CiAKICAgICBUeXBlIHR5cGUoKSBjb25zdDsKICAgICBLb0NoYW5uZWxJbmZv KiBjaGFubmVsSW5mbygpIGNvbnN0OwpAQCAtNDAsMTAgKzQzLDE2IEBAIHB1YmxpYzoKICAgICBL b0NoYW5uZWxJbmZvOjplbnVtQ2hhbm5lbFZhbHVlVHlwZSB2YWx1ZVR5cGUoKSBjb25zdDsKICAg ICBpbnQgY2hhbm5lbFNpemUoKSBjb25zdDsKIAorICAgIGJvb2wgaXNBbHBoYSgpIGNvbnN0Owor CiBwcml2YXRlOgogICAgIFR5cGUgbV90eXBlOwogICAgIGludCBtX3BpeGVsSW5kZXg7CiAgICAg S29DaGFubmVsSW5mbyAqbV9yZWFsQ2hhbm5lbEluZm87CisKKyAgICBRU3RyaW5nIG1fbmFtZU92 ZXJyaWRlOworICAgIEtvQ2hhbm5lbEluZm86OmVudW1DaGFubmVsVmFsdWVUeXBlIG1fdmFsdWVU eXBlT3ZlcnJpZGU7CisgICAgaW50IG1fY2hhbm5lbFNpemVPdmVycmlkZTsKIH07CiAKICNlbmRp ZiAvKiBfX1ZJUlRVQUxfQ0hBTk5FTF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnMvcGlnbWVu dC9Lb0NvbXBvc2l0ZUNvbG9yVHJhbnNmb3JtYXRpb24uY3BwIGIvbGlicy9waWdtZW50L0tvQ29t cG9zaXRlQ29sb3JUcmFuc2Zvcm1hdGlvbi5jcHAKaW5kZXggMmRlMmVjZi4uZDliZjJmMSAxMDA2 NDQKLS0tIGEvbGlicy9waWdtZW50L0tvQ29tcG9zaXRlQ29sb3JUcmFuc2Zvcm1hdGlvbi5jcHAK KysrIGIvbGlicy9waWdtZW50L0tvQ29tcG9zaXRlQ29sb3JUcmFuc2Zvcm1hdGlvbi5jcHAKQEAg LTQzLDcgKzQzLDkgQEAgS29Db21wb3NpdGVDb2xvclRyYW5zZm9ybWF0aW9uOjp+S29Db21wb3Np dGVDb2xvclRyYW5zZm9ybWF0aW9uKCkKIAogdm9pZCBLb0NvbXBvc2l0ZUNvbG9yVHJhbnNmb3Jt YXRpb246OmFwcGVuZFRyYW5zZm9ybShLb0NvbG9yVHJhbnNmb3JtYXRpb24gKnRyYW5zZm9ybSkK IHsKLSAgICBtX2QtPnRyYW5zZm9ybWF0aW9ucy5hcHBlbmQodHJhbnNmb3JtKTsKKyAgICBpZiAo dHJhbnNmb3JtKSB7CisgICAgICAgIG1fZC0+dHJhbnNmb3JtYXRpb25zLmFwcGVuZCh0cmFuc2Zv cm0pOworICAgIH0KIH0KIAogdm9pZCBLb0NvbXBvc2l0ZUNvbG9yVHJhbnNmb3JtYXRpb246OnRy YW5zZm9ybShjb25zdCBxdWludDggKnNyYywgcXVpbnQ4ICpkc3QsIHFpbnQzMiBuUGl4ZWxzKSBj b25zdApAQCAtNjAsMyArNjIsMzcgQEAgdm9pZCBLb0NvbXBvc2l0ZUNvbG9yVHJhbnNmb3JtYXRp b246OnRyYW5zZm9ybShjb25zdCBxdWludDggKnNyYywgcXVpbnQ4ICpkc3QsIHEKICAgICAgICAg fQogICAgIH0KIH0KKworS29Db2xvclRyYW5zZm9ybWF0aW9uKiBLb0NvbXBvc2l0ZUNvbG9yVHJh bnNmb3JtYXRpb246OmNyZWF0ZU9wdGltaXplZENvbXBvc2l0ZVRyYW5zZm9ybShjb25zdCBRVmVj dG9yPEtvQ29sb3JUcmFuc2Zvcm1hdGlvbio+IHRyYW5zZm9ybXMpCit7CisgICAgS29Db2xvclRy YW5zZm9ybWF0aW9uICpmaW5hbFRyYW5zZm9ybSA9IDA7CisKKyAgICBpbnQgbnVtVmFsaWRUcmFu c2Zvcm1zID0gMDsKKyAgICBmb3JlYWNoIChLb0NvbG9yVHJhbnNmb3JtYXRpb24gKnQsIHRyYW5z Zm9ybXMpIHsKKyAgICAgICAgbnVtVmFsaWRUcmFuc2Zvcm1zICs9IGJvb2wodCk7CisgICAgfQor CisgICAgaWYgKG51bVZhbGlkVHJhbnNmb3JtcyA+IDEpIHsKKyAgICAgICAgS29Db21wb3NpdGVD b2xvclRyYW5zZm9ybWF0aW9uICpjb21wb3NpdGVUcmFuc2Zvcm0gPQorICAgICAgICAgICAgbmV3 IEtvQ29tcG9zaXRlQ29sb3JUcmFuc2Zvcm1hdGlvbigKKyAgICAgICAgICAgICAgICBLb0NvbXBv c2l0ZUNvbG9yVHJhbnNmb3JtYXRpb246OklOUExBQ0UpOworCisgICAgICAgIGZvcmVhY2ggKEtv Q29sb3JUcmFuc2Zvcm1hdGlvbiAqdCwgdHJhbnNmb3JtcykgeworICAgICAgICAgICAgaWYgKHQp IHsKKyAgICAgICAgICAgICAgICBjb21wb3NpdGVUcmFuc2Zvcm0tPmFwcGVuZFRyYW5zZm9ybSh0 KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsVHJhbnNmb3JtID0g Y29tcG9zaXRlVHJhbnNmb3JtOworCisgICAgfSBlbHNlIGlmIChudW1WYWxpZFRyYW5zZm9ybXMg PT0gMSkgeworICAgICAgICBmb3JlYWNoIChLb0NvbG9yVHJhbnNmb3JtYXRpb24gKnQsIHRyYW5z Zm9ybXMpIHsKKyAgICAgICAgICAgIGlmICh0KSB7CisgICAgICAgICAgICAgICAgZmluYWxUcmFu c2Zvcm0gPSB0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgfQorCisgICAgcmV0dXJuIGZpbmFsVHJhbnNmb3JtOworfQpkaWZmIC0tZ2l0IGEv bGlicy9waWdtZW50L0tvQ29tcG9zaXRlQ29sb3JUcmFuc2Zvcm1hdGlvbi5oIGIvbGlicy9waWdt ZW50L0tvQ29tcG9zaXRlQ29sb3JUcmFuc2Zvcm1hdGlvbi5oCmluZGV4IDFjNGJmMjguLjAyMDM2 M2MgMTAwNjQ0Ci0tLSBhL2xpYnMvcGlnbWVudC9Lb0NvbXBvc2l0ZUNvbG9yVHJhbnNmb3JtYXRp b24uaAorKysgYi9saWJzL3BpZ21lbnQvS29Db21wb3NpdGVDb2xvclRyYW5zZm9ybWF0aW9uLmgK QEAgLTQwLDYgKzQwLDggQEAgcHVibGljOgogCiAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgcXVp bnQ4ICpzcmMsIHF1aW50OCAqZHN0LCBxaW50MzIgblBpeGVscykgY29uc3Q7CiAKKyAgICBzdGF0 aWMgS29Db2xvclRyYW5zZm9ybWF0aW9uKiBjcmVhdGVPcHRpbWl6ZWRDb21wb3NpdGVUcmFuc2Zv cm0oY29uc3QgUVZlY3RvcjxLb0NvbG9yVHJhbnNmb3JtYXRpb24qPiB0cmFuc2Zvcm1zKTsKKwog cHJpdmF0ZToKICAgICBzdHJ1Y3QgUHJpdmF0ZTsKICAgICBjb25zdCBRU2NvcGVkUG9pbnRlcjxQ cml2YXRlPiBtX2Q7CmRpZmYgLS1naXQgYS9wbHVnaW5zL2NvbG9yZW5naW5lcy9sY21zMi9MY21z Q29sb3JTcGFjZS5oIGIvcGx1Z2lucy9jb2xvcmVuZ2luZXMvbGNtczIvTGNtc0NvbG9yU3BhY2Uu aAppbmRleCA1NzZmYjUyLi5iZjlhMjYyIDEwMDY0NAotLS0gYS9wbHVnaW5zL2NvbG9yZW5naW5l cy9sY21zMi9MY21zQ29sb3JTcGFjZS5oCisrKyBiL3BsdWdpbnMvY29sb3JlbmdpbmVzL2xjbXMy L0xjbXNDb2xvclNwYWNlLmgKQEAgLTMwNiwxMSArMzA2LDE1IEBAIHB1YmxpYzoKICAgICAgICAg Y21zVG9uZUN1cnZlICoqIHRyYW5zZmVyRnVuY3Rpb25zID0gbmV3IGNtc1RvbmVDdXJ2ZSpbIHRo aXMtPmNvbG9yQ2hhbm5lbENvdW50KCldOwogCiAgICAgICAgIGZvciAodWludCBjaCA9IDA7IGNo IDwgdGhpcy0+Y29sb3JDaGFubmVsQ291bnQoKTsgY2grKykgewotICAgICAgICAgICAgdHJhbnNm ZXJGdW5jdGlvbnNbY2hdID0gY21zQnVpbGRUYWJ1bGF0ZWRUb25lQ3VydmUxNiggMCwgMjU2LCB0 cmFuc2ZlclZhbHVlc1tjaF0pOworICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbnNbY2hdID0g dHJhbnNmZXJWYWx1ZXNbY2hdID8KKyAgICAgICAgICAgICAgICBjbXNCdWlsZFRhYnVsYXRlZFRv bmVDdXJ2ZTE2KCAwLCAyNTYsIHRyYW5zZmVyVmFsdWVzW2NoXSkgOgorICAgICAgICAgICAgICAg IGNtc0J1aWxkR2FtbWEoMCwgMS4wKTsKICAgICAgICAgfQogCiAgICAgICAgIGNtc1RvbmVDdXJ2 ZSAqKiBhbHBoYVRyYW5zZmVyRnVuY3Rpb25zID0gbmV3IGNtc1RvbmVDdXJ2ZSpbMV07Ci0gICAg ICAgIGFscGhhVHJhbnNmZXJGdW5jdGlvbnNbMF0gPSBjbXNCdWlsZFRhYnVsYXRlZFRvbmVDdXJ2 ZTE2KCAwLCAyNTYsIHRyYW5zZmVyVmFsdWVzW3RoaXMtPmNvbG9yQ2hhbm5lbENvdW50KCldKTsK KyAgICAgICAgYWxwaGFUcmFuc2ZlckZ1bmN0aW9uc1swXSA9IHRyYW5zZmVyVmFsdWVzW3RoaXMt PmNvbG9yQ2hhbm5lbENvdW50KCldID8KKyAgICAgICAgICAgIGNtc0J1aWxkVGFidWxhdGVkVG9u ZUN1cnZlMTYoIDAsIDI1NiwgdHJhbnNmZXJWYWx1ZXNbdGhpcy0+Y29sb3JDaGFubmVsQ291bnQo KV0pIDoKKyAgICAgICAgICAgIGNtc0J1aWxkR2FtbWEoMCwgMS4wKTsKIAogICAgICAgICBLb0xj bXNDb2xvclRyYW5zZm9ybWF0aW9uICphZGogPSBuZXcgS29MY21zQ29sb3JUcmFuc2Zvcm1hdGlv bih0aGlzKTsKICAgICAgICAgYWRqLT5wcm9maWxlc1swXSA9IGNtc0NyZWF0ZUxpbmVhcml6YXRp b25EZXZpY2VMaW5rKHRoaXMtPmNvbG9yU3BhY2VTaWduYXR1cmUoKSwgdHJhbnNmZXJGdW5jdGlv bnMpOwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KS3Jp dGEgbWFpbGluZyBsaXN0CmtpbWFnZXNob3BAa2RlLm9yZwpodHRwczovL21haWwua2RlLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2tpbWFnZXNob3AK