Name: series-workflowbj2qk Phase: Failed StartedAt: 2026-07-27 11:37:19 +0000 UTC FinishedAt: 2026-07-27 12:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbj2qk[0] Phase: Succeeded StartedAt: 2026-07-27 11:37:19 +0000 UTC FinishedAt: 2026-07-27 12:09:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbj2qk[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 11:37:19 +0000 UTC FinishedAt: 2026-07-27 12:09:14 +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+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIFJUTDgzNjVNQiBEU0Egc3dpdGNoIGRyaXZlciwgcmVwbGFjaW5nIGBtdXRleF9pbml0YCB3aXRoIGBkZXZtX211dGV4X2luaXRgIGFuZCBhZGRpbmcgZXJyb3IgaGFuZGxpbmcuIFRoaXMgZHJpdmVyIGlzIGZvciBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoUmVhbHRlayBzd2l0Y2hlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIHJlYWQgdGhlIGNoaXAgSUQgdmlhIE1ESU8vU01JLCB3aGljaCB3aWxsIGZhaWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHRoZSBoYXJkd2FyZSwgcHJldmVudGluZyB0aGUgbW9kaWZpZWQgc2V0dXAgZnVuY3Rpb25zIGZyb20gZXZlciBiZWluZyByZWFjaGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBwdXJlbHkgYSB0cml2aWFsIHJlc291cmNlIG1hbmFnZW1lbnQgdXBkYXRlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYxNTZkYTVhZmZhNGQ2YzViOTljMDk3NTFkZWI3NzVhYjA2MDU5OGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMjowODozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uY1xuaW5kZXggNWFjMDkxYmY5M2M5MjMuLmFhMDUzNzViMDkwYTNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uY1xuQEAgLTE5ODgsMTYgJiM0MzsxOTg4LDE5IEBAIHN0YXRpYyB2b2lkIHJ0bDgzNjVtYl9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0c3Bpbl91bmxvY2soXHUwMDI2cC1cdTAwM2VzdGF0c19sb2NrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsODM2NW1iX3N0YXRzX3NldHVwKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG4mIzQzO3N0YXRpYyBpbnQgcnRsODM2NW1iX3N0YXRzX3NldHVwKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG4ge1xuIFx0c3RydWN0IHJ0bDgzNjVtYiAqbWIgPSBwcml2LVx1MDAzZWNoaXBfZGF0YTtcbiBcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHQvKiBQZXItY2hpcCBnbG9iYWwgbXV0ZXggdG8gcHJvdGVjdCBNSUIgY291bnRlciBhY2Nlc3MsIHNpbmNlIGRvaW5nXG4gXHQgKiBzbyByZXF1aXJlcyBhY2Nlc3NpbmcgYSBzZXJpZXMgb2YgcmVnaXN0ZXJzIGluIGEgcGFydGljdWxhciBvcmRlci5cbiBcdCAqL1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZtYi1cdTAwM2VtaWJfbG9jayk7XG4mIzQzO1x0cmV0ID0gZGV2bV9tdXRleF9pbml0KHByaXYtXHUwMDNlZGV2LCBcdTAwMjZtYi1cdTAwM2VtaWJfbG9jayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2F2YWlsYWJsZV9wb3J0KGRwLCBkcykge1xuIFx0XHRzdHJ1Y3QgcnRsODM2NW1iX3BvcnQgKnAgPSBcdTAwMjZtYi1cdTAwM2Vwb3J0c1tkcC1cdTAwM2VpbmRleF07XG5AQCAtMjAxMCw2ICYjNDM7MjAxMyw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgzNjVtYl9zdGF0c19zZXR1cChzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KVxuIFx0XHQgKi9cbiBcdFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cC1cdTAwM2VtaWJfd29yaywgcnRsODM2NW1iX3N0YXRzX3BvbGwpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODM2NW1iX3N0YXRzX3RlYXJkb3duKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG5AQCAtMjU2Nyw3ICYjNDM7MjU3MiwxMiBAQCBzdGF0aWMgaW50IHJ0bDgzNjVtYl9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHR9XG4gXG4gXHQvKiBTdGFydCBzdGF0aXN0aWNzIGNvdW50ZXIgcG9sbGluZyAqL1xuLVx0cnRsODM2NW1iX3N0YXRzX3NldHVwKHByaXYpO1xuJiM0MztcdHJldCA9IHJ0bDgzNjVtYl9zdGF0c19zZXR1cChwcml2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gc2V0dXAgc3RhdHM6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0RVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdGdvdG8gb3V0X3RlYXJkb3duX2lycTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gMDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMgYi9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmNcbmluZGV4IDcxMTI0ZWNjYTkyZjJhLi45ZGQ1MGIyMGMwMDBhMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jXG5AQCAtMTU2LDkgJiM0MzsxNTYsMTcgQEAgcnRsODN4eF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZW1hcF9sb2NrKTtcbi1cdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2V2bGFuX2xvY2spO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWwyX2xvY2spO1xuJiM0MztcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFx1MDAyNnByaXYtXHUwMDNlbWFwX2xvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX211dGV4X2luaXQoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXZsYW5fbG9jayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFx1MDAyNnByaXYtXHUwMDNlbDJfbG9jayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gXG4gXHRyYy5sb2NrX2FyZyA9IHByaXY7XG4gXHRwcml2LVx1MDAzZW1hcCA9IGRldm1fcmVnbWFwX2luaXQoZGV2LCBOVUxMLCBwcml2LCBcdTAwMjZyYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIFJUTDgzNjVNQiBEU0Egc3dpdGNoIGRyaXZlciwgcmVwbGFjaW5nIGBtdXRleF9pbml0YCB3aXRoIGBkZXZtX211dGV4X2luaXRgIGFuZCBhZGRpbmcgZXJyb3IgaGFuZGxpbmcuIFRoaXMgZHJpdmVyIGlzIGZvciBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoUmVhbHRlayBzd2l0Y2hlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIHJlYWQgdGhlIGNoaXAgSUQgdmlhIE1ESU8vU01JLCB3aGljaCB3aWxsIGZhaWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHRoZSBoYXJkd2FyZSwgcHJldmVudGluZyB0aGUgbW9kaWZpZWQgc2V0dXAgZnVuY3Rpb25zIGZyb20gZXZlciBiZWluZyByZWFjaGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBwdXJlbHkgYSB0cml2aWFsIHJlc291cmNlIG1hbmFnZW1lbnQgdXBkYXRlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYxNTZkYTVhZmZhNGQ2YzViOTljMDk3NTFkZWI3NzVhYjA2MDU5OGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAxMjowODozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jCmluZGV4IDVhYzA5MWJmOTNjOTIzLi5hYTA1Mzc1YjA5MGEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jCkBAIC0xOTg4LDE2ICYjNDM7MTk4OCwxOSBAQCBzdGF0aWMgdm9pZCBydGw4MzY1bWJfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAlzcGluX3VubG9jaygmYW1wO3AtJmd0O3N0YXRzX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MzY1bWJfc3RhdHNfc2V0dXAoc3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdikKJiM0MztzdGF0aWMgaW50IHJ0bDgzNjVtYl9zdGF0c19zZXR1cChzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KQogewogCXN0cnVjdCBydGw4MzY1bWIgKm1iID0gcHJpdi0mZ3Q7Y2hpcF9kYXRhOwogCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiAJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJaW50IHJldDsKIAogCS8qIFBlci1jaGlwIGdsb2JhbCBtdXRleCB0byBwcm90ZWN0IE1JQiBjb3VudGVyIGFjY2Vzcywgc2luY2UgZG9pbmcKIAkgKiBzbyByZXF1aXJlcyBhY2Nlc3NpbmcgYSBzZXJpZXMgb2YgcmVnaXN0ZXJzIGluIGEgcGFydGljdWxhciBvcmRlci4KIAkgKi8KLQltdXRleF9pbml0KCZhbXA7bWItJmd0O21pYl9sb2NrKTsKJiM0MzsJcmV0ID0gZGV2bV9tdXRleF9pbml0KHByaXYtJmd0O2RldiwgJmFtcDttYi0mZ3Q7bWliX2xvY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAogCWRzYV9zd2l0Y2hfZm9yX2VhY2hfYXZhaWxhYmxlX3BvcnQoZHAsIGRzKSB7CiAJCXN0cnVjdCBydGw4MzY1bWJfcG9ydCAqcCA9ICZhbXA7bWItJmd0O3BvcnRzW2RwLSZndDtpbmRleF07CkBAIC0yMDEwLDYgJiM0MzsyMDEzLDggQEAgc3RhdGljIHZvaWQgcnRsODM2NW1iX3N0YXRzX3NldHVwKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpCiAJCSAqLwogCQlJTklUX0RFTEFZRURfV09SSygmYW1wO3AtJmd0O21pYl93b3JrLCBydGw4MzY1bWJfc3RhdHNfcG9sbCk7CiAJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcnRsODM2NW1iX3N0YXRzX3RlYXJkb3duKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpCkBAIC0yNTY3LDcgJiM0MzsyNTcyLDEyIEBAIHN0YXRpYyBpbnQgcnRsODM2NW1iX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAl9CiAKIAkvKiBTdGFydCBzdGF0aXN0aWNzIGNvdW50ZXIgcG9sbGluZyAqLwotCXJ0bDgzNjVtYl9zdGF0c19zZXR1cChwcml2KTsKJiM0MzsJcmV0ID0gcnRsODM2NW1iX3N0YXRzX3NldHVwKHByaXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHByaXYtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gc2V0dXAgc3RhdHM6ICVwZVxuJiMzNDssCiYjNDM7CQkJRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gb3V0X3RlYXJkb3duX2lycTsKJiM0MzsJfQogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYyBiL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYwppbmRleCA3MTEyNGVjY2E5MmYyYS4uOWRkNTBiMjBjMDAwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMKQEAgLTE1Niw5ICYjNDM7MTU2LDE3IEBAIHJ0bDgzeHhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LAogCWlmICghcHJpdikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7bWFwX2xvY2spOwotCW11dGV4X2luaXQoJmFtcDtwcml2LSZndDt2bGFuX2xvY2spOwotCW11dGV4X2luaXQoJmFtcDtwcml2LSZndDtsMl9sb2NrKTsKJiM0MzsJcmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgJmFtcDtwcml2LSZndDttYXBfbG9jayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX211dGV4X2luaXQoZGV2LCAmYW1wO3ByaXYtJmd0O3ZsYW5fbG9jayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX211dGV4X2luaXQoZGV2LCAmYW1wO3ByaXYtJmd0O2wyX2xvY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAogCXJjLmxvY2tfYXJnID0gcHJpdjsKIAlwcml2LSZndDttYXAgPSBkZXZtX3JlZ21hcF9pbml0KGRldiwgTlVMTCwgcHJpdiwgJmFtcDtyYyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVhbHRlayBEU0EgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgbWFraW5nIGEgY291cGxlIG9mIGNoYW5nZXMgdG8gdGhlIFJlYWx0ZWsgRFNBIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdG91Y2hpbmcgYHJ0bDgzNjVtYl9tYWluLmNgIGFuZCBgcnRsODN4eC5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDsgdGhleSYjMzk7cmUgcmVwbGFjaW5nIHRoZSBzdGFuZGFyZCBgbXV0ZXhfaW5pdGAgd2l0aCBgZGV2bV9tdXRleF9pbml0YCBhbmQgYWRkaW5nIHNvbWUgcmV0dXJuIHZhbHVlIGhhbmRsaW5nLiBTbWFydCwgbWluaW1pemluZyBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MgYW5kIGhhbmRsaW5nIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIGdyYWNlZnVsbHkuIFN0YW5kYXJkIHN0dWZmIGZvciBkZXZpY2UgZHJpdmVycy4KCkxldCBtZSBzZWUsIHRoaXMgaXMgYSBEU0EgZHJpdmVyLCBhIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgZHJpdmVyLCByaWdodD8gRm9yIFJlYWx0ZWsgc3dpdGNoZXMsIHBhcnRpY3VsYXJseSB0aGUgUlRMODM2NU1CIGFuZCBSVEw4M3h4IHNlcmllcy4gQ2xlYXJseSBoYXJkd2FyZS1zcGVjaWZpYywgd2hpY2ggaXMgZ29vZCB0byBrbm93IGZyb20gdGhlIGdldC1nby4gTm8gZ2VuZXJhbGl0aWVzIGhlcmUuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgYWx3YXlzIGZ1enppbmcuIENhbiBJIHRocm93IHRoaXMgaW50byBRRU1VIGFuZCBzdGFydCBwb2tpbmcgYXQgaXQ/IFdpdGggRFNBIHN3aXRjaGVzLCBpdCB1c3VhbGx5IGJvaWxzIGRvd24gdG8gaG93IHRoZSBzd2l0Y2ggaXMgY29ubmVjdGVkLiBUeXBpY2FsbHksIGl0JiMzOTtzIE1ESU8sIFNQSSwgb3IgSTJDLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGlzIHByb2JlZC4gVGhhdCYjMzk7bGwgYmUga2V5IHRvIGFueSBlZmZlY3RpdmUgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4M3h4X3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3JlYWx0ZWstbWRpby5jPTEyMT1pbnQgcmVhbHRla19tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uYy0xMjYtXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uYzoxMjc6XHRwcml2ID0gcnRsODN4eF9wcm9iZShkZXYsIFx1MDAyNnJlYWx0ZWtfbWRpb19pbmZvKTtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3JlYWx0ZWstbWRpby5jLTEyOC1cdGlmIChJU19FUlIocHJpdikpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1zbWkuYz0zMzE9aW50IHJlYWx0ZWtfc21pX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1zbWkuYy0zMzYtXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLXNtaS5jOjMzNzpcdHByaXYgPSBydGw4M3h4X3Byb2JlKGRldiwgXHUwMDI2cmVhbHRla19zbWlfaW5mbyk7XG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLXNtaS5jLTMzOC1cdGlmIChJU19FUlIocHJpdikpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTExND1FWFBPUlRfU1lNQk9MX05TX0dQTChydGw4M3h4X3NldHVwX3VzZXJfbWRpbywgXCYjMzQ7UkVBTFRFS19EU0FcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMTYtLyoqXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MTE3OiAqIHJ0bDgzeHhfcHJvYmUoKSAtIHByb2JlIGEgUmVhbHRlayBzd2l0Y2hcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMTgtICogQGRldjogdGhlIGRldmljZSBiZWluZyBwcm9iZWRcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM9MTMwPXN0cnVjdCByZWFsdGVrX3ByaXYgKlxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEzMTpydGw4M3h4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMzItXHQgICAgICBjb25zdCBzdHJ1Y3QgcmVhbHRla19pbnRlcmZhY2VfaW5mbyAqaW50ZXJmYWNlX2luZm8pXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTIyMi19XG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MjIzOkVYUE9SVF9TWU1CT0xfTlNfR1BMKHJ0bDgzeHhfcHJvYmUsIFwmIzM0O1JFQUxURUtfRFNBXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0yMjQtXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5oPTE0PXN0cnVjdCByZWFsdGVrX3ByaXYgKlxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5oOjE1OnJ0bDgzeHhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5oLTE2LVx0ICAgICAgY29uc3Qgc3RydWN0IHJlYWx0ZWtfaW50ZXJmYWNlX2luZm8gKmludGVyZmFjZV9pbmZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBEcml2ZXIgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFJlYWx0ZWsgc3dpdGNoIGRyaXZlciBhbmQgdGhlIHJlcG9ydGVkIGNoYW5nZS4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBhY2Nlc3MgbWV0aG9kIC0gaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBwcm9iZWQgdmlhIE1ESU8gb3IgU01JLCBwbGF0Zm9ybSBkZXZpY2Ugc3R1ZmYsIHJpZ2h0PyBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHdoZXRoZXIgSSBjYW4gZXZlbiBnZXQgdGhpcyBydW5uaW5nIGluIGEgUUVNVSBlbnZpcm9ubWVudCBmb3IgZnV6emluZy4gQ2FuIEkgbGV2ZXJhZ2Ugc3l6a2FsbGVyIGhlcmU/IEkga25vdyBzeXprYWxsZXIgY2FuIGluc3RhbnRpYXRlIHBsYXRmb3JtIGRldmljZXMsIHR5cGljYWxseSB0aHJvdWdoIGAvc3lzL2RldmljZXMvcGxhdGZvcm1gIG9yIHNpbWlsYXIgaW50ZXJmYWNlcy4gSG93ZXZlciwgcGxhdGZvcm0gZGV2aWNlIGluc3RhbnRpYXRpb24gb2Z0ZW4gcmVsaWVzIG9uIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUuCgpIbW0sIHdhaXQsIGlmIHN5emthbGxlciAqY2FuKiBpbmplY3Qgbm9kZXMsIG1heWJlLiBCdXQsIGdlbmVyYWxseSwgdGhhdCBnZXRzIGhhcmR3YXJlIHNwZWNpZmljIHByZXR0eSBmYXN0LiBTbywgbGV0JiMzOTtzIGJhY2sgdXAgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgc29mdHdhcmUgZW11bGF0aW9uIHRvIHdvcmsgd2l0aC4gTm9wZSwgdGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgUmVhbHRlayBzd2l0Y2ggZHJpdmVyLiBBbmQgdGhlIGNoYW5nZSBpdHNlbGYuLi4gaXQmIzM5O3MgcmVhbGx5IGp1c3QgYSBgbXV0ZXhfaW5pdGAgdG8gYGRldm1fbXV0ZXhfaW5pdGAgY29udmVyc2lvbiB3aXRoIHNvbWUgYWRkZWQgZXJyb3IgaGFuZGxpbmcuCgpIb2xkIG9uIGEgc2Vjb25kLCAqZGV2bV9tdXRleF9pbml0KiBpcyBhIHN1cGVyIHNpbXBsZSBjaGFuZ2UsIGFsbW9zdCB0cml2aWFsLiBJdCYjMzk7cyBqdXN0IGEgbWFuYWdlZCBtdXRleCBpbml0aWFsaXphdGlvbiBhbmQgZXJyb3IgY2hlY2tpbmcuIE5vdywgSSYjMzk7bSBxdWVzdGlvbmluZyB3aGV0aGVyIHRoaXMgaXMgZXZlbiAqd29ydGgqIGZ1enppbmcuIEl0JiMzOTtzIGEgdmVyeSB0YXJnZXRlZCBkcml2ZXIgZm9yIHNwZWNpZmljIGhhcmR3YXJlLCBhbmQgdGhlIGNvZGUgY2hhbmdlIGlzIG1pbmltYWwuIE15IGd1dCBpcyB0ZWxsaW5nIG1lIHRoaXMgaXNuJiMzOTt0IGEgZ29vZCBjYW5kaWRhdGUuCgpVbHRpbWF0ZWx5LCB0aGUgY2hhbmdlIGJvaWxzIGRvd24gdG8gdGhlIGBkZXZtX211dGV4X2luaXRgIHJlcGxhY2VtZW50IGFuZCBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IGEgc3dpdGNoLiBJJiMzOTttIGxlYW5pbmcgdG93YXJkIG1hcmtpbmcgdGhpcyBhcyAqV29ydGhGdXp6aW5nPWZhbHNlKi4gVGhpcyBsb29rcyBsaWtlIGEgaGFyZHdhcmUtZGVwZW5kZW50IGRyaXZlciB0aGF0IHdvdWxkIHJlcXVpcmUgYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KCkJ1dCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIERTQSBzd2l0Y2hlcyAtIHRoZXkgc29tZXRpbWVzIGdldCBmdXp6ZWQsIHRob3VnaCBpdCYjMzk7cyB1c3VhbGx5IHdpdGggYSAmIzM0O2R1bW15JiMzNDsgRFNBIGRyaXZlci4gSXMgdGhlcmUgYSAmIzM0O2R1bW15JiMzNDsgRFNBIGRyaXZlciBJIGNhbiBsZXZlcmFnZT8gTGV0JiMzOTtzIGdvIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHVtbXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTI1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCBrc3o4OHgzX2RyaXZlX3N0cmVuZ3Roc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTI2MS0gKlxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MjYyOiAqIFRoaXMgZnVuY3Rpb24gaXMgYSBkdW1teSBoYW5kbGVyLiBTZWUga3N6X3BoeWxpbmtfbWFjX2VuYWJsZV90eF9scGkoKSBmb3JcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTI2My0gKiBhIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIEVFRS9MUEkgaGFuZGxpbmcgaW4gS1NaIHN3aXRjaGVzLlxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xOTQ9c3RhdGljIHUzMlxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE5NTpfbXQ3NTMwX3VubG9ja2VkX3JlYWQoc3RydWN0IG10NzUzMF9kdW1teV9wb2xsICpwKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE5Ni17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTIwMD1zdGF0aWMgdTMyXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjAxOl9tdDc1MzBfcmVhZChzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgKnApXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjAyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjE1PW10NzUzMF9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTYte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjIxNzpcdHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIxOC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjQ3PW10NzUzMF9mZGJfY21kKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgZW51bSBtdDc1MzBfZmRiX2NtZCBjbWQsIHUzMiAqcnNwKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNTAtXHRpbnQgcmV0O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI1MTpcdHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI1Mi1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NTQ5PW10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBkZXZhZCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNTUxLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo1NTI6XHRzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy01NTMtXHR1MzIgcmVnLCB2YWw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTU5Nz1tdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGRldmFkLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy01OTkte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjYwMDpcdHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTYwMS1cdHUzMiB2YWwsIHJlZztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NjQ0PW10NzUzMV9pbmRfYzIyX3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjQ1LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2NDY6XHRzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy02NDctXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz02ODE9bXQ3NTMxX2luZF9jMjJfcGh5X3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY4My17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6Njg0Olx0c3RydWN0IG10NzUzMF9kdW1teV9wb2xsIHA7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjg1LVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTYyNz1tdDc1MzBfdmxhbl9jbWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBlbnVtIG10NzUzMF92bGFuX2NtZCBjbWQsIHUxNiB2aWQpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTYyOC17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTYyOTpcdHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2MzAtXHR1MzIgdmFsO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0yNDIwPW10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0MjUtXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm1hY19ucDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyNDI2Olx0c3RydWN0IG10NzUzMF9kdW1teV9wb2xsIHA7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjQyNy1cdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTI3MDc9bXQ3NTMxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjcwOS1cdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjcxMDpcdHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI3MTEtXHR1MzIgdmFsLCBpZDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmg9OTI5PXN0cnVjdCBtdDc1MzBfaHdfc3RhdHMge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaC05MzQtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmg6OTM1OnN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmgtOTM2LVx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaC05MzktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmg6OTQwOnN0YXRpYyBpbmxpbmUgdm9pZCBJTklUX01UNzUzMF9EVU1NWV9QT0xMKHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCAqcCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaC05NDEtXHRcdFx0XHRcdCAgc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM2NzI9c3RhdGljIGludCBtdjg4ZTYzMjBfc2V0dXBfZXJyYXRhKHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcClcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTM2NzMte1xuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6MzY3NDpcdHUxNiBkdW1teTtcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTM2NzUtXHRpbnQgZXJyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTM2ODMtXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzozNjg0Olx0cmV0dXJuIG12ODhlNnh4eF9wb3J0X2hpZGRlbl9yZWFkKGNoaXAsIDAsIDB4ZiwgMHg3LCBcdTAwMjZkdW1teSk7XG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zNjg1LX1cbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0xNzAxPXN0cnVjdCBmZWxpeF9zdHJlYW0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTE3MDMtXHR1bnNpZ25lZCBsb25nIGlkO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MTcwNDpcdGJvb2wgZHVtbXk7XG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0xNzA1LVx0aW50IHBvcnRzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jPTE4NTQ9c3RhdGljIGludCB2c2M5OTU5X3N0cmVhbV90YWJsZV9hZGQoc3RydWN0IG9jZWxvdCAqb2NlbG90LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTE4NjUtXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoxODY2Olx0aWYgKCFzdHJlYW0tXHUwMDNlZHVtbXkpIHtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTE4NjctXHRcdHJldCA9IHZzYzk5NTlfbWFjdF9zdHJlYW1fc2V0KG9jZWxvdCwgc3RyZWFtX2VudHJ5LCBleHRhY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jPTE4OTE9c3RhdGljIHZvaWQgdnNjOTk1OV9zdHJlYW1fdGFibGVfZGVsKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0xODkzLXtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjE4OTQ6XHRpZiAoIXN0cmVhbS1cdTAwM2VkdW1teSlcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTE4OTUtXHRcdHZzYzk5NTlfbWFjdF9zdHJlYW1fc2V0KG9jZWxvdCwgc3RyZWFtLCBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0yMjQ1PXN0YXRpYyBpbnQgdnNjOTk1OV9wc2ZwX2ZpbHRlcl9hZGQoc3RydWN0IG9jZWxvdCAqb2NlbG90LCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0yMzU2LVx0XHRcdFx0XHRcdFx0ICBcdTAwMjZvbGRfc2ZpKTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjIzNTc6XHRcdFx0c3RyZWFtX2VudHJ5LVx1MDAzZWR1bW15ID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTIzNTgtXHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjM2MC1cdFx0XHRcdFx0XHRcdCAgXHUwMDI2c2ZpKTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjIzNjE6XHRcdFx0c3RyZWFtLmR1bW15ID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTIzNjItXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0yMzk4PXN0YXRpYyBpbnQgdnNjOTk1OV9wc2ZwX2ZpbHRlcl9kZWwoc3RydWN0IG9jZWxvdCAqb2NlbG90LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTI0MzQtXHRcdHN0cmVhbV9lbnRyeS1cdTAwM2Vwb3J0cyA9IEJJVChzdHJlYW1fZW50cnktXHUwMDNlcG9ydCk7XG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoyNDM1Olx0XHRpZiAoc3RyZWFtX2VudHJ5LVx1MDAzZWR1bW15KSB7XG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoyNDM2Olx0XHRcdHN0cmVhbV9lbnRyeS1cdTAwM2VkdW1teSA9IGZhbHNlO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjQzNy1cdFx0XHR2c2M5OTU5X21hY3Rfc3RyZWFtX3NldChvY2Vsb3QsIHN0cmVhbV9lbnRyeSwgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy01Mi1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM6NTM6LyogZHVtbXkgcmVnIHRvIGNoYW5nZSBwYWdlICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTU0LSNkZWZpbmUgQVI5MzMxX1NXX1JFR19QQUdFXHRcdFx0MHg0MDAwMFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM9OTUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIGFyOTMzMV92YWxpZF9yZWdzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy05NzMtXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jOjk3NDpcdC8qIGR1bW15IHBhZ2Ugc2VsZWN0b3IgcmVnICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTk3NS1cdHJlZ21hcF9yZWdfcmFuZ2UoQVI5MzMxX1NXX1JFR19QQUdFLCBBUjkzMzFfU1dfUkVHX1BBR0UpLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZGV2bGluay5jLTgtICogc2l6ZSwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIG1heGltdW0gcG9zc2libGUgc3RhdGljIGNvbmZpZyBzaXplIGJ5XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2RldmxpbmsuYzo5OiAqIGNyZWF0aW5nIGEgZHVtbXkgY29uZmlnIHdpdGggYWxsIHRhYmxlIGVudHJpZXMgcG9wdWxhdGVkIHRvIHRoZSBtYXgsIGFuZCBnZXRcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZGV2bGluay5jLTEwLSAqIGl0cyBwYWNrZWQgbGVuZ3RoLiBUaGlzIGlzIGRvbmUgZHluYW1pY2FsbHkgYXMgb3Bwb3NlZCB0byBzaW1wbHkgaGFyZGNvZGluZ1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYz04NDI9c3RhdGljIHNpemVfdCBzamExMTEwX2Nic19lbnRyeV9wYWNraW5nKHZvaWQgKmJ1Ziwgdm9pZCAqZW50cnlfcHRyLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYy04NTYtXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmM6ODU3OnN0YXRpYyB2b2lkIHNqYTExMTBfZHVtbXlfY21kX3BhY2tpbmcodm9pZCAqYnVmLCBzdHJ1Y3Qgc2phMTEwNV9keW5fY21kICpjbWQsXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmMtODU4LVx0XHRcdFx0ICAgICAgZW51bSBwYWNraW5nX29wIG9wKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYz0xMDU4PWNvbnN0IHN0cnVjdCBzamExMTA1X2R5bmFtaWNfdGFibGVfb3BzIHNqYTExMTBfZHluX29wc1tCTEtfSURYX01BWF9EWU5dID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYy0xMTQ4LVx0XHQuZW50cnlfcGFja2luZyA9IHNqYTExMTBfeG1paV9wYXJhbXNfZW50cnlfcGFja2luZyxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYzoxMTQ5Olx0XHQuY21kX3BhY2tpbmcgPSBzamExMTEwX2R1bW15X2NtZF9wYWNraW5nLFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9keW5hbWljX2NvbmZpZy5jLTExNTAtXHRcdC5tYXhfZW50cnlfY291bnQgPSBTSkExMTA1X01BWF9YTUlJX1BBUkFNU19DT1VOVCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmMtMTE2NC1cdFx0LmVudHJ5X3BhY2tpbmcgPSBzamExMTEwX2wyX2ZvcndhcmRpbmdfcGFyYW1zX2VudHJ5X3BhY2tpbmcsXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmM6MTE2NTpcdFx0LmNtZF9wYWNraW5nID0gc2phMTExMF9kdW1teV9jbWRfcGFja2luZyxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYy0xMTY2LVx0XHQubWF4X2VudHJ5X2NvdW50ID0gU0pBMTEwNV9NQVhfTDJfRk9SV0FSRElOR19QQVJBTVNfQ09VTlQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYz0zODM9c2phMTEwNV90YXNfY2hlY2tfY29uZmxpY3RzKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDYzLSAqIFRvIHJldXNlIHRoZSBzamExMTA1X3Rhc19jaGVja19jb25mbGljdHMgbG9naWMgd2l0aG91dCByZWZhY3RvcmluZyBpdCxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM6NDY0OiAqIGNvbnZlcnQgdGhlIGdhdGluZyBjb25maWd1cmF0aW9uIHRvIGEgZHVtbXkgdGMtdGFwcmlvIG9mZmxvYWQgc3RydWN0dXJlLlxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00NjUtICovXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jPTQ2Nj1ib29sIHNqYTExMDVfZ2F0aW5nX2NoZWNrX2NvbmZsaWN0cyhzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ3MC1cdHNpemVfdCBudW1fZW50cmllcyA9IGdhdGluZ19jZmctXHUwMDNlbnVtX2VudHJpZXM7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ3MTpcdHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICpkdW1teTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDcyLVx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gcHJpdi1cdTAwM2Vkcztcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ3OS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM6NDgwOlx0ZHVtbXkgPSBremFsbG9jX2ZsZXgoKmR1bW15LCBlbnRyaWVzLCBudW1fZW50cmllcyk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ4MTpcdGlmICghZHVtbXkpIHtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDgyLVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ4NS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM6NDg2Olx0ZHVtbXktXHUwMDNlbnVtX2VudHJpZXMgPSBudW1fZW50cmllcztcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM6NDg3Olx0ZHVtbXktXHUwMDNlYmFzZV90aW1lID0gZ2F0aW5nX2NmZy1cdTAwM2ViYXNlX3RpbWU7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ4ODpcdGR1bW15LVx1MDAzZWN5Y2xlX3RpbWUgPSBnYXRpbmdfY2ZnLVx1MDAzZWN5Y2xlX3RpbWU7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ4OS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDkwLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShlLCBcdTAwMjZnYXRpbmdfY2ZnLVx1MDAzZWVudHJpZXMsIGxpc3QpXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ5MTpcdFx0ZHVtbXktXHUwMDNlZW50cmllc1tpJiM0MzsmIzQzO10uaW50ZXJ2YWwgPSBlLVx1MDAzZWludGVydmFsO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00OTItXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ5My1cdGlmIChwb3J0ICE9IC0xKSB7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ5NDpcdFx0Y29uZmxpY3QgPSBzamExMTA1X3Rhc19jaGVja19jb25mbGljdHMocHJpdiwgcG9ydCwgZHVtbXkpO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00OTUtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDk3LVx0XHRcdGNvbmZsaWN0ID0gc2phMTEwNV90YXNfY2hlY2tfY29uZmxpY3RzKHByaXYsIHBvcnQsXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ5ODpcdFx0XHRcdFx0XHRcdCAgICAgICBkdW1teSk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ5OS1cdFx0XHRpZiAoY29uZmxpY3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy01MDMtXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjUwNDpcdGtmcmVlKGR1bW15KTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNTA1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmg9NzI9c3RydWN0IHNqYTExMDVfdGFzX2RhdGEge1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuaDo3MzpcdHU4IGR1bW15O1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuaC03NC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTUyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogUmVhbHRlayBTd2l0Y2ggRHJpdmVyKioKCk9rYXksIHNvIHRoZSBzaXR1YXRpb24gaXMgdGhpczogdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIHJlbGlhYmx5IGVtdWxhdGUgYSBSZWFsdGVrIHN3aXRjaCB3aXRoIGEgZHJpdmVyLCBhdCBsZWFzdCBub3Qgd2l0aCB0aGUgc3RhbmRhcmQgUUVNVSBzZXR1cCBJJiMzOTttIGZhbWlsaWFyIHdpdGguIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IHJlcGxhY2luZyBgbXV0ZXhfaW5pdGAgd2l0aCBgZGV2bV9tdXRleF9pbml0YCBhbmQgYWRkaW5nIHNvbWUgZXJyb3IgaGFuZGxpbmcuIFRoYXQmIzM5O3Mgbm90IHRoZSBwcm9ibGVtLCB0aG91Z2guIFRoZSBpc3N1ZSBpcyB0aGlzIGRyaXZlciBpcyBkZWVwbHkgdGllZCB0byB0aGUgaGFyZHdhcmU7IGl0JiMzOTtzIGEgaGFyZHdhcmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIGV4cGVjdGluZyBwaHlzaWNhbCBpbnRlcmFjdGlvbiwgc3BlY2lmaWNhbGx5IGNvbW11bmljYXRpb24gdmlhIE1ESU8vU01JIHRvIHJlYWQgdGhlIGNoaXAgSUQuIFNvLCBiYXNlZCBvbiB0aGF0LCBteSBpbml0aWFsIGFzc2Vzc21lbnQgd291bGQgYmUgdGhhdCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkhvd2V2ZXIsIGJlZm9yZSBJIGNvbXBsZXRlbHkgd3JpdGUgaXQgb2ZmLCBJIHNob3VsZCBjb25maXJtIGEgY291cGxlIG9mIHRoaW5ncy4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIGBydGw4MzY1bWJfc3RhdHNfc2V0dXBgIGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudC4gSXQgbG9va3MgbGlrZSBgcnRsODM2NW1iX3N0YXRzX3NldHVwYCBpcyByZWFjaGVkIGZyb20gYHJ0bDgzNjVtYl9zZXR1cGAsIGFuZCBgcnRsODM2NW1iX3NldHVwYCBpcyB0aGUgYHNldHVwYCBjYWxsYmFjayBmb3IgdGhlIGBkc2Ffc3dpdGNoX29wc2AuIFRoYXQgbWVhbnMgaXQmIzM5O3MgcGFydCBvZiB0aGUgRGV2aWNlIFN3aXRjaCBBcmNoaXRlY3R1cmUgKERTQSkgcHJvYmUgYW5kIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBTaW5jZSB3ZSYjMzk7cmUgbWlzc2luZyB0aGUgaGFyZHdhcmUsIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24sIGBydGw4M3h4X3Byb2JlYCwgd29uJiMzOTt0IGdldCBjYWxsZWQsIG9yLCBpZiB3ZSBzb21laG93IG1hbmFnZWQgdG8gZm9yY2UgaXRzIGV4ZWN1dGlvbiB2aWEgcGxhdGZvcm0gZGV2aWNlIGluamVjdGlvbiwgaXQmIzM5O3MgZ29pbmcgdG8gZmFpbCBlYXJseSBpbiB0aGUgY2hpcCBJRCByZWFkIHN0YWdlIHZpYSBNRElPL1NNSS4gVGhhdCBgcnRsODN4eF9wcm9iZWAgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSB3b3J0aCBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRsODN4eF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM9MTE0PUVYUE9SVF9TWU1CT0xfTlNfR1BMKHJ0bDgzeHhfc2V0dXBfdXNlcl9tZGlvLCBcJiMzNDtSRUFMVEVLX0RTQVwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTExNi0vKipcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYzoxMTc6ICogcnRsODN4eF9wcm9iZSgpIC0gcHJvYmUgYSBSZWFsdGVrIHN3aXRjaFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTExOC0gKiBAZGV2OiB0aGUgZGV2aWNlIGJlaW5nIHByb2JlZFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYz0xMzA9c3RydWN0IHJlYWx0ZWtfcHJpdiAqXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MTMxOnJ0bDgzeHhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTEzMi1cdCAgICAgIGNvbnN0IHN0cnVjdCByZWFsdGVrX2ludGVyZmFjZV9pbmZvICppbnRlcmZhY2VfaW5mbylcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMjIyLX1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYzoyMjM6RVhQT1JUX1NZTUJPTF9OU19HUEwocnRsODN4eF9wcm9iZSwgXCYjMzQ7UkVBTFRFS19EU0FcJiMzNDspO1xuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTIyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEwMAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGBydGw4M3h4X3Byb2JlYDoKCioqRGVjb2RpbmcgdGhlIGBydGw4M3h4X3Byb2JlYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHdoYXQgdGhlIGBydGw4M3h4X3Byb2JlYCBmdW5jdGlvbiBpcyBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCwgc28gSSYjMzk7bSB0aGlua2luZywgd2hhdCYjMzk7cyBpdHMgcHVycG9zZT8gSXMgaXQgcmVzcG9uc2libGUgZm9yIGRldGVjdGluZyB0aGUgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBSVEw4M3h4IGNoaXAsIG9uIHRoZSBzeXN0ZW0/IElzIGl0IHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMsIGxpa2UgbWVtb3J5IHJlZ2lvbnMsIElSUXMsIG9yIGNsb2NrIHNpZ25hbHM/IFBlcmhhcHMgaXQmIzM5O3MgaW5pdGlhbGl6aW5nIHRoZSBoYXJkd2FyZSwgc2V0dGluZyBzb21lIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgb3IgcmVnaXN0ZXJpbmcgdGhlIGRldmljZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuZWwgc3Vic3lzdGVtcy4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlLCBtZXRpY3Vsb3VzbHksIHRvIHNlZS4gVGhpcyBpcyBsaWtlbHkgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgZHJpdmVyLCByaWdodD8gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgYmVnaW5zLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdHN0cnVjdCByZWFsdGVrX3ByaXYgKlxuIDEzMTpcdHJ0bDgzeHhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LFxuIDEzMjpcdFx0ICAgICAgY29uc3Qgc3RydWN0IHJlYWx0ZWtfaW50ZXJmYWNlX2luZm8gKmludGVyZmFjZV9pbmZvKVxuIDEzMzpcdHtcbiAxMzQ6XHRcdGNvbnN0IHN0cnVjdCByZWFsdGVrX3ZhcmlhbnQgKnZhcjtcbiAxMzU6XHRcdHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXY7XG4gMTM2Olx0XHRzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByYyA9IHtcbiAxMzc6XHRcdFx0LnJlZ19iaXRzID0gMTAsIC8qIEE0Li5BMCBSNC4uUjAgKi9cbiAxMzg6XHRcdFx0LnZhbF9iaXRzID0gMTYsXG4gMTM5Olx0XHRcdC5yZWdfc3RyaWRlID0gMSxcbiAxNDA6XHRcdFx0Lm1heF9yZWdpc3RlciA9IDB4ZmZmZixcbiAxNDE6XHRcdFx0LnJlZ19mb3JtYXRfZW5kaWFuID0gUkVHTUFQX0VORElBTl9CSUcsXG4gMTQyOlx0XHRcdC5yZWdfcmVhZCA9IGludGVyZmFjZV9pbmZvLVx1MDAzZXJlZ19yZWFkLFxuIDE0MzpcdFx0XHQucmVnX3dyaXRlID0gaW50ZXJmYWNlX2luZm8tXHUwMDNlcmVnX3dyaXRlLFxuIDE0NDpcdFx0XHQuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX05PTkUsXG4gMTQ1Olx0XHRcdC5sb2NrID0gcnRsODN4eF9sb2NrLFxuIDE0NjpcdFx0XHQudW5sb2NrID0gcnRsODN4eF91bmxvY2ssXG4gMTQ3Olx0XHR9O1xuIDE0ODpcdFx0aW50IHJldDtcbiAxNDk6XHRcbiAxNTA6XHRcdHZhciA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xuIDE1MTpcdFx0aWYgKCF2YXIpXG4gMTUyOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIDE1MzpcdFxuIDE1NDpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVfYWRkKHNpemVvZigqcHJpdiksIHZhci1cdTAwM2VjaGlwX2RhdGFfc3opLFxuIDE1NTpcdFx0XHRcdCAgICBHRlBfS0VSTkVMKTtcbiAxNTY6XHRcdGlmICghcHJpdilcbiAxNTc6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gMTU4Olx0XG4gMTU5Olx0XHRyZXQgPSBkZXZtX211dGV4X2luaXQoZGV2LCBcdTAwMjZwcml2LVx1MDAzZW1hcF9sb2NrKTtcbiAxNjA6XHRcdGlmIChyZXQpXG4gMTYxOlx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gMTYyOlx0XG4gMTYzOlx0XHRyZXQgPSBkZXZtX211dGV4X2luaXQoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXZsYW5fbG9jayk7XG4gMTY0Olx0XHRpZiAocmV0KVxuIDE2NTpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIDE2NjpcdFxuIDE2NzpcdFx0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXHUwMDI2cHJpdi1cdTAwM2VsMl9sb2NrKTtcbiAxNjg6XHRcdGlmIChyZXQpXG4gMTY5Olx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gMTcwOlx0XG4gMTcxOlx0XHRyYy5sb2NrX2FyZyA9IHByaXY7XG4gMTcyOlx0XHRwcml2LVx1MDAzZW1hcCA9IGRldm1fcmVnbWFwX2luaXQoZGV2LCBOVUxMLCBwcml2LCBcdTAwMjZyYyk7XG4gMTczOlx0XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlbWFwKSkge1xuIDE3NDpcdFx0XHRyZXQgPSBQVFJfRVJSKHByaXYtXHUwMDNlbWFwKTtcbiAxNzU6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O3JlZ21hcCBpbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4gMTc2Olx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gMTc3Olx0XHR9XG4gMTc4Olx0XG4gMTc5Olx0XHRyYy5kaXNhYmxlX2xvY2tpbmcgPSB0cnVlO1xuIDE4MDpcdFx0cHJpdi1cdTAwM2VtYXBfbm9sb2NrID0gZGV2bV9yZWdtYXBfaW5pdChkZXYsIE5VTEwsIHByaXYsIFx1MDAyNnJjKTtcbiAxODE6XHRcdGlmIChJU19FUlIocHJpdi1cdTAwM2VtYXBfbm9sb2NrKSkge1xuIDE4MjpcdFx0XHRyZXQgPSBQVFJfRVJSKHByaXYtXHUwMDNlbWFwX25vbG9jayk7XG4gMTgzOlx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtyZWdtYXAgaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDE4NDpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIDE4NTpcdFx0fVxuIDE4NjpcdFxuIDE4NzpcdFx0LyogTGluayBmb3J3YXJkIGFuZCBiYWNrd2FyZCAqL1xuIDE4ODpcdFx0cHJpdi1cdTAwM2VkZXYgPSBkZXY7XG4gMTg5Olx0XHRwcml2LVx1MDAzZXZhcmlhbnQgPSB2YXI7XG4gMTkwOlx0XHRwcml2LVx1MDAzZW9wcyA9IHZhci1cdTAwM2VvcHM7XG4gMTkxOlx0XHRwcml2LVx1MDAzZWNoaXBfZGF0YSA9ICh2b2lkICopcHJpdiAmIzQzOyBzaXplb2YoKnByaXYpO1xuIDE5MjpcdFxuIDE5MzpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiAxOTQ6XHRcbiAxOTU6XHRcdHByaXYtXHUwMDNlbGVkc19kaXNhYmxlZCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXHUwMDNlb2Zfbm9kZSxcbiAxOTY6XHRcdFx0XHRcdFx0XHQgICAgXCYjMzQ7cmVhbHRlayxkaXNhYmxlLWxlZHNcJiMzNDspO1xuIDE5NzpcdFxuIDE5ODpcdFx0LyogVE9ETzogaWYgcG93ZXIgaXMgc29mdHdhcmUgY29udHJvbGxlZCwgc2V0IHVwIGFueSByZWd1bGF0b3JzIGhlcmUgKi9cbiAxOTk6XHRcdHByaXYtXHUwMDNlcmVzZXRfY3RsID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9vcHRpb25hbChkZXYsIE5VTEwpO1xuIDIwMDpcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlc2V0X2N0bCkpXG4gMjAxOlx0XHRcdHJldHVybiBkZXZfZXJyX2Nhc3RfcHJvYmUoZGV2LCBwcml2LVx1MDAzZXJlc2V0X2N0bCxcbiAyMDI6XHRcdFx0XHRcdFx0ICBcJiMzNDtmYWlsZWQgdG8gZ2V0IHJlc2V0IGNvbnRyb2xcXG5cJiMzNDspO1xuIDIwMzpcdFxuIDIwNDpcdFx0cHJpdi1cdTAwM2VyZXNldCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwgXCYjMzQ7cmVzZXRcJiMzNDssIEdQSU9EX09VVF9MT1cpO1xuIDIwNTpcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlc2V0KSkge1xuIDIwNjpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBSRVNFVCBHUElPXFxuXCYjMzQ7KTtcbiAyMDc6XHRcdFx0cmV0dXJuIEVSUl9DQVNUKHByaXYtXHUwMDNlcmVzZXQpO1xuIDIwODpcdFx0fVxuIDIwOTpcdFxuIDIxMDpcdFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgcHJpdik7XG4gMjExOlx0XG4gMjEyOlx0XHRpZiAocHJpdi1cdTAwM2VyZXNldF9jdGwgfHwgcHJpdi1cdTAwM2VyZXNldCkge1xuIDIxMzpcdFx0XHRydGw4M3h4X3Jlc2V0X2Fzc2VydChwcml2KTtcbiAyMTQ6XHRcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O2Fzc2VydGVkIFJFU0VUXFxuXCYjMzQ7KTtcbiAyMTU6XHRcdFx0bXNsZWVwKFJFQUxURUtfSFdfU1RPUF9ERUxBWSk7XG4gMjE2Olx0XHRcdHJ0bDgzeHhfcmVzZXRfZGVhc3NlcnQocHJpdik7XG4gMjE3Olx0XHRcdG1zbGVlcChSRUFMVEVLX0hXX1NUQVJUX0RFTEFZKTtcbiAyMTg6XHRcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O2RlYXNzZXJ0ZWQgUkVTRVRcXG5cJiMzNDspO1xuIDIxOTpcdFx0fVxuIDIyMDpcdFxuIDIyMTpcdFx0cmV0dXJuIHByaXY7XG4gMjIyOlx0fVxuIDIyMzpcdEVYUE9SVF9TWU1CT0xfTlNfR1BMKHJ0bDgzeHhfcHJvYmUsIFwmIzM0O1JFQUxURUtfRFNBXCYjMzQ7KTtcbiAyMjQ6XHRcbiAyMjU6XHQvKipcbiAyMjY6XHQgKiBydGw4M3h4X3JlZ2lzdGVyX3N3aXRjaCgpIC0gZGV0ZWN0cyBhbmQgcmVnaXN0ZXIgYSBzd2l0Y2hcbiAyMjc6XHQgKiBAcHJpdjogcmVhbHRla19wcml2IHBvaW50ZXJcbiAyMjg6XHQgKlxuIDIyOTpcdCAqIFRoaXMgZnVuY3Rpb24gZmlyc3QgY2hlY2tzIHRoZSBzd2l0Y2ggY2hpcCBJRCBhbmQgcmVnaXN0ZXIgYSBEU0FcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NTUKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJUTDgzeHggSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgY2hpcCBJRCB2ZXJpZmljYXRpb24gaGFwcGVuZWQgd2l0aGluIHRoZSBgcnRsODN4eF9wcm9iZWAgZnVuY3Rpb24uIEJ1dCBub3cgSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb2RlLCBhbmQgSSBzZWUgdGhhdCBpdCBhY3R1YWxseSBkb2VzbiYjMzk7dCEgSXQganVzdCBzZXRzIHVwIHRoZSByZWdpc3RlciBtYXAgYW5kIHBlcmZvcm1zIGEgZGV2aWNlIHJlc2V0LiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBkZXRhaWwuIFNvLCBpZiB0aGUgSUQgY2hlY2sgKmlzbiYjMzk7dCogaGVyZSwgd2hlcmUgaXMgaXQgaGFwcGVuaW5nPyBSaWdodCwgaXQmIzM5O3MgdmVyeSBsaWtlbHkgaGFwcGVuaW5nIGluIGBydGw4M3h4X3JlZ2lzdGVyX3N3aXRjaGAuIExldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhleSBhcmUgbWFraW5nIHN1cmUgd2UmIzM5O3JlIHRhbGtpbmcgdG8gdGhlIHJpZ2h0IFJUTDgzeHggdmFyaWFudC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB2ZXJpZmljYXRpb24gaXMgZ29pbmcgZG93biwgSSBzdXNwZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyNTpcdC8qKlxuIDIyNjpcdCAqIHJ0bDgzeHhfcmVnaXN0ZXJfc3dpdGNoKCkgLSBkZXRlY3RzIGFuZCByZWdpc3RlciBhIHN3aXRjaFxuIDIyNzpcdCAqIEBwcml2OiByZWFsdGVrX3ByaXYgcG9pbnRlclxuIDIyODpcdCAqXG4gMjI5Olx0ICogVGhpcyBmdW5jdGlvbiBmaXJzdCBjaGVja3MgdGhlIHN3aXRjaCBjaGlwIElEIGFuZCByZWdpc3RlciBhIERTQVxuIDIzMDpcdCAqIHN3aXRjaC5cbiAyMzE6XHQgKlxuIDIzMjpcdCAqIENvbnRleHQ6IENhbiBzbGVlcC4gVGFrZXMgYW5kIHJlbGVhc2VzIHByaXYtXHUwMDNlbWFwX2xvY2suXG4gMjMzOlx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGZvciBmYWlsdXJlLlxuIDIzNDpcdCAqL1xuIDIzNTpcdGludCBydGw4M3h4X3JlZ2lzdGVyX3N3aXRjaChzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KVxuIDIzNjpcdHtcbiAyMzc6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4gMjM4Olx0XHRpbnQgcmV0O1xuIDIzOTpcdFxuIDI0MDpcdFx0cmV0ID0gcHJpdi1cdTAwM2VvcHMtXHUwMDNlZGV0ZWN0KHByaXYpO1xuIDI0MTpcdFx0aWYgKHJldCkge1xuIDI0MjpcdFx0XHRkZXZfZXJyX3Byb2JlKHByaXYtXHUwMDNlZGV2LCByZXQsIFwmIzM0O3VuYWJsZSB0byBkZXRlY3Qgc3dpdGNoXFxuXCYjMzQ7KTtcbiAyNDM6XHRcdFx0cmV0dXJuIHJldDtcbiAyNDQ6XHRcdH1cbiAyNDU6XHRcbiAyNDY6XHRcdGRzLVx1MDAzZXByaXYgPSBwcml2O1xuIDI0NzpcdFx0ZHMtXHUwMDNlZGV2ID0gcHJpdi1cdTAwM2VkZXY7XG4gMjQ4Olx0XHRkcy1cdTAwM2VvcHMgPSBwcml2LVx1MDAzZXZhcmlhbnQtXHUwMDNlZHNfb3BzO1xuIDI0OTpcdFx0ZHMtXHUwMDNlcGh5bGlua19tYWNfb3BzID0gcHJpdi1cdTAwM2V2YXJpYW50LVx1MDAzZXBoeWxpbmtfbWFjX29wcztcbiAyNTA6XHRcdGRzLVx1MDAzZW51bV9wb3J0cyA9IHByaXYtXHUwMDNlbnVtX3BvcnRzO1xuIDI1MTpcdFxuIDI1MjpcdFx0cmV0ID0gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XG4gMjUzOlx0XHRpZiAocmV0KSB7XG4gMjU0Olx0XHRcdGRldl9lcnJfcHJvYmUocHJpdi1cdTAwM2VkZXYsIHJldCwgXCYjMzQ7dW5hYmxlIHRvIHJlZ2lzdGVyIHN3aXRjaFxcblwmIzM0Oyk7XG4gMjU1Olx0XHRcdHJldHVybiByZXQ7XG4gMjU2Olx0XHR9XG4gMjU3Olx0XG4gMjU4Olx0XHRyZXR1cm4gMDtcbiAyNTk6XHR9XG4gMjYwOlx0RVhQT1JUX1NZTUJPTF9OU19HUEwocnRsODN4eF9yZWdpc3Rlcl9zd2l0Y2gsIFwmIzM0O1JFQUxURUtfRFNBXCYjMzQ7KTtcbiAyNjE6XHRcbiAyNjI6XHQvKipcbiAyNjM6XHQgKiBydGw4M3h4X3VucmVnaXN0ZXJfc3dpdGNoKCkgLSB1bnJlZ2lzdGVyIGEgc3dpdGNoXG4gMjY0Olx0ICogQHByaXY6IHJlYWx0ZWtfcHJpdiBwb2ludGVyXG4gMjY1Olx0ICpcbiAyNjY6XHQgKiBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXIgYSBEU0Egc3dpdGNoLlxuIDI2NzpcdCAqXG4gMjY4Olx0ICogQ29udGV4dDogQ2FuIHNsZWVwLlxuIDI2OTpcdCAqIFJldHVybjogTm90aGluZy5cbiAyNzA6XHQgKi9cbiAyNzE6XHR2b2lkIHJ0bDgzeHhfdW5yZWdpc3Rlcl9zd2l0Y2goc3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdilcbiAyNzI6XHR7XG4gMjczOlx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuIDI3NDpcdFxuIDI3NTpcdFx0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKGRzKTtcbiAyNzY6XHR9XG4gMjc3Olx0RVhQT1JUX1NZTUJPTF9OU19HUEwocnRsODN4eF91bnJlZ2lzdGVyX3N3aXRjaCwgXCYjMzQ7UkVBTFRFS19EU0FcJiMzNDspO1xuIDI3ODpcdFxuIDI3OTpcdC8qKlxuIDI4MDpcdCAqIHJ0bDgzeHhfc2h1dGRvd24oKSAtIHNodXRkb3duIGEgc3dpdGNoXG4gMjgxOlx0ICogQHByaXY6IHJlYWx0ZWtfcHJpdiBwb2ludGVyXG4gMjgyOlx0ICpcbiAyODM6XHQgKiBUaGlzIGZ1bmN0aW9uIHNodXRzIGRvd24gdGhlIERTQSBzd2l0Y2ggYW5kIGNsZWFucyB0aGUgcGxhdGZvcm0gZHJpdmVyIGRhdGEsXG4gMjg0Olx0ICogdG8gcHJldmVudCByZWFsdGVrX3tzbWksbWRpb31fcmVtb3ZlKCkgZnJvbSBydW5uaW5nIGFmdGVyd2FyZHMsIHdoaWNoIGlzXG4gMjg1Olx0ICogcG9zc2libGUgaWYgdGhlIHBhcmVudCBidXMgaW1wbGVtZW50cyBpdHMgb3duIC5zaHV0ZG93bigpIGFzIC5yZW1vdmUoKS5cbiAyODY6XHQgKlxuIDI4NzpcdCAqIENvbnRleHQ6IENhbiBzbGVlcC5cbiAyODg6XHQgKiBSZXR1cm46IE5vdGhpbmcuXG4gMjg5Olx0ICovXG4gMjkwOlx0dm9pZCBydGw4M3h4X3NodXRkb3duKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG4gMjkxOlx0e1xuIDI5MjpcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiAyOTM6XHRcbiAyOTQ6XHRcdGRzYV9zd2l0Y2hfc2h1dGRvd24oZHMpO1xuIDI5NTpcdFxuIDI5NjpcdFx0ZGV2X3NldF9kcnZkYXRhKHByaXYtXHUwMDNlZGV2LCBOVUxMKTtcbiAyOTc6XHR9XG4gMjk4Olx0RVhQT1JUX1NZTUJPTF9OU19HUEwocnRsODN4eF9zaHV0ZG93biwgXCYjMzQ7UkVBTFRFS19EU0FcJiMzNDspO1xuIDI5OTpcdFxuIDMwMDpcdC8qKlxuIDMwMTpcdCAqIHJ0bDgzeHhfcmVtb3ZlKCkgLSBDbGVhbnVwIGEgcmVhbHRlayBzd2l0Y2ggZHJpdmVyXG4gMzAyOlx0ICogQHByaXY6IHJlYWx0ZWtfcHJpdiBwb2ludGVyXG4gMzAzOlx0ICpcbiAzMDQ6XHQgKiBQbGFjZWhvbGQgZm9yIGNvbW1vbiBjbGVhbnVwIHByb2NlZHVyZXMuXG4gMzA1Olx0ICpcbiAzMDY6XHQgKiBDb250ZXh0OiBBbnlcbiAzMDc6XHQgKiBSZXR1cm46IG5vdGhpbmdcbiAzMDg6XHQgKi9cbiAzMDk6XHR2b2lkIHJ0bDgzeHhfcmVtb3ZlKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG4gMzEwOlx0e1xuIDMxMTpcdH1cbiAzMTI6XHRFWFBPUlRfU1lNQk9MX05TX0dQTChydGw4M3h4X3JlbW92ZSwgXCYjMzQ7UkVBTFRFS19EU0FcJiMzNDspO1xuIDMxMzpcdFxuIDMxNDpcdHZvaWQgcnRsODN4eF9yZXNldF9hc3NlcnQoc3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdilcbiAzMTU6XHR7XG4gMzE2Olx0XHRpbnQgcmV0O1xuIDMxNzpcdFxuIDMxODpcdFx0cmV0ID0gcmVzZXRfY29udHJvbF9hc3NlcnQocHJpdi1cdTAwM2VyZXNldF9jdGwpO1xuIDMxOTpcdFx0aWYgKHJldClcbiAzMjA6XHRcdFx0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXYsXG4gMzIxOlx0XHRcdFx0IFwmIzM0O0ZhaWxlZCB0byBhc3NlcnQgdGhlIHN3aXRjaCByZXNldCBjb250cm9sOiAlcGVcXG5cJiMzNDssXG4gMzIyOlx0XHRcdFx0IEVSUl9QVFIocmV0KSk7XG4gMzIzOlx0XG4gMzI0Olx0XHRncGlvZF9zZXRfdmFsdWUocHJpdi1cdTAwM2VyZXNldCwgdHJ1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjU1CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGBkZXRlY3RgIGNhbGxiYWNrIGlzIHRoZSBnYXRla2VlcGVyIGhlcmUsIGNoZWNraW5nIHRoYXQgY3JpdGljYWwgY2hpcCBJRC4gV2l0aG91dCB0aGUgcmlnaHQgaGFyZHdhcmUsIGFzIGlzIHRoZSBjYXNlIGluIG91ciBRRU1VIHNldHVwLCB0aGF0IGBkZXRlY3RgIHJvdXRpbmUgZmFpbHMgaW1tZWRpYXRlbHkuIFRoaXMgaXMga2V5LiBUaGF0IG1lYW5zIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCAqbmV2ZXIqIGdldHMgY2FsbGVkLCB3aGljaCBpbiB0dXJuIG1lYW5zIGBydGw4MzY1bWJfc2V0dXBgIGlzIGFsc28gc2tpcHBlZC4gTXkgbW9kaWZpZWQgY29kZT8gQ29tcGxldGVseSB1bnJlYWNoYWJsZSB3aXRoaW4gdGhpcyBzaW11bGF0ZWQgZW52aXJvbm1lbnQuIFRoZSBhY3R1YWwgY29kZSBjaGFuZ2UgYm9pbHMgZG93biB0byBhIHNpbXBsZSBgZGV2bV9tdXRleF9pbml0YCwgd2hpY2gsIGZyYW5rbHksIGlzIGluY3JlZGlibHkgdHJpdmlhbCBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gVGhlcmVmb3JlLCBnaXZlbiBhbGwgb2YgdGhpcywgdGhlIHBvdGVudGlhbCBiZW5lZml0IG9mIGZ1enppbmcgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aCBpcyBuZWdsaWdpYmxlLiAqKldvcnRoRnV6emluZz1mYWxzZS4qKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIFJUTDgzNjVNQiBEU0Egc3dpdGNoIGRyaXZlciwgcmVwbGFjaW5nIGBtdXRleF9pbml0YCB3aXRoIGBkZXZtX211dGV4X2luaXRgIGFuZCBhZGRpbmcgZXJyb3IgaGFuZGxpbmcuIFRoaXMgZHJpdmVyIGlzIGZvciBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoUmVhbHRlayBzd2l0Y2hlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIHJlYWQgdGhlIGNoaXAgSUQgdmlhIE1ESU8vU01JLCB3aGljaCB3aWxsIGZhaWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHRoZSBoYXJkd2FyZSwgcHJldmVudGluZyB0aGUgbW9kaWZpZWQgc2V0dXAgZnVuY3Rpb25zIGZyb20gZXZlciBiZWluZyByZWFjaGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBwdXJlbHkgYSB0cml2aWFsIHJlc291cmNlIG1hbmFnZW1lbnQgdXBkYXRlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgUlRMODM2NU1CIERTQSBzd2l0Y2ggZHJpdmVyLCByZXBsYWNpbmcgYG11dGV4X2luaXRgIHdpdGggYGRldm1fbXV0ZXhfaW5pdGAgYW5kIGFkZGluZyBlcnJvciBoYW5kbGluZy4gVGhpcyBkcml2ZXIgaXMgZm9yIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChSZWFsdGVrIHN3aXRjaGVzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBEdXJpbmcgcHJvYmUsIHRoZSBkcml2ZXIgYXR0ZW1wdHMgdG8gcmVhZCB0aGUgY2hpcCBJRCB2aWEgTURJTy9TTUksIHdoaWNoIHdpbGwgZmFpbCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGhvdXQgdGhlIGhhcmR3YXJlLCBwcmV2ZW50aW5nIHRoZSBtb2RpZmllZCBzZXR1cCBmdW5jdGlvbnMgZnJvbSBldmVyIGJlaW5nIHJlYWNoZWQuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlIGlzIHB1cmVseSBhIHRyaXZpYWwgcmVzb3VyY2UgbWFuYWdlbWVudCB1cGRhdGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6MzMuODE5MDQ2NjA1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2NDgxNDUwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIFJUTDgzNjVNQiBEU0Egc3dpdGNoIGRyaXZlciwgcmVwbGFjaW5nIGBtdXRleF9pbml0YCB3aXRoIGBkZXZtX211dGV4X2luaXRgIGFuZCBhZGRpbmcgZXJyb3IgaGFuZGxpbmcuIFRoaXMgZHJpdmVyIGlzIGZvciBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoUmVhbHRlayBzd2l0Y2hlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIHJlYWQgdGhlIGNoaXAgSUQgdmlhIE1ESU8vU01JLCB3aGljaCB3aWxsIGZhaWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHRoZSBoYXJkd2FyZSwgcHJldmVudGluZyB0aGUgbW9kaWZpZWQgc2V0dXAgZnVuY3Rpb25zIGZyb20gZXZlciBiZWluZyByZWFjaGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBwdXJlbHkgYSB0cml2aWFsIHJlc291cmNlIG1hbmFnZW1lbnQgdXBkYXRlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6MzMuODE5MDU3MDk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDM3MzA3NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMTU2ZGE1YWZmYTRkNmM1Yjk5YzA5NzUxZGViNzc1YWIwNjA1OThhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDEyOjA4OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jXFxuaW5kZXggNWFjMDkxYmY5M2M5MjMuLmFhMDUzNzViMDkwYTNlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jXFxuQEAgLTE5ODgsMTYgKzE5ODgsMTkgQEAgc3RhdGljIHZvaWQgcnRsODM2NW1iX2dldF9zdGF0czY0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZwLVxcdTAwM2VzdGF0c19sb2NrKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnRsODM2NW1iX3N0YXRzX3NldHVwKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXFxuK3N0YXRpYyBpbnQgcnRsODM2NW1iX3N0YXRzX3NldHVwKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0bDgzNjVtYiAqbWIgPSBwcml2LVxcdTAwM2VjaGlwX2RhdGE7XFxuIFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG4gXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qIFBlci1jaGlwIGdsb2JhbCBtdXRleCB0byBwcm90ZWN0IE1JQiBjb3VudGVyIGFjY2Vzcywgc2luY2UgZG9pbmdcXG4gXFx0ICogc28gcmVxdWlyZXMgYWNjZXNzaW5nIGEgc2VyaWVzIG9mIHJlZ2lzdGVycyBpbiBhIHBhcnRpY3VsYXIgb3JkZXIuXFxuIFxcdCAqL1xcbi1cXHRtdXRleF9pbml0KFxcdTAwMjZtYi1cXHUwMDNlbWliX2xvY2spO1xcbitcXHRyZXQgPSBkZXZtX211dGV4X2luaXQocHJpdi1cXHUwMDNlZGV2LCBcXHUwMDI2bWItXFx1MDAzZW1pYl9sb2NrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfYXZhaWxhYmxlX3BvcnQoZHAsIGRzKSB7XFxuIFxcdFxcdHN0cnVjdCBydGw4MzY1bWJfcG9ydCAqcCA9IFxcdTAwMjZtYi1cXHUwMDNlcG9ydHNbZHAtXFx1MDAzZWluZGV4XTtcXG5AQCAtMjAxMCw2ICsyMDEzLDggQEAgc3RhdGljIHZvaWQgcnRsODM2NW1iX3N0YXRzX3NldHVwKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cC1cXHUwMDNlbWliX3dvcmssIHJ0bDgzNjVtYl9zdGF0c19wb2xsKTtcXG4gXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bDgzNjVtYl9zdGF0c190ZWFyZG93bihzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KVxcbkBAIC0yNTY3LDcgKzI1NzIsMTIgQEAgc3RhdGljIGludCBydGw4MzY1bWJfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBTdGFydCBzdGF0aXN0aWNzIGNvdW50ZXIgcG9sbGluZyAqL1xcbi1cXHRydGw4MzY1bWJfc3RhdHNfc2V0dXAocHJpdik7XFxuK1xcdHJldCA9IHJ0bDgzNjVtYl9zdGF0c19zZXR1cChwcml2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBzZXR1cCBzdGF0czogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRnb3RvIG91dF90ZWFyZG93bl9pcnE7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jIGIvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jXFxuaW5kZXggNzExMjRlY2NhOTJmMmEuLjlkZDUwYjIwYzAwMGEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguY1xcbkBAIC0xNTYsOSArMTU2LDE3IEBAIHJ0bDgzeHhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRpZiAoIXByaXYpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiBcXG4tXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlbWFwX2xvY2spO1xcbi1cXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2V2bGFuX2xvY2spO1xcbi1cXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VsMl9sb2NrKTtcXG4rXFx0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZW1hcF9sb2NrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFxuK1xcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2V2bGFuX2xvY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZWwyX2xvY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiBcXG4gXFx0cmMubG9ja19hcmcgPSBwcml2O1xcbiBcXHRwcml2LVxcdTAwM2VtYXAgPSBkZXZtX3JlZ21hcF9pbml0KGRldiwgTlVMTCwgcHJpdiwgXFx1MDAyNnJjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6MzQuNDIzNzEzMTAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjgwNDM0NzI4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIFJUTDgzNjVNQiBEU0Egc3dpdGNoIGRyaXZlciwgcmVwbGFjaW5nIGBtdXRleF9pbml0YCB3aXRoIGBkZXZtX211dGV4X2luaXRgIGFuZCBhZGRpbmcgZXJyb3IgaGFuZGxpbmcuIFRoaXMgZHJpdmVyIGlzIGZvciBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoUmVhbHRlayBzd2l0Y2hlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIHJlYWQgdGhlIGNoaXAgSUQgdmlhIE1ESU8vU01JLCB3aGljaCB3aWxsIGZhaWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHRoZSBoYXJkd2FyZSwgcHJldmVudGluZyB0aGUgbW9kaWZpZWQgc2V0dXAgZnVuY3Rpb25zIGZyb20gZXZlciBiZWluZyByZWFjaGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBwdXJlbHkgYSB0cml2aWFsIHJlc291cmNlIG1hbmFnZW1lbnQgdXBkYXRlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjE1NmRhNWFmZmE0ZDZjNWI5OWMwOTc1MWRlYjc3NWFiMDYwNTk4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDEyOjA4OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYyBiL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmNcbmluZGV4IDVhYzA5MWJmOTNjOTIzLi5hYTA1Mzc1YjA5MGEzZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmNcbkBAIC0xOTg4LDE2ICsxOTg4LDE5IEBAIHN0YXRpYyB2b2lkIHJ0bDgzNjVtYl9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0c3Bpbl91bmxvY2soXHUwMDI2cC1cdTAwM2VzdGF0c19sb2NrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsODM2NW1iX3N0YXRzX3NldHVwKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG4rc3RhdGljIGludCBydGw4MzY1bWJfc3RhdHNfc2V0dXAoc3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgcnRsODM2NW1iICptYiA9IHByaXYtXHUwMDNlY2hpcF9kYXRhO1xuIFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXHRpbnQgcmV0O1xuIFxuIFx0LyogUGVyLWNoaXAgZ2xvYmFsIG11dGV4IHRvIHByb3RlY3QgTUlCIGNvdW50ZXIgYWNjZXNzLCBzaW5jZSBkb2luZ1xuIFx0ICogc28gcmVxdWlyZXMgYWNjZXNzaW5nIGEgc2VyaWVzIG9mIHJlZ2lzdGVycyBpbiBhIHBhcnRpY3VsYXIgb3JkZXIuXG4gXHQgKi9cbi1cdG11dGV4X2luaXQoXHUwMDI2bWItXHUwMDNlbWliX2xvY2spO1xuK1x0cmV0ID0gZGV2bV9tdXRleF9pbml0KHByaXYtXHUwMDNlZGV2LCBcdTAwMjZtYi1cdTAwM2VtaWJfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9hdmFpbGFibGVfcG9ydChkcCwgZHMpIHtcbiBcdFx0c3RydWN0IHJ0bDgzNjVtYl9wb3J0ICpwID0gXHUwMDI2bWItXHUwMDNlcG9ydHNbZHAtXHUwMDNlaW5kZXhdO1xuQEAgLTIwMTAsNiArMjAxMyw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgzNjVtYl9zdGF0c19zZXR1cChzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KVxuIFx0XHQgKi9cbiBcdFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cC1cdTAwM2VtaWJfd29yaywgcnRsODM2NW1iX3N0YXRzX3BvbGwpO1xuIFx0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgzNjVtYl9zdGF0c190ZWFyZG93bihzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KVxuQEAgLTI1NjcsNyArMjU3MiwxMiBAQCBzdGF0aWMgaW50IHJ0bDgzNjVtYl9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHR9XG4gXG4gXHQvKiBTdGFydCBzdGF0aXN0aWNzIGNvdW50ZXIgcG9sbGluZyAqL1xuLVx0cnRsODM2NW1iX3N0YXRzX3NldHVwKHByaXYpO1xuK1x0cmV0ID0gcnRsODM2NW1iX3N0YXRzX3NldHVwKHByaXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBzZXR1cCBzdGF0czogJXBlXFxuXCIsXG4rXHRcdFx0RVJSX1BUUihyZXQpKTtcbitcdFx0Z290byBvdXRfdGVhcmRvd25faXJxO1xuK1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jIGIvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jXG5pbmRleCA3MTEyNGVjY2E5MmYyYS4uOWRkNTBiMjBjMDAwYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguY1xuQEAgLTE1Niw5ICsxNTYsMTcgQEAgcnRsODN4eF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZW1hcF9sb2NrKTtcbi1cdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2V2bGFuX2xvY2spO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWwyX2xvY2spO1xuK1x0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXHUwMDI2cHJpdi1cdTAwM2VtYXBfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1xuK1x0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXHUwMDI2cHJpdi1cdTAwM2V2bGFuX2xvY2spO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFx1MDAyNnByaXYtXHUwMDNlbDJfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIFxuIFx0cmMubG9ja19hcmcgPSBwcml2O1xuIFx0cHJpdi1cdTAwM2VtYXAgPSBkZXZtX3JlZ21hcF9pbml0KGRldiwgTlVMTCwgcHJpdiwgXHUwMDI2cmMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6MzQuNDIzNzE1OTMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5Nzc1ODQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWFsdGVrIERTQSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgbWFraW5nIGEgY291cGxlIG9mIGNoYW5nZXMgdG8gdGhlIFJlYWx0ZWsgRFNBIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgaXQncyB0b3VjaGluZyBgcnRsODM2NW1iX21haW4uY2AgYW5kIGBydGw4M3h4LmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOyB0aGV5J3JlIHJlcGxhY2luZyB0aGUgc3RhbmRhcmQgYG11dGV4X2luaXRgIHdpdGggYGRldm1fbXV0ZXhfaW5pdGAgYW5kIGFkZGluZyBzb21lIHJldHVybiB2YWx1ZSBoYW5kbGluZy4gU21hcnQsIG1pbmltaXppbmcgcG90ZW50aWFsIHJlc291cmNlIGxlYWtzIGFuZCBoYW5kbGluZyBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyBncmFjZWZ1bGx5LiBTdGFuZGFyZCBzdHVmZiBmb3IgZGV2aWNlIGRyaXZlcnMuXG5cbkxldCBtZSBzZWUsIHRoaXMgaXMgYSBEU0EgZHJpdmVyLCBhIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgZHJpdmVyLCByaWdodD8gRm9yIFJlYWx0ZWsgc3dpdGNoZXMsIHBhcnRpY3VsYXJseSB0aGUgUlRMODM2NU1CIGFuZCBSVEw4M3h4IHNlcmllcy4gQ2xlYXJseSBoYXJkd2FyZS1zcGVjaWZpYywgd2hpY2ggaXMgZ29vZCB0byBrbm93IGZyb20gdGhlIGdldC1nby4gTm8gZ2VuZXJhbGl0aWVzIGhlcmUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyBhbHdheXMgZnV6emluZy4gQ2FuIEkgdGhyb3cgdGhpcyBpbnRvIFFFTVUgYW5kIHN0YXJ0IHBva2luZyBhdCBpdD8gV2l0aCBEU0Egc3dpdGNoZXMsIGl0IHVzdWFsbHkgYm9pbHMgZG93biB0byBob3cgdGhlIHN3aXRjaCBpcyBjb25uZWN0ZWQuIFR5cGljYWxseSwgaXQncyBNRElPLCBTUEksIG9yIEkyQy4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGlzIHByb2JlZC4gVGhhdCdsbCBiZSBrZXkgdG8gYW55IGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODkyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6MzguODIxNDc3Nzc2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDg4Nzk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGw4M3h4X3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uYz0xMjE9aW50IHJlYWx0ZWtfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uYy0xMjYtXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1tZGlvLmM6MTI3OlxcdHByaXYgPSBydGw4M3h4X3Byb2JlKGRldiwgXFx1MDAyNnJlYWx0ZWtfbWRpb19pbmZvKTtcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uYy0xMjgtXFx0aWYgKElTX0VSUihwcml2KSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3JlYWx0ZWstc21pLmM9MzMxPWludCByZWFsdGVrX3NtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1zbWkuYy0zMzYtXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1zbWkuYzozMzc6XFx0cHJpdiA9IHJ0bDgzeHhfcHJvYmUoZGV2LCBcXHUwMDI2cmVhbHRla19zbWlfaW5mbyk7XFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1zbWkuYy0zMzgtXFx0aWYgKElTX0VSUihwcml2KSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYz0xMTQ9RVhQT1JUX1NZTUJPTF9OU19HUEwocnRsODN4eF9zZXR1cF91c2VyX21kaW8sIFxcXCJSRUFMVEVLX0RTQVxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTExNi0vKipcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MTE3OiAqIHJ0bDgzeHhfcHJvYmUoKSAtIHByb2JlIGEgUmVhbHRlayBzd2l0Y2hcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMTE4LSAqIEBkZXY6IHRoZSBkZXZpY2UgYmVpbmcgcHJvYmVkXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM9MTMwPXN0cnVjdCByZWFsdGVrX3ByaXYgKlxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYzoxMzE6cnRsODN4eF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTEzMi1cXHQgICAgICBjb25zdCBzdHJ1Y3QgcmVhbHRla19pbnRlcmZhY2VfaW5mbyAqaW50ZXJmYWNlX2luZm8pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMjIyLX1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MjIzOkVYUE9SVF9TWU1CT0xfTlNfR1BMKHJ0bDgzeHhfcHJvYmUsIFxcXCJSRUFMVEVLX0RTQVxcXCIpO1xcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0yMjQtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4Lmg9MTQ9c3RydWN0IHJlYWx0ZWtfcHJpdiAqXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5oOjE1OnJ0bDgzeHhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguaC0xNi1cXHQgICAgICBjb25zdCBzdHJ1Y3QgcmVhbHRla19pbnRlcmZhY2VfaW5mbyAqaW50ZXJmYWNlX2luZm8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjowODozOC45NzYzNzIzMjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDMzODczMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBEcml2ZXIgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBSZWFsdGVrIHN3aXRjaCBkcml2ZXIgYW5kIHRoZSByZXBvcnRlZCBjaGFuZ2UuIEZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYWNjZXNzIG1ldGhvZCAtIGl0IHNlZW1zIGxpa2UgaXQncyBwcm9iZWQgdmlhIE1ESU8gb3IgU01JLCBwbGF0Zm9ybSBkZXZpY2Ugc3R1ZmYsIHJpZ2h0PyBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHdoZXRoZXIgSSBjYW4gZXZlbiBnZXQgdGhpcyBydW5uaW5nIGluIGEgUUVNVSBlbnZpcm9ubWVudCBmb3IgZnV6emluZy4gQ2FuIEkgbGV2ZXJhZ2Ugc3l6a2FsbGVyIGhlcmU/IEkga25vdyBzeXprYWxsZXIgY2FuIGluc3RhbnRpYXRlIHBsYXRmb3JtIGRldmljZXMsIHR5cGljYWxseSB0aHJvdWdoIGAvc3lzL2RldmljZXMvcGxhdGZvcm1gIG9yIHNpbWlsYXIgaW50ZXJmYWNlcy4gSG93ZXZlciwgcGxhdGZvcm0gZGV2aWNlIGluc3RhbnRpYXRpb24gb2Z0ZW4gcmVsaWVzIG9uIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUuXG5cbkhtbSwgd2FpdCwgaWYgc3l6a2FsbGVyICpjYW4qIGluamVjdCBub2RlcywgbWF5YmUuIEJ1dCwgZ2VuZXJhbGx5LCB0aGF0IGdldHMgaGFyZHdhcmUgc3BlY2lmaWMgcHJldHR5IGZhc3QuIFNvLCBsZXQncyBiYWNrIHVwIGFuZCBzZWUgaWYgdGhlcmUncyBhbnkgc29mdHdhcmUgZW11bGF0aW9uIHRvIHdvcmsgd2l0aC4gTm9wZSwgdGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgUmVhbHRlayBzd2l0Y2ggZHJpdmVyLiBBbmQgdGhlIGNoYW5nZSBpdHNlbGYuLi4gaXQncyByZWFsbHkganVzdCBhIGBtdXRleF9pbml0YCB0byBgZGV2bV9tdXRleF9pbml0YCBjb252ZXJzaW9uIHdpdGggc29tZSBhZGRlZCBlcnJvciBoYW5kbGluZy5cblxuSG9sZCBvbiBhIHNlY29uZCwgKmRldm1fbXV0ZXhfaW5pdCogaXMgYSBzdXBlciBzaW1wbGUgY2hhbmdlLCBhbG1vc3QgdHJpdmlhbC4gSXQncyBqdXN0IGEgbWFuYWdlZCBtdXRleCBpbml0aWFsaXphdGlvbiBhbmQgZXJyb3IgY2hlY2tpbmcuIE5vdywgSSdtIHF1ZXN0aW9uaW5nIHdoZXRoZXIgdGhpcyBpcyBldmVuICp3b3J0aCogZnV6emluZy4gSXQncyBhIHZlcnkgdGFyZ2V0ZWQgZHJpdmVyIGZvciBzcGVjaWZpYyBoYXJkd2FyZSwgYW5kIHRoZSBjb2RlIGNoYW5nZSBpcyBtaW5pbWFsLiBNeSBndXQgaXMgdGVsbGluZyBtZSB0aGlzIGlzbid0IGEgZ29vZCBjYW5kaWRhdGUuXG5cblVsdGltYXRlbHksIHRoZSBjaGFuZ2UgYm9pbHMgZG93biB0byB0aGUgYGRldm1fbXV0ZXhfaW5pdGAgcmVwbGFjZW1lbnQgYW5kIGNoZWNraW5nIHRoZSByZXR1cm4gdmFsdWUuIFRoaXMgaXMgYSBkcml2ZXIgZm9yIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgYSBzd2l0Y2guIEknbSBsZWFuaW5nIHRvd2FyZCBtYXJraW5nIHRoaXMgYXMgKldvcnRoRnV6emluZz1mYWxzZSouIFRoaXMgbG9va3MgbGlrZSBhIGhhcmR3YXJlLWRlcGVuZGVudCBkcml2ZXIgdGhhdCB3b3VsZCByZXF1aXJlIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cbkJ1dCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIERTQSBzd2l0Y2hlcyAtIHRoZXkgc29tZXRpbWVzIGdldCBmdXp6ZWQsIHRob3VnaCBpdCdzIHVzdWFsbHkgd2l0aCBhIFwiZHVtbXlcIiBEU0EgZHJpdmVyLiBJcyB0aGVyZSBhIFwiZHVtbXlcIiBEU0EgZHJpdmVyIEkgY2FuIGxldmVyYWdlPyBMZXQncyBnbyBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDY4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjA4OjQ1LjQxMDI0ODMyMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA2MDQzMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHVtbXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0yNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgga3N6ODh4M19kcml2ZV9zdHJlbmd0aHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTI2MS0gKlxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjI2MjogKiBUaGlzIGZ1bmN0aW9uIGlzIGEgZHVtbXkgaGFuZGxlci4gU2VlIGtzel9waHlsaW5rX21hY19lbmFibGVfdHhfbHBpKCkgZm9yXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjYzLSAqIGEgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgRUVFL0xQSSBoYW5kbGluZyBpbiBLU1ogc3dpdGNoZXMuXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTk0PXN0YXRpYyB1MzJcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTk1Ol9tdDc1MzBfdW5sb2NrZWRfcmVhZChzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgKnApXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE5Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjAwPXN0YXRpYyB1MzJcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjAxOl9tdDc1MzBfcmVhZChzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgKnApXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIwMi17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjE1PW10NzUzMF9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZylcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjE2LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjE3OlxcdHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTgtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjQ3PW10NzUzMF9mZGJfY21kKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgZW51bSBtdDc1MzBfZmRiX2NtZCBjbWQsIHUzMiAqcnNwKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI1MC1cXHRpbnQgcmV0O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyNTE6XFx0c3RydWN0IG10NzUzMF9kdW1teV9wb2xsIHA7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI1Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz01NDk9bXQ3NTMxX2luZF9jNDVfcGh5X3JlYWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGRldmFkLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTU1MS17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjU1MjpcXHRzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNTUzLVxcdHUzMiByZWcsIHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz01OTc9bXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBkZXZhZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy01OTkte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2MDA6XFx0c3RydWN0IG10NzUzMF9kdW1teV9wb2xsIHA7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTYwMS1cXHR1MzIgdmFsLCByZWc7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NjQ0PW10NzUzMV9pbmRfYzIyX3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY0NS17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjY0NjpcXHRzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjQ3LVxcdGludCByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NjgxPW10NzUzMV9pbmRfYzIyX3BoeV93cml0ZShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY4My17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjY4NDpcXHRzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjg1LVxcdGludCByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTYyNz1tdDc1MzBfdmxhbl9jbWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBlbnVtIG10NzUzMF92bGFuX2NtZCBjbWQsIHUxNiB2aWQpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2Mjgte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxNjI5OlxcdHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNjMwLVxcdHUzMiB2YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjQyMD1tdDc1MzBfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0MjUtXFx0c3RydWN0IGRldmljZV9ub2RlICptYWNfbnA7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI0MjY6XFx0c3RydWN0IG10NzUzMF9kdW1teV9wb2xsIHA7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0MjctXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0yNzA3PW10NzUzMV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjcwOS1cXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjcxMDpcXHRzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjcxMS1cXHR1MzIgdmFsLCBpZDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaD05Mjk9c3RydWN0IG10NzUzMF9od19zdGF0cyB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmgtOTM0LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaDo5MzU6c3RydWN0IG10NzUzMF9kdW1teV9wb2xsIHtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmgtOTM2LVxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaC05MzktXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5oOjk0MDpzdGF0aWMgaW5saW5lIHZvaWQgSU5JVF9NVDc1MzBfRFVNTVlfUE9MTChzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgKnAsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5oLTk0MS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM2NzI9c3RhdGljIGludCBtdjg4ZTYzMjBfc2V0dXBfZXJyYXRhKHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcClcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zNjczLXtcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzozNjc0OlxcdHUxNiBkdW1teTtcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zNjc1LVxcdGludCBlcnI7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zNjgzLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjM2ODQ6XFx0cmV0dXJuIG12ODhlNnh4eF9wb3J0X2hpZGRlbl9yZWFkKGNoaXAsIDAsIDB4ZiwgMHg3LCBcXHUwMDI2ZHVtbXkpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTM2ODUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9MTcwMT1zdHJ1Y3QgZmVsaXhfc3RyZWFtIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTE3MDMtXFx0dW5zaWduZWQgbG9uZyBpZDtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoxNzA0OlxcdGJvb2wgZHVtbXk7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTcwNS1cXHRpbnQgcG9ydHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0xODU0PXN0YXRpYyBpbnQgdnNjOTk1OV9zdHJlYW1fdGFibGVfYWRkKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTE4NjUtXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MTg2NjpcXHRpZiAoIXN0cmVhbS1cXHUwMDNlZHVtbXkpIHtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0xODY3LVxcdFxcdHJldCA9IHZzYzk5NTlfbWFjdF9zdHJlYW1fc2V0KG9jZWxvdCwgc3RyZWFtX2VudHJ5LCBleHRhY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9MTg5MT1zdGF0aWMgdm9pZCB2c2M5OTU5X3N0cmVhbV90YWJsZV9kZWwoc3RydWN0IG9jZWxvdCAqb2NlbG90LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTg5My17XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MTg5NDpcXHRpZiAoIXN0cmVhbS1cXHUwMDNlZHVtbXkpXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTg5NS1cXHRcXHR2c2M5OTU5X21hY3Rfc3RyZWFtX3NldChvY2Vsb3QsIHN0cmVhbSwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0yMjQ1PXN0YXRpYyBpbnQgdnNjOTk1OV9wc2ZwX2ZpbHRlcl9hZGQoc3RydWN0IG9jZWxvdCAqb2NlbG90LCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTIzNTYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2b2xkX3NmaSk7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MjM1NzpcXHRcXHRcXHRzdHJlYW1fZW50cnktXFx1MDAzZWR1bW15ID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0yMzU4LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0yMzYwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnNmaSk7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MjM2MTpcXHRcXHRcXHRzdHJlYW0uZHVtbXkgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTIzNjItXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9MjM5OD1zdGF0aWMgaW50IHZzYzk5NTlfcHNmcF9maWx0ZXJfZGVsKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTI0MzQtXFx0XFx0c3RyZWFtX2VudHJ5LVxcdTAwM2Vwb3J0cyA9IEJJVChzdHJlYW1fZW50cnktXFx1MDAzZXBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjI0MzU6XFx0XFx0aWYgKHN0cmVhbV9lbnRyeS1cXHUwMDNlZHVtbXkpIHtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoyNDM2OlxcdFxcdFxcdHN0cmVhbV9lbnRyeS1cXHUwMDNlZHVtbXkgPSBmYWxzZTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0yNDM3LVxcdFxcdFxcdHZzYzk5NTlfbWFjdF9zdHJlYW1fc2V0KG9jZWxvdCwgc3RyZWFtX2VudHJ5LCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtNTItXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzo1MzovKiBkdW1teSByZWcgdG8gY2hhbmdlIHBhZ2UgKi9cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTU0LSNkZWZpbmUgQVI5MzMxX1NXX1JFR19QQUdFXFx0XFx0XFx0MHg0MDAwMFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYz05NTE9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2UgYXI5MzMxX3ZhbGlkX3JlZ3NbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtOTczLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM6OTc0OlxcdC8qIGR1bW15IHBhZ2Ugc2VsZWN0b3IgcmVnICovXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy05NzUtXFx0cmVnbWFwX3JlZ19yYW5nZShBUjkzMzFfU1dfUkVHX1BBR0UsIEFSOTMzMV9TV19SRUdfUEFHRSksXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2RldmxpbmsuYy04LSAqIHNpemUsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHN0YXRpYyBjb25maWcgc2l6ZSBieVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZGV2bGluay5jOjk6ICogY3JlYXRpbmcgYSBkdW1teSBjb25maWcgd2l0aCBhbGwgdGFibGUgZW50cmllcyBwb3B1bGF0ZWQgdG8gdGhlIG1heCwgYW5kIGdldFxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZGV2bGluay5jLTEwLSAqIGl0cyBwYWNrZWQgbGVuZ3RoLiBUaGlzIGlzIGRvbmUgZHluYW1pY2FsbHkgYXMgb3Bwb3NlZCB0byBzaW1wbHkgaGFyZGNvZGluZ1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9keW5hbWljX2NvbmZpZy5jPTg0Mj1zdGF0aWMgc2l6ZV90IHNqYTExMTBfY2JzX2VudHJ5X3BhY2tpbmcodm9pZCAqYnVmLCB2b2lkICplbnRyeV9wdHIsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmMtODU2LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYzo4NTc6c3RhdGljIHZvaWQgc2phMTExMF9kdW1teV9jbWRfcGFja2luZyh2b2lkICpidWYsIHN0cnVjdCBzamExMTA1X2R5bl9jbWQgKmNtZCxcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmMtODU4LVxcdFxcdFxcdFxcdCAgICAgIGVudW0gcGFja2luZ19vcCBvcClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYz0xMDU4PWNvbnN0IHN0cnVjdCBzamExMTA1X2R5bmFtaWNfdGFibGVfb3BzIHNqYTExMTBfZHluX29wc1tCTEtfSURYX01BWF9EWU5dID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9keW5hbWljX2NvbmZpZy5jLTExNDgtXFx0XFx0LmVudHJ5X3BhY2tpbmcgPSBzamExMTEwX3htaWlfcGFyYW1zX2VudHJ5X3BhY2tpbmcsXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9keW5hbWljX2NvbmZpZy5jOjExNDk6XFx0XFx0LmNtZF9wYWNraW5nID0gc2phMTExMF9kdW1teV9jbWRfcGFja2luZyxcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmMtMTE1MC1cXHRcXHQubWF4X2VudHJ5X2NvdW50ID0gU0pBMTEwNV9NQVhfWE1JSV9QQVJBTVNfQ09VTlQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmMtMTE2NC1cXHRcXHQuZW50cnlfcGFja2luZyA9IHNqYTExMTBfbDJfZm9yd2FyZGluZ19wYXJhbXNfZW50cnlfcGFja2luZyxcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmM6MTE2NTpcXHRcXHQuY21kX3BhY2tpbmcgPSBzamExMTEwX2R1bW15X2NtZF9wYWNraW5nLFxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYy0xMTY2LVxcdFxcdC5tYXhfZW50cnlfY291bnQgPSBTSkExMTA1X01BWF9MMl9GT1JXQVJESU5HX1BBUkFNU19DT1VOVCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM9MzgzPXNqYTExMDVfdGFzX2NoZWNrX2NvbmZsaWN0cyhzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDYzLSAqIFRvIHJldXNlIHRoZSBzamExMTA1X3Rhc19jaGVja19jb25mbGljdHMgbG9naWMgd2l0aG91dCByZWZhY3RvcmluZyBpdCxcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ2NDogKiBjb252ZXJ0IHRoZSBnYXRpbmcgY29uZmlndXJhdGlvbiB0byBhIGR1bW15IHRjLXRhcHJpbyBvZmZsb2FkIHN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ2NS0gKi9cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jPTQ2Nj1ib29sIHNqYTExMDVfZ2F0aW5nX2NoZWNrX2NvbmZsaWN0cyhzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDcwLVxcdHNpemVfdCBudW1fZW50cmllcyA9IGdhdGluZ19jZmctXFx1MDAzZW51bV9lbnRyaWVzO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM6NDcxOlxcdHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICpkdW1teTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ3Mi1cXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBwcml2LVxcdTAwM2VkcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDc5LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM6NDgwOlxcdGR1bW15ID0ga3phbGxvY19mbGV4KCpkdW1teSwgZW50cmllcywgbnVtX2VudHJpZXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM6NDgxOlxcdGlmICghZHVtbXkpIHtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ4Mi1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00ODUtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYzo0ODY6XFx0ZHVtbXktXFx1MDAzZW51bV9lbnRyaWVzID0gbnVtX2VudHJpZXM7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYzo0ODc6XFx0ZHVtbXktXFx1MDAzZWJhc2VfdGltZSA9IGdhdGluZ19jZmctXFx1MDAzZWJhc2VfdGltZTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ4ODpcXHRkdW1teS1cXHUwMDNlY3ljbGVfdGltZSA9IGdhdGluZ19jZmctXFx1MDAzZWN5Y2xlX3RpbWU7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00ODktXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00OTAtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlLCBcXHUwMDI2Z2F0aW5nX2NmZy1cXHUwMDNlZW50cmllcywgbGlzdClcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ5MTpcXHRcXHRkdW1teS1cXHUwMDNlZW50cmllc1tpKytdLmludGVydmFsID0gZS1cXHUwMDNlaW50ZXJ2YWw7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00OTItXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00OTMtXFx0aWYgKHBvcnQgIT0gLTEpIHtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ5NDpcXHRcXHRjb25mbGljdCA9IHNqYTExMDVfdGFzX2NoZWNrX2NvbmZsaWN0cyhwcml2LCBwb3J0LCBkdW1teSk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00OTUtXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDk3LVxcdFxcdFxcdGNvbmZsaWN0ID0gc2phMTEwNV90YXNfY2hlY2tfY29uZmxpY3RzKHByaXYsIHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYzo0OTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGR1bW15KTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ5OS1cXHRcXHRcXHRpZiAoY29uZmxpY3QpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTUwMy1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjUwNDpcXHRrZnJlZShkdW1teSk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy01MDUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5oPTcyPXN0cnVjdCBzamExMTA1X3Rhc19kYXRhIHtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5oOjczOlxcdHU4IGR1bW15O1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmgtNzQtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6NDUuODYwODU5OTg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEyNzIwNjcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQ6IFJlYWx0ZWsgU3dpdGNoIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBzaXR1YXRpb24gaXMgdGhpczogdGhlcmUncyBubyB3YXkgdG8gcmVsaWFibHkgZW11bGF0ZSBhIFJlYWx0ZWsgc3dpdGNoIHdpdGggYSBkcml2ZXIsIGF0IGxlYXN0IG5vdCB3aXRoIHRoZSBzdGFuZGFyZCBRRU1VIHNldHVwIEknbSBmYW1pbGlhciB3aXRoLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwganVzdCByZXBsYWNpbmcgYG11dGV4X2luaXRgIHdpdGggYGRldm1fbXV0ZXhfaW5pdGAgYW5kIGFkZGluZyBzb21lIGVycm9yIGhhbmRsaW5nLiBUaGF0J3Mgbm90IHRoZSBwcm9ibGVtLCB0aG91Z2guIFRoZSBpc3N1ZSBpcyB0aGlzIGRyaXZlciBpcyBkZWVwbHkgdGllZCB0byB0aGUgaGFyZHdhcmU7IGl0J3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gSXQncyBleHBlY3RpbmcgcGh5c2ljYWwgaW50ZXJhY3Rpb24sIHNwZWNpZmljYWxseSBjb21tdW5pY2F0aW9uIHZpYSBNRElPL1NNSSB0byByZWFkIHRoZSBjaGlwIElELiBTbywgYmFzZWQgb24gdGhhdCwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHdvdWxkIGJlIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkhvd2V2ZXIsIGJlZm9yZSBJIGNvbXBsZXRlbHkgd3JpdGUgaXQgb2ZmLCBJIHNob3VsZCBjb25maXJtIGEgY291cGxlIG9mIHRoaW5ncy4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgYHJ0bDgzNjVtYl9zdGF0c19zZXR1cGAgaXMgZXZlbiByZWFjaGFibGUgaW4gYSBRRU1VIGVudmlyb25tZW50LiBJdCBsb29rcyBsaWtlIGBydGw4MzY1bWJfc3RhdHNfc2V0dXBgIGlzIHJlYWNoZWQgZnJvbSBgcnRsODM2NW1iX3NldHVwYCwgYW5kIGBydGw4MzY1bWJfc2V0dXBgIGlzIHRoZSBgc2V0dXBgIGNhbGxiYWNrIGZvciB0aGUgYGRzYV9zd2l0Y2hfb3BzYC4gVGhhdCBtZWFucyBpdCdzIHBhcnQgb2YgdGhlIERldmljZSBTd2l0Y2ggQXJjaGl0ZWN0dXJlIChEU0EpIHByb2JlIGFuZCByZWdpc3RyYXRpb24gcHJvY2Vzcy4gU2luY2Ugd2UncmUgbWlzc2luZyB0aGUgaGFyZHdhcmUsIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiwgYHJ0bDgzeHhfcHJvYmVgLCB3b24ndCBnZXQgY2FsbGVkLCBvciwgaWYgd2Ugc29tZWhvdyBtYW5hZ2VkIHRvIGZvcmNlIGl0cyBleGVjdXRpb24gdmlhIHBsYXRmb3JtIGRldmljZSBpbmplY3Rpb24sIGl0J3MgZ29pbmcgdG8gZmFpbCBlYXJseSBpbiB0aGUgY2hpcCBJRCByZWFkIHN0YWdlIHZpYSBNRElPL1NNSS4gVGhhdCBgcnRsODN4eF9wcm9iZWAgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSB3b3J0aCBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTUyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjA4OjUwLjk4ODA2OTcyMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMyODgyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRsODN4eF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTExND1FWFBPUlRfU1lNQk9MX05TX0dQTChydGw4M3h4X3NldHVwX3VzZXJfbWRpbywgXFxcIlJFQUxURUtfRFNBXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMTE2LS8qKlxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYzoxMTc6ICogcnRsODN4eF9wcm9iZSgpIC0gcHJvYmUgYSBSZWFsdGVrIHN3aXRjaFxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMTgtICogQGRldjogdGhlIGRldmljZSBiZWluZyBwcm9iZWRcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYz0xMzA9c3RydWN0IHJlYWx0ZWtfcHJpdiAqXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEzMTpydGw4M3h4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMTMyLVxcdCAgICAgIGNvbnN0IHN0cnVjdCByZWFsdGVrX2ludGVyZmFjZV9pbmZvICppbnRlcmZhY2VfaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0yMjItfVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYzoyMjM6RVhQT1JUX1NZTUJPTF9OU19HUEwocnRsODN4eF9wcm9iZSwgXFxcIlJFQUxURUtfRFNBXFxcIik7XFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTIyNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6NTEuMTcxMzY0NTAyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzODAzMjA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgYHJ0bDgzeHhfcHJvYmVgOlxuXG4qKkRlY29kaW5nIHRoZSBgcnRsODN4eF9wcm9iZWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgd2hhdCB0aGUgYHJ0bDgzeHhfcHJvYmVgIGZ1bmN0aW9uIGlzIGRvaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0LCBzbyBJJ20gdGhpbmtpbmcsIHdoYXQncyBpdHMgcHVycG9zZT8gSXMgaXQgcmVzcG9uc2libGUgZm9yIGRldGVjdGluZyB0aGUgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBSVEw4M3h4IGNoaXAsIG9uIHRoZSBzeXN0ZW0/IElzIGl0IHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMsIGxpa2UgbWVtb3J5IHJlZ2lvbnMsIElSUXMsIG9yIGNsb2NrIHNpZ25hbHM/IFBlcmhhcHMgaXQncyBpbml0aWFsaXppbmcgdGhlIGhhcmR3YXJlLCBzZXR0aW5nIHNvbWUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBvciByZWdpc3RlcmluZyB0aGUgZGV2aWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY29kZSwgbWV0aWN1bG91c2x5LCB0byBzZWUuIFRoaXMgaXMgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGRyaXZlciwgcmlnaHQ/IFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGJlZ2lucy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEwMCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjA4OjU0LjQwOTM5OTc1N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI5NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0c3RydWN0IHJlYWx0ZWtfcHJpdiAqXFxuIDEzMTpcXHRydGw4M3h4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gMTMyOlxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCByZWFsdGVrX2ludGVyZmFjZV9pbmZvICppbnRlcmZhY2VfaW5mbylcXG4gMTMzOlxcdHtcXG4gMTM0OlxcdFxcdGNvbnN0IHN0cnVjdCByZWFsdGVrX3ZhcmlhbnQgKnZhcjtcXG4gMTM1OlxcdFxcdHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXY7XFxuIDEzNjpcXHRcXHRzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByYyA9IHtcXG4gMTM3OlxcdFxcdFxcdC5yZWdfYml0cyA9IDEwLCAvKiBBNC4uQTAgUjQuLlIwICovXFxuIDEzODpcXHRcXHRcXHQudmFsX2JpdHMgPSAxNixcXG4gMTM5OlxcdFxcdFxcdC5yZWdfc3RyaWRlID0gMSxcXG4gMTQwOlxcdFxcdFxcdC5tYXhfcmVnaXN0ZXIgPSAweGZmZmYsXFxuIDE0MTpcXHRcXHRcXHQucmVnX2Zvcm1hdF9lbmRpYW4gPSBSRUdNQVBfRU5ESUFOX0JJRyxcXG4gMTQyOlxcdFxcdFxcdC5yZWdfcmVhZCA9IGludGVyZmFjZV9pbmZvLVxcdTAwM2VyZWdfcmVhZCxcXG4gMTQzOlxcdFxcdFxcdC5yZWdfd3JpdGUgPSBpbnRlcmZhY2VfaW5mby1cXHUwMDNlcmVnX3dyaXRlLFxcbiAxNDQ6XFx0XFx0XFx0LmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9OT05FLFxcbiAxNDU6XFx0XFx0XFx0LmxvY2sgPSBydGw4M3h4X2xvY2ssXFxuIDE0NjpcXHRcXHRcXHQudW5sb2NrID0gcnRsODN4eF91bmxvY2ssXFxuIDE0NzpcXHRcXHR9O1xcbiAxNDg6XFx0XFx0aW50IHJldDtcXG4gMTQ5OlxcdFxcbiAxNTA6XFx0XFx0dmFyID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XFxuIDE1MTpcXHRcXHRpZiAoIXZhcilcXG4gMTUyOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZV9hZGQoc2l6ZW9mKCpwcml2KSwgdmFyLVxcdTAwM2VjaGlwX2RhdGFfc3opLFxcbiAxNTU6XFx0XFx0XFx0XFx0ICAgIEdGUF9LRVJORUwpO1xcbiAxNTY6XFx0XFx0aWYgKCFwcml2KVxcbiAxNTc6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIDE1ODpcXHRcXG4gMTU5OlxcdFxcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VtYXBfbG9jayk7XFxuIDE2MDpcXHRcXHRpZiAocmV0KVxcbiAxNjE6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXZsYW5fbG9jayk7XFxuIDE2NDpcXHRcXHRpZiAocmV0KVxcbiAxNjU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZWwyX2xvY2spO1xcbiAxNjg6XFx0XFx0aWYgKHJldClcXG4gMTY5OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdHJjLmxvY2tfYXJnID0gcHJpdjtcXG4gMTcyOlxcdFxcdHByaXYtXFx1MDAzZW1hcCA9IGRldm1fcmVnbWFwX2luaXQoZGV2LCBOVUxMLCBwcml2LCBcXHUwMDI2cmMpO1xcbiAxNzM6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VtYXApKSB7XFxuIDE3NDpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHByaXYtXFx1MDAzZW1hcCk7XFxuIDE3NTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcInJlZ21hcCBpbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuIDE3NjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiAxNzc6XFx0XFx0fVxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHRyYy5kaXNhYmxlX2xvY2tpbmcgPSB0cnVlO1xcbiAxODA6XFx0XFx0cHJpdi1cXHUwMDNlbWFwX25vbG9jayA9IGRldm1fcmVnbWFwX2luaXQoZGV2LCBOVUxMLCBwcml2LCBcXHUwMDI2cmMpO1xcbiAxODE6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VtYXBfbm9sb2NrKSkge1xcbiAxODI6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihwcml2LVxcdTAwM2VtYXBfbm9sb2NrKTtcXG4gMTgzOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwicmVnbWFwIGluaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gMTg0OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIDE4NTpcXHRcXHR9XFxuIDE4NjpcXHRcXG4gMTg3OlxcdFxcdC8qIExpbmsgZm9yd2FyZCBhbmQgYmFja3dhcmQgKi9cXG4gMTg4OlxcdFxcdHByaXYtXFx1MDAzZWRldiA9IGRldjtcXG4gMTg5OlxcdFxcdHByaXYtXFx1MDAzZXZhcmlhbnQgPSB2YXI7XFxuIDE5MDpcXHRcXHRwcml2LVxcdTAwM2VvcHMgPSB2YXItXFx1MDAzZW9wcztcXG4gMTkxOlxcdFxcdHByaXYtXFx1MDAzZWNoaXBfZGF0YSA9ICh2b2lkICopcHJpdiArIHNpemVvZigqcHJpdik7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0cHJpdi1cXHUwMDNlbGVkc19kaXNhYmxlZCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXFx1MDAzZW9mX25vZGUsXFxuIDE5NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcInJlYWx0ZWssZGlzYWJsZS1sZWRzXFxcIik7XFxuIDE5NzpcXHRcXG4gMTk4OlxcdFxcdC8qIFRPRE86IGlmIHBvd2VyIGlzIHNvZnR3YXJlIGNvbnRyb2xsZWQsIHNldCB1cCBhbnkgcmVndWxhdG9ycyBoZXJlICovXFxuIDE5OTpcXHRcXHRwcml2LVxcdTAwM2VyZXNldF9jdGwgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X29wdGlvbmFsKGRldiwgTlVMTCk7XFxuIDIwMDpcXHRcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXJlc2V0X2N0bCkpXFxuIDIwMTpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9jYXN0X3Byb2JlKGRldiwgcHJpdi1cXHUwMDNlcmVzZXRfY3RsLFxcbiAyMDI6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiZmFpbGVkIHRvIGdldCByZXNldCBjb250cm9sXFxcXG5cXFwiKTtcXG4gMjAzOlxcdFxcbiAyMDQ6XFx0XFx0cHJpdi1cXHUwMDNlcmVzZXQgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsIFxcXCJyZXNldFxcXCIsIEdQSU9EX09VVF9MT1cpO1xcbiAyMDU6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZXNldCkpIHtcXG4gMjA2OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiZmFpbGVkIHRvIGdldCBSRVNFVCBHUElPXFxcXG5cXFwiKTtcXG4gMjA3OlxcdFxcdFxcdHJldHVybiBFUlJfQ0FTVChwcml2LVxcdTAwM2VyZXNldCk7XFxuIDIwODpcXHRcXHR9XFxuIDIwOTpcXHRcXG4gMjEwOlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIHByaXYpO1xcbiAyMTE6XFx0XFxuIDIxMjpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcmVzZXRfY3RsIHx8IHByaXYtXFx1MDAzZXJlc2V0KSB7XFxuIDIxMzpcXHRcXHRcXHRydGw4M3h4X3Jlc2V0X2Fzc2VydChwcml2KTtcXG4gMjE0OlxcdFxcdFxcdGRldl9kYmcoZGV2LCBcXFwiYXNzZXJ0ZWQgUkVTRVRcXFxcblxcXCIpO1xcbiAyMTU6XFx0XFx0XFx0bXNsZWVwKFJFQUxURUtfSFdfU1RPUF9ERUxBWSk7XFxuIDIxNjpcXHRcXHRcXHRydGw4M3h4X3Jlc2V0X2RlYXNzZXJ0KHByaXYpO1xcbiAyMTc6XFx0XFx0XFx0bXNsZWVwKFJFQUxURUtfSFdfU1RBUlRfREVMQVkpO1xcbiAyMTg6XFx0XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJkZWFzc2VydGVkIFJFU0VUXFxcXG5cXFwiKTtcXG4gMjE5OlxcdFxcdH1cXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0cmV0dXJuIHByaXY7XFxuIDIyMjpcXHR9XFxuIDIyMzpcXHRFWFBPUlRfU1lNQk9MX05TX0dQTChydGw4M3h4X3Byb2JlLCBcXFwiUkVBTFRFS19EU0FcXFwiKTtcXG4gMjI0OlxcdFxcbiAyMjU6XFx0LyoqXFxuIDIyNjpcXHQgKiBydGw4M3h4X3JlZ2lzdGVyX3N3aXRjaCgpIC0gZGV0ZWN0cyBhbmQgcmVnaXN0ZXIgYSBzd2l0Y2hcXG4gMjI3OlxcdCAqIEBwcml2OiByZWFsdGVrX3ByaXYgcG9pbnRlclxcbiAyMjg6XFx0ICpcXG4gMjI5OlxcdCAqIFRoaXMgZnVuY3Rpb24gZmlyc3QgY2hlY2tzIHRoZSBzd2l0Y2ggY2hpcCBJRCBhbmQgcmVnaXN0ZXIgYSBEU0FcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6NTQuNDA5NTU2Njg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjY0MzAxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSVEw4M3h4IEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgY2hpcCBJRCB2ZXJpZmljYXRpb24gaGFwcGVuZWQgd2l0aGluIHRoZSBgcnRsODN4eF9wcm9iZWAgZnVuY3Rpb24uIEJ1dCBub3cgSSdtIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGFuZCBJIHNlZSB0aGF0IGl0IGFjdHVhbGx5IGRvZXNuJ3QhIEl0IGp1c3Qgc2V0cyB1cCB0aGUgcmVnaXN0ZXIgbWFwIGFuZCBwZXJmb3JtcyBhIGRldmljZSByZXNldC4gVGhhdCdzIGEgY3J1Y2lhbCBkZXRhaWwuIFNvLCBpZiB0aGUgSUQgY2hlY2sgKmlzbid0KiBoZXJlLCB3aGVyZSBpcyBpdCBoYXBwZW5pbmc/IFJpZ2h0LCBpdCdzIHZlcnkgbGlrZWx5IGhhcHBlbmluZyBpbiBgcnRsODN4eF9yZWdpc3Rlcl9zd2l0Y2hgLiBMZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhleSBhcmUgbWFraW5nIHN1cmUgd2UncmUgdGFsa2luZyB0byB0aGUgcmlnaHQgUlRMODN4eCB2YXJpYW50LiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHZlcmlmaWNhdGlvbiBpcyBnb2luZyBkb3duLCBJIHN1c3BlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTU1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjowODo1Ny44NzU5ODk2OTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjI1OlxcdC8qKlxcbiAyMjY6XFx0ICogcnRsODN4eF9yZWdpc3Rlcl9zd2l0Y2goKSAtIGRldGVjdHMgYW5kIHJlZ2lzdGVyIGEgc3dpdGNoXFxuIDIyNzpcXHQgKiBAcHJpdjogcmVhbHRla19wcml2IHBvaW50ZXJcXG4gMjI4OlxcdCAqXFxuIDIyOTpcXHQgKiBUaGlzIGZ1bmN0aW9uIGZpcnN0IGNoZWNrcyB0aGUgc3dpdGNoIGNoaXAgSUQgYW5kIHJlZ2lzdGVyIGEgRFNBXFxuIDIzMDpcXHQgKiBzd2l0Y2guXFxuIDIzMTpcXHQgKlxcbiAyMzI6XFx0ICogQ29udGV4dDogQ2FuIHNsZWVwLiBUYWtlcyBhbmQgcmVsZWFzZXMgcHJpdi1cXHUwMDNlbWFwX2xvY2suXFxuIDIzMzpcXHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgZm9yIGZhaWx1cmUuXFxuIDIzNDpcXHQgKi9cXG4gMjM1OlxcdGludCBydGw4M3h4X3JlZ2lzdGVyX3N3aXRjaChzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KVxcbiAyMzY6XFx0e1xcbiAyMzc6XFx0XFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXFx1MDAyNnByaXYtXFx1MDAzZWRzO1xcbiAyMzg6XFx0XFx0aW50IHJldDtcXG4gMjM5OlxcdFxcbiAyNDA6XFx0XFx0cmV0ID0gcHJpdi1cXHUwMDNlb3BzLVxcdTAwM2VkZXRlY3QocHJpdik7XFxuIDI0MTpcXHRcXHRpZiAocmV0KSB7XFxuIDI0MjpcXHRcXHRcXHRkZXZfZXJyX3Byb2JlKHByaXYtXFx1MDAzZWRldiwgcmV0LCBcXFwidW5hYmxlIHRvIGRldGVjdCBzd2l0Y2hcXFxcblxcXCIpO1xcbiAyNDM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjQ0OlxcdFxcdH1cXG4gMjQ1OlxcdFxcbiAyNDY6XFx0XFx0ZHMtXFx1MDAzZXByaXYgPSBwcml2O1xcbiAyNDc6XFx0XFx0ZHMtXFx1MDAzZWRldiA9IHByaXYtXFx1MDAzZWRldjtcXG4gMjQ4OlxcdFxcdGRzLVxcdTAwM2VvcHMgPSBwcml2LVxcdTAwM2V2YXJpYW50LVxcdTAwM2Vkc19vcHM7XFxuIDI0OTpcXHRcXHRkcy1cXHUwMDNlcGh5bGlua19tYWNfb3BzID0gcHJpdi1cXHUwMDNldmFyaWFudC1cXHUwMDNlcGh5bGlua19tYWNfb3BzO1xcbiAyNTA6XFx0XFx0ZHMtXFx1MDAzZW51bV9wb3J0cyA9IHByaXYtXFx1MDAzZW51bV9wb3J0cztcXG4gMjUxOlxcdFxcbiAyNTI6XFx0XFx0cmV0ID0gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XFxuIDI1MzpcXHRcXHRpZiAocmV0KSB7XFxuIDI1NDpcXHRcXHRcXHRkZXZfZXJyX3Byb2JlKHByaXYtXFx1MDAzZWRldiwgcmV0LCBcXFwidW5hYmxlIHRvIHJlZ2lzdGVyIHN3aXRjaFxcXFxuXFxcIik7XFxuIDI1NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNTY6XFx0XFx0fVxcbiAyNTc6XFx0XFxuIDI1ODpcXHRcXHRyZXR1cm4gMDtcXG4gMjU5OlxcdH1cXG4gMjYwOlxcdEVYUE9SVF9TWU1CT0xfTlNfR1BMKHJ0bDgzeHhfcmVnaXN0ZXJfc3dpdGNoLCBcXFwiUkVBTFRFS19EU0FcXFwiKTtcXG4gMjYxOlxcdFxcbiAyNjI6XFx0LyoqXFxuIDI2MzpcXHQgKiBydGw4M3h4X3VucmVnaXN0ZXJfc3dpdGNoKCkgLSB1bnJlZ2lzdGVyIGEgc3dpdGNoXFxuIDI2NDpcXHQgKiBAcHJpdjogcmVhbHRla19wcml2IHBvaW50ZXJcXG4gMjY1OlxcdCAqXFxuIDI2NjpcXHQgKiBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXIgYSBEU0Egc3dpdGNoLlxcbiAyNjc6XFx0ICpcXG4gMjY4OlxcdCAqIENvbnRleHQ6IENhbiBzbGVlcC5cXG4gMjY5OlxcdCAqIFJldHVybjogTm90aGluZy5cXG4gMjcwOlxcdCAqL1xcbiAyNzE6XFx0dm9pZCBydGw4M3h4X3VucmVnaXN0ZXJfc3dpdGNoKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXFxuIDI3MjpcXHR7XFxuIDI3MzpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdGRzYV91bnJlZ2lzdGVyX3N3aXRjaChkcyk7XFxuIDI3NjpcXHR9XFxuIDI3NzpcXHRFWFBPUlRfU1lNQk9MX05TX0dQTChydGw4M3h4X3VucmVnaXN0ZXJfc3dpdGNoLCBcXFwiUkVBTFRFS19EU0FcXFwiKTtcXG4gMjc4OlxcdFxcbiAyNzk6XFx0LyoqXFxuIDI4MDpcXHQgKiBydGw4M3h4X3NodXRkb3duKCkgLSBzaHV0ZG93biBhIHN3aXRjaFxcbiAyODE6XFx0ICogQHByaXY6IHJlYWx0ZWtfcHJpdiBwb2ludGVyXFxuIDI4MjpcXHQgKlxcbiAyODM6XFx0ICogVGhpcyBmdW5jdGlvbiBzaHV0cyBkb3duIHRoZSBEU0Egc3dpdGNoIGFuZCBjbGVhbnMgdGhlIHBsYXRmb3JtIGRyaXZlciBkYXRhLFxcbiAyODQ6XFx0ICogdG8gcHJldmVudCByZWFsdGVrX3tzbWksbWRpb31fcmVtb3ZlKCkgZnJvbSBydW5uaW5nIGFmdGVyd2FyZHMsIHdoaWNoIGlzXFxuIDI4NTpcXHQgKiBwb3NzaWJsZSBpZiB0aGUgcGFyZW50IGJ1cyBpbXBsZW1lbnRzIGl0cyBvd24gLnNodXRkb3duKCkgYXMgLnJlbW92ZSgpLlxcbiAyODY6XFx0ICpcXG4gMjg3OlxcdCAqIENvbnRleHQ6IENhbiBzbGVlcC5cXG4gMjg4OlxcdCAqIFJldHVybjogTm90aGluZy5cXG4gMjg5OlxcdCAqL1xcbiAyOTA6XFx0dm9pZCBydGw4M3h4X3NodXRkb3duKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXFxuIDI5MTpcXHR7XFxuIDI5MjpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdGRzYV9zd2l0Y2hfc2h1dGRvd24oZHMpO1xcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHRkZXZfc2V0X2RydmRhdGEocHJpdi1cXHUwMDNlZGV2LCBOVUxMKTtcXG4gMjk3OlxcdH1cXG4gMjk4OlxcdEVYUE9SVF9TWU1CT0xfTlNfR1BMKHJ0bDgzeHhfc2h1dGRvd24sIFxcXCJSRUFMVEVLX0RTQVxcXCIpO1xcbiAyOTk6XFx0XFxuIDMwMDpcXHQvKipcXG4gMzAxOlxcdCAqIHJ0bDgzeHhfcmVtb3ZlKCkgLSBDbGVhbnVwIGEgcmVhbHRlayBzd2l0Y2ggZHJpdmVyXFxuIDMwMjpcXHQgKiBAcHJpdjogcmVhbHRla19wcml2IHBvaW50ZXJcXG4gMzAzOlxcdCAqXFxuIDMwNDpcXHQgKiBQbGFjZWhvbGQgZm9yIGNvbW1vbiBjbGVhbnVwIHByb2NlZHVyZXMuXFxuIDMwNTpcXHQgKlxcbiAzMDY6XFx0ICogQ29udGV4dDogQW55XFxuIDMwNzpcXHQgKiBSZXR1cm46IG5vdGhpbmdcXG4gMzA4OlxcdCAqL1xcbiAzMDk6XFx0dm9pZCBydGw4M3h4X3JlbW92ZShzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KVxcbiAzMTA6XFx0e1xcbiAzMTE6XFx0fVxcbiAzMTI6XFx0RVhQT1JUX1NZTUJPTF9OU19HUEwocnRsODN4eF9yZW1vdmUsIFxcXCJSRUFMVEVLX0RTQVxcXCIpO1xcbiAzMTM6XFx0XFxuIDMxNDpcXHR2b2lkIHJ0bDgzeHhfcmVzZXRfYXNzZXJ0KHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXFxuIDMxNTpcXHR7XFxuIDMxNjpcXHRcXHRpbnQgcmV0O1xcbiAzMTc6XFx0XFxuIDMxODpcXHRcXHRyZXQgPSByZXNldF9jb250cm9sX2Fzc2VydChwcml2LVxcdTAwM2VyZXNldF9jdGwpO1xcbiAzMTk6XFx0XFx0aWYgKHJldClcXG4gMzIwOlxcdFxcdFxcdGRldl93YXJuKHByaXYtXFx1MDAzZWRldixcXG4gMzIxOlxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIGFzc2VydCB0aGUgc3dpdGNoIHJlc2V0IGNvbnRyb2w6ICVwZVxcXFxuXFxcIixcXG4gMzIyOlxcdFxcdFxcdFxcdCBFUlJfUFRSKHJldCkpO1xcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHRncGlvZF9zZXRfdmFsdWUocHJpdi1cXHUwMDNlcmVzZXQsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjowODo1Ny44NzYwOTMxNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5MTA2NTMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBgZGV0ZWN0YCBjYWxsYmFjayBpcyB0aGUgZ2F0ZWtlZXBlciBoZXJlLCBjaGVja2luZyB0aGF0IGNyaXRpY2FsIGNoaXAgSUQuIFdpdGhvdXQgdGhlIHJpZ2h0IGhhcmR3YXJlLCBhcyBpcyB0aGUgY2FzZSBpbiBvdXIgUUVNVSBzZXR1cCwgdGhhdCBgZGV0ZWN0YCByb3V0aW5lIGZhaWxzIGltbWVkaWF0ZWx5LiBUaGlzIGlzIGtleS4gVGhhdCBtZWFucyBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgKm5ldmVyKiBnZXRzIGNhbGxlZCwgd2hpY2ggaW4gdHVybiBtZWFucyBgcnRsODM2NW1iX3NldHVwYCBpcyBhbHNvIHNraXBwZWQuIE15IG1vZGlmaWVkIGNvZGU/IENvbXBsZXRlbHkgdW5yZWFjaGFibGUgd2l0aGluIHRoaXMgc2ltdWxhdGVkIGVudmlyb25tZW50LiBUaGUgYWN0dWFsIGNvZGUgY2hhbmdlIGJvaWxzIGRvd24gdG8gYSBzaW1wbGUgYGRldm1fbXV0ZXhfaW5pdGAsIHdoaWNoLCBmcmFua2x5LCBpcyBpbmNyZWRpYmx5IHRyaXZpYWwgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIFRoZXJlZm9yZSwgZ2l2ZW4gYWxsIG9mIHRoaXMsIHRoZSBwb3RlbnRpYWwgYmVuZWZpdCBvZiBmdXp6aW5nIHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGggaXMgbmVnbGlnaWJsZS4gKipXb3J0aEZ1enppbmc9ZmFsc2UuKipcblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NTUsIk91dHB1dFRva2VucyI6MTQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDk6MDIuNDY3MTYwNjc0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgUlRMODM2NU1CIERTQSBzd2l0Y2ggZHJpdmVyLCByZXBsYWNpbmcgYG11dGV4X2luaXRgIHdpdGggYGRldm1fbXV0ZXhfaW5pdGAgYW5kIGFkZGluZyBlcnJvciBoYW5kbGluZy4gVGhpcyBkcml2ZXIgaXMgZm9yIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChSZWFsdGVrIHN3aXRjaGVzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBEdXJpbmcgcHJvYmUsIHRoZSBkcml2ZXIgYXR0ZW1wdHMgdG8gcmVhZCB0aGUgY2hpcCBJRCB2aWEgTURJTy9TTUksIHdoaWNoIHdpbGwgZmFpbCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGhvdXQgdGhlIGhhcmR3YXJlLCBwcmV2ZW50aW5nIHRoZSBtb2RpZmllZCBzZXR1cCBmdW5jdGlvbnMgZnJvbSBldmVyIGJlaW5nIHJlYWNoZWQuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlIGlzIHB1cmVseSBhIHRyaXZpYWwgcmVzb3VyY2UgbWFuYWdlbWVudCB1cGRhdGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBSVEw4MzY1TUIgRFNBIHN3aXRjaCBkcml2ZXIsIHJlcGxhY2luZyBgbXV0ZXhfaW5pdGAgd2l0aCBgZGV2bV9tdXRleF9pbml0YCBhbmQgYWRkaW5nIGVycm9yIGhhbmRsaW5nLiBUaGlzIGRyaXZlciBpcyBmb3Igc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKFJlYWx0ZWsgc3dpdGNoZXMpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIER1cmluZyBwcm9iZSwgdGhlIGRyaXZlciBhdHRlbXB0cyB0byByZWFkIHRoZSBjaGlwIElEIHZpYSBNRElPL1NNSSwgd2hpY2ggd2lsbCBmYWlsIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aG91dCB0aGUgaGFyZHdhcmUsIHByZXZlbnRpbmcgdGhlIG1vZGlmaWVkIHNldHVwIGZ1bmN0aW9ucyBmcm9tIGV2ZXIgYmVpbmcgcmVhY2hlZC4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2UgaXMgcHVyZWx5IGEgdHJpdmlhbCByZXNvdXJjZSBtYW5hZ2VtZW50IHVwZGF0ZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbj2qk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 11:37:19 +0000 UTC FinishedAt: 2026-07-27 12:09:04 +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+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIFJUTDgzNjVNQiBEU0Egc3dpdGNoIGRyaXZlciwgcmVwbGFjaW5nIGBtdXRleF9pbml0YCB3aXRoIGBkZXZtX211dGV4X2luaXRgIGFuZCBhZGRpbmcgZXJyb3IgaGFuZGxpbmcuIFRoaXMgZHJpdmVyIGlzIGZvciBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoUmVhbHRlayBzd2l0Y2hlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIHJlYWQgdGhlIGNoaXAgSUQgdmlhIE1ESU8vU01JLCB3aGljaCB3aWxsIGZhaWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHRoZSBoYXJkd2FyZSwgcHJldmVudGluZyB0aGUgbW9kaWZpZWQgc2V0dXAgZnVuY3Rpb25zIGZyb20gZXZlciBiZWluZyByZWFjaGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBwdXJlbHkgYSB0cml2aWFsIHJlc291cmNlIG1hbmFnZW1lbnQgdXBkYXRlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYxNTZkYTVhZmZhNGQ2YzViOTljMDk3NTFkZWI3NzVhYjA2MDU5OGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMjowODozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uY1xuaW5kZXggNWFjMDkxYmY5M2M5MjMuLmFhMDUzNzViMDkwYTNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uY1xuQEAgLTE5ODgsMTYgJiM0MzsxOTg4LDE5IEBAIHN0YXRpYyB2b2lkIHJ0bDgzNjVtYl9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0c3Bpbl91bmxvY2soXHUwMDI2cC1cdTAwM2VzdGF0c19sb2NrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsODM2NW1iX3N0YXRzX3NldHVwKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG4mIzQzO3N0YXRpYyBpbnQgcnRsODM2NW1iX3N0YXRzX3NldHVwKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG4ge1xuIFx0c3RydWN0IHJ0bDgzNjVtYiAqbWIgPSBwcml2LVx1MDAzZWNoaXBfZGF0YTtcbiBcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHQvKiBQZXItY2hpcCBnbG9iYWwgbXV0ZXggdG8gcHJvdGVjdCBNSUIgY291bnRlciBhY2Nlc3MsIHNpbmNlIGRvaW5nXG4gXHQgKiBzbyByZXF1aXJlcyBhY2Nlc3NpbmcgYSBzZXJpZXMgb2YgcmVnaXN0ZXJzIGluIGEgcGFydGljdWxhciBvcmRlci5cbiBcdCAqL1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZtYi1cdTAwM2VtaWJfbG9jayk7XG4mIzQzO1x0cmV0ID0gZGV2bV9tdXRleF9pbml0KHByaXYtXHUwMDNlZGV2LCBcdTAwMjZtYi1cdTAwM2VtaWJfbG9jayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2F2YWlsYWJsZV9wb3J0KGRwLCBkcykge1xuIFx0XHRzdHJ1Y3QgcnRsODM2NW1iX3BvcnQgKnAgPSBcdTAwMjZtYi1cdTAwM2Vwb3J0c1tkcC1cdTAwM2VpbmRleF07XG5AQCAtMjAxMCw2ICYjNDM7MjAxMyw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgzNjVtYl9zdGF0c19zZXR1cChzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KVxuIFx0XHQgKi9cbiBcdFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cC1cdTAwM2VtaWJfd29yaywgcnRsODM2NW1iX3N0YXRzX3BvbGwpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODM2NW1iX3N0YXRzX3RlYXJkb3duKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG5AQCAtMjU2Nyw3ICYjNDM7MjU3MiwxMiBAQCBzdGF0aWMgaW50IHJ0bDgzNjVtYl9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHR9XG4gXG4gXHQvKiBTdGFydCBzdGF0aXN0aWNzIGNvdW50ZXIgcG9sbGluZyAqL1xuLVx0cnRsODM2NW1iX3N0YXRzX3NldHVwKHByaXYpO1xuJiM0MztcdHJldCA9IHJ0bDgzNjVtYl9zdGF0c19zZXR1cChwcml2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gc2V0dXAgc3RhdHM6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0RVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdGdvdG8gb3V0X3RlYXJkb3duX2lycTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gMDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMgYi9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmNcbmluZGV4IDcxMTI0ZWNjYTkyZjJhLi45ZGQ1MGIyMGMwMDBhMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jXG5AQCAtMTU2LDkgJiM0MzsxNTYsMTcgQEAgcnRsODN4eF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZW1hcF9sb2NrKTtcbi1cdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2V2bGFuX2xvY2spO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWwyX2xvY2spO1xuJiM0MztcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFx1MDAyNnByaXYtXHUwMDNlbWFwX2xvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX211dGV4X2luaXQoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXZsYW5fbG9jayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFx1MDAyNnByaXYtXHUwMDNlbDJfbG9jayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gXG4gXHRyYy5sb2NrX2FyZyA9IHByaXY7XG4gXHRwcml2LVx1MDAzZW1hcCA9IGRldm1fcmVnbWFwX2luaXQoZGV2LCBOVUxMLCBwcml2LCBcdTAwMjZyYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIFJUTDgzNjVNQiBEU0Egc3dpdGNoIGRyaXZlciwgcmVwbGFjaW5nIGBtdXRleF9pbml0YCB3aXRoIGBkZXZtX211dGV4X2luaXRgIGFuZCBhZGRpbmcgZXJyb3IgaGFuZGxpbmcuIFRoaXMgZHJpdmVyIGlzIGZvciBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoUmVhbHRlayBzd2l0Y2hlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIHJlYWQgdGhlIGNoaXAgSUQgdmlhIE1ESU8vU01JLCB3aGljaCB3aWxsIGZhaWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHRoZSBoYXJkd2FyZSwgcHJldmVudGluZyB0aGUgbW9kaWZpZWQgc2V0dXAgZnVuY3Rpb25zIGZyb20gZXZlciBiZWluZyByZWFjaGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBwdXJlbHkgYSB0cml2aWFsIHJlc291cmNlIG1hbmFnZW1lbnQgdXBkYXRlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYxNTZkYTVhZmZhNGQ2YzViOTljMDk3NTFkZWI3NzVhYjA2MDU5OGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAxMjowODozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jCmluZGV4IDVhYzA5MWJmOTNjOTIzLi5hYTA1Mzc1YjA5MGEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jCkBAIC0xOTg4LDE2ICYjNDM7MTk4OCwxOSBAQCBzdGF0aWMgdm9pZCBydGw4MzY1bWJfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAlzcGluX3VubG9jaygmYW1wO3AtJmd0O3N0YXRzX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MzY1bWJfc3RhdHNfc2V0dXAoc3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdikKJiM0MztzdGF0aWMgaW50IHJ0bDgzNjVtYl9zdGF0c19zZXR1cChzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KQogewogCXN0cnVjdCBydGw4MzY1bWIgKm1iID0gcHJpdi0mZ3Q7Y2hpcF9kYXRhOwogCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiAJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJaW50IHJldDsKIAogCS8qIFBlci1jaGlwIGdsb2JhbCBtdXRleCB0byBwcm90ZWN0IE1JQiBjb3VudGVyIGFjY2Vzcywgc2luY2UgZG9pbmcKIAkgKiBzbyByZXF1aXJlcyBhY2Nlc3NpbmcgYSBzZXJpZXMgb2YgcmVnaXN0ZXJzIGluIGEgcGFydGljdWxhciBvcmRlci4KIAkgKi8KLQltdXRleF9pbml0KCZhbXA7bWItJmd0O21pYl9sb2NrKTsKJiM0MzsJcmV0ID0gZGV2bV9tdXRleF9pbml0KHByaXYtJmd0O2RldiwgJmFtcDttYi0mZ3Q7bWliX2xvY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAogCWRzYV9zd2l0Y2hfZm9yX2VhY2hfYXZhaWxhYmxlX3BvcnQoZHAsIGRzKSB7CiAJCXN0cnVjdCBydGw4MzY1bWJfcG9ydCAqcCA9ICZhbXA7bWItJmd0O3BvcnRzW2RwLSZndDtpbmRleF07CkBAIC0yMDEwLDYgJiM0MzsyMDEzLDggQEAgc3RhdGljIHZvaWQgcnRsODM2NW1iX3N0YXRzX3NldHVwKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpCiAJCSAqLwogCQlJTklUX0RFTEFZRURfV09SSygmYW1wO3AtJmd0O21pYl93b3JrLCBydGw4MzY1bWJfc3RhdHNfcG9sbCk7CiAJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcnRsODM2NW1iX3N0YXRzX3RlYXJkb3duKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpCkBAIC0yNTY3LDcgJiM0MzsyNTcyLDEyIEBAIHN0YXRpYyBpbnQgcnRsODM2NW1iX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAl9CiAKIAkvKiBTdGFydCBzdGF0aXN0aWNzIGNvdW50ZXIgcG9sbGluZyAqLwotCXJ0bDgzNjVtYl9zdGF0c19zZXR1cChwcml2KTsKJiM0MzsJcmV0ID0gcnRsODM2NW1iX3N0YXRzX3NldHVwKHByaXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHByaXYtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gc2V0dXAgc3RhdHM6ICVwZVxuJiMzNDssCiYjNDM7CQkJRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gb3V0X3RlYXJkb3duX2lycTsKJiM0MzsJfQogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYyBiL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYwppbmRleCA3MTEyNGVjY2E5MmYyYS4uOWRkNTBiMjBjMDAwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMKQEAgLTE1Niw5ICYjNDM7MTU2LDE3IEBAIHJ0bDgzeHhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LAogCWlmICghcHJpdikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7bWFwX2xvY2spOwotCW11dGV4X2luaXQoJmFtcDtwcml2LSZndDt2bGFuX2xvY2spOwotCW11dGV4X2luaXQoJmFtcDtwcml2LSZndDtsMl9sb2NrKTsKJiM0MzsJcmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgJmFtcDtwcml2LSZndDttYXBfbG9jayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX211dGV4X2luaXQoZGV2LCAmYW1wO3ByaXYtJmd0O3ZsYW5fbG9jayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX211dGV4X2luaXQoZGV2LCAmYW1wO3ByaXYtJmd0O2wyX2xvY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAogCXJjLmxvY2tfYXJnID0gcHJpdjsKIAlwcml2LSZndDttYXAgPSBkZXZtX3JlZ21hcF9pbml0KGRldiwgTlVMTCwgcHJpdiwgJmFtcDtyYyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVhbHRlayBEU0EgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgbWFraW5nIGEgY291cGxlIG9mIGNoYW5nZXMgdG8gdGhlIFJlYWx0ZWsgRFNBIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdG91Y2hpbmcgYHJ0bDgzNjVtYl9tYWluLmNgIGFuZCBgcnRsODN4eC5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDsgdGhleSYjMzk7cmUgcmVwbGFjaW5nIHRoZSBzdGFuZGFyZCBgbXV0ZXhfaW5pdGAgd2l0aCBgZGV2bV9tdXRleF9pbml0YCBhbmQgYWRkaW5nIHNvbWUgcmV0dXJuIHZhbHVlIGhhbmRsaW5nLiBTbWFydCwgbWluaW1pemluZyBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MgYW5kIGhhbmRsaW5nIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIGdyYWNlZnVsbHkuIFN0YW5kYXJkIHN0dWZmIGZvciBkZXZpY2UgZHJpdmVycy4KCkxldCBtZSBzZWUsIHRoaXMgaXMgYSBEU0EgZHJpdmVyLCBhIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgZHJpdmVyLCByaWdodD8gRm9yIFJlYWx0ZWsgc3dpdGNoZXMsIHBhcnRpY3VsYXJseSB0aGUgUlRMODM2NU1CIGFuZCBSVEw4M3h4IHNlcmllcy4gQ2xlYXJseSBoYXJkd2FyZS1zcGVjaWZpYywgd2hpY2ggaXMgZ29vZCB0byBrbm93IGZyb20gdGhlIGdldC1nby4gTm8gZ2VuZXJhbGl0aWVzIGhlcmUuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgYWx3YXlzIGZ1enppbmcuIENhbiBJIHRocm93IHRoaXMgaW50byBRRU1VIGFuZCBzdGFydCBwb2tpbmcgYXQgaXQ/IFdpdGggRFNBIHN3aXRjaGVzLCBpdCB1c3VhbGx5IGJvaWxzIGRvd24gdG8gaG93IHRoZSBzd2l0Y2ggaXMgY29ubmVjdGVkLiBUeXBpY2FsbHksIGl0JiMzOTtzIE1ESU8sIFNQSSwgb3IgSTJDLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGlzIHByb2JlZC4gVGhhdCYjMzk7bGwgYmUga2V5IHRvIGFueSBlZmZlY3RpdmUgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4M3h4X3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3JlYWx0ZWstbWRpby5jPTEyMT1pbnQgcmVhbHRla19tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uYy0xMjYtXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uYzoxMjc6XHRwcml2ID0gcnRsODN4eF9wcm9iZShkZXYsIFx1MDAyNnJlYWx0ZWtfbWRpb19pbmZvKTtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3JlYWx0ZWstbWRpby5jLTEyOC1cdGlmIChJU19FUlIocHJpdikpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1zbWkuYz0zMzE9aW50IHJlYWx0ZWtfc21pX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1zbWkuYy0zMzYtXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLXNtaS5jOjMzNzpcdHByaXYgPSBydGw4M3h4X3Byb2JlKGRldiwgXHUwMDI2cmVhbHRla19zbWlfaW5mbyk7XG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLXNtaS5jLTMzOC1cdGlmIChJU19FUlIocHJpdikpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTExND1FWFBPUlRfU1lNQk9MX05TX0dQTChydGw4M3h4X3NldHVwX3VzZXJfbWRpbywgXCYjMzQ7UkVBTFRFS19EU0FcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMTYtLyoqXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MTE3OiAqIHJ0bDgzeHhfcHJvYmUoKSAtIHByb2JlIGEgUmVhbHRlayBzd2l0Y2hcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMTgtICogQGRldjogdGhlIGRldmljZSBiZWluZyBwcm9iZWRcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM9MTMwPXN0cnVjdCByZWFsdGVrX3ByaXYgKlxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEzMTpydGw4M3h4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMzItXHQgICAgICBjb25zdCBzdHJ1Y3QgcmVhbHRla19pbnRlcmZhY2VfaW5mbyAqaW50ZXJmYWNlX2luZm8pXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTIyMi19XG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MjIzOkVYUE9SVF9TWU1CT0xfTlNfR1BMKHJ0bDgzeHhfcHJvYmUsIFwmIzM0O1JFQUxURUtfRFNBXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0yMjQtXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5oPTE0PXN0cnVjdCByZWFsdGVrX3ByaXYgKlxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5oOjE1OnJ0bDgzeHhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5oLTE2LVx0ICAgICAgY29uc3Qgc3RydWN0IHJlYWx0ZWtfaW50ZXJmYWNlX2luZm8gKmludGVyZmFjZV9pbmZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBEcml2ZXIgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFJlYWx0ZWsgc3dpdGNoIGRyaXZlciBhbmQgdGhlIHJlcG9ydGVkIGNoYW5nZS4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBhY2Nlc3MgbWV0aG9kIC0gaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBwcm9iZWQgdmlhIE1ESU8gb3IgU01JLCBwbGF0Zm9ybSBkZXZpY2Ugc3R1ZmYsIHJpZ2h0PyBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHdoZXRoZXIgSSBjYW4gZXZlbiBnZXQgdGhpcyBydW5uaW5nIGluIGEgUUVNVSBlbnZpcm9ubWVudCBmb3IgZnV6emluZy4gQ2FuIEkgbGV2ZXJhZ2Ugc3l6a2FsbGVyIGhlcmU/IEkga25vdyBzeXprYWxsZXIgY2FuIGluc3RhbnRpYXRlIHBsYXRmb3JtIGRldmljZXMsIHR5cGljYWxseSB0aHJvdWdoIGAvc3lzL2RldmljZXMvcGxhdGZvcm1gIG9yIHNpbWlsYXIgaW50ZXJmYWNlcy4gSG93ZXZlciwgcGxhdGZvcm0gZGV2aWNlIGluc3RhbnRpYXRpb24gb2Z0ZW4gcmVsaWVzIG9uIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUuCgpIbW0sIHdhaXQsIGlmIHN5emthbGxlciAqY2FuKiBpbmplY3Qgbm9kZXMsIG1heWJlLiBCdXQsIGdlbmVyYWxseSwgdGhhdCBnZXRzIGhhcmR3YXJlIHNwZWNpZmljIHByZXR0eSBmYXN0LiBTbywgbGV0JiMzOTtzIGJhY2sgdXAgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgc29mdHdhcmUgZW11bGF0aW9uIHRvIHdvcmsgd2l0aC4gTm9wZSwgdGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgUmVhbHRlayBzd2l0Y2ggZHJpdmVyLiBBbmQgdGhlIGNoYW5nZSBpdHNlbGYuLi4gaXQmIzM5O3MgcmVhbGx5IGp1c3QgYSBgbXV0ZXhfaW5pdGAgdG8gYGRldm1fbXV0ZXhfaW5pdGAgY29udmVyc2lvbiB3aXRoIHNvbWUgYWRkZWQgZXJyb3IgaGFuZGxpbmcuCgpIb2xkIG9uIGEgc2Vjb25kLCAqZGV2bV9tdXRleF9pbml0KiBpcyBhIHN1cGVyIHNpbXBsZSBjaGFuZ2UsIGFsbW9zdCB0cml2aWFsLiBJdCYjMzk7cyBqdXN0IGEgbWFuYWdlZCBtdXRleCBpbml0aWFsaXphdGlvbiBhbmQgZXJyb3IgY2hlY2tpbmcuIE5vdywgSSYjMzk7bSBxdWVzdGlvbmluZyB3aGV0aGVyIHRoaXMgaXMgZXZlbiAqd29ydGgqIGZ1enppbmcuIEl0JiMzOTtzIGEgdmVyeSB0YXJnZXRlZCBkcml2ZXIgZm9yIHNwZWNpZmljIGhhcmR3YXJlLCBhbmQgdGhlIGNvZGUgY2hhbmdlIGlzIG1pbmltYWwuIE15IGd1dCBpcyB0ZWxsaW5nIG1lIHRoaXMgaXNuJiMzOTt0IGEgZ29vZCBjYW5kaWRhdGUuCgpVbHRpbWF0ZWx5LCB0aGUgY2hhbmdlIGJvaWxzIGRvd24gdG8gdGhlIGBkZXZtX211dGV4X2luaXRgIHJlcGxhY2VtZW50IGFuZCBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IGEgc3dpdGNoLiBJJiMzOTttIGxlYW5pbmcgdG93YXJkIG1hcmtpbmcgdGhpcyBhcyAqV29ydGhGdXp6aW5nPWZhbHNlKi4gVGhpcyBsb29rcyBsaWtlIGEgaGFyZHdhcmUtZGVwZW5kZW50IGRyaXZlciB0aGF0IHdvdWxkIHJlcXVpcmUgYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KCkJ1dCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIERTQSBzd2l0Y2hlcyAtIHRoZXkgc29tZXRpbWVzIGdldCBmdXp6ZWQsIHRob3VnaCBpdCYjMzk7cyB1c3VhbGx5IHdpdGggYSAmIzM0O2R1bW15JiMzNDsgRFNBIGRyaXZlci4gSXMgdGhlcmUgYSAmIzM0O2R1bW15JiMzNDsgRFNBIGRyaXZlciBJIGNhbiBsZXZlcmFnZT8gTGV0JiMzOTtzIGdvIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHVtbXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTI1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCBrc3o4OHgzX2RyaXZlX3N0cmVuZ3Roc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTI2MS0gKlxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MjYyOiAqIFRoaXMgZnVuY3Rpb24gaXMgYSBkdW1teSBoYW5kbGVyLiBTZWUga3N6X3BoeWxpbmtfbWFjX2VuYWJsZV90eF9scGkoKSBmb3JcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTI2My0gKiBhIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIEVFRS9MUEkgaGFuZGxpbmcgaW4gS1NaIHN3aXRjaGVzLlxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xOTQ9c3RhdGljIHUzMlxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE5NTpfbXQ3NTMwX3VubG9ja2VkX3JlYWQoc3RydWN0IG10NzUzMF9kdW1teV9wb2xsICpwKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE5Ni17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTIwMD1zdGF0aWMgdTMyXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjAxOl9tdDc1MzBfcmVhZChzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgKnApXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjAyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjE1PW10NzUzMF9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTYte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjIxNzpcdHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIxOC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjQ3PW10NzUzMF9mZGJfY21kKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgZW51bSBtdDc1MzBfZmRiX2NtZCBjbWQsIHUzMiAqcnNwKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNTAtXHRpbnQgcmV0O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI1MTpcdHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI1Mi1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NTQ5PW10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBkZXZhZCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNTUxLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo1NTI6XHRzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy01NTMtXHR1MzIgcmVnLCB2YWw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTU5Nz1tdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGRldmFkLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy01OTkte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjYwMDpcdHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTYwMS1cdHUzMiB2YWwsIHJlZztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NjQ0PW10NzUzMV9pbmRfYzIyX3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjQ1LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2NDY6XHRzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy02NDctXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz02ODE9bXQ3NTMxX2luZF9jMjJfcGh5X3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY4My17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6Njg0Olx0c3RydWN0IG10NzUzMF9kdW1teV9wb2xsIHA7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjg1LVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTYyNz1tdDc1MzBfdmxhbl9jbWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBlbnVtIG10NzUzMF92bGFuX2NtZCBjbWQsIHUxNiB2aWQpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTYyOC17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTYyOTpcdHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2MzAtXHR1MzIgdmFsO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0yNDIwPW10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0MjUtXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm1hY19ucDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyNDI2Olx0c3RydWN0IG10NzUzMF9kdW1teV9wb2xsIHA7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjQyNy1cdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTI3MDc9bXQ3NTMxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjcwOS1cdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjcxMDpcdHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI3MTEtXHR1MzIgdmFsLCBpZDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmg9OTI5PXN0cnVjdCBtdDc1MzBfaHdfc3RhdHMge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaC05MzQtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmg6OTM1OnN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmgtOTM2LVx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaC05MzktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmg6OTQwOnN0YXRpYyBpbmxpbmUgdm9pZCBJTklUX01UNzUzMF9EVU1NWV9QT0xMKHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCAqcCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaC05NDEtXHRcdFx0XHRcdCAgc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM2NzI9c3RhdGljIGludCBtdjg4ZTYzMjBfc2V0dXBfZXJyYXRhKHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcClcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTM2NzMte1xuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6MzY3NDpcdHUxNiBkdW1teTtcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTM2NzUtXHRpbnQgZXJyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTM2ODMtXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzozNjg0Olx0cmV0dXJuIG12ODhlNnh4eF9wb3J0X2hpZGRlbl9yZWFkKGNoaXAsIDAsIDB4ZiwgMHg3LCBcdTAwMjZkdW1teSk7XG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zNjg1LX1cbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0xNzAxPXN0cnVjdCBmZWxpeF9zdHJlYW0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTE3MDMtXHR1bnNpZ25lZCBsb25nIGlkO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MTcwNDpcdGJvb2wgZHVtbXk7XG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0xNzA1LVx0aW50IHBvcnRzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jPTE4NTQ9c3RhdGljIGludCB2c2M5OTU5X3N0cmVhbV90YWJsZV9hZGQoc3RydWN0IG9jZWxvdCAqb2NlbG90LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTE4NjUtXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoxODY2Olx0aWYgKCFzdHJlYW0tXHUwMDNlZHVtbXkpIHtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTE4NjctXHRcdHJldCA9IHZzYzk5NTlfbWFjdF9zdHJlYW1fc2V0KG9jZWxvdCwgc3RyZWFtX2VudHJ5LCBleHRhY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jPTE4OTE9c3RhdGljIHZvaWQgdnNjOTk1OV9zdHJlYW1fdGFibGVfZGVsKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0xODkzLXtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjE4OTQ6XHRpZiAoIXN0cmVhbS1cdTAwM2VkdW1teSlcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTE4OTUtXHRcdHZzYzk5NTlfbWFjdF9zdHJlYW1fc2V0KG9jZWxvdCwgc3RyZWFtLCBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0yMjQ1PXN0YXRpYyBpbnQgdnNjOTk1OV9wc2ZwX2ZpbHRlcl9hZGQoc3RydWN0IG9jZWxvdCAqb2NlbG90LCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0yMzU2LVx0XHRcdFx0XHRcdFx0ICBcdTAwMjZvbGRfc2ZpKTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjIzNTc6XHRcdFx0c3RyZWFtX2VudHJ5LVx1MDAzZWR1bW15ID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTIzNTgtXHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjM2MC1cdFx0XHRcdFx0XHRcdCAgXHUwMDI2c2ZpKTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjIzNjE6XHRcdFx0c3RyZWFtLmR1bW15ID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTIzNjItXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0yMzk4PXN0YXRpYyBpbnQgdnNjOTk1OV9wc2ZwX2ZpbHRlcl9kZWwoc3RydWN0IG9jZWxvdCAqb2NlbG90LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTI0MzQtXHRcdHN0cmVhbV9lbnRyeS1cdTAwM2Vwb3J0cyA9IEJJVChzdHJlYW1fZW50cnktXHUwMDNlcG9ydCk7XG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoyNDM1Olx0XHRpZiAoc3RyZWFtX2VudHJ5LVx1MDAzZWR1bW15KSB7XG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoyNDM2Olx0XHRcdHN0cmVhbV9lbnRyeS1cdTAwM2VkdW1teSA9IGZhbHNlO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjQzNy1cdFx0XHR2c2M5OTU5X21hY3Rfc3RyZWFtX3NldChvY2Vsb3QsIHN0cmVhbV9lbnRyeSwgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy01Mi1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM6NTM6LyogZHVtbXkgcmVnIHRvIGNoYW5nZSBwYWdlICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTU0LSNkZWZpbmUgQVI5MzMxX1NXX1JFR19QQUdFXHRcdFx0MHg0MDAwMFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM9OTUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIGFyOTMzMV92YWxpZF9yZWdzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy05NzMtXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jOjk3NDpcdC8qIGR1bW15IHBhZ2Ugc2VsZWN0b3IgcmVnICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTk3NS1cdHJlZ21hcF9yZWdfcmFuZ2UoQVI5MzMxX1NXX1JFR19QQUdFLCBBUjkzMzFfU1dfUkVHX1BBR0UpLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZGV2bGluay5jLTgtICogc2l6ZSwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIG1heGltdW0gcG9zc2libGUgc3RhdGljIGNvbmZpZyBzaXplIGJ5XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2RldmxpbmsuYzo5OiAqIGNyZWF0aW5nIGEgZHVtbXkgY29uZmlnIHdpdGggYWxsIHRhYmxlIGVudHJpZXMgcG9wdWxhdGVkIHRvIHRoZSBtYXgsIGFuZCBnZXRcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZGV2bGluay5jLTEwLSAqIGl0cyBwYWNrZWQgbGVuZ3RoLiBUaGlzIGlzIGRvbmUgZHluYW1pY2FsbHkgYXMgb3Bwb3NlZCB0byBzaW1wbHkgaGFyZGNvZGluZ1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYz04NDI9c3RhdGljIHNpemVfdCBzamExMTEwX2Nic19lbnRyeV9wYWNraW5nKHZvaWQgKmJ1Ziwgdm9pZCAqZW50cnlfcHRyLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYy04NTYtXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmM6ODU3OnN0YXRpYyB2b2lkIHNqYTExMTBfZHVtbXlfY21kX3BhY2tpbmcodm9pZCAqYnVmLCBzdHJ1Y3Qgc2phMTEwNV9keW5fY21kICpjbWQsXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmMtODU4LVx0XHRcdFx0ICAgICAgZW51bSBwYWNraW5nX29wIG9wKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYz0xMDU4PWNvbnN0IHN0cnVjdCBzamExMTA1X2R5bmFtaWNfdGFibGVfb3BzIHNqYTExMTBfZHluX29wc1tCTEtfSURYX01BWF9EWU5dID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYy0xMTQ4LVx0XHQuZW50cnlfcGFja2luZyA9IHNqYTExMTBfeG1paV9wYXJhbXNfZW50cnlfcGFja2luZyxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYzoxMTQ5Olx0XHQuY21kX3BhY2tpbmcgPSBzamExMTEwX2R1bW15X2NtZF9wYWNraW5nLFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9keW5hbWljX2NvbmZpZy5jLTExNTAtXHRcdC5tYXhfZW50cnlfY291bnQgPSBTSkExMTA1X01BWF9YTUlJX1BBUkFNU19DT1VOVCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmMtMTE2NC1cdFx0LmVudHJ5X3BhY2tpbmcgPSBzamExMTEwX2wyX2ZvcndhcmRpbmdfcGFyYW1zX2VudHJ5X3BhY2tpbmcsXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmM6MTE2NTpcdFx0LmNtZF9wYWNraW5nID0gc2phMTExMF9kdW1teV9jbWRfcGFja2luZyxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYy0xMTY2LVx0XHQubWF4X2VudHJ5X2NvdW50ID0gU0pBMTEwNV9NQVhfTDJfRk9SV0FSRElOR19QQVJBTVNfQ09VTlQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYz0zODM9c2phMTEwNV90YXNfY2hlY2tfY29uZmxpY3RzKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDYzLSAqIFRvIHJldXNlIHRoZSBzamExMTA1X3Rhc19jaGVja19jb25mbGljdHMgbG9naWMgd2l0aG91dCByZWZhY3RvcmluZyBpdCxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM6NDY0OiAqIGNvbnZlcnQgdGhlIGdhdGluZyBjb25maWd1cmF0aW9uIHRvIGEgZHVtbXkgdGMtdGFwcmlvIG9mZmxvYWQgc3RydWN0dXJlLlxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00NjUtICovXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jPTQ2Nj1ib29sIHNqYTExMDVfZ2F0aW5nX2NoZWNrX2NvbmZsaWN0cyhzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ3MC1cdHNpemVfdCBudW1fZW50cmllcyA9IGdhdGluZ19jZmctXHUwMDNlbnVtX2VudHJpZXM7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ3MTpcdHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICpkdW1teTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDcyLVx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gcHJpdi1cdTAwM2Vkcztcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ3OS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM6NDgwOlx0ZHVtbXkgPSBremFsbG9jX2ZsZXgoKmR1bW15LCBlbnRyaWVzLCBudW1fZW50cmllcyk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ4MTpcdGlmICghZHVtbXkpIHtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDgyLVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ4NS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM6NDg2Olx0ZHVtbXktXHUwMDNlbnVtX2VudHJpZXMgPSBudW1fZW50cmllcztcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM6NDg3Olx0ZHVtbXktXHUwMDNlYmFzZV90aW1lID0gZ2F0aW5nX2NmZy1cdTAwM2ViYXNlX3RpbWU7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ4ODpcdGR1bW15LVx1MDAzZWN5Y2xlX3RpbWUgPSBnYXRpbmdfY2ZnLVx1MDAzZWN5Y2xlX3RpbWU7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ4OS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDkwLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShlLCBcdTAwMjZnYXRpbmdfY2ZnLVx1MDAzZWVudHJpZXMsIGxpc3QpXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ5MTpcdFx0ZHVtbXktXHUwMDNlZW50cmllc1tpJiM0MzsmIzQzO10uaW50ZXJ2YWwgPSBlLVx1MDAzZWludGVydmFsO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00OTItXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ5My1cdGlmIChwb3J0ICE9IC0xKSB7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ5NDpcdFx0Y29uZmxpY3QgPSBzamExMTA1X3Rhc19jaGVja19jb25mbGljdHMocHJpdiwgcG9ydCwgZHVtbXkpO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00OTUtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDk3LVx0XHRcdGNvbmZsaWN0ID0gc2phMTEwNV90YXNfY2hlY2tfY29uZmxpY3RzKHByaXYsIHBvcnQsXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ5ODpcdFx0XHRcdFx0XHRcdCAgICAgICBkdW1teSk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ5OS1cdFx0XHRpZiAoY29uZmxpY3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy01MDMtXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjUwNDpcdGtmcmVlKGR1bW15KTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNTA1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmg9NzI9c3RydWN0IHNqYTExMDVfdGFzX2RhdGEge1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuaDo3MzpcdHU4IGR1bW15O1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuaC03NC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTUyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogUmVhbHRlayBTd2l0Y2ggRHJpdmVyKioKCk9rYXksIHNvIHRoZSBzaXR1YXRpb24gaXMgdGhpczogdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIHJlbGlhYmx5IGVtdWxhdGUgYSBSZWFsdGVrIHN3aXRjaCB3aXRoIGEgZHJpdmVyLCBhdCBsZWFzdCBub3Qgd2l0aCB0aGUgc3RhbmRhcmQgUUVNVSBzZXR1cCBJJiMzOTttIGZhbWlsaWFyIHdpdGguIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IHJlcGxhY2luZyBgbXV0ZXhfaW5pdGAgd2l0aCBgZGV2bV9tdXRleF9pbml0YCBhbmQgYWRkaW5nIHNvbWUgZXJyb3IgaGFuZGxpbmcuIFRoYXQmIzM5O3Mgbm90IHRoZSBwcm9ibGVtLCB0aG91Z2guIFRoZSBpc3N1ZSBpcyB0aGlzIGRyaXZlciBpcyBkZWVwbHkgdGllZCB0byB0aGUgaGFyZHdhcmU7IGl0JiMzOTtzIGEgaGFyZHdhcmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIGV4cGVjdGluZyBwaHlzaWNhbCBpbnRlcmFjdGlvbiwgc3BlY2lmaWNhbGx5IGNvbW11bmljYXRpb24gdmlhIE1ESU8vU01JIHRvIHJlYWQgdGhlIGNoaXAgSUQuIFNvLCBiYXNlZCBvbiB0aGF0LCBteSBpbml0aWFsIGFzc2Vzc21lbnQgd291bGQgYmUgdGhhdCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkhvd2V2ZXIsIGJlZm9yZSBJIGNvbXBsZXRlbHkgd3JpdGUgaXQgb2ZmLCBJIHNob3VsZCBjb25maXJtIGEgY291cGxlIG9mIHRoaW5ncy4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIGBydGw4MzY1bWJfc3RhdHNfc2V0dXBgIGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudC4gSXQgbG9va3MgbGlrZSBgcnRsODM2NW1iX3N0YXRzX3NldHVwYCBpcyByZWFjaGVkIGZyb20gYHJ0bDgzNjVtYl9zZXR1cGAsIGFuZCBgcnRsODM2NW1iX3NldHVwYCBpcyB0aGUgYHNldHVwYCBjYWxsYmFjayBmb3IgdGhlIGBkc2Ffc3dpdGNoX29wc2AuIFRoYXQgbWVhbnMgaXQmIzM5O3MgcGFydCBvZiB0aGUgRGV2aWNlIFN3aXRjaCBBcmNoaXRlY3R1cmUgKERTQSkgcHJvYmUgYW5kIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBTaW5jZSB3ZSYjMzk7cmUgbWlzc2luZyB0aGUgaGFyZHdhcmUsIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24sIGBydGw4M3h4X3Byb2JlYCwgd29uJiMzOTt0IGdldCBjYWxsZWQsIG9yLCBpZiB3ZSBzb21laG93IG1hbmFnZWQgdG8gZm9yY2UgaXRzIGV4ZWN1dGlvbiB2aWEgcGxhdGZvcm0gZGV2aWNlIGluamVjdGlvbiwgaXQmIzM5O3MgZ29pbmcgdG8gZmFpbCBlYXJseSBpbiB0aGUgY2hpcCBJRCByZWFkIHN0YWdlIHZpYSBNRElPL1NNSS4gVGhhdCBgcnRsODN4eF9wcm9iZWAgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSB3b3J0aCBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRsODN4eF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM9MTE0PUVYUE9SVF9TWU1CT0xfTlNfR1BMKHJ0bDgzeHhfc2V0dXBfdXNlcl9tZGlvLCBcJiMzNDtSRUFMVEVLX0RTQVwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTExNi0vKipcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYzoxMTc6ICogcnRsODN4eF9wcm9iZSgpIC0gcHJvYmUgYSBSZWFsdGVrIHN3aXRjaFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTExOC0gKiBAZGV2OiB0aGUgZGV2aWNlIGJlaW5nIHByb2JlZFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYz0xMzA9c3RydWN0IHJlYWx0ZWtfcHJpdiAqXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MTMxOnJ0bDgzeHhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTEzMi1cdCAgICAgIGNvbnN0IHN0cnVjdCByZWFsdGVrX2ludGVyZmFjZV9pbmZvICppbnRlcmZhY2VfaW5mbylcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMjIyLX1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYzoyMjM6RVhQT1JUX1NZTUJPTF9OU19HUEwocnRsODN4eF9wcm9iZSwgXCYjMzQ7UkVBTFRFS19EU0FcJiMzNDspO1xuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTIyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEwMAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGBydGw4M3h4X3Byb2JlYDoKCioqRGVjb2RpbmcgdGhlIGBydGw4M3h4X3Byb2JlYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHdoYXQgdGhlIGBydGw4M3h4X3Byb2JlYCBmdW5jdGlvbiBpcyBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCwgc28gSSYjMzk7bSB0aGlua2luZywgd2hhdCYjMzk7cyBpdHMgcHVycG9zZT8gSXMgaXQgcmVzcG9uc2libGUgZm9yIGRldGVjdGluZyB0aGUgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBSVEw4M3h4IGNoaXAsIG9uIHRoZSBzeXN0ZW0/IElzIGl0IHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMsIGxpa2UgbWVtb3J5IHJlZ2lvbnMsIElSUXMsIG9yIGNsb2NrIHNpZ25hbHM/IFBlcmhhcHMgaXQmIzM5O3MgaW5pdGlhbGl6aW5nIHRoZSBoYXJkd2FyZSwgc2V0dGluZyBzb21lIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgb3IgcmVnaXN0ZXJpbmcgdGhlIGRldmljZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuZWwgc3Vic3lzdGVtcy4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlLCBtZXRpY3Vsb3VzbHksIHRvIHNlZS4gVGhpcyBpcyBsaWtlbHkgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgZHJpdmVyLCByaWdodD8gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgYmVnaW5zLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdHN0cnVjdCByZWFsdGVrX3ByaXYgKlxuIDEzMTpcdHJ0bDgzeHhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LFxuIDEzMjpcdFx0ICAgICAgY29uc3Qgc3RydWN0IHJlYWx0ZWtfaW50ZXJmYWNlX2luZm8gKmludGVyZmFjZV9pbmZvKVxuIDEzMzpcdHtcbiAxMzQ6XHRcdGNvbnN0IHN0cnVjdCByZWFsdGVrX3ZhcmlhbnQgKnZhcjtcbiAxMzU6XHRcdHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXY7XG4gMTM2Olx0XHRzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByYyA9IHtcbiAxMzc6XHRcdFx0LnJlZ19iaXRzID0gMTAsIC8qIEE0Li5BMCBSNC4uUjAgKi9cbiAxMzg6XHRcdFx0LnZhbF9iaXRzID0gMTYsXG4gMTM5Olx0XHRcdC5yZWdfc3RyaWRlID0gMSxcbiAxNDA6XHRcdFx0Lm1heF9yZWdpc3RlciA9IDB4ZmZmZixcbiAxNDE6XHRcdFx0LnJlZ19mb3JtYXRfZW5kaWFuID0gUkVHTUFQX0VORElBTl9CSUcsXG4gMTQyOlx0XHRcdC5yZWdfcmVhZCA9IGludGVyZmFjZV9pbmZvLVx1MDAzZXJlZ19yZWFkLFxuIDE0MzpcdFx0XHQucmVnX3dyaXRlID0gaW50ZXJmYWNlX2luZm8tXHUwMDNlcmVnX3dyaXRlLFxuIDE0NDpcdFx0XHQuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX05PTkUsXG4gMTQ1Olx0XHRcdC5sb2NrID0gcnRsODN4eF9sb2NrLFxuIDE0NjpcdFx0XHQudW5sb2NrID0gcnRsODN4eF91bmxvY2ssXG4gMTQ3Olx0XHR9O1xuIDE0ODpcdFx0aW50IHJldDtcbiAxNDk6XHRcbiAxNTA6XHRcdHZhciA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xuIDE1MTpcdFx0aWYgKCF2YXIpXG4gMTUyOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIDE1MzpcdFxuIDE1NDpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVfYWRkKHNpemVvZigqcHJpdiksIHZhci1cdTAwM2VjaGlwX2RhdGFfc3opLFxuIDE1NTpcdFx0XHRcdCAgICBHRlBfS0VSTkVMKTtcbiAxNTY6XHRcdGlmICghcHJpdilcbiAxNTc6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gMTU4Olx0XG4gMTU5Olx0XHRyZXQgPSBkZXZtX211dGV4X2luaXQoZGV2LCBcdTAwMjZwcml2LVx1MDAzZW1hcF9sb2NrKTtcbiAxNjA6XHRcdGlmIChyZXQpXG4gMTYxOlx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gMTYyOlx0XG4gMTYzOlx0XHRyZXQgPSBkZXZtX211dGV4X2luaXQoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXZsYW5fbG9jayk7XG4gMTY0Olx0XHRpZiAocmV0KVxuIDE2NTpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIDE2NjpcdFxuIDE2NzpcdFx0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXHUwMDI2cHJpdi1cdTAwM2VsMl9sb2NrKTtcbiAxNjg6XHRcdGlmIChyZXQpXG4gMTY5Olx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gMTcwOlx0XG4gMTcxOlx0XHRyYy5sb2NrX2FyZyA9IHByaXY7XG4gMTcyOlx0XHRwcml2LVx1MDAzZW1hcCA9IGRldm1fcmVnbWFwX2luaXQoZGV2LCBOVUxMLCBwcml2LCBcdTAwMjZyYyk7XG4gMTczOlx0XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlbWFwKSkge1xuIDE3NDpcdFx0XHRyZXQgPSBQVFJfRVJSKHByaXYtXHUwMDNlbWFwKTtcbiAxNzU6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O3JlZ21hcCBpbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4gMTc2Olx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gMTc3Olx0XHR9XG4gMTc4Olx0XG4gMTc5Olx0XHRyYy5kaXNhYmxlX2xvY2tpbmcgPSB0cnVlO1xuIDE4MDpcdFx0cHJpdi1cdTAwM2VtYXBfbm9sb2NrID0gZGV2bV9yZWdtYXBfaW5pdChkZXYsIE5VTEwsIHByaXYsIFx1MDAyNnJjKTtcbiAxODE6XHRcdGlmIChJU19FUlIocHJpdi1cdTAwM2VtYXBfbm9sb2NrKSkge1xuIDE4MjpcdFx0XHRyZXQgPSBQVFJfRVJSKHByaXYtXHUwMDNlbWFwX25vbG9jayk7XG4gMTgzOlx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtyZWdtYXAgaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDE4NDpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIDE4NTpcdFx0fVxuIDE4NjpcdFxuIDE4NzpcdFx0LyogTGluayBmb3J3YXJkIGFuZCBiYWNrd2FyZCAqL1xuIDE4ODpcdFx0cHJpdi1cdTAwM2VkZXYgPSBkZXY7XG4gMTg5Olx0XHRwcml2LVx1MDAzZXZhcmlhbnQgPSB2YXI7XG4gMTkwOlx0XHRwcml2LVx1MDAzZW9wcyA9IHZhci1cdTAwM2VvcHM7XG4gMTkxOlx0XHRwcml2LVx1MDAzZWNoaXBfZGF0YSA9ICh2b2lkICopcHJpdiAmIzQzOyBzaXplb2YoKnByaXYpO1xuIDE5MjpcdFxuIDE5MzpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiAxOTQ6XHRcbiAxOTU6XHRcdHByaXYtXHUwMDNlbGVkc19kaXNhYmxlZCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXHUwMDNlb2Zfbm9kZSxcbiAxOTY6XHRcdFx0XHRcdFx0XHQgICAgXCYjMzQ7cmVhbHRlayxkaXNhYmxlLWxlZHNcJiMzNDspO1xuIDE5NzpcdFxuIDE5ODpcdFx0LyogVE9ETzogaWYgcG93ZXIgaXMgc29mdHdhcmUgY29udHJvbGxlZCwgc2V0IHVwIGFueSByZWd1bGF0b3JzIGhlcmUgKi9cbiAxOTk6XHRcdHByaXYtXHUwMDNlcmVzZXRfY3RsID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9vcHRpb25hbChkZXYsIE5VTEwpO1xuIDIwMDpcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlc2V0X2N0bCkpXG4gMjAxOlx0XHRcdHJldHVybiBkZXZfZXJyX2Nhc3RfcHJvYmUoZGV2LCBwcml2LVx1MDAzZXJlc2V0X2N0bCxcbiAyMDI6XHRcdFx0XHRcdFx0ICBcJiMzNDtmYWlsZWQgdG8gZ2V0IHJlc2V0IGNvbnRyb2xcXG5cJiMzNDspO1xuIDIwMzpcdFxuIDIwNDpcdFx0cHJpdi1cdTAwM2VyZXNldCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwgXCYjMzQ7cmVzZXRcJiMzNDssIEdQSU9EX09VVF9MT1cpO1xuIDIwNTpcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlc2V0KSkge1xuIDIwNjpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBSRVNFVCBHUElPXFxuXCYjMzQ7KTtcbiAyMDc6XHRcdFx0cmV0dXJuIEVSUl9DQVNUKHByaXYtXHUwMDNlcmVzZXQpO1xuIDIwODpcdFx0fVxuIDIwOTpcdFxuIDIxMDpcdFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgcHJpdik7XG4gMjExOlx0XG4gMjEyOlx0XHRpZiAocHJpdi1cdTAwM2VyZXNldF9jdGwgfHwgcHJpdi1cdTAwM2VyZXNldCkge1xuIDIxMzpcdFx0XHRydGw4M3h4X3Jlc2V0X2Fzc2VydChwcml2KTtcbiAyMTQ6XHRcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O2Fzc2VydGVkIFJFU0VUXFxuXCYjMzQ7KTtcbiAyMTU6XHRcdFx0bXNsZWVwKFJFQUxURUtfSFdfU1RPUF9ERUxBWSk7XG4gMjE2Olx0XHRcdHJ0bDgzeHhfcmVzZXRfZGVhc3NlcnQocHJpdik7XG4gMjE3Olx0XHRcdG1zbGVlcChSRUFMVEVLX0hXX1NUQVJUX0RFTEFZKTtcbiAyMTg6XHRcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O2RlYXNzZXJ0ZWQgUkVTRVRcXG5cJiMzNDspO1xuIDIxOTpcdFx0fVxuIDIyMDpcdFxuIDIyMTpcdFx0cmV0dXJuIHByaXY7XG4gMjIyOlx0fVxuIDIyMzpcdEVYUE9SVF9TWU1CT0xfTlNfR1BMKHJ0bDgzeHhfcHJvYmUsIFwmIzM0O1JFQUxURUtfRFNBXCYjMzQ7KTtcbiAyMjQ6XHRcbiAyMjU6XHQvKipcbiAyMjY6XHQgKiBydGw4M3h4X3JlZ2lzdGVyX3N3aXRjaCgpIC0gZGV0ZWN0cyBhbmQgcmVnaXN0ZXIgYSBzd2l0Y2hcbiAyMjc6XHQgKiBAcHJpdjogcmVhbHRla19wcml2IHBvaW50ZXJcbiAyMjg6XHQgKlxuIDIyOTpcdCAqIFRoaXMgZnVuY3Rpb24gZmlyc3QgY2hlY2tzIHRoZSBzd2l0Y2ggY2hpcCBJRCBhbmQgcmVnaXN0ZXIgYSBEU0FcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NTUKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJUTDgzeHggSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgY2hpcCBJRCB2ZXJpZmljYXRpb24gaGFwcGVuZWQgd2l0aGluIHRoZSBgcnRsODN4eF9wcm9iZWAgZnVuY3Rpb24uIEJ1dCBub3cgSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb2RlLCBhbmQgSSBzZWUgdGhhdCBpdCBhY3R1YWxseSBkb2VzbiYjMzk7dCEgSXQganVzdCBzZXRzIHVwIHRoZSByZWdpc3RlciBtYXAgYW5kIHBlcmZvcm1zIGEgZGV2aWNlIHJlc2V0LiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBkZXRhaWwuIFNvLCBpZiB0aGUgSUQgY2hlY2sgKmlzbiYjMzk7dCogaGVyZSwgd2hlcmUgaXMgaXQgaGFwcGVuaW5nPyBSaWdodCwgaXQmIzM5O3MgdmVyeSBsaWtlbHkgaGFwcGVuaW5nIGluIGBydGw4M3h4X3JlZ2lzdGVyX3N3aXRjaGAuIExldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhleSBhcmUgbWFraW5nIHN1cmUgd2UmIzM5O3JlIHRhbGtpbmcgdG8gdGhlIHJpZ2h0IFJUTDgzeHggdmFyaWFudC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB2ZXJpZmljYXRpb24gaXMgZ29pbmcgZG93biwgSSBzdXNwZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyNTpcdC8qKlxuIDIyNjpcdCAqIHJ0bDgzeHhfcmVnaXN0ZXJfc3dpdGNoKCkgLSBkZXRlY3RzIGFuZCByZWdpc3RlciBhIHN3aXRjaFxuIDIyNzpcdCAqIEBwcml2OiByZWFsdGVrX3ByaXYgcG9pbnRlclxuIDIyODpcdCAqXG4gMjI5Olx0ICogVGhpcyBmdW5jdGlvbiBmaXJzdCBjaGVja3MgdGhlIHN3aXRjaCBjaGlwIElEIGFuZCByZWdpc3RlciBhIERTQVxuIDIzMDpcdCAqIHN3aXRjaC5cbiAyMzE6XHQgKlxuIDIzMjpcdCAqIENvbnRleHQ6IENhbiBzbGVlcC4gVGFrZXMgYW5kIHJlbGVhc2VzIHByaXYtXHUwMDNlbWFwX2xvY2suXG4gMjMzOlx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGZvciBmYWlsdXJlLlxuIDIzNDpcdCAqL1xuIDIzNTpcdGludCBydGw4M3h4X3JlZ2lzdGVyX3N3aXRjaChzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KVxuIDIzNjpcdHtcbiAyMzc6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4gMjM4Olx0XHRpbnQgcmV0O1xuIDIzOTpcdFxuIDI0MDpcdFx0cmV0ID0gcHJpdi1cdTAwM2VvcHMtXHUwMDNlZGV0ZWN0KHByaXYpO1xuIDI0MTpcdFx0aWYgKHJldCkge1xuIDI0MjpcdFx0XHRkZXZfZXJyX3Byb2JlKHByaXYtXHUwMDNlZGV2LCByZXQsIFwmIzM0O3VuYWJsZSB0byBkZXRlY3Qgc3dpdGNoXFxuXCYjMzQ7KTtcbiAyNDM6XHRcdFx0cmV0dXJuIHJldDtcbiAyNDQ6XHRcdH1cbiAyNDU6XHRcbiAyNDY6XHRcdGRzLVx1MDAzZXByaXYgPSBwcml2O1xuIDI0NzpcdFx0ZHMtXHUwMDNlZGV2ID0gcHJpdi1cdTAwM2VkZXY7XG4gMjQ4Olx0XHRkcy1cdTAwM2VvcHMgPSBwcml2LVx1MDAzZXZhcmlhbnQtXHUwMDNlZHNfb3BzO1xuIDI0OTpcdFx0ZHMtXHUwMDNlcGh5bGlua19tYWNfb3BzID0gcHJpdi1cdTAwM2V2YXJpYW50LVx1MDAzZXBoeWxpbmtfbWFjX29wcztcbiAyNTA6XHRcdGRzLVx1MDAzZW51bV9wb3J0cyA9IHByaXYtXHUwMDNlbnVtX3BvcnRzO1xuIDI1MTpcdFxuIDI1MjpcdFx0cmV0ID0gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XG4gMjUzOlx0XHRpZiAocmV0KSB7XG4gMjU0Olx0XHRcdGRldl9lcnJfcHJvYmUocHJpdi1cdTAwM2VkZXYsIHJldCwgXCYjMzQ7dW5hYmxlIHRvIHJlZ2lzdGVyIHN3aXRjaFxcblwmIzM0Oyk7XG4gMjU1Olx0XHRcdHJldHVybiByZXQ7XG4gMjU2Olx0XHR9XG4gMjU3Olx0XG4gMjU4Olx0XHRyZXR1cm4gMDtcbiAyNTk6XHR9XG4gMjYwOlx0RVhQT1JUX1NZTUJPTF9OU19HUEwocnRsODN4eF9yZWdpc3Rlcl9zd2l0Y2gsIFwmIzM0O1JFQUxURUtfRFNBXCYjMzQ7KTtcbiAyNjE6XHRcbiAyNjI6XHQvKipcbiAyNjM6XHQgKiBydGw4M3h4X3VucmVnaXN0ZXJfc3dpdGNoKCkgLSB1bnJlZ2lzdGVyIGEgc3dpdGNoXG4gMjY0Olx0ICogQHByaXY6IHJlYWx0ZWtfcHJpdiBwb2ludGVyXG4gMjY1Olx0ICpcbiAyNjY6XHQgKiBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXIgYSBEU0Egc3dpdGNoLlxuIDI2NzpcdCAqXG4gMjY4Olx0ICogQ29udGV4dDogQ2FuIHNsZWVwLlxuIDI2OTpcdCAqIFJldHVybjogTm90aGluZy5cbiAyNzA6XHQgKi9cbiAyNzE6XHR2b2lkIHJ0bDgzeHhfdW5yZWdpc3Rlcl9zd2l0Y2goc3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdilcbiAyNzI6XHR7XG4gMjczOlx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuIDI3NDpcdFxuIDI3NTpcdFx0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKGRzKTtcbiAyNzY6XHR9XG4gMjc3Olx0RVhQT1JUX1NZTUJPTF9OU19HUEwocnRsODN4eF91bnJlZ2lzdGVyX3N3aXRjaCwgXCYjMzQ7UkVBTFRFS19EU0FcJiMzNDspO1xuIDI3ODpcdFxuIDI3OTpcdC8qKlxuIDI4MDpcdCAqIHJ0bDgzeHhfc2h1dGRvd24oKSAtIHNodXRkb3duIGEgc3dpdGNoXG4gMjgxOlx0ICogQHByaXY6IHJlYWx0ZWtfcHJpdiBwb2ludGVyXG4gMjgyOlx0ICpcbiAyODM6XHQgKiBUaGlzIGZ1bmN0aW9uIHNodXRzIGRvd24gdGhlIERTQSBzd2l0Y2ggYW5kIGNsZWFucyB0aGUgcGxhdGZvcm0gZHJpdmVyIGRhdGEsXG4gMjg0Olx0ICogdG8gcHJldmVudCByZWFsdGVrX3tzbWksbWRpb31fcmVtb3ZlKCkgZnJvbSBydW5uaW5nIGFmdGVyd2FyZHMsIHdoaWNoIGlzXG4gMjg1Olx0ICogcG9zc2libGUgaWYgdGhlIHBhcmVudCBidXMgaW1wbGVtZW50cyBpdHMgb3duIC5zaHV0ZG93bigpIGFzIC5yZW1vdmUoKS5cbiAyODY6XHQgKlxuIDI4NzpcdCAqIENvbnRleHQ6IENhbiBzbGVlcC5cbiAyODg6XHQgKiBSZXR1cm46IE5vdGhpbmcuXG4gMjg5Olx0ICovXG4gMjkwOlx0dm9pZCBydGw4M3h4X3NodXRkb3duKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG4gMjkxOlx0e1xuIDI5MjpcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiAyOTM6XHRcbiAyOTQ6XHRcdGRzYV9zd2l0Y2hfc2h1dGRvd24oZHMpO1xuIDI5NTpcdFxuIDI5NjpcdFx0ZGV2X3NldF9kcnZkYXRhKHByaXYtXHUwMDNlZGV2LCBOVUxMKTtcbiAyOTc6XHR9XG4gMjk4Olx0RVhQT1JUX1NZTUJPTF9OU19HUEwocnRsODN4eF9zaHV0ZG93biwgXCYjMzQ7UkVBTFRFS19EU0FcJiMzNDspO1xuIDI5OTpcdFxuIDMwMDpcdC8qKlxuIDMwMTpcdCAqIHJ0bDgzeHhfcmVtb3ZlKCkgLSBDbGVhbnVwIGEgcmVhbHRlayBzd2l0Y2ggZHJpdmVyXG4gMzAyOlx0ICogQHByaXY6IHJlYWx0ZWtfcHJpdiBwb2ludGVyXG4gMzAzOlx0ICpcbiAzMDQ6XHQgKiBQbGFjZWhvbGQgZm9yIGNvbW1vbiBjbGVhbnVwIHByb2NlZHVyZXMuXG4gMzA1Olx0ICpcbiAzMDY6XHQgKiBDb250ZXh0OiBBbnlcbiAzMDc6XHQgKiBSZXR1cm46IG5vdGhpbmdcbiAzMDg6XHQgKi9cbiAzMDk6XHR2b2lkIHJ0bDgzeHhfcmVtb3ZlKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG4gMzEwOlx0e1xuIDMxMTpcdH1cbiAzMTI6XHRFWFBPUlRfU1lNQk9MX05TX0dQTChydGw4M3h4X3JlbW92ZSwgXCYjMzQ7UkVBTFRFS19EU0FcJiMzNDspO1xuIDMxMzpcdFxuIDMxNDpcdHZvaWQgcnRsODN4eF9yZXNldF9hc3NlcnQoc3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdilcbiAzMTU6XHR7XG4gMzE2Olx0XHRpbnQgcmV0O1xuIDMxNzpcdFxuIDMxODpcdFx0cmV0ID0gcmVzZXRfY29udHJvbF9hc3NlcnQocHJpdi1cdTAwM2VyZXNldF9jdGwpO1xuIDMxOTpcdFx0aWYgKHJldClcbiAzMjA6XHRcdFx0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXYsXG4gMzIxOlx0XHRcdFx0IFwmIzM0O0ZhaWxlZCB0byBhc3NlcnQgdGhlIHN3aXRjaCByZXNldCBjb250cm9sOiAlcGVcXG5cJiMzNDssXG4gMzIyOlx0XHRcdFx0IEVSUl9QVFIocmV0KSk7XG4gMzIzOlx0XG4gMzI0Olx0XHRncGlvZF9zZXRfdmFsdWUocHJpdi1cdTAwM2VyZXNldCwgdHJ1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjU1CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGBkZXRlY3RgIGNhbGxiYWNrIGlzIHRoZSBnYXRla2VlcGVyIGhlcmUsIGNoZWNraW5nIHRoYXQgY3JpdGljYWwgY2hpcCBJRC4gV2l0aG91dCB0aGUgcmlnaHQgaGFyZHdhcmUsIGFzIGlzIHRoZSBjYXNlIGluIG91ciBRRU1VIHNldHVwLCB0aGF0IGBkZXRlY3RgIHJvdXRpbmUgZmFpbHMgaW1tZWRpYXRlbHkuIFRoaXMgaXMga2V5LiBUaGF0IG1lYW5zIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCAqbmV2ZXIqIGdldHMgY2FsbGVkLCB3aGljaCBpbiB0dXJuIG1lYW5zIGBydGw4MzY1bWJfc2V0dXBgIGlzIGFsc28gc2tpcHBlZC4gTXkgbW9kaWZpZWQgY29kZT8gQ29tcGxldGVseSB1bnJlYWNoYWJsZSB3aXRoaW4gdGhpcyBzaW11bGF0ZWQgZW52aXJvbm1lbnQuIFRoZSBhY3R1YWwgY29kZSBjaGFuZ2UgYm9pbHMgZG93biB0byBhIHNpbXBsZSBgZGV2bV9tdXRleF9pbml0YCwgd2hpY2gsIGZyYW5rbHksIGlzIGluY3JlZGlibHkgdHJpdmlhbCBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gVGhlcmVmb3JlLCBnaXZlbiBhbGwgb2YgdGhpcywgdGhlIHBvdGVudGlhbCBiZW5lZml0IG9mIGZ1enppbmcgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aCBpcyBuZWdsaWdpYmxlLiAqKldvcnRoRnV6emluZz1mYWxzZS4qKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIFJUTDgzNjVNQiBEU0Egc3dpdGNoIGRyaXZlciwgcmVwbGFjaW5nIGBtdXRleF9pbml0YCB3aXRoIGBkZXZtX211dGV4X2luaXRgIGFuZCBhZGRpbmcgZXJyb3IgaGFuZGxpbmcuIFRoaXMgZHJpdmVyIGlzIGZvciBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoUmVhbHRlayBzd2l0Y2hlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIHJlYWQgdGhlIGNoaXAgSUQgdmlhIE1ESU8vU01JLCB3aGljaCB3aWxsIGZhaWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHRoZSBoYXJkd2FyZSwgcHJldmVudGluZyB0aGUgbW9kaWZpZWQgc2V0dXAgZnVuY3Rpb25zIGZyb20gZXZlciBiZWluZyByZWFjaGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBwdXJlbHkgYSB0cml2aWFsIHJlc291cmNlIG1hbmFnZW1lbnQgdXBkYXRlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgUlRMODM2NU1CIERTQSBzd2l0Y2ggZHJpdmVyLCByZXBsYWNpbmcgYG11dGV4X2luaXRgIHdpdGggYGRldm1fbXV0ZXhfaW5pdGAgYW5kIGFkZGluZyBlcnJvciBoYW5kbGluZy4gVGhpcyBkcml2ZXIgaXMgZm9yIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChSZWFsdGVrIHN3aXRjaGVzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBEdXJpbmcgcHJvYmUsIHRoZSBkcml2ZXIgYXR0ZW1wdHMgdG8gcmVhZCB0aGUgY2hpcCBJRCB2aWEgTURJTy9TTUksIHdoaWNoIHdpbGwgZmFpbCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGhvdXQgdGhlIGhhcmR3YXJlLCBwcmV2ZW50aW5nIHRoZSBtb2RpZmllZCBzZXR1cCBmdW5jdGlvbnMgZnJvbSBldmVyIGJlaW5nIHJlYWNoZWQuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlIGlzIHB1cmVseSBhIHRyaXZpYWwgcmVzb3VyY2UgbWFuYWdlbWVudCB1cGRhdGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6MzMuODE5MDQ2NjA1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2NDgxNDUwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIFJUTDgzNjVNQiBEU0Egc3dpdGNoIGRyaXZlciwgcmVwbGFjaW5nIGBtdXRleF9pbml0YCB3aXRoIGBkZXZtX211dGV4X2luaXRgIGFuZCBhZGRpbmcgZXJyb3IgaGFuZGxpbmcuIFRoaXMgZHJpdmVyIGlzIGZvciBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoUmVhbHRlayBzd2l0Y2hlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIHJlYWQgdGhlIGNoaXAgSUQgdmlhIE1ESU8vU01JLCB3aGljaCB3aWxsIGZhaWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHRoZSBoYXJkd2FyZSwgcHJldmVudGluZyB0aGUgbW9kaWZpZWQgc2V0dXAgZnVuY3Rpb25zIGZyb20gZXZlciBiZWluZyByZWFjaGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBwdXJlbHkgYSB0cml2aWFsIHJlc291cmNlIG1hbmFnZW1lbnQgdXBkYXRlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6MzMuODE5MDU3MDk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDM3MzA3NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMTU2ZGE1YWZmYTRkNmM1Yjk5YzA5NzUxZGViNzc1YWIwNjA1OThhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDEyOjA4OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jXFxuaW5kZXggNWFjMDkxYmY5M2M5MjMuLmFhMDUzNzViMDkwYTNlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jXFxuQEAgLTE5ODgsMTYgKzE5ODgsMTkgQEAgc3RhdGljIHZvaWQgcnRsODM2NW1iX2dldF9zdGF0czY0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZwLVxcdTAwM2VzdGF0c19sb2NrKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnRsODM2NW1iX3N0YXRzX3NldHVwKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXFxuK3N0YXRpYyBpbnQgcnRsODM2NW1iX3N0YXRzX3NldHVwKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0bDgzNjVtYiAqbWIgPSBwcml2LVxcdTAwM2VjaGlwX2RhdGE7XFxuIFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG4gXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qIFBlci1jaGlwIGdsb2JhbCBtdXRleCB0byBwcm90ZWN0IE1JQiBjb3VudGVyIGFjY2Vzcywgc2luY2UgZG9pbmdcXG4gXFx0ICogc28gcmVxdWlyZXMgYWNjZXNzaW5nIGEgc2VyaWVzIG9mIHJlZ2lzdGVycyBpbiBhIHBhcnRpY3VsYXIgb3JkZXIuXFxuIFxcdCAqL1xcbi1cXHRtdXRleF9pbml0KFxcdTAwMjZtYi1cXHUwMDNlbWliX2xvY2spO1xcbitcXHRyZXQgPSBkZXZtX211dGV4X2luaXQocHJpdi1cXHUwMDNlZGV2LCBcXHUwMDI2bWItXFx1MDAzZW1pYl9sb2NrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfYXZhaWxhYmxlX3BvcnQoZHAsIGRzKSB7XFxuIFxcdFxcdHN0cnVjdCBydGw4MzY1bWJfcG9ydCAqcCA9IFxcdTAwMjZtYi1cXHUwMDNlcG9ydHNbZHAtXFx1MDAzZWluZGV4XTtcXG5AQCAtMjAxMCw2ICsyMDEzLDggQEAgc3RhdGljIHZvaWQgcnRsODM2NW1iX3N0YXRzX3NldHVwKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cC1cXHUwMDNlbWliX3dvcmssIHJ0bDgzNjVtYl9zdGF0c19wb2xsKTtcXG4gXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bDgzNjVtYl9zdGF0c190ZWFyZG93bihzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KVxcbkBAIC0yNTY3LDcgKzI1NzIsMTIgQEAgc3RhdGljIGludCBydGw4MzY1bWJfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBTdGFydCBzdGF0aXN0aWNzIGNvdW50ZXIgcG9sbGluZyAqL1xcbi1cXHRydGw4MzY1bWJfc3RhdHNfc2V0dXAocHJpdik7XFxuK1xcdHJldCA9IHJ0bDgzNjVtYl9zdGF0c19zZXR1cChwcml2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBzZXR1cCBzdGF0czogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRnb3RvIG91dF90ZWFyZG93bl9pcnE7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jIGIvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jXFxuaW5kZXggNzExMjRlY2NhOTJmMmEuLjlkZDUwYjIwYzAwMGEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguY1xcbkBAIC0xNTYsOSArMTU2LDE3IEBAIHJ0bDgzeHhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRpZiAoIXByaXYpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiBcXG4tXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlbWFwX2xvY2spO1xcbi1cXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2V2bGFuX2xvY2spO1xcbi1cXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VsMl9sb2NrKTtcXG4rXFx0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZW1hcF9sb2NrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFxuK1xcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2V2bGFuX2xvY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZWwyX2xvY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiBcXG4gXFx0cmMubG9ja19hcmcgPSBwcml2O1xcbiBcXHRwcml2LVxcdTAwM2VtYXAgPSBkZXZtX3JlZ21hcF9pbml0KGRldiwgTlVMTCwgcHJpdiwgXFx1MDAyNnJjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6MzQuNDIzNzEzMTAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjgwNDM0NzI4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIFJUTDgzNjVNQiBEU0Egc3dpdGNoIGRyaXZlciwgcmVwbGFjaW5nIGBtdXRleF9pbml0YCB3aXRoIGBkZXZtX211dGV4X2luaXRgIGFuZCBhZGRpbmcgZXJyb3IgaGFuZGxpbmcuIFRoaXMgZHJpdmVyIGlzIGZvciBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoUmVhbHRlayBzd2l0Y2hlcykgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIHJlYWQgdGhlIGNoaXAgSUQgdmlhIE1ESU8vU01JLCB3aGljaCB3aWxsIGZhaWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHRoZSBoYXJkd2FyZSwgcHJldmVudGluZyB0aGUgbW9kaWZpZWQgc2V0dXAgZnVuY3Rpb25zIGZyb20gZXZlciBiZWluZyByZWFjaGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBwdXJlbHkgYSB0cml2aWFsIHJlc291cmNlIG1hbmFnZW1lbnQgdXBkYXRlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjE1NmRhNWFmZmE0ZDZjNWI5OWMwOTc1MWRlYjc3NWFiMDYwNTk4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDEyOjA4OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYyBiL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmNcbmluZGV4IDVhYzA5MWJmOTNjOTIzLi5hYTA1Mzc1YjA5MGEzZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmNcbkBAIC0xOTg4LDE2ICsxOTg4LDE5IEBAIHN0YXRpYyB2b2lkIHJ0bDgzNjVtYl9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0c3Bpbl91bmxvY2soXHUwMDI2cC1cdTAwM2VzdGF0c19sb2NrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsODM2NW1iX3N0YXRzX3NldHVwKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG4rc3RhdGljIGludCBydGw4MzY1bWJfc3RhdHNfc2V0dXAoc3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgcnRsODM2NW1iICptYiA9IHByaXYtXHUwMDNlY2hpcF9kYXRhO1xuIFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXHRpbnQgcmV0O1xuIFxuIFx0LyogUGVyLWNoaXAgZ2xvYmFsIG11dGV4IHRvIHByb3RlY3QgTUlCIGNvdW50ZXIgYWNjZXNzLCBzaW5jZSBkb2luZ1xuIFx0ICogc28gcmVxdWlyZXMgYWNjZXNzaW5nIGEgc2VyaWVzIG9mIHJlZ2lzdGVycyBpbiBhIHBhcnRpY3VsYXIgb3JkZXIuXG4gXHQgKi9cbi1cdG11dGV4X2luaXQoXHUwMDI2bWItXHUwMDNlbWliX2xvY2spO1xuK1x0cmV0ID0gZGV2bV9tdXRleF9pbml0KHByaXYtXHUwMDNlZGV2LCBcdTAwMjZtYi1cdTAwM2VtaWJfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9hdmFpbGFibGVfcG9ydChkcCwgZHMpIHtcbiBcdFx0c3RydWN0IHJ0bDgzNjVtYl9wb3J0ICpwID0gXHUwMDI2bWItXHUwMDNlcG9ydHNbZHAtXHUwMDNlaW5kZXhdO1xuQEAgLTIwMTAsNiArMjAxMyw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgzNjVtYl9zdGF0c19zZXR1cChzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KVxuIFx0XHQgKi9cbiBcdFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cC1cdTAwM2VtaWJfd29yaywgcnRsODM2NW1iX3N0YXRzX3BvbGwpO1xuIFx0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgzNjVtYl9zdGF0c190ZWFyZG93bihzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KVxuQEAgLTI1NjcsNyArMjU3MiwxMiBAQCBzdGF0aWMgaW50IHJ0bDgzNjVtYl9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHR9XG4gXG4gXHQvKiBTdGFydCBzdGF0aXN0aWNzIGNvdW50ZXIgcG9sbGluZyAqL1xuLVx0cnRsODM2NW1iX3N0YXRzX3NldHVwKHByaXYpO1xuK1x0cmV0ID0gcnRsODM2NW1iX3N0YXRzX3NldHVwKHByaXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBzZXR1cCBzdGF0czogJXBlXFxuXCIsXG4rXHRcdFx0RVJSX1BUUihyZXQpKTtcbitcdFx0Z290byBvdXRfdGVhcmRvd25faXJxO1xuK1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jIGIvZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jXG5pbmRleCA3MTEyNGVjY2E5MmYyYS4uOWRkNTBiMjBjMDAwYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguY1xuQEAgLTE1Niw5ICsxNTYsMTcgQEAgcnRsODN4eF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZW1hcF9sb2NrKTtcbi1cdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2V2bGFuX2xvY2spO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWwyX2xvY2spO1xuK1x0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXHUwMDI2cHJpdi1cdTAwM2VtYXBfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1xuK1x0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXHUwMDI2cHJpdi1cdTAwM2V2bGFuX2xvY2spO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFx1MDAyNnByaXYtXHUwMDNlbDJfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIFxuIFx0cmMubG9ja19hcmcgPSBwcml2O1xuIFx0cHJpdi1cdTAwM2VtYXAgPSBkZXZtX3JlZ21hcF9pbml0KGRldiwgTlVMTCwgcHJpdiwgXHUwMDI2cmMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6MzQuNDIzNzE1OTMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5Nzc1ODQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWFsdGVrIERTQSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgbWFraW5nIGEgY291cGxlIG9mIGNoYW5nZXMgdG8gdGhlIFJlYWx0ZWsgRFNBIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgaXQncyB0b3VjaGluZyBgcnRsODM2NW1iX21haW4uY2AgYW5kIGBydGw4M3h4LmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOyB0aGV5J3JlIHJlcGxhY2luZyB0aGUgc3RhbmRhcmQgYG11dGV4X2luaXRgIHdpdGggYGRldm1fbXV0ZXhfaW5pdGAgYW5kIGFkZGluZyBzb21lIHJldHVybiB2YWx1ZSBoYW5kbGluZy4gU21hcnQsIG1pbmltaXppbmcgcG90ZW50aWFsIHJlc291cmNlIGxlYWtzIGFuZCBoYW5kbGluZyBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyBncmFjZWZ1bGx5LiBTdGFuZGFyZCBzdHVmZiBmb3IgZGV2aWNlIGRyaXZlcnMuXG5cbkxldCBtZSBzZWUsIHRoaXMgaXMgYSBEU0EgZHJpdmVyLCBhIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgZHJpdmVyLCByaWdodD8gRm9yIFJlYWx0ZWsgc3dpdGNoZXMsIHBhcnRpY3VsYXJseSB0aGUgUlRMODM2NU1CIGFuZCBSVEw4M3h4IHNlcmllcy4gQ2xlYXJseSBoYXJkd2FyZS1zcGVjaWZpYywgd2hpY2ggaXMgZ29vZCB0byBrbm93IGZyb20gdGhlIGdldC1nby4gTm8gZ2VuZXJhbGl0aWVzIGhlcmUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyBhbHdheXMgZnV6emluZy4gQ2FuIEkgdGhyb3cgdGhpcyBpbnRvIFFFTVUgYW5kIHN0YXJ0IHBva2luZyBhdCBpdD8gV2l0aCBEU0Egc3dpdGNoZXMsIGl0IHVzdWFsbHkgYm9pbHMgZG93biB0byBob3cgdGhlIHN3aXRjaCBpcyBjb25uZWN0ZWQuIFR5cGljYWxseSwgaXQncyBNRElPLCBTUEksIG9yIEkyQy4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGlzIHByb2JlZC4gVGhhdCdsbCBiZSBrZXkgdG8gYW55IGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODkyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6MzguODIxNDc3Nzc2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDg4Nzk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGw4M3h4X3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uYz0xMjE9aW50IHJlYWx0ZWtfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uYy0xMjYtXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1tZGlvLmM6MTI3OlxcdHByaXYgPSBydGw4M3h4X3Byb2JlKGRldiwgXFx1MDAyNnJlYWx0ZWtfbWRpb19pbmZvKTtcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uYy0xMjgtXFx0aWYgKElTX0VSUihwcml2KSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3JlYWx0ZWstc21pLmM9MzMxPWludCByZWFsdGVrX3NtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1zbWkuYy0zMzYtXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1zbWkuYzozMzc6XFx0cHJpdiA9IHJ0bDgzeHhfcHJvYmUoZGV2LCBcXHUwMDI2cmVhbHRla19zbWlfaW5mbyk7XFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1zbWkuYy0zMzgtXFx0aWYgKElTX0VSUihwcml2KSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYz0xMTQ9RVhQT1JUX1NZTUJPTF9OU19HUEwocnRsODN4eF9zZXR1cF91c2VyX21kaW8sIFxcXCJSRUFMVEVLX0RTQVxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTExNi0vKipcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MTE3OiAqIHJ0bDgzeHhfcHJvYmUoKSAtIHByb2JlIGEgUmVhbHRlayBzd2l0Y2hcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMTE4LSAqIEBkZXY6IHRoZSBkZXZpY2UgYmVpbmcgcHJvYmVkXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM9MTMwPXN0cnVjdCByZWFsdGVrX3ByaXYgKlxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYzoxMzE6cnRsODN4eF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTEzMi1cXHQgICAgICBjb25zdCBzdHJ1Y3QgcmVhbHRla19pbnRlcmZhY2VfaW5mbyAqaW50ZXJmYWNlX2luZm8pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMjIyLX1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MjIzOkVYUE9SVF9TWU1CT0xfTlNfR1BMKHJ0bDgzeHhfcHJvYmUsIFxcXCJSRUFMVEVLX0RTQVxcXCIpO1xcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0yMjQtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4Lmg9MTQ9c3RydWN0IHJlYWx0ZWtfcHJpdiAqXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5oOjE1OnJ0bDgzeHhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguaC0xNi1cXHQgICAgICBjb25zdCBzdHJ1Y3QgcmVhbHRla19pbnRlcmZhY2VfaW5mbyAqaW50ZXJmYWNlX2luZm8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjowODozOC45NzYzNzIzMjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDMzODczMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBEcml2ZXIgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBSZWFsdGVrIHN3aXRjaCBkcml2ZXIgYW5kIHRoZSByZXBvcnRlZCBjaGFuZ2UuIEZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYWNjZXNzIG1ldGhvZCAtIGl0IHNlZW1zIGxpa2UgaXQncyBwcm9iZWQgdmlhIE1ESU8gb3IgU01JLCBwbGF0Zm9ybSBkZXZpY2Ugc3R1ZmYsIHJpZ2h0PyBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHdoZXRoZXIgSSBjYW4gZXZlbiBnZXQgdGhpcyBydW5uaW5nIGluIGEgUUVNVSBlbnZpcm9ubWVudCBmb3IgZnV6emluZy4gQ2FuIEkgbGV2ZXJhZ2Ugc3l6a2FsbGVyIGhlcmU/IEkga25vdyBzeXprYWxsZXIgY2FuIGluc3RhbnRpYXRlIHBsYXRmb3JtIGRldmljZXMsIHR5cGljYWxseSB0aHJvdWdoIGAvc3lzL2RldmljZXMvcGxhdGZvcm1gIG9yIHNpbWlsYXIgaW50ZXJmYWNlcy4gSG93ZXZlciwgcGxhdGZvcm0gZGV2aWNlIGluc3RhbnRpYXRpb24gb2Z0ZW4gcmVsaWVzIG9uIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUuXG5cbkhtbSwgd2FpdCwgaWYgc3l6a2FsbGVyICpjYW4qIGluamVjdCBub2RlcywgbWF5YmUuIEJ1dCwgZ2VuZXJhbGx5LCB0aGF0IGdldHMgaGFyZHdhcmUgc3BlY2lmaWMgcHJldHR5IGZhc3QuIFNvLCBsZXQncyBiYWNrIHVwIGFuZCBzZWUgaWYgdGhlcmUncyBhbnkgc29mdHdhcmUgZW11bGF0aW9uIHRvIHdvcmsgd2l0aC4gTm9wZSwgdGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgUmVhbHRlayBzd2l0Y2ggZHJpdmVyLiBBbmQgdGhlIGNoYW5nZSBpdHNlbGYuLi4gaXQncyByZWFsbHkganVzdCBhIGBtdXRleF9pbml0YCB0byBgZGV2bV9tdXRleF9pbml0YCBjb252ZXJzaW9uIHdpdGggc29tZSBhZGRlZCBlcnJvciBoYW5kbGluZy5cblxuSG9sZCBvbiBhIHNlY29uZCwgKmRldm1fbXV0ZXhfaW5pdCogaXMgYSBzdXBlciBzaW1wbGUgY2hhbmdlLCBhbG1vc3QgdHJpdmlhbC4gSXQncyBqdXN0IGEgbWFuYWdlZCBtdXRleCBpbml0aWFsaXphdGlvbiBhbmQgZXJyb3IgY2hlY2tpbmcuIE5vdywgSSdtIHF1ZXN0aW9uaW5nIHdoZXRoZXIgdGhpcyBpcyBldmVuICp3b3J0aCogZnV6emluZy4gSXQncyBhIHZlcnkgdGFyZ2V0ZWQgZHJpdmVyIGZvciBzcGVjaWZpYyBoYXJkd2FyZSwgYW5kIHRoZSBjb2RlIGNoYW5nZSBpcyBtaW5pbWFsLiBNeSBndXQgaXMgdGVsbGluZyBtZSB0aGlzIGlzbid0IGEgZ29vZCBjYW5kaWRhdGUuXG5cblVsdGltYXRlbHksIHRoZSBjaGFuZ2UgYm9pbHMgZG93biB0byB0aGUgYGRldm1fbXV0ZXhfaW5pdGAgcmVwbGFjZW1lbnQgYW5kIGNoZWNraW5nIHRoZSByZXR1cm4gdmFsdWUuIFRoaXMgaXMgYSBkcml2ZXIgZm9yIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgYSBzd2l0Y2guIEknbSBsZWFuaW5nIHRvd2FyZCBtYXJraW5nIHRoaXMgYXMgKldvcnRoRnV6emluZz1mYWxzZSouIFRoaXMgbG9va3MgbGlrZSBhIGhhcmR3YXJlLWRlcGVuZGVudCBkcml2ZXIgdGhhdCB3b3VsZCByZXF1aXJlIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cbkJ1dCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIERTQSBzd2l0Y2hlcyAtIHRoZXkgc29tZXRpbWVzIGdldCBmdXp6ZWQsIHRob3VnaCBpdCdzIHVzdWFsbHkgd2l0aCBhIFwiZHVtbXlcIiBEU0EgZHJpdmVyLiBJcyB0aGVyZSBhIFwiZHVtbXlcIiBEU0EgZHJpdmVyIEkgY2FuIGxldmVyYWdlPyBMZXQncyBnbyBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDY4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjA4OjQ1LjQxMDI0ODMyMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA2MDQzMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHVtbXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0yNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgga3N6ODh4M19kcml2ZV9zdHJlbmd0aHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTI2MS0gKlxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjI2MjogKiBUaGlzIGZ1bmN0aW9uIGlzIGEgZHVtbXkgaGFuZGxlci4gU2VlIGtzel9waHlsaW5rX21hY19lbmFibGVfdHhfbHBpKCkgZm9yXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjYzLSAqIGEgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgRUVFL0xQSSBoYW5kbGluZyBpbiBLU1ogc3dpdGNoZXMuXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTk0PXN0YXRpYyB1MzJcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTk1Ol9tdDc1MzBfdW5sb2NrZWRfcmVhZChzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgKnApXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE5Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjAwPXN0YXRpYyB1MzJcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjAxOl9tdDc1MzBfcmVhZChzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgKnApXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIwMi17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjE1PW10NzUzMF9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZylcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjE2LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjE3OlxcdHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTgtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjQ3PW10NzUzMF9mZGJfY21kKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgZW51bSBtdDc1MzBfZmRiX2NtZCBjbWQsIHUzMiAqcnNwKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI1MC1cXHRpbnQgcmV0O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyNTE6XFx0c3RydWN0IG10NzUzMF9kdW1teV9wb2xsIHA7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI1Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz01NDk9bXQ3NTMxX2luZF9jNDVfcGh5X3JlYWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGRldmFkLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTU1MS17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjU1MjpcXHRzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNTUzLVxcdHUzMiByZWcsIHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz01OTc9bXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBkZXZhZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy01OTkte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2MDA6XFx0c3RydWN0IG10NzUzMF9kdW1teV9wb2xsIHA7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTYwMS1cXHR1MzIgdmFsLCByZWc7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NjQ0PW10NzUzMV9pbmRfYzIyX3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY0NS17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjY0NjpcXHRzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjQ3LVxcdGludCByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NjgxPW10NzUzMV9pbmRfYzIyX3BoeV93cml0ZShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY4My17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjY4NDpcXHRzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjg1LVxcdGludCByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTYyNz1tdDc1MzBfdmxhbl9jbWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBlbnVtIG10NzUzMF92bGFuX2NtZCBjbWQsIHUxNiB2aWQpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2Mjgte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxNjI5OlxcdHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNjMwLVxcdHUzMiB2YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjQyMD1tdDc1MzBfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0MjUtXFx0c3RydWN0IGRldmljZV9ub2RlICptYWNfbnA7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI0MjY6XFx0c3RydWN0IG10NzUzMF9kdW1teV9wb2xsIHA7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0MjctXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0yNzA3PW10NzUzMV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjcwOS1cXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjcxMDpcXHRzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjcxMS1cXHR1MzIgdmFsLCBpZDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaD05Mjk9c3RydWN0IG10NzUzMF9od19zdGF0cyB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmgtOTM0LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaDo5MzU6c3RydWN0IG10NzUzMF9kdW1teV9wb2xsIHtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmgtOTM2LVxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaC05MzktXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5oOjk0MDpzdGF0aWMgaW5saW5lIHZvaWQgSU5JVF9NVDc1MzBfRFVNTVlfUE9MTChzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgKnAsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5oLTk0MS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM2NzI9c3RhdGljIGludCBtdjg4ZTYzMjBfc2V0dXBfZXJyYXRhKHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcClcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zNjczLXtcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzozNjc0OlxcdHUxNiBkdW1teTtcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zNjc1LVxcdGludCBlcnI7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zNjgzLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjM2ODQ6XFx0cmV0dXJuIG12ODhlNnh4eF9wb3J0X2hpZGRlbl9yZWFkKGNoaXAsIDAsIDB4ZiwgMHg3LCBcXHUwMDI2ZHVtbXkpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTM2ODUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9MTcwMT1zdHJ1Y3QgZmVsaXhfc3RyZWFtIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTE3MDMtXFx0dW5zaWduZWQgbG9uZyBpZDtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoxNzA0OlxcdGJvb2wgZHVtbXk7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTcwNS1cXHRpbnQgcG9ydHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0xODU0PXN0YXRpYyBpbnQgdnNjOTk1OV9zdHJlYW1fdGFibGVfYWRkKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTE4NjUtXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MTg2NjpcXHRpZiAoIXN0cmVhbS1cXHUwMDNlZHVtbXkpIHtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0xODY3LVxcdFxcdHJldCA9IHZzYzk5NTlfbWFjdF9zdHJlYW1fc2V0KG9jZWxvdCwgc3RyZWFtX2VudHJ5LCBleHRhY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9MTg5MT1zdGF0aWMgdm9pZCB2c2M5OTU5X3N0cmVhbV90YWJsZV9kZWwoc3RydWN0IG9jZWxvdCAqb2NlbG90LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTg5My17XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MTg5NDpcXHRpZiAoIXN0cmVhbS1cXHUwMDNlZHVtbXkpXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTg5NS1cXHRcXHR2c2M5OTU5X21hY3Rfc3RyZWFtX3NldChvY2Vsb3QsIHN0cmVhbSwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0yMjQ1PXN0YXRpYyBpbnQgdnNjOTk1OV9wc2ZwX2ZpbHRlcl9hZGQoc3RydWN0IG9jZWxvdCAqb2NlbG90LCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTIzNTYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2b2xkX3NmaSk7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MjM1NzpcXHRcXHRcXHRzdHJlYW1fZW50cnktXFx1MDAzZWR1bW15ID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0yMzU4LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0yMzYwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnNmaSk7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MjM2MTpcXHRcXHRcXHRzdHJlYW0uZHVtbXkgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTIzNjItXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9MjM5OD1zdGF0aWMgaW50IHZzYzk5NTlfcHNmcF9maWx0ZXJfZGVsKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTI0MzQtXFx0XFx0c3RyZWFtX2VudHJ5LVxcdTAwM2Vwb3J0cyA9IEJJVChzdHJlYW1fZW50cnktXFx1MDAzZXBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjI0MzU6XFx0XFx0aWYgKHN0cmVhbV9lbnRyeS1cXHUwMDNlZHVtbXkpIHtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoyNDM2OlxcdFxcdFxcdHN0cmVhbV9lbnRyeS1cXHUwMDNlZHVtbXkgPSBmYWxzZTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0yNDM3LVxcdFxcdFxcdHZzYzk5NTlfbWFjdF9zdHJlYW1fc2V0KG9jZWxvdCwgc3RyZWFtX2VudHJ5LCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtNTItXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzo1MzovKiBkdW1teSByZWcgdG8gY2hhbmdlIHBhZ2UgKi9cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTU0LSNkZWZpbmUgQVI5MzMxX1NXX1JFR19QQUdFXFx0XFx0XFx0MHg0MDAwMFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYz05NTE9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2UgYXI5MzMxX3ZhbGlkX3JlZ3NbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtOTczLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM6OTc0OlxcdC8qIGR1bW15IHBhZ2Ugc2VsZWN0b3IgcmVnICovXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy05NzUtXFx0cmVnbWFwX3JlZ19yYW5nZShBUjkzMzFfU1dfUkVHX1BBR0UsIEFSOTMzMV9TV19SRUdfUEFHRSksXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2RldmxpbmsuYy04LSAqIHNpemUsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHN0YXRpYyBjb25maWcgc2l6ZSBieVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZGV2bGluay5jOjk6ICogY3JlYXRpbmcgYSBkdW1teSBjb25maWcgd2l0aCBhbGwgdGFibGUgZW50cmllcyBwb3B1bGF0ZWQgdG8gdGhlIG1heCwgYW5kIGdldFxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZGV2bGluay5jLTEwLSAqIGl0cyBwYWNrZWQgbGVuZ3RoLiBUaGlzIGlzIGRvbmUgZHluYW1pY2FsbHkgYXMgb3Bwb3NlZCB0byBzaW1wbHkgaGFyZGNvZGluZ1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9keW5hbWljX2NvbmZpZy5jPTg0Mj1zdGF0aWMgc2l6ZV90IHNqYTExMTBfY2JzX2VudHJ5X3BhY2tpbmcodm9pZCAqYnVmLCB2b2lkICplbnRyeV9wdHIsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmMtODU2LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYzo4NTc6c3RhdGljIHZvaWQgc2phMTExMF9kdW1teV9jbWRfcGFja2luZyh2b2lkICpidWYsIHN0cnVjdCBzamExMTA1X2R5bl9jbWQgKmNtZCxcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmMtODU4LVxcdFxcdFxcdFxcdCAgICAgIGVudW0gcGFja2luZ19vcCBvcClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYz0xMDU4PWNvbnN0IHN0cnVjdCBzamExMTA1X2R5bmFtaWNfdGFibGVfb3BzIHNqYTExMTBfZHluX29wc1tCTEtfSURYX01BWF9EWU5dID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9keW5hbWljX2NvbmZpZy5jLTExNDgtXFx0XFx0LmVudHJ5X3BhY2tpbmcgPSBzamExMTEwX3htaWlfcGFyYW1zX2VudHJ5X3BhY2tpbmcsXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9keW5hbWljX2NvbmZpZy5jOjExNDk6XFx0XFx0LmNtZF9wYWNraW5nID0gc2phMTExMF9kdW1teV9jbWRfcGFja2luZyxcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmMtMTE1MC1cXHRcXHQubWF4X2VudHJ5X2NvdW50ID0gU0pBMTEwNV9NQVhfWE1JSV9QQVJBTVNfQ09VTlQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmMtMTE2NC1cXHRcXHQuZW50cnlfcGFja2luZyA9IHNqYTExMTBfbDJfZm9yd2FyZGluZ19wYXJhbXNfZW50cnlfcGFja2luZyxcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X2R5bmFtaWNfY29uZmlnLmM6MTE2NTpcXHRcXHQuY21kX3BhY2tpbmcgPSBzamExMTEwX2R1bW15X2NtZF9wYWNraW5nLFxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfZHluYW1pY19jb25maWcuYy0xMTY2LVxcdFxcdC5tYXhfZW50cnlfY291bnQgPSBTSkExMTA1X01BWF9MMl9GT1JXQVJESU5HX1BBUkFNU19DT1VOVCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM9MzgzPXNqYTExMDVfdGFzX2NoZWNrX2NvbmZsaWN0cyhzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDYzLSAqIFRvIHJldXNlIHRoZSBzamExMTA1X3Rhc19jaGVja19jb25mbGljdHMgbG9naWMgd2l0aG91dCByZWZhY3RvcmluZyBpdCxcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ2NDogKiBjb252ZXJ0IHRoZSBnYXRpbmcgY29uZmlndXJhdGlvbiB0byBhIGR1bW15IHRjLXRhcHJpbyBvZmZsb2FkIHN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ2NS0gKi9cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jPTQ2Nj1ib29sIHNqYTExMDVfZ2F0aW5nX2NoZWNrX2NvbmZsaWN0cyhzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDcwLVxcdHNpemVfdCBudW1fZW50cmllcyA9IGdhdGluZ19jZmctXFx1MDAzZW51bV9lbnRyaWVzO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM6NDcxOlxcdHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICpkdW1teTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ3Mi1cXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBwcml2LVxcdTAwM2VkcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDc5LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM6NDgwOlxcdGR1bW15ID0ga3phbGxvY19mbGV4KCpkdW1teSwgZW50cmllcywgbnVtX2VudHJpZXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmM6NDgxOlxcdGlmICghZHVtbXkpIHtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ4Mi1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00ODUtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYzo0ODY6XFx0ZHVtbXktXFx1MDAzZW51bV9lbnRyaWVzID0gbnVtX2VudHJpZXM7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYzo0ODc6XFx0ZHVtbXktXFx1MDAzZWJhc2VfdGltZSA9IGdhdGluZ19jZmctXFx1MDAzZWJhc2VfdGltZTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ4ODpcXHRkdW1teS1cXHUwMDNlY3ljbGVfdGltZSA9IGdhdGluZ19jZmctXFx1MDAzZWN5Y2xlX3RpbWU7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00ODktXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00OTAtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlLCBcXHUwMDI2Z2F0aW5nX2NmZy1cXHUwMDNlZW50cmllcywgbGlzdClcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ5MTpcXHRcXHRkdW1teS1cXHUwMDNlZW50cmllc1tpKytdLmludGVydmFsID0gZS1cXHUwMDNlaW50ZXJ2YWw7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00OTItXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00OTMtXFx0aWYgKHBvcnQgIT0gLTEpIHtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjQ5NDpcXHRcXHRjb25mbGljdCA9IHNqYTExMDVfdGFzX2NoZWNrX2NvbmZsaWN0cyhwcml2LCBwb3J0LCBkdW1teSk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy00OTUtXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmMtNDk3LVxcdFxcdFxcdGNvbmZsaWN0ID0gc2phMTEwNV90YXNfY2hlY2tfY29uZmxpY3RzKHByaXYsIHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYzo0OTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGR1bW15KTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTQ5OS1cXHRcXHRcXHRpZiAoY29uZmxpY3QpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jLTUwMy1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5jOjUwNDpcXHRrZnJlZShkdW1teSk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV90YXMuYy01MDUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5oPTcyPXN0cnVjdCBzamExMTA1X3Rhc19kYXRhIHtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X3Rhcy5oOjczOlxcdHU4IGR1bW15O1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfdGFzLmgtNzQtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6NDUuODYwODU5OTg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEyNzIwNjcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQ6IFJlYWx0ZWsgU3dpdGNoIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBzaXR1YXRpb24gaXMgdGhpczogdGhlcmUncyBubyB3YXkgdG8gcmVsaWFibHkgZW11bGF0ZSBhIFJlYWx0ZWsgc3dpdGNoIHdpdGggYSBkcml2ZXIsIGF0IGxlYXN0IG5vdCB3aXRoIHRoZSBzdGFuZGFyZCBRRU1VIHNldHVwIEknbSBmYW1pbGlhciB3aXRoLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwganVzdCByZXBsYWNpbmcgYG11dGV4X2luaXRgIHdpdGggYGRldm1fbXV0ZXhfaW5pdGAgYW5kIGFkZGluZyBzb21lIGVycm9yIGhhbmRsaW5nLiBUaGF0J3Mgbm90IHRoZSBwcm9ibGVtLCB0aG91Z2guIFRoZSBpc3N1ZSBpcyB0aGlzIGRyaXZlciBpcyBkZWVwbHkgdGllZCB0byB0aGUgaGFyZHdhcmU7IGl0J3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gSXQncyBleHBlY3RpbmcgcGh5c2ljYWwgaW50ZXJhY3Rpb24sIHNwZWNpZmljYWxseSBjb21tdW5pY2F0aW9uIHZpYSBNRElPL1NNSSB0byByZWFkIHRoZSBjaGlwIElELiBTbywgYmFzZWQgb24gdGhhdCwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHdvdWxkIGJlIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkhvd2V2ZXIsIGJlZm9yZSBJIGNvbXBsZXRlbHkgd3JpdGUgaXQgb2ZmLCBJIHNob3VsZCBjb25maXJtIGEgY291cGxlIG9mIHRoaW5ncy4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgYHJ0bDgzNjVtYl9zdGF0c19zZXR1cGAgaXMgZXZlbiByZWFjaGFibGUgaW4gYSBRRU1VIGVudmlyb25tZW50LiBJdCBsb29rcyBsaWtlIGBydGw4MzY1bWJfc3RhdHNfc2V0dXBgIGlzIHJlYWNoZWQgZnJvbSBgcnRsODM2NW1iX3NldHVwYCwgYW5kIGBydGw4MzY1bWJfc2V0dXBgIGlzIHRoZSBgc2V0dXBgIGNhbGxiYWNrIGZvciB0aGUgYGRzYV9zd2l0Y2hfb3BzYC4gVGhhdCBtZWFucyBpdCdzIHBhcnQgb2YgdGhlIERldmljZSBTd2l0Y2ggQXJjaGl0ZWN0dXJlIChEU0EpIHByb2JlIGFuZCByZWdpc3RyYXRpb24gcHJvY2Vzcy4gU2luY2Ugd2UncmUgbWlzc2luZyB0aGUgaGFyZHdhcmUsIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiwgYHJ0bDgzeHhfcHJvYmVgLCB3b24ndCBnZXQgY2FsbGVkLCBvciwgaWYgd2Ugc29tZWhvdyBtYW5hZ2VkIHRvIGZvcmNlIGl0cyBleGVjdXRpb24gdmlhIHBsYXRmb3JtIGRldmljZSBpbmplY3Rpb24sIGl0J3MgZ29pbmcgdG8gZmFpbCBlYXJseSBpbiB0aGUgY2hpcCBJRCByZWFkIHN0YWdlIHZpYSBNRElPL1NNSS4gVGhhdCBgcnRsODN4eF9wcm9iZWAgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSB3b3J0aCBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTUyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjA4OjUwLjk4ODA2OTcyMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMyODgyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRsODN4eF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTExND1FWFBPUlRfU1lNQk9MX05TX0dQTChydGw4M3h4X3NldHVwX3VzZXJfbWRpbywgXFxcIlJFQUxURUtfRFNBXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMTE2LS8qKlxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYzoxMTc6ICogcnRsODN4eF9wcm9iZSgpIC0gcHJvYmUgYSBSZWFsdGVrIHN3aXRjaFxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMTgtICogQGRldjogdGhlIGRldmljZSBiZWluZyBwcm9iZWRcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYz0xMzA9c3RydWN0IHJlYWx0ZWtfcHJpdiAqXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEzMTpydGw4M3h4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMTMyLVxcdCAgICAgIGNvbnN0IHN0cnVjdCByZWFsdGVrX2ludGVyZmFjZV9pbmZvICppbnRlcmZhY2VfaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0yMjItfVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYzoyMjM6RVhQT1JUX1NZTUJPTF9OU19HUEwocnRsODN4eF9wcm9iZSwgXFxcIlJFQUxURUtfRFNBXFxcIik7XFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTIyNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6NTEuMTcxMzY0NTAyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzODAzMjA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgYHJ0bDgzeHhfcHJvYmVgOlxuXG4qKkRlY29kaW5nIHRoZSBgcnRsODN4eF9wcm9iZWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgd2hhdCB0aGUgYHJ0bDgzeHhfcHJvYmVgIGZ1bmN0aW9uIGlzIGRvaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0LCBzbyBJJ20gdGhpbmtpbmcsIHdoYXQncyBpdHMgcHVycG9zZT8gSXMgaXQgcmVzcG9uc2libGUgZm9yIGRldGVjdGluZyB0aGUgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBSVEw4M3h4IGNoaXAsIG9uIHRoZSBzeXN0ZW0/IElzIGl0IHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMsIGxpa2UgbWVtb3J5IHJlZ2lvbnMsIElSUXMsIG9yIGNsb2NrIHNpZ25hbHM/IFBlcmhhcHMgaXQncyBpbml0aWFsaXppbmcgdGhlIGhhcmR3YXJlLCBzZXR0aW5nIHNvbWUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBvciByZWdpc3RlcmluZyB0aGUgZGV2aWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY29kZSwgbWV0aWN1bG91c2x5LCB0byBzZWUuIFRoaXMgaXMgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGRyaXZlciwgcmlnaHQ/IFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGJlZ2lucy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEwMCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjA4OjU0LjQwOTM5OTc1N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI5NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0c3RydWN0IHJlYWx0ZWtfcHJpdiAqXFxuIDEzMTpcXHRydGw4M3h4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gMTMyOlxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCByZWFsdGVrX2ludGVyZmFjZV9pbmZvICppbnRlcmZhY2VfaW5mbylcXG4gMTMzOlxcdHtcXG4gMTM0OlxcdFxcdGNvbnN0IHN0cnVjdCByZWFsdGVrX3ZhcmlhbnQgKnZhcjtcXG4gMTM1OlxcdFxcdHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXY7XFxuIDEzNjpcXHRcXHRzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByYyA9IHtcXG4gMTM3OlxcdFxcdFxcdC5yZWdfYml0cyA9IDEwLCAvKiBBNC4uQTAgUjQuLlIwICovXFxuIDEzODpcXHRcXHRcXHQudmFsX2JpdHMgPSAxNixcXG4gMTM5OlxcdFxcdFxcdC5yZWdfc3RyaWRlID0gMSxcXG4gMTQwOlxcdFxcdFxcdC5tYXhfcmVnaXN0ZXIgPSAweGZmZmYsXFxuIDE0MTpcXHRcXHRcXHQucmVnX2Zvcm1hdF9lbmRpYW4gPSBSRUdNQVBfRU5ESUFOX0JJRyxcXG4gMTQyOlxcdFxcdFxcdC5yZWdfcmVhZCA9IGludGVyZmFjZV9pbmZvLVxcdTAwM2VyZWdfcmVhZCxcXG4gMTQzOlxcdFxcdFxcdC5yZWdfd3JpdGUgPSBpbnRlcmZhY2VfaW5mby1cXHUwMDNlcmVnX3dyaXRlLFxcbiAxNDQ6XFx0XFx0XFx0LmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9OT05FLFxcbiAxNDU6XFx0XFx0XFx0LmxvY2sgPSBydGw4M3h4X2xvY2ssXFxuIDE0NjpcXHRcXHRcXHQudW5sb2NrID0gcnRsODN4eF91bmxvY2ssXFxuIDE0NzpcXHRcXHR9O1xcbiAxNDg6XFx0XFx0aW50IHJldDtcXG4gMTQ5OlxcdFxcbiAxNTA6XFx0XFx0dmFyID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XFxuIDE1MTpcXHRcXHRpZiAoIXZhcilcXG4gMTUyOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZV9hZGQoc2l6ZW9mKCpwcml2KSwgdmFyLVxcdTAwM2VjaGlwX2RhdGFfc3opLFxcbiAxNTU6XFx0XFx0XFx0XFx0ICAgIEdGUF9LRVJORUwpO1xcbiAxNTY6XFx0XFx0aWYgKCFwcml2KVxcbiAxNTc6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIDE1ODpcXHRcXG4gMTU5OlxcdFxcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VtYXBfbG9jayk7XFxuIDE2MDpcXHRcXHRpZiAocmV0KVxcbiAxNjE6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXZsYW5fbG9jayk7XFxuIDE2NDpcXHRcXHRpZiAocmV0KVxcbiAxNjU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZWwyX2xvY2spO1xcbiAxNjg6XFx0XFx0aWYgKHJldClcXG4gMTY5OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdHJjLmxvY2tfYXJnID0gcHJpdjtcXG4gMTcyOlxcdFxcdHByaXYtXFx1MDAzZW1hcCA9IGRldm1fcmVnbWFwX2luaXQoZGV2LCBOVUxMLCBwcml2LCBcXHUwMDI2cmMpO1xcbiAxNzM6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VtYXApKSB7XFxuIDE3NDpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHByaXYtXFx1MDAzZW1hcCk7XFxuIDE3NTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcInJlZ21hcCBpbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuIDE3NjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiAxNzc6XFx0XFx0fVxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHRyYy5kaXNhYmxlX2xvY2tpbmcgPSB0cnVlO1xcbiAxODA6XFx0XFx0cHJpdi1cXHUwMDNlbWFwX25vbG9jayA9IGRldm1fcmVnbWFwX2luaXQoZGV2LCBOVUxMLCBwcml2LCBcXHUwMDI2cmMpO1xcbiAxODE6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VtYXBfbm9sb2NrKSkge1xcbiAxODI6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihwcml2LVxcdTAwM2VtYXBfbm9sb2NrKTtcXG4gMTgzOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwicmVnbWFwIGluaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gMTg0OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIDE4NTpcXHRcXHR9XFxuIDE4NjpcXHRcXG4gMTg3OlxcdFxcdC8qIExpbmsgZm9yd2FyZCBhbmQgYmFja3dhcmQgKi9cXG4gMTg4OlxcdFxcdHByaXYtXFx1MDAzZWRldiA9IGRldjtcXG4gMTg5OlxcdFxcdHByaXYtXFx1MDAzZXZhcmlhbnQgPSB2YXI7XFxuIDE5MDpcXHRcXHRwcml2LVxcdTAwM2VvcHMgPSB2YXItXFx1MDAzZW9wcztcXG4gMTkxOlxcdFxcdHByaXYtXFx1MDAzZWNoaXBfZGF0YSA9ICh2b2lkICopcHJpdiArIHNpemVvZigqcHJpdik7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0cHJpdi1cXHUwMDNlbGVkc19kaXNhYmxlZCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXFx1MDAzZW9mX25vZGUsXFxuIDE5NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcInJlYWx0ZWssZGlzYWJsZS1sZWRzXFxcIik7XFxuIDE5NzpcXHRcXG4gMTk4OlxcdFxcdC8qIFRPRE86IGlmIHBvd2VyIGlzIHNvZnR3YXJlIGNvbnRyb2xsZWQsIHNldCB1cCBhbnkgcmVndWxhdG9ycyBoZXJlICovXFxuIDE5OTpcXHRcXHRwcml2LVxcdTAwM2VyZXNldF9jdGwgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X29wdGlvbmFsKGRldiwgTlVMTCk7XFxuIDIwMDpcXHRcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXJlc2V0X2N0bCkpXFxuIDIwMTpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9jYXN0X3Byb2JlKGRldiwgcHJpdi1cXHUwMDNlcmVzZXRfY3RsLFxcbiAyMDI6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiZmFpbGVkIHRvIGdldCByZXNldCBjb250cm9sXFxcXG5cXFwiKTtcXG4gMjAzOlxcdFxcbiAyMDQ6XFx0XFx0cHJpdi1cXHUwMDNlcmVzZXQgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsIFxcXCJyZXNldFxcXCIsIEdQSU9EX09VVF9MT1cpO1xcbiAyMDU6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZXNldCkpIHtcXG4gMjA2OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiZmFpbGVkIHRvIGdldCBSRVNFVCBHUElPXFxcXG5cXFwiKTtcXG4gMjA3OlxcdFxcdFxcdHJldHVybiBFUlJfQ0FTVChwcml2LVxcdTAwM2VyZXNldCk7XFxuIDIwODpcXHRcXHR9XFxuIDIwOTpcXHRcXG4gMjEwOlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIHByaXYpO1xcbiAyMTE6XFx0XFxuIDIxMjpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcmVzZXRfY3RsIHx8IHByaXYtXFx1MDAzZXJlc2V0KSB7XFxuIDIxMzpcXHRcXHRcXHRydGw4M3h4X3Jlc2V0X2Fzc2VydChwcml2KTtcXG4gMjE0OlxcdFxcdFxcdGRldl9kYmcoZGV2LCBcXFwiYXNzZXJ0ZWQgUkVTRVRcXFxcblxcXCIpO1xcbiAyMTU6XFx0XFx0XFx0bXNsZWVwKFJFQUxURUtfSFdfU1RPUF9ERUxBWSk7XFxuIDIxNjpcXHRcXHRcXHRydGw4M3h4X3Jlc2V0X2RlYXNzZXJ0KHByaXYpO1xcbiAyMTc6XFx0XFx0XFx0bXNsZWVwKFJFQUxURUtfSFdfU1RBUlRfREVMQVkpO1xcbiAyMTg6XFx0XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJkZWFzc2VydGVkIFJFU0VUXFxcXG5cXFwiKTtcXG4gMjE5OlxcdFxcdH1cXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0cmV0dXJuIHByaXY7XFxuIDIyMjpcXHR9XFxuIDIyMzpcXHRFWFBPUlRfU1lNQk9MX05TX0dQTChydGw4M3h4X3Byb2JlLCBcXFwiUkVBTFRFS19EU0FcXFwiKTtcXG4gMjI0OlxcdFxcbiAyMjU6XFx0LyoqXFxuIDIyNjpcXHQgKiBydGw4M3h4X3JlZ2lzdGVyX3N3aXRjaCgpIC0gZGV0ZWN0cyBhbmQgcmVnaXN0ZXIgYSBzd2l0Y2hcXG4gMjI3OlxcdCAqIEBwcml2OiByZWFsdGVrX3ByaXYgcG9pbnRlclxcbiAyMjg6XFx0ICpcXG4gMjI5OlxcdCAqIFRoaXMgZnVuY3Rpb24gZmlyc3QgY2hlY2tzIHRoZSBzd2l0Y2ggY2hpcCBJRCBhbmQgcmVnaXN0ZXIgYSBEU0FcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDg6NTQuNDA5NTU2Njg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjY0MzAxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSVEw4M3h4IEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgY2hpcCBJRCB2ZXJpZmljYXRpb24gaGFwcGVuZWQgd2l0aGluIHRoZSBgcnRsODN4eF9wcm9iZWAgZnVuY3Rpb24uIEJ1dCBub3cgSSdtIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGFuZCBJIHNlZSB0aGF0IGl0IGFjdHVhbGx5IGRvZXNuJ3QhIEl0IGp1c3Qgc2V0cyB1cCB0aGUgcmVnaXN0ZXIgbWFwIGFuZCBwZXJmb3JtcyBhIGRldmljZSByZXNldC4gVGhhdCdzIGEgY3J1Y2lhbCBkZXRhaWwuIFNvLCBpZiB0aGUgSUQgY2hlY2sgKmlzbid0KiBoZXJlLCB3aGVyZSBpcyBpdCBoYXBwZW5pbmc/IFJpZ2h0LCBpdCdzIHZlcnkgbGlrZWx5IGhhcHBlbmluZyBpbiBgcnRsODN4eF9yZWdpc3Rlcl9zd2l0Y2hgLiBMZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhleSBhcmUgbWFraW5nIHN1cmUgd2UncmUgdGFsa2luZyB0byB0aGUgcmlnaHQgUlRMODN4eCB2YXJpYW50LiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHZlcmlmaWNhdGlvbiBpcyBnb2luZyBkb3duLCBJIHN1c3BlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTU1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjowODo1Ny44NzU5ODk2OTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjI1OlxcdC8qKlxcbiAyMjY6XFx0ICogcnRsODN4eF9yZWdpc3Rlcl9zd2l0Y2goKSAtIGRldGVjdHMgYW5kIHJlZ2lzdGVyIGEgc3dpdGNoXFxuIDIyNzpcXHQgKiBAcHJpdjogcmVhbHRla19wcml2IHBvaW50ZXJcXG4gMjI4OlxcdCAqXFxuIDIyOTpcXHQgKiBUaGlzIGZ1bmN0aW9uIGZpcnN0IGNoZWNrcyB0aGUgc3dpdGNoIGNoaXAgSUQgYW5kIHJlZ2lzdGVyIGEgRFNBXFxuIDIzMDpcXHQgKiBzd2l0Y2guXFxuIDIzMTpcXHQgKlxcbiAyMzI6XFx0ICogQ29udGV4dDogQ2FuIHNsZWVwLiBUYWtlcyBhbmQgcmVsZWFzZXMgcHJpdi1cXHUwMDNlbWFwX2xvY2suXFxuIDIzMzpcXHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgZm9yIGZhaWx1cmUuXFxuIDIzNDpcXHQgKi9cXG4gMjM1OlxcdGludCBydGw4M3h4X3JlZ2lzdGVyX3N3aXRjaChzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KVxcbiAyMzY6XFx0e1xcbiAyMzc6XFx0XFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXFx1MDAyNnByaXYtXFx1MDAzZWRzO1xcbiAyMzg6XFx0XFx0aW50IHJldDtcXG4gMjM5OlxcdFxcbiAyNDA6XFx0XFx0cmV0ID0gcHJpdi1cXHUwMDNlb3BzLVxcdTAwM2VkZXRlY3QocHJpdik7XFxuIDI0MTpcXHRcXHRpZiAocmV0KSB7XFxuIDI0MjpcXHRcXHRcXHRkZXZfZXJyX3Byb2JlKHByaXYtXFx1MDAzZWRldiwgcmV0LCBcXFwidW5hYmxlIHRvIGRldGVjdCBzd2l0Y2hcXFxcblxcXCIpO1xcbiAyNDM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjQ0OlxcdFxcdH1cXG4gMjQ1OlxcdFxcbiAyNDY6XFx0XFx0ZHMtXFx1MDAzZXByaXYgPSBwcml2O1xcbiAyNDc6XFx0XFx0ZHMtXFx1MDAzZWRldiA9IHByaXYtXFx1MDAzZWRldjtcXG4gMjQ4OlxcdFxcdGRzLVxcdTAwM2VvcHMgPSBwcml2LVxcdTAwM2V2YXJpYW50LVxcdTAwM2Vkc19vcHM7XFxuIDI0OTpcXHRcXHRkcy1cXHUwMDNlcGh5bGlua19tYWNfb3BzID0gcHJpdi1cXHUwMDNldmFyaWFudC1cXHUwMDNlcGh5bGlua19tYWNfb3BzO1xcbiAyNTA6XFx0XFx0ZHMtXFx1MDAzZW51bV9wb3J0cyA9IHByaXYtXFx1MDAzZW51bV9wb3J0cztcXG4gMjUxOlxcdFxcbiAyNTI6XFx0XFx0cmV0ID0gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XFxuIDI1MzpcXHRcXHRpZiAocmV0KSB7XFxuIDI1NDpcXHRcXHRcXHRkZXZfZXJyX3Byb2JlKHByaXYtXFx1MDAzZWRldiwgcmV0LCBcXFwidW5hYmxlIHRvIHJlZ2lzdGVyIHN3aXRjaFxcXFxuXFxcIik7XFxuIDI1NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNTY6XFx0XFx0fVxcbiAyNTc6XFx0XFxuIDI1ODpcXHRcXHRyZXR1cm4gMDtcXG4gMjU5OlxcdH1cXG4gMjYwOlxcdEVYUE9SVF9TWU1CT0xfTlNfR1BMKHJ0bDgzeHhfcmVnaXN0ZXJfc3dpdGNoLCBcXFwiUkVBTFRFS19EU0FcXFwiKTtcXG4gMjYxOlxcdFxcbiAyNjI6XFx0LyoqXFxuIDI2MzpcXHQgKiBydGw4M3h4X3VucmVnaXN0ZXJfc3dpdGNoKCkgLSB1bnJlZ2lzdGVyIGEgc3dpdGNoXFxuIDI2NDpcXHQgKiBAcHJpdjogcmVhbHRla19wcml2IHBvaW50ZXJcXG4gMjY1OlxcdCAqXFxuIDI2NjpcXHQgKiBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXIgYSBEU0Egc3dpdGNoLlxcbiAyNjc6XFx0ICpcXG4gMjY4OlxcdCAqIENvbnRleHQ6IENhbiBzbGVlcC5cXG4gMjY5OlxcdCAqIFJldHVybjogTm90aGluZy5cXG4gMjcwOlxcdCAqL1xcbiAyNzE6XFx0dm9pZCBydGw4M3h4X3VucmVnaXN0ZXJfc3dpdGNoKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXFxuIDI3MjpcXHR7XFxuIDI3MzpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdGRzYV91bnJlZ2lzdGVyX3N3aXRjaChkcyk7XFxuIDI3NjpcXHR9XFxuIDI3NzpcXHRFWFBPUlRfU1lNQk9MX05TX0dQTChydGw4M3h4X3VucmVnaXN0ZXJfc3dpdGNoLCBcXFwiUkVBTFRFS19EU0FcXFwiKTtcXG4gMjc4OlxcdFxcbiAyNzk6XFx0LyoqXFxuIDI4MDpcXHQgKiBydGw4M3h4X3NodXRkb3duKCkgLSBzaHV0ZG93biBhIHN3aXRjaFxcbiAyODE6XFx0ICogQHByaXY6IHJlYWx0ZWtfcHJpdiBwb2ludGVyXFxuIDI4MjpcXHQgKlxcbiAyODM6XFx0ICogVGhpcyBmdW5jdGlvbiBzaHV0cyBkb3duIHRoZSBEU0Egc3dpdGNoIGFuZCBjbGVhbnMgdGhlIHBsYXRmb3JtIGRyaXZlciBkYXRhLFxcbiAyODQ6XFx0ICogdG8gcHJldmVudCByZWFsdGVrX3tzbWksbWRpb31fcmVtb3ZlKCkgZnJvbSBydW5uaW5nIGFmdGVyd2FyZHMsIHdoaWNoIGlzXFxuIDI4NTpcXHQgKiBwb3NzaWJsZSBpZiB0aGUgcGFyZW50IGJ1cyBpbXBsZW1lbnRzIGl0cyBvd24gLnNodXRkb3duKCkgYXMgLnJlbW92ZSgpLlxcbiAyODY6XFx0ICpcXG4gMjg3OlxcdCAqIENvbnRleHQ6IENhbiBzbGVlcC5cXG4gMjg4OlxcdCAqIFJldHVybjogTm90aGluZy5cXG4gMjg5OlxcdCAqL1xcbiAyOTA6XFx0dm9pZCBydGw4M3h4X3NodXRkb3duKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXFxuIDI5MTpcXHR7XFxuIDI5MjpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdGRzYV9zd2l0Y2hfc2h1dGRvd24oZHMpO1xcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHRkZXZfc2V0X2RydmRhdGEocHJpdi1cXHUwMDNlZGV2LCBOVUxMKTtcXG4gMjk3OlxcdH1cXG4gMjk4OlxcdEVYUE9SVF9TWU1CT0xfTlNfR1BMKHJ0bDgzeHhfc2h1dGRvd24sIFxcXCJSRUFMVEVLX0RTQVxcXCIpO1xcbiAyOTk6XFx0XFxuIDMwMDpcXHQvKipcXG4gMzAxOlxcdCAqIHJ0bDgzeHhfcmVtb3ZlKCkgLSBDbGVhbnVwIGEgcmVhbHRlayBzd2l0Y2ggZHJpdmVyXFxuIDMwMjpcXHQgKiBAcHJpdjogcmVhbHRla19wcml2IHBvaW50ZXJcXG4gMzAzOlxcdCAqXFxuIDMwNDpcXHQgKiBQbGFjZWhvbGQgZm9yIGNvbW1vbiBjbGVhbnVwIHByb2NlZHVyZXMuXFxuIDMwNTpcXHQgKlxcbiAzMDY6XFx0ICogQ29udGV4dDogQW55XFxuIDMwNzpcXHQgKiBSZXR1cm46IG5vdGhpbmdcXG4gMzA4OlxcdCAqL1xcbiAzMDk6XFx0dm9pZCBydGw4M3h4X3JlbW92ZShzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2KVxcbiAzMTA6XFx0e1xcbiAzMTE6XFx0fVxcbiAzMTI6XFx0RVhQT1JUX1NZTUJPTF9OU19HUEwocnRsODN4eF9yZW1vdmUsIFxcXCJSRUFMVEVLX0RTQVxcXCIpO1xcbiAzMTM6XFx0XFxuIDMxNDpcXHR2b2lkIHJ0bDgzeHhfcmVzZXRfYXNzZXJ0KHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXFxuIDMxNTpcXHR7XFxuIDMxNjpcXHRcXHRpbnQgcmV0O1xcbiAzMTc6XFx0XFxuIDMxODpcXHRcXHRyZXQgPSByZXNldF9jb250cm9sX2Fzc2VydChwcml2LVxcdTAwM2VyZXNldF9jdGwpO1xcbiAzMTk6XFx0XFx0aWYgKHJldClcXG4gMzIwOlxcdFxcdFxcdGRldl93YXJuKHByaXYtXFx1MDAzZWRldixcXG4gMzIxOlxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIGFzc2VydCB0aGUgc3dpdGNoIHJlc2V0IGNvbnRyb2w6ICVwZVxcXFxuXFxcIixcXG4gMzIyOlxcdFxcdFxcdFxcdCBFUlJfUFRSKHJldCkpO1xcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHRncGlvZF9zZXRfdmFsdWUocHJpdi1cXHUwMDNlcmVzZXQsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjowODo1Ny44NzYwOTMxNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5MTA2NTMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBgZGV0ZWN0YCBjYWxsYmFjayBpcyB0aGUgZ2F0ZWtlZXBlciBoZXJlLCBjaGVja2luZyB0aGF0IGNyaXRpY2FsIGNoaXAgSUQuIFdpdGhvdXQgdGhlIHJpZ2h0IGhhcmR3YXJlLCBhcyBpcyB0aGUgY2FzZSBpbiBvdXIgUUVNVSBzZXR1cCwgdGhhdCBgZGV0ZWN0YCByb3V0aW5lIGZhaWxzIGltbWVkaWF0ZWx5LiBUaGlzIGlzIGtleS4gVGhhdCBtZWFucyBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgKm5ldmVyKiBnZXRzIGNhbGxlZCwgd2hpY2ggaW4gdHVybiBtZWFucyBgcnRsODM2NW1iX3NldHVwYCBpcyBhbHNvIHNraXBwZWQuIE15IG1vZGlmaWVkIGNvZGU/IENvbXBsZXRlbHkgdW5yZWFjaGFibGUgd2l0aGluIHRoaXMgc2ltdWxhdGVkIGVudmlyb25tZW50LiBUaGUgYWN0dWFsIGNvZGUgY2hhbmdlIGJvaWxzIGRvd24gdG8gYSBzaW1wbGUgYGRldm1fbXV0ZXhfaW5pdGAsIHdoaWNoLCBmcmFua2x5LCBpcyBpbmNyZWRpYmx5IHRyaXZpYWwgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIFRoZXJlZm9yZSwgZ2l2ZW4gYWxsIG9mIHRoaXMsIHRoZSBwb3RlbnRpYWwgYmVuZWZpdCBvZiBmdXp6aW5nIHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGggaXMgbmVnbGlnaWJsZS4gKipXb3J0aEZ1enppbmc9ZmFsc2UuKipcblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NTUsIk91dHB1dFRva2VucyI6MTQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDk6MDIuNDY3MTYwNjc0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgUlRMODM2NU1CIERTQSBzd2l0Y2ggZHJpdmVyLCByZXBsYWNpbmcgYG11dGV4X2luaXRgIHdpdGggYGRldm1fbXV0ZXhfaW5pdGAgYW5kIGFkZGluZyBlcnJvciBoYW5kbGluZy4gVGhpcyBkcml2ZXIgaXMgZm9yIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChSZWFsdGVrIHN3aXRjaGVzKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBEdXJpbmcgcHJvYmUsIHRoZSBkcml2ZXIgYXR0ZW1wdHMgdG8gcmVhZCB0aGUgY2hpcCBJRCB2aWEgTURJTy9TTUksIHdoaWNoIHdpbGwgZmFpbCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGhvdXQgdGhlIGhhcmR3YXJlLCBwcmV2ZW50aW5nIHRoZSBtb2RpZmllZCBzZXR1cCBmdW5jdGlvbnMgZnJvbSBldmVyIGJlaW5nIHJlYWNoZWQuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlIGlzIHB1cmVseSBhIHRyaXZpYWwgcmVzb3VyY2UgbWFuYWdlbWVudCB1cGRhdGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBSVEw4MzY1TUIgRFNBIHN3aXRjaCBkcml2ZXIsIHJlcGxhY2luZyBgbXV0ZXhfaW5pdGAgd2l0aCBgZGV2bV9tdXRleF9pbml0YCBhbmQgYWRkaW5nIGVycm9yIGhhbmRsaW5nLiBUaGlzIGRyaXZlciBpcyBmb3Igc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKFJlYWx0ZWsgc3dpdGNoZXMpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIER1cmluZyBwcm9iZSwgdGhlIGRyaXZlciBhdHRlbXB0cyB0byByZWFkIHRoZSBjaGlwIElEIHZpYSBNRElPL1NNSSwgd2hpY2ggd2lsbCBmYWlsIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aG91dCB0aGUgaGFyZHdhcmUsIHByZXZlbnRpbmcgdGhlIG1vZGlmaWVkIHNldHVwIGZ1bmN0aW9ucyBmcm9tIGV2ZXIgYmVpbmcgcmVhY2hlZC4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2UgaXMgcHVyZWx5IGEgdHJpdmlhbCByZXNvdXJjZSBtYW5hZ2VtZW50IHVwZGF0ZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbj2qk[1] Phase: Running StartedAt: 2026-07-27 12:09:14 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbj2qk[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-27 12:09:14 +0000 UTC FinishedAt: 2026-07-27 12:09:24 +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,}