Name: series-workflowqb2pg Phase: Failed StartedAt: 2026-07-08 16:24:17 +0000 UTC FinishedAt: 2026-07-08 16:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb2pg[0] Phase: Succeeded StartedAt: 2026-07-08 16:24:17 +0000 UTC FinishedAt: 2026-07-08 16:53:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb2pg[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 16:24:17 +0000 UTC FinishedAt: 2026-07-08 16:53:48 +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+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwLiBJdCByZXBsYWNlcyBkaXJlY3QgcmVmY291bnQgaW5jcmVtZW50cyB3aXRoIHRoZSBleGlzdGluZyBgbmV0X3pjb3B5X2dldCgpYCBoZWxwZXIgYW5kIGF2b2lkcyBhIHJlZHVuZGFudCBjaGVjayBieSB1c2luZyBgc2tiX3Vhcmcoc2tiKWAgaW5zdGVhZCBvZiBgc2tiX3pjb3B5KHNrYilgIGFmdGVyIGBza2JfemNvcHkoc2tiKWAgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNjo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRkOWYyYjM4YzMwYWRjYTRjN2FkNDI0NzkwMTY1NmI5MzY0NDQyYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDE2OjUyOjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IDE4ZGFiYjRlOWNmYTBlLi5kNzk4ZmJkYzNkYTdlYyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTIzMjYsNyAmIzQzOzIzMjYsNyBAQCBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcbiBcdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpXG4gXHRcdFx0Z290byBub2ZyYWdzO1xuIFx0XHRpZiAoc2tiX3pjb3B5KHNrYikpXG4tXHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNnNrYl91YXJnKHNrYiktXHUwMDNlcmVmY250KTtcbiYjNDM7XHRcdFx0bmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOylcbiBcdFx0XHRza2JfZnJhZ19yZWYoc2tiLCBpKTtcbiBcbkBAIC02ODQyLDcgJiM0Mzs2ODQyLDcgQEAgc3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0fVxuIFx0XHRpZiAoc2tiX3pjb3B5KHNrYikpXG4tXHRcdFx0bmV0X3pjb3B5X2dldChza2JfemNvcHkoc2tiKSk7XG4mIzQzO1x0XHRcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFnczsgaSYjNDM7JiM0MzspXG4gXHRcdFx0c2tiX2ZyYWdfcmVmKHNrYiwgaSk7XG4gXHRcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpKVxuQEAgLTY5OTIsNyAmIzQzOzY5OTIsNyBAQCBzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdGlmIChza2JfemNvcHkoc2tiKSlcbi1cdFx0bmV0X3pjb3B5X2dldChza2JfemNvcHkoc2tiKSk7XG4mIzQzO1x0XHRuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpO1xuIFx0c2tiX3JlbGVhc2VfZGF0YShza2IsIFNLQl9DT05TVU1FRCk7XG4gXG4gXHRza2ItXHUwMDNlaGVhZCA9IGRhdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nL2NsZWFudXAuIEl0IHJlcGxhY2VzIGRpcmVjdCByZWZjb3VudCBpbmNyZW1lbnRzIHdpdGggdGhlIGV4aXN0aW5nIGBuZXRfemNvcHlfZ2V0KClgIGhlbHBlciBhbmQgYXZvaWRzIGEgcmVkdW5kYW50IGNoZWNrIGJ5IHVzaW5nIGBza2JfdWFyZyhza2IpYCBpbnN0ZWFkIG9mIGBza2JfemNvcHkoc2tiKWAgYWZ0ZXIgYHNrYl96Y29weShza2IpYCBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZDlmMmIzOGMzMGFkY2E0YzdhZDQyNDc5MDE2NTZiOTM2NDQ0MmE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAxNjo1Mjo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggMThkYWJiNGU5Y2ZhMGUuLmQ3OThmYmRjM2RhN2VjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMjMyNiw3ICYjNDM7MjMyNiw3IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLAogCQlpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkKIAkJCWdvdG8gbm9mcmFnczsKIAkJaWYgKHNrYl96Y29weShza2IpKQotCQkJcmVmY291bnRfaW5jKCZhbXA7c2tiX3Vhcmcoc2tiKS0mZ3Q7cmVmY250KTsKJiM0MzsJCQluZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpOwogCQlmb3IgKGkgPSAwOyBpICZsdDsgc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFnczsgaSYjNDM7JiM0MzspCiAJCQlza2JfZnJhZ19yZWYoc2tiLCBpKTsKIApAQCAtNjg0Miw3ICYjNDM7Njg0Miw3IEBAIHN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlpZiAoc2tiX3pjb3B5KHNrYikpCi0JCQluZXRfemNvcHlfZ2V0KHNrYl96Y29weShza2IpKTsKJiM0MzsJCQluZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpOwogCQlmb3IgKGkgPSAwOyBpICZsdDsgc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFnczsgaSYjNDM7JiM0MzspCiAJCQlza2JfZnJhZ19yZWYoc2tiLCBpKTsKIAkJaWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikpCkBAIC02OTkyLDcgJiM0Mzs2OTkyLDcgQEAgc3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZiwKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWlmIChza2JfemNvcHkoc2tiKSkKLQkJbmV0X3pjb3B5X2dldChza2JfemNvcHkoc2tiKSk7CiYjNDM7CQluZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpOwogCXNrYl9yZWxlYXNlX2RhdGEoc2tiLCBTS0JfQ09OU1VNRUQpOwogCiAJc2tiLSZndDtoZWFkID0gZGF0YTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNLQiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL3NrYnVmZi5jYC4gSXQmIzM5O3MgcHJldHR5IGZvY3VzZWQ7IHRoZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgaG93IHdlJiMzOTtyZSBoYW5kbGluZyByZWZlcmVuY2UgY291bnRzIGFuZCB0aGUgJiMzNDt6Y29weSYjMzQ7IGFzcGVjdCBvZiB0aGUgYHNrYnVmZmAgc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIHJlcGxhY2luZyBjYWxscyB0byBgcmVmY291bnRfaW5jYCB3aXRoIGNhbGxzIHRvIGBuZXRfemNvcHlfZ2V0YCBpbiBgcHNrYl9leHBhbmRfaGVhZGAuIEFsc28sIGluIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyYCwgd2UmIzM5O3JlIHN3aXRjaGluZyBmcm9tIGBuZXRfemNvcHlfZ2V0KHNrYl96Y29weShza2IpKWAgdG8gYG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSlgLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcz8gVGhpcyBoYXMgdG8gY2hhbmdlIHNvbWV0aGluZyBpbXBvcnRhbnQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBuZXRfemNvcHlfZ2V0YCwgYHNrYl96Y29weWAsIGFuZCBgc2tiX3VhcmdgLiBJJiMzOTttIGEgYml0IHJ1c3R5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhvc2UsIHRob3VnaCBJJiMzOTt2ZSB3b3JrZWQgd2l0aCB0aGVtIGEgbG90IGluIHRoZSBwYXN0LgoKTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgYHNrYl96Y29weWAgcmV0dXJucyBhIHBvaW50ZXIgdG8gc29tZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGUgemNvcHkgYnVmZmVyLiBIb3dldmVyLCBzb21ldGhpbmcmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBEaWQgaXQgYWN0dWFsbHkgcmV0dXJuIGEgYm9vbGVhbiBpbiBvbGRlciB2ZXJzaW9ucz8gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIGBza2JfemNvcHlgIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLiBUaGlzIGlzIGltcG9ydGFudCwgYXMgaXQgZGV0ZXJtaW5lcyBob3cgdGhpcyBwYXRjaCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3pjb3B5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUzMT1zdHJ1Y3QgdWJ1Zl9pbmZvX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MzMtXHRcdFx0IGJvb2wgemVyb2NvcHlfc3VjY2Vzcyk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUzNDpcdC8qIGhhcyB0byBiZSBjb21wYXRpYmxlIHdpdGggc2tiX3pjb3B5X3NldCgpICovXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUzNS1cdGludCAoKmxpbmtfc2tiKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3ODY9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKnNrYl9od3RzdGFtcHMoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3OTAtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3OTE6c3RhdGljIGlubGluZSBzdHJ1Y3QgdWJ1Zl9pbmZvICpza2JfemNvcHkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc5Mi17XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzk3LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzk4OnN0YXRpYyBpbmxpbmUgYm9vbCBza2JfemNvcHlfcHVyZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzk5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MDItXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4MDM6c3RhdGljIGlubGluZSBib29sIHNrYl96Y29weV9tYW5hZ2VkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MDQte1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTgwOD1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX3B1cmVfemNvcHlfc2FtZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MTAte1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxODExOlx0cmV0dXJuIHNrYl96Y29weV9wdXJlKHNrYjEpID09IHNrYl96Y29weV9wdXJlKHNrYjIpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODEyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE4MTQ9c3RhdGljIGlubGluZSB2b2lkIG5ldF96Y29weV9nZXQoc3RydWN0IHVidWZfaW5mbyAqdWFyZylcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MTgtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4MTk6c3RhdGljIGlubGluZSB2b2lkIHNrYl96Y29weV9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1YnVmX2luZm8gKnVhcmcpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MjAte1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTgyNC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTgyNTpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODI2LVx0XHRcdFx0IGJvb2wgKmhhdmVfcmVmKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODI3LXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTgyODpcdGlmIChza2IgXHUwMDI2XHUwMDI2IHVhcmcgXHUwMDI2XHUwMDI2ICFza2JfemNvcHkoc2tiKSkge1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODI5LVx0XHRpZiAodW5saWtlbHkoaGF2ZV9yZWYgXHUwMDI2XHUwMDI2ICpoYXZlX3JlZikpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODMyLVx0XHRcdG5ldF96Y29weV9nZXQodWFyZyk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4MzM6XHRcdHNrYl96Y29weV9pbml0KHNrYiwgdWFyZyk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MzQtXHR9XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODM2LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxODM3OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfemNvcHlfc2V0X25vdWFyZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICp2YWwpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4Mzgte1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg0Mi1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg0MzpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3pjb3B5X2lzX25vdWFyZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODQ0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4NDctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4NDg6c3RhdGljIGlubGluZSB2b2lkICpza2JfemNvcHlfZ2V0X25vdWFyZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODQ5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE4NTk9c3RhdGljIGlubGluZSB2b2lkIG5ldF96Y29weV9wdXRfYWJvcnQoc3RydWN0IHVidWZfaW5mbyAqdWFyZywgYm9vbCBoYXZlX3VyZWYpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODY5LS8qIFJlbGVhc2UgYSByZWZlcmVuY2Ugb24gYSB6ZXJvY29weSBzdHJ1Y3R1cmUgKi9cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg3MDpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X2NsZWFyKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgemVyb2NvcHlfc3VjY2VzcylcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg3MS17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4NzI6XHRzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnID0gc2tiX3pjb3B5KHNrYik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4NzMtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4NzQtXHRpZiAodWFyZykge1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxODc1Olx0XHRpZiAoIXNrYl96Y29weV9pc19ub3Vhcmcoc2tiKSlcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg3Ni1cdFx0XHR1YXJnLVx1MDAzZW9wcy1cdTAwM2Vjb21wbGV0ZShza2IsIHVhcmcsIHplcm9jb3B5X3N1Y2Nlc3MpO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg4MS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg4Mjp2b2lkIF9fc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODgzLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxODg0OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg4NS17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4ODY6XHRpZiAodW5saWtlbHkoc2tiX3pjb3B5X21hbmFnZWQoc2tiKSkpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4ODc6XHRcdF9fc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4ODgtfVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MzQwOT1zdGF0aWMgaW5saW5lIGludCBza2Jfb3JwaGFuX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNDEwLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzQxMTpcdGlmIChsaWtlbHkoIXNrYl96Y29weShza2IpKSlcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQxMi1cdFx0cmV0dXJuIDA7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zNDE5PXN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Nfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM0MjAte1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozNDIxOlx0aWYgKGxpa2VseSghc2tiX3pjb3B5KHNrYikpKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNDIyLVx0XHRyZXR1cm4gMDtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTM5Nzk9c3RhdGljIGlubGluZSBib29sIHNrYl9jYW5fY29hbGVzY2VfbmV0bWVtKHN0cnVjdCBza19idWZmICpza2IsIGludCBpLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzk4MS17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM5ODI6XHRpZiAoc2tiX3pjb3B5KHNrYikpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM5ODMtXHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjE1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgUGFja2V0IEJ1ZmZlciBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBqdW1wcyBvdXQuIEl0JiMzOTtzIGRlYWxpbmcgd2l0aCB6ZXJvLWNvcHkgb3BlcmF0aW9ucyBvbiBuZXR3b3JrIHNvY2tldCBidWZmZXJzIChTS0JzKS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IHRoZSByZWZlcmVuY2UgY291bnRpbmcgaXMgbWFuYWdlZCwgcGFydGljdWxhcmx5IGZvciBidWZmZXJzIHRoYXQgYXJlIGJlaW5nIHplcm8tY29waWVkLgoKSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSB1c2VkIGByZWZjb3VudF9pbmNgIG9uIGBza2JfdWFyZyhza2IpLSZndDtyZWZjbnRgLiBBbmQgbm93IGl0JiMzOTtzIGNoYW5nZWQgdG8gYG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSlgLiBUaGVuIHRoZXJlJiMzOTtzIGFub3RoZXIgaW5zdGFuY2Ugb2YgdGhlIGNoYW5nZSB3aGVyZSBvcmlnaW5hbGx5IGBuZXRfemNvcHlfZ2V0KHNrYl96Y29weShza2IpKWAgd2FzIHVzZWQsIGFuZCB0aGlzIGlzIGFsc28gY2hhbmdlZCB0byBgbmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKWAuCgpCdXQgd2FpdCBhIHNlY29uZC4uLiBgc2tiX3pjb3B5KHNrYilgICphbHNvKiByZXR1cm5zIGEgYHN0cnVjdCB1YnVmX2luZm8gKmAhIEFuZCBzbyBkb2VzIGBza2JfdWFyZyhza2IpYC4gVGhpcyBtZWFucyB0aGF0IGJvdGggZnVuY3Rpb25zIGFyZSByZXR1cm5pbmcgYSBwb2ludGVyIHRvIHRoZSBzYW1lIGRhdGEsIHRoZSBidWZmZXIgaW5mb3JtYXRpb24uIFRoZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGNhbGxzIHRoYXQgd2VyZSByZWR1bmRhbnQuCgpUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIHBhdGNoIGlzIGNvbnNvbGlkYXRpbmcgaG93IHRoZSByZWZlcmVuY2UgY291bnQgaXMgaGFuZGxlZCwgbGlrZWx5IHRvIGF2b2lkIHBvdGVudGlhbCBkb3VibGUtaW5jcmVtZW50aW5nIGFuZCBzaW1wbGlmeSB0aGUgbG9naWMuIFRoZSBnb2FsIG1pZ2h0IGJlIHRvIGVsaW1pbmF0ZSByZWR1bmRhbnQgY2FsbHMuIEl0IGFwcGVhcnMgdGhlIG5ldCBlZmZlY3QgaXMgY2FsbGluZyB0aGUgY29ycmVjdCBmdW5jdGlvbiwgYnV0IEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYG5ldF96Y29weV9nZXRgIGFuZCB0aGUgU0tCIGludGVybmFscyB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl91YXJnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTU1Mj1zdHJ1Y3QgdWJ1Zl9pbmZvX21zZ3pjIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU3My1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTc0OiNkZWZpbmUgc2tiX3VhcmcoU0tCKVx0KChzdHJ1Y3QgdWJ1Zl9pbmZvICopKHNrYl9zaGluZm8oU0tCKS1cdTAwM2VkZXN0cnVjdG9yX2FyZykpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU3NS0jZGVmaW5lIHVhcmdfdG9fbXNnemModWJ1Zl9wdHIpXHRjb250YWluZXJfb2YoKHVidWZfcHRyKSwgc3RydWN0IHVidWZfaW5mb19tc2d6YywgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3OTE9c3RhdGljIGlubGluZSBzdHJ1Y3QgdWJ1Zl9pbmZvICpza2JfemNvcHkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3OTQtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3OTU6XHRyZXR1cm4gaXNfemNvcHkgPyBza2JfdWFyZyhza2IpIDogTlVMTDtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc5Ni19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM5NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFplcm8tQ29weSBQYXRoIGluIFNLQiBIYW5kbGluZyoqCgpPa2F5LCBzbyBgc2tiX3pjb3B5KHNrYilgIGlzIHN1cHBvc2VkIHRvIHJldHVybiBgc2tiX3Vhcmcoc2tiKWAgaWYgdGhlIHplcm8tY29weSBjb25kaXRpb24gaXMgbWV0LCBvdGhlcndpc2UgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gYmUgYE5VTExgLiBCdXQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIGJlY2F1c2UgSSB0aGluayBgc2tiX3pjb3B5X2lzX25vdWFyZyhza2IpYCBpcyBpbiBwbGF5IGhlcmUuIElmIGBza2JfemNvcHlfaXNfbm91YXJnKHNrYilgIGlzIHRydWUsIGRvZXMgdGhhdCBmb3JjZSBgc2tiX3pjb3B5KHNrYilgIHRvIHJldHVybiBgTlVMTGA/IEkgZG9uJiMzOTt0IHRoaW5rIHRoYXQgaXMgcmlnaHQsIEkgaGFkIGJldHRlciByZXZpZXcgdGhlIGNvZGUgZm9yIGBza2JfemNvcHlgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc5MDpcdFxuMTc5MTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHVidWZfaW5mbyAqc2tiX3pjb3B5KHN0cnVjdCBza19idWZmICpza2IpXG4xNzkyOlx0e1xuMTc5MzpcdFx0Ym9vbCBpc196Y29weSA9IHNrYiBcdTAwMjZcdTAwMjYgc2tiX3NoaW5mbyhza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBTS0JGTF9aRVJPQ09QWV9FTkFCTEU7XG4xNzk0Olx0XG4xNzk1Olx0XHRyZXR1cm4gaXNfemNvcHkgPyBza2JfdWFyZyhza2IpIDogTlVMTDtcbjE3OTY6XHR9XG4xNzk3Olx0XG4xNzk4Olx0c3RhdGljIGlubGluZSBib29sIHNrYl96Y29weV9wdXJlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4xNzk5Olx0e1xuMTgwMDpcdFx0cmV0dXJuIHNrYl9zaGluZm8oc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgU0tCRkxfUFVSRV9aRVJPQ09QWTtcbjE4MDE6XHR9XG4xODAyOlx0XG4xODAzOlx0c3RhdGljIGlubGluZSBib29sIHNrYl96Y29weV9tYW5hZ2VkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4xODA0Olx0e1xuMTgwNTpcdFx0cmV0dXJuIHNrYl9zaGluZm8oc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlM7XG4xODA2Olx0fVxuMTgwNzpcdFxuMTgwODpcdHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfcHVyZV96Y29weV9zYW1lKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IxLFxuMTgwOTpcdFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgQ3VyaW91cyBQYXRjaCBDaGFuZ2UqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhpcyBgc2tiX3pjb3B5KHNrYilgIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGBza2JfdWFyZyhza2IpYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIFNvLCBpbiBlZmZlY3QsIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBpcyByZXBsYWNpbmcgYG5ldF96Y29weV9nZXQoc2tiX3pjb3B5KHNrYikpYCB3aXRoIGBuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpYC4gU2VlbXMgbGlrZSBpdCBzaG91bGQgYmUgdGhlIHNhbWUsIHNvIEkgYW0gd29uZGVyaW5nIHdoeSB0aGF0IHdhcyBldmVuIGNoYW5nZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGlzIGp1c3Qgc2VlbXMgbGlrZSBhIG5lZWRsZXNzIHJlZmFjdG9yaW5nLiBVbmxlc3MgSSBhbSBtaXNzaW5nIHNvbWV0aGluZyBzdWJ0bGUuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmV0X3pjb3B5X2dldGAuIExldCBtZSBkaXZlIGludG8gdGhhdCBjb2RlIGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYW4gYWN0dWFsIHNlbWFudGljIGRpZmZlcmVuY2UgaGVyZSB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgxMDpcdHtcbjE4MTE6XHRcdHJldHVybiBza2JfemNvcHlfcHVyZShza2IxKSA9PSBza2JfemNvcHlfcHVyZShza2IyKTtcbjE4MTI6XHR9XG4xODEzOlx0XG4xODE0Olx0c3RhdGljIGlubGluZSB2b2lkIG5ldF96Y29weV9nZXQoc3RydWN0IHVidWZfaW5mbyAqdWFyZylcbjE4MTU6XHR7XG4xODE2Olx0XHRyZWZjb3VudF9pbmMoXHUwMDI2dWFyZy1cdTAwM2VyZWZjbnQpO1xuMTgxNzpcdH1cbjE4MTg6XHRcbjE4MTk6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHVidWZfaW5mbyAqdWFyZylcbjE4MjA6XHR7XG4xODIxOlx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGVzdHJ1Y3Rvcl9hcmcgPSB1YXJnO1xuMTgyMjpcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZsYWdzIHw9IHVhcmctXHUwMDNlZmxhZ3M7XG4xODIzOlx0fVxuMTgyNDpcdFxuMTgyNTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfemNvcHlfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1YnVmX2luZm8gKnVhcmcsXG4xODI2Olx0XHRcdFx0XHQgYm9vbCAqaGF2ZV9yZWYpXG4xODI3Olx0e1xuMTgyODpcdFx0aWYgKHNrYiBcdTAwMjZcdTAwMjYgdWFyZyBcdTAwMjZcdTAwMjYgIXNrYl96Y29weShza2IpKSB7XG4xODI5Olx0XHRcdGlmICh1bmxpa2VseShoYXZlX3JlZiBcdTAwMjZcdTAwMjYgKmhhdmVfcmVmKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY4MgoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiAxMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgTWlub3IgUmVmYWN0b3JpbmcgYW5kIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVzZSBhcmUgcHVyZSByZWZhY3RvcmluZ3MuIFRoZSBmaXJzdCBjaGFuZ2UgcmVwbGFjZXMgYHJlZmNvdW50X2luYygmYW1wO3NrYl91YXJnKHNrYiktJmd0O3JlZmNudClgIHdpdGggYG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSlgLiAgU2luY2UgYG5ldF96Y29weV9nZXRgIGlzIGxpdGVyYWxseSBqdXN0IGFuIGFsaWFzIGZvciBgcmVmY291bnRfaW5jYCwgdGhpcyBpcyBhIHN0cmFpZ2h0IHN3YXAsIGZ1bmN0aW9uYWxseSBpZGVudGljYWwuCgpUaGUgc2Vjb25kIGNoYW5nZSBpcyB3aGVyZSBpdCBnZXRzIHNsaWdodGx5IG1vcmUgaW50ZXJlc3RpbmcuICBXZSYjMzk7cmUgZ29pbmcgZnJvbSBgbmV0X3pjb3B5X2dldChza2JfemNvcHkoc2tiKSlgIHRvIGBuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpYC4gIExvb2tpbmcgYXQgYHNrYl96Y29weShza2IpYCwgaXQgZXNzZW50aWFsbHkgY2hlY2tzIGlmIHplcm8tY29weSBpcyBlbmFibGVkIGFuZCB0aGVuIHJldHVybnMgYHNrYl91YXJnKHNrYilgIGlmIGl0IGlzLCBhbmQgTlVMTCBvdGhlcndpc2UuICBTbywgaWYgYHNrYl96Y29weShza2IpYCBpcyB0cnVlLCB0aGUgdHdvIGNhbGxzIGFyZSBlcXVpdmFsZW50LiAgVGhlcmVmb3JlLCB0aGlzIGlzIGEgY29zbWV0aWMvcmVmYWN0b3JpbmcgY2hhbmdlIHRoYXQgYXZvaWRzIGEgcmVkdW5kYW50IGNoZWNrLgoKTm93LCBsZXQmIzM5O3MgZGlnIGEgYml0IGRlZXBlci4gIGBza2JfdWFyZ2AgaXMgYSBtYWNybywgYW5kIGBza2JfemNvcHlgIGlzIGFuIGlubGluZSBmdW5jdGlvbi4gVXNpbmcgYHNrYl91YXJnYCBkaXJlY3RseSBhdm9pZHMgdGhlIGV4dHJhIGNoZWNrIHdpdGhpbiBgc2tiX3pjb3B5YCBiZWNhdXNlIHdlIGFscmVhZHkga25vdyB0aGF0IGBza2JfemNvcHkoc2tiKWAgaXMgdHJ1ZS4gU28gaXQmIzM5O3MgYSBtaW5vciBvcHRpbWl6YXRpb24gdGhhdCBjbGVhbnMgdXAgdGhlIGNvZGUgYSBiaXQuIEl0IGRvZXNuJiMzOTt0IG1vZGlmeSBleGVjdXRpb24gZmxvdyBvciBmdW5jdGlvbmFsIGxvZ2ljIGluIGFueSB3YXkgdGhhdCByZXF1aXJlcyBmdXp6aW5nLgoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhlIGRpZmYgcHJvdmlkZWQgYW5kIGNvbmZpcm0gdGhpcyBpcyBjb25zaXN0ZW50bHkgYSBjbGVhbnVwIGFjcm9zcyBtdWx0aXBsZSBjb2RlIGxvY2F0aW9ucy4gIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhIHJlZmFjdG9yaW5nIHRvIG1ha2UgdGhlIGNvZGUgY2xlYXJlciBhbmQgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgYnkgYXZvaWRpbmcgcmVkdW5kYW50IGNoZWNrcy4gVGhlcmVmb3JlIEkgd2lsbCBjb25jbHVkZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcvY2xlYW51cC4gSXQgcmVwbGFjZXMgZGlyZWN0IHJlZmNvdW50IGluY3JlbWVudHMgd2l0aCB0aGUgZXhpc3RpbmcgYG5ldF96Y29weV9nZXQoKWAgaGVscGVyIGFuZCBhdm9pZHMgYSByZWR1bmRhbnQgY2hlY2sgYnkgdXNpbmcgYHNrYl91YXJnKHNrYilgIGluc3RlYWQgb2YgYHNrYl96Y29weShza2IpYCBhZnRlciBgc2tiX3pjb3B5KHNrYilgIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZC4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwLiBJdCByZXBsYWNlcyBkaXJlY3QgcmVmY291bnQgaW5jcmVtZW50cyB3aXRoIHRoZSBleGlzdGluZyBgbmV0X3pjb3B5X2dldCgpYCBoZWxwZXIgYW5kIGF2b2lkcyBhIHJlZHVuZGFudCBjaGVjayBieSB1c2luZyBgc2tiX3Vhcmcoc2tiKWAgaW5zdGVhZCBvZiBgc2tiX3pjb3B5KHNrYilgIGFmdGVyIGBza2JfemNvcHkoc2tiKWAgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUyOjQ4LjExNDE4ODk3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Mjg5NzQ5ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcvY2xlYW51cC4gSXQgcmVwbGFjZXMgZGlyZWN0IHJlZmNvdW50IGluY3JlbWVudHMgd2l0aCB0aGUgZXhpc3RpbmcgYG5ldF96Y29weV9nZXQoKWAgaGVscGVyIGFuZCBhdm9pZHMgYSByZWR1bmRhbnQgY2hlY2sgYnkgdXNpbmcgYHNrYl91YXJnKHNrYilgIGluc3RlYWQgb2YgYHNrYl96Y29weShza2IpYCBhZnRlciBgc2tiX3pjb3B5KHNrYilgIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZC4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUyOjQ4LjExNDE5NzE2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA3MzkyMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGQ5ZjJiMzhjMzBhZGNhNGM3YWQ0MjQ3OTAxNjU2YjkzNjQ0NDJhNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCA4IDE2OjUyOjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5pbmRleCAxOGRhYmI0ZTljZmEwZS4uZDc5OGZiZGMzZGE3ZWMgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xcbkBAIC0yMzI2LDcgKzIzMjYsNyBAQCBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcXG4gXFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpXFxuIFxcdFxcdFxcdGdvdG8gbm9mcmFncztcXG4gXFx0XFx0aWYgKHNrYl96Y29weShza2IpKVxcbi1cXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnNrYl91YXJnKHNrYiktXFx1MDAzZXJlZmNudCk7XFxuK1xcdFxcdFxcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzOyBpKyspXFxuIFxcdFxcdFxcdHNrYl9mcmFnX3JlZihza2IsIGkpO1xcbiBcXG5AQCAtNjg0Miw3ICs2ODQyLDcgQEAgc3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKHNrYl96Y29weShza2IpKVxcbi1cXHRcXHRcXHRuZXRfemNvcHlfZ2V0KHNrYl96Y29weShza2IpKTtcXG4rXFx0XFx0XFx0bmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKTtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3M7IGkrKylcXG4gXFx0XFx0XFx0c2tiX2ZyYWdfcmVmKHNrYiwgaSk7XFxuIFxcdFxcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpKVxcbkBAIC02OTkyLDcgKzY5OTIsNyBAQCBzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXHRpZiAoc2tiX3pjb3B5KHNrYikpXFxuLVxcdFxcdG5ldF96Y29weV9nZXQoc2tiX3pjb3B5KHNrYikpO1xcbitcXHRcXHRuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpO1xcbiBcXHRza2JfcmVsZWFzZV9kYXRhKHNrYiwgU0tCX0NPTlNVTUVEKTtcXG4gXFxuIFxcdHNrYi1cXHUwMDNlaGVhZCA9IGRhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUyOjQ4LjkyMjY4MjUyOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0ODEyNDU3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwLiBJdCByZXBsYWNlcyBkaXJlY3QgcmVmY291bnQgaW5jcmVtZW50cyB3aXRoIHRoZSBleGlzdGluZyBgbmV0X3pjb3B5X2dldCgpYCBoZWxwZXIgYW5kIGF2b2lkcyBhIHJlZHVuZGFudCBjaGVjayBieSB1c2luZyBgc2tiX3Vhcmcoc2tiKWAgaW5zdGVhZCBvZiBgc2tiX3pjb3B5KHNrYilgIGFmdGVyIGBza2JfemNvcHkoc2tiKWAgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0ZDlmMmIzOGMzMGFkY2E0YzdhZDQyNDc5MDE2NTZiOTM2NDQ0MmE2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxNjo1Mjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IDE4ZGFiYjRlOWNmYTBlLi5kNzk4ZmJkYzNkYTdlYyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTIzMjYsNyArMjMyNiw3IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxuIFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSlcbiBcdFx0XHRnb3RvIG5vZnJhZ3M7XG4gXHRcdGlmIChza2JfemNvcHkoc2tiKSlcbi1cdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2c2tiX3Vhcmcoc2tiKS1cdTAwM2VyZWZjbnQpO1xuK1x0XHRcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFnczsgaSsrKVxuIFx0XHRcdHNrYl9mcmFnX3JlZihza2IsIGkpO1xuIFxuQEAgLTY4NDIsNyArNjg0Miw3IEBAIHN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbiBcdFx0aWYgKHNrYl96Y29weShza2IpKVxuLVx0XHRcdG5ldF96Y29weV9nZXQoc2tiX3pjb3B5KHNrYikpO1xuK1x0XHRcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFnczsgaSsrKVxuIFx0XHRcdHNrYl9mcmFnX3JlZihza2IsIGkpO1xuIFx0XHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSlcbkBAIC02OTkyLDcgKzY5OTIsNyBAQCBzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdGlmIChza2JfemNvcHkoc2tiKSlcbi1cdFx0bmV0X3pjb3B5X2dldChza2JfemNvcHkoc2tiKSk7XG4rXHRcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XG4gXHRza2JfcmVsZWFzZV9kYXRhKHNrYiwgU0tCX0NPTlNVTUVEKTtcbiBcbiBcdHNrYi1cdTAwM2VoZWFkID0gZGF0YTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUyOjQ4LjkyMjY4NTE2OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMjk3MDgxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTS0IgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvc2tidWZmLmNgLiBJdCdzIHByZXR0eSBmb2N1c2VkOyB0aGUgY2hhbmdlcyBhcmUgYWxsIGFib3V0IGhvdyB3ZSdyZSBoYW5kbGluZyByZWZlcmVuY2UgY291bnRzIGFuZCB0aGUgXCJ6Y29weVwiIGFzcGVjdCBvZiB0aGUgYHNrYnVmZmAgc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugd2UncmUgcmVwbGFjaW5nIGNhbGxzIHRvIGByZWZjb3VudF9pbmNgIHdpdGggY2FsbHMgdG8gYG5ldF96Y29weV9nZXRgIGluIGBwc2tiX2V4cGFuZF9oZWFkYC4gQWxzbywgaW4gYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXJgLCB3ZSdyZSBzd2l0Y2hpbmcgZnJvbSBgbmV0X3pjb3B5X2dldChza2JfemNvcHkoc2tiKSlgIHRvIGBuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzPyBUaGlzIGhhcyB0byBjaGFuZ2Ugc29tZXRoaW5nIGltcG9ydGFudC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHdoYXQncyBnb2luZyBvbiB3aXRoIGBuZXRfemNvcHlfZ2V0YCwgYHNrYl96Y29weWAsIGFuZCBgc2tiX3VhcmdgLiBJJ20gYSBiaXQgcnVzdHkgb24gdGhlIHNwZWNpZmljcyBvZiB0aG9zZSwgdGhvdWdoIEkndmUgd29ya2VkIHdpdGggdGhlbSBhIGxvdCBpbiB0aGUgcGFzdC5cblxuTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgYHNrYl96Y29weWAgcmV0dXJucyBhIHBvaW50ZXIgdG8gc29tZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGUgemNvcHkgYnVmZmVyLiBIb3dldmVyLCBzb21ldGhpbmcncyBub3QgcXVpdGUgcmlnaHQuIERpZCBpdCBhY3R1YWxseSByZXR1cm4gYSBib29sZWFuIGluIG9sZGVyIHZlcnNpb25zPyBMZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgYHNrYl96Y29weWAgZGVmaW5pdGlvbiBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBpdCBkZXRlcm1pbmVzIGhvdyB0aGlzIHBhdGNoIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUyOjUzLjk1MjQ2MDAzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODM5OTE2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3pjb3B5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MzE9c3RydWN0IHVidWZfaW5mb19vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MzMtXFx0XFx0XFx0IGJvb2wgemVyb2NvcHlfc3VjY2Vzcyk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MzQ6XFx0LyogaGFzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBza2JfemNvcHlfc2V0KCkgKi9cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUzNS1cXHRpbnQgKCpsaW5rX3NrYikoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHVidWZfaW5mbyAqdWFyZyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3ODY9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKnNrYl9od3RzdGFtcHMoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc5MC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3OTE6c3RhdGljIGlubGluZSBzdHJ1Y3QgdWJ1Zl9pbmZvICpza2JfemNvcHkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3OTIte1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzk3LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc5ODpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3pjb3B5X3B1cmUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3OTkte1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODAyLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTgwMzpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3pjb3B5X21hbmFnZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MDQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xODA4PXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfcHVyZV96Y29weV9zYW1lKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IxLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODEwLXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4MTE6XFx0cmV0dXJuIHNrYl96Y29weV9wdXJlKHNrYjEpID09IHNrYl96Y29weV9wdXJlKHNrYjIpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTgxMi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE4MTQ9c3RhdGljIGlubGluZSB2b2lkIG5ldF96Y29weV9nZXQoc3RydWN0IHVidWZfaW5mbyAqdWFyZylcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTgxOC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4MTk6c3RhdGljIGlubGluZSB2b2lkIHNrYl96Y29weV9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1YnVmX2luZm8gKnVhcmcpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODIwLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTgyNC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4MjU6c3RhdGljIGlubGluZSB2b2lkIHNrYl96Y29weV9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHVidWZfaW5mbyAqdWFyZyxcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MjYtXFx0XFx0XFx0XFx0IGJvb2wgKmhhdmVfcmVmKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTgyNy17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxODI4OlxcdGlmIChza2IgXFx1MDAyNlxcdTAwMjYgdWFyZyBcXHUwMDI2XFx1MDAyNiAhc2tiX3pjb3B5KHNrYikpIHtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MjktXFx0XFx0aWYgKHVubGlrZWx5KGhhdmVfcmVmIFxcdTAwMjZcXHUwMDI2ICpoYXZlX3JlZikpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MzItXFx0XFx0XFx0bmV0X3pjb3B5X2dldCh1YXJnKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4MzM6XFx0XFx0c2tiX3pjb3B5X2luaXQoc2tiLCB1YXJnKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MzQtXFx0fVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODM2LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTgzNzpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X3NldF9ub3Vhcmcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqdmFsKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTgzOC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4NDItXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxODQzOnN0YXRpYyBpbmxpbmUgYm9vbCBza2JfemNvcHlfaXNfbm91YXJnKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODQ0LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg0Ny1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4NDg6c3RhdGljIGlubGluZSB2b2lkICpza2JfemNvcHlfZ2V0X25vdWFyZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg0OS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE4NTk9c3RhdGljIGlubGluZSB2b2lkIG5ldF96Y29weV9wdXRfYWJvcnQoc3RydWN0IHVidWZfaW5mbyAqdWFyZywgYm9vbCBoYXZlX3VyZWYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4NjktLyogUmVsZWFzZSBhIHJlZmVyZW5jZSBvbiBhIHplcm9jb3B5IHN0cnVjdHVyZSAqL1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg3MDpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X2NsZWFyKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgemVyb2NvcHlfc3VjY2VzcylcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4NzEte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg3MjpcXHRzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnID0gc2tiX3pjb3B5KHNrYik7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODczLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg3NC1cXHRpZiAodWFyZykge1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg3NTpcXHRcXHRpZiAoIXNrYl96Y29weV9pc19ub3Vhcmcoc2tiKSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4NzYtXFx0XFx0XFx0dWFyZy1cXHUwMDNlb3BzLVxcdTAwM2Vjb21wbGV0ZShza2IsIHVhcmcsIHplcm9jb3B5X3N1Y2Nlc3MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODgxLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg4Mjp2b2lkIF9fc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg4My1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4ODQ6c3RhdGljIGlubGluZSB2b2lkIHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg4NS17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxODg2OlxcdGlmICh1bmxpa2VseShza2JfemNvcHlfbWFuYWdlZChza2IpKSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4ODc6XFx0XFx0X19za2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4ODgtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zNDA5PXN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNDEwLXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM0MTE6XFx0aWYgKGxpa2VseSghc2tiX3pjb3B5KHNrYikpKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQxMi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MzQxOT1zdGF0aWMgaW5saW5lIGludCBza2Jfb3JwaGFuX2ZyYWdzX3J4KHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQyMC17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozNDIxOlxcdGlmIChsaWtlbHkoIXNrYl96Y29weShza2IpKSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM0MjItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTM5Nzk9c3RhdGljIGlubGluZSBib29sIHNrYl9jYW5fY29hbGVzY2VfbmV0bWVtKHN0cnVjdCBza19idWZmICpza2IsIGludCBpLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zOTgxLXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM5ODI6XFx0aWYgKHNrYl96Y29weShza2IpKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzk4My1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUyOjU0LjUzNjQ2MTM3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxOTIyOTMzNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgUGFja2V0IEJ1ZmZlciBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzb21ldGhpbmcganVtcHMgb3V0LiBJdCdzIGRlYWxpbmcgd2l0aCB6ZXJvLWNvcHkgb3BlcmF0aW9ucyBvbiBuZXR3b3JrIHNvY2tldCBidWZmZXJzIChTS0JzKS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IHRoZSByZWZlcmVuY2UgY291bnRpbmcgaXMgbWFuYWdlZCwgcGFydGljdWxhcmx5IGZvciBidWZmZXJzIHRoYXQgYXJlIGJlaW5nIHplcm8tY29waWVkLlxuXG5JIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHJlZmNvdW50X2luY2Agb24gYHNrYl91YXJnKHNrYiktXHUwMDNlcmVmY250YC4gQW5kIG5vdyBpdCdzIGNoYW5nZWQgdG8gYG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSlgLiBUaGVuIHRoZXJlJ3MgYW5vdGhlciBpbnN0YW5jZSBvZiB0aGUgY2hhbmdlIHdoZXJlIG9yaWdpbmFsbHkgYG5ldF96Y29weV9nZXQoc2tiX3pjb3B5KHNrYikpYCB3YXMgdXNlZCwgYW5kIHRoaXMgaXMgYWxzbyBjaGFuZ2VkIHRvIGBuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpYC5cblxuQnV0IHdhaXQgYSBzZWNvbmQuLi4gYHNrYl96Y29weShza2IpYCAqYWxzbyogcmV0dXJucyBhIGBzdHJ1Y3QgdWJ1Zl9pbmZvICpgISBBbmQgc28gZG9lcyBgc2tiX3Vhcmcoc2tiKWAuIFRoaXMgbWVhbnMgdGhhdCBib3RoIGZ1bmN0aW9ucyBhcmUgcmV0dXJuaW5nIGEgcG9pbnRlciB0byB0aGUgc2FtZSBkYXRhLCB0aGUgYnVmZmVyIGluZm9ybWF0aW9uLiBUaGUgY2hhbmdlIGlzIHJlcGxhY2luZyBjYWxscyB0aGF0IHdlcmUgcmVkdW5kYW50LlxuXG5UaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIHBhdGNoIGlzIGNvbnNvbGlkYXRpbmcgaG93IHRoZSByZWZlcmVuY2UgY291bnQgaXMgaGFuZGxlZCwgbGlrZWx5IHRvIGF2b2lkIHBvdGVudGlhbCBkb3VibGUtaW5jcmVtZW50aW5nIGFuZCBzaW1wbGlmeSB0aGUgbG9naWMuIFRoZSBnb2FsIG1pZ2h0IGJlIHRvIGVsaW1pbmF0ZSByZWR1bmRhbnQgY2FsbHMuIEl0IGFwcGVhcnMgdGhlIG5ldCBlZmZlY3QgaXMgY2FsbGluZyB0aGUgY29ycmVjdCBmdW5jdGlvbiwgYnV0IEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYG5ldF96Y29weV9nZXRgIGFuZCB0aGUgU0tCIGludGVybmFscyB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjE1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUzOjE2LjQ1OTQxODQ0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg0MjMxODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3VhcmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTU1Mj1zdHJ1Y3QgdWJ1Zl9pbmZvX21zZ3pjIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTczLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTc0OiNkZWZpbmUgc2tiX3VhcmcoU0tCKVxcdCgoc3RydWN0IHVidWZfaW5mbyAqKShza2Jfc2hpbmZvKFNLQiktXFx1MDAzZWRlc3RydWN0b3JfYXJnKSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU3NS0jZGVmaW5lIHVhcmdfdG9fbXNnemModWJ1Zl9wdHIpXFx0Y29udGFpbmVyX29mKCh1YnVmX3B0ciksIHN0cnVjdCB1YnVmX2luZm9fbXNnemMsIFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc5MT1zdGF0aWMgaW5saW5lIHN0cnVjdCB1YnVmX2luZm8gKnNrYl96Y29weShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzk0LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc5NTpcXHRyZXR1cm4gaXNfemNvcHkgPyBza2JfdWFyZyhza2IpIDogTlVMTDtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3OTYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNjo1MzoxNi41OTc4NTAyMDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM3MDcyMjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgWmVyby1Db3B5IFBhdGggaW4gU0tCIEhhbmRsaW5nKipcblxuT2theSwgc28gYHNrYl96Y29weShza2IpYCBpcyBzdXBwb3NlZCB0byByZXR1cm4gYHNrYl91YXJnKHNrYilgIGlmIHRoZSB6ZXJvLWNvcHkgY29uZGl0aW9uIGlzIG1ldCwgb3RoZXJ3aXNlIGl0J3Mgc3VwcG9zZWQgdG8gYmUgYE5VTExgLiBCdXQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIGJlY2F1c2UgSSB0aGluayBgc2tiX3pjb3B5X2lzX25vdWFyZyhza2IpYCBpcyBpbiBwbGF5IGhlcmUuIElmIGBza2JfemNvcHlfaXNfbm91YXJnKHNrYilgIGlzIHRydWUsIGRvZXMgdGhhdCBmb3JjZSBgc2tiX3pjb3B5KHNrYilgIHRvIHJldHVybiBgTlVMTGA/IEkgZG9uJ3QgdGhpbmsgdGhhdCBpcyByaWdodCwgSSBoYWQgYmV0dGVyIHJldmlldyB0aGUgY29kZSBmb3IgYHNrYl96Y29weWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzOTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6NTM6MjAuMzM0OTI2MzQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTc5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc5MDpcXHRcXG4xNzkxOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHVidWZfaW5mbyAqc2tiX3pjb3B5KHN0cnVjdCBza19idWZmICpza2IpXFxuMTc5MjpcXHR7XFxuMTc5MzpcXHRcXHRib29sIGlzX3pjb3B5ID0gc2tiIFxcdTAwMjZcXHUwMDI2IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTS0JGTF9aRVJPQ09QWV9FTkFCTEU7XFxuMTc5NDpcXHRcXG4xNzk1OlxcdFxcdHJldHVybiBpc196Y29weSA/IHNrYl91YXJnKHNrYikgOiBOVUxMO1xcbjE3OTY6XFx0fVxcbjE3OTc6XFx0XFxuMTc5ODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3pjb3B5X3B1cmUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNzk5OlxcdHtcXG4xODAwOlxcdFxcdHJldHVybiBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0tCRkxfUFVSRV9aRVJPQ09QWTtcXG4xODAxOlxcdH1cXG4xODAyOlxcdFxcbjE4MDM6XFx0c3RhdGljIGlubGluZSBib29sIHNrYl96Y29weV9tYW5hZ2VkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMTgwNDpcXHR7XFxuMTgwNTpcXHRcXHRyZXR1cm4gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNLQkZMX01BTkFHRURfRlJBR19SRUZTO1xcbjE4MDY6XFx0fVxcbjE4MDc6XFx0XFxuMTgwODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3B1cmVfemNvcHlfc2FtZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMSxcXG4xODA5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6NTM6MjAuMzM1MTkzODI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NjUwNzE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgQ3VyaW91cyBQYXRjaCBDaGFuZ2UqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBUaGlzIGBza2JfemNvcHkoc2tiKWAgZnVuY3Rpb24sIGl0IHJldHVybnMgYHNrYl91YXJnKHNrYilgLiBUaGF0J3MgaW1wb3J0YW50LiBTbywgaW4gZWZmZWN0LCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgaXMgcmVwbGFjaW5nIGBuZXRfemNvcHlfZ2V0KHNrYl96Y29weShza2IpKWAgd2l0aCBgbmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKWAuIFNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIHRoZSBzYW1lLCBzbyBJIGFtIHdvbmRlcmluZyB3aHkgdGhhdCB3YXMgZXZlbiBjaGFuZ2VkIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhpcyBqdXN0IHNlZW1zIGxpa2UgYSBuZWVkbGVzcyByZWZhY3RvcmluZy4gVW5sZXNzIEkgYW0gbWlzc2luZyBzb21ldGhpbmcgc3VidGxlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmV0X3pjb3B5X2dldGAuIExldCBtZSBkaXZlIGludG8gdGhhdCBjb2RlIGFuZCBzZWUgaWYgdGhlcmUncyBhbiBhY3R1YWwgc2VtYW50aWMgZGlmZmVyZW5jZSBoZXJlIHRoYXQgSSdtIG92ZXJsb29raW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNjo1MzoyMy41ODE3MDUwNjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA1MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTgxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgxMDpcXHR7XFxuMTgxMTpcXHRcXHRyZXR1cm4gc2tiX3pjb3B5X3B1cmUoc2tiMSkgPT0gc2tiX3pjb3B5X3B1cmUoc2tiMik7XFxuMTgxMjpcXHR9XFxuMTgxMzpcXHRcXG4xODE0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRfemNvcHlfZ2V0KHN0cnVjdCB1YnVmX2luZm8gKnVhcmcpXFxuMTgxNTpcXHR7XFxuMTgxNjpcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnVhcmctXFx1MDAzZXJlZmNudCk7XFxuMTgxNzpcXHR9XFxuMTgxODpcXHRcXG4xODE5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfemNvcHlfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnKVxcbjE4MjA6XFx0e1xcbjE4MjE6XFx0XFx0c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkZXN0cnVjdG9yX2FyZyA9IHVhcmc7XFxuMTgyMjpcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZsYWdzIHw9IHVhcmctXFx1MDAzZWZsYWdzO1xcbjE4MjM6XFx0fVxcbjE4MjQ6XFx0XFxuMTgyNTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnLFxcbjE4MjY6XFx0XFx0XFx0XFx0XFx0IGJvb2wgKmhhdmVfcmVmKVxcbjE4Mjc6XFx0e1xcbjE4Mjg6XFx0XFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiB1YXJnIFxcdTAwMjZcXHUwMDI2ICFza2JfemNvcHkoc2tiKSkge1xcbjE4Mjk6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGhhdmVfcmVmIFxcdTAwMjZcXHUwMDI2ICpoYXZlX3JlZikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUzOjIzLjU4MjMxNjg2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjgyMTU1MTI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBBIE1pbm9yIFJlZmFjdG9yaW5nIGFuZCBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGFyZSBwdXJlIHJlZmFjdG9yaW5ncy4gVGhlIGZpcnN0IGNoYW5nZSByZXBsYWNlcyBgcmVmY291bnRfaW5jKFx1MDAyNnNrYl91YXJnKHNrYiktXHUwMDNlcmVmY250KWAgd2l0aCBgbmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKWAuICBTaW5jZSBgbmV0X3pjb3B5X2dldGAgaXMgbGl0ZXJhbGx5IGp1c3QgYW4gYWxpYXMgZm9yIGByZWZjb3VudF9pbmNgLCB0aGlzIGlzIGEgc3RyYWlnaHQgc3dhcCwgZnVuY3Rpb25hbGx5IGlkZW50aWNhbC5cblxuVGhlIHNlY29uZCBjaGFuZ2UgaXMgd2hlcmUgaXQgZ2V0cyBzbGlnaHRseSBtb3JlIGludGVyZXN0aW5nLiAgV2UncmUgZ29pbmcgZnJvbSBgbmV0X3pjb3B5X2dldChza2JfemNvcHkoc2tiKSlgIHRvIGBuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpYC4gIExvb2tpbmcgYXQgYHNrYl96Y29weShza2IpYCwgaXQgZXNzZW50aWFsbHkgY2hlY2tzIGlmIHplcm8tY29weSBpcyBlbmFibGVkIGFuZCB0aGVuIHJldHVybnMgYHNrYl91YXJnKHNrYilgIGlmIGl0IGlzLCBhbmQgTlVMTCBvdGhlcndpc2UuICBTbywgaWYgYHNrYl96Y29weShza2IpYCBpcyB0cnVlLCB0aGUgdHdvIGNhbGxzIGFyZSBlcXVpdmFsZW50LiAgVGhlcmVmb3JlLCB0aGlzIGlzIGEgY29zbWV0aWMvcmVmYWN0b3JpbmcgY2hhbmdlIHRoYXQgYXZvaWRzIGEgcmVkdW5kYW50IGNoZWNrLlxuXG5Ob3csIGxldCdzIGRpZyBhIGJpdCBkZWVwZXIuICBgc2tiX3VhcmdgIGlzIGEgbWFjcm8sIGFuZCBgc2tiX3pjb3B5YCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24uIFVzaW5nIGBza2JfdWFyZ2AgZGlyZWN0bHkgYXZvaWRzIHRoZSBleHRyYSBjaGVjayB3aXRoaW4gYHNrYl96Y29weWAgYmVjYXVzZSB3ZSBhbHJlYWR5IGtub3cgdGhhdCBgc2tiX3pjb3B5KHNrYilgIGlzIHRydWUuIFNvIGl0J3MgYSBtaW5vciBvcHRpbWl6YXRpb24gdGhhdCBjbGVhbnMgdXAgdGhlIGNvZGUgYSBiaXQuIEl0IGRvZXNuJ3QgbW9kaWZ5IGV4ZWN1dGlvbiBmbG93IG9yIGZ1bmN0aW9uYWwgbG9naWMgaW4gYW55IHdheSB0aGF0IHJlcXVpcmVzIGZ1enppbmcuXG5cbkkndmUgZG91YmxlLWNoZWNrZWQgdGhlIGRpZmYgcHJvdmlkZWQgYW5kIGNvbmZpcm0gdGhpcyBpcyBjb25zaXN0ZW50bHkgYSBjbGVhbnVwIGFjcm9zcyBtdWx0aXBsZSBjb2RlIGxvY2F0aW9ucy4gIEVzc2VudGlhbGx5LCBpdCdzIGEgcmVmYWN0b3JpbmcgdG8gbWFrZSB0aGUgY29kZSBjbGVhcmVyIGFuZCBzbGlnaHRseSBtb3JlIGVmZmljaWVudCBieSBhdm9pZGluZyByZWR1bmRhbnQgY2hlY2tzLiBUaGVyZWZvcmUgSSB3aWxsIGNvbmNsdWRlIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjgyLCJPdXRwdXRUb2tlbnMiOjExMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNjo1MzozNi40MDM4NzIxNThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcvY2xlYW51cC4gSXQgcmVwbGFjZXMgZGlyZWN0IHJlZmNvdW50IGluY3JlbWVudHMgd2l0aCB0aGUgZXhpc3RpbmcgYG5ldF96Y29weV9nZXQoKWAgaGVscGVyIGFuZCBhdm9pZHMgYSByZWR1bmRhbnQgY2hlY2sgYnkgdXNpbmcgYHNrYl91YXJnKHNrYilgIGluc3RlYWQgb2YgYHNrYl96Y29weShza2IpYCBhZnRlciBgc2tiX3pjb3B5KHNrYilgIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZC4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwLiBJdCByZXBsYWNlcyBkaXJlY3QgcmVmY291bnQgaW5jcmVtZW50cyB3aXRoIHRoZSBleGlzdGluZyBgbmV0X3pjb3B5X2dldCgpYCBoZWxwZXIgYW5kIGF2b2lkcyBhIHJlZHVuZGFudCBjaGVjayBieSB1c2luZyBgc2tiX3Vhcmcoc2tiKWAgaW5zdGVhZCBvZiBgc2tiX3pjb3B5KHNrYilgIGFmdGVyIGBza2JfemNvcHkoc2tiKWAgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowqb2pg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 16:24:17 +0000 UTC FinishedAt: 2026-07-08 16:53:38 +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+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwLiBJdCByZXBsYWNlcyBkaXJlY3QgcmVmY291bnQgaW5jcmVtZW50cyB3aXRoIHRoZSBleGlzdGluZyBgbmV0X3pjb3B5X2dldCgpYCBoZWxwZXIgYW5kIGF2b2lkcyBhIHJlZHVuZGFudCBjaGVjayBieSB1c2luZyBgc2tiX3Vhcmcoc2tiKWAgaW5zdGVhZCBvZiBgc2tiX3pjb3B5KHNrYilgIGFmdGVyIGBza2JfemNvcHkoc2tiKWAgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNjo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRkOWYyYjM4YzMwYWRjYTRjN2FkNDI0NzkwMTY1NmI5MzY0NDQyYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDE2OjUyOjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IDE4ZGFiYjRlOWNmYTBlLi5kNzk4ZmJkYzNkYTdlYyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTIzMjYsNyAmIzQzOzIzMjYsNyBAQCBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcbiBcdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpXG4gXHRcdFx0Z290byBub2ZyYWdzO1xuIFx0XHRpZiAoc2tiX3pjb3B5KHNrYikpXG4tXHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNnNrYl91YXJnKHNrYiktXHUwMDNlcmVmY250KTtcbiYjNDM7XHRcdFx0bmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOylcbiBcdFx0XHRza2JfZnJhZ19yZWYoc2tiLCBpKTtcbiBcbkBAIC02ODQyLDcgJiM0Mzs2ODQyLDcgQEAgc3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0fVxuIFx0XHRpZiAoc2tiX3pjb3B5KHNrYikpXG4tXHRcdFx0bmV0X3pjb3B5X2dldChza2JfemNvcHkoc2tiKSk7XG4mIzQzO1x0XHRcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFnczsgaSYjNDM7JiM0MzspXG4gXHRcdFx0c2tiX2ZyYWdfcmVmKHNrYiwgaSk7XG4gXHRcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpKVxuQEAgLTY5OTIsNyAmIzQzOzY5OTIsNyBAQCBzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdGlmIChza2JfemNvcHkoc2tiKSlcbi1cdFx0bmV0X3pjb3B5X2dldChza2JfemNvcHkoc2tiKSk7XG4mIzQzO1x0XHRuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpO1xuIFx0c2tiX3JlbGVhc2VfZGF0YShza2IsIFNLQl9DT05TVU1FRCk7XG4gXG4gXHRza2ItXHUwMDNlaGVhZCA9IGRhdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nL2NsZWFudXAuIEl0IHJlcGxhY2VzIGRpcmVjdCByZWZjb3VudCBpbmNyZW1lbnRzIHdpdGggdGhlIGV4aXN0aW5nIGBuZXRfemNvcHlfZ2V0KClgIGhlbHBlciBhbmQgYXZvaWRzIGEgcmVkdW5kYW50IGNoZWNrIGJ5IHVzaW5nIGBza2JfdWFyZyhza2IpYCBpbnN0ZWFkIG9mIGBza2JfemNvcHkoc2tiKWAgYWZ0ZXIgYHNrYl96Y29weShza2IpYCBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZDlmMmIzOGMzMGFkY2E0YzdhZDQyNDc5MDE2NTZiOTM2NDQ0MmE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAxNjo1Mjo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggMThkYWJiNGU5Y2ZhMGUuLmQ3OThmYmRjM2RhN2VjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMjMyNiw3ICYjNDM7MjMyNiw3IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLAogCQlpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkKIAkJCWdvdG8gbm9mcmFnczsKIAkJaWYgKHNrYl96Y29weShza2IpKQotCQkJcmVmY291bnRfaW5jKCZhbXA7c2tiX3Vhcmcoc2tiKS0mZ3Q7cmVmY250KTsKJiM0MzsJCQluZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpOwogCQlmb3IgKGkgPSAwOyBpICZsdDsgc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFnczsgaSYjNDM7JiM0MzspCiAJCQlza2JfZnJhZ19yZWYoc2tiLCBpKTsKIApAQCAtNjg0Miw3ICYjNDM7Njg0Miw3IEBAIHN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlpZiAoc2tiX3pjb3B5KHNrYikpCi0JCQluZXRfemNvcHlfZ2V0KHNrYl96Y29weShza2IpKTsKJiM0MzsJCQluZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpOwogCQlmb3IgKGkgPSAwOyBpICZsdDsgc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFnczsgaSYjNDM7JiM0MzspCiAJCQlza2JfZnJhZ19yZWYoc2tiLCBpKTsKIAkJaWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikpCkBAIC02OTkyLDcgJiM0Mzs2OTkyLDcgQEAgc3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZiwKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWlmIChza2JfemNvcHkoc2tiKSkKLQkJbmV0X3pjb3B5X2dldChza2JfemNvcHkoc2tiKSk7CiYjNDM7CQluZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpOwogCXNrYl9yZWxlYXNlX2RhdGEoc2tiLCBTS0JfQ09OU1VNRUQpOwogCiAJc2tiLSZndDtoZWFkID0gZGF0YTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNLQiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL3NrYnVmZi5jYC4gSXQmIzM5O3MgcHJldHR5IGZvY3VzZWQ7IHRoZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgaG93IHdlJiMzOTtyZSBoYW5kbGluZyByZWZlcmVuY2UgY291bnRzIGFuZCB0aGUgJiMzNDt6Y29weSYjMzQ7IGFzcGVjdCBvZiB0aGUgYHNrYnVmZmAgc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIHJlcGxhY2luZyBjYWxscyB0byBgcmVmY291bnRfaW5jYCB3aXRoIGNhbGxzIHRvIGBuZXRfemNvcHlfZ2V0YCBpbiBgcHNrYl9leHBhbmRfaGVhZGAuIEFsc28sIGluIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyYCwgd2UmIzM5O3JlIHN3aXRjaGluZyBmcm9tIGBuZXRfemNvcHlfZ2V0KHNrYl96Y29weShza2IpKWAgdG8gYG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSlgLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcz8gVGhpcyBoYXMgdG8gY2hhbmdlIHNvbWV0aGluZyBpbXBvcnRhbnQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBuZXRfemNvcHlfZ2V0YCwgYHNrYl96Y29weWAsIGFuZCBgc2tiX3VhcmdgLiBJJiMzOTttIGEgYml0IHJ1c3R5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhvc2UsIHRob3VnaCBJJiMzOTt2ZSB3b3JrZWQgd2l0aCB0aGVtIGEgbG90IGluIHRoZSBwYXN0LgoKTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgYHNrYl96Y29weWAgcmV0dXJucyBhIHBvaW50ZXIgdG8gc29tZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGUgemNvcHkgYnVmZmVyLiBIb3dldmVyLCBzb21ldGhpbmcmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBEaWQgaXQgYWN0dWFsbHkgcmV0dXJuIGEgYm9vbGVhbiBpbiBvbGRlciB2ZXJzaW9ucz8gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIGBza2JfemNvcHlgIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLiBUaGlzIGlzIGltcG9ydGFudCwgYXMgaXQgZGV0ZXJtaW5lcyBob3cgdGhpcyBwYXRjaCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3pjb3B5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUzMT1zdHJ1Y3QgdWJ1Zl9pbmZvX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MzMtXHRcdFx0IGJvb2wgemVyb2NvcHlfc3VjY2Vzcyk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUzNDpcdC8qIGhhcyB0byBiZSBjb21wYXRpYmxlIHdpdGggc2tiX3pjb3B5X3NldCgpICovXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUzNS1cdGludCAoKmxpbmtfc2tiKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3ODY9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKnNrYl9od3RzdGFtcHMoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3OTAtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3OTE6c3RhdGljIGlubGluZSBzdHJ1Y3QgdWJ1Zl9pbmZvICpza2JfemNvcHkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc5Mi17XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzk3LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzk4OnN0YXRpYyBpbmxpbmUgYm9vbCBza2JfemNvcHlfcHVyZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzk5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MDItXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4MDM6c3RhdGljIGlubGluZSBib29sIHNrYl96Y29weV9tYW5hZ2VkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MDQte1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTgwOD1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX3B1cmVfemNvcHlfc2FtZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MTAte1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxODExOlx0cmV0dXJuIHNrYl96Y29weV9wdXJlKHNrYjEpID09IHNrYl96Y29weV9wdXJlKHNrYjIpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODEyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE4MTQ9c3RhdGljIGlubGluZSB2b2lkIG5ldF96Y29weV9nZXQoc3RydWN0IHVidWZfaW5mbyAqdWFyZylcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MTgtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4MTk6c3RhdGljIGlubGluZSB2b2lkIHNrYl96Y29weV9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1YnVmX2luZm8gKnVhcmcpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MjAte1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTgyNC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTgyNTpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODI2LVx0XHRcdFx0IGJvb2wgKmhhdmVfcmVmKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODI3LXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTgyODpcdGlmIChza2IgXHUwMDI2XHUwMDI2IHVhcmcgXHUwMDI2XHUwMDI2ICFza2JfemNvcHkoc2tiKSkge1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODI5LVx0XHRpZiAodW5saWtlbHkoaGF2ZV9yZWYgXHUwMDI2XHUwMDI2ICpoYXZlX3JlZikpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODMyLVx0XHRcdG5ldF96Y29weV9nZXQodWFyZyk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4MzM6XHRcdHNrYl96Y29weV9pbml0KHNrYiwgdWFyZyk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MzQtXHR9XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODM2LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxODM3OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfemNvcHlfc2V0X25vdWFyZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICp2YWwpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4Mzgte1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg0Mi1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg0MzpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3pjb3B5X2lzX25vdWFyZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODQ0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4NDctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4NDg6c3RhdGljIGlubGluZSB2b2lkICpza2JfemNvcHlfZ2V0X25vdWFyZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODQ5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE4NTk9c3RhdGljIGlubGluZSB2b2lkIG5ldF96Y29weV9wdXRfYWJvcnQoc3RydWN0IHVidWZfaW5mbyAqdWFyZywgYm9vbCBoYXZlX3VyZWYpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODY5LS8qIFJlbGVhc2UgYSByZWZlcmVuY2Ugb24gYSB6ZXJvY29weSBzdHJ1Y3R1cmUgKi9cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg3MDpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X2NsZWFyKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgemVyb2NvcHlfc3VjY2VzcylcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg3MS17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4NzI6XHRzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnID0gc2tiX3pjb3B5KHNrYik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4NzMtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4NzQtXHRpZiAodWFyZykge1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxODc1Olx0XHRpZiAoIXNrYl96Y29weV9pc19ub3Vhcmcoc2tiKSlcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg3Ni1cdFx0XHR1YXJnLVx1MDAzZW9wcy1cdTAwM2Vjb21wbGV0ZShza2IsIHVhcmcsIHplcm9jb3B5X3N1Y2Nlc3MpO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg4MS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg4Mjp2b2lkIF9fc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODgzLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxODg0OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg4NS17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4ODY6XHRpZiAodW5saWtlbHkoc2tiX3pjb3B5X21hbmFnZWQoc2tiKSkpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4ODc6XHRcdF9fc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4ODgtfVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MzQwOT1zdGF0aWMgaW5saW5lIGludCBza2Jfb3JwaGFuX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNDEwLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzQxMTpcdGlmIChsaWtlbHkoIXNrYl96Y29weShza2IpKSlcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQxMi1cdFx0cmV0dXJuIDA7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zNDE5PXN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Nfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM0MjAte1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozNDIxOlx0aWYgKGxpa2VseSghc2tiX3pjb3B5KHNrYikpKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNDIyLVx0XHRyZXR1cm4gMDtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTM5Nzk9c3RhdGljIGlubGluZSBib29sIHNrYl9jYW5fY29hbGVzY2VfbmV0bWVtKHN0cnVjdCBza19idWZmICpza2IsIGludCBpLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzk4MS17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM5ODI6XHRpZiAoc2tiX3pjb3B5KHNrYikpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM5ODMtXHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjE1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgUGFja2V0IEJ1ZmZlciBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBqdW1wcyBvdXQuIEl0JiMzOTtzIGRlYWxpbmcgd2l0aCB6ZXJvLWNvcHkgb3BlcmF0aW9ucyBvbiBuZXR3b3JrIHNvY2tldCBidWZmZXJzIChTS0JzKS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IHRoZSByZWZlcmVuY2UgY291bnRpbmcgaXMgbWFuYWdlZCwgcGFydGljdWxhcmx5IGZvciBidWZmZXJzIHRoYXQgYXJlIGJlaW5nIHplcm8tY29waWVkLgoKSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSB1c2VkIGByZWZjb3VudF9pbmNgIG9uIGBza2JfdWFyZyhza2IpLSZndDtyZWZjbnRgLiBBbmQgbm93IGl0JiMzOTtzIGNoYW5nZWQgdG8gYG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSlgLiBUaGVuIHRoZXJlJiMzOTtzIGFub3RoZXIgaW5zdGFuY2Ugb2YgdGhlIGNoYW5nZSB3aGVyZSBvcmlnaW5hbGx5IGBuZXRfemNvcHlfZ2V0KHNrYl96Y29weShza2IpKWAgd2FzIHVzZWQsIGFuZCB0aGlzIGlzIGFsc28gY2hhbmdlZCB0byBgbmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKWAuCgpCdXQgd2FpdCBhIHNlY29uZC4uLiBgc2tiX3pjb3B5KHNrYilgICphbHNvKiByZXR1cm5zIGEgYHN0cnVjdCB1YnVmX2luZm8gKmAhIEFuZCBzbyBkb2VzIGBza2JfdWFyZyhza2IpYC4gVGhpcyBtZWFucyB0aGF0IGJvdGggZnVuY3Rpb25zIGFyZSByZXR1cm5pbmcgYSBwb2ludGVyIHRvIHRoZSBzYW1lIGRhdGEsIHRoZSBidWZmZXIgaW5mb3JtYXRpb24uIFRoZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGNhbGxzIHRoYXQgd2VyZSByZWR1bmRhbnQuCgpUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIHBhdGNoIGlzIGNvbnNvbGlkYXRpbmcgaG93IHRoZSByZWZlcmVuY2UgY291bnQgaXMgaGFuZGxlZCwgbGlrZWx5IHRvIGF2b2lkIHBvdGVudGlhbCBkb3VibGUtaW5jcmVtZW50aW5nIGFuZCBzaW1wbGlmeSB0aGUgbG9naWMuIFRoZSBnb2FsIG1pZ2h0IGJlIHRvIGVsaW1pbmF0ZSByZWR1bmRhbnQgY2FsbHMuIEl0IGFwcGVhcnMgdGhlIG5ldCBlZmZlY3QgaXMgY2FsbGluZyB0aGUgY29ycmVjdCBmdW5jdGlvbiwgYnV0IEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYG5ldF96Y29weV9nZXRgIGFuZCB0aGUgU0tCIGludGVybmFscyB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl91YXJnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTU1Mj1zdHJ1Y3QgdWJ1Zl9pbmZvX21zZ3pjIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU3My1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTc0OiNkZWZpbmUgc2tiX3VhcmcoU0tCKVx0KChzdHJ1Y3QgdWJ1Zl9pbmZvICopKHNrYl9zaGluZm8oU0tCKS1cdTAwM2VkZXN0cnVjdG9yX2FyZykpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU3NS0jZGVmaW5lIHVhcmdfdG9fbXNnemModWJ1Zl9wdHIpXHRjb250YWluZXJfb2YoKHVidWZfcHRyKSwgc3RydWN0IHVidWZfaW5mb19tc2d6YywgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3OTE9c3RhdGljIGlubGluZSBzdHJ1Y3QgdWJ1Zl9pbmZvICpza2JfemNvcHkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3OTQtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3OTU6XHRyZXR1cm4gaXNfemNvcHkgPyBza2JfdWFyZyhza2IpIDogTlVMTDtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc5Ni19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM5NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFplcm8tQ29weSBQYXRoIGluIFNLQiBIYW5kbGluZyoqCgpPa2F5LCBzbyBgc2tiX3pjb3B5KHNrYilgIGlzIHN1cHBvc2VkIHRvIHJldHVybiBgc2tiX3Vhcmcoc2tiKWAgaWYgdGhlIHplcm8tY29weSBjb25kaXRpb24gaXMgbWV0LCBvdGhlcndpc2UgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gYmUgYE5VTExgLiBCdXQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIGJlY2F1c2UgSSB0aGluayBgc2tiX3pjb3B5X2lzX25vdWFyZyhza2IpYCBpcyBpbiBwbGF5IGhlcmUuIElmIGBza2JfemNvcHlfaXNfbm91YXJnKHNrYilgIGlzIHRydWUsIGRvZXMgdGhhdCBmb3JjZSBgc2tiX3pjb3B5KHNrYilgIHRvIHJldHVybiBgTlVMTGA/IEkgZG9uJiMzOTt0IHRoaW5rIHRoYXQgaXMgcmlnaHQsIEkgaGFkIGJldHRlciByZXZpZXcgdGhlIGNvZGUgZm9yIGBza2JfemNvcHlgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc5MDpcdFxuMTc5MTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHVidWZfaW5mbyAqc2tiX3pjb3B5KHN0cnVjdCBza19idWZmICpza2IpXG4xNzkyOlx0e1xuMTc5MzpcdFx0Ym9vbCBpc196Y29weSA9IHNrYiBcdTAwMjZcdTAwMjYgc2tiX3NoaW5mbyhza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBTS0JGTF9aRVJPQ09QWV9FTkFCTEU7XG4xNzk0Olx0XG4xNzk1Olx0XHRyZXR1cm4gaXNfemNvcHkgPyBza2JfdWFyZyhza2IpIDogTlVMTDtcbjE3OTY6XHR9XG4xNzk3Olx0XG4xNzk4Olx0c3RhdGljIGlubGluZSBib29sIHNrYl96Y29weV9wdXJlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4xNzk5Olx0e1xuMTgwMDpcdFx0cmV0dXJuIHNrYl9zaGluZm8oc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgU0tCRkxfUFVSRV9aRVJPQ09QWTtcbjE4MDE6XHR9XG4xODAyOlx0XG4xODAzOlx0c3RhdGljIGlubGluZSBib29sIHNrYl96Y29weV9tYW5hZ2VkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4xODA0Olx0e1xuMTgwNTpcdFx0cmV0dXJuIHNrYl9zaGluZm8oc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlM7XG4xODA2Olx0fVxuMTgwNzpcdFxuMTgwODpcdHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfcHVyZV96Y29weV9zYW1lKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IxLFxuMTgwOTpcdFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgQ3VyaW91cyBQYXRjaCBDaGFuZ2UqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhpcyBgc2tiX3pjb3B5KHNrYilgIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGBza2JfdWFyZyhza2IpYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIFNvLCBpbiBlZmZlY3QsIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBpcyByZXBsYWNpbmcgYG5ldF96Y29weV9nZXQoc2tiX3pjb3B5KHNrYikpYCB3aXRoIGBuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpYC4gU2VlbXMgbGlrZSBpdCBzaG91bGQgYmUgdGhlIHNhbWUsIHNvIEkgYW0gd29uZGVyaW5nIHdoeSB0aGF0IHdhcyBldmVuIGNoYW5nZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGlzIGp1c3Qgc2VlbXMgbGlrZSBhIG5lZWRsZXNzIHJlZmFjdG9yaW5nLiBVbmxlc3MgSSBhbSBtaXNzaW5nIHNvbWV0aGluZyBzdWJ0bGUuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmV0X3pjb3B5X2dldGAuIExldCBtZSBkaXZlIGludG8gdGhhdCBjb2RlIGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYW4gYWN0dWFsIHNlbWFudGljIGRpZmZlcmVuY2UgaGVyZSB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgxMDpcdHtcbjE4MTE6XHRcdHJldHVybiBza2JfemNvcHlfcHVyZShza2IxKSA9PSBza2JfemNvcHlfcHVyZShza2IyKTtcbjE4MTI6XHR9XG4xODEzOlx0XG4xODE0Olx0c3RhdGljIGlubGluZSB2b2lkIG5ldF96Y29weV9nZXQoc3RydWN0IHVidWZfaW5mbyAqdWFyZylcbjE4MTU6XHR7XG4xODE2Olx0XHRyZWZjb3VudF9pbmMoXHUwMDI2dWFyZy1cdTAwM2VyZWZjbnQpO1xuMTgxNzpcdH1cbjE4MTg6XHRcbjE4MTk6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHVidWZfaW5mbyAqdWFyZylcbjE4MjA6XHR7XG4xODIxOlx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGVzdHJ1Y3Rvcl9hcmcgPSB1YXJnO1xuMTgyMjpcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZsYWdzIHw9IHVhcmctXHUwMDNlZmxhZ3M7XG4xODIzOlx0fVxuMTgyNDpcdFxuMTgyNTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfemNvcHlfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1YnVmX2luZm8gKnVhcmcsXG4xODI2Olx0XHRcdFx0XHQgYm9vbCAqaGF2ZV9yZWYpXG4xODI3Olx0e1xuMTgyODpcdFx0aWYgKHNrYiBcdTAwMjZcdTAwMjYgdWFyZyBcdTAwMjZcdTAwMjYgIXNrYl96Y29weShza2IpKSB7XG4xODI5Olx0XHRcdGlmICh1bmxpa2VseShoYXZlX3JlZiBcdTAwMjZcdTAwMjYgKmhhdmVfcmVmKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY4MgoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiAxMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgTWlub3IgUmVmYWN0b3JpbmcgYW5kIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVzZSBhcmUgcHVyZSByZWZhY3RvcmluZ3MuIFRoZSBmaXJzdCBjaGFuZ2UgcmVwbGFjZXMgYHJlZmNvdW50X2luYygmYW1wO3NrYl91YXJnKHNrYiktJmd0O3JlZmNudClgIHdpdGggYG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSlgLiAgU2luY2UgYG5ldF96Y29weV9nZXRgIGlzIGxpdGVyYWxseSBqdXN0IGFuIGFsaWFzIGZvciBgcmVmY291bnRfaW5jYCwgdGhpcyBpcyBhIHN0cmFpZ2h0IHN3YXAsIGZ1bmN0aW9uYWxseSBpZGVudGljYWwuCgpUaGUgc2Vjb25kIGNoYW5nZSBpcyB3aGVyZSBpdCBnZXRzIHNsaWdodGx5IG1vcmUgaW50ZXJlc3RpbmcuICBXZSYjMzk7cmUgZ29pbmcgZnJvbSBgbmV0X3pjb3B5X2dldChza2JfemNvcHkoc2tiKSlgIHRvIGBuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpYC4gIExvb2tpbmcgYXQgYHNrYl96Y29weShza2IpYCwgaXQgZXNzZW50aWFsbHkgY2hlY2tzIGlmIHplcm8tY29weSBpcyBlbmFibGVkIGFuZCB0aGVuIHJldHVybnMgYHNrYl91YXJnKHNrYilgIGlmIGl0IGlzLCBhbmQgTlVMTCBvdGhlcndpc2UuICBTbywgaWYgYHNrYl96Y29weShza2IpYCBpcyB0cnVlLCB0aGUgdHdvIGNhbGxzIGFyZSBlcXVpdmFsZW50LiAgVGhlcmVmb3JlLCB0aGlzIGlzIGEgY29zbWV0aWMvcmVmYWN0b3JpbmcgY2hhbmdlIHRoYXQgYXZvaWRzIGEgcmVkdW5kYW50IGNoZWNrLgoKTm93LCBsZXQmIzM5O3MgZGlnIGEgYml0IGRlZXBlci4gIGBza2JfdWFyZ2AgaXMgYSBtYWNybywgYW5kIGBza2JfemNvcHlgIGlzIGFuIGlubGluZSBmdW5jdGlvbi4gVXNpbmcgYHNrYl91YXJnYCBkaXJlY3RseSBhdm9pZHMgdGhlIGV4dHJhIGNoZWNrIHdpdGhpbiBgc2tiX3pjb3B5YCBiZWNhdXNlIHdlIGFscmVhZHkga25vdyB0aGF0IGBza2JfemNvcHkoc2tiKWAgaXMgdHJ1ZS4gU28gaXQmIzM5O3MgYSBtaW5vciBvcHRpbWl6YXRpb24gdGhhdCBjbGVhbnMgdXAgdGhlIGNvZGUgYSBiaXQuIEl0IGRvZXNuJiMzOTt0IG1vZGlmeSBleGVjdXRpb24gZmxvdyBvciBmdW5jdGlvbmFsIGxvZ2ljIGluIGFueSB3YXkgdGhhdCByZXF1aXJlcyBmdXp6aW5nLgoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhlIGRpZmYgcHJvdmlkZWQgYW5kIGNvbmZpcm0gdGhpcyBpcyBjb25zaXN0ZW50bHkgYSBjbGVhbnVwIGFjcm9zcyBtdWx0aXBsZSBjb2RlIGxvY2F0aW9ucy4gIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhIHJlZmFjdG9yaW5nIHRvIG1ha2UgdGhlIGNvZGUgY2xlYXJlciBhbmQgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgYnkgYXZvaWRpbmcgcmVkdW5kYW50IGNoZWNrcy4gVGhlcmVmb3JlIEkgd2lsbCBjb25jbHVkZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcvY2xlYW51cC4gSXQgcmVwbGFjZXMgZGlyZWN0IHJlZmNvdW50IGluY3JlbWVudHMgd2l0aCB0aGUgZXhpc3RpbmcgYG5ldF96Y29weV9nZXQoKWAgaGVscGVyIGFuZCBhdm9pZHMgYSByZWR1bmRhbnQgY2hlY2sgYnkgdXNpbmcgYHNrYl91YXJnKHNrYilgIGluc3RlYWQgb2YgYHNrYl96Y29weShza2IpYCBhZnRlciBgc2tiX3pjb3B5KHNrYilgIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZC4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwLiBJdCByZXBsYWNlcyBkaXJlY3QgcmVmY291bnQgaW5jcmVtZW50cyB3aXRoIHRoZSBleGlzdGluZyBgbmV0X3pjb3B5X2dldCgpYCBoZWxwZXIgYW5kIGF2b2lkcyBhIHJlZHVuZGFudCBjaGVjayBieSB1c2luZyBgc2tiX3Vhcmcoc2tiKWAgaW5zdGVhZCBvZiBgc2tiX3pjb3B5KHNrYilgIGFmdGVyIGBza2JfemNvcHkoc2tiKWAgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUyOjQ4LjExNDE4ODk3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Mjg5NzQ5ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcvY2xlYW51cC4gSXQgcmVwbGFjZXMgZGlyZWN0IHJlZmNvdW50IGluY3JlbWVudHMgd2l0aCB0aGUgZXhpc3RpbmcgYG5ldF96Y29weV9nZXQoKWAgaGVscGVyIGFuZCBhdm9pZHMgYSByZWR1bmRhbnQgY2hlY2sgYnkgdXNpbmcgYHNrYl91YXJnKHNrYilgIGluc3RlYWQgb2YgYHNrYl96Y29weShza2IpYCBhZnRlciBgc2tiX3pjb3B5KHNrYilgIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZC4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUyOjQ4LjExNDE5NzE2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA3MzkyMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGQ5ZjJiMzhjMzBhZGNhNGM3YWQ0MjQ3OTAxNjU2YjkzNjQ0NDJhNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCA4IDE2OjUyOjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5pbmRleCAxOGRhYmI0ZTljZmEwZS4uZDc5OGZiZGMzZGE3ZWMgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xcbkBAIC0yMzI2LDcgKzIzMjYsNyBAQCBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcXG4gXFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpXFxuIFxcdFxcdFxcdGdvdG8gbm9mcmFncztcXG4gXFx0XFx0aWYgKHNrYl96Y29weShza2IpKVxcbi1cXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnNrYl91YXJnKHNrYiktXFx1MDAzZXJlZmNudCk7XFxuK1xcdFxcdFxcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzOyBpKyspXFxuIFxcdFxcdFxcdHNrYl9mcmFnX3JlZihza2IsIGkpO1xcbiBcXG5AQCAtNjg0Miw3ICs2ODQyLDcgQEAgc3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKHNrYl96Y29weShza2IpKVxcbi1cXHRcXHRcXHRuZXRfemNvcHlfZ2V0KHNrYl96Y29weShza2IpKTtcXG4rXFx0XFx0XFx0bmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKTtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3M7IGkrKylcXG4gXFx0XFx0XFx0c2tiX2ZyYWdfcmVmKHNrYiwgaSk7XFxuIFxcdFxcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpKVxcbkBAIC02OTkyLDcgKzY5OTIsNyBAQCBzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXHRpZiAoc2tiX3pjb3B5KHNrYikpXFxuLVxcdFxcdG5ldF96Y29weV9nZXQoc2tiX3pjb3B5KHNrYikpO1xcbitcXHRcXHRuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpO1xcbiBcXHRza2JfcmVsZWFzZV9kYXRhKHNrYiwgU0tCX0NPTlNVTUVEKTtcXG4gXFxuIFxcdHNrYi1cXHUwMDNlaGVhZCA9IGRhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUyOjQ4LjkyMjY4MjUyOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0ODEyNDU3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwLiBJdCByZXBsYWNlcyBkaXJlY3QgcmVmY291bnQgaW5jcmVtZW50cyB3aXRoIHRoZSBleGlzdGluZyBgbmV0X3pjb3B5X2dldCgpYCBoZWxwZXIgYW5kIGF2b2lkcyBhIHJlZHVuZGFudCBjaGVjayBieSB1c2luZyBgc2tiX3Vhcmcoc2tiKWAgaW5zdGVhZCBvZiBgc2tiX3pjb3B5KHNrYilgIGFmdGVyIGBza2JfemNvcHkoc2tiKWAgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0ZDlmMmIzOGMzMGFkY2E0YzdhZDQyNDc5MDE2NTZiOTM2NDQ0MmE2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxNjo1Mjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IDE4ZGFiYjRlOWNmYTBlLi5kNzk4ZmJkYzNkYTdlYyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTIzMjYsNyArMjMyNiw3IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxuIFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSlcbiBcdFx0XHRnb3RvIG5vZnJhZ3M7XG4gXHRcdGlmIChza2JfemNvcHkoc2tiKSlcbi1cdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2c2tiX3Vhcmcoc2tiKS1cdTAwM2VyZWZjbnQpO1xuK1x0XHRcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFnczsgaSsrKVxuIFx0XHRcdHNrYl9mcmFnX3JlZihza2IsIGkpO1xuIFxuQEAgLTY4NDIsNyArNjg0Miw3IEBAIHN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbiBcdFx0aWYgKHNrYl96Y29weShza2IpKVxuLVx0XHRcdG5ldF96Y29weV9nZXQoc2tiX3pjb3B5KHNrYikpO1xuK1x0XHRcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFnczsgaSsrKVxuIFx0XHRcdHNrYl9mcmFnX3JlZihza2IsIGkpO1xuIFx0XHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSlcbkBAIC02OTkyLDcgKzY5OTIsNyBAQCBzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdGlmIChza2JfemNvcHkoc2tiKSlcbi1cdFx0bmV0X3pjb3B5X2dldChza2JfemNvcHkoc2tiKSk7XG4rXHRcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XG4gXHRza2JfcmVsZWFzZV9kYXRhKHNrYiwgU0tCX0NPTlNVTUVEKTtcbiBcbiBcdHNrYi1cdTAwM2VoZWFkID0gZGF0YTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUyOjQ4LjkyMjY4NTE2OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMjk3MDgxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTS0IgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvc2tidWZmLmNgLiBJdCdzIHByZXR0eSBmb2N1c2VkOyB0aGUgY2hhbmdlcyBhcmUgYWxsIGFib3V0IGhvdyB3ZSdyZSBoYW5kbGluZyByZWZlcmVuY2UgY291bnRzIGFuZCB0aGUgXCJ6Y29weVwiIGFzcGVjdCBvZiB0aGUgYHNrYnVmZmAgc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugd2UncmUgcmVwbGFjaW5nIGNhbGxzIHRvIGByZWZjb3VudF9pbmNgIHdpdGggY2FsbHMgdG8gYG5ldF96Y29weV9nZXRgIGluIGBwc2tiX2V4cGFuZF9oZWFkYC4gQWxzbywgaW4gYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXJgLCB3ZSdyZSBzd2l0Y2hpbmcgZnJvbSBgbmV0X3pjb3B5X2dldChza2JfemNvcHkoc2tiKSlgIHRvIGBuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzPyBUaGlzIGhhcyB0byBjaGFuZ2Ugc29tZXRoaW5nIGltcG9ydGFudC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHdoYXQncyBnb2luZyBvbiB3aXRoIGBuZXRfemNvcHlfZ2V0YCwgYHNrYl96Y29weWAsIGFuZCBgc2tiX3VhcmdgLiBJJ20gYSBiaXQgcnVzdHkgb24gdGhlIHNwZWNpZmljcyBvZiB0aG9zZSwgdGhvdWdoIEkndmUgd29ya2VkIHdpdGggdGhlbSBhIGxvdCBpbiB0aGUgcGFzdC5cblxuTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgYHNrYl96Y29weWAgcmV0dXJucyBhIHBvaW50ZXIgdG8gc29tZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGUgemNvcHkgYnVmZmVyLiBIb3dldmVyLCBzb21ldGhpbmcncyBub3QgcXVpdGUgcmlnaHQuIERpZCBpdCBhY3R1YWxseSByZXR1cm4gYSBib29sZWFuIGluIG9sZGVyIHZlcnNpb25zPyBMZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgYHNrYl96Y29weWAgZGVmaW5pdGlvbiBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBpdCBkZXRlcm1pbmVzIGhvdyB0aGlzIHBhdGNoIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUyOjUzLjk1MjQ2MDAzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODM5OTE2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3pjb3B5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MzE9c3RydWN0IHVidWZfaW5mb19vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MzMtXFx0XFx0XFx0IGJvb2wgemVyb2NvcHlfc3VjY2Vzcyk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MzQ6XFx0LyogaGFzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBza2JfemNvcHlfc2V0KCkgKi9cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUzNS1cXHRpbnQgKCpsaW5rX3NrYikoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHVidWZfaW5mbyAqdWFyZyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3ODY9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKnNrYl9od3RzdGFtcHMoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc5MC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3OTE6c3RhdGljIGlubGluZSBzdHJ1Y3QgdWJ1Zl9pbmZvICpza2JfemNvcHkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3OTIte1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzk3LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc5ODpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3pjb3B5X3B1cmUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3OTkte1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODAyLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTgwMzpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3pjb3B5X21hbmFnZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MDQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xODA4PXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfcHVyZV96Y29weV9zYW1lKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IxLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODEwLXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4MTE6XFx0cmV0dXJuIHNrYl96Y29weV9wdXJlKHNrYjEpID09IHNrYl96Y29weV9wdXJlKHNrYjIpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTgxMi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE4MTQ9c3RhdGljIGlubGluZSB2b2lkIG5ldF96Y29weV9nZXQoc3RydWN0IHVidWZfaW5mbyAqdWFyZylcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTgxOC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4MTk6c3RhdGljIGlubGluZSB2b2lkIHNrYl96Y29weV9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1YnVmX2luZm8gKnVhcmcpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODIwLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTgyNC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4MjU6c3RhdGljIGlubGluZSB2b2lkIHNrYl96Y29weV9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHVidWZfaW5mbyAqdWFyZyxcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MjYtXFx0XFx0XFx0XFx0IGJvb2wgKmhhdmVfcmVmKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTgyNy17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxODI4OlxcdGlmIChza2IgXFx1MDAyNlxcdTAwMjYgdWFyZyBcXHUwMDI2XFx1MDAyNiAhc2tiX3pjb3B5KHNrYikpIHtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MjktXFx0XFx0aWYgKHVubGlrZWx5KGhhdmVfcmVmIFxcdTAwMjZcXHUwMDI2ICpoYXZlX3JlZikpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MzItXFx0XFx0XFx0bmV0X3pjb3B5X2dldCh1YXJnKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4MzM6XFx0XFx0c2tiX3pjb3B5X2luaXQoc2tiLCB1YXJnKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4MzQtXFx0fVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODM2LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTgzNzpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X3NldF9ub3Vhcmcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqdmFsKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTgzOC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4NDItXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxODQzOnN0YXRpYyBpbmxpbmUgYm9vbCBza2JfemNvcHlfaXNfbm91YXJnKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODQ0LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg0Ny1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4NDg6c3RhdGljIGlubGluZSB2b2lkICpza2JfemNvcHlfZ2V0X25vdWFyZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg0OS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE4NTk9c3RhdGljIGlubGluZSB2b2lkIG5ldF96Y29weV9wdXRfYWJvcnQoc3RydWN0IHVidWZfaW5mbyAqdWFyZywgYm9vbCBoYXZlX3VyZWYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4NjktLyogUmVsZWFzZSBhIHJlZmVyZW5jZSBvbiBhIHplcm9jb3B5IHN0cnVjdHVyZSAqL1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg3MDpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X2NsZWFyKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgemVyb2NvcHlfc3VjY2VzcylcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4NzEte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg3MjpcXHRzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnID0gc2tiX3pjb3B5KHNrYik7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODczLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg3NC1cXHRpZiAodWFyZykge1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg3NTpcXHRcXHRpZiAoIXNrYl96Y29weV9pc19ub3Vhcmcoc2tiKSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4NzYtXFx0XFx0XFx0dWFyZy1cXHUwMDNlb3BzLVxcdTAwM2Vjb21wbGV0ZShza2IsIHVhcmcsIHplcm9jb3B5X3N1Y2Nlc3MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODgxLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg4Mjp2b2lkIF9fc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg4My1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4ODQ6c3RhdGljIGlubGluZSB2b2lkIHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg4NS17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxODg2OlxcdGlmICh1bmxpa2VseShza2JfemNvcHlfbWFuYWdlZChza2IpKSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4ODc6XFx0XFx0X19za2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4ODgtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zNDA5PXN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNDEwLXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM0MTE6XFx0aWYgKGxpa2VseSghc2tiX3pjb3B5KHNrYikpKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQxMi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MzQxOT1zdGF0aWMgaW5saW5lIGludCBza2Jfb3JwaGFuX2ZyYWdzX3J4KHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQyMC17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozNDIxOlxcdGlmIChsaWtlbHkoIXNrYl96Y29weShza2IpKSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM0MjItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTM5Nzk9c3RhdGljIGlubGluZSBib29sIHNrYl9jYW5fY29hbGVzY2VfbmV0bWVtKHN0cnVjdCBza19idWZmICpza2IsIGludCBpLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zOTgxLXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM5ODI6XFx0aWYgKHNrYl96Y29weShza2IpKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzk4My1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUyOjU0LjUzNjQ2MTM3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxOTIyOTMzNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgUGFja2V0IEJ1ZmZlciBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzb21ldGhpbmcganVtcHMgb3V0LiBJdCdzIGRlYWxpbmcgd2l0aCB6ZXJvLWNvcHkgb3BlcmF0aW9ucyBvbiBuZXR3b3JrIHNvY2tldCBidWZmZXJzIChTS0JzKS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IHRoZSByZWZlcmVuY2UgY291bnRpbmcgaXMgbWFuYWdlZCwgcGFydGljdWxhcmx5IGZvciBidWZmZXJzIHRoYXQgYXJlIGJlaW5nIHplcm8tY29waWVkLlxuXG5JIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHJlZmNvdW50X2luY2Agb24gYHNrYl91YXJnKHNrYiktXHUwMDNlcmVmY250YC4gQW5kIG5vdyBpdCdzIGNoYW5nZWQgdG8gYG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSlgLiBUaGVuIHRoZXJlJ3MgYW5vdGhlciBpbnN0YW5jZSBvZiB0aGUgY2hhbmdlIHdoZXJlIG9yaWdpbmFsbHkgYG5ldF96Y29weV9nZXQoc2tiX3pjb3B5KHNrYikpYCB3YXMgdXNlZCwgYW5kIHRoaXMgaXMgYWxzbyBjaGFuZ2VkIHRvIGBuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpYC5cblxuQnV0IHdhaXQgYSBzZWNvbmQuLi4gYHNrYl96Y29weShza2IpYCAqYWxzbyogcmV0dXJucyBhIGBzdHJ1Y3QgdWJ1Zl9pbmZvICpgISBBbmQgc28gZG9lcyBgc2tiX3Vhcmcoc2tiKWAuIFRoaXMgbWVhbnMgdGhhdCBib3RoIGZ1bmN0aW9ucyBhcmUgcmV0dXJuaW5nIGEgcG9pbnRlciB0byB0aGUgc2FtZSBkYXRhLCB0aGUgYnVmZmVyIGluZm9ybWF0aW9uLiBUaGUgY2hhbmdlIGlzIHJlcGxhY2luZyBjYWxscyB0aGF0IHdlcmUgcmVkdW5kYW50LlxuXG5UaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIHBhdGNoIGlzIGNvbnNvbGlkYXRpbmcgaG93IHRoZSByZWZlcmVuY2UgY291bnQgaXMgaGFuZGxlZCwgbGlrZWx5IHRvIGF2b2lkIHBvdGVudGlhbCBkb3VibGUtaW5jcmVtZW50aW5nIGFuZCBzaW1wbGlmeSB0aGUgbG9naWMuIFRoZSBnb2FsIG1pZ2h0IGJlIHRvIGVsaW1pbmF0ZSByZWR1bmRhbnQgY2FsbHMuIEl0IGFwcGVhcnMgdGhlIG5ldCBlZmZlY3QgaXMgY2FsbGluZyB0aGUgY29ycmVjdCBmdW5jdGlvbiwgYnV0IEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYG5ldF96Y29weV9nZXRgIGFuZCB0aGUgU0tCIGludGVybmFscyB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjE1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUzOjE2LjQ1OTQxODQ0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg0MjMxODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3VhcmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTU1Mj1zdHJ1Y3QgdWJ1Zl9pbmZvX21zZ3pjIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTczLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTc0OiNkZWZpbmUgc2tiX3VhcmcoU0tCKVxcdCgoc3RydWN0IHVidWZfaW5mbyAqKShza2Jfc2hpbmZvKFNLQiktXFx1MDAzZWRlc3RydWN0b3JfYXJnKSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU3NS0jZGVmaW5lIHVhcmdfdG9fbXNnemModWJ1Zl9wdHIpXFx0Y29udGFpbmVyX29mKCh1YnVmX3B0ciksIHN0cnVjdCB1YnVmX2luZm9fbXNnemMsIFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc5MT1zdGF0aWMgaW5saW5lIHN0cnVjdCB1YnVmX2luZm8gKnNrYl96Y29weShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzk0LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc5NTpcXHRyZXR1cm4gaXNfemNvcHkgPyBza2JfdWFyZyhza2IpIDogTlVMTDtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3OTYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNjo1MzoxNi41OTc4NTAyMDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM3MDcyMjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgWmVyby1Db3B5IFBhdGggaW4gU0tCIEhhbmRsaW5nKipcblxuT2theSwgc28gYHNrYl96Y29weShza2IpYCBpcyBzdXBwb3NlZCB0byByZXR1cm4gYHNrYl91YXJnKHNrYilgIGlmIHRoZSB6ZXJvLWNvcHkgY29uZGl0aW9uIGlzIG1ldCwgb3RoZXJ3aXNlIGl0J3Mgc3VwcG9zZWQgdG8gYmUgYE5VTExgLiBCdXQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIGJlY2F1c2UgSSB0aGluayBgc2tiX3pjb3B5X2lzX25vdWFyZyhza2IpYCBpcyBpbiBwbGF5IGhlcmUuIElmIGBza2JfemNvcHlfaXNfbm91YXJnKHNrYilgIGlzIHRydWUsIGRvZXMgdGhhdCBmb3JjZSBgc2tiX3pjb3B5KHNrYilgIHRvIHJldHVybiBgTlVMTGA/IEkgZG9uJ3QgdGhpbmsgdGhhdCBpcyByaWdodCwgSSBoYWQgYmV0dGVyIHJldmlldyB0aGUgY29kZSBmb3IgYHNrYl96Y29weWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzOTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6NTM6MjAuMzM0OTI2MzQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTc5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc5MDpcXHRcXG4xNzkxOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHVidWZfaW5mbyAqc2tiX3pjb3B5KHN0cnVjdCBza19idWZmICpza2IpXFxuMTc5MjpcXHR7XFxuMTc5MzpcXHRcXHRib29sIGlzX3pjb3B5ID0gc2tiIFxcdTAwMjZcXHUwMDI2IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTS0JGTF9aRVJPQ09QWV9FTkFCTEU7XFxuMTc5NDpcXHRcXG4xNzk1OlxcdFxcdHJldHVybiBpc196Y29weSA/IHNrYl91YXJnKHNrYikgOiBOVUxMO1xcbjE3OTY6XFx0fVxcbjE3OTc6XFx0XFxuMTc5ODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3pjb3B5X3B1cmUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNzk5OlxcdHtcXG4xODAwOlxcdFxcdHJldHVybiBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0tCRkxfUFVSRV9aRVJPQ09QWTtcXG4xODAxOlxcdH1cXG4xODAyOlxcdFxcbjE4MDM6XFx0c3RhdGljIGlubGluZSBib29sIHNrYl96Y29weV9tYW5hZ2VkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMTgwNDpcXHR7XFxuMTgwNTpcXHRcXHRyZXR1cm4gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNLQkZMX01BTkFHRURfRlJBR19SRUZTO1xcbjE4MDY6XFx0fVxcbjE4MDc6XFx0XFxuMTgwODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3B1cmVfemNvcHlfc2FtZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMSxcXG4xODA5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6NTM6MjAuMzM1MTkzODI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NjUwNzE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgQ3VyaW91cyBQYXRjaCBDaGFuZ2UqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBUaGlzIGBza2JfemNvcHkoc2tiKWAgZnVuY3Rpb24sIGl0IHJldHVybnMgYHNrYl91YXJnKHNrYilgLiBUaGF0J3MgaW1wb3J0YW50LiBTbywgaW4gZWZmZWN0LCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgaXMgcmVwbGFjaW5nIGBuZXRfemNvcHlfZ2V0KHNrYl96Y29weShza2IpKWAgd2l0aCBgbmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKWAuIFNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIHRoZSBzYW1lLCBzbyBJIGFtIHdvbmRlcmluZyB3aHkgdGhhdCB3YXMgZXZlbiBjaGFuZ2VkIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhpcyBqdXN0IHNlZW1zIGxpa2UgYSBuZWVkbGVzcyByZWZhY3RvcmluZy4gVW5sZXNzIEkgYW0gbWlzc2luZyBzb21ldGhpbmcgc3VidGxlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmV0X3pjb3B5X2dldGAuIExldCBtZSBkaXZlIGludG8gdGhhdCBjb2RlIGFuZCBzZWUgaWYgdGhlcmUncyBhbiBhY3R1YWwgc2VtYW50aWMgZGlmZmVyZW5jZSBoZXJlIHRoYXQgSSdtIG92ZXJsb29raW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNjo1MzoyMy41ODE3MDUwNjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA1MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTgxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgxMDpcXHR7XFxuMTgxMTpcXHRcXHRyZXR1cm4gc2tiX3pjb3B5X3B1cmUoc2tiMSkgPT0gc2tiX3pjb3B5X3B1cmUoc2tiMik7XFxuMTgxMjpcXHR9XFxuMTgxMzpcXHRcXG4xODE0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRfemNvcHlfZ2V0KHN0cnVjdCB1YnVmX2luZm8gKnVhcmcpXFxuMTgxNTpcXHR7XFxuMTgxNjpcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnVhcmctXFx1MDAzZXJlZmNudCk7XFxuMTgxNzpcXHR9XFxuMTgxODpcXHRcXG4xODE5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfemNvcHlfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnKVxcbjE4MjA6XFx0e1xcbjE4MjE6XFx0XFx0c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkZXN0cnVjdG9yX2FyZyA9IHVhcmc7XFxuMTgyMjpcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZsYWdzIHw9IHVhcmctXFx1MDAzZWZsYWdzO1xcbjE4MjM6XFx0fVxcbjE4MjQ6XFx0XFxuMTgyNTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnLFxcbjE4MjY6XFx0XFx0XFx0XFx0XFx0IGJvb2wgKmhhdmVfcmVmKVxcbjE4Mjc6XFx0e1xcbjE4Mjg6XFx0XFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiB1YXJnIFxcdTAwMjZcXHUwMDI2ICFza2JfemNvcHkoc2tiKSkge1xcbjE4Mjk6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGhhdmVfcmVmIFxcdTAwMjZcXHUwMDI2ICpoYXZlX3JlZikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjUzOjIzLjU4MjMxNjg2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjgyMTU1MTI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBBIE1pbm9yIFJlZmFjdG9yaW5nIGFuZCBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGFyZSBwdXJlIHJlZmFjdG9yaW5ncy4gVGhlIGZpcnN0IGNoYW5nZSByZXBsYWNlcyBgcmVmY291bnRfaW5jKFx1MDAyNnNrYl91YXJnKHNrYiktXHUwMDNlcmVmY250KWAgd2l0aCBgbmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKWAuICBTaW5jZSBgbmV0X3pjb3B5X2dldGAgaXMgbGl0ZXJhbGx5IGp1c3QgYW4gYWxpYXMgZm9yIGByZWZjb3VudF9pbmNgLCB0aGlzIGlzIGEgc3RyYWlnaHQgc3dhcCwgZnVuY3Rpb25hbGx5IGlkZW50aWNhbC5cblxuVGhlIHNlY29uZCBjaGFuZ2UgaXMgd2hlcmUgaXQgZ2V0cyBzbGlnaHRseSBtb3JlIGludGVyZXN0aW5nLiAgV2UncmUgZ29pbmcgZnJvbSBgbmV0X3pjb3B5X2dldChza2JfemNvcHkoc2tiKSlgIHRvIGBuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpYC4gIExvb2tpbmcgYXQgYHNrYl96Y29weShza2IpYCwgaXQgZXNzZW50aWFsbHkgY2hlY2tzIGlmIHplcm8tY29weSBpcyBlbmFibGVkIGFuZCB0aGVuIHJldHVybnMgYHNrYl91YXJnKHNrYilgIGlmIGl0IGlzLCBhbmQgTlVMTCBvdGhlcndpc2UuICBTbywgaWYgYHNrYl96Y29weShza2IpYCBpcyB0cnVlLCB0aGUgdHdvIGNhbGxzIGFyZSBlcXVpdmFsZW50LiAgVGhlcmVmb3JlLCB0aGlzIGlzIGEgY29zbWV0aWMvcmVmYWN0b3JpbmcgY2hhbmdlIHRoYXQgYXZvaWRzIGEgcmVkdW5kYW50IGNoZWNrLlxuXG5Ob3csIGxldCdzIGRpZyBhIGJpdCBkZWVwZXIuICBgc2tiX3VhcmdgIGlzIGEgbWFjcm8sIGFuZCBgc2tiX3pjb3B5YCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24uIFVzaW5nIGBza2JfdWFyZ2AgZGlyZWN0bHkgYXZvaWRzIHRoZSBleHRyYSBjaGVjayB3aXRoaW4gYHNrYl96Y29weWAgYmVjYXVzZSB3ZSBhbHJlYWR5IGtub3cgdGhhdCBgc2tiX3pjb3B5KHNrYilgIGlzIHRydWUuIFNvIGl0J3MgYSBtaW5vciBvcHRpbWl6YXRpb24gdGhhdCBjbGVhbnMgdXAgdGhlIGNvZGUgYSBiaXQuIEl0IGRvZXNuJ3QgbW9kaWZ5IGV4ZWN1dGlvbiBmbG93IG9yIGZ1bmN0aW9uYWwgbG9naWMgaW4gYW55IHdheSB0aGF0IHJlcXVpcmVzIGZ1enppbmcuXG5cbkkndmUgZG91YmxlLWNoZWNrZWQgdGhlIGRpZmYgcHJvdmlkZWQgYW5kIGNvbmZpcm0gdGhpcyBpcyBjb25zaXN0ZW50bHkgYSBjbGVhbnVwIGFjcm9zcyBtdWx0aXBsZSBjb2RlIGxvY2F0aW9ucy4gIEVzc2VudGlhbGx5LCBpdCdzIGEgcmVmYWN0b3JpbmcgdG8gbWFrZSB0aGUgY29kZSBjbGVhcmVyIGFuZCBzbGlnaHRseSBtb3JlIGVmZmljaWVudCBieSBhdm9pZGluZyByZWR1bmRhbnQgY2hlY2tzLiBUaGVyZWZvcmUgSSB3aWxsIGNvbmNsdWRlIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjgyLCJPdXRwdXRUb2tlbnMiOjExMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNjo1MzozNi40MDM4NzIxNThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcvY2xlYW51cC4gSXQgcmVwbGFjZXMgZGlyZWN0IHJlZmNvdW50IGluY3JlbWVudHMgd2l0aCB0aGUgZXhpc3RpbmcgYG5ldF96Y29weV9nZXQoKWAgaGVscGVyIGFuZCBhdm9pZHMgYSByZWR1bmRhbnQgY2hlY2sgYnkgdXNpbmcgYHNrYl91YXJnKHNrYilgIGluc3RlYWQgb2YgYHNrYl96Y29weShza2IpYCBhZnRlciBgc2tiX3pjb3B5KHNrYilgIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZC4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwLiBJdCByZXBsYWNlcyBkaXJlY3QgcmVmY291bnQgaW5jcmVtZW50cyB3aXRoIHRoZSBleGlzdGluZyBgbmV0X3pjb3B5X2dldCgpYCBoZWxwZXIgYW5kIGF2b2lkcyBhIHJlZHVuZGFudCBjaGVjayBieSB1c2luZyBgc2tiX3Vhcmcoc2tiKWAgaW5zdGVhZCBvZiBgc2tiX3pjb3B5KHNrYilgIGFmdGVyIGBza2JfemNvcHkoc2tiKWAgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowqb2pg[1] Phase: Running StartedAt: 2026-07-08 16:53:48 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb2pg[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-08 16:53:48 +0000 UTC FinishedAt: 2026-07-08 16:53:55 +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,}