Name: series-workflowv88ml Phase: Failed StartedAt: 2026-09-07 02:24:40 +0000 UTC FinishedAt: 2026-09-07 02:27:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv88ml[0] Phase: Succeeded StartedAt: 2026-09-07 02:24:40 +0000 UTC FinishedAt: 2026-09-07 02:27:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv88ml[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 02:24:40 +0000 UTC FinishedAt: 2026-09-07 02:27:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29saW5nIGFuZCBidWlsZCBzY3JpcHRzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHBvcnRpbmcgdGhlIHBlcmYgR1RLIFVJIGZyb20gR1RLMiB0byBHVEs0IGFuZCBtaW5vciBoZWxwZXIgcmVsb2NhdGlvbiBpbiB0b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYykuIEl0IGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwtc3BhY2UgY29kZSwgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVmYWY0MTUzNjQwMGZjNzIwOTNkZjc4ZDZlNzk3YTM3Y2JhYjA2ZjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAyOjI2OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUgYi90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlXG5pbmRleCA5OWViMGVhMDk1Mzc1Li40ZWM5NWMzNWE1YzE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuQEAgLTExMyw4ICYjNDM7MTEzLDcgQEAgRkVBVFVSRV9URVNUU19FWFRSQSA6PSAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgY29tcGlsZS14MzIgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgY3BsdXMtZGVtYW5nbGUgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgY3hhLWRlbWFuZ2xlICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgZ3RrMiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgZ3RrMi1pbmZvYmFyICAgICAgICAgICAgICAgICAgIFxcXG4mIzQzOyAgICAgICAgIGd0azQgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGhlbGxvICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGJhYmVsdHJhY2UyLWN0Zi13cml0ZXIgICAgICAgICBcXFxuICAgICAgICAgIGxpYmNhcHN0b25lICAgICAgICAgICAgICAgICAgICBcXFxuQEAgLTE0Myw2ICYjNDM7MTQyLDcgQEAgZW5kaWZcbiBGRUFUVVJFX0RJU1BMQVkgPz0gICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbGliZHcgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGdsaWJjICAgICAgICAgICAgICAgICAgXFxcbiYjNDM7ICAgICAgICAgZ3RrNCAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGxpYmVsZiAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBsaWJudW1hICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbnVtYV9udW1fcG9zc2libGVfY3B1cyBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGUgYi90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXG5pbmRleCA3ZDE2NTAxODExNmE1Li4wMWM0OGU2ZWYwMjFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZVxuQEAgLTExLDggJiM0MzsxMSw3IEBAIEZJTEVTPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1ldmVudGZkLmJpbiAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICB0ZXN0LWZvcnRpZnktc291cmNlLmJpbiAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtZ2xpYmMuYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgdGVzdC1ndGsyLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi0gICAgICAgICB0ZXN0LWd0azItaW5mb2Jhci5iaW4gICAgICAgICAgICAgICAgICBcXFxuJiM0MzsgICAgICAgICB0ZXN0LWd0azQuYmluICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtaGVsbG8uYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1saWJiZmQuYmluICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiBcdCB0ZXN0LWxpYmJmZC10aHJlYWRzYWZlLmJpbiAgICAgIFx0XFxcbkBAIC0yNDAsMTEgJiM0MzsyMzksOCBAQCAkKE9VVFBVVCl0ZXN0LWxpYmNwdXBvd2VyLmJpbjpcbiAkKE9VVFBVVCl0ZXN0LWxpYnRyYWNlZnMuYmluOlxuIFx0ICQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBsaWJ0cmFjZWZzIDJcdTAwM2UvZGV2L251bGwpIC1sdHJhY2Vmc1xuIFxuLSQoT1VUUFVUKXRlc3QtZ3RrMi5iaW46XG4tXHQkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0ayYjNDM7LTIuMCAyXHUwMDNlL2Rldi9udWxsKSAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zXG4tXG4tJChPVVRQVVQpdGVzdC1ndGsyLWluZm9iYXIuYmluOlxuLVx0JChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsmIzQzOy0yLjAgMlx1MDAzZS9kZXYvbnVsbClcbiYjNDM7JChPVVRQVVQpdGVzdC1ndGs0LmJpbjpcbiYjNDM7XHQkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbiBcbiBncmVwLWxpYnMgID0gJChmaWx0ZXIgLWwlLCQoMSkpXG4gc3RyaXAtbGlicyA9ICQoZmlsdGVyLW91dCAtbCUsJCgxKSlcbmRpZmYgLS1naXQgYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmMgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggYjFiNzE2ZGQ1NzMzMC4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwxMiAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwmIzM0Oy1Xc3RyaWN0LXByb3RvdHlwZXNcJiMzNDtcbi0jaW5jbHVkZSBcdTAwM2NndGsvZ3RrLmhcdTAwM2Vcbi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGVycm9yIFwmIzM0Oy1Xc3RyaWN0LXByb3RvdHlwZXNcJiMzNDtcbi1cbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLXtcbi1cdGd0a19pbml0KFx1MDAyNmFyZ2MsIFx1MDAyNmFyZ3YpO1xuLVx0Z3RrX2luZm9fYmFyX25ldygpO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLmMgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrNC5jXG5zaW1pbGFyaXR5IGluZGV4IDc2JVxucmVuYW1lIGZyb20gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuY1xucmVuYW1lIHRvIHRvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcbmluZGV4IDJhYWY0YmZjMjA1NTYuLmI5NTIwZTc0MDhiOTkgMTAwNjQ0XG4tLS0gYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrNC5jXG5AQCAtMyw5ICYjNDM7Myw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjZ3RrL2d0ay5oXHUwMDNlXG4gI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBlcnJvciBcJiMzNDstV3N0cmljdC1wcm90b3R5cGVzXCYjMzQ7XG4gXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiYjNDM7aW50IG1haW4odm9pZClcbiB7XG4tXHRndGtfaW5pdChcdTAwMjZhcmdjLCBcdTAwMjZhcmd2KTtcbiYjNDM7XHRndGtfaW5pdCgpO1xuIFxuICAgICAgICAgcmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0XG5pbmRleCAyMmY4N2VhYTMyNzk2Li43YWY5YjNmODFjMDY1IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuQEAgLTM1MSw3ICYjNDM7MzUxLDcgQEAgT1BUSU9OU1xuIFx0cmVxdWlyZXMgYSB0dHksIGlmIG9uZSBpcyBub3QgcHJlc2VudCwgYXMgd2hlbiBwaXBpbmcgdG8gb3RoZXJcbiBcdGNvbW1hbmRzLCB0aGUgc3RkaW8gaW50ZXJmYWNlIGlzIHVzZWQuXG4gXG4tLS1ndGs6OiBVc2UgdGhlIEdUSzIgaW50ZXJmYWNlLlxuJiM0MzstLWd0azo6IFVzZSB0aGUgR1RLNCBpbnRlcmZhY2UuXG4gXG4gLWs6OlxuIC0tdm1saW51eD1cdTAwM2NmaWxlXHUwMDNlOjpcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZVxuaW5kZXggNWI3MTM4MzdlZWRlNy4uNTYwMTQxMDY0NzlhMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGVcbkBAIC0xMDYsNyAmIzQzOzEwNiw3IEBAIGNsZWFuOlxuICMgbWFrZSAtQyB0b29scy9wZXJmIC1mIHRlc3RzL21ha2VcbiAjXG4gYnVpbGQtdGVzdDpcbi1cdEAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azIgb3V0XG4mIzQzO1x0QCQoTUFLRSkgU0hVRj0xIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IHRhcnBrZyBtYWtlX3N0YXRpYyBtYWtlX3dpdGhfZ3RrNCBvdXRcbiBcbiBidWlsZC10ZXN0LXRhcmJhbGw6XG4gXHRAJChNQUtFKSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSBvdXRcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnXG5pbmRleCA0ZDU5OTNkYTlmOTQ1Li40ZWU3MzkzYTM5ZjkxIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnXG5AQCAtNzc0LDIxICYjNDM7Nzc0LDIyIEBAIGlmbmRlZiBOT19TTEFOR1xuICAgZW5kaWZcbiBlbmRpZlxuIFxuLWlmZGVmIEdUSzJcbi0gIEZMQUdTX0dUSzI9JChDRkxBR1MpICQoTERGTEFHUykgJChFWFRMSUJTKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0ayYjNDM7LTIuMCAyXHUwMDNlL2Rldi9udWxsKVxuLSAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrMilcbi0gIGlmbmVxICgkKGZlYXR1cmUtZ3RrMiksIDEpXG4tICAgICQod2FybmluZyBHVEsyIG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLMiBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGsyLWRldmVsIG9yIGxpYmd0azIuMC1kZXYpXG4tICAgIE5PX0dUSzIgOj0gMVxuJiM0MztpZmRlZiBHVEs0XG4mIzQzOyAgRkxBR1NfR1RLND0kKENGTEFHUykgJChMREZMQUdTKSAkKEVYVExJQlMpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrNCAyXHUwMDNlL2Rldi9udWxsKVxuJiM0MzsgICQoY2FsbCBmZWF0dXJlX2NoZWNrLGd0azQpXG4mIzQzOyAgaWZuZXEgKCQoZmVhdHVyZS1ndGs0KSwgMSlcbiYjNDM7ICAgICQod2FybmluZyBHVEs0IG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLNCBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGs0LWRldmVsIG9yIGxpYmd0ay00LWRldilcbiYjNDM7ICAgIE5PX0dUSzQgOj0gMVxuICAgZWxzZVxuLSAgICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGsyLWluZm9iYXIpXG4tICAgIGlmZXEgKCQoZmVhdHVyZS1ndGsyLWluZm9iYXIpLCAxKVxuLSAgICAgIEdUS19DRkxBR1MgOj0gLURIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4tICAgIGVuZGlmXG4tICAgIENGTEFHUyAmIzQzOz0gLURIQVZFX0dUSzJfU1VQUE9SVFxuLSAgICBHVEtfQ0ZMQUdTICYjNDM7PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgZ3RrJiM0MzstMi4wIDJcdTAwM2UvZGV2L251bGwpXG4tICAgIEdUS19MSUJTIDo9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgZ3RrJiM0MzstMi4wIDJcdTAwM2UvZGV2L251bGwpXG4mIzQzOyAgICBDRkxBR1MgJiM0Mzs9IC1ESEFWRV9HVEs0X1NVUFBPUlRcbiYjNDM7ICAgIEdUS19DRkxBR1MgJiM0Mzs9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBndGs0IDJcdTAwM2UvZGV2L251bGwpXG4mIzQzOyAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbiAgICAgRVhUTElCUyAmIzQzOz0gLWxkbFxuJiM0MzsgICAgIyBsaWJwZXJmLWd0ay5zbyBpcyBkbG9wZW4oKWVkIGF0IHJ1bnRpbWUgYW5kIGNhbGxzIGJhY2sgaW50b1xuJiM0MzsgICAgIyBzeW1ib2xzIGRlZmluZWQgaW4gdGhlIHBlcmYgYmluYXJ5IGl0c2VsZiAoY2FsbGNoYWluX3BhcmFtLFxuJiM0MzsgICAgIyBzeW1ib2xfY29uZiwgZXZzZWxfX25hbWUsIC4uLik6IHBlcmYgbmVlZHMgdG8gZXhwb3J0IHRob3NlXG4mIzQzOyAgICAjIGR5bmFtaWNhbGx5IGZvciB0aGUgcGx1Z2luIHRvIHJlc29sdmUgdGhlbS5cbiYjNDM7ICAgIExERkxBR1MgJiM0Mzs9IC1yZHluYW1pY1xuICAgZW5kaWZcbiBlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZiBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZlxuaW5kZXggMjljZmQ0NGM0MjdmMy4uMjQzOGI0MGVhYWVjMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZlxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmXG5AQCAtNDksNyAmIzQzOzQ5LDcgQEAgaW5jbHVkZSAuLi9zY3JpcHRzL3V0aWxpdGllcy5tYWtcbiAjXG4gIyBEZWZpbmUgTk9fU0xBTkcgaWYgeW91IGRvIG5vdCB3YW50IFRVSSBzdXBwb3J0LlxuICNcbi0jIERlZmluZSBHVEsyIGlmIHlvdSB3YW50IEdUSyYjNDM7IEdVSSBzdXBwb3J0LlxuJiM0MzsjIERlZmluZSBHVEs0IGlmIHlvdSB3YW50IEdUSyYjNDM7IEdVSSBzdXBwb3J0LlxuICNcbiAjIERlZmluZSBOT19ERU1BTkdMRSBpZiB5b3UgZG8gbm90IHdhbnQgQyYjNDM7JiM0Mzsgc3ltYm9sIGRlbWFuZ2xpbmcuXG4gI1xuQEAgLTQ3Myw3ICYjNDM7NDczLDcgQEAgaWZuZXEgKCQoT1VUUFVUKSwpXG4gICBDRkxBR1MgJiM0Mzs9IC1JJChPVVRQVVQpXG4gZW5kaWZcbiBcbi1pZmRlZiBHVEsyXG4mIzQzO2lmZGVmIEdUSzRcbiAgIEFMTF9QUk9HUkFNUyAmIzQzOz0gJChPVVRQVVQpbGlicGVyZi1ndGsuc29cbiAgIEdUS19JTiA6PSAkKE9VVFBVVClndGstaW4ub1xuIGVuZGlmXG5AQCAtODExLDcgJiM0Mzs4MTEsNyBAQCBjaGVjazogcHJlcGFyZVxuIFxuICMjIyBJbnN0YWxsYXRpb24gcnVsZXNcbiBcbi1pZmRlZiBHVEsyXG4mIzQzO2lmZGVmIEdUSzRcbiBpbnN0YWxsLWd0azogJChPVVRQVVQpbGlicGVyZi1ndGsuc29cbiBcdCQoY2FsbCBRVUlFVF9JTlNUQUxMLCAmIzM5O0dUSyBVSSYjMzk7KSBcXFxuIFx0XHQkKElOU1RBTEwpIC1kIC1tIDc1NSAmIzM5OyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSkmIzM5OzsgXFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXG5pbmRleCA2OWNiNzJiMjA4MmE2Li4xNTE2M2UwODFhOGNlIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXG5AQCAtNTIsNyAmIzQzOzUyLDcgQEAgc3RydWN0IHBlcmZfYW5ub3RhdGUge1xuIFx0Ym9vbFx0ICAgdXNlX3R1aTtcbiAjZW5kaWZcbiBcdGJvb2xcdCAgIHVzZV9zdGRpbywgdXNlX3N0ZGlvMjtcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXG4gXHRib29sXHQgICB1c2VfZ3RrO1xuICNlbmRpZlxuIFx0Ym9vbFx0ICAgc2tpcF9taXNzaW5nO1xuQEAgLTcxMiw3ICYjNDM7NzEyLDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRPUFRfQk9PTEVBTigmIzM5O3EmIzM5OywgXCYjMzQ7cXVpZXRcJiMzNDssIFx1MDAyNnF1aWV0LCBcJiMzNDtkbyBub3cgc2hvdyBhbnkgd2FybmluZ3Mgb3IgbWVzc2FnZXNcJiMzNDspLFxuIFx0T1BUX0JPT0xFQU4oJiMzOTtEJiMzOTssIFwmIzM0O2R1bXAtcmF3LXRyYWNlXCYjMzQ7LCBcdTAwMjZkdW1wX3RyYWNlLFxuIFx0XHQgICAgXCYjMzQ7ZHVtcCByYXcgdHJhY2UgaW4gQVNDSUlcJiMzNDspLFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdE9QVF9CT09MRUFOKDAsIFwmIzM0O2d0a1wmIzM0OywgXHUwMDI2YW5ub3RhdGUudXNlX2d0aywgXCYjMzQ7VXNlIHRoZSBHVEsgaW50ZXJmYWNlXCYjMzQ7KSxcbiAjZW5kaWZcbiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUXG5AQCAtODI4LDcgJiM0Mzs4MjgsNyBAQCBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilcbiBcdGlmIChhbm5vdGF0ZV9jaGVja19hcmdzKCkgXHUwMDNjIDApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGlmIChzeW1ib2xfY29uZi5zaG93X25yX3NhbXBsZXMgXHUwMDI2XHUwMDI2IGFubm90YXRlLnVzZV9ndGspIHtcbiBcdFx0cHJfZXJyKFwmIzM0Oy0tc2hvdy1uci1zYW1wbGVzIGlzIG5vdCBhdmFpbGFibGUgaW4gLS1ndGsgbW9kZSBhdCB0aGlzIHRpbWVcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTg5OCw3ICYjNDM7ODk4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRlbHNlIGlmIChhbm5vdGF0ZS51c2VfdHVpKVxuIFx0XHR1c2VfYnJvd3NlciA9IDE7XG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4mIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFx0ZWxzZSBpZiAoYW5ub3RhdGUudXNlX2d0aylcbiBcdFx0dXNlX2Jyb3dzZXIgPSAyO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuY1xuaW5kZXggNjBkMWYxNjY2MjllMC4uZDE0Mzg0YzU4NDY2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jXG5AQCAtODIsNyAmIzQzOzgyLDcgQEAgc3RydWN0IHJlcG9ydCB7XG4gI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVFxuIFx0Ym9vbFx0XHRcdHVzZV90dWk7XG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4mIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFx0Ym9vbFx0XHRcdHVzZV9ndGs7XG4gI2VuZGlmXG4gXHRib29sXHRcdFx0dXNlX3N0ZGlvO1xuQEAgLTEzNTksOCAmIzQzOzEzNTksOCBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVFxuIFx0T1BUX0JPT0xFQU4oMCwgXCYjMzQ7dHVpXCYjMzQ7LCBcdTAwMjZyZXBvcnQudXNlX3R1aSwgXCYjMzQ7VXNlIHRoZSBUVUkgaW50ZXJmYWNlXCYjMzQ7KSxcbiAjZW5kaWZcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbi1cdE9QVF9CT09MRUFOKDAsIFwmIzM0O2d0a1wmIzM0OywgXHUwMDI2cmVwb3J0LnVzZV9ndGssIFwmIzM0O1VzZSB0aGUgR1RLMiBpbnRlcmZhY2VcJiMzNDspLFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiYjNDM7XHRPUFRfQk9PTEVBTigwLCBcJiMzNDtndGtcJiMzNDssIFx1MDAyNnJlcG9ydC51c2VfZ3RrLCBcJiMzNDtVc2UgdGhlIEdUSzQgaW50ZXJmYWNlXCYjMzQ7KSxcbiAjZW5kaWZcbiBcdE9QVF9CT09MRUFOKDAsIFwmIzM0O3N0ZGlvXCYjMzQ7LCBcdTAwMjZyZXBvcnQudXNlX3N0ZGlvLFxuIFx0XHQgICAgXCYjMzQ7VXNlIHRoZSBzdGRpbyBpbnRlcmZhY2VcJiMzNDspLFxuQEAgLTE3MTAsNyAmIzQzOzE3MTAsNyBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRlbHNlIGlmIChyZXBvcnQudXNlX3R1aSlcbiBcdFx0dXNlX2Jyb3dzZXIgPSAxO1xuICNlbmRpZlxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGVsc2UgaWYgKHJlcG9ydC51c2VfZ3RrKVxuIFx0XHR1c2VfYnJvd3NlciA9IDI7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2hcbmluZGV4IGQwMDNlN2ZhYjJiZTguLmE2MDFhNTI2MGMxN2UgMTAwNzU1XG4tLS0gYS90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG5AQCAtMTk5LDggJiM0MzsxOTksOCBAQCBmZWRvcmFfcGtnX2ZvcigpIHtcbiBcdCMgb3B0LWluIGZlYXR1cmVzLCB3aGljaCBhIGRlZmF1bHQgYnVpbGQgZG9lcyBub3QgZW5hYmxlOiB0aGUgbGliYmZkXG4gXHQjIGRpc2Fzc2VtYmxlciBmYW1pbHkgKGxpYmJmZCwgbGliYmZkLXRocmVhZHNhZmUsIGxpYmJmZC1saWJlcnR5LFxuIFx0IyBkaXNhc3NlbWJsZXItKiwgY3BsdXMtZGVtYW5nbGUpLCBvbmx5IGxpbmtlZCBvbiBCVUlMRF9OT05ESVNUUk9cbi1cdCMgYnVpbGRzIGFuZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNhcHN0b25lLCBHVEsyLCBMSUJQRVJMIGFuZFxuLVx0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLMiAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXG4mIzQzO1x0IyBidWlsZHMgYW5kIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgY2Fwc3RvbmUsIEdUSzQsIExJQlBFUkwgYW5kXG4mIzQzO1x0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLNCAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXG4gXHQjIGFuZCBDb3JlU2lnaHQgKGlmZGVmIENPUkVTSUdIVCksIGFyZSBkZWxpYmVyYXRlbHkgbm90IG1hcHBlZC5cbiBcdCMgbGliYWlvIGlzIG5vdCBtYXBwZWQgZWl0aGVyOiBpdHNcbiBcdCMgdGVzdCB1c2VzIHRoZSBQT1NJWCBBSU8gQVBJIChhaW8uaCwgYWlvXyosIC1scnQpLCBwcm92aWRlZCBieVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZSBiL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuaW5kZXggZDJjMmY1MjZlMWRiMC4uMjAyYWI1NTAxOTE2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi90ZXN0cy9tYWtlXG5AQCAtOTUsNyAmIzQzOzk1LDcgQEAgbWFrZV9ub19iYWJlbHRyYWNlMiA6PSBOT19CQUJFTFRSQUNFMj0xXG4gbWFrZV93aXRoX2NvcmVzaWdodCA6PSBDT1JFU0lHSFQ9MVxuIG1ha2Vfbm9fc2R0XHQgICAgOj0gTk9fU0RUPTFcbiBtYWtlX25vX2xpYnBmbTQgICAgIDo9IE5PX0xJQlBGTTQ9MVxuLW1ha2Vfd2l0aF9ndGsyICAgICAgOj0gR1RLMj0xXG4mIzQzO21ha2Vfd2l0aF9ndGs0ICAgICAgOj0gR1RLND0xXG4gbWFrZV9yZWZjbnRfY2hlY2sgICA6PSBFWFRSQV9DRkxBR1M9XCYjMzQ7LURSRUZDTlRfQ0hFQ0tJTkc9MVwmIzM0O1xuIG1ha2VfdGFncyAgICAgICAgICAgOj0gdGFnc1xuIG1ha2VfY3Njb3BlICAgICAgICAgOj0gY3Njb3BlXG5AQCAtMzE4LDcgJiM0MzszMTgsNyBAQCAkKHJ1bik6XG4gXHQkKGNhbGwgdGVzdCwkQCkgXHUwMDI2XHUwMDI2IFxcXG4gXHRybSAtcmYgJEAgJCRUTVBfREVTVCB8fCAoY2F0ICRAIDsgZmFsc2UpXG4gXG4tbWFrZV93aXRoX2d0azI6XG4mIzQzO21ha2Vfd2l0aF9ndGs0OlxuIFx0JChjYWxsIGNsZWFuKVxuIFx0QFRNUF9ERVNUPSQkKG1rdGVtcCAtZCk7IFxcXG4gXHRjbWQ9XCYjMzQ7Y2QgJChQRVJGKSBcdTAwMjZcdTAwMjYgJChNQUtFX0YpICQoJEApICQoUEFSQUxMRUxfT1BUKSAkKE9fT1BUKSBERVNURElSPSQkVE1QX0RFU1RcJiMzNDs7IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmNcbmluZGV4IDg5MjBlMjk4NDIwYTguLjA5NGRmYTA0NWI3NzQgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jXG5AQCAtMTEsNiAmIzQzOzExLDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt1aS9oZWxwbGluZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXHUwMDNjaW50dHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gXG4gZW51bSB7XG4gXHRBTk5fQ09MX19QRVJDRU5ULFxuQEAgLTE2MSw3ICYjNDM7MTYyLDcgQEAgc3RhdGljIGludCBwZXJmX2d0a19fYW5ub3RhdGVfc3ltYm9sKEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgbWFwX3N5bWJvbCAqbXMsXG4gXHRcdFx0Z3RrX2xpc3Rfc3RvcmVfc2V0KHN0b3JlLCBcdTAwMjZpdGVyLCBBTk5fQ09MX19MSU5FLCBzLCAtMSk7XG4gXHR9XG4gXG4tXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xuJiM0MztcdGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X2NoaWxkKEdUS19TQ1JPTExFRF9XSU5ET1cod2luZG93KSwgdmlldyk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCBcdTAwMjZub3Rlcy1cdTAwM2VzcmMtXHUwMDNlc291cmNlLCBhbC5ub2RlKSB7XG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cG9zLVx1MDAzZWFsLm5vZGUpO1xuQEAgLTIwNSw0MCAmIzQzOzIwNiwzNCBAQCBzdGF0aWMgaW50IHN5bWJvbF9fZ3RrX2Fubm90YXRlKHN0cnVjdCBtYXBfc3ltYm9sICptcywgc3RydWN0IGV2c2VsICpldnNlbCxcbiBcdFx0R3RrV2lkZ2V0ICppbmZvYmFyO1xuIFx0XHRHdGtXaWRnZXQgKnN0YXRiYXI7XG4gXG4tXHRcdHNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdFx0c2lnbmFsKFNJR0ZQRSwgIHBlcmZfZ3RrX19zaWduYWwpO1xuLVx0XHRzaWduYWwoU0lHSU5ULCAgcGVyZl9ndGtfX3NpZ25hbCk7XG4tXHRcdHNpZ25hbChTSUdRVUlULCBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdFx0c2lnbmFsKFNJR1RFUk0sIHBlcmZfZ3RrX19zaWduYWwpO1xuJiM0MztcdFx0c2lnbmFsKFNJR1NFR1YsIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwpO1xuJiM0MztcdFx0c2lnbmFsKFNJR0ZQRSwgIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwpO1xuJiM0MztcdFx0cGVyZl9ndGtfX2luc3RhbGxfcXVpdF9zaWduYWxzKCk7XG4gXG4tXHRcdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpO1xuJiM0MztcdFx0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoKTtcbiBcdFx0Z3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyh3aW5kb3cpLCBcJiMzNDtwZXJmIGFubm90YXRlXCYjMzQ7KTtcbiBcbi1cdFx0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFwmIzM0O2RlbGV0ZV9ldmVudFwmIzM0OywgZ3RrX21haW5fcXVpdCwgTlVMTCk7XG4tXG4gXHRcdHBnY3R4ID0gcGVyZl9ndGtfX2FjdGl2YXRlX2NvbnRleHQod2luZG93KTtcbiBcdFx0aWYgKCFwZ2N0eClcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRcdHZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApO1xuJiM0MztcdFx0dmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgMCk7XG4gXHRcdG5vdGVib29rID0gZ3RrX25vdGVib29rX25ldygpO1xuIFx0XHRwZ2N0eC1cdTAwM2Vub3RlYm9vayA9IG5vdGVib29rO1xuIFxuLVx0XHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2ssIFRSVUUsIFRSVUUsIDApO1xuJiM0MztcdFx0Z3RrX3dpZGdldF9zZXRfdmV4cGFuZChub3RlYm9vaywgVFJVRSk7XG4mIzQzO1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBub3RlYm9vayk7XG4gXG4gXHRcdGluZm9iYXIgPSBwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIoKTtcbi1cdFx0aWYgKGluZm9iYXIpIHtcbi1cdFx0XHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaW5mb2Jhcixcbi1cdFx0XHRcdFx0ICAgRkFMU0UsIEZBTFNFLCAwKTtcbi1cdFx0fVxuJiM0MztcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgaW5mb2Jhcik7XG4gXG4gXHRcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBzdGF0YmFyLCBGQUxTRSwgRkFMU0UsIDApO1xuJiM0MztcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhcik7XG4gXG4tXHRcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7XG4mIzQzO1x0XHRndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKHdpbmRvdyksIHZib3gpO1xuIFx0fVxuIFxuLVx0c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7XG4mIzQzO1x0c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTtcbiBcdHRhYl9sYWJlbCA9IGd0a19sYWJlbF9uZXcoc3ltLVx1MDAzZW5hbWUpO1xuIFxuIFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSxcbkBAIC0yNjcsMTIgJiM0MzsyNjIsMTEgQEAgdm9pZCBwZXJmX2d0a19fc2hvd19hbm5vdGF0aW9ucyh2b2lkKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR3aW5kb3cgPSBwZ2N0eC1cdTAwM2VtYWluX3dpbmRvdztcbi1cdGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTtcbiBcbiBcdHBlcmZfZ3RrX19yZXNpemVfd2luZG93KHdpbmRvdyk7XG4tXHRndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKHdpbmRvdyksIEdUS19XSU5fUE9TX0NFTlRFUik7XG4mIzQzO1x0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aW5kb3csIFRSVUUpO1xuIFxuLVx0Z3RrX21haW4oKTtcbiYjNDM7XHRwZXJmX2d0a19fcnVuX21haW5fbG9vcCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dChcdTAwMjZwZ2N0eCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xuaW5kZXggZDJkYWRmMzg3M2ZiZC4uOThmMWQ2YmZjYjI0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jXG5AQCAtNSwzMiAmIzQzOzUsOTIgQEBcbiAjaW5jbHVkZSBcJiMzNDsuLi9oaXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9oZWxwbGluZS5oXCYjMzQ7XG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2dsaWItdW5peC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiBcbi12b2lkIHBlcmZfZ3RrX19zaWduYWwoaW50IHNpZylcbiYjNDM7LypcbiYjNDM7ICogU0lHSU5UL1NJR1FVSVQvU0lHVEVSTSBhcmUgYXN5bmNocm9ub3VzOiBkZWZlcnJpbmcgdGhlIGFjdHVhbCBleGl0IHRvIGFcbiYjNDM7ICogR0xpYiBzb3VyY2UgZGlzcGF0Y2hlZCBmcm9tIHRoZSBtYWluIGxvb3AgbWVhbnMgaXQgYWx3YXlzIHJ1bnMgb24gdGhlXG4mIzQzOyAqIG1haW4gdGhyZWFkLCBzZXJpYWxpemVkIHdpdGggZXZlcnl0aGluZyBlbHNlIHRoZSBtYWluIGxvb3AgZG9lc1xuJiM0MzsgKiAoaW5jbHVkaW5nIHBlcmZfZ3RrX19lcnJvcigpJiMzOTtzIHVwZGF0ZXMgdG8gcGVyZl9ndGtfX2Vycm9yX2xvb3BzKSwgaW5zdGVhZFxuJiM0MzsgKiBvZiByYWNpbmcgdGhlbSBmcm9tIGFyYml0cmFyeSBzaWduYWwtaGFuZGxlciBjb250ZXh0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGdib29sZWFuIHBlcmZfZ3RrX19xdWl0X3NpZ25hbChncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKVxuIHtcbiBcdHBlcmZfZ3RrX19leGl0KGZhbHNlKTtcbiYjNDM7XHRyZXR1cm4gR19TT1VSQ0VfUkVNT1ZFO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Z191bml4X3NpZ25hbF9hZGQoU0lHSU5ULCAgcGVyZl9ndGtfX3F1aXRfc2lnbmFsLCBOVUxMKTtcbiYjNDM7XHRnX3VuaXhfc2lnbmFsX2FkZChTSUdRVUlULCBwZXJmX2d0a19fcXVpdF9zaWduYWwsIE5VTEwpO1xuJiM0MztcdGdfdW5peF9zaWduYWxfYWRkKFNJR1RFUk0sIHBlcmZfZ3RrX19xdWl0X3NpZ25hbCwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFNJR1NFR1YvU0lHRlBFIGFyZSBzeW5jaHJvbm91cyBmYXVsdHM6IHRoZXJlJiMzOTtzIG5vIFwmIzM0O2xhdGVyXCYjMzQ7IHRvIGRlZmVyIHRvLFxuJiM0MzsgKiBhbmQgbm8gc2FmZSB3YXkgdG8gcnVuIEdUSy9HTGliIGNvZGUgKG9yIGFueXRoaW5nIGVsc2Ugbm9uLWFzeW5jLXNpZ25hbC1cbiYjNDM7ICogc2FmZSkgZnJvbSB0aGUgZmF1bHRpbmcgY29udGV4dC4gUmVwb3J0IGFuZCBsZXQgdGhlIGRlZmF1bHQgZGlzcG9zaXRpb25cbiYjNDM7ICogKGNvcmUgZHVtcCkgaGFwcGVuIGluc3RlYWQgb2YgdHJ5aW5nIHRvIHRlYXIgZG93biBHVEsgc3RhdGUgaGVyZS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcGVyZl9ndGtfX2ZhdGFsX3NpZ25hbChpbnQgc2lnKVxuJiM0Mzt7XG4gXHRwc2lnbmFsKHNpZywgXCYjMzQ7cGVyZlwmIzM0Oyk7XG4mIzQzO1x0c2lnbmFsKHNpZywgU0lHX0RGTCk7XG4mIzQzO1x0cmFpc2Uoc2lnKTtcbiB9XG4gXG4gdm9pZCBwZXJmX2d0a19fcmVzaXplX3dpbmRvdyhHdGtXaWRnZXQgKndpbmRvdylcbiB7XG4gXHRHZGtSZWN0YW5nbGUgcmVjdDtcbi1cdEdka1NjcmVlbiAqc2NyZWVuO1xuLVx0aW50IG1vbml0b3I7XG4mIzQzO1x0R2RrTW9uaXRvciAqbW9uaXRvcjtcbiYjNDM7XHRHZGtEaXNwbGF5ICpkaXNwbGF5O1xuJiM0MztcdEdMaXN0TW9kZWwgKm1vbml0b3JzO1xuIFx0aW50IGhlaWdodDtcbiBcdGludCB3aWR0aDtcbiBcbi1cdHNjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbih3aW5kb3cpO1xuJiM0MztcdGRpc3BsYXkgPSBndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpbmRvdyk7XG4mIzQzO1x0bW9uaXRvcnMgPSBnZGtfZGlzcGxheV9nZXRfbW9uaXRvcnMoZGlzcGxheSk7XG4mIzQzO1x0bW9uaXRvciA9IGdfbGlzdF9tb2RlbF9nZXRfaXRlbShtb25pdG9ycywgMCk7XG4mIzQzO1x0aWYgKCFtb25pdG9yKSB7XG4mIzQzO1x0XHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA4MDAsIDYwMCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuIFxuLVx0bW9uaXRvciA9IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgd2luZG93LVx1MDAzZXdpbmRvdyk7XG4tXG4tXHRnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwgXHUwMDI2cmVjdCk7XG4mIzQzO1x0Z2RrX21vbml0b3JfZ2V0X2dlb21ldHJ5KG1vbml0b3IsIFx1MDAyNnJlY3QpO1xuJiM0MztcdGdfb2JqZWN0X3VucmVmKG1vbml0b3IpO1xuIFxuIFx0d2lkdGhcdD0gcmVjdC53aWR0aCAqIDMgLyA0O1xuIFx0aGVpZ2h0XHQ9IHJlY3QuaGVpZ2h0ICogMyAvIDQ7XG4gXG4tXHRndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHdpZHRoLCBoZWlnaHQpO1xuJiM0MztcdGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHdpZHRoLCBoZWlnaHQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgR01haW5Mb29wICpwZXJmX2d0a19fbWFpbl9sb29wO1xuJiM0MztcbiYjNDM7dm9pZCBwZXJmX2d0a19fcXVpdF9tYWluX2xvb3Aodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChwZXJmX2d0a19fbWFpbl9sb29wKVxuJiM0MztcdFx0Z19tYWluX2xvb3BfcXVpdChwZXJmX2d0a19fbWFpbl9sb29wKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGdib29sZWFuIHBlcmZfZ3RrX19jbG9zZV9yZXF1ZXN0KEd0a1dpZGdldCAqd2lkZ2V0IF9fbWF5YmVfdW51c2VkLFxuJiM0MztcdFx0XHRcdFx0Z3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZClcbiYjNDM7e1xuJiM0MztcdHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRkFMU0U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgcGVyZl9ndGtfX3J1bl9tYWluX2xvb3AoR3RrV2lkZ2V0ICp3aW5kb3cpXG4mIzQzO3tcbiYjNDM7XHRnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgXCYjMzQ7Y2xvc2UtcmVxdWVzdFwmIzM0OyxcbiYjNDM7XHRcdFx0IEdfQ0FMTEJBQ0socGVyZl9ndGtfX2Nsb3NlX3JlcXVlc3QpLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0cGVyZl9ndGtfX21haW5fbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBGQUxTRSk7XG4mIzQzO1x0Z19tYWluX2xvb3BfcnVuKHBlcmZfZ3RrX19tYWluX2xvb3ApO1xuJiM0MztcdGdfY2xlYXJfcG9pbnRlcihcdTAwMjZwZXJmX2d0a19fbWFpbl9sb29wLCBnX21haW5fbG9vcF91bnJlZik7XG4gfVxuIFxuIGNvbnN0IGNoYXIgKnBlcmZfZ3RrX19nZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudClcbkBAIC00MiwzMyAmIzQzOzEwMiwzNSBAQCBjb25zdCBjaGFyICpwZXJmX2d0a19fZ2V0X3BlcmNlbnRfY29sb3IoZG91YmxlIHBlcmNlbnQpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiYjNDM7c3RhdGljIHZvaWQgcGVyZl9ndGtfX2hpZGVfd2lkZ2V0KEd0a1dpZGdldCAqd2lkZ2V0LCBnaW50IHJlc3BvbnNlX2lkIF9fbWF5YmVfdW51c2VkLFxuJiM0MztcdFx0XHRcdCAgIGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpZGdldCwgRkFMU0UpO1xuJiM0Mzt9XG4mIzQzO1xuIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKHZvaWQpXG4ge1xuIFx0R3RrV2lkZ2V0ICppbmZvX2JhcjtcbiBcdEd0a1dpZGdldCAqbGFiZWw7XG4tXHRHdGtXaWRnZXQgKmNvbnRlbnRfYXJlYTtcbiBcbiBcdGluZm9fYmFyID0gZ3RrX2luZm9fYmFyX25ldygpO1xuLVx0Z3RrX3dpZGdldF9zZXRfbm9fc2hvd19hbGwoaW5mb19iYXIsIFRSVUUpO1xuJiM0MztcdGd0a193aWRnZXRfc2V0X3Zpc2libGUoaW5mb19iYXIsIEZBTFNFKTtcbiBcbiBcdGxhYmVsID0gZ3RrX2xhYmVsX25ldyhcJiMzNDtcJiMzNDspO1xuLVx0Z3RrX3dpZGdldF9zaG93KGxhYmVsKTtcbiYjNDM7XHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGxhYmVsLCBUUlVFKTtcbiBcbi1cdGNvbnRlbnRfYXJlYSA9IGd0a19pbmZvX2Jhcl9nZXRfY29udGVudF9hcmVhKEdUS19JTkZPX0JBUihpbmZvX2JhcikpO1xuLVx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250ZW50X2FyZWEpLCBsYWJlbCk7XG4mIzQzO1x0Z3RrX2luZm9fYmFyX2FkZF9jaGlsZChHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBsYWJlbCk7XG4gXG4tXHRndGtfaW5mb19iYXJfYWRkX2J1dHRvbihHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBHVEtfU1RPQ0tfT0ssXG4mIzQzO1x0Z3RrX2luZm9fYmFyX2FkZF9idXR0b24oR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgXCYjMzQ7X09LXCYjMzQ7LFxuIFx0XHRcdFx0R1RLX1JFU1BPTlNFX09LKTtcbiBcdGdfc2lnbmFsX2Nvbm5lY3QoaW5mb19iYXIsIFwmIzM0O3Jlc3BvbnNlXCYjMzQ7LFxuLVx0XHRcdCBHX0NBTExCQUNLKGd0a193aWRnZXRfaGlkZSksIE5VTEwpO1xuJiM0MztcdFx0XHQgR19DQUxMQkFDSyhwZXJmX2d0a19faGlkZV93aWRnZXQpLCBOVUxMKTtcbiBcbiBcdHBnY3R4LVx1MDAzZWluZm9fYmFyID0gaW5mb19iYXI7XG4gXHRwZ2N0eC1cdTAwM2VtZXNzYWdlX2xhYmVsID0gbGFiZWw7XG4gXG4gXHRyZXR1cm4gaW5mb19iYXI7XG4gfVxuLSNlbmRpZlxuIFxuIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX3N0YXR1c2Jhcih2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9ndGsuaCBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXG5pbmRleCBhMmI0OTdmMDNmZDZlLi42YjM3ZmQ5OTQzYzlkIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXG5AQCAtMTMsMTAgJiM0MzsxMyw4IEBAIHN0cnVjdCBwZXJmX2d0a19jb250ZXh0IHtcbiBcdEd0a1dpZGdldCAqbWFpbl93aW5kb3c7XG4gXHRHdGtXaWRnZXQgKm5vdGVib29rO1xuIFxuLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4gXHRHdGtXaWRnZXQgKmluZm9fYmFyO1xuIFx0R3RrV2lkZ2V0ICptZXNzYWdlX2xhYmVsO1xuLSNlbmRpZlxuIFx0R3RrV2lkZ2V0ICpzdGF0YmFyO1xuIFx0Z3VpbnQgc3RhdGJhcl9jdHhfaWQ7XG4gfTtcbkBAIC0zOCwxOSAmIzQzOzM2LDE1IEBAIHZvaWQgcGVyZl9ndGtfX2luaXRfaGVscGxpbmUodm9pZCk7XG4gdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX2luaXQodm9pZCk7XG4gdm9pZCBwZXJmX2d0a19faW5pdF9ocHAodm9pZCk7XG4gXG4tdm9pZCBwZXJmX2d0a19fc2lnbmFsKGludCBzaWcpO1xuJiM0Mzt2b2lkIHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscyh2b2lkKTtcbiYjNDM7dm9pZCBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKGludCBzaWcpO1xuIHZvaWQgcGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3coR3RrV2lkZ2V0ICp3aW5kb3cpO1xuJiM0Mzt2b2lkIHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKEd0a1dpZGdldCAqd2luZG93KTtcbiYjNDM7dm9pZCBwZXJmX2d0a19fcXVpdF9tYWluX2xvb3Aodm9pZCk7XG4mIzQzO3ZvaWQgcGVyZl9ndGtfX3F1aXRfZXJyb3JfZGlhbG9nKHZvaWQpO1xuIGNvbnN0IGNoYXIgKnBlcmZfZ3RrX19nZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudCk7XG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKHZvaWQpO1xuLVxuLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZCk7XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKHZvaWQpXG4te1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLSNlbmRpZlxuIFxuIHN0cnVjdCBldnNlbDtcbiBzdHJ1Y3QgZXZsaXN0O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXG5pbmRleCBiYWUyMWYzMzZhZTZkLi4zNDJkNGMzZmVjYjAxIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuY1xuQEAgLTgsNiAmIzQzOzgsOCBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uL2hlbHBsaW5lLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9zdHJpbmcyLmhcJiMzNDtcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuIFxuQEAgLTM5NSwxMSAmIzQzOzM5Nyw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpc3RzKEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRndGtfdHJlZV92aWV3X3NldF9ydWxlc19oaW50KEdUS19UUkVFX1ZJRVcodmlldyksIFRSVUUpO1xuLVxuIFx0Z19zaWduYWxfY29ubmVjdCh2aWV3LCBcJiMzNDtyb3ctYWN0aXZhdGVkXCYjMzQ7LFxuIFx0XHRcdCBHX0NBTExCQUNLKG9uX3Jvd19hY3RpdmF0ZWQpLCBOVUxMKTtcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmlldyk7XG4mIzQzO1x0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuQEAgLTQ0OSw3ICYjNDM7NDQ5LDcgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuIFx0XHRiZiA9IGhwcC1cdTAwM2VidWY7XG4gXHRcdHNpemUgPSBocHAtXHUwMDNlc2l6ZTtcbiBcdFx0cGVyZl9ocHBfbGlzdF9fZm9yX2VhY2hfZm9ybWF0KGhlLVx1MDAzZWhwcF9saXN0LCBmbXQpIHtcbi1cdFx0XHRpbnQgcmV0O1xuJiM0MztcdFx0XHRpbnQgcmV0LCBpbmM7XG4gXG4gXHRcdFx0aWYgKGZtdC1cdTAwM2Vjb2xvcilcbiBcdFx0XHRcdHJldCA9IGZtdC1cdTAwM2Vjb2xvcihmbXQsIGhwcCwgaGUpO1xuQEAgLTQ1Nyw3ICYjNDM7NDU3LDE4IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoc3RydWN0IGhpc3RzICpoaXN0cyxcbiBcdFx0XHRcdHJldCA9IGZtdC1cdTAwM2VlbnRyeShmbXQsIGhwcCwgaGUpO1xuIFxuIFx0XHRcdHNucHJpbnRmKGhwcC1cdTAwM2VidWYgJiM0MzsgcmV0LCBocHAtXHUwMDNlc2l6ZSAtIHJldCwgXCYjMzQ7ICBcJiMzNDspO1xuLVx0XHRcdGFkdmFuY2VfaHBwKGhwcCwgcmV0ICYjNDM7IDIpO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiByZXQgY2FuIGJlIGFzIGxhcmdlIGFzIGhwcC1cdTAwM2VzaXplIC0gMSwgc28gcmV0ICYjNDM7IDJcbiYjNDM7XHRcdFx0ICogY2FuIGV4Y2VlZCBocHAtXHUwMDNlc2l6ZS4gYWR2YW5jZV9ocHAoKSBkb2VzbiYjMzk7dCBjbGFtcCxcbiYjNDM7XHRcdFx0ICogc28gcGFzc2luZyB0aGF0IHRocm91Z2ggd291bGQgdW5kZXJmbG93IHRoZVxuJiM0MztcdFx0XHQgKiBzaXplX3QgaHBwLVx1MDAzZXNpemUgYW5kIGxldCBhIGxhdGVyIGZtdC1cdTAwM2VlbnRyeSgpIGluXG4mIzQzO1x0XHRcdCAqIHRoaXMgbG9vcCB3cml0ZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGNhbGxlciYjMzk7c1xuJiM0MztcdFx0XHQgKiBzdGFjayBidWZmZXIuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpbmMgPSByZXQgJiM0MzsgMjtcbiYjNDM7XHRcdFx0aWYgKGluYyBcdTAwM2UgKGludClocHAtXHUwMDNlc2l6ZSlcbiYjNDM7XHRcdFx0XHRpbmMgPSBocHAtXHUwMDNlc2l6ZTtcbiYjNDM7XHRcdFx0YWR2YW5jZV9ocHAoaHBwLCBpbmMpO1xuIFx0XHR9XG4gXG4gXHRcdGd0a190cmVlX3N0b3JlX3NldChzdG9yZSwgXHUwMDI2aXRlciwgY29sX2lkeCwgc3RyaW0oYmYpLCAtMSk7XG5AQCAtNTA1LDYgJiM0Mzs1MTYsNyBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXG4gXHRHdGtXaWRnZXQgKnZpZXc7XG4gXHRpbnQgY29sX2lkeDtcbiBcdGludCBucl9jb2xzID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuIFx0Y2hhciBzWzUxMl07XG4gXHRjaGFyIGJ1Zls1MTJdO1xuIFx0Ym9vbCBmaXJzdF9ub2RlLCBmaXJzdF9jb2w7XG5AQCAtNTQxLDkgJiM0Mzs1NTMsMTAgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGllcmFyY2h5KEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuIFx0LyogY29uc3RydWN0IG1lcmdlZCBjb2x1bW4gaGVhZGVyIHNpbmNlIHNvcnQga2V5cyBzaGFyZSBzaW5nbGUgY29sdW1uICovXG4gXHRidWZbMF0gPSAmIzM5O1xcMCYjMzk7O1xuIFx0Zmlyc3Rfbm9kZSA9IHRydWU7XG4mIzQzO1x0cmV0ID0gMDtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoZm10X25vZGUsIFx1MDAyNmhpc3RzLVx1MDAzZWhwcF9mb3JtYXRzLCBsaXN0KSB7XG4gXHRcdGlmICghZmlyc3Rfbm9kZSlcbi1cdFx0XHRzdHJjYXQoYnVmLCBcJiMzNDsgLyBcJiMzNDspO1xuJiM0MztcdFx0XHRyZXQgJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgcmV0LCBzaXplb2YoYnVmKSAtIHJldCwgXCYjMzQ7IC8gXCYjMzQ7KTtcbiBcdFx0Zmlyc3Rfbm9kZSA9IGZhbHNlO1xuIFxuIFx0XHRmaXJzdF9jb2wgPSB0cnVlO1xuQEAgLTU1MiwxMSAmIzQzOzU2NSwxMSBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRpZiAoIWZpcnN0X2NvbClcbi1cdFx0XHRcdHN0cmNhdChidWYsIFwmIzM0OyYjNDM7XCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXQgJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgcmV0LCBzaXplb2YoYnVmKSAtIHJldCwgXCYjMzQ7JiM0MztcJiMzNDspO1xuIFx0XHRcdGZpcnN0X2NvbCA9IGZhbHNlO1xuIFxuIFx0XHRcdGZtdC1cdTAwM2VoZWFkZXIoZm10LCBcdTAwMjZocHAsIGhpc3RzLCAwLCBOVUxMKTtcbi1cdFx0XHRzdHJjYXQoYnVmLCBzdHJpbShocHAuYnVmKSk7XG4mIzQzO1x0XHRcdHJldCAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyByZXQsIHNpemVvZihidWYpIC0gcmV0LCBcJiMzNDslc1wmIzM0Oywgc3RyaW0oaHBwLmJ1ZikpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNTgzLDExICYjNDM7NTk2LDkgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGllcmFyY2h5KEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuIFx0cGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhoaXN0cywgXHUwMDI2aGlzdHMtXHUwMDNlZW50cmllcywgc3RvcmUsXG4gXHRcdFx0XHRcdE5VTEwsIFx1MDAyNmhwcCwgbWluX3BjbnQpO1xuIFxuLVx0Z3RrX3RyZWVfdmlld19zZXRfcnVsZXNfaGludChHVEtfVFJFRV9WSUVXKHZpZXcpLCBUUlVFKTtcbi1cbiBcdGdfc2lnbmFsX2Nvbm5lY3QodmlldywgXCYjMzQ7cm93LWFjdGl2YXRlZFwmIzM0OyxcbiBcdFx0XHQgR19DQUxMQkFDSyhvbl9yb3dfYWN0aXZhdGVkKSwgTlVMTCk7XG4tXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xuJiM0MztcdGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X2NoaWxkKEdUS19TQ1JPTExFRF9XSU5ET1cod2luZG93KSwgdmlldyk7XG4gfVxuIFxuIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLFxuQEAgLTYwMCwzNiAmIzQzOzYxMSwzMiBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcbiBcdEd0a1dpZGdldCAqc3RhdGJhcjtcbiBcdEd0a1dpZGdldCAqd2luZG93O1xuIFxuLVx0c2lnbmFsKFNJR1NFR1YsIHBlcmZfZ3RrX19zaWduYWwpO1xuLVx0c2lnbmFsKFNJR0ZQRSwgIHBlcmZfZ3RrX19zaWduYWwpO1xuLVx0c2lnbmFsKFNJR0lOVCwgIHBlcmZfZ3RrX19zaWduYWwpO1xuLVx0c2lnbmFsKFNJR1FVSVQsIHBlcmZfZ3RrX19zaWduYWwpO1xuLVx0c2lnbmFsKFNJR1RFUk0sIHBlcmZfZ3RrX19zaWduYWwpO1xuJiM0MztcdHNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKTtcbiYjNDM7XHRzaWduYWwoU0lHRlBFLCAgcGVyZl9ndGtfX2ZhdGFsX3NpZ25hbCk7XG4mIzQzO1x0cGVyZl9ndGtfX2luc3RhbGxfcXVpdF9zaWduYWxzKCk7XG4gXG4tXHR3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTtcbiYjNDM7XHR3aW5kb3cgPSBndGtfd2luZG93X25ldygpO1xuIFxuIFx0Z3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyh3aW5kb3cpLCBcJiMzNDtwZXJmIHJlcG9ydFwmIzM0Oyk7XG4gXG4tXHRnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgXCYjMzQ7ZGVsZXRlX2V2ZW50XCYjMzQ7LCBndGtfbWFpbl9xdWl0LCBOVUxMKTtcbi1cbiBcdHBnY3R4ID0gcGVyZl9ndGtfX2FjdGl2YXRlX2NvbnRleHQod2luZG93KTtcbiBcdGlmICghcGdjdHgpXG4gXHRcdHJldHVybiAtMTtcbiBcbi1cdHZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApO1xuJiM0MztcdHZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDApO1xuIFxuIFx0bm90ZWJvb2sgPSBndGtfbm90ZWJvb2tfbmV3KCk7XG4gXG4tXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2ssIFRSVUUsIFRSVUUsIDApO1xuJiM0MztcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQobm90ZWJvb2ssIFRSVUUpO1xuJiM0MztcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIG5vdGVib29rKTtcbiBcbiBcdGluZm9fYmFyID0gcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKCk7XG4tXHRpZiAoaW5mb19iYXIpXG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBpbmZvX2JhciwgRkFMU0UsIEZBTFNFLCAwKTtcbiYjNDM7XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBpbmZvX2Jhcik7XG4gXG4gXHRzdGF0YmFyID0gcGVyZl9ndGtfX3NldHVwX3N0YXR1c2JhcigpO1xuLVx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHN0YXRiYXIsIEZBTFNFLCBGQUxTRSwgMCk7XG4mIzQzO1x0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhcik7XG4gXG4tXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZib3gpO1xuJiM0MztcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cod2luZG93KSwgdmJveCk7XG4gXG4gXHRldmxpc3RfX2Zvcl9lYWNoX2VudHJ5KGV2bGlzdCwgcG9zKSB7XG4gXHRcdHN0cnVjdCBoaXN0cyAqaGlzdHMgPSBldnNlbF9faGlzdHMocG9zKTtcbkBAIC02NDksNyAmIzQzOzY1Niw3IEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLFxuIFx0XHRcdH1cbiBcdFx0fVxuIFxuLVx0XHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTtcbiYjNDM7XHRcdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KCk7XG4gXG4gXHRcdGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksXG4gXHRcdFx0XHRcdFx0XHRHVEtfUE9MSUNZX0FVVE9NQVRJQyxcbkBAIC02NjUsMTUgJiM0Mzs2NzIsMTIgQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXG4gXHRcdGd0a19ub3RlYm9va19hcHBlbmRfcGFnZShHVEtfTk9URUJPT0sobm90ZWJvb2spLCBzY3JvbGxlZF93aW5kb3csIHRhYl9sYWJlbCk7XG4gXHR9XG4gXG4tXHRndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7XG4tXG4gXHRwZXJmX2d0a19fcmVzaXplX3dpbmRvdyh3aW5kb3cpO1xuLVxuLVx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xuJiM0MztcdGd0a193aWRnZXRfc2V0X3Zpc2libGUod2luZG93LCBUUlVFKTtcbiBcbiBcdHVpX2hlbHBsaW5lX19wdXNoKGhlbHApO1xuIFxuLVx0Z3RrX21haW4oKTtcbiYjNDM7XHRwZXJmX2d0a19fcnVuX21haW5fbG9vcCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dChcdTAwMjZwZ2N0eCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmNcbmluZGV4IGVlYTZmY2RlNTE4YTguLjc3MGY5MjUxYjU0YjcgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jXG5AQCAtMSw0OSAmIzQzOzEsNjUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNpbmNsdWRlIFx1MDAzY2ludHR5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2d0ay5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vcHJvZ3Jlc3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gXG4gc3RhdGljIEd0a1dpZGdldCAqZGlhbG9nO1xuIHN0YXRpYyBHdGtXaWRnZXQgKnByb2dyZXNzO1xuIFxuJiM0MztzdGF0aWMgdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX2Rlc3Ryb3llZChHdGtXaWRnZXQgKndpZGdldCBfX21heWJlX3VudXNlZCxcbiYjNDM7XHRcdFx0XHRcdGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRkaWFsb2cgPSBOVUxMO1xuJiM0MztcdHByb2dyZXNzID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX3VwZGF0ZShzdHJ1Y3QgdWlfcHJvZ3Jlc3MgKnApXG4ge1xuIFx0ZG91YmxlIGZyYWN0aW9uID0gcC1cdTAwM2V0b3RhbCA/IDEuMCAqIHAtXHUwMDNlY3VyciAvIHAtXHUwMDNldG90YWwgOiAwLjA7XG4gXHRjaGFyIGJ1ZlsxMDI0XTtcbiBcbiBcdGlmIChkaWFsb2cgPT0gTlVMTCkge1xuLVx0XHRHdGtXaWRnZXQgKnZib3ggPSBndGtfdmJveF9uZXcoVFJVRSwgNSk7XG4mIzQzO1x0XHRHdGtXaWRnZXQgKnZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDUpO1xuIFx0XHRHdGtXaWRnZXQgKmxhYmVsID0gZ3RrX2xhYmVsX25ldyhwLVx1MDAzZXRpdGxlKTtcbiBcbi1cdFx0ZGlhbG9nID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7XG4mIzQzO1x0XHRkaWFsb2cgPSBndGtfd2luZG93X25ldygpO1xuIFx0XHRwcm9ncmVzcyA9IGd0a19wcm9ncmVzc19iYXJfbmV3KCk7XG4gXG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBsYWJlbCwgVFJVRSwgRkFMU0UsIDMpO1xuLVx0XHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgcHJvZ3Jlc3MsIFRSVUUsIFRSVUUsIDMpO1xuJiM0MztcdFx0Z3RrX3dpZGdldF9zZXRfdmV4cGFuZChsYWJlbCwgVFJVRSk7XG4mIzQzO1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBsYWJlbCk7XG4mIzQzO1x0XHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHByb2dyZXNzLCBUUlVFKTtcbiYjNDM7XHRcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIHByb2dyZXNzKTtcbiYjNDM7XG4mIzQzO1x0XHRndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKGRpYWxvZyksIHZib3gpO1xuIFxuLVx0XHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGRpYWxvZyksIHZib3gpO1xuJiM0MztcdFx0Z19zaWduYWxfY29ubmVjdChkaWFsb2csIFwmIzM0O2Rlc3Ryb3lcJiMzNDssXG4mIzQzO1x0XHRcdFx0IEdfQ0FMTEJBQ0soZ3RrX3VpX3Byb2dyZXNzX19kZXN0cm95ZWQpLCBOVUxMKTtcbiBcbiBcdFx0Z3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhkaWFsb2cpLCBcJiMzNDtwZXJmXCYjMzQ7KTtcbi1cdFx0Z3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcbi1cdFx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyhkaWFsb2cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xuJiM0MztcdFx0Z3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1coZGlhbG9nKSwgMzAwLCA4MCk7XG4gXG4tXHRcdGd0a193aWRnZXRfc2hvd19hbGwoZGlhbG9nKTtcbiYjNDM7XHRcdGd0a193aWRnZXRfc2V0X3Zpc2libGUoZGlhbG9nLCBUUlVFKTtcbiBcdH1cbiBcbiBcdGd0a19wcm9ncmVzc19iYXJfc2V0X2ZyYWN0aW9uKEdUS19QUk9HUkVTU19CQVIocHJvZ3Jlc3MpLCBmcmFjdGlvbik7XG4gXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslXCYjMzQ7UFJJdTY0XCYjMzQ7IC8gJVwmIzM0O1BSSXU2NCwgcC1cdTAwM2VjdXJyLCBwLVx1MDAzZXRvdGFsKTtcbiBcdGd0a19wcm9ncmVzc19iYXJfc2V0X3RleHQoR1RLX1BST0dSRVNTX0JBUihwcm9ncmVzcyksIGJ1Zik7XG4gXG4tXHQvKiB3ZSBkaWRuJiMzOTt0IGNhbGwgZ3RrX21haW4geWV0LCBzbyBkbyBpdCBtYW51YWxseSAqL1xuLVx0d2hpbGUgKGd0a19ldmVudHNfcGVuZGluZygpKVxuLVx0XHRndGtfbWFpbl9pdGVyYXRpb24oKTtcbiYjNDM7XHQvKiB3ZSBkaWRuJiMzOTt0IHN0YXJ0IGEgbWFpbiBsb29wIHlldCwgc28gcHVtcCBldmVudHMgbWFudWFsbHkgKi9cbiYjNDM7XHR3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSlcbiYjNDM7XHRcdGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZmluaXNoKHZvaWQpXG4ge1xuJiM0MztcdGlmIChkaWFsb2cgPT0gTlVMTClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHQvKiB0aGlzIHdpbGwgYWxzbyBkZXN0cm95IGFsbCBvZiBpdHMgY2hpbGRyZW4gKi9cbi1cdGd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpO1xuJiM0MztcdGd0a193aW5kb3dfZGVzdHJveShHVEtfV0lORE9XKGRpYWxvZykpO1xuIFxuIFx0ZGlhbG9nID0gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcbmluZGV4IGY1ZWVlNGQ2Njg3MzguLjliNDRmMzcxOTc0NzcgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jXG5AQCAtMTIsNyAmIzQzOzEyLDcgQEAgaW50IHBlcmZfZ3RrX19pbml0KHZvaWQpXG4gXHRndGtfdWlfcHJvZ3Jlc3NfX2luaXQoKTtcbiBcdHBlcmZfZ3RrX19pbml0X2hwcCgpO1xuIFxuLVx0cmV0dXJuIGd0a19pbml0X2NoZWNrKE5VTEwsIE5VTEwpID8gMCA6IC0xO1xuJiM0MztcdHJldHVybiBndGtfaW5pdF9jaGVjaygpID8gMCA6IC0xO1xuIH1cbiBcbiB2b2lkIHBlcmZfZ3RrX19leGl0KGJvb2wgd2FpdF9mb3Jfb2sgX19tYXliZV91bnVzZWQpXG5AQCAtMjAsNSAmIzQzOzIwLDYgQEAgdm9pZCBwZXJmX2d0a19fZXhpdChib29sIHdhaXRfZm9yX29rIF9fbWF5YmVfdW51c2VkKVxuIFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpKVxuIFx0XHRyZXR1cm47XG4gXHRwZXJmX2Vycm9yX191bnJlZ2lzdGVyKFx1MDAyNnBlcmZfZ3RrX2VvcHMpO1xuLVx0Z3RrX21haW5fcXVpdCgpO1xuJiM0MztcdHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZygpO1xuJiM0MztcdHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmMgYi90b29scy9wZXJmL3VpL2d0ay91dGlsLmNcbmluZGV4IGM0N2Y1YzM4NzgzOGMuLjU4MjNmZjBkN2MyYTcgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xuQEAgLTIsOCAmIzQzOzIsMTAgQEBcbiAjaW5jbHVkZSBcJiMzNDsuLi91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtndGsuaFwmIzM0O1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvemFsbG9jLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgcGVyZl9ndGtfY29udGV4dCAqcGdjdHg7XG5AQCAtMjgsODYgJiM0MzszMCwxMDMgQEAgaW50IHBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQgKipjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIHBlcmZfZ3RrX19lcnJvcigpIGNhbiBiZSBjYWxsZWQgcmUtZW50cmFudGx5LCBzaW5jZSB0aGUgZGlhbG9nIGlzbiYjMzk7dFxuJiM0MzsgKiBtb2RhbCBhbmQgaXRzIG5lc3RlZCBsb29wIHN0aWxsIHB1bXBzIGV2ZW50cyBmb3IgdGhlIG1haW4gd2luZG93LlxuJiM0MzsgKiBUcmFjayBldmVyeSBjdXJyZW50bHkgcnVubmluZyBsb29wIGluc3RlYWQgb2YgYSBzaW5nbGUgcG9pbnRlciwgc28gYVxuJiM0MzsgKiBuZXN0ZWQgY2FsbCBjYW4mIzM5O3QgY2xvYmJlciBhbiBvdXRlciBjYWxsJiMzOTtzIGxvb3AgYW5kIGxlYWsgaXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgR1NMaXN0ICpwZXJmX2d0a19fZXJyb3JfbG9vcHM7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwZXJmX2d0a19fcXVpdF9sb29wKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSBfX21heWJlX3VudXNlZClcbiYjNDM7e1xuJiM0MztcdGdfbWFpbl9sb29wX3F1aXQoZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgcGVyZl9ndGtfX3F1aXRfZXJyb3JfZGlhbG9nKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRnX3NsaXN0X2ZvcmVhY2gocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBwZXJmX2d0a19fcXVpdF9sb29wLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcGVyZl9ndGtfX2RpYWxvZ19yZXNwb25zZShHdGtEaWFsb2cgKmRpYWxvZyxcbiYjNDM7XHRcdFx0XHQgICAgICBnaW50IHJlc3BvbnNlX2lkIF9fbWF5YmVfdW51c2VkLFxuJiM0MztcdFx0XHRcdCAgICAgIGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRndGtfd2luZG93X2Rlc3Ryb3koR1RLX1dJTkRPVyhkaWFsb2cpKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHBlcmZfZ3RrX19lcnJvcihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncylcbiB7XG4gXHRjaGFyICptc2c7XG4gXHRHdGtXaWRnZXQgKmRpYWxvZztcbiYjNDM7XHRHTWFpbkxvb3AgKmxvb3A7XG4mIzQzO1x0dmFfbGlzdCBhcmdzX2NvcHk7XG4gXG4mIzQzO1x0dmFfY29weShhcmdzX2NvcHksIGFyZ3MpO1xuIFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpIHx8XG4tXHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzKSBcdTAwM2MgMCkge1xuJiM0MztcdCAgICB2YXNwcmludGYoXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3NfY29weSkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHZhX2VuZChhcmdzX2NvcHkpO1xuIFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6XFxuXCYjMzQ7KTtcbiBcdFx0dmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpO1xuIFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuJiM0MztcdHZhX2VuZChhcmdzX2NvcHkpO1xuIFxuIFx0ZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ld193aXRoX21hcmt1cChHVEtfV0lORE9XKHBnY3R4LVx1MDAzZW1haW5fd2luZG93KSxcbiBcdFx0XHRcdFx0R1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULFxuIFx0XHRcdFx0XHRHVEtfTUVTU0FHRV9FUlJPUixcbiBcdFx0XHRcdFx0R1RLX0JVVFRPTlNfQ0xPU0UsXG4gXHRcdFx0XHRcdFwmIzM0O1x1MDAzY2JcdTAwM2VFcnJvclx1MDAzYy9iXHUwMDNlXFxuXFxuJXNcJiMzNDssIG1zZyk7XG4tXHRndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpO1xuIFxuLVx0Z3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBcJiMzNDtyZXNwb25zZVwmIzM0OyBvbmx5IGZpcmVzIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZDsgREVTVFJPWV9XSVRIX1BBUkVOVFxuJiM0MztcdCAqIGRlc3Ryb3lzIHRoZSBkaWFsb2cgZGlyZWN0bHkgd2l0aG91dCBpdC4gUXVpdCBmcm9tIFwmIzM0O2Rlc3Ryb3lcJiMzNDtcbiYjNDM7XHQgKiBpbnN0ZWFkLCB3aGljaCBmaXJlcyBlaXRoZXIgd2F5LCBzbyB0aGUgbmVzdGVkIGxvb3AgYmVsb3cgY2FuJiMzOTt0XG4mIzQzO1x0ICogb3V0bGl2ZSB0aGUgZGlhbG9nIGFuZCBoYW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgRkFMU0UpO1xuJiM0MztcdHBlcmZfZ3RrX19lcnJvcl9sb29wcyA9IGdfc2xpc3RfcHJlcGVuZChwZXJmX2d0a19fZXJyb3JfbG9vcHMsIGxvb3ApO1xuJiM0MztcdGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCBcJiMzNDtyZXNwb25zZVwmIzM0OyxcbiYjNDM7XHRcdFx0IEdfQ0FMTEJBQ0socGVyZl9ndGtfX2RpYWxvZ19yZXNwb25zZSksIE5VTEwpO1xuJiM0MztcdGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChkaWFsb2csIFwmIzM0O2Rlc3Ryb3lcJiMzNDssXG4mIzQzO1x0XHRcdFx0IEdfQ0FMTEJBQ0soZ19tYWluX2xvb3BfcXVpdCksIGxvb3ApO1xuJiM0MztcbiYjNDM7XHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGRpYWxvZywgVFJVRSk7XG4mIzQzO1x0Z19tYWluX2xvb3BfcnVuKGxvb3ApO1xuJiM0MztcdHBlcmZfZ3RrX19lcnJvcl9sb29wcyA9IGdfc2xpc3RfcmVtb3ZlKHBlcmZfZ3RrX19lcnJvcl9sb29wcywgbG9vcCk7XG4mIzQzO1x0Z19tYWluX2xvb3BfdW5yZWYobG9vcCk7XG4mIzQzO1xuIFx0ZnJlZShtc2cpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4gc3RhdGljIGludCBwZXJmX2d0a19fd2FybmluZ19pbmZvX2Jhcihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncylcbiB7XG4gXHRjaGFyICptc2c7XG4mIzQzO1x0dmFfbGlzdCBhcmdzX2NvcHk7XG4gXG4mIzQzO1x0dmFfY29weShhcmdzX2NvcHksIGFyZ3MpO1xuIFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpIHx8XG4tXHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzKSBcdTAwM2MgMCkge1xuJiM0MztcdCAgICB2YXNwcmludGYoXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3NfY29weSkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHZhX2VuZChhcmdzX2NvcHkpO1xuIFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7V2FybmluZzpcXG5cJiMzNDspO1xuIFx0XHR2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7XG4gXHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4mIzQzO1x0dmFfZW5kKGFyZ3NfY29weSk7XG4gXG4gXHRndGtfbGFiZWxfc2V0X3RleHQoR1RLX0xBQkVMKHBnY3R4LVx1MDAzZW1lc3NhZ2VfbGFiZWwpLCBtc2cpO1xuIFx0Z3RrX2luZm9fYmFyX3NldF9tZXNzYWdlX3R5cGUoR1RLX0lORk9fQkFSKHBnY3R4LVx1MDAzZWluZm9fYmFyKSxcbiBcdFx0XHRcdCAgICAgIEdUS19NRVNTQUdFX1dBUk5JTkcpO1xuLVx0Z3RrX3dpZGdldF9zaG93KHBnY3R4LVx1MDAzZWluZm9fYmFyKTtcbi1cbi1cdGZyZWUobXNnKTtcbi1cdHJldHVybiAwO1xuLX1cbi0jZWxzZVxuLXN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxuLXtcbi1cdGNoYXIgKm1zZywgKnA7XG4tXG4tXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHxcbi1cdCAgICB2YXNwcmludGYoXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3MpIFx1MDAzYyAwKSB7XG4tXHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtXYXJuaW5nOlxcblwmIzM0Oyk7XG4tXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAtMTtcbi1cdH1cbi1cbi1cdGd0a19zdGF0dXNiYXJfcG9wKEdUS19TVEFUVVNCQVIocGdjdHgtXHUwMDNlc3RhdGJhciksXG4tXHRcdFx0ICBwZ2N0eC1cdTAwM2VzdGF0YmFyX2N0eF9pZCk7XG4tXG4tXHQvKiBPbmx5IGZpcnN0IGxpbmUgY2FuIGJlIGRpc3BsYXllZCAqL1xuLVx0cCA9IHN0cmNocihtc2csICYjMzk7XFxuJiMzOTspO1xuLVx0aWYgKHApXG4tXHRcdCpwID0gJiMzOTtcXDAmIzM5Oztcbi1cbi1cdGd0a19zdGF0dXNiYXJfcHVzaChHVEtfU1RBVFVTQkFSKHBnY3R4LVx1MDAzZXN0YXRiYXIpLFxuLVx0XHRcdCAgIHBnY3R4LVx1MDAzZXN0YXRiYXJfY3R4X2lkLCBtc2cpO1xuJiM0MztcdGd0a193aWRnZXRfc2V0X3Zpc2libGUocGdjdHgtXHUwMDNlaW5mb19iYXIsIFRSVUUpO1xuIFxuIFx0ZnJlZShtc2cpO1xuIFx0cmV0dXJuIDA7XG4gfVxuLSNlbmRpZlxuIFxuIHN0cnVjdCBwZXJmX2Vycm9yX29wcyBwZXJmX2d0a19lb3BzID0ge1xuIFx0LmVycm9yXHRcdD0gcGVyZl9ndGtfX2Vycm9yLFxuLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4gXHQud2FybmluZ1x0PSBwZXJmX2d0a19fd2FybmluZ19pbmZvX2Jhcixcbi0jZWxzZVxuLVx0Lndhcm5pbmdcdD0gcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyLFxuLSNlbmRpZlxuIH07XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9zZXR1cC5jXG5pbmRleCBmZjgwMDA0N2U2OTdmLi5kODg3MzQ2YzdhNjMyIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9zZXR1cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL3NldHVwLmNcbkBAIC0xNCw3ICYjNDM7MTQsNyBAQCBpbnQgdXNlX2Jyb3dzZXIgPSAtMTtcbiBcbiAjZGVmaW5lIFBFUkZfR1RLX0RTTyBcJiMzNDtsaWJwZXJmLWd0ay5zb1wmIzM0O1xuIFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcbiBzdGF0aWMgaW50IHNldHVwX2d0a19icm93c2VyKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmNcbmluZGV4IGRmNzBlOTVhODQ3MDQuLjEyM2I2ZDVmY2VhNzggMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmNcbkBAIC0xNDUsNiAmIzQzOzE0NSwxNyBAQCBzdGF0aWMgaW50IGFubm90YXRlZF9zb3VyY2VfX2FsbG9jX2hpc3RvZ3JhbXMoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYyxcbiBcdHJldHVybiBzcmMtXHUwMDNlaGlzdG9ncmFtcyA/IDAgOiAtMTtcbiB9XG4gXG4mIzQzO3N0cnVjdCBzeW1faGlzdF9lbnRyeSAqXG4mIzQzO2Fubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzeW1faGlzdF9lbnRyeSAqZW50cnk7XG4mIzQzO1x0bG9uZyBrZXkgPSBvZmZzZXQgXHUwMDNjXHUwMDNjIDE2IHwgZXZzZWwtXHUwMDNlY29yZS5pZHg7XG4mIzQzO1xuJiM0MztcdGlmICghaGFzaG1hcF9fZmluZChzcmMtXHUwMDNlc2FtcGxlcywga2V5LCBcdTAwMjZlbnRyeSkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gZW50cnk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBzeW1ib2xfX2Fubm90YXRlX3plcm9faGlzdG9ncmFtcyhzdHJ1Y3Qgc3ltYm9sICpzeW0pXG4ge1xuIFx0c3RydWN0IGFubm90YXRpb24gKm5vdGVzID0gc3ltYm9sX19hbm5vdGF0aW9uKHN5bSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmggYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaFxuaW5kZXggZmEwOGQwOWI4MGY3Ni4uNDAwMzhhMzc3OWQ0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaFxuQEAgLTQwNiwxNiAmIzQzOzQwNiw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bV9oaXN0ICphbm5vdGF0aW9uX19oaXN0b2dyYW0oc3RydWN0IGFubm90YXRpb24gKm5vdGVzLFxuIFx0cmV0dXJuIGFubm90YXRlZF9zb3VyY2VfX2hpc3RvZ3JhbShub3Rlcy1cdTAwM2VzcmMsIGV2c2VsKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKlxuLWFubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldClcbi17XG4tXHRzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKmVudHJ5O1xuLVx0bG9uZyBrZXkgPSBvZmZzZXQgXHUwMDNjXHUwMDNjIDE2IHwgZXZzZWwtXHUwMDNlY29yZS5pZHg7XG4tXG4tXHRpZiAoIWhhc2htYXBfX2ZpbmQoc3JjLVx1MDAzZXNhbXBsZXMsIGtleSwgXHUwMDI2ZW50cnkpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdHJldHVybiBlbnRyeTtcbi19XG4mIzQzO3N0cnVjdCBzeW1faGlzdF9lbnRyeSAqXG4mIzQzO2Fubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldCk7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgYW5ub3RhdGlvbiAqc3ltYm9sX19hbm5vdGF0aW9uKHN0cnVjdCBzeW1ib2wgKnN5bSlcbiB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29saW5nIGFuZCBidWlsZCBzY3JpcHRzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHBvcnRpbmcgdGhlIHBlcmYgR1RLIFVJIGZyb20gR1RLMiB0byBHVEs0IGFuZCBtaW5vciBoZWxwZXIgcmVsb2NhdGlvbiBpbiB0b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYykuIEl0IGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwtc3BhY2UgY29kZSwgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVmYWY0MTUzNjQwMGZjNzIwOTNkZjc4ZDZlNzk3YTM3Y2JhYjA2ZjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDAyOjI2OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZSBiL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUKaW5kZXggOTllYjBlYTA5NTM3NS4uNGVjOTVjMzVhNWMxOSAxMDA2NDQKLS0tIGEvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlCkBAIC0xMTMsOCAmIzQzOzExMyw3IEBAIEZFQVRVUkVfVEVTVFNfRVhUUkEgOj0gICAgICAgICAgICAgICAgICBcCiAgICAgICAgICBjb21waWxlLXgzMiAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgY3BsdXMtZGVtYW5nbGUgICAgICAgICAgICAgICAgIFwKICAgICAgICAgIGN4YS1kZW1hbmdsZSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICBndGsyICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgZ3RrMi1pbmZvYmFyICAgICAgICAgICAgICAgICAgIFwKJiM0MzsgICAgICAgICBndGs0ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgaGVsbG8gICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgIGJhYmVsdHJhY2UyLWN0Zi13cml0ZXIgICAgICAgICBcCiAgICAgICAgICBsaWJjYXBzdG9uZSAgICAgICAgICAgICAgICAgICAgXApAQCAtMTQzLDYgJiM0MzsxNDIsNyBAQCBlbmRpZgogRkVBVFVSRV9ESVNQTEFZID89ICAgICAgICAgICAgICBcCiAgICAgICAgICBsaWJkdyAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgIGdsaWJjICAgICAgICAgICAgICAgICAgXAomIzQzOyAgICAgICAgIGd0azQgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgbGliZWxmICAgICAgICAgICAgICAgICBcCiAgICAgICAgICBsaWJudW1hICAgICAgICAgICAgICAgIFwKICAgICAgICAgIG51bWFfbnVtX3Bvc3NpYmxlX2NwdXMgXApkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZSBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGUKaW5kZXggN2QxNjUwMTgxMTZhNS4uMDFjNDhlNmVmMDIxZCAxMDA2NDQKLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlCkBAIC0xMSw4ICYjNDM7MTEsNyBAQCBGSUxFUz0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICB0ZXN0LWV2ZW50ZmQuYmluICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICB0ZXN0LWZvcnRpZnktc291cmNlLmJpbiAgICAgICAgICAgICAgICBcCiAgICAgICAgICB0ZXN0LWdsaWJjLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICB0ZXN0LWd0azIuYmluICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICB0ZXN0LWd0azItaW5mb2Jhci5iaW4gICAgICAgICAgICAgICAgICBcCiYjNDM7ICAgICAgICAgdGVzdC1ndGs0LmJpbiAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgdGVzdC1oZWxsby5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgdGVzdC1saWJiZmQuYmluICAgICAgICAgICAgICAgICAgICAgICAgXAogCSB0ZXN0LWxpYmJmZC10aHJlYWRzYWZlLmJpbiAgICAgIAlcCkBAIC0yNDAsMTEgJiM0MzsyMzksOCBAQCAkKE9VVFBVVCl0ZXN0LWxpYmNwdXBvd2VyLmJpbjoKICQoT1VUUFVUKXRlc3QtbGlidHJhY2Vmcy5iaW46CiAJICQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBsaWJ0cmFjZWZzIDImZ3Q7L2Rldi9udWxsKSAtbHRyYWNlZnMKIAotJChPVVRQVVQpdGVzdC1ndGsyLmJpbjoKLQkkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0ayYjNDM7LTIuMCAyJmd0Oy9kZXYvbnVsbCkgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucwotCi0kKE9VVFBVVCl0ZXN0LWd0azItaW5mb2Jhci5iaW46Ci0JJChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsmIzQzOy0yLjAgMiZndDsvZGV2L251bGwpCiYjNDM7JChPVVRQVVQpdGVzdC1ndGs0LmJpbjoKJiM0MzsJJChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGs0IDImZ3Q7L2Rldi9udWxsKQogCiBncmVwLWxpYnMgID0gJChmaWx0ZXIgLWwlLCQoMSkpCiBzdHJpcC1saWJzID0gJChmaWx0ZXItb3V0IC1sJSwkKDEpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWI3MTZkZDU3MzMwLi4wMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLWluZm9iYXIuYwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDEyICYjNDM7MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICYjMzQ7LVdzdHJpY3QtcHJvdG90eXBlcyYjMzQ7Ci0jaW5jbHVkZSAmbHQ7Z3RrL2d0ay5oJmd0OwotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBlcnJvciAmIzM0Oy1Xc3RyaWN0LXByb3RvdHlwZXMmIzM0OwotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCWd0a19pbml0KCZhbXA7YXJnYywgJmFtcDthcmd2KTsKLQlndGtfaW5mb19iYXJfbmV3KCk7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLmMgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrNC5jCnNpbWlsYXJpdHkgaW5kZXggNzYlCnJlbmFtZSBmcm9tIHRvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLmMKcmVuYW1lIHRvIHRvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmMKaW5kZXggMmFhZjRiZmMyMDU1Ni4uYjk1MjBlNzQwOGI5OSAxMDA2NDQKLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrNC5jCkBAIC0zLDkgJiM0MzszLDkgQEAKICNpbmNsdWRlICZsdDtndGsvZ3RrLmgmZ3Q7CiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGVycm9yICYjMzQ7LVdzdHJpY3QtcHJvdG90eXBlcyYjMzQ7CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiYjNDM7aW50IG1haW4odm9pZCkKIHsKLQlndGtfaW5pdCgmYW1wO2FyZ2MsICZhbXA7YXJndik7CiYjNDM7CWd0a19pbml0KCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dAppbmRleCAyMmY4N2VhYTMyNzk2Li43YWY5YjNmODFjMDY1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQKQEAgLTM1MSw3ICYjNDM7MzUxLDcgQEAgT1BUSU9OUwogCXJlcXVpcmVzIGEgdHR5LCBpZiBvbmUgaXMgbm90IHByZXNlbnQsIGFzIHdoZW4gcGlwaW5nIHRvIG90aGVyCiAJY29tbWFuZHMsIHRoZSBzdGRpbyBpbnRlcmZhY2UgaXMgdXNlZC4KIAotLS1ndGs6OiBVc2UgdGhlIEdUSzIgaW50ZXJmYWNlLgomIzQzOy0tZ3RrOjogVXNlIHRoZSBHVEs0IGludGVyZmFjZS4KIAogLWs6OgogLS12bWxpbnV4PSZsdDtmaWxlJmd0Ozo6CmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCA1YjcxMzgzN2VlZGU3Li41NjAxNDEwNjQ3OWEzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTEwNiw3ICYjNDM7MTA2LDcgQEAgY2xlYW46CiAjIG1ha2UgLUMgdG9vbHMvcGVyZiAtZiB0ZXN0cy9tYWtlCiAjCiBidWlsZC10ZXN0OgotCUAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azIgb3V0CiYjNDM7CUAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azQgb3V0CiAKIGJ1aWxkLXRlc3QtdGFyYmFsbDoKIAlAJChNQUtFKSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSBvdXQKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWcKaW5kZXggNGQ1OTkzZGE5Zjk0NS4uNGVlNzM5M2EzOWY5MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWcKQEAgLTc3NCwyMSAmIzQzOzc3NCwyMiBAQCBpZm5kZWYgTk9fU0xBTkcKICAgZW5kaWYKIGVuZGlmCiAKLWlmZGVmIEdUSzIKLSAgRkxBR1NfR1RLMj0kKENGTEFHUykgJChMREZMQUdTKSAkKEVYVExJQlMpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrJiM0MzstMi4wIDImZ3Q7L2Rldi9udWxsKQotICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGsyKQotICBpZm5lcSAoJChmZWF0dXJlLWd0azIpLCAxKQotICAgICQod2FybmluZyBHVEsyIG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLMiBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGsyLWRldmVsIG9yIGxpYmd0azIuMC1kZXYpCi0gICAgTk9fR1RLMiA6PSAxCiYjNDM7aWZkZWYgR1RLNAomIzQzOyAgRkxBR1NfR1RLND0kKENGTEFHUykgJChMREZMQUdTKSAkKEVYVExJQlMpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrNCAyJmd0Oy9kZXYvbnVsbCkKJiM0MzsgICQoY2FsbCBmZWF0dXJlX2NoZWNrLGd0azQpCiYjNDM7ICBpZm5lcSAoJChmZWF0dXJlLWd0azQpLCAxKQomIzQzOyAgICAkKHdhcm5pbmcgR1RLNCBub3QgZm91bmQsIGRpc2FibGVzIEdUSzQgc3VwcG9ydC4gUGxlYXNlIGluc3RhbGwgZ3RrNC1kZXZlbCBvciBsaWJndGstNC1kZXYpCiYjNDM7ICAgIE5PX0dUSzQgOj0gMQogICBlbHNlCi0gICAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrMi1pbmZvYmFyKQotICAgIGlmZXEgKCQoZmVhdHVyZS1ndGsyLWluZm9iYXIpLCAxKQotICAgICAgR1RLX0NGTEFHUyA6PSAtREhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlQKLSAgICBlbmRpZgotICAgIENGTEFHUyAmIzQzOz0gLURIQVZFX0dUSzJfU1VQUE9SVAotICAgIEdUS19DRkxBR1MgJiM0Mzs9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBndGsmIzQzOy0yLjAgMiZndDsvZGV2L251bGwpCi0gICAgR1RLX0xJQlMgOj0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyBndGsmIzQzOy0yLjAgMiZndDsvZGV2L251bGwpCiYjNDM7ICAgIENGTEFHUyAmIzQzOz0gLURIQVZFX0dUSzRfU1VQUE9SVAomIzQzOyAgICBHVEtfQ0ZMQUdTICYjNDM7PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgZ3RrNCAyJmd0Oy9kZXYvbnVsbCkKJiM0MzsgICAgR1RLX0xJQlMgOj0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyBndGs0IDImZ3Q7L2Rldi9udWxsKQogICAgIEVYVExJQlMgJiM0Mzs9IC1sZGwKJiM0MzsgICAgIyBsaWJwZXJmLWd0ay5zbyBpcyBkbG9wZW4oKWVkIGF0IHJ1bnRpbWUgYW5kIGNhbGxzIGJhY2sgaW50bwomIzQzOyAgICAjIHN5bWJvbHMgZGVmaW5lZCBpbiB0aGUgcGVyZiBiaW5hcnkgaXRzZWxmIChjYWxsY2hhaW5fcGFyYW0sCiYjNDM7ICAgICMgc3ltYm9sX2NvbmYsIGV2c2VsX19uYW1lLCAuLi4pOiBwZXJmIG5lZWRzIHRvIGV4cG9ydCB0aG9zZQomIzQzOyAgICAjIGR5bmFtaWNhbGx5IGZvciB0aGUgcGx1Z2luIHRvIHJlc29sdmUgdGhlbS4KJiM0MzsgICAgTERGTEFHUyAmIzQzOz0gLXJkeW5hbWljCiAgIGVuZGlmCiBlbmRpZgogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYgYi90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKaW5kZXggMjljZmQ0NGM0MjdmMy4uMjQzOGI0MGVhYWVjMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgpAQCAtNDksNyAmIzQzOzQ5LDcgQEAgaW5jbHVkZSAuLi9zY3JpcHRzL3V0aWxpdGllcy5tYWsKICMKICMgRGVmaW5lIE5PX1NMQU5HIGlmIHlvdSBkbyBub3Qgd2FudCBUVUkgc3VwcG9ydC4KICMKLSMgRGVmaW5lIEdUSzIgaWYgeW91IHdhbnQgR1RLJiM0MzsgR1VJIHN1cHBvcnQuCiYjNDM7IyBEZWZpbmUgR1RLNCBpZiB5b3Ugd2FudCBHVEsmIzQzOyBHVUkgc3VwcG9ydC4KICMKICMgRGVmaW5lIE5PX0RFTUFOR0xFIGlmIHlvdSBkbyBub3Qgd2FudCBDJiM0MzsmIzQzOyBzeW1ib2wgZGVtYW5nbGluZy4KICMKQEAgLTQ3Myw3ICYjNDM7NDczLDcgQEAgaWZuZXEgKCQoT1VUUFVUKSwpCiAgIENGTEFHUyAmIzQzOz0gLUkkKE9VVFBVVCkKIGVuZGlmCiAKLWlmZGVmIEdUSzIKJiM0MztpZmRlZiBHVEs0CiAgIEFMTF9QUk9HUkFNUyAmIzQzOz0gJChPVVRQVVQpbGlicGVyZi1ndGsuc28KICAgR1RLX0lOIDo9ICQoT1VUUFVUKWd0ay1pbi5vCiBlbmRpZgpAQCAtODExLDcgJiM0Mzs4MTEsNyBAQCBjaGVjazogcHJlcGFyZQogCiAjIyMgSW5zdGFsbGF0aW9uIHJ1bGVzCiAKLWlmZGVmIEdUSzIKJiM0MztpZmRlZiBHVEs0CiBpbnN0YWxsLWd0azogJChPVVRQVVQpbGlicGVyZi1ndGsuc28KIAkkKGNhbGwgUVVJRVRfSU5TVEFMTCwgJiMzOTtHVEsgVUkmIzM5OykgXAogCQkkKElOU1RBTEwpIC1kIC1tIDc1NSAmIzM5OyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSkmIzM5OzsgXApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwppbmRleCA2OWNiNzJiMjA4MmE2Li4xNTE2M2UwODFhOGNlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwpAQCAtNTIsNyAmIzQzOzUyLDcgQEAgc3RydWN0IHBlcmZfYW5ub3RhdGUgewogCWJvb2wJICAgdXNlX3R1aTsKICNlbmRpZgogCWJvb2wJICAgdXNlX3N0ZGlvLCB1c2Vfc3RkaW8yOwotI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUCiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUCiAJYm9vbAkgICB1c2VfZ3RrOwogI2VuZGlmCiAJYm9vbAkgICBza2lwX21pc3Npbmc7CkBAIC03MTIsNyAmIzQzOzcxMiw3IEBAIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogCU9QVF9CT09MRUFOKCYjMzk7cSYjMzk7LCAmIzM0O3F1aWV0JiMzNDssICZhbXA7cXVpZXQsICYjMzQ7ZG8gbm93IHNob3cgYW55IHdhcm5pbmdzIG9yIG1lc3NhZ2VzJiMzNDspLAogCU9QVF9CT09MRUFOKCYjMzk7RCYjMzk7LCAmIzM0O2R1bXAtcmF3LXRyYWNlJiMzNDssICZhbXA7ZHVtcF90cmFjZSwKIAkJICAgICYjMzQ7ZHVtcCByYXcgdHJhY2UgaW4gQVNDSUkmIzM0OyksCi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlQKJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlQKIAlPUFRfQk9PTEVBTigwLCAmIzM0O2d0ayYjMzQ7LCAmYW1wO2Fubm90YXRlLnVzZV9ndGssICYjMzQ7VXNlIHRoZSBHVEsgaW50ZXJmYWNlJiMzNDspLAogI2VuZGlmCiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUCkBAIC04MjgsNyAmIzQzOzgyOCw3IEBAIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogCWlmIChhbm5vdGF0ZV9jaGVja19hcmdzKCkgJmx0OyAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUCiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUCiAJaWYgKHN5bWJvbF9jb25mLnNob3dfbnJfc2FtcGxlcyAmYW1wOyZhbXA7IGFubm90YXRlLnVzZV9ndGspIHsKIAkJcHJfZXJyKCYjMzQ7LS1zaG93LW5yLXNhbXBsZXMgaXMgbm90IGF2YWlsYWJsZSBpbiAtLWd0ayBtb2RlIGF0IHRoaXMgdGltZVxuJiMzNDspOwogCQlyZXR1cm4gcmV0OwpAQCAtODk4LDcgJiM0Mzs4OTgsNyBAQCBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIAllbHNlIGlmIChhbm5vdGF0ZS51c2VfdHVpKQogCQl1c2VfYnJvd3NlciA9IDE7CiAjZW5kaWYKLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVAomIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVAogCWVsc2UgaWYgKGFubm90YXRlLnVzZV9ndGspCiAJCXVzZV9icm93c2VyID0gMjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCmluZGV4IDYwZDFmMTY2NjI5ZTAuLmQxNDM4NGM1ODQ2NjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKQEAgLTgyLDcgJiM0Mzs4Miw3IEBAIHN0cnVjdCByZXBvcnQgewogI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVAogCWJvb2wJCQl1c2VfdHVpOwogI2VuZGlmCi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlQKJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlQKIAlib29sCQkJdXNlX2d0azsKICNlbmRpZgogCWJvb2wJCQl1c2Vfc3RkaW87CkBAIC0xMzU5LDggJiM0MzsxMzU5LDggQEAgaW50IGNtZF9yZXBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVAogCU9QVF9CT09MRUFOKDAsICYjMzQ7dHVpJiMzNDssICZhbXA7cmVwb3J0LnVzZV90dWksICYjMzQ7VXNlIHRoZSBUVUkgaW50ZXJmYWNlJiMzNDspLAogI2VuZGlmCi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlQKLQlPUFRfQk9PTEVBTigwLCAmIzM0O2d0ayYjMzQ7LCAmYW1wO3JlcG9ydC51c2VfZ3RrLCAmIzM0O1VzZSB0aGUgR1RLMiBpbnRlcmZhY2UmIzM0OyksCiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUCiYjNDM7CU9QVF9CT09MRUFOKDAsICYjMzQ7Z3RrJiMzNDssICZhbXA7cmVwb3J0LnVzZV9ndGssICYjMzQ7VXNlIHRoZSBHVEs0IGludGVyZmFjZSYjMzQ7KSwKICNlbmRpZgogCU9QVF9CT09MRUFOKDAsICYjMzQ7c3RkaW8mIzM0OywgJmFtcDtyZXBvcnQudXNlX3N0ZGlvLAogCQkgICAgJiMzNDtVc2UgdGhlIHN0ZGlvIGludGVyZmFjZSYjMzQ7KSwKQEAgLTE3MTAsNyAmIzQzOzE3MTAsNyBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiAJZWxzZSBpZiAocmVwb3J0LnVzZV90dWkpCiAJCXVzZV9icm93c2VyID0gMTsKICNlbmRpZgotI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUCiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUCiAJZWxzZSBpZiAocmVwb3J0LnVzZV9ndGspCiAJCXVzZV9icm93c2VyID0gMjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2gKaW5kZXggZDAwM2U3ZmFiMmJlOC4uYTYwMWE1MjYwYzE3ZSAxMDA3NTUKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoCkBAIC0xOTksOCAmIzQzOzE5OSw4IEBAIGZlZG9yYV9wa2dfZm9yKCkgewogCSMgb3B0LWluIGZlYXR1cmVzLCB3aGljaCBhIGRlZmF1bHQgYnVpbGQgZG9lcyBub3QgZW5hYmxlOiB0aGUgbGliYmZkCiAJIyBkaXNhc3NlbWJsZXIgZmFtaWx5IChsaWJiZmQsIGxpYmJmZC10aHJlYWRzYWZlLCBsaWJiZmQtbGliZXJ0eSwKIAkjIGRpc2Fzc2VtYmxlci0qLCBjcGx1cy1kZW1hbmdsZSksIG9ubHkgbGlua2VkIG9uIEJVSUxEX05PTkRJU1RSTwotCSMgYnVpbGRzIGFuZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNhcHN0b25lLCBHVEsyLCBMSUJQRVJMIGFuZAotCSMgTElCVU5XSU5EIHN1cHBvcnQgKGlmZGVmIEdUSzIgLyBpZmRlZiBMSUJQRVJMIC8gTElCVU5XSU5EPTEpLAomIzQzOwkjIGJ1aWxkcyBhbmQgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBjYXBzdG9uZSwgR1RLNCwgTElCUEVSTCBhbmQKJiM0MzsJIyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLNCAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksCiAJIyBhbmQgQ29yZVNpZ2h0IChpZmRlZiBDT1JFU0lHSFQpLCBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBtYXBwZWQuCiAJIyBsaWJhaW8gaXMgbm90IG1hcHBlZCBlaXRoZXI6IGl0cwogCSMgdGVzdCB1c2VzIHRoZSBQT1NJWCBBSU8gQVBJIChhaW8uaCwgYWlvXyosIC1scnQpLCBwcm92aWRlZCBieQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9tYWtlIGIvdG9vbHMvcGVyZi90ZXN0cy9tYWtlCmluZGV4IGQyYzJmNTI2ZTFkYjAuLjIwMmFiNTUwMTkxNjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3Rlc3RzL21ha2UKQEAgLTk1LDcgJiM0Mzs5NSw3IEBAIG1ha2Vfbm9fYmFiZWx0cmFjZTIgOj0gTk9fQkFCRUxUUkFDRTI9MQogbWFrZV93aXRoX2NvcmVzaWdodCA6PSBDT1JFU0lHSFQ9MQogbWFrZV9ub19zZHQJICAgIDo9IE5PX1NEVD0xCiBtYWtlX25vX2xpYnBmbTQgICAgIDo9IE5PX0xJQlBGTTQ9MQotbWFrZV93aXRoX2d0azIgICAgICA6PSBHVEsyPTEKJiM0MzttYWtlX3dpdGhfZ3RrNCAgICAgIDo9IEdUSzQ9MQogbWFrZV9yZWZjbnRfY2hlY2sgICA6PSBFWFRSQV9DRkxBR1M9JiMzNDstRFJFRkNOVF9DSEVDS0lORz0xJiMzNDsKIG1ha2VfdGFncyAgICAgICAgICAgOj0gdGFncwogbWFrZV9jc2NvcGUgICAgICAgICA6PSBjc2NvcGUKQEAgLTMxOCw3ICYjNDM7MzE4LDcgQEAgJChydW4pOgogCSQoY2FsbCB0ZXN0LCRAKSAmYW1wOyZhbXA7IFwKIAlybSAtcmYgJEAgJCRUTVBfREVTVCB8fCAoY2F0ICRAIDsgZmFsc2UpCiAKLW1ha2Vfd2l0aF9ndGsyOgomIzQzO21ha2Vfd2l0aF9ndGs0OgogCSQoY2FsbCBjbGVhbikKIAlAVE1QX0RFU1Q9JCQobWt0ZW1wIC1kKTsgXAogCWNtZD0mIzM0O2NkICQoUEVSRikgJmFtcDsmYW1wOyAkKE1BS0VfRikgJCgkQCkgJChQQVJBTExFTF9PUFQpICQoT19PUFQpIERFU1RESVI9JCRUTVBfREVTVCYjMzQ7OyBcCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuYwppbmRleCA4OTIwZTI5ODQyMGE4Li4wOTRkZmEwNDViNzc0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmIzM0O3VpL2hlbHBsaW5lLmgmIzM0OwogI2luY2x1ZGUgJmx0O2ludHR5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwogCiBlbnVtIHsKIAlBTk5fQ09MX19QRVJDRU5ULApAQCAtMTYxLDcgJiM0MzsxNjIsNyBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX19hbm5vdGF0ZV9zeW1ib2woR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBtYXBfc3ltYm9sICptcywKIAkJCWd0a19saXN0X3N0b3JlX3NldChzdG9yZSwgJmFtcDtpdGVyLCBBTk5fQ09MX19MSU5FLCBzLCAtMSk7CiAJfQogCi0JZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2aWV3KTsKJiM0MzsJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICZhbXA7bm90ZXMtJmd0O3NyYy0mZ3Q7c291cmNlLCBhbC5ub2RlKSB7CiAJCWxpc3RfZGVsX2luaXQoJmFtcDtwb3MtJmd0O2FsLm5vZGUpOwpAQCAtMjA1LDQwICYjNDM7MjA2LDM0IEBAIHN0YXRpYyBpbnQgc3ltYm9sX19ndGtfYW5ub3RhdGUoc3RydWN0IG1hcF9zeW1ib2wgKm1zLCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLAogCQlHdGtXaWRnZXQgKmluZm9iYXI7CiAJCUd0a1dpZGdldCAqc3RhdGJhcjsKIAotCQlzaWduYWwoU0lHU0VHViwgcGVyZl9ndGtfX3NpZ25hbCk7Ci0JCXNpZ25hbChTSUdGUEUsICBwZXJmX2d0a19fc2lnbmFsKTsKLQkJc2lnbmFsKFNJR0lOVCwgIHBlcmZfZ3RrX19zaWduYWwpOwotCQlzaWduYWwoU0lHUVVJVCwgcGVyZl9ndGtfX3NpZ25hbCk7Ci0JCXNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTsKJiM0MzsJCXNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKTsKJiM0MzsJCXNpZ25hbChTSUdGUEUsICBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKTsKJiM0MzsJCXBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscygpOwogCi0JCXdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwomIzQzOwkJd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoKTsKIAkJZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyh3aW5kb3cpLCAmIzM0O3BlcmYgYW5ub3RhdGUmIzM0Oyk7CiAKLQkJZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICYjMzQ7ZGVsZXRlX2V2ZW50JiMzNDssIGd0a19tYWluX3F1aXQsIE5VTEwpOwotCiAJCXBnY3R4ID0gcGVyZl9ndGtfX2FjdGl2YXRlX2NvbnRleHQod2luZG93KTsKIAkJaWYgKCFwZ2N0eCkKIAkJCXJldHVybiAtMTsKIAotCQl2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAwKTsKJiM0MzsJCXZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDApOwogCQlub3RlYm9vayA9IGd0a19ub3RlYm9va19uZXcoKTsKIAkJcGdjdHgtJmd0O25vdGVib29rID0gbm90ZWJvb2s7CiAKLQkJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIG5vdGVib29rLCBUUlVFLCBUUlVFLCAwKTsKJiM0MzsJCWd0a193aWRnZXRfc2V0X3ZleHBhbmQobm90ZWJvb2ssIFRSVUUpOwomIzQzOwkJZ3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spOwogCiAJCWluZm9iYXIgPSBwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIoKTsKLQkJaWYgKGluZm9iYXIpIHsKLQkJCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBpbmZvYmFyLAotCQkJCQkgICBGQUxTRSwgRkFMU0UsIDApOwotCQl9CiYjNDM7CQlndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBpbmZvYmFyKTsKIAogCQlzdGF0YmFyID0gcGVyZl9ndGtfX3NldHVwX3N0YXR1c2JhcigpOwotCQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhciwgRkFMU0UsIEZBTFNFLCAwKTsKJiM0MzsJCWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIHN0YXRiYXIpOwogCi0JCWd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7CiYjNDM7CQlndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKHdpbmRvdyksIHZib3gpOwogCX0KIAotCXNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOwomIzQzOwlzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldygpOwogCXRhYl9sYWJlbCA9IGd0a19sYWJlbF9uZXcoc3ltLSZndDtuYW1lKTsKIAogCWd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksCkBAIC0yNjcsMTIgJiM0MzsyNjIsMTEgQEAgdm9pZCBwZXJmX2d0a19fc2hvd19hbm5vdGF0aW9ucyh2b2lkKQogCQlyZXR1cm47CiAKIAl3aW5kb3cgPSBwZ2N0eC0mZ3Q7bWFpbl93aW5kb3c7Ci0JZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwogCiAJcGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3cod2luZG93KTsKLQlndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKHdpbmRvdyksIEdUS19XSU5fUE9TX0NFTlRFUik7CiYjNDM7CWd0a193aWRnZXRfc2V0X3Zpc2libGUod2luZG93LCBUUlVFKTsKIAotCWd0a19tYWluKCk7CiYjNDM7CXBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKHdpbmRvdyk7CiAKIAlwZXJmX2d0a19fZGVhY3RpdmF0ZV9jb250ZXh0KCZhbXA7cGdjdHgpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jIGIvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jCmluZGV4IGQyZGFkZjM4NzNmYmQuLjk4ZjFkNmJmY2IyNDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9icm93c2VyLmMKQEAgLTUsMzIgJiM0Mzs1LDkyIEBACiAjaW5jbHVkZSAmIzM0Oy4uL2hpc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2hlbHBsaW5lLmgmIzM0OwogCiYjNDM7I2luY2x1ZGUgJmx0O2dsaWItdW5peC5oJmd0OwogI2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwogCi12b2lkIHBlcmZfZ3RrX19zaWduYWwoaW50IHNpZykKJiM0MzsvKgomIzQzOyAqIFNJR0lOVC9TSUdRVUlUL1NJR1RFUk0gYXJlIGFzeW5jaHJvbm91czogZGVmZXJyaW5nIHRoZSBhY3R1YWwgZXhpdCB0byBhCiYjNDM7ICogR0xpYiBzb3VyY2UgZGlzcGF0Y2hlZCBmcm9tIHRoZSBtYWluIGxvb3AgbWVhbnMgaXQgYWx3YXlzIHJ1bnMgb24gdGhlCiYjNDM7ICogbWFpbiB0aHJlYWQsIHNlcmlhbGl6ZWQgd2l0aCBldmVyeXRoaW5nIGVsc2UgdGhlIG1haW4gbG9vcCBkb2VzCiYjNDM7ICogKGluY2x1ZGluZyBwZXJmX2d0a19fZXJyb3IoKSYjMzk7cyB1cGRhdGVzIHRvIHBlcmZfZ3RrX19lcnJvcl9sb29wcyksIGluc3RlYWQKJiM0MzsgKiBvZiByYWNpbmcgdGhlbSBmcm9tIGFyYml0cmFyeSBzaWduYWwtaGFuZGxlciBjb250ZXh0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBnYm9vbGVhbiBwZXJmX2d0a19fcXVpdF9zaWduYWwoZ3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZCkKIHsKIAlwZXJmX2d0a19fZXhpdChmYWxzZSk7CiYjNDM7CXJldHVybiBHX1NPVVJDRV9SRU1PVkU7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgcGVyZl9ndGtfX2luc3RhbGxfcXVpdF9zaWduYWxzKHZvaWQpCiYjNDM7ewomIzQzOwlnX3VuaXhfc2lnbmFsX2FkZChTSUdJTlQsICBwZXJmX2d0a19fcXVpdF9zaWduYWwsIE5VTEwpOwomIzQzOwlnX3VuaXhfc2lnbmFsX2FkZChTSUdRVUlULCBwZXJmX2d0a19fcXVpdF9zaWduYWwsIE5VTEwpOwomIzQzOwlnX3VuaXhfc2lnbmFsX2FkZChTSUdURVJNLCBwZXJmX2d0a19fcXVpdF9zaWduYWwsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFNJR1NFR1YvU0lHRlBFIGFyZSBzeW5jaHJvbm91cyBmYXVsdHM6IHRoZXJlJiMzOTtzIG5vICYjMzQ7bGF0ZXImIzM0OyB0byBkZWZlciB0bywKJiM0MzsgKiBhbmQgbm8gc2FmZSB3YXkgdG8gcnVuIEdUSy9HTGliIGNvZGUgKG9yIGFueXRoaW5nIGVsc2Ugbm9uLWFzeW5jLXNpZ25hbC0KJiM0MzsgKiBzYWZlKSBmcm9tIHRoZSBmYXVsdGluZyBjb250ZXh0LiBSZXBvcnQgYW5kIGxldCB0aGUgZGVmYXVsdCBkaXNwb3NpdGlvbgomIzQzOyAqIChjb3JlIGR1bXApIGhhcHBlbiBpbnN0ZWFkIG9mIHRyeWluZyB0byB0ZWFyIGRvd24gR1RLIHN0YXRlIGhlcmUuCiYjNDM7ICovCiYjNDM7dm9pZCBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKGludCBzaWcpCiYjNDM7ewogCXBzaWduYWwoc2lnLCAmIzM0O3BlcmYmIzM0Oyk7CiYjNDM7CXNpZ25hbChzaWcsIFNJR19ERkwpOwomIzQzOwlyYWlzZShzaWcpOwogfQogCiB2b2lkIHBlcmZfZ3RrX19yZXNpemVfd2luZG93KEd0a1dpZGdldCAqd2luZG93KQogewogCUdka1JlY3RhbmdsZSByZWN0OwotCUdka1NjcmVlbiAqc2NyZWVuOwotCWludCBtb25pdG9yOwomIzQzOwlHZGtNb25pdG9yICptb25pdG9yOwomIzQzOwlHZGtEaXNwbGF5ICpkaXNwbGF5OwomIzQzOwlHTGlzdE1vZGVsICptb25pdG9yczsKIAlpbnQgaGVpZ2h0OwogCWludCB3aWR0aDsKIAotCXNjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbih3aW5kb3cpOwomIzQzOwlkaXNwbGF5ID0gZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aW5kb3cpOwomIzQzOwltb25pdG9ycyA9IGdka19kaXNwbGF5X2dldF9tb25pdG9ycyhkaXNwbGF5KTsKJiM0MzsJbW9uaXRvciA9IGdfbGlzdF9tb2RlbF9nZXRfaXRlbShtb25pdG9ycywgMCk7CiYjNDM7CWlmICghbW9uaXRvcikgewomIzQzOwkJZ3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1cod2luZG93KSwgODAwLCA2MDApOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKLQltb25pdG9yID0gZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9hdF93aW5kb3coc2NyZWVuLCB3aW5kb3ctJmd0O3dpbmRvdyk7Ci0KLQlnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwgJmFtcDtyZWN0KTsKJiM0MzsJZ2RrX21vbml0b3JfZ2V0X2dlb21ldHJ5KG1vbml0b3IsICZhbXA7cmVjdCk7CiYjNDM7CWdfb2JqZWN0X3VucmVmKG1vbml0b3IpOwogCiAJd2lkdGgJPSByZWN0LndpZHRoICogMyAvIDQ7CiAJaGVpZ2h0CT0gcmVjdC5oZWlnaHQgKiAzIC8gNDsKIAotCWd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1cod2luZG93KSwgd2lkdGgsIGhlaWdodCk7CiYjNDM7CWd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHdpZHRoLCBoZWlnaHQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgR01haW5Mb29wICpwZXJmX2d0a19fbWFpbl9sb29wOwomIzQzOwomIzQzO3ZvaWQgcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAocGVyZl9ndGtfX21haW5fbG9vcCkKJiM0MzsJCWdfbWFpbl9sb29wX3F1aXQocGVyZl9ndGtfX21haW5fbG9vcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBnYm9vbGVhbiBwZXJmX2d0a19fY2xvc2VfcmVxdWVzdChHdGtXaWRnZXQgKndpZGdldCBfX21heWJlX3VudXNlZCwKJiM0MzsJCQkJCWdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpCiYjNDM7ewomIzQzOwlwZXJmX2d0a19fcXVpdF9tYWluX2xvb3AoKTsKJiM0MzsKJiM0MzsJcmV0dXJuIEZBTFNFOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKEd0a1dpZGdldCAqd2luZG93KQomIzQzO3sKJiM0MzsJZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICYjMzQ7Y2xvc2UtcmVxdWVzdCYjMzQ7LAomIzQzOwkJCSBHX0NBTExCQUNLKHBlcmZfZ3RrX19jbG9zZV9yZXF1ZXN0KSwgTlVMTCk7CiYjNDM7CiYjNDM7CXBlcmZfZ3RrX19tYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgRkFMU0UpOwomIzQzOwlnX21haW5fbG9vcF9ydW4ocGVyZl9ndGtfX21haW5fbG9vcCk7CiYjNDM7CWdfY2xlYXJfcG9pbnRlcigmYW1wO3BlcmZfZ3RrX19tYWluX2xvb3AsIGdfbWFpbl9sb29wX3VucmVmKTsKIH0KIAogY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KQpAQCAtNDIsMzMgJiM0MzsxMDIsMzUgQEAgY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KQogCXJldHVybiBOVUxMOwogfQogCi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVAomIzQzO3N0YXRpYyB2b2lkIHBlcmZfZ3RrX19oaWRlX3dpZGdldChHdGtXaWRnZXQgKndpZGdldCwgZ2ludCByZXNwb25zZV9pZCBfX21heWJlX3VudXNlZCwKJiM0MzsJCQkJICAgZ3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZCkKJiM0Mzt7CiYjNDM7CWd0a193aWRnZXRfc2V0X3Zpc2libGUod2lkZ2V0LCBGQUxTRSk7CiYjNDM7fQomIzQzOwogR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZCkKIHsKIAlHdGtXaWRnZXQgKmluZm9fYmFyOwogCUd0a1dpZGdldCAqbGFiZWw7Ci0JR3RrV2lkZ2V0ICpjb250ZW50X2FyZWE7CiAKIAlpbmZvX2JhciA9IGd0a19pbmZvX2Jhcl9uZXcoKTsKLQlndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbChpbmZvX2JhciwgVFJVRSk7CiYjNDM7CWd0a193aWRnZXRfc2V0X3Zpc2libGUoaW5mb19iYXIsIEZBTFNFKTsKIAogCWxhYmVsID0gZ3RrX2xhYmVsX25ldygmIzM0OyYjMzQ7KTsKLQlndGtfd2lkZ2V0X3Nob3cobGFiZWwpOwomIzQzOwlndGtfd2lkZ2V0X3NldF92aXNpYmxlKGxhYmVsLCBUUlVFKTsKIAotCWNvbnRlbnRfYXJlYSA9IGd0a19pbmZvX2Jhcl9nZXRfY29udGVudF9hcmVhKEdUS19JTkZPX0JBUihpbmZvX2JhcikpOwotCWd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGVudF9hcmVhKSwgbGFiZWwpOwomIzQzOwlndGtfaW5mb19iYXJfYWRkX2NoaWxkKEdUS19JTkZPX0JBUihpbmZvX2JhciksIGxhYmVsKTsKIAotCWd0a19pbmZvX2Jhcl9hZGRfYnV0dG9uKEdUS19JTkZPX0JBUihpbmZvX2JhciksIEdUS19TVE9DS19PSywKJiM0MzsJZ3RrX2luZm9fYmFyX2FkZF9idXR0b24oR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgJiMzNDtfT0smIzM0OywKIAkJCQlHVEtfUkVTUE9OU0VfT0spOwogCWdfc2lnbmFsX2Nvbm5lY3QoaW5mb19iYXIsICYjMzQ7cmVzcG9uc2UmIzM0OywKLQkJCSBHX0NBTExCQUNLKGd0a193aWRnZXRfaGlkZSksIE5VTEwpOwomIzQzOwkJCSBHX0NBTExCQUNLKHBlcmZfZ3RrX19oaWRlX3dpZGdldCksIE5VTEwpOwogCiAJcGdjdHgtJmd0O2luZm9fYmFyID0gaW5mb19iYXI7CiAJcGdjdHgtJmd0O21lc3NhZ2VfbGFiZWwgPSBsYWJlbDsKIAogCXJldHVybiBpbmZvX2JhcjsKIH0KLSNlbmRpZgogCiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIodm9pZCkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oIGIvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmgKaW5kZXggYTJiNDk3ZjAzZmQ2ZS4uNmIzN2ZkOTk0M2M5ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmgKQEAgLTEzLDEwICYjNDM7MTMsOCBAQCBzdHJ1Y3QgcGVyZl9ndGtfY29udGV4dCB7CiAJR3RrV2lkZ2V0ICptYWluX3dpbmRvdzsKIAlHdGtXaWRnZXQgKm5vdGVib29rOwogCi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVAogCUd0a1dpZGdldCAqaW5mb19iYXI7CiAJR3RrV2lkZ2V0ICptZXNzYWdlX2xhYmVsOwotI2VuZGlmCiAJR3RrV2lkZ2V0ICpzdGF0YmFyOwogCWd1aW50IHN0YXRiYXJfY3R4X2lkOwogfTsKQEAgLTM4LDE5ICYjNDM7MzYsMTUgQEAgdm9pZCBwZXJmX2d0a19faW5pdF9oZWxwbGluZSh2b2lkKTsKIHZvaWQgZ3RrX3VpX3Byb2dyZXNzX19pbml0KHZvaWQpOwogdm9pZCBwZXJmX2d0a19faW5pdF9ocHAodm9pZCk7CiAKLXZvaWQgcGVyZl9ndGtfX3NpZ25hbChpbnQgc2lnKTsKJiM0Mzt2b2lkIHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscyh2b2lkKTsKJiM0Mzt2b2lkIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwoaW50IHNpZyk7CiB2b2lkIHBlcmZfZ3RrX19yZXNpemVfd2luZG93KEd0a1dpZGdldCAqd2luZG93KTsKJiM0Mzt2b2lkIHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKEd0a1dpZGdldCAqd2luZG93KTsKJiM0Mzt2b2lkIHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCh2b2lkKTsKJiM0Mzt2b2lkIHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZyh2b2lkKTsKIGNvbnN0IGNoYXIgKnBlcmZfZ3RrX19nZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudCk7CiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIodm9pZCk7Ci0KLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUCiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKHZvaWQpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0jZW5kaWYKIAogc3RydWN0IGV2c2VsOwogc3RydWN0IGV2bGlzdDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jCmluZGV4IGJhZTIxZjMzNmFlNmQuLjM0MmQ0YzNmZWNiMDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYwpAQCAtOCw2ICYjNDM7OCw4IEBACiAjaW5jbHVkZSAmIzM0Oy4uL2hlbHBsaW5lLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9zdHJpbmcyLmgmIzM0OwogI2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRhcmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKIApAQCAtMzk1LDExICYjNDM7Mzk3LDkgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGlzdHMoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsCiAJCX0KIAl9CiAKLQlndGtfdHJlZV92aWV3X3NldF9ydWxlc19oaW50KEdUS19UUkVFX1ZJRVcodmlldyksIFRSVUUpOwotCiAJZ19zaWduYWxfY29ubmVjdCh2aWV3LCAmIzM0O3Jvdy1hY3RpdmF0ZWQmIzM0OywKIAkJCSBHX0NBTExCQUNLKG9uX3Jvd19hY3RpdmF0ZWQpLCBOVUxMKTsKLQlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpOwomIzQzOwlndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX2d0a19fYWRkX2hpZXJhcmNoeV9lbnRyaWVzKHN0cnVjdCBoaXN0cyAqaGlzdHMsCkBAIC00NDksNyAmIzQzOzQ0OSw3IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoc3RydWN0IGhpc3RzICpoaXN0cywKIAkJYmYgPSBocHAtJmd0O2J1ZjsKIAkJc2l6ZSA9IGhwcC0mZ3Q7c2l6ZTsKIAkJcGVyZl9ocHBfbGlzdF9fZm9yX2VhY2hfZm9ybWF0KGhlLSZndDtocHBfbGlzdCwgZm10KSB7Ci0JCQlpbnQgcmV0OwomIzQzOwkJCWludCByZXQsIGluYzsKIAogCQkJaWYgKGZtdC0mZ3Q7Y29sb3IpCiAJCQkJcmV0ID0gZm10LSZndDtjb2xvcihmbXQsIGhwcCwgaGUpOwpAQCAtNDU3LDcgJiM0Mzs0NTcsMTggQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLAogCQkJCXJldCA9IGZtdC0mZ3Q7ZW50cnkoZm10LCBocHAsIGhlKTsKIAogCQkJc25wcmludGYoaHBwLSZndDtidWYgJiM0MzsgcmV0LCBocHAtJmd0O3NpemUgLSByZXQsICYjMzQ7ICAmIzM0Oyk7Ci0JCQlhZHZhbmNlX2hwcChocHAsIHJldCAmIzQzOyAyKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIHJldCBjYW4gYmUgYXMgbGFyZ2UgYXMgaHBwLSZndDtzaXplIC0gMSwgc28gcmV0ICYjNDM7IDIKJiM0MzsJCQkgKiBjYW4gZXhjZWVkIGhwcC0mZ3Q7c2l6ZS4gYWR2YW5jZV9ocHAoKSBkb2VzbiYjMzk7dCBjbGFtcCwKJiM0MzsJCQkgKiBzbyBwYXNzaW5nIHRoYXQgdGhyb3VnaCB3b3VsZCB1bmRlcmZsb3cgdGhlCiYjNDM7CQkJICogc2l6ZV90IGhwcC0mZ3Q7c2l6ZSBhbmQgbGV0IGEgbGF0ZXIgZm10LSZndDtlbnRyeSgpIGluCiYjNDM7CQkJICogdGhpcyBsb29wIHdyaXRlIHBhc3QgdGhlIGVuZCBvZiB0aGUgY2FsbGVyJiMzOTtzCiYjNDM7CQkJICogc3RhY2sgYnVmZmVyLgomIzQzOwkJCSAqLwomIzQzOwkJCWluYyA9IHJldCAmIzQzOyAyOwomIzQzOwkJCWlmIChpbmMgJmd0OyAoaW50KWhwcC0mZ3Q7c2l6ZSkKJiM0MzsJCQkJaW5jID0gaHBwLSZndDtzaXplOwomIzQzOwkJCWFkdmFuY2VfaHBwKGhwcCwgaW5jKTsKIAkJfQogCiAJCWd0a190cmVlX3N0b3JlX3NldChzdG9yZSwgJmFtcDtpdGVyLCBjb2xfaWR4LCBzdHJpbShiZiksIC0xKTsKQEAgLTUwNSw2ICYjNDM7NTE2LDcgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGllcmFyY2h5KEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLAogCUd0a1dpZGdldCAqdmlldzsKIAlpbnQgY29sX2lkeDsKIAlpbnQgbnJfY29scyA9IDA7CiYjNDM7CWludCByZXQ7CiAJY2hhciBzWzUxMl07CiAJY2hhciBidWZbNTEyXTsKIAlib29sIGZpcnN0X25vZGUsIGZpcnN0X2NvbDsKQEAgLTU0MSw5ICYjNDM7NTUzLDEwIEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpZXJhcmNoeShHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cywKIAkvKiBjb25zdHJ1Y3QgbWVyZ2VkIGNvbHVtbiBoZWFkZXIgc2luY2Ugc29ydCBrZXlzIHNoYXJlIHNpbmdsZSBjb2x1bW4gKi8KIAlidWZbMF0gPSAmIzM5O1wwJiMzOTs7CiAJZmlyc3Rfbm9kZSA9IHRydWU7CiYjNDM7CXJldCA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShmbXRfbm9kZSwgJmFtcDtoaXN0cy0mZ3Q7aHBwX2Zvcm1hdHMsIGxpc3QpIHsKIAkJaWYgKCFmaXJzdF9ub2RlKQotCQkJc3RyY2F0KGJ1ZiwgJiMzNDsgLyAmIzM0Oyk7CiYjNDM7CQkJcmV0ICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IHJldCwgc2l6ZW9mKGJ1ZikgLSByZXQsICYjMzQ7IC8gJiMzNDspOwogCQlmaXJzdF9ub2RlID0gZmFsc2U7CiAKIAkJZmlyc3RfY29sID0gdHJ1ZTsKQEAgLTU1MiwxMSAmIzQzOzU2NSwxMSBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsCiAJCQkJY29udGludWU7CiAKIAkJCWlmICghZmlyc3RfY29sKQotCQkJCXN0cmNhdChidWYsICYjMzQ7JiM0MzsmIzM0Oyk7CiYjNDM7CQkJCXJldCAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyByZXQsIHNpemVvZihidWYpIC0gcmV0LCAmIzM0OyYjNDM7JiMzNDspOwogCQkJZmlyc3RfY29sID0gZmFsc2U7CiAKIAkJCWZtdC0mZ3Q7aGVhZGVyKGZtdCwgJmFtcDtocHAsIGhpc3RzLCAwLCBOVUxMKTsKLQkJCXN0cmNhdChidWYsIHN0cmltKGhwcC5idWYpKTsKJiM0MzsJCQlyZXQgJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgcmV0LCBzaXplb2YoYnVmKSAtIHJldCwgJiMzNDslcyYjMzQ7LCBzdHJpbShocHAuYnVmKSk7CiAJCX0KIAl9CiAKQEAgLTU4MywxMSAmIzQzOzU5Niw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpZXJhcmNoeShHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cywKIAlwZXJmX2d0a19fYWRkX2hpZXJhcmNoeV9lbnRyaWVzKGhpc3RzLCAmYW1wO2hpc3RzLSZndDtlbnRyaWVzLCBzdG9yZSwKIAkJCQkJTlVMTCwgJmFtcDtocHAsIG1pbl9wY250KTsKIAotCWd0a190cmVlX3ZpZXdfc2V0X3J1bGVzX2hpbnQoR1RLX1RSRUVfVklFVyh2aWV3KSwgVFJVRSk7Ci0KIAlnX3NpZ25hbF9jb25uZWN0KHZpZXcsICYjMzQ7cm93LWFjdGl2YXRlZCYjMzQ7LAogCQkJIEdfQ0FMTEJBQ0sob25fcm93X2FjdGl2YXRlZCksIE5VTEwpOwotCWd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmlldyk7CiYjNDM7CWd0a19zY3JvbGxlZF93aW5kb3dfc2V0X2NoaWxkKEdUS19TQ1JPTExFRF9XSU5ET1cod2luZG93KSwgdmlldyk7CiB9CiAKIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLApAQCAtNjAwLDM2ICYjNDM7NjExLDMyIEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLAogCUd0a1dpZGdldCAqc3RhdGJhcjsKIAlHdGtXaWRnZXQgKndpbmRvdzsKIAotCXNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fc2lnbmFsKTsKLQlzaWduYWwoU0lHRlBFLCAgcGVyZl9ndGtfX3NpZ25hbCk7Ci0Jc2lnbmFsKFNJR0lOVCwgIHBlcmZfZ3RrX19zaWduYWwpOwotCXNpZ25hbChTSUdRVUlULCBwZXJmX2d0a19fc2lnbmFsKTsKLQlzaWduYWwoU0lHVEVSTSwgcGVyZl9ndGtfX3NpZ25hbCk7CiYjNDM7CXNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKTsKJiM0MzsJc2lnbmFsKFNJR0ZQRSwgIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwpOwomIzQzOwlwZXJmX2d0a19faW5zdGFsbF9xdWl0X3NpZ25hbHMoKTsKIAotCXdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwomIzQzOwl3aW5kb3cgPSBndGtfd2luZG93X25ldygpOwogCiAJZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyh3aW5kb3cpLCAmIzM0O3BlcmYgcmVwb3J0JiMzNDspOwogCi0JZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICYjMzQ7ZGVsZXRlX2V2ZW50JiMzNDssIGd0a19tYWluX3F1aXQsIE5VTEwpOwotCiAJcGdjdHggPSBwZXJmX2d0a19fYWN0aXZhdGVfY29udGV4dCh3aW5kb3cpOwogCWlmICghcGdjdHgpCiAJCXJldHVybiAtMTsKIAotCXZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApOwomIzQzOwl2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTsKIAogCW5vdGVib29rID0gZ3RrX25vdGVib29rX25ldygpOwogCi0JZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIG5vdGVib29rLCBUUlVFLCBUUlVFLCAwKTsKJiM0MzsJZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChub3RlYm9vaywgVFJVRSk7CiYjNDM7CWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIG5vdGVib29rKTsKIAogCWluZm9fYmFyID0gcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKCk7Ci0JaWYgKGluZm9fYmFyKQotCQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaW5mb19iYXIsIEZBTFNFLCBGQUxTRSwgMCk7CiYjNDM7CWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIGluZm9fYmFyKTsKIAogCXN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7Ci0JZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHN0YXRiYXIsIEZBTFNFLCBGQUxTRSwgMCk7CiYjNDM7CWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIHN0YXRiYXIpOwogCi0JZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTsKJiM0MzsJZ3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyh3aW5kb3cpLCB2Ym94KTsKIAogCWV2bGlzdF9fZm9yX2VhY2hfZW50cnkoZXZsaXN0LCBwb3MpIHsKIAkJc3RydWN0IGhpc3RzICpoaXN0cyA9IGV2c2VsX19oaXN0cyhwb3MpOwpAQCAtNjQ5LDcgJiM0Mzs2NTYsNyBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCwKIAkJCX0KIAkJfQogCi0JCXNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOwomIzQzOwkJc2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTsKIAogCQlndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpLAogCQkJCQkJCUdUS19QT0xJQ1lfQVVUT01BVElDLApAQCAtNjY1LDE1ICYjNDM7NjcyLDEyIEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLAogCQlndGtfbm90ZWJvb2tfYXBwZW5kX3BhZ2UoR1RLX05PVEVCT09LKG5vdGVib29rKSwgc2Nyb2xsZWRfd2luZG93LCB0YWJfbGFiZWwpOwogCX0KIAotCWd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLQogCXBlcmZfZ3RrX19yZXNpemVfd2luZG93KHdpbmRvdyk7Ci0KLQlndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKHdpbmRvdyksIEdUS19XSU5fUE9TX0NFTlRFUik7CiYjNDM7CWd0a193aWRnZXRfc2V0X3Zpc2libGUod2luZG93LCBUUlVFKTsKIAogCXVpX2hlbHBsaW5lX19wdXNoKGhlbHApOwogCi0JZ3RrX21haW4oKTsKJiM0MzsJcGVyZl9ndGtfX3J1bl9tYWluX2xvb3Aod2luZG93KTsKIAogCXBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoJmFtcDtwZ2N0eCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmMgYi90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jCmluZGV4IGVlYTZmY2RlNTE4YTguLjc3MGY5MjUxYjU0YjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuYwpAQCAtMSw0OSAmIzQzOzEsNjUgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAjaW5jbHVkZSAmbHQ7aW50dHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKIAogI2luY2x1ZGUgJiMzNDtndGsuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL3Byb2dyZXNzLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwogCiBzdGF0aWMgR3RrV2lkZ2V0ICpkaWFsb2c7CiBzdGF0aWMgR3RrV2lkZ2V0ICpwcm9ncmVzczsKIAomIzQzO3N0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZGVzdHJveWVkKEd0a1dpZGdldCAqd2lkZ2V0IF9fbWF5YmVfdW51c2VkLAomIzQzOwkJCQkJZ3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZCkKJiM0Mzt7CiYjNDM7CWRpYWxvZyA9IE5VTEw7CiYjNDM7CXByb2dyZXNzID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX3VwZGF0ZShzdHJ1Y3QgdWlfcHJvZ3Jlc3MgKnApCiB7CiAJZG91YmxlIGZyYWN0aW9uID0gcC0mZ3Q7dG90YWwgPyAxLjAgKiBwLSZndDtjdXJyIC8gcC0mZ3Q7dG90YWwgOiAwLjA7CiAJY2hhciBidWZbMTAyNF07CiAKIAlpZiAoZGlhbG9nID09IE5VTEwpIHsKLQkJR3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX3Zib3hfbmV3KFRSVUUsIDUpOwomIzQzOwkJR3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCA1KTsKIAkJR3RrV2lkZ2V0ICpsYWJlbCA9IGd0a19sYWJlbF9uZXcocC0mZ3Q7dGl0bGUpOwogCi0JCWRpYWxvZyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwomIzQzOwkJZGlhbG9nID0gZ3RrX3dpbmRvd19uZXcoKTsKIAkJcHJvZ3Jlc3MgPSBndGtfcHJvZ3Jlc3NfYmFyX25ldygpOwogCi0JCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBsYWJlbCwgVFJVRSwgRkFMU0UsIDMpOwotCQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgcHJvZ3Jlc3MsIFRSVUUsIFRSVUUsIDMpOwomIzQzOwkJZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChsYWJlbCwgVFJVRSk7CiYjNDM7CQlndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBsYWJlbCk7CiYjNDM7CQlndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHByb2dyZXNzLCBUUlVFKTsKJiM0MzsJCWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIHByb2dyZXNzKTsKJiM0MzsKJiM0MzsJCWd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1coZGlhbG9nKSwgdmJveCk7CiAKLQkJZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihkaWFsb2cpLCB2Ym94KTsKJiM0MzsJCWdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCAmIzM0O2Rlc3Ryb3kmIzM0OywKJiM0MzsJCQkJIEdfQ0FMTEJBQ0soZ3RrX3VpX3Byb2dyZXNzX19kZXN0cm95ZWQpLCBOVUxMKTsKIAogCQlndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGRpYWxvZyksICYjMzQ7cGVyZiYjMzQ7KTsKLQkJZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTsKLQkJZ3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyhkaWFsb2cpLCBHVEtfV0lOX1BPU19DRU5URVIpOwomIzQzOwkJZ3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1coZGlhbG9nKSwgMzAwLCA4MCk7CiAKLQkJZ3RrX3dpZGdldF9zaG93X2FsbChkaWFsb2cpOwomIzQzOwkJZ3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpOwogCX0KIAogCWd0a19wcm9ncmVzc19iYXJfc2V0X2ZyYWN0aW9uKEdUS19QUk9HUkVTU19CQVIocHJvZ3Jlc3MpLCBmcmFjdGlvbik7CiAJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslJiMzNDtQUkl1NjQmIzM0OyAvICUmIzM0O1BSSXU2NCwgcC0mZ3Q7Y3VyciwgcC0mZ3Q7dG90YWwpOwogCWd0a19wcm9ncmVzc19iYXJfc2V0X3RleHQoR1RLX1BST0dSRVNTX0JBUihwcm9ncmVzcyksIGJ1Zik7CiAKLQkvKiB3ZSBkaWRuJiMzOTt0IGNhbGwgZ3RrX21haW4geWV0LCBzbyBkbyBpdCBtYW51YWxseSAqLwotCXdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKLQkJZ3RrX21haW5faXRlcmF0aW9uKCk7CiYjNDM7CS8qIHdlIGRpZG4mIzM5O3Qgc3RhcnQgYSBtYWluIGxvb3AgeWV0LCBzbyBwdW1wIGV2ZW50cyBtYW51YWxseSAqLwomIzQzOwl3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKJiM0MzsJCWdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7CiB9CiAKIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZmluaXNoKHZvaWQpCiB7CiYjNDM7CWlmIChkaWFsb2cgPT0gTlVMTCkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKiB0aGlzIHdpbGwgYWxzbyBkZXN0cm95IGFsbCBvZiBpdHMgY2hpbGRyZW4gKi8KLQlndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKJiM0MzsJZ3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7CiAKIAlkaWFsb2cgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmMKaW5kZXggZjVlZWU0ZDY2ODczOC4uOWI0NGYzNzE5NzQ3NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jCkBAIC0xMiw3ICYjNDM7MTIsNyBAQCBpbnQgcGVyZl9ndGtfX2luaXQodm9pZCkKIAlndGtfdWlfcHJvZ3Jlc3NfX2luaXQoKTsKIAlwZXJmX2d0a19faW5pdF9ocHAoKTsKIAotCXJldHVybiBndGtfaW5pdF9jaGVjayhOVUxMLCBOVUxMKSA/IDAgOiAtMTsKJiM0MzsJcmV0dXJuIGd0a19pbml0X2NoZWNrKCkgPyAwIDogLTE7CiB9CiAKIHZvaWQgcGVyZl9ndGtfX2V4aXQoYm9vbCB3YWl0X2Zvcl9vayBfX21heWJlX3VudXNlZCkKQEAgLTIwLDUgJiM0MzsyMCw2IEBAIHZvaWQgcGVyZl9ndGtfX2V4aXQoYm9vbCB3YWl0X2Zvcl9vayBfX21heWJlX3VudXNlZCkKIAlpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkpCiAJCXJldHVybjsKIAlwZXJmX2Vycm9yX191bnJlZ2lzdGVyKCZhbXA7cGVyZl9ndGtfZW9wcyk7Ci0JZ3RrX21haW5fcXVpdCgpOwomIzQzOwlwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2coKTsKJiM0MzsJcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmMgYi90b29scy9wZXJmL3VpL2d0ay91dGlsLmMKaW5kZXggYzQ3ZjVjMzg3ODM4Yy4uNTgyM2ZmMGQ3YzJhNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuYwpAQCAtMiw4ICYjNDM7MiwxMCBAQAogI2luY2x1ZGUgJiMzNDsuLi91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtndGsuaCYjMzQ7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYXJnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvemFsbG9jLmgmZ3Q7CiAKIHN0cnVjdCBwZXJmX2d0a19jb250ZXh0ICpwZ2N0eDsKQEAgLTI4LDg2ICYjNDM7MzAsMTAzIEBAIGludCBwZXJmX2d0a19fZGVhY3RpdmF0ZV9jb250ZXh0KHN0cnVjdCBwZXJmX2d0a19jb250ZXh0ICoqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7LyoKJiM0MzsgKiBwZXJmX2d0a19fZXJyb3IoKSBjYW4gYmUgY2FsbGVkIHJlLWVudHJhbnRseSwgc2luY2UgdGhlIGRpYWxvZyBpc24mIzM5O3QKJiM0MzsgKiBtb2RhbCBhbmQgaXRzIG5lc3RlZCBsb29wIHN0aWxsIHB1bXBzIGV2ZW50cyBmb3IgdGhlIG1haW4gd2luZG93LgomIzQzOyAqIFRyYWNrIGV2ZXJ5IGN1cnJlbnRseSBydW5uaW5nIGxvb3AgaW5zdGVhZCBvZiBhIHNpbmdsZSBwb2ludGVyLCBzbyBhCiYjNDM7ICogbmVzdGVkIGNhbGwgY2FuJiMzOTt0IGNsb2JiZXIgYW4gb3V0ZXIgY2FsbCYjMzk7cyBsb29wIGFuZCBsZWFrIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBHU0xpc3QgKnBlcmZfZ3RrX19lcnJvcl9sb29wczsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwZXJmX2d0a19fcXVpdF9sb29wKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSBfX21heWJlX3VudXNlZCkKJiM0Mzt7CiYjNDM7CWdfbWFpbl9sb29wX3F1aXQoZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgcGVyZl9ndGtfX3F1aXRfZXJyb3JfZGlhbG9nKHZvaWQpCiYjNDM7ewomIzQzOwlnX3NsaXN0X2ZvcmVhY2gocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBwZXJmX2d0a19fcXVpdF9sb29wLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGVyZl9ndGtfX2RpYWxvZ19yZXNwb25zZShHdGtEaWFsb2cgKmRpYWxvZywKJiM0MzsJCQkJICAgICAgZ2ludCByZXNwb25zZV9pZCBfX21heWJlX3VudXNlZCwKJiM0MzsJCQkJICAgICAgZ3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZCkKJiM0Mzt7CiYjNDM7CWd0a193aW5kb3dfZGVzdHJveShHVEtfV0lORE9XKGRpYWxvZykpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcGVyZl9ndGtfX2Vycm9yKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQogewogCWNoYXIgKm1zZzsKIAlHdGtXaWRnZXQgKmRpYWxvZzsKJiM0MzsJR01haW5Mb29wICpsb29wOwomIzQzOwl2YV9saXN0IGFyZ3NfY29weTsKIAomIzQzOwl2YV9jb3B5KGFyZ3NfY29weSwgYXJncyk7CiAJaWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpIHx8Ci0JICAgIHZhc3ByaW50ZigmYW1wO21zZywgZm9ybWF0LCBhcmdzKSAmbHQ7IDApIHsKJiM0MzsJICAgIHZhc3ByaW50ZigmYW1wO21zZywgZm9ybWF0LCBhcmdzX2NvcHkpICZsdDsgMCkgewomIzQzOwkJdmFfZW5kKGFyZ3NfY29weSk7CiAJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOlxuJiMzNDspOwogCQl2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7CiAJCWZwcmludGYoc3RkZXJyLCAmIzM0O1xuJiMzNDspOwogCQlyZXR1cm4gLTE7CiAJfQomIzQzOwl2YV9lbmQoYXJnc19jb3B5KTsKIAogCWRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXdfd2l0aF9tYXJrdXAoR1RLX1dJTkRPVyhwZ2N0eC0mZ3Q7bWFpbl93aW5kb3cpLAogCQkJCQlHVEtfRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsCiAJCQkJCUdUS19NRVNTQUdFX0VSUk9SLAogCQkJCQlHVEtfQlVUVE9OU19DTE9TRSwKIAkJCQkJJiMzNDsmbHQ7YiZndDtFcnJvciZsdDsvYiZndDtcblxuJXMmIzM0OywgbXNnKTsKLQlndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpOwogCi0JZ3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7CiYjNDM7CS8qCiYjNDM7CSAqICYjMzQ7cmVzcG9uc2UmIzM0OyBvbmx5IGZpcmVzIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZDsgREVTVFJPWV9XSVRIX1BBUkVOVAomIzQzOwkgKiBkZXN0cm95cyB0aGUgZGlhbG9nIGRpcmVjdGx5IHdpdGhvdXQgaXQuIFF1aXQgZnJvbSAmIzM0O2Rlc3Ryb3kmIzM0OwomIzQzOwkgKiBpbnN0ZWFkLCB3aGljaCBmaXJlcyBlaXRoZXIgd2F5LCBzbyB0aGUgbmVzdGVkIGxvb3AgYmVsb3cgY2FuJiMzOTt0CiYjNDM7CSAqIG91dGxpdmUgdGhlIGRpYWxvZyBhbmQgaGFuZy4KJiM0MzsJICovCiYjNDM7CWxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgRkFMU0UpOwomIzQzOwlwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3ByZXBlbmQocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBsb29wKTsKJiM0MzsJZ19zaWduYWxfY29ubmVjdChkaWFsb2csICYjMzQ7cmVzcG9uc2UmIzM0OywKJiM0MzsJCQkgR19DQUxMQkFDSyhwZXJmX2d0a19fZGlhbG9nX3Jlc3BvbnNlKSwgTlVMTCk7CiYjNDM7CWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChkaWFsb2csICYjMzQ7ZGVzdHJveSYjMzQ7LAomIzQzOwkJCQkgR19DQUxMQkFDSyhnX21haW5fbG9vcF9xdWl0KSwgbG9vcCk7CiYjNDM7CiYjNDM7CWd0a193aWRnZXRfc2V0X3Zpc2libGUoZGlhbG9nLCBUUlVFKTsKJiM0MzsJZ19tYWluX2xvb3BfcnVuKGxvb3ApOwomIzQzOwlwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3JlbW92ZShwZXJmX2d0a19fZXJyb3JfbG9vcHMsIGxvb3ApOwomIzQzOwlnX21haW5fbG9vcF91bnJlZihsb29wKTsKJiM0MzsKIAlmcmVlKG1zZyk7CiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUCiBzdGF0aWMgaW50IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQogewogCWNoYXIgKm1zZzsKJiM0MzsJdmFfbGlzdCBhcmdzX2NvcHk7CiAKJiM0MzsJdmFfY29weShhcmdzX2NvcHksIGFyZ3MpOwogCWlmICghcGVyZl9ndGtfX2lzX2FjdGl2ZV9jb250ZXh0KHBnY3R4KSB8fAotCSAgICB2YXNwcmludGYoJmFtcDttc2csIGZvcm1hdCwgYXJncykgJmx0OyAwKSB7CiYjNDM7CSAgICB2YXNwcmludGYoJmFtcDttc2csIGZvcm1hdCwgYXJnc19jb3B5KSAmbHQ7IDApIHsKJiM0MzsJCXZhX2VuZChhcmdzX2NvcHkpOwogCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXYXJuaW5nOlxuJiMzNDspOwogCQl2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7CiAJCWZwcmludGYoc3RkZXJyLCAmIzM0O1xuJiMzNDspOwogCQlyZXR1cm4gLTE7CiAJfQomIzQzOwl2YV9lbmQoYXJnc19jb3B5KTsKIAogCWd0a19sYWJlbF9zZXRfdGV4dChHVEtfTEFCRUwocGdjdHgtJmd0O21lc3NhZ2VfbGFiZWwpLCBtc2cpOwogCWd0a19pbmZvX2Jhcl9zZXRfbWVzc2FnZV90eXBlKEdUS19JTkZPX0JBUihwZ2N0eC0mZ3Q7aW5mb19iYXIpLAogCQkJCSAgICAgIEdUS19NRVNTQUdFX1dBUk5JTkcpOwotCWd0a193aWRnZXRfc2hvdyhwZ2N0eC0mZ3Q7aW5mb19iYXIpOwotCi0JZnJlZShtc2cpOwotCXJldHVybiAwOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQotewotCWNoYXIgKm1zZywgKnA7Ci0KLQlpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHwKLQkgICAgdmFzcHJpbnRmKCZhbXA7bXNnLCBmb3JtYXQsIGFyZ3MpICZsdDsgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXYXJuaW5nOlxuJiMzNDspOwotCQl2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7Ci0JCWZwcmludGYoc3RkZXJyLCAmIzM0O1xuJiMzNDspOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZ3RrX3N0YXR1c2Jhcl9wb3AoR1RLX1NUQVRVU0JBUihwZ2N0eC0mZ3Q7c3RhdGJhciksCi0JCQkgIHBnY3R4LSZndDtzdGF0YmFyX2N0eF9pZCk7Ci0KLQkvKiBPbmx5IGZpcnN0IGxpbmUgY2FuIGJlIGRpc3BsYXllZCAqLwotCXAgPSBzdHJjaHIobXNnLCAmIzM5O1xuJiMzOTspOwotCWlmIChwKQotCQkqcCA9ICYjMzk7XDAmIzM5OzsKLQotCWd0a19zdGF0dXNiYXJfcHVzaChHVEtfU1RBVFVTQkFSKHBnY3R4LSZndDtzdGF0YmFyKSwKLQkJCSAgIHBnY3R4LSZndDtzdGF0YmFyX2N0eF9pZCwgbXNnKTsKJiM0MzsJZ3RrX3dpZGdldF9zZXRfdmlzaWJsZShwZ2N0eC0mZ3Q7aW5mb19iYXIsIFRSVUUpOwogCiAJZnJlZShtc2cpOwogCXJldHVybiAwOwogfQotI2VuZGlmCiAKIHN0cnVjdCBwZXJmX2Vycm9yX29wcyBwZXJmX2d0a19lb3BzID0gewogCS5lcnJvcgkJPSBwZXJmX2d0a19fZXJyb3IsCi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVAogCS53YXJuaW5nCT0gcGVyZl9ndGtfX3dhcm5pbmdfaW5mb19iYXIsCi0jZWxzZQotCS53YXJuaW5nCT0gcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyLAotI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9zZXR1cC5jCmluZGV4IGZmODAwMDQ3ZTY5N2YuLmQ4ODczNDZjN2E2MzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvc2V0dXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL3NldHVwLmMKQEAgLTE0LDcgJiM0MzsxNCw3IEBAIGludCB1c2VfYnJvd3NlciA9IC0xOwogCiAjZGVmaW5lIFBFUkZfR1RLX0RTTyAmIzM0O2xpYnBlcmYtZ3RrLnNvJiMzNDsKIAotI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUCiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUCiAKIHN0YXRpYyBpbnQgc2V0dXBfZ3RrX2Jyb3dzZXIodm9pZCkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMKaW5kZXggZGY3MGU5NWE4NDcwNC4uMTIzYjZkNWZjZWE3OCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMKQEAgLTE0NSw2ICYjNDM7MTQ1LDE3IEBAIHN0YXRpYyBpbnQgYW5ub3RhdGVkX3NvdXJjZV9fYWxsb2NfaGlzdG9ncmFtcyhzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLAogCXJldHVybiBzcmMtJmd0O2hpc3RvZ3JhbXMgPyAwIDogLTE7CiB9CiAKJiM0MztzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKgomIzQzO2Fubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzeW1faGlzdF9lbnRyeSAqZW50cnk7CiYjNDM7CWxvbmcga2V5ID0gb2Zmc2V0ICZsdDsmbHQ7IDE2IHwgZXZzZWwtJmd0O2NvcmUuaWR4OwomIzQzOwomIzQzOwlpZiAoIWhhc2htYXBfX2ZpbmQoc3JjLSZndDtzYW1wbGVzLCBrZXksICZhbXA7ZW50cnkpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CXJldHVybiBlbnRyeTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHN5bWJvbF9fYW5ub3RhdGVfemVyb19oaXN0b2dyYW1zKHN0cnVjdCBzeW1ib2wgKnN5bSkKIHsKIAlzdHJ1Y3QgYW5ub3RhdGlvbiAqbm90ZXMgPSBzeW1ib2xfX2Fubm90YXRpb24oc3ltKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmgKaW5kZXggZmEwOGQwOWI4MGY3Ni4uNDAwMzhhMzc3OWQ0NiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmgKQEAgLTQwNiwxNiAmIzQzOzQwNiw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bV9oaXN0ICphbm5vdGF0aW9uX19oaXN0b2dyYW0oc3RydWN0IGFubm90YXRpb24gKm5vdGVzLAogCXJldHVybiBhbm5vdGF0ZWRfc291cmNlX19oaXN0b2dyYW0obm90ZXMtJmd0O3NyYywgZXZzZWwpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1faGlzdF9lbnRyeSAqCi1hbm5vdGF0ZWRfc291cmNlX19oaXN0X2VudHJ5KHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsIGNvbnN0IHN0cnVjdCBldnNlbCAqZXZzZWwsIHU2NCBvZmZzZXQpCi17Ci0Jc3RydWN0IHN5bV9oaXN0X2VudHJ5ICplbnRyeTsKLQlsb25nIGtleSA9IG9mZnNldCAmbHQ7Jmx0OyAxNiB8IGV2c2VsLSZndDtjb3JlLmlkeDsKLQotCWlmICghaGFzaG1hcF9fZmluZChzcmMtJmd0O3NhbXBsZXMsIGtleSwgJmFtcDtlbnRyeSkpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBlbnRyeTsKLX0KJiM0MztzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKgomIzQzO2Fubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldCk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFubm90YXRpb24gKnN5bWJvbF9fYW5ub3RhdGlvbihzdHJ1Y3Qgc3ltYm9sICpzeW0pCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDA1CgkJCQkJCQlvdXRwdXQ6IDEwMQoJCQkJCQkJdGhvdWdodHM6IDk4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBFdmFsdWF0aW9uIGZvciBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBzbyB0aGV5IHdhbnQgbWUgdG8gYXNzZXNzIGEgcGF0Y2ggc2VyaWVzIGZvciBzeXprYWxsZXIgZnV6emluZy4gTGV0JiMzOTtzIGdldCByaWdodCB0byBpdC4gRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2VkLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGB0b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlYCwgYHRvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGVgLCBzb21lIGAuY2AgZmlsZXMgaW4gYHRvb2xzL2J1aWxkL2ZlYXR1cmUvYCwgY2hhbmdlcyB0byBgdG9vbHMvcGVyZi9gIHJlbGF0ZWQgdG8gZG9jdW1lbnRhdGlvbiwgbWFrZWZpbGVzLCBhbmQgYSBnb29kIGNodW5rIG9mIEdUSy1yZWxhdGVkIFVJIGNvZGUuIExvb2tzIGxpa2UgYSBiaWcgY2h1bmsgb2YgdGhpcyBpcyByZWxhdGVkIHRvIGEgR1RLIHVwZ3JhZGUgZm9yIHRoZSBgcGVyZmAgdG9vbC4KCkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHN5emthbGxlciB3b3JrcywgSSBuZWVkIHRvIGNoZWNrIGFnYWluc3QgdGhlIGRlZmluZWQgY3JpdGVyaWEuIFNwZWNpZmljYWxseSwgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLCB0aGUgdGltZXMgd2hlbiBJIHdvdWxkICpub3QqIGNvbnNpZGVyIGl0IHdvcnRoIGZ1enppbmcuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IG1vZGlmaWNhdGlvbnMgdGhhdCBmYWxsIGludG8gdGhlc2UgY2F0ZWdvcmllczogZG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSBjb2RlIHRoYXQgZG9lc24mIzM5O3QgYWZmZWN0IHRoZSBrZXJuZWwgaW1hZ2UsIGRlY29yYXRpdmUgbG9nZ2luZywgb3IgYnVpbGQgc3lzdGVtIGNoYW5nZXMgdGhhdCBkb24mIzM5O3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KCkhtbS4gQWxsIHRoZSBtb2RpZmllZCBmaWxlcyBhcmUgdW5kZXIgYHRvb2xzL2AsIHNwZWNpZmljYWxseSBgdG9vbHMvcGVyZi9gIGFuZCBgdG9vbHMvYnVpbGQvYC4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIGEgcHVyZSB1c2VyLXNwYWNlIGNoYW5nZSwgdGhlIGBwZXJmYCB0b29sLCB3aGljaCBhcHBlYXJzIHRvIGJlIHVwZ3JhZGluZyBpdHMgR1RLIHZlcnNpb24uIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBzZWVtIHRvIHRvdWNoIGB2bWxpbnV4YCBvciBhbnkga2VybmVsIG1vZHVsZXMuIEV4Y2VsbGVudCEgVGhpcyAqc2hvdWxkKiBiZSBzdHJhaWdodGZvcndhcmQuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2suIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBnbyB0aHJvdWdoIHRoZSBsaXN0IG9mIG1vZGlmaWVkIGZpbGVzIGFnYWluLCB2aXN1YWxseSB0aGlzIHRpbWUsIHRvIGNvbmZpcm0gdGhhdCBubyBub24tYHRvb2xzL2AgZmlsZXMgd2VyZSB0b3VjaGVkOiBgdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZWAsIGB0b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlYCwgYW5kIHNvIG9uLCBhbGwgdGhlIHdheSBkb3duIHRvIGB0b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaGAuIFl1cCwgc3RpbGwgYWxsIGluc2lkZSBgdG9vbHMvYC4gTm8gcmVkIGZsYWdzLgoKVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgJiMzNDtXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBjcml0ZXJpYSwgdGhlIHZlcmRpY3QgaXMgY2xlYXI6IGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuIFRoZXJlIGFyZSBubyBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcyBhZmZlY3RlZCwgc28gdGhlIGNoYW5nZXMgaW4gdGhlc2UgdG9vbHMgYXJlIGlycmVsZXZhbnQuIGBFbmFibGVDb25maWdzYCB3b3VsZCBiZSBlbXB0eSwgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgYEZvY3VzU3ltYm9sc2AgdG8gZmxhZy4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50LiBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29saW5nIGFuZCBidWlsZCBzY3JpcHRzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHBvcnRpbmcgdGhlIHBlcmYgR1RLIFVJIGZyb20gR1RLMiB0byBHVEs0IGFuZCBtaW5vciBoZWxwZXIgcmVsb2NhdGlvbiBpbiB0b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYykuIEl0IGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwtc3BhY2UgY29kZSwgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29saW5nIGFuZCBidWlsZCBzY3JpcHRzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHBvcnRpbmcgdGhlIHBlcmYgR1RLIFVJIGZyb20gR1RLMiB0byBHVEs0IGFuZCBtaW5vciBoZWxwZXIgcmVsb2NhdGlvbiBpbiB0b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYykuIEl0IGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwtc3BhY2UgY29kZSwgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MjY6MjMuOTQ5MzM5NTY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc0MTk2MjYzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHRvb2xpbmcgYW5kIGJ1aWxkIHNjcmlwdHMgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgcG9ydGluZyB0aGUgcGVyZiBHVEsgVUkgZnJvbSBHVEsyIHRvIEdUSzQgYW5kIG1pbm9yIGhlbHBlciByZWxvY2F0aW9uIGluIHRvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jKS4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IGtlcm5lbC1zcGFjZSBjb2RlLCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjoyNjoyMy45NDkzNDU2OTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjMwMzE3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZmFmNDE1MzY0MDBmYzcyMDkzZGY3OGQ2ZTc5N2EzN2NiYWIwNmY3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMDI6MjY6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZSBiL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmVcXG5pbmRleCA5OWViMGVhMDk1Mzc1Li40ZWM5NWMzNWE1YzE5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmVcXG4rKysgYi90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlXFxuQEAgLTExMyw4ICsxMTMsNyBAQCBGRUFUVVJFX1RFU1RTX0VYVFJBIDo9ICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBjb21waWxlLXgzMiAgICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBjcGx1cy1kZW1hbmdsZSAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBjeGEtZGVtYW5nbGUgICAgICAgICAgICAgICAgICAgXFxcXFxcbi0gICAgICAgICBndGsyICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbi0gICAgICAgICBndGsyLWluZm9iYXIgICAgICAgICAgICAgICAgICAgXFxcXFxcbisgICAgICAgICBndGs0ICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBoZWxsbyAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBiYWJlbHRyYWNlMi1jdGYtd3JpdGVyICAgICAgICAgXFxcXFxcbiAgICAgICAgICBsaWJjYXBzdG9uZSAgICAgICAgICAgICAgICAgICAgXFxcXFxcbkBAIC0xNDMsNiArMTQyLDcgQEAgZW5kaWZcXG4gRkVBVFVSRV9ESVNQTEFZID89ICAgICAgICAgICAgICBcXFxcXFxuICAgICAgICAgIGxpYmR3ICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBnbGliYyAgICAgICAgICAgICAgICAgIFxcXFxcXG4rICAgICAgICAgZ3RrNCAgICAgICAgICAgICAgICAgICBcXFxcXFxuICAgICAgICAgIGxpYmVsZiAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBsaWJudW1hICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgbnVtYV9udW1fcG9zc2libGVfY3B1cyBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGUgYi90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXFxuaW5kZXggN2QxNjUwMTgxMTZhNS4uMDFjNDhlNmVmMDIxZCAxMDA2NDRcXG4tLS0gYS90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZVxcbkBAIC0xMSw4ICsxMSw3IEBAIEZJTEVTPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgdGVzdC1ldmVudGZkLmJpbiAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICB0ZXN0LWZvcnRpZnktc291cmNlLmJpbiAgICAgICAgICAgICAgICBcXFxcXFxuICAgICAgICAgIHRlc3QtZ2xpYmMuYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tICAgICAgICAgdGVzdC1ndGsyLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbi0gICAgICAgICB0ZXN0LWd0azItaW5mb2Jhci5iaW4gICAgICAgICAgICAgICAgICBcXFxcXFxuKyAgICAgICAgIHRlc3QtZ3RrNC5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgdGVzdC1oZWxsby5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICB0ZXN0LWxpYmJmZC5iaW4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuIFxcdCB0ZXN0LWxpYmJmZC10aHJlYWRzYWZlLmJpbiAgICAgIFxcdFxcXFxcXG5AQCAtMjQwLDExICsyMzksOCBAQCAkKE9VVFBVVCl0ZXN0LWxpYmNwdXBvd2VyLmJpbjpcXG4gJChPVVRQVVQpdGVzdC1saWJ0cmFjZWZzLmJpbjpcXG4gXFx0ICQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBsaWJ0cmFjZWZzIDJcXHUwMDNlL2Rldi9udWxsKSAtbHRyYWNlZnNcXG4gXFxuLSQoT1VUUFVUKXRlc3QtZ3RrMi5iaW46XFxuLVxcdCQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMlxcdTAwM2UvZGV2L251bGwpIC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnNcXG4tXFxuLSQoT1VUUFVUKXRlc3QtZ3RrMi1pbmZvYmFyLmJpbjpcXG4tXFx0JChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsrLTIuMCAyXFx1MDAzZS9kZXYvbnVsbClcXG4rJChPVVRQVVQpdGVzdC1ndGs0LmJpbjpcXG4rXFx0JChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGs0IDJcXHUwMDNlL2Rldi9udWxsKVxcbiBcXG4gZ3JlcC1saWJzICA9ICQoZmlsdGVyIC1sJSwkKDEpKVxcbiBzdHJpcC1saWJzID0gJChmaWx0ZXItb3V0IC1sJSwkKDEpKVxcbmRpZmYgLS1naXQgYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmMgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmNcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBiMWI3MTZkZDU3MzMwLi4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDEyICswLDAgQEBcXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFxcXCItV3N0cmljdC1wcm90b3R5cGVzXFxcIlxcbi0jaW5jbHVkZSBcXHUwMDNjZ3RrL2d0ay5oXFx1MDAzZVxcbi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGVycm9yIFxcXCItV3N0cmljdC1wcm90b3R5cGVzXFxcIlxcbi1cXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4te1xcbi1cXHRndGtfaW5pdChcXHUwMDI2YXJnYywgXFx1MDAyNmFyZ3YpO1xcbi1cXHRndGtfaW5mb19iYXJfbmV3KCk7XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbmRpZmYgLS1naXQgYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi5jIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azQuY1xcbnNpbWlsYXJpdHkgaW5kZXggNzYlXFxucmVuYW1lIGZyb20gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuY1xcbnJlbmFtZSB0byB0b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrNC5jXFxuaW5kZXggMmFhZjRiZmMyMDU1Ni4uYjk1MjBlNzQwOGI5OSAxMDA2NDRcXG4tLS0gYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi5jXFxuKysrIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azQuY1xcbkBAIC0zLDkgKzMsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjZ3RrL2d0ay5oXFx1MDAzZVxcbiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGVycm9yIFxcXCItV3N0cmljdC1wcm90b3R5cGVzXFxcIlxcbiBcXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4raW50IG1haW4odm9pZClcXG4ge1xcbi1cXHRndGtfaW5pdChcXHUwMDI2YXJnYywgXFx1MDAyNmFyZ3YpO1xcbitcXHRndGtfaW5pdCgpO1xcbiBcXG4gICAgICAgICByZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxcbmluZGV4IDIyZjg3ZWFhMzI3OTYuLjdhZjliM2Y4MWMwNjUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxcbisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHRcXG5AQCAtMzUxLDcgKzM1MSw3IEBAIE9QVElPTlNcXG4gXFx0cmVxdWlyZXMgYSB0dHksIGlmIG9uZSBpcyBub3QgcHJlc2VudCwgYXMgd2hlbiBwaXBpbmcgdG8gb3RoZXJcXG4gXFx0Y29tbWFuZHMsIHRoZSBzdGRpbyBpbnRlcmZhY2UgaXMgdXNlZC5cXG4gXFxuLS0tZ3RrOjogVXNlIHRoZSBHVEsyIGludGVyZmFjZS5cXG4rLS1ndGs6OiBVc2UgdGhlIEdUSzQgaW50ZXJmYWNlLlxcbiBcXG4gLWs6OlxcbiAtLXZtbGludXg9XFx1MDAzY2ZpbGVcXHUwMDNlOjpcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGVcXG5pbmRleCA1YjcxMzgzN2VlZGU3Li41NjAxNDEwNjQ3OWEzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGVcXG4rKysgYi90b29scy9wZXJmL01ha2VmaWxlXFxuQEAgLTEwNiw3ICsxMDYsNyBAQCBjbGVhbjpcXG4gIyBtYWtlIC1DIHRvb2xzL3BlcmYgLWYgdGVzdHMvbWFrZVxcbiAjXFxuIGJ1aWxkLXRlc3Q6XFxuLVxcdEAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azIgb3V0XFxuK1xcdEAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azQgb3V0XFxuIFxcbiBidWlsZC10ZXN0LXRhcmJhbGw6XFxuIFxcdEAkKE1BS0UpIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IG91dFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnXFxuaW5kZXggNGQ1OTkzZGE5Zjk0NS4uNGVlNzM5M2EzOWY5MSAxMDA2NDRcXG4tLS0gYS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZ1xcbisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnXFxuQEAgLTc3NCwyMSArNzc0LDIyIEBAIGlmbmRlZiBOT19TTEFOR1xcbiAgIGVuZGlmXFxuIGVuZGlmXFxuIFxcbi1pZmRlZiBHVEsyXFxuLSAgRkxBR1NfR1RLMj0kKENGTEFHUykgJChMREZMQUdTKSAkKEVYVExJQlMpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMlxcdTAwM2UvZGV2L251bGwpXFxuLSAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrMilcXG4tICBpZm5lcSAoJChmZWF0dXJlLWd0azIpLCAxKVxcbi0gICAgJCh3YXJuaW5nIEdUSzIgbm90IGZvdW5kLCBkaXNhYmxlcyBHVEsyIHN1cHBvcnQuIFBsZWFzZSBpbnN0YWxsIGd0azItZGV2ZWwgb3IgbGliZ3RrMi4wLWRldilcXG4tICAgIE5PX0dUSzIgOj0gMVxcbitpZmRlZiBHVEs0XFxuKyAgRkxBR1NfR1RLND0kKENGTEFHUykgJChMREZMQUdTKSAkKEVYVExJQlMpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrNCAyXFx1MDAzZS9kZXYvbnVsbClcXG4rICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGs0KVxcbisgIGlmbmVxICgkKGZlYXR1cmUtZ3RrNCksIDEpXFxuKyAgICAkKHdhcm5pbmcgR1RLNCBub3QgZm91bmQsIGRpc2FibGVzIEdUSzQgc3VwcG9ydC4gUGxlYXNlIGluc3RhbGwgZ3RrNC1kZXZlbCBvciBsaWJndGstNC1kZXYpXFxuKyAgICBOT19HVEs0IDo9IDFcXG4gICBlbHNlXFxuLSAgICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGsyLWluZm9iYXIpXFxuLSAgICBpZmVxICgkKGZlYXR1cmUtZ3RrMi1pbmZvYmFyKSwgMSlcXG4tICAgICAgR1RLX0NGTEFHUyA6PSAtREhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcXG4tICAgIGVuZGlmXFxuLSAgICBDRkxBR1MgKz0gLURIQVZFX0dUSzJfU1VQUE9SVFxcbi0gICAgR1RLX0NGTEFHUyArPSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgZ3RrKy0yLjAgMlxcdTAwM2UvZGV2L251bGwpXFxuLSAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0aystMi4wIDJcXHUwMDNlL2Rldi9udWxsKVxcbisgICAgQ0ZMQUdTICs9IC1ESEFWRV9HVEs0X1NVUFBPUlRcXG4rICAgIEdUS19DRkxBR1MgKz0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGd0azQgMlxcdTAwM2UvZGV2L251bGwpXFxuKyAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0azQgMlxcdTAwM2UvZGV2L251bGwpXFxuICAgICBFWFRMSUJTICs9IC1sZGxcXG4rICAgICMgbGlicGVyZi1ndGsuc28gaXMgZGxvcGVuKCllZCBhdCBydW50aW1lIGFuZCBjYWxscyBiYWNrIGludG9cXG4rICAgICMgc3ltYm9scyBkZWZpbmVkIGluIHRoZSBwZXJmIGJpbmFyeSBpdHNlbGYgKGNhbGxjaGFpbl9wYXJhbSxcXG4rICAgICMgc3ltYm9sX2NvbmYsIGV2c2VsX19uYW1lLCAuLi4pOiBwZXJmIG5lZWRzIHRvIGV4cG9ydCB0aG9zZVxcbisgICAgIyBkeW5hbWljYWxseSBmb3IgdGhlIHBsdWdpbiB0byByZXNvbHZlIHRoZW0uXFxuKyAgICBMREZMQUdTICs9IC1yZHluYW1pY1xcbiAgIGVuZGlmXFxuIGVuZGlmXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYgYi90b29scy9wZXJmL01ha2VmaWxlLnBlcmZcXG5pbmRleCAyOWNmZDQ0YzQyN2YzLi4yNDM4YjQwZWFhZWMxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZlxcbisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZlxcbkBAIC00OSw3ICs0OSw3IEBAIGluY2x1ZGUgLi4vc2NyaXB0cy91dGlsaXRpZXMubWFrXFxuICNcXG4gIyBEZWZpbmUgTk9fU0xBTkcgaWYgeW91IGRvIG5vdCB3YW50IFRVSSBzdXBwb3J0LlxcbiAjXFxuLSMgRGVmaW5lIEdUSzIgaWYgeW91IHdhbnQgR1RLKyBHVUkgc3VwcG9ydC5cXG4rIyBEZWZpbmUgR1RLNCBpZiB5b3Ugd2FudCBHVEsrIEdVSSBzdXBwb3J0LlxcbiAjXFxuICMgRGVmaW5lIE5PX0RFTUFOR0xFIGlmIHlvdSBkbyBub3Qgd2FudCBDKysgc3ltYm9sIGRlbWFuZ2xpbmcuXFxuICNcXG5AQCAtNDczLDcgKzQ3Myw3IEBAIGlmbmVxICgkKE9VVFBVVCksKVxcbiAgIENGTEFHUyArPSAtSSQoT1VUUFVUKVxcbiBlbmRpZlxcbiBcXG4taWZkZWYgR1RLMlxcbitpZmRlZiBHVEs0XFxuICAgQUxMX1BST0dSQU1TICs9ICQoT1VUUFVUKWxpYnBlcmYtZ3RrLnNvXFxuICAgR1RLX0lOIDo9ICQoT1VUUFVUKWd0ay1pbi5vXFxuIGVuZGlmXFxuQEAgLTgxMSw3ICs4MTEsNyBAQCBjaGVjazogcHJlcGFyZVxcbiBcXG4gIyMjIEluc3RhbGxhdGlvbiBydWxlc1xcbiBcXG4taWZkZWYgR1RLMlxcbitpZmRlZiBHVEs0XFxuIGluc3RhbGwtZ3RrOiAkKE9VVFBVVClsaWJwZXJmLWd0ay5zb1xcbiBcXHQkKGNhbGwgUVVJRVRfSU5TVEFMTCwgJ0dUSyBVSScpIFxcXFxcXG4gXFx0XFx0JChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknOyBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmNcXG5pbmRleCA2OWNiNzJiMjA4MmE2Li4xNTE2M2UwODFhOGNlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXFxuKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmNcXG5AQCAtNTIsNyArNTIsNyBAQCBzdHJ1Y3QgcGVyZl9hbm5vdGF0ZSB7XFxuIFxcdGJvb2xcXHQgICB1c2VfdHVpO1xcbiAjZW5kaWZcXG4gXFx0Ym9vbFxcdCAgIHVzZV9zdGRpbywgdXNlX3N0ZGlvMjtcXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxcbiBcXHRib29sXFx0ICAgdXNlX2d0aztcXG4gI2VuZGlmXFxuIFxcdGJvb2xcXHQgICBza2lwX21pc3Npbmc7XFxuQEAgLTcxMiw3ICs3MTIsNyBAQCBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilcXG4gXFx0T1BUX0JPT0xFQU4oJ3EnLCBcXFwicXVpZXRcXFwiLCBcXHUwMDI2cXVpZXQsIFxcXCJkbyBub3cgc2hvdyBhbnkgd2FybmluZ3Mgb3IgbWVzc2FnZXNcXFwiKSxcXG4gXFx0T1BUX0JPT0xFQU4oJ0QnLCBcXFwiZHVtcC1yYXctdHJhY2VcXFwiLCBcXHUwMDI2ZHVtcF90cmFjZSxcXG4gXFx0XFx0ICAgIFxcXCJkdW1wIHJhdyB0cmFjZSBpbiBBU0NJSVxcXCIpLFxcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcXG4rI2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXFxuIFxcdE9QVF9CT09MRUFOKDAsIFxcXCJndGtcXFwiLCBcXHUwMDI2YW5ub3RhdGUudXNlX2d0aywgXFxcIlVzZSB0aGUgR1RLIGludGVyZmFjZVxcXCIpLFxcbiAjZW5kaWZcXG4gI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVFxcbkBAIC04MjgsNyArODI4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXFxuIFxcdGlmIChhbm5vdGF0ZV9jaGVja19hcmdzKCkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcXG4gXFx0aWYgKHN5bWJvbF9jb25mLnNob3dfbnJfc2FtcGxlcyBcXHUwMDI2XFx1MDAyNiBhbm5vdGF0ZS51c2VfZ3RrKSB7XFxuIFxcdFxcdHByX2VycihcXFwiLS1zaG93LW5yLXNhbXBsZXMgaXMgbm90IGF2YWlsYWJsZSBpbiAtLWd0ayBtb2RlIGF0IHRoaXMgdGltZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTg5OCw3ICs4OTgsNyBAQCBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilcXG4gXFx0ZWxzZSBpZiAoYW5ub3RhdGUudXNlX3R1aSlcXG4gXFx0XFx0dXNlX2Jyb3dzZXIgPSAxO1xcbiAjZW5kaWZcXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxcbiBcXHRlbHNlIGlmIChhbm5vdGF0ZS51c2VfZ3RrKVxcbiBcXHRcXHR1c2VfYnJvd3NlciA9IDI7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmNcXG5pbmRleCA2MGQxZjE2NjYyOWUwLi5kMTQzODRjNTg0NjYxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuY1xcbisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuY1xcbkBAIC04Miw3ICs4Miw3IEBAIHN0cnVjdCByZXBvcnQge1xcbiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUXFxuIFxcdGJvb2xcXHRcXHRcXHR1c2VfdHVpO1xcbiAjZW5kaWZcXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxcbiBcXHRib29sXFx0XFx0XFx0dXNlX2d0aztcXG4gI2VuZGlmXFxuIFxcdGJvb2xcXHRcXHRcXHR1c2Vfc3RkaW87XFxuQEAgLTEzNTksOCArMTM1OSw4IEBAIGludCBjbWRfcmVwb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilcXG4gI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVFxcbiBcXHRPUFRfQk9PTEVBTigwLCBcXFwidHVpXFxcIiwgXFx1MDAyNnJlcG9ydC51c2VfdHVpLCBcXFwiVXNlIHRoZSBUVUkgaW50ZXJmYWNlXFxcIiksXFxuICNlbmRpZlxcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcXG4tXFx0T1BUX0JPT0xFQU4oMCwgXFxcImd0a1xcXCIsIFxcdTAwMjZyZXBvcnQudXNlX2d0aywgXFxcIlVzZSB0aGUgR1RLMiBpbnRlcmZhY2VcXFwiKSxcXG4rI2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXFxuK1xcdE9QVF9CT09MRUFOKDAsIFxcXCJndGtcXFwiLCBcXHUwMDI2cmVwb3J0LnVzZV9ndGssIFxcXCJVc2UgdGhlIEdUSzQgaW50ZXJmYWNlXFxcIiksXFxuICNlbmRpZlxcbiBcXHRPUFRfQk9PTEVBTigwLCBcXFwic3RkaW9cXFwiLCBcXHUwMDI2cmVwb3J0LnVzZV9zdGRpbyxcXG4gXFx0XFx0ICAgIFxcXCJVc2UgdGhlIHN0ZGlvIGludGVyZmFjZVxcXCIpLFxcbkBAIC0xNzEwLDcgKzE3MTAsNyBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXFxuIFxcdGVsc2UgaWYgKHJlcG9ydC51c2VfdHVpKVxcbiBcXHRcXHR1c2VfYnJvd3NlciA9IDE7XFxuICNlbmRpZlxcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcXG4rI2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXFxuIFxcdGVsc2UgaWYgKHJlcG9ydC51c2VfZ3RrKVxcbiBcXHRcXHR1c2VfYnJvd3NlciA9IDI7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoIGIvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaFxcbmluZGV4IGQwMDNlN2ZhYjJiZTguLmE2MDFhNTI2MGMxN2UgMTAwNzU1XFxuLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaFxcbisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2hcXG5AQCAtMTk5LDggKzE5OSw4IEBAIGZlZG9yYV9wa2dfZm9yKCkge1xcbiBcXHQjIG9wdC1pbiBmZWF0dXJlcywgd2hpY2ggYSBkZWZhdWx0IGJ1aWxkIGRvZXMgbm90IGVuYWJsZTogdGhlIGxpYmJmZFxcbiBcXHQjIGRpc2Fzc2VtYmxlciBmYW1pbHkgKGxpYmJmZCwgbGliYmZkLXRocmVhZHNhZmUsIGxpYmJmZC1saWJlcnR5LFxcbiBcXHQjIGRpc2Fzc2VtYmxlci0qLCBjcGx1cy1kZW1hbmdsZSksIG9ubHkgbGlua2VkIG9uIEJVSUxEX05PTkRJU1RST1xcbi1cXHQjIGJ1aWxkcyBhbmQgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBjYXBzdG9uZSwgR1RLMiwgTElCUEVSTCBhbmRcXG4tXFx0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLMiAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXFxuK1xcdCMgYnVpbGRzIGFuZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNhcHN0b25lLCBHVEs0LCBMSUJQRVJMIGFuZFxcbitcXHQjIExJQlVOV0lORCBzdXBwb3J0IChpZmRlZiBHVEs0IC8gaWZkZWYgTElCUEVSTCAvIExJQlVOV0lORD0xKSxcXG4gXFx0IyBhbmQgQ29yZVNpZ2h0IChpZmRlZiBDT1JFU0lHSFQpLCBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBtYXBwZWQuXFxuIFxcdCMgbGliYWlvIGlzIG5vdCBtYXBwZWQgZWl0aGVyOiBpdHNcXG4gXFx0IyB0ZXN0IHVzZXMgdGhlIFBPU0lYIEFJTyBBUEkgKGFpby5oLCBhaW9fKiwgLWxydCksIHByb3ZpZGVkIGJ5XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZSBiL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxcbmluZGV4IGQyYzJmNTI2ZTFkYjAuLjIwMmFiNTUwMTkxNjEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9tYWtlXFxuKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9tYWtlXFxuQEAgLTk1LDcgKzk1LDcgQEAgbWFrZV9ub19iYWJlbHRyYWNlMiA6PSBOT19CQUJFTFRSQUNFMj0xXFxuIG1ha2Vfd2l0aF9jb3Jlc2lnaHQgOj0gQ09SRVNJR0hUPTFcXG4gbWFrZV9ub19zZHRcXHQgICAgOj0gTk9fU0RUPTFcXG4gbWFrZV9ub19saWJwZm00ICAgICA6PSBOT19MSUJQRk00PTFcXG4tbWFrZV93aXRoX2d0azIgICAgICA6PSBHVEsyPTFcXG4rbWFrZV93aXRoX2d0azQgICAgICA6PSBHVEs0PTFcXG4gbWFrZV9yZWZjbnRfY2hlY2sgICA6PSBFWFRSQV9DRkxBR1M9XFxcIi1EUkVGQ05UX0NIRUNLSU5HPTFcXFwiXFxuIG1ha2VfdGFncyAgICAgICAgICAgOj0gdGFnc1xcbiBtYWtlX2NzY29wZSAgICAgICAgIDo9IGNzY29wZVxcbkBAIC0zMTgsNyArMzE4LDcgQEAgJChydW4pOlxcbiBcXHQkKGNhbGwgdGVzdCwkQCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiBcXHRybSAtcmYgJEAgJCRUTVBfREVTVCB8fCAoY2F0ICRAIDsgZmFsc2UpXFxuIFxcbi1tYWtlX3dpdGhfZ3RrMjpcXG4rbWFrZV93aXRoX2d0azQ6XFxuIFxcdCQoY2FsbCBjbGVhbilcXG4gXFx0QFRNUF9ERVNUPSQkKG1rdGVtcCAtZCk7IFxcXFxcXG4gXFx0Y21kPVxcXCJjZCAkKFBFUkYpIFxcdTAwMjZcXHUwMDI2ICQoTUFLRV9GKSAkKCRAKSAkKFBBUkFMTEVMX09QVCkgJChPX09QVCkgREVTVERJUj0kJFRNUF9ERVNUXFxcIjsgXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuY1xcbmluZGV4IDg5MjBlMjk4NDIwYTguLjA5NGRmYTA0NWI3NzQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmNcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXFwidWkvaGVscGxpbmUuaFxcXCJcXG4gI2luY2x1ZGUgXFx1MDAzY2ludHR5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiBcXG4gZW51bSB7XFxuIFxcdEFOTl9DT0xfX1BFUkNFTlQsXFxuQEAgLTE2MSw3ICsxNjIsNyBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX19hbm5vdGF0ZV9zeW1ib2woR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBtYXBfc3ltYm9sICptcyxcXG4gXFx0XFx0XFx0Z3RrX2xpc3Rfc3RvcmVfc2V0KHN0b3JlLCBcXHUwMDI2aXRlciwgQU5OX0NPTF9fTElORSwgcywgLTEpO1xcbiBcXHR9XFxuIFxcbi1cXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xcbitcXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgXFx1MDAyNm5vdGVzLVxcdTAwM2VzcmMtXFx1MDAzZXNvdXJjZSwgYWwubm9kZSkge1xcbiBcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZwb3MtXFx1MDAzZWFsLm5vZGUpO1xcbkBAIC0yMDUsNDAgKzIwNiwzNCBAQCBzdGF0aWMgaW50IHN5bWJvbF9fZ3RrX2Fubm90YXRlKHN0cnVjdCBtYXBfc3ltYm9sICptcywgc3RydWN0IGV2c2VsICpldnNlbCxcXG4gXFx0XFx0R3RrV2lkZ2V0ICppbmZvYmFyO1xcbiBcXHRcXHRHdGtXaWRnZXQgKnN0YXRiYXI7XFxuIFxcbi1cXHRcXHRzaWduYWwoU0lHU0VHViwgcGVyZl9ndGtfX3NpZ25hbCk7XFxuLVxcdFxcdHNpZ25hbChTSUdGUEUsICBwZXJmX2d0a19fc2lnbmFsKTtcXG4tXFx0XFx0c2lnbmFsKFNJR0lOVCwgIHBlcmZfZ3RrX19zaWduYWwpO1xcbi1cXHRcXHRzaWduYWwoU0lHUVVJVCwgcGVyZl9ndGtfX3NpZ25hbCk7XFxuLVxcdFxcdHNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTtcXG4rXFx0XFx0c2lnbmFsKFNJR1NFR1YsIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwpO1xcbitcXHRcXHRzaWduYWwoU0lHRlBFLCAgcGVyZl9ndGtfX2ZhdGFsX3NpZ25hbCk7XFxuK1xcdFxcdHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscygpO1xcbiBcXG4tXFx0XFx0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7XFxuK1xcdFxcdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KCk7XFxuIFxcdFxcdGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1cod2luZG93KSwgXFxcInBlcmYgYW5ub3RhdGVcXFwiKTtcXG4gXFxuLVxcdFxcdGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCBcXFwiZGVsZXRlX2V2ZW50XFxcIiwgZ3RrX21haW5fcXVpdCwgTlVMTCk7XFxuLVxcbiBcXHRcXHRwZ2N0eCA9IHBlcmZfZ3RrX19hY3RpdmF0ZV9jb250ZXh0KHdpbmRvdyk7XFxuIFxcdFxcdGlmICghcGdjdHgpXFxuIFxcdFxcdFxcdHJldHVybiAtMTtcXG4gXFxuLVxcdFxcdHZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApO1xcbitcXHRcXHR2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTtcXG4gXFx0XFx0bm90ZWJvb2sgPSBndGtfbm90ZWJvb2tfbmV3KCk7XFxuIFxcdFxcdHBnY3R4LVxcdTAwM2Vub3RlYm9vayA9IG5vdGVib29rO1xcbiBcXG4tXFx0XFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIG5vdGVib29rLCBUUlVFLCBUUlVFLCAwKTtcXG4rXFx0XFx0Z3RrX3dpZGdldF9zZXRfdmV4cGFuZChub3RlYm9vaywgVFJVRSk7XFxuK1xcdFxcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIG5vdGVib29rKTtcXG4gXFxuIFxcdFxcdGluZm9iYXIgPSBwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIoKTtcXG4tXFx0XFx0aWYgKGluZm9iYXIpIHtcXG4tXFx0XFx0XFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGluZm9iYXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIEZBTFNFLCBGQUxTRSwgMCk7XFxuLVxcdFxcdH1cXG4rXFx0XFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgaW5mb2Jhcik7XFxuIFxcbiBcXHRcXHRzdGF0YmFyID0gcGVyZl9ndGtfX3NldHVwX3N0YXR1c2JhcigpO1xcbi1cXHRcXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhciwgRkFMU0UsIEZBTFNFLCAwKTtcXG4rXFx0XFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhcik7XFxuIFxcbi1cXHRcXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZib3gpO1xcbitcXHRcXHRndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKHdpbmRvdyksIHZib3gpO1xcbiBcXHR9XFxuIFxcbi1cXHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTtcXG4rXFx0c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTtcXG4gXFx0dGFiX2xhYmVsID0gZ3RrX2xhYmVsX25ldyhzeW0tXFx1MDAzZW5hbWUpO1xcbiBcXG4gXFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSxcXG5AQCAtMjY3LDEyICsyNjIsMTEgQEAgdm9pZCBwZXJmX2d0a19fc2hvd19hbm5vdGF0aW9ucyh2b2lkKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHR3aW5kb3cgPSBwZ2N0eC1cXHUwMDNlbWFpbl93aW5kb3c7XFxuLVxcdGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTtcXG4gXFxuIFxcdHBlcmZfZ3RrX19yZXNpemVfd2luZG93KHdpbmRvdyk7XFxuLVxcdGd0a193aW5kb3dfc2V0X3Bvc2l0aW9uKEdUS19XSU5ET1cod2luZG93KSwgR1RLX1dJTl9QT1NfQ0VOVEVSKTtcXG4rXFx0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aW5kb3csIFRSVUUpO1xcbiBcXG4tXFx0Z3RrX21haW4oKTtcXG4rXFx0cGVyZl9ndGtfX3J1bl9tYWluX2xvb3Aod2luZG93KTtcXG4gXFxuIFxcdHBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoXFx1MDAyNnBnY3R4KTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9icm93c2VyLmMgYi90b29scy9wZXJmL3VpL2d0ay9icm93c2VyLmNcXG5pbmRleCBkMmRhZGYzODczZmJkLi45OGYxZDZiZmNiMjQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xcbkBAIC01LDMyICs1LDkyIEBAXFxuICNpbmNsdWRlIFxcXCIuLi9oaXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9oZWxwbGluZS5oXFxcIlxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2dsaWItdW5peC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuIFxcbi12b2lkIHBlcmZfZ3RrX19zaWduYWwoaW50IHNpZylcXG4rLypcXG4rICogU0lHSU5UL1NJR1FVSVQvU0lHVEVSTSBhcmUgYXN5bmNocm9ub3VzOiBkZWZlcnJpbmcgdGhlIGFjdHVhbCBleGl0IHRvIGFcXG4rICogR0xpYiBzb3VyY2UgZGlzcGF0Y2hlZCBmcm9tIHRoZSBtYWluIGxvb3AgbWVhbnMgaXQgYWx3YXlzIHJ1bnMgb24gdGhlXFxuKyAqIG1haW4gdGhyZWFkLCBzZXJpYWxpemVkIHdpdGggZXZlcnl0aGluZyBlbHNlIHRoZSBtYWluIGxvb3AgZG9lc1xcbisgKiAoaW5jbHVkaW5nIHBlcmZfZ3RrX19lcnJvcigpJ3MgdXBkYXRlcyB0byBwZXJmX2d0a19fZXJyb3JfbG9vcHMpLCBpbnN0ZWFkXFxuKyAqIG9mIHJhY2luZyB0aGVtIGZyb20gYXJiaXRyYXJ5IHNpZ25hbC1oYW5kbGVyIGNvbnRleHQuXFxuKyAqL1xcbitzdGF0aWMgZ2Jvb2xlYW4gcGVyZl9ndGtfX3F1aXRfc2lnbmFsKGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXFxuIHtcXG4gXFx0cGVyZl9ndGtfX2V4aXQoZmFsc2UpO1xcbitcXHRyZXR1cm4gR19TT1VSQ0VfUkVNT1ZFO1xcbit9XFxuK1xcbit2b2lkIHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscyh2b2lkKVxcbit7XFxuK1xcdGdfdW5peF9zaWduYWxfYWRkKFNJR0lOVCwgIHBlcmZfZ3RrX19xdWl0X3NpZ25hbCwgTlVMTCk7XFxuK1xcdGdfdW5peF9zaWduYWxfYWRkKFNJR1FVSVQsIHBlcmZfZ3RrX19xdWl0X3NpZ25hbCwgTlVMTCk7XFxuK1xcdGdfdW5peF9zaWduYWxfYWRkKFNJR1RFUk0sIHBlcmZfZ3RrX19xdWl0X3NpZ25hbCwgTlVMTCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFNJR1NFR1YvU0lHRlBFIGFyZSBzeW5jaHJvbm91cyBmYXVsdHM6IHRoZXJlJ3Mgbm8gXFxcImxhdGVyXFxcIiB0byBkZWZlciB0byxcXG4rICogYW5kIG5vIHNhZmUgd2F5IHRvIHJ1biBHVEsvR0xpYiBjb2RlIChvciBhbnl0aGluZyBlbHNlIG5vbi1hc3luYy1zaWduYWwtXFxuKyAqIHNhZmUpIGZyb20gdGhlIGZhdWx0aW5nIGNvbnRleHQuIFJlcG9ydCBhbmQgbGV0IHRoZSBkZWZhdWx0IGRpc3Bvc2l0aW9uXFxuKyAqIChjb3JlIGR1bXApIGhhcHBlbiBpbnN0ZWFkIG9mIHRyeWluZyB0byB0ZWFyIGRvd24gR1RLIHN0YXRlIGhlcmUuXFxuKyAqL1xcbit2b2lkIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwoaW50IHNpZylcXG4re1xcbiBcXHRwc2lnbmFsKHNpZywgXFxcInBlcmZcXFwiKTtcXG4rXFx0c2lnbmFsKHNpZywgU0lHX0RGTCk7XFxuK1xcdHJhaXNlKHNpZyk7XFxuIH1cXG4gXFxuIHZvaWQgcGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3coR3RrV2lkZ2V0ICp3aW5kb3cpXFxuIHtcXG4gXFx0R2RrUmVjdGFuZ2xlIHJlY3Q7XFxuLVxcdEdka1NjcmVlbiAqc2NyZWVuO1xcbi1cXHRpbnQgbW9uaXRvcjtcXG4rXFx0R2RrTW9uaXRvciAqbW9uaXRvcjtcXG4rXFx0R2RrRGlzcGxheSAqZGlzcGxheTtcXG4rXFx0R0xpc3RNb2RlbCAqbW9uaXRvcnM7XFxuIFxcdGludCBoZWlnaHQ7XFxuIFxcdGludCB3aWR0aDtcXG4gXFxuLVxcdHNjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbih3aW5kb3cpO1xcbitcXHRkaXNwbGF5ID0gZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aW5kb3cpO1xcbitcXHRtb25pdG9ycyA9IGdka19kaXNwbGF5X2dldF9tb25pdG9ycyhkaXNwbGF5KTtcXG4rXFx0bW9uaXRvciA9IGdfbGlzdF9tb2RlbF9nZXRfaXRlbShtb25pdG9ycywgMCk7XFxuK1xcdGlmICghbW9uaXRvcikge1xcbitcXHRcXHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA4MDAsIDYwMCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXG4tXFx0bW9uaXRvciA9IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgd2luZG93LVxcdTAwM2V3aW5kb3cpO1xcbi1cXG4tXFx0Z2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIG1vbml0b3IsIFxcdTAwMjZyZWN0KTtcXG4rXFx0Z2RrX21vbml0b3JfZ2V0X2dlb21ldHJ5KG1vbml0b3IsIFxcdTAwMjZyZWN0KTtcXG4rXFx0Z19vYmplY3RfdW5yZWYobW9uaXRvcik7XFxuIFxcbiBcXHR3aWR0aFxcdD0gcmVjdC53aWR0aCAqIDMgLyA0O1xcbiBcXHRoZWlnaHRcXHQ9IHJlY3QuaGVpZ2h0ICogMyAvIDQ7XFxuIFxcbi1cXHRndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHdpZHRoLCBoZWlnaHQpO1xcbitcXHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTtcXG4rfVxcbitcXG4rc3RhdGljIEdNYWluTG9vcCAqcGVyZl9ndGtfX21haW5fbG9vcDtcXG4rXFxuK3ZvaWQgcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKHZvaWQpXFxuK3tcXG4rXFx0aWYgKHBlcmZfZ3RrX19tYWluX2xvb3ApXFxuK1xcdFxcdGdfbWFpbl9sb29wX3F1aXQocGVyZl9ndGtfX21haW5fbG9vcCk7XFxuK31cXG4rXFxuK3N0YXRpYyBnYm9vbGVhbiBwZXJmX2d0a19fY2xvc2VfcmVxdWVzdChHdGtXaWRnZXQgKndpZGdldCBfX21heWJlX3VudXNlZCxcXG4rXFx0XFx0XFx0XFx0XFx0Z3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZClcXG4re1xcbitcXHRwZXJmX2d0a19fcXVpdF9tYWluX2xvb3AoKTtcXG4rXFxuK1xcdHJldHVybiBGQUxTRTtcXG4rfVxcbitcXG4rdm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdylcXG4re1xcbitcXHRnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgXFxcImNsb3NlLXJlcXVlc3RcXFwiLFxcbitcXHRcXHRcXHQgR19DQUxMQkFDSyhwZXJmX2d0a19fY2xvc2VfcmVxdWVzdCksIE5VTEwpO1xcbitcXG4rXFx0cGVyZl9ndGtfX21haW5fbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBGQUxTRSk7XFxuK1xcdGdfbWFpbl9sb29wX3J1bihwZXJmX2d0a19fbWFpbl9sb29wKTtcXG4rXFx0Z19jbGVhcl9wb2ludGVyKFxcdTAwMjZwZXJmX2d0a19fbWFpbl9sb29wLCBnX21haW5fbG9vcF91bnJlZik7XFxuIH1cXG4gXFxuIGNvbnN0IGNoYXIgKnBlcmZfZ3RrX19nZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudClcXG5AQCAtNDIsMzMgKzEwMiwzNSBAQCBjb25zdCBjaGFyICpwZXJmX2d0a19fZ2V0X3BlcmNlbnRfY29sb3IoZG91YmxlIHBlcmNlbnQpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVFxcbitzdGF0aWMgdm9pZCBwZXJmX2d0a19faGlkZV93aWRnZXQoR3RrV2lkZ2V0ICp3aWRnZXQsIGdpbnQgcmVzcG9uc2VfaWQgX19tYXliZV91bnVzZWQsXFxuK1xcdFxcdFxcdFxcdCAgIGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXFxuK3tcXG4rXFx0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aWRnZXQsIEZBTFNFKTtcXG4rfVxcbitcXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcXG4ge1xcbiBcXHRHdGtXaWRnZXQgKmluZm9fYmFyO1xcbiBcXHRHdGtXaWRnZXQgKmxhYmVsO1xcbi1cXHRHdGtXaWRnZXQgKmNvbnRlbnRfYXJlYTtcXG4gXFxuIFxcdGluZm9fYmFyID0gZ3RrX2luZm9fYmFyX25ldygpO1xcbi1cXHRndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbChpbmZvX2JhciwgVFJVRSk7XFxuK1xcdGd0a193aWRnZXRfc2V0X3Zpc2libGUoaW5mb19iYXIsIEZBTFNFKTtcXG4gXFxuIFxcdGxhYmVsID0gZ3RrX2xhYmVsX25ldyhcXFwiXFxcIik7XFxuLVxcdGd0a193aWRnZXRfc2hvdyhsYWJlbCk7XFxuK1xcdGd0a193aWRnZXRfc2V0X3Zpc2libGUobGFiZWwsIFRSVUUpO1xcbiBcXG4tXFx0Y29udGVudF9hcmVhID0gZ3RrX2luZm9fYmFyX2dldF9jb250ZW50X2FyZWEoR1RLX0lORk9fQkFSKGluZm9fYmFyKSk7XFxuLVxcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGVudF9hcmVhKSwgbGFiZWwpO1xcbitcXHRndGtfaW5mb19iYXJfYWRkX2NoaWxkKEdUS19JTkZPX0JBUihpbmZvX2JhciksIGxhYmVsKTtcXG4gXFxuLVxcdGd0a19pbmZvX2Jhcl9hZGRfYnV0dG9uKEdUS19JTkZPX0JBUihpbmZvX2JhciksIEdUS19TVE9DS19PSyxcXG4rXFx0Z3RrX2luZm9fYmFyX2FkZF9idXR0b24oR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgXFxcIl9PS1xcXCIsXFxuIFxcdFxcdFxcdFxcdEdUS19SRVNQT05TRV9PSyk7XFxuIFxcdGdfc2lnbmFsX2Nvbm5lY3QoaW5mb19iYXIsIFxcXCJyZXNwb25zZVxcXCIsXFxuLVxcdFxcdFxcdCBHX0NBTExCQUNLKGd0a193aWRnZXRfaGlkZSksIE5VTEwpO1xcbitcXHRcXHRcXHQgR19DQUxMQkFDSyhwZXJmX2d0a19faGlkZV93aWRnZXQpLCBOVUxMKTtcXG4gXFxuIFxcdHBnY3R4LVxcdTAwM2VpbmZvX2JhciA9IGluZm9fYmFyO1xcbiBcXHRwZ2N0eC1cXHUwMDNlbWVzc2FnZV9sYWJlbCA9IGxhYmVsO1xcbiBcXG4gXFx0cmV0dXJuIGluZm9fYmFyO1xcbiB9XFxuLSNlbmRpZlxcbiBcXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKHZvaWQpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmggYi90b29scy9wZXJmL3VpL2d0ay9ndGsuaFxcbmluZGV4IGEyYjQ5N2YwM2ZkNmUuLjZiMzdmZDk5NDNjOWQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmhcXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9ndGsuaFxcbkBAIC0xMywxMCArMTMsOCBAQCBzdHJ1Y3QgcGVyZl9ndGtfY29udGV4dCB7XFxuIFxcdEd0a1dpZGdldCAqbWFpbl93aW5kb3c7XFxuIFxcdEd0a1dpZGdldCAqbm90ZWJvb2s7XFxuIFxcbi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVFxcbiBcXHRHdGtXaWRnZXQgKmluZm9fYmFyO1xcbiBcXHRHdGtXaWRnZXQgKm1lc3NhZ2VfbGFiZWw7XFxuLSNlbmRpZlxcbiBcXHRHdGtXaWRnZXQgKnN0YXRiYXI7XFxuIFxcdGd1aW50IHN0YXRiYXJfY3R4X2lkO1xcbiB9O1xcbkBAIC0zOCwxOSArMzYsMTUgQEAgdm9pZCBwZXJmX2d0a19faW5pdF9oZWxwbGluZSh2b2lkKTtcXG4gdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX2luaXQodm9pZCk7XFxuIHZvaWQgcGVyZl9ndGtfX2luaXRfaHBwKHZvaWQpO1xcbiBcXG4tdm9pZCBwZXJmX2d0a19fc2lnbmFsKGludCBzaWcpO1xcbit2b2lkIHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscyh2b2lkKTtcXG4rdm9pZCBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKGludCBzaWcpO1xcbiB2b2lkIHBlcmZfZ3RrX19yZXNpemVfd2luZG93KEd0a1dpZGdldCAqd2luZG93KTtcXG4rdm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdyk7XFxuK3ZvaWQgcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKHZvaWQpO1xcbit2b2lkIHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZyh2b2lkKTtcXG4gY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KTtcXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKHZvaWQpO1xcbi1cXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZCk7XFxuLSNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcXG4te1xcbi1cXHRyZXR1cm4gTlVMTDtcXG4tfVxcbi0jZW5kaWZcXG4gXFxuIHN0cnVjdCBldnNlbDtcXG4gc3RydWN0IGV2bGlzdDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmNcXG5pbmRleCBiYWUyMWYzMzZhZTZkLi4zNDJkNGMzZmVjYjAxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmNcXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXFxuQEAgLTgsNiArOCw4IEBAXFxuICNpbmNsdWRlIFxcXCIuLi9oZWxwbGluZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vc3RyaW5nMi5oXFxcIlxcbiAjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRhcmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbiBcXG5AQCAtMzk1LDExICszOTcsOSBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaXN0cyhHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cyxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRndGtfdHJlZV92aWV3X3NldF9ydWxlc19oaW50KEdUS19UUkVFX1ZJRVcodmlldyksIFRSVUUpO1xcbi1cXG4gXFx0Z19zaWduYWxfY29ubmVjdCh2aWV3LCBcXFwicm93LWFjdGl2YXRlZFxcXCIsXFxuIFxcdFxcdFxcdCBHX0NBTExCQUNLKG9uX3Jvd19hY3RpdmF0ZWQpLCBOVUxMKTtcXG4tXFx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2aWV3KTtcXG4rXFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxcbkBAIC00NDksNyArNDQ5LDcgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxcbiBcXHRcXHRiZiA9IGhwcC1cXHUwMDNlYnVmO1xcbiBcXHRcXHRzaXplID0gaHBwLVxcdTAwM2VzaXplO1xcbiBcXHRcXHRwZXJmX2hwcF9saXN0X19mb3JfZWFjaF9mb3JtYXQoaGUtXFx1MDAzZWhwcF9saXN0LCBmbXQpIHtcXG4tXFx0XFx0XFx0aW50IHJldDtcXG4rXFx0XFx0XFx0aW50IHJldCwgaW5jO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGZtdC1cXHUwMDNlY29sb3IpXFxuIFxcdFxcdFxcdFxcdHJldCA9IGZtdC1cXHUwMDNlY29sb3IoZm10LCBocHAsIGhlKTtcXG5AQCAtNDU3LDcgKzQ1NywxOCBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fYWRkX2hpZXJhcmNoeV9lbnRyaWVzKHN0cnVjdCBoaXN0cyAqaGlzdHMsXFxuIFxcdFxcdFxcdFxcdHJldCA9IGZtdC1cXHUwMDNlZW50cnkoZm10LCBocHAsIGhlKTtcXG4gXFxuIFxcdFxcdFxcdHNucHJpbnRmKGhwcC1cXHUwMDNlYnVmICsgcmV0LCBocHAtXFx1MDAzZXNpemUgLSByZXQsIFxcXCIgIFxcXCIpO1xcbi1cXHRcXHRcXHRhZHZhbmNlX2hwcChocHAsIHJldCArIDIpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiByZXQgY2FuIGJlIGFzIGxhcmdlIGFzIGhwcC1cXHUwMDNlc2l6ZSAtIDEsIHNvIHJldCArIDJcXG4rXFx0XFx0XFx0ICogY2FuIGV4Y2VlZCBocHAtXFx1MDAzZXNpemUuIGFkdmFuY2VfaHBwKCkgZG9lc24ndCBjbGFtcCxcXG4rXFx0XFx0XFx0ICogc28gcGFzc2luZyB0aGF0IHRocm91Z2ggd291bGQgdW5kZXJmbG93IHRoZVxcbitcXHRcXHRcXHQgKiBzaXplX3QgaHBwLVxcdTAwM2VzaXplIGFuZCBsZXQgYSBsYXRlciBmbXQtXFx1MDAzZWVudHJ5KCkgaW5cXG4rXFx0XFx0XFx0ICogdGhpcyBsb29wIHdyaXRlIHBhc3QgdGhlIGVuZCBvZiB0aGUgY2FsbGVyJ3NcXG4rXFx0XFx0XFx0ICogc3RhY2sgYnVmZmVyLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aW5jID0gcmV0ICsgMjtcXG4rXFx0XFx0XFx0aWYgKGluYyBcXHUwMDNlIChpbnQpaHBwLVxcdTAwM2VzaXplKVxcbitcXHRcXHRcXHRcXHRpbmMgPSBocHAtXFx1MDAzZXNpemU7XFxuK1xcdFxcdFxcdGFkdmFuY2VfaHBwKGhwcCwgaW5jKTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Z3RrX3RyZWVfc3RvcmVfc2V0KHN0b3JlLCBcXHUwMDI2aXRlciwgY29sX2lkeCwgc3RyaW0oYmYpLCAtMSk7XFxuQEAgLTUwNSw2ICs1MTYsNyBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXFxuIFxcdEd0a1dpZGdldCAqdmlldztcXG4gXFx0aW50IGNvbF9pZHg7XFxuIFxcdGludCBucl9jb2xzID0gMDtcXG4rXFx0aW50IHJldDtcXG4gXFx0Y2hhciBzWzUxMl07XFxuIFxcdGNoYXIgYnVmWzUxMl07XFxuIFxcdGJvb2wgZmlyc3Rfbm9kZSwgZmlyc3RfY29sO1xcbkBAIC01NDEsOSArNTUzLDEwIEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpZXJhcmNoeShHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cyxcXG4gXFx0LyogY29uc3RydWN0IG1lcmdlZCBjb2x1bW4gaGVhZGVyIHNpbmNlIHNvcnQga2V5cyBzaGFyZSBzaW5nbGUgY29sdW1uICovXFxuIFxcdGJ1ZlswXSA9ICdcXFxcMCc7XFxuIFxcdGZpcnN0X25vZGUgPSB0cnVlO1xcbitcXHRyZXQgPSAwO1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKGZtdF9ub2RlLCBcXHUwMDI2aGlzdHMtXFx1MDAzZWhwcF9mb3JtYXRzLCBsaXN0KSB7XFxuIFxcdFxcdGlmICghZmlyc3Rfbm9kZSlcXG4tXFx0XFx0XFx0c3RyY2F0KGJ1ZiwgXFxcIiAvIFxcXCIpO1xcbitcXHRcXHRcXHRyZXQgKz0gc2NucHJpbnRmKGJ1ZiArIHJldCwgc2l6ZW9mKGJ1ZikgLSByZXQsIFxcXCIgLyBcXFwiKTtcXG4gXFx0XFx0Zmlyc3Rfbm9kZSA9IGZhbHNlO1xcbiBcXG4gXFx0XFx0Zmlyc3RfY29sID0gdHJ1ZTtcXG5AQCAtNTUyLDExICs1NjUsMTEgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGllcmFyY2h5KEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdGlmICghZmlyc3RfY29sKVxcbi1cXHRcXHRcXHRcXHRzdHJjYXQoYnVmLCBcXFwiK1xcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXQgKz0gc2NucHJpbnRmKGJ1ZiArIHJldCwgc2l6ZW9mKGJ1ZikgLSByZXQsIFxcXCIrXFxcIik7XFxuIFxcdFxcdFxcdGZpcnN0X2NvbCA9IGZhbHNlO1xcbiBcXG4gXFx0XFx0XFx0Zm10LVxcdTAwM2VoZWFkZXIoZm10LCBcXHUwMDI2aHBwLCBoaXN0cywgMCwgTlVMTCk7XFxuLVxcdFxcdFxcdHN0cmNhdChidWYsIHN0cmltKGhwcC5idWYpKTtcXG4rXFx0XFx0XFx0cmV0ICs9IHNjbnByaW50ZihidWYgKyByZXQsIHNpemVvZihidWYpIC0gcmV0LCBcXFwiJXNcXFwiLCBzdHJpbShocHAuYnVmKSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtNTgzLDExICs1OTYsOSBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXFxuIFxcdHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoaGlzdHMsIFxcdTAwMjZoaXN0cy1cXHUwMDNlZW50cmllcywgc3RvcmUsXFxuIFxcdFxcdFxcdFxcdFxcdE5VTEwsIFxcdTAwMjZocHAsIG1pbl9wY250KTtcXG4gXFxuLVxcdGd0a190cmVlX3ZpZXdfc2V0X3J1bGVzX2hpbnQoR1RLX1RSRUVfVklFVyh2aWV3KSwgVFJVRSk7XFxuLVxcbiBcXHRnX3NpZ25hbF9jb25uZWN0KHZpZXcsIFxcXCJyb3ctYWN0aXZhdGVkXFxcIixcXG4gXFx0XFx0XFx0IEdfQ0FMTEJBQ0sob25fcm93X2FjdGl2YXRlZCksIE5VTEwpO1xcbi1cXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xcbitcXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xcbiB9XFxuIFxcbiBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcXG5AQCAtNjAwLDM2ICs2MTEsMzIgQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXFxuIFxcdEd0a1dpZGdldCAqc3RhdGJhcjtcXG4gXFx0R3RrV2lkZ2V0ICp3aW5kb3c7XFxuIFxcbi1cXHRzaWduYWwoU0lHU0VHViwgcGVyZl9ndGtfX3NpZ25hbCk7XFxuLVxcdHNpZ25hbChTSUdGUEUsICBwZXJmX2d0a19fc2lnbmFsKTtcXG4tXFx0c2lnbmFsKFNJR0lOVCwgIHBlcmZfZ3RrX19zaWduYWwpO1xcbi1cXHRzaWduYWwoU0lHUVVJVCwgcGVyZl9ndGtfX3NpZ25hbCk7XFxuLVxcdHNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTtcXG4rXFx0c2lnbmFsKFNJR1NFR1YsIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwpO1xcbitcXHRzaWduYWwoU0lHRlBFLCAgcGVyZl9ndGtfX2ZhdGFsX3NpZ25hbCk7XFxuK1xcdHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscygpO1xcbiBcXG4tXFx0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7XFxuK1xcdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KCk7XFxuIFxcbiBcXHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIFxcXCJwZXJmIHJlcG9ydFxcXCIpO1xcbiBcXG4tXFx0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFxcXCJkZWxldGVfZXZlbnRcXFwiLCBndGtfbWFpbl9xdWl0LCBOVUxMKTtcXG4tXFxuIFxcdHBnY3R4ID0gcGVyZl9ndGtfX2FjdGl2YXRlX2NvbnRleHQod2luZG93KTtcXG4gXFx0aWYgKCFwZ2N0eClcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4tXFx0dmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7XFxuK1xcdHZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDApO1xcbiBcXG4gXFx0bm90ZWJvb2sgPSBndGtfbm90ZWJvb2tfbmV3KCk7XFxuIFxcbi1cXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2ssIFRSVUUsIFRSVUUsIDApO1xcbitcXHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTtcXG4rXFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spO1xcbiBcXG4gXFx0aW5mb19iYXIgPSBwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIoKTtcXG4tXFx0aWYgKGluZm9fYmFyKVxcbi1cXHRcXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaW5mb19iYXIsIEZBTFNFLCBGQUxTRSwgMCk7XFxuK1xcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIGluZm9fYmFyKTtcXG4gXFxuIFxcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XFxuLVxcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBzdGF0YmFyLCBGQUxTRSwgRkFMU0UsIDApO1xcbitcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTtcXG4gXFxuLVxcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7XFxuK1xcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cod2luZG93KSwgdmJveCk7XFxuIFxcbiBcXHRldmxpc3RfX2Zvcl9lYWNoX2VudHJ5KGV2bGlzdCwgcG9zKSB7XFxuIFxcdFxcdHN0cnVjdCBoaXN0cyAqaGlzdHMgPSBldnNlbF9faGlzdHMocG9zKTtcXG5AQCAtNjQ5LDcgKzY1Niw3IEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpO1xcbitcXHRcXHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldygpO1xcbiBcXG4gXFx0XFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0R1RLX1BPTElDWV9BVVRPTUFUSUMsXFxuQEAgLTY2NSwxNSArNjcyLDEyIEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLFxcbiBcXHRcXHRndGtfbm90ZWJvb2tfYXBwZW5kX3BhZ2UoR1RLX05PVEVCT09LKG5vdGVib29rKSwgc2Nyb2xsZWRfd2luZG93LCB0YWJfbGFiZWwpO1xcbiBcXHR9XFxuIFxcbi1cXHRndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7XFxuLVxcbiBcXHRwZXJmX2d0a19fcmVzaXplX3dpbmRvdyh3aW5kb3cpO1xcbi1cXG4tXFx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xcbitcXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpbmRvdywgVFJVRSk7XFxuIFxcbiBcXHR1aV9oZWxwbGluZV9fcHVzaChoZWxwKTtcXG4gXFxuLVxcdGd0a19tYWluKCk7XFxuK1xcdHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKHdpbmRvdyk7XFxuIFxcbiBcXHRwZXJmX2d0a19fZGVhY3RpdmF0ZV9jb250ZXh0KFxcdTAwMjZwZ2N0eCk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jIGIvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuY1xcbmluZGV4IGVlYTZmY2RlNTE4YTguLjc3MGY5MjUxYjU0YjcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmNcXG5AQCAtMSw0OSArMSw2NSBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAjaW5jbHVkZSBcXHUwMDNjaW50dHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiZ3RrLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9wcm9ncmVzcy5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4gXFxuIHN0YXRpYyBHdGtXaWRnZXQgKmRpYWxvZztcXG4gc3RhdGljIEd0a1dpZGdldCAqcHJvZ3Jlc3M7XFxuIFxcbitzdGF0aWMgdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX2Rlc3Ryb3llZChHdGtXaWRnZXQgKndpZGdldCBfX21heWJlX3VudXNlZCxcXG4rXFx0XFx0XFx0XFx0XFx0Z3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZClcXG4re1xcbitcXHRkaWFsb2cgPSBOVUxMO1xcbitcXHRwcm9ncmVzcyA9IE5VTEw7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fdXBkYXRlKHN0cnVjdCB1aV9wcm9ncmVzcyAqcClcXG4ge1xcbiBcXHRkb3VibGUgZnJhY3Rpb24gPSBwLVxcdTAwM2V0b3RhbCA/IDEuMCAqIHAtXFx1MDAzZWN1cnIgLyBwLVxcdTAwM2V0b3RhbCA6IDAuMDtcXG4gXFx0Y2hhciBidWZbMTAyNF07XFxuIFxcbiBcXHRpZiAoZGlhbG9nID09IE5VTEwpIHtcXG4tXFx0XFx0R3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX3Zib3hfbmV3KFRSVUUsIDUpO1xcbitcXHRcXHRHdGtXaWRnZXQgKnZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDUpO1xcbiBcXHRcXHRHdGtXaWRnZXQgKmxhYmVsID0gZ3RrX2xhYmVsX25ldyhwLVxcdTAwM2V0aXRsZSk7XFxuIFxcbi1cXHRcXHRkaWFsb2cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTtcXG4rXFx0XFx0ZGlhbG9nID0gZ3RrX3dpbmRvd19uZXcoKTtcXG4gXFx0XFx0cHJvZ3Jlc3MgPSBndGtfcHJvZ3Jlc3NfYmFyX25ldygpO1xcbiBcXG4tXFx0XFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGxhYmVsLCBUUlVFLCBGQUxTRSwgMyk7XFxuLVxcdFxcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBwcm9ncmVzcywgVFJVRSwgVFJVRSwgMyk7XFxuK1xcdFxcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQobGFiZWwsIFRSVUUpO1xcbitcXHRcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBsYWJlbCk7XFxuK1xcdFxcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQocHJvZ3Jlc3MsIFRSVUUpO1xcbitcXHRcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBwcm9ncmVzcyk7XFxuK1xcbitcXHRcXHRndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKGRpYWxvZyksIHZib3gpO1xcbiBcXG4tXFx0XFx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihkaWFsb2cpLCB2Ym94KTtcXG4rXFx0XFx0Z19zaWduYWxfY29ubmVjdChkaWFsb2csIFxcXCJkZXN0cm95XFxcIixcXG4rXFx0XFx0XFx0XFx0IEdfQ0FMTEJBQ0soZ3RrX3VpX3Byb2dyZXNzX19kZXN0cm95ZWQpLCBOVUxMKTtcXG4gXFxuIFxcdFxcdGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1coZGlhbG9nKSwgXFxcInBlcmZcXFwiKTtcXG4tXFx0XFx0Z3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcXG4tXFx0XFx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyhkaWFsb2cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xcbitcXHRcXHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcXG4gXFxuLVxcdFxcdGd0a193aWRnZXRfc2hvd19hbGwoZGlhbG9nKTtcXG4rXFx0XFx0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpO1xcbiBcXHR9XFxuIFxcbiBcXHRndGtfcHJvZ3Jlc3NfYmFyX3NldF9mcmFjdGlvbihHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwgZnJhY3Rpb24pO1xcbiBcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiJVxcXCJQUkl1NjRcXFwiIC8gJVxcXCJQUkl1NjQsIHAtXFx1MDAzZWN1cnIsIHAtXFx1MDAzZXRvdGFsKTtcXG4gXFx0Z3RrX3Byb2dyZXNzX2Jhcl9zZXRfdGV4dChHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwgYnVmKTtcXG4gXFxuLVxcdC8qIHdlIGRpZG4ndCBjYWxsIGd0a19tYWluIHlldCwgc28gZG8gaXQgbWFudWFsbHkgKi9cXG4tXFx0d2hpbGUgKGd0a19ldmVudHNfcGVuZGluZygpKVxcbi1cXHRcXHRndGtfbWFpbl9pdGVyYXRpb24oKTtcXG4rXFx0Lyogd2UgZGlkbid0IHN0YXJ0IGEgbWFpbiBsb29wIHlldCwgc28gcHVtcCBldmVudHMgbWFudWFsbHkgKi9cXG4rXFx0d2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpXFxuK1xcdFxcdGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZmluaXNoKHZvaWQpXFxuIHtcXG4rXFx0aWYgKGRpYWxvZyA9PSBOVUxMKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHQvKiB0aGlzIHdpbGwgYWxzbyBkZXN0cm95IGFsbCBvZiBpdHMgY2hpbGRyZW4gKi9cXG4tXFx0Z3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7XFxuK1xcdGd0a193aW5kb3dfZGVzdHJveShHVEtfV0lORE9XKGRpYWxvZykpO1xcbiBcXG4gXFx0ZGlhbG9nID0gTlVMTDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuY1xcbmluZGV4IGY1ZWVlNGQ2Njg3MzguLjliNDRmMzcxOTc0NzcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcXG5AQCAtMTIsNyArMTIsNyBAQCBpbnQgcGVyZl9ndGtfX2luaXQodm9pZClcXG4gXFx0Z3RrX3VpX3Byb2dyZXNzX19pbml0KCk7XFxuIFxcdHBlcmZfZ3RrX19pbml0X2hwcCgpO1xcbiBcXG4tXFx0cmV0dXJuIGd0a19pbml0X2NoZWNrKE5VTEwsIE5VTEwpID8gMCA6IC0xO1xcbitcXHRyZXR1cm4gZ3RrX2luaXRfY2hlY2soKSA/IDAgOiAtMTtcXG4gfVxcbiBcXG4gdm9pZCBwZXJmX2d0a19fZXhpdChib29sIHdhaXRfZm9yX29rIF9fbWF5YmVfdW51c2VkKVxcbkBAIC0yMCw1ICsyMCw2IEBAIHZvaWQgcGVyZl9ndGtfX2V4aXQoYm9vbCB3YWl0X2Zvcl9vayBfX21heWJlX3VudXNlZClcXG4gXFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdHBlcmZfZXJyb3JfX3VucmVnaXN0ZXIoXFx1MDAyNnBlcmZfZ3RrX2VvcHMpO1xcbi1cXHRndGtfbWFpbl9xdWl0KCk7XFxuK1xcdHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZygpO1xcbitcXHRwZXJmX2d0a19fcXVpdF9tYWluX2xvb3AoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmMgYi90b29scy9wZXJmL3VpL2d0ay91dGlsLmNcXG5pbmRleCBjNDdmNWMzODc4MzhjLi41ODIzZmYwZDdjMmE3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xcbkBAIC0yLDggKzIsMTAgQEBcXG4gI2luY2x1ZGUgXFxcIi4uL3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImd0ay5oXFxcIlxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGFyZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvemFsbG9jLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgcGVyZl9ndGtfY29udGV4dCAqcGdjdHg7XFxuQEAgLTI4LDg2ICszMCwxMDMgQEAgaW50IHBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQgKipjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBwZXJmX2d0a19fZXJyb3IoKSBjYW4gYmUgY2FsbGVkIHJlLWVudHJhbnRseSwgc2luY2UgdGhlIGRpYWxvZyBpc24ndFxcbisgKiBtb2RhbCBhbmQgaXRzIG5lc3RlZCBsb29wIHN0aWxsIHB1bXBzIGV2ZW50cyBmb3IgdGhlIG1haW4gd2luZG93LlxcbisgKiBUcmFjayBldmVyeSBjdXJyZW50bHkgcnVubmluZyBsb29wIGluc3RlYWQgb2YgYSBzaW5nbGUgcG9pbnRlciwgc28gYVxcbisgKiBuZXN0ZWQgY2FsbCBjYW4ndCBjbG9iYmVyIGFuIG91dGVyIGNhbGwncyBsb29wIGFuZCBsZWFrIGl0LlxcbisgKi9cXG4rc3RhdGljIEdTTGlzdCAqcGVyZl9ndGtfX2Vycm9yX2xvb3BzO1xcbitcXG4rc3RhdGljIHZvaWQgcGVyZl9ndGtfX3F1aXRfbG9vcChncG9pbnRlciBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEgX19tYXliZV91bnVzZWQpXFxuK3tcXG4rXFx0Z19tYWluX2xvb3BfcXVpdChkYXRhKTtcXG4rfVxcbitcXG4rdm9pZCBwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2codm9pZClcXG4re1xcbitcXHRnX3NsaXN0X2ZvcmVhY2gocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBwZXJmX2d0a19fcXVpdF9sb29wLCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcGVyZl9ndGtfX2RpYWxvZ19yZXNwb25zZShHdGtEaWFsb2cgKmRpYWxvZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZ2ludCByZXNwb25zZV9pZCBfX21heWJlX3VudXNlZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZ3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZClcXG4re1xcbitcXHRndGtfd2luZG93X2Rlc3Ryb3koR1RLX1dJTkRPVyhkaWFsb2cpKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBwZXJmX2d0a19fZXJyb3IoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpXFxuIHtcXG4gXFx0Y2hhciAqbXNnO1xcbiBcXHRHdGtXaWRnZXQgKmRpYWxvZztcXG4rXFx0R01haW5Mb29wICpsb29wO1xcbitcXHR2YV9saXN0IGFyZ3NfY29weTtcXG4gXFxuK1xcdHZhX2NvcHkoYXJnc19jb3B5LCBhcmdzKTtcXG4gXFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpIHx8XFxuLVxcdCAgICB2YXNwcmludGYoXFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzKSBcXHUwMDNjIDApIHtcXG4rXFx0ICAgIHZhc3ByaW50ZihcXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3NfY29weSkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHZhX2VuZChhcmdzX2NvcHkpO1xcbiBcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOlxcXFxuXFxcIik7XFxuIFxcdFxcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcXG4gXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4rXFx0dmFfZW5kKGFyZ3NfY29weSk7XFxuIFxcbiBcXHRkaWFsb2cgPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3X3dpdGhfbWFya3VwKEdUS19XSU5ET1cocGdjdHgtXFx1MDAzZW1haW5fd2luZG93KSxcXG4gXFx0XFx0XFx0XFx0XFx0R1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULFxcbiBcXHRcXHRcXHRcXHRcXHRHVEtfTUVTU0FHRV9FUlJPUixcXG4gXFx0XFx0XFx0XFx0XFx0R1RLX0JVVFRPTlNfQ0xPU0UsXFxuIFxcdFxcdFxcdFxcdFxcdFxcXCJcXHUwMDNjYlxcdTAwM2VFcnJvclxcdTAwM2MvYlxcdTAwM2VcXFxcblxcXFxuJXNcXFwiLCBtc2cpO1xcbi1cXHRndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpO1xcbiBcXG4tXFx0Z3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7XFxuK1xcdC8qXFxuK1xcdCAqIFxcXCJyZXNwb25zZVxcXCIgb25seSBmaXJlcyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQ7IERFU1RST1lfV0lUSF9QQVJFTlRcXG4rXFx0ICogZGVzdHJveXMgdGhlIGRpYWxvZyBkaXJlY3RseSB3aXRob3V0IGl0LiBRdWl0IGZyb20gXFxcImRlc3Ryb3lcXFwiXFxuK1xcdCAqIGluc3RlYWQsIHdoaWNoIGZpcmVzIGVpdGhlciB3YXksIHNvIHRoZSBuZXN0ZWQgbG9vcCBiZWxvdyBjYW4ndFxcbitcXHQgKiBvdXRsaXZlIHRoZSBkaWFsb2cgYW5kIGhhbmcuXFxuK1xcdCAqL1xcbitcXHRsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIEZBTFNFKTtcXG4rXFx0cGVyZl9ndGtfX2Vycm9yX2xvb3BzID0gZ19zbGlzdF9wcmVwZW5kKHBlcmZfZ3RrX19lcnJvcl9sb29wcywgbG9vcCk7XFxuK1xcdGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCBcXFwicmVzcG9uc2VcXFwiLFxcbitcXHRcXHRcXHQgR19DQUxMQkFDSyhwZXJmX2d0a19fZGlhbG9nX3Jlc3BvbnNlKSwgTlVMTCk7XFxuK1xcdGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChkaWFsb2csIFxcXCJkZXN0cm95XFxcIixcXG4rXFx0XFx0XFx0XFx0IEdfQ0FMTEJBQ0soZ19tYWluX2xvb3BfcXVpdCksIGxvb3ApO1xcbitcXG4rXFx0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpO1xcbitcXHRnX21haW5fbG9vcF9ydW4obG9vcCk7XFxuK1xcdHBlcmZfZ3RrX19lcnJvcl9sb29wcyA9IGdfc2xpc3RfcmVtb3ZlKHBlcmZfZ3RrX19lcnJvcl9sb29wcywgbG9vcCk7XFxuK1xcdGdfbWFpbl9sb29wX3VucmVmKGxvb3ApO1xcbitcXG4gXFx0ZnJlZShtc2cpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcXG4gc3RhdGljIGludCBwZXJmX2d0a19fd2FybmluZ19pbmZvX2Jhcihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncylcXG4ge1xcbiBcXHRjaGFyICptc2c7XFxuK1xcdHZhX2xpc3QgYXJnc19jb3B5O1xcbiBcXG4rXFx0dmFfY29weShhcmdzX2NvcHksIGFyZ3MpO1xcbiBcXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHxcXG4tXFx0ICAgIHZhc3ByaW50ZihcXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3MpIFxcdTAwM2MgMCkge1xcbitcXHQgICAgdmFzcHJpbnRmKFxcdTAwMjZtc2csIGZvcm1hdCwgYXJnc19jb3B5KSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0dmFfZW5kKGFyZ3NfY29weSk7XFxuIFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV2FybmluZzpcXFxcblxcXCIpO1xcbiBcXHRcXHR2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7XFxuIFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXHR9XFxuK1xcdHZhX2VuZChhcmdzX2NvcHkpO1xcbiBcXG4gXFx0Z3RrX2xhYmVsX3NldF90ZXh0KEdUS19MQUJFTChwZ2N0eC1cXHUwMDNlbWVzc2FnZV9sYWJlbCksIG1zZyk7XFxuIFxcdGd0a19pbmZvX2Jhcl9zZXRfbWVzc2FnZV90eXBlKEdUS19JTkZPX0JBUihwZ2N0eC1cXHUwMDNlaW5mb19iYXIpLFxcbiBcXHRcXHRcXHRcXHQgICAgICBHVEtfTUVTU0FHRV9XQVJOSU5HKTtcXG4tXFx0Z3RrX3dpZGdldF9zaG93KHBnY3R4LVxcdTAwM2VpbmZvX2Jhcik7XFxuLVxcbi1cXHRmcmVlKG1zZyk7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLSNlbHNlXFxuLXN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxcbi17XFxuLVxcdGNoYXIgKm1zZywgKnA7XFxuLVxcbi1cXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHxcXG4tXFx0ICAgIHZhc3ByaW50ZihcXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3MpIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIldhcm5pbmc6XFxcXG5cXFwiKTtcXG4tXFx0XFx0dmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpO1xcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFx0fVxcbi1cXG4tXFx0Z3RrX3N0YXR1c2Jhcl9wb3AoR1RLX1NUQVRVU0JBUihwZ2N0eC1cXHUwMDNlc3RhdGJhciksXFxuLVxcdFxcdFxcdCAgcGdjdHgtXFx1MDAzZXN0YXRiYXJfY3R4X2lkKTtcXG4tXFxuLVxcdC8qIE9ubHkgZmlyc3QgbGluZSBjYW4gYmUgZGlzcGxheWVkICovXFxuLVxcdHAgPSBzdHJjaHIobXNnLCAnXFxcXG4nKTtcXG4tXFx0aWYgKHApXFxuLVxcdFxcdCpwID0gJ1xcXFwwJztcXG4tXFxuLVxcdGd0a19zdGF0dXNiYXJfcHVzaChHVEtfU1RBVFVTQkFSKHBnY3R4LVxcdTAwM2VzdGF0YmFyKSxcXG4tXFx0XFx0XFx0ICAgcGdjdHgtXFx1MDAzZXN0YXRiYXJfY3R4X2lkLCBtc2cpO1xcbitcXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKHBnY3R4LVxcdTAwM2VpbmZvX2JhciwgVFJVRSk7XFxuIFxcbiBcXHRmcmVlKG1zZyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuLSNlbmRpZlxcbiBcXG4gc3RydWN0IHBlcmZfZXJyb3Jfb3BzIHBlcmZfZ3RrX2VvcHMgPSB7XFxuIFxcdC5lcnJvclxcdFxcdD0gcGVyZl9ndGtfX2Vycm9yLFxcbi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVFxcbiBcXHQud2FybmluZ1xcdD0gcGVyZl9ndGtfX3dhcm5pbmdfaW5mb19iYXIsXFxuLSNlbHNlXFxuLVxcdC53YXJuaW5nXFx0PSBwZXJmX2d0a19fd2FybmluZ19zdGF0dXNiYXIsXFxuLSNlbmRpZlxcbiB9O1xcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL3NldHVwLmMgYi90b29scy9wZXJmL3VpL3NldHVwLmNcXG5pbmRleCBmZjgwMDA0N2U2OTdmLi5kODg3MzQ2YzdhNjMyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvc2V0dXAuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvc2V0dXAuY1xcbkBAIC0xNCw3ICsxNCw3IEBAIGludCB1c2VfYnJvd3NlciA9IC0xO1xcbiBcXG4gI2RlZmluZSBQRVJGX0dUS19EU08gXFxcImxpYnBlcmYtZ3RrLnNvXFxcIlxcbiBcXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxcbiBcXG4gc3RhdGljIGludCBzZXR1cF9ndGtfYnJvd3Nlcih2b2lkKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmNcXG5pbmRleCBkZjcwZTk1YTg0NzA0Li4xMjNiNmQ1ZmNlYTc4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jXFxuKysrIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmNcXG5AQCAtMTQ1LDYgKzE0NSwxNyBAQCBzdGF0aWMgaW50IGFubm90YXRlZF9zb3VyY2VfX2FsbG9jX2hpc3RvZ3JhbXMoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYyxcXG4gXFx0cmV0dXJuIHNyYy1cXHUwMDNlaGlzdG9ncmFtcyA/IDAgOiAtMTtcXG4gfVxcbiBcXG4rc3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcXG4rYW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KVxcbit7XFxuK1xcdHN0cnVjdCBzeW1faGlzdF9lbnRyeSAqZW50cnk7XFxuK1xcdGxvbmcga2V5ID0gb2Zmc2V0IFxcdTAwM2NcXHUwMDNjIDE2IHwgZXZzZWwtXFx1MDAzZWNvcmUuaWR4O1xcbitcXG4rXFx0aWYgKCFoYXNobWFwX19maW5kKHNyYy1cXHUwMDNlc2FtcGxlcywga2V5LCBcXHUwMDI2ZW50cnkpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0cmV0dXJuIGVudHJ5O1xcbit9XFxuK1xcbiB2b2lkIHN5bWJvbF9fYW5ub3RhdGVfemVyb19oaXN0b2dyYW1zKHN0cnVjdCBzeW1ib2wgKnN5bSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYW5ub3RhdGlvbiAqbm90ZXMgPSBzeW1ib2xfX2Fubm90YXRpb24oc3ltKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmggYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaFxcbmluZGV4IGZhMDhkMDliODBmNzYuLjQwMDM4YTM3NzlkNDYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmhcXG4rKysgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaFxcbkBAIC00MDYsMTYgKzQwNiw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bV9oaXN0ICphbm5vdGF0aW9uX19oaXN0b2dyYW0oc3RydWN0IGFubm90YXRpb24gKm5vdGVzLFxcbiBcXHRyZXR1cm4gYW5ub3RhdGVkX3NvdXJjZV9faGlzdG9ncmFtKG5vdGVzLVxcdTAwM2VzcmMsIGV2c2VsKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKlxcbi1hbm5vdGF0ZWRfc291cmNlX19oaXN0X2VudHJ5KHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsIGNvbnN0IHN0cnVjdCBldnNlbCAqZXZzZWwsIHU2NCBvZmZzZXQpXFxuLXtcXG4tXFx0c3RydWN0IHN5bV9oaXN0X2VudHJ5ICplbnRyeTtcXG4tXFx0bG9uZyBrZXkgPSBvZmZzZXQgXFx1MDAzY1xcdTAwM2MgMTYgfCBldnNlbC1cXHUwMDNlY29yZS5pZHg7XFxuLVxcbi1cXHRpZiAoIWhhc2htYXBfX2ZpbmQoc3JjLVxcdTAwM2VzYW1wbGVzLCBrZXksIFxcdTAwMjZlbnRyeSkpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHRyZXR1cm4gZW50cnk7XFxuLX1cXG4rc3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcXG4rYW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFubm90YXRpb24gKnN5bWJvbF9fYW5ub3RhdGlvbihzdHJ1Y3Qgc3ltYm9sICpzeW0pXFxuIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MjY6MjUuMTczNzU1MzE3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NjE5NTE5NzY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29saW5nIGFuZCBidWlsZCBzY3JpcHRzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHBvcnRpbmcgdGhlIHBlcmYgR1RLIFVJIGZyb20gR1RLMiB0byBHVEs0IGFuZCBtaW5vciBoZWxwZXIgcmVsb2NhdGlvbiBpbiB0b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYykuIEl0IGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwtc3BhY2UgY29kZSwgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ZmFmNDE1MzY0MDBmYzcyMDkzZGY3OGQ2ZTc5N2EzN2NiYWIwNmY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwMjoyNjoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUgYi90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlXG5pbmRleCA5OWViMGVhMDk1Mzc1Li40ZWM5NWMzNWE1YzE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuKysrIGIvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuQEAgLTExMyw4ICsxMTMsNyBAQCBGRUFUVVJFX1RFU1RTX0VYVFJBIDo9ICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBjb21waWxlLXgzMiAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBjcGx1cy1kZW1hbmdsZSAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBjeGEtZGVtYW5nbGUgICAgICAgICAgICAgICAgICAgXFxcbi0gICAgICAgICBndGsyICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi0gICAgICAgICBndGsyLWluZm9iYXIgICAgICAgICAgICAgICAgICAgXFxcbisgICAgICAgICBndGs0ICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBoZWxsbyAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBiYWJlbHRyYWNlMi1jdGYtd3JpdGVyICAgICAgICAgXFxcbiAgICAgICAgICBsaWJjYXBzdG9uZSAgICAgICAgICAgICAgICAgICAgXFxcbkBAIC0xNDMsNiArMTQyLDcgQEAgZW5kaWZcbiBGRUFUVVJFX0RJU1BMQVkgPz0gICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbGliZHcgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGdsaWJjICAgICAgICAgICAgICAgICAgXFxcbisgICAgICAgICBndGs0ICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbGliZWxmICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGxpYm51bWEgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBudW1hX251bV9wb3NzaWJsZV9jcHVzIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZSBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGVcbmluZGV4IDdkMTY1MDE4MTE2YTUuLjAxYzQ4ZTZlZjAyMWQgMTAwNjQ0XG4tLS0gYS90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXG4rKysgYi90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXG5AQCAtMTEsOCArMTEsNyBAQCBGSUxFUz0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtZXZlbnRmZC5iaW4gICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1mb3J0aWZ5LXNvdXJjZS5iaW4gICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICB0ZXN0LWdsaWJjLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLSAgICAgICAgIHRlc3QtZ3RrMi5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgdGVzdC1ndGsyLWluZm9iYXIuYmluICAgICAgICAgICAgICAgICAgXFxcbisgICAgICAgICB0ZXN0LWd0azQuYmluICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtaGVsbG8uYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1saWJiZmQuYmluICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiBcdCB0ZXN0LWxpYmJmZC10aHJlYWRzYWZlLmJpbiAgICAgIFx0XFxcbkBAIC0yNDAsMTEgKzIzOSw4IEBAICQoT1VUUFVUKXRlc3QtbGliY3B1cG93ZXIuYmluOlxuICQoT1VUUFVUKXRlc3QtbGlidHJhY2Vmcy5iaW46XG4gXHQgJChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGxpYnRyYWNlZnMgMlx1MDAzZS9kZXYvbnVsbCkgLWx0cmFjZWZzXG4gXG4tJChPVVRQVVQpdGVzdC1ndGsyLmJpbjpcbi1cdCQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMlx1MDAzZS9kZXYvbnVsbCkgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9uc1xuLVxuLSQoT1VUUFVUKXRlc3QtZ3RrMi1pbmZvYmFyLmJpbjpcbi1cdCQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMlx1MDAzZS9kZXYvbnVsbClcbiskKE9VVFBVVCl0ZXN0LWd0azQuYmluOlxuK1x0JChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGs0IDJcdTAwM2UvZGV2L251bGwpXG4gXG4gZ3JlcC1saWJzICA9ICQoZmlsdGVyIC1sJSwkKDEpKVxuIHN0cmlwLWxpYnMgPSAkKGZpbHRlci1vdXQgLWwlLCQoMSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGIxYjcxNmRkNTczMzAuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLWluZm9iYXIuY1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsMTIgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdHJpY3QtcHJvdG90eXBlc1wiXG4tI2luY2x1ZGUgXHUwMDNjZ3RrL2d0ay5oXHUwMDNlXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBlcnJvciBcIi1Xc3RyaWN0LXByb3RvdHlwZXNcIlxuLVxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4te1xuLVx0Z3RrX2luaXQoXHUwMDI2YXJnYywgXHUwMDI2YXJndik7XG4tXHRndGtfaW5mb19iYXJfbmV3KCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuYyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcbnNpbWlsYXJpdHkgaW5kZXggNzYlXG5yZW5hbWUgZnJvbSB0b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi5jXG5yZW5hbWUgdG8gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azQuY1xuaW5kZXggMmFhZjRiZmMyMDU1Ni4uYjk1MjBlNzQwOGI5OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLmNcbisrKyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcbkBAIC0zLDkgKzMsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2d0ay9ndGsuaFx1MDAzZVxuICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgZXJyb3IgXCItV3N0cmljdC1wcm90b3R5cGVzXCJcbiBcbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK2ludCBtYWluKHZvaWQpXG4ge1xuLVx0Z3RrX2luaXQoXHUwMDI2YXJnYywgXHUwMDI2YXJndik7XG4rXHRndGtfaW5pdCgpO1xuIFxuICAgICAgICAgcmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0XG5pbmRleCAyMmY4N2VhYTMyNzk2Li43YWY5YjNmODFjMDY1IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuQEAgLTM1MSw3ICszNTEsNyBAQCBPUFRJT05TXG4gXHRyZXF1aXJlcyBhIHR0eSwgaWYgb25lIGlzIG5vdCBwcmVzZW50LCBhcyB3aGVuIHBpcGluZyB0byBvdGhlclxuIFx0Y29tbWFuZHMsIHRoZSBzdGRpbyBpbnRlcmZhY2UgaXMgdXNlZC5cbiBcbi0tLWd0azo6IFVzZSB0aGUgR1RLMiBpbnRlcmZhY2UuXG4rLS1ndGs6OiBVc2UgdGhlIEdUSzQgaW50ZXJmYWNlLlxuIFxuIC1rOjpcbiAtLXZtbGludXg9XHUwMDNjZmlsZVx1MDAzZTo6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGVcbmluZGV4IDViNzEzODM3ZWVkZTcuLjU2MDE0MTA2NDc5YTMgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL01ha2VmaWxlXG4rKysgYi90b29scy9wZXJmL01ha2VmaWxlXG5AQCAtMTA2LDcgKzEwNiw3IEBAIGNsZWFuOlxuICMgbWFrZSAtQyB0b29scy9wZXJmIC1mIHRlc3RzL21ha2VcbiAjXG4gYnVpbGQtdGVzdDpcbi1cdEAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azIgb3V0XG4rXHRAJChNQUtFKSBTSFVGPTEgLWYgdGVzdHMvbWFrZSBSRVVTRV9GRUFUVVJFU19EVU1QPTEgTUs9TWFrZWZpbGUgU0VUX1BBUkFMTEVMPTEgLS1uby1wcmludC1kaXJlY3RvcnkgdGFycGtnIG1ha2Vfc3RhdGljIG1ha2Vfd2l0aF9ndGs0IG91dFxuIFxuIGJ1aWxkLXRlc3QtdGFyYmFsbDpcbiBcdEAkKE1BS0UpIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IG91dFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWdcbmluZGV4IDRkNTk5M2RhOWY5NDUuLjRlZTczOTNhMzlmOTEgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZ1xuKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWdcbkBAIC03NzQsMjEgKzc3NCwyMiBAQCBpZm5kZWYgTk9fU0xBTkdcbiAgIGVuZGlmXG4gZW5kaWZcbiBcbi1pZmRlZiBHVEsyXG4tICBGTEFHU19HVEsyPSQoQ0ZMQUdTKSAkKExERkxBR1MpICQoRVhUTElCUykgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsrLTIuMCAyXHUwMDNlL2Rldi9udWxsKVxuLSAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrMilcbi0gIGlmbmVxICgkKGZlYXR1cmUtZ3RrMiksIDEpXG4tICAgICQod2FybmluZyBHVEsyIG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLMiBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGsyLWRldmVsIG9yIGxpYmd0azIuMC1kZXYpXG4tICAgIE5PX0dUSzIgOj0gMVxuK2lmZGVmIEdUSzRcbisgIEZMQUdTX0dUSzQ9JChDRkxBR1MpICQoTERGTEFHUykgJChFWFRMSUJTKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbisgICQoY2FsbCBmZWF0dXJlX2NoZWNrLGd0azQpXG4rICBpZm5lcSAoJChmZWF0dXJlLWd0azQpLCAxKVxuKyAgICAkKHdhcm5pbmcgR1RLNCBub3QgZm91bmQsIGRpc2FibGVzIEdUSzQgc3VwcG9ydC4gUGxlYXNlIGluc3RhbGwgZ3RrNC1kZXZlbCBvciBsaWJndGstNC1kZXYpXG4rICAgIE5PX0dUSzQgOj0gMVxuICAgZWxzZVxuLSAgICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGsyLWluZm9iYXIpXG4tICAgIGlmZXEgKCQoZmVhdHVyZS1ndGsyLWluZm9iYXIpLCAxKVxuLSAgICAgIEdUS19DRkxBR1MgOj0gLURIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4tICAgIGVuZGlmXG4tICAgIENGTEFHUyArPSAtREhBVkVfR1RLMl9TVVBQT1JUXG4tICAgIEdUS19DRkxBR1MgKz0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGd0aystMi4wIDJcdTAwM2UvZGV2L251bGwpXG4tICAgIEdUS19MSUJTIDo9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgZ3RrKy0yLjAgMlx1MDAzZS9kZXYvbnVsbClcbisgICAgQ0ZMQUdTICs9IC1ESEFWRV9HVEs0X1NVUFBPUlRcbisgICAgR1RLX0NGTEFHUyArPSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgZ3RrNCAyXHUwMDNlL2Rldi9udWxsKVxuKyAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbiAgICAgRVhUTElCUyArPSAtbGRsXG4rICAgICMgbGlicGVyZi1ndGsuc28gaXMgZGxvcGVuKCllZCBhdCBydW50aW1lIGFuZCBjYWxscyBiYWNrIGludG9cbisgICAgIyBzeW1ib2xzIGRlZmluZWQgaW4gdGhlIHBlcmYgYmluYXJ5IGl0c2VsZiAoY2FsbGNoYWluX3BhcmFtLFxuKyAgICAjIHN5bWJvbF9jb25mLCBldnNlbF9fbmFtZSwgLi4uKTogcGVyZiBuZWVkcyB0byBleHBvcnQgdGhvc2VcbisgICAgIyBkeW5hbWljYWxseSBmb3IgdGhlIHBsdWdpbiB0byByZXNvbHZlIHRoZW0uXG4rICAgIExERkxBR1MgKz0gLXJkeW5hbWljXG4gICBlbmRpZlxuIGVuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmXG5pbmRleCAyOWNmZDQ0YzQyN2YzLi4yNDM4YjQwZWFhZWMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmXG4rKysgYi90b29scy9wZXJmL01ha2VmaWxlLnBlcmZcbkBAIC00OSw3ICs0OSw3IEBAIGluY2x1ZGUgLi4vc2NyaXB0cy91dGlsaXRpZXMubWFrXG4gI1xuICMgRGVmaW5lIE5PX1NMQU5HIGlmIHlvdSBkbyBub3Qgd2FudCBUVUkgc3VwcG9ydC5cbiAjXG4tIyBEZWZpbmUgR1RLMiBpZiB5b3Ugd2FudCBHVEsrIEdVSSBzdXBwb3J0LlxuKyMgRGVmaW5lIEdUSzQgaWYgeW91IHdhbnQgR1RLKyBHVUkgc3VwcG9ydC5cbiAjXG4gIyBEZWZpbmUgTk9fREVNQU5HTEUgaWYgeW91IGRvIG5vdCB3YW50IEMrKyBzeW1ib2wgZGVtYW5nbGluZy5cbiAjXG5AQCAtNDczLDcgKzQ3Myw3IEBAIGlmbmVxICgkKE9VVFBVVCksKVxuICAgQ0ZMQUdTICs9IC1JJChPVVRQVVQpXG4gZW5kaWZcbiBcbi1pZmRlZiBHVEsyXG4raWZkZWYgR1RLNFxuICAgQUxMX1BST0dSQU1TICs9ICQoT1VUUFVUKWxpYnBlcmYtZ3RrLnNvXG4gICBHVEtfSU4gOj0gJChPVVRQVVQpZ3RrLWluLm9cbiBlbmRpZlxuQEAgLTgxMSw3ICs4MTEsNyBAQCBjaGVjazogcHJlcGFyZVxuIFxuICMjIyBJbnN0YWxsYXRpb24gcnVsZXNcbiBcbi1pZmRlZiBHVEsyXG4raWZkZWYgR1RLNFxuIGluc3RhbGwtZ3RrOiAkKE9VVFBVVClsaWJwZXJmLWd0ay5zb1xuIFx0JChjYWxsIFFVSUVUX0lOU1RBTEwsICdHVEsgVUknKSBcXFxuIFx0XHQkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQobGliZGlyX1NRKSc7IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuY1xuaW5kZXggNjljYjcyYjIwODJhNi4uMTUxNjNlMDgxYThjZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXG4rKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuY1xuQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IHBlcmZfYW5ub3RhdGUge1xuIFx0Ym9vbFx0ICAgdXNlX3R1aTtcbiAjZW5kaWZcbiBcdGJvb2xcdCAgIHVzZV9zdGRpbywgdXNlX3N0ZGlvMjtcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGJvb2xcdCAgIHVzZV9ndGs7XG4gI2VuZGlmXG4gXHRib29sXHQgICBza2lwX21pc3Npbmc7XG5AQCAtNzEyLDcgKzcxMiw3IEBAIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KVxuIFx0T1BUX0JPT0xFQU4oJ3EnLCBcInF1aWV0XCIsIFx1MDAyNnF1aWV0LCBcImRvIG5vdyBzaG93IGFueSB3YXJuaW5ncyBvciBtZXNzYWdlc1wiKSxcbiBcdE9QVF9CT09MRUFOKCdEJywgXCJkdW1wLXJhdy10cmFjZVwiLCBcdTAwMjZkdW1wX3RyYWNlLFxuIFx0XHQgICAgXCJkdW1wIHJhdyB0cmFjZSBpbiBBU0NJSVwiKSxcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdE9QVF9CT09MRUFOKDAsIFwiZ3RrXCIsIFx1MDAyNmFubm90YXRlLnVzZV9ndGssIFwiVXNlIHRoZSBHVEsgaW50ZXJmYWNlXCIpLFxuICNlbmRpZlxuICNpZmRlZiBIQVZFX1NMQU5HX1NVUFBPUlRcbkBAIC04MjgsNyArODI4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRpZiAoYW5ub3RhdGVfY2hlY2tfYXJncygpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGlmIChzeW1ib2xfY29uZi5zaG93X25yX3NhbXBsZXMgXHUwMDI2XHUwMDI2IGFubm90YXRlLnVzZV9ndGspIHtcbiBcdFx0cHJfZXJyKFwiLS1zaG93LW5yLXNhbXBsZXMgaXMgbm90IGF2YWlsYWJsZSBpbiAtLWd0ayBtb2RlIGF0IHRoaXMgdGltZVxcblwiKTtcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC04OTgsNyArODk4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRlbHNlIGlmIChhbm5vdGF0ZS51c2VfdHVpKVxuIFx0XHR1c2VfYnJvd3NlciA9IDE7XG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4rI2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXG4gXHRlbHNlIGlmIChhbm5vdGF0ZS51c2VfZ3RrKVxuIFx0XHR1c2VfYnJvd3NlciA9IDI7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jXG5pbmRleCA2MGQxZjE2NjYyOWUwLi5kMTQzODRjNTg0NjYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jXG4rKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmNcbkBAIC04Miw3ICs4Miw3IEBAIHN0cnVjdCByZXBvcnQge1xuICNpZmRlZiBIQVZFX1NMQU5HX1NVUFBPUlRcbiBcdGJvb2xcdFx0XHR1c2VfdHVpO1xuICNlbmRpZlxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFx0Ym9vbFx0XHRcdHVzZV9ndGs7XG4gI2VuZGlmXG4gXHRib29sXHRcdFx0dXNlX3N0ZGlvO1xuQEAgLTEzNTksOCArMTM1OSw4IEBAIGludCBjbWRfcmVwb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilcbiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUXG4gXHRPUFRfQk9PTEVBTigwLCBcInR1aVwiLCBcdTAwMjZyZXBvcnQudXNlX3R1aSwgXCJVc2UgdGhlIFRVSSBpbnRlcmZhY2VcIiksXG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4tXHRPUFRfQk9PTEVBTigwLCBcImd0a1wiLCBcdTAwMjZyZXBvcnQudXNlX2d0aywgXCJVc2UgdGhlIEdUSzIgaW50ZXJmYWNlXCIpLFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuK1x0T1BUX0JPT0xFQU4oMCwgXCJndGtcIiwgXHUwMDI2cmVwb3J0LnVzZV9ndGssIFwiVXNlIHRoZSBHVEs0IGludGVyZmFjZVwiKSxcbiAjZW5kaWZcbiBcdE9QVF9CT09MRUFOKDAsIFwic3RkaW9cIiwgXHUwMDI2cmVwb3J0LnVzZV9zdGRpbyxcbiBcdFx0ICAgIFwiVXNlIHRoZSBzdGRpbyBpbnRlcmZhY2VcIiksXG5AQCAtMTcxMCw3ICsxNzEwLDcgQEAgaW50IGNtZF9yZXBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KVxuIFx0ZWxzZSBpZiAocmVwb3J0LnVzZV90dWkpXG4gXHRcdHVzZV9icm93c2VyID0gMTtcbiAjZW5kaWZcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGVsc2UgaWYgKHJlcG9ydC51c2VfZ3RrKVxuIFx0XHR1c2VfYnJvd3NlciA9IDI7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2hcbmluZGV4IGQwMDNlN2ZhYjJiZTguLmE2MDFhNTI2MGMxN2UgMTAwNzU1XG4tLS0gYS90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG4rKysgYi90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG5AQCAtMTk5LDggKzE5OSw4IEBAIGZlZG9yYV9wa2dfZm9yKCkge1xuIFx0IyBvcHQtaW4gZmVhdHVyZXMsIHdoaWNoIGEgZGVmYXVsdCBidWlsZCBkb2VzIG5vdCBlbmFibGU6IHRoZSBsaWJiZmRcbiBcdCMgZGlzYXNzZW1ibGVyIGZhbWlseSAobGliYmZkLCBsaWJiZmQtdGhyZWFkc2FmZSwgbGliYmZkLWxpYmVydHksXG4gXHQjIGRpc2Fzc2VtYmxlci0qLCBjcGx1cy1kZW1hbmdsZSksIG9ubHkgbGlua2VkIG9uIEJVSUxEX05PTkRJU1RST1xuLVx0IyBidWlsZHMgYW5kIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgY2Fwc3RvbmUsIEdUSzIsIExJQlBFUkwgYW5kXG4tXHQjIExJQlVOV0lORCBzdXBwb3J0IChpZmRlZiBHVEsyIC8gaWZkZWYgTElCUEVSTCAvIExJQlVOV0lORD0xKSxcbitcdCMgYnVpbGRzIGFuZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNhcHN0b25lLCBHVEs0LCBMSUJQRVJMIGFuZFxuK1x0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLNCAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXG4gXHQjIGFuZCBDb3JlU2lnaHQgKGlmZGVmIENPUkVTSUdIVCksIGFyZSBkZWxpYmVyYXRlbHkgbm90IG1hcHBlZC5cbiBcdCMgbGliYWlvIGlzIG5vdCBtYXBwZWQgZWl0aGVyOiBpdHNcbiBcdCMgdGVzdCB1c2VzIHRoZSBQT1NJWCBBSU8gQVBJIChhaW8uaCwgYWlvXyosIC1scnQpLCBwcm92aWRlZCBieVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZSBiL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuaW5kZXggZDJjMmY1MjZlMWRiMC4uMjAyYWI1NTAxOTE2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9tYWtlXG5AQCAtOTUsNyArOTUsNyBAQCBtYWtlX25vX2JhYmVsdHJhY2UyIDo9IE5PX0JBQkVMVFJBQ0UyPTFcbiBtYWtlX3dpdGhfY29yZXNpZ2h0IDo9IENPUkVTSUdIVD0xXG4gbWFrZV9ub19zZHRcdCAgICA6PSBOT19TRFQ9MVxuIG1ha2Vfbm9fbGlicGZtNCAgICAgOj0gTk9fTElCUEZNND0xXG4tbWFrZV93aXRoX2d0azIgICAgICA6PSBHVEsyPTFcbittYWtlX3dpdGhfZ3RrNCAgICAgIDo9IEdUSzQ9MVxuIG1ha2VfcmVmY250X2NoZWNrICAgOj0gRVhUUkFfQ0ZMQUdTPVwiLURSRUZDTlRfQ0hFQ0tJTkc9MVwiXG4gbWFrZV90YWdzICAgICAgICAgICA6PSB0YWdzXG4gbWFrZV9jc2NvcGUgICAgICAgICA6PSBjc2NvcGVcbkBAIC0zMTgsNyArMzE4LDcgQEAgJChydW4pOlxuIFx0JChjYWxsIHRlc3QsJEApIFx1MDAyNlx1MDAyNiBcXFxuIFx0cm0gLXJmICRAICQkVE1QX0RFU1QgfHwgKGNhdCAkQCA7IGZhbHNlKVxuIFxuLW1ha2Vfd2l0aF9ndGsyOlxuK21ha2Vfd2l0aF9ndGs0OlxuIFx0JChjYWxsIGNsZWFuKVxuIFx0QFRNUF9ERVNUPSQkKG1rdGVtcCAtZCk7IFxcXG4gXHRjbWQ9XCJjZCAkKFBFUkYpIFx1MDAyNlx1MDAyNiAkKE1BS0VfRikgJCgkQCkgJChQQVJBTExFTF9PUFQpICQoT19PUFQpIERFU1RESVI9JCRUTVBfREVTVFwiOyBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jXG5pbmRleCA4OTIwZTI5ODQyMGE4Li4wOTRkZmEwNDViNzc0IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuY1xuKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuY1xuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcInVpL2hlbHBsaW5lLmhcIlxuICNpbmNsdWRlIFx1MDAzY2ludHR5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gXG4gZW51bSB7XG4gXHRBTk5fQ09MX19QRVJDRU5ULFxuQEAgLTE2MSw3ICsxNjIsNyBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX19hbm5vdGF0ZV9zeW1ib2woR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBtYXBfc3ltYm9sICptcyxcbiBcdFx0XHRndGtfbGlzdF9zdG9yZV9zZXQoc3RvcmUsIFx1MDAyNml0ZXIsIEFOTl9DT0xfX0xJTkUsIHMsIC0xKTtcbiBcdH1cbiBcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmlldyk7XG4rXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgXHUwMDI2bm90ZXMtXHUwMDNlc3JjLVx1MDAzZXNvdXJjZSwgYWwubm9kZSkge1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnBvcy1cdTAwM2VhbC5ub2RlKTtcbkBAIC0yMDUsNDAgKzIwNiwzNCBAQCBzdGF0aWMgaW50IHN5bWJvbF9fZ3RrX2Fubm90YXRlKHN0cnVjdCBtYXBfc3ltYm9sICptcywgc3RydWN0IGV2c2VsICpldnNlbCxcbiBcdFx0R3RrV2lkZ2V0ICppbmZvYmFyO1xuIFx0XHRHdGtXaWRnZXQgKnN0YXRiYXI7XG4gXG4tXHRcdHNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdFx0c2lnbmFsKFNJR0ZQRSwgIHBlcmZfZ3RrX19zaWduYWwpO1xuLVx0XHRzaWduYWwoU0lHSU5ULCAgcGVyZl9ndGtfX3NpZ25hbCk7XG4tXHRcdHNpZ25hbChTSUdRVUlULCBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdFx0c2lnbmFsKFNJR1RFUk0sIHBlcmZfZ3RrX19zaWduYWwpO1xuK1x0XHRzaWduYWwoU0lHU0VHViwgcGVyZl9ndGtfX2ZhdGFsX3NpZ25hbCk7XG4rXHRcdHNpZ25hbChTSUdGUEUsICBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKTtcbitcdFx0cGVyZl9ndGtfX2luc3RhbGxfcXVpdF9zaWduYWxzKCk7XG4gXG4tXHRcdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpO1xuK1x0XHR3aW5kb3cgPSBndGtfd2luZG93X25ldygpO1xuIFx0XHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIFwicGVyZiBhbm5vdGF0ZVwiKTtcbiBcbi1cdFx0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFwiZGVsZXRlX2V2ZW50XCIsIGd0a19tYWluX3F1aXQsIE5VTEwpO1xuLVxuIFx0XHRwZ2N0eCA9IHBlcmZfZ3RrX19hY3RpdmF0ZV9jb250ZXh0KHdpbmRvdyk7XG4gXHRcdGlmICghcGdjdHgpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuLVx0XHR2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAwKTtcbitcdFx0dmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgMCk7XG4gXHRcdG5vdGVib29rID0gZ3RrX25vdGVib29rX25ldygpO1xuIFx0XHRwZ2N0eC1cdTAwM2Vub3RlYm9vayA9IG5vdGVib29rO1xuIFxuLVx0XHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2ssIFRSVUUsIFRSVUUsIDApO1xuK1x0XHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTtcbitcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spO1xuIFxuIFx0XHRpbmZvYmFyID0gcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKCk7XG4tXHRcdGlmIChpbmZvYmFyKSB7XG4tXHRcdFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGluZm9iYXIsXG4tXHRcdFx0XHRcdCAgIEZBTFNFLCBGQUxTRSwgMCk7XG4tXHRcdH1cbitcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgaW5mb2Jhcik7XG4gXG4gXHRcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBzdGF0YmFyLCBGQUxTRSwgRkFMU0UsIDApO1xuK1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTtcbiBcbi1cdFx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTtcbitcdFx0Z3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyh3aW5kb3cpLCB2Ym94KTtcbiBcdH1cbiBcbi1cdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpO1xuK1x0c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTtcbiBcdHRhYl9sYWJlbCA9IGd0a19sYWJlbF9uZXcoc3ltLVx1MDAzZW5hbWUpO1xuIFxuIFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSxcbkBAIC0yNjcsMTIgKzI2MiwxMSBAQCB2b2lkIHBlcmZfZ3RrX19zaG93X2Fubm90YXRpb25zKHZvaWQpXG4gXHRcdHJldHVybjtcbiBcbiBcdHdpbmRvdyA9IHBnY3R4LVx1MDAzZW1haW5fd2luZG93O1xuLVx0Z3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3cod2luZG93KTtcbi1cdGd0a193aW5kb3dfc2V0X3Bvc2l0aW9uKEdUS19XSU5ET1cod2luZG93KSwgR1RLX1dJTl9QT1NfQ0VOVEVSKTtcbitcdGd0a193aWRnZXRfc2V0X3Zpc2libGUod2luZG93LCBUUlVFKTtcbiBcbi1cdGd0a19tYWluKCk7XG4rXHRwZXJmX2d0a19fcnVuX21haW5fbG9vcCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dChcdTAwMjZwZ2N0eCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xuaW5kZXggZDJkYWRmMzg3M2ZiZC4uOThmMWQ2YmZjYjI0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xuKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jXG5AQCAtNSwzMiArNSw5MiBAQFxuICNpbmNsdWRlIFwiLi4vaGlzdC5oXCJcbiAjaW5jbHVkZSBcIi4uL2hlbHBsaW5lLmhcIlxuIFxuKyNpbmNsdWRlIFx1MDAzY2dsaWItdW5peC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiBcbi12b2lkIHBlcmZfZ3RrX19zaWduYWwoaW50IHNpZylcbisvKlxuKyAqIFNJR0lOVC9TSUdRVUlUL1NJR1RFUk0gYXJlIGFzeW5jaHJvbm91czogZGVmZXJyaW5nIHRoZSBhY3R1YWwgZXhpdCB0byBhXG4rICogR0xpYiBzb3VyY2UgZGlzcGF0Y2hlZCBmcm9tIHRoZSBtYWluIGxvb3AgbWVhbnMgaXQgYWx3YXlzIHJ1bnMgb24gdGhlXG4rICogbWFpbiB0aHJlYWQsIHNlcmlhbGl6ZWQgd2l0aCBldmVyeXRoaW5nIGVsc2UgdGhlIG1haW4gbG9vcCBkb2VzXG4rICogKGluY2x1ZGluZyBwZXJmX2d0a19fZXJyb3IoKSdzIHVwZGF0ZXMgdG8gcGVyZl9ndGtfX2Vycm9yX2xvb3BzKSwgaW5zdGVhZFxuKyAqIG9mIHJhY2luZyB0aGVtIGZyb20gYXJiaXRyYXJ5IHNpZ25hbC1oYW5kbGVyIGNvbnRleHQuXG4rICovXG4rc3RhdGljIGdib29sZWFuIHBlcmZfZ3RrX19xdWl0X3NpZ25hbChncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKVxuIHtcbiBcdHBlcmZfZ3RrX19leGl0KGZhbHNlKTtcbitcdHJldHVybiBHX1NPVVJDRV9SRU1PVkU7XG4rfVxuK1xuK3ZvaWQgcGVyZl9ndGtfX2luc3RhbGxfcXVpdF9zaWduYWxzKHZvaWQpXG4re1xuK1x0Z191bml4X3NpZ25hbF9hZGQoU0lHSU5ULCAgcGVyZl9ndGtfX3F1aXRfc2lnbmFsLCBOVUxMKTtcbitcdGdfdW5peF9zaWduYWxfYWRkKFNJR1FVSVQsIHBlcmZfZ3RrX19xdWl0X3NpZ25hbCwgTlVMTCk7XG4rXHRnX3VuaXhfc2lnbmFsX2FkZChTSUdURVJNLCBwZXJmX2d0a19fcXVpdF9zaWduYWwsIE5VTEwpO1xuK31cbitcbisvKlxuKyAqIFNJR1NFR1YvU0lHRlBFIGFyZSBzeW5jaHJvbm91cyBmYXVsdHM6IHRoZXJlJ3Mgbm8gXCJsYXRlclwiIHRvIGRlZmVyIHRvLFxuKyAqIGFuZCBubyBzYWZlIHdheSB0byBydW4gR1RLL0dMaWIgY29kZSAob3IgYW55dGhpbmcgZWxzZSBub24tYXN5bmMtc2lnbmFsLVxuKyAqIHNhZmUpIGZyb20gdGhlIGZhdWx0aW5nIGNvbnRleHQuIFJlcG9ydCBhbmQgbGV0IHRoZSBkZWZhdWx0IGRpc3Bvc2l0aW9uXG4rICogKGNvcmUgZHVtcCkgaGFwcGVuIGluc3RlYWQgb2YgdHJ5aW5nIHRvIHRlYXIgZG93biBHVEsgc3RhdGUgaGVyZS5cbisgKi9cbit2b2lkIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwoaW50IHNpZylcbit7XG4gXHRwc2lnbmFsKHNpZywgXCJwZXJmXCIpO1xuK1x0c2lnbmFsKHNpZywgU0lHX0RGTCk7XG4rXHRyYWlzZShzaWcpO1xuIH1cbiBcbiB2b2lkIHBlcmZfZ3RrX19yZXNpemVfd2luZG93KEd0a1dpZGdldCAqd2luZG93KVxuIHtcbiBcdEdka1JlY3RhbmdsZSByZWN0O1xuLVx0R2RrU2NyZWVuICpzY3JlZW47XG4tXHRpbnQgbW9uaXRvcjtcbitcdEdka01vbml0b3IgKm1vbml0b3I7XG4rXHRHZGtEaXNwbGF5ICpkaXNwbGF5O1xuK1x0R0xpc3RNb2RlbCAqbW9uaXRvcnM7XG4gXHRpbnQgaGVpZ2h0O1xuIFx0aW50IHdpZHRoO1xuIFxuLVx0c2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHdpbmRvdyk7XG4rXHRkaXNwbGF5ID0gZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aW5kb3cpO1xuK1x0bW9uaXRvcnMgPSBnZGtfZGlzcGxheV9nZXRfbW9uaXRvcnMoZGlzcGxheSk7XG4rXHRtb25pdG9yID0gZ19saXN0X21vZGVsX2dldF9pdGVtKG1vbml0b3JzLCAwKTtcbitcdGlmICghbW9uaXRvcikge1xuK1x0XHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA4MDAsIDYwMCk7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbi1cdG1vbml0b3IgPSBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2F0X3dpbmRvdyhzY3JlZW4sIHdpbmRvdy1cdTAwM2V3aW5kb3cpO1xuLVxuLVx0Z2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIG1vbml0b3IsIFx1MDAyNnJlY3QpO1xuK1x0Z2RrX21vbml0b3JfZ2V0X2dlb21ldHJ5KG1vbml0b3IsIFx1MDAyNnJlY3QpO1xuK1x0Z19vYmplY3RfdW5yZWYobW9uaXRvcik7XG4gXG4gXHR3aWR0aFx0PSByZWN0LndpZHRoICogMyAvIDQ7XG4gXHRoZWlnaHRcdD0gcmVjdC5oZWlnaHQgKiAzIC8gNDtcbiBcbi1cdGd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1cod2luZG93KSwgd2lkdGgsIGhlaWdodCk7XG4rXHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTtcbit9XG4rXG4rc3RhdGljIEdNYWluTG9vcCAqcGVyZl9ndGtfX21haW5fbG9vcDtcbitcbit2b2lkIHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCh2b2lkKVxuK3tcbitcdGlmIChwZXJmX2d0a19fbWFpbl9sb29wKVxuK1x0XHRnX21haW5fbG9vcF9xdWl0KHBlcmZfZ3RrX19tYWluX2xvb3ApO1xuK31cbitcbitzdGF0aWMgZ2Jvb2xlYW4gcGVyZl9ndGtfX2Nsb3NlX3JlcXVlc3QoR3RrV2lkZ2V0ICp3aWRnZXQgX19tYXliZV91bnVzZWQsXG4rXHRcdFx0XHRcdGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4re1xuK1x0cGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKCk7XG4rXG4rXHRyZXR1cm4gRkFMU0U7XG4rfVxuK1xuK3ZvaWQgcGVyZl9ndGtfX3J1bl9tYWluX2xvb3AoR3RrV2lkZ2V0ICp3aW5kb3cpXG4re1xuK1x0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFwiY2xvc2UtcmVxdWVzdFwiLFxuK1x0XHRcdCBHX0NBTExCQUNLKHBlcmZfZ3RrX19jbG9zZV9yZXF1ZXN0KSwgTlVMTCk7XG4rXG4rXHRwZXJmX2d0a19fbWFpbl9sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIEZBTFNFKTtcbitcdGdfbWFpbl9sb29wX3J1bihwZXJmX2d0a19fbWFpbl9sb29wKTtcbitcdGdfY2xlYXJfcG9pbnRlcihcdTAwMjZwZXJmX2d0a19fbWFpbl9sb29wLCBnX21haW5fbG9vcF91bnJlZik7XG4gfVxuIFxuIGNvbnN0IGNoYXIgKnBlcmZfZ3RrX19nZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudClcbkBAIC00MiwzMyArMTAyLDM1IEBAIGNvbnN0IGNoYXIgKnBlcmZfZ3RrX19nZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVFxuK3N0YXRpYyB2b2lkIHBlcmZfZ3RrX19oaWRlX3dpZGdldChHdGtXaWRnZXQgKndpZGdldCwgZ2ludCByZXNwb25zZV9pZCBfX21heWJlX3VudXNlZCxcbitcdFx0XHRcdCAgIGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4re1xuK1x0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aWRnZXQsIEZBTFNFKTtcbit9XG4rXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcbiB7XG4gXHRHdGtXaWRnZXQgKmluZm9fYmFyO1xuIFx0R3RrV2lkZ2V0ICpsYWJlbDtcbi1cdEd0a1dpZGdldCAqY29udGVudF9hcmVhO1xuIFxuIFx0aW5mb19iYXIgPSBndGtfaW5mb19iYXJfbmV3KCk7XG4tXHRndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbChpbmZvX2JhciwgVFJVRSk7XG4rXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGluZm9fYmFyLCBGQUxTRSk7XG4gXG4gXHRsYWJlbCA9IGd0a19sYWJlbF9uZXcoXCJcIik7XG4tXHRndGtfd2lkZ2V0X3Nob3cobGFiZWwpO1xuK1x0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZShsYWJlbCwgVFJVRSk7XG4gXG4tXHRjb250ZW50X2FyZWEgPSBndGtfaW5mb19iYXJfZ2V0X2NvbnRlbnRfYXJlYShHVEtfSU5GT19CQVIoaW5mb19iYXIpKTtcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGVudF9hcmVhKSwgbGFiZWwpO1xuK1x0Z3RrX2luZm9fYmFyX2FkZF9jaGlsZChHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBsYWJlbCk7XG4gXG4tXHRndGtfaW5mb19iYXJfYWRkX2J1dHRvbihHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBHVEtfU1RPQ0tfT0ssXG4rXHRndGtfaW5mb19iYXJfYWRkX2J1dHRvbihHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBcIl9PS1wiLFxuIFx0XHRcdFx0R1RLX1JFU1BPTlNFX09LKTtcbiBcdGdfc2lnbmFsX2Nvbm5lY3QoaW5mb19iYXIsIFwicmVzcG9uc2VcIixcbi1cdFx0XHQgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2hpZGUpLCBOVUxMKTtcbitcdFx0XHQgR19DQUxMQkFDSyhwZXJmX2d0a19faGlkZV93aWRnZXQpLCBOVUxMKTtcbiBcbiBcdHBnY3R4LVx1MDAzZWluZm9fYmFyID0gaW5mb19iYXI7XG4gXHRwZ2N0eC1cdTAwM2VtZXNzYWdlX2xhYmVsID0gbGFiZWw7XG4gXG4gXHRyZXR1cm4gaW5mb19iYXI7XG4gfVxuLSNlbmRpZlxuIFxuIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX3N0YXR1c2Jhcih2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9ndGsuaCBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXG5pbmRleCBhMmI0OTdmMDNmZDZlLi42YjM3ZmQ5OTQzYzlkIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmhcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXG5AQCAtMTMsMTAgKzEzLDggQEAgc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQge1xuIFx0R3RrV2lkZ2V0ICptYWluX3dpbmRvdztcbiBcdEd0a1dpZGdldCAqbm90ZWJvb2s7XG4gXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBcdEd0a1dpZGdldCAqaW5mb19iYXI7XG4gXHRHdGtXaWRnZXQgKm1lc3NhZ2VfbGFiZWw7XG4tI2VuZGlmXG4gXHRHdGtXaWRnZXQgKnN0YXRiYXI7XG4gXHRndWludCBzdGF0YmFyX2N0eF9pZDtcbiB9O1xuQEAgLTM4LDE5ICszNiwxNSBAQCB2b2lkIHBlcmZfZ3RrX19pbml0X2hlbHBsaW5lKHZvaWQpO1xuIHZvaWQgZ3RrX3VpX3Byb2dyZXNzX19pbml0KHZvaWQpO1xuIHZvaWQgcGVyZl9ndGtfX2luaXRfaHBwKHZvaWQpO1xuIFxuLXZvaWQgcGVyZl9ndGtfX3NpZ25hbChpbnQgc2lnKTtcbit2b2lkIHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscyh2b2lkKTtcbit2b2lkIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwoaW50IHNpZyk7XG4gdm9pZCBwZXJmX2d0a19fcmVzaXplX3dpbmRvdyhHdGtXaWRnZXQgKndpbmRvdyk7XG4rdm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdyk7XG4rdm9pZCBwZXJmX2d0a19fcXVpdF9tYWluX2xvb3Aodm9pZCk7XG4rdm9pZCBwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2codm9pZCk7XG4gY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KTtcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIodm9pZCk7XG4tXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKTtcbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcbi17XG4tXHRyZXR1cm4gTlVMTDtcbi19XG4tI2VuZGlmXG4gXG4gc3RydWN0IGV2c2VsO1xuIHN0cnVjdCBldmxpc3Q7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmNcbmluZGV4IGJhZTIxZjMzNmFlNmQuLjM0MmQ0YzNmZWNiMDEgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXG5AQCAtOCw2ICs4LDggQEBcbiAjaW5jbHVkZSBcIi4uL2hlbHBsaW5lLmhcIlxuICNpbmNsdWRlIFwiLi4vc3RyaW5nMi5oXCJcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGFyZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiBcbkBAIC0zOTUsMTEgKzM5Nyw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpc3RzKEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRndGtfdHJlZV92aWV3X3NldF9ydWxlc19oaW50KEdUS19UUkVFX1ZJRVcodmlldyksIFRSVUUpO1xuLVxuIFx0Z19zaWduYWxfY29ubmVjdCh2aWV3LCBcInJvdy1hY3RpdmF0ZWRcIixcbiBcdFx0XHQgR19DQUxMQkFDSyhvbl9yb3dfYWN0aXZhdGVkKSwgTlVMTCk7XG4tXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xuK1x0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuQEAgLTQ0OSw3ICs0NDksNyBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fYWRkX2hpZXJhcmNoeV9lbnRyaWVzKHN0cnVjdCBoaXN0cyAqaGlzdHMsXG4gXHRcdGJmID0gaHBwLVx1MDAzZWJ1ZjtcbiBcdFx0c2l6ZSA9IGhwcC1cdTAwM2VzaXplO1xuIFx0XHRwZXJmX2hwcF9saXN0X19mb3JfZWFjaF9mb3JtYXQoaGUtXHUwMDNlaHBwX2xpc3QsIGZtdCkge1xuLVx0XHRcdGludCByZXQ7XG4rXHRcdFx0aW50IHJldCwgaW5jO1xuIFxuIFx0XHRcdGlmIChmbXQtXHUwMDNlY29sb3IpXG4gXHRcdFx0XHRyZXQgPSBmbXQtXHUwMDNlY29sb3IoZm10LCBocHAsIGhlKTtcbkBAIC00NTcsNyArNDU3LDE4IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoc3RydWN0IGhpc3RzICpoaXN0cyxcbiBcdFx0XHRcdHJldCA9IGZtdC1cdTAwM2VlbnRyeShmbXQsIGhwcCwgaGUpO1xuIFxuIFx0XHRcdHNucHJpbnRmKGhwcC1cdTAwM2VidWYgKyByZXQsIGhwcC1cdTAwM2VzaXplIC0gcmV0LCBcIiAgXCIpO1xuLVx0XHRcdGFkdmFuY2VfaHBwKGhwcCwgcmV0ICsgMik7XG4rXHRcdFx0LypcbitcdFx0XHQgKiByZXQgY2FuIGJlIGFzIGxhcmdlIGFzIGhwcC1cdTAwM2VzaXplIC0gMSwgc28gcmV0ICsgMlxuK1x0XHRcdCAqIGNhbiBleGNlZWQgaHBwLVx1MDAzZXNpemUuIGFkdmFuY2VfaHBwKCkgZG9lc24ndCBjbGFtcCxcbitcdFx0XHQgKiBzbyBwYXNzaW5nIHRoYXQgdGhyb3VnaCB3b3VsZCB1bmRlcmZsb3cgdGhlXG4rXHRcdFx0ICogc2l6ZV90IGhwcC1cdTAwM2VzaXplIGFuZCBsZXQgYSBsYXRlciBmbXQtXHUwMDNlZW50cnkoKSBpblxuK1x0XHRcdCAqIHRoaXMgbG9vcCB3cml0ZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGNhbGxlcidzXG4rXHRcdFx0ICogc3RhY2sgYnVmZmVyLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGluYyA9IHJldCArIDI7XG4rXHRcdFx0aWYgKGluYyBcdTAwM2UgKGludClocHAtXHUwMDNlc2l6ZSlcbitcdFx0XHRcdGluYyA9IGhwcC1cdTAwM2VzaXplO1xuK1x0XHRcdGFkdmFuY2VfaHBwKGhwcCwgaW5jKTtcbiBcdFx0fVxuIFxuIFx0XHRndGtfdHJlZV9zdG9yZV9zZXQoc3RvcmUsIFx1MDAyNml0ZXIsIGNvbF9pZHgsIHN0cmltKGJmKSwgLTEpO1xuQEAgLTUwNSw2ICs1MTYsNyBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXG4gXHRHdGtXaWRnZXQgKnZpZXc7XG4gXHRpbnQgY29sX2lkeDtcbiBcdGludCBucl9jb2xzID0gMDtcbitcdGludCByZXQ7XG4gXHRjaGFyIHNbNTEyXTtcbiBcdGNoYXIgYnVmWzUxMl07XG4gXHRib29sIGZpcnN0X25vZGUsIGZpcnN0X2NvbDtcbkBAIC01NDEsOSArNTUzLDEwIEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpZXJhcmNoeShHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cyxcbiBcdC8qIGNvbnN0cnVjdCBtZXJnZWQgY29sdW1uIGhlYWRlciBzaW5jZSBzb3J0IGtleXMgc2hhcmUgc2luZ2xlIGNvbHVtbiAqL1xuIFx0YnVmWzBdID0gJ1xcMCc7XG4gXHRmaXJzdF9ub2RlID0gdHJ1ZTtcbitcdHJldCA9IDA7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKGZtdF9ub2RlLCBcdTAwMjZoaXN0cy1cdTAwM2VocHBfZm9ybWF0cywgbGlzdCkge1xuIFx0XHRpZiAoIWZpcnN0X25vZGUpXG4tXHRcdFx0c3RyY2F0KGJ1ZiwgXCIgLyBcIik7XG4rXHRcdFx0cmV0ICs9IHNjbnByaW50ZihidWYgKyByZXQsIHNpemVvZihidWYpIC0gcmV0LCBcIiAvIFwiKTtcbiBcdFx0Zmlyc3Rfbm9kZSA9IGZhbHNlO1xuIFxuIFx0XHRmaXJzdF9jb2wgPSB0cnVlO1xuQEAgLTU1MiwxMSArNTY1LDExIEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpZXJhcmNoeShHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cyxcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdGlmICghZmlyc3RfY29sKVxuLVx0XHRcdFx0c3RyY2F0KGJ1ZiwgXCIrXCIpO1xuK1x0XHRcdFx0cmV0ICs9IHNjbnByaW50ZihidWYgKyByZXQsIHNpemVvZihidWYpIC0gcmV0LCBcIitcIik7XG4gXHRcdFx0Zmlyc3RfY29sID0gZmFsc2U7XG4gXG4gXHRcdFx0Zm10LVx1MDAzZWhlYWRlcihmbXQsIFx1MDAyNmhwcCwgaGlzdHMsIDAsIE5VTEwpO1xuLVx0XHRcdHN0cmNhdChidWYsIHN0cmltKGhwcC5idWYpKTtcbitcdFx0XHRyZXQgKz0gc2NucHJpbnRmKGJ1ZiArIHJldCwgc2l6ZW9mKGJ1ZikgLSByZXQsIFwiJXNcIiwgc3RyaW0oaHBwLmJ1ZikpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNTgzLDExICs1OTYsOSBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXG4gXHRwZXJmX2d0a19fYWRkX2hpZXJhcmNoeV9lbnRyaWVzKGhpc3RzLCBcdTAwMjZoaXN0cy1cdTAwM2VlbnRyaWVzLCBzdG9yZSxcbiBcdFx0XHRcdFx0TlVMTCwgXHUwMDI2aHBwLCBtaW5fcGNudCk7XG4gXG4tXHRndGtfdHJlZV92aWV3X3NldF9ydWxlc19oaW50KEdUS19UUkVFX1ZJRVcodmlldyksIFRSVUUpO1xuLVxuIFx0Z19zaWduYWxfY29ubmVjdCh2aWV3LCBcInJvdy1hY3RpdmF0ZWRcIixcbiBcdFx0XHQgR19DQUxMQkFDSyhvbl9yb3dfYWN0aXZhdGVkKSwgTlVMTCk7XG4tXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xuK1x0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTtcbiB9XG4gXG4gaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXG5AQCAtNjAwLDM2ICs2MTEsMzIgQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXG4gXHRHdGtXaWRnZXQgKnN0YXRiYXI7XG4gXHRHdGtXaWRnZXQgKndpbmRvdztcbiBcbi1cdHNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdHNpZ25hbChTSUdGUEUsICBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdHNpZ25hbChTSUdJTlQsICBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdHNpZ25hbChTSUdRVUlULCBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdHNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTtcbitcdHNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKTtcbitcdHNpZ25hbChTSUdGUEUsICBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKTtcbitcdHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscygpO1xuIFxuLVx0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7XG4rXHR3aW5kb3cgPSBndGtfd2luZG93X25ldygpO1xuIFxuIFx0Z3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyh3aW5kb3cpLCBcInBlcmYgcmVwb3J0XCIpO1xuIFxuLVx0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFwiZGVsZXRlX2V2ZW50XCIsIGd0a19tYWluX3F1aXQsIE5VTEwpO1xuLVxuIFx0cGdjdHggPSBwZXJmX2d0a19fYWN0aXZhdGVfY29udGV4dCh3aW5kb3cpO1xuIFx0aWYgKCFwZ2N0eClcbiBcdFx0cmV0dXJuIC0xO1xuIFxuLVx0dmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7XG4rXHR2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTtcbiBcbiBcdG5vdGVib29rID0gZ3RrX25vdGVib29rX25ldygpO1xuIFxuLVx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIG5vdGVib29rLCBUUlVFLCBUUlVFLCAwKTtcbitcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQobm90ZWJvb2ssIFRSVUUpO1xuK1x0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spO1xuIFxuIFx0aW5mb19iYXIgPSBwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIoKTtcbi1cdGlmIChpbmZvX2Jhcilcbi1cdFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGluZm9fYmFyLCBGQUxTRSwgRkFMU0UsIDApO1xuK1x0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgaW5mb19iYXIpO1xuIFxuIFx0c3RhdGJhciA9IHBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIoKTtcbi1cdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBzdGF0YmFyLCBGQUxTRSwgRkFMU0UsIDApO1xuK1x0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhcik7XG4gXG4tXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZib3gpO1xuK1x0Z3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyh3aW5kb3cpLCB2Ym94KTtcbiBcbiBcdGV2bGlzdF9fZm9yX2VhY2hfZW50cnkoZXZsaXN0LCBwb3MpIHtcbiBcdFx0c3RydWN0IGhpc3RzICpoaXN0cyA9IGV2c2VsX19oaXN0cyhwb3MpO1xuQEAgLTY0OSw3ICs2NTYsNyBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcbiBcdFx0XHR9XG4gXHRcdH1cbiBcbi1cdFx0c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7XG4rXHRcdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KCk7XG4gXG4gXHRcdGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksXG4gXHRcdFx0XHRcdFx0XHRHVEtfUE9MSUNZX0FVVE9NQVRJQyxcbkBAIC02NjUsMTUgKzY3MiwxMiBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcbiBcdFx0Z3RrX25vdGVib29rX2FwcGVuZF9wYWdlKEdUS19OT1RFQk9PSyhub3RlYm9vayksIHNjcm9sbGVkX3dpbmRvdywgdGFiX2xhYmVsKTtcbiBcdH1cbiBcbi1cdGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTtcbi1cbiBcdHBlcmZfZ3RrX19yZXNpemVfd2luZG93KHdpbmRvdyk7XG4tXG4tXHRndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKHdpbmRvdyksIEdUS19XSU5fUE9TX0NFTlRFUik7XG4rXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpbmRvdywgVFJVRSk7XG4gXG4gXHR1aV9oZWxwbGluZV9fcHVzaChoZWxwKTtcbiBcbi1cdGd0a19tYWluKCk7XG4rXHRwZXJmX2d0a19fcnVuX21haW5fbG9vcCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dChcdTAwMjZwZ2N0eCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmNcbmluZGV4IGVlYTZmY2RlNTE4YTguLjc3MGY5MjUxYjU0YjcgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jXG5AQCAtMSw0OSArMSw2NSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gI2luY2x1ZGUgXHUwMDNjaW50dHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImd0ay5oXCJcbiAjaW5jbHVkZSBcIi4uL3Byb2dyZXNzLmhcIlxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiBcbiBzdGF0aWMgR3RrV2lkZ2V0ICpkaWFsb2c7XG4gc3RhdGljIEd0a1dpZGdldCAqcHJvZ3Jlc3M7XG4gXG4rc3RhdGljIHZvaWQgZ3RrX3VpX3Byb2dyZXNzX19kZXN0cm95ZWQoR3RrV2lkZ2V0ICp3aWRnZXQgX19tYXliZV91bnVzZWQsXG4rXHRcdFx0XHRcdGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4re1xuK1x0ZGlhbG9nID0gTlVMTDtcbitcdHByb2dyZXNzID0gTlVMTDtcbit9XG4rXG4gc3RhdGljIHZvaWQgZ3RrX3VpX3Byb2dyZXNzX191cGRhdGUoc3RydWN0IHVpX3Byb2dyZXNzICpwKVxuIHtcbiBcdGRvdWJsZSBmcmFjdGlvbiA9IHAtXHUwMDNldG90YWwgPyAxLjAgKiBwLVx1MDAzZWN1cnIgLyBwLVx1MDAzZXRvdGFsIDogMC4wO1xuIFx0Y2hhciBidWZbMTAyNF07XG4gXG4gXHRpZiAoZGlhbG9nID09IE5VTEwpIHtcbi1cdFx0R3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX3Zib3hfbmV3KFRSVUUsIDUpO1xuK1x0XHRHdGtXaWRnZXQgKnZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDUpO1xuIFx0XHRHdGtXaWRnZXQgKmxhYmVsID0gZ3RrX2xhYmVsX25ldyhwLVx1MDAzZXRpdGxlKTtcbiBcbi1cdFx0ZGlhbG9nID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7XG4rXHRcdGRpYWxvZyA9IGd0a193aW5kb3dfbmV3KCk7XG4gXHRcdHByb2dyZXNzID0gZ3RrX3Byb2dyZXNzX2Jhcl9uZXcoKTtcbiBcbi1cdFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGxhYmVsLCBUUlVFLCBGQUxTRSwgMyk7XG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBwcm9ncmVzcywgVFJVRSwgVFJVRSwgMyk7XG4rXHRcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQobGFiZWwsIFRSVUUpO1xuK1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBsYWJlbCk7XG4rXHRcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQocHJvZ3Jlc3MsIFRSVUUpO1xuK1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBwcm9ncmVzcyk7XG4rXG4rXHRcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1coZGlhbG9nKSwgdmJveCk7XG4gXG4tXHRcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoZGlhbG9nKSwgdmJveCk7XG4rXHRcdGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCBcImRlc3Ryb3lcIixcbitcdFx0XHRcdCBHX0NBTExCQUNLKGd0a191aV9wcm9ncmVzc19fZGVzdHJveWVkKSwgTlVMTCk7XG4gXG4gXHRcdGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1coZGlhbG9nKSwgXCJwZXJmXCIpO1xuLVx0XHRndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKGRpYWxvZyksIDMwMCwgODApO1xuLVx0XHRndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKGRpYWxvZyksIEdUS19XSU5fUE9TX0NFTlRFUik7XG4rXHRcdGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKGRpYWxvZyksIDMwMCwgODApO1xuIFxuLVx0XHRndGtfd2lkZ2V0X3Nob3dfYWxsKGRpYWxvZyk7XG4rXHRcdGd0a193aWRnZXRfc2V0X3Zpc2libGUoZGlhbG9nLCBUUlVFKTtcbiBcdH1cbiBcbiBcdGd0a19wcm9ncmVzc19iYXJfc2V0X2ZyYWN0aW9uKEdUS19QUk9HUkVTU19CQVIocHJvZ3Jlc3MpLCBmcmFjdGlvbik7XG4gXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiVcIlBSSXU2NFwiIC8gJVwiUFJJdTY0LCBwLVx1MDAzZWN1cnIsIHAtXHUwMDNldG90YWwpO1xuIFx0Z3RrX3Byb2dyZXNzX2Jhcl9zZXRfdGV4dChHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwgYnVmKTtcbiBcbi1cdC8qIHdlIGRpZG4ndCBjYWxsIGd0a19tYWluIHlldCwgc28gZG8gaXQgbWFudWFsbHkgKi9cbi1cdHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSlcbi1cdFx0Z3RrX21haW5faXRlcmF0aW9uKCk7XG4rXHQvKiB3ZSBkaWRuJ3Qgc3RhcnQgYSBtYWluIGxvb3AgeWV0LCBzbyBwdW1wIGV2ZW50cyBtYW51YWxseSAqL1xuK1x0d2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpXG4rXHRcdGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZmluaXNoKHZvaWQpXG4ge1xuK1x0aWYgKGRpYWxvZyA9PSBOVUxMKVxuK1x0XHRyZXR1cm47XG4rXG4gXHQvKiB0aGlzIHdpbGwgYWxzbyBkZXN0cm95IGFsbCBvZiBpdHMgY2hpbGRyZW4gKi9cbi1cdGd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpO1xuK1x0Z3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7XG4gXG4gXHRkaWFsb2cgPSBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuY1xuaW5kZXggZjVlZWU0ZDY2ODczOC4uOWI0NGYzNzE5NzQ3NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcbkBAIC0xMiw3ICsxMiw3IEBAIGludCBwZXJmX2d0a19faW5pdCh2b2lkKVxuIFx0Z3RrX3VpX3Byb2dyZXNzX19pbml0KCk7XG4gXHRwZXJmX2d0a19faW5pdF9ocHAoKTtcbiBcbi1cdHJldHVybiBndGtfaW5pdF9jaGVjayhOVUxMLCBOVUxMKSA/IDAgOiAtMTtcbitcdHJldHVybiBndGtfaW5pdF9jaGVjaygpID8gMCA6IC0xO1xuIH1cbiBcbiB2b2lkIHBlcmZfZ3RrX19leGl0KGJvb2wgd2FpdF9mb3Jfb2sgX19tYXliZV91bnVzZWQpXG5AQCAtMjAsNSArMjAsNiBAQCB2b2lkIHBlcmZfZ3RrX19leGl0KGJvb2wgd2FpdF9mb3Jfb2sgX19tYXliZV91bnVzZWQpXG4gXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkpXG4gXHRcdHJldHVybjtcbiBcdHBlcmZfZXJyb3JfX3VucmVnaXN0ZXIoXHUwMDI2cGVyZl9ndGtfZW9wcyk7XG4tXHRndGtfbWFpbl9xdWl0KCk7XG4rXHRwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2coKTtcbitcdHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmMgYi90b29scy9wZXJmL3VpL2d0ay91dGlsLmNcbmluZGV4IGM0N2Y1YzM4NzgzOGMuLjU4MjNmZjBkN2MyYTcgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmNcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xuQEAgLTIsOCArMiwxMCBAQFxuICNpbmNsdWRlIFwiLi4vdXRpbC5oXCJcbiAjaW5jbHVkZSBcImd0ay5oXCJcbiBcbisjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3phbGxvYy5oXHUwMDNlXG4gXG4gc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQgKnBnY3R4O1xuQEAgLTI4LDg2ICszMCwxMDMgQEAgaW50IHBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQgKipjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBwZXJmX2d0a19fZXJyb3IoKSBjYW4gYmUgY2FsbGVkIHJlLWVudHJhbnRseSwgc2luY2UgdGhlIGRpYWxvZyBpc24ndFxuKyAqIG1vZGFsIGFuZCBpdHMgbmVzdGVkIGxvb3Agc3RpbGwgcHVtcHMgZXZlbnRzIGZvciB0aGUgbWFpbiB3aW5kb3cuXG4rICogVHJhY2sgZXZlcnkgY3VycmVudGx5IHJ1bm5pbmcgbG9vcCBpbnN0ZWFkIG9mIGEgc2luZ2xlIHBvaW50ZXIsIHNvIGFcbisgKiBuZXN0ZWQgY2FsbCBjYW4ndCBjbG9iYmVyIGFuIG91dGVyIGNhbGwncyBsb29wIGFuZCBsZWFrIGl0LlxuKyAqL1xuK3N0YXRpYyBHU0xpc3QgKnBlcmZfZ3RrX19lcnJvcl9sb29wcztcbitcbitzdGF0aWMgdm9pZCBwZXJmX2d0a19fcXVpdF9sb29wKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSBfX21heWJlX3VudXNlZClcbit7XG4rXHRnX21haW5fbG9vcF9xdWl0KGRhdGEpO1xuK31cbitcbit2b2lkIHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZyh2b2lkKVxuK3tcbitcdGdfc2xpc3RfZm9yZWFjaChwZXJmX2d0a19fZXJyb3JfbG9vcHMsIHBlcmZfZ3RrX19xdWl0X2xvb3AsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBwZXJmX2d0a19fZGlhbG9nX3Jlc3BvbnNlKEd0a0RpYWxvZyAqZGlhbG9nLFxuK1x0XHRcdFx0ICAgICAgZ2ludCByZXNwb25zZV9pZCBfX21heWJlX3VudXNlZCxcbitcdFx0XHRcdCAgICAgIGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4re1xuK1x0Z3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcGVyZl9ndGtfX2Vycm9yKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxuIHtcbiBcdGNoYXIgKm1zZztcbiBcdEd0a1dpZGdldCAqZGlhbG9nO1xuK1x0R01haW5Mb29wICpsb29wO1xuK1x0dmFfbGlzdCBhcmdzX2NvcHk7XG4gXG4rXHR2YV9jb3B5KGFyZ3NfY29weSwgYXJncyk7XG4gXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHxcbi1cdCAgICB2YXNwcmludGYoXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3MpIFx1MDAzYyAwKSB7XG4rXHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzX2NvcHkpIFx1MDAzYyAwKSB7XG4rXHRcdHZhX2VuZChhcmdzX2NvcHkpO1xuIFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjpcXG5cIik7XG4gXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuXCIpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4rXHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcbiBcdGRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXdfd2l0aF9tYXJrdXAoR1RLX1dJTkRPVyhwZ2N0eC1cdTAwM2VtYWluX3dpbmRvdyksXG4gXHRcdFx0XHRcdEdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCxcbiBcdFx0XHRcdFx0R1RLX01FU1NBR0VfRVJST1IsXG4gXHRcdFx0XHRcdEdUS19CVVRUT05TX0NMT1NFLFxuIFx0XHRcdFx0XHRcIlx1MDAzY2JcdTAwM2VFcnJvclx1MDAzYy9iXHUwMDNlXFxuXFxuJXNcIiwgbXNnKTtcbi1cdGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7XG4gXG4tXHRndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTtcbitcdC8qXG4rXHQgKiBcInJlc3BvbnNlXCIgb25seSBmaXJlcyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQ7IERFU1RST1lfV0lUSF9QQVJFTlRcbitcdCAqIGRlc3Ryb3lzIHRoZSBkaWFsb2cgZGlyZWN0bHkgd2l0aG91dCBpdC4gUXVpdCBmcm9tIFwiZGVzdHJveVwiXG4rXHQgKiBpbnN0ZWFkLCB3aGljaCBmaXJlcyBlaXRoZXIgd2F5LCBzbyB0aGUgbmVzdGVkIGxvb3AgYmVsb3cgY2FuJ3RcbitcdCAqIG91dGxpdmUgdGhlIGRpYWxvZyBhbmQgaGFuZy5cbitcdCAqL1xuK1x0bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBGQUxTRSk7XG4rXHRwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3ByZXBlbmQocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBsb29wKTtcbitcdGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCBcInJlc3BvbnNlXCIsXG4rXHRcdFx0IEdfQ0FMTEJBQ0socGVyZl9ndGtfX2RpYWxvZ19yZXNwb25zZSksIE5VTEwpO1xuK1x0Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGRpYWxvZywgXCJkZXN0cm95XCIsXG4rXHRcdFx0XHQgR19DQUxMQkFDSyhnX21haW5fbG9vcF9xdWl0KSwgbG9vcCk7XG4rXG4rXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGRpYWxvZywgVFJVRSk7XG4rXHRnX21haW5fbG9vcF9ydW4obG9vcCk7XG4rXHRwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3JlbW92ZShwZXJmX2d0a19fZXJyb3JfbG9vcHMsIGxvb3ApO1xuK1x0Z19tYWluX2xvb3BfdW5yZWYobG9vcCk7XG4rXG4gXHRmcmVlKG1zZyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBzdGF0aWMgaW50IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxuIHtcbiBcdGNoYXIgKm1zZztcbitcdHZhX2xpc3QgYXJnc19jb3B5O1xuIFxuK1x0dmFfY29weShhcmdzX2NvcHksIGFyZ3MpO1xuIFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpIHx8XG4tXHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzKSBcdTAwM2MgMCkge1xuK1x0ICAgIHZhc3ByaW50ZihcdTAwMjZtc2csIGZvcm1hdCwgYXJnc19jb3B5KSBcdTAwM2MgMCkge1xuK1x0XHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwiV2FybmluZzpcXG5cIik7XG4gXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuXCIpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4rXHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcbiBcdGd0a19sYWJlbF9zZXRfdGV4dChHVEtfTEFCRUwocGdjdHgtXHUwMDNlbWVzc2FnZV9sYWJlbCksIG1zZyk7XG4gXHRndGtfaW5mb19iYXJfc2V0X21lc3NhZ2VfdHlwZShHVEtfSU5GT19CQVIocGdjdHgtXHUwMDNlaW5mb19iYXIpLFxuIFx0XHRcdFx0ICAgICAgR1RLX01FU1NBR0VfV0FSTklORyk7XG4tXHRndGtfd2lkZ2V0X3Nob3cocGdjdHgtXHUwMDNlaW5mb19iYXIpO1xuLVxuLVx0ZnJlZShtc2cpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLSNlbHNlXG4tc3RhdGljIGludCBwZXJmX2d0a19fd2FybmluZ19zdGF0dXNiYXIoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpXG4te1xuLVx0Y2hhciAqbXNnLCAqcDtcbi1cbi1cdGlmICghcGVyZl9ndGtfX2lzX2FjdGl2ZV9jb250ZXh0KHBnY3R4KSB8fFxuLVx0ICAgIHZhc3ByaW50ZihcdTAwMjZtc2csIGZvcm1hdCwgYXJncykgXHUwMDNjIDApIHtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwiV2FybmluZzpcXG5cIik7XG4tXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuXCIpO1xuLVx0XHRyZXR1cm4gLTE7XG4tXHR9XG4tXG4tXHRndGtfc3RhdHVzYmFyX3BvcChHVEtfU1RBVFVTQkFSKHBnY3R4LVx1MDAzZXN0YXRiYXIpLFxuLVx0XHRcdCAgcGdjdHgtXHUwMDNlc3RhdGJhcl9jdHhfaWQpO1xuLVxuLVx0LyogT25seSBmaXJzdCBsaW5lIGNhbiBiZSBkaXNwbGF5ZWQgKi9cbi1cdHAgPSBzdHJjaHIobXNnLCAnXFxuJyk7XG4tXHRpZiAocClcbi1cdFx0KnAgPSAnXFwwJztcbi1cbi1cdGd0a19zdGF0dXNiYXJfcHVzaChHVEtfU1RBVFVTQkFSKHBnY3R4LVx1MDAzZXN0YXRiYXIpLFxuLVx0XHRcdCAgIHBnY3R4LVx1MDAzZXN0YXRiYXJfY3R4X2lkLCBtc2cpO1xuK1x0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZShwZ2N0eC1cdTAwM2VpbmZvX2JhciwgVFJVRSk7XG4gXG4gXHRmcmVlKG1zZyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4tI2VuZGlmXG4gXG4gc3RydWN0IHBlcmZfZXJyb3Jfb3BzIHBlcmZfZ3RrX2VvcHMgPSB7XG4gXHQuZXJyb3JcdFx0PSBwZXJmX2d0a19fZXJyb3IsXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBcdC53YXJuaW5nXHQ9IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyLFxuLSNlbHNlXG4tXHQud2FybmluZ1x0PSBwZXJmX2d0a19fd2FybmluZ19zdGF0dXNiYXIsXG4tI2VuZGlmXG4gfTtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL3NldHVwLmMgYi90b29scy9wZXJmL3VpL3NldHVwLmNcbmluZGV4IGZmODAwMDQ3ZTY5N2YuLmQ4ODczNDZjN2E2MzIgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL3NldHVwLmNcbisrKyBiL3Rvb2xzL3BlcmYvdWkvc2V0dXAuY1xuQEAgLTE0LDcgKzE0LDcgQEAgaW50IHVzZV9icm93c2VyID0gLTE7XG4gXG4gI2RlZmluZSBQRVJGX0dUS19EU08gXCJsaWJwZXJmLWd0ay5zb1wiXG4gXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4rI2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXG4gXG4gc3RhdGljIGludCBzZXR1cF9ndGtfYnJvd3Nlcih2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jXG5pbmRleCBkZjcwZTk1YTg0NzA0Li4xMjNiNmQ1ZmNlYTc4IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmNcbisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jXG5AQCAtMTQ1LDYgKzE0NSwxNyBAQCBzdGF0aWMgaW50IGFubm90YXRlZF9zb3VyY2VfX2FsbG9jX2hpc3RvZ3JhbXMoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYyxcbiBcdHJldHVybiBzcmMtXHUwMDNlaGlzdG9ncmFtcyA/IDAgOiAtMTtcbiB9XG4gXG4rc3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcbithbm5vdGF0ZWRfc291cmNlX19oaXN0X2VudHJ5KHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsIGNvbnN0IHN0cnVjdCBldnNlbCAqZXZzZWwsIHU2NCBvZmZzZXQpXG4re1xuK1x0c3RydWN0IHN5bV9oaXN0X2VudHJ5ICplbnRyeTtcbitcdGxvbmcga2V5ID0gb2Zmc2V0IFx1MDAzY1x1MDAzYyAxNiB8IGV2c2VsLVx1MDAzZWNvcmUuaWR4O1xuK1xuK1x0aWYgKCFoYXNobWFwX19maW5kKHNyYy1cdTAwM2VzYW1wbGVzLCBrZXksIFx1MDAyNmVudHJ5KSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gZW50cnk7XG4rfVxuK1xuIHZvaWQgc3ltYm9sX19hbm5vdGF0ZV96ZXJvX2hpc3RvZ3JhbXMoc3RydWN0IHN5bWJvbCAqc3ltKVxuIHtcbiBcdHN0cnVjdCBhbm5vdGF0aW9uICpub3RlcyA9IHN5bWJvbF9fYW5ub3RhdGlvbihzeW0pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmhcbmluZGV4IGZhMDhkMDliODBmNzYuLjQwMDM4YTM3NzlkNDYgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaFxuKysrIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmhcbkBAIC00MDYsMTYgKzQwNiw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bV9oaXN0ICphbm5vdGF0aW9uX19oaXN0b2dyYW0oc3RydWN0IGFubm90YXRpb24gKm5vdGVzLFxuIFx0cmV0dXJuIGFubm90YXRlZF9zb3VyY2VfX2hpc3RvZ3JhbShub3Rlcy1cdTAwM2VzcmMsIGV2c2VsKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKlxuLWFubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldClcbi17XG4tXHRzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKmVudHJ5O1xuLVx0bG9uZyBrZXkgPSBvZmZzZXQgXHUwMDNjXHUwMDNjIDE2IHwgZXZzZWwtXHUwMDNlY29yZS5pZHg7XG4tXG4tXHRpZiAoIWhhc2htYXBfX2ZpbmQoc3JjLVx1MDAzZXNhbXBsZXMsIGtleSwgXHUwMDI2ZW50cnkpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdHJldHVybiBlbnRyeTtcbi19XG4rc3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcbithbm5vdGF0ZWRfc291cmNlX19oaXN0X2VudHJ5KHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsIGNvbnN0IHN0cnVjdCBldnNlbCAqZXZzZWwsIHU2NCBvZmZzZXQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFubm90YXRpb24gKnN5bWJvbF9fYW5ub3RhdGlvbihzdHJ1Y3Qgc3ltYm9sICpzeW0pXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MjY6MjUuMTczNzYxNjk3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjYxOTUxNjY0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggRXZhbHVhdGlvbiBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGV5IHdhbnQgbWUgdG8gYXNzZXNzIGEgcGF0Y2ggc2VyaWVzIGZvciBzeXprYWxsZXIgZnV6emluZy4gTGV0J3MgZ2V0IHJpZ2h0IHRvIGl0LiBGaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgY2hhbmdlZC4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzOiBgdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZWAsIGB0b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlYCwgc29tZSBgLmNgIGZpbGVzIGluIGB0b29scy9idWlsZC9mZWF0dXJlL2AsIGNoYW5nZXMgdG8gYHRvb2xzL3BlcmYvYCByZWxhdGVkIHRvIGRvY3VtZW50YXRpb24sIG1ha2VmaWxlcywgYW5kIGEgZ29vZCBjaHVuayBvZiBHVEstcmVsYXRlZCBVSSBjb2RlLiBMb29rcyBsaWtlIGEgYmlnIGNodW5rIG9mIHRoaXMgaXMgcmVsYXRlZCB0byBhIEdUSyB1cGdyYWRlIGZvciB0aGUgYHBlcmZgIHRvb2wuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHN5emthbGxlciB3b3JrcywgSSBuZWVkIHRvIGNoZWNrIGFnYWluc3QgdGhlIGRlZmluZWQgY3JpdGVyaWEuIFNwZWNpZmljYWxseSwgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLCB0aGUgdGltZXMgd2hlbiBJIHdvdWxkICpub3QqIGNvbnNpZGVyIGl0IHdvcnRoIGZ1enppbmcuIEknbSBsb29raW5nIGZvciBhbnkgbW9kaWZpY2F0aW9ucyB0aGF0IGZhbGwgaW50byB0aGVzZSBjYXRlZ29yaWVzOiBkb2N1bWVudGF0aW9uLCB1c2VyLXNwYWNlIGNvZGUgdGhhdCBkb2Vzbid0IGFmZmVjdCB0aGUga2VybmVsIGltYWdlLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIG9yIGJ1aWxkIHN5c3RlbSBjaGFuZ2VzIHRoYXQgZG9uJ3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cblxuSG1tLiBBbGwgdGhlIG1vZGlmaWVkIGZpbGVzIGFyZSB1bmRlciBgdG9vbHMvYCwgc3BlY2lmaWNhbGx5IGB0b29scy9wZXJmL2AgYW5kIGB0b29scy9idWlsZC9gLiBJdCBsb29rcyBsaWtlIHRoaXMgaXMgYSBwdXJlIHVzZXItc3BhY2UgY2hhbmdlLCB0aGUgYHBlcmZgIHRvb2wsIHdoaWNoIGFwcGVhcnMgdG8gYmUgdXBncmFkaW5nIGl0cyBHVEsgdmVyc2lvbi4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIHNlZW0gdG8gdG91Y2ggYHZtbGludXhgIG9yIGFueSBrZXJuZWwgbW9kdWxlcy4gRXhjZWxsZW50ISBUaGlzICpzaG91bGQqIGJlIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBnbyB0aHJvdWdoIHRoZSBsaXN0IG9mIG1vZGlmaWVkIGZpbGVzIGFnYWluLCB2aXN1YWxseSB0aGlzIHRpbWUsIHRvIGNvbmZpcm0gdGhhdCBubyBub24tYHRvb2xzL2AgZmlsZXMgd2VyZSB0b3VjaGVkOiBgdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZWAsIGB0b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlYCwgYW5kIHNvIG9uLCBhbGwgdGhlIHdheSBkb3duIHRvIGB0b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaGAuIFl1cCwgc3RpbGwgYWxsIGluc2lkZSBgdG9vbHMvYC4gTm8gcmVkIGZsYWdzLlxuXG5UaGVyZWZvcmUsIGFwcGx5aW5nIHRoZSBcIldIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZVwiIGNyaXRlcmlhLCB0aGUgdmVyZGljdCBpcyBjbGVhcjogYFdvcnRoRnV6emluZyA9IGZhbHNlYC4gVGhlcmUgYXJlIG5vIHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzIGFmZmVjdGVkLCBzbyB0aGUgY2hhbmdlcyBpbiB0aGVzZSB0b29scyBhcmUgaXJyZWxldmFudC4gYEVuYWJsZUNvbmZpZ3NgIHdvdWxkIGJlIGVtcHR5LCBhbmQgSSBkb24ndCBzZWUgYW55IGBGb2N1c1N5bWJvbHNgIHRvIGZsYWcuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQuIEknbGwgZ28gYWhlYWQgYW5kIHNldCB0aGUgcmVzdWx0cyBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MDUsIk91dHB1dFRva2VucyI6MTAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6Mjc6MzEuMzY4OTMxNTI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHRvb2xpbmcgYW5kIGJ1aWxkIHNjcmlwdHMgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgcG9ydGluZyB0aGUgcGVyZiBHVEsgVUkgZnJvbSBHVEsyIHRvIEdUSzQgYW5kIG1pbm9yIGhlbHBlciByZWxvY2F0aW9uIGluIHRvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jKS4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IGtlcm5lbC1zcGFjZSBjb2RlLCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHRvb2xpbmcgYW5kIGJ1aWxkIHNjcmlwdHMgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgcG9ydGluZyB0aGUgcGVyZiBHVEsgVUkgZnJvbSBHVEsyIHRvIEdUSzQgYW5kIG1pbm9yIGhlbHBlciByZWxvY2F0aW9uIGluIHRvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jKS4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IGtlcm5lbC1zcGFjZSBjb2RlLCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjoyNzozMS4zNjg5NTUwNTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv88ml[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 02:24:40 +0000 UTC FinishedAt: 2026-09-07 02:27:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29saW5nIGFuZCBidWlsZCBzY3JpcHRzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHBvcnRpbmcgdGhlIHBlcmYgR1RLIFVJIGZyb20gR1RLMiB0byBHVEs0IGFuZCBtaW5vciBoZWxwZXIgcmVsb2NhdGlvbiBpbiB0b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYykuIEl0IGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwtc3BhY2UgY29kZSwgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVmYWY0MTUzNjQwMGZjNzIwOTNkZjc4ZDZlNzk3YTM3Y2JhYjA2ZjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAyOjI2OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUgYi90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlXG5pbmRleCA5OWViMGVhMDk1Mzc1Li40ZWM5NWMzNWE1YzE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuQEAgLTExMyw4ICYjNDM7MTEzLDcgQEAgRkVBVFVSRV9URVNUU19FWFRSQSA6PSAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgY29tcGlsZS14MzIgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgY3BsdXMtZGVtYW5nbGUgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgY3hhLWRlbWFuZ2xlICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgZ3RrMiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgZ3RrMi1pbmZvYmFyICAgICAgICAgICAgICAgICAgIFxcXG4mIzQzOyAgICAgICAgIGd0azQgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGhlbGxvICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGJhYmVsdHJhY2UyLWN0Zi13cml0ZXIgICAgICAgICBcXFxuICAgICAgICAgIGxpYmNhcHN0b25lICAgICAgICAgICAgICAgICAgICBcXFxuQEAgLTE0Myw2ICYjNDM7MTQyLDcgQEAgZW5kaWZcbiBGRUFUVVJFX0RJU1BMQVkgPz0gICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbGliZHcgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGdsaWJjICAgICAgICAgICAgICAgICAgXFxcbiYjNDM7ICAgICAgICAgZ3RrNCAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGxpYmVsZiAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBsaWJudW1hICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbnVtYV9udW1fcG9zc2libGVfY3B1cyBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGUgYi90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXG5pbmRleCA3ZDE2NTAxODExNmE1Li4wMWM0OGU2ZWYwMjFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZVxuQEAgLTExLDggJiM0MzsxMSw3IEBAIEZJTEVTPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1ldmVudGZkLmJpbiAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICB0ZXN0LWZvcnRpZnktc291cmNlLmJpbiAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtZ2xpYmMuYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgdGVzdC1ndGsyLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi0gICAgICAgICB0ZXN0LWd0azItaW5mb2Jhci5iaW4gICAgICAgICAgICAgICAgICBcXFxuJiM0MzsgICAgICAgICB0ZXN0LWd0azQuYmluICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtaGVsbG8uYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1saWJiZmQuYmluICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiBcdCB0ZXN0LWxpYmJmZC10aHJlYWRzYWZlLmJpbiAgICAgIFx0XFxcbkBAIC0yNDAsMTEgJiM0MzsyMzksOCBAQCAkKE9VVFBVVCl0ZXN0LWxpYmNwdXBvd2VyLmJpbjpcbiAkKE9VVFBVVCl0ZXN0LWxpYnRyYWNlZnMuYmluOlxuIFx0ICQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBsaWJ0cmFjZWZzIDJcdTAwM2UvZGV2L251bGwpIC1sdHJhY2Vmc1xuIFxuLSQoT1VUUFVUKXRlc3QtZ3RrMi5iaW46XG4tXHQkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0ayYjNDM7LTIuMCAyXHUwMDNlL2Rldi9udWxsKSAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zXG4tXG4tJChPVVRQVVQpdGVzdC1ndGsyLWluZm9iYXIuYmluOlxuLVx0JChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsmIzQzOy0yLjAgMlx1MDAzZS9kZXYvbnVsbClcbiYjNDM7JChPVVRQVVQpdGVzdC1ndGs0LmJpbjpcbiYjNDM7XHQkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbiBcbiBncmVwLWxpYnMgID0gJChmaWx0ZXIgLWwlLCQoMSkpXG4gc3RyaXAtbGlicyA9ICQoZmlsdGVyLW91dCAtbCUsJCgxKSlcbmRpZmYgLS1naXQgYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmMgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggYjFiNzE2ZGQ1NzMzMC4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwxMiAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwmIzM0Oy1Xc3RyaWN0LXByb3RvdHlwZXNcJiMzNDtcbi0jaW5jbHVkZSBcdTAwM2NndGsvZ3RrLmhcdTAwM2Vcbi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGVycm9yIFwmIzM0Oy1Xc3RyaWN0LXByb3RvdHlwZXNcJiMzNDtcbi1cbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLXtcbi1cdGd0a19pbml0KFx1MDAyNmFyZ2MsIFx1MDAyNmFyZ3YpO1xuLVx0Z3RrX2luZm9fYmFyX25ldygpO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLmMgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrNC5jXG5zaW1pbGFyaXR5IGluZGV4IDc2JVxucmVuYW1lIGZyb20gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuY1xucmVuYW1lIHRvIHRvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcbmluZGV4IDJhYWY0YmZjMjA1NTYuLmI5NTIwZTc0MDhiOTkgMTAwNjQ0XG4tLS0gYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrNC5jXG5AQCAtMyw5ICYjNDM7Myw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjZ3RrL2d0ay5oXHUwMDNlXG4gI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBlcnJvciBcJiMzNDstV3N0cmljdC1wcm90b3R5cGVzXCYjMzQ7XG4gXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiYjNDM7aW50IG1haW4odm9pZClcbiB7XG4tXHRndGtfaW5pdChcdTAwMjZhcmdjLCBcdTAwMjZhcmd2KTtcbiYjNDM7XHRndGtfaW5pdCgpO1xuIFxuICAgICAgICAgcmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0XG5pbmRleCAyMmY4N2VhYTMyNzk2Li43YWY5YjNmODFjMDY1IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuQEAgLTM1MSw3ICYjNDM7MzUxLDcgQEAgT1BUSU9OU1xuIFx0cmVxdWlyZXMgYSB0dHksIGlmIG9uZSBpcyBub3QgcHJlc2VudCwgYXMgd2hlbiBwaXBpbmcgdG8gb3RoZXJcbiBcdGNvbW1hbmRzLCB0aGUgc3RkaW8gaW50ZXJmYWNlIGlzIHVzZWQuXG4gXG4tLS1ndGs6OiBVc2UgdGhlIEdUSzIgaW50ZXJmYWNlLlxuJiM0MzstLWd0azo6IFVzZSB0aGUgR1RLNCBpbnRlcmZhY2UuXG4gXG4gLWs6OlxuIC0tdm1saW51eD1cdTAwM2NmaWxlXHUwMDNlOjpcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZVxuaW5kZXggNWI3MTM4MzdlZWRlNy4uNTYwMTQxMDY0NzlhMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGVcbkBAIC0xMDYsNyAmIzQzOzEwNiw3IEBAIGNsZWFuOlxuICMgbWFrZSAtQyB0b29scy9wZXJmIC1mIHRlc3RzL21ha2VcbiAjXG4gYnVpbGQtdGVzdDpcbi1cdEAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azIgb3V0XG4mIzQzO1x0QCQoTUFLRSkgU0hVRj0xIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IHRhcnBrZyBtYWtlX3N0YXRpYyBtYWtlX3dpdGhfZ3RrNCBvdXRcbiBcbiBidWlsZC10ZXN0LXRhcmJhbGw6XG4gXHRAJChNQUtFKSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSBvdXRcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnXG5pbmRleCA0ZDU5OTNkYTlmOTQ1Li40ZWU3MzkzYTM5ZjkxIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnXG5AQCAtNzc0LDIxICYjNDM7Nzc0LDIyIEBAIGlmbmRlZiBOT19TTEFOR1xuICAgZW5kaWZcbiBlbmRpZlxuIFxuLWlmZGVmIEdUSzJcbi0gIEZMQUdTX0dUSzI9JChDRkxBR1MpICQoTERGTEFHUykgJChFWFRMSUJTKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0ayYjNDM7LTIuMCAyXHUwMDNlL2Rldi9udWxsKVxuLSAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrMilcbi0gIGlmbmVxICgkKGZlYXR1cmUtZ3RrMiksIDEpXG4tICAgICQod2FybmluZyBHVEsyIG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLMiBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGsyLWRldmVsIG9yIGxpYmd0azIuMC1kZXYpXG4tICAgIE5PX0dUSzIgOj0gMVxuJiM0MztpZmRlZiBHVEs0XG4mIzQzOyAgRkxBR1NfR1RLND0kKENGTEFHUykgJChMREZMQUdTKSAkKEVYVExJQlMpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrNCAyXHUwMDNlL2Rldi9udWxsKVxuJiM0MzsgICQoY2FsbCBmZWF0dXJlX2NoZWNrLGd0azQpXG4mIzQzOyAgaWZuZXEgKCQoZmVhdHVyZS1ndGs0KSwgMSlcbiYjNDM7ICAgICQod2FybmluZyBHVEs0IG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLNCBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGs0LWRldmVsIG9yIGxpYmd0ay00LWRldilcbiYjNDM7ICAgIE5PX0dUSzQgOj0gMVxuICAgZWxzZVxuLSAgICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGsyLWluZm9iYXIpXG4tICAgIGlmZXEgKCQoZmVhdHVyZS1ndGsyLWluZm9iYXIpLCAxKVxuLSAgICAgIEdUS19DRkxBR1MgOj0gLURIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4tICAgIGVuZGlmXG4tICAgIENGTEFHUyAmIzQzOz0gLURIQVZFX0dUSzJfU1VQUE9SVFxuLSAgICBHVEtfQ0ZMQUdTICYjNDM7PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgZ3RrJiM0MzstMi4wIDJcdTAwM2UvZGV2L251bGwpXG4tICAgIEdUS19MSUJTIDo9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgZ3RrJiM0MzstMi4wIDJcdTAwM2UvZGV2L251bGwpXG4mIzQzOyAgICBDRkxBR1MgJiM0Mzs9IC1ESEFWRV9HVEs0X1NVUFBPUlRcbiYjNDM7ICAgIEdUS19DRkxBR1MgJiM0Mzs9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBndGs0IDJcdTAwM2UvZGV2L251bGwpXG4mIzQzOyAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbiAgICAgRVhUTElCUyAmIzQzOz0gLWxkbFxuJiM0MzsgICAgIyBsaWJwZXJmLWd0ay5zbyBpcyBkbG9wZW4oKWVkIGF0IHJ1bnRpbWUgYW5kIGNhbGxzIGJhY2sgaW50b1xuJiM0MzsgICAgIyBzeW1ib2xzIGRlZmluZWQgaW4gdGhlIHBlcmYgYmluYXJ5IGl0c2VsZiAoY2FsbGNoYWluX3BhcmFtLFxuJiM0MzsgICAgIyBzeW1ib2xfY29uZiwgZXZzZWxfX25hbWUsIC4uLik6IHBlcmYgbmVlZHMgdG8gZXhwb3J0IHRob3NlXG4mIzQzOyAgICAjIGR5bmFtaWNhbGx5IGZvciB0aGUgcGx1Z2luIHRvIHJlc29sdmUgdGhlbS5cbiYjNDM7ICAgIExERkxBR1MgJiM0Mzs9IC1yZHluYW1pY1xuICAgZW5kaWZcbiBlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZiBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZlxuaW5kZXggMjljZmQ0NGM0MjdmMy4uMjQzOGI0MGVhYWVjMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZlxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmXG5AQCAtNDksNyAmIzQzOzQ5LDcgQEAgaW5jbHVkZSAuLi9zY3JpcHRzL3V0aWxpdGllcy5tYWtcbiAjXG4gIyBEZWZpbmUgTk9fU0xBTkcgaWYgeW91IGRvIG5vdCB3YW50IFRVSSBzdXBwb3J0LlxuICNcbi0jIERlZmluZSBHVEsyIGlmIHlvdSB3YW50IEdUSyYjNDM7IEdVSSBzdXBwb3J0LlxuJiM0MzsjIERlZmluZSBHVEs0IGlmIHlvdSB3YW50IEdUSyYjNDM7IEdVSSBzdXBwb3J0LlxuICNcbiAjIERlZmluZSBOT19ERU1BTkdMRSBpZiB5b3UgZG8gbm90IHdhbnQgQyYjNDM7JiM0Mzsgc3ltYm9sIGRlbWFuZ2xpbmcuXG4gI1xuQEAgLTQ3Myw3ICYjNDM7NDczLDcgQEAgaWZuZXEgKCQoT1VUUFVUKSwpXG4gICBDRkxBR1MgJiM0Mzs9IC1JJChPVVRQVVQpXG4gZW5kaWZcbiBcbi1pZmRlZiBHVEsyXG4mIzQzO2lmZGVmIEdUSzRcbiAgIEFMTF9QUk9HUkFNUyAmIzQzOz0gJChPVVRQVVQpbGlicGVyZi1ndGsuc29cbiAgIEdUS19JTiA6PSAkKE9VVFBVVClndGstaW4ub1xuIGVuZGlmXG5AQCAtODExLDcgJiM0Mzs4MTEsNyBAQCBjaGVjazogcHJlcGFyZVxuIFxuICMjIyBJbnN0YWxsYXRpb24gcnVsZXNcbiBcbi1pZmRlZiBHVEsyXG4mIzQzO2lmZGVmIEdUSzRcbiBpbnN0YWxsLWd0azogJChPVVRQVVQpbGlicGVyZi1ndGsuc29cbiBcdCQoY2FsbCBRVUlFVF9JTlNUQUxMLCAmIzM5O0dUSyBVSSYjMzk7KSBcXFxuIFx0XHQkKElOU1RBTEwpIC1kIC1tIDc1NSAmIzM5OyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSkmIzM5OzsgXFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXG5pbmRleCA2OWNiNzJiMjA4MmE2Li4xNTE2M2UwODFhOGNlIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXG5AQCAtNTIsNyAmIzQzOzUyLDcgQEAgc3RydWN0IHBlcmZfYW5ub3RhdGUge1xuIFx0Ym9vbFx0ICAgdXNlX3R1aTtcbiAjZW5kaWZcbiBcdGJvb2xcdCAgIHVzZV9zdGRpbywgdXNlX3N0ZGlvMjtcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXG4gXHRib29sXHQgICB1c2VfZ3RrO1xuICNlbmRpZlxuIFx0Ym9vbFx0ICAgc2tpcF9taXNzaW5nO1xuQEAgLTcxMiw3ICYjNDM7NzEyLDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRPUFRfQk9PTEVBTigmIzM5O3EmIzM5OywgXCYjMzQ7cXVpZXRcJiMzNDssIFx1MDAyNnF1aWV0LCBcJiMzNDtkbyBub3cgc2hvdyBhbnkgd2FybmluZ3Mgb3IgbWVzc2FnZXNcJiMzNDspLFxuIFx0T1BUX0JPT0xFQU4oJiMzOTtEJiMzOTssIFwmIzM0O2R1bXAtcmF3LXRyYWNlXCYjMzQ7LCBcdTAwMjZkdW1wX3RyYWNlLFxuIFx0XHQgICAgXCYjMzQ7ZHVtcCByYXcgdHJhY2UgaW4gQVNDSUlcJiMzNDspLFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdE9QVF9CT09MRUFOKDAsIFwmIzM0O2d0a1wmIzM0OywgXHUwMDI2YW5ub3RhdGUudXNlX2d0aywgXCYjMzQ7VXNlIHRoZSBHVEsgaW50ZXJmYWNlXCYjMzQ7KSxcbiAjZW5kaWZcbiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUXG5AQCAtODI4LDcgJiM0Mzs4MjgsNyBAQCBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilcbiBcdGlmIChhbm5vdGF0ZV9jaGVja19hcmdzKCkgXHUwMDNjIDApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGlmIChzeW1ib2xfY29uZi5zaG93X25yX3NhbXBsZXMgXHUwMDI2XHUwMDI2IGFubm90YXRlLnVzZV9ndGspIHtcbiBcdFx0cHJfZXJyKFwmIzM0Oy0tc2hvdy1uci1zYW1wbGVzIGlzIG5vdCBhdmFpbGFibGUgaW4gLS1ndGsgbW9kZSBhdCB0aGlzIHRpbWVcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTg5OCw3ICYjNDM7ODk4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRlbHNlIGlmIChhbm5vdGF0ZS51c2VfdHVpKVxuIFx0XHR1c2VfYnJvd3NlciA9IDE7XG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4mIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFx0ZWxzZSBpZiAoYW5ub3RhdGUudXNlX2d0aylcbiBcdFx0dXNlX2Jyb3dzZXIgPSAyO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuY1xuaW5kZXggNjBkMWYxNjY2MjllMC4uZDE0Mzg0YzU4NDY2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jXG5AQCAtODIsNyAmIzQzOzgyLDcgQEAgc3RydWN0IHJlcG9ydCB7XG4gI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVFxuIFx0Ym9vbFx0XHRcdHVzZV90dWk7XG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4mIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFx0Ym9vbFx0XHRcdHVzZV9ndGs7XG4gI2VuZGlmXG4gXHRib29sXHRcdFx0dXNlX3N0ZGlvO1xuQEAgLTEzNTksOCAmIzQzOzEzNTksOCBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVFxuIFx0T1BUX0JPT0xFQU4oMCwgXCYjMzQ7dHVpXCYjMzQ7LCBcdTAwMjZyZXBvcnQudXNlX3R1aSwgXCYjMzQ7VXNlIHRoZSBUVUkgaW50ZXJmYWNlXCYjMzQ7KSxcbiAjZW5kaWZcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbi1cdE9QVF9CT09MRUFOKDAsIFwmIzM0O2d0a1wmIzM0OywgXHUwMDI2cmVwb3J0LnVzZV9ndGssIFwmIzM0O1VzZSB0aGUgR1RLMiBpbnRlcmZhY2VcJiMzNDspLFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiYjNDM7XHRPUFRfQk9PTEVBTigwLCBcJiMzNDtndGtcJiMzNDssIFx1MDAyNnJlcG9ydC51c2VfZ3RrLCBcJiMzNDtVc2UgdGhlIEdUSzQgaW50ZXJmYWNlXCYjMzQ7KSxcbiAjZW5kaWZcbiBcdE9QVF9CT09MRUFOKDAsIFwmIzM0O3N0ZGlvXCYjMzQ7LCBcdTAwMjZyZXBvcnQudXNlX3N0ZGlvLFxuIFx0XHQgICAgXCYjMzQ7VXNlIHRoZSBzdGRpbyBpbnRlcmZhY2VcJiMzNDspLFxuQEAgLTE3MTAsNyAmIzQzOzE3MTAsNyBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRlbHNlIGlmIChyZXBvcnQudXNlX3R1aSlcbiBcdFx0dXNlX2Jyb3dzZXIgPSAxO1xuICNlbmRpZlxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGVsc2UgaWYgKHJlcG9ydC51c2VfZ3RrKVxuIFx0XHR1c2VfYnJvd3NlciA9IDI7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2hcbmluZGV4IGQwMDNlN2ZhYjJiZTguLmE2MDFhNTI2MGMxN2UgMTAwNzU1XG4tLS0gYS90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG5AQCAtMTk5LDggJiM0MzsxOTksOCBAQCBmZWRvcmFfcGtnX2ZvcigpIHtcbiBcdCMgb3B0LWluIGZlYXR1cmVzLCB3aGljaCBhIGRlZmF1bHQgYnVpbGQgZG9lcyBub3QgZW5hYmxlOiB0aGUgbGliYmZkXG4gXHQjIGRpc2Fzc2VtYmxlciBmYW1pbHkgKGxpYmJmZCwgbGliYmZkLXRocmVhZHNhZmUsIGxpYmJmZC1saWJlcnR5LFxuIFx0IyBkaXNhc3NlbWJsZXItKiwgY3BsdXMtZGVtYW5nbGUpLCBvbmx5IGxpbmtlZCBvbiBCVUlMRF9OT05ESVNUUk9cbi1cdCMgYnVpbGRzIGFuZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNhcHN0b25lLCBHVEsyLCBMSUJQRVJMIGFuZFxuLVx0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLMiAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXG4mIzQzO1x0IyBidWlsZHMgYW5kIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgY2Fwc3RvbmUsIEdUSzQsIExJQlBFUkwgYW5kXG4mIzQzO1x0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLNCAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXG4gXHQjIGFuZCBDb3JlU2lnaHQgKGlmZGVmIENPUkVTSUdIVCksIGFyZSBkZWxpYmVyYXRlbHkgbm90IG1hcHBlZC5cbiBcdCMgbGliYWlvIGlzIG5vdCBtYXBwZWQgZWl0aGVyOiBpdHNcbiBcdCMgdGVzdCB1c2VzIHRoZSBQT1NJWCBBSU8gQVBJIChhaW8uaCwgYWlvXyosIC1scnQpLCBwcm92aWRlZCBieVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZSBiL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuaW5kZXggZDJjMmY1MjZlMWRiMC4uMjAyYWI1NTAxOTE2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi90ZXN0cy9tYWtlXG5AQCAtOTUsNyAmIzQzOzk1LDcgQEAgbWFrZV9ub19iYWJlbHRyYWNlMiA6PSBOT19CQUJFTFRSQUNFMj0xXG4gbWFrZV93aXRoX2NvcmVzaWdodCA6PSBDT1JFU0lHSFQ9MVxuIG1ha2Vfbm9fc2R0XHQgICAgOj0gTk9fU0RUPTFcbiBtYWtlX25vX2xpYnBmbTQgICAgIDo9IE5PX0xJQlBGTTQ9MVxuLW1ha2Vfd2l0aF9ndGsyICAgICAgOj0gR1RLMj0xXG4mIzQzO21ha2Vfd2l0aF9ndGs0ICAgICAgOj0gR1RLND0xXG4gbWFrZV9yZWZjbnRfY2hlY2sgICA6PSBFWFRSQV9DRkxBR1M9XCYjMzQ7LURSRUZDTlRfQ0hFQ0tJTkc9MVwmIzM0O1xuIG1ha2VfdGFncyAgICAgICAgICAgOj0gdGFnc1xuIG1ha2VfY3Njb3BlICAgICAgICAgOj0gY3Njb3BlXG5AQCAtMzE4LDcgJiM0MzszMTgsNyBAQCAkKHJ1bik6XG4gXHQkKGNhbGwgdGVzdCwkQCkgXHUwMDI2XHUwMDI2IFxcXG4gXHRybSAtcmYgJEAgJCRUTVBfREVTVCB8fCAoY2F0ICRAIDsgZmFsc2UpXG4gXG4tbWFrZV93aXRoX2d0azI6XG4mIzQzO21ha2Vfd2l0aF9ndGs0OlxuIFx0JChjYWxsIGNsZWFuKVxuIFx0QFRNUF9ERVNUPSQkKG1rdGVtcCAtZCk7IFxcXG4gXHRjbWQ9XCYjMzQ7Y2QgJChQRVJGKSBcdTAwMjZcdTAwMjYgJChNQUtFX0YpICQoJEApICQoUEFSQUxMRUxfT1BUKSAkKE9fT1BUKSBERVNURElSPSQkVE1QX0RFU1RcJiMzNDs7IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmNcbmluZGV4IDg5MjBlMjk4NDIwYTguLjA5NGRmYTA0NWI3NzQgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jXG5AQCAtMTEsNiAmIzQzOzExLDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt1aS9oZWxwbGluZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXHUwMDNjaW50dHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gXG4gZW51bSB7XG4gXHRBTk5fQ09MX19QRVJDRU5ULFxuQEAgLTE2MSw3ICYjNDM7MTYyLDcgQEAgc3RhdGljIGludCBwZXJmX2d0a19fYW5ub3RhdGVfc3ltYm9sKEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgbWFwX3N5bWJvbCAqbXMsXG4gXHRcdFx0Z3RrX2xpc3Rfc3RvcmVfc2V0KHN0b3JlLCBcdTAwMjZpdGVyLCBBTk5fQ09MX19MSU5FLCBzLCAtMSk7XG4gXHR9XG4gXG4tXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xuJiM0MztcdGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X2NoaWxkKEdUS19TQ1JPTExFRF9XSU5ET1cod2luZG93KSwgdmlldyk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCBcdTAwMjZub3Rlcy1cdTAwM2VzcmMtXHUwMDNlc291cmNlLCBhbC5ub2RlKSB7XG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cG9zLVx1MDAzZWFsLm5vZGUpO1xuQEAgLTIwNSw0MCAmIzQzOzIwNiwzNCBAQCBzdGF0aWMgaW50IHN5bWJvbF9fZ3RrX2Fubm90YXRlKHN0cnVjdCBtYXBfc3ltYm9sICptcywgc3RydWN0IGV2c2VsICpldnNlbCxcbiBcdFx0R3RrV2lkZ2V0ICppbmZvYmFyO1xuIFx0XHRHdGtXaWRnZXQgKnN0YXRiYXI7XG4gXG4tXHRcdHNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdFx0c2lnbmFsKFNJR0ZQRSwgIHBlcmZfZ3RrX19zaWduYWwpO1xuLVx0XHRzaWduYWwoU0lHSU5ULCAgcGVyZl9ndGtfX3NpZ25hbCk7XG4tXHRcdHNpZ25hbChTSUdRVUlULCBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdFx0c2lnbmFsKFNJR1RFUk0sIHBlcmZfZ3RrX19zaWduYWwpO1xuJiM0MztcdFx0c2lnbmFsKFNJR1NFR1YsIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwpO1xuJiM0MztcdFx0c2lnbmFsKFNJR0ZQRSwgIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwpO1xuJiM0MztcdFx0cGVyZl9ndGtfX2luc3RhbGxfcXVpdF9zaWduYWxzKCk7XG4gXG4tXHRcdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpO1xuJiM0MztcdFx0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoKTtcbiBcdFx0Z3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyh3aW5kb3cpLCBcJiMzNDtwZXJmIGFubm90YXRlXCYjMzQ7KTtcbiBcbi1cdFx0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFwmIzM0O2RlbGV0ZV9ldmVudFwmIzM0OywgZ3RrX21haW5fcXVpdCwgTlVMTCk7XG4tXG4gXHRcdHBnY3R4ID0gcGVyZl9ndGtfX2FjdGl2YXRlX2NvbnRleHQod2luZG93KTtcbiBcdFx0aWYgKCFwZ2N0eClcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRcdHZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApO1xuJiM0MztcdFx0dmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgMCk7XG4gXHRcdG5vdGVib29rID0gZ3RrX25vdGVib29rX25ldygpO1xuIFx0XHRwZ2N0eC1cdTAwM2Vub3RlYm9vayA9IG5vdGVib29rO1xuIFxuLVx0XHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2ssIFRSVUUsIFRSVUUsIDApO1xuJiM0MztcdFx0Z3RrX3dpZGdldF9zZXRfdmV4cGFuZChub3RlYm9vaywgVFJVRSk7XG4mIzQzO1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBub3RlYm9vayk7XG4gXG4gXHRcdGluZm9iYXIgPSBwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIoKTtcbi1cdFx0aWYgKGluZm9iYXIpIHtcbi1cdFx0XHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaW5mb2Jhcixcbi1cdFx0XHRcdFx0ICAgRkFMU0UsIEZBTFNFLCAwKTtcbi1cdFx0fVxuJiM0MztcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgaW5mb2Jhcik7XG4gXG4gXHRcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBzdGF0YmFyLCBGQUxTRSwgRkFMU0UsIDApO1xuJiM0MztcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhcik7XG4gXG4tXHRcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7XG4mIzQzO1x0XHRndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKHdpbmRvdyksIHZib3gpO1xuIFx0fVxuIFxuLVx0c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7XG4mIzQzO1x0c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTtcbiBcdHRhYl9sYWJlbCA9IGd0a19sYWJlbF9uZXcoc3ltLVx1MDAzZW5hbWUpO1xuIFxuIFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSxcbkBAIC0yNjcsMTIgJiM0MzsyNjIsMTEgQEAgdm9pZCBwZXJmX2d0a19fc2hvd19hbm5vdGF0aW9ucyh2b2lkKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR3aW5kb3cgPSBwZ2N0eC1cdTAwM2VtYWluX3dpbmRvdztcbi1cdGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTtcbiBcbiBcdHBlcmZfZ3RrX19yZXNpemVfd2luZG93KHdpbmRvdyk7XG4tXHRndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKHdpbmRvdyksIEdUS19XSU5fUE9TX0NFTlRFUik7XG4mIzQzO1x0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aW5kb3csIFRSVUUpO1xuIFxuLVx0Z3RrX21haW4oKTtcbiYjNDM7XHRwZXJmX2d0a19fcnVuX21haW5fbG9vcCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dChcdTAwMjZwZ2N0eCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xuaW5kZXggZDJkYWRmMzg3M2ZiZC4uOThmMWQ2YmZjYjI0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jXG5AQCAtNSwzMiAmIzQzOzUsOTIgQEBcbiAjaW5jbHVkZSBcJiMzNDsuLi9oaXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9oZWxwbGluZS5oXCYjMzQ7XG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2dsaWItdW5peC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiBcbi12b2lkIHBlcmZfZ3RrX19zaWduYWwoaW50IHNpZylcbiYjNDM7LypcbiYjNDM7ICogU0lHSU5UL1NJR1FVSVQvU0lHVEVSTSBhcmUgYXN5bmNocm9ub3VzOiBkZWZlcnJpbmcgdGhlIGFjdHVhbCBleGl0IHRvIGFcbiYjNDM7ICogR0xpYiBzb3VyY2UgZGlzcGF0Y2hlZCBmcm9tIHRoZSBtYWluIGxvb3AgbWVhbnMgaXQgYWx3YXlzIHJ1bnMgb24gdGhlXG4mIzQzOyAqIG1haW4gdGhyZWFkLCBzZXJpYWxpemVkIHdpdGggZXZlcnl0aGluZyBlbHNlIHRoZSBtYWluIGxvb3AgZG9lc1xuJiM0MzsgKiAoaW5jbHVkaW5nIHBlcmZfZ3RrX19lcnJvcigpJiMzOTtzIHVwZGF0ZXMgdG8gcGVyZl9ndGtfX2Vycm9yX2xvb3BzKSwgaW5zdGVhZFxuJiM0MzsgKiBvZiByYWNpbmcgdGhlbSBmcm9tIGFyYml0cmFyeSBzaWduYWwtaGFuZGxlciBjb250ZXh0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGdib29sZWFuIHBlcmZfZ3RrX19xdWl0X3NpZ25hbChncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKVxuIHtcbiBcdHBlcmZfZ3RrX19leGl0KGZhbHNlKTtcbiYjNDM7XHRyZXR1cm4gR19TT1VSQ0VfUkVNT1ZFO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Z191bml4X3NpZ25hbF9hZGQoU0lHSU5ULCAgcGVyZl9ndGtfX3F1aXRfc2lnbmFsLCBOVUxMKTtcbiYjNDM7XHRnX3VuaXhfc2lnbmFsX2FkZChTSUdRVUlULCBwZXJmX2d0a19fcXVpdF9zaWduYWwsIE5VTEwpO1xuJiM0MztcdGdfdW5peF9zaWduYWxfYWRkKFNJR1RFUk0sIHBlcmZfZ3RrX19xdWl0X3NpZ25hbCwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFNJR1NFR1YvU0lHRlBFIGFyZSBzeW5jaHJvbm91cyBmYXVsdHM6IHRoZXJlJiMzOTtzIG5vIFwmIzM0O2xhdGVyXCYjMzQ7IHRvIGRlZmVyIHRvLFxuJiM0MzsgKiBhbmQgbm8gc2FmZSB3YXkgdG8gcnVuIEdUSy9HTGliIGNvZGUgKG9yIGFueXRoaW5nIGVsc2Ugbm9uLWFzeW5jLXNpZ25hbC1cbiYjNDM7ICogc2FmZSkgZnJvbSB0aGUgZmF1bHRpbmcgY29udGV4dC4gUmVwb3J0IGFuZCBsZXQgdGhlIGRlZmF1bHQgZGlzcG9zaXRpb25cbiYjNDM7ICogKGNvcmUgZHVtcCkgaGFwcGVuIGluc3RlYWQgb2YgdHJ5aW5nIHRvIHRlYXIgZG93biBHVEsgc3RhdGUgaGVyZS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcGVyZl9ndGtfX2ZhdGFsX3NpZ25hbChpbnQgc2lnKVxuJiM0Mzt7XG4gXHRwc2lnbmFsKHNpZywgXCYjMzQ7cGVyZlwmIzM0Oyk7XG4mIzQzO1x0c2lnbmFsKHNpZywgU0lHX0RGTCk7XG4mIzQzO1x0cmFpc2Uoc2lnKTtcbiB9XG4gXG4gdm9pZCBwZXJmX2d0a19fcmVzaXplX3dpbmRvdyhHdGtXaWRnZXQgKndpbmRvdylcbiB7XG4gXHRHZGtSZWN0YW5nbGUgcmVjdDtcbi1cdEdka1NjcmVlbiAqc2NyZWVuO1xuLVx0aW50IG1vbml0b3I7XG4mIzQzO1x0R2RrTW9uaXRvciAqbW9uaXRvcjtcbiYjNDM7XHRHZGtEaXNwbGF5ICpkaXNwbGF5O1xuJiM0MztcdEdMaXN0TW9kZWwgKm1vbml0b3JzO1xuIFx0aW50IGhlaWdodDtcbiBcdGludCB3aWR0aDtcbiBcbi1cdHNjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbih3aW5kb3cpO1xuJiM0MztcdGRpc3BsYXkgPSBndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpbmRvdyk7XG4mIzQzO1x0bW9uaXRvcnMgPSBnZGtfZGlzcGxheV9nZXRfbW9uaXRvcnMoZGlzcGxheSk7XG4mIzQzO1x0bW9uaXRvciA9IGdfbGlzdF9tb2RlbF9nZXRfaXRlbShtb25pdG9ycywgMCk7XG4mIzQzO1x0aWYgKCFtb25pdG9yKSB7XG4mIzQzO1x0XHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA4MDAsIDYwMCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuIFxuLVx0bW9uaXRvciA9IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgd2luZG93LVx1MDAzZXdpbmRvdyk7XG4tXG4tXHRnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwgXHUwMDI2cmVjdCk7XG4mIzQzO1x0Z2RrX21vbml0b3JfZ2V0X2dlb21ldHJ5KG1vbml0b3IsIFx1MDAyNnJlY3QpO1xuJiM0MztcdGdfb2JqZWN0X3VucmVmKG1vbml0b3IpO1xuIFxuIFx0d2lkdGhcdD0gcmVjdC53aWR0aCAqIDMgLyA0O1xuIFx0aGVpZ2h0XHQ9IHJlY3QuaGVpZ2h0ICogMyAvIDQ7XG4gXG4tXHRndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHdpZHRoLCBoZWlnaHQpO1xuJiM0MztcdGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHdpZHRoLCBoZWlnaHQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgR01haW5Mb29wICpwZXJmX2d0a19fbWFpbl9sb29wO1xuJiM0MztcbiYjNDM7dm9pZCBwZXJmX2d0a19fcXVpdF9tYWluX2xvb3Aodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChwZXJmX2d0a19fbWFpbl9sb29wKVxuJiM0MztcdFx0Z19tYWluX2xvb3BfcXVpdChwZXJmX2d0a19fbWFpbl9sb29wKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGdib29sZWFuIHBlcmZfZ3RrX19jbG9zZV9yZXF1ZXN0KEd0a1dpZGdldCAqd2lkZ2V0IF9fbWF5YmVfdW51c2VkLFxuJiM0MztcdFx0XHRcdFx0Z3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZClcbiYjNDM7e1xuJiM0MztcdHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRkFMU0U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgcGVyZl9ndGtfX3J1bl9tYWluX2xvb3AoR3RrV2lkZ2V0ICp3aW5kb3cpXG4mIzQzO3tcbiYjNDM7XHRnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgXCYjMzQ7Y2xvc2UtcmVxdWVzdFwmIzM0OyxcbiYjNDM7XHRcdFx0IEdfQ0FMTEJBQ0socGVyZl9ndGtfX2Nsb3NlX3JlcXVlc3QpLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0cGVyZl9ndGtfX21haW5fbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBGQUxTRSk7XG4mIzQzO1x0Z19tYWluX2xvb3BfcnVuKHBlcmZfZ3RrX19tYWluX2xvb3ApO1xuJiM0MztcdGdfY2xlYXJfcG9pbnRlcihcdTAwMjZwZXJmX2d0a19fbWFpbl9sb29wLCBnX21haW5fbG9vcF91bnJlZik7XG4gfVxuIFxuIGNvbnN0IGNoYXIgKnBlcmZfZ3RrX19nZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudClcbkBAIC00MiwzMyAmIzQzOzEwMiwzNSBAQCBjb25zdCBjaGFyICpwZXJmX2d0a19fZ2V0X3BlcmNlbnRfY29sb3IoZG91YmxlIHBlcmNlbnQpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiYjNDM7c3RhdGljIHZvaWQgcGVyZl9ndGtfX2hpZGVfd2lkZ2V0KEd0a1dpZGdldCAqd2lkZ2V0LCBnaW50IHJlc3BvbnNlX2lkIF9fbWF5YmVfdW51c2VkLFxuJiM0MztcdFx0XHRcdCAgIGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpZGdldCwgRkFMU0UpO1xuJiM0Mzt9XG4mIzQzO1xuIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKHZvaWQpXG4ge1xuIFx0R3RrV2lkZ2V0ICppbmZvX2JhcjtcbiBcdEd0a1dpZGdldCAqbGFiZWw7XG4tXHRHdGtXaWRnZXQgKmNvbnRlbnRfYXJlYTtcbiBcbiBcdGluZm9fYmFyID0gZ3RrX2luZm9fYmFyX25ldygpO1xuLVx0Z3RrX3dpZGdldF9zZXRfbm9fc2hvd19hbGwoaW5mb19iYXIsIFRSVUUpO1xuJiM0MztcdGd0a193aWRnZXRfc2V0X3Zpc2libGUoaW5mb19iYXIsIEZBTFNFKTtcbiBcbiBcdGxhYmVsID0gZ3RrX2xhYmVsX25ldyhcJiMzNDtcJiMzNDspO1xuLVx0Z3RrX3dpZGdldF9zaG93KGxhYmVsKTtcbiYjNDM7XHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGxhYmVsLCBUUlVFKTtcbiBcbi1cdGNvbnRlbnRfYXJlYSA9IGd0a19pbmZvX2Jhcl9nZXRfY29udGVudF9hcmVhKEdUS19JTkZPX0JBUihpbmZvX2JhcikpO1xuLVx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250ZW50X2FyZWEpLCBsYWJlbCk7XG4mIzQzO1x0Z3RrX2luZm9fYmFyX2FkZF9jaGlsZChHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBsYWJlbCk7XG4gXG4tXHRndGtfaW5mb19iYXJfYWRkX2J1dHRvbihHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBHVEtfU1RPQ0tfT0ssXG4mIzQzO1x0Z3RrX2luZm9fYmFyX2FkZF9idXR0b24oR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgXCYjMzQ7X09LXCYjMzQ7LFxuIFx0XHRcdFx0R1RLX1JFU1BPTlNFX09LKTtcbiBcdGdfc2lnbmFsX2Nvbm5lY3QoaW5mb19iYXIsIFwmIzM0O3Jlc3BvbnNlXCYjMzQ7LFxuLVx0XHRcdCBHX0NBTExCQUNLKGd0a193aWRnZXRfaGlkZSksIE5VTEwpO1xuJiM0MztcdFx0XHQgR19DQUxMQkFDSyhwZXJmX2d0a19faGlkZV93aWRnZXQpLCBOVUxMKTtcbiBcbiBcdHBnY3R4LVx1MDAzZWluZm9fYmFyID0gaW5mb19iYXI7XG4gXHRwZ2N0eC1cdTAwM2VtZXNzYWdlX2xhYmVsID0gbGFiZWw7XG4gXG4gXHRyZXR1cm4gaW5mb19iYXI7XG4gfVxuLSNlbmRpZlxuIFxuIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX3N0YXR1c2Jhcih2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9ndGsuaCBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXG5pbmRleCBhMmI0OTdmMDNmZDZlLi42YjM3ZmQ5OTQzYzlkIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXG5AQCAtMTMsMTAgJiM0MzsxMyw4IEBAIHN0cnVjdCBwZXJmX2d0a19jb250ZXh0IHtcbiBcdEd0a1dpZGdldCAqbWFpbl93aW5kb3c7XG4gXHRHdGtXaWRnZXQgKm5vdGVib29rO1xuIFxuLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4gXHRHdGtXaWRnZXQgKmluZm9fYmFyO1xuIFx0R3RrV2lkZ2V0ICptZXNzYWdlX2xhYmVsO1xuLSNlbmRpZlxuIFx0R3RrV2lkZ2V0ICpzdGF0YmFyO1xuIFx0Z3VpbnQgc3RhdGJhcl9jdHhfaWQ7XG4gfTtcbkBAIC0zOCwxOSAmIzQzOzM2LDE1IEBAIHZvaWQgcGVyZl9ndGtfX2luaXRfaGVscGxpbmUodm9pZCk7XG4gdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX2luaXQodm9pZCk7XG4gdm9pZCBwZXJmX2d0a19faW5pdF9ocHAodm9pZCk7XG4gXG4tdm9pZCBwZXJmX2d0a19fc2lnbmFsKGludCBzaWcpO1xuJiM0Mzt2b2lkIHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscyh2b2lkKTtcbiYjNDM7dm9pZCBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKGludCBzaWcpO1xuIHZvaWQgcGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3coR3RrV2lkZ2V0ICp3aW5kb3cpO1xuJiM0Mzt2b2lkIHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKEd0a1dpZGdldCAqd2luZG93KTtcbiYjNDM7dm9pZCBwZXJmX2d0a19fcXVpdF9tYWluX2xvb3Aodm9pZCk7XG4mIzQzO3ZvaWQgcGVyZl9ndGtfX3F1aXRfZXJyb3JfZGlhbG9nKHZvaWQpO1xuIGNvbnN0IGNoYXIgKnBlcmZfZ3RrX19nZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudCk7XG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKHZvaWQpO1xuLVxuLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZCk7XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKHZvaWQpXG4te1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLSNlbmRpZlxuIFxuIHN0cnVjdCBldnNlbDtcbiBzdHJ1Y3QgZXZsaXN0O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXG5pbmRleCBiYWUyMWYzMzZhZTZkLi4zNDJkNGMzZmVjYjAxIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuY1xuQEAgLTgsNiAmIzQzOzgsOCBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uL2hlbHBsaW5lLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9zdHJpbmcyLmhcJiMzNDtcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuIFxuQEAgLTM5NSwxMSAmIzQzOzM5Nyw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpc3RzKEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRndGtfdHJlZV92aWV3X3NldF9ydWxlc19oaW50KEdUS19UUkVFX1ZJRVcodmlldyksIFRSVUUpO1xuLVxuIFx0Z19zaWduYWxfY29ubmVjdCh2aWV3LCBcJiMzNDtyb3ctYWN0aXZhdGVkXCYjMzQ7LFxuIFx0XHRcdCBHX0NBTExCQUNLKG9uX3Jvd19hY3RpdmF0ZWQpLCBOVUxMKTtcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmlldyk7XG4mIzQzO1x0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuQEAgLTQ0OSw3ICYjNDM7NDQ5LDcgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuIFx0XHRiZiA9IGhwcC1cdTAwM2VidWY7XG4gXHRcdHNpemUgPSBocHAtXHUwMDNlc2l6ZTtcbiBcdFx0cGVyZl9ocHBfbGlzdF9fZm9yX2VhY2hfZm9ybWF0KGhlLVx1MDAzZWhwcF9saXN0LCBmbXQpIHtcbi1cdFx0XHRpbnQgcmV0O1xuJiM0MztcdFx0XHRpbnQgcmV0LCBpbmM7XG4gXG4gXHRcdFx0aWYgKGZtdC1cdTAwM2Vjb2xvcilcbiBcdFx0XHRcdHJldCA9IGZtdC1cdTAwM2Vjb2xvcihmbXQsIGhwcCwgaGUpO1xuQEAgLTQ1Nyw3ICYjNDM7NDU3LDE4IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoc3RydWN0IGhpc3RzICpoaXN0cyxcbiBcdFx0XHRcdHJldCA9IGZtdC1cdTAwM2VlbnRyeShmbXQsIGhwcCwgaGUpO1xuIFxuIFx0XHRcdHNucHJpbnRmKGhwcC1cdTAwM2VidWYgJiM0MzsgcmV0LCBocHAtXHUwMDNlc2l6ZSAtIHJldCwgXCYjMzQ7ICBcJiMzNDspO1xuLVx0XHRcdGFkdmFuY2VfaHBwKGhwcCwgcmV0ICYjNDM7IDIpO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiByZXQgY2FuIGJlIGFzIGxhcmdlIGFzIGhwcC1cdTAwM2VzaXplIC0gMSwgc28gcmV0ICYjNDM7IDJcbiYjNDM7XHRcdFx0ICogY2FuIGV4Y2VlZCBocHAtXHUwMDNlc2l6ZS4gYWR2YW5jZV9ocHAoKSBkb2VzbiYjMzk7dCBjbGFtcCxcbiYjNDM7XHRcdFx0ICogc28gcGFzc2luZyB0aGF0IHRocm91Z2ggd291bGQgdW5kZXJmbG93IHRoZVxuJiM0MztcdFx0XHQgKiBzaXplX3QgaHBwLVx1MDAzZXNpemUgYW5kIGxldCBhIGxhdGVyIGZtdC1cdTAwM2VlbnRyeSgpIGluXG4mIzQzO1x0XHRcdCAqIHRoaXMgbG9vcCB3cml0ZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGNhbGxlciYjMzk7c1xuJiM0MztcdFx0XHQgKiBzdGFjayBidWZmZXIuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpbmMgPSByZXQgJiM0MzsgMjtcbiYjNDM7XHRcdFx0aWYgKGluYyBcdTAwM2UgKGludClocHAtXHUwMDNlc2l6ZSlcbiYjNDM7XHRcdFx0XHRpbmMgPSBocHAtXHUwMDNlc2l6ZTtcbiYjNDM7XHRcdFx0YWR2YW5jZV9ocHAoaHBwLCBpbmMpO1xuIFx0XHR9XG4gXG4gXHRcdGd0a190cmVlX3N0b3JlX3NldChzdG9yZSwgXHUwMDI2aXRlciwgY29sX2lkeCwgc3RyaW0oYmYpLCAtMSk7XG5AQCAtNTA1LDYgJiM0Mzs1MTYsNyBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXG4gXHRHdGtXaWRnZXQgKnZpZXc7XG4gXHRpbnQgY29sX2lkeDtcbiBcdGludCBucl9jb2xzID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuIFx0Y2hhciBzWzUxMl07XG4gXHRjaGFyIGJ1Zls1MTJdO1xuIFx0Ym9vbCBmaXJzdF9ub2RlLCBmaXJzdF9jb2w7XG5AQCAtNTQxLDkgJiM0Mzs1NTMsMTAgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGllcmFyY2h5KEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuIFx0LyogY29uc3RydWN0IG1lcmdlZCBjb2x1bW4gaGVhZGVyIHNpbmNlIHNvcnQga2V5cyBzaGFyZSBzaW5nbGUgY29sdW1uICovXG4gXHRidWZbMF0gPSAmIzM5O1xcMCYjMzk7O1xuIFx0Zmlyc3Rfbm9kZSA9IHRydWU7XG4mIzQzO1x0cmV0ID0gMDtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoZm10X25vZGUsIFx1MDAyNmhpc3RzLVx1MDAzZWhwcF9mb3JtYXRzLCBsaXN0KSB7XG4gXHRcdGlmICghZmlyc3Rfbm9kZSlcbi1cdFx0XHRzdHJjYXQoYnVmLCBcJiMzNDsgLyBcJiMzNDspO1xuJiM0MztcdFx0XHRyZXQgJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgcmV0LCBzaXplb2YoYnVmKSAtIHJldCwgXCYjMzQ7IC8gXCYjMzQ7KTtcbiBcdFx0Zmlyc3Rfbm9kZSA9IGZhbHNlO1xuIFxuIFx0XHRmaXJzdF9jb2wgPSB0cnVlO1xuQEAgLTU1MiwxMSAmIzQzOzU2NSwxMSBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRpZiAoIWZpcnN0X2NvbClcbi1cdFx0XHRcdHN0cmNhdChidWYsIFwmIzM0OyYjNDM7XCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXQgJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgcmV0LCBzaXplb2YoYnVmKSAtIHJldCwgXCYjMzQ7JiM0MztcJiMzNDspO1xuIFx0XHRcdGZpcnN0X2NvbCA9IGZhbHNlO1xuIFxuIFx0XHRcdGZtdC1cdTAwM2VoZWFkZXIoZm10LCBcdTAwMjZocHAsIGhpc3RzLCAwLCBOVUxMKTtcbi1cdFx0XHRzdHJjYXQoYnVmLCBzdHJpbShocHAuYnVmKSk7XG4mIzQzO1x0XHRcdHJldCAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyByZXQsIHNpemVvZihidWYpIC0gcmV0LCBcJiMzNDslc1wmIzM0Oywgc3RyaW0oaHBwLmJ1ZikpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNTgzLDExICYjNDM7NTk2LDkgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGllcmFyY2h5KEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuIFx0cGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhoaXN0cywgXHUwMDI2aGlzdHMtXHUwMDNlZW50cmllcywgc3RvcmUsXG4gXHRcdFx0XHRcdE5VTEwsIFx1MDAyNmhwcCwgbWluX3BjbnQpO1xuIFxuLVx0Z3RrX3RyZWVfdmlld19zZXRfcnVsZXNfaGludChHVEtfVFJFRV9WSUVXKHZpZXcpLCBUUlVFKTtcbi1cbiBcdGdfc2lnbmFsX2Nvbm5lY3QodmlldywgXCYjMzQ7cm93LWFjdGl2YXRlZFwmIzM0OyxcbiBcdFx0XHQgR19DQUxMQkFDSyhvbl9yb3dfYWN0aXZhdGVkKSwgTlVMTCk7XG4tXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xuJiM0MztcdGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X2NoaWxkKEdUS19TQ1JPTExFRF9XSU5ET1cod2luZG93KSwgdmlldyk7XG4gfVxuIFxuIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLFxuQEAgLTYwMCwzNiAmIzQzOzYxMSwzMiBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcbiBcdEd0a1dpZGdldCAqc3RhdGJhcjtcbiBcdEd0a1dpZGdldCAqd2luZG93O1xuIFxuLVx0c2lnbmFsKFNJR1NFR1YsIHBlcmZfZ3RrX19zaWduYWwpO1xuLVx0c2lnbmFsKFNJR0ZQRSwgIHBlcmZfZ3RrX19zaWduYWwpO1xuLVx0c2lnbmFsKFNJR0lOVCwgIHBlcmZfZ3RrX19zaWduYWwpO1xuLVx0c2lnbmFsKFNJR1FVSVQsIHBlcmZfZ3RrX19zaWduYWwpO1xuLVx0c2lnbmFsKFNJR1RFUk0sIHBlcmZfZ3RrX19zaWduYWwpO1xuJiM0MztcdHNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKTtcbiYjNDM7XHRzaWduYWwoU0lHRlBFLCAgcGVyZl9ndGtfX2ZhdGFsX3NpZ25hbCk7XG4mIzQzO1x0cGVyZl9ndGtfX2luc3RhbGxfcXVpdF9zaWduYWxzKCk7XG4gXG4tXHR3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTtcbiYjNDM7XHR3aW5kb3cgPSBndGtfd2luZG93X25ldygpO1xuIFxuIFx0Z3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyh3aW5kb3cpLCBcJiMzNDtwZXJmIHJlcG9ydFwmIzM0Oyk7XG4gXG4tXHRnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgXCYjMzQ7ZGVsZXRlX2V2ZW50XCYjMzQ7LCBndGtfbWFpbl9xdWl0LCBOVUxMKTtcbi1cbiBcdHBnY3R4ID0gcGVyZl9ndGtfX2FjdGl2YXRlX2NvbnRleHQod2luZG93KTtcbiBcdGlmICghcGdjdHgpXG4gXHRcdHJldHVybiAtMTtcbiBcbi1cdHZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApO1xuJiM0MztcdHZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDApO1xuIFxuIFx0bm90ZWJvb2sgPSBndGtfbm90ZWJvb2tfbmV3KCk7XG4gXG4tXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2ssIFRSVUUsIFRSVUUsIDApO1xuJiM0MztcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQobm90ZWJvb2ssIFRSVUUpO1xuJiM0MztcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIG5vdGVib29rKTtcbiBcbiBcdGluZm9fYmFyID0gcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKCk7XG4tXHRpZiAoaW5mb19iYXIpXG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBpbmZvX2JhciwgRkFMU0UsIEZBTFNFLCAwKTtcbiYjNDM7XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBpbmZvX2Jhcik7XG4gXG4gXHRzdGF0YmFyID0gcGVyZl9ndGtfX3NldHVwX3N0YXR1c2JhcigpO1xuLVx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHN0YXRiYXIsIEZBTFNFLCBGQUxTRSwgMCk7XG4mIzQzO1x0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhcik7XG4gXG4tXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZib3gpO1xuJiM0MztcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cod2luZG93KSwgdmJveCk7XG4gXG4gXHRldmxpc3RfX2Zvcl9lYWNoX2VudHJ5KGV2bGlzdCwgcG9zKSB7XG4gXHRcdHN0cnVjdCBoaXN0cyAqaGlzdHMgPSBldnNlbF9faGlzdHMocG9zKTtcbkBAIC02NDksNyAmIzQzOzY1Niw3IEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLFxuIFx0XHRcdH1cbiBcdFx0fVxuIFxuLVx0XHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTtcbiYjNDM7XHRcdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KCk7XG4gXG4gXHRcdGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksXG4gXHRcdFx0XHRcdFx0XHRHVEtfUE9MSUNZX0FVVE9NQVRJQyxcbkBAIC02NjUsMTUgJiM0Mzs2NzIsMTIgQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXG4gXHRcdGd0a19ub3RlYm9va19hcHBlbmRfcGFnZShHVEtfTk9URUJPT0sobm90ZWJvb2spLCBzY3JvbGxlZF93aW5kb3csIHRhYl9sYWJlbCk7XG4gXHR9XG4gXG4tXHRndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7XG4tXG4gXHRwZXJmX2d0a19fcmVzaXplX3dpbmRvdyh3aW5kb3cpO1xuLVxuLVx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xuJiM0MztcdGd0a193aWRnZXRfc2V0X3Zpc2libGUod2luZG93LCBUUlVFKTtcbiBcbiBcdHVpX2hlbHBsaW5lX19wdXNoKGhlbHApO1xuIFxuLVx0Z3RrX21haW4oKTtcbiYjNDM7XHRwZXJmX2d0a19fcnVuX21haW5fbG9vcCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dChcdTAwMjZwZ2N0eCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmNcbmluZGV4IGVlYTZmY2RlNTE4YTguLjc3MGY5MjUxYjU0YjcgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jXG5AQCAtMSw0OSAmIzQzOzEsNjUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNpbmNsdWRlIFx1MDAzY2ludHR5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2d0ay5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vcHJvZ3Jlc3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gXG4gc3RhdGljIEd0a1dpZGdldCAqZGlhbG9nO1xuIHN0YXRpYyBHdGtXaWRnZXQgKnByb2dyZXNzO1xuIFxuJiM0MztzdGF0aWMgdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX2Rlc3Ryb3llZChHdGtXaWRnZXQgKndpZGdldCBfX21heWJlX3VudXNlZCxcbiYjNDM7XHRcdFx0XHRcdGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRkaWFsb2cgPSBOVUxMO1xuJiM0MztcdHByb2dyZXNzID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX3VwZGF0ZShzdHJ1Y3QgdWlfcHJvZ3Jlc3MgKnApXG4ge1xuIFx0ZG91YmxlIGZyYWN0aW9uID0gcC1cdTAwM2V0b3RhbCA/IDEuMCAqIHAtXHUwMDNlY3VyciAvIHAtXHUwMDNldG90YWwgOiAwLjA7XG4gXHRjaGFyIGJ1ZlsxMDI0XTtcbiBcbiBcdGlmIChkaWFsb2cgPT0gTlVMTCkge1xuLVx0XHRHdGtXaWRnZXQgKnZib3ggPSBndGtfdmJveF9uZXcoVFJVRSwgNSk7XG4mIzQzO1x0XHRHdGtXaWRnZXQgKnZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDUpO1xuIFx0XHRHdGtXaWRnZXQgKmxhYmVsID0gZ3RrX2xhYmVsX25ldyhwLVx1MDAzZXRpdGxlKTtcbiBcbi1cdFx0ZGlhbG9nID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7XG4mIzQzO1x0XHRkaWFsb2cgPSBndGtfd2luZG93X25ldygpO1xuIFx0XHRwcm9ncmVzcyA9IGd0a19wcm9ncmVzc19iYXJfbmV3KCk7XG4gXG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBsYWJlbCwgVFJVRSwgRkFMU0UsIDMpO1xuLVx0XHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgcHJvZ3Jlc3MsIFRSVUUsIFRSVUUsIDMpO1xuJiM0MztcdFx0Z3RrX3dpZGdldF9zZXRfdmV4cGFuZChsYWJlbCwgVFJVRSk7XG4mIzQzO1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBsYWJlbCk7XG4mIzQzO1x0XHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHByb2dyZXNzLCBUUlVFKTtcbiYjNDM7XHRcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIHByb2dyZXNzKTtcbiYjNDM7XG4mIzQzO1x0XHRndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKGRpYWxvZyksIHZib3gpO1xuIFxuLVx0XHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGRpYWxvZyksIHZib3gpO1xuJiM0MztcdFx0Z19zaWduYWxfY29ubmVjdChkaWFsb2csIFwmIzM0O2Rlc3Ryb3lcJiMzNDssXG4mIzQzO1x0XHRcdFx0IEdfQ0FMTEJBQ0soZ3RrX3VpX3Byb2dyZXNzX19kZXN0cm95ZWQpLCBOVUxMKTtcbiBcbiBcdFx0Z3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhkaWFsb2cpLCBcJiMzNDtwZXJmXCYjMzQ7KTtcbi1cdFx0Z3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcbi1cdFx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyhkaWFsb2cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xuJiM0MztcdFx0Z3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1coZGlhbG9nKSwgMzAwLCA4MCk7XG4gXG4tXHRcdGd0a193aWRnZXRfc2hvd19hbGwoZGlhbG9nKTtcbiYjNDM7XHRcdGd0a193aWRnZXRfc2V0X3Zpc2libGUoZGlhbG9nLCBUUlVFKTtcbiBcdH1cbiBcbiBcdGd0a19wcm9ncmVzc19iYXJfc2V0X2ZyYWN0aW9uKEdUS19QUk9HUkVTU19CQVIocHJvZ3Jlc3MpLCBmcmFjdGlvbik7XG4gXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslXCYjMzQ7UFJJdTY0XCYjMzQ7IC8gJVwmIzM0O1BSSXU2NCwgcC1cdTAwM2VjdXJyLCBwLVx1MDAzZXRvdGFsKTtcbiBcdGd0a19wcm9ncmVzc19iYXJfc2V0X3RleHQoR1RLX1BST0dSRVNTX0JBUihwcm9ncmVzcyksIGJ1Zik7XG4gXG4tXHQvKiB3ZSBkaWRuJiMzOTt0IGNhbGwgZ3RrX21haW4geWV0LCBzbyBkbyBpdCBtYW51YWxseSAqL1xuLVx0d2hpbGUgKGd0a19ldmVudHNfcGVuZGluZygpKVxuLVx0XHRndGtfbWFpbl9pdGVyYXRpb24oKTtcbiYjNDM7XHQvKiB3ZSBkaWRuJiMzOTt0IHN0YXJ0IGEgbWFpbiBsb29wIHlldCwgc28gcHVtcCBldmVudHMgbWFudWFsbHkgKi9cbiYjNDM7XHR3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSlcbiYjNDM7XHRcdGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZmluaXNoKHZvaWQpXG4ge1xuJiM0MztcdGlmIChkaWFsb2cgPT0gTlVMTClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHQvKiB0aGlzIHdpbGwgYWxzbyBkZXN0cm95IGFsbCBvZiBpdHMgY2hpbGRyZW4gKi9cbi1cdGd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpO1xuJiM0MztcdGd0a193aW5kb3dfZGVzdHJveShHVEtfV0lORE9XKGRpYWxvZykpO1xuIFxuIFx0ZGlhbG9nID0gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcbmluZGV4IGY1ZWVlNGQ2Njg3MzguLjliNDRmMzcxOTc0NzcgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jXG5AQCAtMTIsNyAmIzQzOzEyLDcgQEAgaW50IHBlcmZfZ3RrX19pbml0KHZvaWQpXG4gXHRndGtfdWlfcHJvZ3Jlc3NfX2luaXQoKTtcbiBcdHBlcmZfZ3RrX19pbml0X2hwcCgpO1xuIFxuLVx0cmV0dXJuIGd0a19pbml0X2NoZWNrKE5VTEwsIE5VTEwpID8gMCA6IC0xO1xuJiM0MztcdHJldHVybiBndGtfaW5pdF9jaGVjaygpID8gMCA6IC0xO1xuIH1cbiBcbiB2b2lkIHBlcmZfZ3RrX19leGl0KGJvb2wgd2FpdF9mb3Jfb2sgX19tYXliZV91bnVzZWQpXG5AQCAtMjAsNSAmIzQzOzIwLDYgQEAgdm9pZCBwZXJmX2d0a19fZXhpdChib29sIHdhaXRfZm9yX29rIF9fbWF5YmVfdW51c2VkKVxuIFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpKVxuIFx0XHRyZXR1cm47XG4gXHRwZXJmX2Vycm9yX191bnJlZ2lzdGVyKFx1MDAyNnBlcmZfZ3RrX2VvcHMpO1xuLVx0Z3RrX21haW5fcXVpdCgpO1xuJiM0MztcdHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZygpO1xuJiM0MztcdHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmMgYi90b29scy9wZXJmL3VpL2d0ay91dGlsLmNcbmluZGV4IGM0N2Y1YzM4NzgzOGMuLjU4MjNmZjBkN2MyYTcgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xuQEAgLTIsOCAmIzQzOzIsMTAgQEBcbiAjaW5jbHVkZSBcJiMzNDsuLi91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtndGsuaFwmIzM0O1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvemFsbG9jLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgcGVyZl9ndGtfY29udGV4dCAqcGdjdHg7XG5AQCAtMjgsODYgJiM0MzszMCwxMDMgQEAgaW50IHBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQgKipjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIHBlcmZfZ3RrX19lcnJvcigpIGNhbiBiZSBjYWxsZWQgcmUtZW50cmFudGx5LCBzaW5jZSB0aGUgZGlhbG9nIGlzbiYjMzk7dFxuJiM0MzsgKiBtb2RhbCBhbmQgaXRzIG5lc3RlZCBsb29wIHN0aWxsIHB1bXBzIGV2ZW50cyBmb3IgdGhlIG1haW4gd2luZG93LlxuJiM0MzsgKiBUcmFjayBldmVyeSBjdXJyZW50bHkgcnVubmluZyBsb29wIGluc3RlYWQgb2YgYSBzaW5nbGUgcG9pbnRlciwgc28gYVxuJiM0MzsgKiBuZXN0ZWQgY2FsbCBjYW4mIzM5O3QgY2xvYmJlciBhbiBvdXRlciBjYWxsJiMzOTtzIGxvb3AgYW5kIGxlYWsgaXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgR1NMaXN0ICpwZXJmX2d0a19fZXJyb3JfbG9vcHM7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwZXJmX2d0a19fcXVpdF9sb29wKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSBfX21heWJlX3VudXNlZClcbiYjNDM7e1xuJiM0MztcdGdfbWFpbl9sb29wX3F1aXQoZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgcGVyZl9ndGtfX3F1aXRfZXJyb3JfZGlhbG9nKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRnX3NsaXN0X2ZvcmVhY2gocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBwZXJmX2d0a19fcXVpdF9sb29wLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcGVyZl9ndGtfX2RpYWxvZ19yZXNwb25zZShHdGtEaWFsb2cgKmRpYWxvZyxcbiYjNDM7XHRcdFx0XHQgICAgICBnaW50IHJlc3BvbnNlX2lkIF9fbWF5YmVfdW51c2VkLFxuJiM0MztcdFx0XHRcdCAgICAgIGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRndGtfd2luZG93X2Rlc3Ryb3koR1RLX1dJTkRPVyhkaWFsb2cpKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHBlcmZfZ3RrX19lcnJvcihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncylcbiB7XG4gXHRjaGFyICptc2c7XG4gXHRHdGtXaWRnZXQgKmRpYWxvZztcbiYjNDM7XHRHTWFpbkxvb3AgKmxvb3A7XG4mIzQzO1x0dmFfbGlzdCBhcmdzX2NvcHk7XG4gXG4mIzQzO1x0dmFfY29weShhcmdzX2NvcHksIGFyZ3MpO1xuIFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpIHx8XG4tXHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzKSBcdTAwM2MgMCkge1xuJiM0MztcdCAgICB2YXNwcmludGYoXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3NfY29weSkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHZhX2VuZChhcmdzX2NvcHkpO1xuIFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6XFxuXCYjMzQ7KTtcbiBcdFx0dmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpO1xuIFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuJiM0MztcdHZhX2VuZChhcmdzX2NvcHkpO1xuIFxuIFx0ZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ld193aXRoX21hcmt1cChHVEtfV0lORE9XKHBnY3R4LVx1MDAzZW1haW5fd2luZG93KSxcbiBcdFx0XHRcdFx0R1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULFxuIFx0XHRcdFx0XHRHVEtfTUVTU0FHRV9FUlJPUixcbiBcdFx0XHRcdFx0R1RLX0JVVFRPTlNfQ0xPU0UsXG4gXHRcdFx0XHRcdFwmIzM0O1x1MDAzY2JcdTAwM2VFcnJvclx1MDAzYy9iXHUwMDNlXFxuXFxuJXNcJiMzNDssIG1zZyk7XG4tXHRndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpO1xuIFxuLVx0Z3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBcJiMzNDtyZXNwb25zZVwmIzM0OyBvbmx5IGZpcmVzIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZDsgREVTVFJPWV9XSVRIX1BBUkVOVFxuJiM0MztcdCAqIGRlc3Ryb3lzIHRoZSBkaWFsb2cgZGlyZWN0bHkgd2l0aG91dCBpdC4gUXVpdCBmcm9tIFwmIzM0O2Rlc3Ryb3lcJiMzNDtcbiYjNDM7XHQgKiBpbnN0ZWFkLCB3aGljaCBmaXJlcyBlaXRoZXIgd2F5LCBzbyB0aGUgbmVzdGVkIGxvb3AgYmVsb3cgY2FuJiMzOTt0XG4mIzQzO1x0ICogb3V0bGl2ZSB0aGUgZGlhbG9nIGFuZCBoYW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgRkFMU0UpO1xuJiM0MztcdHBlcmZfZ3RrX19lcnJvcl9sb29wcyA9IGdfc2xpc3RfcHJlcGVuZChwZXJmX2d0a19fZXJyb3JfbG9vcHMsIGxvb3ApO1xuJiM0MztcdGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCBcJiMzNDtyZXNwb25zZVwmIzM0OyxcbiYjNDM7XHRcdFx0IEdfQ0FMTEJBQ0socGVyZl9ndGtfX2RpYWxvZ19yZXNwb25zZSksIE5VTEwpO1xuJiM0MztcdGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChkaWFsb2csIFwmIzM0O2Rlc3Ryb3lcJiMzNDssXG4mIzQzO1x0XHRcdFx0IEdfQ0FMTEJBQ0soZ19tYWluX2xvb3BfcXVpdCksIGxvb3ApO1xuJiM0MztcbiYjNDM7XHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGRpYWxvZywgVFJVRSk7XG4mIzQzO1x0Z19tYWluX2xvb3BfcnVuKGxvb3ApO1xuJiM0MztcdHBlcmZfZ3RrX19lcnJvcl9sb29wcyA9IGdfc2xpc3RfcmVtb3ZlKHBlcmZfZ3RrX19lcnJvcl9sb29wcywgbG9vcCk7XG4mIzQzO1x0Z19tYWluX2xvb3BfdW5yZWYobG9vcCk7XG4mIzQzO1xuIFx0ZnJlZShtc2cpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4gc3RhdGljIGludCBwZXJmX2d0a19fd2FybmluZ19pbmZvX2Jhcihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncylcbiB7XG4gXHRjaGFyICptc2c7XG4mIzQzO1x0dmFfbGlzdCBhcmdzX2NvcHk7XG4gXG4mIzQzO1x0dmFfY29weShhcmdzX2NvcHksIGFyZ3MpO1xuIFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpIHx8XG4tXHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzKSBcdTAwM2MgMCkge1xuJiM0MztcdCAgICB2YXNwcmludGYoXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3NfY29weSkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHZhX2VuZChhcmdzX2NvcHkpO1xuIFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7V2FybmluZzpcXG5cJiMzNDspO1xuIFx0XHR2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7XG4gXHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4mIzQzO1x0dmFfZW5kKGFyZ3NfY29weSk7XG4gXG4gXHRndGtfbGFiZWxfc2V0X3RleHQoR1RLX0xBQkVMKHBnY3R4LVx1MDAzZW1lc3NhZ2VfbGFiZWwpLCBtc2cpO1xuIFx0Z3RrX2luZm9fYmFyX3NldF9tZXNzYWdlX3R5cGUoR1RLX0lORk9fQkFSKHBnY3R4LVx1MDAzZWluZm9fYmFyKSxcbiBcdFx0XHRcdCAgICAgIEdUS19NRVNTQUdFX1dBUk5JTkcpO1xuLVx0Z3RrX3dpZGdldF9zaG93KHBnY3R4LVx1MDAzZWluZm9fYmFyKTtcbi1cbi1cdGZyZWUobXNnKTtcbi1cdHJldHVybiAwO1xuLX1cbi0jZWxzZVxuLXN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxuLXtcbi1cdGNoYXIgKm1zZywgKnA7XG4tXG4tXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHxcbi1cdCAgICB2YXNwcmludGYoXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3MpIFx1MDAzYyAwKSB7XG4tXHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtXYXJuaW5nOlxcblwmIzM0Oyk7XG4tXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAtMTtcbi1cdH1cbi1cbi1cdGd0a19zdGF0dXNiYXJfcG9wKEdUS19TVEFUVVNCQVIocGdjdHgtXHUwMDNlc3RhdGJhciksXG4tXHRcdFx0ICBwZ2N0eC1cdTAwM2VzdGF0YmFyX2N0eF9pZCk7XG4tXG4tXHQvKiBPbmx5IGZpcnN0IGxpbmUgY2FuIGJlIGRpc3BsYXllZCAqL1xuLVx0cCA9IHN0cmNocihtc2csICYjMzk7XFxuJiMzOTspO1xuLVx0aWYgKHApXG4tXHRcdCpwID0gJiMzOTtcXDAmIzM5Oztcbi1cbi1cdGd0a19zdGF0dXNiYXJfcHVzaChHVEtfU1RBVFVTQkFSKHBnY3R4LVx1MDAzZXN0YXRiYXIpLFxuLVx0XHRcdCAgIHBnY3R4LVx1MDAzZXN0YXRiYXJfY3R4X2lkLCBtc2cpO1xuJiM0MztcdGd0a193aWRnZXRfc2V0X3Zpc2libGUocGdjdHgtXHUwMDNlaW5mb19iYXIsIFRSVUUpO1xuIFxuIFx0ZnJlZShtc2cpO1xuIFx0cmV0dXJuIDA7XG4gfVxuLSNlbmRpZlxuIFxuIHN0cnVjdCBwZXJmX2Vycm9yX29wcyBwZXJmX2d0a19lb3BzID0ge1xuIFx0LmVycm9yXHRcdD0gcGVyZl9ndGtfX2Vycm9yLFxuLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4gXHQud2FybmluZ1x0PSBwZXJmX2d0a19fd2FybmluZ19pbmZvX2Jhcixcbi0jZWxzZVxuLVx0Lndhcm5pbmdcdD0gcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyLFxuLSNlbmRpZlxuIH07XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9zZXR1cC5jXG5pbmRleCBmZjgwMDA0N2U2OTdmLi5kODg3MzQ2YzdhNjMyIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9zZXR1cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL3NldHVwLmNcbkBAIC0xNCw3ICYjNDM7MTQsNyBAQCBpbnQgdXNlX2Jyb3dzZXIgPSAtMTtcbiBcbiAjZGVmaW5lIFBFUkZfR1RLX0RTTyBcJiMzNDtsaWJwZXJmLWd0ay5zb1wmIzM0O1xuIFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcbiBzdGF0aWMgaW50IHNldHVwX2d0a19icm93c2VyKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmNcbmluZGV4IGRmNzBlOTVhODQ3MDQuLjEyM2I2ZDVmY2VhNzggMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmNcbkBAIC0xNDUsNiAmIzQzOzE0NSwxNyBAQCBzdGF0aWMgaW50IGFubm90YXRlZF9zb3VyY2VfX2FsbG9jX2hpc3RvZ3JhbXMoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYyxcbiBcdHJldHVybiBzcmMtXHUwMDNlaGlzdG9ncmFtcyA/IDAgOiAtMTtcbiB9XG4gXG4mIzQzO3N0cnVjdCBzeW1faGlzdF9lbnRyeSAqXG4mIzQzO2Fubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzeW1faGlzdF9lbnRyeSAqZW50cnk7XG4mIzQzO1x0bG9uZyBrZXkgPSBvZmZzZXQgXHUwMDNjXHUwMDNjIDE2IHwgZXZzZWwtXHUwMDNlY29yZS5pZHg7XG4mIzQzO1xuJiM0MztcdGlmICghaGFzaG1hcF9fZmluZChzcmMtXHUwMDNlc2FtcGxlcywga2V5LCBcdTAwMjZlbnRyeSkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gZW50cnk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBzeW1ib2xfX2Fubm90YXRlX3plcm9faGlzdG9ncmFtcyhzdHJ1Y3Qgc3ltYm9sICpzeW0pXG4ge1xuIFx0c3RydWN0IGFubm90YXRpb24gKm5vdGVzID0gc3ltYm9sX19hbm5vdGF0aW9uKHN5bSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmggYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaFxuaW5kZXggZmEwOGQwOWI4MGY3Ni4uNDAwMzhhMzc3OWQ0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaFxuQEAgLTQwNiwxNiAmIzQzOzQwNiw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bV9oaXN0ICphbm5vdGF0aW9uX19oaXN0b2dyYW0oc3RydWN0IGFubm90YXRpb24gKm5vdGVzLFxuIFx0cmV0dXJuIGFubm90YXRlZF9zb3VyY2VfX2hpc3RvZ3JhbShub3Rlcy1cdTAwM2VzcmMsIGV2c2VsKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKlxuLWFubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldClcbi17XG4tXHRzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKmVudHJ5O1xuLVx0bG9uZyBrZXkgPSBvZmZzZXQgXHUwMDNjXHUwMDNjIDE2IHwgZXZzZWwtXHUwMDNlY29yZS5pZHg7XG4tXG4tXHRpZiAoIWhhc2htYXBfX2ZpbmQoc3JjLVx1MDAzZXNhbXBsZXMsIGtleSwgXHUwMDI2ZW50cnkpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdHJldHVybiBlbnRyeTtcbi19XG4mIzQzO3N0cnVjdCBzeW1faGlzdF9lbnRyeSAqXG4mIzQzO2Fubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldCk7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgYW5ub3RhdGlvbiAqc3ltYm9sX19hbm5vdGF0aW9uKHN0cnVjdCBzeW1ib2wgKnN5bSlcbiB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29saW5nIGFuZCBidWlsZCBzY3JpcHRzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHBvcnRpbmcgdGhlIHBlcmYgR1RLIFVJIGZyb20gR1RLMiB0byBHVEs0IGFuZCBtaW5vciBoZWxwZXIgcmVsb2NhdGlvbiBpbiB0b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYykuIEl0IGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwtc3BhY2UgY29kZSwgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVmYWY0MTUzNjQwMGZjNzIwOTNkZjc4ZDZlNzk3YTM3Y2JhYjA2ZjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDAyOjI2OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZSBiL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUKaW5kZXggOTllYjBlYTA5NTM3NS4uNGVjOTVjMzVhNWMxOSAxMDA2NDQKLS0tIGEvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlCkBAIC0xMTMsOCAmIzQzOzExMyw3IEBAIEZFQVRVUkVfVEVTVFNfRVhUUkEgOj0gICAgICAgICAgICAgICAgICBcCiAgICAgICAgICBjb21waWxlLXgzMiAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgY3BsdXMtZGVtYW5nbGUgICAgICAgICAgICAgICAgIFwKICAgICAgICAgIGN4YS1kZW1hbmdsZSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICBndGsyICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgZ3RrMi1pbmZvYmFyICAgICAgICAgICAgICAgICAgIFwKJiM0MzsgICAgICAgICBndGs0ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgaGVsbG8gICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgIGJhYmVsdHJhY2UyLWN0Zi13cml0ZXIgICAgICAgICBcCiAgICAgICAgICBsaWJjYXBzdG9uZSAgICAgICAgICAgICAgICAgICAgXApAQCAtMTQzLDYgJiM0MzsxNDIsNyBAQCBlbmRpZgogRkVBVFVSRV9ESVNQTEFZID89ICAgICAgICAgICAgICBcCiAgICAgICAgICBsaWJkdyAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgIGdsaWJjICAgICAgICAgICAgICAgICAgXAomIzQzOyAgICAgICAgIGd0azQgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgbGliZWxmICAgICAgICAgICAgICAgICBcCiAgICAgICAgICBsaWJudW1hICAgICAgICAgICAgICAgIFwKICAgICAgICAgIG51bWFfbnVtX3Bvc3NpYmxlX2NwdXMgXApkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZSBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGUKaW5kZXggN2QxNjUwMTgxMTZhNS4uMDFjNDhlNmVmMDIxZCAxMDA2NDQKLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlCkBAIC0xMSw4ICYjNDM7MTEsNyBAQCBGSUxFUz0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICB0ZXN0LWV2ZW50ZmQuYmluICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICB0ZXN0LWZvcnRpZnktc291cmNlLmJpbiAgICAgICAgICAgICAgICBcCiAgICAgICAgICB0ZXN0LWdsaWJjLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICB0ZXN0LWd0azIuYmluICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICB0ZXN0LWd0azItaW5mb2Jhci5iaW4gICAgICAgICAgICAgICAgICBcCiYjNDM7ICAgICAgICAgdGVzdC1ndGs0LmJpbiAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgdGVzdC1oZWxsby5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgdGVzdC1saWJiZmQuYmluICAgICAgICAgICAgICAgICAgICAgICAgXAogCSB0ZXN0LWxpYmJmZC10aHJlYWRzYWZlLmJpbiAgICAgIAlcCkBAIC0yNDAsMTEgJiM0MzsyMzksOCBAQCAkKE9VVFBVVCl0ZXN0LWxpYmNwdXBvd2VyLmJpbjoKICQoT1VUUFVUKXRlc3QtbGlidHJhY2Vmcy5iaW46CiAJICQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBsaWJ0cmFjZWZzIDImZ3Q7L2Rldi9udWxsKSAtbHRyYWNlZnMKIAotJChPVVRQVVQpdGVzdC1ndGsyLmJpbjoKLQkkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0ayYjNDM7LTIuMCAyJmd0Oy9kZXYvbnVsbCkgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucwotCi0kKE9VVFBVVCl0ZXN0LWd0azItaW5mb2Jhci5iaW46Ci0JJChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsmIzQzOy0yLjAgMiZndDsvZGV2L251bGwpCiYjNDM7JChPVVRQVVQpdGVzdC1ndGs0LmJpbjoKJiM0MzsJJChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGs0IDImZ3Q7L2Rldi9udWxsKQogCiBncmVwLWxpYnMgID0gJChmaWx0ZXIgLWwlLCQoMSkpCiBzdHJpcC1saWJzID0gJChmaWx0ZXItb3V0IC1sJSwkKDEpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWI3MTZkZDU3MzMwLi4wMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLWluZm9iYXIuYwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDEyICYjNDM7MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICYjMzQ7LVdzdHJpY3QtcHJvdG90eXBlcyYjMzQ7Ci0jaW5jbHVkZSAmbHQ7Z3RrL2d0ay5oJmd0OwotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBlcnJvciAmIzM0Oy1Xc3RyaWN0LXByb3RvdHlwZXMmIzM0OwotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCWd0a19pbml0KCZhbXA7YXJnYywgJmFtcDthcmd2KTsKLQlndGtfaW5mb19iYXJfbmV3KCk7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLmMgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrNC5jCnNpbWlsYXJpdHkgaW5kZXggNzYlCnJlbmFtZSBmcm9tIHRvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLmMKcmVuYW1lIHRvIHRvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmMKaW5kZXggMmFhZjRiZmMyMDU1Ni4uYjk1MjBlNzQwOGI5OSAxMDA2NDQKLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrNC5jCkBAIC0zLDkgJiM0MzszLDkgQEAKICNpbmNsdWRlICZsdDtndGsvZ3RrLmgmZ3Q7CiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGVycm9yICYjMzQ7LVdzdHJpY3QtcHJvdG90eXBlcyYjMzQ7CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiYjNDM7aW50IG1haW4odm9pZCkKIHsKLQlndGtfaW5pdCgmYW1wO2FyZ2MsICZhbXA7YXJndik7CiYjNDM7CWd0a19pbml0KCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dAppbmRleCAyMmY4N2VhYTMyNzk2Li43YWY5YjNmODFjMDY1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQKQEAgLTM1MSw3ICYjNDM7MzUxLDcgQEAgT1BUSU9OUwogCXJlcXVpcmVzIGEgdHR5LCBpZiBvbmUgaXMgbm90IHByZXNlbnQsIGFzIHdoZW4gcGlwaW5nIHRvIG90aGVyCiAJY29tbWFuZHMsIHRoZSBzdGRpbyBpbnRlcmZhY2UgaXMgdXNlZC4KIAotLS1ndGs6OiBVc2UgdGhlIEdUSzIgaW50ZXJmYWNlLgomIzQzOy0tZ3RrOjogVXNlIHRoZSBHVEs0IGludGVyZmFjZS4KIAogLWs6OgogLS12bWxpbnV4PSZsdDtmaWxlJmd0Ozo6CmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCA1YjcxMzgzN2VlZGU3Li41NjAxNDEwNjQ3OWEzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTEwNiw3ICYjNDM7MTA2LDcgQEAgY2xlYW46CiAjIG1ha2UgLUMgdG9vbHMvcGVyZiAtZiB0ZXN0cy9tYWtlCiAjCiBidWlsZC10ZXN0OgotCUAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azIgb3V0CiYjNDM7CUAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azQgb3V0CiAKIGJ1aWxkLXRlc3QtdGFyYmFsbDoKIAlAJChNQUtFKSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSBvdXQKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWcKaW5kZXggNGQ1OTkzZGE5Zjk0NS4uNGVlNzM5M2EzOWY5MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWcKQEAgLTc3NCwyMSAmIzQzOzc3NCwyMiBAQCBpZm5kZWYgTk9fU0xBTkcKICAgZW5kaWYKIGVuZGlmCiAKLWlmZGVmIEdUSzIKLSAgRkxBR1NfR1RLMj0kKENGTEFHUykgJChMREZMQUdTKSAkKEVYVExJQlMpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrJiM0MzstMi4wIDImZ3Q7L2Rldi9udWxsKQotICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGsyKQotICBpZm5lcSAoJChmZWF0dXJlLWd0azIpLCAxKQotICAgICQod2FybmluZyBHVEsyIG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLMiBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGsyLWRldmVsIG9yIGxpYmd0azIuMC1kZXYpCi0gICAgTk9fR1RLMiA6PSAxCiYjNDM7aWZkZWYgR1RLNAomIzQzOyAgRkxBR1NfR1RLND0kKENGTEFHUykgJChMREZMQUdTKSAkKEVYVExJQlMpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrNCAyJmd0Oy9kZXYvbnVsbCkKJiM0MzsgICQoY2FsbCBmZWF0dXJlX2NoZWNrLGd0azQpCiYjNDM7ICBpZm5lcSAoJChmZWF0dXJlLWd0azQpLCAxKQomIzQzOyAgICAkKHdhcm5pbmcgR1RLNCBub3QgZm91bmQsIGRpc2FibGVzIEdUSzQgc3VwcG9ydC4gUGxlYXNlIGluc3RhbGwgZ3RrNC1kZXZlbCBvciBsaWJndGstNC1kZXYpCiYjNDM7ICAgIE5PX0dUSzQgOj0gMQogICBlbHNlCi0gICAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrMi1pbmZvYmFyKQotICAgIGlmZXEgKCQoZmVhdHVyZS1ndGsyLWluZm9iYXIpLCAxKQotICAgICAgR1RLX0NGTEFHUyA6PSAtREhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlQKLSAgICBlbmRpZgotICAgIENGTEFHUyAmIzQzOz0gLURIQVZFX0dUSzJfU1VQUE9SVAotICAgIEdUS19DRkxBR1MgJiM0Mzs9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBndGsmIzQzOy0yLjAgMiZndDsvZGV2L251bGwpCi0gICAgR1RLX0xJQlMgOj0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyBndGsmIzQzOy0yLjAgMiZndDsvZGV2L251bGwpCiYjNDM7ICAgIENGTEFHUyAmIzQzOz0gLURIQVZFX0dUSzRfU1VQUE9SVAomIzQzOyAgICBHVEtfQ0ZMQUdTICYjNDM7PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgZ3RrNCAyJmd0Oy9kZXYvbnVsbCkKJiM0MzsgICAgR1RLX0xJQlMgOj0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyBndGs0IDImZ3Q7L2Rldi9udWxsKQogICAgIEVYVExJQlMgJiM0Mzs9IC1sZGwKJiM0MzsgICAgIyBsaWJwZXJmLWd0ay5zbyBpcyBkbG9wZW4oKWVkIGF0IHJ1bnRpbWUgYW5kIGNhbGxzIGJhY2sgaW50bwomIzQzOyAgICAjIHN5bWJvbHMgZGVmaW5lZCBpbiB0aGUgcGVyZiBiaW5hcnkgaXRzZWxmIChjYWxsY2hhaW5fcGFyYW0sCiYjNDM7ICAgICMgc3ltYm9sX2NvbmYsIGV2c2VsX19uYW1lLCAuLi4pOiBwZXJmIG5lZWRzIHRvIGV4cG9ydCB0aG9zZQomIzQzOyAgICAjIGR5bmFtaWNhbGx5IGZvciB0aGUgcGx1Z2luIHRvIHJlc29sdmUgdGhlbS4KJiM0MzsgICAgTERGTEFHUyAmIzQzOz0gLXJkeW5hbWljCiAgIGVuZGlmCiBlbmRpZgogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYgYi90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKaW5kZXggMjljZmQ0NGM0MjdmMy4uMjQzOGI0MGVhYWVjMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgpAQCAtNDksNyAmIzQzOzQ5LDcgQEAgaW5jbHVkZSAuLi9zY3JpcHRzL3V0aWxpdGllcy5tYWsKICMKICMgRGVmaW5lIE5PX1NMQU5HIGlmIHlvdSBkbyBub3Qgd2FudCBUVUkgc3VwcG9ydC4KICMKLSMgRGVmaW5lIEdUSzIgaWYgeW91IHdhbnQgR1RLJiM0MzsgR1VJIHN1cHBvcnQuCiYjNDM7IyBEZWZpbmUgR1RLNCBpZiB5b3Ugd2FudCBHVEsmIzQzOyBHVUkgc3VwcG9ydC4KICMKICMgRGVmaW5lIE5PX0RFTUFOR0xFIGlmIHlvdSBkbyBub3Qgd2FudCBDJiM0MzsmIzQzOyBzeW1ib2wgZGVtYW5nbGluZy4KICMKQEAgLTQ3Myw3ICYjNDM7NDczLDcgQEAgaWZuZXEgKCQoT1VUUFVUKSwpCiAgIENGTEFHUyAmIzQzOz0gLUkkKE9VVFBVVCkKIGVuZGlmCiAKLWlmZGVmIEdUSzIKJiM0MztpZmRlZiBHVEs0CiAgIEFMTF9QUk9HUkFNUyAmIzQzOz0gJChPVVRQVVQpbGlicGVyZi1ndGsuc28KICAgR1RLX0lOIDo9ICQoT1VUUFVUKWd0ay1pbi5vCiBlbmRpZgpAQCAtODExLDcgJiM0Mzs4MTEsNyBAQCBjaGVjazogcHJlcGFyZQogCiAjIyMgSW5zdGFsbGF0aW9uIHJ1bGVzCiAKLWlmZGVmIEdUSzIKJiM0MztpZmRlZiBHVEs0CiBpbnN0YWxsLWd0azogJChPVVRQVVQpbGlicGVyZi1ndGsuc28KIAkkKGNhbGwgUVVJRVRfSU5TVEFMTCwgJiMzOTtHVEsgVUkmIzM5OykgXAogCQkkKElOU1RBTEwpIC1kIC1tIDc1NSAmIzM5OyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSkmIzM5OzsgXApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwppbmRleCA2OWNiNzJiMjA4MmE2Li4xNTE2M2UwODFhOGNlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwpAQCAtNTIsNyAmIzQzOzUyLDcgQEAgc3RydWN0IHBlcmZfYW5ub3RhdGUgewogCWJvb2wJICAgdXNlX3R1aTsKICNlbmRpZgogCWJvb2wJICAgdXNlX3N0ZGlvLCB1c2Vfc3RkaW8yOwotI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUCiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUCiAJYm9vbAkgICB1c2VfZ3RrOwogI2VuZGlmCiAJYm9vbAkgICBza2lwX21pc3Npbmc7CkBAIC03MTIsNyAmIzQzOzcxMiw3IEBAIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogCU9QVF9CT09MRUFOKCYjMzk7cSYjMzk7LCAmIzM0O3F1aWV0JiMzNDssICZhbXA7cXVpZXQsICYjMzQ7ZG8gbm93IHNob3cgYW55IHdhcm5pbmdzIG9yIG1lc3NhZ2VzJiMzNDspLAogCU9QVF9CT09MRUFOKCYjMzk7RCYjMzk7LCAmIzM0O2R1bXAtcmF3LXRyYWNlJiMzNDssICZhbXA7ZHVtcF90cmFjZSwKIAkJICAgICYjMzQ7ZHVtcCByYXcgdHJhY2UgaW4gQVNDSUkmIzM0OyksCi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlQKJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlQKIAlPUFRfQk9PTEVBTigwLCAmIzM0O2d0ayYjMzQ7LCAmYW1wO2Fubm90YXRlLnVzZV9ndGssICYjMzQ7VXNlIHRoZSBHVEsgaW50ZXJmYWNlJiMzNDspLAogI2VuZGlmCiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUCkBAIC04MjgsNyAmIzQzOzgyOCw3IEBAIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogCWlmIChhbm5vdGF0ZV9jaGVja19hcmdzKCkgJmx0OyAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUCiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUCiAJaWYgKHN5bWJvbF9jb25mLnNob3dfbnJfc2FtcGxlcyAmYW1wOyZhbXA7IGFubm90YXRlLnVzZV9ndGspIHsKIAkJcHJfZXJyKCYjMzQ7LS1zaG93LW5yLXNhbXBsZXMgaXMgbm90IGF2YWlsYWJsZSBpbiAtLWd0ayBtb2RlIGF0IHRoaXMgdGltZVxuJiMzNDspOwogCQlyZXR1cm4gcmV0OwpAQCAtODk4LDcgJiM0Mzs4OTgsNyBAQCBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIAllbHNlIGlmIChhbm5vdGF0ZS51c2VfdHVpKQogCQl1c2VfYnJvd3NlciA9IDE7CiAjZW5kaWYKLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVAomIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVAogCWVsc2UgaWYgKGFubm90YXRlLnVzZV9ndGspCiAJCXVzZV9icm93c2VyID0gMjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCmluZGV4IDYwZDFmMTY2NjI5ZTAuLmQxNDM4NGM1ODQ2NjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKQEAgLTgyLDcgJiM0Mzs4Miw3IEBAIHN0cnVjdCByZXBvcnQgewogI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVAogCWJvb2wJCQl1c2VfdHVpOwogI2VuZGlmCi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlQKJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlQKIAlib29sCQkJdXNlX2d0azsKICNlbmRpZgogCWJvb2wJCQl1c2Vfc3RkaW87CkBAIC0xMzU5LDggJiM0MzsxMzU5LDggQEAgaW50IGNtZF9yZXBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVAogCU9QVF9CT09MRUFOKDAsICYjMzQ7dHVpJiMzNDssICZhbXA7cmVwb3J0LnVzZV90dWksICYjMzQ7VXNlIHRoZSBUVUkgaW50ZXJmYWNlJiMzNDspLAogI2VuZGlmCi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlQKLQlPUFRfQk9PTEVBTigwLCAmIzM0O2d0ayYjMzQ7LCAmYW1wO3JlcG9ydC51c2VfZ3RrLCAmIzM0O1VzZSB0aGUgR1RLMiBpbnRlcmZhY2UmIzM0OyksCiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUCiYjNDM7CU9QVF9CT09MRUFOKDAsICYjMzQ7Z3RrJiMzNDssICZhbXA7cmVwb3J0LnVzZV9ndGssICYjMzQ7VXNlIHRoZSBHVEs0IGludGVyZmFjZSYjMzQ7KSwKICNlbmRpZgogCU9QVF9CT09MRUFOKDAsICYjMzQ7c3RkaW8mIzM0OywgJmFtcDtyZXBvcnQudXNlX3N0ZGlvLAogCQkgICAgJiMzNDtVc2UgdGhlIHN0ZGlvIGludGVyZmFjZSYjMzQ7KSwKQEAgLTE3MTAsNyAmIzQzOzE3MTAsNyBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiAJZWxzZSBpZiAocmVwb3J0LnVzZV90dWkpCiAJCXVzZV9icm93c2VyID0gMTsKICNlbmRpZgotI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUCiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUCiAJZWxzZSBpZiAocmVwb3J0LnVzZV9ndGspCiAJCXVzZV9icm93c2VyID0gMjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2gKaW5kZXggZDAwM2U3ZmFiMmJlOC4uYTYwMWE1MjYwYzE3ZSAxMDA3NTUKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoCkBAIC0xOTksOCAmIzQzOzE5OSw4IEBAIGZlZG9yYV9wa2dfZm9yKCkgewogCSMgb3B0LWluIGZlYXR1cmVzLCB3aGljaCBhIGRlZmF1bHQgYnVpbGQgZG9lcyBub3QgZW5hYmxlOiB0aGUgbGliYmZkCiAJIyBkaXNhc3NlbWJsZXIgZmFtaWx5IChsaWJiZmQsIGxpYmJmZC10aHJlYWRzYWZlLCBsaWJiZmQtbGliZXJ0eSwKIAkjIGRpc2Fzc2VtYmxlci0qLCBjcGx1cy1kZW1hbmdsZSksIG9ubHkgbGlua2VkIG9uIEJVSUxEX05PTkRJU1RSTwotCSMgYnVpbGRzIGFuZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNhcHN0b25lLCBHVEsyLCBMSUJQRVJMIGFuZAotCSMgTElCVU5XSU5EIHN1cHBvcnQgKGlmZGVmIEdUSzIgLyBpZmRlZiBMSUJQRVJMIC8gTElCVU5XSU5EPTEpLAomIzQzOwkjIGJ1aWxkcyBhbmQgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBjYXBzdG9uZSwgR1RLNCwgTElCUEVSTCBhbmQKJiM0MzsJIyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLNCAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksCiAJIyBhbmQgQ29yZVNpZ2h0IChpZmRlZiBDT1JFU0lHSFQpLCBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBtYXBwZWQuCiAJIyBsaWJhaW8gaXMgbm90IG1hcHBlZCBlaXRoZXI6IGl0cwogCSMgdGVzdCB1c2VzIHRoZSBQT1NJWCBBSU8gQVBJIChhaW8uaCwgYWlvXyosIC1scnQpLCBwcm92aWRlZCBieQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9tYWtlIGIvdG9vbHMvcGVyZi90ZXN0cy9tYWtlCmluZGV4IGQyYzJmNTI2ZTFkYjAuLjIwMmFiNTUwMTkxNjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3Rlc3RzL21ha2UKQEAgLTk1LDcgJiM0Mzs5NSw3IEBAIG1ha2Vfbm9fYmFiZWx0cmFjZTIgOj0gTk9fQkFCRUxUUkFDRTI9MQogbWFrZV93aXRoX2NvcmVzaWdodCA6PSBDT1JFU0lHSFQ9MQogbWFrZV9ub19zZHQJICAgIDo9IE5PX1NEVD0xCiBtYWtlX25vX2xpYnBmbTQgICAgIDo9IE5PX0xJQlBGTTQ9MQotbWFrZV93aXRoX2d0azIgICAgICA6PSBHVEsyPTEKJiM0MzttYWtlX3dpdGhfZ3RrNCAgICAgIDo9IEdUSzQ9MQogbWFrZV9yZWZjbnRfY2hlY2sgICA6PSBFWFRSQV9DRkxBR1M9JiMzNDstRFJFRkNOVF9DSEVDS0lORz0xJiMzNDsKIG1ha2VfdGFncyAgICAgICAgICAgOj0gdGFncwogbWFrZV9jc2NvcGUgICAgICAgICA6PSBjc2NvcGUKQEAgLTMxOCw3ICYjNDM7MzE4LDcgQEAgJChydW4pOgogCSQoY2FsbCB0ZXN0LCRAKSAmYW1wOyZhbXA7IFwKIAlybSAtcmYgJEAgJCRUTVBfREVTVCB8fCAoY2F0ICRAIDsgZmFsc2UpCiAKLW1ha2Vfd2l0aF9ndGsyOgomIzQzO21ha2Vfd2l0aF9ndGs0OgogCSQoY2FsbCBjbGVhbikKIAlAVE1QX0RFU1Q9JCQobWt0ZW1wIC1kKTsgXAogCWNtZD0mIzM0O2NkICQoUEVSRikgJmFtcDsmYW1wOyAkKE1BS0VfRikgJCgkQCkgJChQQVJBTExFTF9PUFQpICQoT19PUFQpIERFU1RESVI9JCRUTVBfREVTVCYjMzQ7OyBcCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuYwppbmRleCA4OTIwZTI5ODQyMGE4Li4wOTRkZmEwNDViNzc0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmIzM0O3VpL2hlbHBsaW5lLmgmIzM0OwogI2luY2x1ZGUgJmx0O2ludHR5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwogCiBlbnVtIHsKIAlBTk5fQ09MX19QRVJDRU5ULApAQCAtMTYxLDcgJiM0MzsxNjIsNyBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX19hbm5vdGF0ZV9zeW1ib2woR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBtYXBfc3ltYm9sICptcywKIAkJCWd0a19saXN0X3N0b3JlX3NldChzdG9yZSwgJmFtcDtpdGVyLCBBTk5fQ09MX19MSU5FLCBzLCAtMSk7CiAJfQogCi0JZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2aWV3KTsKJiM0MzsJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICZhbXA7bm90ZXMtJmd0O3NyYy0mZ3Q7c291cmNlLCBhbC5ub2RlKSB7CiAJCWxpc3RfZGVsX2luaXQoJmFtcDtwb3MtJmd0O2FsLm5vZGUpOwpAQCAtMjA1LDQwICYjNDM7MjA2LDM0IEBAIHN0YXRpYyBpbnQgc3ltYm9sX19ndGtfYW5ub3RhdGUoc3RydWN0IG1hcF9zeW1ib2wgKm1zLCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLAogCQlHdGtXaWRnZXQgKmluZm9iYXI7CiAJCUd0a1dpZGdldCAqc3RhdGJhcjsKIAotCQlzaWduYWwoU0lHU0VHViwgcGVyZl9ndGtfX3NpZ25hbCk7Ci0JCXNpZ25hbChTSUdGUEUsICBwZXJmX2d0a19fc2lnbmFsKTsKLQkJc2lnbmFsKFNJR0lOVCwgIHBlcmZfZ3RrX19zaWduYWwpOwotCQlzaWduYWwoU0lHUVVJVCwgcGVyZl9ndGtfX3NpZ25hbCk7Ci0JCXNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTsKJiM0MzsJCXNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKTsKJiM0MzsJCXNpZ25hbChTSUdGUEUsICBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKTsKJiM0MzsJCXBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscygpOwogCi0JCXdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwomIzQzOwkJd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoKTsKIAkJZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyh3aW5kb3cpLCAmIzM0O3BlcmYgYW5ub3RhdGUmIzM0Oyk7CiAKLQkJZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICYjMzQ7ZGVsZXRlX2V2ZW50JiMzNDssIGd0a19tYWluX3F1aXQsIE5VTEwpOwotCiAJCXBnY3R4ID0gcGVyZl9ndGtfX2FjdGl2YXRlX2NvbnRleHQod2luZG93KTsKIAkJaWYgKCFwZ2N0eCkKIAkJCXJldHVybiAtMTsKIAotCQl2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAwKTsKJiM0MzsJCXZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDApOwogCQlub3RlYm9vayA9IGd0a19ub3RlYm9va19uZXcoKTsKIAkJcGdjdHgtJmd0O25vdGVib29rID0gbm90ZWJvb2s7CiAKLQkJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIG5vdGVib29rLCBUUlVFLCBUUlVFLCAwKTsKJiM0MzsJCWd0a193aWRnZXRfc2V0X3ZleHBhbmQobm90ZWJvb2ssIFRSVUUpOwomIzQzOwkJZ3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spOwogCiAJCWluZm9iYXIgPSBwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIoKTsKLQkJaWYgKGluZm9iYXIpIHsKLQkJCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBpbmZvYmFyLAotCQkJCQkgICBGQUxTRSwgRkFMU0UsIDApOwotCQl9CiYjNDM7CQlndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBpbmZvYmFyKTsKIAogCQlzdGF0YmFyID0gcGVyZl9ndGtfX3NldHVwX3N0YXR1c2JhcigpOwotCQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhciwgRkFMU0UsIEZBTFNFLCAwKTsKJiM0MzsJCWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIHN0YXRiYXIpOwogCi0JCWd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7CiYjNDM7CQlndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKHdpbmRvdyksIHZib3gpOwogCX0KIAotCXNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOwomIzQzOwlzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldygpOwogCXRhYl9sYWJlbCA9IGd0a19sYWJlbF9uZXcoc3ltLSZndDtuYW1lKTsKIAogCWd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksCkBAIC0yNjcsMTIgJiM0MzsyNjIsMTEgQEAgdm9pZCBwZXJmX2d0a19fc2hvd19hbm5vdGF0aW9ucyh2b2lkKQogCQlyZXR1cm47CiAKIAl3aW5kb3cgPSBwZ2N0eC0mZ3Q7bWFpbl93aW5kb3c7Ci0JZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwogCiAJcGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3cod2luZG93KTsKLQlndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKHdpbmRvdyksIEdUS19XSU5fUE9TX0NFTlRFUik7CiYjNDM7CWd0a193aWRnZXRfc2V0X3Zpc2libGUod2luZG93LCBUUlVFKTsKIAotCWd0a19tYWluKCk7CiYjNDM7CXBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKHdpbmRvdyk7CiAKIAlwZXJmX2d0a19fZGVhY3RpdmF0ZV9jb250ZXh0KCZhbXA7cGdjdHgpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jIGIvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jCmluZGV4IGQyZGFkZjM4NzNmYmQuLjk4ZjFkNmJmY2IyNDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9icm93c2VyLmMKQEAgLTUsMzIgJiM0Mzs1LDkyIEBACiAjaW5jbHVkZSAmIzM0Oy4uL2hpc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2hlbHBsaW5lLmgmIzM0OwogCiYjNDM7I2luY2x1ZGUgJmx0O2dsaWItdW5peC5oJmd0OwogI2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwogCi12b2lkIHBlcmZfZ3RrX19zaWduYWwoaW50IHNpZykKJiM0MzsvKgomIzQzOyAqIFNJR0lOVC9TSUdRVUlUL1NJR1RFUk0gYXJlIGFzeW5jaHJvbm91czogZGVmZXJyaW5nIHRoZSBhY3R1YWwgZXhpdCB0byBhCiYjNDM7ICogR0xpYiBzb3VyY2UgZGlzcGF0Y2hlZCBmcm9tIHRoZSBtYWluIGxvb3AgbWVhbnMgaXQgYWx3YXlzIHJ1bnMgb24gdGhlCiYjNDM7ICogbWFpbiB0aHJlYWQsIHNlcmlhbGl6ZWQgd2l0aCBldmVyeXRoaW5nIGVsc2UgdGhlIG1haW4gbG9vcCBkb2VzCiYjNDM7ICogKGluY2x1ZGluZyBwZXJmX2d0a19fZXJyb3IoKSYjMzk7cyB1cGRhdGVzIHRvIHBlcmZfZ3RrX19lcnJvcl9sb29wcyksIGluc3RlYWQKJiM0MzsgKiBvZiByYWNpbmcgdGhlbSBmcm9tIGFyYml0cmFyeSBzaWduYWwtaGFuZGxlciBjb250ZXh0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBnYm9vbGVhbiBwZXJmX2d0a19fcXVpdF9zaWduYWwoZ3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZCkKIHsKIAlwZXJmX2d0a19fZXhpdChmYWxzZSk7CiYjNDM7CXJldHVybiBHX1NPVVJDRV9SRU1PVkU7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgcGVyZl9ndGtfX2luc3RhbGxfcXVpdF9zaWduYWxzKHZvaWQpCiYjNDM7ewomIzQzOwlnX3VuaXhfc2lnbmFsX2FkZChTSUdJTlQsICBwZXJmX2d0a19fcXVpdF9zaWduYWwsIE5VTEwpOwomIzQzOwlnX3VuaXhfc2lnbmFsX2FkZChTSUdRVUlULCBwZXJmX2d0a19fcXVpdF9zaWduYWwsIE5VTEwpOwomIzQzOwlnX3VuaXhfc2lnbmFsX2FkZChTSUdURVJNLCBwZXJmX2d0a19fcXVpdF9zaWduYWwsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFNJR1NFR1YvU0lHRlBFIGFyZSBzeW5jaHJvbm91cyBmYXVsdHM6IHRoZXJlJiMzOTtzIG5vICYjMzQ7bGF0ZXImIzM0OyB0byBkZWZlciB0bywKJiM0MzsgKiBhbmQgbm8gc2FmZSB3YXkgdG8gcnVuIEdUSy9HTGliIGNvZGUgKG9yIGFueXRoaW5nIGVsc2Ugbm9uLWFzeW5jLXNpZ25hbC0KJiM0MzsgKiBzYWZlKSBmcm9tIHRoZSBmYXVsdGluZyBjb250ZXh0LiBSZXBvcnQgYW5kIGxldCB0aGUgZGVmYXVsdCBkaXNwb3NpdGlvbgomIzQzOyAqIChjb3JlIGR1bXApIGhhcHBlbiBpbnN0ZWFkIG9mIHRyeWluZyB0byB0ZWFyIGRvd24gR1RLIHN0YXRlIGhlcmUuCiYjNDM7ICovCiYjNDM7dm9pZCBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKGludCBzaWcpCiYjNDM7ewogCXBzaWduYWwoc2lnLCAmIzM0O3BlcmYmIzM0Oyk7CiYjNDM7CXNpZ25hbChzaWcsIFNJR19ERkwpOwomIzQzOwlyYWlzZShzaWcpOwogfQogCiB2b2lkIHBlcmZfZ3RrX19yZXNpemVfd2luZG93KEd0a1dpZGdldCAqd2luZG93KQogewogCUdka1JlY3RhbmdsZSByZWN0OwotCUdka1NjcmVlbiAqc2NyZWVuOwotCWludCBtb25pdG9yOwomIzQzOwlHZGtNb25pdG9yICptb25pdG9yOwomIzQzOwlHZGtEaXNwbGF5ICpkaXNwbGF5OwomIzQzOwlHTGlzdE1vZGVsICptb25pdG9yczsKIAlpbnQgaGVpZ2h0OwogCWludCB3aWR0aDsKIAotCXNjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbih3aW5kb3cpOwomIzQzOwlkaXNwbGF5ID0gZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aW5kb3cpOwomIzQzOwltb25pdG9ycyA9IGdka19kaXNwbGF5X2dldF9tb25pdG9ycyhkaXNwbGF5KTsKJiM0MzsJbW9uaXRvciA9IGdfbGlzdF9tb2RlbF9nZXRfaXRlbShtb25pdG9ycywgMCk7CiYjNDM7CWlmICghbW9uaXRvcikgewomIzQzOwkJZ3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1cod2luZG93KSwgODAwLCA2MDApOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKLQltb25pdG9yID0gZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9hdF93aW5kb3coc2NyZWVuLCB3aW5kb3ctJmd0O3dpbmRvdyk7Ci0KLQlnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwgJmFtcDtyZWN0KTsKJiM0MzsJZ2RrX21vbml0b3JfZ2V0X2dlb21ldHJ5KG1vbml0b3IsICZhbXA7cmVjdCk7CiYjNDM7CWdfb2JqZWN0X3VucmVmKG1vbml0b3IpOwogCiAJd2lkdGgJPSByZWN0LndpZHRoICogMyAvIDQ7CiAJaGVpZ2h0CT0gcmVjdC5oZWlnaHQgKiAzIC8gNDsKIAotCWd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1cod2luZG93KSwgd2lkdGgsIGhlaWdodCk7CiYjNDM7CWd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHdpZHRoLCBoZWlnaHQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgR01haW5Mb29wICpwZXJmX2d0a19fbWFpbl9sb29wOwomIzQzOwomIzQzO3ZvaWQgcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAocGVyZl9ndGtfX21haW5fbG9vcCkKJiM0MzsJCWdfbWFpbl9sb29wX3F1aXQocGVyZl9ndGtfX21haW5fbG9vcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBnYm9vbGVhbiBwZXJmX2d0a19fY2xvc2VfcmVxdWVzdChHdGtXaWRnZXQgKndpZGdldCBfX21heWJlX3VudXNlZCwKJiM0MzsJCQkJCWdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpCiYjNDM7ewomIzQzOwlwZXJmX2d0a19fcXVpdF9tYWluX2xvb3AoKTsKJiM0MzsKJiM0MzsJcmV0dXJuIEZBTFNFOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKEd0a1dpZGdldCAqd2luZG93KQomIzQzO3sKJiM0MzsJZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICYjMzQ7Y2xvc2UtcmVxdWVzdCYjMzQ7LAomIzQzOwkJCSBHX0NBTExCQUNLKHBlcmZfZ3RrX19jbG9zZV9yZXF1ZXN0KSwgTlVMTCk7CiYjNDM7CiYjNDM7CXBlcmZfZ3RrX19tYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgRkFMU0UpOwomIzQzOwlnX21haW5fbG9vcF9ydW4ocGVyZl9ndGtfX21haW5fbG9vcCk7CiYjNDM7CWdfY2xlYXJfcG9pbnRlcigmYW1wO3BlcmZfZ3RrX19tYWluX2xvb3AsIGdfbWFpbl9sb29wX3VucmVmKTsKIH0KIAogY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KQpAQCAtNDIsMzMgJiM0MzsxMDIsMzUgQEAgY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KQogCXJldHVybiBOVUxMOwogfQogCi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVAomIzQzO3N0YXRpYyB2b2lkIHBlcmZfZ3RrX19oaWRlX3dpZGdldChHdGtXaWRnZXQgKndpZGdldCwgZ2ludCByZXNwb25zZV9pZCBfX21heWJlX3VudXNlZCwKJiM0MzsJCQkJICAgZ3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZCkKJiM0Mzt7CiYjNDM7CWd0a193aWRnZXRfc2V0X3Zpc2libGUod2lkZ2V0LCBGQUxTRSk7CiYjNDM7fQomIzQzOwogR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZCkKIHsKIAlHdGtXaWRnZXQgKmluZm9fYmFyOwogCUd0a1dpZGdldCAqbGFiZWw7Ci0JR3RrV2lkZ2V0ICpjb250ZW50X2FyZWE7CiAKIAlpbmZvX2JhciA9IGd0a19pbmZvX2Jhcl9uZXcoKTsKLQlndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbChpbmZvX2JhciwgVFJVRSk7CiYjNDM7CWd0a193aWRnZXRfc2V0X3Zpc2libGUoaW5mb19iYXIsIEZBTFNFKTsKIAogCWxhYmVsID0gZ3RrX2xhYmVsX25ldygmIzM0OyYjMzQ7KTsKLQlndGtfd2lkZ2V0X3Nob3cobGFiZWwpOwomIzQzOwlndGtfd2lkZ2V0X3NldF92aXNpYmxlKGxhYmVsLCBUUlVFKTsKIAotCWNvbnRlbnRfYXJlYSA9IGd0a19pbmZvX2Jhcl9nZXRfY29udGVudF9hcmVhKEdUS19JTkZPX0JBUihpbmZvX2JhcikpOwotCWd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGVudF9hcmVhKSwgbGFiZWwpOwomIzQzOwlndGtfaW5mb19iYXJfYWRkX2NoaWxkKEdUS19JTkZPX0JBUihpbmZvX2JhciksIGxhYmVsKTsKIAotCWd0a19pbmZvX2Jhcl9hZGRfYnV0dG9uKEdUS19JTkZPX0JBUihpbmZvX2JhciksIEdUS19TVE9DS19PSywKJiM0MzsJZ3RrX2luZm9fYmFyX2FkZF9idXR0b24oR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgJiMzNDtfT0smIzM0OywKIAkJCQlHVEtfUkVTUE9OU0VfT0spOwogCWdfc2lnbmFsX2Nvbm5lY3QoaW5mb19iYXIsICYjMzQ7cmVzcG9uc2UmIzM0OywKLQkJCSBHX0NBTExCQUNLKGd0a193aWRnZXRfaGlkZSksIE5VTEwpOwomIzQzOwkJCSBHX0NBTExCQUNLKHBlcmZfZ3RrX19oaWRlX3dpZGdldCksIE5VTEwpOwogCiAJcGdjdHgtJmd0O2luZm9fYmFyID0gaW5mb19iYXI7CiAJcGdjdHgtJmd0O21lc3NhZ2VfbGFiZWwgPSBsYWJlbDsKIAogCXJldHVybiBpbmZvX2JhcjsKIH0KLSNlbmRpZgogCiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIodm9pZCkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oIGIvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmgKaW5kZXggYTJiNDk3ZjAzZmQ2ZS4uNmIzN2ZkOTk0M2M5ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmgKQEAgLTEzLDEwICYjNDM7MTMsOCBAQCBzdHJ1Y3QgcGVyZl9ndGtfY29udGV4dCB7CiAJR3RrV2lkZ2V0ICptYWluX3dpbmRvdzsKIAlHdGtXaWRnZXQgKm5vdGVib29rOwogCi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVAogCUd0a1dpZGdldCAqaW5mb19iYXI7CiAJR3RrV2lkZ2V0ICptZXNzYWdlX2xhYmVsOwotI2VuZGlmCiAJR3RrV2lkZ2V0ICpzdGF0YmFyOwogCWd1aW50IHN0YXRiYXJfY3R4X2lkOwogfTsKQEAgLTM4LDE5ICYjNDM7MzYsMTUgQEAgdm9pZCBwZXJmX2d0a19faW5pdF9oZWxwbGluZSh2b2lkKTsKIHZvaWQgZ3RrX3VpX3Byb2dyZXNzX19pbml0KHZvaWQpOwogdm9pZCBwZXJmX2d0a19faW5pdF9ocHAodm9pZCk7CiAKLXZvaWQgcGVyZl9ndGtfX3NpZ25hbChpbnQgc2lnKTsKJiM0Mzt2b2lkIHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscyh2b2lkKTsKJiM0Mzt2b2lkIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwoaW50IHNpZyk7CiB2b2lkIHBlcmZfZ3RrX19yZXNpemVfd2luZG93KEd0a1dpZGdldCAqd2luZG93KTsKJiM0Mzt2b2lkIHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKEd0a1dpZGdldCAqd2luZG93KTsKJiM0Mzt2b2lkIHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCh2b2lkKTsKJiM0Mzt2b2lkIHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZyh2b2lkKTsKIGNvbnN0IGNoYXIgKnBlcmZfZ3RrX19nZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudCk7CiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIodm9pZCk7Ci0KLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUCiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKHZvaWQpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0jZW5kaWYKIAogc3RydWN0IGV2c2VsOwogc3RydWN0IGV2bGlzdDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jCmluZGV4IGJhZTIxZjMzNmFlNmQuLjM0MmQ0YzNmZWNiMDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYwpAQCAtOCw2ICYjNDM7OCw4IEBACiAjaW5jbHVkZSAmIzM0Oy4uL2hlbHBsaW5lLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9zdHJpbmcyLmgmIzM0OwogI2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRhcmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKIApAQCAtMzk1LDExICYjNDM7Mzk3LDkgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGlzdHMoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsCiAJCX0KIAl9CiAKLQlndGtfdHJlZV92aWV3X3NldF9ydWxlc19oaW50KEdUS19UUkVFX1ZJRVcodmlldyksIFRSVUUpOwotCiAJZ19zaWduYWxfY29ubmVjdCh2aWV3LCAmIzM0O3Jvdy1hY3RpdmF0ZWQmIzM0OywKIAkJCSBHX0NBTExCQUNLKG9uX3Jvd19hY3RpdmF0ZWQpLCBOVUxMKTsKLQlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpOwomIzQzOwlndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX2d0a19fYWRkX2hpZXJhcmNoeV9lbnRyaWVzKHN0cnVjdCBoaXN0cyAqaGlzdHMsCkBAIC00NDksNyAmIzQzOzQ0OSw3IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoc3RydWN0IGhpc3RzICpoaXN0cywKIAkJYmYgPSBocHAtJmd0O2J1ZjsKIAkJc2l6ZSA9IGhwcC0mZ3Q7c2l6ZTsKIAkJcGVyZl9ocHBfbGlzdF9fZm9yX2VhY2hfZm9ybWF0KGhlLSZndDtocHBfbGlzdCwgZm10KSB7Ci0JCQlpbnQgcmV0OwomIzQzOwkJCWludCByZXQsIGluYzsKIAogCQkJaWYgKGZtdC0mZ3Q7Y29sb3IpCiAJCQkJcmV0ID0gZm10LSZndDtjb2xvcihmbXQsIGhwcCwgaGUpOwpAQCAtNDU3LDcgJiM0Mzs0NTcsMTggQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLAogCQkJCXJldCA9IGZtdC0mZ3Q7ZW50cnkoZm10LCBocHAsIGhlKTsKIAogCQkJc25wcmludGYoaHBwLSZndDtidWYgJiM0MzsgcmV0LCBocHAtJmd0O3NpemUgLSByZXQsICYjMzQ7ICAmIzM0Oyk7Ci0JCQlhZHZhbmNlX2hwcChocHAsIHJldCAmIzQzOyAyKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIHJldCBjYW4gYmUgYXMgbGFyZ2UgYXMgaHBwLSZndDtzaXplIC0gMSwgc28gcmV0ICYjNDM7IDIKJiM0MzsJCQkgKiBjYW4gZXhjZWVkIGhwcC0mZ3Q7c2l6ZS4gYWR2YW5jZV9ocHAoKSBkb2VzbiYjMzk7dCBjbGFtcCwKJiM0MzsJCQkgKiBzbyBwYXNzaW5nIHRoYXQgdGhyb3VnaCB3b3VsZCB1bmRlcmZsb3cgdGhlCiYjNDM7CQkJICogc2l6ZV90IGhwcC0mZ3Q7c2l6ZSBhbmQgbGV0IGEgbGF0ZXIgZm10LSZndDtlbnRyeSgpIGluCiYjNDM7CQkJICogdGhpcyBsb29wIHdyaXRlIHBhc3QgdGhlIGVuZCBvZiB0aGUgY2FsbGVyJiMzOTtzCiYjNDM7CQkJICogc3RhY2sgYnVmZmVyLgomIzQzOwkJCSAqLwomIzQzOwkJCWluYyA9IHJldCAmIzQzOyAyOwomIzQzOwkJCWlmIChpbmMgJmd0OyAoaW50KWhwcC0mZ3Q7c2l6ZSkKJiM0MzsJCQkJaW5jID0gaHBwLSZndDtzaXplOwomIzQzOwkJCWFkdmFuY2VfaHBwKGhwcCwgaW5jKTsKIAkJfQogCiAJCWd0a190cmVlX3N0b3JlX3NldChzdG9yZSwgJmFtcDtpdGVyLCBjb2xfaWR4LCBzdHJpbShiZiksIC0xKTsKQEAgLTUwNSw2ICYjNDM7NTE2LDcgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGllcmFyY2h5KEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLAogCUd0a1dpZGdldCAqdmlldzsKIAlpbnQgY29sX2lkeDsKIAlpbnQgbnJfY29scyA9IDA7CiYjNDM7CWludCByZXQ7CiAJY2hhciBzWzUxMl07CiAJY2hhciBidWZbNTEyXTsKIAlib29sIGZpcnN0X25vZGUsIGZpcnN0X2NvbDsKQEAgLTU0MSw5ICYjNDM7NTUzLDEwIEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpZXJhcmNoeShHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cywKIAkvKiBjb25zdHJ1Y3QgbWVyZ2VkIGNvbHVtbiBoZWFkZXIgc2luY2Ugc29ydCBrZXlzIHNoYXJlIHNpbmdsZSBjb2x1bW4gKi8KIAlidWZbMF0gPSAmIzM5O1wwJiMzOTs7CiAJZmlyc3Rfbm9kZSA9IHRydWU7CiYjNDM7CXJldCA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShmbXRfbm9kZSwgJmFtcDtoaXN0cy0mZ3Q7aHBwX2Zvcm1hdHMsIGxpc3QpIHsKIAkJaWYgKCFmaXJzdF9ub2RlKQotCQkJc3RyY2F0KGJ1ZiwgJiMzNDsgLyAmIzM0Oyk7CiYjNDM7CQkJcmV0ICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IHJldCwgc2l6ZW9mKGJ1ZikgLSByZXQsICYjMzQ7IC8gJiMzNDspOwogCQlmaXJzdF9ub2RlID0gZmFsc2U7CiAKIAkJZmlyc3RfY29sID0gdHJ1ZTsKQEAgLTU1MiwxMSAmIzQzOzU2NSwxMSBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsCiAJCQkJY29udGludWU7CiAKIAkJCWlmICghZmlyc3RfY29sKQotCQkJCXN0cmNhdChidWYsICYjMzQ7JiM0MzsmIzM0Oyk7CiYjNDM7CQkJCXJldCAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyByZXQsIHNpemVvZihidWYpIC0gcmV0LCAmIzM0OyYjNDM7JiMzNDspOwogCQkJZmlyc3RfY29sID0gZmFsc2U7CiAKIAkJCWZtdC0mZ3Q7aGVhZGVyKGZtdCwgJmFtcDtocHAsIGhpc3RzLCAwLCBOVUxMKTsKLQkJCXN0cmNhdChidWYsIHN0cmltKGhwcC5idWYpKTsKJiM0MzsJCQlyZXQgJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgcmV0LCBzaXplb2YoYnVmKSAtIHJldCwgJiMzNDslcyYjMzQ7LCBzdHJpbShocHAuYnVmKSk7CiAJCX0KIAl9CiAKQEAgLTU4MywxMSAmIzQzOzU5Niw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpZXJhcmNoeShHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cywKIAlwZXJmX2d0a19fYWRkX2hpZXJhcmNoeV9lbnRyaWVzKGhpc3RzLCAmYW1wO2hpc3RzLSZndDtlbnRyaWVzLCBzdG9yZSwKIAkJCQkJTlVMTCwgJmFtcDtocHAsIG1pbl9wY250KTsKIAotCWd0a190cmVlX3ZpZXdfc2V0X3J1bGVzX2hpbnQoR1RLX1RSRUVfVklFVyh2aWV3KSwgVFJVRSk7Ci0KIAlnX3NpZ25hbF9jb25uZWN0KHZpZXcsICYjMzQ7cm93LWFjdGl2YXRlZCYjMzQ7LAogCQkJIEdfQ0FMTEJBQ0sob25fcm93X2FjdGl2YXRlZCksIE5VTEwpOwotCWd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmlldyk7CiYjNDM7CWd0a19zY3JvbGxlZF93aW5kb3dfc2V0X2NoaWxkKEdUS19TQ1JPTExFRF9XSU5ET1cod2luZG93KSwgdmlldyk7CiB9CiAKIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLApAQCAtNjAwLDM2ICYjNDM7NjExLDMyIEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLAogCUd0a1dpZGdldCAqc3RhdGJhcjsKIAlHdGtXaWRnZXQgKndpbmRvdzsKIAotCXNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fc2lnbmFsKTsKLQlzaWduYWwoU0lHRlBFLCAgcGVyZl9ndGtfX3NpZ25hbCk7Ci0Jc2lnbmFsKFNJR0lOVCwgIHBlcmZfZ3RrX19zaWduYWwpOwotCXNpZ25hbChTSUdRVUlULCBwZXJmX2d0a19fc2lnbmFsKTsKLQlzaWduYWwoU0lHVEVSTSwgcGVyZl9ndGtfX3NpZ25hbCk7CiYjNDM7CXNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKTsKJiM0MzsJc2lnbmFsKFNJR0ZQRSwgIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwpOwomIzQzOwlwZXJmX2d0a19faW5zdGFsbF9xdWl0X3NpZ25hbHMoKTsKIAotCXdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwomIzQzOwl3aW5kb3cgPSBndGtfd2luZG93X25ldygpOwogCiAJZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyh3aW5kb3cpLCAmIzM0O3BlcmYgcmVwb3J0JiMzNDspOwogCi0JZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICYjMzQ7ZGVsZXRlX2V2ZW50JiMzNDssIGd0a19tYWluX3F1aXQsIE5VTEwpOwotCiAJcGdjdHggPSBwZXJmX2d0a19fYWN0aXZhdGVfY29udGV4dCh3aW5kb3cpOwogCWlmICghcGdjdHgpCiAJCXJldHVybiAtMTsKIAotCXZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApOwomIzQzOwl2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTsKIAogCW5vdGVib29rID0gZ3RrX25vdGVib29rX25ldygpOwogCi0JZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIG5vdGVib29rLCBUUlVFLCBUUlVFLCAwKTsKJiM0MzsJZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChub3RlYm9vaywgVFJVRSk7CiYjNDM7CWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIG5vdGVib29rKTsKIAogCWluZm9fYmFyID0gcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKCk7Ci0JaWYgKGluZm9fYmFyKQotCQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaW5mb19iYXIsIEZBTFNFLCBGQUxTRSwgMCk7CiYjNDM7CWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIGluZm9fYmFyKTsKIAogCXN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7Ci0JZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHN0YXRiYXIsIEZBTFNFLCBGQUxTRSwgMCk7CiYjNDM7CWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIHN0YXRiYXIpOwogCi0JZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTsKJiM0MzsJZ3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyh3aW5kb3cpLCB2Ym94KTsKIAogCWV2bGlzdF9fZm9yX2VhY2hfZW50cnkoZXZsaXN0LCBwb3MpIHsKIAkJc3RydWN0IGhpc3RzICpoaXN0cyA9IGV2c2VsX19oaXN0cyhwb3MpOwpAQCAtNjQ5LDcgJiM0Mzs2NTYsNyBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCwKIAkJCX0KIAkJfQogCi0JCXNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOwomIzQzOwkJc2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTsKIAogCQlndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpLAogCQkJCQkJCUdUS19QT0xJQ1lfQVVUT01BVElDLApAQCAtNjY1LDE1ICYjNDM7NjcyLDEyIEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLAogCQlndGtfbm90ZWJvb2tfYXBwZW5kX3BhZ2UoR1RLX05PVEVCT09LKG5vdGVib29rKSwgc2Nyb2xsZWRfd2luZG93LCB0YWJfbGFiZWwpOwogCX0KIAotCWd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLQogCXBlcmZfZ3RrX19yZXNpemVfd2luZG93KHdpbmRvdyk7Ci0KLQlndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKHdpbmRvdyksIEdUS19XSU5fUE9TX0NFTlRFUik7CiYjNDM7CWd0a193aWRnZXRfc2V0X3Zpc2libGUod2luZG93LCBUUlVFKTsKIAogCXVpX2hlbHBsaW5lX19wdXNoKGhlbHApOwogCi0JZ3RrX21haW4oKTsKJiM0MzsJcGVyZl9ndGtfX3J1bl9tYWluX2xvb3Aod2luZG93KTsKIAogCXBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoJmFtcDtwZ2N0eCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmMgYi90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jCmluZGV4IGVlYTZmY2RlNTE4YTguLjc3MGY5MjUxYjU0YjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuYwpAQCAtMSw0OSAmIzQzOzEsNjUgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAjaW5jbHVkZSAmbHQ7aW50dHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKIAogI2luY2x1ZGUgJiMzNDtndGsuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL3Byb2dyZXNzLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwogCiBzdGF0aWMgR3RrV2lkZ2V0ICpkaWFsb2c7CiBzdGF0aWMgR3RrV2lkZ2V0ICpwcm9ncmVzczsKIAomIzQzO3N0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZGVzdHJveWVkKEd0a1dpZGdldCAqd2lkZ2V0IF9fbWF5YmVfdW51c2VkLAomIzQzOwkJCQkJZ3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZCkKJiM0Mzt7CiYjNDM7CWRpYWxvZyA9IE5VTEw7CiYjNDM7CXByb2dyZXNzID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX3VwZGF0ZShzdHJ1Y3QgdWlfcHJvZ3Jlc3MgKnApCiB7CiAJZG91YmxlIGZyYWN0aW9uID0gcC0mZ3Q7dG90YWwgPyAxLjAgKiBwLSZndDtjdXJyIC8gcC0mZ3Q7dG90YWwgOiAwLjA7CiAJY2hhciBidWZbMTAyNF07CiAKIAlpZiAoZGlhbG9nID09IE5VTEwpIHsKLQkJR3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX3Zib3hfbmV3KFRSVUUsIDUpOwomIzQzOwkJR3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCA1KTsKIAkJR3RrV2lkZ2V0ICpsYWJlbCA9IGd0a19sYWJlbF9uZXcocC0mZ3Q7dGl0bGUpOwogCi0JCWRpYWxvZyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwomIzQzOwkJZGlhbG9nID0gZ3RrX3dpbmRvd19uZXcoKTsKIAkJcHJvZ3Jlc3MgPSBndGtfcHJvZ3Jlc3NfYmFyX25ldygpOwogCi0JCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBsYWJlbCwgVFJVRSwgRkFMU0UsIDMpOwotCQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgcHJvZ3Jlc3MsIFRSVUUsIFRSVUUsIDMpOwomIzQzOwkJZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChsYWJlbCwgVFJVRSk7CiYjNDM7CQlndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBsYWJlbCk7CiYjNDM7CQlndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHByb2dyZXNzLCBUUlVFKTsKJiM0MzsJCWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIHByb2dyZXNzKTsKJiM0MzsKJiM0MzsJCWd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1coZGlhbG9nKSwgdmJveCk7CiAKLQkJZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihkaWFsb2cpLCB2Ym94KTsKJiM0MzsJCWdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCAmIzM0O2Rlc3Ryb3kmIzM0OywKJiM0MzsJCQkJIEdfQ0FMTEJBQ0soZ3RrX3VpX3Byb2dyZXNzX19kZXN0cm95ZWQpLCBOVUxMKTsKIAogCQlndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGRpYWxvZyksICYjMzQ7cGVyZiYjMzQ7KTsKLQkJZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTsKLQkJZ3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyhkaWFsb2cpLCBHVEtfV0lOX1BPU19DRU5URVIpOwomIzQzOwkJZ3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1coZGlhbG9nKSwgMzAwLCA4MCk7CiAKLQkJZ3RrX3dpZGdldF9zaG93X2FsbChkaWFsb2cpOwomIzQzOwkJZ3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpOwogCX0KIAogCWd0a19wcm9ncmVzc19iYXJfc2V0X2ZyYWN0aW9uKEdUS19QUk9HUkVTU19CQVIocHJvZ3Jlc3MpLCBmcmFjdGlvbik7CiAJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslJiMzNDtQUkl1NjQmIzM0OyAvICUmIzM0O1BSSXU2NCwgcC0mZ3Q7Y3VyciwgcC0mZ3Q7dG90YWwpOwogCWd0a19wcm9ncmVzc19iYXJfc2V0X3RleHQoR1RLX1BST0dSRVNTX0JBUihwcm9ncmVzcyksIGJ1Zik7CiAKLQkvKiB3ZSBkaWRuJiMzOTt0IGNhbGwgZ3RrX21haW4geWV0LCBzbyBkbyBpdCBtYW51YWxseSAqLwotCXdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKLQkJZ3RrX21haW5faXRlcmF0aW9uKCk7CiYjNDM7CS8qIHdlIGRpZG4mIzM5O3Qgc3RhcnQgYSBtYWluIGxvb3AgeWV0LCBzbyBwdW1wIGV2ZW50cyBtYW51YWxseSAqLwomIzQzOwl3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKJiM0MzsJCWdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7CiB9CiAKIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZmluaXNoKHZvaWQpCiB7CiYjNDM7CWlmIChkaWFsb2cgPT0gTlVMTCkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKiB0aGlzIHdpbGwgYWxzbyBkZXN0cm95IGFsbCBvZiBpdHMgY2hpbGRyZW4gKi8KLQlndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKJiM0MzsJZ3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7CiAKIAlkaWFsb2cgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmMKaW5kZXggZjVlZWU0ZDY2ODczOC4uOWI0NGYzNzE5NzQ3NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jCkBAIC0xMiw3ICYjNDM7MTIsNyBAQCBpbnQgcGVyZl9ndGtfX2luaXQodm9pZCkKIAlndGtfdWlfcHJvZ3Jlc3NfX2luaXQoKTsKIAlwZXJmX2d0a19faW5pdF9ocHAoKTsKIAotCXJldHVybiBndGtfaW5pdF9jaGVjayhOVUxMLCBOVUxMKSA/IDAgOiAtMTsKJiM0MzsJcmV0dXJuIGd0a19pbml0X2NoZWNrKCkgPyAwIDogLTE7CiB9CiAKIHZvaWQgcGVyZl9ndGtfX2V4aXQoYm9vbCB3YWl0X2Zvcl9vayBfX21heWJlX3VudXNlZCkKQEAgLTIwLDUgJiM0MzsyMCw2IEBAIHZvaWQgcGVyZl9ndGtfX2V4aXQoYm9vbCB3YWl0X2Zvcl9vayBfX21heWJlX3VudXNlZCkKIAlpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkpCiAJCXJldHVybjsKIAlwZXJmX2Vycm9yX191bnJlZ2lzdGVyKCZhbXA7cGVyZl9ndGtfZW9wcyk7Ci0JZ3RrX21haW5fcXVpdCgpOwomIzQzOwlwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2coKTsKJiM0MzsJcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmMgYi90b29scy9wZXJmL3VpL2d0ay91dGlsLmMKaW5kZXggYzQ3ZjVjMzg3ODM4Yy4uNTgyM2ZmMGQ3YzJhNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuYwpAQCAtMiw4ICYjNDM7MiwxMCBAQAogI2luY2x1ZGUgJiMzNDsuLi91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtndGsuaCYjMzQ7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYXJnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvemFsbG9jLmgmZ3Q7CiAKIHN0cnVjdCBwZXJmX2d0a19jb250ZXh0ICpwZ2N0eDsKQEAgLTI4LDg2ICYjNDM7MzAsMTAzIEBAIGludCBwZXJmX2d0a19fZGVhY3RpdmF0ZV9jb250ZXh0KHN0cnVjdCBwZXJmX2d0a19jb250ZXh0ICoqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7LyoKJiM0MzsgKiBwZXJmX2d0a19fZXJyb3IoKSBjYW4gYmUgY2FsbGVkIHJlLWVudHJhbnRseSwgc2luY2UgdGhlIGRpYWxvZyBpc24mIzM5O3QKJiM0MzsgKiBtb2RhbCBhbmQgaXRzIG5lc3RlZCBsb29wIHN0aWxsIHB1bXBzIGV2ZW50cyBmb3IgdGhlIG1haW4gd2luZG93LgomIzQzOyAqIFRyYWNrIGV2ZXJ5IGN1cnJlbnRseSBydW5uaW5nIGxvb3AgaW5zdGVhZCBvZiBhIHNpbmdsZSBwb2ludGVyLCBzbyBhCiYjNDM7ICogbmVzdGVkIGNhbGwgY2FuJiMzOTt0IGNsb2JiZXIgYW4gb3V0ZXIgY2FsbCYjMzk7cyBsb29wIGFuZCBsZWFrIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBHU0xpc3QgKnBlcmZfZ3RrX19lcnJvcl9sb29wczsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwZXJmX2d0a19fcXVpdF9sb29wKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSBfX21heWJlX3VudXNlZCkKJiM0Mzt7CiYjNDM7CWdfbWFpbl9sb29wX3F1aXQoZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgcGVyZl9ndGtfX3F1aXRfZXJyb3JfZGlhbG9nKHZvaWQpCiYjNDM7ewomIzQzOwlnX3NsaXN0X2ZvcmVhY2gocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBwZXJmX2d0a19fcXVpdF9sb29wLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGVyZl9ndGtfX2RpYWxvZ19yZXNwb25zZShHdGtEaWFsb2cgKmRpYWxvZywKJiM0MzsJCQkJICAgICAgZ2ludCByZXNwb25zZV9pZCBfX21heWJlX3VudXNlZCwKJiM0MzsJCQkJICAgICAgZ3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZCkKJiM0Mzt7CiYjNDM7CWd0a193aW5kb3dfZGVzdHJveShHVEtfV0lORE9XKGRpYWxvZykpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcGVyZl9ndGtfX2Vycm9yKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQogewogCWNoYXIgKm1zZzsKIAlHdGtXaWRnZXQgKmRpYWxvZzsKJiM0MzsJR01haW5Mb29wICpsb29wOwomIzQzOwl2YV9saXN0IGFyZ3NfY29weTsKIAomIzQzOwl2YV9jb3B5KGFyZ3NfY29weSwgYXJncyk7CiAJaWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpIHx8Ci0JICAgIHZhc3ByaW50ZigmYW1wO21zZywgZm9ybWF0LCBhcmdzKSAmbHQ7IDApIHsKJiM0MzsJICAgIHZhc3ByaW50ZigmYW1wO21zZywgZm9ybWF0LCBhcmdzX2NvcHkpICZsdDsgMCkgewomIzQzOwkJdmFfZW5kKGFyZ3NfY29weSk7CiAJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOlxuJiMzNDspOwogCQl2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7CiAJCWZwcmludGYoc3RkZXJyLCAmIzM0O1xuJiMzNDspOwogCQlyZXR1cm4gLTE7CiAJfQomIzQzOwl2YV9lbmQoYXJnc19jb3B5KTsKIAogCWRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXdfd2l0aF9tYXJrdXAoR1RLX1dJTkRPVyhwZ2N0eC0mZ3Q7bWFpbl93aW5kb3cpLAogCQkJCQlHVEtfRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsCiAJCQkJCUdUS19NRVNTQUdFX0VSUk9SLAogCQkJCQlHVEtfQlVUVE9OU19DTE9TRSwKIAkJCQkJJiMzNDsmbHQ7YiZndDtFcnJvciZsdDsvYiZndDtcblxuJXMmIzM0OywgbXNnKTsKLQlndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpOwogCi0JZ3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7CiYjNDM7CS8qCiYjNDM7CSAqICYjMzQ7cmVzcG9uc2UmIzM0OyBvbmx5IGZpcmVzIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZDsgREVTVFJPWV9XSVRIX1BBUkVOVAomIzQzOwkgKiBkZXN0cm95cyB0aGUgZGlhbG9nIGRpcmVjdGx5IHdpdGhvdXQgaXQuIFF1aXQgZnJvbSAmIzM0O2Rlc3Ryb3kmIzM0OwomIzQzOwkgKiBpbnN0ZWFkLCB3aGljaCBmaXJlcyBlaXRoZXIgd2F5LCBzbyB0aGUgbmVzdGVkIGxvb3AgYmVsb3cgY2FuJiMzOTt0CiYjNDM7CSAqIG91dGxpdmUgdGhlIGRpYWxvZyBhbmQgaGFuZy4KJiM0MzsJICovCiYjNDM7CWxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgRkFMU0UpOwomIzQzOwlwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3ByZXBlbmQocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBsb29wKTsKJiM0MzsJZ19zaWduYWxfY29ubmVjdChkaWFsb2csICYjMzQ7cmVzcG9uc2UmIzM0OywKJiM0MzsJCQkgR19DQUxMQkFDSyhwZXJmX2d0a19fZGlhbG9nX3Jlc3BvbnNlKSwgTlVMTCk7CiYjNDM7CWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChkaWFsb2csICYjMzQ7ZGVzdHJveSYjMzQ7LAomIzQzOwkJCQkgR19DQUxMQkFDSyhnX21haW5fbG9vcF9xdWl0KSwgbG9vcCk7CiYjNDM7CiYjNDM7CWd0a193aWRnZXRfc2V0X3Zpc2libGUoZGlhbG9nLCBUUlVFKTsKJiM0MzsJZ19tYWluX2xvb3BfcnVuKGxvb3ApOwomIzQzOwlwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3JlbW92ZShwZXJmX2d0a19fZXJyb3JfbG9vcHMsIGxvb3ApOwomIzQzOwlnX21haW5fbG9vcF91bnJlZihsb29wKTsKJiM0MzsKIAlmcmVlKG1zZyk7CiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUCiBzdGF0aWMgaW50IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQogewogCWNoYXIgKm1zZzsKJiM0MzsJdmFfbGlzdCBhcmdzX2NvcHk7CiAKJiM0MzsJdmFfY29weShhcmdzX2NvcHksIGFyZ3MpOwogCWlmICghcGVyZl9ndGtfX2lzX2FjdGl2ZV9jb250ZXh0KHBnY3R4KSB8fAotCSAgICB2YXNwcmludGYoJmFtcDttc2csIGZvcm1hdCwgYXJncykgJmx0OyAwKSB7CiYjNDM7CSAgICB2YXNwcmludGYoJmFtcDttc2csIGZvcm1hdCwgYXJnc19jb3B5KSAmbHQ7IDApIHsKJiM0MzsJCXZhX2VuZChhcmdzX2NvcHkpOwogCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXYXJuaW5nOlxuJiMzNDspOwogCQl2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7CiAJCWZwcmludGYoc3RkZXJyLCAmIzM0O1xuJiMzNDspOwogCQlyZXR1cm4gLTE7CiAJfQomIzQzOwl2YV9lbmQoYXJnc19jb3B5KTsKIAogCWd0a19sYWJlbF9zZXRfdGV4dChHVEtfTEFCRUwocGdjdHgtJmd0O21lc3NhZ2VfbGFiZWwpLCBtc2cpOwogCWd0a19pbmZvX2Jhcl9zZXRfbWVzc2FnZV90eXBlKEdUS19JTkZPX0JBUihwZ2N0eC0mZ3Q7aW5mb19iYXIpLAogCQkJCSAgICAgIEdUS19NRVNTQUdFX1dBUk5JTkcpOwotCWd0a193aWRnZXRfc2hvdyhwZ2N0eC0mZ3Q7aW5mb19iYXIpOwotCi0JZnJlZShtc2cpOwotCXJldHVybiAwOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQotewotCWNoYXIgKm1zZywgKnA7Ci0KLQlpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHwKLQkgICAgdmFzcHJpbnRmKCZhbXA7bXNnLCBmb3JtYXQsIGFyZ3MpICZsdDsgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXYXJuaW5nOlxuJiMzNDspOwotCQl2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7Ci0JCWZwcmludGYoc3RkZXJyLCAmIzM0O1xuJiMzNDspOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZ3RrX3N0YXR1c2Jhcl9wb3AoR1RLX1NUQVRVU0JBUihwZ2N0eC0mZ3Q7c3RhdGJhciksCi0JCQkgIHBnY3R4LSZndDtzdGF0YmFyX2N0eF9pZCk7Ci0KLQkvKiBPbmx5IGZpcnN0IGxpbmUgY2FuIGJlIGRpc3BsYXllZCAqLwotCXAgPSBzdHJjaHIobXNnLCAmIzM5O1xuJiMzOTspOwotCWlmIChwKQotCQkqcCA9ICYjMzk7XDAmIzM5OzsKLQotCWd0a19zdGF0dXNiYXJfcHVzaChHVEtfU1RBVFVTQkFSKHBnY3R4LSZndDtzdGF0YmFyKSwKLQkJCSAgIHBnY3R4LSZndDtzdGF0YmFyX2N0eF9pZCwgbXNnKTsKJiM0MzsJZ3RrX3dpZGdldF9zZXRfdmlzaWJsZShwZ2N0eC0mZ3Q7aW5mb19iYXIsIFRSVUUpOwogCiAJZnJlZShtc2cpOwogCXJldHVybiAwOwogfQotI2VuZGlmCiAKIHN0cnVjdCBwZXJmX2Vycm9yX29wcyBwZXJmX2d0a19lb3BzID0gewogCS5lcnJvcgkJPSBwZXJmX2d0a19fZXJyb3IsCi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVAogCS53YXJuaW5nCT0gcGVyZl9ndGtfX3dhcm5pbmdfaW5mb19iYXIsCi0jZWxzZQotCS53YXJuaW5nCT0gcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyLAotI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9zZXR1cC5jCmluZGV4IGZmODAwMDQ3ZTY5N2YuLmQ4ODczNDZjN2E2MzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvc2V0dXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL3NldHVwLmMKQEAgLTE0LDcgJiM0MzsxNCw3IEBAIGludCB1c2VfYnJvd3NlciA9IC0xOwogCiAjZGVmaW5lIFBFUkZfR1RLX0RTTyAmIzM0O2xpYnBlcmYtZ3RrLnNvJiMzNDsKIAotI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUCiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUCiAKIHN0YXRpYyBpbnQgc2V0dXBfZ3RrX2Jyb3dzZXIodm9pZCkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMKaW5kZXggZGY3MGU5NWE4NDcwNC4uMTIzYjZkNWZjZWE3OCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMKQEAgLTE0NSw2ICYjNDM7MTQ1LDE3IEBAIHN0YXRpYyBpbnQgYW5ub3RhdGVkX3NvdXJjZV9fYWxsb2NfaGlzdG9ncmFtcyhzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLAogCXJldHVybiBzcmMtJmd0O2hpc3RvZ3JhbXMgPyAwIDogLTE7CiB9CiAKJiM0MztzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKgomIzQzO2Fubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzeW1faGlzdF9lbnRyeSAqZW50cnk7CiYjNDM7CWxvbmcga2V5ID0gb2Zmc2V0ICZsdDsmbHQ7IDE2IHwgZXZzZWwtJmd0O2NvcmUuaWR4OwomIzQzOwomIzQzOwlpZiAoIWhhc2htYXBfX2ZpbmQoc3JjLSZndDtzYW1wbGVzLCBrZXksICZhbXA7ZW50cnkpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CXJldHVybiBlbnRyeTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHN5bWJvbF9fYW5ub3RhdGVfemVyb19oaXN0b2dyYW1zKHN0cnVjdCBzeW1ib2wgKnN5bSkKIHsKIAlzdHJ1Y3QgYW5ub3RhdGlvbiAqbm90ZXMgPSBzeW1ib2xfX2Fubm90YXRpb24oc3ltKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmgKaW5kZXggZmEwOGQwOWI4MGY3Ni4uNDAwMzhhMzc3OWQ0NiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmgKQEAgLTQwNiwxNiAmIzQzOzQwNiw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bV9oaXN0ICphbm5vdGF0aW9uX19oaXN0b2dyYW0oc3RydWN0IGFubm90YXRpb24gKm5vdGVzLAogCXJldHVybiBhbm5vdGF0ZWRfc291cmNlX19oaXN0b2dyYW0obm90ZXMtJmd0O3NyYywgZXZzZWwpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1faGlzdF9lbnRyeSAqCi1hbm5vdGF0ZWRfc291cmNlX19oaXN0X2VudHJ5KHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsIGNvbnN0IHN0cnVjdCBldnNlbCAqZXZzZWwsIHU2NCBvZmZzZXQpCi17Ci0Jc3RydWN0IHN5bV9oaXN0X2VudHJ5ICplbnRyeTsKLQlsb25nIGtleSA9IG9mZnNldCAmbHQ7Jmx0OyAxNiB8IGV2c2VsLSZndDtjb3JlLmlkeDsKLQotCWlmICghaGFzaG1hcF9fZmluZChzcmMtJmd0O3NhbXBsZXMsIGtleSwgJmFtcDtlbnRyeSkpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBlbnRyeTsKLX0KJiM0MztzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKgomIzQzO2Fubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldCk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFubm90YXRpb24gKnN5bWJvbF9fYW5ub3RhdGlvbihzdHJ1Y3Qgc3ltYm9sICpzeW0pCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDA1CgkJCQkJCQlvdXRwdXQ6IDEwMQoJCQkJCQkJdGhvdWdodHM6IDk4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBFdmFsdWF0aW9uIGZvciBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBzbyB0aGV5IHdhbnQgbWUgdG8gYXNzZXNzIGEgcGF0Y2ggc2VyaWVzIGZvciBzeXprYWxsZXIgZnV6emluZy4gTGV0JiMzOTtzIGdldCByaWdodCB0byBpdC4gRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2VkLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGB0b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlYCwgYHRvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGVgLCBzb21lIGAuY2AgZmlsZXMgaW4gYHRvb2xzL2J1aWxkL2ZlYXR1cmUvYCwgY2hhbmdlcyB0byBgdG9vbHMvcGVyZi9gIHJlbGF0ZWQgdG8gZG9jdW1lbnRhdGlvbiwgbWFrZWZpbGVzLCBhbmQgYSBnb29kIGNodW5rIG9mIEdUSy1yZWxhdGVkIFVJIGNvZGUuIExvb2tzIGxpa2UgYSBiaWcgY2h1bmsgb2YgdGhpcyBpcyByZWxhdGVkIHRvIGEgR1RLIHVwZ3JhZGUgZm9yIHRoZSBgcGVyZmAgdG9vbC4KCkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHN5emthbGxlciB3b3JrcywgSSBuZWVkIHRvIGNoZWNrIGFnYWluc3QgdGhlIGRlZmluZWQgY3JpdGVyaWEuIFNwZWNpZmljYWxseSwgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLCB0aGUgdGltZXMgd2hlbiBJIHdvdWxkICpub3QqIGNvbnNpZGVyIGl0IHdvcnRoIGZ1enppbmcuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IG1vZGlmaWNhdGlvbnMgdGhhdCBmYWxsIGludG8gdGhlc2UgY2F0ZWdvcmllczogZG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSBjb2RlIHRoYXQgZG9lc24mIzM5O3QgYWZmZWN0IHRoZSBrZXJuZWwgaW1hZ2UsIGRlY29yYXRpdmUgbG9nZ2luZywgb3IgYnVpbGQgc3lzdGVtIGNoYW5nZXMgdGhhdCBkb24mIzM5O3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KCkhtbS4gQWxsIHRoZSBtb2RpZmllZCBmaWxlcyBhcmUgdW5kZXIgYHRvb2xzL2AsIHNwZWNpZmljYWxseSBgdG9vbHMvcGVyZi9gIGFuZCBgdG9vbHMvYnVpbGQvYC4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIGEgcHVyZSB1c2VyLXNwYWNlIGNoYW5nZSwgdGhlIGBwZXJmYCB0b29sLCB3aGljaCBhcHBlYXJzIHRvIGJlIHVwZ3JhZGluZyBpdHMgR1RLIHZlcnNpb24uIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBzZWVtIHRvIHRvdWNoIGB2bWxpbnV4YCBvciBhbnkga2VybmVsIG1vZHVsZXMuIEV4Y2VsbGVudCEgVGhpcyAqc2hvdWxkKiBiZSBzdHJhaWdodGZvcndhcmQuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2suIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBnbyB0aHJvdWdoIHRoZSBsaXN0IG9mIG1vZGlmaWVkIGZpbGVzIGFnYWluLCB2aXN1YWxseSB0aGlzIHRpbWUsIHRvIGNvbmZpcm0gdGhhdCBubyBub24tYHRvb2xzL2AgZmlsZXMgd2VyZSB0b3VjaGVkOiBgdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZWAsIGB0b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlYCwgYW5kIHNvIG9uLCBhbGwgdGhlIHdheSBkb3duIHRvIGB0b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaGAuIFl1cCwgc3RpbGwgYWxsIGluc2lkZSBgdG9vbHMvYC4gTm8gcmVkIGZsYWdzLgoKVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgJiMzNDtXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBjcml0ZXJpYSwgdGhlIHZlcmRpY3QgaXMgY2xlYXI6IGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuIFRoZXJlIGFyZSBubyBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcyBhZmZlY3RlZCwgc28gdGhlIGNoYW5nZXMgaW4gdGhlc2UgdG9vbHMgYXJlIGlycmVsZXZhbnQuIGBFbmFibGVDb25maWdzYCB3b3VsZCBiZSBlbXB0eSwgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgYEZvY3VzU3ltYm9sc2AgdG8gZmxhZy4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50LiBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29saW5nIGFuZCBidWlsZCBzY3JpcHRzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHBvcnRpbmcgdGhlIHBlcmYgR1RLIFVJIGZyb20gR1RLMiB0byBHVEs0IGFuZCBtaW5vciBoZWxwZXIgcmVsb2NhdGlvbiBpbiB0b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYykuIEl0IGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwtc3BhY2UgY29kZSwgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29saW5nIGFuZCBidWlsZCBzY3JpcHRzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHBvcnRpbmcgdGhlIHBlcmYgR1RLIFVJIGZyb20gR1RLMiB0byBHVEs0IGFuZCBtaW5vciBoZWxwZXIgcmVsb2NhdGlvbiBpbiB0b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYykuIEl0IGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwtc3BhY2UgY29kZSwgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MjY6MjMuOTQ5MzM5NTY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc0MTk2MjYzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHRvb2xpbmcgYW5kIGJ1aWxkIHNjcmlwdHMgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgcG9ydGluZyB0aGUgcGVyZiBHVEsgVUkgZnJvbSBHVEsyIHRvIEdUSzQgYW5kIG1pbm9yIGhlbHBlciByZWxvY2F0aW9uIGluIHRvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jKS4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IGtlcm5lbC1zcGFjZSBjb2RlLCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjoyNjoyMy45NDkzNDU2OTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjMwMzE3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZmFmNDE1MzY0MDBmYzcyMDkzZGY3OGQ2ZTc5N2EzN2NiYWIwNmY3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMDI6MjY6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZSBiL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmVcXG5pbmRleCA5OWViMGVhMDk1Mzc1Li40ZWM5NWMzNWE1YzE5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmVcXG4rKysgYi90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlXFxuQEAgLTExMyw4ICsxMTMsNyBAQCBGRUFUVVJFX1RFU1RTX0VYVFJBIDo9ICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBjb21waWxlLXgzMiAgICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBjcGx1cy1kZW1hbmdsZSAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBjeGEtZGVtYW5nbGUgICAgICAgICAgICAgICAgICAgXFxcXFxcbi0gICAgICAgICBndGsyICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbi0gICAgICAgICBndGsyLWluZm9iYXIgICAgICAgICAgICAgICAgICAgXFxcXFxcbisgICAgICAgICBndGs0ICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBoZWxsbyAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBiYWJlbHRyYWNlMi1jdGYtd3JpdGVyICAgICAgICAgXFxcXFxcbiAgICAgICAgICBsaWJjYXBzdG9uZSAgICAgICAgICAgICAgICAgICAgXFxcXFxcbkBAIC0xNDMsNiArMTQyLDcgQEAgZW5kaWZcXG4gRkVBVFVSRV9ESVNQTEFZID89ICAgICAgICAgICAgICBcXFxcXFxuICAgICAgICAgIGxpYmR3ICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBnbGliYyAgICAgICAgICAgICAgICAgIFxcXFxcXG4rICAgICAgICAgZ3RrNCAgICAgICAgICAgICAgICAgICBcXFxcXFxuICAgICAgICAgIGxpYmVsZiAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBsaWJudW1hICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgbnVtYV9udW1fcG9zc2libGVfY3B1cyBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGUgYi90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXFxuaW5kZXggN2QxNjUwMTgxMTZhNS4uMDFjNDhlNmVmMDIxZCAxMDA2NDRcXG4tLS0gYS90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZVxcbkBAIC0xMSw4ICsxMSw3IEBAIEZJTEVTPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgdGVzdC1ldmVudGZkLmJpbiAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICB0ZXN0LWZvcnRpZnktc291cmNlLmJpbiAgICAgICAgICAgICAgICBcXFxcXFxuICAgICAgICAgIHRlc3QtZ2xpYmMuYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tICAgICAgICAgdGVzdC1ndGsyLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbi0gICAgICAgICB0ZXN0LWd0azItaW5mb2Jhci5iaW4gICAgICAgICAgICAgICAgICBcXFxcXFxuKyAgICAgICAgIHRlc3QtZ3RrNC5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgdGVzdC1oZWxsby5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICB0ZXN0LWxpYmJmZC5iaW4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuIFxcdCB0ZXN0LWxpYmJmZC10aHJlYWRzYWZlLmJpbiAgICAgIFxcdFxcXFxcXG5AQCAtMjQwLDExICsyMzksOCBAQCAkKE9VVFBVVCl0ZXN0LWxpYmNwdXBvd2VyLmJpbjpcXG4gJChPVVRQVVQpdGVzdC1saWJ0cmFjZWZzLmJpbjpcXG4gXFx0ICQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBsaWJ0cmFjZWZzIDJcXHUwMDNlL2Rldi9udWxsKSAtbHRyYWNlZnNcXG4gXFxuLSQoT1VUUFVUKXRlc3QtZ3RrMi5iaW46XFxuLVxcdCQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMlxcdTAwM2UvZGV2L251bGwpIC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnNcXG4tXFxuLSQoT1VUUFVUKXRlc3QtZ3RrMi1pbmZvYmFyLmJpbjpcXG4tXFx0JChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsrLTIuMCAyXFx1MDAzZS9kZXYvbnVsbClcXG4rJChPVVRQVVQpdGVzdC1ndGs0LmJpbjpcXG4rXFx0JChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGs0IDJcXHUwMDNlL2Rldi9udWxsKVxcbiBcXG4gZ3JlcC1saWJzICA9ICQoZmlsdGVyIC1sJSwkKDEpKVxcbiBzdHJpcC1saWJzID0gJChmaWx0ZXItb3V0IC1sJSwkKDEpKVxcbmRpZmYgLS1naXQgYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmMgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmNcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBiMWI3MTZkZDU3MzMwLi4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDEyICswLDAgQEBcXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFxcXCItV3N0cmljdC1wcm90b3R5cGVzXFxcIlxcbi0jaW5jbHVkZSBcXHUwMDNjZ3RrL2d0ay5oXFx1MDAzZVxcbi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGVycm9yIFxcXCItV3N0cmljdC1wcm90b3R5cGVzXFxcIlxcbi1cXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4te1xcbi1cXHRndGtfaW5pdChcXHUwMDI2YXJnYywgXFx1MDAyNmFyZ3YpO1xcbi1cXHRndGtfaW5mb19iYXJfbmV3KCk7XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbmRpZmYgLS1naXQgYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi5jIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azQuY1xcbnNpbWlsYXJpdHkgaW5kZXggNzYlXFxucmVuYW1lIGZyb20gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuY1xcbnJlbmFtZSB0byB0b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrNC5jXFxuaW5kZXggMmFhZjRiZmMyMDU1Ni4uYjk1MjBlNzQwOGI5OSAxMDA2NDRcXG4tLS0gYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi5jXFxuKysrIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azQuY1xcbkBAIC0zLDkgKzMsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjZ3RrL2d0ay5oXFx1MDAzZVxcbiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGVycm9yIFxcXCItV3N0cmljdC1wcm90b3R5cGVzXFxcIlxcbiBcXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4raW50IG1haW4odm9pZClcXG4ge1xcbi1cXHRndGtfaW5pdChcXHUwMDI2YXJnYywgXFx1MDAyNmFyZ3YpO1xcbitcXHRndGtfaW5pdCgpO1xcbiBcXG4gICAgICAgICByZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxcbmluZGV4IDIyZjg3ZWFhMzI3OTYuLjdhZjliM2Y4MWMwNjUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxcbisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHRcXG5AQCAtMzUxLDcgKzM1MSw3IEBAIE9QVElPTlNcXG4gXFx0cmVxdWlyZXMgYSB0dHksIGlmIG9uZSBpcyBub3QgcHJlc2VudCwgYXMgd2hlbiBwaXBpbmcgdG8gb3RoZXJcXG4gXFx0Y29tbWFuZHMsIHRoZSBzdGRpbyBpbnRlcmZhY2UgaXMgdXNlZC5cXG4gXFxuLS0tZ3RrOjogVXNlIHRoZSBHVEsyIGludGVyZmFjZS5cXG4rLS1ndGs6OiBVc2UgdGhlIEdUSzQgaW50ZXJmYWNlLlxcbiBcXG4gLWs6OlxcbiAtLXZtbGludXg9XFx1MDAzY2ZpbGVcXHUwMDNlOjpcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGVcXG5pbmRleCA1YjcxMzgzN2VlZGU3Li41NjAxNDEwNjQ3OWEzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGVcXG4rKysgYi90b29scy9wZXJmL01ha2VmaWxlXFxuQEAgLTEwNiw3ICsxMDYsNyBAQCBjbGVhbjpcXG4gIyBtYWtlIC1DIHRvb2xzL3BlcmYgLWYgdGVzdHMvbWFrZVxcbiAjXFxuIGJ1aWxkLXRlc3Q6XFxuLVxcdEAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azIgb3V0XFxuK1xcdEAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azQgb3V0XFxuIFxcbiBidWlsZC10ZXN0LXRhcmJhbGw6XFxuIFxcdEAkKE1BS0UpIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IG91dFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnXFxuaW5kZXggNGQ1OTkzZGE5Zjk0NS4uNGVlNzM5M2EzOWY5MSAxMDA2NDRcXG4tLS0gYS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZ1xcbisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnXFxuQEAgLTc3NCwyMSArNzc0LDIyIEBAIGlmbmRlZiBOT19TTEFOR1xcbiAgIGVuZGlmXFxuIGVuZGlmXFxuIFxcbi1pZmRlZiBHVEsyXFxuLSAgRkxBR1NfR1RLMj0kKENGTEFHUykgJChMREZMQUdTKSAkKEVYVExJQlMpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMlxcdTAwM2UvZGV2L251bGwpXFxuLSAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrMilcXG4tICBpZm5lcSAoJChmZWF0dXJlLWd0azIpLCAxKVxcbi0gICAgJCh3YXJuaW5nIEdUSzIgbm90IGZvdW5kLCBkaXNhYmxlcyBHVEsyIHN1cHBvcnQuIFBsZWFzZSBpbnN0YWxsIGd0azItZGV2ZWwgb3IgbGliZ3RrMi4wLWRldilcXG4tICAgIE5PX0dUSzIgOj0gMVxcbitpZmRlZiBHVEs0XFxuKyAgRkxBR1NfR1RLND0kKENGTEFHUykgJChMREZMQUdTKSAkKEVYVExJQlMpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrNCAyXFx1MDAzZS9kZXYvbnVsbClcXG4rICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGs0KVxcbisgIGlmbmVxICgkKGZlYXR1cmUtZ3RrNCksIDEpXFxuKyAgICAkKHdhcm5pbmcgR1RLNCBub3QgZm91bmQsIGRpc2FibGVzIEdUSzQgc3VwcG9ydC4gUGxlYXNlIGluc3RhbGwgZ3RrNC1kZXZlbCBvciBsaWJndGstNC1kZXYpXFxuKyAgICBOT19HVEs0IDo9IDFcXG4gICBlbHNlXFxuLSAgICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGsyLWluZm9iYXIpXFxuLSAgICBpZmVxICgkKGZlYXR1cmUtZ3RrMi1pbmZvYmFyKSwgMSlcXG4tICAgICAgR1RLX0NGTEFHUyA6PSAtREhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcXG4tICAgIGVuZGlmXFxuLSAgICBDRkxBR1MgKz0gLURIQVZFX0dUSzJfU1VQUE9SVFxcbi0gICAgR1RLX0NGTEFHUyArPSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgZ3RrKy0yLjAgMlxcdTAwM2UvZGV2L251bGwpXFxuLSAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0aystMi4wIDJcXHUwMDNlL2Rldi9udWxsKVxcbisgICAgQ0ZMQUdTICs9IC1ESEFWRV9HVEs0X1NVUFBPUlRcXG4rICAgIEdUS19DRkxBR1MgKz0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGd0azQgMlxcdTAwM2UvZGV2L251bGwpXFxuKyAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0azQgMlxcdTAwM2UvZGV2L251bGwpXFxuICAgICBFWFRMSUJTICs9IC1sZGxcXG4rICAgICMgbGlicGVyZi1ndGsuc28gaXMgZGxvcGVuKCllZCBhdCBydW50aW1lIGFuZCBjYWxscyBiYWNrIGludG9cXG4rICAgICMgc3ltYm9scyBkZWZpbmVkIGluIHRoZSBwZXJmIGJpbmFyeSBpdHNlbGYgKGNhbGxjaGFpbl9wYXJhbSxcXG4rICAgICMgc3ltYm9sX2NvbmYsIGV2c2VsX19uYW1lLCAuLi4pOiBwZXJmIG5lZWRzIHRvIGV4cG9ydCB0aG9zZVxcbisgICAgIyBkeW5hbWljYWxseSBmb3IgdGhlIHBsdWdpbiB0byByZXNvbHZlIHRoZW0uXFxuKyAgICBMREZMQUdTICs9IC1yZHluYW1pY1xcbiAgIGVuZGlmXFxuIGVuZGlmXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYgYi90b29scy9wZXJmL01ha2VmaWxlLnBlcmZcXG5pbmRleCAyOWNmZDQ0YzQyN2YzLi4yNDM4YjQwZWFhZWMxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZlxcbisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZlxcbkBAIC00OSw3ICs0OSw3IEBAIGluY2x1ZGUgLi4vc2NyaXB0cy91dGlsaXRpZXMubWFrXFxuICNcXG4gIyBEZWZpbmUgTk9fU0xBTkcgaWYgeW91IGRvIG5vdCB3YW50IFRVSSBzdXBwb3J0LlxcbiAjXFxuLSMgRGVmaW5lIEdUSzIgaWYgeW91IHdhbnQgR1RLKyBHVUkgc3VwcG9ydC5cXG4rIyBEZWZpbmUgR1RLNCBpZiB5b3Ugd2FudCBHVEsrIEdVSSBzdXBwb3J0LlxcbiAjXFxuICMgRGVmaW5lIE5PX0RFTUFOR0xFIGlmIHlvdSBkbyBub3Qgd2FudCBDKysgc3ltYm9sIGRlbWFuZ2xpbmcuXFxuICNcXG5AQCAtNDczLDcgKzQ3Myw3IEBAIGlmbmVxICgkKE9VVFBVVCksKVxcbiAgIENGTEFHUyArPSAtSSQoT1VUUFVUKVxcbiBlbmRpZlxcbiBcXG4taWZkZWYgR1RLMlxcbitpZmRlZiBHVEs0XFxuICAgQUxMX1BST0dSQU1TICs9ICQoT1VUUFVUKWxpYnBlcmYtZ3RrLnNvXFxuICAgR1RLX0lOIDo9ICQoT1VUUFVUKWd0ay1pbi5vXFxuIGVuZGlmXFxuQEAgLTgxMSw3ICs4MTEsNyBAQCBjaGVjazogcHJlcGFyZVxcbiBcXG4gIyMjIEluc3RhbGxhdGlvbiBydWxlc1xcbiBcXG4taWZkZWYgR1RLMlxcbitpZmRlZiBHVEs0XFxuIGluc3RhbGwtZ3RrOiAkKE9VVFBVVClsaWJwZXJmLWd0ay5zb1xcbiBcXHQkKGNhbGwgUVVJRVRfSU5TVEFMTCwgJ0dUSyBVSScpIFxcXFxcXG4gXFx0XFx0JChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknOyBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmNcXG5pbmRleCA2OWNiNzJiMjA4MmE2Li4xNTE2M2UwODFhOGNlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXFxuKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmNcXG5AQCAtNTIsNyArNTIsNyBAQCBzdHJ1Y3QgcGVyZl9hbm5vdGF0ZSB7XFxuIFxcdGJvb2xcXHQgICB1c2VfdHVpO1xcbiAjZW5kaWZcXG4gXFx0Ym9vbFxcdCAgIHVzZV9zdGRpbywgdXNlX3N0ZGlvMjtcXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxcbiBcXHRib29sXFx0ICAgdXNlX2d0aztcXG4gI2VuZGlmXFxuIFxcdGJvb2xcXHQgICBza2lwX21pc3Npbmc7XFxuQEAgLTcxMiw3ICs3MTIsNyBAQCBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilcXG4gXFx0T1BUX0JPT0xFQU4oJ3EnLCBcXFwicXVpZXRcXFwiLCBcXHUwMDI2cXVpZXQsIFxcXCJkbyBub3cgc2hvdyBhbnkgd2FybmluZ3Mgb3IgbWVzc2FnZXNcXFwiKSxcXG4gXFx0T1BUX0JPT0xFQU4oJ0QnLCBcXFwiZHVtcC1yYXctdHJhY2VcXFwiLCBcXHUwMDI2ZHVtcF90cmFjZSxcXG4gXFx0XFx0ICAgIFxcXCJkdW1wIHJhdyB0cmFjZSBpbiBBU0NJSVxcXCIpLFxcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcXG4rI2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXFxuIFxcdE9QVF9CT09MRUFOKDAsIFxcXCJndGtcXFwiLCBcXHUwMDI2YW5ub3RhdGUudXNlX2d0aywgXFxcIlVzZSB0aGUgR1RLIGludGVyZmFjZVxcXCIpLFxcbiAjZW5kaWZcXG4gI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVFxcbkBAIC04MjgsNyArODI4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXFxuIFxcdGlmIChhbm5vdGF0ZV9jaGVja19hcmdzKCkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcXG4gXFx0aWYgKHN5bWJvbF9jb25mLnNob3dfbnJfc2FtcGxlcyBcXHUwMDI2XFx1MDAyNiBhbm5vdGF0ZS51c2VfZ3RrKSB7XFxuIFxcdFxcdHByX2VycihcXFwiLS1zaG93LW5yLXNhbXBsZXMgaXMgbm90IGF2YWlsYWJsZSBpbiAtLWd0ayBtb2RlIGF0IHRoaXMgdGltZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTg5OCw3ICs4OTgsNyBAQCBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilcXG4gXFx0ZWxzZSBpZiAoYW5ub3RhdGUudXNlX3R1aSlcXG4gXFx0XFx0dXNlX2Jyb3dzZXIgPSAxO1xcbiAjZW5kaWZcXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxcbiBcXHRlbHNlIGlmIChhbm5vdGF0ZS51c2VfZ3RrKVxcbiBcXHRcXHR1c2VfYnJvd3NlciA9IDI7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmNcXG5pbmRleCA2MGQxZjE2NjYyOWUwLi5kMTQzODRjNTg0NjYxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuY1xcbisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuY1xcbkBAIC04Miw3ICs4Miw3IEBAIHN0cnVjdCByZXBvcnQge1xcbiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUXFxuIFxcdGJvb2xcXHRcXHRcXHR1c2VfdHVpO1xcbiAjZW5kaWZcXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxcbiBcXHRib29sXFx0XFx0XFx0dXNlX2d0aztcXG4gI2VuZGlmXFxuIFxcdGJvb2xcXHRcXHRcXHR1c2Vfc3RkaW87XFxuQEAgLTEzNTksOCArMTM1OSw4IEBAIGludCBjbWRfcmVwb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilcXG4gI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVFxcbiBcXHRPUFRfQk9PTEVBTigwLCBcXFwidHVpXFxcIiwgXFx1MDAyNnJlcG9ydC51c2VfdHVpLCBcXFwiVXNlIHRoZSBUVUkgaW50ZXJmYWNlXFxcIiksXFxuICNlbmRpZlxcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcXG4tXFx0T1BUX0JPT0xFQU4oMCwgXFxcImd0a1xcXCIsIFxcdTAwMjZyZXBvcnQudXNlX2d0aywgXFxcIlVzZSB0aGUgR1RLMiBpbnRlcmZhY2VcXFwiKSxcXG4rI2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXFxuK1xcdE9QVF9CT09MRUFOKDAsIFxcXCJndGtcXFwiLCBcXHUwMDI2cmVwb3J0LnVzZV9ndGssIFxcXCJVc2UgdGhlIEdUSzQgaW50ZXJmYWNlXFxcIiksXFxuICNlbmRpZlxcbiBcXHRPUFRfQk9PTEVBTigwLCBcXFwic3RkaW9cXFwiLCBcXHUwMDI2cmVwb3J0LnVzZV9zdGRpbyxcXG4gXFx0XFx0ICAgIFxcXCJVc2UgdGhlIHN0ZGlvIGludGVyZmFjZVxcXCIpLFxcbkBAIC0xNzEwLDcgKzE3MTAsNyBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXFxuIFxcdGVsc2UgaWYgKHJlcG9ydC51c2VfdHVpKVxcbiBcXHRcXHR1c2VfYnJvd3NlciA9IDE7XFxuICNlbmRpZlxcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcXG4rI2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXFxuIFxcdGVsc2UgaWYgKHJlcG9ydC51c2VfZ3RrKVxcbiBcXHRcXHR1c2VfYnJvd3NlciA9IDI7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoIGIvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaFxcbmluZGV4IGQwMDNlN2ZhYjJiZTguLmE2MDFhNTI2MGMxN2UgMTAwNzU1XFxuLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaFxcbisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2hcXG5AQCAtMTk5LDggKzE5OSw4IEBAIGZlZG9yYV9wa2dfZm9yKCkge1xcbiBcXHQjIG9wdC1pbiBmZWF0dXJlcywgd2hpY2ggYSBkZWZhdWx0IGJ1aWxkIGRvZXMgbm90IGVuYWJsZTogdGhlIGxpYmJmZFxcbiBcXHQjIGRpc2Fzc2VtYmxlciBmYW1pbHkgKGxpYmJmZCwgbGliYmZkLXRocmVhZHNhZmUsIGxpYmJmZC1saWJlcnR5LFxcbiBcXHQjIGRpc2Fzc2VtYmxlci0qLCBjcGx1cy1kZW1hbmdsZSksIG9ubHkgbGlua2VkIG9uIEJVSUxEX05PTkRJU1RST1xcbi1cXHQjIGJ1aWxkcyBhbmQgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBjYXBzdG9uZSwgR1RLMiwgTElCUEVSTCBhbmRcXG4tXFx0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLMiAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXFxuK1xcdCMgYnVpbGRzIGFuZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNhcHN0b25lLCBHVEs0LCBMSUJQRVJMIGFuZFxcbitcXHQjIExJQlVOV0lORCBzdXBwb3J0IChpZmRlZiBHVEs0IC8gaWZkZWYgTElCUEVSTCAvIExJQlVOV0lORD0xKSxcXG4gXFx0IyBhbmQgQ29yZVNpZ2h0IChpZmRlZiBDT1JFU0lHSFQpLCBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBtYXBwZWQuXFxuIFxcdCMgbGliYWlvIGlzIG5vdCBtYXBwZWQgZWl0aGVyOiBpdHNcXG4gXFx0IyB0ZXN0IHVzZXMgdGhlIFBPU0lYIEFJTyBBUEkgKGFpby5oLCBhaW9fKiwgLWxydCksIHByb3ZpZGVkIGJ5XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZSBiL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxcbmluZGV4IGQyYzJmNTI2ZTFkYjAuLjIwMmFiNTUwMTkxNjEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9tYWtlXFxuKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9tYWtlXFxuQEAgLTk1LDcgKzk1LDcgQEAgbWFrZV9ub19iYWJlbHRyYWNlMiA6PSBOT19CQUJFTFRSQUNFMj0xXFxuIG1ha2Vfd2l0aF9jb3Jlc2lnaHQgOj0gQ09SRVNJR0hUPTFcXG4gbWFrZV9ub19zZHRcXHQgICAgOj0gTk9fU0RUPTFcXG4gbWFrZV9ub19saWJwZm00ICAgICA6PSBOT19MSUJQRk00PTFcXG4tbWFrZV93aXRoX2d0azIgICAgICA6PSBHVEsyPTFcXG4rbWFrZV93aXRoX2d0azQgICAgICA6PSBHVEs0PTFcXG4gbWFrZV9yZWZjbnRfY2hlY2sgICA6PSBFWFRSQV9DRkxBR1M9XFxcIi1EUkVGQ05UX0NIRUNLSU5HPTFcXFwiXFxuIG1ha2VfdGFncyAgICAgICAgICAgOj0gdGFnc1xcbiBtYWtlX2NzY29wZSAgICAgICAgIDo9IGNzY29wZVxcbkBAIC0zMTgsNyArMzE4LDcgQEAgJChydW4pOlxcbiBcXHQkKGNhbGwgdGVzdCwkQCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiBcXHRybSAtcmYgJEAgJCRUTVBfREVTVCB8fCAoY2F0ICRAIDsgZmFsc2UpXFxuIFxcbi1tYWtlX3dpdGhfZ3RrMjpcXG4rbWFrZV93aXRoX2d0azQ6XFxuIFxcdCQoY2FsbCBjbGVhbilcXG4gXFx0QFRNUF9ERVNUPSQkKG1rdGVtcCAtZCk7IFxcXFxcXG4gXFx0Y21kPVxcXCJjZCAkKFBFUkYpIFxcdTAwMjZcXHUwMDI2ICQoTUFLRV9GKSAkKCRAKSAkKFBBUkFMTEVMX09QVCkgJChPX09QVCkgREVTVERJUj0kJFRNUF9ERVNUXFxcIjsgXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuY1xcbmluZGV4IDg5MjBlMjk4NDIwYTguLjA5NGRmYTA0NWI3NzQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmNcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXFwidWkvaGVscGxpbmUuaFxcXCJcXG4gI2luY2x1ZGUgXFx1MDAzY2ludHR5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiBcXG4gZW51bSB7XFxuIFxcdEFOTl9DT0xfX1BFUkNFTlQsXFxuQEAgLTE2MSw3ICsxNjIsNyBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX19hbm5vdGF0ZV9zeW1ib2woR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBtYXBfc3ltYm9sICptcyxcXG4gXFx0XFx0XFx0Z3RrX2xpc3Rfc3RvcmVfc2V0KHN0b3JlLCBcXHUwMDI2aXRlciwgQU5OX0NPTF9fTElORSwgcywgLTEpO1xcbiBcXHR9XFxuIFxcbi1cXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xcbitcXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgXFx1MDAyNm5vdGVzLVxcdTAwM2VzcmMtXFx1MDAzZXNvdXJjZSwgYWwubm9kZSkge1xcbiBcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZwb3MtXFx1MDAzZWFsLm5vZGUpO1xcbkBAIC0yMDUsNDAgKzIwNiwzNCBAQCBzdGF0aWMgaW50IHN5bWJvbF9fZ3RrX2Fubm90YXRlKHN0cnVjdCBtYXBfc3ltYm9sICptcywgc3RydWN0IGV2c2VsICpldnNlbCxcXG4gXFx0XFx0R3RrV2lkZ2V0ICppbmZvYmFyO1xcbiBcXHRcXHRHdGtXaWRnZXQgKnN0YXRiYXI7XFxuIFxcbi1cXHRcXHRzaWduYWwoU0lHU0VHViwgcGVyZl9ndGtfX3NpZ25hbCk7XFxuLVxcdFxcdHNpZ25hbChTSUdGUEUsICBwZXJmX2d0a19fc2lnbmFsKTtcXG4tXFx0XFx0c2lnbmFsKFNJR0lOVCwgIHBlcmZfZ3RrX19zaWduYWwpO1xcbi1cXHRcXHRzaWduYWwoU0lHUVVJVCwgcGVyZl9ndGtfX3NpZ25hbCk7XFxuLVxcdFxcdHNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTtcXG4rXFx0XFx0c2lnbmFsKFNJR1NFR1YsIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwpO1xcbitcXHRcXHRzaWduYWwoU0lHRlBFLCAgcGVyZl9ndGtfX2ZhdGFsX3NpZ25hbCk7XFxuK1xcdFxcdHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscygpO1xcbiBcXG4tXFx0XFx0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7XFxuK1xcdFxcdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KCk7XFxuIFxcdFxcdGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1cod2luZG93KSwgXFxcInBlcmYgYW5ub3RhdGVcXFwiKTtcXG4gXFxuLVxcdFxcdGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCBcXFwiZGVsZXRlX2V2ZW50XFxcIiwgZ3RrX21haW5fcXVpdCwgTlVMTCk7XFxuLVxcbiBcXHRcXHRwZ2N0eCA9IHBlcmZfZ3RrX19hY3RpdmF0ZV9jb250ZXh0KHdpbmRvdyk7XFxuIFxcdFxcdGlmICghcGdjdHgpXFxuIFxcdFxcdFxcdHJldHVybiAtMTtcXG4gXFxuLVxcdFxcdHZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApO1xcbitcXHRcXHR2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTtcXG4gXFx0XFx0bm90ZWJvb2sgPSBndGtfbm90ZWJvb2tfbmV3KCk7XFxuIFxcdFxcdHBnY3R4LVxcdTAwM2Vub3RlYm9vayA9IG5vdGVib29rO1xcbiBcXG4tXFx0XFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIG5vdGVib29rLCBUUlVFLCBUUlVFLCAwKTtcXG4rXFx0XFx0Z3RrX3dpZGdldF9zZXRfdmV4cGFuZChub3RlYm9vaywgVFJVRSk7XFxuK1xcdFxcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIG5vdGVib29rKTtcXG4gXFxuIFxcdFxcdGluZm9iYXIgPSBwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIoKTtcXG4tXFx0XFx0aWYgKGluZm9iYXIpIHtcXG4tXFx0XFx0XFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGluZm9iYXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIEZBTFNFLCBGQUxTRSwgMCk7XFxuLVxcdFxcdH1cXG4rXFx0XFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgaW5mb2Jhcik7XFxuIFxcbiBcXHRcXHRzdGF0YmFyID0gcGVyZl9ndGtfX3NldHVwX3N0YXR1c2JhcigpO1xcbi1cXHRcXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhciwgRkFMU0UsIEZBTFNFLCAwKTtcXG4rXFx0XFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhcik7XFxuIFxcbi1cXHRcXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZib3gpO1xcbitcXHRcXHRndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKHdpbmRvdyksIHZib3gpO1xcbiBcXHR9XFxuIFxcbi1cXHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTtcXG4rXFx0c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTtcXG4gXFx0dGFiX2xhYmVsID0gZ3RrX2xhYmVsX25ldyhzeW0tXFx1MDAzZW5hbWUpO1xcbiBcXG4gXFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSxcXG5AQCAtMjY3LDEyICsyNjIsMTEgQEAgdm9pZCBwZXJmX2d0a19fc2hvd19hbm5vdGF0aW9ucyh2b2lkKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHR3aW5kb3cgPSBwZ2N0eC1cXHUwMDNlbWFpbl93aW5kb3c7XFxuLVxcdGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTtcXG4gXFxuIFxcdHBlcmZfZ3RrX19yZXNpemVfd2luZG93KHdpbmRvdyk7XFxuLVxcdGd0a193aW5kb3dfc2V0X3Bvc2l0aW9uKEdUS19XSU5ET1cod2luZG93KSwgR1RLX1dJTl9QT1NfQ0VOVEVSKTtcXG4rXFx0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aW5kb3csIFRSVUUpO1xcbiBcXG4tXFx0Z3RrX21haW4oKTtcXG4rXFx0cGVyZl9ndGtfX3J1bl9tYWluX2xvb3Aod2luZG93KTtcXG4gXFxuIFxcdHBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoXFx1MDAyNnBnY3R4KTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9icm93c2VyLmMgYi90b29scy9wZXJmL3VpL2d0ay9icm93c2VyLmNcXG5pbmRleCBkMmRhZGYzODczZmJkLi45OGYxZDZiZmNiMjQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xcbkBAIC01LDMyICs1LDkyIEBAXFxuICNpbmNsdWRlIFxcXCIuLi9oaXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9oZWxwbGluZS5oXFxcIlxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2dsaWItdW5peC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuIFxcbi12b2lkIHBlcmZfZ3RrX19zaWduYWwoaW50IHNpZylcXG4rLypcXG4rICogU0lHSU5UL1NJR1FVSVQvU0lHVEVSTSBhcmUgYXN5bmNocm9ub3VzOiBkZWZlcnJpbmcgdGhlIGFjdHVhbCBleGl0IHRvIGFcXG4rICogR0xpYiBzb3VyY2UgZGlzcGF0Y2hlZCBmcm9tIHRoZSBtYWluIGxvb3AgbWVhbnMgaXQgYWx3YXlzIHJ1bnMgb24gdGhlXFxuKyAqIG1haW4gdGhyZWFkLCBzZXJpYWxpemVkIHdpdGggZXZlcnl0aGluZyBlbHNlIHRoZSBtYWluIGxvb3AgZG9lc1xcbisgKiAoaW5jbHVkaW5nIHBlcmZfZ3RrX19lcnJvcigpJ3MgdXBkYXRlcyB0byBwZXJmX2d0a19fZXJyb3JfbG9vcHMpLCBpbnN0ZWFkXFxuKyAqIG9mIHJhY2luZyB0aGVtIGZyb20gYXJiaXRyYXJ5IHNpZ25hbC1oYW5kbGVyIGNvbnRleHQuXFxuKyAqL1xcbitzdGF0aWMgZ2Jvb2xlYW4gcGVyZl9ndGtfX3F1aXRfc2lnbmFsKGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXFxuIHtcXG4gXFx0cGVyZl9ndGtfX2V4aXQoZmFsc2UpO1xcbitcXHRyZXR1cm4gR19TT1VSQ0VfUkVNT1ZFO1xcbit9XFxuK1xcbit2b2lkIHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscyh2b2lkKVxcbit7XFxuK1xcdGdfdW5peF9zaWduYWxfYWRkKFNJR0lOVCwgIHBlcmZfZ3RrX19xdWl0X3NpZ25hbCwgTlVMTCk7XFxuK1xcdGdfdW5peF9zaWduYWxfYWRkKFNJR1FVSVQsIHBlcmZfZ3RrX19xdWl0X3NpZ25hbCwgTlVMTCk7XFxuK1xcdGdfdW5peF9zaWduYWxfYWRkKFNJR1RFUk0sIHBlcmZfZ3RrX19xdWl0X3NpZ25hbCwgTlVMTCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFNJR1NFR1YvU0lHRlBFIGFyZSBzeW5jaHJvbm91cyBmYXVsdHM6IHRoZXJlJ3Mgbm8gXFxcImxhdGVyXFxcIiB0byBkZWZlciB0byxcXG4rICogYW5kIG5vIHNhZmUgd2F5IHRvIHJ1biBHVEsvR0xpYiBjb2RlIChvciBhbnl0aGluZyBlbHNlIG5vbi1hc3luYy1zaWduYWwtXFxuKyAqIHNhZmUpIGZyb20gdGhlIGZhdWx0aW5nIGNvbnRleHQuIFJlcG9ydCBhbmQgbGV0IHRoZSBkZWZhdWx0IGRpc3Bvc2l0aW9uXFxuKyAqIChjb3JlIGR1bXApIGhhcHBlbiBpbnN0ZWFkIG9mIHRyeWluZyB0byB0ZWFyIGRvd24gR1RLIHN0YXRlIGhlcmUuXFxuKyAqL1xcbit2b2lkIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwoaW50IHNpZylcXG4re1xcbiBcXHRwc2lnbmFsKHNpZywgXFxcInBlcmZcXFwiKTtcXG4rXFx0c2lnbmFsKHNpZywgU0lHX0RGTCk7XFxuK1xcdHJhaXNlKHNpZyk7XFxuIH1cXG4gXFxuIHZvaWQgcGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3coR3RrV2lkZ2V0ICp3aW5kb3cpXFxuIHtcXG4gXFx0R2RrUmVjdGFuZ2xlIHJlY3Q7XFxuLVxcdEdka1NjcmVlbiAqc2NyZWVuO1xcbi1cXHRpbnQgbW9uaXRvcjtcXG4rXFx0R2RrTW9uaXRvciAqbW9uaXRvcjtcXG4rXFx0R2RrRGlzcGxheSAqZGlzcGxheTtcXG4rXFx0R0xpc3RNb2RlbCAqbW9uaXRvcnM7XFxuIFxcdGludCBoZWlnaHQ7XFxuIFxcdGludCB3aWR0aDtcXG4gXFxuLVxcdHNjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbih3aW5kb3cpO1xcbitcXHRkaXNwbGF5ID0gZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aW5kb3cpO1xcbitcXHRtb25pdG9ycyA9IGdka19kaXNwbGF5X2dldF9tb25pdG9ycyhkaXNwbGF5KTtcXG4rXFx0bW9uaXRvciA9IGdfbGlzdF9tb2RlbF9nZXRfaXRlbShtb25pdG9ycywgMCk7XFxuK1xcdGlmICghbW9uaXRvcikge1xcbitcXHRcXHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA4MDAsIDYwMCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXG4tXFx0bW9uaXRvciA9IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgd2luZG93LVxcdTAwM2V3aW5kb3cpO1xcbi1cXG4tXFx0Z2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIG1vbml0b3IsIFxcdTAwMjZyZWN0KTtcXG4rXFx0Z2RrX21vbml0b3JfZ2V0X2dlb21ldHJ5KG1vbml0b3IsIFxcdTAwMjZyZWN0KTtcXG4rXFx0Z19vYmplY3RfdW5yZWYobW9uaXRvcik7XFxuIFxcbiBcXHR3aWR0aFxcdD0gcmVjdC53aWR0aCAqIDMgLyA0O1xcbiBcXHRoZWlnaHRcXHQ9IHJlY3QuaGVpZ2h0ICogMyAvIDQ7XFxuIFxcbi1cXHRndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHdpZHRoLCBoZWlnaHQpO1xcbitcXHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTtcXG4rfVxcbitcXG4rc3RhdGljIEdNYWluTG9vcCAqcGVyZl9ndGtfX21haW5fbG9vcDtcXG4rXFxuK3ZvaWQgcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKHZvaWQpXFxuK3tcXG4rXFx0aWYgKHBlcmZfZ3RrX19tYWluX2xvb3ApXFxuK1xcdFxcdGdfbWFpbl9sb29wX3F1aXQocGVyZl9ndGtfX21haW5fbG9vcCk7XFxuK31cXG4rXFxuK3N0YXRpYyBnYm9vbGVhbiBwZXJmX2d0a19fY2xvc2VfcmVxdWVzdChHdGtXaWRnZXQgKndpZGdldCBfX21heWJlX3VudXNlZCxcXG4rXFx0XFx0XFx0XFx0XFx0Z3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZClcXG4re1xcbitcXHRwZXJmX2d0a19fcXVpdF9tYWluX2xvb3AoKTtcXG4rXFxuK1xcdHJldHVybiBGQUxTRTtcXG4rfVxcbitcXG4rdm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdylcXG4re1xcbitcXHRnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgXFxcImNsb3NlLXJlcXVlc3RcXFwiLFxcbitcXHRcXHRcXHQgR19DQUxMQkFDSyhwZXJmX2d0a19fY2xvc2VfcmVxdWVzdCksIE5VTEwpO1xcbitcXG4rXFx0cGVyZl9ndGtfX21haW5fbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBGQUxTRSk7XFxuK1xcdGdfbWFpbl9sb29wX3J1bihwZXJmX2d0a19fbWFpbl9sb29wKTtcXG4rXFx0Z19jbGVhcl9wb2ludGVyKFxcdTAwMjZwZXJmX2d0a19fbWFpbl9sb29wLCBnX21haW5fbG9vcF91bnJlZik7XFxuIH1cXG4gXFxuIGNvbnN0IGNoYXIgKnBlcmZfZ3RrX19nZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudClcXG5AQCAtNDIsMzMgKzEwMiwzNSBAQCBjb25zdCBjaGFyICpwZXJmX2d0a19fZ2V0X3BlcmNlbnRfY29sb3IoZG91YmxlIHBlcmNlbnQpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVFxcbitzdGF0aWMgdm9pZCBwZXJmX2d0a19faGlkZV93aWRnZXQoR3RrV2lkZ2V0ICp3aWRnZXQsIGdpbnQgcmVzcG9uc2VfaWQgX19tYXliZV91bnVzZWQsXFxuK1xcdFxcdFxcdFxcdCAgIGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXFxuK3tcXG4rXFx0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aWRnZXQsIEZBTFNFKTtcXG4rfVxcbitcXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcXG4ge1xcbiBcXHRHdGtXaWRnZXQgKmluZm9fYmFyO1xcbiBcXHRHdGtXaWRnZXQgKmxhYmVsO1xcbi1cXHRHdGtXaWRnZXQgKmNvbnRlbnRfYXJlYTtcXG4gXFxuIFxcdGluZm9fYmFyID0gZ3RrX2luZm9fYmFyX25ldygpO1xcbi1cXHRndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbChpbmZvX2JhciwgVFJVRSk7XFxuK1xcdGd0a193aWRnZXRfc2V0X3Zpc2libGUoaW5mb19iYXIsIEZBTFNFKTtcXG4gXFxuIFxcdGxhYmVsID0gZ3RrX2xhYmVsX25ldyhcXFwiXFxcIik7XFxuLVxcdGd0a193aWRnZXRfc2hvdyhsYWJlbCk7XFxuK1xcdGd0a193aWRnZXRfc2V0X3Zpc2libGUobGFiZWwsIFRSVUUpO1xcbiBcXG4tXFx0Y29udGVudF9hcmVhID0gZ3RrX2luZm9fYmFyX2dldF9jb250ZW50X2FyZWEoR1RLX0lORk9fQkFSKGluZm9fYmFyKSk7XFxuLVxcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGVudF9hcmVhKSwgbGFiZWwpO1xcbitcXHRndGtfaW5mb19iYXJfYWRkX2NoaWxkKEdUS19JTkZPX0JBUihpbmZvX2JhciksIGxhYmVsKTtcXG4gXFxuLVxcdGd0a19pbmZvX2Jhcl9hZGRfYnV0dG9uKEdUS19JTkZPX0JBUihpbmZvX2JhciksIEdUS19TVE9DS19PSyxcXG4rXFx0Z3RrX2luZm9fYmFyX2FkZF9idXR0b24oR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgXFxcIl9PS1xcXCIsXFxuIFxcdFxcdFxcdFxcdEdUS19SRVNQT05TRV9PSyk7XFxuIFxcdGdfc2lnbmFsX2Nvbm5lY3QoaW5mb19iYXIsIFxcXCJyZXNwb25zZVxcXCIsXFxuLVxcdFxcdFxcdCBHX0NBTExCQUNLKGd0a193aWRnZXRfaGlkZSksIE5VTEwpO1xcbitcXHRcXHRcXHQgR19DQUxMQkFDSyhwZXJmX2d0a19faGlkZV93aWRnZXQpLCBOVUxMKTtcXG4gXFxuIFxcdHBnY3R4LVxcdTAwM2VpbmZvX2JhciA9IGluZm9fYmFyO1xcbiBcXHRwZ2N0eC1cXHUwMDNlbWVzc2FnZV9sYWJlbCA9IGxhYmVsO1xcbiBcXG4gXFx0cmV0dXJuIGluZm9fYmFyO1xcbiB9XFxuLSNlbmRpZlxcbiBcXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKHZvaWQpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmggYi90b29scy9wZXJmL3VpL2d0ay9ndGsuaFxcbmluZGV4IGEyYjQ5N2YwM2ZkNmUuLjZiMzdmZDk5NDNjOWQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmhcXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9ndGsuaFxcbkBAIC0xMywxMCArMTMsOCBAQCBzdHJ1Y3QgcGVyZl9ndGtfY29udGV4dCB7XFxuIFxcdEd0a1dpZGdldCAqbWFpbl93aW5kb3c7XFxuIFxcdEd0a1dpZGdldCAqbm90ZWJvb2s7XFxuIFxcbi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVFxcbiBcXHRHdGtXaWRnZXQgKmluZm9fYmFyO1xcbiBcXHRHdGtXaWRnZXQgKm1lc3NhZ2VfbGFiZWw7XFxuLSNlbmRpZlxcbiBcXHRHdGtXaWRnZXQgKnN0YXRiYXI7XFxuIFxcdGd1aW50IHN0YXRiYXJfY3R4X2lkO1xcbiB9O1xcbkBAIC0zOCwxOSArMzYsMTUgQEAgdm9pZCBwZXJmX2d0a19faW5pdF9oZWxwbGluZSh2b2lkKTtcXG4gdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX2luaXQodm9pZCk7XFxuIHZvaWQgcGVyZl9ndGtfX2luaXRfaHBwKHZvaWQpO1xcbiBcXG4tdm9pZCBwZXJmX2d0a19fc2lnbmFsKGludCBzaWcpO1xcbit2b2lkIHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscyh2b2lkKTtcXG4rdm9pZCBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKGludCBzaWcpO1xcbiB2b2lkIHBlcmZfZ3RrX19yZXNpemVfd2luZG93KEd0a1dpZGdldCAqd2luZG93KTtcXG4rdm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdyk7XFxuK3ZvaWQgcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKHZvaWQpO1xcbit2b2lkIHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZyh2b2lkKTtcXG4gY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KTtcXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKHZvaWQpO1xcbi1cXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZCk7XFxuLSNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcXG4te1xcbi1cXHRyZXR1cm4gTlVMTDtcXG4tfVxcbi0jZW5kaWZcXG4gXFxuIHN0cnVjdCBldnNlbDtcXG4gc3RydWN0IGV2bGlzdDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmNcXG5pbmRleCBiYWUyMWYzMzZhZTZkLi4zNDJkNGMzZmVjYjAxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmNcXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXFxuQEAgLTgsNiArOCw4IEBAXFxuICNpbmNsdWRlIFxcXCIuLi9oZWxwbGluZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vc3RyaW5nMi5oXFxcIlxcbiAjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRhcmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbiBcXG5AQCAtMzk1LDExICszOTcsOSBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaXN0cyhHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cyxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRndGtfdHJlZV92aWV3X3NldF9ydWxlc19oaW50KEdUS19UUkVFX1ZJRVcodmlldyksIFRSVUUpO1xcbi1cXG4gXFx0Z19zaWduYWxfY29ubmVjdCh2aWV3LCBcXFwicm93LWFjdGl2YXRlZFxcXCIsXFxuIFxcdFxcdFxcdCBHX0NBTExCQUNLKG9uX3Jvd19hY3RpdmF0ZWQpLCBOVUxMKTtcXG4tXFx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2aWV3KTtcXG4rXFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxcbkBAIC00NDksNyArNDQ5LDcgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxcbiBcXHRcXHRiZiA9IGhwcC1cXHUwMDNlYnVmO1xcbiBcXHRcXHRzaXplID0gaHBwLVxcdTAwM2VzaXplO1xcbiBcXHRcXHRwZXJmX2hwcF9saXN0X19mb3JfZWFjaF9mb3JtYXQoaGUtXFx1MDAzZWhwcF9saXN0LCBmbXQpIHtcXG4tXFx0XFx0XFx0aW50IHJldDtcXG4rXFx0XFx0XFx0aW50IHJldCwgaW5jO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGZtdC1cXHUwMDNlY29sb3IpXFxuIFxcdFxcdFxcdFxcdHJldCA9IGZtdC1cXHUwMDNlY29sb3IoZm10LCBocHAsIGhlKTtcXG5AQCAtNDU3LDcgKzQ1NywxOCBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fYWRkX2hpZXJhcmNoeV9lbnRyaWVzKHN0cnVjdCBoaXN0cyAqaGlzdHMsXFxuIFxcdFxcdFxcdFxcdHJldCA9IGZtdC1cXHUwMDNlZW50cnkoZm10LCBocHAsIGhlKTtcXG4gXFxuIFxcdFxcdFxcdHNucHJpbnRmKGhwcC1cXHUwMDNlYnVmICsgcmV0LCBocHAtXFx1MDAzZXNpemUgLSByZXQsIFxcXCIgIFxcXCIpO1xcbi1cXHRcXHRcXHRhZHZhbmNlX2hwcChocHAsIHJldCArIDIpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiByZXQgY2FuIGJlIGFzIGxhcmdlIGFzIGhwcC1cXHUwMDNlc2l6ZSAtIDEsIHNvIHJldCArIDJcXG4rXFx0XFx0XFx0ICogY2FuIGV4Y2VlZCBocHAtXFx1MDAzZXNpemUuIGFkdmFuY2VfaHBwKCkgZG9lc24ndCBjbGFtcCxcXG4rXFx0XFx0XFx0ICogc28gcGFzc2luZyB0aGF0IHRocm91Z2ggd291bGQgdW5kZXJmbG93IHRoZVxcbitcXHRcXHRcXHQgKiBzaXplX3QgaHBwLVxcdTAwM2VzaXplIGFuZCBsZXQgYSBsYXRlciBmbXQtXFx1MDAzZWVudHJ5KCkgaW5cXG4rXFx0XFx0XFx0ICogdGhpcyBsb29wIHdyaXRlIHBhc3QgdGhlIGVuZCBvZiB0aGUgY2FsbGVyJ3NcXG4rXFx0XFx0XFx0ICogc3RhY2sgYnVmZmVyLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aW5jID0gcmV0ICsgMjtcXG4rXFx0XFx0XFx0aWYgKGluYyBcXHUwMDNlIChpbnQpaHBwLVxcdTAwM2VzaXplKVxcbitcXHRcXHRcXHRcXHRpbmMgPSBocHAtXFx1MDAzZXNpemU7XFxuK1xcdFxcdFxcdGFkdmFuY2VfaHBwKGhwcCwgaW5jKTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Z3RrX3RyZWVfc3RvcmVfc2V0KHN0b3JlLCBcXHUwMDI2aXRlciwgY29sX2lkeCwgc3RyaW0oYmYpLCAtMSk7XFxuQEAgLTUwNSw2ICs1MTYsNyBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXFxuIFxcdEd0a1dpZGdldCAqdmlldztcXG4gXFx0aW50IGNvbF9pZHg7XFxuIFxcdGludCBucl9jb2xzID0gMDtcXG4rXFx0aW50IHJldDtcXG4gXFx0Y2hhciBzWzUxMl07XFxuIFxcdGNoYXIgYnVmWzUxMl07XFxuIFxcdGJvb2wgZmlyc3Rfbm9kZSwgZmlyc3RfY29sO1xcbkBAIC01NDEsOSArNTUzLDEwIEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpZXJhcmNoeShHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cyxcXG4gXFx0LyogY29uc3RydWN0IG1lcmdlZCBjb2x1bW4gaGVhZGVyIHNpbmNlIHNvcnQga2V5cyBzaGFyZSBzaW5nbGUgY29sdW1uICovXFxuIFxcdGJ1ZlswXSA9ICdcXFxcMCc7XFxuIFxcdGZpcnN0X25vZGUgPSB0cnVlO1xcbitcXHRyZXQgPSAwO1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKGZtdF9ub2RlLCBcXHUwMDI2aGlzdHMtXFx1MDAzZWhwcF9mb3JtYXRzLCBsaXN0KSB7XFxuIFxcdFxcdGlmICghZmlyc3Rfbm9kZSlcXG4tXFx0XFx0XFx0c3RyY2F0KGJ1ZiwgXFxcIiAvIFxcXCIpO1xcbitcXHRcXHRcXHRyZXQgKz0gc2NucHJpbnRmKGJ1ZiArIHJldCwgc2l6ZW9mKGJ1ZikgLSByZXQsIFxcXCIgLyBcXFwiKTtcXG4gXFx0XFx0Zmlyc3Rfbm9kZSA9IGZhbHNlO1xcbiBcXG4gXFx0XFx0Zmlyc3RfY29sID0gdHJ1ZTtcXG5AQCAtNTUyLDExICs1NjUsMTEgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGllcmFyY2h5KEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdGlmICghZmlyc3RfY29sKVxcbi1cXHRcXHRcXHRcXHRzdHJjYXQoYnVmLCBcXFwiK1xcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXQgKz0gc2NucHJpbnRmKGJ1ZiArIHJldCwgc2l6ZW9mKGJ1ZikgLSByZXQsIFxcXCIrXFxcIik7XFxuIFxcdFxcdFxcdGZpcnN0X2NvbCA9IGZhbHNlO1xcbiBcXG4gXFx0XFx0XFx0Zm10LVxcdTAwM2VoZWFkZXIoZm10LCBcXHUwMDI2aHBwLCBoaXN0cywgMCwgTlVMTCk7XFxuLVxcdFxcdFxcdHN0cmNhdChidWYsIHN0cmltKGhwcC5idWYpKTtcXG4rXFx0XFx0XFx0cmV0ICs9IHNjbnByaW50ZihidWYgKyByZXQsIHNpemVvZihidWYpIC0gcmV0LCBcXFwiJXNcXFwiLCBzdHJpbShocHAuYnVmKSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtNTgzLDExICs1OTYsOSBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXFxuIFxcdHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoaGlzdHMsIFxcdTAwMjZoaXN0cy1cXHUwMDNlZW50cmllcywgc3RvcmUsXFxuIFxcdFxcdFxcdFxcdFxcdE5VTEwsIFxcdTAwMjZocHAsIG1pbl9wY250KTtcXG4gXFxuLVxcdGd0a190cmVlX3ZpZXdfc2V0X3J1bGVzX2hpbnQoR1RLX1RSRUVfVklFVyh2aWV3KSwgVFJVRSk7XFxuLVxcbiBcXHRnX3NpZ25hbF9jb25uZWN0KHZpZXcsIFxcXCJyb3ctYWN0aXZhdGVkXFxcIixcXG4gXFx0XFx0XFx0IEdfQ0FMTEJBQ0sob25fcm93X2FjdGl2YXRlZCksIE5VTEwpO1xcbi1cXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xcbitcXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xcbiB9XFxuIFxcbiBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcXG5AQCAtNjAwLDM2ICs2MTEsMzIgQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXFxuIFxcdEd0a1dpZGdldCAqc3RhdGJhcjtcXG4gXFx0R3RrV2lkZ2V0ICp3aW5kb3c7XFxuIFxcbi1cXHRzaWduYWwoU0lHU0VHViwgcGVyZl9ndGtfX3NpZ25hbCk7XFxuLVxcdHNpZ25hbChTSUdGUEUsICBwZXJmX2d0a19fc2lnbmFsKTtcXG4tXFx0c2lnbmFsKFNJR0lOVCwgIHBlcmZfZ3RrX19zaWduYWwpO1xcbi1cXHRzaWduYWwoU0lHUVVJVCwgcGVyZl9ndGtfX3NpZ25hbCk7XFxuLVxcdHNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTtcXG4rXFx0c2lnbmFsKFNJR1NFR1YsIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwpO1xcbitcXHRzaWduYWwoU0lHRlBFLCAgcGVyZl9ndGtfX2ZhdGFsX3NpZ25hbCk7XFxuK1xcdHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscygpO1xcbiBcXG4tXFx0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7XFxuK1xcdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KCk7XFxuIFxcbiBcXHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIFxcXCJwZXJmIHJlcG9ydFxcXCIpO1xcbiBcXG4tXFx0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFxcXCJkZWxldGVfZXZlbnRcXFwiLCBndGtfbWFpbl9xdWl0LCBOVUxMKTtcXG4tXFxuIFxcdHBnY3R4ID0gcGVyZl9ndGtfX2FjdGl2YXRlX2NvbnRleHQod2luZG93KTtcXG4gXFx0aWYgKCFwZ2N0eClcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4tXFx0dmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7XFxuK1xcdHZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDApO1xcbiBcXG4gXFx0bm90ZWJvb2sgPSBndGtfbm90ZWJvb2tfbmV3KCk7XFxuIFxcbi1cXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2ssIFRSVUUsIFRSVUUsIDApO1xcbitcXHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTtcXG4rXFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spO1xcbiBcXG4gXFx0aW5mb19iYXIgPSBwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIoKTtcXG4tXFx0aWYgKGluZm9fYmFyKVxcbi1cXHRcXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaW5mb19iYXIsIEZBTFNFLCBGQUxTRSwgMCk7XFxuK1xcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIGluZm9fYmFyKTtcXG4gXFxuIFxcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XFxuLVxcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBzdGF0YmFyLCBGQUxTRSwgRkFMU0UsIDApO1xcbitcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTtcXG4gXFxuLVxcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7XFxuK1xcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cod2luZG93KSwgdmJveCk7XFxuIFxcbiBcXHRldmxpc3RfX2Zvcl9lYWNoX2VudHJ5KGV2bGlzdCwgcG9zKSB7XFxuIFxcdFxcdHN0cnVjdCBoaXN0cyAqaGlzdHMgPSBldnNlbF9faGlzdHMocG9zKTtcXG5AQCAtNjQ5LDcgKzY1Niw3IEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpO1xcbitcXHRcXHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldygpO1xcbiBcXG4gXFx0XFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0R1RLX1BPTElDWV9BVVRPTUFUSUMsXFxuQEAgLTY2NSwxNSArNjcyLDEyIEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLFxcbiBcXHRcXHRndGtfbm90ZWJvb2tfYXBwZW5kX3BhZ2UoR1RLX05PVEVCT09LKG5vdGVib29rKSwgc2Nyb2xsZWRfd2luZG93LCB0YWJfbGFiZWwpO1xcbiBcXHR9XFxuIFxcbi1cXHRndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7XFxuLVxcbiBcXHRwZXJmX2d0a19fcmVzaXplX3dpbmRvdyh3aW5kb3cpO1xcbi1cXG4tXFx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xcbitcXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpbmRvdywgVFJVRSk7XFxuIFxcbiBcXHR1aV9oZWxwbGluZV9fcHVzaChoZWxwKTtcXG4gXFxuLVxcdGd0a19tYWluKCk7XFxuK1xcdHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKHdpbmRvdyk7XFxuIFxcbiBcXHRwZXJmX2d0a19fZGVhY3RpdmF0ZV9jb250ZXh0KFxcdTAwMjZwZ2N0eCk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jIGIvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuY1xcbmluZGV4IGVlYTZmY2RlNTE4YTguLjc3MGY5MjUxYjU0YjcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmNcXG5AQCAtMSw0OSArMSw2NSBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAjaW5jbHVkZSBcXHUwMDNjaW50dHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiZ3RrLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9wcm9ncmVzcy5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4gXFxuIHN0YXRpYyBHdGtXaWRnZXQgKmRpYWxvZztcXG4gc3RhdGljIEd0a1dpZGdldCAqcHJvZ3Jlc3M7XFxuIFxcbitzdGF0aWMgdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX2Rlc3Ryb3llZChHdGtXaWRnZXQgKndpZGdldCBfX21heWJlX3VudXNlZCxcXG4rXFx0XFx0XFx0XFx0XFx0Z3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZClcXG4re1xcbitcXHRkaWFsb2cgPSBOVUxMO1xcbitcXHRwcm9ncmVzcyA9IE5VTEw7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fdXBkYXRlKHN0cnVjdCB1aV9wcm9ncmVzcyAqcClcXG4ge1xcbiBcXHRkb3VibGUgZnJhY3Rpb24gPSBwLVxcdTAwM2V0b3RhbCA/IDEuMCAqIHAtXFx1MDAzZWN1cnIgLyBwLVxcdTAwM2V0b3RhbCA6IDAuMDtcXG4gXFx0Y2hhciBidWZbMTAyNF07XFxuIFxcbiBcXHRpZiAoZGlhbG9nID09IE5VTEwpIHtcXG4tXFx0XFx0R3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX3Zib3hfbmV3KFRSVUUsIDUpO1xcbitcXHRcXHRHdGtXaWRnZXQgKnZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDUpO1xcbiBcXHRcXHRHdGtXaWRnZXQgKmxhYmVsID0gZ3RrX2xhYmVsX25ldyhwLVxcdTAwM2V0aXRsZSk7XFxuIFxcbi1cXHRcXHRkaWFsb2cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTtcXG4rXFx0XFx0ZGlhbG9nID0gZ3RrX3dpbmRvd19uZXcoKTtcXG4gXFx0XFx0cHJvZ3Jlc3MgPSBndGtfcHJvZ3Jlc3NfYmFyX25ldygpO1xcbiBcXG4tXFx0XFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGxhYmVsLCBUUlVFLCBGQUxTRSwgMyk7XFxuLVxcdFxcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBwcm9ncmVzcywgVFJVRSwgVFJVRSwgMyk7XFxuK1xcdFxcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQobGFiZWwsIFRSVUUpO1xcbitcXHRcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBsYWJlbCk7XFxuK1xcdFxcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQocHJvZ3Jlc3MsIFRSVUUpO1xcbitcXHRcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBwcm9ncmVzcyk7XFxuK1xcbitcXHRcXHRndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKGRpYWxvZyksIHZib3gpO1xcbiBcXG4tXFx0XFx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihkaWFsb2cpLCB2Ym94KTtcXG4rXFx0XFx0Z19zaWduYWxfY29ubmVjdChkaWFsb2csIFxcXCJkZXN0cm95XFxcIixcXG4rXFx0XFx0XFx0XFx0IEdfQ0FMTEJBQ0soZ3RrX3VpX3Byb2dyZXNzX19kZXN0cm95ZWQpLCBOVUxMKTtcXG4gXFxuIFxcdFxcdGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1coZGlhbG9nKSwgXFxcInBlcmZcXFwiKTtcXG4tXFx0XFx0Z3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcXG4tXFx0XFx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyhkaWFsb2cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xcbitcXHRcXHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcXG4gXFxuLVxcdFxcdGd0a193aWRnZXRfc2hvd19hbGwoZGlhbG9nKTtcXG4rXFx0XFx0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpO1xcbiBcXHR9XFxuIFxcbiBcXHRndGtfcHJvZ3Jlc3NfYmFyX3NldF9mcmFjdGlvbihHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwgZnJhY3Rpb24pO1xcbiBcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiJVxcXCJQUkl1NjRcXFwiIC8gJVxcXCJQUkl1NjQsIHAtXFx1MDAzZWN1cnIsIHAtXFx1MDAzZXRvdGFsKTtcXG4gXFx0Z3RrX3Byb2dyZXNzX2Jhcl9zZXRfdGV4dChHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwgYnVmKTtcXG4gXFxuLVxcdC8qIHdlIGRpZG4ndCBjYWxsIGd0a19tYWluIHlldCwgc28gZG8gaXQgbWFudWFsbHkgKi9cXG4tXFx0d2hpbGUgKGd0a19ldmVudHNfcGVuZGluZygpKVxcbi1cXHRcXHRndGtfbWFpbl9pdGVyYXRpb24oKTtcXG4rXFx0Lyogd2UgZGlkbid0IHN0YXJ0IGEgbWFpbiBsb29wIHlldCwgc28gcHVtcCBldmVudHMgbWFudWFsbHkgKi9cXG4rXFx0d2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpXFxuK1xcdFxcdGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZmluaXNoKHZvaWQpXFxuIHtcXG4rXFx0aWYgKGRpYWxvZyA9PSBOVUxMKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHQvKiB0aGlzIHdpbGwgYWxzbyBkZXN0cm95IGFsbCBvZiBpdHMgY2hpbGRyZW4gKi9cXG4tXFx0Z3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7XFxuK1xcdGd0a193aW5kb3dfZGVzdHJveShHVEtfV0lORE9XKGRpYWxvZykpO1xcbiBcXG4gXFx0ZGlhbG9nID0gTlVMTDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuY1xcbmluZGV4IGY1ZWVlNGQ2Njg3MzguLjliNDRmMzcxOTc0NzcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcXG5AQCAtMTIsNyArMTIsNyBAQCBpbnQgcGVyZl9ndGtfX2luaXQodm9pZClcXG4gXFx0Z3RrX3VpX3Byb2dyZXNzX19pbml0KCk7XFxuIFxcdHBlcmZfZ3RrX19pbml0X2hwcCgpO1xcbiBcXG4tXFx0cmV0dXJuIGd0a19pbml0X2NoZWNrKE5VTEwsIE5VTEwpID8gMCA6IC0xO1xcbitcXHRyZXR1cm4gZ3RrX2luaXRfY2hlY2soKSA/IDAgOiAtMTtcXG4gfVxcbiBcXG4gdm9pZCBwZXJmX2d0a19fZXhpdChib29sIHdhaXRfZm9yX29rIF9fbWF5YmVfdW51c2VkKVxcbkBAIC0yMCw1ICsyMCw2IEBAIHZvaWQgcGVyZl9ndGtfX2V4aXQoYm9vbCB3YWl0X2Zvcl9vayBfX21heWJlX3VudXNlZClcXG4gXFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdHBlcmZfZXJyb3JfX3VucmVnaXN0ZXIoXFx1MDAyNnBlcmZfZ3RrX2VvcHMpO1xcbi1cXHRndGtfbWFpbl9xdWl0KCk7XFxuK1xcdHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZygpO1xcbitcXHRwZXJmX2d0a19fcXVpdF9tYWluX2xvb3AoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmMgYi90b29scy9wZXJmL3VpL2d0ay91dGlsLmNcXG5pbmRleCBjNDdmNWMzODc4MzhjLi41ODIzZmYwZDdjMmE3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xcbkBAIC0yLDggKzIsMTAgQEBcXG4gI2luY2x1ZGUgXFxcIi4uL3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImd0ay5oXFxcIlxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGFyZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvemFsbG9jLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgcGVyZl9ndGtfY29udGV4dCAqcGdjdHg7XFxuQEAgLTI4LDg2ICszMCwxMDMgQEAgaW50IHBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQgKipjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBwZXJmX2d0a19fZXJyb3IoKSBjYW4gYmUgY2FsbGVkIHJlLWVudHJhbnRseSwgc2luY2UgdGhlIGRpYWxvZyBpc24ndFxcbisgKiBtb2RhbCBhbmQgaXRzIG5lc3RlZCBsb29wIHN0aWxsIHB1bXBzIGV2ZW50cyBmb3IgdGhlIG1haW4gd2luZG93LlxcbisgKiBUcmFjayBldmVyeSBjdXJyZW50bHkgcnVubmluZyBsb29wIGluc3RlYWQgb2YgYSBzaW5nbGUgcG9pbnRlciwgc28gYVxcbisgKiBuZXN0ZWQgY2FsbCBjYW4ndCBjbG9iYmVyIGFuIG91dGVyIGNhbGwncyBsb29wIGFuZCBsZWFrIGl0LlxcbisgKi9cXG4rc3RhdGljIEdTTGlzdCAqcGVyZl9ndGtfX2Vycm9yX2xvb3BzO1xcbitcXG4rc3RhdGljIHZvaWQgcGVyZl9ndGtfX3F1aXRfbG9vcChncG9pbnRlciBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEgX19tYXliZV91bnVzZWQpXFxuK3tcXG4rXFx0Z19tYWluX2xvb3BfcXVpdChkYXRhKTtcXG4rfVxcbitcXG4rdm9pZCBwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2codm9pZClcXG4re1xcbitcXHRnX3NsaXN0X2ZvcmVhY2gocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBwZXJmX2d0a19fcXVpdF9sb29wLCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcGVyZl9ndGtfX2RpYWxvZ19yZXNwb25zZShHdGtEaWFsb2cgKmRpYWxvZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZ2ludCByZXNwb25zZV9pZCBfX21heWJlX3VudXNlZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZ3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZClcXG4re1xcbitcXHRndGtfd2luZG93X2Rlc3Ryb3koR1RLX1dJTkRPVyhkaWFsb2cpKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBwZXJmX2d0a19fZXJyb3IoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpXFxuIHtcXG4gXFx0Y2hhciAqbXNnO1xcbiBcXHRHdGtXaWRnZXQgKmRpYWxvZztcXG4rXFx0R01haW5Mb29wICpsb29wO1xcbitcXHR2YV9saXN0IGFyZ3NfY29weTtcXG4gXFxuK1xcdHZhX2NvcHkoYXJnc19jb3B5LCBhcmdzKTtcXG4gXFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpIHx8XFxuLVxcdCAgICB2YXNwcmludGYoXFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzKSBcXHUwMDNjIDApIHtcXG4rXFx0ICAgIHZhc3ByaW50ZihcXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3NfY29weSkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHZhX2VuZChhcmdzX2NvcHkpO1xcbiBcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOlxcXFxuXFxcIik7XFxuIFxcdFxcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcXG4gXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4rXFx0dmFfZW5kKGFyZ3NfY29weSk7XFxuIFxcbiBcXHRkaWFsb2cgPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3X3dpdGhfbWFya3VwKEdUS19XSU5ET1cocGdjdHgtXFx1MDAzZW1haW5fd2luZG93KSxcXG4gXFx0XFx0XFx0XFx0XFx0R1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULFxcbiBcXHRcXHRcXHRcXHRcXHRHVEtfTUVTU0FHRV9FUlJPUixcXG4gXFx0XFx0XFx0XFx0XFx0R1RLX0JVVFRPTlNfQ0xPU0UsXFxuIFxcdFxcdFxcdFxcdFxcdFxcXCJcXHUwMDNjYlxcdTAwM2VFcnJvclxcdTAwM2MvYlxcdTAwM2VcXFxcblxcXFxuJXNcXFwiLCBtc2cpO1xcbi1cXHRndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpO1xcbiBcXG4tXFx0Z3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7XFxuK1xcdC8qXFxuK1xcdCAqIFxcXCJyZXNwb25zZVxcXCIgb25seSBmaXJlcyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQ7IERFU1RST1lfV0lUSF9QQVJFTlRcXG4rXFx0ICogZGVzdHJveXMgdGhlIGRpYWxvZyBkaXJlY3RseSB3aXRob3V0IGl0LiBRdWl0IGZyb20gXFxcImRlc3Ryb3lcXFwiXFxuK1xcdCAqIGluc3RlYWQsIHdoaWNoIGZpcmVzIGVpdGhlciB3YXksIHNvIHRoZSBuZXN0ZWQgbG9vcCBiZWxvdyBjYW4ndFxcbitcXHQgKiBvdXRsaXZlIHRoZSBkaWFsb2cgYW5kIGhhbmcuXFxuK1xcdCAqL1xcbitcXHRsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIEZBTFNFKTtcXG4rXFx0cGVyZl9ndGtfX2Vycm9yX2xvb3BzID0gZ19zbGlzdF9wcmVwZW5kKHBlcmZfZ3RrX19lcnJvcl9sb29wcywgbG9vcCk7XFxuK1xcdGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCBcXFwicmVzcG9uc2VcXFwiLFxcbitcXHRcXHRcXHQgR19DQUxMQkFDSyhwZXJmX2d0a19fZGlhbG9nX3Jlc3BvbnNlKSwgTlVMTCk7XFxuK1xcdGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChkaWFsb2csIFxcXCJkZXN0cm95XFxcIixcXG4rXFx0XFx0XFx0XFx0IEdfQ0FMTEJBQ0soZ19tYWluX2xvb3BfcXVpdCksIGxvb3ApO1xcbitcXG4rXFx0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpO1xcbitcXHRnX21haW5fbG9vcF9ydW4obG9vcCk7XFxuK1xcdHBlcmZfZ3RrX19lcnJvcl9sb29wcyA9IGdfc2xpc3RfcmVtb3ZlKHBlcmZfZ3RrX19lcnJvcl9sb29wcywgbG9vcCk7XFxuK1xcdGdfbWFpbl9sb29wX3VucmVmKGxvb3ApO1xcbitcXG4gXFx0ZnJlZShtc2cpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcXG4gc3RhdGljIGludCBwZXJmX2d0a19fd2FybmluZ19pbmZvX2Jhcihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncylcXG4ge1xcbiBcXHRjaGFyICptc2c7XFxuK1xcdHZhX2xpc3QgYXJnc19jb3B5O1xcbiBcXG4rXFx0dmFfY29weShhcmdzX2NvcHksIGFyZ3MpO1xcbiBcXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHxcXG4tXFx0ICAgIHZhc3ByaW50ZihcXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3MpIFxcdTAwM2MgMCkge1xcbitcXHQgICAgdmFzcHJpbnRmKFxcdTAwMjZtc2csIGZvcm1hdCwgYXJnc19jb3B5KSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0dmFfZW5kKGFyZ3NfY29weSk7XFxuIFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV2FybmluZzpcXFxcblxcXCIpO1xcbiBcXHRcXHR2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7XFxuIFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXHR9XFxuK1xcdHZhX2VuZChhcmdzX2NvcHkpO1xcbiBcXG4gXFx0Z3RrX2xhYmVsX3NldF90ZXh0KEdUS19MQUJFTChwZ2N0eC1cXHUwMDNlbWVzc2FnZV9sYWJlbCksIG1zZyk7XFxuIFxcdGd0a19pbmZvX2Jhcl9zZXRfbWVzc2FnZV90eXBlKEdUS19JTkZPX0JBUihwZ2N0eC1cXHUwMDNlaW5mb19iYXIpLFxcbiBcXHRcXHRcXHRcXHQgICAgICBHVEtfTUVTU0FHRV9XQVJOSU5HKTtcXG4tXFx0Z3RrX3dpZGdldF9zaG93KHBnY3R4LVxcdTAwM2VpbmZvX2Jhcik7XFxuLVxcbi1cXHRmcmVlKG1zZyk7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLSNlbHNlXFxuLXN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxcbi17XFxuLVxcdGNoYXIgKm1zZywgKnA7XFxuLVxcbi1cXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHxcXG4tXFx0ICAgIHZhc3ByaW50ZihcXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3MpIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIldhcm5pbmc6XFxcXG5cXFwiKTtcXG4tXFx0XFx0dmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpO1xcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFx0fVxcbi1cXG4tXFx0Z3RrX3N0YXR1c2Jhcl9wb3AoR1RLX1NUQVRVU0JBUihwZ2N0eC1cXHUwMDNlc3RhdGJhciksXFxuLVxcdFxcdFxcdCAgcGdjdHgtXFx1MDAzZXN0YXRiYXJfY3R4X2lkKTtcXG4tXFxuLVxcdC8qIE9ubHkgZmlyc3QgbGluZSBjYW4gYmUgZGlzcGxheWVkICovXFxuLVxcdHAgPSBzdHJjaHIobXNnLCAnXFxcXG4nKTtcXG4tXFx0aWYgKHApXFxuLVxcdFxcdCpwID0gJ1xcXFwwJztcXG4tXFxuLVxcdGd0a19zdGF0dXNiYXJfcHVzaChHVEtfU1RBVFVTQkFSKHBnY3R4LVxcdTAwM2VzdGF0YmFyKSxcXG4tXFx0XFx0XFx0ICAgcGdjdHgtXFx1MDAzZXN0YXRiYXJfY3R4X2lkLCBtc2cpO1xcbitcXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKHBnY3R4LVxcdTAwM2VpbmZvX2JhciwgVFJVRSk7XFxuIFxcbiBcXHRmcmVlKG1zZyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuLSNlbmRpZlxcbiBcXG4gc3RydWN0IHBlcmZfZXJyb3Jfb3BzIHBlcmZfZ3RrX2VvcHMgPSB7XFxuIFxcdC5lcnJvclxcdFxcdD0gcGVyZl9ndGtfX2Vycm9yLFxcbi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVFxcbiBcXHQud2FybmluZ1xcdD0gcGVyZl9ndGtfX3dhcm5pbmdfaW5mb19iYXIsXFxuLSNlbHNlXFxuLVxcdC53YXJuaW5nXFx0PSBwZXJmX2d0a19fd2FybmluZ19zdGF0dXNiYXIsXFxuLSNlbmRpZlxcbiB9O1xcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL3NldHVwLmMgYi90b29scy9wZXJmL3VpL3NldHVwLmNcXG5pbmRleCBmZjgwMDA0N2U2OTdmLi5kODg3MzQ2YzdhNjMyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvc2V0dXAuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvc2V0dXAuY1xcbkBAIC0xNCw3ICsxNCw3IEBAIGludCB1c2VfYnJvd3NlciA9IC0xO1xcbiBcXG4gI2RlZmluZSBQRVJGX0dUS19EU08gXFxcImxpYnBlcmYtZ3RrLnNvXFxcIlxcbiBcXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxcbiBcXG4gc3RhdGljIGludCBzZXR1cF9ndGtfYnJvd3Nlcih2b2lkKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmNcXG5pbmRleCBkZjcwZTk1YTg0NzA0Li4xMjNiNmQ1ZmNlYTc4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jXFxuKysrIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmNcXG5AQCAtMTQ1LDYgKzE0NSwxNyBAQCBzdGF0aWMgaW50IGFubm90YXRlZF9zb3VyY2VfX2FsbG9jX2hpc3RvZ3JhbXMoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYyxcXG4gXFx0cmV0dXJuIHNyYy1cXHUwMDNlaGlzdG9ncmFtcyA/IDAgOiAtMTtcXG4gfVxcbiBcXG4rc3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcXG4rYW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KVxcbit7XFxuK1xcdHN0cnVjdCBzeW1faGlzdF9lbnRyeSAqZW50cnk7XFxuK1xcdGxvbmcga2V5ID0gb2Zmc2V0IFxcdTAwM2NcXHUwMDNjIDE2IHwgZXZzZWwtXFx1MDAzZWNvcmUuaWR4O1xcbitcXG4rXFx0aWYgKCFoYXNobWFwX19maW5kKHNyYy1cXHUwMDNlc2FtcGxlcywga2V5LCBcXHUwMDI2ZW50cnkpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0cmV0dXJuIGVudHJ5O1xcbit9XFxuK1xcbiB2b2lkIHN5bWJvbF9fYW5ub3RhdGVfemVyb19oaXN0b2dyYW1zKHN0cnVjdCBzeW1ib2wgKnN5bSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYW5ub3RhdGlvbiAqbm90ZXMgPSBzeW1ib2xfX2Fubm90YXRpb24oc3ltKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmggYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaFxcbmluZGV4IGZhMDhkMDliODBmNzYuLjQwMDM4YTM3NzlkNDYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmhcXG4rKysgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaFxcbkBAIC00MDYsMTYgKzQwNiw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bV9oaXN0ICphbm5vdGF0aW9uX19oaXN0b2dyYW0oc3RydWN0IGFubm90YXRpb24gKm5vdGVzLFxcbiBcXHRyZXR1cm4gYW5ub3RhdGVkX3NvdXJjZV9faGlzdG9ncmFtKG5vdGVzLVxcdTAwM2VzcmMsIGV2c2VsKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKlxcbi1hbm5vdGF0ZWRfc291cmNlX19oaXN0X2VudHJ5KHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsIGNvbnN0IHN0cnVjdCBldnNlbCAqZXZzZWwsIHU2NCBvZmZzZXQpXFxuLXtcXG4tXFx0c3RydWN0IHN5bV9oaXN0X2VudHJ5ICplbnRyeTtcXG4tXFx0bG9uZyBrZXkgPSBvZmZzZXQgXFx1MDAzY1xcdTAwM2MgMTYgfCBldnNlbC1cXHUwMDNlY29yZS5pZHg7XFxuLVxcbi1cXHRpZiAoIWhhc2htYXBfX2ZpbmQoc3JjLVxcdTAwM2VzYW1wbGVzLCBrZXksIFxcdTAwMjZlbnRyeSkpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHRyZXR1cm4gZW50cnk7XFxuLX1cXG4rc3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcXG4rYW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFubm90YXRpb24gKnN5bWJvbF9fYW5ub3RhdGlvbihzdHJ1Y3Qgc3ltYm9sICpzeW0pXFxuIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MjY6MjUuMTczNzU1MzE3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NjE5NTE5NzY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29saW5nIGFuZCBidWlsZCBzY3JpcHRzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHBvcnRpbmcgdGhlIHBlcmYgR1RLIFVJIGZyb20gR1RLMiB0byBHVEs0IGFuZCBtaW5vciBoZWxwZXIgcmVsb2NhdGlvbiBpbiB0b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYykuIEl0IGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwtc3BhY2UgY29kZSwgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ZmFmNDE1MzY0MDBmYzcyMDkzZGY3OGQ2ZTc5N2EzN2NiYWIwNmY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwMjoyNjoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUgYi90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlXG5pbmRleCA5OWViMGVhMDk1Mzc1Li40ZWM5NWMzNWE1YzE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuKysrIGIvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuQEAgLTExMyw4ICsxMTMsNyBAQCBGRUFUVVJFX1RFU1RTX0VYVFJBIDo9ICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBjb21waWxlLXgzMiAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBjcGx1cy1kZW1hbmdsZSAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBjeGEtZGVtYW5nbGUgICAgICAgICAgICAgICAgICAgXFxcbi0gICAgICAgICBndGsyICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi0gICAgICAgICBndGsyLWluZm9iYXIgICAgICAgICAgICAgICAgICAgXFxcbisgICAgICAgICBndGs0ICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBoZWxsbyAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBiYWJlbHRyYWNlMi1jdGYtd3JpdGVyICAgICAgICAgXFxcbiAgICAgICAgICBsaWJjYXBzdG9uZSAgICAgICAgICAgICAgICAgICAgXFxcbkBAIC0xNDMsNiArMTQyLDcgQEAgZW5kaWZcbiBGRUFUVVJFX0RJU1BMQVkgPz0gICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbGliZHcgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGdsaWJjICAgICAgICAgICAgICAgICAgXFxcbisgICAgICAgICBndGs0ICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbGliZWxmICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGxpYm51bWEgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBudW1hX251bV9wb3NzaWJsZV9jcHVzIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZSBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGVcbmluZGV4IDdkMTY1MDE4MTE2YTUuLjAxYzQ4ZTZlZjAyMWQgMTAwNjQ0XG4tLS0gYS90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXG4rKysgYi90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXG5AQCAtMTEsOCArMTEsNyBAQCBGSUxFUz0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtZXZlbnRmZC5iaW4gICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1mb3J0aWZ5LXNvdXJjZS5iaW4gICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICB0ZXN0LWdsaWJjLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLSAgICAgICAgIHRlc3QtZ3RrMi5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgdGVzdC1ndGsyLWluZm9iYXIuYmluICAgICAgICAgICAgICAgICAgXFxcbisgICAgICAgICB0ZXN0LWd0azQuYmluICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtaGVsbG8uYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1saWJiZmQuYmluICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiBcdCB0ZXN0LWxpYmJmZC10aHJlYWRzYWZlLmJpbiAgICAgIFx0XFxcbkBAIC0yNDAsMTEgKzIzOSw4IEBAICQoT1VUUFVUKXRlc3QtbGliY3B1cG93ZXIuYmluOlxuICQoT1VUUFVUKXRlc3QtbGlidHJhY2Vmcy5iaW46XG4gXHQgJChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGxpYnRyYWNlZnMgMlx1MDAzZS9kZXYvbnVsbCkgLWx0cmFjZWZzXG4gXG4tJChPVVRQVVQpdGVzdC1ndGsyLmJpbjpcbi1cdCQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMlx1MDAzZS9kZXYvbnVsbCkgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9uc1xuLVxuLSQoT1VUUFVUKXRlc3QtZ3RrMi1pbmZvYmFyLmJpbjpcbi1cdCQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMlx1MDAzZS9kZXYvbnVsbClcbiskKE9VVFBVVCl0ZXN0LWd0azQuYmluOlxuK1x0JChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGs0IDJcdTAwM2UvZGV2L251bGwpXG4gXG4gZ3JlcC1saWJzICA9ICQoZmlsdGVyIC1sJSwkKDEpKVxuIHN0cmlwLWxpYnMgPSAkKGZpbHRlci1vdXQgLWwlLCQoMSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGIxYjcxNmRkNTczMzAuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLWluZm9iYXIuY1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsMTIgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdHJpY3QtcHJvdG90eXBlc1wiXG4tI2luY2x1ZGUgXHUwMDNjZ3RrL2d0ay5oXHUwMDNlXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBlcnJvciBcIi1Xc3RyaWN0LXByb3RvdHlwZXNcIlxuLVxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4te1xuLVx0Z3RrX2luaXQoXHUwMDI2YXJnYywgXHUwMDI2YXJndik7XG4tXHRndGtfaW5mb19iYXJfbmV3KCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuYyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcbnNpbWlsYXJpdHkgaW5kZXggNzYlXG5yZW5hbWUgZnJvbSB0b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi5jXG5yZW5hbWUgdG8gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azQuY1xuaW5kZXggMmFhZjRiZmMyMDU1Ni4uYjk1MjBlNzQwOGI5OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLmNcbisrKyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcbkBAIC0zLDkgKzMsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2d0ay9ndGsuaFx1MDAzZVxuICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgZXJyb3IgXCItV3N0cmljdC1wcm90b3R5cGVzXCJcbiBcbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK2ludCBtYWluKHZvaWQpXG4ge1xuLVx0Z3RrX2luaXQoXHUwMDI2YXJnYywgXHUwMDI2YXJndik7XG4rXHRndGtfaW5pdCgpO1xuIFxuICAgICAgICAgcmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0XG5pbmRleCAyMmY4N2VhYTMyNzk2Li43YWY5YjNmODFjMDY1IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuQEAgLTM1MSw3ICszNTEsNyBAQCBPUFRJT05TXG4gXHRyZXF1aXJlcyBhIHR0eSwgaWYgb25lIGlzIG5vdCBwcmVzZW50LCBhcyB3aGVuIHBpcGluZyB0byBvdGhlclxuIFx0Y29tbWFuZHMsIHRoZSBzdGRpbyBpbnRlcmZhY2UgaXMgdXNlZC5cbiBcbi0tLWd0azo6IFVzZSB0aGUgR1RLMiBpbnRlcmZhY2UuXG4rLS1ndGs6OiBVc2UgdGhlIEdUSzQgaW50ZXJmYWNlLlxuIFxuIC1rOjpcbiAtLXZtbGludXg9XHUwMDNjZmlsZVx1MDAzZTo6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGVcbmluZGV4IDViNzEzODM3ZWVkZTcuLjU2MDE0MTA2NDc5YTMgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL01ha2VmaWxlXG4rKysgYi90b29scy9wZXJmL01ha2VmaWxlXG5AQCAtMTA2LDcgKzEwNiw3IEBAIGNsZWFuOlxuICMgbWFrZSAtQyB0b29scy9wZXJmIC1mIHRlc3RzL21ha2VcbiAjXG4gYnVpbGQtdGVzdDpcbi1cdEAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azIgb3V0XG4rXHRAJChNQUtFKSBTSFVGPTEgLWYgdGVzdHMvbWFrZSBSRVVTRV9GRUFUVVJFU19EVU1QPTEgTUs9TWFrZWZpbGUgU0VUX1BBUkFMTEVMPTEgLS1uby1wcmludC1kaXJlY3RvcnkgdGFycGtnIG1ha2Vfc3RhdGljIG1ha2Vfd2l0aF9ndGs0IG91dFxuIFxuIGJ1aWxkLXRlc3QtdGFyYmFsbDpcbiBcdEAkKE1BS0UpIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IG91dFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWdcbmluZGV4IDRkNTk5M2RhOWY5NDUuLjRlZTczOTNhMzlmOTEgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZ1xuKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWdcbkBAIC03NzQsMjEgKzc3NCwyMiBAQCBpZm5kZWYgTk9fU0xBTkdcbiAgIGVuZGlmXG4gZW5kaWZcbiBcbi1pZmRlZiBHVEsyXG4tICBGTEFHU19HVEsyPSQoQ0ZMQUdTKSAkKExERkxBR1MpICQoRVhUTElCUykgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsrLTIuMCAyXHUwMDNlL2Rldi9udWxsKVxuLSAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrMilcbi0gIGlmbmVxICgkKGZlYXR1cmUtZ3RrMiksIDEpXG4tICAgICQod2FybmluZyBHVEsyIG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLMiBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGsyLWRldmVsIG9yIGxpYmd0azIuMC1kZXYpXG4tICAgIE5PX0dUSzIgOj0gMVxuK2lmZGVmIEdUSzRcbisgIEZMQUdTX0dUSzQ9JChDRkxBR1MpICQoTERGTEFHUykgJChFWFRMSUJTKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbisgICQoY2FsbCBmZWF0dXJlX2NoZWNrLGd0azQpXG4rICBpZm5lcSAoJChmZWF0dXJlLWd0azQpLCAxKVxuKyAgICAkKHdhcm5pbmcgR1RLNCBub3QgZm91bmQsIGRpc2FibGVzIEdUSzQgc3VwcG9ydC4gUGxlYXNlIGluc3RhbGwgZ3RrNC1kZXZlbCBvciBsaWJndGstNC1kZXYpXG4rICAgIE5PX0dUSzQgOj0gMVxuICAgZWxzZVxuLSAgICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGsyLWluZm9iYXIpXG4tICAgIGlmZXEgKCQoZmVhdHVyZS1ndGsyLWluZm9iYXIpLCAxKVxuLSAgICAgIEdUS19DRkxBR1MgOj0gLURIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4tICAgIGVuZGlmXG4tICAgIENGTEFHUyArPSAtREhBVkVfR1RLMl9TVVBQT1JUXG4tICAgIEdUS19DRkxBR1MgKz0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGd0aystMi4wIDJcdTAwM2UvZGV2L251bGwpXG4tICAgIEdUS19MSUJTIDo9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgZ3RrKy0yLjAgMlx1MDAzZS9kZXYvbnVsbClcbisgICAgQ0ZMQUdTICs9IC1ESEFWRV9HVEs0X1NVUFBPUlRcbisgICAgR1RLX0NGTEFHUyArPSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgZ3RrNCAyXHUwMDNlL2Rldi9udWxsKVxuKyAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbiAgICAgRVhUTElCUyArPSAtbGRsXG4rICAgICMgbGlicGVyZi1ndGsuc28gaXMgZGxvcGVuKCllZCBhdCBydW50aW1lIGFuZCBjYWxscyBiYWNrIGludG9cbisgICAgIyBzeW1ib2xzIGRlZmluZWQgaW4gdGhlIHBlcmYgYmluYXJ5IGl0c2VsZiAoY2FsbGNoYWluX3BhcmFtLFxuKyAgICAjIHN5bWJvbF9jb25mLCBldnNlbF9fbmFtZSwgLi4uKTogcGVyZiBuZWVkcyB0byBleHBvcnQgdGhvc2VcbisgICAgIyBkeW5hbWljYWxseSBmb3IgdGhlIHBsdWdpbiB0byByZXNvbHZlIHRoZW0uXG4rICAgIExERkxBR1MgKz0gLXJkeW5hbWljXG4gICBlbmRpZlxuIGVuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmXG5pbmRleCAyOWNmZDQ0YzQyN2YzLi4yNDM4YjQwZWFhZWMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmXG4rKysgYi90b29scy9wZXJmL01ha2VmaWxlLnBlcmZcbkBAIC00OSw3ICs0OSw3IEBAIGluY2x1ZGUgLi4vc2NyaXB0cy91dGlsaXRpZXMubWFrXG4gI1xuICMgRGVmaW5lIE5PX1NMQU5HIGlmIHlvdSBkbyBub3Qgd2FudCBUVUkgc3VwcG9ydC5cbiAjXG4tIyBEZWZpbmUgR1RLMiBpZiB5b3Ugd2FudCBHVEsrIEdVSSBzdXBwb3J0LlxuKyMgRGVmaW5lIEdUSzQgaWYgeW91IHdhbnQgR1RLKyBHVUkgc3VwcG9ydC5cbiAjXG4gIyBEZWZpbmUgTk9fREVNQU5HTEUgaWYgeW91IGRvIG5vdCB3YW50IEMrKyBzeW1ib2wgZGVtYW5nbGluZy5cbiAjXG5AQCAtNDczLDcgKzQ3Myw3IEBAIGlmbmVxICgkKE9VVFBVVCksKVxuICAgQ0ZMQUdTICs9IC1JJChPVVRQVVQpXG4gZW5kaWZcbiBcbi1pZmRlZiBHVEsyXG4raWZkZWYgR1RLNFxuICAgQUxMX1BST0dSQU1TICs9ICQoT1VUUFVUKWxpYnBlcmYtZ3RrLnNvXG4gICBHVEtfSU4gOj0gJChPVVRQVVQpZ3RrLWluLm9cbiBlbmRpZlxuQEAgLTgxMSw3ICs4MTEsNyBAQCBjaGVjazogcHJlcGFyZVxuIFxuICMjIyBJbnN0YWxsYXRpb24gcnVsZXNcbiBcbi1pZmRlZiBHVEsyXG4raWZkZWYgR1RLNFxuIGluc3RhbGwtZ3RrOiAkKE9VVFBVVClsaWJwZXJmLWd0ay5zb1xuIFx0JChjYWxsIFFVSUVUX0lOU1RBTEwsICdHVEsgVUknKSBcXFxuIFx0XHQkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQobGliZGlyX1NRKSc7IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuY1xuaW5kZXggNjljYjcyYjIwODJhNi4uMTUxNjNlMDgxYThjZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXG4rKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuY1xuQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IHBlcmZfYW5ub3RhdGUge1xuIFx0Ym9vbFx0ICAgdXNlX3R1aTtcbiAjZW5kaWZcbiBcdGJvb2xcdCAgIHVzZV9zdGRpbywgdXNlX3N0ZGlvMjtcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGJvb2xcdCAgIHVzZV9ndGs7XG4gI2VuZGlmXG4gXHRib29sXHQgICBza2lwX21pc3Npbmc7XG5AQCAtNzEyLDcgKzcxMiw3IEBAIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KVxuIFx0T1BUX0JPT0xFQU4oJ3EnLCBcInF1aWV0XCIsIFx1MDAyNnF1aWV0LCBcImRvIG5vdyBzaG93IGFueSB3YXJuaW5ncyBvciBtZXNzYWdlc1wiKSxcbiBcdE9QVF9CT09MRUFOKCdEJywgXCJkdW1wLXJhdy10cmFjZVwiLCBcdTAwMjZkdW1wX3RyYWNlLFxuIFx0XHQgICAgXCJkdW1wIHJhdyB0cmFjZSBpbiBBU0NJSVwiKSxcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdE9QVF9CT09MRUFOKDAsIFwiZ3RrXCIsIFx1MDAyNmFubm90YXRlLnVzZV9ndGssIFwiVXNlIHRoZSBHVEsgaW50ZXJmYWNlXCIpLFxuICNlbmRpZlxuICNpZmRlZiBIQVZFX1NMQU5HX1NVUFBPUlRcbkBAIC04MjgsNyArODI4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRpZiAoYW5ub3RhdGVfY2hlY2tfYXJncygpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGlmIChzeW1ib2xfY29uZi5zaG93X25yX3NhbXBsZXMgXHUwMDI2XHUwMDI2IGFubm90YXRlLnVzZV9ndGspIHtcbiBcdFx0cHJfZXJyKFwiLS1zaG93LW5yLXNhbXBsZXMgaXMgbm90IGF2YWlsYWJsZSBpbiAtLWd0ayBtb2RlIGF0IHRoaXMgdGltZVxcblwiKTtcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC04OTgsNyArODk4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRlbHNlIGlmIChhbm5vdGF0ZS51c2VfdHVpKVxuIFx0XHR1c2VfYnJvd3NlciA9IDE7XG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4rI2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXG4gXHRlbHNlIGlmIChhbm5vdGF0ZS51c2VfZ3RrKVxuIFx0XHR1c2VfYnJvd3NlciA9IDI7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jXG5pbmRleCA2MGQxZjE2NjYyOWUwLi5kMTQzODRjNTg0NjYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jXG4rKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmNcbkBAIC04Miw3ICs4Miw3IEBAIHN0cnVjdCByZXBvcnQge1xuICNpZmRlZiBIQVZFX1NMQU5HX1NVUFBPUlRcbiBcdGJvb2xcdFx0XHR1c2VfdHVpO1xuICNlbmRpZlxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFx0Ym9vbFx0XHRcdHVzZV9ndGs7XG4gI2VuZGlmXG4gXHRib29sXHRcdFx0dXNlX3N0ZGlvO1xuQEAgLTEzNTksOCArMTM1OSw4IEBAIGludCBjbWRfcmVwb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilcbiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUXG4gXHRPUFRfQk9PTEVBTigwLCBcInR1aVwiLCBcdTAwMjZyZXBvcnQudXNlX3R1aSwgXCJVc2UgdGhlIFRVSSBpbnRlcmZhY2VcIiksXG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4tXHRPUFRfQk9PTEVBTigwLCBcImd0a1wiLCBcdTAwMjZyZXBvcnQudXNlX2d0aywgXCJVc2UgdGhlIEdUSzIgaW50ZXJmYWNlXCIpLFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuK1x0T1BUX0JPT0xFQU4oMCwgXCJndGtcIiwgXHUwMDI2cmVwb3J0LnVzZV9ndGssIFwiVXNlIHRoZSBHVEs0IGludGVyZmFjZVwiKSxcbiAjZW5kaWZcbiBcdE9QVF9CT09MRUFOKDAsIFwic3RkaW9cIiwgXHUwMDI2cmVwb3J0LnVzZV9zdGRpbyxcbiBcdFx0ICAgIFwiVXNlIHRoZSBzdGRpbyBpbnRlcmZhY2VcIiksXG5AQCAtMTcxMCw3ICsxNzEwLDcgQEAgaW50IGNtZF9yZXBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KVxuIFx0ZWxzZSBpZiAocmVwb3J0LnVzZV90dWkpXG4gXHRcdHVzZV9icm93c2VyID0gMTtcbiAjZW5kaWZcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGVsc2UgaWYgKHJlcG9ydC51c2VfZ3RrKVxuIFx0XHR1c2VfYnJvd3NlciA9IDI7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2hcbmluZGV4IGQwMDNlN2ZhYjJiZTguLmE2MDFhNTI2MGMxN2UgMTAwNzU1XG4tLS0gYS90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG4rKysgYi90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG5AQCAtMTk5LDggKzE5OSw4IEBAIGZlZG9yYV9wa2dfZm9yKCkge1xuIFx0IyBvcHQtaW4gZmVhdHVyZXMsIHdoaWNoIGEgZGVmYXVsdCBidWlsZCBkb2VzIG5vdCBlbmFibGU6IHRoZSBsaWJiZmRcbiBcdCMgZGlzYXNzZW1ibGVyIGZhbWlseSAobGliYmZkLCBsaWJiZmQtdGhyZWFkc2FmZSwgbGliYmZkLWxpYmVydHksXG4gXHQjIGRpc2Fzc2VtYmxlci0qLCBjcGx1cy1kZW1hbmdsZSksIG9ubHkgbGlua2VkIG9uIEJVSUxEX05PTkRJU1RST1xuLVx0IyBidWlsZHMgYW5kIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgY2Fwc3RvbmUsIEdUSzIsIExJQlBFUkwgYW5kXG4tXHQjIExJQlVOV0lORCBzdXBwb3J0IChpZmRlZiBHVEsyIC8gaWZkZWYgTElCUEVSTCAvIExJQlVOV0lORD0xKSxcbitcdCMgYnVpbGRzIGFuZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNhcHN0b25lLCBHVEs0LCBMSUJQRVJMIGFuZFxuK1x0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLNCAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXG4gXHQjIGFuZCBDb3JlU2lnaHQgKGlmZGVmIENPUkVTSUdIVCksIGFyZSBkZWxpYmVyYXRlbHkgbm90IG1hcHBlZC5cbiBcdCMgbGliYWlvIGlzIG5vdCBtYXBwZWQgZWl0aGVyOiBpdHNcbiBcdCMgdGVzdCB1c2VzIHRoZSBQT1NJWCBBSU8gQVBJIChhaW8uaCwgYWlvXyosIC1scnQpLCBwcm92aWRlZCBieVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZSBiL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuaW5kZXggZDJjMmY1MjZlMWRiMC4uMjAyYWI1NTAxOTE2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9tYWtlXG5AQCAtOTUsNyArOTUsNyBAQCBtYWtlX25vX2JhYmVsdHJhY2UyIDo9IE5PX0JBQkVMVFJBQ0UyPTFcbiBtYWtlX3dpdGhfY29yZXNpZ2h0IDo9IENPUkVTSUdIVD0xXG4gbWFrZV9ub19zZHRcdCAgICA6PSBOT19TRFQ9MVxuIG1ha2Vfbm9fbGlicGZtNCAgICAgOj0gTk9fTElCUEZNND0xXG4tbWFrZV93aXRoX2d0azIgICAgICA6PSBHVEsyPTFcbittYWtlX3dpdGhfZ3RrNCAgICAgIDo9IEdUSzQ9MVxuIG1ha2VfcmVmY250X2NoZWNrICAgOj0gRVhUUkFfQ0ZMQUdTPVwiLURSRUZDTlRfQ0hFQ0tJTkc9MVwiXG4gbWFrZV90YWdzICAgICAgICAgICA6PSB0YWdzXG4gbWFrZV9jc2NvcGUgICAgICAgICA6PSBjc2NvcGVcbkBAIC0zMTgsNyArMzE4LDcgQEAgJChydW4pOlxuIFx0JChjYWxsIHRlc3QsJEApIFx1MDAyNlx1MDAyNiBcXFxuIFx0cm0gLXJmICRAICQkVE1QX0RFU1QgfHwgKGNhdCAkQCA7IGZhbHNlKVxuIFxuLW1ha2Vfd2l0aF9ndGsyOlxuK21ha2Vfd2l0aF9ndGs0OlxuIFx0JChjYWxsIGNsZWFuKVxuIFx0QFRNUF9ERVNUPSQkKG1rdGVtcCAtZCk7IFxcXG4gXHRjbWQ9XCJjZCAkKFBFUkYpIFx1MDAyNlx1MDAyNiAkKE1BS0VfRikgJCgkQCkgJChQQVJBTExFTF9PUFQpICQoT19PUFQpIERFU1RESVI9JCRUTVBfREVTVFwiOyBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jXG5pbmRleCA4OTIwZTI5ODQyMGE4Li4wOTRkZmEwNDViNzc0IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuY1xuKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuY1xuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcInVpL2hlbHBsaW5lLmhcIlxuICNpbmNsdWRlIFx1MDAzY2ludHR5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gXG4gZW51bSB7XG4gXHRBTk5fQ09MX19QRVJDRU5ULFxuQEAgLTE2MSw3ICsxNjIsNyBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX19hbm5vdGF0ZV9zeW1ib2woR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBtYXBfc3ltYm9sICptcyxcbiBcdFx0XHRndGtfbGlzdF9zdG9yZV9zZXQoc3RvcmUsIFx1MDAyNml0ZXIsIEFOTl9DT0xfX0xJTkUsIHMsIC0xKTtcbiBcdH1cbiBcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmlldyk7XG4rXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgXHUwMDI2bm90ZXMtXHUwMDNlc3JjLVx1MDAzZXNvdXJjZSwgYWwubm9kZSkge1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnBvcy1cdTAwM2VhbC5ub2RlKTtcbkBAIC0yMDUsNDAgKzIwNiwzNCBAQCBzdGF0aWMgaW50IHN5bWJvbF9fZ3RrX2Fubm90YXRlKHN0cnVjdCBtYXBfc3ltYm9sICptcywgc3RydWN0IGV2c2VsICpldnNlbCxcbiBcdFx0R3RrV2lkZ2V0ICppbmZvYmFyO1xuIFx0XHRHdGtXaWRnZXQgKnN0YXRiYXI7XG4gXG4tXHRcdHNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdFx0c2lnbmFsKFNJR0ZQRSwgIHBlcmZfZ3RrX19zaWduYWwpO1xuLVx0XHRzaWduYWwoU0lHSU5ULCAgcGVyZl9ndGtfX3NpZ25hbCk7XG4tXHRcdHNpZ25hbChTSUdRVUlULCBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdFx0c2lnbmFsKFNJR1RFUk0sIHBlcmZfZ3RrX19zaWduYWwpO1xuK1x0XHRzaWduYWwoU0lHU0VHViwgcGVyZl9ndGtfX2ZhdGFsX3NpZ25hbCk7XG4rXHRcdHNpZ25hbChTSUdGUEUsICBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKTtcbitcdFx0cGVyZl9ndGtfX2luc3RhbGxfcXVpdF9zaWduYWxzKCk7XG4gXG4tXHRcdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpO1xuK1x0XHR3aW5kb3cgPSBndGtfd2luZG93X25ldygpO1xuIFx0XHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIFwicGVyZiBhbm5vdGF0ZVwiKTtcbiBcbi1cdFx0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFwiZGVsZXRlX2V2ZW50XCIsIGd0a19tYWluX3F1aXQsIE5VTEwpO1xuLVxuIFx0XHRwZ2N0eCA9IHBlcmZfZ3RrX19hY3RpdmF0ZV9jb250ZXh0KHdpbmRvdyk7XG4gXHRcdGlmICghcGdjdHgpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuLVx0XHR2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAwKTtcbitcdFx0dmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgMCk7XG4gXHRcdG5vdGVib29rID0gZ3RrX25vdGVib29rX25ldygpO1xuIFx0XHRwZ2N0eC1cdTAwM2Vub3RlYm9vayA9IG5vdGVib29rO1xuIFxuLVx0XHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2ssIFRSVUUsIFRSVUUsIDApO1xuK1x0XHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTtcbitcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spO1xuIFxuIFx0XHRpbmZvYmFyID0gcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKCk7XG4tXHRcdGlmIChpbmZvYmFyKSB7XG4tXHRcdFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGluZm9iYXIsXG4tXHRcdFx0XHRcdCAgIEZBTFNFLCBGQUxTRSwgMCk7XG4tXHRcdH1cbitcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgaW5mb2Jhcik7XG4gXG4gXHRcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBzdGF0YmFyLCBGQUxTRSwgRkFMU0UsIDApO1xuK1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTtcbiBcbi1cdFx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTtcbitcdFx0Z3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyh3aW5kb3cpLCB2Ym94KTtcbiBcdH1cbiBcbi1cdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpO1xuK1x0c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTtcbiBcdHRhYl9sYWJlbCA9IGd0a19sYWJlbF9uZXcoc3ltLVx1MDAzZW5hbWUpO1xuIFxuIFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSxcbkBAIC0yNjcsMTIgKzI2MiwxMSBAQCB2b2lkIHBlcmZfZ3RrX19zaG93X2Fubm90YXRpb25zKHZvaWQpXG4gXHRcdHJldHVybjtcbiBcbiBcdHdpbmRvdyA9IHBnY3R4LVx1MDAzZW1haW5fd2luZG93O1xuLVx0Z3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3cod2luZG93KTtcbi1cdGd0a193aW5kb3dfc2V0X3Bvc2l0aW9uKEdUS19XSU5ET1cod2luZG93KSwgR1RLX1dJTl9QT1NfQ0VOVEVSKTtcbitcdGd0a193aWRnZXRfc2V0X3Zpc2libGUod2luZG93LCBUUlVFKTtcbiBcbi1cdGd0a19tYWluKCk7XG4rXHRwZXJmX2d0a19fcnVuX21haW5fbG9vcCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dChcdTAwMjZwZ2N0eCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xuaW5kZXggZDJkYWRmMzg3M2ZiZC4uOThmMWQ2YmZjYjI0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xuKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jXG5AQCAtNSwzMiArNSw5MiBAQFxuICNpbmNsdWRlIFwiLi4vaGlzdC5oXCJcbiAjaW5jbHVkZSBcIi4uL2hlbHBsaW5lLmhcIlxuIFxuKyNpbmNsdWRlIFx1MDAzY2dsaWItdW5peC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiBcbi12b2lkIHBlcmZfZ3RrX19zaWduYWwoaW50IHNpZylcbisvKlxuKyAqIFNJR0lOVC9TSUdRVUlUL1NJR1RFUk0gYXJlIGFzeW5jaHJvbm91czogZGVmZXJyaW5nIHRoZSBhY3R1YWwgZXhpdCB0byBhXG4rICogR0xpYiBzb3VyY2UgZGlzcGF0Y2hlZCBmcm9tIHRoZSBtYWluIGxvb3AgbWVhbnMgaXQgYWx3YXlzIHJ1bnMgb24gdGhlXG4rICogbWFpbiB0aHJlYWQsIHNlcmlhbGl6ZWQgd2l0aCBldmVyeXRoaW5nIGVsc2UgdGhlIG1haW4gbG9vcCBkb2VzXG4rICogKGluY2x1ZGluZyBwZXJmX2d0a19fZXJyb3IoKSdzIHVwZGF0ZXMgdG8gcGVyZl9ndGtfX2Vycm9yX2xvb3BzKSwgaW5zdGVhZFxuKyAqIG9mIHJhY2luZyB0aGVtIGZyb20gYXJiaXRyYXJ5IHNpZ25hbC1oYW5kbGVyIGNvbnRleHQuXG4rICovXG4rc3RhdGljIGdib29sZWFuIHBlcmZfZ3RrX19xdWl0X3NpZ25hbChncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKVxuIHtcbiBcdHBlcmZfZ3RrX19leGl0KGZhbHNlKTtcbitcdHJldHVybiBHX1NPVVJDRV9SRU1PVkU7XG4rfVxuK1xuK3ZvaWQgcGVyZl9ndGtfX2luc3RhbGxfcXVpdF9zaWduYWxzKHZvaWQpXG4re1xuK1x0Z191bml4X3NpZ25hbF9hZGQoU0lHSU5ULCAgcGVyZl9ndGtfX3F1aXRfc2lnbmFsLCBOVUxMKTtcbitcdGdfdW5peF9zaWduYWxfYWRkKFNJR1FVSVQsIHBlcmZfZ3RrX19xdWl0X3NpZ25hbCwgTlVMTCk7XG4rXHRnX3VuaXhfc2lnbmFsX2FkZChTSUdURVJNLCBwZXJmX2d0a19fcXVpdF9zaWduYWwsIE5VTEwpO1xuK31cbitcbisvKlxuKyAqIFNJR1NFR1YvU0lHRlBFIGFyZSBzeW5jaHJvbm91cyBmYXVsdHM6IHRoZXJlJ3Mgbm8gXCJsYXRlclwiIHRvIGRlZmVyIHRvLFxuKyAqIGFuZCBubyBzYWZlIHdheSB0byBydW4gR1RLL0dMaWIgY29kZSAob3IgYW55dGhpbmcgZWxzZSBub24tYXN5bmMtc2lnbmFsLVxuKyAqIHNhZmUpIGZyb20gdGhlIGZhdWx0aW5nIGNvbnRleHQuIFJlcG9ydCBhbmQgbGV0IHRoZSBkZWZhdWx0IGRpc3Bvc2l0aW9uXG4rICogKGNvcmUgZHVtcCkgaGFwcGVuIGluc3RlYWQgb2YgdHJ5aW5nIHRvIHRlYXIgZG93biBHVEsgc3RhdGUgaGVyZS5cbisgKi9cbit2b2lkIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwoaW50IHNpZylcbit7XG4gXHRwc2lnbmFsKHNpZywgXCJwZXJmXCIpO1xuK1x0c2lnbmFsKHNpZywgU0lHX0RGTCk7XG4rXHRyYWlzZShzaWcpO1xuIH1cbiBcbiB2b2lkIHBlcmZfZ3RrX19yZXNpemVfd2luZG93KEd0a1dpZGdldCAqd2luZG93KVxuIHtcbiBcdEdka1JlY3RhbmdsZSByZWN0O1xuLVx0R2RrU2NyZWVuICpzY3JlZW47XG4tXHRpbnQgbW9uaXRvcjtcbitcdEdka01vbml0b3IgKm1vbml0b3I7XG4rXHRHZGtEaXNwbGF5ICpkaXNwbGF5O1xuK1x0R0xpc3RNb2RlbCAqbW9uaXRvcnM7XG4gXHRpbnQgaGVpZ2h0O1xuIFx0aW50IHdpZHRoO1xuIFxuLVx0c2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHdpbmRvdyk7XG4rXHRkaXNwbGF5ID0gZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aW5kb3cpO1xuK1x0bW9uaXRvcnMgPSBnZGtfZGlzcGxheV9nZXRfbW9uaXRvcnMoZGlzcGxheSk7XG4rXHRtb25pdG9yID0gZ19saXN0X21vZGVsX2dldF9pdGVtKG1vbml0b3JzLCAwKTtcbitcdGlmICghbW9uaXRvcikge1xuK1x0XHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA4MDAsIDYwMCk7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbi1cdG1vbml0b3IgPSBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2F0X3dpbmRvdyhzY3JlZW4sIHdpbmRvdy1cdTAwM2V3aW5kb3cpO1xuLVxuLVx0Z2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIG1vbml0b3IsIFx1MDAyNnJlY3QpO1xuK1x0Z2RrX21vbml0b3JfZ2V0X2dlb21ldHJ5KG1vbml0b3IsIFx1MDAyNnJlY3QpO1xuK1x0Z19vYmplY3RfdW5yZWYobW9uaXRvcik7XG4gXG4gXHR3aWR0aFx0PSByZWN0LndpZHRoICogMyAvIDQ7XG4gXHRoZWlnaHRcdD0gcmVjdC5oZWlnaHQgKiAzIC8gNDtcbiBcbi1cdGd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1cod2luZG93KSwgd2lkdGgsIGhlaWdodCk7XG4rXHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTtcbit9XG4rXG4rc3RhdGljIEdNYWluTG9vcCAqcGVyZl9ndGtfX21haW5fbG9vcDtcbitcbit2b2lkIHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCh2b2lkKVxuK3tcbitcdGlmIChwZXJmX2d0a19fbWFpbl9sb29wKVxuK1x0XHRnX21haW5fbG9vcF9xdWl0KHBlcmZfZ3RrX19tYWluX2xvb3ApO1xuK31cbitcbitzdGF0aWMgZ2Jvb2xlYW4gcGVyZl9ndGtfX2Nsb3NlX3JlcXVlc3QoR3RrV2lkZ2V0ICp3aWRnZXQgX19tYXliZV91bnVzZWQsXG4rXHRcdFx0XHRcdGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4re1xuK1x0cGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKCk7XG4rXG4rXHRyZXR1cm4gRkFMU0U7XG4rfVxuK1xuK3ZvaWQgcGVyZl9ndGtfX3J1bl9tYWluX2xvb3AoR3RrV2lkZ2V0ICp3aW5kb3cpXG4re1xuK1x0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFwiY2xvc2UtcmVxdWVzdFwiLFxuK1x0XHRcdCBHX0NBTExCQUNLKHBlcmZfZ3RrX19jbG9zZV9yZXF1ZXN0KSwgTlVMTCk7XG4rXG4rXHRwZXJmX2d0a19fbWFpbl9sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIEZBTFNFKTtcbitcdGdfbWFpbl9sb29wX3J1bihwZXJmX2d0a19fbWFpbl9sb29wKTtcbitcdGdfY2xlYXJfcG9pbnRlcihcdTAwMjZwZXJmX2d0a19fbWFpbl9sb29wLCBnX21haW5fbG9vcF91bnJlZik7XG4gfVxuIFxuIGNvbnN0IGNoYXIgKnBlcmZfZ3RrX19nZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudClcbkBAIC00MiwzMyArMTAyLDM1IEBAIGNvbnN0IGNoYXIgKnBlcmZfZ3RrX19nZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVFxuK3N0YXRpYyB2b2lkIHBlcmZfZ3RrX19oaWRlX3dpZGdldChHdGtXaWRnZXQgKndpZGdldCwgZ2ludCByZXNwb25zZV9pZCBfX21heWJlX3VudXNlZCxcbitcdFx0XHRcdCAgIGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4re1xuK1x0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aWRnZXQsIEZBTFNFKTtcbit9XG4rXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcbiB7XG4gXHRHdGtXaWRnZXQgKmluZm9fYmFyO1xuIFx0R3RrV2lkZ2V0ICpsYWJlbDtcbi1cdEd0a1dpZGdldCAqY29udGVudF9hcmVhO1xuIFxuIFx0aW5mb19iYXIgPSBndGtfaW5mb19iYXJfbmV3KCk7XG4tXHRndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbChpbmZvX2JhciwgVFJVRSk7XG4rXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGluZm9fYmFyLCBGQUxTRSk7XG4gXG4gXHRsYWJlbCA9IGd0a19sYWJlbF9uZXcoXCJcIik7XG4tXHRndGtfd2lkZ2V0X3Nob3cobGFiZWwpO1xuK1x0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZShsYWJlbCwgVFJVRSk7XG4gXG4tXHRjb250ZW50X2FyZWEgPSBndGtfaW5mb19iYXJfZ2V0X2NvbnRlbnRfYXJlYShHVEtfSU5GT19CQVIoaW5mb19iYXIpKTtcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGVudF9hcmVhKSwgbGFiZWwpO1xuK1x0Z3RrX2luZm9fYmFyX2FkZF9jaGlsZChHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBsYWJlbCk7XG4gXG4tXHRndGtfaW5mb19iYXJfYWRkX2J1dHRvbihHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBHVEtfU1RPQ0tfT0ssXG4rXHRndGtfaW5mb19iYXJfYWRkX2J1dHRvbihHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBcIl9PS1wiLFxuIFx0XHRcdFx0R1RLX1JFU1BPTlNFX09LKTtcbiBcdGdfc2lnbmFsX2Nvbm5lY3QoaW5mb19iYXIsIFwicmVzcG9uc2VcIixcbi1cdFx0XHQgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2hpZGUpLCBOVUxMKTtcbitcdFx0XHQgR19DQUxMQkFDSyhwZXJmX2d0a19faGlkZV93aWRnZXQpLCBOVUxMKTtcbiBcbiBcdHBnY3R4LVx1MDAzZWluZm9fYmFyID0gaW5mb19iYXI7XG4gXHRwZ2N0eC1cdTAwM2VtZXNzYWdlX2xhYmVsID0gbGFiZWw7XG4gXG4gXHRyZXR1cm4gaW5mb19iYXI7XG4gfVxuLSNlbmRpZlxuIFxuIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX3N0YXR1c2Jhcih2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9ndGsuaCBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXG5pbmRleCBhMmI0OTdmMDNmZDZlLi42YjM3ZmQ5OTQzYzlkIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmhcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXG5AQCAtMTMsMTAgKzEzLDggQEAgc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQge1xuIFx0R3RrV2lkZ2V0ICptYWluX3dpbmRvdztcbiBcdEd0a1dpZGdldCAqbm90ZWJvb2s7XG4gXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBcdEd0a1dpZGdldCAqaW5mb19iYXI7XG4gXHRHdGtXaWRnZXQgKm1lc3NhZ2VfbGFiZWw7XG4tI2VuZGlmXG4gXHRHdGtXaWRnZXQgKnN0YXRiYXI7XG4gXHRndWludCBzdGF0YmFyX2N0eF9pZDtcbiB9O1xuQEAgLTM4LDE5ICszNiwxNSBAQCB2b2lkIHBlcmZfZ3RrX19pbml0X2hlbHBsaW5lKHZvaWQpO1xuIHZvaWQgZ3RrX3VpX3Byb2dyZXNzX19pbml0KHZvaWQpO1xuIHZvaWQgcGVyZl9ndGtfX2luaXRfaHBwKHZvaWQpO1xuIFxuLXZvaWQgcGVyZl9ndGtfX3NpZ25hbChpbnQgc2lnKTtcbit2b2lkIHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscyh2b2lkKTtcbit2b2lkIHBlcmZfZ3RrX19mYXRhbF9zaWduYWwoaW50IHNpZyk7XG4gdm9pZCBwZXJmX2d0a19fcmVzaXplX3dpbmRvdyhHdGtXaWRnZXQgKndpbmRvdyk7XG4rdm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdyk7XG4rdm9pZCBwZXJmX2d0a19fcXVpdF9tYWluX2xvb3Aodm9pZCk7XG4rdm9pZCBwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2codm9pZCk7XG4gY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KTtcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIodm9pZCk7XG4tXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKTtcbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcbi17XG4tXHRyZXR1cm4gTlVMTDtcbi19XG4tI2VuZGlmXG4gXG4gc3RydWN0IGV2c2VsO1xuIHN0cnVjdCBldmxpc3Q7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmNcbmluZGV4IGJhZTIxZjMzNmFlNmQuLjM0MmQ0YzNmZWNiMDEgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXG5AQCAtOCw2ICs4LDggQEBcbiAjaW5jbHVkZSBcIi4uL2hlbHBsaW5lLmhcIlxuICNpbmNsdWRlIFwiLi4vc3RyaW5nMi5oXCJcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGFyZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiBcbkBAIC0zOTUsMTEgKzM5Nyw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpc3RzKEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRndGtfdHJlZV92aWV3X3NldF9ydWxlc19oaW50KEdUS19UUkVFX1ZJRVcodmlldyksIFRSVUUpO1xuLVxuIFx0Z19zaWduYWxfY29ubmVjdCh2aWV3LCBcInJvdy1hY3RpdmF0ZWRcIixcbiBcdFx0XHQgR19DQUxMQkFDSyhvbl9yb3dfYWN0aXZhdGVkKSwgTlVMTCk7XG4tXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xuK1x0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuQEAgLTQ0OSw3ICs0NDksNyBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fYWRkX2hpZXJhcmNoeV9lbnRyaWVzKHN0cnVjdCBoaXN0cyAqaGlzdHMsXG4gXHRcdGJmID0gaHBwLVx1MDAzZWJ1ZjtcbiBcdFx0c2l6ZSA9IGhwcC1cdTAwM2VzaXplO1xuIFx0XHRwZXJmX2hwcF9saXN0X19mb3JfZWFjaF9mb3JtYXQoaGUtXHUwMDNlaHBwX2xpc3QsIGZtdCkge1xuLVx0XHRcdGludCByZXQ7XG4rXHRcdFx0aW50IHJldCwgaW5jO1xuIFxuIFx0XHRcdGlmIChmbXQtXHUwMDNlY29sb3IpXG4gXHRcdFx0XHRyZXQgPSBmbXQtXHUwMDNlY29sb3IoZm10LCBocHAsIGhlKTtcbkBAIC00NTcsNyArNDU3LDE4IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoc3RydWN0IGhpc3RzICpoaXN0cyxcbiBcdFx0XHRcdHJldCA9IGZtdC1cdTAwM2VlbnRyeShmbXQsIGhwcCwgaGUpO1xuIFxuIFx0XHRcdHNucHJpbnRmKGhwcC1cdTAwM2VidWYgKyByZXQsIGhwcC1cdTAwM2VzaXplIC0gcmV0LCBcIiAgXCIpO1xuLVx0XHRcdGFkdmFuY2VfaHBwKGhwcCwgcmV0ICsgMik7XG4rXHRcdFx0LypcbitcdFx0XHQgKiByZXQgY2FuIGJlIGFzIGxhcmdlIGFzIGhwcC1cdTAwM2VzaXplIC0gMSwgc28gcmV0ICsgMlxuK1x0XHRcdCAqIGNhbiBleGNlZWQgaHBwLVx1MDAzZXNpemUuIGFkdmFuY2VfaHBwKCkgZG9lc24ndCBjbGFtcCxcbitcdFx0XHQgKiBzbyBwYXNzaW5nIHRoYXQgdGhyb3VnaCB3b3VsZCB1bmRlcmZsb3cgdGhlXG4rXHRcdFx0ICogc2l6ZV90IGhwcC1cdTAwM2VzaXplIGFuZCBsZXQgYSBsYXRlciBmbXQtXHUwMDNlZW50cnkoKSBpblxuK1x0XHRcdCAqIHRoaXMgbG9vcCB3cml0ZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGNhbGxlcidzXG4rXHRcdFx0ICogc3RhY2sgYnVmZmVyLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGluYyA9IHJldCArIDI7XG4rXHRcdFx0aWYgKGluYyBcdTAwM2UgKGludClocHAtXHUwMDNlc2l6ZSlcbitcdFx0XHRcdGluYyA9IGhwcC1cdTAwM2VzaXplO1xuK1x0XHRcdGFkdmFuY2VfaHBwKGhwcCwgaW5jKTtcbiBcdFx0fVxuIFxuIFx0XHRndGtfdHJlZV9zdG9yZV9zZXQoc3RvcmUsIFx1MDAyNml0ZXIsIGNvbF9pZHgsIHN0cmltKGJmKSwgLTEpO1xuQEAgLTUwNSw2ICs1MTYsNyBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXG4gXHRHdGtXaWRnZXQgKnZpZXc7XG4gXHRpbnQgY29sX2lkeDtcbiBcdGludCBucl9jb2xzID0gMDtcbitcdGludCByZXQ7XG4gXHRjaGFyIHNbNTEyXTtcbiBcdGNoYXIgYnVmWzUxMl07XG4gXHRib29sIGZpcnN0X25vZGUsIGZpcnN0X2NvbDtcbkBAIC01NDEsOSArNTUzLDEwIEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpZXJhcmNoeShHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cyxcbiBcdC8qIGNvbnN0cnVjdCBtZXJnZWQgY29sdW1uIGhlYWRlciBzaW5jZSBzb3J0IGtleXMgc2hhcmUgc2luZ2xlIGNvbHVtbiAqL1xuIFx0YnVmWzBdID0gJ1xcMCc7XG4gXHRmaXJzdF9ub2RlID0gdHJ1ZTtcbitcdHJldCA9IDA7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKGZtdF9ub2RlLCBcdTAwMjZoaXN0cy1cdTAwM2VocHBfZm9ybWF0cywgbGlzdCkge1xuIFx0XHRpZiAoIWZpcnN0X25vZGUpXG4tXHRcdFx0c3RyY2F0KGJ1ZiwgXCIgLyBcIik7XG4rXHRcdFx0cmV0ICs9IHNjbnByaW50ZihidWYgKyByZXQsIHNpemVvZihidWYpIC0gcmV0LCBcIiAvIFwiKTtcbiBcdFx0Zmlyc3Rfbm9kZSA9IGZhbHNlO1xuIFxuIFx0XHRmaXJzdF9jb2wgPSB0cnVlO1xuQEAgLTU1MiwxMSArNTY1LDExIEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpZXJhcmNoeShHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cyxcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdGlmICghZmlyc3RfY29sKVxuLVx0XHRcdFx0c3RyY2F0KGJ1ZiwgXCIrXCIpO1xuK1x0XHRcdFx0cmV0ICs9IHNjbnByaW50ZihidWYgKyByZXQsIHNpemVvZihidWYpIC0gcmV0LCBcIitcIik7XG4gXHRcdFx0Zmlyc3RfY29sID0gZmFsc2U7XG4gXG4gXHRcdFx0Zm10LVx1MDAzZWhlYWRlcihmbXQsIFx1MDAyNmhwcCwgaGlzdHMsIDAsIE5VTEwpO1xuLVx0XHRcdHN0cmNhdChidWYsIHN0cmltKGhwcC5idWYpKTtcbitcdFx0XHRyZXQgKz0gc2NucHJpbnRmKGJ1ZiArIHJldCwgc2l6ZW9mKGJ1ZikgLSByZXQsIFwiJXNcIiwgc3RyaW0oaHBwLmJ1ZikpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNTgzLDExICs1OTYsOSBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXG4gXHRwZXJmX2d0a19fYWRkX2hpZXJhcmNoeV9lbnRyaWVzKGhpc3RzLCBcdTAwMjZoaXN0cy1cdTAwM2VlbnRyaWVzLCBzdG9yZSxcbiBcdFx0XHRcdFx0TlVMTCwgXHUwMDI2aHBwLCBtaW5fcGNudCk7XG4gXG4tXHRndGtfdHJlZV92aWV3X3NldF9ydWxlc19oaW50KEdUS19UUkVFX1ZJRVcodmlldyksIFRSVUUpO1xuLVxuIFx0Z19zaWduYWxfY29ubmVjdCh2aWV3LCBcInJvdy1hY3RpdmF0ZWRcIixcbiBcdFx0XHQgR19DQUxMQkFDSyhvbl9yb3dfYWN0aXZhdGVkKSwgTlVMTCk7XG4tXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xuK1x0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTtcbiB9XG4gXG4gaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXG5AQCAtNjAwLDM2ICs2MTEsMzIgQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXG4gXHRHdGtXaWRnZXQgKnN0YXRiYXI7XG4gXHRHdGtXaWRnZXQgKndpbmRvdztcbiBcbi1cdHNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdHNpZ25hbChTSUdGUEUsICBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdHNpZ25hbChTSUdJTlQsICBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdHNpZ25hbChTSUdRVUlULCBwZXJmX2d0a19fc2lnbmFsKTtcbi1cdHNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTtcbitcdHNpZ25hbChTSUdTRUdWLCBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKTtcbitcdHNpZ25hbChTSUdGUEUsICBwZXJmX2d0a19fZmF0YWxfc2lnbmFsKTtcbitcdHBlcmZfZ3RrX19pbnN0YWxsX3F1aXRfc2lnbmFscygpO1xuIFxuLVx0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7XG4rXHR3aW5kb3cgPSBndGtfd2luZG93X25ldygpO1xuIFxuIFx0Z3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyh3aW5kb3cpLCBcInBlcmYgcmVwb3J0XCIpO1xuIFxuLVx0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFwiZGVsZXRlX2V2ZW50XCIsIGd0a19tYWluX3F1aXQsIE5VTEwpO1xuLVxuIFx0cGdjdHggPSBwZXJmX2d0a19fYWN0aXZhdGVfY29udGV4dCh3aW5kb3cpO1xuIFx0aWYgKCFwZ2N0eClcbiBcdFx0cmV0dXJuIC0xO1xuIFxuLVx0dmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7XG4rXHR2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTtcbiBcbiBcdG5vdGVib29rID0gZ3RrX25vdGVib29rX25ldygpO1xuIFxuLVx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIG5vdGVib29rLCBUUlVFLCBUUlVFLCAwKTtcbitcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQobm90ZWJvb2ssIFRSVUUpO1xuK1x0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spO1xuIFxuIFx0aW5mb19iYXIgPSBwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIoKTtcbi1cdGlmIChpbmZvX2Jhcilcbi1cdFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGluZm9fYmFyLCBGQUxTRSwgRkFMU0UsIDApO1xuK1x0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgaW5mb19iYXIpO1xuIFxuIFx0c3RhdGJhciA9IHBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIoKTtcbi1cdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBzdGF0YmFyLCBGQUxTRSwgRkFMU0UsIDApO1xuK1x0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhcik7XG4gXG4tXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZib3gpO1xuK1x0Z3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyh3aW5kb3cpLCB2Ym94KTtcbiBcbiBcdGV2bGlzdF9fZm9yX2VhY2hfZW50cnkoZXZsaXN0LCBwb3MpIHtcbiBcdFx0c3RydWN0IGhpc3RzICpoaXN0cyA9IGV2c2VsX19oaXN0cyhwb3MpO1xuQEAgLTY0OSw3ICs2NTYsNyBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcbiBcdFx0XHR9XG4gXHRcdH1cbiBcbi1cdFx0c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7XG4rXHRcdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KCk7XG4gXG4gXHRcdGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksXG4gXHRcdFx0XHRcdFx0XHRHVEtfUE9MSUNZX0FVVE9NQVRJQyxcbkBAIC02NjUsMTUgKzY3MiwxMiBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcbiBcdFx0Z3RrX25vdGVib29rX2FwcGVuZF9wYWdlKEdUS19OT1RFQk9PSyhub3RlYm9vayksIHNjcm9sbGVkX3dpbmRvdywgdGFiX2xhYmVsKTtcbiBcdH1cbiBcbi1cdGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTtcbi1cbiBcdHBlcmZfZ3RrX19yZXNpemVfd2luZG93KHdpbmRvdyk7XG4tXG4tXHRndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKHdpbmRvdyksIEdUS19XSU5fUE9TX0NFTlRFUik7XG4rXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpbmRvdywgVFJVRSk7XG4gXG4gXHR1aV9oZWxwbGluZV9fcHVzaChoZWxwKTtcbiBcbi1cdGd0a19tYWluKCk7XG4rXHRwZXJmX2d0a19fcnVuX21haW5fbG9vcCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dChcdTAwMjZwZ2N0eCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmNcbmluZGV4IGVlYTZmY2RlNTE4YTguLjc3MGY5MjUxYjU0YjcgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jXG5AQCAtMSw0OSArMSw2NSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gI2luY2x1ZGUgXHUwMDNjaW50dHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImd0ay5oXCJcbiAjaW5jbHVkZSBcIi4uL3Byb2dyZXNzLmhcIlxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiBcbiBzdGF0aWMgR3RrV2lkZ2V0ICpkaWFsb2c7XG4gc3RhdGljIEd0a1dpZGdldCAqcHJvZ3Jlc3M7XG4gXG4rc3RhdGljIHZvaWQgZ3RrX3VpX3Byb2dyZXNzX19kZXN0cm95ZWQoR3RrV2lkZ2V0ICp3aWRnZXQgX19tYXliZV91bnVzZWQsXG4rXHRcdFx0XHRcdGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4re1xuK1x0ZGlhbG9nID0gTlVMTDtcbitcdHByb2dyZXNzID0gTlVMTDtcbit9XG4rXG4gc3RhdGljIHZvaWQgZ3RrX3VpX3Byb2dyZXNzX191cGRhdGUoc3RydWN0IHVpX3Byb2dyZXNzICpwKVxuIHtcbiBcdGRvdWJsZSBmcmFjdGlvbiA9IHAtXHUwMDNldG90YWwgPyAxLjAgKiBwLVx1MDAzZWN1cnIgLyBwLVx1MDAzZXRvdGFsIDogMC4wO1xuIFx0Y2hhciBidWZbMTAyNF07XG4gXG4gXHRpZiAoZGlhbG9nID09IE5VTEwpIHtcbi1cdFx0R3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX3Zib3hfbmV3KFRSVUUsIDUpO1xuK1x0XHRHdGtXaWRnZXQgKnZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDUpO1xuIFx0XHRHdGtXaWRnZXQgKmxhYmVsID0gZ3RrX2xhYmVsX25ldyhwLVx1MDAzZXRpdGxlKTtcbiBcbi1cdFx0ZGlhbG9nID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7XG4rXHRcdGRpYWxvZyA9IGd0a193aW5kb3dfbmV3KCk7XG4gXHRcdHByb2dyZXNzID0gZ3RrX3Byb2dyZXNzX2Jhcl9uZXcoKTtcbiBcbi1cdFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGxhYmVsLCBUUlVFLCBGQUxTRSwgMyk7XG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBwcm9ncmVzcywgVFJVRSwgVFJVRSwgMyk7XG4rXHRcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQobGFiZWwsIFRSVUUpO1xuK1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBsYWJlbCk7XG4rXHRcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQocHJvZ3Jlc3MsIFRSVUUpO1xuK1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBwcm9ncmVzcyk7XG4rXG4rXHRcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1coZGlhbG9nKSwgdmJveCk7XG4gXG4tXHRcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoZGlhbG9nKSwgdmJveCk7XG4rXHRcdGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCBcImRlc3Ryb3lcIixcbitcdFx0XHRcdCBHX0NBTExCQUNLKGd0a191aV9wcm9ncmVzc19fZGVzdHJveWVkKSwgTlVMTCk7XG4gXG4gXHRcdGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1coZGlhbG9nKSwgXCJwZXJmXCIpO1xuLVx0XHRndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKGRpYWxvZyksIDMwMCwgODApO1xuLVx0XHRndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKGRpYWxvZyksIEdUS19XSU5fUE9TX0NFTlRFUik7XG4rXHRcdGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKGRpYWxvZyksIDMwMCwgODApO1xuIFxuLVx0XHRndGtfd2lkZ2V0X3Nob3dfYWxsKGRpYWxvZyk7XG4rXHRcdGd0a193aWRnZXRfc2V0X3Zpc2libGUoZGlhbG9nLCBUUlVFKTtcbiBcdH1cbiBcbiBcdGd0a19wcm9ncmVzc19iYXJfc2V0X2ZyYWN0aW9uKEdUS19QUk9HUkVTU19CQVIocHJvZ3Jlc3MpLCBmcmFjdGlvbik7XG4gXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiVcIlBSSXU2NFwiIC8gJVwiUFJJdTY0LCBwLVx1MDAzZWN1cnIsIHAtXHUwMDNldG90YWwpO1xuIFx0Z3RrX3Byb2dyZXNzX2Jhcl9zZXRfdGV4dChHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwgYnVmKTtcbiBcbi1cdC8qIHdlIGRpZG4ndCBjYWxsIGd0a19tYWluIHlldCwgc28gZG8gaXQgbWFudWFsbHkgKi9cbi1cdHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSlcbi1cdFx0Z3RrX21haW5faXRlcmF0aW9uKCk7XG4rXHQvKiB3ZSBkaWRuJ3Qgc3RhcnQgYSBtYWluIGxvb3AgeWV0LCBzbyBwdW1wIGV2ZW50cyBtYW51YWxseSAqL1xuK1x0d2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpXG4rXHRcdGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZmluaXNoKHZvaWQpXG4ge1xuK1x0aWYgKGRpYWxvZyA9PSBOVUxMKVxuK1x0XHRyZXR1cm47XG4rXG4gXHQvKiB0aGlzIHdpbGwgYWxzbyBkZXN0cm95IGFsbCBvZiBpdHMgY2hpbGRyZW4gKi9cbi1cdGd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpO1xuK1x0Z3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7XG4gXG4gXHRkaWFsb2cgPSBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuY1xuaW5kZXggZjVlZWU0ZDY2ODczOC4uOWI0NGYzNzE5NzQ3NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcbkBAIC0xMiw3ICsxMiw3IEBAIGludCBwZXJmX2d0a19faW5pdCh2b2lkKVxuIFx0Z3RrX3VpX3Byb2dyZXNzX19pbml0KCk7XG4gXHRwZXJmX2d0a19faW5pdF9ocHAoKTtcbiBcbi1cdHJldHVybiBndGtfaW5pdF9jaGVjayhOVUxMLCBOVUxMKSA/IDAgOiAtMTtcbitcdHJldHVybiBndGtfaW5pdF9jaGVjaygpID8gMCA6IC0xO1xuIH1cbiBcbiB2b2lkIHBlcmZfZ3RrX19leGl0KGJvb2wgd2FpdF9mb3Jfb2sgX19tYXliZV91bnVzZWQpXG5AQCAtMjAsNSArMjAsNiBAQCB2b2lkIHBlcmZfZ3RrX19leGl0KGJvb2wgd2FpdF9mb3Jfb2sgX19tYXliZV91bnVzZWQpXG4gXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkpXG4gXHRcdHJldHVybjtcbiBcdHBlcmZfZXJyb3JfX3VucmVnaXN0ZXIoXHUwMDI2cGVyZl9ndGtfZW9wcyk7XG4tXHRndGtfbWFpbl9xdWl0KCk7XG4rXHRwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2coKTtcbitcdHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmMgYi90b29scy9wZXJmL3VpL2d0ay91dGlsLmNcbmluZGV4IGM0N2Y1YzM4NzgzOGMuLjU4MjNmZjBkN2MyYTcgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmNcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xuQEAgLTIsOCArMiwxMCBAQFxuICNpbmNsdWRlIFwiLi4vdXRpbC5oXCJcbiAjaW5jbHVkZSBcImd0ay5oXCJcbiBcbisjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3phbGxvYy5oXHUwMDNlXG4gXG4gc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQgKnBnY3R4O1xuQEAgLTI4LDg2ICszMCwxMDMgQEAgaW50IHBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQgKipjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBwZXJmX2d0a19fZXJyb3IoKSBjYW4gYmUgY2FsbGVkIHJlLWVudHJhbnRseSwgc2luY2UgdGhlIGRpYWxvZyBpc24ndFxuKyAqIG1vZGFsIGFuZCBpdHMgbmVzdGVkIGxvb3Agc3RpbGwgcHVtcHMgZXZlbnRzIGZvciB0aGUgbWFpbiB3aW5kb3cuXG4rICogVHJhY2sgZXZlcnkgY3VycmVudGx5IHJ1bm5pbmcgbG9vcCBpbnN0ZWFkIG9mIGEgc2luZ2xlIHBvaW50ZXIsIHNvIGFcbisgKiBuZXN0ZWQgY2FsbCBjYW4ndCBjbG9iYmVyIGFuIG91dGVyIGNhbGwncyBsb29wIGFuZCBsZWFrIGl0LlxuKyAqL1xuK3N0YXRpYyBHU0xpc3QgKnBlcmZfZ3RrX19lcnJvcl9sb29wcztcbitcbitzdGF0aWMgdm9pZCBwZXJmX2d0a19fcXVpdF9sb29wKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSBfX21heWJlX3VudXNlZClcbit7XG4rXHRnX21haW5fbG9vcF9xdWl0KGRhdGEpO1xuK31cbitcbit2b2lkIHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZyh2b2lkKVxuK3tcbitcdGdfc2xpc3RfZm9yZWFjaChwZXJmX2d0a19fZXJyb3JfbG9vcHMsIHBlcmZfZ3RrX19xdWl0X2xvb3AsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBwZXJmX2d0a19fZGlhbG9nX3Jlc3BvbnNlKEd0a0RpYWxvZyAqZGlhbG9nLFxuK1x0XHRcdFx0ICAgICAgZ2ludCByZXNwb25zZV9pZCBfX21heWJlX3VudXNlZCxcbitcdFx0XHRcdCAgICAgIGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4re1xuK1x0Z3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcGVyZl9ndGtfX2Vycm9yKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxuIHtcbiBcdGNoYXIgKm1zZztcbiBcdEd0a1dpZGdldCAqZGlhbG9nO1xuK1x0R01haW5Mb29wICpsb29wO1xuK1x0dmFfbGlzdCBhcmdzX2NvcHk7XG4gXG4rXHR2YV9jb3B5KGFyZ3NfY29weSwgYXJncyk7XG4gXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHxcbi1cdCAgICB2YXNwcmludGYoXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3MpIFx1MDAzYyAwKSB7XG4rXHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzX2NvcHkpIFx1MDAzYyAwKSB7XG4rXHRcdHZhX2VuZChhcmdzX2NvcHkpO1xuIFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjpcXG5cIik7XG4gXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuXCIpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4rXHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcbiBcdGRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXdfd2l0aF9tYXJrdXAoR1RLX1dJTkRPVyhwZ2N0eC1cdTAwM2VtYWluX3dpbmRvdyksXG4gXHRcdFx0XHRcdEdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCxcbiBcdFx0XHRcdFx0R1RLX01FU1NBR0VfRVJST1IsXG4gXHRcdFx0XHRcdEdUS19CVVRUT05TX0NMT1NFLFxuIFx0XHRcdFx0XHRcIlx1MDAzY2JcdTAwM2VFcnJvclx1MDAzYy9iXHUwMDNlXFxuXFxuJXNcIiwgbXNnKTtcbi1cdGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7XG4gXG4tXHRndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTtcbitcdC8qXG4rXHQgKiBcInJlc3BvbnNlXCIgb25seSBmaXJlcyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQ7IERFU1RST1lfV0lUSF9QQVJFTlRcbitcdCAqIGRlc3Ryb3lzIHRoZSBkaWFsb2cgZGlyZWN0bHkgd2l0aG91dCBpdC4gUXVpdCBmcm9tIFwiZGVzdHJveVwiXG4rXHQgKiBpbnN0ZWFkLCB3aGljaCBmaXJlcyBlaXRoZXIgd2F5LCBzbyB0aGUgbmVzdGVkIGxvb3AgYmVsb3cgY2FuJ3RcbitcdCAqIG91dGxpdmUgdGhlIGRpYWxvZyBhbmQgaGFuZy5cbitcdCAqL1xuK1x0bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBGQUxTRSk7XG4rXHRwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3ByZXBlbmQocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBsb29wKTtcbitcdGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCBcInJlc3BvbnNlXCIsXG4rXHRcdFx0IEdfQ0FMTEJBQ0socGVyZl9ndGtfX2RpYWxvZ19yZXNwb25zZSksIE5VTEwpO1xuK1x0Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGRpYWxvZywgXCJkZXN0cm95XCIsXG4rXHRcdFx0XHQgR19DQUxMQkFDSyhnX21haW5fbG9vcF9xdWl0KSwgbG9vcCk7XG4rXG4rXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGRpYWxvZywgVFJVRSk7XG4rXHRnX21haW5fbG9vcF9ydW4obG9vcCk7XG4rXHRwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3JlbW92ZShwZXJmX2d0a19fZXJyb3JfbG9vcHMsIGxvb3ApO1xuK1x0Z19tYWluX2xvb3BfdW5yZWYobG9vcCk7XG4rXG4gXHRmcmVlKG1zZyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBzdGF0aWMgaW50IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxuIHtcbiBcdGNoYXIgKm1zZztcbitcdHZhX2xpc3QgYXJnc19jb3B5O1xuIFxuK1x0dmFfY29weShhcmdzX2NvcHksIGFyZ3MpO1xuIFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpIHx8XG4tXHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzKSBcdTAwM2MgMCkge1xuK1x0ICAgIHZhc3ByaW50ZihcdTAwMjZtc2csIGZvcm1hdCwgYXJnc19jb3B5KSBcdTAwM2MgMCkge1xuK1x0XHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwiV2FybmluZzpcXG5cIik7XG4gXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuXCIpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4rXHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcbiBcdGd0a19sYWJlbF9zZXRfdGV4dChHVEtfTEFCRUwocGdjdHgtXHUwMDNlbWVzc2FnZV9sYWJlbCksIG1zZyk7XG4gXHRndGtfaW5mb19iYXJfc2V0X21lc3NhZ2VfdHlwZShHVEtfSU5GT19CQVIocGdjdHgtXHUwMDNlaW5mb19iYXIpLFxuIFx0XHRcdFx0ICAgICAgR1RLX01FU1NBR0VfV0FSTklORyk7XG4tXHRndGtfd2lkZ2V0X3Nob3cocGdjdHgtXHUwMDNlaW5mb19iYXIpO1xuLVxuLVx0ZnJlZShtc2cpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLSNlbHNlXG4tc3RhdGljIGludCBwZXJmX2d0a19fd2FybmluZ19zdGF0dXNiYXIoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpXG4te1xuLVx0Y2hhciAqbXNnLCAqcDtcbi1cbi1cdGlmICghcGVyZl9ndGtfX2lzX2FjdGl2ZV9jb250ZXh0KHBnY3R4KSB8fFxuLVx0ICAgIHZhc3ByaW50ZihcdTAwMjZtc2csIGZvcm1hdCwgYXJncykgXHUwMDNjIDApIHtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwiV2FybmluZzpcXG5cIik7XG4tXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuXCIpO1xuLVx0XHRyZXR1cm4gLTE7XG4tXHR9XG4tXG4tXHRndGtfc3RhdHVzYmFyX3BvcChHVEtfU1RBVFVTQkFSKHBnY3R4LVx1MDAzZXN0YXRiYXIpLFxuLVx0XHRcdCAgcGdjdHgtXHUwMDNlc3RhdGJhcl9jdHhfaWQpO1xuLVxuLVx0LyogT25seSBmaXJzdCBsaW5lIGNhbiBiZSBkaXNwbGF5ZWQgKi9cbi1cdHAgPSBzdHJjaHIobXNnLCAnXFxuJyk7XG4tXHRpZiAocClcbi1cdFx0KnAgPSAnXFwwJztcbi1cbi1cdGd0a19zdGF0dXNiYXJfcHVzaChHVEtfU1RBVFVTQkFSKHBnY3R4LVx1MDAzZXN0YXRiYXIpLFxuLVx0XHRcdCAgIHBnY3R4LVx1MDAzZXN0YXRiYXJfY3R4X2lkLCBtc2cpO1xuK1x0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZShwZ2N0eC1cdTAwM2VpbmZvX2JhciwgVFJVRSk7XG4gXG4gXHRmcmVlKG1zZyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4tI2VuZGlmXG4gXG4gc3RydWN0IHBlcmZfZXJyb3Jfb3BzIHBlcmZfZ3RrX2VvcHMgPSB7XG4gXHQuZXJyb3JcdFx0PSBwZXJmX2d0a19fZXJyb3IsXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBcdC53YXJuaW5nXHQ9IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyLFxuLSNlbHNlXG4tXHQud2FybmluZ1x0PSBwZXJmX2d0a19fd2FybmluZ19zdGF0dXNiYXIsXG4tI2VuZGlmXG4gfTtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL3NldHVwLmMgYi90b29scy9wZXJmL3VpL3NldHVwLmNcbmluZGV4IGZmODAwMDQ3ZTY5N2YuLmQ4ODczNDZjN2E2MzIgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL3NldHVwLmNcbisrKyBiL3Rvb2xzL3BlcmYvdWkvc2V0dXAuY1xuQEAgLTE0LDcgKzE0LDcgQEAgaW50IHVzZV9icm93c2VyID0gLTE7XG4gXG4gI2RlZmluZSBQRVJGX0dUS19EU08gXCJsaWJwZXJmLWd0ay5zb1wiXG4gXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4rI2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXG4gXG4gc3RhdGljIGludCBzZXR1cF9ndGtfYnJvd3Nlcih2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jXG5pbmRleCBkZjcwZTk1YTg0NzA0Li4xMjNiNmQ1ZmNlYTc4IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmNcbisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jXG5AQCAtMTQ1LDYgKzE0NSwxNyBAQCBzdGF0aWMgaW50IGFubm90YXRlZF9zb3VyY2VfX2FsbG9jX2hpc3RvZ3JhbXMoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYyxcbiBcdHJldHVybiBzcmMtXHUwMDNlaGlzdG9ncmFtcyA/IDAgOiAtMTtcbiB9XG4gXG4rc3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcbithbm5vdGF0ZWRfc291cmNlX19oaXN0X2VudHJ5KHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsIGNvbnN0IHN0cnVjdCBldnNlbCAqZXZzZWwsIHU2NCBvZmZzZXQpXG4re1xuK1x0c3RydWN0IHN5bV9oaXN0X2VudHJ5ICplbnRyeTtcbitcdGxvbmcga2V5ID0gb2Zmc2V0IFx1MDAzY1x1MDAzYyAxNiB8IGV2c2VsLVx1MDAzZWNvcmUuaWR4O1xuK1xuK1x0aWYgKCFoYXNobWFwX19maW5kKHNyYy1cdTAwM2VzYW1wbGVzLCBrZXksIFx1MDAyNmVudHJ5KSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gZW50cnk7XG4rfVxuK1xuIHZvaWQgc3ltYm9sX19hbm5vdGF0ZV96ZXJvX2hpc3RvZ3JhbXMoc3RydWN0IHN5bWJvbCAqc3ltKVxuIHtcbiBcdHN0cnVjdCBhbm5vdGF0aW9uICpub3RlcyA9IHN5bWJvbF9fYW5ub3RhdGlvbihzeW0pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmhcbmluZGV4IGZhMDhkMDliODBmNzYuLjQwMDM4YTM3NzlkNDYgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaFxuKysrIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmhcbkBAIC00MDYsMTYgKzQwNiw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bV9oaXN0ICphbm5vdGF0aW9uX19oaXN0b2dyYW0oc3RydWN0IGFubm90YXRpb24gKm5vdGVzLFxuIFx0cmV0dXJuIGFubm90YXRlZF9zb3VyY2VfX2hpc3RvZ3JhbShub3Rlcy1cdTAwM2VzcmMsIGV2c2VsKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKlxuLWFubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldClcbi17XG4tXHRzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKmVudHJ5O1xuLVx0bG9uZyBrZXkgPSBvZmZzZXQgXHUwMDNjXHUwMDNjIDE2IHwgZXZzZWwtXHUwMDNlY29yZS5pZHg7XG4tXG4tXHRpZiAoIWhhc2htYXBfX2ZpbmQoc3JjLVx1MDAzZXNhbXBsZXMsIGtleSwgXHUwMDI2ZW50cnkpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdHJldHVybiBlbnRyeTtcbi19XG4rc3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcbithbm5vdGF0ZWRfc291cmNlX19oaXN0X2VudHJ5KHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsIGNvbnN0IHN0cnVjdCBldnNlbCAqZXZzZWwsIHU2NCBvZmZzZXQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFubm90YXRpb24gKnN5bWJvbF9fYW5ub3RhdGlvbihzdHJ1Y3Qgc3ltYm9sICpzeW0pXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MjY6MjUuMTczNzYxNjk3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjYxOTUxNjY0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggRXZhbHVhdGlvbiBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGV5IHdhbnQgbWUgdG8gYXNzZXNzIGEgcGF0Y2ggc2VyaWVzIGZvciBzeXprYWxsZXIgZnV6emluZy4gTGV0J3MgZ2V0IHJpZ2h0IHRvIGl0LiBGaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgY2hhbmdlZC4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzOiBgdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZWAsIGB0b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlYCwgc29tZSBgLmNgIGZpbGVzIGluIGB0b29scy9idWlsZC9mZWF0dXJlL2AsIGNoYW5nZXMgdG8gYHRvb2xzL3BlcmYvYCByZWxhdGVkIHRvIGRvY3VtZW50YXRpb24sIG1ha2VmaWxlcywgYW5kIGEgZ29vZCBjaHVuayBvZiBHVEstcmVsYXRlZCBVSSBjb2RlLiBMb29rcyBsaWtlIGEgYmlnIGNodW5rIG9mIHRoaXMgaXMgcmVsYXRlZCB0byBhIEdUSyB1cGdyYWRlIGZvciB0aGUgYHBlcmZgIHRvb2wuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHN5emthbGxlciB3b3JrcywgSSBuZWVkIHRvIGNoZWNrIGFnYWluc3QgdGhlIGRlZmluZWQgY3JpdGVyaWEuIFNwZWNpZmljYWxseSwgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLCB0aGUgdGltZXMgd2hlbiBJIHdvdWxkICpub3QqIGNvbnNpZGVyIGl0IHdvcnRoIGZ1enppbmcuIEknbSBsb29raW5nIGZvciBhbnkgbW9kaWZpY2F0aW9ucyB0aGF0IGZhbGwgaW50byB0aGVzZSBjYXRlZ29yaWVzOiBkb2N1bWVudGF0aW9uLCB1c2VyLXNwYWNlIGNvZGUgdGhhdCBkb2Vzbid0IGFmZmVjdCB0aGUga2VybmVsIGltYWdlLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIG9yIGJ1aWxkIHN5c3RlbSBjaGFuZ2VzIHRoYXQgZG9uJ3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cblxuSG1tLiBBbGwgdGhlIG1vZGlmaWVkIGZpbGVzIGFyZSB1bmRlciBgdG9vbHMvYCwgc3BlY2lmaWNhbGx5IGB0b29scy9wZXJmL2AgYW5kIGB0b29scy9idWlsZC9gLiBJdCBsb29rcyBsaWtlIHRoaXMgaXMgYSBwdXJlIHVzZXItc3BhY2UgY2hhbmdlLCB0aGUgYHBlcmZgIHRvb2wsIHdoaWNoIGFwcGVhcnMgdG8gYmUgdXBncmFkaW5nIGl0cyBHVEsgdmVyc2lvbi4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIHNlZW0gdG8gdG91Y2ggYHZtbGludXhgIG9yIGFueSBrZXJuZWwgbW9kdWxlcy4gRXhjZWxsZW50ISBUaGlzICpzaG91bGQqIGJlIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBnbyB0aHJvdWdoIHRoZSBsaXN0IG9mIG1vZGlmaWVkIGZpbGVzIGFnYWluLCB2aXN1YWxseSB0aGlzIHRpbWUsIHRvIGNvbmZpcm0gdGhhdCBubyBub24tYHRvb2xzL2AgZmlsZXMgd2VyZSB0b3VjaGVkOiBgdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZWAsIGB0b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlYCwgYW5kIHNvIG9uLCBhbGwgdGhlIHdheSBkb3duIHRvIGB0b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaGAuIFl1cCwgc3RpbGwgYWxsIGluc2lkZSBgdG9vbHMvYC4gTm8gcmVkIGZsYWdzLlxuXG5UaGVyZWZvcmUsIGFwcGx5aW5nIHRoZSBcIldIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZVwiIGNyaXRlcmlhLCB0aGUgdmVyZGljdCBpcyBjbGVhcjogYFdvcnRoRnV6emluZyA9IGZhbHNlYC4gVGhlcmUgYXJlIG5vIHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzIGFmZmVjdGVkLCBzbyB0aGUgY2hhbmdlcyBpbiB0aGVzZSB0b29scyBhcmUgaXJyZWxldmFudC4gYEVuYWJsZUNvbmZpZ3NgIHdvdWxkIGJlIGVtcHR5LCBhbmQgSSBkb24ndCBzZWUgYW55IGBGb2N1c1N5bWJvbHNgIHRvIGZsYWcuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQuIEknbGwgZ28gYWhlYWQgYW5kIHNldCB0aGUgcmVzdWx0cyBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MDUsIk91dHB1dFRva2VucyI6MTAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6Mjc6MzEuMzY4OTMxNTI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHRvb2xpbmcgYW5kIGJ1aWxkIHNjcmlwdHMgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgcG9ydGluZyB0aGUgcGVyZiBHVEsgVUkgZnJvbSBHVEsyIHRvIEdUSzQgYW5kIG1pbm9yIGhlbHBlciByZWxvY2F0aW9uIGluIHRvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jKS4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IGtlcm5lbC1zcGFjZSBjb2RlLCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHRvb2xpbmcgYW5kIGJ1aWxkIHNjcmlwdHMgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgcG9ydGluZyB0aGUgcGVyZiBHVEsgVUkgZnJvbSBHVEsyIHRvIEdUSzQgYW5kIG1pbm9yIGhlbHBlciByZWxvY2F0aW9uIGluIHRvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jKS4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IGtlcm5lbC1zcGFjZSBjb2RlLCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjoyNzozMS4zNjg5NTUwNTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv88ml[1] Phase: Running StartedAt: 2026-09-07 02:27:42 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv88ml[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-07 02:27:42 +0000 UTC FinishedAt: 2026-09-07 02:27:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}