Name: series-workflownhp29 Phase: Failed StartedAt: 2026-09-03 18:47:23 +0000 UTC FinishedAt: 2026-09-03 19:03:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhp29[0] Phase: Succeeded StartedAt: 2026-09-03 18:47:23 +0000 UTC FinishedAt: 2026-09-03 19:03:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhp29[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 18:47:23 +0000 UTC FinishedAt: 2026-09-03 19:03:26 +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+CgkJCTx0ZD4yMDI2LzA5LzAzIDE5OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZXN0YW1wIHN0YXRpc3RpY3MgcmVwb3J0aW5nIChtbHg1ZV9zdGF0c190c19nZXQpIGluIHRoZSBNZWxsYW5veCBDb25uZWN0WCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKE1lbGxhbm94IENvbm5lY3RYIE5JQ3MvU21hcnROSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxOTowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ5OTY4ZmFmMWU3YTUxYTE0ZTdkNmJlMTc5NjUzOTJlNWFlZTcyZDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE5OjAyOjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmNcbmluZGV4IGU3ZTZkYjdmNmJmMTcuLmNkOTRiYjQ0ZjZhYjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmNcbkBAIC0xMTk5LDUwICYjNDM7MTE5OSwzOSBAQCB2b2lkIG1seDVlX3N0YXRzX3Jtb25fZ2V0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuIHZvaWQgbWx4NWVfc3RhdHNfdHNfZ2V0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuIFx0XHRcdHN0cnVjdCBldGh0b29sX3RzX3N0YXRzICp0c19zdGF0cylcbiB7XG4tXHRpbnQgaSwgajtcbiYjNDM7XHR1MTYgbmNoID0gbWx4NWVfc3RhdHNfbmNoX3JlYWQocHJpdik7XG4mIzQzO1x0aW50IGksIHRjO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdHRzX3N0YXRzLVx1MDAzZXBrdHMgPSAwO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNldHhfcHRwX29wZW5lZCkge1xuLVx0XHRzdHJ1Y3QgbWx4NWVfcHRwICpwdHAgPSBwcml2LVx1MDAzZWNoYW5uZWxzLnB0cDtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuY2g7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbWx4NWVfY2hhbm5lbF9zdGF0cyAqY2hhbm5lbF9zdGF0cyA9XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlY2hhbm5lbF9zdGF0c1tpXTtcbiBcbi1cdFx0dHNfc3RhdHMtXHUwMDNlcGt0cyA9IDA7XG4mIzQzO1x0XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHByaXYtXHUwMDNlbWF4X29wZW5lZF90YzsgdGMmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR0c19zdGF0cy1cdTAwM2Vwa3RzICYjNDM7PSBjaGFubmVsX3N0YXRzLVx1MDAzZXNxW3RjXS50aW1lc3RhbXBzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQWNjdW11bGF0ZSBETUEgYW5kIHBvcnQgdGltZXN0YW1wIGNvdW50ZXJzIHNvIHZhbHVlcyBzdGF5IG1vbm90b25pY1xuJiM0MztcdCAqIGFjcm9zcyBjaGFubmVsIHRlYXJkb3duIGFuZCBtb2RlIHN3aXRjaGVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXR4X3B0cF9vcGVuZWQpIHtcbiYjNDM7XHRcdC8qIEVyciBhbmQgTG9zdCBzdGF0cyBhcmUgb25seSByZWxldmFudCBmb3IgcG9ydCB0aW1lc3RhbXBpbmcsXG4mIzQzO1x0XHQgKiBhcyB0aGUgRE1BIGxheWVyIHdpbGwgYWx3YXlzIHN1Y2Nlc3NmdWxseSB0aW1lc3RhbXAgcGFja2V0cy5cbiYjNDM7XHRcdCAqL1xuIFx0XHR0c19zdGF0cy1cdTAwM2VlcnIgPSAwO1xuIFx0XHR0c19zdGF0cy1cdTAwM2Vsb3N0ID0gMDtcbiBcbi1cdFx0aWYgKCFwdHApXG4tXHRcdFx0Z290byBvdXQ7XG4tXG4tXHRcdC8qIEFnZ3JlZ2F0ZSBzdGF0cyBhY3Jvc3MgYWxsIFRDcyAqL1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwdHAtXHUwMDNlbnVtX3RjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBwcml2LVx1MDAzZW1heF9vcGVuZWRfdGM7IHRjJiM0MzsmIzQzOykge1xuIFx0XHRcdHN0cnVjdCBtbHg1ZV9wdHBfY3Ffc3RhdHMgKnN0YXRzID1cbi1cdFx0XHRcdHB0cC1cdTAwM2VwdHBzcVtpXS5jcV9zdGF0cztcbiYjNDM7XHRcdFx0XHRcdTAwMjZwcml2LVx1MDAzZXB0cF9zdGF0cy5jcVt0Y107XG4gXG4gXHRcdFx0dHNfc3RhdHMtXHUwMDNlcGt0cyAmIzQzOz0gc3RhdHMtXHUwMDNlY3FlO1xuIFx0XHRcdHRzX3N0YXRzLVx1MDAzZWVyciAmIzQzOz0gc3RhdHMtXHUwMDNlYWJvcnQgJiM0Mzsgc3RhdHMtXHUwMDNlZXJyX2NxZSAmIzQzO1xuLVx0XHRcdFx0c3RhdHMtXHUwMDNlbGF0ZV9jcWU7XG4mIzQzO1x0XHRcdFx0XHRzdGF0cy1cdTAwM2VsYXRlX2NxZTtcbiBcdFx0XHR0c19zdGF0cy1cdTAwM2Vsb3N0ICYjNDM7PSBzdGF0cy1cdTAwM2Vsb3N0X2NxZTtcbiBcdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0LyogRE1BIGxheWVyIHdpbGwgYWx3YXlzIHN1Y2Nlc3NmdWxseSB0aW1lc3RhbXAgcGFja2V0cy4gT3RoZXJcbi1cdFx0ICogY291bnRlcnMgZG8gbm90IG1ha2Ugc2Vuc2UgZm9yIHRoaXMgbGF5ZXIuXG4tXHRcdCAqL1xuLVx0XHR0c19zdGF0cy1cdTAwM2Vwa3RzID0gMDtcbi1cbi1cdFx0LyogQWdncmVnYXRlIHN0YXRzIGFjcm9zcyBhbGwgU1FzICovXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHByaXYtXHUwMDNlY2hhbm5lbHMubnVtOyBqJiM0MzsmIzQzOykge1xuLVx0XHRcdHN0cnVjdCBtbHg1ZV9jaGFubmVsICpjID0gcHJpdi1cdTAwM2VjaGFubmVscy5jW2pdO1xuLVxuLVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGMtXHUwMDNlbnVtX3RjOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdFx0c3RydWN0IG1seDVlX3NxX3N0YXRzICpzdGF0cyA9IGMtXHUwMDNlc3FbaV0uc3RhdHM7XG4tXG4tXHRcdFx0XHR0c19zdGF0cy1cdTAwM2Vwa3RzICYjNDM7PSBzdGF0cy1cdTAwM2V0aW1lc3RhbXBzO1xuLVx0XHRcdH1cbi1cdFx0fVxuIFx0fVxuLVxuLW91dDpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuIH1cbiBcbiAjZGVmaW5lIFBQT1JUX1BIWV9MQVlFUl9PRkYoYykgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxOTowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aW1lc3RhbXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKG1seDVlX3N0YXRzX3RzX2dldCkgaW4gdGhlIE1lbGxhbm94IENvbm5lY3RYIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoTWVsbGFub3ggQ29ubmVjdFggTklDcy9TbWFydE5JQ3MpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDk5NjhmYWYxZTdhNTFhMTRlN2Q2YmUxNzk2NTM5MmU1YWVlNzJkMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTk6MDI6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jCmluZGV4IGU3ZTZkYjdmNmJmMTcuLmNkOTRiYjQ0ZjZhYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jCkBAIC0xMTk5LDUwICYjNDM7MTE5OSwzOSBAQCB2b2lkIG1seDVlX3N0YXRzX3Jtb25fZ2V0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LAogdm9pZCBtbHg1ZV9zdGF0c190c19nZXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsCiAJCQlzdHJ1Y3QgZXRodG9vbF90c19zdGF0cyAqdHNfc3RhdHMpCiB7Ci0JaW50IGksIGo7CiYjNDM7CXUxNiBuY2ggPSBtbHg1ZV9zdGF0c19uY2hfcmVhZChwcml2KTsKJiM0MzsJaW50IGksIHRjOwogCi0JbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwl0c19zdGF0cy0mZ3Q7cGt0cyA9IDA7CiAKLQlpZiAocHJpdi0mZ3Q7dHhfcHRwX29wZW5lZCkgewotCQlzdHJ1Y3QgbWx4NWVfcHRwICpwdHAgPSBwcml2LSZndDtjaGFubmVscy5wdHA7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuY2g7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgbWx4NWVfY2hhbm5lbF9zdGF0cyAqY2hhbm5lbF9zdGF0cyA9CiYjNDM7CQkJcHJpdi0mZ3Q7Y2hhbm5lbF9zdGF0c1tpXTsKIAotCQl0c19zdGF0cy0mZ3Q7cGt0cyA9IDA7CiYjNDM7CQlmb3IgKHRjID0gMDsgdGMgJmx0OyBwcml2LSZndDttYXhfb3BlbmVkX3RjOyB0YyYjNDM7JiM0MzspCiYjNDM7CQkJdHNfc3RhdHMtJmd0O3BrdHMgJiM0Mzs9IGNoYW5uZWxfc3RhdHMtJmd0O3NxW3RjXS50aW1lc3RhbXBzOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFjY3VtdWxhdGUgRE1BIGFuZCBwb3J0IHRpbWVzdGFtcCBjb3VudGVycyBzbyB2YWx1ZXMgc3RheSBtb25vdG9uaWMKJiM0MzsJICogYWNyb3NzIGNoYW5uZWwgdGVhcmRvd24gYW5kIG1vZGUgc3dpdGNoZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7dHhfcHRwX29wZW5lZCkgewomIzQzOwkJLyogRXJyIGFuZCBMb3N0IHN0YXRzIGFyZSBvbmx5IHJlbGV2YW50IGZvciBwb3J0IHRpbWVzdGFtcGluZywKJiM0MzsJCSAqIGFzIHRoZSBETUEgbGF5ZXIgd2lsbCBhbHdheXMgc3VjY2Vzc2Z1bGx5IHRpbWVzdGFtcCBwYWNrZXRzLgomIzQzOwkJICovCiAJCXRzX3N0YXRzLSZndDtlcnIgPSAwOwogCQl0c19zdGF0cy0mZ3Q7bG9zdCA9IDA7CiAKLQkJaWYgKCFwdHApCi0JCQlnb3RvIG91dDsKLQotCQkvKiBBZ2dyZWdhdGUgc3RhdHMgYWNyb3NzIGFsbCBUQ3MgKi8KLQkJZm9yIChpID0gMDsgaSAmbHQ7IHB0cC0mZ3Q7bnVtX3RjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yICh0YyA9IDA7IHRjICZsdDsgcHJpdi0mZ3Q7bWF4X29wZW5lZF90YzsgdGMmIzQzOyYjNDM7KSB7CiAJCQlzdHJ1Y3QgbWx4NWVfcHRwX2NxX3N0YXRzICpzdGF0cyA9Ci0JCQkJcHRwLSZndDtwdHBzcVtpXS5jcV9zdGF0czsKJiM0MzsJCQkJJmFtcDtwcml2LSZndDtwdHBfc3RhdHMuY3FbdGNdOwogCiAJCQl0c19zdGF0cy0mZ3Q7cGt0cyAmIzQzOz0gc3RhdHMtJmd0O2NxZTsKIAkJCXRzX3N0YXRzLSZndDtlcnIgJiM0Mzs9IHN0YXRzLSZndDthYm9ydCAmIzQzOyBzdGF0cy0mZ3Q7ZXJyX2NxZSAmIzQzOwotCQkJCXN0YXRzLSZndDtsYXRlX2NxZTsKJiM0MzsJCQkJCXN0YXRzLSZndDtsYXRlX2NxZTsKIAkJCXRzX3N0YXRzLSZndDtsb3N0ICYjNDM7PSBzdGF0cy0mZ3Q7bG9zdF9jcWU7CiAJCX0KLQl9IGVsc2UgewotCQkvKiBETUEgbGF5ZXIgd2lsbCBhbHdheXMgc3VjY2Vzc2Z1bGx5IHRpbWVzdGFtcCBwYWNrZXRzLiBPdGhlcgotCQkgKiBjb3VudGVycyBkbyBub3QgbWFrZSBzZW5zZSBmb3IgdGhpcyBsYXllci4KLQkJICovCi0JCXRzX3N0YXRzLSZndDtwa3RzID0gMDsKLQotCQkvKiBBZ2dyZWdhdGUgc3RhdHMgYWNyb3NzIGFsbCBTUXMgKi8KLQkJZm9yIChqID0gMDsgaiAmbHQ7IHByaXYtJmd0O2NoYW5uZWxzLm51bTsgaiYjNDM7JiM0MzspIHsKLQkJCXN0cnVjdCBtbHg1ZV9jaGFubmVsICpjID0gcHJpdi0mZ3Q7Y2hhbm5lbHMuY1tqXTsKLQotCQkJZm9yIChpID0gMDsgaSAmbHQ7IGMtJmd0O251bV90YzsgaSYjNDM7JiM0MzspIHsKLQkJCQlzdHJ1Y3QgbWx4NWVfc3Ffc3RhdHMgKnN0YXRzID0gYy0mZ3Q7c3FbaV0uc3RhdHM7Ci0KLQkJCQl0c19zdGF0cy0mZ3Q7cGt0cyAmIzQzOz0gc3RhdHMtJmd0O3RpbWVzdGFtcHM7Ci0JCQl9Ci0JCX0KIAl9Ci0KLW91dDoKLQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKIH0KIAogI2RlZmluZSBQUE9SVF9QSFlfTEFZRVJfT0ZGKGMpIFwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbWx4NWVfc3RhdHNfdHNfZ2V0YCBQYXRjaCBhbmQgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbWx4NWVfc3RhdHNfdHNfZ2V0YCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbXkgbWluZCBpczogd2hhdCYjMzk7cyB0aGUgaGFyZHdhcmUgcmVhY2hhYmlsaXR5IHNpdHVhdGlvbiB3aXRoIGBtbHg1YD8gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgTWVsbGFub3ggaGVyZSwgdGhlaXIgQ29ubmVjdFgtNCwgQ29ubmVjdFgtNSwgYW5kIENvbm5lY3RYLTYgRXRoZXJuZXQgZHJpdmVycywgZXNzZW50aWFsbHksIHRoZSBgTUxYNV9DT1JFYCBhbmQgYE1MWDVfQ09SRV9FTmAgZHJpdmVycy4gSXMgdGhpcyBkcml2ZXIgb3BlcmF0aW5nIG9uIGhhcmR3YXJlIHRoYXQmIzM5O3MgKnN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSogYWNjb3JkaW5nIHRvIG15IGd1aWRlbGluZXM/CgpMZXQmIzM5O3MgcXVpY2tseSByZWZyZXNoIHRob3NlIGd1aWRlbGluZXMsIHNwZWNpZmljYWxseSBTZWN0aW9uIDIsIHRoZSAmIzM0O1dIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpJiMzNDsgc2VjdGlvbi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBUaGUgdGV4dCBtZW50aW9ucyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAsIHdoaWNoICpyZXF1aXJlKiBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBhcmUgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhhdCYjMzk7cyB0aGUga2V5LgoKTm93LCBkb2VzIE1lbGxhbm94JiMzOTtzIGBtbHg1YCBmaXQgdGhhdCBkZXNjcmlwdGlvbj8gWWVzLCBpdCYjMzk7cyBhIHBoeXNpY2FsIFBDSWUgU21hcnROSUMvTklDIGRyaXZlci4gTWVsbGFub3ggQ29ubmVjdFgtNCBhbmQgbmV3ZXIgYXJlIGNsYXNzaWMgZXhhbXBsZXMuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBEb2VzIHN0YW5kYXJkIFFFTVUgZW11bGF0ZSB0aGlzIGhhcmR3YXJlPyBUaGUgYW5zd2VyIGlzIGdlbmVyYWxseSBubywgbm90IGluIGEgd2F5IHRoYXQgcHJvdmlkZXMgZnVsbCBmdW5jdGlvbmFsIGVxdWl2YWxlbmNlLiBJJiMzOTttIGhpZ2hseSBmYW1pbGlhciB3aXRoIHRoZSBsaW1pdGF0aW9ucyBvZiBRRU1VIHdoZW4gaXQgY29tZXMgdG8gc29waGlzdGljYXRlZCBOSUNzIGxpa2UgdGhlc2UuCgpUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgbmVlZCB0byBjb25maXJtIHRoaXMgZGVmaW5pdGl2ZWx5LiBMZXQmIzM5O3MgcnVuIGEgcXVpY2sgYGdyZXBwZXJgIHNjYW4gb3IgaW5zcGVjdCB0aGUgcmVsZXZhbnQgY29kZSBiYXNlLCBqdXN0IHRvIGJlIDEwMCUgcG9zaXRpdmUuIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHNpZ25zIG9mIHZpcnR1YWwgZHJpdmVycyBvciBtb2NrIGRldmljZXMgdGhhdCB3b3VsZCBtYWtlIHRoaXMgZHJpdmVyIGFjY2Vzc2libGUgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBJZiBpdCYjMzk7cyBwdXJlbHkgcGh5c2ljYWwgaGFyZHdhcmUsIHRoZW4sIHVuZm9ydHVuYXRlbHksIHRoaXMgY29kZSBwYXRoIGlzIGxpa2VseSBub3Qgc3VpdGFibGUgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01MWDVfQ09SRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9NYWtlZmlsZT02PW9iai0kKENPTkZJR19NTFg0X0NPUkUpICYjNDM7PSBtbHg0L1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfTUxYNV9DT1JFKSAmIzQzOz0gbWx4NS9jb3JlL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfTUxYU1dfQ09SRSkgJiM0Mzs9IG1seHN3L1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZT03PXN1YmRpci1jY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19NTFg1X0NPUkUpICYjNDM7PSBtbHg1X2NvcmUub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTEwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZT0xND1tbHg1X2NvcmUteSA6PVx0bWFpbi5vIGNtZC5vIGRlYnVnZnMubyBmdy5vIGVxLm8gdWFyLm8gcGFnZWFsbG9jLm8gXFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtMjUtI1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjI2Om1seDVfY29yZS0kKENPTkZJR19NTFg1X0NPUkVfRU4pICYjNDM7PSBlbi9ycXQubyBlbi90aXIubyBlbi9yc3MubyBlbi9yeF9yZXMubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTI3LVx0XHRlbi9jaGFubmVscy5vIGVuX21haW4ubyBlbl9jb21tb24ubyBlbl9mcy5vIGVuX2V0aHRvb2wubyBcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZT0zOT1tbHg1X2NvcmUtJChDT05GSUdfTUxYNV9FTl9SWE5GQykgICAgJiM0Mzs9IGVuX2ZzX2V0aHRvb2wub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjQwOm1seDVfY29yZS0kKENPTkZJR19NTFg1X0NPUkVfRU5fRENCKSAmIzQzOz0gZW5fZGNibmwubyBlbi9wb3J0X2J1ZmZlci5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNDEtbWx4NV9jb3JlLSQoQ09ORklHX1BDSV9IWVBFUlZfSU5URVJGQUNFKSAmIzQzOz0gZW4vaHZfdmhjYV9zdGF0cy5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlPTkzPW1seDVfY29yZS0kKENPTkZJR19QQ0lfSFlQRVJWX0lOVEVSRkFDRSkgJiM0Mzs9IGxpYi9odi5vIGxpYi9odl92aGNhLm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtOTctI1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjk4Om1seDVfY29yZS0kKENPTkZJR19NTFg1X0NPUkVfSVBPSUIpICYjNDM7PSBpcG9pYi9pcG9pYi5vIGlwb2liL2V0aHRvb2wubyBpcG9pYi9pcG9pYl92bGFuLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS05OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2LmM9NTc9Ym9vbCBtbHg1X2V0aF9zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXYuYy01OC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2LmM6NTk6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX01MWDVfQ09SRV9FTikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2LmMtNjAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaD05MDU9c3RydWN0IG1seDVlX3ByaXYge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oLTkxMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oOjkxMTojaWZkZWYgQ09ORklHX01MWDVfQ09SRV9FTl9EQ0JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oLTkxMi1cdHN0cnVjdCBtbHg1ZV9kY2J4X2RwICAgICAgIGRjYnhfZHA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmgtOTU3LVx0c3RydWN0IHVkcF90dW5uZWxfbmljX2luZm8gbmljX2luZm87XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaDo5NTg6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5fRENCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaC05NTktXHRzdHJ1Y3QgbWx4NWVfZGNieCAgICAgICAgICBkY2J4O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9kY2JubC5oLTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZGNibmwuaDo3OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0VOX0RDQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2RjYm5sLmgtOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vc2VscS5jPTEzMj12b2lkIG1seDVlX3NlbHFfY2FuY2VsKHN0cnVjdCBtbHg1ZV9zZWxxICpzZWxxKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9zZWxxLmMtMTM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3NlbHEuYzoxNDA6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5fRENCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vc2VscS5jLTE0MS1zdGF0aWMgaW50IG1seDVlX2dldF9kc2NwX3VwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9zZWxxLmM9MTU0PXN0YXRpYyBpbnQgbWx4NWVfZ2V0X3VwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3NlbHEuYy0xNTUte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3NlbHEuYzoxNTY6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5fRENCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vc2VscS5jLTE1Ny1cdGlmIChSRUFEX09OQ0UocHJpdi1cdTAwM2VkY2J4X2RwLnRydXN0X3N0YXRlKSA9PSBNTFg1X1FQVFNfVFJVU1RfRFNDUClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYz0yNDg0PWludCBtbHg1ZV9wb2xsX3J4X2NxKHN0cnVjdCBtbHg1ZV9jcSAqY3EsIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMjUxNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jOjI1MTc6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfSVBPSUJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jLTI1MTgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmM9MjY0MT1jb25zdCBzdHJ1Y3QgbWx4NWVfcnhfaGFuZGxlcnMgbWx4NWlfcnhfaGFuZGxlcnMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMjY0NC19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmM6MjY0NTojZW5kaWYgLyogQ09ORklHX01MWDVfQ09SRV9JUE9JQiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMjY0Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYz0xMDA3PXN0YXRpYyBpbnQgbWx4NWVfaGFpcnBpbl9nZXRfcHJpbyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy0xMDE0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM6MTAxNTojaWZkZWYgQ09ORklHX01MWDVfQ09SRV9FTl9EQ0JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTEwMTYtXHRpZiAocHJpdi1cdTAwM2VkY2J4X2RwLnRydXN0X3N0YXRlICE9IE1MWDVfUVBUU19UUlVTVF9QQ1ApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdHguYz04NzI9dm9pZCBtbHg1ZV9mcmVlX3R4cXNxX2Rlc2NzKHN0cnVjdCBtbHg1ZV90eHFzcSAqc3EpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3R4LmMtOTE3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3R4LmM6OTE4OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0lQT0lCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdHguYy05MTktc3RhdGljIGlubGluZSB2b2lkXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmgtMzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvaXBvaWIuaDozNjojaWZkZWYgQ09ORklHX01MWDVfQ09SRV9JUE9JQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmgtMzctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmg9MTMwPXZvaWQgbWx4NWlfcGFyZW50X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9pcG9pYi5oLTEzMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9pcG9pYi5oOjEzMjojZW5kaWYgLyogQ09ORklHX01MWDVfQ09SRV9JUE9JQiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmgtMTMzLSNlbmRpZiAvKiBfX01MWDVFX0lQT0JfSF9fICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oPTI0PXZvaWQgbWx4NV9zZF9wdXRfYWRldihzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYWN0dWFsX2FkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oLTI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oOjI3OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0VOXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmgtMjgtYm9vbCBtbHg1X3NkX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmg9Mzc9dm9pZCBtbHg1X3NkX2NsZWFudXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmgtMzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmg6Mzk6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaC00MC1zdHJ1Y3QgbWx4NV9kZXZjb21fY29tcF9kZXYgKm1seDVfc2RfZ2V0X2RldmNvbShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWx4NV9jb3JlLmg9Mzk2PXZvaWQgbWx4NV9md192ZXJzaW9uX3F1ZXJ5KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUzMiAqcnVubmluZ192ZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21seDVfY29yZS5oLTM5OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaDozOTk6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaC00MDAtaW50IG1seDVlX2luaXQodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQyMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgbWx4NSBJbml0aWFsaXphdGlvbiBhbmQgSGFyZHdhcmUgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0hvdyBkb2VzIHRoZSBtbHg1IGRyaXZlciBnZXQgaXRzZWxmIG9mZiB0aGUgZ3JvdW5kPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gVGhlIGJ1cm5pbmcgcXVlc3Rpb24gaXMsIGRvZXMgaXQgKnJlcXVpcmUqIHBoeXNpY2FsIGhhcmR3YXJlIHRvIGluaXRpYWxpemUgYXQgc29tZSBwb2ludCwgb3IgY2FuIGl0IG9wZXJhdGUgaW4gYSBzaW11bGF0ZWQgb3IgdmlydHVhbCBlbnZpcm9ubWVudCwgYXQgbGVhc3QgcGFydGlhbGx5PyBUaGlzIGlzIGNydWNpYWwgZm9yIHRlc3RpbmcgYW5kIGRldmVsb3BtZW50LiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgdGhlIGRyaXZlcuKAmXMgaW5pdGlhbGl6YXRpb24gaXMgdHJ1bHkgaGFyZHdhcmUtZGVwZW5kZW50LgoKVGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoPyBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBgLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHRhcmdldCB0aGUgYHBjaV9yZWdpc3Rlcl9kcml2ZXJgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgbWx4NSBkcml2ZXIgZGlyZWN0b3J5LiBJJiMzOTtsbCBzZWFyY2ggaW5zaWRlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1YCBmb3IgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gYHBjaV9yZWdpc3Rlcl9kcml2ZXJgIGlzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIG9mIFBDSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIHdoaWNoIHdvdWxkIHN0cm9uZ2x5IHN1Z2dlc3QgYSBkZXBlbmRlbmN5IG9uIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgYSBzaW11bGF0ZWQgUENJIGJ1cy4gVGhhdCBzaG91bGQgcXVpY2tseSBpbGx1bWluYXRlIHRoZSBtb3N0IGxpa2VseSBwYXRoLiBGcm9tIHRoZXJlLCBJIGNhbiBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgc3RhY2sgaWYgSSBuZWVkIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmM9MjM0Nj1zdGF0aWMgaW50IF9faW5pdCBtbHg1X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jLTIzNjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jOjIzNjY6XHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNm1seDVfY29yZV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYy0yMzY3LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTE4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBtbHg1YCBEcml2ZXIgYW5kIGl0cyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIGFza2luZyBhYm91dCBjb2RlIHRoYXQgbWlnaHQgYmUgcHJvYmxlbWF0aWMgaW4gYSBzcGVjaWZpYyBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoZSBgbWx4NWAgZHJpdmVyIGlzIGxpa2VseSB0byBiZSBhIGNvbmNlcm4uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgbWx4NWAgaXMgdGhlIGNvcmUgZHJpdmVyIGZvciBNZWxsYW5veCBDb25uZWN0WC00LzUvNi83IE5JQ3MgYW5kIFNtYXJ0TklDcy4gSSBuZWVkIHRvIHNlZSBpZiBpdCBtZWV0cyB0aGUgY3JpdGVyaWEgb2YgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsKCkltbWVkaWF0ZWx5LCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgYG1seDVgICppcyogYSBjbGFzc2ljIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIuIEl04oCZcyBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCBwaHlzaWNhbCBNZWxsYW5veCBDb25uZWN0WCBoYXJkd2FyZS4gU3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgdHlwaWNhbGx5ICpkb24mIzM5O3QqIGVtdWxhdGUgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZS4gSSBrbm93IHRoaXMgZnJvbSBleHBlcmllbmNlLgoKVGhlIHNwZWNpZmljIGZ1bmN0aW9uIG1lbnRpb25lZCwgYG1seDVlX3N0YXRzX3RzX2dldGAsIGlzIHRyaWdnZXJlZCB0aHJvdWdoIGV0aHRvb2wgc3RhdHMgY2FsbGJhY2tzIChgbWx4NWVfZ2V0X3RzX3N0YXRzYCkgb24gYSBgbWx4NWVgIG5ldHdvcmsgZGV2aWNlLiBUaGlzIGBtbHg1ZWAgZGV2aWNlIGlzIGNyZWF0ZWQgb25seSAqYWZ0ZXIqIGEgcGh5c2ljYWwgTWVsbGFub3ggUENJZSBkZXZpY2UgcHJvYmUgaXMgc3VjY2Vzc2Z1bC4gVGhhdCBzb2xpZGlmaWVzIG15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIGJlaW5nIHJlbGlhbnQgb24gYWN0dWFsIGhhcmR3YXJlLgoKTm93LCBqdXN0IHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLCBJIG5lZWQgdG8gcnVsZSBvdXQgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlcmUmIzM5O3Mgc29tZSBraW5kIG9mIG1vY2sgb3IgdmlydHVhbCBkZXZpY2UgZHJpdmVyIHRoYXQgdXRpbGl6ZXMgYG1seDVgIGluIHRoZSBrZXJuZWwuIEl04oCZcyByYXJlLCBidXQgc29tZXRpbWVzIHZlbmRvcnMgaW5jbHVkZSBhIHNpbXVsYXRpb24gbGF5ZXIgZm9yIHRlc3RpbmcuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIHRoZSBrZXJuZWwgc291cmNlIGZvciBhbnkgbWVudGlvbnMgb2YgYG1seDVgIHdpdGhpbiBkcml2ZXJzIHRoYXQgbWF5IGhhdmUgc29tZSBzaW11bGF0aW9uIGFzcGVjdC4gTXkgZmlyc3Qgc2VhcmNoIHdpbGwgYmUgd2l0aGluIGBkcml2ZXJzL25ldC9uZXRkZXZzaW1gLCBhbmQgdGhlbiBhIGJyb2FkZXIgc2VhcmNoIGlmIHRoYXQgZG9lc24mIzM5O3QgeWllbGQgYW55dGhpbmcuIFRoaXMgZG91YmxlLWNoZWNrIHNob3VsZCBnaXZlIG1lIHRoZSBmaW5hbCBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbHg1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjI1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqVGhvcm91Z2huZXNzIENoZWNrIC0gYG1seDVlX3N0YXRzX3RzX2dldGAgQ2FsbGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIHJldmlzaXRpbmcgdGhpcywgYW5kIGJlZm9yZSBJIHNpZ24gb2ZmLCBJIGp1c3QgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEkgd2FudCB0byBkbyBhIGZpbmFsLCBzdXBlci10aG9yb3VnaCBjaGVjay4gVGhlIGNvZGUgbG9va3MgZ29vZCwgdGhlIGxvZ2ljIHNlZW1zIHNvdW5kLCBidXQgSSYjMzk7dmUgbGVhcm5lZCB0aGF0IGEgcXVpY2ssIGxhc3QgbG9vayBjYW4gdW5jb3ZlciBoaWRkZW4gYXNzdW1wdGlvbnMgb3IgZWRnZSBjYXNlcy4gV2hhdCBJJiMzOTttIHRoaW5raW5nIGlzIHRoaXM6IGxldCYjMzk7cyBwdWxsIHVwIGFsbCB0aGUgY2FsbGVycyBvZiBgbWx4NWVfc3RhdHNfdHNfZ2V0YC4gSSYjMzk7bSBhbiBleHBlcnQsIEkgKmtub3cqIHRoaXMgYXJlYSwgYnV0IGEgcXVpY2sgZ3JlcCwgYSBnbGFuY2UgYXQgdGhlIGNhbGwgZ3JhcGgsIHdoYXRldmVyIHRoZSBwcmVmZXJyZWQgbWV0aG9kIGlzLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNhbGwgc2l0ZSB0aGF0JiMzOTtzIHVzaW5nIHRoZSByZXN1bHQgaW4gYSB3YXkgSSBkaWRuJiMzOTt0IGluaXRpYWxseSBhbnRpY2lwYXRlLiBJdOKAmXMgYWJvdXQgYmVpbmcgY29uZmlkZW50LCBsZWF2aW5nIG5vIHN0b25lIHVudHVybmVkLCBhbmQgbWFraW5nIHN1cmUgdGhpcyBwYXJ0IG9mIHRoZSBzeXN0ZW0gaXMgcm9jay1zb2xpZC4gQSBxdWljayBjaGVjayB3aWxsIHB1dCBteSBtaW5kIGF0IGVhc2UgYW5kIGFsbG93IG1lIHRvIG1vdmUgZm9yd2FyZCB3aXRoIGEgaGlnaCBkZWdyZWUgb2YgY29uZmlkZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWx4NWVfc3RhdHNfdHNfZ2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM9MjcwOT1zdGF0aWMgdm9pZCBtbHg1ZV9nZXRfdHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jLTI3MTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jOjI3MTQ6XHRtbHg1ZV9zdGF0c190c19nZXQocHJpdiwgdHNfc3RhdHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYy0yNzE1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuYz0xMTYwPXZvaWQgbWx4NWVfc3RhdHNfcm1vbl9nZXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmMtMTE5OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jOjExOTk6dm9pZCBtbHg1ZV9zdGF0c190c19nZXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuYy0xMjAwLVx0XHRcdHN0cnVjdCBldGh0b29sX3RzX3N0YXRzICp0c19zdGF0cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuaD0xMjk9dm9pZCBtbHg1ZV9zdGF0c19ybW9uX2dldChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuaC0xMzEtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmg6MTMyOnZvaWQgbWx4NWVfc3RhdHNfdHNfZ2V0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmgtMTMzLVx0XHRcdHN0cnVjdCBldGh0b29sX3RzX3N0YXRzICp0c19zdGF0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NDEKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYG1seDVlX3N0YXRzX3RzX2dldGAgaXMgb25seSBldmVyIGNhbGxlZCBieSBgbWx4NWVfZ2V0X3RzX3N0YXRzYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgYGV0aHRvb2xfb3BzLmdldF90c19zdGF0c2AgaGFuZGxlciB3aXRoaW4gdGhlIGBlbl9ldGh0b29sLmNgIGZpbGUuIFJpZ2h0LCB0aGF0IHBsYWNlcyB0aGlzIHNxdWFyZWx5IHdpdGhpbiB0aGUgTWVsbGFub3ggQ29ubmVjdFggTklDIHJlYWxtLCBzcGVjaWZpY2FsbHkgdGhlIG1seDUgRXRoZXJuZXQgZHJpdmVyLiBBbmQgd2UgYWxsIGtub3cgd2hhdCB0aGF0IG1lYW5zOiB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUsIFBDSWUgYmFzZWQsIG5vdCBzb21ldGhpbmcgeW91JiMzOTtyZSBnb2luZyB0byBzZWUgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBzZXR1cC4gTm8gZW11bGF0aW5nIHRoaXMuCgpUaGVyZWZvcmUsIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgY29kZSBwYXRoIGJlaW5nIHRyaWdnZXJlZCBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgcHJhY3RpY2FsbHkgemVyby4gSXQmIzM5O3Mgc2ltcGx5IHVucmVhY2hhYmxlLgoKU28sIGxldCYjMzk7cyBzZXQgdGhlIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AuIGBXb3J0aEZ1enppbmdgIGhhcyB0byBiZSBgZmFsc2VgLCBvYnZpb3VzbHkuIFRoZSBgUmVhc29uaW5nYCBzaG91bGQgZXhwbGljaXRseSBzdGF0ZSB0aGUgZGVwZW5kZW5jeSBvbiBNZWxsYW5veCBDb25uZWN0WCBoYXJkd2FyZSBhbmQgaXRzIGFic2VuY2UgZnJvbSBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBzZXR1cHMuIFdlIG5lZWQgdG8gc2F5IHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBtbHg1ZV9zdGF0c190c19nZXQoKWAgaW4gdGhlIE1lbGxhbm94IENvbm5lY3RYIGNvcmUgRXRoZXJuZXQgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9gKSBhbmQgdGhhdCBpdCByZXF1aXJlcyBwaHlzaWNhbCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBTbWFydE5JQy9OSUMgaGFyZHdhcmUgKE1lbGxhbm94IENvbm5lY3RYIEFTSUMpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBUaGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBsaXN0cyB3aWxsIGJlIGVtcHR5IHNpbmNlIHRoZXJlJiMzOTtzIG5vdGhpbmcgdG8gZm9jdXMgb24gb3IgZW5hYmxlIGhlcmUuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aW1lc3RhbXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKG1seDVlX3N0YXRzX3RzX2dldCkgaW4gdGhlIE1lbGxhbm94IENvbm5lY3RYIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoTWVsbGFub3ggQ29ubmVjdFggTklDcy9TbWFydE5JQ3MpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aW1lc3RhbXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKG1seDVlX3N0YXRzX3RzX2dldCkgaW4gdGhlIE1lbGxhbm94IENvbm5lY3RYIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoTWVsbGFub3ggQ29ubmVjdFggTklDcy9TbWFydE5JQ3MpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxOTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTk6MDI6NDQuMDEwNDI2NjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTcxMDgxOTk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRpbWVzdGFtcCBzdGF0aXN0aWNzIHJlcG9ydGluZyAobWx4NWVfc3RhdHNfdHNfZ2V0KSBpbiB0aGUgTWVsbGFub3ggQ29ubmVjdFggRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChNZWxsYW5veCBDb25uZWN0WCBOSUNzL1NtYXJ0TklDcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE5OjAyOjQ0LjAxMDQzNDg1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk0Mjc1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkOTk2OGZhZjFlN2E1MWExNGU3ZDZiZTE3OTY1MzkyZTVhZWU3MmQxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTk6MDI6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuY1xcbmluZGV4IGU3ZTZkYjdmNmJmMTcuLmNkOTRiYjQ0ZjZhYjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuY1xcbkBAIC0xMTk5LDUwICsxMTk5LDM5IEBAIHZvaWQgbWx4NWVfc3RhdHNfcm1vbl9nZXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXFxuIHZvaWQgbWx4NWVfc3RhdHNfdHNfZ2V0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRzdHJ1Y3QgZXRodG9vbF90c19zdGF0cyAqdHNfc3RhdHMpXFxuIHtcXG4tXFx0aW50IGksIGo7XFxuK1xcdHUxNiBuY2ggPSBtbHg1ZV9zdGF0c19uY2hfcmVhZChwcml2KTtcXG4rXFx0aW50IGksIHRjO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcdHRzX3N0YXRzLVxcdTAwM2Vwa3RzID0gMDtcXG4gXFxuLVxcdGlmIChwcml2LVxcdTAwM2V0eF9wdHBfb3BlbmVkKSB7XFxuLVxcdFxcdHN0cnVjdCBtbHg1ZV9wdHAgKnB0cCA9IHByaXYtXFx1MDAzZWNoYW5uZWxzLnB0cDtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5jaDsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBtbHg1ZV9jaGFubmVsX3N0YXRzICpjaGFubmVsX3N0YXRzID1cXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlY2hhbm5lbF9zdGF0c1tpXTtcXG4gXFxuLVxcdFxcdHRzX3N0YXRzLVxcdTAwM2Vwa3RzID0gMDtcXG4rXFx0XFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcHJpdi1cXHUwMDNlbWF4X29wZW5lZF90YzsgdGMrKylcXG4rXFx0XFx0XFx0dHNfc3RhdHMtXFx1MDAzZXBrdHMgKz0gY2hhbm5lbF9zdGF0cy1cXHUwMDNlc3FbdGNdLnRpbWVzdGFtcHM7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFjY3VtdWxhdGUgRE1BIGFuZCBwb3J0IHRpbWVzdGFtcCBjb3VudGVycyBzbyB2YWx1ZXMgc3RheSBtb25vdG9uaWNcXG4rXFx0ICogYWNyb3NzIGNoYW5uZWwgdGVhcmRvd24gYW5kIG1vZGUgc3dpdGNoZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNldHhfcHRwX29wZW5lZCkge1xcbitcXHRcXHQvKiBFcnIgYW5kIExvc3Qgc3RhdHMgYXJlIG9ubHkgcmVsZXZhbnQgZm9yIHBvcnQgdGltZXN0YW1waW5nLFxcbitcXHRcXHQgKiBhcyB0aGUgRE1BIGxheWVyIHdpbGwgYWx3YXlzIHN1Y2Nlc3NmdWxseSB0aW1lc3RhbXAgcGFja2V0cy5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHRzX3N0YXRzLVxcdTAwM2VlcnIgPSAwO1xcbiBcXHRcXHR0c19zdGF0cy1cXHUwMDNlbG9zdCA9IDA7XFxuIFxcbi1cXHRcXHRpZiAoIXB0cClcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRcXHQvKiBBZ2dyZWdhdGUgc3RhdHMgYWNyb3NzIGFsbCBUQ3MgKi9cXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHB0cC1cXHUwMDNlbnVtX3RjOyBpKyspIHtcXG4rXFx0XFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcHJpdi1cXHUwMDNlbWF4X29wZW5lZF90YzsgdGMrKykge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgbWx4NWVfcHRwX2NxX3N0YXRzICpzdGF0cyA9XFxuLVxcdFxcdFxcdFxcdHB0cC1cXHUwMDNlcHRwc3FbaV0uY3Ffc3RhdHM7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZwcml2LVxcdTAwM2VwdHBfc3RhdHMuY3FbdGNdO1xcbiBcXG4gXFx0XFx0XFx0dHNfc3RhdHMtXFx1MDAzZXBrdHMgKz0gc3RhdHMtXFx1MDAzZWNxZTtcXG4gXFx0XFx0XFx0dHNfc3RhdHMtXFx1MDAzZWVyciArPSBzdGF0cy1cXHUwMDNlYWJvcnQgKyBzdGF0cy1cXHUwMDNlZXJyX2NxZSArXFxuLVxcdFxcdFxcdFxcdHN0YXRzLVxcdTAwM2VsYXRlX2NxZTtcXG4rXFx0XFx0XFx0XFx0XFx0c3RhdHMtXFx1MDAzZWxhdGVfY3FlO1xcbiBcXHRcXHRcXHR0c19zdGF0cy1cXHUwMDNlbG9zdCArPSBzdGF0cy1cXHUwMDNlbG9zdF9jcWU7XFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0LyogRE1BIGxheWVyIHdpbGwgYWx3YXlzIHN1Y2Nlc3NmdWxseSB0aW1lc3RhbXAgcGFja2V0cy4gT3RoZXJcXG4tXFx0XFx0ICogY291bnRlcnMgZG8gbm90IG1ha2Ugc2Vuc2UgZm9yIHRoaXMgbGF5ZXIuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHR0c19zdGF0cy1cXHUwMDNlcGt0cyA9IDA7XFxuLVxcbi1cXHRcXHQvKiBBZ2dyZWdhdGUgc3RhdHMgYWNyb3NzIGFsbCBTUXMgKi9cXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIHByaXYtXFx1MDAzZWNoYW5uZWxzLm51bTsgaisrKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBtbHg1ZV9jaGFubmVsICpjID0gcHJpdi1cXHUwMDNlY2hhbm5lbHMuY1tqXTtcXG4tXFxuLVxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjLVxcdTAwM2VudW1fdGM7IGkrKykge1xcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbWx4NWVfc3Ffc3RhdHMgKnN0YXRzID0gYy1cXHUwMDNlc3FbaV0uc3RhdHM7XFxuLVxcbi1cXHRcXHRcXHRcXHR0c19zdGF0cy1cXHUwMDNlcGt0cyArPSBzdGF0cy1cXHUwMDNldGltZXN0YW1wcztcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuIFxcdH1cXG4tXFxuLW91dDpcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gfVxcbiBcXG4gI2RlZmluZSBQUE9SVF9QSFlfTEFZRVJfT0ZGKGMpIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTk6MDI6NDQuNDkwNzM2NDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxMjMwNDk1Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aW1lc3RhbXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKG1seDVlX3N0YXRzX3RzX2dldCkgaW4gdGhlIE1lbGxhbm94IENvbm5lY3RYIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoTWVsbGFub3ggQ29ubmVjdFggTklDcy9TbWFydE5JQ3MpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ5OTY4ZmFmMWU3YTUxYTE0ZTdkNmJlMTc5NjUzOTJlNWFlZTcyZDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE5OjAyOjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuY1xuaW5kZXggZTdlNmRiN2Y2YmYxNy4uY2Q5NGJiNDRmNmFiMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuY1xuQEAgLTExOTksNTAgKzExOTksMzkgQEAgdm9pZCBtbHg1ZV9zdGF0c19ybW9uX2dldChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiB2b2lkIG1seDVlX3N0YXRzX3RzX2dldChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiBcdFx0XHRzdHJ1Y3QgZXRodG9vbF90c19zdGF0cyAqdHNfc3RhdHMpXG4ge1xuLVx0aW50IGksIGo7XG4rXHR1MTYgbmNoID0gbWx4NWVfc3RhdHNfbmNoX3JlYWQocHJpdik7XG4rXHRpbnQgaSwgdGM7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHR0c19zdGF0cy1cdTAwM2Vwa3RzID0gMDtcbiBcbi1cdGlmIChwcml2LVx1MDAzZXR4X3B0cF9vcGVuZWQpIHtcbi1cdFx0c3RydWN0IG1seDVlX3B0cCAqcHRwID0gcHJpdi1cdTAwM2VjaGFubmVscy5wdHA7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuY2g7IGkrKykge1xuK1x0XHRzdHJ1Y3QgbWx4NWVfY2hhbm5lbF9zdGF0cyAqY2hhbm5lbF9zdGF0cyA9XG4rXHRcdFx0cHJpdi1cdTAwM2VjaGFubmVsX3N0YXRzW2ldO1xuIFxuLVx0XHR0c19zdGF0cy1cdTAwM2Vwa3RzID0gMDtcbitcdFx0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBwcml2LVx1MDAzZW1heF9vcGVuZWRfdGM7IHRjKyspXG4rXHRcdFx0dHNfc3RhdHMtXHUwMDNlcGt0cyArPSBjaGFubmVsX3N0YXRzLVx1MDAzZXNxW3RjXS50aW1lc3RhbXBzO1xuK1x0fVxuK1xuK1x0LyogQWNjdW11bGF0ZSBETUEgYW5kIHBvcnQgdGltZXN0YW1wIGNvdW50ZXJzIHNvIHZhbHVlcyBzdGF5IG1vbm90b25pY1xuK1x0ICogYWNyb3NzIGNoYW5uZWwgdGVhcmRvd24gYW5kIG1vZGUgc3dpdGNoZXMuXG4rXHQgKi9cbitcdGlmIChwcml2LVx1MDAzZXR4X3B0cF9vcGVuZWQpIHtcbitcdFx0LyogRXJyIGFuZCBMb3N0IHN0YXRzIGFyZSBvbmx5IHJlbGV2YW50IGZvciBwb3J0IHRpbWVzdGFtcGluZyxcbitcdFx0ICogYXMgdGhlIERNQSBsYXllciB3aWxsIGFsd2F5cyBzdWNjZXNzZnVsbHkgdGltZXN0YW1wIHBhY2tldHMuXG4rXHRcdCAqL1xuIFx0XHR0c19zdGF0cy1cdTAwM2VlcnIgPSAwO1xuIFx0XHR0c19zdGF0cy1cdTAwM2Vsb3N0ID0gMDtcbiBcbi1cdFx0aWYgKCFwdHApXG4tXHRcdFx0Z290byBvdXQ7XG4tXG4tXHRcdC8qIEFnZ3JlZ2F0ZSBzdGF0cyBhY3Jvc3MgYWxsIFRDcyAqL1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwdHAtXHUwMDNlbnVtX3RjOyBpKyspIHtcbitcdFx0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBwcml2LVx1MDAzZW1heF9vcGVuZWRfdGM7IHRjKyspIHtcbiBcdFx0XHRzdHJ1Y3QgbWx4NWVfcHRwX2NxX3N0YXRzICpzdGF0cyA9XG4tXHRcdFx0XHRwdHAtXHUwMDNlcHRwc3FbaV0uY3Ffc3RhdHM7XG4rXHRcdFx0XHRcdTAwMjZwcml2LVx1MDAzZXB0cF9zdGF0cy5jcVt0Y107XG4gXG4gXHRcdFx0dHNfc3RhdHMtXHUwMDNlcGt0cyArPSBzdGF0cy1cdTAwM2VjcWU7XG4gXHRcdFx0dHNfc3RhdHMtXHUwMDNlZXJyICs9IHN0YXRzLVx1MDAzZWFib3J0ICsgc3RhdHMtXHUwMDNlZXJyX2NxZSArXG4tXHRcdFx0XHRzdGF0cy1cdTAwM2VsYXRlX2NxZTtcbitcdFx0XHRcdFx0c3RhdHMtXHUwMDNlbGF0ZV9jcWU7XG4gXHRcdFx0dHNfc3RhdHMtXHUwMDNlbG9zdCArPSBzdGF0cy1cdTAwM2Vsb3N0X2NxZTtcbiBcdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0LyogRE1BIGxheWVyIHdpbGwgYWx3YXlzIHN1Y2Nlc3NmdWxseSB0aW1lc3RhbXAgcGFja2V0cy4gT3RoZXJcbi1cdFx0ICogY291bnRlcnMgZG8gbm90IG1ha2Ugc2Vuc2UgZm9yIHRoaXMgbGF5ZXIuXG4tXHRcdCAqL1xuLVx0XHR0c19zdGF0cy1cdTAwM2Vwa3RzID0gMDtcbi1cbi1cdFx0LyogQWdncmVnYXRlIHN0YXRzIGFjcm9zcyBhbGwgU1FzICovXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHByaXYtXHUwMDNlY2hhbm5lbHMubnVtOyBqKyspIHtcbi1cdFx0XHRzdHJ1Y3QgbWx4NWVfY2hhbm5lbCAqYyA9IHByaXYtXHUwMDNlY2hhbm5lbHMuY1tqXTtcbi1cbi1cdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjLVx1MDAzZW51bV90YzsgaSsrKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbWx4NWVfc3Ffc3RhdHMgKnN0YXRzID0gYy1cdTAwM2VzcVtpXS5zdGF0cztcbi1cbi1cdFx0XHRcdHRzX3N0YXRzLVx1MDAzZXBrdHMgKz0gc3RhdHMtXHUwMDNldGltZXN0YW1wcztcbi1cdFx0XHR9XG4tXHRcdH1cbiBcdH1cbi1cbi1vdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiB9XG4gXG4gI2RlZmluZSBQUE9SVF9QSFlfTEFZRVJfT0ZGKGMpIFxcXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxOTowMjo0NC40OTA3Mzg3OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMjQ2OTA3Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBtbHg1ZV9zdGF0c190c19nZXRgIFBhdGNoIGFuZCBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuY2AsIHNwZWNpZmljYWxseSB0aGUgYG1seDVlX3N0YXRzX3RzX2dldGAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIHRvIG15IG1pbmQgaXM6IHdoYXQncyB0aGUgaGFyZHdhcmUgcmVhY2hhYmlsaXR5IHNpdHVhdGlvbiB3aXRoIGBtbHg1YD8gV2UncmUgdGFsa2luZyBhYm91dCBNZWxsYW5veCBoZXJlLCB0aGVpciBDb25uZWN0WC00LCBDb25uZWN0WC01LCBhbmQgQ29ubmVjdFgtNiBFdGhlcm5ldCBkcml2ZXJzLCBlc3NlbnRpYWxseSwgdGhlIGBNTFg1X0NPUkVgIGFuZCBgTUxYNV9DT1JFX0VOYCBkcml2ZXJzLiBJcyB0aGlzIGRyaXZlciBvcGVyYXRpbmcgb24gaGFyZHdhcmUgdGhhdCdzICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGFjY29yZGluZyB0byBteSBndWlkZWxpbmVzP1xuXG5MZXQncyBxdWlja2x5IHJlZnJlc2ggdGhvc2UgZ3VpZGVsaW5lcywgc3BlY2lmaWNhbGx5IFNlY3Rpb24gMiwgdGhlIFwiV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcIiBzZWN0aW9uLiBXZSdyZSBsb29raW5nIGF0IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gVGhlIHRleHQgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYW5kIGBhbWRncHVgLCB3aGljaCAqcmVxdWlyZSogcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIHRoYXQgYXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQncyB0aGUga2V5LlxuXG5Ob3csIGRvZXMgTWVsbGFub3gncyBgbWx4NWAgZml0IHRoYXQgZGVzY3JpcHRpb24/IFllcywgaXQncyBhIHBoeXNpY2FsIFBDSWUgU21hcnROSUMvTklDIGRyaXZlci4gTWVsbGFub3ggQ29ubmVjdFgtNCBhbmQgbmV3ZXIgYXJlIGNsYXNzaWMgZXhhbXBsZXMuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBEb2VzIHN0YW5kYXJkIFFFTVUgZW11bGF0ZSB0aGlzIGhhcmR3YXJlPyBUaGUgYW5zd2VyIGlzIGdlbmVyYWxseSBubywgbm90IGluIGEgd2F5IHRoYXQgcHJvdmlkZXMgZnVsbCBmdW5jdGlvbmFsIGVxdWl2YWxlbmNlLiBJJ20gaGlnaGx5IGZhbWlsaWFyIHdpdGggdGhlIGxpbWl0YXRpb25zIG9mIFFFTVUgd2hlbiBpdCBjb21lcyB0byBzb3BoaXN0aWNhdGVkIE5JQ3MgbGlrZSB0aGVzZS5cblxuVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGRlZmluaXRpdmVseS4gTGV0J3MgcnVuIGEgcXVpY2sgYGdyZXBwZXJgIHNjYW4gb3IgaW5zcGVjdCB0aGUgcmVsZXZhbnQgY29kZSBiYXNlLCBqdXN0IHRvIGJlIDEwMCUgcG9zaXRpdmUuIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHNpZ25zIG9mIHZpcnR1YWwgZHJpdmVycyBvciBtb2NrIGRldmljZXMgdGhhdCB3b3VsZCBtYWtlIHRoaXMgZHJpdmVyIGFjY2Vzc2libGUgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBJZiBpdCdzIHB1cmVseSBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlbiwgdW5mb3J0dW5hdGVseSwgdGhpcyBjb2RlIHBhdGggaXMgbGlrZWx5IG5vdCBzdWl0YWJsZSBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE5OjAyOjU3LjczNzY0OTczOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODYwNTc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUxYNV9DT1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9NYWtlZmlsZT02PW9iai0kKENPTkZJR19NTFg0X0NPUkUpICs9IG1seDQvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfTUxYNV9DT1JFKSArPSBtbHg1L2NvcmUvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfTUxYU1dfQ09SRSkgKz0gbWx4c3cvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9Nz1zdWJkaXItY2NmbGFncy15ICs9IC1JJChzcmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX01MWDVfQ09SRSkgKz0gbWx4NV9jb3JlLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9MTQ9bWx4NV9jb3JlLXkgOj1cXHRtYWluLm8gY21kLm8gZGVidWdmcy5vIGZ3Lm8gZXEubyB1YXIubyBwYWdlYWxsb2MubyBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtMjUtI1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZToyNjptbHg1X2NvcmUtJChDT05GSUdfTUxYNV9DT1JFX0VOKSArPSBlbi9ycXQubyBlbi90aXIubyBlbi9yc3MubyBlbi9yeF9yZXMubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTI3LVxcdFxcdGVuL2NoYW5uZWxzLm8gZW5fbWFpbi5vIGVuX2NvbW1vbi5vIGVuX2ZzLm8gZW5fZXRodG9vbC5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZT0zOT1tbHg1X2NvcmUtJChDT05GSUdfTUxYNV9FTl9SWE5GQykgICAgKz0gZW5fZnNfZXRodG9vbC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjQwOm1seDVfY29yZS0kKENPTkZJR19NTFg1X0NPUkVfRU5fRENCKSArPSBlbl9kY2JubC5vIGVuL3BvcnRfYnVmZmVyLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNDEtbWx4NV9jb3JlLSQoQ09ORklHX1BDSV9IWVBFUlZfSU5URVJGQUNFKSArPSBlbi9odl92aGNhX3N0YXRzLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZT05Mz1tbHg1X2NvcmUtJChDT05GSUdfUENJX0hZUEVSVl9JTlRFUkZBQ0UpICs9IGxpYi9odi5vIGxpYi9odl92aGNhLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS05Ny0jXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjk4Om1seDVfY29yZS0kKENPTkZJR19NTFg1X0NPUkVfSVBPSUIpICs9IGlwb2liL2lwb2liLm8gaXBvaWIvZXRodG9vbC5vIGlwb2liL2lwb2liX3ZsYW4ub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS05OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXYuYz01Nz1ib29sIG1seDVfZXRoX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXYuYy01OC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Rldi5jOjU5OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTUxYNV9DT1JFX0VOKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2LmMtNjAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmg9OTA1PXN0cnVjdCBtbHg1ZV9wcml2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oLTkxMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaDo5MTE6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5fRENCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmgtOTEyLVxcdHN0cnVjdCBtbHg1ZV9kY2J4X2RwICAgICAgIGRjYnhfZHA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaC05NTctXFx0c3RydWN0IHVkcF90dW5uZWxfbmljX2luZm8gbmljX2luZm87XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmg6OTU4OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0VOX0RDQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oLTk1OS1cXHRzdHJ1Y3QgbWx4NWVfZGNieCAgICAgICAgICBkY2J4O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2RjYm5sLmgtNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZGNibmwuaDo3OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0VOX0RDQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9kY2JubC5oLTgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vc2VscS5jPTEzMj12b2lkIG1seDVlX3NlbHFfY2FuY2VsKHN0cnVjdCBtbHg1ZV9zZWxxICpzZWxxKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3NlbHEuYy0xMzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3NlbHEuYzoxNDA6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5fRENCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3NlbHEuYy0xNDEtc3RhdGljIGludCBtbHg1ZV9nZXRfZHNjcF91cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9zZWxxLmM9MTU0PXN0YXRpYyBpbnQgbWx4NWVfZ2V0X3VwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9zZWxxLmMtMTU1LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vc2VscS5jOjE1NjojaWZkZWYgQ09ORklHX01MWDVfQ09SRV9FTl9EQ0JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vc2VscS5jLTE1Ny1cXHRpZiAoUkVBRF9PTkNFKHByaXYtXFx1MDAzZWRjYnhfZHAudHJ1c3Rfc3RhdGUpID09IE1MWDVfUVBUU19UUlVTVF9EU0NQKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmM9MjQ4ND1pbnQgbWx4NWVfcG9sbF9yeF9jcShzdHJ1Y3QgbWx4NWVfY3EgKmNxLCBpbnQgYnVkZ2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMjUxNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYzoyNTE3OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0lQT0lCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMjUxOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jPTI2NDE9Y29uc3Qgc3RydWN0IG1seDVlX3J4X2hhbmRsZXJzIG1seDVpX3J4X2hhbmRsZXJzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMjY0NC19O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jOjI2NDU6I2VuZGlmIC8qIENPTkZJR19NTFg1X0NPUkVfSVBPSUIgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYy0yNjQ2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM9MTAwNz1zdGF0aWMgaW50IG1seDVlX2hhaXJwaW5fZ2V0X3ByaW8oc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy0xMDE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjEwMTU6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5fRENCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtMTAxNi1cXHRpZiAocHJpdi1cXHUwMDNlZGNieF9kcC50cnVzdF9zdGF0ZSAhPSBNTFg1X1FQVFNfVFJVU1RfUENQKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdHguYz04NzI9dm9pZCBtbHg1ZV9mcmVlX3R4cXNxX2Rlc2NzKHN0cnVjdCBtbHg1ZV90eHFzcSAqc3EpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdHguYy05MTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3R4LmM6OTE4OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0lQT0lCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3R4LmMtOTE5LXN0YXRpYyBpbmxpbmUgdm9pZFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmgtMzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmg6MzY6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfSVBPSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvaXBvaWIuaC0zNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9pcG9pYi5oPTEzMD12b2lkIG1seDVpX3BhcmVudF9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmgtMTMxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9pcG9pYi5oOjEzMjojZW5kaWYgLyogQ09ORklHX01MWDVfQ09SRV9JUE9JQiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9pcG9pYi5oLTEzMy0jZW5kaWYgLyogX19NTFg1RV9JUE9CX0hfXyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oPTI0PXZvaWQgbWx4NV9zZF9wdXRfYWRldihzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYWN0dWFsX2FkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmgtMjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oOjI3OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0VOXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oLTI4LWJvb2wgbWx4NV9zZF9pc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmg9Mzc9dm9pZCBtbHg1X3NkX2NsZWFudXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oLTM4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaDozOTojaWZkZWYgQ09ORklHX01MWDVfQ09SRV9FTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaC00MC1zdHJ1Y3QgbWx4NV9kZXZjb21fY29tcF9kZXYgKm1seDVfc2RfZ2V0X2RldmNvbShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaD0zOTY9dm9pZCBtbHg1X2Z3X3ZlcnNpb25fcXVlcnkoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTMyICpydW5uaW5nX3ZlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaC0zOTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21seDVfY29yZS5oOjM5OTojaWZkZWYgQ09ORklHX01MWDVfQ09SRV9FTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaC00MDAtaW50IG1seDVlX2luaXQodm9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE5OjAyOjU3Ljc5NjI2MTE3NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NzQ0NDU1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgbWx4NSBJbml0aWFsaXphdGlvbiBhbmQgSGFyZHdhcmUgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSG93IGRvZXMgdGhlIG1seDUgZHJpdmVyIGdldCBpdHNlbGYgb2ZmIHRoZSBncm91bmQ/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBUaGUgYnVybmluZyBxdWVzdGlvbiBpcywgZG9lcyBpdCAqcmVxdWlyZSogcGh5c2ljYWwgaGFyZHdhcmUgdG8gaW5pdGlhbGl6ZSBhdCBzb21lIHBvaW50LCBvciBjYW4gaXQgb3BlcmF0ZSBpbiBhIHNpbXVsYXRlZCBvciB2aXJ0dWFsIGVudmlyb25tZW50LCBhdCBsZWFzdCBwYXJ0aWFsbHk/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiB0aGUgZHJpdmVy4oCZcyBpbml0aWFsaXphdGlvbiBpcyB0cnVseSBoYXJkd2FyZS1kZXBlbmRlbnQuXG5cblRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaD8gSSdsbCByZWFjaCBmb3IgYGdyZXBgLiBTcGVjaWZpY2FsbHksIEknbGwgdGFyZ2V0IHRoZSBgcGNpX3JlZ2lzdGVyX2RyaXZlcmAgZnVuY3Rpb24gd2l0aGluIHRoZSBtbHg1IGRyaXZlciBkaXJlY3RvcnkuIEknbGwgc2VhcmNoIGluc2lkZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NWAgZm9yIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24uIGBwY2lfcmVnaXN0ZXJfZHJpdmVyYCBpcyBhIHByZXR0eSBnb29kIGluZGljYXRvciBvZiBQQ0kgZGV2aWNlIGluaXRpYWxpemF0aW9uLCB3aGljaCB3b3VsZCBzdHJvbmdseSBzdWdnZXN0IGEgZGVwZW5kZW5jeSBvbiBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgc2ltdWxhdGVkIFBDSSBidXMuIFRoYXQgc2hvdWxkIHF1aWNrbHkgaWxsdW1pbmF0ZSB0aGUgbW9zdCBsaWtlbHkgcGF0aC4gRnJvbSB0aGVyZSwgSSBjYW4gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIHN0YWNrIGlmIEkgbmVlZCB0by5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQyMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE5OjAzOjAwLjQ3MDcwODg2MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDk0NjYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYz0yMzQ2PXN0YXRpYyBpbnQgX19pbml0IG1seDVfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYy0yMzY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmM6MjM2NjpcXHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZtbHg1X2NvcmVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jLTIzNjctXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTk6MDM6MDAuNTI1NjkwMjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTY3Njk0MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBtbHg1YCBEcml2ZXIgYW5kIGl0cyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgYXNraW5nIGFib3V0IGNvZGUgdGhhdCBtaWdodCBiZSBwcm9ibGVtYXRpYyBpbiBhIHNwZWNpZmljIGNvbnRleHQsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhlIGBtbHg1YCBkcml2ZXIgaXMgbGlrZWx5IHRvIGJlIGEgY29uY2Vybi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBtbHg1YCBpcyB0aGUgY29yZSBkcml2ZXIgZm9yIE1lbGxhbm94IENvbm5lY3RYLTQvNS82LzcgTklDcyBhbmQgU21hcnROSUNzLiBJIG5lZWQgdG8gc2VlIGlmIGl0IG1lZXRzIHRoZSBjcml0ZXJpYSBvZiBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIlxuXG5JbW1lZGlhdGVseSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IGBtbHg1YCAqaXMqIGEgY2xhc3NpYyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLiBJdOKAmXMgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggcGh5c2ljYWwgTWVsbGFub3ggQ29ubmVjdFggaGFyZHdhcmUuIFN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHR5cGljYWxseSAqZG9uJ3QqIGVtdWxhdGUgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZS4gSSBrbm93IHRoaXMgZnJvbSBleHBlcmllbmNlLlxuXG5UaGUgc3BlY2lmaWMgZnVuY3Rpb24gbWVudGlvbmVkLCBgbWx4NWVfc3RhdHNfdHNfZ2V0YCwgaXMgdHJpZ2dlcmVkIHRocm91Z2ggZXRodG9vbCBzdGF0cyBjYWxsYmFja3MgKGBtbHg1ZV9nZXRfdHNfc3RhdHNgKSBvbiBhIGBtbHg1ZWAgbmV0d29yayBkZXZpY2UuIFRoaXMgYG1seDVlYCBkZXZpY2UgaXMgY3JlYXRlZCBvbmx5ICphZnRlciogYSBwaHlzaWNhbCBNZWxsYW5veCBQQ0llIGRldmljZSBwcm9iZSBpcyBzdWNjZXNzZnVsLiBUaGF0IHNvbGlkaWZpZXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgYmVpbmcgcmVsaWFudCBvbiBhY3R1YWwgaGFyZHdhcmUuXG5cbk5vdywganVzdCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSwgSSBuZWVkIHRvIHJ1bGUgb3V0IHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZXJlJ3Mgc29tZSBraW5kIG9mIG1vY2sgb3IgdmlydHVhbCBkZXZpY2UgZHJpdmVyIHRoYXQgdXRpbGl6ZXMgYG1seDVgIGluIHRoZSBrZXJuZWwuIEl04oCZcyByYXJlLCBidXQgc29tZXRpbWVzIHZlbmRvcnMgaW5jbHVkZSBhIHNpbXVsYXRpb24gbGF5ZXIgZm9yIHRlc3RpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IGdyZXAgdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGFueSBtZW50aW9ucyBvZiBgbWx4NWAgd2l0aGluIGRyaXZlcnMgdGhhdCBtYXkgaGF2ZSBzb21lIHNpbXVsYXRpb24gYXNwZWN0LiBNeSBmaXJzdCBzZWFyY2ggd2lsbCBiZSB3aXRoaW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbWAsIGFuZCB0aGVuIGEgYnJvYWRlciBzZWFyY2ggaWYgdGhhdCBkb2Vzbid0IHlpZWxkIGFueXRoaW5nLiBUaGlzIGRvdWJsZS1jaGVjayBzaG91bGQgZ2l2ZSBtZSB0aGUgZmluYWwgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTE4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE5OjAzOjA1LjQ5MzM4ODE5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU2Nzc1OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWx4NVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE5OjAzOjA1LjUzOTk2NTU3N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMDQyMTY2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRob3JvdWdobmVzcyBDaGVjayAtIGBtbHg1ZV9zdGF0c190c19nZXRgIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gcmV2aXNpdGluZyB0aGlzLCBhbmQgYmVmb3JlIEkgc2lnbiBvZmYsIEkganVzdCBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSSB3YW50IHRvIGRvIGEgZmluYWwsIHN1cGVyLXRob3JvdWdoIGNoZWNrLiBUaGUgY29kZSBsb29rcyBnb29kLCB0aGUgbG9naWMgc2VlbXMgc291bmQsIGJ1dCBJJ3ZlIGxlYXJuZWQgdGhhdCBhIHF1aWNrLCBsYXN0IGxvb2sgY2FuIHVuY292ZXIgaGlkZGVuIGFzc3VtcHRpb25zIG9yIGVkZ2UgY2FzZXMuIFdoYXQgSSdtIHRoaW5raW5nIGlzIHRoaXM6IGxldCdzIHB1bGwgdXAgYWxsIHRoZSBjYWxsZXJzIG9mIGBtbHg1ZV9zdGF0c190c19nZXRgLiBJJ20gYW4gZXhwZXJ0LCBJICprbm93KiB0aGlzIGFyZWEsIGJ1dCBhIHF1aWNrIGdyZXAsIGEgZ2xhbmNlIGF0IHRoZSBjYWxsIGdyYXBoLCB3aGF0ZXZlciB0aGUgcHJlZmVycmVkIG1ldGhvZCBpcywganVzdCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGNhbGwgc2l0ZSB0aGF0J3MgdXNpbmcgdGhlIHJlc3VsdCBpbiBhIHdheSBJIGRpZG4ndCBpbml0aWFsbHkgYW50aWNpcGF0ZS4gSXTigJlzIGFib3V0IGJlaW5nIGNvbmZpZGVudCwgbGVhdmluZyBubyBzdG9uZSB1bnR1cm5lZCwgYW5kIG1ha2luZyBzdXJlIHRoaXMgcGFydCBvZiB0aGUgc3lzdGVtIGlzIHJvY2stc29saWQuIEEgcXVpY2sgY2hlY2sgd2lsbCBwdXQgbXkgbWluZCBhdCBlYXNlIGFuZCBhbGxvdyBtZSB0byBtb3ZlIGZvcndhcmQgd2l0aCBhIGhpZ2ggZGVncmVlIG9mIGNvbmZpZGVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxOTowMzowOC42NDQxODQ4NDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzA1NjgyODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWx4NWVfc3RhdHNfdHNfZ2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM9MjcwOT1zdGF0aWMgdm9pZCBtbHg1ZV9nZXRfdHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmMtMjcxMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jOjI3MTQ6XFx0bWx4NWVfc3RhdHNfdHNfZ2V0KHByaXYsIHRzX3N0YXRzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jLTI3MTUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmM9MTE2MD12b2lkIG1seDVlX3N0YXRzX3Jtb25fZ2V0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmMtMTE5OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuYzoxMTk5OnZvaWQgbWx4NWVfc3RhdHNfdHNfZ2V0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jLTEyMDAtXFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfdHNfc3RhdHMgKnRzX3N0YXRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmg9MTI5PXZvaWQgbWx4NWVfc3RhdHNfcm1vbl9nZXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuaC0xMzEtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5oOjEzMjp2b2lkIG1seDVlX3N0YXRzX3RzX2dldChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuaC0xMzMtXFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfdHNfc3RhdHMgKnRzX3N0YXRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTk6MDM6MTAuNjE0NzczODMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMDY0MjY5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGBtbHg1ZV9zdGF0c190c19nZXRgIGlzIG9ubHkgZXZlciBjYWxsZWQgYnkgYG1seDVlX2dldF90c19zdGF0c2AsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGBldGh0b29sX29wcy5nZXRfdHNfc3RhdHNgIGhhbmRsZXIgd2l0aGluIHRoZSBgZW5fZXRodG9vbC5jYCBmaWxlLiBSaWdodCwgdGhhdCBwbGFjZXMgdGhpcyBzcXVhcmVseSB3aXRoaW4gdGhlIE1lbGxhbm94IENvbm5lY3RYIE5JQyByZWFsbSwgc3BlY2lmaWNhbGx5IHRoZSBtbHg1IEV0aGVybmV0IGRyaXZlci4gQW5kIHdlIGFsbCBrbm93IHdoYXQgdGhhdCBtZWFuczogdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlLCBQQ0llIGJhc2VkLCBub3Qgc29tZXRoaW5nIHlvdSdyZSBnb2luZyB0byBzZWUgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBzZXR1cC4gTm8gZW11bGF0aW5nIHRoaXMuXG5cblRoZXJlZm9yZSwgdGhlIGxpa2VsaWhvb2Qgb2YgdGhpcyBjb2RlIHBhdGggYmVpbmcgdHJpZ2dlcmVkIGluIGEgZnV6emluZyBlbnZpcm9ubWVudCBpcyBwcmFjdGljYWxseSB6ZXJvLiBJdCdzIHNpbXBseSB1bnJlYWNoYWJsZS5cblxuU28sIGxldCdzIHNldCB0aGUgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYC4gYFdvcnRoRnV6emluZ2AgaGFzIHRvIGJlIGBmYWxzZWAsIG9idmlvdXNseS4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBleHBsaWNpdGx5IHN0YXRlIHRoZSBkZXBlbmRlbmN5IG9uIE1lbGxhbm94IENvbm5lY3RYIGhhcmR3YXJlIGFuZCBpdHMgYWJzZW5jZSBmcm9tIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIHNldHVwcy4gV2UgbmVlZCB0byBzYXkgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1seDVlX3N0YXRzX3RzX2dldCgpYCBpbiB0aGUgTWVsbGFub3ggQ29ubmVjdFggY29yZSBFdGhlcm5ldCBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2ApIGFuZCB0aGF0IGl0IHJlcXVpcmVzIHBoeXNpY2FsIHZlbmRvci1zcGVjaWZpYyBQQ0llIFNtYXJ0TklDL05JQyBoYXJkd2FyZSAoTWVsbGFub3ggQ29ubmVjdFggQVNJQykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIFRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGxpc3RzIHdpbGwgYmUgZW1wdHkgc2luY2UgdGhlcmUncyBub3RoaW5nIHRvIGZvY3VzIG9uIG9yIGVuYWJsZSBoZXJlLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0MSwiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTk6MDM6MTUuNzIxMjAzNzE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZXN0YW1wIHN0YXRpc3RpY3MgcmVwb3J0aW5nIChtbHg1ZV9zdGF0c190c19nZXQpIGluIHRoZSBNZWxsYW5veCBDb25uZWN0WCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKE1lbGxhbm94IENvbm5lY3RYIE5JQ3MvU21hcnROSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZXN0YW1wIHN0YXRpc3RpY3MgcmVwb3J0aW5nIChtbHg1ZV9zdGF0c190c19nZXQpIGluIHRoZSBNZWxsYW5veCBDb25uZWN0WCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKE1lbGxhbm94IENvbm5lY3RYIE5JQ3MvU21hcnROSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTk6MDM6MTUuNzIxMjM0NjM1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflownhp29[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 18:47:23 +0000 UTC FinishedAt: 2026-09-03 19:03:16 +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+CgkJCTx0ZD4yMDI2LzA5LzAzIDE5OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZXN0YW1wIHN0YXRpc3RpY3MgcmVwb3J0aW5nIChtbHg1ZV9zdGF0c190c19nZXQpIGluIHRoZSBNZWxsYW5veCBDb25uZWN0WCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKE1lbGxhbm94IENvbm5lY3RYIE5JQ3MvU21hcnROSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxOTowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ5OTY4ZmFmMWU3YTUxYTE0ZTdkNmJlMTc5NjUzOTJlNWFlZTcyZDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE5OjAyOjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmNcbmluZGV4IGU3ZTZkYjdmNmJmMTcuLmNkOTRiYjQ0ZjZhYjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmNcbkBAIC0xMTk5LDUwICYjNDM7MTE5OSwzOSBAQCB2b2lkIG1seDVlX3N0YXRzX3Jtb25fZ2V0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuIHZvaWQgbWx4NWVfc3RhdHNfdHNfZ2V0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuIFx0XHRcdHN0cnVjdCBldGh0b29sX3RzX3N0YXRzICp0c19zdGF0cylcbiB7XG4tXHRpbnQgaSwgajtcbiYjNDM7XHR1MTYgbmNoID0gbWx4NWVfc3RhdHNfbmNoX3JlYWQocHJpdik7XG4mIzQzO1x0aW50IGksIHRjO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdHRzX3N0YXRzLVx1MDAzZXBrdHMgPSAwO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNldHhfcHRwX29wZW5lZCkge1xuLVx0XHRzdHJ1Y3QgbWx4NWVfcHRwICpwdHAgPSBwcml2LVx1MDAzZWNoYW5uZWxzLnB0cDtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuY2g7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbWx4NWVfY2hhbm5lbF9zdGF0cyAqY2hhbm5lbF9zdGF0cyA9XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlY2hhbm5lbF9zdGF0c1tpXTtcbiBcbi1cdFx0dHNfc3RhdHMtXHUwMDNlcGt0cyA9IDA7XG4mIzQzO1x0XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHByaXYtXHUwMDNlbWF4X29wZW5lZF90YzsgdGMmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR0c19zdGF0cy1cdTAwM2Vwa3RzICYjNDM7PSBjaGFubmVsX3N0YXRzLVx1MDAzZXNxW3RjXS50aW1lc3RhbXBzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQWNjdW11bGF0ZSBETUEgYW5kIHBvcnQgdGltZXN0YW1wIGNvdW50ZXJzIHNvIHZhbHVlcyBzdGF5IG1vbm90b25pY1xuJiM0MztcdCAqIGFjcm9zcyBjaGFubmVsIHRlYXJkb3duIGFuZCBtb2RlIHN3aXRjaGVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXR4X3B0cF9vcGVuZWQpIHtcbiYjNDM7XHRcdC8qIEVyciBhbmQgTG9zdCBzdGF0cyBhcmUgb25seSByZWxldmFudCBmb3IgcG9ydCB0aW1lc3RhbXBpbmcsXG4mIzQzO1x0XHQgKiBhcyB0aGUgRE1BIGxheWVyIHdpbGwgYWx3YXlzIHN1Y2Nlc3NmdWxseSB0aW1lc3RhbXAgcGFja2V0cy5cbiYjNDM7XHRcdCAqL1xuIFx0XHR0c19zdGF0cy1cdTAwM2VlcnIgPSAwO1xuIFx0XHR0c19zdGF0cy1cdTAwM2Vsb3N0ID0gMDtcbiBcbi1cdFx0aWYgKCFwdHApXG4tXHRcdFx0Z290byBvdXQ7XG4tXG4tXHRcdC8qIEFnZ3JlZ2F0ZSBzdGF0cyBhY3Jvc3MgYWxsIFRDcyAqL1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwdHAtXHUwMDNlbnVtX3RjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBwcml2LVx1MDAzZW1heF9vcGVuZWRfdGM7IHRjJiM0MzsmIzQzOykge1xuIFx0XHRcdHN0cnVjdCBtbHg1ZV9wdHBfY3Ffc3RhdHMgKnN0YXRzID1cbi1cdFx0XHRcdHB0cC1cdTAwM2VwdHBzcVtpXS5jcV9zdGF0cztcbiYjNDM7XHRcdFx0XHRcdTAwMjZwcml2LVx1MDAzZXB0cF9zdGF0cy5jcVt0Y107XG4gXG4gXHRcdFx0dHNfc3RhdHMtXHUwMDNlcGt0cyAmIzQzOz0gc3RhdHMtXHUwMDNlY3FlO1xuIFx0XHRcdHRzX3N0YXRzLVx1MDAzZWVyciAmIzQzOz0gc3RhdHMtXHUwMDNlYWJvcnQgJiM0Mzsgc3RhdHMtXHUwMDNlZXJyX2NxZSAmIzQzO1xuLVx0XHRcdFx0c3RhdHMtXHUwMDNlbGF0ZV9jcWU7XG4mIzQzO1x0XHRcdFx0XHRzdGF0cy1cdTAwM2VsYXRlX2NxZTtcbiBcdFx0XHR0c19zdGF0cy1cdTAwM2Vsb3N0ICYjNDM7PSBzdGF0cy1cdTAwM2Vsb3N0X2NxZTtcbiBcdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0LyogRE1BIGxheWVyIHdpbGwgYWx3YXlzIHN1Y2Nlc3NmdWxseSB0aW1lc3RhbXAgcGFja2V0cy4gT3RoZXJcbi1cdFx0ICogY291bnRlcnMgZG8gbm90IG1ha2Ugc2Vuc2UgZm9yIHRoaXMgbGF5ZXIuXG4tXHRcdCAqL1xuLVx0XHR0c19zdGF0cy1cdTAwM2Vwa3RzID0gMDtcbi1cbi1cdFx0LyogQWdncmVnYXRlIHN0YXRzIGFjcm9zcyBhbGwgU1FzICovXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHByaXYtXHUwMDNlY2hhbm5lbHMubnVtOyBqJiM0MzsmIzQzOykge1xuLVx0XHRcdHN0cnVjdCBtbHg1ZV9jaGFubmVsICpjID0gcHJpdi1cdTAwM2VjaGFubmVscy5jW2pdO1xuLVxuLVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGMtXHUwMDNlbnVtX3RjOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdFx0c3RydWN0IG1seDVlX3NxX3N0YXRzICpzdGF0cyA9IGMtXHUwMDNlc3FbaV0uc3RhdHM7XG4tXG4tXHRcdFx0XHR0c19zdGF0cy1cdTAwM2Vwa3RzICYjNDM7PSBzdGF0cy1cdTAwM2V0aW1lc3RhbXBzO1xuLVx0XHRcdH1cbi1cdFx0fVxuIFx0fVxuLVxuLW91dDpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuIH1cbiBcbiAjZGVmaW5lIFBQT1JUX1BIWV9MQVlFUl9PRkYoYykgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxOTowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aW1lc3RhbXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKG1seDVlX3N0YXRzX3RzX2dldCkgaW4gdGhlIE1lbGxhbm94IENvbm5lY3RYIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoTWVsbGFub3ggQ29ubmVjdFggTklDcy9TbWFydE5JQ3MpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDk5NjhmYWYxZTdhNTFhMTRlN2Q2YmUxNzk2NTM5MmU1YWVlNzJkMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTk6MDI6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jCmluZGV4IGU3ZTZkYjdmNmJmMTcuLmNkOTRiYjQ0ZjZhYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jCkBAIC0xMTk5LDUwICYjNDM7MTE5OSwzOSBAQCB2b2lkIG1seDVlX3N0YXRzX3Jtb25fZ2V0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LAogdm9pZCBtbHg1ZV9zdGF0c190c19nZXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsCiAJCQlzdHJ1Y3QgZXRodG9vbF90c19zdGF0cyAqdHNfc3RhdHMpCiB7Ci0JaW50IGksIGo7CiYjNDM7CXUxNiBuY2ggPSBtbHg1ZV9zdGF0c19uY2hfcmVhZChwcml2KTsKJiM0MzsJaW50IGksIHRjOwogCi0JbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwl0c19zdGF0cy0mZ3Q7cGt0cyA9IDA7CiAKLQlpZiAocHJpdi0mZ3Q7dHhfcHRwX29wZW5lZCkgewotCQlzdHJ1Y3QgbWx4NWVfcHRwICpwdHAgPSBwcml2LSZndDtjaGFubmVscy5wdHA7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuY2g7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgbWx4NWVfY2hhbm5lbF9zdGF0cyAqY2hhbm5lbF9zdGF0cyA9CiYjNDM7CQkJcHJpdi0mZ3Q7Y2hhbm5lbF9zdGF0c1tpXTsKIAotCQl0c19zdGF0cy0mZ3Q7cGt0cyA9IDA7CiYjNDM7CQlmb3IgKHRjID0gMDsgdGMgJmx0OyBwcml2LSZndDttYXhfb3BlbmVkX3RjOyB0YyYjNDM7JiM0MzspCiYjNDM7CQkJdHNfc3RhdHMtJmd0O3BrdHMgJiM0Mzs9IGNoYW5uZWxfc3RhdHMtJmd0O3NxW3RjXS50aW1lc3RhbXBzOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFjY3VtdWxhdGUgRE1BIGFuZCBwb3J0IHRpbWVzdGFtcCBjb3VudGVycyBzbyB2YWx1ZXMgc3RheSBtb25vdG9uaWMKJiM0MzsJICogYWNyb3NzIGNoYW5uZWwgdGVhcmRvd24gYW5kIG1vZGUgc3dpdGNoZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7dHhfcHRwX29wZW5lZCkgewomIzQzOwkJLyogRXJyIGFuZCBMb3N0IHN0YXRzIGFyZSBvbmx5IHJlbGV2YW50IGZvciBwb3J0IHRpbWVzdGFtcGluZywKJiM0MzsJCSAqIGFzIHRoZSBETUEgbGF5ZXIgd2lsbCBhbHdheXMgc3VjY2Vzc2Z1bGx5IHRpbWVzdGFtcCBwYWNrZXRzLgomIzQzOwkJICovCiAJCXRzX3N0YXRzLSZndDtlcnIgPSAwOwogCQl0c19zdGF0cy0mZ3Q7bG9zdCA9IDA7CiAKLQkJaWYgKCFwdHApCi0JCQlnb3RvIG91dDsKLQotCQkvKiBBZ2dyZWdhdGUgc3RhdHMgYWNyb3NzIGFsbCBUQ3MgKi8KLQkJZm9yIChpID0gMDsgaSAmbHQ7IHB0cC0mZ3Q7bnVtX3RjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yICh0YyA9IDA7IHRjICZsdDsgcHJpdi0mZ3Q7bWF4X29wZW5lZF90YzsgdGMmIzQzOyYjNDM7KSB7CiAJCQlzdHJ1Y3QgbWx4NWVfcHRwX2NxX3N0YXRzICpzdGF0cyA9Ci0JCQkJcHRwLSZndDtwdHBzcVtpXS5jcV9zdGF0czsKJiM0MzsJCQkJJmFtcDtwcml2LSZndDtwdHBfc3RhdHMuY3FbdGNdOwogCiAJCQl0c19zdGF0cy0mZ3Q7cGt0cyAmIzQzOz0gc3RhdHMtJmd0O2NxZTsKIAkJCXRzX3N0YXRzLSZndDtlcnIgJiM0Mzs9IHN0YXRzLSZndDthYm9ydCAmIzQzOyBzdGF0cy0mZ3Q7ZXJyX2NxZSAmIzQzOwotCQkJCXN0YXRzLSZndDtsYXRlX2NxZTsKJiM0MzsJCQkJCXN0YXRzLSZndDtsYXRlX2NxZTsKIAkJCXRzX3N0YXRzLSZndDtsb3N0ICYjNDM7PSBzdGF0cy0mZ3Q7bG9zdF9jcWU7CiAJCX0KLQl9IGVsc2UgewotCQkvKiBETUEgbGF5ZXIgd2lsbCBhbHdheXMgc3VjY2Vzc2Z1bGx5IHRpbWVzdGFtcCBwYWNrZXRzLiBPdGhlcgotCQkgKiBjb3VudGVycyBkbyBub3QgbWFrZSBzZW5zZSBmb3IgdGhpcyBsYXllci4KLQkJICovCi0JCXRzX3N0YXRzLSZndDtwa3RzID0gMDsKLQotCQkvKiBBZ2dyZWdhdGUgc3RhdHMgYWNyb3NzIGFsbCBTUXMgKi8KLQkJZm9yIChqID0gMDsgaiAmbHQ7IHByaXYtJmd0O2NoYW5uZWxzLm51bTsgaiYjNDM7JiM0MzspIHsKLQkJCXN0cnVjdCBtbHg1ZV9jaGFubmVsICpjID0gcHJpdi0mZ3Q7Y2hhbm5lbHMuY1tqXTsKLQotCQkJZm9yIChpID0gMDsgaSAmbHQ7IGMtJmd0O251bV90YzsgaSYjNDM7JiM0MzspIHsKLQkJCQlzdHJ1Y3QgbWx4NWVfc3Ffc3RhdHMgKnN0YXRzID0gYy0mZ3Q7c3FbaV0uc3RhdHM7Ci0KLQkJCQl0c19zdGF0cy0mZ3Q7cGt0cyAmIzQzOz0gc3RhdHMtJmd0O3RpbWVzdGFtcHM7Ci0JCQl9Ci0JCX0KIAl9Ci0KLW91dDoKLQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKIH0KIAogI2RlZmluZSBQUE9SVF9QSFlfTEFZRVJfT0ZGKGMpIFwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbWx4NWVfc3RhdHNfdHNfZ2V0YCBQYXRjaCBhbmQgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbWx4NWVfc3RhdHNfdHNfZ2V0YCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbXkgbWluZCBpczogd2hhdCYjMzk7cyB0aGUgaGFyZHdhcmUgcmVhY2hhYmlsaXR5IHNpdHVhdGlvbiB3aXRoIGBtbHg1YD8gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgTWVsbGFub3ggaGVyZSwgdGhlaXIgQ29ubmVjdFgtNCwgQ29ubmVjdFgtNSwgYW5kIENvbm5lY3RYLTYgRXRoZXJuZXQgZHJpdmVycywgZXNzZW50aWFsbHksIHRoZSBgTUxYNV9DT1JFYCBhbmQgYE1MWDVfQ09SRV9FTmAgZHJpdmVycy4gSXMgdGhpcyBkcml2ZXIgb3BlcmF0aW5nIG9uIGhhcmR3YXJlIHRoYXQmIzM5O3MgKnN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSogYWNjb3JkaW5nIHRvIG15IGd1aWRlbGluZXM/CgpMZXQmIzM5O3MgcXVpY2tseSByZWZyZXNoIHRob3NlIGd1aWRlbGluZXMsIHNwZWNpZmljYWxseSBTZWN0aW9uIDIsIHRoZSAmIzM0O1dIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpJiMzNDsgc2VjdGlvbi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBUaGUgdGV4dCBtZW50aW9ucyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAsIHdoaWNoICpyZXF1aXJlKiBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBhcmUgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhhdCYjMzk7cyB0aGUga2V5LgoKTm93LCBkb2VzIE1lbGxhbm94JiMzOTtzIGBtbHg1YCBmaXQgdGhhdCBkZXNjcmlwdGlvbj8gWWVzLCBpdCYjMzk7cyBhIHBoeXNpY2FsIFBDSWUgU21hcnROSUMvTklDIGRyaXZlci4gTWVsbGFub3ggQ29ubmVjdFgtNCBhbmQgbmV3ZXIgYXJlIGNsYXNzaWMgZXhhbXBsZXMuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBEb2VzIHN0YW5kYXJkIFFFTVUgZW11bGF0ZSB0aGlzIGhhcmR3YXJlPyBUaGUgYW5zd2VyIGlzIGdlbmVyYWxseSBubywgbm90IGluIGEgd2F5IHRoYXQgcHJvdmlkZXMgZnVsbCBmdW5jdGlvbmFsIGVxdWl2YWxlbmNlLiBJJiMzOTttIGhpZ2hseSBmYW1pbGlhciB3aXRoIHRoZSBsaW1pdGF0aW9ucyBvZiBRRU1VIHdoZW4gaXQgY29tZXMgdG8gc29waGlzdGljYXRlZCBOSUNzIGxpa2UgdGhlc2UuCgpUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgbmVlZCB0byBjb25maXJtIHRoaXMgZGVmaW5pdGl2ZWx5LiBMZXQmIzM5O3MgcnVuIGEgcXVpY2sgYGdyZXBwZXJgIHNjYW4gb3IgaW5zcGVjdCB0aGUgcmVsZXZhbnQgY29kZSBiYXNlLCBqdXN0IHRvIGJlIDEwMCUgcG9zaXRpdmUuIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHNpZ25zIG9mIHZpcnR1YWwgZHJpdmVycyBvciBtb2NrIGRldmljZXMgdGhhdCB3b3VsZCBtYWtlIHRoaXMgZHJpdmVyIGFjY2Vzc2libGUgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBJZiBpdCYjMzk7cyBwdXJlbHkgcGh5c2ljYWwgaGFyZHdhcmUsIHRoZW4sIHVuZm9ydHVuYXRlbHksIHRoaXMgY29kZSBwYXRoIGlzIGxpa2VseSBub3Qgc3VpdGFibGUgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01MWDVfQ09SRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9NYWtlZmlsZT02PW9iai0kKENPTkZJR19NTFg0X0NPUkUpICYjNDM7PSBtbHg0L1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfTUxYNV9DT1JFKSAmIzQzOz0gbWx4NS9jb3JlL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfTUxYU1dfQ09SRSkgJiM0Mzs9IG1seHN3L1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZT03PXN1YmRpci1jY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19NTFg1X0NPUkUpICYjNDM7PSBtbHg1X2NvcmUub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTEwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZT0xND1tbHg1X2NvcmUteSA6PVx0bWFpbi5vIGNtZC5vIGRlYnVnZnMubyBmdy5vIGVxLm8gdWFyLm8gcGFnZWFsbG9jLm8gXFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtMjUtI1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjI2Om1seDVfY29yZS0kKENPTkZJR19NTFg1X0NPUkVfRU4pICYjNDM7PSBlbi9ycXQubyBlbi90aXIubyBlbi9yc3MubyBlbi9yeF9yZXMubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTI3LVx0XHRlbi9jaGFubmVscy5vIGVuX21haW4ubyBlbl9jb21tb24ubyBlbl9mcy5vIGVuX2V0aHRvb2wubyBcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZT0zOT1tbHg1X2NvcmUtJChDT05GSUdfTUxYNV9FTl9SWE5GQykgICAgJiM0Mzs9IGVuX2ZzX2V0aHRvb2wub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjQwOm1seDVfY29yZS0kKENPTkZJR19NTFg1X0NPUkVfRU5fRENCKSAmIzQzOz0gZW5fZGNibmwubyBlbi9wb3J0X2J1ZmZlci5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNDEtbWx4NV9jb3JlLSQoQ09ORklHX1BDSV9IWVBFUlZfSU5URVJGQUNFKSAmIzQzOz0gZW4vaHZfdmhjYV9zdGF0cy5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlPTkzPW1seDVfY29yZS0kKENPTkZJR19QQ0lfSFlQRVJWX0lOVEVSRkFDRSkgJiM0Mzs9IGxpYi9odi5vIGxpYi9odl92aGNhLm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtOTctI1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjk4Om1seDVfY29yZS0kKENPTkZJR19NTFg1X0NPUkVfSVBPSUIpICYjNDM7PSBpcG9pYi9pcG9pYi5vIGlwb2liL2V0aHRvb2wubyBpcG9pYi9pcG9pYl92bGFuLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS05OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2LmM9NTc9Ym9vbCBtbHg1X2V0aF9zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXYuYy01OC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2LmM6NTk6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX01MWDVfQ09SRV9FTikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2LmMtNjAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaD05MDU9c3RydWN0IG1seDVlX3ByaXYge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oLTkxMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oOjkxMTojaWZkZWYgQ09ORklHX01MWDVfQ09SRV9FTl9EQ0JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oLTkxMi1cdHN0cnVjdCBtbHg1ZV9kY2J4X2RwICAgICAgIGRjYnhfZHA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmgtOTU3LVx0c3RydWN0IHVkcF90dW5uZWxfbmljX2luZm8gbmljX2luZm87XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaDo5NTg6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5fRENCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaC05NTktXHRzdHJ1Y3QgbWx4NWVfZGNieCAgICAgICAgICBkY2J4O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9kY2JubC5oLTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZGNibmwuaDo3OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0VOX0RDQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2RjYm5sLmgtOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vc2VscS5jPTEzMj12b2lkIG1seDVlX3NlbHFfY2FuY2VsKHN0cnVjdCBtbHg1ZV9zZWxxICpzZWxxKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9zZWxxLmMtMTM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3NlbHEuYzoxNDA6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5fRENCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vc2VscS5jLTE0MS1zdGF0aWMgaW50IG1seDVlX2dldF9kc2NwX3VwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9zZWxxLmM9MTU0PXN0YXRpYyBpbnQgbWx4NWVfZ2V0X3VwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3NlbHEuYy0xNTUte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3NlbHEuYzoxNTY6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5fRENCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vc2VscS5jLTE1Ny1cdGlmIChSRUFEX09OQ0UocHJpdi1cdTAwM2VkY2J4X2RwLnRydXN0X3N0YXRlKSA9PSBNTFg1X1FQVFNfVFJVU1RfRFNDUClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYz0yNDg0PWludCBtbHg1ZV9wb2xsX3J4X2NxKHN0cnVjdCBtbHg1ZV9jcSAqY3EsIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMjUxNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jOjI1MTc6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfSVBPSUJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jLTI1MTgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmM9MjY0MT1jb25zdCBzdHJ1Y3QgbWx4NWVfcnhfaGFuZGxlcnMgbWx4NWlfcnhfaGFuZGxlcnMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMjY0NC19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmM6MjY0NTojZW5kaWYgLyogQ09ORklHX01MWDVfQ09SRV9JUE9JQiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMjY0Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYz0xMDA3PXN0YXRpYyBpbnQgbWx4NWVfaGFpcnBpbl9nZXRfcHJpbyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy0xMDE0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM6MTAxNTojaWZkZWYgQ09ORklHX01MWDVfQ09SRV9FTl9EQ0JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTEwMTYtXHRpZiAocHJpdi1cdTAwM2VkY2J4X2RwLnRydXN0X3N0YXRlICE9IE1MWDVfUVBUU19UUlVTVF9QQ1ApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdHguYz04NzI9dm9pZCBtbHg1ZV9mcmVlX3R4cXNxX2Rlc2NzKHN0cnVjdCBtbHg1ZV90eHFzcSAqc3EpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3R4LmMtOTE3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3R4LmM6OTE4OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0lQT0lCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdHguYy05MTktc3RhdGljIGlubGluZSB2b2lkXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmgtMzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvaXBvaWIuaDozNjojaWZkZWYgQ09ORklHX01MWDVfQ09SRV9JUE9JQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmgtMzctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmg9MTMwPXZvaWQgbWx4NWlfcGFyZW50X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9pcG9pYi5oLTEzMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9pcG9pYi5oOjEzMjojZW5kaWYgLyogQ09ORklHX01MWDVfQ09SRV9JUE9JQiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmgtMTMzLSNlbmRpZiAvKiBfX01MWDVFX0lQT0JfSF9fICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oPTI0PXZvaWQgbWx4NV9zZF9wdXRfYWRldihzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYWN0dWFsX2FkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oLTI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oOjI3OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0VOXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmgtMjgtYm9vbCBtbHg1X3NkX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmg9Mzc9dm9pZCBtbHg1X3NkX2NsZWFudXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmgtMzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmg6Mzk6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaC00MC1zdHJ1Y3QgbWx4NV9kZXZjb21fY29tcF9kZXYgKm1seDVfc2RfZ2V0X2RldmNvbShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWx4NV9jb3JlLmg9Mzk2PXZvaWQgbWx4NV9md192ZXJzaW9uX3F1ZXJ5KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUzMiAqcnVubmluZ192ZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21seDVfY29yZS5oLTM5OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaDozOTk6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaC00MDAtaW50IG1seDVlX2luaXQodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQyMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgbWx4NSBJbml0aWFsaXphdGlvbiBhbmQgSGFyZHdhcmUgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0hvdyBkb2VzIHRoZSBtbHg1IGRyaXZlciBnZXQgaXRzZWxmIG9mZiB0aGUgZ3JvdW5kPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gVGhlIGJ1cm5pbmcgcXVlc3Rpb24gaXMsIGRvZXMgaXQgKnJlcXVpcmUqIHBoeXNpY2FsIGhhcmR3YXJlIHRvIGluaXRpYWxpemUgYXQgc29tZSBwb2ludCwgb3IgY2FuIGl0IG9wZXJhdGUgaW4gYSBzaW11bGF0ZWQgb3IgdmlydHVhbCBlbnZpcm9ubWVudCwgYXQgbGVhc3QgcGFydGlhbGx5PyBUaGlzIGlzIGNydWNpYWwgZm9yIHRlc3RpbmcgYW5kIGRldmVsb3BtZW50LiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgdGhlIGRyaXZlcuKAmXMgaW5pdGlhbGl6YXRpb24gaXMgdHJ1bHkgaGFyZHdhcmUtZGVwZW5kZW50LgoKVGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoPyBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBgLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHRhcmdldCB0aGUgYHBjaV9yZWdpc3Rlcl9kcml2ZXJgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgbWx4NSBkcml2ZXIgZGlyZWN0b3J5LiBJJiMzOTtsbCBzZWFyY2ggaW5zaWRlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1YCBmb3IgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gYHBjaV9yZWdpc3Rlcl9kcml2ZXJgIGlzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIG9mIFBDSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIHdoaWNoIHdvdWxkIHN0cm9uZ2x5IHN1Z2dlc3QgYSBkZXBlbmRlbmN5IG9uIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgYSBzaW11bGF0ZWQgUENJIGJ1cy4gVGhhdCBzaG91bGQgcXVpY2tseSBpbGx1bWluYXRlIHRoZSBtb3N0IGxpa2VseSBwYXRoLiBGcm9tIHRoZXJlLCBJIGNhbiBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgc3RhY2sgaWYgSSBuZWVkIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmM9MjM0Nj1zdGF0aWMgaW50IF9faW5pdCBtbHg1X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jLTIzNjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jOjIzNjY6XHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNm1seDVfY29yZV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYy0yMzY3LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTE4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBtbHg1YCBEcml2ZXIgYW5kIGl0cyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIGFza2luZyBhYm91dCBjb2RlIHRoYXQgbWlnaHQgYmUgcHJvYmxlbWF0aWMgaW4gYSBzcGVjaWZpYyBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoZSBgbWx4NWAgZHJpdmVyIGlzIGxpa2VseSB0byBiZSBhIGNvbmNlcm4uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgbWx4NWAgaXMgdGhlIGNvcmUgZHJpdmVyIGZvciBNZWxsYW5veCBDb25uZWN0WC00LzUvNi83IE5JQ3MgYW5kIFNtYXJ0TklDcy4gSSBuZWVkIHRvIHNlZSBpZiBpdCBtZWV0cyB0aGUgY3JpdGVyaWEgb2YgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsKCkltbWVkaWF0ZWx5LCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgYG1seDVgICppcyogYSBjbGFzc2ljIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIuIEl04oCZcyBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCBwaHlzaWNhbCBNZWxsYW5veCBDb25uZWN0WCBoYXJkd2FyZS4gU3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgdHlwaWNhbGx5ICpkb24mIzM5O3QqIGVtdWxhdGUgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZS4gSSBrbm93IHRoaXMgZnJvbSBleHBlcmllbmNlLgoKVGhlIHNwZWNpZmljIGZ1bmN0aW9uIG1lbnRpb25lZCwgYG1seDVlX3N0YXRzX3RzX2dldGAsIGlzIHRyaWdnZXJlZCB0aHJvdWdoIGV0aHRvb2wgc3RhdHMgY2FsbGJhY2tzIChgbWx4NWVfZ2V0X3RzX3N0YXRzYCkgb24gYSBgbWx4NWVgIG5ldHdvcmsgZGV2aWNlLiBUaGlzIGBtbHg1ZWAgZGV2aWNlIGlzIGNyZWF0ZWQgb25seSAqYWZ0ZXIqIGEgcGh5c2ljYWwgTWVsbGFub3ggUENJZSBkZXZpY2UgcHJvYmUgaXMgc3VjY2Vzc2Z1bC4gVGhhdCBzb2xpZGlmaWVzIG15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIGJlaW5nIHJlbGlhbnQgb24gYWN0dWFsIGhhcmR3YXJlLgoKTm93LCBqdXN0IHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLCBJIG5lZWQgdG8gcnVsZSBvdXQgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlcmUmIzM5O3Mgc29tZSBraW5kIG9mIG1vY2sgb3IgdmlydHVhbCBkZXZpY2UgZHJpdmVyIHRoYXQgdXRpbGl6ZXMgYG1seDVgIGluIHRoZSBrZXJuZWwuIEl04oCZcyByYXJlLCBidXQgc29tZXRpbWVzIHZlbmRvcnMgaW5jbHVkZSBhIHNpbXVsYXRpb24gbGF5ZXIgZm9yIHRlc3RpbmcuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIHRoZSBrZXJuZWwgc291cmNlIGZvciBhbnkgbWVudGlvbnMgb2YgYG1seDVgIHdpdGhpbiBkcml2ZXJzIHRoYXQgbWF5IGhhdmUgc29tZSBzaW11bGF0aW9uIGFzcGVjdC4gTXkgZmlyc3Qgc2VhcmNoIHdpbGwgYmUgd2l0aGluIGBkcml2ZXJzL25ldC9uZXRkZXZzaW1gLCBhbmQgdGhlbiBhIGJyb2FkZXIgc2VhcmNoIGlmIHRoYXQgZG9lc24mIzM5O3QgeWllbGQgYW55dGhpbmcuIFRoaXMgZG91YmxlLWNoZWNrIHNob3VsZCBnaXZlIG1lIHRoZSBmaW5hbCBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbHg1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjI1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqVGhvcm91Z2huZXNzIENoZWNrIC0gYG1seDVlX3N0YXRzX3RzX2dldGAgQ2FsbGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIHJldmlzaXRpbmcgdGhpcywgYW5kIGJlZm9yZSBJIHNpZ24gb2ZmLCBJIGp1c3QgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEkgd2FudCB0byBkbyBhIGZpbmFsLCBzdXBlci10aG9yb3VnaCBjaGVjay4gVGhlIGNvZGUgbG9va3MgZ29vZCwgdGhlIGxvZ2ljIHNlZW1zIHNvdW5kLCBidXQgSSYjMzk7dmUgbGVhcm5lZCB0aGF0IGEgcXVpY2ssIGxhc3QgbG9vayBjYW4gdW5jb3ZlciBoaWRkZW4gYXNzdW1wdGlvbnMgb3IgZWRnZSBjYXNlcy4gV2hhdCBJJiMzOTttIHRoaW5raW5nIGlzIHRoaXM6IGxldCYjMzk7cyBwdWxsIHVwIGFsbCB0aGUgY2FsbGVycyBvZiBgbWx4NWVfc3RhdHNfdHNfZ2V0YC4gSSYjMzk7bSBhbiBleHBlcnQsIEkgKmtub3cqIHRoaXMgYXJlYSwgYnV0IGEgcXVpY2sgZ3JlcCwgYSBnbGFuY2UgYXQgdGhlIGNhbGwgZ3JhcGgsIHdoYXRldmVyIHRoZSBwcmVmZXJyZWQgbWV0aG9kIGlzLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNhbGwgc2l0ZSB0aGF0JiMzOTtzIHVzaW5nIHRoZSByZXN1bHQgaW4gYSB3YXkgSSBkaWRuJiMzOTt0IGluaXRpYWxseSBhbnRpY2lwYXRlLiBJdOKAmXMgYWJvdXQgYmVpbmcgY29uZmlkZW50LCBsZWF2aW5nIG5vIHN0b25lIHVudHVybmVkLCBhbmQgbWFraW5nIHN1cmUgdGhpcyBwYXJ0IG9mIHRoZSBzeXN0ZW0gaXMgcm9jay1zb2xpZC4gQSBxdWljayBjaGVjayB3aWxsIHB1dCBteSBtaW5kIGF0IGVhc2UgYW5kIGFsbG93IG1lIHRvIG1vdmUgZm9yd2FyZCB3aXRoIGEgaGlnaCBkZWdyZWUgb2YgY29uZmlkZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWx4NWVfc3RhdHNfdHNfZ2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM9MjcwOT1zdGF0aWMgdm9pZCBtbHg1ZV9nZXRfdHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jLTI3MTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jOjI3MTQ6XHRtbHg1ZV9zdGF0c190c19nZXQocHJpdiwgdHNfc3RhdHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYy0yNzE1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuYz0xMTYwPXZvaWQgbWx4NWVfc3RhdHNfcm1vbl9nZXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmMtMTE5OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jOjExOTk6dm9pZCBtbHg1ZV9zdGF0c190c19nZXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuYy0xMjAwLVx0XHRcdHN0cnVjdCBldGh0b29sX3RzX3N0YXRzICp0c19zdGF0cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuaD0xMjk9dm9pZCBtbHg1ZV9zdGF0c19ybW9uX2dldChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuaC0xMzEtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmg6MTMyOnZvaWQgbWx4NWVfc3RhdHNfdHNfZ2V0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmgtMTMzLVx0XHRcdHN0cnVjdCBldGh0b29sX3RzX3N0YXRzICp0c19zdGF0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NDEKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYG1seDVlX3N0YXRzX3RzX2dldGAgaXMgb25seSBldmVyIGNhbGxlZCBieSBgbWx4NWVfZ2V0X3RzX3N0YXRzYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgYGV0aHRvb2xfb3BzLmdldF90c19zdGF0c2AgaGFuZGxlciB3aXRoaW4gdGhlIGBlbl9ldGh0b29sLmNgIGZpbGUuIFJpZ2h0LCB0aGF0IHBsYWNlcyB0aGlzIHNxdWFyZWx5IHdpdGhpbiB0aGUgTWVsbGFub3ggQ29ubmVjdFggTklDIHJlYWxtLCBzcGVjaWZpY2FsbHkgdGhlIG1seDUgRXRoZXJuZXQgZHJpdmVyLiBBbmQgd2UgYWxsIGtub3cgd2hhdCB0aGF0IG1lYW5zOiB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUsIFBDSWUgYmFzZWQsIG5vdCBzb21ldGhpbmcgeW91JiMzOTtyZSBnb2luZyB0byBzZWUgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBzZXR1cC4gTm8gZW11bGF0aW5nIHRoaXMuCgpUaGVyZWZvcmUsIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgY29kZSBwYXRoIGJlaW5nIHRyaWdnZXJlZCBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgcHJhY3RpY2FsbHkgemVyby4gSXQmIzM5O3Mgc2ltcGx5IHVucmVhY2hhYmxlLgoKU28sIGxldCYjMzk7cyBzZXQgdGhlIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AuIGBXb3J0aEZ1enppbmdgIGhhcyB0byBiZSBgZmFsc2VgLCBvYnZpb3VzbHkuIFRoZSBgUmVhc29uaW5nYCBzaG91bGQgZXhwbGljaXRseSBzdGF0ZSB0aGUgZGVwZW5kZW5jeSBvbiBNZWxsYW5veCBDb25uZWN0WCBoYXJkd2FyZSBhbmQgaXRzIGFic2VuY2UgZnJvbSBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBzZXR1cHMuIFdlIG5lZWQgdG8gc2F5IHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBtbHg1ZV9zdGF0c190c19nZXQoKWAgaW4gdGhlIE1lbGxhbm94IENvbm5lY3RYIGNvcmUgRXRoZXJuZXQgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9gKSBhbmQgdGhhdCBpdCByZXF1aXJlcyBwaHlzaWNhbCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBTbWFydE5JQy9OSUMgaGFyZHdhcmUgKE1lbGxhbm94IENvbm5lY3RYIEFTSUMpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBUaGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBsaXN0cyB3aWxsIGJlIGVtcHR5IHNpbmNlIHRoZXJlJiMzOTtzIG5vdGhpbmcgdG8gZm9jdXMgb24gb3IgZW5hYmxlIGhlcmUuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aW1lc3RhbXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKG1seDVlX3N0YXRzX3RzX2dldCkgaW4gdGhlIE1lbGxhbm94IENvbm5lY3RYIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoTWVsbGFub3ggQ29ubmVjdFggTklDcy9TbWFydE5JQ3MpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aW1lc3RhbXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKG1seDVlX3N0YXRzX3RzX2dldCkgaW4gdGhlIE1lbGxhbm94IENvbm5lY3RYIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoTWVsbGFub3ggQ29ubmVjdFggTklDcy9TbWFydE5JQ3MpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxOTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTk6MDI6NDQuMDEwNDI2NjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTcxMDgxOTk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRpbWVzdGFtcCBzdGF0aXN0aWNzIHJlcG9ydGluZyAobWx4NWVfc3RhdHNfdHNfZ2V0KSBpbiB0aGUgTWVsbGFub3ggQ29ubmVjdFggRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChNZWxsYW5veCBDb25uZWN0WCBOSUNzL1NtYXJ0TklDcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE5OjAyOjQ0LjAxMDQzNDg1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk0Mjc1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkOTk2OGZhZjFlN2E1MWExNGU3ZDZiZTE3OTY1MzkyZTVhZWU3MmQxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTk6MDI6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuY1xcbmluZGV4IGU3ZTZkYjdmNmJmMTcuLmNkOTRiYjQ0ZjZhYjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuY1xcbkBAIC0xMTk5LDUwICsxMTk5LDM5IEBAIHZvaWQgbWx4NWVfc3RhdHNfcm1vbl9nZXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXFxuIHZvaWQgbWx4NWVfc3RhdHNfdHNfZ2V0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRzdHJ1Y3QgZXRodG9vbF90c19zdGF0cyAqdHNfc3RhdHMpXFxuIHtcXG4tXFx0aW50IGksIGo7XFxuK1xcdHUxNiBuY2ggPSBtbHg1ZV9zdGF0c19uY2hfcmVhZChwcml2KTtcXG4rXFx0aW50IGksIHRjO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcdHRzX3N0YXRzLVxcdTAwM2Vwa3RzID0gMDtcXG4gXFxuLVxcdGlmIChwcml2LVxcdTAwM2V0eF9wdHBfb3BlbmVkKSB7XFxuLVxcdFxcdHN0cnVjdCBtbHg1ZV9wdHAgKnB0cCA9IHByaXYtXFx1MDAzZWNoYW5uZWxzLnB0cDtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5jaDsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBtbHg1ZV9jaGFubmVsX3N0YXRzICpjaGFubmVsX3N0YXRzID1cXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlY2hhbm5lbF9zdGF0c1tpXTtcXG4gXFxuLVxcdFxcdHRzX3N0YXRzLVxcdTAwM2Vwa3RzID0gMDtcXG4rXFx0XFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcHJpdi1cXHUwMDNlbWF4X29wZW5lZF90YzsgdGMrKylcXG4rXFx0XFx0XFx0dHNfc3RhdHMtXFx1MDAzZXBrdHMgKz0gY2hhbm5lbF9zdGF0cy1cXHUwMDNlc3FbdGNdLnRpbWVzdGFtcHM7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFjY3VtdWxhdGUgRE1BIGFuZCBwb3J0IHRpbWVzdGFtcCBjb3VudGVycyBzbyB2YWx1ZXMgc3RheSBtb25vdG9uaWNcXG4rXFx0ICogYWNyb3NzIGNoYW5uZWwgdGVhcmRvd24gYW5kIG1vZGUgc3dpdGNoZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNldHhfcHRwX29wZW5lZCkge1xcbitcXHRcXHQvKiBFcnIgYW5kIExvc3Qgc3RhdHMgYXJlIG9ubHkgcmVsZXZhbnQgZm9yIHBvcnQgdGltZXN0YW1waW5nLFxcbitcXHRcXHQgKiBhcyB0aGUgRE1BIGxheWVyIHdpbGwgYWx3YXlzIHN1Y2Nlc3NmdWxseSB0aW1lc3RhbXAgcGFja2V0cy5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHRzX3N0YXRzLVxcdTAwM2VlcnIgPSAwO1xcbiBcXHRcXHR0c19zdGF0cy1cXHUwMDNlbG9zdCA9IDA7XFxuIFxcbi1cXHRcXHRpZiAoIXB0cClcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRcXHQvKiBBZ2dyZWdhdGUgc3RhdHMgYWNyb3NzIGFsbCBUQ3MgKi9cXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHB0cC1cXHUwMDNlbnVtX3RjOyBpKyspIHtcXG4rXFx0XFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcHJpdi1cXHUwMDNlbWF4X29wZW5lZF90YzsgdGMrKykge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgbWx4NWVfcHRwX2NxX3N0YXRzICpzdGF0cyA9XFxuLVxcdFxcdFxcdFxcdHB0cC1cXHUwMDNlcHRwc3FbaV0uY3Ffc3RhdHM7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZwcml2LVxcdTAwM2VwdHBfc3RhdHMuY3FbdGNdO1xcbiBcXG4gXFx0XFx0XFx0dHNfc3RhdHMtXFx1MDAzZXBrdHMgKz0gc3RhdHMtXFx1MDAzZWNxZTtcXG4gXFx0XFx0XFx0dHNfc3RhdHMtXFx1MDAzZWVyciArPSBzdGF0cy1cXHUwMDNlYWJvcnQgKyBzdGF0cy1cXHUwMDNlZXJyX2NxZSArXFxuLVxcdFxcdFxcdFxcdHN0YXRzLVxcdTAwM2VsYXRlX2NxZTtcXG4rXFx0XFx0XFx0XFx0XFx0c3RhdHMtXFx1MDAzZWxhdGVfY3FlO1xcbiBcXHRcXHRcXHR0c19zdGF0cy1cXHUwMDNlbG9zdCArPSBzdGF0cy1cXHUwMDNlbG9zdF9jcWU7XFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0LyogRE1BIGxheWVyIHdpbGwgYWx3YXlzIHN1Y2Nlc3NmdWxseSB0aW1lc3RhbXAgcGFja2V0cy4gT3RoZXJcXG4tXFx0XFx0ICogY291bnRlcnMgZG8gbm90IG1ha2Ugc2Vuc2UgZm9yIHRoaXMgbGF5ZXIuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHR0c19zdGF0cy1cXHUwMDNlcGt0cyA9IDA7XFxuLVxcbi1cXHRcXHQvKiBBZ2dyZWdhdGUgc3RhdHMgYWNyb3NzIGFsbCBTUXMgKi9cXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIHByaXYtXFx1MDAzZWNoYW5uZWxzLm51bTsgaisrKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBtbHg1ZV9jaGFubmVsICpjID0gcHJpdi1cXHUwMDNlY2hhbm5lbHMuY1tqXTtcXG4tXFxuLVxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjLVxcdTAwM2VudW1fdGM7IGkrKykge1xcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbWx4NWVfc3Ffc3RhdHMgKnN0YXRzID0gYy1cXHUwMDNlc3FbaV0uc3RhdHM7XFxuLVxcbi1cXHRcXHRcXHRcXHR0c19zdGF0cy1cXHUwMDNlcGt0cyArPSBzdGF0cy1cXHUwMDNldGltZXN0YW1wcztcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuIFxcdH1cXG4tXFxuLW91dDpcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gfVxcbiBcXG4gI2RlZmluZSBQUE9SVF9QSFlfTEFZRVJfT0ZGKGMpIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTk6MDI6NDQuNDkwNzM2NDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxMjMwNDk1Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aW1lc3RhbXAgc3RhdGlzdGljcyByZXBvcnRpbmcgKG1seDVlX3N0YXRzX3RzX2dldCkgaW4gdGhlIE1lbGxhbm94IENvbm5lY3RYIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoTWVsbGFub3ggQ29ubmVjdFggTklDcy9TbWFydE5JQ3MpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ5OTY4ZmFmMWU3YTUxYTE0ZTdkNmJlMTc5NjUzOTJlNWFlZTcyZDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE5OjAyOjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuY1xuaW5kZXggZTdlNmRiN2Y2YmYxNy4uY2Q5NGJiNDRmNmFiMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuY1xuQEAgLTExOTksNTAgKzExOTksMzkgQEAgdm9pZCBtbHg1ZV9zdGF0c19ybW9uX2dldChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiB2b2lkIG1seDVlX3N0YXRzX3RzX2dldChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiBcdFx0XHRzdHJ1Y3QgZXRodG9vbF90c19zdGF0cyAqdHNfc3RhdHMpXG4ge1xuLVx0aW50IGksIGo7XG4rXHR1MTYgbmNoID0gbWx4NWVfc3RhdHNfbmNoX3JlYWQocHJpdik7XG4rXHRpbnQgaSwgdGM7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHR0c19zdGF0cy1cdTAwM2Vwa3RzID0gMDtcbiBcbi1cdGlmIChwcml2LVx1MDAzZXR4X3B0cF9vcGVuZWQpIHtcbi1cdFx0c3RydWN0IG1seDVlX3B0cCAqcHRwID0gcHJpdi1cdTAwM2VjaGFubmVscy5wdHA7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuY2g7IGkrKykge1xuK1x0XHRzdHJ1Y3QgbWx4NWVfY2hhbm5lbF9zdGF0cyAqY2hhbm5lbF9zdGF0cyA9XG4rXHRcdFx0cHJpdi1cdTAwM2VjaGFubmVsX3N0YXRzW2ldO1xuIFxuLVx0XHR0c19zdGF0cy1cdTAwM2Vwa3RzID0gMDtcbitcdFx0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBwcml2LVx1MDAzZW1heF9vcGVuZWRfdGM7IHRjKyspXG4rXHRcdFx0dHNfc3RhdHMtXHUwMDNlcGt0cyArPSBjaGFubmVsX3N0YXRzLVx1MDAzZXNxW3RjXS50aW1lc3RhbXBzO1xuK1x0fVxuK1xuK1x0LyogQWNjdW11bGF0ZSBETUEgYW5kIHBvcnQgdGltZXN0YW1wIGNvdW50ZXJzIHNvIHZhbHVlcyBzdGF5IG1vbm90b25pY1xuK1x0ICogYWNyb3NzIGNoYW5uZWwgdGVhcmRvd24gYW5kIG1vZGUgc3dpdGNoZXMuXG4rXHQgKi9cbitcdGlmIChwcml2LVx1MDAzZXR4X3B0cF9vcGVuZWQpIHtcbitcdFx0LyogRXJyIGFuZCBMb3N0IHN0YXRzIGFyZSBvbmx5IHJlbGV2YW50IGZvciBwb3J0IHRpbWVzdGFtcGluZyxcbitcdFx0ICogYXMgdGhlIERNQSBsYXllciB3aWxsIGFsd2F5cyBzdWNjZXNzZnVsbHkgdGltZXN0YW1wIHBhY2tldHMuXG4rXHRcdCAqL1xuIFx0XHR0c19zdGF0cy1cdTAwM2VlcnIgPSAwO1xuIFx0XHR0c19zdGF0cy1cdTAwM2Vsb3N0ID0gMDtcbiBcbi1cdFx0aWYgKCFwdHApXG4tXHRcdFx0Z290byBvdXQ7XG4tXG4tXHRcdC8qIEFnZ3JlZ2F0ZSBzdGF0cyBhY3Jvc3MgYWxsIFRDcyAqL1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwdHAtXHUwMDNlbnVtX3RjOyBpKyspIHtcbitcdFx0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBwcml2LVx1MDAzZW1heF9vcGVuZWRfdGM7IHRjKyspIHtcbiBcdFx0XHRzdHJ1Y3QgbWx4NWVfcHRwX2NxX3N0YXRzICpzdGF0cyA9XG4tXHRcdFx0XHRwdHAtXHUwMDNlcHRwc3FbaV0uY3Ffc3RhdHM7XG4rXHRcdFx0XHRcdTAwMjZwcml2LVx1MDAzZXB0cF9zdGF0cy5jcVt0Y107XG4gXG4gXHRcdFx0dHNfc3RhdHMtXHUwMDNlcGt0cyArPSBzdGF0cy1cdTAwM2VjcWU7XG4gXHRcdFx0dHNfc3RhdHMtXHUwMDNlZXJyICs9IHN0YXRzLVx1MDAzZWFib3J0ICsgc3RhdHMtXHUwMDNlZXJyX2NxZSArXG4tXHRcdFx0XHRzdGF0cy1cdTAwM2VsYXRlX2NxZTtcbitcdFx0XHRcdFx0c3RhdHMtXHUwMDNlbGF0ZV9jcWU7XG4gXHRcdFx0dHNfc3RhdHMtXHUwMDNlbG9zdCArPSBzdGF0cy1cdTAwM2Vsb3N0X2NxZTtcbiBcdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0LyogRE1BIGxheWVyIHdpbGwgYWx3YXlzIHN1Y2Nlc3NmdWxseSB0aW1lc3RhbXAgcGFja2V0cy4gT3RoZXJcbi1cdFx0ICogY291bnRlcnMgZG8gbm90IG1ha2Ugc2Vuc2UgZm9yIHRoaXMgbGF5ZXIuXG4tXHRcdCAqL1xuLVx0XHR0c19zdGF0cy1cdTAwM2Vwa3RzID0gMDtcbi1cbi1cdFx0LyogQWdncmVnYXRlIHN0YXRzIGFjcm9zcyBhbGwgU1FzICovXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHByaXYtXHUwMDNlY2hhbm5lbHMubnVtOyBqKyspIHtcbi1cdFx0XHRzdHJ1Y3QgbWx4NWVfY2hhbm5lbCAqYyA9IHByaXYtXHUwMDNlY2hhbm5lbHMuY1tqXTtcbi1cbi1cdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjLVx1MDAzZW51bV90YzsgaSsrKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbWx4NWVfc3Ffc3RhdHMgKnN0YXRzID0gYy1cdTAwM2VzcVtpXS5zdGF0cztcbi1cbi1cdFx0XHRcdHRzX3N0YXRzLVx1MDAzZXBrdHMgKz0gc3RhdHMtXHUwMDNldGltZXN0YW1wcztcbi1cdFx0XHR9XG4tXHRcdH1cbiBcdH1cbi1cbi1vdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiB9XG4gXG4gI2RlZmluZSBQUE9SVF9QSFlfTEFZRVJfT0ZGKGMpIFxcXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxOTowMjo0NC40OTA3Mzg3OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMjQ2OTA3Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBtbHg1ZV9zdGF0c190c19nZXRgIFBhdGNoIGFuZCBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuY2AsIHNwZWNpZmljYWxseSB0aGUgYG1seDVlX3N0YXRzX3RzX2dldGAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIHRvIG15IG1pbmQgaXM6IHdoYXQncyB0aGUgaGFyZHdhcmUgcmVhY2hhYmlsaXR5IHNpdHVhdGlvbiB3aXRoIGBtbHg1YD8gV2UncmUgdGFsa2luZyBhYm91dCBNZWxsYW5veCBoZXJlLCB0aGVpciBDb25uZWN0WC00LCBDb25uZWN0WC01LCBhbmQgQ29ubmVjdFgtNiBFdGhlcm5ldCBkcml2ZXJzLCBlc3NlbnRpYWxseSwgdGhlIGBNTFg1X0NPUkVgIGFuZCBgTUxYNV9DT1JFX0VOYCBkcml2ZXJzLiBJcyB0aGlzIGRyaXZlciBvcGVyYXRpbmcgb24gaGFyZHdhcmUgdGhhdCdzICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGFjY29yZGluZyB0byBteSBndWlkZWxpbmVzP1xuXG5MZXQncyBxdWlja2x5IHJlZnJlc2ggdGhvc2UgZ3VpZGVsaW5lcywgc3BlY2lmaWNhbGx5IFNlY3Rpb24gMiwgdGhlIFwiV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcIiBzZWN0aW9uLiBXZSdyZSBsb29raW5nIGF0IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gVGhlIHRleHQgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYW5kIGBhbWRncHVgLCB3aGljaCAqcmVxdWlyZSogcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIHRoYXQgYXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQncyB0aGUga2V5LlxuXG5Ob3csIGRvZXMgTWVsbGFub3gncyBgbWx4NWAgZml0IHRoYXQgZGVzY3JpcHRpb24/IFllcywgaXQncyBhIHBoeXNpY2FsIFBDSWUgU21hcnROSUMvTklDIGRyaXZlci4gTWVsbGFub3ggQ29ubmVjdFgtNCBhbmQgbmV3ZXIgYXJlIGNsYXNzaWMgZXhhbXBsZXMuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBEb2VzIHN0YW5kYXJkIFFFTVUgZW11bGF0ZSB0aGlzIGhhcmR3YXJlPyBUaGUgYW5zd2VyIGlzIGdlbmVyYWxseSBubywgbm90IGluIGEgd2F5IHRoYXQgcHJvdmlkZXMgZnVsbCBmdW5jdGlvbmFsIGVxdWl2YWxlbmNlLiBJJ20gaGlnaGx5IGZhbWlsaWFyIHdpdGggdGhlIGxpbWl0YXRpb25zIG9mIFFFTVUgd2hlbiBpdCBjb21lcyB0byBzb3BoaXN0aWNhdGVkIE5JQ3MgbGlrZSB0aGVzZS5cblxuVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGRlZmluaXRpdmVseS4gTGV0J3MgcnVuIGEgcXVpY2sgYGdyZXBwZXJgIHNjYW4gb3IgaW5zcGVjdCB0aGUgcmVsZXZhbnQgY29kZSBiYXNlLCBqdXN0IHRvIGJlIDEwMCUgcG9zaXRpdmUuIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHNpZ25zIG9mIHZpcnR1YWwgZHJpdmVycyBvciBtb2NrIGRldmljZXMgdGhhdCB3b3VsZCBtYWtlIHRoaXMgZHJpdmVyIGFjY2Vzc2libGUgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBJZiBpdCdzIHB1cmVseSBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlbiwgdW5mb3J0dW5hdGVseSwgdGhpcyBjb2RlIHBhdGggaXMgbGlrZWx5IG5vdCBzdWl0YWJsZSBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE5OjAyOjU3LjczNzY0OTczOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODYwNTc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUxYNV9DT1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9NYWtlZmlsZT02PW9iai0kKENPTkZJR19NTFg0X0NPUkUpICs9IG1seDQvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfTUxYNV9DT1JFKSArPSBtbHg1L2NvcmUvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfTUxYU1dfQ09SRSkgKz0gbWx4c3cvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9Nz1zdWJkaXItY2NmbGFncy15ICs9IC1JJChzcmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX01MWDVfQ09SRSkgKz0gbWx4NV9jb3JlLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9MTQ9bWx4NV9jb3JlLXkgOj1cXHRtYWluLm8gY21kLm8gZGVidWdmcy5vIGZ3Lm8gZXEubyB1YXIubyBwYWdlYWxsb2MubyBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtMjUtI1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZToyNjptbHg1X2NvcmUtJChDT05GSUdfTUxYNV9DT1JFX0VOKSArPSBlbi9ycXQubyBlbi90aXIubyBlbi9yc3MubyBlbi9yeF9yZXMubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTI3LVxcdFxcdGVuL2NoYW5uZWxzLm8gZW5fbWFpbi5vIGVuX2NvbW1vbi5vIGVuX2ZzLm8gZW5fZXRodG9vbC5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZT0zOT1tbHg1X2NvcmUtJChDT05GSUdfTUxYNV9FTl9SWE5GQykgICAgKz0gZW5fZnNfZXRodG9vbC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjQwOm1seDVfY29yZS0kKENPTkZJR19NTFg1X0NPUkVfRU5fRENCKSArPSBlbl9kY2JubC5vIGVuL3BvcnRfYnVmZmVyLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNDEtbWx4NV9jb3JlLSQoQ09ORklHX1BDSV9IWVBFUlZfSU5URVJGQUNFKSArPSBlbi9odl92aGNhX3N0YXRzLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZT05Mz1tbHg1X2NvcmUtJChDT05GSUdfUENJX0hZUEVSVl9JTlRFUkZBQ0UpICs9IGxpYi9odi5vIGxpYi9odl92aGNhLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS05Ny0jXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjk4Om1seDVfY29yZS0kKENPTkZJR19NTFg1X0NPUkVfSVBPSUIpICs9IGlwb2liL2lwb2liLm8gaXBvaWIvZXRodG9vbC5vIGlwb2liL2lwb2liX3ZsYW4ub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS05OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXYuYz01Nz1ib29sIG1seDVfZXRoX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXYuYy01OC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Rldi5jOjU5OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTUxYNV9DT1JFX0VOKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2LmMtNjAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmg9OTA1PXN0cnVjdCBtbHg1ZV9wcml2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oLTkxMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaDo5MTE6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5fRENCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmgtOTEyLVxcdHN0cnVjdCBtbHg1ZV9kY2J4X2RwICAgICAgIGRjYnhfZHA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaC05NTctXFx0c3RydWN0IHVkcF90dW5uZWxfbmljX2luZm8gbmljX2luZm87XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmg6OTU4OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0VOX0RDQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oLTk1OS1cXHRzdHJ1Y3QgbWx4NWVfZGNieCAgICAgICAgICBkY2J4O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2RjYm5sLmgtNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZGNibmwuaDo3OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0VOX0RDQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9kY2JubC5oLTgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vc2VscS5jPTEzMj12b2lkIG1seDVlX3NlbHFfY2FuY2VsKHN0cnVjdCBtbHg1ZV9zZWxxICpzZWxxKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3NlbHEuYy0xMzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3NlbHEuYzoxNDA6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5fRENCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3NlbHEuYy0xNDEtc3RhdGljIGludCBtbHg1ZV9nZXRfZHNjcF91cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9zZWxxLmM9MTU0PXN0YXRpYyBpbnQgbWx4NWVfZ2V0X3VwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9zZWxxLmMtMTU1LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vc2VscS5jOjE1NjojaWZkZWYgQ09ORklHX01MWDVfQ09SRV9FTl9EQ0JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vc2VscS5jLTE1Ny1cXHRpZiAoUkVBRF9PTkNFKHByaXYtXFx1MDAzZWRjYnhfZHAudHJ1c3Rfc3RhdGUpID09IE1MWDVfUVBUU19UUlVTVF9EU0NQKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmM9MjQ4ND1pbnQgbWx4NWVfcG9sbF9yeF9jcShzdHJ1Y3QgbWx4NWVfY3EgKmNxLCBpbnQgYnVkZ2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMjUxNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYzoyNTE3OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0lQT0lCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMjUxOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jPTI2NDE9Y29uc3Qgc3RydWN0IG1seDVlX3J4X2hhbmRsZXJzIG1seDVpX3J4X2hhbmRsZXJzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMjY0NC19O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jOjI2NDU6I2VuZGlmIC8qIENPTkZJR19NTFg1X0NPUkVfSVBPSUIgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYy0yNjQ2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM9MTAwNz1zdGF0aWMgaW50IG1seDVlX2hhaXJwaW5fZ2V0X3ByaW8oc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy0xMDE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjEwMTU6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfRU5fRENCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtMTAxNi1cXHRpZiAocHJpdi1cXHUwMDNlZGNieF9kcC50cnVzdF9zdGF0ZSAhPSBNTFg1X1FQVFNfVFJVU1RfUENQKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdHguYz04NzI9dm9pZCBtbHg1ZV9mcmVlX3R4cXNxX2Rlc2NzKHN0cnVjdCBtbHg1ZV90eHFzcSAqc3EpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdHguYy05MTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3R4LmM6OTE4OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0lQT0lCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3R4LmMtOTE5LXN0YXRpYyBpbmxpbmUgdm9pZFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmgtMzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmg6MzY6I2lmZGVmIENPTkZJR19NTFg1X0NPUkVfSVBPSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvaXBvaWIuaC0zNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9pcG9pYi5oPTEzMD12b2lkIG1seDVpX3BhcmVudF9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmgtMTMxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9pcG9pYi5oOjEzMjojZW5kaWYgLyogQ09ORklHX01MWDVfQ09SRV9JUE9JQiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9pcG9pYi5oLTEzMy0jZW5kaWYgLyogX19NTFg1RV9JUE9CX0hfXyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oPTI0PXZvaWQgbWx4NV9zZF9wdXRfYWRldihzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYWN0dWFsX2FkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmgtMjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oOjI3OiNpZmRlZiBDT05GSUdfTUxYNV9DT1JFX0VOXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oLTI4LWJvb2wgbWx4NV9zZF9pc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmg9Mzc9dm9pZCBtbHg1X3NkX2NsZWFudXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oLTM4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaDozOTojaWZkZWYgQ09ORklHX01MWDVfQ09SRV9FTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaC00MC1zdHJ1Y3QgbWx4NV9kZXZjb21fY29tcF9kZXYgKm1seDVfc2RfZ2V0X2RldmNvbShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaD0zOTY9dm9pZCBtbHg1X2Z3X3ZlcnNpb25fcXVlcnkoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTMyICpydW5uaW5nX3ZlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaC0zOTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21seDVfY29yZS5oOjM5OTojaWZkZWYgQ09ORklHX01MWDVfQ09SRV9FTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaC00MDAtaW50IG1seDVlX2luaXQodm9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE5OjAyOjU3Ljc5NjI2MTE3NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NzQ0NDU1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgbWx4NSBJbml0aWFsaXphdGlvbiBhbmQgSGFyZHdhcmUgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSG93IGRvZXMgdGhlIG1seDUgZHJpdmVyIGdldCBpdHNlbGYgb2ZmIHRoZSBncm91bmQ/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBUaGUgYnVybmluZyBxdWVzdGlvbiBpcywgZG9lcyBpdCAqcmVxdWlyZSogcGh5c2ljYWwgaGFyZHdhcmUgdG8gaW5pdGlhbGl6ZSBhdCBzb21lIHBvaW50LCBvciBjYW4gaXQgb3BlcmF0ZSBpbiBhIHNpbXVsYXRlZCBvciB2aXJ0dWFsIGVudmlyb25tZW50LCBhdCBsZWFzdCBwYXJ0aWFsbHk/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiB0aGUgZHJpdmVy4oCZcyBpbml0aWFsaXphdGlvbiBpcyB0cnVseSBoYXJkd2FyZS1kZXBlbmRlbnQuXG5cblRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaD8gSSdsbCByZWFjaCBmb3IgYGdyZXBgLiBTcGVjaWZpY2FsbHksIEknbGwgdGFyZ2V0IHRoZSBgcGNpX3JlZ2lzdGVyX2RyaXZlcmAgZnVuY3Rpb24gd2l0aGluIHRoZSBtbHg1IGRyaXZlciBkaXJlY3RvcnkuIEknbGwgc2VhcmNoIGluc2lkZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NWAgZm9yIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24uIGBwY2lfcmVnaXN0ZXJfZHJpdmVyYCBpcyBhIHByZXR0eSBnb29kIGluZGljYXRvciBvZiBQQ0kgZGV2aWNlIGluaXRpYWxpemF0aW9uLCB3aGljaCB3b3VsZCBzdHJvbmdseSBzdWdnZXN0IGEgZGVwZW5kZW5jeSBvbiBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgc2ltdWxhdGVkIFBDSSBidXMuIFRoYXQgc2hvdWxkIHF1aWNrbHkgaWxsdW1pbmF0ZSB0aGUgbW9zdCBsaWtlbHkgcGF0aC4gRnJvbSB0aGVyZSwgSSBjYW4gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIHN0YWNrIGlmIEkgbmVlZCB0by5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQyMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE5OjAzOjAwLjQ3MDcwODg2MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDk0NjYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYz0yMzQ2PXN0YXRpYyBpbnQgX19pbml0IG1seDVfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYy0yMzY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmM6MjM2NjpcXHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZtbHg1X2NvcmVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jLTIzNjctXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTk6MDM6MDAuNTI1NjkwMjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTY3Njk0MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBtbHg1YCBEcml2ZXIgYW5kIGl0cyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgYXNraW5nIGFib3V0IGNvZGUgdGhhdCBtaWdodCBiZSBwcm9ibGVtYXRpYyBpbiBhIHNwZWNpZmljIGNvbnRleHQsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhlIGBtbHg1YCBkcml2ZXIgaXMgbGlrZWx5IHRvIGJlIGEgY29uY2Vybi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBtbHg1YCBpcyB0aGUgY29yZSBkcml2ZXIgZm9yIE1lbGxhbm94IENvbm5lY3RYLTQvNS82LzcgTklDcyBhbmQgU21hcnROSUNzLiBJIG5lZWQgdG8gc2VlIGlmIGl0IG1lZXRzIHRoZSBjcml0ZXJpYSBvZiBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIlxuXG5JbW1lZGlhdGVseSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IGBtbHg1YCAqaXMqIGEgY2xhc3NpYyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLiBJdOKAmXMgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggcGh5c2ljYWwgTWVsbGFub3ggQ29ubmVjdFggaGFyZHdhcmUuIFN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHR5cGljYWxseSAqZG9uJ3QqIGVtdWxhdGUgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZS4gSSBrbm93IHRoaXMgZnJvbSBleHBlcmllbmNlLlxuXG5UaGUgc3BlY2lmaWMgZnVuY3Rpb24gbWVudGlvbmVkLCBgbWx4NWVfc3RhdHNfdHNfZ2V0YCwgaXMgdHJpZ2dlcmVkIHRocm91Z2ggZXRodG9vbCBzdGF0cyBjYWxsYmFja3MgKGBtbHg1ZV9nZXRfdHNfc3RhdHNgKSBvbiBhIGBtbHg1ZWAgbmV0d29yayBkZXZpY2UuIFRoaXMgYG1seDVlYCBkZXZpY2UgaXMgY3JlYXRlZCBvbmx5ICphZnRlciogYSBwaHlzaWNhbCBNZWxsYW5veCBQQ0llIGRldmljZSBwcm9iZSBpcyBzdWNjZXNzZnVsLiBUaGF0IHNvbGlkaWZpZXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgYmVpbmcgcmVsaWFudCBvbiBhY3R1YWwgaGFyZHdhcmUuXG5cbk5vdywganVzdCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSwgSSBuZWVkIHRvIHJ1bGUgb3V0IHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZXJlJ3Mgc29tZSBraW5kIG9mIG1vY2sgb3IgdmlydHVhbCBkZXZpY2UgZHJpdmVyIHRoYXQgdXRpbGl6ZXMgYG1seDVgIGluIHRoZSBrZXJuZWwuIEl04oCZcyByYXJlLCBidXQgc29tZXRpbWVzIHZlbmRvcnMgaW5jbHVkZSBhIHNpbXVsYXRpb24gbGF5ZXIgZm9yIHRlc3RpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IGdyZXAgdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGFueSBtZW50aW9ucyBvZiBgbWx4NWAgd2l0aGluIGRyaXZlcnMgdGhhdCBtYXkgaGF2ZSBzb21lIHNpbXVsYXRpb24gYXNwZWN0LiBNeSBmaXJzdCBzZWFyY2ggd2lsbCBiZSB3aXRoaW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbWAsIGFuZCB0aGVuIGEgYnJvYWRlciBzZWFyY2ggaWYgdGhhdCBkb2Vzbid0IHlpZWxkIGFueXRoaW5nLiBUaGlzIGRvdWJsZS1jaGVjayBzaG91bGQgZ2l2ZSBtZSB0aGUgZmluYWwgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTE4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE5OjAzOjA1LjQ5MzM4ODE5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU2Nzc1OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWx4NVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE5OjAzOjA1LjUzOTk2NTU3N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMDQyMTY2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRob3JvdWdobmVzcyBDaGVjayAtIGBtbHg1ZV9zdGF0c190c19nZXRgIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gcmV2aXNpdGluZyB0aGlzLCBhbmQgYmVmb3JlIEkgc2lnbiBvZmYsIEkganVzdCBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSSB3YW50IHRvIGRvIGEgZmluYWwsIHN1cGVyLXRob3JvdWdoIGNoZWNrLiBUaGUgY29kZSBsb29rcyBnb29kLCB0aGUgbG9naWMgc2VlbXMgc291bmQsIGJ1dCBJJ3ZlIGxlYXJuZWQgdGhhdCBhIHF1aWNrLCBsYXN0IGxvb2sgY2FuIHVuY292ZXIgaGlkZGVuIGFzc3VtcHRpb25zIG9yIGVkZ2UgY2FzZXMuIFdoYXQgSSdtIHRoaW5raW5nIGlzIHRoaXM6IGxldCdzIHB1bGwgdXAgYWxsIHRoZSBjYWxsZXJzIG9mIGBtbHg1ZV9zdGF0c190c19nZXRgLiBJJ20gYW4gZXhwZXJ0LCBJICprbm93KiB0aGlzIGFyZWEsIGJ1dCBhIHF1aWNrIGdyZXAsIGEgZ2xhbmNlIGF0IHRoZSBjYWxsIGdyYXBoLCB3aGF0ZXZlciB0aGUgcHJlZmVycmVkIG1ldGhvZCBpcywganVzdCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGNhbGwgc2l0ZSB0aGF0J3MgdXNpbmcgdGhlIHJlc3VsdCBpbiBhIHdheSBJIGRpZG4ndCBpbml0aWFsbHkgYW50aWNpcGF0ZS4gSXTigJlzIGFib3V0IGJlaW5nIGNvbmZpZGVudCwgbGVhdmluZyBubyBzdG9uZSB1bnR1cm5lZCwgYW5kIG1ha2luZyBzdXJlIHRoaXMgcGFydCBvZiB0aGUgc3lzdGVtIGlzIHJvY2stc29saWQuIEEgcXVpY2sgY2hlY2sgd2lsbCBwdXQgbXkgbWluZCBhdCBlYXNlIGFuZCBhbGxvdyBtZSB0byBtb3ZlIGZvcndhcmQgd2l0aCBhIGhpZ2ggZGVncmVlIG9mIGNvbmZpZGVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxOTowMzowOC42NDQxODQ4NDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzA1NjgyODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWx4NWVfc3RhdHNfdHNfZ2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM9MjcwOT1zdGF0aWMgdm9pZCBtbHg1ZV9nZXRfdHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmMtMjcxMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jOjI3MTQ6XFx0bWx4NWVfc3RhdHNfdHNfZ2V0KHByaXYsIHRzX3N0YXRzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jLTI3MTUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmM9MTE2MD12b2lkIG1seDVlX3N0YXRzX3Jtb25fZ2V0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmMtMTE5OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuYzoxMTk5OnZvaWQgbWx4NWVfc3RhdHNfdHNfZ2V0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jLTEyMDAtXFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfdHNfc3RhdHMgKnRzX3N0YXRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmg9MTI5PXZvaWQgbWx4NWVfc3RhdHNfcm1vbl9nZXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuaC0xMzEtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5oOjEzMjp2b2lkIG1seDVlX3N0YXRzX3RzX2dldChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuaC0xMzMtXFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfdHNfc3RhdHMgKnRzX3N0YXRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTk6MDM6MTAuNjE0NzczODMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMDY0MjY5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGBtbHg1ZV9zdGF0c190c19nZXRgIGlzIG9ubHkgZXZlciBjYWxsZWQgYnkgYG1seDVlX2dldF90c19zdGF0c2AsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGBldGh0b29sX29wcy5nZXRfdHNfc3RhdHNgIGhhbmRsZXIgd2l0aGluIHRoZSBgZW5fZXRodG9vbC5jYCBmaWxlLiBSaWdodCwgdGhhdCBwbGFjZXMgdGhpcyBzcXVhcmVseSB3aXRoaW4gdGhlIE1lbGxhbm94IENvbm5lY3RYIE5JQyByZWFsbSwgc3BlY2lmaWNhbGx5IHRoZSBtbHg1IEV0aGVybmV0IGRyaXZlci4gQW5kIHdlIGFsbCBrbm93IHdoYXQgdGhhdCBtZWFuczogdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlLCBQQ0llIGJhc2VkLCBub3Qgc29tZXRoaW5nIHlvdSdyZSBnb2luZyB0byBzZWUgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBzZXR1cC4gTm8gZW11bGF0aW5nIHRoaXMuXG5cblRoZXJlZm9yZSwgdGhlIGxpa2VsaWhvb2Qgb2YgdGhpcyBjb2RlIHBhdGggYmVpbmcgdHJpZ2dlcmVkIGluIGEgZnV6emluZyBlbnZpcm9ubWVudCBpcyBwcmFjdGljYWxseSB6ZXJvLiBJdCdzIHNpbXBseSB1bnJlYWNoYWJsZS5cblxuU28sIGxldCdzIHNldCB0aGUgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYC4gYFdvcnRoRnV6emluZ2AgaGFzIHRvIGJlIGBmYWxzZWAsIG9idmlvdXNseS4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBleHBsaWNpdGx5IHN0YXRlIHRoZSBkZXBlbmRlbmN5IG9uIE1lbGxhbm94IENvbm5lY3RYIGhhcmR3YXJlIGFuZCBpdHMgYWJzZW5jZSBmcm9tIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIHNldHVwcy4gV2UgbmVlZCB0byBzYXkgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1seDVlX3N0YXRzX3RzX2dldCgpYCBpbiB0aGUgTWVsbGFub3ggQ29ubmVjdFggY29yZSBFdGhlcm5ldCBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2ApIGFuZCB0aGF0IGl0IHJlcXVpcmVzIHBoeXNpY2FsIHZlbmRvci1zcGVjaWZpYyBQQ0llIFNtYXJ0TklDL05JQyBoYXJkd2FyZSAoTWVsbGFub3ggQ29ubmVjdFggQVNJQykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIFRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGxpc3RzIHdpbGwgYmUgZW1wdHkgc2luY2UgdGhlcmUncyBub3RoaW5nIHRvIGZvY3VzIG9uIG9yIGVuYWJsZSBoZXJlLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0MSwiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTk6MDM6MTUuNzIxMjAzNzE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZXN0YW1wIHN0YXRpc3RpY3MgcmVwb3J0aW5nIChtbHg1ZV9zdGF0c190c19nZXQpIGluIHRoZSBNZWxsYW5veCBDb25uZWN0WCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKE1lbGxhbm94IENvbm5lY3RYIE5JQ3MvU21hcnROSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZXN0YW1wIHN0YXRpc3RpY3MgcmVwb3J0aW5nIChtbHg1ZV9zdGF0c190c19nZXQpIGluIHRoZSBNZWxsYW5veCBDb25uZWN0WCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKE1lbGxhbm94IENvbm5lY3RYIE5JQ3MvU21hcnROSUNzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTk6MDM6MTUuNzIxMjM0NjM1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflownhp29[1] Phase: Running StartedAt: 2026-09-03 19:03:26 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhp29[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-03 19:03:26 +0000 UTC FinishedAt: 2026-09-03 19:03:31 +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,}