Name: series-workflowkmfz6 Phase: Failed StartedAt: 2026-07-21 20:51:35 +0000 UTC FinishedAt: 2026-07-21 21:34:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmfz6[0] Phase: Succeeded StartedAt: 2026-07-21 20:51:35 +0000 UTC FinishedAt: 2026-07-21 21:34:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmfz6[0].run-triage Phase: Succeeded StartedAt: 2026-07-21 20:51:35 +0000 UTC FinishedAt: 2026-07-21 21:34:17 +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+CgkJCTx0ZD4yMDI2LzA3LzIxIDIxOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJlc291cmNlIGxlYWtzIGluIHRoZSBwcm9iZSBlcnJvciBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgUXVhbGNvbW0gU29DcyBhbmQgaXRzIHByb2JlIHBhdGggaXMgbm90IHJlYWNoYWJsZSBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGEgZGVkaWNhdGVkIGVtdWxhdG9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAyMTozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdjNTZjNGZkN2NiZTk2OWMxZmZiYzRmNTVmOTcxMjIxMzgyOGZkZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAyMTozMjozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuaW5kZXggZjU2NmQ2OTlkMDc0YTguLmJkZjUzYWE3ZGRmMWY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuQEAgLTQzMSwzNiAmIzQzOzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXHUwMDNlaHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycClcbiB7XG4tXHRpbnQgaSwgajtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4mIzQzO1x0aW50IGo7XG4gXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaiYjNDM7JiM0MzspXG4tXHRcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfZ3JwLVx1MDAzZWlycXNbal1dLCBpcnFfZ3JwKTtcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGomIzQzOyYjNDM7KVxuJiM0MztcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfZ3JwLVx1MDAzZWlycXNbal1dLCBpcnFfZ3JwKTtcbiBcbi1cdFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpKTtcbi1cdFx0ZnJlZV9uZXRkZXYoaXJxX2dycC1cdTAwM2VuYXBpX25kZXYpO1xuLVx0fVxuJiM0MztcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4mIzQzO1x0ZnJlZV9uZXRkZXYoaXJxX2dycC1cdTAwM2VuYXBpX25kZXYpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuLVx0aW50IGlycV9pZHg7XG4gXHRpbnQgaTtcbiBcbi1cdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuLVx0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xuJiM0Mzt9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYi1cdTAwM2Vod19wYXJhbXMuY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9jZV9pcnFzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIGludCBtYXhfaWR4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlycV9pZHgsIGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1heF9pZHg7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChhdGgxMWtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpcnFfaWR4ID0gQVRIMTFLX0lSUV9DRTBfT0ZGU0VUICYjNDM7IGk7XG4gXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0sIFx1MDAyNmFiLVx1MDAzZWNlLmNlX3BpcGVbaV0pO1xuIFx0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcbiYjNDM7XHRcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XG4gXG4mIzQzO1x0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4gXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XG4gfVxuIFxuQEAgLTUyNCwyMCAmIzQzOzUzMiwyNSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKVxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIHtcbiBcdHN0cnVjdCBhdGgxMWtfaHdfcGFyYW1zICpodyA9IFx1MDAyNmFiLVx1MDAzZWh3X3BhcmFtcztcbiYjNDM7XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwO1xuIFx0aW50IGksIGo7XG4gXHRpbnQgaXJxO1xuIFx0aW50IHJldDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4gXHRcdHUzMiBudW1faXJxID0gMDtcbiBcbiYjNDM7XHRcdGlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiYjNDM7XG4gXHRcdGlycV9ncnAtXHUwMDNlYWIgPSBhYjtcbiBcdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuIFxuIFx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbi1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdGlmICghaXJxX2dycC1cdTAwM2VuYXBpX25kZXYpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gMDtcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdG5ldGlmX25hcGlfYWRkKGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2LCBcdTAwMjZpcnFfZ3JwLVx1MDAzZW5hcGksXG4gXHRcdFx0ICAgICAgIGF0aDExa19haGJfZXh0X2dycF9uYXBpX3BvbGwpO1xuQEAgLTU4NSw5ICYjNDM7NTk4LDcgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdGlycV9ncnAtXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XG4tXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG51bV9pcnE7IGomIzQzOyYjNDM7KSB7XG4gXHRcdFx0aW50IGlycV9pZHggPSBpcnFfZ3JwLVx1MDAzZWlycXNbal07XG4gXG4gXHRcdFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoYWItXHUwMDNlcGRldixcbkBAIC02MDAsMTEgJiM0Mzs2MTEsMjMgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgaXJxKTtcbiYjNDM7XHRcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBqO1xuJiM0MztcdFx0XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XG4gXHRcdFx0fVxuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gbnVtX2lycTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3JlcXVlc3RfaXJxOlxuJiM0MztcdGZvciAoaS0tOyBpIFx1MDAzZT0gMDsgaS0tKSB7XG4mIzQzO1x0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4mIzQzO1x0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuQEAgLTYyOSwxNiAmIzQzOzY1MiwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxuIFx0XHRcdFx0ICBjZV9waXBlKTtcbi1cdFx0aWYgKHJldClcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwmIzM0OywgaXJxKTtcbiYjNDM7XHRcdFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGkpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHR9XG4gXG4gXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuIFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi1cdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGF0aDExa19haGJfbWFwX3NlcnZpY2VfdG9fcGlwZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCB1MTYgc2VydmljZV9pZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAyMTozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIHByb2JlIGVycm9yIHBhdGggb2YgdGhlIGF0aDExayBBSEIgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBTb0NzIGFuZCBpdHMgcHJvYmUgcGF0aCBpcyBub3QgcmVhY2hhYmxlIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YzU2YzRmZDdjYmU5NjljMWZmYmM0ZjU1Zjk3MTIyMTM4MjhmZGVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjEgMjE6MzI6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYwppbmRleCBmNTY2ZDY5OWQwNzRhOC4uYmRmNTNhYTdkZGYxZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYwpAQCAtNDMxLDM2ICYjNDM7NDMxLDQ0IEBAIHN0YXRpYyB2b2lkIGF0aDExa19haGJfaW5pdF9xbWlfY2VfY29uZmlnKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJYWItJmd0O3FtaS5zZXJ2aWNlX2luc19pZCA9IGFiLSZndDtod19wYXJhbXMucW1pX3NlcnZpY2VfaW5zX2lkOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQomIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwKQogewotCWludCBpLCBqOwotCi0JZm9yIChpID0gMDsgaSAmbHQ7IEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gJmFtcDthYi0mZ3Q7ZXh0X2lycV9ncnBbaV07CiYjNDM7CWludCBqOwogCi0JCWZvciAoaiA9IDA7IGogJmx0OyBpcnFfZ3JwLSZndDtudW1faXJxOyBqJiM0MzsmIzQzOykKLQkJCWZyZWVfaXJxKGFiLSZndDtpcnFfbnVtW2lycV9ncnAtJmd0O2lycXNbal1dLCBpcnFfZ3JwKTsKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7IGlycV9ncnAtJmd0O251bV9pcnE7IGomIzQzOyYjNDM7KQomIzQzOwkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2dycC0mZ3Q7aXJxc1tqXV0sIGlycV9ncnApOwogCi0JCW5ldGlmX25hcGlfZGVsKCZhbXA7aXJxX2dycC0mZ3Q7bmFwaSk7Ci0JCWZyZWVfbmV0ZGV2KGlycV9ncnAtJmd0O25hcGlfbmRldik7Ci0JfQomIzQzOwluZXRpZl9uYXBpX2RlbCgmYW1wO2lycV9ncnAtJmd0O25hcGkpOwomIzQzOwlmcmVlX25ldGRldihpcnFfZ3JwLSZndDtuYXBpX25kZXYpOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIHsKLQlpbnQgaXJxX2lkeDsKIAlpbnQgaTsKIAotCWlmIChhYi0mZ3Q7aHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSkKLQkJcmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykKJiM0MzsJCWF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgJmFtcDthYi0mZ3Q7ZXh0X2lycV9ncnBbaV0pOwomIzQzO30KIAotCWZvciAoaSA9IDA7IGkgJmx0OyBhYi0mZ3Q7aHdfcGFyYW1zLmNlX2NvdW50OyBpJiM0MzsmIzQzOykgewomIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9jZV9pcnFzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIGludCBtYXhfaWR4KQomIzQzO3sKJiM0MzsJaW50IGlycV9pZHgsIGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBtYXhfaWR4OyBpJiM0MzsmIzQzOykgewogCQlpZiAoYXRoMTFrX2NlX2dldF9hdHRyX2ZsYWdzKGFiLCBpKSAmYW1wOyBDRV9BVFRSX0RJU19JTlRSKQogCQkJY29udGludWU7CiAJCWlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgJiM0MzsgaTsKIAkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2lkeF0sICZhbXA7YWItJmd0O2NlLmNlX3BpcGVbaV0pOwogCX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQomIzQzO3sKJiM0MzsJaWYgKGFiLSZndDtod19wYXJhbXMuaHlicmlkX2J1c190eXBlKQomIzQzOwkJcmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTsKIAomIzQzOwlhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItJmd0O2h3X3BhcmFtcy5jZV9jb3VudCk7CiAJYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoYWIpOwogfQogCkBAIC01MjQsMjAgJiM0Mzs1MzIsMjUgQEAgc3RhdGljIGlycXJldHVybl90IGF0aDExa19haGJfZXh0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogewogCXN0cnVjdCBhdGgxMWtfaHdfcGFyYW1zICpodyA9ICZhbXA7YWItJmd0O2h3X3BhcmFtczsKJiM0MzsJc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycDsKIAlpbnQgaSwgajsKIAlpbnQgaXJxOwogCWludCByZXQ7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKIAkJdTMyIG51bV9pcnEgPSAwOwogCiYjNDM7CQlpcnFfZ3JwID0gJmFtcDthYi0mZ3Q7ZXh0X2lycV9ncnBbaV07CiYjNDM7CiAJCWlycV9ncnAtJmd0O2FiID0gYWI7CiAJCWlycV9ncnAtJmd0O2dycF9pZCA9IGk7CiAKIAkJaXJxX2dycC0mZ3Q7bmFwaV9uZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApOwotCQlpZiAoIWlycV9ncnAtJmd0O25hcGlfbmRldikKLQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJaWYgKCFpcnFfZ3JwLSZndDtuYXBpX25kZXYpIHsKJiM0MzsJCQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJCWlycV9ncnAtJmd0O251bV9pcnEgPSAwOwomIzQzOwkJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwomIzQzOwkJfQogCiAJCW5ldGlmX25hcGlfYWRkKGlycV9ncnAtJmd0O25hcGlfbmRldiwgJmFtcDtpcnFfZ3JwLSZndDtuYXBpLAogCQkJICAgICAgIGF0aDExa19haGJfZXh0X2dycF9uYXBpX3BvbGwpOwpAQCAtNTg1LDkgJiM0Mzs1OTgsNyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIAkJCQl9CiAJCQl9CiAJCX0KLQkJaXJxX2dycC0mZ3Q7bnVtX2lycSA9IG51bV9pcnE7Ci0KLQkJZm9yIChqID0gMDsgaiAmbHQ7IGlycV9ncnAtJmd0O251bV9pcnE7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgbnVtX2lycTsgaiYjNDM7JiM0MzspIHsKIAkJCWludCBpcnFfaWR4ID0gaXJxX2dycC0mZ3Q7aXJxc1tqXTsKIAogCQkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoYWItJmd0O3BkZXYsCkBAIC02MDAsMTEgJiM0Mzs2MTEsMjMgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJCQlpZiAocmV0KSB7CiAJCQkJYXRoMTFrX2VycihhYiwgJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXG4mIzM0OywKIAkJCQkJICAgaXJxKTsKJiM0MzsJCQkJaXJxX2dycC0mZ3Q7bnVtX2lycSA9IGo7CiYjNDM7CQkJCWF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7CiYjNDM7CQkJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwogCQkJfQogCQl9CiYjNDM7CiYjNDM7CQlpcnFfZ3JwLSZndDtudW1faXJxID0gbnVtX2lycTsKIAl9CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcmVxdWVzdF9pcnE6CiYjNDM7CWZvciAoaS0tOyBpICZndDs9IDA7IGktLSkgewomIzQzOwkJaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwomIzQzOwkJYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQpAQCAtNjI5LDE2ICYjNDM7NjUyLDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9jZV9pbnRlcnJ1cHRfaGFuZGxlciwKIAkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLAogCQkJCSAgY2VfcGlwZSk7Ci0JCWlmIChyZXQpCiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJYXRoMTFrX2VycihhYiwgJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXG4mIzM0OywgaXJxKTsKJiM0MzsJCQlhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7CiAJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQogCiAJCWFiLSZndDtpcnFfbnVtW2lycV9pZHhdID0gaXJxOwogCX0KIAogCS8qIENvbmZpZ3VyZSBleHRlcm5hbCBpbnRlcnJ1cHRzICovCiAJcmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWF0aDExa19lcnIoYWIsICYjMzQ7ZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItJmd0O2h3X3BhcmFtcy5jZV9jb3VudCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDIxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NzMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggRXZhbHVhdGlvbiBhbmQgUmVhY2hhYmlsaXR5IEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCYjMzk7cyBkaXNzZWN0IGl0LiBJdCYjMzk7cyBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBRdWFsY29tbSBXaS1GaSwgc3BlY2lmaWNhbGx5IHRoZSBBSEIgaW50ZXJmYWNlLiBUaGUgcGF0Y2ggdGFyZ2V0cyBlcnJvciBoYW5kbGluZyBpbiBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLCB3aGljaCB1c3VhbGx5IG1lYW5zIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGNsZWFudXAgb2YgSVJRcyBhbmQgbmV0ZGV2cyB3aGVuIGBhbGxvY19uZXRkZXZfZHVtbXlgIG9yIGByZXF1ZXN0X2lycWAgZmFpbCwgaW50cm9kdWNpbmcgdGhlc2UgbmV3IGZ1bmN0aW9ucyBgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwYCBhbmQgYGF0aDExa19haGJfZnJlZV9jZV9pcnFzYCB0byBoYW5kbGUgcGFydGlhbCBhbGxvY2F0aW9ucy4KCk15IG5leHQgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgJiMzNDtJcyB0aGlzIHJlYWNoYWJsZSwgYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/JiMzNDsgSW5pdGlhbGl6YXRpb24gZXJyb3IgcGF0aHMgY2FuIGJlIGdvbGRtaW5lcyBmb3IgZmluZGluZyBzdWJ0bGUgYnVncywgYnV0IHRoZXkmIzM5O3JlIG9mdGVuIHRyaWNreSB0byB0cmlnZ2VyIHJlbGlhYmx5LiBUaGlzIGlzIGEgd2lyZWxlc3MgZHJpdmVyLCBgYXRoMTFrYCwgc28gdGhlIHF1ZXN0aW9uIGlzLCBob3cgZWFzaWx5IGNhbiB3ZSBmdXp6IHRoYXQ/IEl0JiMzOTtzIGEgUENJL0FIQiBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpLCB3aGljaCBnaXZlcyBtZSBwYXVzZS4gQUhCIGlzIHR5cGljYWxseSBhbiBTb0MgdGhpbmcsIGxpa2UgdGhlIElQUTgwNzQsIHJpZ2h0PyBTbyBjYW4gd2UgZXZlbiBmdXp6IEFIQiBkcml2ZXJzIGVmZmVjdGl2ZWx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoZXkmIzM5O3JlIHVzdWFsbHkgcHJldHR5IHBsYXRmb3JtLXNwZWNpZmljLCBhbmQgc3l6a2FsbGVyLCBpbiBteSBleHBlcmllbmNlLCBpc24mIzM5O3QgZ3JlYXQgYXQgdGFyZ2V0aW5nIEFIQiBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGVyZSYjMzk7cyBhIGdvb2Qgd2F5IHRvIGluc3RhbnRpYXRlIHRoZW0gb3IgYSBzcGVjaWZpYyBtb2NrIHNldHVwLgoKVGhpcyBpcyBhIG1lbW9yeS9yZXNvdXJjZSBsZWFrIGZpeCBvbiBwcm9iZSBmYWlsdXJlLiBUaGF0IHNtZWxscyBsaWtlIGEgaGFyZHdhcmUgaXNzdWUsIGFuZCBpZiBpdCYjMzk7cyBqdXN0IGEgcHJvYmUgZmFpbHVyZSBjbGVhbnVwIGluIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGxpa2UgdGhpcywgaXTigJlzIHByb2JhYmx5IG5vdCByZWFjaGFibGUgaW4gYSBnZW5lcmljIFZNIHdpdGhvdXQgdGhlIGhhcmR3YXJlIG9yIGEgc3VpdGFibGUgZW11bGF0b3IuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgYXRoMTFrYCBpcyBldmVuIGVuYWJsZWQgaW4gc3RhbmRhcmQgY29uZmlncyBvciBpZiBpdOKAmXMgdGVzdGFibGUgYnkgY2hlY2tpbmcgaWYgaXRzIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyBhcmUgcHJlc2VudCBpbiB0aGUga2VybmVsLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIGBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYCB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB0aGUgY29kZSwgdG8gY29uZmlybSB0aGF0IGl0JiMzOTtzIHByZXNlbnQgYW5kIHRvIGdpdmUgbXlzZWxmIGEgbWVudGFsIG1hcCBvZiB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDIxOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19haGJfY29uZmlnX2V4dF9pcnEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz01MTg9c3RhdGljIGlycXJldHVybl90IGF0aDExa19haGJfZXh0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTUzMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6NTMyOnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy01MzMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9NjMzPXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy02NjQtXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo2NjU6XHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNjY2LVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDIxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIERyaXZlciBQcm9iZSBFcnJvciBIYW5kbGluZyoqCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgd2l0aCB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIGRyaXZlciYjMzk7cyBwcm9iZSBvciBpbml0aWFsaXphdGlvbiBwaGFzZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gZnVuY3Rpb25zIGxpa2UgYGF0aDExa19haGJfcHJvYmVgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSB0cmFjZSB3aGVyZSBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSByZWxldmFudCBjb2RlYmFzZS4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIHJldmVhbCB0aGUgbG9naWMgaXQmIzM5O3MgcGFydCBvZiBhbmQgaGVscCBjbGFyaWZ5IHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IG1vZGlmaWNhdGlvbnMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZXZhbHVhdGluZyBwb3RlbnRpYWwgaW1wYWN0cyBvbiBzdGFiaWxpdHkgYW5kIHJvYnVzdG5lc3MgZHVyaW5nIHRoZSBkZXZpY2UmIzM5O3MgaW5pdGlhbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19haGJfY29uZmlnX2lycSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTUzMj1zdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTYzMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6NjMzOnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTYzNC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMTM4PXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIzMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTIzMTpcdHJldCA9IGF0aDExa19haGJfY29uZmlnX2lycShhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEyMzItXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgwNQoJCQkJCQkJb3V0cHV0OiA5MwoJCQkJCQkJdGhvdWdodHM6IDQ4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogQXRoMTFrIEFIQiBQcm9iZSBFcnJvciBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIGNvZGUgaXMgcmVhY2hlZCB0aHJvdWdoIGBhdGgxMWtfYWhiX3Byb2JlYCwgYSBwbGF0Zm9ybSBkcml2ZXIgcHJvYmUgZnVuY3Rpb24uIFRvIGdldCBoZXJlLCB3ZSBuZWVkIGEgcmVnaXN0ZXJlZCBwbGF0Zm9ybSBkZXZpY2UgdGhhdCBtYXRjaGVzIHRoZSBkcml2ZXIuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGluamVjdCB0aGlzIHBsYXRmb3JtIGRldmljZSBzb21laG93IGluIGEgZ2VuZXJpYyBWTSwgb3IgaXMgdGhpcyBpbmhlcmVudGx5IGhhcmR3YXJlLXNwZWNpZmljPyBOb3JtYWxseSwgcGxhdGZvcm0gZGV2aWNlcyBjb21lIGZyb20gRGV2aWNlIFRyZWUgb3IgQUNQSSwgb3IgYXJlIGNyZWF0ZWQgYnkgb3RoZXIga2VybmVsIGNvZGUuIFVubGVzcyB0aGVyZSYjMzk7cyBhIGJhY2sgZG9vciBsaWtlIGBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJgIGV4cG9zZWQgdGhyb3VnaCBzb21lIGRlYnVnIGludGVyZmFjZSBvciBTeXprYWxsZXIgcHNldWRvLXN5c2NhbGwuLi4KCldhaXQgYSBtaW51dGUsIFN5emthbGxlciAqZG9lcyogaGF2ZSBzb21lIHBsYXRmb3JtIGRldmljZSBpbmplY3Rpb24sIGJ1dCBpdCYjMzk7cyBsaW1pdGVkLiBUaGUgYmlnZ2VzdCBjaGFsbGVuZ2UgaGVyZSBpcyB0aGF0IHRoaXMgaXMgdGhlIEFIQiB2YXJpYW50IG9mIHRoZSBgYXRoMTFrYCBXaS1GaSBkcml2ZXIsIHdoaWNoIGlzIGFsbCBhYm91dCBRdWFsY29tbSBTb0NzIGxpa2UgSVBRODA3NC4gRXZlbiAqaWYqIHdlIHNvbWVob3cgaW5qZWN0IHRoZSBkZXZpY2UsIGl0JiMzOTtzIGdvaW5nIHRvIGltbWVkaWF0ZWx5IHRyeSB0byB0YWxrIHRvIGhhcmR3YXJlIHJlZ2lzdGVycy4gVGhpbmsgYGlvcmVtYXBgLCBgcmVhZGxgLCBgd3JpdGVsYCDigJMgdGhhdCYjMzk7cyBhIHJlY2lwZSBmb3IgYW4gaW1tZWRpYXRlIGNyYXNoIG9yIGFuIGVhcmx5LCBpZ25vbWluaW91cyBmYWlsdXJlLiBBbmQgZXZlbiBpZiB3ZSBnZXQgcGFzdCB0aGF0LCB0aGUgSVJRIGNvbmZpZ3VyYXRpb24gaXMgZ29pbmcgdG8gZmFpbCwgc2luY2UgdGhlIGFjdHVhbCBoYXJkd2FyZSBJUlFzIHdvbiYjMzk7dCBiZSBwcmVzZW50LgoKQWgsIGJ1dCB0aGUgcGF0Y2ggaXRzZWxmLi4uIGl0JiMzOTtzIGFsbCBhYm91dCBlcnJvciBoYW5kbGluZyB3aGVuIGByZXF1ZXN0X2lycWAgb3IgYGFsbG9jX25ldGRldl9kdW1teWAgZmFpbHMuIFNvLCBpZiB3ZSAqY291bGQqIGluamVjdCB0aGUgZGV2aWNlLCBgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWVgICptaWdodCogZmFpbCwgYW5kIHRyaWdnZXIgdGhlIGVycm9yIHBhdGguIEJ1dCBpcyBpdCB3b3J0aCB0aGUgZWZmb3J0PwoKTG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBlcnJvciBwYXRoIGNsZWFudXAgZml4OiBmcmVlaW5nIElSUXMgYW5kIG5ldGRldnMgb24gcHJvYmUgZmFpbHVyZS4gTm8gY29tcGxleCBsb2dpYyBpcyBhZGRlZCwganVzdCBzdGFuZGFyZCBjbGVhbnVwLiBJdCYjMzk7cyBhbHNvIGV4dHJlbWVseSBoYXJkd2FyZS1zcGVjaWZpYyDigJMgdGhlIGF0aDExayBBSEIuCgpTbywgaGVyZSYjMzk7cyBteSB2ZXJkaWN0OiBJIHdpbGwgbWFyayBpdCBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQmIzM5O3MgYW4gdW5yZWFjaGFibGUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHByb2JlIGVycm9yIHBhdGggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdOKAmXMgZXhjZWVkaW5nbHkgdW5saWtlbHkgdG8gYmUgdHJpZ2dlcmVkIG91dHNpZGUgb2YgYSByZWFsIFF1YWxjb21tIFNvQy1iYXNlZCBzeXN0ZW0gb3IgYSB2ZXJ5IHNwZWNpYWxpemVkIGVtdWxhdG9yLgoKTGV0JiMzOTtzIGRvdWJsZSBjaGVjay4KCkFoLCB5ZXMsIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSBtZW1vcnkgbGVhayDigJMgYSByZXNvdXJjZSBsZWFrIOKAkyBvbiBwcm9iZSBmYWlsdXJlLiBJdOKAmXMgYSB2ZXJ5IGNvbW1vbiBwYXR0ZXJuLiBCdXQgdGhlIG92ZXJhbGwgYXNzZXNzbWVudCBkb2VzbuKAmXQgY2hhbmdlLiBUaGUgc2FtZSByZWFzb25pbmcgYXBwbGllczogSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCwgYmVjYXVzZSBpdCYjMzk7cyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciAoYXRoMTFrIEFIQikgcHJvYmUgZXJyb3IgcGF0aCwgYW5kIGl0IGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRob3V0IHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvciBhIHN1aXRhYmxlIGVtdWxhdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDIxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIHByb2JlIGVycm9yIHBhdGggb2YgdGhlIGF0aDExayBBSEIgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBTb0NzIGFuZCBpdHMgcHJvYmUgcGF0aCBpcyBub3QgcmVhY2hhYmxlIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgcHJvYmUgZXJyb3IgcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFNvQ3MgYW5kIGl0cyBwcm9iZSBwYXRoIGlzIG5vdCByZWFjaGFibGUgaW4gZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBvciBhIGRlZGljYXRlZCBlbXVsYXRvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMVQyMTozMjozNi45NTM3MDcxOTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzkwNTExMTExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIHByb2JlIGVycm9yIHBhdGggb2YgdGhlIGF0aDExayBBSEIgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBTb0NzIGFuZCBpdHMgcHJvYmUgcGF0aCBpcyBub3QgcmVhY2hhYmxlIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQyMTozMjozNi45NTM3MTgxMTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzYwNDUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdjNTZjNGZkN2NiZTk2OWMxZmZiYzRmNTVmOTcxMjIxMzgyOGZkZWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMjE6MzI6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcXG5pbmRleCBmNTY2ZDY5OWQwNzRhOC4uYmRmNTNhYTdkZGYxZjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcXG5AQCAtNDMxLDM2ICs0MzEsNDQgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9pbml0X3FtaV9jZV9jb25maWcoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0YWItXFx1MDAzZXFtaS5zZXJ2aWNlX2luc19pZCA9IGFiLVxcdTAwM2Vod19wYXJhbXMucW1pX3NlcnZpY2VfaW5zX2lkO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycClcXG4ge1xcbi1cXHRpbnQgaSwgajtcXG4tXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XFxuLVxcdFxcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xcbitcXHRpbnQgajtcXG4gXFxuLVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBpcnFfZ3JwLVxcdTAwM2VudW1faXJxOyBqKyspXFxuLVxcdFxcdFxcdGZyZWVfaXJxKGFiLVxcdTAwM2VpcnFfbnVtW2lycV9ncnAtXFx1MDAzZWlycXNbal1dLCBpcnFfZ3JwKTtcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKylcXG4rXFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2dycC1cXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xcbiBcXG4tXFx0XFx0bmV0aWZfbmFwaV9kZWwoXFx1MDAyNmlycV9ncnAtXFx1MDAzZW5hcGkpO1xcbi1cXHRcXHRmcmVlX25ldGRldihpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpO1xcbi1cXHR9XFxuK1xcdG5ldGlmX25hcGlfZGVsKFxcdTAwMjZpcnFfZ3JwLVxcdTAwM2VuYXBpKTtcXG4rXFx0ZnJlZV9uZXRkZXYoaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiB7XFxuLVxcdGludCBpcnFfaWR4O1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGlmIChhYi1cXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcXG4tXFx0XFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspXFxuK1xcdFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXSk7XFxuK31cXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYi1cXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50OyBpKyspIHtcXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXFxuK3tcXG4rXFx0aW50IGlycV9pZHgsIGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWF4X2lkeDsgaSsrKSB7XFxuIFxcdFxcdGlmIChhdGgxMWtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFxcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgKyBpO1xcbiBcXHRcXHRmcmVlX2lycShhYi1cXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXFx1MDAyNmFiLVxcdTAwM2VjZS5jZV9waXBlW2ldKTtcXG4gXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuK3tcXG4rXFx0aWYgKGFiLVxcdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxcbitcXHRcXHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xcbiBcXG4rXFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xcbiBcXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XFxuIH1cXG4gXFxuQEAgLTUyNCwyMCArNTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiB7XFxuIFxcdHN0cnVjdCBhdGgxMWtfaHdfcGFyYW1zICpodyA9IFxcdTAwMjZhYi1cXHUwMDNlaHdfcGFyYW1zO1xcbitcXHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwO1xcbiBcXHRpbnQgaSwgajtcXG4gXFx0aW50IGlycTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XFxuLVxcdFxcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xcbiBcXHRcXHR1MzIgbnVtX2lycSA9IDA7XFxuIFxcbitcXHRcXHRpcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXTtcXG4rXFxuIFxcdFxcdGlycV9ncnAtXFx1MDAzZWFiID0gYWI7XFxuIFxcdFxcdGlycV9ncnAtXFx1MDAzZWdycF9pZCA9IGk7XFxuIFxcbiBcXHRcXHRpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYgPSBhbGxvY19uZXRkZXZfZHVtbXkoMCk7XFxuLVxcdFxcdGlmICghaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0aWYgKCFpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IDA7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3JlcXVlc3RfaXJxO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRuZXRpZl9uYXBpX2FkZChpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYsIFxcdTAwMjZpcnFfZ3JwLVxcdTAwM2VuYXBpLFxcbiBcXHRcXHRcXHQgICAgICAgYXRoMTFrX2FoYl9leHRfZ3JwX25hcGlfcG9sbCk7XFxuQEAgLTU4NSw5ICs1OTgsNyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4tXFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XFxuLVxcbi1cXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaXJxX2dycC1cXHUwMDNlbnVtX2lycTsgaisrKSB7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBudW1faXJxOyBqKyspIHtcXG4gXFx0XFx0XFx0aW50IGlycV9pZHggPSBpcnFfZ3JwLVxcdTAwM2VpcnFzW2pdO1xcbiBcXG4gXFx0XFx0XFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoYWItXFx1MDAzZXBkZXYsXFxuQEAgLTYwMCwxMSArNjExLDIzIEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiBcXHRcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBpcnEpO1xcbitcXHRcXHRcXHRcXHRpcnFfZ3JwLVxcdTAwM2VudW1faXJxID0gajtcXG4rXFx0XFx0XFx0XFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX3JlcXVlc3RfaXJxOlxcbitcXHRmb3IgKGktLTsgaSBcXHUwMDNlPSAwOyBpLS0pIHtcXG4rXFx0XFx0aXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuK1xcdFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5AQCAtNjI5LDE2ICs2NTIsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0XFx0cmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2NlX2ludGVycnVwdF9oYW5kbGVyLFxcbiBcXHRcXHRcXHRcXHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxcbiBcXHRcXHRcXHRcXHQgIGNlX3BpcGUpO1xcbi1cXHRcXHRpZiAocmV0KVxcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxcXG5cXFwiLCBpcnEpO1xcbitcXHRcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7XFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xcbiBcXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDIxOjMyOjM3LjUxODAwNjIwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3MzQwODA1NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgcHJvYmUgZXJyb3IgcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFNvQ3MgYW5kIGl0cyBwcm9iZSBwYXRoIGlzIG5vdCByZWFjaGFibGUgaW4gZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBvciBhIGRlZGljYXRlZCBlbXVsYXRvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2M1NmM0ZmQ3Y2JlOTY5YzFmZmJjNGY1NWY5NzEyMjEzODI4ZmRlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDIxOjMyOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbmluZGV4IGY1NjZkNjk5ZDA3NGE4Li5iZGY1M2FhN2RkZjFmNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbkBAIC00MzEsMzYgKzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXHUwMDNlaHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnApXG4ge1xuLVx0aW50IGksIGo7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbitcdGludCBqO1xuIFxuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGorKylcbi1cdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqKyspXG4rXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XG4gXG4tXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4tXHRcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KTtcbi1cdH1cbitcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4rXHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIHtcbi1cdGludCBpcnFfaWR4O1xuIFx0aW50IGk7XG4gXG4tXHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcbi1cdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspXG4rXHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xuK31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSsrKSB7XG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4re1xuK1x0aW50IGlycV9pZHgsIGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXhfaWR4OyBpKyspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgKyBpO1xuIFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldKTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuK3tcbitcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuK1x0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuIFxuK1x0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4gXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XG4gfVxuIFxuQEAgLTUyNCwyMCArNTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuK1x0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycDtcbiBcdGludCBpLCBqO1xuIFx0aW50IGlycTtcbiBcdGludCByZXQ7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuK1x0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4rXG4gXHRcdGlycV9ncnAtXHUwMDNlYWIgPSBhYjtcbiBcdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuIFxuIFx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbi1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gMDtcbitcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbitcdFx0fVxuIFxuIFx0XHRuZXRpZl9uYXBpX2FkZChpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiwgXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpLFxuIFx0XHRcdCAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTtcbkBAIC01ODUsOSArNTk4LDcgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdGlycV9ncnAtXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XG4tXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaisrKSB7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG51bV9pcnE7IGorKykge1xuIFx0XHRcdGludCBpcnFfaWR4ID0gaXJxX2dycC1cdTAwM2VpcnFzW2pdO1xuIFxuIFx0XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLVx1MDAzZXBkZXYsXG5AQCAtNjAwLDExICs2MTEsMjMgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0YXRoMTFrX2VycihhYiwgXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxuXCIsXG4gXHRcdFx0XHRcdCAgIGlycSk7XG4rXHRcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBqO1xuK1x0XHRcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcbitcdFx0XHRcdGdvdG8gZXJyX3JlcXVlc3RfaXJxO1xuIFx0XHRcdH1cbiBcdFx0fVxuK1xuK1x0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX3JlcXVlc3RfaXJxOlxuK1x0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pIHtcbitcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbkBAIC02MjksMTYgKzY1MiwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxuIFx0XHRcdFx0ICBjZV9waXBlKTtcbi1cdFx0aWYgKHJldClcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwiLCBpcnEpO1xuK1x0XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXG4gXHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHR9XG4gXG4gXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuIFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcblwiLCByZXQpO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQyMTozMjozNy41MTgwMDc2OTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjk3NDY0MzQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBFdmFsdWF0aW9uIGFuZCBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCdzIGRpc3NlY3QgaXQuIEl0J3MgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGRlYWxpbmcgd2l0aCBRdWFsY29tbSBXaS1GaSwgc3BlY2lmaWNhbGx5IHRoZSBBSEIgaW50ZXJmYWNlLiBUaGUgcGF0Y2ggdGFyZ2V0cyBlcnJvciBoYW5kbGluZyBpbiBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLCB3aGljaCB1c3VhbGx5IG1lYW5zIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhleSdyZSBhZGRpbmcgY2xlYW51cCBvZiBJUlFzIGFuZCBuZXRkZXZzIHdoZW4gYGFsbG9jX25ldGRldl9kdW1teWAgb3IgYHJlcXVlc3RfaXJxYCBmYWlsLCBpbnRyb2R1Y2luZyB0aGVzZSBuZXcgZnVuY3Rpb25zIGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgIGFuZCBgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNgIHRvIGhhbmRsZSBwYXJ0aWFsIGFsbG9jYXRpb25zLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMsIFwiSXMgdGhpcyByZWFjaGFibGUsIGFuZCBpcyBpdCB3b3J0aCBmdXp6aW5nP1wiIEluaXRpYWxpemF0aW9uIGVycm9yIHBhdGhzIGNhbiBiZSBnb2xkbWluZXMgZm9yIGZpbmRpbmcgc3VidGxlIGJ1Z3MsIGJ1dCB0aGV5J3JlIG9mdGVuIHRyaWNreSB0byB0cmlnZ2VyIHJlbGlhYmx5LiBUaGlzIGlzIGEgd2lyZWxlc3MgZHJpdmVyLCBgYXRoMTFrYCwgc28gdGhlIHF1ZXN0aW9uIGlzLCBob3cgZWFzaWx5IGNhbiB3ZSBmdXp6IHRoYXQ/IEl0J3MgYSBQQ0kvQUhCIGRyaXZlciBmb3IgUXVhbGNvbW0gV2ktRmksIHdoaWNoIGdpdmVzIG1lIHBhdXNlLiBBSEIgaXMgdHlwaWNhbGx5IGFuIFNvQyB0aGluZywgbGlrZSB0aGUgSVBRODA3NCwgcmlnaHQ/IFNvIGNhbiB3ZSBldmVuIGZ1enogQUhCIGRyaXZlcnMgZWZmZWN0aXZlbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhleSdyZSB1c3VhbGx5IHByZXR0eSBwbGF0Zm9ybS1zcGVjaWZpYywgYW5kIHN5emthbGxlciwgaW4gbXkgZXhwZXJpZW5jZSwgaXNuJ3QgZ3JlYXQgYXQgdGFyZ2V0aW5nIEFIQiBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGVyZSdzIGEgZ29vZCB3YXkgdG8gaW5zdGFudGlhdGUgdGhlbSBvciBhIHNwZWNpZmljIG1vY2sgc2V0dXAuXG5cblRoaXMgaXMgYSBtZW1vcnkvcmVzb3VyY2UgbGVhayBmaXggb24gcHJvYmUgZmFpbHVyZS4gVGhhdCBzbWVsbHMgbGlrZSBhIGhhcmR3YXJlIGlzc3VlLCBhbmQgaWYgaXQncyBqdXN0IGEgcHJvYmUgZmFpbHVyZSBjbGVhbnVwIGluIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGxpa2UgdGhpcywgaXTigJlzIHByb2JhYmx5IG5vdCByZWFjaGFibGUgaW4gYSBnZW5lcmljIFZNIHdpdGhvdXQgdGhlIGhhcmR3YXJlIG9yIGEgc3VpdGFibGUgZW11bGF0b3IuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBhdGgxMWtgIGlzIGV2ZW4gZW5hYmxlZCBpbiBzdGFuZGFyZCBjb25maWdzIG9yIGlmIGl04oCZcyB0ZXN0YWJsZSBieSBjaGVja2luZyBpZiBpdHMgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zIGFyZSBwcmVzZW50IGluIHRoZSBrZXJuZWwuIEknbGwgdXNlIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2YgdGhlIGNvZGUsIHRvIGNvbmZpcm0gdGhhdCBpdCdzIHByZXNlbnQgYW5kIHRvIGdpdmUgbXlzZWxmIGEgbWVudGFsIG1hcCBvZiB0aGUgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTczLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMjE6MzI6NTQuNDkyNjU0NTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTU0OTIxODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTUxOD1zdGF0aWMgaXJxcmV0dXJuX3QgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy01MzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo1MzI6c3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy01MzMte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz02MzM9c3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNjY0LVxcdC8qIENvbmZpZ3VyZSBleHRlcm5hbCBpbnRlcnJ1cHRzICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo2NjU6XFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy02NjYtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQyMTozMjo1Ni44NDgxNTI2NzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMzMzY1NTg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBEcml2ZXIgUHJvYmUgRXJyb3IgSGFuZGxpbmcqKlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgd2l0aCB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIGRyaXZlcidzIHByb2JlIG9yIGluaXRpYWxpemF0aW9uIHBoYXNlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgaXQncyB0b3VjaGluZyBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gd2l0aGluIGZ1bmN0aW9ucyBsaWtlIGBhdGgxMWtfYWhiX3Byb2JlYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQgbWUgdHJhY2Ugd2hlcmUgYGF0aDExa19haGJfY29uZmlnX2lycWAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgcmVsZXZhbnQgY29kZWJhc2UuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCByZXZlYWwgdGhlIGxvZ2ljIGl0J3MgcGFydCBvZiBhbmQgaGVscCBjbGFyaWZ5IHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IG1vZGlmaWNhdGlvbnMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZXZhbHVhdGluZyBwb3RlbnRpYWwgaW1wYWN0cyBvbiBzdGFiaWxpdHkgYW5kIHJvYnVzdG5lc3MgZHVyaW5nIHRoZSBkZXZpY2UncyBpbml0aWFsIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNTAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQyMTozMzozOS4xODE4MTA5NDZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyNzQ5Mjk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX2NvbmZpZ19pcnFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz01MzI9c3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTYzMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjYzMzpzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNjM0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEzOD1zdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIzMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEyMzE6XFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfaXJxKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEyMzItXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQyMTozMzo0MS44MDkzMDg2NTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzA0OTQ2Nzg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogQXRoMTFrIEFIQiBQcm9iZSBFcnJvciBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBjb2RlIGlzIHJlYWNoZWQgdGhyb3VnaCBgYXRoMTFrX2FoYl9wcm9iZWAsIGEgcGxhdGZvcm0gZHJpdmVyIHByb2JlIGZ1bmN0aW9uLiBUbyBnZXQgaGVyZSwgd2UgbmVlZCBhIHJlZ2lzdGVyZWQgcGxhdGZvcm0gZGV2aWNlIHRoYXQgbWF0Y2hlcyB0aGUgZHJpdmVyLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBpbmplY3QgdGhpcyBwbGF0Zm9ybSBkZXZpY2Ugc29tZWhvdyBpbiBhIGdlbmVyaWMgVk0sIG9yIGlzIHRoaXMgaW5oZXJlbnRseSBoYXJkd2FyZS1zcGVjaWZpYz8gTm9ybWFsbHksIHBsYXRmb3JtIGRldmljZXMgY29tZSBmcm9tIERldmljZSBUcmVlIG9yIEFDUEksIG9yIGFyZSBjcmVhdGVkIGJ5IG90aGVyIGtlcm5lbCBjb2RlLiBVbmxlc3MgdGhlcmUncyBhIGJhY2sgZG9vciBsaWtlIGBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJgIGV4cG9zZWQgdGhyb3VnaCBzb21lIGRlYnVnIGludGVyZmFjZSBvciBTeXprYWxsZXIgcHNldWRvLXN5c2NhbGwuLi5cblxuV2FpdCBhIG1pbnV0ZSwgU3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgcGxhdGZvcm0gZGV2aWNlIGluamVjdGlvbiwgYnV0IGl0J3MgbGltaXRlZC4gVGhlIGJpZ2dlc3QgY2hhbGxlbmdlIGhlcmUgaXMgdGhhdCB0aGlzIGlzIHRoZSBBSEIgdmFyaWFudCBvZiB0aGUgYGF0aDExa2AgV2ktRmkgZHJpdmVyLCB3aGljaCBpcyBhbGwgYWJvdXQgUXVhbGNvbW0gU29DcyBsaWtlIElQUTgwNzQuIEV2ZW4gKmlmKiB3ZSBzb21laG93IGluamVjdCB0aGUgZGV2aWNlLCBpdCdzIGdvaW5nIHRvIGltbWVkaWF0ZWx5IHRyeSB0byB0YWxrIHRvIGhhcmR3YXJlIHJlZ2lzdGVycy4gVGhpbmsgYGlvcmVtYXBgLCBgcmVhZGxgLCBgd3JpdGVsYCDigJMgdGhhdCdzIGEgcmVjaXBlIGZvciBhbiBpbW1lZGlhdGUgY3Jhc2ggb3IgYW4gZWFybHksIGlnbm9taW5pb3VzIGZhaWx1cmUuIEFuZCBldmVuIGlmIHdlIGdldCBwYXN0IHRoYXQsIHRoZSBJUlEgY29uZmlndXJhdGlvbiBpcyBnb2luZyB0byBmYWlsLCBzaW5jZSB0aGUgYWN0dWFsIGhhcmR3YXJlIElSUXMgd29uJ3QgYmUgcHJlc2VudC5cblxuQWgsIGJ1dCB0aGUgcGF0Y2ggaXRzZWxmLi4uIGl0J3MgYWxsIGFib3V0IGVycm9yIGhhbmRsaW5nIHdoZW4gYHJlcXVlc3RfaXJxYCBvciBgYWxsb2NfbmV0ZGV2X2R1bW15YCBmYWlscy4gU28sIGlmIHdlICpjb3VsZCogaW5qZWN0IHRoZSBkZXZpY2UsIGBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZWAgKm1pZ2h0KiBmYWlsLCBhbmQgdHJpZ2dlciB0aGUgZXJyb3IgcGF0aC4gQnV0IGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQ/XG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBlcnJvciBwYXRoIGNsZWFudXAgZml4OiBmcmVlaW5nIElSUXMgYW5kIG5ldGRldnMgb24gcHJvYmUgZmFpbHVyZS4gTm8gY29tcGxleCBsb2dpYyBpcyBhZGRlZCwganVzdCBzdGFuZGFyZCBjbGVhbnVwLiBJdCdzIGFsc28gZXh0cmVtZWx5IGhhcmR3YXJlLXNwZWNpZmljIOKAkyB0aGUgYXRoMTFrIEFIQi5cblxuU28sIGhlcmUncyBteSB2ZXJkaWN0OiBJIHdpbGwgbWFyayBpdCBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQncyBhbiB1bnJlYWNoYWJsZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgcHJvYmUgZXJyb3IgcGF0aCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl04oCZcyBleGNlZWRpbmdseSB1bmxpa2VseSB0byBiZSB0cmlnZ2VyZWQgb3V0c2lkZSBvZiBhIHJlYWwgUXVhbGNvbW0gU29DLWJhc2VkIHN5c3RlbSBvciBhIHZlcnkgc3BlY2lhbGl6ZWQgZW11bGF0b3IuXG5cbkxldCdzIGRvdWJsZSBjaGVjay5cblxuQWgsIHllcywgdGhlIHBhdGNoIGlzIGZpeGluZyBhIG1lbW9yeSBsZWFrIOKAkyBhIHJlc291cmNlIGxlYWsg4oCTIG9uIHByb2JlIGZhaWx1cmUuIEl04oCZcyBhIHZlcnkgY29tbW9uIHBhdHRlcm4uIEJ1dCB0aGUgb3ZlcmFsbCBhc3Nlc3NtZW50IGRvZXNu4oCZdCBjaGFuZ2UuIFRoZSBzYW1lIHJlYXNvbmluZyBhcHBsaWVzOiBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLCBiZWNhdXNlIGl0J3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgKGF0aDExayBBSEIpIHByb2JlIGVycm9yIHBhdGgsIGFuZCBpdCBpcyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aG91dCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgb3IgYSBzdWl0YWJsZSBlbXVsYXRvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgwNSwiT3V0cHV0VG9rZW5zIjo5MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQyMTozNDowNC44NTg3Nzg5ODVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJlc291cmNlIGxlYWtzIGluIHRoZSBwcm9iZSBlcnJvciBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgUXVhbGNvbW0gU29DcyBhbmQgaXRzIHByb2JlIHBhdGggaXMgbm90IHJlYWNoYWJsZSBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGEgZGVkaWNhdGVkIGVtdWxhdG9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIHByb2JlIGVycm9yIHBhdGggb2YgdGhlIGF0aDExayBBSEIgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBTb0NzIGFuZCBpdHMgcHJvYmUgcGF0aCBpcyBub3QgcmVhY2hhYmxlIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmfz6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-21 20:51:35 +0000 UTC FinishedAt: 2026-07-21 21:34:07 +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+CgkJCTx0ZD4yMDI2LzA3LzIxIDIxOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJlc291cmNlIGxlYWtzIGluIHRoZSBwcm9iZSBlcnJvciBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgUXVhbGNvbW0gU29DcyBhbmQgaXRzIHByb2JlIHBhdGggaXMgbm90IHJlYWNoYWJsZSBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGEgZGVkaWNhdGVkIGVtdWxhdG9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAyMTozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdjNTZjNGZkN2NiZTk2OWMxZmZiYzRmNTVmOTcxMjIxMzgyOGZkZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAyMTozMjozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuaW5kZXggZjU2NmQ2OTlkMDc0YTguLmJkZjUzYWE3ZGRmMWY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuQEAgLTQzMSwzNiAmIzQzOzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXHUwMDNlaHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycClcbiB7XG4tXHRpbnQgaSwgajtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4mIzQzO1x0aW50IGo7XG4gXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaiYjNDM7JiM0MzspXG4tXHRcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfZ3JwLVx1MDAzZWlycXNbal1dLCBpcnFfZ3JwKTtcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGomIzQzOyYjNDM7KVxuJiM0MztcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfZ3JwLVx1MDAzZWlycXNbal1dLCBpcnFfZ3JwKTtcbiBcbi1cdFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpKTtcbi1cdFx0ZnJlZV9uZXRkZXYoaXJxX2dycC1cdTAwM2VuYXBpX25kZXYpO1xuLVx0fVxuJiM0MztcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4mIzQzO1x0ZnJlZV9uZXRkZXYoaXJxX2dycC1cdTAwM2VuYXBpX25kZXYpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuLVx0aW50IGlycV9pZHg7XG4gXHRpbnQgaTtcbiBcbi1cdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuLVx0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xuJiM0Mzt9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYi1cdTAwM2Vod19wYXJhbXMuY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9jZV9pcnFzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIGludCBtYXhfaWR4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlycV9pZHgsIGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1heF9pZHg7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChhdGgxMWtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpcnFfaWR4ID0gQVRIMTFLX0lSUV9DRTBfT0ZGU0VUICYjNDM7IGk7XG4gXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0sIFx1MDAyNmFiLVx1MDAzZWNlLmNlX3BpcGVbaV0pO1xuIFx0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcbiYjNDM7XHRcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XG4gXG4mIzQzO1x0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4gXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XG4gfVxuIFxuQEAgLTUyNCwyMCAmIzQzOzUzMiwyNSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKVxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIHtcbiBcdHN0cnVjdCBhdGgxMWtfaHdfcGFyYW1zICpodyA9IFx1MDAyNmFiLVx1MDAzZWh3X3BhcmFtcztcbiYjNDM7XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwO1xuIFx0aW50IGksIGo7XG4gXHRpbnQgaXJxO1xuIFx0aW50IHJldDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4gXHRcdHUzMiBudW1faXJxID0gMDtcbiBcbiYjNDM7XHRcdGlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiYjNDM7XG4gXHRcdGlycV9ncnAtXHUwMDNlYWIgPSBhYjtcbiBcdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuIFxuIFx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbi1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdGlmICghaXJxX2dycC1cdTAwM2VuYXBpX25kZXYpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gMDtcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdG5ldGlmX25hcGlfYWRkKGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2LCBcdTAwMjZpcnFfZ3JwLVx1MDAzZW5hcGksXG4gXHRcdFx0ICAgICAgIGF0aDExa19haGJfZXh0X2dycF9uYXBpX3BvbGwpO1xuQEAgLTU4NSw5ICYjNDM7NTk4LDcgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdGlycV9ncnAtXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XG4tXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG51bV9pcnE7IGomIzQzOyYjNDM7KSB7XG4gXHRcdFx0aW50IGlycV9pZHggPSBpcnFfZ3JwLVx1MDAzZWlycXNbal07XG4gXG4gXHRcdFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoYWItXHUwMDNlcGRldixcbkBAIC02MDAsMTEgJiM0Mzs2MTEsMjMgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgaXJxKTtcbiYjNDM7XHRcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBqO1xuJiM0MztcdFx0XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XG4gXHRcdFx0fVxuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gbnVtX2lycTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3JlcXVlc3RfaXJxOlxuJiM0MztcdGZvciAoaS0tOyBpIFx1MDAzZT0gMDsgaS0tKSB7XG4mIzQzO1x0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4mIzQzO1x0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuQEAgLTYyOSwxNiAmIzQzOzY1MiwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxuIFx0XHRcdFx0ICBjZV9waXBlKTtcbi1cdFx0aWYgKHJldClcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwmIzM0OywgaXJxKTtcbiYjNDM7XHRcdFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGkpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHR9XG4gXG4gXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuIFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi1cdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGF0aDExa19haGJfbWFwX3NlcnZpY2VfdG9fcGlwZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCB1MTYgc2VydmljZV9pZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAyMTozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIHByb2JlIGVycm9yIHBhdGggb2YgdGhlIGF0aDExayBBSEIgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBTb0NzIGFuZCBpdHMgcHJvYmUgcGF0aCBpcyBub3QgcmVhY2hhYmxlIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YzU2YzRmZDdjYmU5NjljMWZmYmM0ZjU1Zjk3MTIyMTM4MjhmZGVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjEgMjE6MzI6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYwppbmRleCBmNTY2ZDY5OWQwNzRhOC4uYmRmNTNhYTdkZGYxZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYwpAQCAtNDMxLDM2ICYjNDM7NDMxLDQ0IEBAIHN0YXRpYyB2b2lkIGF0aDExa19haGJfaW5pdF9xbWlfY2VfY29uZmlnKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJYWItJmd0O3FtaS5zZXJ2aWNlX2luc19pZCA9IGFiLSZndDtod19wYXJhbXMucW1pX3NlcnZpY2VfaW5zX2lkOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQomIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwKQogewotCWludCBpLCBqOwotCi0JZm9yIChpID0gMDsgaSAmbHQ7IEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gJmFtcDthYi0mZ3Q7ZXh0X2lycV9ncnBbaV07CiYjNDM7CWludCBqOwogCi0JCWZvciAoaiA9IDA7IGogJmx0OyBpcnFfZ3JwLSZndDtudW1faXJxOyBqJiM0MzsmIzQzOykKLQkJCWZyZWVfaXJxKGFiLSZndDtpcnFfbnVtW2lycV9ncnAtJmd0O2lycXNbal1dLCBpcnFfZ3JwKTsKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7IGlycV9ncnAtJmd0O251bV9pcnE7IGomIzQzOyYjNDM7KQomIzQzOwkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2dycC0mZ3Q7aXJxc1tqXV0sIGlycV9ncnApOwogCi0JCW5ldGlmX25hcGlfZGVsKCZhbXA7aXJxX2dycC0mZ3Q7bmFwaSk7Ci0JCWZyZWVfbmV0ZGV2KGlycV9ncnAtJmd0O25hcGlfbmRldik7Ci0JfQomIzQzOwluZXRpZl9uYXBpX2RlbCgmYW1wO2lycV9ncnAtJmd0O25hcGkpOwomIzQzOwlmcmVlX25ldGRldihpcnFfZ3JwLSZndDtuYXBpX25kZXYpOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIHsKLQlpbnQgaXJxX2lkeDsKIAlpbnQgaTsKIAotCWlmIChhYi0mZ3Q7aHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSkKLQkJcmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykKJiM0MzsJCWF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgJmFtcDthYi0mZ3Q7ZXh0X2lycV9ncnBbaV0pOwomIzQzO30KIAotCWZvciAoaSA9IDA7IGkgJmx0OyBhYi0mZ3Q7aHdfcGFyYW1zLmNlX2NvdW50OyBpJiM0MzsmIzQzOykgewomIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9jZV9pcnFzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIGludCBtYXhfaWR4KQomIzQzO3sKJiM0MzsJaW50IGlycV9pZHgsIGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBtYXhfaWR4OyBpJiM0MzsmIzQzOykgewogCQlpZiAoYXRoMTFrX2NlX2dldF9hdHRyX2ZsYWdzKGFiLCBpKSAmYW1wOyBDRV9BVFRSX0RJU19JTlRSKQogCQkJY29udGludWU7CiAJCWlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgJiM0MzsgaTsKIAkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2lkeF0sICZhbXA7YWItJmd0O2NlLmNlX3BpcGVbaV0pOwogCX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQomIzQzO3sKJiM0MzsJaWYgKGFiLSZndDtod19wYXJhbXMuaHlicmlkX2J1c190eXBlKQomIzQzOwkJcmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTsKIAomIzQzOwlhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItJmd0O2h3X3BhcmFtcy5jZV9jb3VudCk7CiAJYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoYWIpOwogfQogCkBAIC01MjQsMjAgJiM0Mzs1MzIsMjUgQEAgc3RhdGljIGlycXJldHVybl90IGF0aDExa19haGJfZXh0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogewogCXN0cnVjdCBhdGgxMWtfaHdfcGFyYW1zICpodyA9ICZhbXA7YWItJmd0O2h3X3BhcmFtczsKJiM0MzsJc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycDsKIAlpbnQgaSwgajsKIAlpbnQgaXJxOwogCWludCByZXQ7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKIAkJdTMyIG51bV9pcnEgPSAwOwogCiYjNDM7CQlpcnFfZ3JwID0gJmFtcDthYi0mZ3Q7ZXh0X2lycV9ncnBbaV07CiYjNDM7CiAJCWlycV9ncnAtJmd0O2FiID0gYWI7CiAJCWlycV9ncnAtJmd0O2dycF9pZCA9IGk7CiAKIAkJaXJxX2dycC0mZ3Q7bmFwaV9uZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApOwotCQlpZiAoIWlycV9ncnAtJmd0O25hcGlfbmRldikKLQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJaWYgKCFpcnFfZ3JwLSZndDtuYXBpX25kZXYpIHsKJiM0MzsJCQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJCWlycV9ncnAtJmd0O251bV9pcnEgPSAwOwomIzQzOwkJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwomIzQzOwkJfQogCiAJCW5ldGlmX25hcGlfYWRkKGlycV9ncnAtJmd0O25hcGlfbmRldiwgJmFtcDtpcnFfZ3JwLSZndDtuYXBpLAogCQkJICAgICAgIGF0aDExa19haGJfZXh0X2dycF9uYXBpX3BvbGwpOwpAQCAtNTg1LDkgJiM0Mzs1OTgsNyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIAkJCQl9CiAJCQl9CiAJCX0KLQkJaXJxX2dycC0mZ3Q7bnVtX2lycSA9IG51bV9pcnE7Ci0KLQkJZm9yIChqID0gMDsgaiAmbHQ7IGlycV9ncnAtJmd0O251bV9pcnE7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgbnVtX2lycTsgaiYjNDM7JiM0MzspIHsKIAkJCWludCBpcnFfaWR4ID0gaXJxX2dycC0mZ3Q7aXJxc1tqXTsKIAogCQkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoYWItJmd0O3BkZXYsCkBAIC02MDAsMTEgJiM0Mzs2MTEsMjMgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJCQlpZiAocmV0KSB7CiAJCQkJYXRoMTFrX2VycihhYiwgJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXG4mIzM0OywKIAkJCQkJICAgaXJxKTsKJiM0MzsJCQkJaXJxX2dycC0mZ3Q7bnVtX2lycSA9IGo7CiYjNDM7CQkJCWF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7CiYjNDM7CQkJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwogCQkJfQogCQl9CiYjNDM7CiYjNDM7CQlpcnFfZ3JwLSZndDtudW1faXJxID0gbnVtX2lycTsKIAl9CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcmVxdWVzdF9pcnE6CiYjNDM7CWZvciAoaS0tOyBpICZndDs9IDA7IGktLSkgewomIzQzOwkJaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwomIzQzOwkJYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQpAQCAtNjI5LDE2ICYjNDM7NjUyLDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9jZV9pbnRlcnJ1cHRfaGFuZGxlciwKIAkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLAogCQkJCSAgY2VfcGlwZSk7Ci0JCWlmIChyZXQpCiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJYXRoMTFrX2VycihhYiwgJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXG4mIzM0OywgaXJxKTsKJiM0MzsJCQlhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7CiAJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQogCiAJCWFiLSZndDtpcnFfbnVtW2lycV9pZHhdID0gaXJxOwogCX0KIAogCS8qIENvbmZpZ3VyZSBleHRlcm5hbCBpbnRlcnJ1cHRzICovCiAJcmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWF0aDExa19lcnIoYWIsICYjMzQ7ZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItJmd0O2h3X3BhcmFtcy5jZV9jb3VudCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDIxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NzMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggRXZhbHVhdGlvbiBhbmQgUmVhY2hhYmlsaXR5IEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCYjMzk7cyBkaXNzZWN0IGl0LiBJdCYjMzk7cyBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBRdWFsY29tbSBXaS1GaSwgc3BlY2lmaWNhbGx5IHRoZSBBSEIgaW50ZXJmYWNlLiBUaGUgcGF0Y2ggdGFyZ2V0cyBlcnJvciBoYW5kbGluZyBpbiBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLCB3aGljaCB1c3VhbGx5IG1lYW5zIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGNsZWFudXAgb2YgSVJRcyBhbmQgbmV0ZGV2cyB3aGVuIGBhbGxvY19uZXRkZXZfZHVtbXlgIG9yIGByZXF1ZXN0X2lycWAgZmFpbCwgaW50cm9kdWNpbmcgdGhlc2UgbmV3IGZ1bmN0aW9ucyBgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwYCBhbmQgYGF0aDExa19haGJfZnJlZV9jZV9pcnFzYCB0byBoYW5kbGUgcGFydGlhbCBhbGxvY2F0aW9ucy4KCk15IG5leHQgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgJiMzNDtJcyB0aGlzIHJlYWNoYWJsZSwgYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/JiMzNDsgSW5pdGlhbGl6YXRpb24gZXJyb3IgcGF0aHMgY2FuIGJlIGdvbGRtaW5lcyBmb3IgZmluZGluZyBzdWJ0bGUgYnVncywgYnV0IHRoZXkmIzM5O3JlIG9mdGVuIHRyaWNreSB0byB0cmlnZ2VyIHJlbGlhYmx5LiBUaGlzIGlzIGEgd2lyZWxlc3MgZHJpdmVyLCBgYXRoMTFrYCwgc28gdGhlIHF1ZXN0aW9uIGlzLCBob3cgZWFzaWx5IGNhbiB3ZSBmdXp6IHRoYXQ/IEl0JiMzOTtzIGEgUENJL0FIQiBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpLCB3aGljaCBnaXZlcyBtZSBwYXVzZS4gQUhCIGlzIHR5cGljYWxseSBhbiBTb0MgdGhpbmcsIGxpa2UgdGhlIElQUTgwNzQsIHJpZ2h0PyBTbyBjYW4gd2UgZXZlbiBmdXp6IEFIQiBkcml2ZXJzIGVmZmVjdGl2ZWx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoZXkmIzM5O3JlIHVzdWFsbHkgcHJldHR5IHBsYXRmb3JtLXNwZWNpZmljLCBhbmQgc3l6a2FsbGVyLCBpbiBteSBleHBlcmllbmNlLCBpc24mIzM5O3QgZ3JlYXQgYXQgdGFyZ2V0aW5nIEFIQiBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGVyZSYjMzk7cyBhIGdvb2Qgd2F5IHRvIGluc3RhbnRpYXRlIHRoZW0gb3IgYSBzcGVjaWZpYyBtb2NrIHNldHVwLgoKVGhpcyBpcyBhIG1lbW9yeS9yZXNvdXJjZSBsZWFrIGZpeCBvbiBwcm9iZSBmYWlsdXJlLiBUaGF0IHNtZWxscyBsaWtlIGEgaGFyZHdhcmUgaXNzdWUsIGFuZCBpZiBpdCYjMzk7cyBqdXN0IGEgcHJvYmUgZmFpbHVyZSBjbGVhbnVwIGluIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGxpa2UgdGhpcywgaXTigJlzIHByb2JhYmx5IG5vdCByZWFjaGFibGUgaW4gYSBnZW5lcmljIFZNIHdpdGhvdXQgdGhlIGhhcmR3YXJlIG9yIGEgc3VpdGFibGUgZW11bGF0b3IuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgYXRoMTFrYCBpcyBldmVuIGVuYWJsZWQgaW4gc3RhbmRhcmQgY29uZmlncyBvciBpZiBpdOKAmXMgdGVzdGFibGUgYnkgY2hlY2tpbmcgaWYgaXRzIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyBhcmUgcHJlc2VudCBpbiB0aGUga2VybmVsLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIGBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYCB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB0aGUgY29kZSwgdG8gY29uZmlybSB0aGF0IGl0JiMzOTtzIHByZXNlbnQgYW5kIHRvIGdpdmUgbXlzZWxmIGEgbWVudGFsIG1hcCBvZiB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDIxOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19haGJfY29uZmlnX2V4dF9pcnEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz01MTg9c3RhdGljIGlycXJldHVybl90IGF0aDExa19haGJfZXh0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTUzMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6NTMyOnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy01MzMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9NjMzPXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy02NjQtXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo2NjU6XHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNjY2LVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDIxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIERyaXZlciBQcm9iZSBFcnJvciBIYW5kbGluZyoqCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgd2l0aCB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIGRyaXZlciYjMzk7cyBwcm9iZSBvciBpbml0aWFsaXphdGlvbiBwaGFzZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gZnVuY3Rpb25zIGxpa2UgYGF0aDExa19haGJfcHJvYmVgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSB0cmFjZSB3aGVyZSBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSByZWxldmFudCBjb2RlYmFzZS4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIHJldmVhbCB0aGUgbG9naWMgaXQmIzM5O3MgcGFydCBvZiBhbmQgaGVscCBjbGFyaWZ5IHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IG1vZGlmaWNhdGlvbnMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZXZhbHVhdGluZyBwb3RlbnRpYWwgaW1wYWN0cyBvbiBzdGFiaWxpdHkgYW5kIHJvYnVzdG5lc3MgZHVyaW5nIHRoZSBkZXZpY2UmIzM5O3MgaW5pdGlhbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19haGJfY29uZmlnX2lycSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTUzMj1zdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTYzMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6NjMzOnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTYzNC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMTM4PXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIzMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTIzMTpcdHJldCA9IGF0aDExa19haGJfY29uZmlnX2lycShhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEyMzItXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgwNQoJCQkJCQkJb3V0cHV0OiA5MwoJCQkJCQkJdGhvdWdodHM6IDQ4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogQXRoMTFrIEFIQiBQcm9iZSBFcnJvciBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIGNvZGUgaXMgcmVhY2hlZCB0aHJvdWdoIGBhdGgxMWtfYWhiX3Byb2JlYCwgYSBwbGF0Zm9ybSBkcml2ZXIgcHJvYmUgZnVuY3Rpb24uIFRvIGdldCBoZXJlLCB3ZSBuZWVkIGEgcmVnaXN0ZXJlZCBwbGF0Zm9ybSBkZXZpY2UgdGhhdCBtYXRjaGVzIHRoZSBkcml2ZXIuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGluamVjdCB0aGlzIHBsYXRmb3JtIGRldmljZSBzb21laG93IGluIGEgZ2VuZXJpYyBWTSwgb3IgaXMgdGhpcyBpbmhlcmVudGx5IGhhcmR3YXJlLXNwZWNpZmljPyBOb3JtYWxseSwgcGxhdGZvcm0gZGV2aWNlcyBjb21lIGZyb20gRGV2aWNlIFRyZWUgb3IgQUNQSSwgb3IgYXJlIGNyZWF0ZWQgYnkgb3RoZXIga2VybmVsIGNvZGUuIFVubGVzcyB0aGVyZSYjMzk7cyBhIGJhY2sgZG9vciBsaWtlIGBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJgIGV4cG9zZWQgdGhyb3VnaCBzb21lIGRlYnVnIGludGVyZmFjZSBvciBTeXprYWxsZXIgcHNldWRvLXN5c2NhbGwuLi4KCldhaXQgYSBtaW51dGUsIFN5emthbGxlciAqZG9lcyogaGF2ZSBzb21lIHBsYXRmb3JtIGRldmljZSBpbmplY3Rpb24sIGJ1dCBpdCYjMzk7cyBsaW1pdGVkLiBUaGUgYmlnZ2VzdCBjaGFsbGVuZ2UgaGVyZSBpcyB0aGF0IHRoaXMgaXMgdGhlIEFIQiB2YXJpYW50IG9mIHRoZSBgYXRoMTFrYCBXaS1GaSBkcml2ZXIsIHdoaWNoIGlzIGFsbCBhYm91dCBRdWFsY29tbSBTb0NzIGxpa2UgSVBRODA3NC4gRXZlbiAqaWYqIHdlIHNvbWVob3cgaW5qZWN0IHRoZSBkZXZpY2UsIGl0JiMzOTtzIGdvaW5nIHRvIGltbWVkaWF0ZWx5IHRyeSB0byB0YWxrIHRvIGhhcmR3YXJlIHJlZ2lzdGVycy4gVGhpbmsgYGlvcmVtYXBgLCBgcmVhZGxgLCBgd3JpdGVsYCDigJMgdGhhdCYjMzk7cyBhIHJlY2lwZSBmb3IgYW4gaW1tZWRpYXRlIGNyYXNoIG9yIGFuIGVhcmx5LCBpZ25vbWluaW91cyBmYWlsdXJlLiBBbmQgZXZlbiBpZiB3ZSBnZXQgcGFzdCB0aGF0LCB0aGUgSVJRIGNvbmZpZ3VyYXRpb24gaXMgZ29pbmcgdG8gZmFpbCwgc2luY2UgdGhlIGFjdHVhbCBoYXJkd2FyZSBJUlFzIHdvbiYjMzk7dCBiZSBwcmVzZW50LgoKQWgsIGJ1dCB0aGUgcGF0Y2ggaXRzZWxmLi4uIGl0JiMzOTtzIGFsbCBhYm91dCBlcnJvciBoYW5kbGluZyB3aGVuIGByZXF1ZXN0X2lycWAgb3IgYGFsbG9jX25ldGRldl9kdW1teWAgZmFpbHMuIFNvLCBpZiB3ZSAqY291bGQqIGluamVjdCB0aGUgZGV2aWNlLCBgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWVgICptaWdodCogZmFpbCwgYW5kIHRyaWdnZXIgdGhlIGVycm9yIHBhdGguIEJ1dCBpcyBpdCB3b3J0aCB0aGUgZWZmb3J0PwoKTG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBlcnJvciBwYXRoIGNsZWFudXAgZml4OiBmcmVlaW5nIElSUXMgYW5kIG5ldGRldnMgb24gcHJvYmUgZmFpbHVyZS4gTm8gY29tcGxleCBsb2dpYyBpcyBhZGRlZCwganVzdCBzdGFuZGFyZCBjbGVhbnVwLiBJdCYjMzk7cyBhbHNvIGV4dHJlbWVseSBoYXJkd2FyZS1zcGVjaWZpYyDigJMgdGhlIGF0aDExayBBSEIuCgpTbywgaGVyZSYjMzk7cyBteSB2ZXJkaWN0OiBJIHdpbGwgbWFyayBpdCBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQmIzM5O3MgYW4gdW5yZWFjaGFibGUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHByb2JlIGVycm9yIHBhdGggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdOKAmXMgZXhjZWVkaW5nbHkgdW5saWtlbHkgdG8gYmUgdHJpZ2dlcmVkIG91dHNpZGUgb2YgYSByZWFsIFF1YWxjb21tIFNvQy1iYXNlZCBzeXN0ZW0gb3IgYSB2ZXJ5IHNwZWNpYWxpemVkIGVtdWxhdG9yLgoKTGV0JiMzOTtzIGRvdWJsZSBjaGVjay4KCkFoLCB5ZXMsIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSBtZW1vcnkgbGVhayDigJMgYSByZXNvdXJjZSBsZWFrIOKAkyBvbiBwcm9iZSBmYWlsdXJlLiBJdOKAmXMgYSB2ZXJ5IGNvbW1vbiBwYXR0ZXJuLiBCdXQgdGhlIG92ZXJhbGwgYXNzZXNzbWVudCBkb2VzbuKAmXQgY2hhbmdlLiBUaGUgc2FtZSByZWFzb25pbmcgYXBwbGllczogSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCwgYmVjYXVzZSBpdCYjMzk7cyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciAoYXRoMTFrIEFIQikgcHJvYmUgZXJyb3IgcGF0aCwgYW5kIGl0IGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRob3V0IHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvciBhIHN1aXRhYmxlIGVtdWxhdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDIxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIHByb2JlIGVycm9yIHBhdGggb2YgdGhlIGF0aDExayBBSEIgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBTb0NzIGFuZCBpdHMgcHJvYmUgcGF0aCBpcyBub3QgcmVhY2hhYmxlIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgcHJvYmUgZXJyb3IgcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFNvQ3MgYW5kIGl0cyBwcm9iZSBwYXRoIGlzIG5vdCByZWFjaGFibGUgaW4gZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBvciBhIGRlZGljYXRlZCBlbXVsYXRvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMVQyMTozMjozNi45NTM3MDcxOTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzkwNTExMTExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIHByb2JlIGVycm9yIHBhdGggb2YgdGhlIGF0aDExayBBSEIgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBTb0NzIGFuZCBpdHMgcHJvYmUgcGF0aCBpcyBub3QgcmVhY2hhYmxlIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQyMTozMjozNi45NTM3MTgxMTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzYwNDUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdjNTZjNGZkN2NiZTk2OWMxZmZiYzRmNTVmOTcxMjIxMzgyOGZkZWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMjE6MzI6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcXG5pbmRleCBmNTY2ZDY5OWQwNzRhOC4uYmRmNTNhYTdkZGYxZjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcXG5AQCAtNDMxLDM2ICs0MzEsNDQgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9pbml0X3FtaV9jZV9jb25maWcoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0YWItXFx1MDAzZXFtaS5zZXJ2aWNlX2luc19pZCA9IGFiLVxcdTAwM2Vod19wYXJhbXMucW1pX3NlcnZpY2VfaW5zX2lkO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycClcXG4ge1xcbi1cXHRpbnQgaSwgajtcXG4tXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XFxuLVxcdFxcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xcbitcXHRpbnQgajtcXG4gXFxuLVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBpcnFfZ3JwLVxcdTAwM2VudW1faXJxOyBqKyspXFxuLVxcdFxcdFxcdGZyZWVfaXJxKGFiLVxcdTAwM2VpcnFfbnVtW2lycV9ncnAtXFx1MDAzZWlycXNbal1dLCBpcnFfZ3JwKTtcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKylcXG4rXFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2dycC1cXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xcbiBcXG4tXFx0XFx0bmV0aWZfbmFwaV9kZWwoXFx1MDAyNmlycV9ncnAtXFx1MDAzZW5hcGkpO1xcbi1cXHRcXHRmcmVlX25ldGRldihpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpO1xcbi1cXHR9XFxuK1xcdG5ldGlmX25hcGlfZGVsKFxcdTAwMjZpcnFfZ3JwLVxcdTAwM2VuYXBpKTtcXG4rXFx0ZnJlZV9uZXRkZXYoaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiB7XFxuLVxcdGludCBpcnFfaWR4O1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGlmIChhYi1cXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcXG4tXFx0XFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspXFxuK1xcdFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXSk7XFxuK31cXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYi1cXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50OyBpKyspIHtcXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXFxuK3tcXG4rXFx0aW50IGlycV9pZHgsIGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWF4X2lkeDsgaSsrKSB7XFxuIFxcdFxcdGlmIChhdGgxMWtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFxcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgKyBpO1xcbiBcXHRcXHRmcmVlX2lycShhYi1cXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXFx1MDAyNmFiLVxcdTAwM2VjZS5jZV9waXBlW2ldKTtcXG4gXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuK3tcXG4rXFx0aWYgKGFiLVxcdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxcbitcXHRcXHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xcbiBcXG4rXFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xcbiBcXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XFxuIH1cXG4gXFxuQEAgLTUyNCwyMCArNTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXFxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiB7XFxuIFxcdHN0cnVjdCBhdGgxMWtfaHdfcGFyYW1zICpodyA9IFxcdTAwMjZhYi1cXHUwMDNlaHdfcGFyYW1zO1xcbitcXHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwO1xcbiBcXHRpbnQgaSwgajtcXG4gXFx0aW50IGlycTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XFxuLVxcdFxcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xcbiBcXHRcXHR1MzIgbnVtX2lycSA9IDA7XFxuIFxcbitcXHRcXHRpcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXTtcXG4rXFxuIFxcdFxcdGlycV9ncnAtXFx1MDAzZWFiID0gYWI7XFxuIFxcdFxcdGlycV9ncnAtXFx1MDAzZWdycF9pZCA9IGk7XFxuIFxcbiBcXHRcXHRpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYgPSBhbGxvY19uZXRkZXZfZHVtbXkoMCk7XFxuLVxcdFxcdGlmICghaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0aWYgKCFpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IDA7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3JlcXVlc3RfaXJxO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRuZXRpZl9uYXBpX2FkZChpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYsIFxcdTAwMjZpcnFfZ3JwLVxcdTAwM2VuYXBpLFxcbiBcXHRcXHRcXHQgICAgICAgYXRoMTFrX2FoYl9leHRfZ3JwX25hcGlfcG9sbCk7XFxuQEAgLTU4NSw5ICs1OTgsNyBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4tXFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XFxuLVxcbi1cXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaXJxX2dycC1cXHUwMDNlbnVtX2lycTsgaisrKSB7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBudW1faXJxOyBqKyspIHtcXG4gXFx0XFx0XFx0aW50IGlycV9pZHggPSBpcnFfZ3JwLVxcdTAwM2VpcnFzW2pdO1xcbiBcXG4gXFx0XFx0XFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoYWItXFx1MDAzZXBkZXYsXFxuQEAgLTYwMCwxMSArNjExLDIzIEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiBcXHRcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBpcnEpO1xcbitcXHRcXHRcXHRcXHRpcnFfZ3JwLVxcdTAwM2VudW1faXJxID0gajtcXG4rXFx0XFx0XFx0XFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX3JlcXVlc3RfaXJxOlxcbitcXHRmb3IgKGktLTsgaSBcXHUwMDNlPSAwOyBpLS0pIHtcXG4rXFx0XFx0aXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuK1xcdFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5AQCAtNjI5LDE2ICs2NTIsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0XFx0cmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2NlX2ludGVycnVwdF9oYW5kbGVyLFxcbiBcXHRcXHRcXHRcXHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxcbiBcXHRcXHRcXHRcXHQgIGNlX3BpcGUpO1xcbi1cXHRcXHRpZiAocmV0KVxcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxcXG5cXFwiLCBpcnEpO1xcbitcXHRcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7XFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xcbiBcXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDIxOjMyOjM3LjUxODAwNjIwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3MzQwODA1NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgcHJvYmUgZXJyb3IgcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFNvQ3MgYW5kIGl0cyBwcm9iZSBwYXRoIGlzIG5vdCByZWFjaGFibGUgaW4gZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBvciBhIGRlZGljYXRlZCBlbXVsYXRvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2M1NmM0ZmQ3Y2JlOTY5YzFmZmJjNGY1NWY5NzEyMjEzODI4ZmRlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDIxOjMyOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbmluZGV4IGY1NjZkNjk5ZDA3NGE4Li5iZGY1M2FhN2RkZjFmNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbkBAIC00MzEsMzYgKzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXHUwMDNlaHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnApXG4ge1xuLVx0aW50IGksIGo7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbitcdGludCBqO1xuIFxuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGorKylcbi1cdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqKyspXG4rXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XG4gXG4tXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4tXHRcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KTtcbi1cdH1cbitcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4rXHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIHtcbi1cdGludCBpcnFfaWR4O1xuIFx0aW50IGk7XG4gXG4tXHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcbi1cdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspXG4rXHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xuK31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSsrKSB7XG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4re1xuK1x0aW50IGlycV9pZHgsIGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXhfaWR4OyBpKyspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgKyBpO1xuIFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldKTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuK3tcbitcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuK1x0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuIFxuK1x0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4gXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XG4gfVxuIFxuQEAgLTUyNCwyMCArNTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuK1x0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycDtcbiBcdGludCBpLCBqO1xuIFx0aW50IGlycTtcbiBcdGludCByZXQ7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuK1x0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4rXG4gXHRcdGlycV9ncnAtXHUwMDNlYWIgPSBhYjtcbiBcdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuIFxuIFx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbi1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gMDtcbitcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbitcdFx0fVxuIFxuIFx0XHRuZXRpZl9uYXBpX2FkZChpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiwgXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpLFxuIFx0XHRcdCAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTtcbkBAIC01ODUsOSArNTk4LDcgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdGlycV9ncnAtXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XG4tXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaisrKSB7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG51bV9pcnE7IGorKykge1xuIFx0XHRcdGludCBpcnFfaWR4ID0gaXJxX2dycC1cdTAwM2VpcnFzW2pdO1xuIFxuIFx0XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLVx1MDAzZXBkZXYsXG5AQCAtNjAwLDExICs2MTEsMjMgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0YXRoMTFrX2VycihhYiwgXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxuXCIsXG4gXHRcdFx0XHRcdCAgIGlycSk7XG4rXHRcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBqO1xuK1x0XHRcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcbitcdFx0XHRcdGdvdG8gZXJyX3JlcXVlc3RfaXJxO1xuIFx0XHRcdH1cbiBcdFx0fVxuK1xuK1x0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX3JlcXVlc3RfaXJxOlxuK1x0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pIHtcbitcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbkBAIC02MjksMTYgKzY1MiwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxuIFx0XHRcdFx0ICBjZV9waXBlKTtcbi1cdFx0aWYgKHJldClcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwiLCBpcnEpO1xuK1x0XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXG4gXHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHR9XG4gXG4gXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuIFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcblwiLCByZXQpO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQyMTozMjozNy41MTgwMDc2OTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjk3NDY0MzQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBFdmFsdWF0aW9uIGFuZCBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCdzIGRpc3NlY3QgaXQuIEl0J3MgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGRlYWxpbmcgd2l0aCBRdWFsY29tbSBXaS1GaSwgc3BlY2lmaWNhbGx5IHRoZSBBSEIgaW50ZXJmYWNlLiBUaGUgcGF0Y2ggdGFyZ2V0cyBlcnJvciBoYW5kbGluZyBpbiBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLCB3aGljaCB1c3VhbGx5IG1lYW5zIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhleSdyZSBhZGRpbmcgY2xlYW51cCBvZiBJUlFzIGFuZCBuZXRkZXZzIHdoZW4gYGFsbG9jX25ldGRldl9kdW1teWAgb3IgYHJlcXVlc3RfaXJxYCBmYWlsLCBpbnRyb2R1Y2luZyB0aGVzZSBuZXcgZnVuY3Rpb25zIGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgIGFuZCBgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNgIHRvIGhhbmRsZSBwYXJ0aWFsIGFsbG9jYXRpb25zLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMsIFwiSXMgdGhpcyByZWFjaGFibGUsIGFuZCBpcyBpdCB3b3J0aCBmdXp6aW5nP1wiIEluaXRpYWxpemF0aW9uIGVycm9yIHBhdGhzIGNhbiBiZSBnb2xkbWluZXMgZm9yIGZpbmRpbmcgc3VidGxlIGJ1Z3MsIGJ1dCB0aGV5J3JlIG9mdGVuIHRyaWNreSB0byB0cmlnZ2VyIHJlbGlhYmx5LiBUaGlzIGlzIGEgd2lyZWxlc3MgZHJpdmVyLCBgYXRoMTFrYCwgc28gdGhlIHF1ZXN0aW9uIGlzLCBob3cgZWFzaWx5IGNhbiB3ZSBmdXp6IHRoYXQ/IEl0J3MgYSBQQ0kvQUhCIGRyaXZlciBmb3IgUXVhbGNvbW0gV2ktRmksIHdoaWNoIGdpdmVzIG1lIHBhdXNlLiBBSEIgaXMgdHlwaWNhbGx5IGFuIFNvQyB0aGluZywgbGlrZSB0aGUgSVBRODA3NCwgcmlnaHQ/IFNvIGNhbiB3ZSBldmVuIGZ1enogQUhCIGRyaXZlcnMgZWZmZWN0aXZlbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhleSdyZSB1c3VhbGx5IHByZXR0eSBwbGF0Zm9ybS1zcGVjaWZpYywgYW5kIHN5emthbGxlciwgaW4gbXkgZXhwZXJpZW5jZSwgaXNuJ3QgZ3JlYXQgYXQgdGFyZ2V0aW5nIEFIQiBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGVyZSdzIGEgZ29vZCB3YXkgdG8gaW5zdGFudGlhdGUgdGhlbSBvciBhIHNwZWNpZmljIG1vY2sgc2V0dXAuXG5cblRoaXMgaXMgYSBtZW1vcnkvcmVzb3VyY2UgbGVhayBmaXggb24gcHJvYmUgZmFpbHVyZS4gVGhhdCBzbWVsbHMgbGlrZSBhIGhhcmR3YXJlIGlzc3VlLCBhbmQgaWYgaXQncyBqdXN0IGEgcHJvYmUgZmFpbHVyZSBjbGVhbnVwIGluIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGxpa2UgdGhpcywgaXTigJlzIHByb2JhYmx5IG5vdCByZWFjaGFibGUgaW4gYSBnZW5lcmljIFZNIHdpdGhvdXQgdGhlIGhhcmR3YXJlIG9yIGEgc3VpdGFibGUgZW11bGF0b3IuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBhdGgxMWtgIGlzIGV2ZW4gZW5hYmxlZCBpbiBzdGFuZGFyZCBjb25maWdzIG9yIGlmIGl04oCZcyB0ZXN0YWJsZSBieSBjaGVja2luZyBpZiBpdHMgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zIGFyZSBwcmVzZW50IGluIHRoZSBrZXJuZWwuIEknbGwgdXNlIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2YgdGhlIGNvZGUsIHRvIGNvbmZpcm0gdGhhdCBpdCdzIHByZXNlbnQgYW5kIHRvIGdpdmUgbXlzZWxmIGEgbWVudGFsIG1hcCBvZiB0aGUgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTczLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMjE6MzI6NTQuNDkyNjU0NTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTU0OTIxODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTUxOD1zdGF0aWMgaXJxcmV0dXJuX3QgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy01MzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo1MzI6c3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy01MzMte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz02MzM9c3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNjY0LVxcdC8qIENvbmZpZ3VyZSBleHRlcm5hbCBpbnRlcnJ1cHRzICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo2NjU6XFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy02NjYtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQyMTozMjo1Ni44NDgxNTI2NzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMzMzY1NTg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBEcml2ZXIgUHJvYmUgRXJyb3IgSGFuZGxpbmcqKlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgd2l0aCB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIGRyaXZlcidzIHByb2JlIG9yIGluaXRpYWxpemF0aW9uIHBoYXNlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgaXQncyB0b3VjaGluZyBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gd2l0aGluIGZ1bmN0aW9ucyBsaWtlIGBhdGgxMWtfYWhiX3Byb2JlYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQgbWUgdHJhY2Ugd2hlcmUgYGF0aDExa19haGJfY29uZmlnX2lycWAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgcmVsZXZhbnQgY29kZWJhc2UuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCByZXZlYWwgdGhlIGxvZ2ljIGl0J3MgcGFydCBvZiBhbmQgaGVscCBjbGFyaWZ5IHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IG1vZGlmaWNhdGlvbnMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZXZhbHVhdGluZyBwb3RlbnRpYWwgaW1wYWN0cyBvbiBzdGFiaWxpdHkgYW5kIHJvYnVzdG5lc3MgZHVyaW5nIHRoZSBkZXZpY2UncyBpbml0aWFsIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNTAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQyMTozMzozOS4xODE4MTA5NDZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyNzQ5Mjk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX2NvbmZpZ19pcnFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz01MzI9c3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTYzMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjYzMzpzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNjM0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEzOD1zdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIzMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEyMzE6XFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfaXJxKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEyMzItXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQyMTozMzo0MS44MDkzMDg2NTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzA0OTQ2Nzg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogQXRoMTFrIEFIQiBQcm9iZSBFcnJvciBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBjb2RlIGlzIHJlYWNoZWQgdGhyb3VnaCBgYXRoMTFrX2FoYl9wcm9iZWAsIGEgcGxhdGZvcm0gZHJpdmVyIHByb2JlIGZ1bmN0aW9uLiBUbyBnZXQgaGVyZSwgd2UgbmVlZCBhIHJlZ2lzdGVyZWQgcGxhdGZvcm0gZGV2aWNlIHRoYXQgbWF0Y2hlcyB0aGUgZHJpdmVyLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBpbmplY3QgdGhpcyBwbGF0Zm9ybSBkZXZpY2Ugc29tZWhvdyBpbiBhIGdlbmVyaWMgVk0sIG9yIGlzIHRoaXMgaW5oZXJlbnRseSBoYXJkd2FyZS1zcGVjaWZpYz8gTm9ybWFsbHksIHBsYXRmb3JtIGRldmljZXMgY29tZSBmcm9tIERldmljZSBUcmVlIG9yIEFDUEksIG9yIGFyZSBjcmVhdGVkIGJ5IG90aGVyIGtlcm5lbCBjb2RlLiBVbmxlc3MgdGhlcmUncyBhIGJhY2sgZG9vciBsaWtlIGBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJgIGV4cG9zZWQgdGhyb3VnaCBzb21lIGRlYnVnIGludGVyZmFjZSBvciBTeXprYWxsZXIgcHNldWRvLXN5c2NhbGwuLi5cblxuV2FpdCBhIG1pbnV0ZSwgU3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgcGxhdGZvcm0gZGV2aWNlIGluamVjdGlvbiwgYnV0IGl0J3MgbGltaXRlZC4gVGhlIGJpZ2dlc3QgY2hhbGxlbmdlIGhlcmUgaXMgdGhhdCB0aGlzIGlzIHRoZSBBSEIgdmFyaWFudCBvZiB0aGUgYGF0aDExa2AgV2ktRmkgZHJpdmVyLCB3aGljaCBpcyBhbGwgYWJvdXQgUXVhbGNvbW0gU29DcyBsaWtlIElQUTgwNzQuIEV2ZW4gKmlmKiB3ZSBzb21laG93IGluamVjdCB0aGUgZGV2aWNlLCBpdCdzIGdvaW5nIHRvIGltbWVkaWF0ZWx5IHRyeSB0byB0YWxrIHRvIGhhcmR3YXJlIHJlZ2lzdGVycy4gVGhpbmsgYGlvcmVtYXBgLCBgcmVhZGxgLCBgd3JpdGVsYCDigJMgdGhhdCdzIGEgcmVjaXBlIGZvciBhbiBpbW1lZGlhdGUgY3Jhc2ggb3IgYW4gZWFybHksIGlnbm9taW5pb3VzIGZhaWx1cmUuIEFuZCBldmVuIGlmIHdlIGdldCBwYXN0IHRoYXQsIHRoZSBJUlEgY29uZmlndXJhdGlvbiBpcyBnb2luZyB0byBmYWlsLCBzaW5jZSB0aGUgYWN0dWFsIGhhcmR3YXJlIElSUXMgd29uJ3QgYmUgcHJlc2VudC5cblxuQWgsIGJ1dCB0aGUgcGF0Y2ggaXRzZWxmLi4uIGl0J3MgYWxsIGFib3V0IGVycm9yIGhhbmRsaW5nIHdoZW4gYHJlcXVlc3RfaXJxYCBvciBgYWxsb2NfbmV0ZGV2X2R1bW15YCBmYWlscy4gU28sIGlmIHdlICpjb3VsZCogaW5qZWN0IHRoZSBkZXZpY2UsIGBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZWAgKm1pZ2h0KiBmYWlsLCBhbmQgdHJpZ2dlciB0aGUgZXJyb3IgcGF0aC4gQnV0IGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQ/XG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBlcnJvciBwYXRoIGNsZWFudXAgZml4OiBmcmVlaW5nIElSUXMgYW5kIG5ldGRldnMgb24gcHJvYmUgZmFpbHVyZS4gTm8gY29tcGxleCBsb2dpYyBpcyBhZGRlZCwganVzdCBzdGFuZGFyZCBjbGVhbnVwLiBJdCdzIGFsc28gZXh0cmVtZWx5IGhhcmR3YXJlLXNwZWNpZmljIOKAkyB0aGUgYXRoMTFrIEFIQi5cblxuU28sIGhlcmUncyBteSB2ZXJkaWN0OiBJIHdpbGwgbWFyayBpdCBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQncyBhbiB1bnJlYWNoYWJsZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgcHJvYmUgZXJyb3IgcGF0aCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl04oCZcyBleGNlZWRpbmdseSB1bmxpa2VseSB0byBiZSB0cmlnZ2VyZWQgb3V0c2lkZSBvZiBhIHJlYWwgUXVhbGNvbW0gU29DLWJhc2VkIHN5c3RlbSBvciBhIHZlcnkgc3BlY2lhbGl6ZWQgZW11bGF0b3IuXG5cbkxldCdzIGRvdWJsZSBjaGVjay5cblxuQWgsIHllcywgdGhlIHBhdGNoIGlzIGZpeGluZyBhIG1lbW9yeSBsZWFrIOKAkyBhIHJlc291cmNlIGxlYWsg4oCTIG9uIHByb2JlIGZhaWx1cmUuIEl04oCZcyBhIHZlcnkgY29tbW9uIHBhdHRlcm4uIEJ1dCB0aGUgb3ZlcmFsbCBhc3Nlc3NtZW50IGRvZXNu4oCZdCBjaGFuZ2UuIFRoZSBzYW1lIHJlYXNvbmluZyBhcHBsaWVzOiBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLCBiZWNhdXNlIGl0J3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgKGF0aDExayBBSEIpIHByb2JlIGVycm9yIHBhdGgsIGFuZCBpdCBpcyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aG91dCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgb3IgYSBzdWl0YWJsZSBlbXVsYXRvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgwNSwiT3V0cHV0VG9rZW5zIjo5MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQyMTozNDowNC44NTg3Nzg5ODVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJlc291cmNlIGxlYWtzIGluIHRoZSBwcm9iZSBlcnJvciBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgUXVhbGNvbW0gU29DcyBhbmQgaXRzIHByb2JlIHBhdGggaXMgbm90IHJlYWNoYWJsZSBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGEgZGVkaWNhdGVkIGVtdWxhdG9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIHByb2JlIGVycm9yIHBhdGggb2YgdGhlIGF0aDExayBBSEIgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBTb0NzIGFuZCBpdHMgcHJvYmUgcGF0aCBpcyBub3QgcmVhY2hhYmxlIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmfz6[1] Phase: Running StartedAt: 2026-07-21 21:34:17 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmfz6[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-21 21:34:17 +0000 UTC FinishedAt: 2026-07-21 21:34:21 +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,}