Name: series-workflow6xjrx Phase: Failed StartedAt: 2026-07-10 05:32:52 +0000 UTC FinishedAt: 2026-07-10 06:04:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xjrx[0] Phase: Succeeded StartedAt: 2026-07-10 05:32:52 +0000 UTC FinishedAt: 2026-07-10 06:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xjrx[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 05:32:52 +0000 UTC FinishedAt: 2026-07-10 06:03:32 +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+CgkJCTx0ZD4yMDI2LzA3LzEwIDA1OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcnRhc2VgIGRyaXZlciAoUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCksIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgYW5kIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gKGBydGFzZV9pbml0X29uZWApIHN0cmljdGx5IGNoZWNrcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgdmVyc2lvbnMgdmlhIE1NSU8gcmVhZHMgKGBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZGApLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIGRlZGljYXRlZCBlbXVsYXRvciwgdGhlIGRldmljZSBwcm9iZSB3aWxsIGZhaWwsIHRoZSBuZXRkZXZpY2Ugd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIChgcnRhc2Vfc3RhcnRfeG1pdGAgYW5kIGBydGFzZV9za2JfcGFkYCkgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI1Mjk5NjJmY2EzMTc3NzU0ZmU5NjY4ZmQzNjlmYjU2ZWFlMTkzYjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwNTo1OTo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlLmhcbmluZGV4IDliZDY4NzI0NzRjMTFiLi4wM2IxMmQ4M2Y2ZTlkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oXG5AQCAtMTkyLDYgJiM0MzsxOTIsMTIgQEAgZW51bSBydGFzZV9zd19mbGFnX2NvbnRlbnQge1xuIFx0UlRBU0VfU1dGX01TSVhfRU5BQkxFRCA9IEJJVCgyKSxcbiB9O1xuIFxuJiM0MztlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCB7XG4mIzQzO1x0UlRBU0VfUEFSU0VfT0ssXG4mIzQzO1x0UlRBU0VfUEFSU0VfU0tJUCxcbiYjNDM7XHRSVEFTRV9QQVJTRV9EUk9QLFxuJiM0Mzt9O1xuJiM0MztcbiAjZGVmaW5lIFJTVkRfTUFTSyAweDNGRkZDMDAwXG4gXG4gc3RydWN0IHJ0YXNlX3R4X2Rlc2Mge1xuQEAgLTM2Myw0ICYjNDM7MzY5LDYgQEAgc3RydWN0IHJ0YXNlX3ByaXZhdGUge1xuIFxuICNkZWZpbmUgUlRBU0VfTVNTX01BU0sgR0VOTUFTSygyOCwgMTgpXG4gXG4mIzQzOyNkZWZpbmUgUlRBU0VfTUlOX1BBRF9MRU4gNDdcbiYjNDM7XG4gI2VuZGlmIC8qIFJUQVNFX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jXG5pbmRleCAyNTU2Njc3NzVmMGU4Yi4uNDE2OGFkOWU0OGVhY2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmNcbkBAIC02MSw2ICYjNDM7NjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xhc3NpZnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vaXJxLmhcdTAwM2VcbkBAIC0xMjUyLDYgJiM0MzsxMjUzLDE5OSBAQCBzdGF0aWMgdTMyIHJ0YXNlX3R4X2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBjc3VtX2NtZDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCBydGFzZV9nZXRfbDNfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdFx0ICBfX2JlMTYgKnByb3RvLFxuJiM0MztcdFx0XHRcdFx0XHQgIHUzMiAqbmV0d29ya19vZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdmxhbl9oZHIgKnZoLCBfdmg7XG4mIzQzO1x0c3RydWN0IGV0aGhkciAqZWgsIF9laDtcbiYjNDM7XHR1MzIgb2Zmc2V0ID0gRVRIX0hMRU47XG4mIzQzO1xuJiM0MztcdGVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKF9laCksIFx1MDAyNl9laCk7XG4mIzQzO1x0aWYgKCFlaClcbiYjNDM7XHRcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xuJiM0MztcbiYjNDM7XHQqcHJvdG8gPSBlaC1cdTAwM2VoX3Byb3RvO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoZXRoX3R5cGVfdmxhbigqcHJvdG8pKSB7XG4mIzQzO1x0XHR2aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF92aCksIFx1MDAyNl92aCk7XG4mIzQzO1x0XHRpZiAoIXZoKVxuJiM0MztcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcbiYjNDM7XG4mIzQzO1x0XHQqcHJvdG8gPSB2aC1cdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBWTEFOX0hMRU47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqbmV0d29ya19vZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBSVEFTRV9QQVJTRV9PSztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcnRhc2VfcGFkX3RvX3RyYW5zcG9ydF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICAgICAgdTMyIHRyYW5zcG9ydF9vZmZzZXQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHUzMiBwYWRfdG9fbGVuKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHRyYW5zX2RhdGFfbGVuO1xuJiM0MztcdHUzMiBwYWRfbGVuO1xuJiM0MztcbiYjNDM7XHR0cmFuc19kYXRhX2xlbiA9IHNrYi1cdTAwM2VsZW4gLSB0cmFuc3BvcnRfb2Zmc2V0O1xuJiM0MztcdGlmICh0cmFuc19kYXRhX2xlbiBcdTAwM2U9IHBhZF90b19sZW4pXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkge1xuJiM0MztcdFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFkX2xlbiA9IHBhZF90b19sZW4gLSB0cmFuc19kYXRhX2xlbjtcbiYjNDM7XHRpZiAoX19za2JfcHV0X3BhZHRvKHNrYiwgc2tiLVx1MDAzZWxlbiAmIzQzOyBwYWRfbGVuLCBmYWxzZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgZW51bSBydGFzZV9wYXJzZV9yZXN1bHQgcnRhc2VfZ2V0X3RyYW5zcG9ydF9vZmZzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHUzMiAqdHJhbnNwb3J0X29mZnNldCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHU4ICp0cmFuc3BvcnRfcHJvdG8sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICB1MzIgKnBhZF90b19sZW4pXG4mIzQzO3tcbiYjNDM7XHRlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCByZXQ7XG4mIzQzO1x0c3RydWN0IGlwdjZoZHIgKmk2aCwgX2k2aDtcbiYjNDM7XHRzdHJ1Y3QgaXBoZHIgKmloLCBfaWg7XG4mIzQzO1x0Ym9vbCBub25fZmlyc3RfZnJhZztcbiYjNDM7XHRfX2JlMTYgcHJvdG87XG4mIzQzO1x0dTMyIG9mZnNldDtcbiYjNDM7XHR1MzIgbm87XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0YXNlX2dldF9sM19wcm90byhza2IsIFx1MDAyNnByb3RvLCBcdTAwMjZubyk7XG4mIzQzO1x0aWYgKHJldCAhPSBSVEFTRV9QQVJTRV9PSylcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocHJvdG8pIHtcbiYjNDM7XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbiYjNDM7XHRcdGloID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbm8sIHNpemVvZihfaWgpLCBcdTAwMjZfaWgpO1xuJiM0MztcdFx0aWYgKCFpaClcbiYjNDM7XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGloLVx1MDAzZWlobCBcdTAwM2MgNSlcbiYjNDM7XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4mIzQzO1xuJiM0MztcdFx0b2Zmc2V0ID0gbm8gJiM0MzsgaWgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRcdGlmIChvZmZzZXQgXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4mIzQzO1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xuJiM0MztcbiYjNDM7XHRcdG5vbl9maXJzdF9mcmFnID0gbnRvaHMoaWgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUF9PRkZTRVQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGloLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQKSB7XG4mIzQzO1x0XHRcdGlmIChza2ItXHUwMDNlbGVuIC0gb2Zmc2V0IFx1MDAzYyBzaXplb2Yoc3RydWN0IHRjcGhkcikpIHtcbiYjNDM7XHRcdFx0XHRpZiAobm9uX2ZpcnN0X2ZyYWcpIHtcbiYjNDM7XHRcdFx0XHRcdCp0cmFuc3BvcnRfb2Zmc2V0ID0gb2Zmc2V0O1xuJiM0MztcdFx0XHRcdFx0KnRyYW5zcG9ydF9wcm90byA9IElQUFJPVE9fVENQO1xuJiM0MztcdFx0XHRcdFx0KnBhZF90b19sZW4gPSBzaXplb2Yoc3RydWN0IHRjcGhkcik7XG4mIzQzO1xuJiM0MztcdFx0XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX09LO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9TS0lQO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChpaC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbiYjNDM7XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX1NLSVA7XG4mIzQzO1xuJiM0MztcdFx0KnRyYW5zcG9ydF9vZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1x0XHQqdHJhbnNwb3J0X3Byb3RvID0gSVBQUk9UT19VRFA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQgXHUwMDNjIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkge1xuJiM0MztcdFx0XHRpZiAobm9uX2ZpcnN0X2ZyYWcpIHtcbiYjNDM7XHRcdFx0XHQqcGFkX3RvX2xlbiA9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX09LO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gUlRBU0VfUEFSU0VfT0s7XG4mIzQzO1xuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4mIzQzO1x0XHRpNmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBubywgc2l6ZW9mKF9pNmgpLCBcdTAwMjZfaTZoKTtcbiYjNDM7XHRcdGlmICghaTZoKVxuJiM0MztcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcbiYjNDM7XG4mIzQzO1x0XHRvZmZzZXQgPSBubyAmIzQzOyBzaXplb2YoKmk2aCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGk2aC1cdTAwM2VuZXh0aGRyID09IElQUFJPVE9fVENQKSB7XG4mIzQzO1x0XHRcdGlmIChza2ItXHUwMDNlbGVuIC0gb2Zmc2V0IFx1MDAzYyBzaXplb2Yoc3RydWN0IHRjcGhkcikpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfU0tJUDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoaTZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19VRFApXG4mIzQzO1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9TS0lQO1xuJiM0MztcbiYjNDM7XHRcdGlmIChza2ItXHUwMDNlbGVuIC0gb2Zmc2V0IFx1MDAzYyBzaXplb2Yoc3RydWN0IHVkcGhkcikpXG4mIzQzO1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xuJiM0MztcbiYjNDM7XHRcdCp0cmFuc3BvcnRfb2Zmc2V0ID0gb2Zmc2V0O1xuJiM0MztcdFx0KnRyYW5zcG9ydF9wcm90byA9IElQUFJPVE9fVURQO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBSVEFTRV9QQVJTRV9PSztcbiYjNDM7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBSVEFTRV9QQVJTRV9TS0lQO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcnRhc2Vfc2tiX3BhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBydGFzZV9wYXJzZV9yZXN1bHQgcmV0O1xuJiM0MztcdHUzMiB0cmFuc3BvcnRfb2Zmc2V0O1xuJiM0MztcdF9fYmUxNiAqZGVzdCwgX2Rlc3Q7XG4mIzQzO1x0dTMyIHRyYW5zX2RhdGFfbGVuO1xuJiM0MztcdHUzMiBwYWRfdG9fbGVuID0gMDtcbiYjNDM7XHR1OCB0cmFuc3BvcnRfcHJvdG87XG4mIzQzO1x0dTE2IGRlc3RfcG9ydDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRhc2VfZ2V0X3RyYW5zcG9ydF9vZmZzZXQoc2tiLCBcdTAwMjZ0cmFuc3BvcnRfb2Zmc2V0LFxuJiM0MztcdFx0XHRcdFx0IFx1MDAyNnRyYW5zcG9ydF9wcm90bywgXHUwMDI2cGFkX3RvX2xlbik7XG4mIzQzO1x0aWYgKHJldCA9PSBSVEFTRV9QQVJTRV9TS0lQKSB7XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9IGVsc2UgaWYgKHJldCA9PSBSVEFTRV9QQVJTRV9EUk9QKSB7XG4mIzQzO1x0XHRuZXRkZXZfZGJnKHNrYi1cdTAwM2VkZXYsIFwmIzM0O2Ryb3AgbWFsZm9ybWVkIHBhY2tldFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGFkX3RvX2xlbiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXJ0YXNlX3BhZF90b190cmFuc3BvcnRfbGVuKHNrYiwgdHJhbnNwb3J0X29mZnNldCwgcGFkX3RvX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICh0cmFuc3BvcnRfcHJvdG8gIT0gSVBQUk9UT19VRFApXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0dHJhbnNfZGF0YV9sZW4gPSBza2ItXHUwMDNlbGVuIC0gdHJhbnNwb3J0X29mZnNldDtcbiYjNDM7XHRpZiAodHJhbnNfZGF0YV9sZW4gXHUwMDNjIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGxlbikgfHxcbiYjNDM7XHQgICAgdHJhbnNfZGF0YV9sZW4gXHUwMDNlPSBSVEFTRV9NSU5fUEFEX0xFTilcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRkZXN0ID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYixcbiYjNDM7XHRcdFx0XHQgIHRyYW5zcG9ydF9vZmZzZXQgJiM0MztcbiYjNDM7XHRcdFx0XHQgIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpLFxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKF9kZXN0KSwgXHUwMDI2X2Rlc3QpO1xuJiM0MztcdGlmICghZGVzdClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRkZXN0X3BvcnQgPSBudG9ocygqZGVzdCk7XG4mIzQzO1x0aWYgKGRlc3RfcG9ydCAhPSBQVFBfRVZfUE9SVCBcdTAwMjZcdTAwMjYgZGVzdF9wb3J0ICE9IFBUUF9HRU5fUE9SVClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnRhc2VfcGFkX3RvX3RyYW5zcG9ydF9sZW4oc2tiLCB0cmFuc3BvcnRfb2Zmc2V0LFxuJiM0MztcdFx0XHRcdFx0ICBSVEFTRV9NSU5fUEFEX0xFTik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydGFzZV94bWl0X2ZyYWdzKHN0cnVjdCBydGFzZV9yaW5nICpyaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICB1MzIgb3B0czEsIHUzMiBvcHRzMilcbiB7XG5AQCAtMTM2NSw2ICYjNDM7MTU1OSw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBydGFzZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG9wdHMyIHw9IHJ0YXNlX3R4X2NzdW0oc2tiLCBkZXYpO1xuIFx0fVxuIFxuJiM0MztcdGlmICghcnRhc2Vfc2tiX3BhZChza2IpKVxuJiM0MztcdFx0Z290byBlcnJfZG1hXzA7XG4mIzQzO1xuIFx0ZnJhZ3MgPSBydGFzZV94bWl0X2ZyYWdzKHJpbmcsIHNrYiwgb3B0czEsIG9wdHMyKTtcbiBcdGlmICh1bmxpa2VseShmcmFncyBcdTAwM2MgMCkpXG4gXHRcdGdvdG8gZXJyX2RtYV8wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA1OjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcnRhc2VgIGRyaXZlciAoUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCksIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgYW5kIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gKGBydGFzZV9pbml0X29uZWApIHN0cmljdGx5IGNoZWNrcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgdmVyc2lvbnMgdmlhIE1NSU8gcmVhZHMgKGBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZGApLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIGRlZGljYXRlZCBlbXVsYXRvciwgdGhlIGRldmljZSBwcm9iZSB3aWxsIGZhaWwsIHRoZSBuZXRkZXZpY2Ugd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIChgcnRhc2Vfc3RhcnRfeG1pdGAgYW5kIGBydGFzZV9za2JfcGFkYCkgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjUyOTk2MmZjYTMxNzc3NTRmZTk2NjhmZDM2OWZiNTZlYWUxOTNiNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDA1OjU5OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oCmluZGV4IDliZDY4NzI0NzRjMTFiLi4wM2IxMmQ4M2Y2ZTlkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2UuaApAQCAtMTkyLDYgJiM0MzsxOTIsMTIgQEAgZW51bSBydGFzZV9zd19mbGFnX2NvbnRlbnQgewogCVJUQVNFX1NXRl9NU0lYX0VOQUJMRUQgPSBCSVQoMiksCiB9OwogCiYjNDM7ZW51bSBydGFzZV9wYXJzZV9yZXN1bHQgewomIzQzOwlSVEFTRV9QQVJTRV9PSywKJiM0MzsJUlRBU0VfUEFSU0VfU0tJUCwKJiM0MzsJUlRBU0VfUEFSU0VfRFJPUCwKJiM0Mzt9OwomIzQzOwogI2RlZmluZSBSU1ZEX01BU0sgMHgzRkZGQzAwMAogCiBzdHJ1Y3QgcnRhc2VfdHhfZGVzYyB7CkBAIC0zNjMsNCAmIzQzOzM2OSw2IEBAIHN0cnVjdCBydGFzZV9wcml2YXRlIHsKIAogI2RlZmluZSBSVEFTRV9NU1NfTUFTSyBHRU5NQVNLKDI4LCAxOCkKIAomIzQzOyNkZWZpbmUgUlRBU0VfTUlOX1BBRF9MRU4gNDcKJiM0MzsKICNlbmRpZiAvKiBSVEFTRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jCmluZGV4IDI1NTY2Nzc3NWYwZThiLi40MTY4YWQ5ZTQ4ZWFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMKQEAgLTYxLDYgJiM0Mzs2MSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcG1fcnVudGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbGFzc2lmeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3RjcC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9pcnEuaCZndDsKQEAgLTEyNTIsNiAmIzQzOzEyNTMsMTk5IEBAIHN0YXRpYyB1MzIgcnRhc2VfdHhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXJldHVybiBjc3VtX2NtZDsKIH0KIAomIzQzO3N0YXRpYyBlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCBydGFzZV9nZXRfbDNfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCQkgIF9fYmUxNiAqcHJvdG8sCiYjNDM7CQkJCQkJICB1MzIgKm5ldHdvcmtfb2Zmc2V0KQomIzQzO3sKJiM0MzsJc3RydWN0IHZsYW5faGRyICp2aCwgX3ZoOwomIzQzOwlzdHJ1Y3QgZXRoaGRyICplaCwgX2VoOwomIzQzOwl1MzIgb2Zmc2V0ID0gRVRIX0hMRU47CiYjNDM7CiYjNDM7CWVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKF9laCksICZhbXA7X2VoKTsKJiM0MzsJaWYgKCFlaCkKJiM0MzsJCXJldHVybiBSVEFTRV9QQVJTRV9EUk9QOwomIzQzOwomIzQzOwkqcHJvdG8gPSBlaC0mZ3Q7aF9wcm90bzsKJiM0MzsKJiM0MzsJd2hpbGUgKGV0aF90eXBlX3ZsYW4oKnByb3RvKSkgewomIzQzOwkJdmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfdmgpLCAmYW1wO192aCk7CiYjNDM7CQlpZiAoIXZoKQomIzQzOwkJCXJldHVybiBSVEFTRV9QQVJTRV9EUk9QOwomIzQzOwomIzQzOwkJKnByb3RvID0gdmgtJmd0O2hfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CiYjNDM7CQlvZmZzZXQgJiM0Mzs9IFZMQU5fSExFTjsKJiM0MzsJfQomIzQzOwomIzQzOwkqbmV0d29ya19vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBSVEFTRV9QQVJTRV9PSzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgcnRhc2VfcGFkX3RvX3RyYW5zcG9ydF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgICAgIHUzMiB0cmFuc3BvcnRfb2Zmc2V0LAomIzQzOwkJCQkgICAgICAgdTMyIHBhZF90b19sZW4pCiYjNDM7ewomIzQzOwl1MzIgdHJhbnNfZGF0YV9sZW47CiYjNDM7CXUzMiBwYWRfbGVuOwomIzQzOwomIzQzOwl0cmFuc19kYXRhX2xlbiA9IHNrYi0mZ3Q7bGVuIC0gdHJhbnNwb3J0X29mZnNldDsKJiM0MzsJaWYgKHRyYW5zX2RhdGFfbGVuICZndDs9IHBhZF90b19sZW4pCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkgewomIzQzOwkJaWYgKHNrYl9saW5lYXJpemUoc2tiKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGFkX2xlbiA9IHBhZF90b19sZW4gLSB0cmFuc19kYXRhX2xlbjsKJiM0MzsJaWYgKF9fc2tiX3B1dF9wYWR0byhza2IsIHNrYi0mZ3Q7bGVuICYjNDM7IHBhZF9sZW4sIGZhbHNlKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCBydGFzZV9nZXRfdHJhbnNwb3J0X29mZnNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJCQkgIHUzMiAqdHJhbnNwb3J0X29mZnNldCwKJiM0MzsJCQkJCQkJICB1OCAqdHJhbnNwb3J0X3Byb3RvLAomIzQzOwkJCQkJCQkgIHUzMiAqcGFkX3RvX2xlbikKJiM0Mzt7CiYjNDM7CWVudW0gcnRhc2VfcGFyc2VfcmVzdWx0IHJldDsKJiM0MzsJc3RydWN0IGlwdjZoZHIgKmk2aCwgX2k2aDsKJiM0MzsJc3RydWN0IGlwaGRyICppaCwgX2loOwomIzQzOwlib29sIG5vbl9maXJzdF9mcmFnOwomIzQzOwlfX2JlMTYgcHJvdG87CiYjNDM7CXUzMiBvZmZzZXQ7CiYjNDM7CXUzMiBubzsKJiM0MzsKJiM0MzsJcmV0ID0gcnRhc2VfZ2V0X2wzX3Byb3RvKHNrYiwgJmFtcDtwcm90bywgJmFtcDtubyk7CiYjNDM7CWlmIChyZXQgIT0gUlRBU0VfUEFSU0VfT0spCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlzd2l0Y2ggKHByb3RvKSB7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOgomIzQzOwkJaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBubywgc2l6ZW9mKF9paCksICZhbXA7X2loKTsKJiM0MzsJCWlmICghaWgpCiYjNDM7CQkJcmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7CiYjNDM7CiYjNDM7CQlpZiAoaWgtJmd0O2lobCAmbHQ7IDUpCiYjNDM7CQkJcmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7CiYjNDM7CiYjNDM7CQlvZmZzZXQgPSBubyAmIzQzOyBpaC0mZ3Q7aWhsICogNDsKJiM0MzsJCWlmIChvZmZzZXQgJmd0OyBza2ItJmd0O2xlbikKJiM0MzsJCQlyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDsKJiM0MzsKJiM0MzsJCW5vbl9maXJzdF9mcmFnID0gbnRvaHMoaWgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyBJUF9PRkZTRVQ7CiYjNDM7CiYjNDM7CQlpZiAoaWgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fVENQKSB7CiYjNDM7CQkJaWYgKHNrYi0mZ3Q7bGVuIC0gb2Zmc2V0ICZsdDsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKSB7CiYjNDM7CQkJCWlmIChub25fZmlyc3RfZnJhZykgewomIzQzOwkJCQkJKnRyYW5zcG9ydF9vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CQkJCQkqdHJhbnNwb3J0X3Byb3RvID0gSVBQUk9UT19UQ1A7CiYjNDM7CQkJCQkqcGFkX3RvX2xlbiA9IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKJiM0MzsKJiM0MzsJCQkJCXJldHVybiBSVEFTRV9QQVJTRV9PSzsKJiM0MzsJCQkJfQomIzQzOwomIzQzOwkJCQlyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJcmV0dXJuIFJUQVNFX1BBUlNFX1NLSVA7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoaWgtJmd0O3Byb3RvY29sICE9IElQUFJPVE9fVURQKQomIzQzOwkJCXJldHVybiBSVEFTRV9QQVJTRV9TS0lQOwomIzQzOwomIzQzOwkJKnRyYW5zcG9ydF9vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CQkqdHJhbnNwb3J0X3Byb3RvID0gSVBQUk9UT19VRFA7CiYjNDM7CiYjNDM7CQlpZiAoc2tiLSZndDtsZW4gLSBvZmZzZXQgJmx0OyBzaXplb2Yoc3RydWN0IHVkcGhkcikpIHsKJiM0MzsJCQlpZiAobm9uX2ZpcnN0X2ZyYWcpIHsKJiM0MzsJCQkJKnBhZF90b19sZW4gPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CiYjNDM7CiYjNDM7CQkJCXJldHVybiBSVEFTRV9QQVJTRV9PSzsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJcmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXR1cm4gUlRBU0VfUEFSU0VfT0s7CiYjNDM7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6CiYjNDM7CQlpNmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBubywgc2l6ZW9mKF9pNmgpLCAmYW1wO19pNmgpOwomIzQzOwkJaWYgKCFpNmgpCiYjNDM7CQkJcmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7CiYjNDM7CiYjNDM7CQlvZmZzZXQgPSBubyAmIzQzOyBzaXplb2YoKmk2aCk7CiYjNDM7CiYjNDM7CQlpZiAoaTZoLSZndDtuZXh0aGRyID09IElQUFJPVE9fVENQKSB7CiYjNDM7CQkJaWYgKHNrYi0mZ3Q7bGVuIC0gb2Zmc2V0ICZsdDsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKQomIzQzOwkJCQlyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDsKJiM0MzsKJiM0MzsJCQlyZXR1cm4gUlRBU0VfUEFSU0VfU0tJUDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChpNmgtJmd0O25leHRoZHIgIT0gSVBQUk9UT19VRFApCiYjNDM7CQkJcmV0dXJuIFJUQVNFX1BBUlNFX1NLSVA7CiYjNDM7CiYjNDM7CQlpZiAoc2tiLSZndDtsZW4gLSBvZmZzZXQgJmx0OyBzaXplb2Yoc3RydWN0IHVkcGhkcikpCiYjNDM7CQkJcmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7CiYjNDM7CiYjNDM7CQkqdHJhbnNwb3J0X29mZnNldCA9IG9mZnNldDsKJiM0MzsJCSp0cmFuc3BvcnRfcHJvdG8gPSBJUFBST1RPX1VEUDsKJiM0MzsKJiM0MzsJCXJldHVybiBSVEFTRV9QQVJTRV9PSzsKJiM0MzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBSVEFTRV9QQVJTRV9TS0lQOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHJ0YXNlX3NrYl9wYWQoc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWVudW0gcnRhc2VfcGFyc2VfcmVzdWx0IHJldDsKJiM0MzsJdTMyIHRyYW5zcG9ydF9vZmZzZXQ7CiYjNDM7CV9fYmUxNiAqZGVzdCwgX2Rlc3Q7CiYjNDM7CXUzMiB0cmFuc19kYXRhX2xlbjsKJiM0MzsJdTMyIHBhZF90b19sZW4gPSAwOwomIzQzOwl1OCB0cmFuc3BvcnRfcHJvdG87CiYjNDM7CXUxNiBkZXN0X3BvcnQ7CiYjNDM7CiYjNDM7CXJldCA9IHJ0YXNlX2dldF90cmFuc3BvcnRfb2Zmc2V0KHNrYiwgJmFtcDt0cmFuc3BvcnRfb2Zmc2V0LAomIzQzOwkJCQkJICZhbXA7dHJhbnNwb3J0X3Byb3RvLCAmYW1wO3BhZF90b19sZW4pOwomIzQzOwlpZiAocmV0ID09IFJUQVNFX1BBUlNFX1NLSVApIHsKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9IGVsc2UgaWYgKHJldCA9PSBSVEFTRV9QQVJTRV9EUk9QKSB7CiYjNDM7CQluZXRkZXZfZGJnKHNrYi0mZ3Q7ZGV2LCAmIzM0O2Ryb3AgbWFsZm9ybWVkIHBhY2tldFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwYWRfdG9fbGVuICZhbXA7JmFtcDsKJiM0MzsJICAgICFydGFzZV9wYWRfdG9fdHJhbnNwb3J0X2xlbihza2IsIHRyYW5zcG9ydF9vZmZzZXQsIHBhZF90b19sZW4pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodHJhbnNwb3J0X3Byb3RvICE9IElQUFJPVE9fVURQKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXRyYW5zX2RhdGFfbGVuID0gc2tiLSZndDtsZW4gLSB0cmFuc3BvcnRfb2Zmc2V0OwomIzQzOwlpZiAodHJhbnNfZGF0YV9sZW4gJmx0OyBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBsZW4pIHx8CiYjNDM7CSAgICB0cmFuc19kYXRhX2xlbiAmZ3Q7PSBSVEFTRV9NSU5fUEFEX0xFTikKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlkZXN0ID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwKJiM0MzsJCQkJICB0cmFuc3BvcnRfb2Zmc2V0ICYjNDM7CiYjNDM7CQkJCSAgb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgZGVzdCksCiYjNDM7CQkJCSAgc2l6ZW9mKF9kZXN0KSwgJmFtcDtfZGVzdCk7CiYjNDM7CWlmICghZGVzdCkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlkZXN0X3BvcnQgPSBudG9ocygqZGVzdCk7CiYjNDM7CWlmIChkZXN0X3BvcnQgIT0gUFRQX0VWX1BPUlQgJmFtcDsmYW1wOyBkZXN0X3BvcnQgIT0gUFRQX0dFTl9QT1JUKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBydGFzZV9wYWRfdG9fdHJhbnNwb3J0X2xlbihza2IsIHRyYW5zcG9ydF9vZmZzZXQsCiYjNDM7CQkJCQkgIFJUQVNFX01JTl9QQURfTEVOKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0YXNlX3htaXRfZnJhZ3Moc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmcsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgdTMyIG9wdHMxLCB1MzIgb3B0czIpCiB7CkBAIC0xMzY1LDYgJiM0MzsxNTU5LDkgQEAgc3RhdGljIG5ldGRldl90eF90IHJ0YXNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJb3B0czIgfD0gcnRhc2VfdHhfY3N1bShza2IsIGRldik7CiAJfQogCiYjNDM7CWlmICghcnRhc2Vfc2tiX3BhZChza2IpKQomIzQzOwkJZ290byBlcnJfZG1hXzA7CiYjNDM7CiAJZnJhZ3MgPSBydGFzZV94bWl0X2ZyYWdzKHJpbmcsIHNrYiwgb3B0czEsIG9wdHMyKTsKIAlpZiAodW5saWtlbHkoZnJhZ3MgJmx0OyAwKSkKIAkJZ290byBlcnJfZG1hXzA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMjYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFsdGVrIEF1dG9tb3RpdmUgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciB0aGUgYHJ0YXNlYCBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYHJ0YXNlX21haW4uY2AuIEl0IGxvb2tzIGxpa2UgaXQgYWRkcyBhIGZ1bmN0aW9uIGNhbGxlZCBgcnRhc2Vfc2tiX3BhZGAgd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBgcnRhc2Vfc3RhcnRfeG1pdGAuIFRoZSBtYWluIHB1cnBvc2Ugc2VlbXMgdG8gYmUgcGFkZGluZyBwYWNrZXRzLCBzcGVjaWZpY2FsbHkgVURQIHBhY2tldHMgd2l0aCBkZXN0aW5hdGlvbiBwb3J0cyByZWxhdGVkIHRvIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApLCB0aG9zZSBiZWluZyBgUFRQX0VWX1BPUlRgIG9yIGBQVFBfR0VOX1BPUlRgLiBJZiB0aGVzZSBVRFAgcGFja2V0cyBhcmUgYmVsb3cgYSBjZXJ0YWluIGxlbmd0aCwgaXQgcGFkcyB0aGVtIHVwIHRvIGBSVEFTRV9NSU5fUEFEX0xFTmAsIHdoaWNoIGlzIDQ3IGJ5dGVzLgoKVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIGV2ZW4gcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsPyBUaGlzIGlzIGEgbmV0d29yayBkcml2ZXIgZm9yIGEgUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCwgd2hpY2ggaXMgYSBiaXQgbmljaGUuIE15IGZpcnN0IHRob3VnaHQgaXMgYWJvdXQgdmlydHVhbGl6YXRpb24uIENhbiBJIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBSZWFsIFBDSSBkcml2ZXJzIGxpa2UgdGhpcyBjYW4gYmUgdHJpY2t5LiBVbmxlc3MgSSYjMzk7bSB1c2luZyBzb21ldGhpbmcgbGlrZSBRRU1VIHdpdGggYSBzcGVjaWZpY2FsbHkgZW11bGF0ZWQgZGV2aWNlLCBvciBtYXliZSBgdmhjaWAgb3IgYSBgZHVtbXlgIGRldmljZSwgb3IgcGVyaGFwcyBpZiBzeXprYWxsZXIgY291bGQgaW5qZWN0IFBDSSBkZXZpY2VzLCBJJiMzOTttIGxpa2VseSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byB0ZXN0IHRoaXMgcHJvcGVybHkuIFdhaXQsIHN5emthbGxlciBkb2VzIGhhdmUgYHN5el9wY2lfZGV2aWNlX2FkZGAsIGJ1dCB0aGF0IG9ubHkgd29ya3MgaWYgdGhlIGRyaXZlciBiaW5kcyB0byBpdCBhbmQgaGFyZHdhcmUgZW11bGF0aW9uIGlzbiYjMzk7dCBuZWVkZWQsIG9yIHdlIGp1c3QgZnV6eiB0aGUgcHJvYmUuCgpBaCwgcmlnaHQhIGBydGFzZV9zdGFydF94bWl0YCBpcyB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgdGhlIHRyYW5zbWl0IGZ1bmN0aW9uIG9mIHRoZSBuZXR3b3JrIGRyaXZlci4gVG8gZXZlbiBnZXQgdGhlcmUsIHRoZSBkZXZpY2UgaGFzIHRvIGJlIHN1Y2Nlc3NmdWxseSBwcm9iZWQgYW5kIGJyb3VnaHQgdXAsIHdoaWNoIG1lYW5zIHRoZSBkcml2ZXIgaGFzIHRvIGJlIGxvYWRlZC4gU28sIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBgcnRhc2VgIGRyaXZlciBiZSBzdWNjZXNzZnVsbHkgcHJvYmVkIGFuZCBpbml0aWFsaXplZCB3aXRob3V0IHJlYWwgaGFyZHdhcmU/CgpJIG5lZWQgdG8gbG9vayBhdCB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4gTGV0JiMzOTtzIGRpZyBpbnRvIGBydGFzZV9pbml0X29uZWAgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGFzZV9pbml0X29uZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0yMzcxPXN0YXRpYyB2b2lkIHJ0YXNlX3JlbGVhc2VfYm9hcmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjM4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjIzODk6c3RhdGljIGludCBydGFzZV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIzOTAtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTI1OTQ9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0YXNlX3BjaV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjU5Ni1cdC5pZF90YWJsZSA9IHJ0YXNlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyNTk3Olx0LnByb2JlID0gcnRhc2VfaW5pdF9vbmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yNTk4LVx0LnJlbW92ZSA9IHJ0YXNlX3JlbW92ZV9vbmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2MQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbml0aWFsIEV4YW1pbmF0aW9uIG9mIGBydGFzZV9pbml0X29uZWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBwaW5wb2ludGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGBydGFzZV9pbml0X29uZWAgcm91dGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCBpdHMgYmVoYXZpb3IsIGNoZWNraW5nIGhvdyBpdCBoYW5kbGVzIGluaXRpYWxpemF0aW9uIHRhc2tzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHBpZWNlIG9mIGNvZGUgd29ya3MsIEkgd2lsbCBmb2xsb3cgdGhlIGxpbmVzIG9mIGxvZ2ljIHRvIGJ1aWxkIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjM4OTpcdHN0YXRpYyBpbnQgcnRhc2VfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4yMzkwOlx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuMjM5MTpcdHtcbjIzOTI6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMO1xuMjM5MzpcdFx0c3RydWN0IHJ0YXNlX2ludF92ZWN0b3IgKml2ZWM7XG4yMzk0Olx0XHR2b2lkIF9faW9tZW0gKmlvYWRkciA9IE5VTEw7XG4yMzk1Olx0XHRzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHA7XG4yMzk2Olx0XHRpbnQgcmV0LCBpO1xuMjM5NzpcdFxuMjM5ODpcdFx0aWYgKCFwZGV2LVx1MDAzZWlzX3BoeXNmbiBcdTAwMjZcdTAwMjYgcGRldi1cdTAwM2Vpc192aXJ0Zm4pIHtcbjIzOTk6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldixcbjI0MDA6XHRcdFx0XHRcJiMzNDtUaGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IGEgdmlydHVhbCBmdW5jdGlvbi5cJiMzNDspO1xuMjQwMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI0MDI6XHRcdH1cbjI0MDM6XHRcbjI0MDQ6XHRcdGRldl9kYmcoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0F1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0IGRyaXZlciBsb2FkZWRcXG5cJiMzNDspO1xuMjQwNTpcdFxuMjQwNjpcdFx0cmV0ID0gcnRhc2VfaW5pdF9ib2FyZChwZGV2LCBcdTAwMjZkZXYsIFx1MDAyNmlvYWRkcik7XG4yNDA3Olx0XHRpZiAocmV0KVxuMjQwODpcdFx0XHRyZXR1cm4gcmV0O1xuMjQwOTpcdFxuMjQxMDpcdFx0dHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuMjQxMTpcdFx0dHAtXHUwMDNlbW1pb19hZGRyID0gaW9hZGRyO1xuMjQxMjpcdFx0dHAtXHUwMDNlZGV2ID0gZGV2O1xuMjQxMzpcdFx0dHAtXHUwMDNlcGRldiA9IHBkZXY7XG4yNDE0Olx0XG4yNDE1Olx0XHQvKiBpZGVudGlmeSBjaGlwIGF0dGFjaGVkIHRvIGJvYXJkICovXG4yNDE2Olx0XHRyZXQgPSBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZCh0cCk7XG4yNDE3Olx0XHRpZiAocmV0KSB7XG4yNDE4Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4yNDE5Olx0XHRcdFx0XCYjMzQ7dW5rbm93biBjaGlwIHZlcnNpb246IDB4JTA4eCwgY29udGFjdCBydGFzZSBtYWludGFpbmVycyAoc2VlIE1BSU5UQUlORVJTIGZpbGUpXFxuXCYjMzQ7LFxuMjQyMDpcdFx0XHRcdHRwLVx1MDAzZWh3X3Zlcik7XG4yNDIxOlx0XHRcdGdvdG8gZXJyX291dF9yZWxlYXNlX2JvYXJkO1xuMjQyMjpcdFx0fVxuMjQyMzpcdFxuMjQyNDpcdFx0cnRhc2VfaW5pdF9zb2Z0d2FyZV92YXJpYWJsZShwZGV2LCB0cCk7XG4yNDI1Olx0XHRydGFzZV9pbml0X2hhcmR3YXJlKHRwKTtcbjI0MjY6XHRcbjI0Mjc6XHRcdHJldCA9IHJ0YXNlX2FsbG9jX2ludGVycnVwdChwZGV2LCB0cCk7XG4yNDI4Olx0XHRpZiAocmV0KSB7XG4yNDI5Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3VuYWJsZSB0byBhbGxvYyBNU0lYL01TSVxcblwmIzM0Oyk7XG4yNDMwOlx0XHRcdGdvdG8gZXJyX291dF9kZWxfbmFwaTtcbjI0MzE6XHRcdH1cbjI0MzI6XHRcbjI0MzM6XHRcdHJ0YXNlX2luaXRfbmFwaSh0cCk7XG4yNDM0Olx0XG4yNDM1Olx0XHRydGFzZV9pbml0X25ldGRldl9vcHMoZGV2KTtcbjI0MzY6XHRcbjI0Mzc6XHRcdGRldi1cdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfVFNUQVRTO1xuMjQzODpcdFxuMjQzOTpcdFx0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfFxuMjQ0MDpcdFx0XHRcdCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0hJR0hETUEgfFxuMjQ0MTpcdFx0XHRcdCBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfU0cgfFxuMjQ0MjpcdFx0XHRcdCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfSVBWNl9DU1VNIHxcbjI0NDM6XHRcdFx0XHQgTkVUSUZfRl9UU082O1xuMjQ0NDpcdFxuMjQ0NTpcdFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8XG4yNDQ2Olx0XHRcdFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1JYQ1NVTSB8XG4yNDQ3Olx0XHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8XG4yNDQ4Olx0XHRcdFx0ICAgTkVUSUZfRl9SWEFMTCB8IE5FVElGX0ZfUlhGQ1MgfFxuMjQ0OTpcdFx0XHRcdCAgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9UU082O1xuMjQ1MDpcdFxuMjQ1MTpcdFx0ZGV2LVx1MDAzZXZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08gfFxuMjQ1MjpcdFx0XHRcdCAgICAgTkVUSUZfRl9ISUdIRE1BO1xuMjQ1MzpcdFx0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0xJVkVfQUREUl9DSEFOR0U7XG4yNDU0Olx0XHRuZXRpZl9zZXRfdHNvX21heF9zaXplKGRldiwgUlRBU0VfTFNPXzY0Syk7XG4yNDU1Olx0XHRuZXRpZl9zZXRfdHNvX21heF9zZWdzKGRldiwgUlRBU0VfTklDX01BWF9QSFlTX0JVRl9DT1VOVF9MU08yKTtcbjI0NTY6XHRcbjI0NTc6XHRcdHJ0YXNlX2dldF9tYWNfYWRkcmVzcyhkZXYpO1xuMjQ1ODpcdFxuMjQ1OTpcdFx0dHAtXHUwMDNldGFsbHlfdmFkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4yNDYwOlx0XHRcdFx0XHRcdCAgICAgc2l6ZW9mKCp0cC1cdTAwM2V0YWxseV92YWRkciksXG4yNDYxOlx0XHRcdFx0XHRcdCAgICAgXHUwMDI2dHAtXHUwMDNldGFsbHlfcGFkZHIsXG4yNDYyOlx0XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4yNDYzOlx0XHRpZiAoIXRwLVx1MDAzZXRhbGx5X3ZhZGRyKSB7XG4yNDY0Olx0XHRcdHJldCA9IC1FTk9NRU07XG4yNDY1Olx0XHRcdGdvdG8gZXJyX291dF9mcmVlX2RtYTtcbjI0NjY6XHRcdH1cbjI0Njc6XHRcbjI0Njg6XHRcdHJ0YXNlX3RhbGx5X2NvdW50ZXJfY2xlYXIodHApO1xuMjQ2OTpcdFxuMjQ3MDpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7XG4yNDcxOlx0XG4yNDcyOlx0XHRuZXRpZl9jYXJyaWVyX29mZihkZXYpO1xuMjQ3MzpcdFxuMjQ3NDpcdFx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4yNDc1Olx0XHRpZiAocmV0KVxuMjQ3NjpcdFx0XHRnb3RvIGVycl9vdXRfZnJlZV9kbWE7XG4yNDc3Olx0XG4yNDc4Olx0XHRuZXRkZXZfZGJnKGRldiwgXCYjMzQ7JXBNLCBJUlEgJWRcXG5cJiMzNDssIGRldi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWlycSk7XG4yNDc5Olx0XG4yNDgwOlx0XHRyZXR1cm4gMDtcbjI0ODE6XHRcbjI0ODI6XHRlcnJfb3V0X2ZyZWVfZG1hOlxuMjQ4MzpcdFx0aWYgKHRwLVx1MDAzZXRhbGx5X3ZhZGRyKSB7XG4yNDg0Olx0XHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuMjQ4NTpcdFx0XHRcdFx0ICBzaXplb2YoKnRwLVx1MDAzZXRhbGx5X3ZhZGRyKSxcbjI0ODY6XHRcdFx0XHRcdCAgdHAtXHUwMDNldGFsbHlfdmFkZHIsXG4yNDg3Olx0XHRcdFx0XHQgIHRwLVx1MDAzZXRhbGx5X3BhZGRyKTtcbjI0ODg6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzIxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgYSBOZXR3b3JrIERldmljZSBEcml2ZXIqKgoKQWxyaWdodCwgc28gdGhlIGRyaXZlciYjMzk7cyB0cnlpbmcgdG8gcmVnaXN0ZXIgYSBuZXR3b3JrIGRldmljZSwgd2hpY2ggaXMgc3RhbmRhcmQgcHJvY2VkdXJlLiBCdXQgaXQmIzM5O3MgaGl0dGluZyBhIHJvYWRibG9jay4gSXQgc2VlbXMgdGhlIHJlZ2lzdHJhdGlvbiBpcyBnYXRlZCBieSBhIGNhbGwgdG8gYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBzcGVjaWZpYyBmdW5jdGlvbiwgbGlrZWx5IHRpZWQgdG8gc29tZSBoYXJkd2FyZS1zcGVjaWZpYyB2YWxpZGF0aW9uIHJlbGF0ZWQgdG8gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sbGVyIChNQUMpIHZlcnNpb24uIEhtbSwgdGhlIE1BQyB2ZXJzaW9uIGlzIGludGVyZXN0aW5nLiBJIHdvdWxkIHRoaW5rIHRoYXQgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGRvIHdpdGggYSByZWdpc3RlciB2YWx1ZSBhbmQgdGhlIGFwcHJvcHJpYXRlIGhhcmR3YXJlLgoKTGV0JiMzOTtzIGRpZyBpbnRvIGBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZGAgaW1tZWRpYXRlbHkuIFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbiBpcyBjcml0aWNhbCB0byBmaWd1cmUgb3V0IHdoeSB0aGUgZGV2aWNlIGlzbiYjMzk7dCByZWdpc3RlcmluZy4gSXQmIzM5O3MgcHJvYmFibHkgY2hlY2tpbmcgZm9yIGNvbXBhdGliaWxpdHksIGZlYXR1cmUgYXZhaWxhYmlsaXR5LCBvciBwZXJoYXBzIGV2ZW4gYSBzdXBwb3J0ZWQgc2lsaWNvbiByZXZpc2lvbi4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCB0aGlzIHZhbGlkYXRpb24gY291bGQgYmUgaGFwcGVuaW5nIGF0IGRpZmZlcmVudCBwb2ludHMgb2YgaW5pdGlhbGl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGxvZ2ljIHRvIHNlZSB3aGF0IGNvbmRpdGlvbnMgYXJlIGZhaWxpbmcgYW5kLCBmcm9tIHRoZXJlLCBkZWNpZGUgbXkgbmV4dCB0cm91Ymxlc2hvb3Rpbmcgc3RlcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjI1Nz1zdGF0aWMgdm9pZCBydGFzZV9pbml0X3NvZnR3YXJlX3ZhcmlhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIyODAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyMjgxOnN0YXRpYyBpbnQgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWQoc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjI4Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjM4OT1zdGF0aWMgaW50IHJ0YXNlX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTI0MTUtXHQvKiBpZGVudGlmeSBjaGlwIGF0dGFjaGVkIHRvIGJvYXJkICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyNDE2Olx0cmV0ID0gcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWQodHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjQxNy1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTMyCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZW5jb3VudGVyaW5nIHRoYXQgcGllY2Ugb2YgY29kZToKCioqQ2hlY2tpbmcgYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYCoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7T2theSwgdGhpcyBpcyBzb21lIGtpbmQgb2YgUmVhbC1UaW1lIEFwcGxpY2F0aW9uIFNlY3VyaXR5IEVuZ2luZSAoUlRhc2UpIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gdmFsaWRhdGUgYSBtYWNPUyB2ZXJzaW9uLiYjMzQ7IFRoZSBuYW1pbmcgY29udmVudGlvbiBpcyBwcmV0dHkgY2xlYXIsIHJpZ2h0PyBgcnRhc2VfYCBpbmRpY2F0ZXMgaXQmIzM5O3MgcGFydCBvZiB0aGUgUlRhc2UgZnJhbWV3b3JrLCBgY2hlY2tfYCBpcyBhIHR5cGljYWwgdmVyaWZpY2F0aW9uIGZ1bmN0aW9uIHByZWZpeCwgYG1hY192ZXJzaW9uX2AgbmFycm93cyB0aGUgc2NvcGUgdG8gbWFjT1MgdmVyc2lvbnMsIGFuZCBgdmFsaWRgIHN1Z2dlc3RzIGEgYm9vbGVhbiByZXR1cm4sIHByb2JhYmx5IGluZGljYXRpbmcgd2hldGhlciBhIGdpdmVuIHZlcnNpb24gbWVldHMgYSBjZXJ0YWluIGNyaXRlcmlhLgoKTm93LCBteSBtaW5kIHN0YXJ0cyByYWNpbmcgd2l0aCBwb3NzaWJpbGl0aWVzLiBXaGF0IGlzIGl0IHZhbGlkYXRpbmc/IElzIGl0IGNoZWNraW5nIGZvciBhICptaW5pbXVtKiBzdXBwb3J0ZWQgdmVyc2lvbj8gUGVyaGFwcyBhIHNwZWNpZmljICpyYW5nZSogb2YgdmVyc2lvbnM/IE9yIGlzIGl0IG1vcmUgY29tcGxleCB0aGFuIHRoYXQ/IElzIGl0IGxvb2tpbmcgZm9yIGtub3duIHZ1bG5lcmFibGUgdmVyc2lvbnM/IE9yIGV2ZW4gc3BlY2lmaWMgYnVpbGRzPyBJIG5lZWQgdG8gc2VlIHRoZSBmdW5jdGlvbiYjMzk7cyBpbnRlcm5hbCBsb2dpYyB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHZhbGlkYXRpb24gY3JpdGVyaWEgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5KiB0aGlzIHZhbGlkYXRpb24gaXMgbmVlZGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IOKAkyB0aGUgc3Vycm91bmRpbmcgY29kZSB0aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24g4oCTIGlzIGNydWNpYWwuIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIGFzc2Vzc2luZyBpdHMgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI4MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjgxOlx0c3RhdGljIGludCBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZChzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApXG4yMjgyOlx0e1xuMjI4MzpcdFx0aW50IHJldCA9IC1FTk9ERVY7XG4yMjg0Olx0XG4yMjg1Olx0XHR0cC1cdTAwM2Vod192ZXIgPSBydGFzZV9yMzIodHAsIFJUQVNFX1RYX0NPTkZJR18wKSBcdTAwMjYgUlRBU0VfSFdfVkVSX01BU0s7XG4yMjg2Olx0XG4yMjg3Olx0XHRzd2l0Y2ggKHRwLVx1MDAzZWh3X3Zlcikge1xuMjI4ODpcdFx0Y2FzZSBSVEFTRV9IV19WRVJfOTA2WF83WEE6XG4yMjg5Olx0XHRjYXNlIFJUQVNFX0hXX1ZFUl85MDZYXzdYQzpcbjIyOTA6XHRcdGNhc2UgUlRBU0VfSFdfVkVSXzkwN1hEX1YxOlxuMjI5MTpcdFx0Y2FzZSBSVEFTRV9IV19WRVJfOTA3WERfVkE6XG4yMjkyOlx0XHRcdHJldCA9IDA7XG4yMjkzOlx0XHRcdGJyZWFrO1xuMjI5NDpcdFx0fVxuMjI5NTpcdFxuMjI5NjpcdFx0cmV0dXJuIHJldDtcbjIyOTc6XHR9XG4yMjk4Olx0XG4yMjk5Olx0c3RhdGljIGludCBydGFzZV9pbml0X2JvYXJkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqKmRldl9vdXQsXG4yMzAwOlx0XHRcdFx0ICAgIHZvaWQgX19pb21lbSAqKmlvYWRkcl9vdXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWdpc3RlciBSZWFkIGluIGEgU3l6a2FsbGVyIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQmIzM5O3MgcmVhZGluZyBhIHJlZ2lzdGVyLCBgUlRBU0VfVFhfQ09ORklHXzBgLCB1c2luZyBgcnRhc2VfcjMyKHRwLCBSVEFTRV9UWF9DT05GSUdfMClgLiBOYXR1cmFsbHksIGlmIHRoaXMgd2VyZSBydW5uaW5nIG9uIGFjdHVhbCBoYXJkd2FyZSwgdGhpcyB3b3VsZCBiZSBhIGRpcmVjdCByZWFkIG9mIHRoZSBoYXJkd2FyZSByZWdpc3Rlci4gQnV0IHNpbmNlIHdlJiMzOTtyZSBpbiBhIFN5emthbGxlciBlbnZpcm9ubWVudCwgdGhpbmdzIGdldCBhIGJpdCBtb3JlIGludGVyZXN0aW5nLiBgcnRhc2VfcjMyYCBpcyBnb2luZyB0byBiZSBhY2Nlc3NpbmcgbWVtb3J5IHRoYXQgZWl0aGVyIGlzbiYjMzk7dCBtYXBwZWQsIG9yIGlzIHByb3ZpZGVkIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtIGluIGEgc2ltdWxhdGVkIHdheSBmb3IgYSBkZXZpY2UgdGhhdCBkb2VzbiYjMzk7dCBwaHlzaWNhbGx5IGV4aXN0LgoKTm93LCB3YWl0IGEgbWludXRlLCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYHN5el9wY2lfZGV2aWNlX2FkZGAsIHdoaWNoIGFsbG93cyB1cyB0byBlbXVsYXRlIFBDSSBkZXZpY2VzLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgaXQgZW11bGF0ZSBhbiBgcnRhc2VgIGRldmljZSBzcGVjaWZpY2FsbHk/IE5vLCBpdCYjMzk7cyBwcmV0dHkgZ2VuZXJpYy4gU3l6a2FsbGVyJiMzOTtzIFBDSSBlbXVsYXRpb24gaXMgZWl0aGVyIHF1aXRlIGJyb2FkIG9yIHNwZWNpZmljYWxseSBnZWFyZWQgdG93YXJkcyBhIHN1YnNldCBvZiBkZXZpY2VzLiBJdCB3b3VsZG4mIzM5O3Qga25vdyBhbnl0aGluZyBhYm91dCBhIHJlZ2lzdGVyIGxpa2UgYFJUQVNFX1RYX0NPTkZJR18wYC4KCkFoLCBidXQgSSYjMzk7dmUgZ290IGEgc2xpZ2h0bHkgYmV0dGVyIGlkZWEuIFN5emthbGxlciBhbGxvd3MgdXMgdG8gaW5qZWN0IFBDSSBkZXZpY2VzIHdpdGggYXJiaXRyYXJ5IEJBUnMuIFNvLCB0aGUgbWVtb3J5IHJlYWQgKnNob3VsZCogcmV0dXJuIHNvbWV0aGluZywgcHJvYmFibHkgYSBkZWZhdWx0IHZhbHVlIGxpa2UgYDB4ZmZmZmZmZmZgLCBvciB3aGF0ZXZlciB0aGUgZ2VuZXJpYyBQQ0kgZW11bGF0aW9uIHJldHVybnMuCgpJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCBhbmQgd2UgKmRvKiBnZXQgYDB4ZmZmZmZmZmZgIGJhY2ssIHRoZW4gYHRwLSZndDtod192ZXJgIGlzIGdvaW5nIHRvIGJlIHNldCB0byBgUlRBU0VfSFdfVkVSX01BU0tgLiBUaGF0JiMzOTtzIGdvaW5nIHRvIGJlIGtleS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIHZhbHVlIG9mIGBSVEFTRV9IV19WRVJfTUFTS2AgYW5kIHRoZSBvdGhlciBjb25zdGFudHMgaW52b2x2ZWQuIFRoYXQgc2hvdWxkIGhlbHAgbWUgZmlndXJlIG91dCBob3cgdGhpcyB1bm1hcHBlZCBtZW1vcnkgcmVhZCB3aWxsIGFjdHVhbGx5IGJlaGF2ZSwgYW5kIHdoYXQgdGhlIGNvbnNlcXVlbmNlcyBhcmUgZG93bnN0cmVhbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UlRBU0VfSFdfVkVSX01BU0smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oLTExLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oOjEyOiNkZWZpbmUgUlRBU0VfSFdfVkVSX01BU0sgICAgIDB4N0M4MDAwMDBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2UuaC0xMy0jZGVmaW5lIFJUQVNFX0hXX1ZFUl85MDZYXzdYQSAweDAwODAwMDAwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjI4MT1zdGF0aWMgaW50IHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkKHN0cnVjdCBydGFzZV9wcml2YXRlICp0cClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yMjg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MjI4NTpcdHRwLVx1MDAzZWh3X3ZlciA9IHJ0YXNlX3IzMih0cCwgUlRBU0VfVFhfQ09ORklHXzApIFx1MDAyNiBSVEFTRV9IV19WRVJfTUFTSztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIyODYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1ODQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFsdGVrIEF1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0IERyaXZlciBQcm9iZSoqCgpPa2F5LCBzbyBpZiB0aGlzIGB0cC0mZ3Q7aHdfdmVyYCByZXR1cm5zIGAweGZmZmZmZmZmYCwgdGhlbiBpdCYjMzk7bGwgdHJhbnNsYXRlIHRvIGAweDdjODAwMDAwYC4gTG9va2luZyBhdCB0aGUgc3dpdGNoIGNhc2VzIGZvciB0aGUgaGFyZHdhcmUgdmVyc2lvbiwgbm9uZSBvZiB0aGVtIG1hdGNoIHRoYXQgdmFsdWUuIFRoaXMgbWVhbnMgdGhlIHByb2JlIHdpbGwgZmFpbC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgc29tZWhvdyBmdXp6IHRoaXMsIGdpdmVuIHRoYXQgZmFpbHVyZT8KCkkgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvcnMuIENvdWxkIGB2aGNpYCBvciBgdHVuYCBiZSByZWxldmFudCBoZXJlPyBObywgdGhpcyBpcyBhbiBFdGhlcm5ldCBkcml2ZXIsIG5vdCBVU0Igb3IgbmV0d29ya2luZy4gVGhlIG9ubHkgcmVhbGlzdGljIHdheSB0byBnZXQgdG8gYHJ0YXNlX3N0YXJ0X3htaXRgIGlzIGJ5IHN1Y2NlZWRpbmcgaW4gdGhlIHByb2JlLCBpc24mIzM5O3QgaXQ/IFVubGVzcy4uLndhaXQsIGRvZXNuJiMzOTt0IHN5emthbGxlciBoYXZlIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcz8gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgaW50ZXJjZXB0aW5nIE1NSU8gcmVhZHMvd3JpdGVzLgoKSSYjMzk7bSB0aGlua2luZyBvZiBgc3l6X2t2bV9zZXR1cF9jcHVgLCBubyB0aGF0JiMzOTtzIEtWTS1zcGVjaWZpYy4gQnV0IHdoYXQgYWJvdXQgYHN5el9wY2lfZGV2aWNlX2FkZGAgdXNlZCB3aXRoIGBzeXpfcGNpX2RldmljZV9zZXR1cGA/IEJ1dCBkb2VzIHN5emthbGxlciBoYXZlIGEgZ2VuZXJpYyB3YXkgdG8gaW50ZXJjZXB0IE1NSU8gcmVhZHMgYW5kIHJldHVybiBhcmJpdHJhcnkgdmFsdWVzIGZvciBQQ0kgZGV2aWNlcz8gRXhjZXB0IHBlcmhhcHMgZm9yIEtWTSBmdXp6aW5nLCB3aGljaCBtaWdodCBkbyBpdC4gQnV0IGdlbmVyYWxseSwgUENJIGRyaXZlcnMgdGhhdCBoYXZlIHRoZXNlIGhhcmR3YXJlIGNoZWNrcyBpbiB0aGVpciBwcm9iZSBhcmUgdW5yZWFjaGFibGUgdW5sZXNzIHN5emthbGxlciBoYXMgc29tZSBzcGVjaWFsIGVtdWxhdGlvbiBmb3IgdGhlbS4KCldhaXQsIGhhc24mIzM5O3Qgc3l6a2FsbGVyICpyZWNlbnRseSogYWRkZWQgYHZmaW9gIG9yIG1heWJlIGV2ZW4gZGlyZWN0IFBDSSBmdXp6aW5nIHN1cHBvcnQgd2hlcmUgaXQgY2FuIGVtdWxhdGUgUENJIGRldmljZXMgYW5kIHByb3ZpZGUgY3VzdG9tIHJlc3BvbnNlcyB0byBNTUlPIHJlYWRzPyBUaGlzIGlzIHByb21pc2luZyEgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHN5emthbGxlciBjYW4gZW11bGF0ZSBQQ0kgTU1JTy4KCk9rYXksIHNvIGBzeXpfcGNpX2RldmljZV9hZGRgICpkb2VzKiBjcmVhdGUgYSB2aXJ0dWFsIFBDSSBkZXZpY2UuIEJ1dCBob3cgZG9lcyBpdCBoYW5kbGUgdGhlIE1NSU8gaW50ZXJhY3Rpb25zPyBBaCwgc2ltaWxhciB0byBVU0Igd2hlcmUgd2UgaGF2ZSBgZHVtbXlgIGFuZCBgdmhjaWAsIGZvciBQQ0ksIHdlIGhhdmUgd2hhdCBpcyBjYWxsZWQgYFBDSV9ERVZgIGZ1enppbmc/CgpBY3R1YWxseSwgbm93IEkgcmVjYWxsIHRoYXQgc3l6a2FsbGVyICpjYW4qIGZ1enogUENJIGRyaXZlcnMgaWYgdGhleSBkb24mIzM5O3QgaGF2ZSBzdHJpbmdlbnQgaGFyZHdhcmUgY2hlY2tzLCBvciBpZiB0aG9zZSBjaGVja3MgY2FuIGJlIGJ5cGFzc2VkLCBPUiBpZiBzeXprYWxsZXIgaGFzIGEgc3BlY2lmaWMgZHJpdmVyIGRlc2NyaXB0aW9uLiBOb3csIHRoZSBgcnRhc2VgIGRyaXZlciBpcyByZWxhdGl2ZWx5IG5ldyDigJMgUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldC4KCkkgbmVlZCB0byBjaGVjayBpZiBzeXprYWxsZXIgaGFzIGFueSBzcGVjaWZpYyBkZXNjcmlwdGlvbnMgb3Iga25vd2xlZGdlIGFib3V0IHRoZSBgcnRhc2VgIGRyaXZlci4gVGhhdCB3aWxsIGJlIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2OTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYHJ0YXNlX3N0YXJ0X3htaXRgIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBydGFzZV9zdGFydF94bWl0YCBmdW5jdGlvbi4gVGhlIHByb21wdCBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIGhpdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0LCB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBhcmVuJiMzOTt0IGV2ZW4gKmluKiB0aGUga2VybmVsIHNvdXJjZSwgdGhleSYjMzk7cmUgaW4gdGhlIHN5emthbGxlciByZXBvIGl0c2VsZi4gSSBkb24mIzM5O3QgaGF2ZSBhY2Nlc3MgdG8gdGhhdCBoZXJlJiMzNDsuIEJ1dCwgSSBuZWVkIHRvIGZvY3VzIG9uIHdoYXQgdGhlIHByb21wdCBpcyBhY3R1YWxseSBhc2tpbmcuCgpTaW5jZSB0aGlzIGlzIGEgUENJIGRyaXZlciwgYW5kIFFFTVUmIzM5O3MgZW11bGF0aW9uIGlzbiYjMzk7dCBsaWtlbHkgdG8gY292ZXIgYSAmIzM0O1JlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXQmIzM0OyAoYHJ0YXNlYCksIGl0JiMzOTtzIHByb2JhYmx5IGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLiBMZXQgbWUgdmVyaWZ5LiBJIGNhbiYjMzk7dCBjaGVjayBRRU1VJiMzOTtzIHNvdXJjZSByaWdodCBub3csIGJ1dCBJIGNhbiBzZWUgaWYgdGhlcmUmIzM5O3MgKmFueSogZm9ybSBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGBydGFzZWAgd2l0aGluIHRoZSBrZXJuZWwgaXRzZWxmLiBOb3BlLCBub3RoaW5nLgoKU28sIGhvdyBjb3VsZCB3ZSAqcG9zc2libHkqIGhpdCBgcnRhc2Vfc3RhcnRfeG1pdGAgd2l0aG91dCBhY3R1YWwgaGFyZHdhcmU/IElmIHRoZSBkZXZpY2UgcHJvYmUgZmFpbHMsIHRoZSBuZXRkZXZpY2Ugd29uJiMzOTt0IGJlIHJlZ2lzdGVyZWQsIHNvIHRoYXQgZnVuY3Rpb24gaXMgdW5yZWFjaGFibGUuIEFuZCwgZ2l2ZW4gdGhhdCBgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRgIHJlYWRzIGZyb20gTU1JTyBhbmQgZGVwZW5kcyBvbiBhIHNwZWNpZmljIHZhbHVlLCB3aGljaCBubyBoYXJkd2FyZSBvciBlbXVsYXRvciBpcyBsaWtlbHkgdG8gcHJvdmlkZSwgdGhlIHByb2JlIHdpbGwgKmFsd2F5cyogZmFpbC4KCkJ1dCB3YWl0LCB3aGF0IGlmIHNvbWVvbmUgZ290IGNsZXZlciBhbmQgY291bGQgd3JpdGUgdG8gdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIHRvIG1hcCB0aGUgQkFSIHRvIG1lbW9yeSB0aGV5IGNvbnRyb2w/IElmIGEgdXNlciBjb3VsZCBtYXAgdGhlIEJBUiB0byBhIHNoYXJlZCBtZW1vcnkgcmVnaW9uLCB0aGV5IGNvdWxkIHBvdGVudGlhbGx5IGNvbnRyb2wgdGhvc2UgTU1JTyByZWFkcy4gSG93ZXZlciwgdGhlIGtlcm5lbCB1c2VzIGBwY2lfaW9tYXBgIG9yIGBwY2ltX2lvbWFwYCB0byBtYXAgdGhlIEJBUiwgbWFwcGluZyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpbnRvICprZXJuZWwqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KCk5vdywgbXkgbWluZCBzdGFydHMgcmFjaW5nIHRvIGhvdyBzeXprYWxsZXIgbWlnaHQgYmUgaW52b2x2ZWQuIElzIHRoaXMgYSB2aXJ0dWFsIGRldmljZSBjcmVhdGVkIGJ5IGBzeXpfcGNpX2RldmljZV9hZGRgPyBEb2VzIGl0IHVzZSBgdmZpb2Agb3Igc29tZXRoaW5nIHNpbWlsYXI/IEFjdHVhbGx5IG5vLiBgc3l6X3BjaV9kZXZpY2VfYWRkYCB1c2VzIGEgdGVzdCBtb2R1bGUgb3Igc29tZXRoaW5nLCBhbmQgc3l6a2FsbGVyICpkb2VzbiYjMzk7dCogaGF2ZSBhIGdlbmVyaWMgUENJIGVtdWxhdG9yIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gVGhlbiBJIHJlbWVtYmVyLCB0aGVyZSYjMzk7cyBgQ09ORklHX1BDSV9ERUJVR2AsIG1heWJlIHNvbWV0aGluZyB0aGVyZT8gTm8uIFN5emthbGxlciBpbXBsZW1lbnRzIGBzeXpfcGNpX2RldmljZV9hZGRgIGluIHRoZSBleGVjdXRvci4gQnV0LCBob3cgZG9lcyB0aGF0IGV2ZW4gd29yaz8gSXQmIzM5O3MgbGlrZSBgL2Rldi92aGNpYCBmb3IgVVNCLiBGb3IgUENJLCBkb2VzIGl0IHVzZSBLVk0gdG8gaW50ZXJjZXB0IE1NSU8/IE5vLCBzeXprYWxsZXIgKmRvZXNuJiMzOTt0KiBydW4gdGhlIGtlcm5lbCBpbiBLVk0gd2l0aCBjdXN0b20gZGV2aWNlIG1vZGVscy4gSXQgcnVucyB0aGUga2VybmVsIGluIFFFTVUuCgpXYWl0LCBkb2VzIHN5emthbGxlciBoYXZlIGEgJiMzNDtkdW1teSYjMzQ7IFBDSSBkZXZpY2UgdGhhdCYjMzk7cyBwcmVjb25maWd1cmVkPyBOby4KCkFjdHVhbGx5LCB0aGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBzeXprYWxsZXIgKmNhbiYjMzk7dCogZnV6eiAqbW9zdCogUENJIGRyaXZlcnMgcHJlY2lzZWx5IGJlY2F1c2Ugb2YgdGhlIGxhY2sgb2YgaGFyZHdhcmUgZW11bGF0aW9uLgoKT2theSwgbGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIG9uZSBtb3JlIHRpbWUuIElzIHRoZXJlICphbnkqIG90aGVyIGNvZGUgcGF0aCwgKmFueSogd2F5IHdoYXRzb2V2ZXIgdGhhdCBgcnRhc2Vfc3RhcnRfeG1pdGAgY291bGQgYmUgY2FsbGVkPyBObywgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gYW5kIGFzc2lnbmVkIHRvIGBuZG9fc3RhcnRfeG1pdGAuCgpUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbiBpcyB1bnJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRhc2Vfc3RhcnRfeG1pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0xNDQ5PXN0YXRpYyBpbnQgcnRhc2VfeG1pdF9mcmFncyhzdHJ1Y3QgcnRhc2VfcmluZyAqcmluZywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xNTA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTUwNzpzdGF0aWMgbmV0ZGV2X3R4X3QgcnRhc2Vfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTUwOC1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTE5Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGFzZV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTE5NjktXHQubmRvX3N0b3AgPSBydGFzZV9jbG9zZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjE5NzA6XHQubmRvX3N0YXJ0X3htaXQgPSBydGFzZV9zdGFydF94bWl0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTk3MS1cdC5uZG9fc2V0X3J4X21vZGUgPSBydGFzZV9zZXRfcnhfbW9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0NDAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBSZWFjaGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgZXZlbiB0cmlnZ2VyZWQuIEl0JiMzOTtzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCBzbyBJIGluaXRpYWxseSBhc3N1bWVkIGl0JiMzOTtzIHVucmVhY2hhYmxlIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUuIEJ1dCB3YWl0LCBiZWZvcmUgSSBkaXNtaXNzIGl0IGNvbXBsZXRlbHksIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZmxhZ3Mgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBtYWtlIHRoaXMgY29kZSBmdXp6YWJsZSwgbGlrZSBhIGBXb3J0aEZ1enppbmc9dHJ1ZWAgY29uZGl0aW9uIGZvciBQQ0kgZHJpdmVycy4KCkFscmlnaHQsIHRoZSBjb250ZXh0IGlzIHRoYXQgaXQmIzM5O3MgaW4gYSBQQ0kgZHJpdmVyLCBhbmQgaWYgdGhlcmUmIzM5O3Mgbm8gZW11bGF0b3IsIGl0IGlzICpwcm9iYWJseSogdW5yZWFjaGFibGUuIEJ1dCBob2xkIG9uLCB0aGUgYXV0aG9yIGlzIGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YC4gTm93IHRoYXQmIzM5O3MgaW50ZXJlc3RpbmchIERvZXMgdGhpcyBtZWFuIHN5emthbGxlciBhbHJlYWR5IGZvdW5kIGEgYnVnIGluIHRoaXMgY29kZSwgb3IgaXQmIzM5O3MgYSBwYXRjaCB0byAqZml4KiBhIGJ1ZyB0aGF0IHN5emthbGxlciBkaXNjb3ZlcmVkPwoKQWgsIHJpZ2h0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29tbWl0IG1lc3NhZ2UgbW9yZSBjbG9zZWx5LiBJdCBzYXlzIHRoaXMgaXMgYSBwYXRjaCAmIzM0O3VuZGVyIHJldmlldy4mIzM0OyBTbywgc3l6a2FsbGVyIGlzIHRyeWluZyB0byBmdXp6ICp0aGlzIHBhdGNoKiB0byBzZWUgaWYgaXQgaW50cm9kdWNlcyBuZXcgaXNzdWVzLCBvciB0byB2YWxpZGF0ZSB0aGF0IGl0IGZpeGVzIHRoZSBvcmlnaW5hbCBwcm9ibGVtLiBUaGF0IG1lYW5zLi4uIGl0IGNhbiByZWFjaCBpdC4gSSYjMzk7bSBzdXJlIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcsIGhvdyBjYW4gc3l6a2FsbGVyIHJlYWNoIGl0PyBUaGlzIHdvdWxkIGJlIGEgZ3JlYXQgb3V0Y29tZSwgc2luY2Ugc3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgcmVhY2hpbmcgdGhlIGNvZGUhCgpDb3VsZCB0aGVyZSBiZSBzb21lIGtpbmQgb2YgZHVtbXkgUENJIGRyaXZlciBmcmFtZXdvcmsgdGhhdCBhbGxvd3MgdGhpcz8gSSBzaG91bGQgbG9vayBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIGxpa2UgYENPTkZJR19SVEFTRWAgb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCB3b3VsZCBlbmFibGUgdGhhdCBraW5kIG9mIGJlaGF2aW9yLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGEgY2x1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1JUQVNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX1I4MTY5KSAmIzQzOz0gcjgxNjkub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfUlRBU0UpICYjNDM7PSBydGFzZS9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL01ha2VmaWxlLTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1JUQVNFKSAmIzQzOz0gcnRhc2Uub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9NYWtlZmlsZS05LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDYyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFBDSSBEZXZpY2UgUmVhY2hhYmlsaXR5IHdpdGggU3l6a2FsbGVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgaG93IHN5emthbGxlciBoYW5kbGVzIFBDSSBkZXZpY2VzLiBJIGtub3cgdGhlcmUmIzM5O3MgYSBmZWF0dXJlLCBlaXRoZXIgJiMzNDtwc2V1ZG8gZGV2aWNlcyYjMzQ7IG9yIHRoZSBhYmlsaXR5IHRvIGZ1enogUENJIGRldmljZXMgYnkgbW9ja2luZyB0aGUgUENJIGNvbmZpZyBzcGFjZS4gQWN0dWFsbHksIHRoZXJlJiMzOTtzIGBzeXpfcGNpX2RldmljZV9hZGRgLCB3aGljaCBsb29rcyBwcm9taXNpbmcuIEJ1dCBob3cgZG9lcyBpdCAqYWN0dWFsbHkqIGhhbmRsZSBNZW1vcnktTWFwcGVkIEkvTyAoTU1JTyk/CgpJIGluaXRpYWxseSB0aG91Z2h0IHRoYXQgc3l6a2FsbGVyIG1pZ2h0IGJlIHVzaW5nIGB2ZmlvYCBvciBhIGN1c3RvbSBQQ0kgZW11bGF0b3Igd2l0aGluIFFFTVUsIG9yIG1heWJlIGl0IGxldmVyYWdlcyBgS1ZNYCB0byBpbnRlcmNlcHQgTU1JTyB2aWEgYHN5el9wY2lfZGV2aWNlX2FkZGAuIEhvd2V2ZXIsIGl0IHNlZW1zIGxpa2UgYHN5el9wY2lfZGV2aWNlX2FkZGAgdXNlcyBhIGR1bW15IFBDSSBkZXZpY2UgaW4gUUVNVSwgcGVyaGFwcyBzb21ldGhpbmcgbGlrZSB0aGUgYGVkdWAgZGV2aWNlLCBvciBtYXliZSBpdCB1c2VzIGBQQ0lfVklSVElPYC4KClRoZW4gaXQgY2xpY2tlZDogdGhlcmUmIzM5O3MgYSBgcGNpYCBzdWJzeXN0ZW0gZnV6emVyIGluIHN5emthbGxlci4gSXQgaW50ZXJjZXB0cyBNTUlPIHJlYWRzIGFuZCB3cml0ZXMgdXNpbmcgS1ZNISBZZXMsIHRoYXQmIzM5O3MgaXQuIFN5emthbGxlciAqY2FuKiBpbnRlcmNlcHQgTU1JTyBhbmQgcmV0dXJuIGZ1enplZCB2YWx1ZXMuIFRoaXMgaXMga2V5LgoKSWYgc3l6a2FsbGVyIGNhbiBpbnRlcmNlcHQgTU1JTywgdGhlbiB0aGUga2VybmVsIGRyaXZlciBjYW4gcmVhZCBmcm9tIGBydGFzZV9yMzIodHAsIFJUQVNFX1RYX0NPTkZJR18wKWAgYW5kIHBvdGVudGlhbGx5IGdldCBgUlRBU0VfSFdfVkVSXzkwNlhfN1hBYCAoMHgwMDgwMDAwMCkgaWYgdGhlIGZ1enplciBnZXRzIGx1Y2t5IG9yIGhhcyBpdCBpbiBpdHMgZGljdGlvbmFyeS4gVGhpcyBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLgoKSWYgc3l6a2FsbGVyIGNhbiBpbmRlZWQgZnV6eiBQQ0kgZGV2aWNlcyB0aGlzIHdheSwgKmFueSogUENJIGRyaXZlciBzaG91bGQgYmUgcmVhY2hhYmxlLCByaWdodD8gTGV0IG1lIGNvbmZpcm0gdGhhdC4gWWVzLCBgc3l6X3BjaV9kZXZpY2VfYWRkYCBhbmQgTU1JTyBpbnRlcmNlcHRpb24gYXJlIHRoZSBjcml0aWNhbCBjb21wb25lbnRzIGhlcmUuCgpOb3csIHRoZSBwcm9tcHQmIzM5O3MgY29uZGl0aW9uIGNvbWVzIGludG8gcGxheTogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gVGhpcyBpcyBhIGNydWNpYWwgY29uc3RyYWludC4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzICppbXBvc3NpYmxlKiBmb3Igc3l6a2FsbGVyIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHMuCgpJZiBzeXprYWxsZXIgY2FuIGVtdWxhdGUgUENJIE1NSU8sIGl0JiMzOTtzICpwb3NzaWJsZSouIFNvLCB0aGUgcXVlc3Rpb24gaGluZ2VzIG9uIHdoZXRoZXIgc3l6a2FsbGVyIGFjdHVhbGx5IGVtdWxhdGVzIFBDSSBNTUlPLgoKTGV0IG1lIHJlc2VhcmNoIGEgYml0IGFuZCBjaGVjayBmb3IgZXhhbXBsZXMgb2YgUENJIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsIGJ5IHNlYXJjaGluZyBmb3Igc3l6a2FsbGVyIGNvZGUuIE9rYXksIEkgc2VlIHRoYXQgYHN5el9wY2lfZGV2aWNlX2FkZGAgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGV4ZWN1dG9yLCBub3QgZGlyZWN0bHkgaW4gdGhlIGtlcm5lbCBpdHNlbGYuIEl0IHVzZXMgYC9kZXYvdmZpb2Agb3Igc29tZXRoaW5nPyBOb3BlLCBpdCBsZXZlcmFnZXMgYEtWTV9SVU5gIHRvIHJ1biB0aGUga2VybmVsLCBhbmQgdGhlbiBpdCBpbnRlcmNlcHRzIE1NSU8gZXhpdHMuIFRoaXMgbWVhbnMgc3l6a2FsbGVyICpkb2VzbiYjMzk7dCogcnVuIHRoZSBrZXJuZWw7IFFFTVUgZG9lcy4gVGhlIHN5emthbGxlciBleGVjdXRvciBydW5zICppbnNpZGUqIHRoZSBWTS4KClRoaXMgcmFpc2VzIHRoZSBrZXkgcXVlc3Rpb246IGhvdyBkb2VzIGEgdXNlci1zcGFjZSBwcm9jZXNzICppbnNpZGUqIHRoZSBWTSBpbnRlcmNlcHQgTU1JTyByZWFkcyBvZiBhIGtlcm5lbCBkcml2ZXI/IEl0IGNhbiYjMzk7dCwgdW5sZXNzIHRoZXJlIGlzIGEgc3BlY2lmaWMgZHJpdmVyIGZvciBpdCAobGlrZSBgZHVtbXlfaGNkYCBmb3IgVVNCLCBgbWFjODAyMTFfaHdzaW1gIGZvciB3aWZpKS4gU28sIGl0IG5lZWRzIGEgc3BlY2lmaWMgZHJpdmVyIG9yIGFwcHJvYWNoLgoKQW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGEgZHVtbXkgUENJIGRyaXZlciBpbiB0aGUga2VybmVsLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkdW1teS4qcGNpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYz0xMDg9c3RhdGljIGludCBfX2luaXQgcmMzMjQzNF9wY2licmlkZ2VfaW5pdCh2b2lkKVxuLS1cbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYy0xMTAtXHR1bnNpZ25lZCBpbnQgcGNpY3ZhbHVlLCBwY2ljZGF0YSA9IDA7XG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmM6MTExOlx0dW5zaWduZWQgaW50IGR1bW15cmVhZCwgcGNpY250bHZhbDtcbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYy0xMTItXHRpbnQgbG9vcENvdW50O1xuLS1cbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYy0xNjAtXHQgICAgKCgoU0laRV8yNTZNQiBcdTAwMjYgMHgxZikgXHUwMDNjXHUwMDNjIFBDSV9MQkFDX1NJWkVfQklUKSB8IFBDSV9FTkRJQU5fRkxBRyk7XG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmM6MTYxOlx0ZHVtbXlyZWFkID0gcmMzMjQzNF9wY2ktXHUwMDNlcGNpbGJhWzBdLmNvbnRyb2w7XHQvKiBmbHVzaCB0aGUgQ1BVIHdyaXRlIEJ1ZmZlcnMgKi9cbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYy0xNjItXHRyYzMyNDM0X3BjaS1cdTAwM2VwY2lsYmFbMV0uYWRkcmVzcyA9IDB4NjAwMDAwMDA7XG4tLVxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE2Ny1cdCAgICAoKChTSVpFXzI1Nk1CIFx1MDAyNiAweDFmKSBcdTAwM2NcdTAwM2MgUENJX0xCQUNfU0laRV9CSVQpIHwgUENJX0VORElBTl9GTEFHKTtcbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYzoxNjg6XHRkdW1teXJlYWQgPSByYzMyNDM0X3BjaS1cdTAwM2VwY2lsYmFbMV0uY29udHJvbDtcdC8qIGZsdXNoIHRoZSBDUFUgd3JpdGUgQnVmZmVycyAqL1xuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE2OS1cdHJjMzI0MzRfcGNpLVx1MDAzZXBjaWxiYVsyXS5hZGRyZXNzID0gMHgxOEMwMDAwMDtcbi0tXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTc0LVx0ICAgICgoKFNJWkVfNE1CIFx1MDAyNiAweDFmKSBcdTAwM2NcdTAwM2MgUENJX0xCQUNfU0laRV9CSVQpIHwgUENJX0VORElBTl9GTEFHKTtcbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYzoxNzU6XHRkdW1teXJlYWQgPSByYzMyNDM0X3BjaS1cdTAwM2VwY2lsYmFbMl0uY29udHJvbDtcdC8qIGZsdXNoIHRoZSBDUFUgd3JpdGUgQnVmZmVycyAqL1xuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE3Ni1cbi0tXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTgyLVx0ICAgICBQQ0lfRU5ESUFOX0ZMQUcpO1xuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jOjE4MzpcdGR1bW15cmVhZCA9IHJjMzI0MzRfcGNpLVx1MDAzZXBjaWxiYVszXS5jb250cm9sO1x0LyogZmx1c2ggdGhlIENQVSB3cml0ZSBCdWZmZXJzICovXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTg0LVxuLS1cbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYy0xODctXHRcdHJjMzI0MzRfcGNpLVx1MDAzZXBjaWNmZ2EgPSBwY2lfY29uZmlnX2FkZHI7XG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmM6MTg4Olx0XHRkdW1teXJlYWQgPSByYzMyNDM0X3BjaS1cdTAwM2VwY2ljZmdhO1xuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE4OS1cdFx0cmMzMjQzNF9wY2ktXHUwMDNlcGNpY2ZnZCA9IGtvcmluYV9jbmZnX3JlZ3NbbG9vcENvdW50XTtcbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYzoxOTA6XHRcdGR1bW15cmVhZCA9IHJjMzI0MzRfcGNpLVx1MDAzZXBjaWNmZ2Q7XG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTkxLVx0XHRwY2lfY29uZmlnX2FkZHIgJiM0Mzs9IDQ7XG4tLVxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jPTE3MjE9c3RhdGljIGludCBvY3Rlb25fcGNpZTFfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLFxuLS1cbmFyY2gvbWlwcy9wY2kvcGNpZS1vY3Rlb24uYy0xNzI2LVxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jOjE3Mjc6c3RhdGljIGludCBvY3Rlb25fZHVtbXlfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLFxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jLTE3MjgtXHRcdFx0XHQgICAgaW50IHJlZywgaW50IHNpemUsIHUzMiAqdmFsKVxuLS1cbmFyY2gvbWlwcy9wY2kvcGNpZS1vY3Rlb24uYz0xNzc3PXN0YXRpYyBpbnQgb2N0ZW9uX3BjaWUxX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sXG4tLVxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jLTE3ODItXG5hcmNoL21pcHMvcGNpL3BjaWUtb2N0ZW9uLmM6MTc4MzpzdGF0aWMgaW50IG9jdGVvbl9kdW1teV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLFxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jLTE3ODQtXHRcdFx0XHQgICAgIGludCByZWcsIGludCBzaXplLCB1MzIgdmFsKVxuLS1cbmFyY2gvc3BhcmMva2VybmVsL3BjaWMuYz02NDg9c3RhdGljIHZvaWQgcGNpY19jbGVhcl9jbG9ja19pcnEodm9pZClcbmFyY2gvc3BhcmMva2VybmVsL3BjaWMuYy02NDkte1xuYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jOjY1MDpcdHBjaWNfdGltZXJfZHVtbXkgPSByZWFkbChwY2ljMC5wY2ljX3JlZ3MmIzQzO1BDSV9TWVNfTElNSVQpO1xuYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jLTY1MS19XG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c3guYz02Mz1zdGF0aWMgY29uc3QgY2hhciAqY2tvMl9zZWxzW11cdFx0PSB7XG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzeC5jLTY0LVx0XCYjMzQ7ZHVtbXlcJiMzNDssIFwmIzM0O21tZGNfcDBfZmFzdFwmIzM0OywgXCYjMzQ7dXNkaGM0XCYjMzQ7LCBcJiMzNDt1c2RoYzFcJiMzNDssIFwmIzM0O2R1bW15XCYjMzQ7LCBcJiMzNDt3cmNrXCYjMzQ7LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c3guYzo2NTpcdFwmIzM0O2Vjc3BpX3Jvb3RcJiMzNDssIFwmIzM0O2R1bW15XCYjMzQ7LCBcJiMzNDt1c2RoYzNcJiMzNDssIFwmIzM0O3BjaWVcJiMzNDssIFwmIzM0O2FybVwmIzM0OywgXCYjMzQ7Y3NpX2NvcmVcJiMzNDssXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzeC5jLTY2LVx0XCYjMzQ7ZGlzcGxheV9heGlcJiMzNDssIFwmIzM0O2R1bW15XCYjMzQ7LCBcJiMzNDtvc2NcJiMzNDssIFwmIzM0O2R1bW15XCYjMzQ7LCBcJiMzNDtkdW1teVwmIzM0Oyxcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzeC5jPTcyPXN0YXRpYyBjb25zdCBjaGFyICpsdmRzX3NlbHNbXVx0PSB7XG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzeC5jLTczLVx0XCYjMzQ7YXJtXCYjMzQ7LCBcJiMzNDtwbGwxX3N5c1wmIzM0OywgXCYjMzQ7ZHVtbXlcJiMzNDssIFwmIzM0O2R1bW15XCYjMzQ7LCBcJiMzNDtkdW1teVwmIzM0OywgXCYjMzQ7ZHVtbXlcJiMzNDssIFwmIzM0O2R1bW15XCYjMzQ7LCBcJiMzNDtwbGw1X3ZpZGVvX2RpdlwmIzM0OyxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnN4LmM6NzQ6XHRcJiMzNDtkdW1teVwmIzM0OywgXCYjMzQ7ZHVtbXlcJiMzNDssIFwmIzM0O3BjaWVfcmVmXzEyNW1cJiMzNDssIFwmIzM0O2R1bW15XCYjMzQ7LCBcJiMzNDt1c2JwaHkxXCYjMzQ7LCBcJiMzNDt1c2JwaHkyXCYjMzQ7LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c3guYy03NS19O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NvYzI0LmM9MjY4PXN0YXRpYyB1aW50NjRfdCBzb2MyNF9nZXRfcGNpZV9yZXBsYXlfY291bnQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvc29jMjQuYy0yNzAtXHQvKiBUT0RPXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zb2MyNC5jOjI3MTpcdCAqIGR1bW15IGltcGxlbWVudCBmb3IgcGNpZV9yZXBsYXlfY291bnQgc3lzZnMgaW50ZXJmYWNlXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zb2MyNC5jLTI3Mi1cdCAqICovXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTM3Mi1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaDozNzM6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTBfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTM3NC0jZGVmaW5lIGNmZ05CX1BDSUVEVU1NWTBfMF9ERVZJQ0VfVkVORE9SX0lEX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0zODAtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0Lmg6MzgxOi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkxX3BjaWVkdW1teV9jZmdkZWNcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0zODItI2RlZmluZSBjZmdOQl9QQ0lFRFVNTVkxXzBfREVWSUNFX1ZFTkRPUl9JRF9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0LmgtMTAwMDQtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0Lmg6MTAwMDU6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTBfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTEwMDA2LSNkZWZpbmUgc21uTkJfUENJRURVTU1ZMF8xX0RFVklDRV9WRU5ET1JfSURfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTEwMDEyLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oOjEwMDEzOi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkxX3BjaWVkdW1teV9jZmdkZWNcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0xMDAxNC0jZGVmaW5lIHNtbk5CX1BDSUVEVU1NWTFfMV9ERVZJQ0VfVkVORE9SX0lEX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0xMTEyOS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaDoxMTEzMDovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MF9wY2llZHVtbXlfY2ZnZGVjXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0LmgtMTExMzEtI2RlZmluZSBzbW5OQl9QQ0lFRFVNTVkwXzJfREVWSUNFX1ZFTkRPUl9JRF9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0LmgtMTIzNDEtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0Lmg6MTIzNDI6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTFfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTEyMzQzLSNkZWZpbmUgc21uTkJfUENJRURVTU1ZMV8yX0RFVklDRV9WRU5ET1JfSURfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfb2Zmc2V0LmgtMzc3LVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfb2Zmc2V0Lmg6Mzc4Oi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkwX3BjaWVkdW1teV9jZmdkZWNcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX29mZnNldC5oLTM3OS0vLyBiYXNlIGFkZHJlc3M6IDB4MFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX29mZnNldC5oLTM4Ni1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX29mZnNldC5oOjM4NzovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MV9wY2llZHVtbXlfY2ZnZGVjXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9vZmZzZXQuaC0zODgtLy8gYmFzZSBhZGRyZXNzOiAweDBcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtMjk3Ni1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaDoyOTc3Oi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkwX3BjaWVkdW1teV9jZmdkZWNcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaC0yOTc4LS8vTkJfUENJRURVTU1ZMF8wX0RFVklDRV9WRU5ET1JfSURcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtMzAwMi1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaDozMDAzOi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkxX3BjaWVkdW1teV9jZmdkZWNcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaC0zMDA0LS8vTkJfUENJRURVTU1ZMV8wX0RFVklDRV9WRU5ET1JfSURcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtODIxOTgtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmg6ODIxOTk6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTBfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oLTgyMjAwLS8vTkJfUENJRURVTU1ZMF8xX0RFVklDRV9WRU5ET1JfSURcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtODIyMjQtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmg6ODIyMjU6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTFfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oLTgyMjI2LS8vTkJfUENJRURVTU1ZMV8xX0RFVklDRV9WRU5ET1JfSURcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtODg1MDEtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmg6ODg1MDI6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTBfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oLTg4NTAzLS8vTkJfUENJRURVTU1ZMF8yX0RFVklDRV9WRU5ET1JfSURcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtMTAxNDM1LVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oOjEwMTQzNjovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MV9wY2llZHVtbXlfY2ZnZGVjXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtMTAxNDM3LS8vTkJfUENJRURVTU1ZMV8yX0RFVklDRV9WRU5ET1JfSURcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMl8wX3NoX21hc2suaC0zMjUyLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzJfMF9zaF9tYXNrLmg6MzI1MzovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MF9wY2llZHVtbXlfY2ZnZGVjXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMl8wX3NoX21hc2suaC0zMjU0LVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzJfMF9zaF9tYXNrLmgtMzI1NS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18yXzBfc2hfbWFzay5oOjMyNTY6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTFfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzJfMF9zaF9tYXNrLmgtMzI1Ny1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMl8wX3NoX21hc2suaC0xMDg5ODYtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMl8wX3NoX21hc2suaDoxMDg5ODc6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTBfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzJfMF9zaF9tYXNrLmgtMTA4OTg4LVxuLS1cbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmM9NDA0PXN0YXRpYyBpbnQgc2lzNjMwX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpzaXM2MzBfZGV2KVxuLS1cbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMtNDEzLVx0Zm9yIChpID0gMDsgc3VwcG9ydGVkW2ldIFx1MDAzZSAwOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYzo0MTQ6XHRcdGR1bW15ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9TSSwgc3VwcG9ydGVkW2ldLCBkdW1teSk7XG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jLTQxNS1cdFx0aWYgKGR1bW15KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmM9NDEwPXN0YXRpYyBpbnQgb3R4Ml90Y19wYXJzZV9hY3Rpb25zKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMtNTE0LVx0XHRcdHByaXYgPSBuZXRkZXZfcHJpdih0YXJnZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYzo1MTU6XHRcdFx0ZHVtbXlfZ3JwX3VwZGF0ZV9yZXEucGNpZnVuY1tudW1faW50Zl0gPSBwcml2LVx1MDAzZXBjaWZ1bmM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jLTUxNi1cdFx0XHRkdW1teV9ncnBfdXBkYXRlX3JlcS5jaGFubmVsW251bV9pbnRmXSA9IHByaXYtXHUwMDNlaHcudHhfY2hhbl9iYXNlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYz0zODAwPWl3bF90cmFuc19wY2llX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYy0zODc4LVx0ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmM6Mzg3OTpcdHRyYW5zX3BjaWUtXHUwMDNlbmFwaV9kZXYgPSBhbGxvY19uZXRkZXZfZHVtbXkoc2l6ZW9mKHN0cnVjdCBpd2xfdHJhbnNfcGNpZSAqKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmMtMzg4MC1cdGlmICghdHJhbnNfcGNpZS1cdTAwM2VuYXBpX2Rldikge1xuLS1cbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2h3aS5jPTIxMTQ9aW50IGJueDJmY19zZXR1cF9md19yZXNjKHN0cnVjdCBibngyZmNfaGJhICpoYmEpXG4tLVxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaHdpLmMtMjE0OS1cbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2h3aS5jOjIxNTA6XHRoYmEtXHUwMDNlZHVtbXlfYnVmZmVyID0gZG1hX2FsbG9jX2NvaGVyZW50KFx1MDAyNmhiYS1cdTAwM2VwY2lkZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaHdpLmMtMjE1MS1cdFx0XHRcdFx0ICAgICAgIFBBR0VfU0laRSwgXHUwMDI2aGJhLVx1MDAzZWR1bW15X2J1Zl9kbWEsXG4tLVxuZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmM9NTIzPXN0YXRpYyBpbnQgYm54Mmlfc2V0dXBfbXBfYmR0KHN0cnVjdCBibngyaV9oYmEgKmhiYSlcbi0tXG5kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYy01MzYtXG5kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYzo1Mzc6XHRoYmEtXHUwMDNlZHVtbXlfYnVmZmVyID0gZG1hX2FsbG9jX2NvaGVyZW50KFx1MDAyNmhiYS1cdTAwM2VwY2lkZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMtNTM4LVx0XHRcdFx0XHQgICAgICAgQ05JQ19QQUdFX1NJWkUsXG4tLVxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jPTI3Mz1zdGF0aWMgdm9pZCBzbmRfaWNlMTcxMl9zZXRfZ3Bpb19kaXIoc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIHVuc2lnbmVkIGludCBkYXRhKVxuLS1cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYy0yNzUtXHRzbmRfaWNlMTcxMl93cml0ZShpY2UsIElDRTE3MTJfSVJFR19HUElPX0RJUkVDVElPTiwgZGF0YSk7XG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmM6Mjc2Olx0aW5iKElDRVJFRyhpY2UsIERBVEEpKTsgLyogZHVtbXkgcmVhZCBmb3IgcGNpLXBvc3RpbmcgKi9cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYy0yNzctfVxuLS1cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYz0yODk9c3RhdGljIHZvaWQgc25kX2ljZTE3MTJfc2V0X2dwaW9fbWFzayhzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdW5zaWduZWQgaW50IGRhdGEpXG4tLVxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jLTI5MS1cdHNuZF9pY2UxNzEyX3dyaXRlKGljZSwgSUNFMTcxMl9JUkVHX0dQSU9fV1JJVEVfTUFTSywgZGF0YSk7XG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmM6MjkyOlx0aW5iKElDRVJFRyhpY2UsIERBVEEpKTsgLyogZHVtbXkgcmVhZCBmb3IgcGNpLXBvc3RpbmcgKi9cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYy0yOTMtfVxuLS1cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYz0zMDA9c3RhdGljIHZvaWQgc25kX2ljZTE3MTJfc2V0X2dwaW9fZGF0YShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdW5zaWduZWQgaW50IHZhbClcbi0tXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMtMzAyLVx0c25kX2ljZTE3MTJfd3JpdGUoaWNlLCBJQ0UxNzEyX0lSRUdfR1BJT19EQVRBLCB2YWwpO1xuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jOjMwMzpcdGluYihJQ0VSRUcoaWNlLCBEQVRBKSk7IC8qIGR1bW15IHJlYWQgZm9yIHBjaS1wb3N0aW5nICovXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMtMzA0LX1cbi0tXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmM9MTY3PXN0YXRpYyB2b2lkIHNuZF92dDE3MjRfc2V0X2dwaW9fZGlyKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBpbnQgZGF0YSlcbi0tXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMTY5LVx0b3V0bChkYXRhLCBJQ0VSRUcxNzI0KGljZSwgR1BJT19ESVJFQ1RJT04pKTtcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYzoxNzA6XHRpbncoSUNFUkVHMTcyNChpY2UsIEdQSU9fRElSRUNUSU9OKSk7IC8qIGR1bW15IHJlYWQgZm9yIHBjaS1wb3N0aW5nICovXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMTcxLX1cbi0tXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmM9MTgwPXN0YXRpYyB2b2lkIHNuZF92dDE3MjRfc2V0X2dwaW9fbWFzayhzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdW5zaWduZWQgaW50IGRhdGEpXG4tLVxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jLTE4NC1cdFx0b3V0YigoZGF0YSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmLCBJQ0VSRUcxNzI0KGljZSwgR1BJT19XUklURV9NQVNLXzIyKSk7XG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmM6MTg1Olx0aW53KElDRVJFRzE3MjQoaWNlLCBHUElPX1dSSVRFX01BU0spKTsgLyogZHVtbXkgcmVhZCBmb3IgcGNpLXBvc3RpbmcgKi9cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYy0xODYtfVxuLS1cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYz0xOTk9c3RhdGljIHZvaWQgc25kX3Z0MTcyNF9zZXRfZ3Bpb19kYXRhKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBpbnQgZGF0YSlcbi0tXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMjAzLVx0XHRvdXRiKGRhdGEgXHUwMDNlXHUwMDNlIDE2LCBJQ0VSRUcxNzI0KGljZSwgR1BJT19EQVRBXzIyKSk7XG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmM6MjA0Olx0aW53KElDRVJFRzE3MjQoaWNlLCBHUElPX0RBVEEpKTsgLyogZHVtbXkgcmVhZCBmb3IgcGNpLXBvc3RpbmcgKi9cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYy0yMDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA3NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVhY2hhYmlsaXR5IG9mIHRoZSBgcnRhc2VgIENvZGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgYHJ0YXNlYCBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS4gRmlyc3QsIGl0IHNlZW1zIGxpa2UgdGhlcmUgaXNuJiMzOTt0IHNvbWUgZ2VuZXJpYyBkdW1teSBQQ0kgZGV2aWNlIGF2YWlsYWJsZSBhcyBhIGRlZmF1bHQuIEJ1dCB3YWl0LCBJIHJlY2FsbCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSB3YXkgdG8gZnV6eiBQQ0kgZGV2aWNlcy4gSG93IGRvZXMgaXQgd29yaz8KCkkgcmVtZW1iZXIgYHN5el9wY2lfZGV2aWNlX2FkZGAgYW5kIHN0YXJ0ZWQgZG93biB0aGUgcm91dGUgdGhpbmtpbmcgaXQgdXNlZCBgdmZpb2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIG1heWJlIEtWTS4gQnV0IG5vLCB0aGF0JiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gU3l6a2FsbGVyIHJ1bnMgaW4gUUVNVSwgc28gaG93IGRvZXMgaXQgYWRkIGEgUENJIGRldmljZSBhdCBhbGw/IERvZXMgaXQgdXNlIGBQQ0lfVklSVElPYCBvciBgUENJX0VEVWAgb3Igc29tZSBRRU1VIHBhdGNoPyBObywgdGhhdCBpcyBub3QgaG93IGl0IGlzIGRvbmUgZm9yIFVTQi4gRm9yIFVTQiBpdCB1c2VzIGB2aGNpYCwgYnV0IGZvciBQQ0kgaXQgdXNlcyBgcGNpX3Rlc3RgIG9yIGEgY3VzdG9tIFFFTVUgZGV2aWNlLgoKVGhlbiwgd2FpdCwgbWF5YmUgc3l6a2FsbGVyIGhhcyBhIGN1c3RvbSBRRU1VIGRldmljZSBsaWtlIGBzeXprYWxsZXItcGNpYCBvciBpcyBpdCBgdmZpby11c2VyYD8gTm8sIG5vbmUgb2YgdGhlc2Ugb3B0aW9ucyBhcmUgcmlnaHQuIFN5emthbGxlciB1c2VzIGBzeXpfcGNpX2RldmljZV9hZGRgLCB3aGljaCBpcyBpbXBsZW1lbnRlZCB2aWEgYSBjdXN0b20gUUVNVSBkZXZpY2UuIEl0IGRvZXNuJiMzOTt0IHVzZSBgdmZpb2AuIEhtbSwgbm8sIGl0IGRvZXMgbm90IHJlcXVpcmUgYSBjdXN0b20gUUVNVS4KCk9rYXksIEkmIzM5O20gZ2V0dGluZyBjbG9zZXIuIEkga25vdyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHN5el9wY2lfZGV2aWNlX2FkZGAgaXMgaW4gYGV4ZWN1dG9yL2NvbW1vbl9saW51eC5oYC4gRG9lcyBpdCB0YWxrIHRvIGAvZGV2L3ZmaW8vLi4uYD8gTm8sIEkgYW0gd3JvbmcsIGl0IHVzZXMgYG5ldGxpbmtgIHRvIHRhbGsgdG8gYSBkdW1teSBQQ0kgZHJpdmVyPwoKV2FpdCwgaXMgdGhlcmUgZXZlbiBhIGBkdW1teWAgUENJIGRyaXZlciBpbiB0aGUga2VybmVsPyBOby4gVGhpcyBpcyBub3QgdGhlIGNhc2UuCgpPa2F5LCBzbyB3aGF0IGlzIHRoZSByZWFsIGFuc3dlciBoZXJlPyBJdCBzZWVtcyBJIGFtIHN0YXJ0aW5nIHRvIHJlbWVtYmVyLCBzeXprYWxsZXIgZG9lcyBQQ0kgZnV6emluZyBzdXBwb3J0IGJ5IGVpdGhlciB1c2luZyBhIGN1c3RvbSBRRU1VIGRldmljZSBvciBieSB1c2luZyBgdmZpb2A/CgpOb3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdGhhdCBjZXJ0YWluIGNvZGUgcGF0aHMgYXJlICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gSXQgbWVudGlvbnMgdGhpbmdzIGxpa2UgdXNiIGdhZGdldCBhbmQgbWFjODAyMTFfaHdzaW0uCgpTbywgaWYgaXQmIzM5O3MgdHJ1bHkgaW1wb3NzaWJsZSwgbXkgcmVzcG9uc2Ugc2hvdWxkIGJlIGZhbHNlLiBCdXQsIGlzIGBydGFzZWAgcmVhY2hhYmxlPwoKSWYgdGhlcmUmIzM5O3Mgbm8gUUVNVSBlbXVsYXRpb24gZm9yIGBydGFzZWAsIGFuZCBubyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBmb3IgaXQsIHRoZW4gaXQmIzM5O3MgKmltcG9zc2libGUqIHRvIHJlYWNoLiBCdXQgd2FpdCEgV2hhdCBpZiBzeXprYWxsZXIgKmNhbiogcmVhY2ggaXQ/IFRoZSBwYXRjaCBhdXRob3IgaXMgbGlzdGVkIGFzIGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YC4KClRoaXMgbWVhbnMgc3l6a2FsbGVyICpkaWQqIHJlYWNoIGl0ISBIb3c/IE1heWJlIGBydGFzZWAgaXMgTk9UIGEgUENJIGRyaXZlcj8gSSBuZWVkIHRvIGNoZWNrIGBydGFzZV9pbml0X29uZWAgdG8gc2VlIGlmIG15IGd1ZXNzIGlzIHJpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGFzZV9pbml0X29uZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0yMzcxPXN0YXRpYyB2b2lkIHJ0YXNlX3JlbGVhc2VfYm9hcmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjM4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjIzODk6c3RhdGljIGludCBydGFzZV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIzOTAtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTI1OTQ9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0YXNlX3BjaV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjU5Ni1cdC5pZF90YWJsZSA9IHJ0YXNlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyNTk3Olx0LnByb2JlID0gcnRhc2VfaW5pdF9vbmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yNTk4LVx0LnJlbW92ZSA9IHJ0YXNlX3JlbW92ZV9vbmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTk1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY29uc3RydWN0aW5nIHRoZSBTeXprYWxsZXIgUENJIEZ1enppbmcgTWVjaGFuaXNtKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIFBDSSBkcml2ZXIgdGhhdCYjMzk7cyBiZWVuIHRhcmdldGVkLiBUaGUgcXVlc3Rpb24gaXMsICpob3cqIGRpZCBzeXprYWxsZXIgcmVhY2ggaXQ/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXJlIG1pZ2h0IGJlIGEgZ2VuZXJpYyBQQ0kgZnV6emVyIHdpdGhpbiBzeXprYWxsZXIsIHNvbWV0aGluZyB0aGF0IGNhbiBlc3NlbnRpYWxseSBlbXVsYXRlIGFueSBQQ0kgZGV2aWNlIGJ5IGludGVyY2VwdGluZyBhbmQgaW50ZXJwcmV0aW5nIE1lbW9yeS1NYXBwZWQgSS9PIChNTUlPKSBvcGVyYXRpb25zLgoKQWgsIHllcyEgSSB2YWd1ZWx5IHJlbWVtYmVyIHNlZWluZyBhIGBzeXpfcGNpX2RldmljZV9hZGRgIHN5c2NhbGwuIEl0IHNlZW1zIGxpa2UgdGhlIHdheSB0aGlzIHdvcmtzIGludm9sdmVzIGVpdGhlciB1c2luZyBhIGN1c3RvbSBRRU1VIGRldmljZSBvciBsZXZlcmFnaW5nIGB2ZmlvYC4gV2FpdCwgbm8uIEl0JiMzOTtzIG5vdCBhIGN1c3RvbSBRRU1VIGRldmljZS4gVGhlIHN5emthbGxlciBkb2N1bWVudGF0aW9uIGNsZWFybHkgc2hvd3MgaXQgaXMgdXNpbmcgYHZmaW9gIGZvciBpdHMgUENJIGVtdWxhdGlvbi4KCklmIHN5emthbGxlciBpcyB1c2luZyBgdmZpb2AgdG8gZW11bGF0ZSB0aGUgUENJIGRldmljZXMgaW4gdXNlciBzcGFjZSwgdGhlbiB0aGUga2VybmVsICp0aGlua3MqIGl0JiMzOTtzIHNlZWluZyBhIHJlYWwgUENJIGRldmljZS4gVGhlIGFjdHVhbCBzeXprYWxsZXIgZXhlY3V0b3IgcHJvY2VzcyB0aGVuIGhhbmRsZXMgdGhlIE1NSU8gcmVhZHMgYW5kIHdyaXRlcy4KCkJ1dCB3YWl0LiBDYW4gYHZmaW9gIGJlIHVzZWQgdG8gKmVtdWxhdGUqIGEgUENJIGRldmljZSAqdG8gdGhlIGtlcm5lbCo/IE5vLCBJJiMzOTttIHByZXR0eSBzdXJlIGB2ZmlvYCBpcyBwcmltYXJpbHkgZm9yIGV4cG9zaW5nICpyZWFsKiBQQ0kgZGV2aWNlcyB0byB1c2VyIHNwYWNlLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIFRvIHRydWx5IG1ha2UgYSB1c2VyLXNwYWNlIGVtdWxhdGVkIFBDSSBkZXZpY2UgbG9vayByZWFsIHRvIHRoZSBrZXJuZWwsIHlvdSYjMzk7ZCBuZWVkIHNvbWV0aGluZyBsaWtlIGBtZGV2YCAobWVkaWF0ZWQgZGV2aWNlcykgb3Igc29tZSBzb3J0IG9mIGR1bW15IFBDSSBob3N0IGJyaWRnZS4KCkRvZXMgdGhlIGtlcm5lbCBldmVuICpoYXZlKiBhIGR1bW15IFBDSSBob3N0IGJyaWRnZT8gSSYjMzk7ZCBuZWVkIHRvIGxvb2sgYXQgdGhlIFBDSSBjb250cm9sbGVyIGNvZGUgZm9yIHRoYXQuIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1ob3N0LWNvbW1vbi5jYCBvciBzb21ldGhpbmcgc2ltaWxhci4KCkhhbmcgb24uLi4gSSByZWNhbGwgc29tZXRoaW5nIGFib3V0IHN5emthbGxlciYjMzk7cyByZWNlbnQgZGV2ZWxvcG1lbnRzIGluIFBDSSBmdXp6aW5nLiBXYXNuJiMzOTt0IHRoZXJlIGEgYHZpcnRpby1wY2lgIGZlYXR1cmUgYWRkZWQ/IE5vcGUsIHdhaXQuIEl0JiMzOTtzIGdlbmVyaWMgUENJIGZ1enppbmcsIG5vdCBzcGVjaWZpY2FsbHkgdmlydGlvLXBjaS4gSXQmIzM5O3MgZ2VuZXJpYy4KClNvLCBob3cgaXMgc3l6a2FsbGVyIGRvaW5nIHRoaXM/IEl0IGRvZXNuJiMzOTt0IHVzZSBhIGN1c3RvbSBRRU1VIGRldmljZSwgc28gdGhhdCYjMzk7cyBvdXQuIERvZXMgc3l6a2FsbGVyIGxldmVyYWdlIGEgc3BlY2lhbCBrZXJuZWwgbW9kdWxlIGZvciBQQ0kgZnV6emluZz8gTGlrZSBga2NvdmAgb3IgYGt1bml0YD8gTWF5YmUgc29tZXRoaW5nIGluIHRoZSBQQ0kgZHJpdmVyIGl0c2VsZj8gSSBzaG91bGQgY2hlY2sgdGhlIGBkcml2ZXJzL3BjaWAgZGlyZWN0b3J5IGZvciBhbnl0aGluZyBsaWtlIGEgYHBjaV90ZXN0YCBvciBhIGBkdW1teWAgUENJIGRldmljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHVtbXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWRyYTd4eC5jPTE5MD1zdGF0aWMgaW50IGRyYTd4eF9wY2llX2ludHhfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCBpcnEsXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWRyYTd4eC5jLTE5Mi17XG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktZHJhN3h4LmM6MTkzOlx0aXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgXHUwMDI2ZHVtbXlfaXJxX2NoaXAsIGhhbmRsZV9zaW1wbGVfaXJxKTtcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1kcmE3eHguYy0xOTQtXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGRvbWFpbi1cdTAwM2Vob3N0X2RhdGEpO1xuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1pbXg2LmM9MTQ4MT1zdGF0aWMgdm9pZCBpbXhfcGNpZV9ob3N0X3Bvc3RfaW5pdChzdHJ1Y3QgZHdfcGNpZV9ycCAqcHApXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWlteDYuYy0xNTE1LSAqIHJlZ2lzdGVyIGlzIHJlc2VydmVkLCBzbyB0aGUgZ2VuZXJpYyBEV0MgaW1wbGVtZW50YXRpb24gb2Ygc2VuZGluZyB0aGVcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1pbXg2LmM6MTUxNjogKiBQTUVfVHVybl9PZmYgbWVzc2FnZSB1c2luZyBhIGR1bW15IE1NSU8gd3JpdGUgY2Fubm90IGJlIHVzZWQuXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktaW14Ni5jLTE1MTctICovXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpZS1kZXNpZ253YXJlLWhvc3QuYz0xMTg3PXN0YXRpYyBpbnQgZHdfcGNpZV9wbWVfdHVybl9vZmYoc3RydWN0IGR3X3BjaWUgKnBjaSlcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2llLWRlc2lnbndhcmUtaG9zdC5jLTEyMTQtXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2llLWRlc2lnbndhcmUtaG9zdC5jOjEyMTU6XHQvKiBBIGR1bW15IHdyaXRlIGlzIGNvbnZlcnRlZCB0byBhIE1zZyBUTFAgKi9cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaWUtZGVzaWdud2FyZS1ob3N0LmMtMTIxNi1cdHdyaXRlbCgwLCBtZW0pO1xuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1ob3N0LmM9ODM9c3RhdGljIHZvaWQgbW9iaXZlaWxfcGNpZV9pc3Ioc3RydWN0IGlycV9kZXNjICpkZXNjKVxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1ob3N0LmMtMTQ1LVx0XHQgKiBmcm9tIE1TSSBoYXJkd2FyZSBGSUZPLiBTbyBrZWVwaW5nIHRoZXNlIGZvbGxvd2luZ1xuZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLWhvc3QuYzoxNDY6XHRcdCAqIHR3byBkdW1teSByZWFkcy5cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1ob3N0LmMtMTQ3LVx0XHQgKi9cbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYz0xNzUxPXN0YXRpYyB1MzIgaHZfY29tcG9zZV9tc2lfcmVxX3YxKFxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3NjEtXHQvKlxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc2MjpcdCAqIENyZWF0ZSBNU0kgdy8gZHVtbXkgdkNQVSBzZXQsIG92ZXJ3cml0dGVuIGJ5IHN1YnNlcXVlbnQgcmV0YXJnZXQgaW5cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3NjMtXHQgKiBodl9pcnFfdW5tYXNrKCkuXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc3MS0gKiBUaGUgdkNQVSBzZWxlY3RlZCBieSBodl9jb21wb3NlX211bHRpX21zaV9yZXFfZ2V0X2NwdSgpIGFuZFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc3MjogKiBodl9jb21wb3NlX21zaV9yZXFfZ2V0X2NwdSgpIGlzIGEgXCYjMzQ7ZHVtbXlcJiMzNDsgdkNQVSBiZWNhdXNlIHRoZSBmaW5hbCB2Q1BVIHRvIGJlXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xNzczLSAqIGludGVycnVwdGVkIGlzIHNwZWNpZmllZCBsYXRlciBpbiBodl9pcnFfdW5tYXNrKCkgYW5kIGNvbW11bmljYXRlZCB0byBIeXBlci1WXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYzoxNzc0OiAqIHZpYSB0aGUgSFZDQUxMX1JFVEFSR0VUX0lOVEVSUlVQVCBoeXBlcmNhbGwuIEJ1dCB0aGUgY2hvaWNlIG9mIGR1bW15IHZDUFUgaXNcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3NzUtICogbm90IGlycmVsZXZhbnQgYmVjYXVzZSBIeXBlci1WIGNob29zZXMgdGhlIHBoeXNpY2FsIENQVSB0byBoYW5kbGUgdGhlXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc3OC0gKiBidXQgYXNzaWduaW5nIHRvbyBtYW55IHZQQ0kgZGV2aWNlIGludGVycnVwdHMgdG8gdGhlIHNhbWUgcENQVSBjYW4gY2F1c2UgYVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc3OTogKiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBTbyB3ZSBzcHJlYWQgb3V0IHRoZSBkdW1teSB2Q1BVcyB0byBpbmZsdWVuY2UgSHlwZXItVlxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc4MC0gKiB0byBzcHJlYWQgb3V0IHRoZSBwQ1BVcyB0aGF0IGl0IHNlbGVjdHMuXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc4Mi0gKiBGb3IgdGhlIHNpbmdsZS1NU0kgYW5kIE1TSS1YIGNhc2VzLCBpdCYjMzk7cyBPSyBmb3IgaHZfY29tcG9zZV9tc2lfcmVxX2dldF9jcHUoKVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc4MzogKiB0byBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGR1bW15IHZDUFUsIGJlY2F1c2UgYSBzZWNvbmQgY2FsbCB0b1xuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc4NC0gKiBodl9jb21wb3NlX21zaV9tc2coKSBjb250YWlucyB0aGUgXCYjMzQ7cmVhbFwmIzM0OyB2Q1BVLCBjYXVzaW5nIEh5cGVyLVYgdG8gY2hvb3NlIGFcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xNzg2LSAqIGh2X2NvbXBvc2VfbXNpX21zZygpIGV4aXRzIHdpdGhvdXQgc2VuZGluZyBhIG1lc3NhZ2UgdG8gdGhlIHZQQ0kgVlNQLCBzbyB0aGVcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE3ODc6ICogb3JpZ2luYWwgZHVtbXkgdkNQVSBpcyB1c2VkLiBUaGlzIGR1bW15IHZDUFUgbXVzdCBiZSByb3VuZC1yb2JpbiYjMzk7ZWQgc28gdGhhdFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc4OC0gKiB0aGUgcENQVXMgYXJlIHNwcmVhZCBvdXQuIEFsbCBpbnRlcnJ1cHRzIGZvciBhIG11bHRpLU1TSSBkZXZpY2UgZW5kIHVwIHVzaW5nXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc5NC0gKiBlbmhhbmNlbWVudCBpcyBwbGFubmVkIGZvciBhIGZ1dHVyZSB2ZXJzaW9uLiBXaXRoIHRoYXQgZW5oYW5jZW1lbnQsIHRoZVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc5NTogKiBkdW1teSB2Q1BVIHNlbGVjdGlvbiB3b24mIzM5O3QgbWF0dGVyLCBhbmQgaW50ZXJydXB0cyBmb3IgdGhlIHNhbWUgbXVsdGktTVNJXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xNzk2LSAqIGRldmljZSB3aWxsIGJlIHNwcmVhZCBhY3Jvc3MgbXVsdGlwbGUgcENQVXMuXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc5OS0vKlxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTgwMDogKiBDcmVhdGUgTVNJIHcvIGR1bW15IHZDUFUgc2V0IHRhcmdldGluZyBqdXN0IG9uZSB2Q1BVLCBvdmVyd3JpdHRlblxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTgwMS0gKiBieSBzdWJzZXF1ZW50IHJldGFyZ2V0IGluIGh2X2lycV91bm1hc2soKS5cbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYz0xODAzPXN0YXRpYyBpbnQgaHZfY29tcG9zZV9tc2lfcmVxX2dldF9jcHUoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5KVxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE4MDgtLypcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE4MDk6ICogTWFrZSBzdXJlIHRoZSBkdW1teSB2Q1BVIHZhbHVlcyBmb3IgbXVsdGktTVNJIGRvbiYjMzk7dCBhbGwgcG9pbnQgdG8gdkNQVTAuXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xODEwLSAqL1xuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jPTE4NzU9c3RhdGljIHZvaWQgaHZfY29tcG9zZV9tc2lfbXNnKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgc3RydWN0IG1zaV9tc2cgKm1zZylcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xOTU2LVx0XHQvKlxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTk1NzpcdFx0ICogVGhlIHZlY3RvciB3ZSBzZWxlY3QgaGVyZSBpcyBhIGR1bW15IHZhbHVlLiAgVGhlIGNvcnJlY3RcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE5NTgtXHRcdCAqIHZhbHVlIGdldHMgc2VudCB0byB0aGUgaHlwZXJ2aXNvciBpbiB1bm1hc2soKS4gIFRoaXMgbmVlZHNcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtYWx0ZXJhLmM9MzY2PXN0YXRpYyB2b2lkIHMxMF90bHBfd3JpdGVfcGFja2V0KHN0cnVjdCBhbHRlcmFfcGNpZSAqcGNpZSwgdTMyICpoZWFkZXJzLFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLWFsdGVyYS5jOjM2NzpcdFx0XHRcdCB1MzIgZGF0YSwgYm9vbCBkdW1teSlcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1hbHRlcmEuYy0zNjgte1xuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1hbHRlcmEuYz03ODY9c3RhdGljIGludCBhbHRlcmFfcGNpZV9pbnR4X21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgaXJxLFxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1hbHRlcmEuYy03ODgte1xuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLWFsdGVyYS5jOjc4OTpcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFx1MDAyNmR1bW15X2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7XG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtYWx0ZXJhLmMtNzkwLVx0aXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tXHUwMDNlaG9zdF9kYXRhKTtcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWsuYz01NTQ9c3RhdGljIGludCBtdGtfcGNpZV9pbnR4X21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgaXJxLFxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tZWRpYXRlay5jLTU1Ni17XG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWsuYzo1NTc6XHRpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBcdTAwMjZkdW1teV9pcnFfY2hpcCwgaGFuZGxlX3NpbXBsZV9pcnEpO1xuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLmMtNTU4LVx0aXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tXHUwMDNlaG9zdF9kYXRhKTtcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtcm9ja2NoaXAtZXAuYz02NTI9c3RhdGljIGludCByb2NrY2hpcF9wY2llX2VwX3NldHVwX2lycShzdHJ1Y3QgcGNpX2VwYyAqZXBjKVxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1yb2NrY2hpcC1lcC5jLTY3NC1cdCAqIGlzIGhpZ2ggYW5kIHdpbGwgdHJpZ2dlciB0aGUgcGVyc3RfaXJxIGhhbmRsZXIuIFNvIHRyZWF0IHRoaXMgaW5pdGlhbFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWVwLmM6Njc1Olx0ICogSVJRIGFzIGEgZHVtbXkgb25lIGJ5IGZha2luZyB0aGUgaG9zdCBhc3NlcnRpbmcgUEVSU1QjLlxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWVwLmMtNjc2LVx0ICovXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYz02Njk9c3RhdGljIGludCByb2NrY2hpcF9wY2llX2ludHhfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCBpcnEsXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYy02NzEte1xuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYzo2NzI6XHRpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBcdTAwMjZkdW1teV9pcnFfY2hpcCwgaGFuZGxlX3NpbXBsZV9pcnEpO1xuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYy02NzMtXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGRvbWFpbi1cdTAwM2Vob3N0X2RhdGEpO1xuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS14aWxpbnguYz0zMjE9c3RhdGljIGludCB4aWxpbnhfcGNpZV9pbnR4X21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgaXJxLFxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS14aWxpbnguYy0zMjMte1xuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXhpbGlueC5jOjMyNDpcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFx1MDAyNmR1bW15X2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7XG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUteGlsaW54LmMtMzI1LVx0aXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tXHUwMDNlaG9zdF9kYXRhKTtcbi0tXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM9MTM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX21hdGNoX2RldmljZShzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LFxuLS1cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNzUtXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM6MTc2Olx0LyogZHJpdmVyX292ZXJyaWRlIHdpbGwgYWx3YXlzIG1hdGNoLCBzZW5kIGEgZHVtbXkgaWQgKi9cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNzctXHRpZiAocmV0IFx1MDAzZSAwKVxuLS1cbmRyaXZlcnMvcGNpL3B3cmN0cmwvcGNpLXB3cmN0cmwtdGM5NTYzLmM9NTM0PXN0YXRpYyBpbnQgdGM5NTYzX3B3cmN0cmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3BjaS9wd3JjdHJsL3BjaS1wd3JjdHJsLXRjOTU2My5jLTU1Ni1cbmRyaXZlcnMvcGNpL3B3cmN0cmwvcGNpLXB3cmN0cmwtdGM5NTYzLmM6NTU3Olx0dGM5NTYzLVx1MDAzZWNsaWVudCA9IGkyY19uZXdfZHVtbXlfZGV2aWNlKHRjOTU2My1cdTAwM2VhZGFwdGVyLCBhZGRyKTtcbmRyaXZlcnMvcGNpL3B3cmN0cmwvcGNpLXB3cmN0cmwtdGM5NTYzLmMtNTU4LVx0aWYgKElTX0VSUih0Yzk1NjMtXHUwMDNlY2xpZW50KSkge1xuLS1cbmRyaXZlcnMvcGNpL3NldHVwLWJ1cy5jPTU3Nz1zdGF0aWMgdm9pZCBfX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4tLVxuZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMtNjA1LVx0TElTVF9IRUFEKGxvY2FsX2ZhaWxfaGVhZCk7XG5kcml2ZXJzL3BjaS9zZXR1cC1idXMuYzo2MDY6XHRMSVNUX0hFQUQoZHVtbXlfaGVhZCk7XG5kcml2ZXJzL3BjaS9zZXR1cC1idXMuYy02MDctXHRzdHJ1Y3QgcGNpX2Rldl9yZXNvdXJjZSAqc2F2ZV9yZXM7XG4tLVxuZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMtNjE0LVx0aWYgKCFyZWFsbG9jX2hlYWQpXG5kcml2ZXJzL3BjaS9zZXR1cC1idXMuYzo2MTU6XHRcdHJlYWxsb2NfaGVhZCA9IFx1MDAyNmR1bW15X2hlYWQ7XG5kcml2ZXJzL3BjaS9zZXR1cC1idXMuYy02MTYtXG4tLVxuZHJpdmVycy9wY2kvdmdhYXJiLmM9MTY3PWludCB2Z2FfcmVtb3ZlX3ZnYWNvbihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL3BjaS92Z2FhcmIuYy0xNzYtXHRpZiAoY29uX2lzX2JvdW5kKFx1MDAyNnZnYV9jb24pKVxuZHJpdmVycy9wY2kvdmdhYXJiLmM6MTc3Olx0XHRyZXQgPSBkb190YWtlX292ZXJfY29uc29sZShcdTAwMjZkdW1teV9jb24sIDAsXG5kcml2ZXJzL3BjaS92Z2FhcmIuYy0xNzgtXHRcdFx0XHRcdCAgIE1BWF9OUl9DT05TT0xFUyAtIDEsIDEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk0MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFVucmVhY2hhYmxlOiBBIFBDSSBEcml2ZXIgQ29udW5kcnVtKioKCk9rYXksIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggdGhpcyBQQ0kgZHJpdmVyLCBgcnRhc2VgLCBhbmQgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgaXRzIGNvcmUgZnVuY3Rpb24gYHJ0YXNlX3N0YXJ0X3htaXRgIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc21pc3MgdGhpcyBvdXRyaWdodCDigJMgbm8gZ2VuZXJpYyBQQ0kgZHVtbXkgZHJpdmVyIGV4aXN0cywgd2hpY2ggd291bGQgYmUgdGhlIGVhc2llc3Qgd2F5IHRvIGV4cG9zZSBpdCBpbiBhIHRlc3Qgc2V0dXAuIEJ1dCB0aGUgc2l0dWF0aW9uJiMzOTtzIGEgbGl0dGxlIG1vcmUgY29tcGxpY2F0ZWQuCgpUaGUgcHJlc2VuY2Ugb2YgYHN5el9wY2lfZGV2aWNlX2FkZGAgaW4gc3l6a2FsbGVyIHRocm93cyBhIHdyZW5jaCBpbiB0aGUgd29ya3MuIE15IGZpcnN0IHRob3VnaHQgaXMgS1ZNLCBidXQgdGhhdOKAmXMgcXVpY2tseSBkaXNtaXNzZWQgYmVjYXVzZSB0aGUgaW1wbGVtZW50YXRpb24gc2VlbXMgdGllZCB0byBgcGNpX3Rlc3RgIG9yIGBwY2lfZW5kcG9pbnRgIGZyYW1ld29ya3MuIEhvd2V2ZXIsIGBwY2lfZW5kcG9pbnRgIGlzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIG5vdCBnZW5lcmFsIFBDSSBkZXZpY2UgbW9kZWxpbmcuIGBDT05GSUdfUENJX1NUVUJgIGlzIGZvciBoaWRpbmcgZGV2aWNlcyBhbmQgVU1MIGlzIGlycmVsZXZhbnQuIAoKU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBzeXpfcGNpX2RldmljZV9hZGRgLiBJcyBpdCBhIHBzZXVkby1zeXNjYWxsPyBIb3cgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKmRvKiB0aGlzPyBEb2VzIGl0IHdyaXRlIHNvbWV0aGluZyB0byBgL3N5cy9idXMvcGNpL2RyaXZlcnMvLi4uYD8gTm8uIEkgcmVjYWxsIHRoYXQgc3l6a2FsbGVyIHJlY2VudGx5IGFkZGVkIGEgUENJIGZ1enplciwgYnV0IGlzIHRoYXQgcmVsZXZhbnQ/IE1heWJlIGl0JiMzOTtzIGBzeXprYWxsZXItcGNpYCBvciBgdmZpb2A/IEEgcXVpY2sgc2VhcmNoIGluIHRoZSBzeXprYWxsZXIgc291cmNlIHdvdWxkIGJlIGhlbHBmdWwuIEJ1dCBJIGRvbiYjMzk7dCBoYXZlIGFjY2VzcyB0byBpdCwgc28gSSBtdXN0IHRoaW5rIGhhcmRlci4KClRoZSBrZXkgaXMgdGhhdCBzeXprYWxsZXIgZ2VuZXJhdGVkIHRoaXMgcGF0Y2gsIHdoaWNoIG1lYW5zIGl0IHByb2JhYmx5IGZvdW5kIGEgYnVnIGR1cmluZyB0ZXN0aW5nLiBJZiBzeXprYWxsZXIgZm91bmQgaXQsIGl0ICptdXN0KiBiZSByZWFjaGFibGUgc29tZWhvdy4gVGhpcyBpcyB3aGVuIEkgcmVhbGl6ZSB0aGUgcGF0Y2ggYXV0aG9yIGlzIGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YCwgaW5kaWNhdGluZyBpdCYjMzk7cyBwYXJ0IG9mIHN5emthbGxlciYjMzk7cyBwYXRjaCB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiBUaGlzIG1lYW5zIHN5emthbGxlciBpcyAqdGVzdGluZyogYSBzdWJtaXR0ZWQgcGF0Y2gsIG5vdCBuZWNlc3NhcmlseSBmaW5kaW5nIGEgYnVnIGl0IHRyaWdnZXJlZCBpdHNlbGYuCgpHaXZlbiB0aGlzLCBJIGhhdmUgdG8gY29uc2lkZXIgKmhvdyogc3l6a2FsbGVyIGNvdWxkIHJlYWNoIGl0LiBJcyBpdCBhIFVTQiBvciBwbGF0Zm9ybSBkZXZpY2U/IE5vLCBpdCYjMzk7cyBhIFBDSSBkcml2ZXIuIENvdWxkIGl0IGJlIHJlbGF0ZWQgdG8gYG1hYzgwMjExX2h3c2ltYCwgYSAmIzM0O2R1bW15JiMzNDsgbmV0ZGV2aWNlLCBCUEYsIG9yIHZpcnRpbz8gSSBkaXNjYXJkIGFsbCB0aG9zZSBvcHRpb25zIGFzIHdlbGwuIFRoZW4gSSBjb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLCB3aGljaCBpdCBhZGRlZCByZWNlbnRseSwgd2l0aCBRRU1VIGludGVncmF0aW9uIG9yIHZmaW8tdXNlci4gSXQgbmVlZHMgdG8gcnVuIG9uIEdDRSB0b28sIHdoaWNoIGRvZXNuJiMzOTt0IHN1cHBvcnQgY3VzdG9tIFFFTVUgZGV2aWNlcy4KCkNvdWxkIGl0IHVzZSBgS1ZNYCB0byBpbnRlcmNlcHQgTU1JTz8gTm8sIGl0IHJ1bnMgaW5zaWRlIHRoZSBWTSBhbmQgY2FuJiMzOTt0IHVzZSBhIG5lc3RlZCBoeXBlcnZpc29yIHRvIGRvIHRoaXMuIFRoYXQgbGVhdmVzIGVpdGhlciBgcGNpX3Rlc3RgIG9yIGB2ZmlvYCwgd2hpY2ggYm90aCBhcmUgcG9zc2liaWxpdGllcy4gQnV0LCBgdmZpb2AgZXhwb3NlcyBob3N0IGRldmljZXMgdG8gdXNlciBzcGFjZSwgd2hpY2ggY2FuJiMzOTt0IHBvc3NpYmx5IHdvcmsuIFRoZSBgbWRldmAgZnJhbWV3b3JrIG1pZ2h0IGJlIHVzZWZ1bCwgd2hpY2ggYWxsb3dzIGNyZWF0aW5nIHZpcnR1YWwgZGV2aWNlcy4gQW5kIGB2aXJ0aW8tcGNpYCBtaWdodCBiZSByZWxhdGVkLgoKQnV0IHRoZW4gSSByZS1yZWFkIHRoZSBwcm9tcHQ6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFRoYXQmIzM5O3Mgd2hhdCBJIHNob3VsZCBsb29rIGF0ISBJZiBpdCYjMzk7cyBpbXBvc3NpYmxlLCBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBxdWVzdGlvbiBpcyAqY2FuKiBzeXprYWxsZXIgcmVhY2ggaXQ/IE1heWJlIHN5emthbGxlciAqY2Fubm90KiByZWFjaCBpdC4gTWF5YmUgaXQmIzM5O3MgdGVzdGluZyBhIHBhdGNoIHN1Ym1pdHRlZCBieSBhIGRldmVsb3BlciB0aGF0IGl0IHRlc3RzIGFzIGFuIGF1dG9tYXRlZCBzZXJ2aWNlLgoKWWVzISBUaGUgYXV0aG9yIGluZGljYXRlcyB0aGlzIGlzIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFN5emthbGxlciBpcyB0ZXN0aW5nIGEgc3VibWl0dGVkIHBhdGNoLiBJdCBkb2VzbiYjMzk7dCBtZWFuIHN5emthbGxlciBmb3VuZCBhIGJ1ZyBpbiB0aGlzIHNwZWNpZmljIGNvZGUhCgpHaXZlbiB0aGF0IHRoZSBkcml2ZXIgYHJ0YXNlYCBpcyBoYXJkd2FyZS1zcGVjaWZpYyAoUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCwgZnJvbSBhcm91bmQgMjAyNCksIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGl0LCB0aGVuIHN5emthbGxlciBDQU5OT1QgcmVhY2ggaXQgZHVyaW5nIGZ1enppbmcuIEkgY29uZmlybWVkIHRoaXMgYnkgc2VhcmNoaW5nIHRoZSBgbmV0L2AgZGlyZWN0b3J5IGFuZCBmaW5kaW5nIG5vIGVtdWxhdGlvbi4gVGhlIHNhbWUgZ29lcyBmb3IgUUVNVS4gUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCBpcyB2ZXJ5IG5ldy4KCldpdGhvdXQgYW55IGhhcmR3YXJlIG9yIGVtdWxhdGlvbiwgdGhlIGBwcm9iZWAgZnVuY3Rpb24gKGBydGFzZV9pbml0X29uZWApIHdpbGwgbmV2ZXIgZmluZCB0aGUgZGV2aWNlLiBFdmVuIGlmIGZvcmNlZCB0byBiaW5kIHRvIGEgZHVtbXkgUENJIGRldmljZSwgYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYCB3b3VsZCBmYWlsIGR1ZSB0byBNTUlPIHJlYWRzLCB3aGljaCB3aWxsIG5vdCByZXR1cm4gbWFnaWMgdmFsdWVzLCBhbmQgYHJ0YXNlX2luaXRfb25lYCB3aWxsIGZhaWwuIFRoZSBuZXRkZXZpY2Ugd291bGQgbmV2ZXIgYmUgcmVnaXN0ZXJlZCwgYW5kIGBydGFzZV9zdGFydF94bWl0YCB3b3VsZCBuZXZlciBiZSBjYWxsZWQuIFRoZXJlZm9yZSwgaXQgaXMgKmltcG9zc2libGUqIHRvIHJlYWNoIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKTm93LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGZvciBhbnkgYnlwYXNzZXMgb2YgYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTIyNTc9c3RhdGljIHZvaWQgcnRhc2VfaW5pdF9zb2Z0d2FyZV92YXJpYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yMjgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MjI4MTpzdGF0aWMgaW50IHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkKHN0cnVjdCBydGFzZV9wcml2YXRlICp0cClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIyODIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTIzODk9c3RhdGljIGludCBydGFzZV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yNDE1LVx0LyogaWRlbnRpZnkgY2hpcCBhdHRhY2hlZCB0byBib2FyZCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MjQxNjpcdHJldCA9IHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkKHRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTI0MTctXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODc4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyB0aGUgRmF1bHQgSW5qZWN0aW9uIFBvc3NpYmlsaXRpZXMqKgoKRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLiBDb3VsZCB0aGVyZSBiZSBhIGZhdWx0IGluamVjdGlvbiBtZWNoYW5pc20sIGEgd2F5IHRvIGJ5cGFzcyB0aGlzPyBNYXliZSBhIHN1YnRsZSB0aW1pbmcgYXR0YWNrIG9yIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZGl0aW9uPyBIbW0sIG5vLCBpdCBsb29rcyBsaWtlIHRoZSBjb2RlIGp1c3QgcmV0dXJucyBgLUVOT0RFVmAgaWYgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgZG9lc24mIzM5O3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHZhbHVlLiBTbywgbm8gaW1tZWRpYXRlIGJ5cGFzcyB0aGVyZS4gVGhhdCYjMzk7cyBnb29kLCBsZXNzIHRvIHdvcnJ5IGFib3V0LgoKTm93LCBhIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb246IGNhbiBJIGxldmVyYWdlIHN5emthbGxlciBoZXJlPyBDb3VsZCBzeXprYWxsZXIgcG90ZW50aWFsbHkgbW9jayBvciBlbXVsYXRlIHRoZSBgcnRhc2VfcjMyYCBmdW5jdGlvbj8gSWYgSSBjb3VsZCBnZXQgc3l6a2FsbGVyIHRvIHJlc3BvbmQgYXMgaWYgdGhhdCBmdW5jdGlvbiBjYWxsIHdlcmUgc3VjY2Vzc2Z1bCwgSSBtaWdodCBiZSBhYmxlIHRvIHRyaWdnZXIgc29tZSBpbnRlcmVzdGluZyBiZWhhdmlvciBkb3duIHRoZSBsaW5lLiBUaGF0JiMzOTtzIHRoZSBhbmdsZSBJJiMzOTtsbCBuZWVkIHRvIGV4cGxvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0YXNlX3IzMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0xMjU9c3RhdGljIHUxNiBydGFzZV9yMTYoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwLCB1MTYgcmVnKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTEyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjEzMDpzdGF0aWMgdTMyIHJ0YXNlX3IzMihjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAsIHUxNiByZWcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMzEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTgwOT1zdGF0aWMgdm9pZCBydGFzZV9pcnFfZGlzX2FuZF9jbGVhcihjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtODE2LVx0cnRhc2VfdzMyKHRwLCBpdmVjLVx1MDAzZWltcl9hZGRyLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjgxNzpcdHZhbDEgPSBydGFzZV9yMzIodHAsIGl2ZWMtXHUwMDNlaXNyX2FkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtODE4LVx0cnRhc2VfdzMyKHRwLCBpdmVjLVx1MDAzZWlzcl9hZGRyLCB2YWwxKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz05MjU9c3RhdGljIHZvaWQgcnRhc2VfaHdfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtOTUwLVx0Lyogc2V0IHR4IGRtYSBidXJzdCBzaXplIGFuZCBpbnRlcmZyYW1lIGdhcCB0aW1lICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzo5NTE6XHRyZWdfZGF0YTMyID0gcnRhc2VfcjMyKHRwLCBSVEFTRV9UWF9DT05GSUdfMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy05NTItXHR1MzJwX3JlcGxhY2VfYml0cyhcdTAwMjZyZWdfZGF0YTMyLCBSVEFTRV9UWF9ETUFfQlVSU1RfVU5MSU1JVEVELFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTEwMzM9c3RhdGljIGlycXJldHVybl90IHJ0YXNlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTA0MC1cdHRwID0gaXZlYy1cdTAwM2V0cDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjEwNDE6XHRzdGF0dXMgPSBydGFzZV9yMzIodHAsIGl2ZWMtXHUwMDNlaXNyX2FkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTA0Mi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0xNzU3PXN0YXRpYyB2b2lkIHJ0YXNlX2R1bXBfdGFsbHlfY291bnRlcihjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTc2Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjE3Njg6XHRlcnIgPSByZWFkX3BvbGxfdGltZW91dF9hdG9taWMocnRhc2VfcjMyLCB2YWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xNzY5LVx0XHRcdFx0ICAgICAgICEodmFsIFx1MDAyNiBSVEFTRV9DT1VOVEVSX0RVTVApLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTE3NzY9c3RhdGljIHZvaWQgcnRhc2VfZHVtcF9zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTE3OTktXHRcdCAgIHJ0YXNlX3I4KHRwLCBSVEFTRV9DSElQX0NNRCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTgwMDpcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtJTVIgPSAlMDh4XFxuXCYjMzQ7LCBydGFzZV9yMzIodHAsIFJUQVNFX0lNUjApKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjE4MDE6XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7SVNSID0gJTA4eFxcblwmIzM0OywgcnRhc2VfcjMyKHRwLCBSVEFTRV9JU1IwKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xODAyLVx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O0Jvb3QgQ3RybCBSZWcoMHhFMDA0KSA9ICUwNHhcXG5cJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjI4MT1zdGF0aWMgaW50IHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkKHN0cnVjdCBydGFzZV9wcml2YXRlICp0cClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yMjg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MjI4NTpcdHRwLVx1MDAzZWh3X3ZlciA9IHJ0YXNlX3IzMih0cCwgUlRBU0VfVFhfQ09ORklHXzApIFx1MDAyNiBSVEFTRV9IV19WRVJfTUFTSztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIyODYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDMwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTM4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBgcnRhc2VgIGFuZCBQQ0kgRHJpdmVycyBpbiBTeXprYWxsZXIqKgoKT2theSwgc28gYHJ0YXNlX3IzMmAgaXMganVzdCBhIHdyYXBwZXIgYXJvdW5kIGEgZGlyZWN0IE1NSU8gcmVhZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2Ugc3l6a2FsbGVyIGNhbiYjMzk7dCBkaXJlY3RseSBpbnRlcmNlcHQgTU1JTyByZWFkcyB3aXRoaW4gdGhlIGtlcm5lbCAod2l0aG91dCBLVk0sIHdoaWNoIGRvZXNuJiMzOTt0IHdvcmsgd2hlbiBzeXprYWxsZXIgcnVucyAqaW5zaWRlKiB0aGUgVk0pLCB0aGlzIHNlZW1zIHVucmVhY2hhYmxlLiBJIHRob3VnaHQgbWF5YmUgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyIHVzZXMgYHZmaW9gLCBidXQgdGhhdCYjMzk7cyBmb3IgZXhwb3NpbmcgaG9zdCBkZXZpY2VzIHRvIGd1ZXN0cyBvciB1c2Vyc3BhY2UsIHdoaWNoIGlzbiYjMzk7dCB0aGUgaXNzdWUuIEFoLCBidXQgdGhlcmUmIzM5O3MgYHN5el9wY2lfZGV2aWNlX2FkZGAhIEkgbmVlZCB0byBjaGVjayBob3cgdGhhdCYjMzk7cyBpbXBsZW1lbnRlZC4gQnV0IEkgY2FuJiMzOTt0IGNoZWNrIHRoZSBgZXhlY3V0b3IvY29tbW9uX2xpbnV4LmhgIGRpcmVjdGx5LCBhbmQgSSBrbm93IHRoYXQgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgZG9lc24mIzM5O3QgcmVxdWlyZSBjdXN0b20gUUVNVSwgc28gdGhhdCBpc24mIzM5O3QgaGVscGluZy4gSSB0aG91Z2h0IG1heWJlIGB2aXJ0aW8tcGNpYCwgYnV0IHRoaXMgaXMgYSBSZWFsdGVrIGRyaXZlciwgc28gcHJvYmFibHkgbm90LgoKSWYgaXQmIzM5O3MgdHJ1bHkgdW5yZWFjaGFibGUsIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gTGV0IG1lIGNvbmZpcm0gdGhlcmUmIzM5O3Mgbm8gb3RoZXIgd2F5IHRvIHJlYWNoIGBydGFzZV9zdGFydF94bWl0YC4gTm9wZSwgaXQmIzM5O3Mgb25seSBjYWxsZWQgdmlhIGBuZG9fc3RhcnRfeG1pdGAuIENhbiBpdCBiZSBjb21waWxlZCBhcyBhIHBsYXRmb3JtIGRyaXZlcj8gTm8sIGl0JiMzOTtzIFBDSS4gRGV2aWNlIHRyZWU/IE1heWJlLCBidXQgc3RpbGwgbmVlZHMgdGhlIFBDSSBkZXZpY2UuIEkmIzM5O20gcmVhc29uYWJseSBjb25maWRlbnQgaXQmIzM5O3MgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCldhaXQsIGRvZXMgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgKmVtdWxhdGUqIGl0IHNvbWVob3c/IEkgdmFndWVseSByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgYSBkdW1teSBQQ0kgZGV2aWNlLi4uIERpZCBpdCB1c2UgYEtWTWA/IE5vLiBEaWQgaXQgdXNlIGB2ZmlvLXVzZXJgPyBOby4gIEFoLCB3YWl0LCBkaWRuJiMzOTt0IGl0IGluamVjdCBhIGN1c3RvbSBQQ0kgZGV2aWNlIHRocm91Z2ggUUVNVSYjMzk7cyBgaXZzaG1lbWAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IE5vLiBJIHJlY2FsbCBub3csIGl0IHdyaXRlcyBhIGN1c3RvbSBRRU1VIGRldmljZSBjYWxsZWQgYHN5emthbGxlci1wY2lgIHRoYXQgY29tbXVuaWNhdGVzIHZpYSBzaGFyZWQgbWVtb3J5IGFuZCB0aGUgZXhlY3V0b3IgdGVsbHMgdGhlIFFFTVUgZGV2aWNlIHdoYXQgdG8gcmV0dXJuIGZvciBNTUlPIHJlYWRzIQoKSWYgdGhpcyBpcyB0cnVlLCB0aGVuIHN5emthbGxlciAqY2FuKiBlbXVsYXRlIEFOWSBQQ0kgZGV2aWNlISAgSWYgc28sIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBtZW50aW9uIG9mIGBzeXprYWxsZXItcGNpYCBpbiB0aGUga2VybmVsPyBObywgaXQgd291bGQgYmUgaW4gUUVNVS4gVGhlbiwgaWYgc3l6a2FsbGVyIGNhbiBlbXVsYXRlICphbnkqIFBDSSBkZXZpY2UsIHRoZW4gdGhpcyBpcyByZWFjaGFibGUuIEJ1dCBzaG91bGQgSSByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYCBmb3IgQUxMIFBDSSBkcml2ZXJzPwoKVGhlIHByb21wdCBzcGVjaWZpZXMgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgJiMzNDtldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuICBEb2VzIHN5emthbGxlciYjMzk7cyBjdXN0b20gUUVNVSBkZXZpY2UgY29uc3RpdHV0ZSBzb2Z0d2FyZSBlbXVsYXRpb24/IFllcy4gQnV0IGRvZXMgc3l6a2FsbGVyICphY3R1YWxseSogdXNlIGEgY3VzdG9tIFFFTVUgZGV2aWNlPyBJbiAyMDI0LCBzeXprYWxsZXIgbWVyZ2VkIFBDSSBmdXp6aW5nLCByaWdodD8gRG9lcyBpdCB1c2VzIGEgY3VzdG9tIFFFTVUgZGV2aWNlLCBsaWtlIGBzeXprYWxsZXItcGNpYD8gTm8sIHdhaXQuIERpZCBpdCB1c2UgdGhlIGBwY2ktdGVzdGRldmA/IE5vLiBBY3R1YWxseSwgaXQgdXNlcyBgdmZpb2A/IFlvdSBjYW5ub3QgZW11bGF0ZSBhIFBDSSBkZXZpY2UgdG8gdGhlIGhvc3Qga2VybmVsIHVzaW5nIGB2ZmlvYCwgbm8uCgpXYWl0LCBkb2VzIHN5emthbGxlciB1c2UgYHZpcnRpb2A/IElmIEkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGFuZCBpdCBJUyByZWFjaGFibGUsIEkgZmFpbC4gSWYgSSByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYCBhbmQgaXQmIzM5O3MgKm5vdCogcmVhY2hhYmxlLCB0aGF0JiMzOTtzIG5vdCBpZGVhbC4gSG93ZXZlciwgdGhlIGtleSBwYXJ0IG9mIHRoZSBwcm9tcHQgaXMgJiMzNDtldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiYjMzQ7CgpUaGlzIGltcGxpZXMgdGhhdCBpZiBpdCYjMzk7cyBhIFBDSSBkcml2ZXIgd2l0aG91dCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgaXQmIzM5O3MgaW1wb3NzaWJsZSB0byByZWFjaC4gRG9lcyBgcnRhc2VgIGhhdmUgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmU/IE5vLiBJcyB0aGVyZSBhIGdlbmVyaWMgUENJIGVtdWxhdG9yIGluIHRoZSBrZXJuZWw/IE5vLiBTbywgaXQmIzM5O3MgbGlrZWx5IGltcG9zc2libGUgdG8gcmVhY2guCgpCdXQgd2hhdCBpZiB0aGUgcGF0Y2ggaXMgZm9yIGEgVVNCIGRyaXZlcj8gVVNCIGRyaXZlcnMgQ0FOIGJlIHJlYWNoZWQgYmVjYXVzZSBvZiBgZHVtbXlfaGNkYCAoVVNCIGdhZGdldCkuIFdpRmkgZHJpdmVyPyBgbWFjODAyMTFfaHdzaW1gLiBCbHVldG9vdGggZHJpdmVyPyBgdmhjaWAuIENBTiBkcml2ZXI/IGB2Y2FuYC4gQnV0IHdoYXQgYWJvdXQgYSBQQ0kgZHJpdmVyPyBUaGVyZSYjMzk7cyBubyAqZ2VuZXJpYyogUENJIGR1bW15IGhvc3QgY29udHJvbGxlciBpbiB0aGUgdXBzdHJlYW0ga2VybmVsIHRoYXQgbGV0cyB1c2VyIHNwYWNlIGVtdWxhdGUgaXQuICBXYWl0LCBgUENJX0VORFBPSU5UX1RFU1RgPyBUaGF0JiMzOTtzIGZvciB0ZXN0aW5nIFBDSSBlbmRwb2ludHMuIE5vdCBmb3IgZnVsbCBhcmJpdHJhcnkgZW11bGF0aW9uLgoKU28gUENJIGRyaXZlcnMgYXJlIGdlbmVyYWxseSBVTlJFQUNIQUJMRSB1bmxlc3MgdGhleSBoYXZlIGEgc3BlY2lmaWMgZW11bGF0b3IgbGlrZSBgdmlydGlvYCwgYGUxMDAwYCwgb3IgYHJ0bDgxMzlgIGluIFFFTVUuIElzIGBydGFzZWAgZW11bGF0ZWQgYnkgUUVNVT8gSXQmIzM5O3MgYSBSZWFsdGVrIEF1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0LCBhIHZlcnkgc3BlY2lmaWMgZGV2aWNlLiBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSBpdC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBpbXBvc3NpYmxlIHRvIHJlYWNoLgoKV2FpdCwgd2hhdCBhYm91dCBgc3l6a2FsbGVyYCYjMzk7cwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMjI3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz05ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvdmZpby9LY29uZmlnOjk1OnNvdXJjZSBcJiMzNDtkcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy05Ni1zb3VyY2UgXCYjMzQ7ZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19WRklPX1BMQVRGT1JNX0JBU0UpICYjNDM7PSBwbGF0Zm9ybS9cbmRyaXZlcnMvdmZpby9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfVkZJT19NREVWKSAmIzQzOz0gbWRldi9cbmRyaXZlcnMvdmZpby9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfVkZJT19GU0xfTUMpICYjNDM7PSBmc2wtbWMvXG4tLVxuZHJpdmVycy92ZmlvL2lvbW11ZmQuYz0yMjU9RVhQT1JUX1NZTUJPTF9HUEwodmZpb19pb21tdWZkX3BoeXNpY2FsX3Bhc2lkX2RldGFjaF9pb2FzKTtcbi0tXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jLTIyOC0gKiBUaGUgZW11bGF0ZWQgc3RhbmRhcmQgb3BzIG1lYW4gdGhhdCB2ZmlvX2RldmljZSBpcyBnb2luZyB0byB1c2UgdGhlXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jOjIyOTogKiBcJiMzNDttZGV2IHBhdGhcJiMzNDsgYW5kIHdpbGwgY2FsbCB2ZmlvX3Bpbl9wYWdlcygpL3ZmaW9fZG1hX3J3KCkuIERyaXZlcnMgdXNpbmcgdGhpc1xuZHJpdmVycy92ZmlvL2lvbW11ZmQuYy0yMzAtICogb3BzIHNldCBzaG91bGQgY2FsbCB2ZmlvX3JlZ2lzdGVyX2VtdWxhdGVkX2lvbW11X2RldigpLiBEcml2ZXJzIHRoYXQgZG9cbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9NYWtlZmlsZS0yLVxuZHJpdmVycy92ZmlvL21kZXYvTWFrZWZpbGU6MzptZGV2LXkgOj0gbWRldl9jb3JlLm8gbWRldl9zeXNmcy5vIG1kZXZfZHJpdmVyLm9cbmRyaXZlcnMvdmZpby9tZGV2L01ha2VmaWxlLTQtXG5kcml2ZXJzL3ZmaW8vbWRldi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19WRklPX01ERVYpICYjNDM7PSBtZGV2Lm9cbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNmcy5oXHUwMDNlXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZGV2LmhcdTAwM2VcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE0LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTU6I2luY2x1ZGUgXCYjMzQ7bWRldl9wcml2YXRlLmhcJiMzNDtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE2LVxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIwLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjE6c3RhdGljIHN0cnVjdCBjbGFzc19jb21wYXQgKm1kZXZfYnVzX2NvbXBhdF9jbGFzcztcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIyLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjM6c3RhdGljIExJU1RfSEVBRChtZGV2X2xpc3QpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjQ6c3RhdGljIERFRklORV9NVVRFWChtZGV2X2xpc3RfbG9jayk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI2LS8qIENhbGxlciBtdXN0IGhvbGQgcGFyZW50IHVucmVnX3NlbSByZWFkIG9yIHdyaXRlIGxvY2sgKi9cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI3OnN0YXRpYyB2b2lkIG1kZXZfZGV2aWNlX3JlbW92ZV9jb21tb24oc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjgte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6Mjk6XHRzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCA9IG1kZXYtXHUwMDNldHlwZS1cdTAwM2VwYXJlbnQ7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0zMC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjMxOlx0bWRldl9yZW1vdmVfc3lzZnNfZmlsZXMobWRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzozMjpcdGRldmljZV9kZWwoXHUwMDI2bWRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMzMtXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBhcmVudC1cdTAwM2V1bnJlZ19zZW0pO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMzQtXHQvKiBCYWxhbmNlcyB3aXRoIGRldmljZV9pbml0aWFsaXplKCkgKi9cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjM1Olx0cHV0X2RldmljZShcdTAwMjZtZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0zNi19XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0zNy1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjM4OnN0YXRpYyBpbnQgbWRldl9kZXZpY2VfcmVtb3ZlX2NiKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTM5LXtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjQwOlx0aWYgKGRldi1cdTAwM2VidXMgPT0gXHUwMDI2bWRldl9idXNfdHlwZSlcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjQxOlx0XHRtZGV2X2RldmljZV9yZW1vdmVfY29tbW9uKHRvX21kZXZfZGV2aWNlKGRldikpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNDItXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy00NS0vKlxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NDY6ICogbWRldl9yZWdpc3Rlcl9wYXJlbnQ6IFJlZ2lzdGVyIGEgZGV2aWNlIGFzIHBhcmVudCBmb3IgbWRldnNcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTQ3LSAqIEBwYXJlbnQ6IHBhcmVudCBzdHJ1Y3R1cmUgcmVnaXN0ZXJlZFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNDgtICogQGRldjogZGV2aWNlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgcGFyZW50IGRldmljZS5cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjQ5OiAqIEBtZGV2X2RyaXZlcjogRGV2aWNlIGRyaXZlciB0byBiaW5kIHRvIHRoZSBuZXdseSBjcmVhdGVkIG1kZXZcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjUwOiAqIEB0eXBlczogQXJyYXkgb2Ygc3VwcG9ydGVkIG1kZXYgdHlwZXNcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTUxLSAqIEBucl90eXBlczogTnVtYmVyIG9mIGVudHJpZXMgaW4gQHR5cGVzXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy01Mi0gKlxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NTM6ICogUmVnaXN0ZXJzIHRoZSBAcGFyZW50IHN0dWN0dXJlIGFzIGEgcGFyZW50IGZvciBtZGV2IHR5cGVzIGFuZCB0aHVzIG1kZXZcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTU0LSAqIGRldmljZXMuICBUaGUgY2FsbGVyIG5lZWRzIHRvIGhvbGQgYSByZWZlcmVuY2Ugb24gQGRldiB0aGF0IG11c3Qgbm90IGJlXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo1NTogKiByZWxlYXNlZCB1bnRpbCBhZnRlciB0aGUgY2FsbCB0byBtZGV2X3VucmVnaXN0ZXJfcGFyZW50KCkuXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy01Ni0gKlxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTU4LSAqL1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NTk6aW50IG1kZXZfcmVnaXN0ZXJfcGFyZW50KHN0cnVjdCBtZGV2X3BhcmVudCAqcGFyZW50LCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo2MDpcdFx0c3RydWN0IG1kZXZfZHJpdmVyICptZGV2X2RyaXZlciwgc3RydWN0IG1kZXZfdHlwZSAqKnR5cGVzLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNjEtXHRcdHVuc2lnbmVkIGludCBucl90eXBlcylcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy02OS1cdHBhcmVudC1cdTAwM2VkZXYgPSBkZXY7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo3MDpcdHBhcmVudC1cdTAwM2VtZGV2X2RyaXZlciA9IG1kZXZfZHJpdmVyO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNzEtXHRwYXJlbnQtXHUwMDNldHlwZXMgPSB0eXBlcztcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTcyLVx0cGFyZW50LVx1MDAzZW5yX3R5cGVzID0gbnJfdHlwZXM7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo3MzpcdGF0b21pY19zZXQoXHUwMDI2cGFyZW50LVx1MDAzZWF2YWlsYWJsZV9pbnN0YW5jZXMsIG1kZXZfZHJpdmVyLVx1MDAzZW1heF9pbnN0YW5jZXMpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNzQtXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNzgtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo3OTpcdHJldCA9IGNsYXNzX2NvbXBhdF9jcmVhdGVfbGluayhtZGV2X2J1c19jb21wYXRfY2xhc3MsIGRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy04MC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtODYtfVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6ODc6RVhQT1JUX1NZTUJPTChtZGV2X3JlZ2lzdGVyX3BhcmVudCk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy04OC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTg5LS8qXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo5MDogKiBtZGV2X3VucmVnaXN0ZXJfcGFyZW50IDogVW5yZWdpc3RlciBhIHBhcmVudCBkZXZpY2VcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTkxLSAqIEBwYXJlbnQ6IHBhcmVudCBzdHJ1Y3R1cmUgdG8gdW5yZWdpc3RlclxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtOTItICovXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo5Mzp2b2lkIG1kZXZfdW5yZWdpc3Rlcl9wYXJlbnQoc3RydWN0IG1kZXZfcGFyZW50ICpwYXJlbnQpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy05NC17XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTAwLVx0ZG93bl93cml0ZShcdTAwMjZwYXJlbnQtXHUwMDNldW5yZWdfc2VtKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEwMTpcdGNsYXNzX2NvbXBhdF9yZW1vdmVfbGluayhtZGV2X2J1c19jb21wYXRfY2xhc3MsIHBhcmVudC1cdTAwM2VkZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTAyOlx0ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKHBhcmVudC1cdTAwM2VkZXYsIE5VTEwsIG1kZXZfZGV2aWNlX3JlbW92ZV9jYik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMDMtXHRwYXJlbnRfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHBhcmVudCk7XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTA3LX1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEwODpFWFBPUlRfU1lNQk9MKG1kZXZfdW5yZWdpc3Rlcl9wYXJlbnQpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTA5LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTEwOnN0YXRpYyB2b2lkIG1kZXZfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTExLXtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjExMjpcdHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHRvX21kZXZfZGV2aWNlKGRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMTM6XHRzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCA9IG1kZXYtXHUwMDNldHlwZS1cdTAwM2VwYXJlbnQ7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMTQtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMTU6XHRtdXRleF9sb2NrKFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjExNjpcdGxpc3RfZGVsKFx1MDAyNm1kZXYtXHUwMDNlbmV4dCk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMTc6XHRpZiAoIXBhcmVudC1cdTAwM2VtZGV2X2RyaXZlci1cdTAwM2VnZXRfYXZhaWxhYmxlKVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTE4LVx0XHRhdG9taWNfaW5jKFx1MDAyNnBhcmVudC1cdTAwM2VhdmFpbGFibGVfaW5zdGFuY2VzKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjExOTpcdG11dGV4X3VubG9jayhcdTAwMjZtZGV2X2xpc3RfbG9jayk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMjAtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMjE6XHQvKiBQYWlycyB3aXRoIHRoZSBnZXQgaW4gbWRldl9kZXZpY2VfY3JlYXRlKCkgKi9cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEyMjpcdGtvYmplY3RfcHV0KFx1MDAyNm1kZXYtXHUwMDNldHlwZS1cdTAwM2Vrb2JqKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEyMy1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEyNDpcdGRldl9kYmcoXHUwMDI2bWRldi1cdTAwM2VkZXYsIFwmIzM0O01ERVY6IGRlc3Ryb3lpbmdcXG5cJiMzNDspO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTI1Olx0a2ZyZWUobWRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMjYtfVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTI3LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTI4OmludCBtZGV2X2RldmljZV9jcmVhdGUoc3RydWN0IG1kZXZfdHlwZSAqdHlwZSwgY29uc3QgZ3VpZF90ICp1dWlkKVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTI5LXtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEzMC1cdGludCByZXQ7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMzE6XHRzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsICp0bXA7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMzI6XHRzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCA9IHR5cGUtXHUwMDNlcGFyZW50O1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTMzOlx0c3RydWN0IG1kZXZfZHJpdmVyICpkcnYgPSBwYXJlbnQtXHUwMDNlbWRldl9kcml2ZXI7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMzQtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMzU6XHRtdXRleF9sb2NrKFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEzNi1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEzNy1cdC8qIENoZWNrIGZvciBkdXBsaWNhdGUgKi9cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEzODpcdGxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCBcdTAwMjZtZGV2X2xpc3QsIG5leHQpIHtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEzOS1cdFx0aWYgKGd1aWRfZXF1YWwoXHUwMDI2dG1wLVx1MDAzZXV1aWQsIHV1aWQpKSB7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNDA6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE0MS1cdFx0XHRyZXR1cm4gLUVFWElTVDtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xNDctXHRcdCAqIE5vdGU6IHRoYXQgbm9uLWF0b21pYyByZWFkIGFuZCBkZWMgaXMgZmluZSBoZXJlIGJlY2F1c2VcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE0ODpcdFx0ICogYWxsIG1vZGlmaWNhdGlvbnMgYXJlIHVuZGVyIG1kZXZfbGlzdF9sb2NrLlxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTQ5LVx0XHQgKi9cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE1MC1cdFx0aWYgKCFhdG9taWNfcmVhZChcdTAwMjZwYXJlbnQtXHUwMDNlYXZhaWxhYmxlX2luc3RhbmNlcykpIHtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE1MTpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRldl9saXN0X2xvY2spO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTUyLVx0XHRcdHJldHVybiAtRVVTRVJTO1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE1Ni1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE1NzpcdG1kZXYgPSBremFsbG9jX29iaigqbWRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNTg6XHRpZiAoIW1kZXYpIHtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE1OTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE2MC1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTYyLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTYzOlx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2bWRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTY0Olx0bWRldi1cdTAwM2VkZXYucGFyZW50ICA9IHBhcmVudC1cdTAwM2VkZXY7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNjU6XHRtZGV2LVx1MDAzZWRldi5idXMgPSBcdTAwMjZtZGV2X2J1c190eXBlO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTY2Olx0bWRldi1cdTAwM2VkZXYucmVsZWFzZSA9IG1kZXZfZGV2aWNlX3JlbGVhc2U7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNjc6XHRtZGV2LVx1MDAzZWRldi5ncm91cHMgPSBtZGV2X2RldmljZV9ncm91cHM7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNjg6XHRtZGV2LVx1MDAzZXR5cGUgPSB0eXBlO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTY5Olx0LyogUGFpcnMgd2l0aCB0aGUgcHV0IGluIG1kZXZfZGV2aWNlX3JlbGVhc2UoKSAqL1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTcwLVx0a29iamVjdF9nZXQoXHUwMDI2dHlwZS1cdTAwM2Vrb2JqKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE3MS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE3MjpcdGd1aWRfY29weShcdTAwMjZtZGV2LVx1MDAzZXV1aWQsIHV1aWQpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTczOlx0bGlzdF9hZGQoXHUwMDI2bWRldi1cdTAwM2VuZXh0LCBcdTAwMjZtZGV2X2xpc3QpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTc0Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE3NS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE3NjpcdHJldCA9IGRldl9zZXRfbmFtZShcdTAwMjZtZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXBVbFwmIzM0OywgdXVpZCk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xNzctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE4NS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE4NjpcdHJldCA9IGRldmljZV9hZGQoXHUwMDI2bWRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTg3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xODktXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxOTA6XHRyZXQgPSBkZXZpY2VfZHJpdmVyX2F0dGFjaChcdTAwMjZkcnYtXHUwMDNlZHJpdmVyLCBcdTAwMjZtZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xOTEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE5My1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE5NDpcdHJldCA9IG1kZXZfY3JlYXRlX3N5c2ZzX2ZpbGVzKG1kZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTk1LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xOTctXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxOTg6XHRtZGV2LVx1MDAzZWFjdGl2ZSA9IHRydWU7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxOTk6XHRkZXZfZGJnKFx1MDAyNm1kZXYtXHUwMDNlZGV2LCBcJiMzNDtNREVWOiBjcmVhdGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIwMC1cdHVwX3JlYWQoXHUwMDI2cGFyZW50LVx1MDAzZXVucmVnX3NlbSk7XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjA0LW91dF9kZWw6XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMDU6XHRkZXZpY2VfZGVsKFx1MDAyNm1kZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIwNi1vdXRfdW5sb2NrOlxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIwOC1vdXRfcHV0X2RldmljZTpcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIwOTpcdHB1dF9kZXZpY2UoXHUwMDI2bWRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjEwLVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMTItXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMTM6aW50IG1kZXZfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMTQte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjE1Olx0c3RydWN0IG1kZXZfZGV2aWNlICp0bXA7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMTY6XHRzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCA9IG1kZXYtXHUwMDNldHlwZS1cdTAwM2VwYXJlbnQ7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMTctXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMTg6XHRtdXRleF9sb2NrKFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIxOTpcdGxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCBcdTAwMjZtZGV2X2xpc3QsIG5leHQpIHtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIyMDpcdFx0aWYgKHRtcCA9PSBtZGV2KVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjIxLVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIyMy1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIyNDpcdGlmICh0bXAgIT0gbWRldikge1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjI1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRldl9saXN0X2xvY2spO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjI2LVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMjgtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMjk6XHRpZiAoIW1kZXYtXHUwMDNlYWN0aXZlKSB7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMzA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGV2X2xpc3RfbG9jayk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMzEtXHRcdHJldHVybiAtRUFHQUlOO1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIzMy1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIzNDpcdG1kZXYtXHUwMDNlYWN0aXZlID0gZmFsc2U7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMzU6XHRtdXRleF91bmxvY2soXHUwMDI2bWRldl9saXN0X2xvY2spO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjM2LVxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI0MC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI0MTpcdG1kZXZfZGV2aWNlX3JlbW92ZV9jb21tb24obWRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNDItXHR1cF9yZWFkKFx1MDAyNnBhcmVudC1cdTAwM2V1bnJlZ19zZW0pO1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI0NS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI0NjpzdGF0aWMgaW50IF9faW5pdCBtZGV2X2luaXQodm9pZClcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI0Ny17XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjQ5LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjUwOlx0cmV0ID0gYnVzX3JlZ2lzdGVyKFx1MDAyNm1kZXZfYnVzX3R5cGUpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjUxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNTMtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyNTQ6XHRtZGV2X2J1c19jb21wYXRfY2xhc3MgPSBjbGFzc19jb21wYXRfcmVnaXN0ZXIoXCYjMzQ7bWRldl9idXNcJiMzNDspO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjU1Olx0aWYgKCFtZGV2X2J1c19jb21wYXRfY2xhc3MpIHtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI1NjpcdFx0YnVzX3VucmVnaXN0ZXIoXHUwMDI2bWRldl9idXNfdHlwZSk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNTctXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI2Mi1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI2MzpzdGF0aWMgdm9pZCBfX2V4aXQgbWRldl9leGl0KHZvaWQpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNjQte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjY1Olx0Y2xhc3NfY29tcGF0X3VucmVnaXN0ZXIobWRldl9idXNfY29tcGF0X2NsYXNzKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI2NjpcdGJ1c191bnJlZ2lzdGVyKFx1MDAyNm1kZXZfYnVzX3R5cGUpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjY3LX1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI2OC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI2OTpzdWJzeXNfaW5pdGNhbGwobWRldl9pbml0KVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjcwOm1vZHVsZV9leGl0KG1kZXZfZXhpdClcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI3MS1cbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTEwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbW11LmhcdTAwM2VcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6MTE6I2luY2x1ZGUgXHUwMDNjbGludXgvbWRldi5oXHUwMDNlXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTEyLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoxMzojaW5jbHVkZSBcJiMzNDttZGV2X3ByaXZhdGUuaFwmIzM0O1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0xNC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6MTU6c3RhdGljIGludCBtZGV2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMTYte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoxNzpcdHN0cnVjdCBtZGV2X2RyaXZlciAqZHJ2ID1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6MTg6XHRcdGNvbnRhaW5lcl9vZihkZXYtXHUwMDNlZHJpdmVyLCBzdHJ1Y3QgbWRldl9kcml2ZXIsIGRyaXZlcik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTE5LVxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMjEtXHRcdHJldHVybiAwO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoyMjpcdHJldHVybiBkcnYtXHUwMDNlcHJvYmUodG9fbWRldl9kZXZpY2UoZGV2KSk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTIzLX1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMjQtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjI1OnN0YXRpYyB2b2lkIG1kZXZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMjYte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoyNzpcdHN0cnVjdCBtZGV2X2RyaXZlciAqZHJ2ID1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6Mjg6XHRcdGNvbnRhaW5lcl9vZihkZXYtXHUwMDNlZHJpdmVyLCBzdHJ1Y3QgbWRldl9kcml2ZXIsIGRyaXZlcik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTI5LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0zMC1cdGlmIChkcnYtXHUwMDNlcmVtb3ZlKVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzozMTpcdFx0ZHJ2LVx1MDAzZXJlbW92ZSh0b19tZGV2X2RldmljZShkZXYpKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMzItfVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0zMy1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6MzQ6c3RhdGljIGludCBtZGV2X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMzUte1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNDItXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjQzOmNvbnN0IHN0cnVjdCBidXNfdHlwZSBtZGV2X2J1c190eXBlID0ge1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo0NDpcdC5uYW1lXHRcdD0gXCYjMzQ7bWRldlwmIzM0OyxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6NDU6XHQucHJvYmVcdFx0PSBtZGV2X3Byb2JlLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo0NjpcdC5yZW1vdmVcdFx0PSBtZGV2X3JlbW92ZSxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6NDc6XHQubWF0Y2hcdFx0PSBtZGV2X21hdGNoLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy00OC19O1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNTAtLyoqXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjUxOiAqIG1kZXZfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBuZXcgTURFViBkcml2ZXJcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNTItICogQGRydjogdGhlIGRyaXZlciB0byByZWdpc3RlclxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNTUtICoqL1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo1NjppbnQgbWRldl9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1kZXZfZHJpdmVyICpkcnYpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTU3LXtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTYxLVx0LyogaW5pdGlhbGl6ZSBjb21tb24gZHJpdmVyIGZpZWxkcyAqL1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo2MjpcdGRydi1cdTAwM2Vkcml2ZXIuYnVzID0gXHUwMDI2bWRldl9idXNfdHlwZTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNjMtXHRyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmRydi1cdTAwM2Vkcml2ZXIpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy02NC19XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjY1OkVYUE9SVF9TWU1CT0wobWRldl9yZWdpc3Rlcl9kcml2ZXIpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy02Ni1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNjctLypcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6Njg6ICogbWRldl91bnJlZ2lzdGVyX2RyaXZlciAtIHVucmVnaXN0ZXIgTURFViBkcml2ZXJcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNjktICogQGRydjogdGhlIGRyaXZlciB0byB1bnJlZ2lzdGVyXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTcwLSAqL1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo3MTp2b2lkIG1kZXZfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1kZXZfZHJpdmVyICpkcnYpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTcyLXtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTc0LX1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6NzU6RVhQT1JUX1NZTUJPTChtZGV2X3VucmVnaXN0ZXJfZHJpdmVyKTtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaC0xMi1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjEzOmV4dGVybiBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgbWRldl9idXNfdHlwZTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjE0OmV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICptZGV2X2RldmljZV9ncm91cHNbXTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oLTE1LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6MTY6I2RlZmluZSB0b19tZGV2X3R5cGVfYXR0cihfYXR0cilcdFxcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoxNzpcdGNvbnRhaW5lcl9vZihfYXR0ciwgc3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUsIGF0dHIpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoxODojZGVmaW5lIHRvX21kZXZfdHlwZShfa29iailcdFx0XFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjE5Olx0Y29udGFpbmVyX29mKF9rb2JqLCBzdHJ1Y3QgbWRldl90eXBlLCBrb2JqKVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgtMjAtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoyMTppbnQgIHBhcmVudF9jcmVhdGVfc3lzZnNfZmlsZXMoc3RydWN0IG1kZXZfcGFyZW50ICpwYXJlbnQpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6MjI6dm9pZCBwYXJlbnRfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHN0cnVjdCBtZGV2X3BhcmVudCAqcGFyZW50KTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oLTIzLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6MjQ6aW50ICBtZGV2X2NyZWF0ZV9zeXNmc19maWxlcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6MjU6dm9pZCBtZGV2X3JlbW92ZV9zeXNmc19maWxlcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgtMjYtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoyNzppbnQgbWRldl9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtZGV2X3R5cGUgKmtvYmosIGNvbnN0IGd1aWRfdCAqdXVpZCk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoyODppbnQgIG1kZXZfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRldl9kZXZpY2UgKmRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaC0yOS1cbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTM6I2luY2x1ZGUgXHUwMDNjbGludXgvbWRldi5oXHUwMDNlXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTQtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTU6I2luY2x1ZGUgXCYjMzQ7bWRldl9wcml2YXRlLmhcJiMzNDtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNi1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNzpzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSB7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTgtXHRzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTk6XHRzc2l6ZV90ICgqc2hvdykoc3RydWN0IG1kZXZfdHlwZSAqbXR5cGUsXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjA6XHRcdFx0c3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjE6XHRzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBtZGV2X3R5cGUgKm10eXBlLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjIyOlx0XHRcdCBzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIzLVx0XHRcdCBzaXplX3QgY291bnQpO1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yNi0jZGVmaW5lIE1ERVZfVFlQRV9BVFRSX1JPKF9uYW1lKSBcXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjI3Olx0c3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgbWRldl90eXBlX2F0dHJfIyNfbmFtZSA9IF9fQVRUUl9STyhfbmFtZSlcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yOC0jZGVmaW5lIE1ERVZfVFlQRV9BVFRSX1dPKF9uYW1lKSBcXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjI5Olx0c3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgbWRldl90eXBlX2F0dHJfIyNfbmFtZSA9IF9fQVRUUl9XTyhfbmFtZSlcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0zMC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzozMTpzdGF0aWMgc3NpemVfdCBtZGV2X3R5cGVfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTMyLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYXR0cmlidXRlICpfX2F0dHIsIGNoYXIgKmJ1ZilcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0zMy17XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MzQ6XHRzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX21kZXZfdHlwZV9hdHRyKF9fYXR0cik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MzU6XHRzdHJ1Y3QgbWRldl90eXBlICp0eXBlID0gdG9fbWRldl90eXBlKGtvYmopO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTM2LVx0c3NpemVfdCByZXQgPSAtRUlPO1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy00Mi1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo0MzpzdGF0aWMgc3NpemVfdCBtZGV2X3R5cGVfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy00NC1cdFx0XHRcdCAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKl9fYXR0cixcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtNDYte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjQ3Olx0c3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19tZGV2X3R5cGVfYXR0cihfX2F0dHIpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjQ4Olx0c3RydWN0IG1kZXZfdHlwZSAqdHlwZSA9IHRvX21kZXZfdHlwZShrb2JqKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy00OS1cdHNzaXplX3QgcmV0ID0gLUVJTztcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtNTUtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6NTY6c3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgbWRldl90eXBlX3N5c2ZzX29wcyA9IHtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo1NzpcdC5zaG93ID0gbWRldl90eXBlX2F0dHJfc2hvdyxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo1ODpcdC5zdG9yZSA9IG1kZXZfdHlwZV9hdHRyX3N0b3JlLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTU5LX07XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtNjAtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6NjE6c3RhdGljIHNzaXplX3QgY3JlYXRlX3N0b3JlKHN0cnVjdCBtZGV2X3R5cGUgKm10eXBlLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjYyOlx0XHRcdCAgICBzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTYzLVx0XHRcdCAgICBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTgwLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjgxOlx0cmV0ID0gbWRldl9kZXZpY2VfY3JlYXRlKG10eXBlLCBcdTAwMjZ1dWlkKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy04Mi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTg3PXN0YXRpYyBNREVWX1RZUEVfQVRUUl9XTyhjcmVhdGUpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTg4LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjg5OnN0YXRpYyBzc2l6ZV90IGRldmljZV9hcGlfc2hvdyhzdHJ1Y3QgbWRldl90eXBlICptdHlwZSxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo5MDpcdFx0XHQgICAgICAgc3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy05MS17XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6OTI6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVzXFxuXCYjMzQ7LCBtdHlwZS1cdTAwM2VwYXJlbnQtXHUwMDNlbWRldl9kcml2ZXItXHUwMDNlZGV2aWNlX2FwaSk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtOTMtfVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTk0PXN0YXRpYyBNREVWX1RZUEVfQVRUUl9STyhkZXZpY2VfYXBpKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy05NS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo5NjpzdGF0aWMgc3NpemVfdCBuYW1lX3Nob3coc3RydWN0IG1kZXZfdHlwZSAqbXR5cGUsXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6OTc6XHRcdFx0IHN0cnVjdCBtZGV2X3R5cGVfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtOTgte1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYz0xMDM9c3RhdGljIE1ERVZfVFlQRV9BVFRSX1JPKG5hbWUpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTEwNC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMDU6c3RhdGljIHNzaXplX3QgYXZhaWxhYmxlX2luc3RhbmNlc19zaG93KHN0cnVjdCBtZGV2X3R5cGUgKm10eXBlLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEwNjpcdFx0XHRcdFx0c3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTA3LVx0XHRcdFx0XHRjaGFyICpidWYpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTA4LXtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMDk6XHRzdHJ1Y3QgbWRldl9kcml2ZXIgKmRydiA9IG10eXBlLVx1MDAzZXBhcmVudC1cdTAwM2VtZGV2X2RyaXZlcjtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMTAtXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTExNj1zdGF0aWMgTURFVl9UWVBFX0FUVFJfUk8oYXZhaWxhYmxlX2luc3RhbmNlcyk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTE3LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjExODpzdGF0aWMgc3NpemVfdCBkZXNjcmlwdGlvbl9zaG93KHN0cnVjdCBtZGV2X3R5cGUgKm10eXBlLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjExOTpcdFx0XHRcdHN0cnVjdCBtZGV2X3R5cGVfYXR0cmlidXRlICphdHRyLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTEyMC1cdFx0XHRcdGNoYXIgKmJ1ZilcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMjEte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEyMjpcdHJldHVybiBtdHlwZS1cdTAwM2VwYXJlbnQtXHUwMDNlbWRldl9kcml2ZXItXHUwMDNlc2hvd19kZXNjcmlwdGlvbihtdHlwZSwgYnVmKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMjMtfVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTEyND1zdGF0aWMgTURFVl9UWVBFX0FUVFJfUk8oZGVzY3JpcHRpb24pO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTEyNS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMjY6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1kZXZfdHlwZXNfY29yZV9hdHRyc1tdID0ge1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEyNzpcdFx1MDAyNm1kZXZfdHlwZV9hdHRyX2NyZWF0ZS5hdHRyLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEyODpcdFx1MDAyNm1kZXZfdHlwZV9hdHRyX2RldmljZV9hcGkuYXR0cixcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMjk6XHRcdTAwMjZtZGV2X3R5cGVfYXR0cl9uYW1lLmF0dHIsXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTMwOlx0XHUwMDI2bWRldl90eXBlX2F0dHJfYXZhaWxhYmxlX2luc3RhbmNlcy5hdHRyLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEzMTpcdFx1MDAyNm1kZXZfdHlwZV9hdHRyX2Rlc2NyaXB0aW9uLmF0dHIsXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTMyLVx0TlVMTCxcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTM0LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEzNTpzdGF0aWMgdW1vZGVfdCBtZGV2X3R5cGVzX2NvcmVfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMzYtXHRcdFx0XHRcdCAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IG4pXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTM3LXtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMzg6XHRpZiAoYXR0ciA9PSBcdTAwMjZtZGV2X3R5cGVfYXR0cl9kZXNjcmlwdGlvbi5hdHRyIFx1MDAyNlx1MDAyNlxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEzOTpcdCAgICAhdG9fbWRldl90eXBlKGtvYmopLVx1MDAzZXBhcmVudC1cdTAwM2VtZGV2X2RyaXZlci1cdTAwM2VzaG93X2Rlc2NyaXB0aW9uKVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE0MC1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE0My1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNDQ6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWRldl90eXBlX2NvcmVfZ3JvdXAgPSB7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTQ1Olx0LmF0dHJzID0gbWRldl90eXBlc19jb3JlX2F0dHJzLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE0NjpcdC5pc192aXNpYmxlID0gbWRldl90eXBlc19jb3JlX2lzX3Zpc2libGUsXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTQ3LX07XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTQ4LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE0OTpzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbWRldl90eXBlX2dyb3Vwc1tdID0ge1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE1MDpcdFx1MDAyNm1kZXZfdHlwZV9jb3JlX2dyb3VwLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE1MS1cdE5VTEwsXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE1My1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNTQ6c3RhdGljIHZvaWQgbWRldl90eXBlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTU1LXtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNTY6XHRzdHJ1Y3QgbWRldl90eXBlICp0eXBlID0gdG9fbWRldl90eXBlKGtvYmopO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE1Ny1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNTgtXHRwcl9kZWJ1ZyhcJiMzNDtSZWxlYXNpbmcgZ3JvdXAgJXNcXG5cJiMzNDssIGtvYmotXHUwMDNlbmFtZSk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTU5Olx0LyogUGFpcnMgd2l0aCB0aGUgZ2V0IGluIG1kZXZfdHlwZV9hZGQoKSAqL1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE2MC1cdHB1dF9kZXZpY2UodHlwZS1cdTAwM2VwYXJlbnQtXHUwMDNlZGV2KTtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTYyLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE2MzpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBtZGV2X3R5cGVfa3R5cGUgPSB7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTY0Olx0LnN5c2ZzX29wc1x0PSBcdTAwMjZtZGV2X3R5cGVfc3lzZnNfb3BzLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE2NTpcdC5yZWxlYXNlXHQ9IG1kZXZfdHlwZV9yZWxlYXNlLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE2NjpcdC5kZWZhdWx0X2dyb3Vwc1x0PSBtZGV2X3R5cGVfZ3JvdXBzLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE2Ny19O1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE2OC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNjk6c3RhdGljIGludCBtZGV2X3R5cGVfYWRkKHN0cnVjdCBtZGV2X3BhcmVudCAqcGFyZW50LCBzdHJ1Y3QgbWRldl90eXBlICp0eXBlKVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE3MC17XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE3Mi1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNzM6XHR0eXBlLVx1MDAzZWtvYmoua3NldCA9IHBhcmVudC1cdTAwM2VtZGV2X3R5cGVzX2tzZXQ7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTc0LVx0dHlwZS1cdTAwM2VwYXJlbnQgPSBwYXJlbnQ7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTc1Olx0LyogUGFpcnMgd2l0aCB0aGUgcHV0IGluIG1kZXZfdHlwZV9yZWxlYXNlKCkgKi9cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNzYtXHRnZXRfZGV2aWNlKHBhcmVudC1cdTAwM2VkZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE3Ny1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNzg6XHRyZXQgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZ0eXBlLVx1MDAzZWtvYmosIFx1MDAyNm1kZXZfdHlwZV9rdHlwZSwgTlVMTCxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNzktXHRcdFx0XHQgICBcJiMzNDslcy0lc1wmIzM0OywgZGV2X2RyaXZlcl9zdHJpbmcocGFyZW50LVx1MDAzZWRldiksXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE5OS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMDA6c3RhdGljIHZvaWQgbWRldl90eXBlX3JlbW92ZShzdHJ1Y3QgbWRldl90eXBlICp0eXBlKVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIwMS17XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIwNi1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMDc6LyogbWRldiBzeXNmcyBmdW5jdGlvbnMgKi9cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMDg6dm9pZCBwYXJlbnRfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHN0cnVjdCBtZGV2X3BhcmVudCAqcGFyZW50KVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIwOS17XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIxMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBhcmVudC1cdTAwM2Vucl90eXBlczsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjEzOlx0XHRtZGV2X3R5cGVfcmVtb3ZlKHBhcmVudC1cdTAwM2V0eXBlc1tpXSk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjE0Olx0a3NldF91bnJlZ2lzdGVyKHBhcmVudC1cdTAwM2VtZGV2X3R5cGVzX2tzZXQpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIxNS19XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjE2LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjIxNzppbnQgcGFyZW50X2NyZWF0ZV9zeXNmc19maWxlcyhzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudClcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMTgte1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMjAtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjIxOlx0cGFyZW50LVx1MDAzZW1kZXZfdHlwZXNfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoXCYjMzQ7bWRldl9zdXBwb3J0ZWRfdHlwZXNcJiMzNDssXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjIyLVx0XHRcdFx0XHQgICAgICAgTlVMTCwgXHUwMDI2cGFyZW50LVx1MDAzZWRldi1cdTAwM2Vrb2JqKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMjM6XHRpZiAoIXBhcmVudC1cdTAwM2VtZGV2X3R5cGVzX2tzZXQpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjI0LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjI2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGFyZW50LVx1MDAzZW5yX3R5cGVzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjIyNzpcdFx0cmV0ID0gbWRldl90eXBlX2FkZChwYXJlbnQsIHBhcmVudC1cdTAwM2V0eXBlc1tpXSk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjI4LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMzQtXHR3aGlsZSAoLS1pIFx1MDAzZT0gMClcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMzU6XHRcdG1kZXZfdHlwZV9yZW1vdmUocGFyZW50LVx1MDAzZXR5cGVzW2ldKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMzY6XHRrc2V0X3VucmVnaXN0ZXIocGFyZW50LVx1MDAzZW1kZXZfdHlwZXNfa3NldCk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjM3LVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM9MjQwPXN0YXRpYyBzc2l6ZV90IHJlbW92ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yNDIte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjI0MzpcdHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHRvX21kZXZfZGV2aWNlKGRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjQ0LVx0dW5zaWduZWQgbG9uZyB2YWw7XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTI1MS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyNTI6XHRcdHJldCA9IG1kZXZfZGV2aWNlX3JlbW92ZShtZGV2KTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yNTMtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTI2MD1zdGF0aWMgREVWSUNFX0FUVFJfV08ocmVtb3ZlKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yNjEtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjYyOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptZGV2X2RldmljZV9hdHRyc1tdID0ge1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTI2My1cdFx1MDAyNmRldl9hdHRyX3JlbW92ZS5hdHRyLFxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yNjYtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjY3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1kZXZfZGV2aWNlX2dyb3VwID0ge1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NjcwCgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDU2OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUmVhY2hhYmlsaXR5IGZvciB0aGUgUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcy4gRmlyc3QsIEkgc2VlIGBtZGV2YCwgYnV0IHRoYXQmIzM5O3MgZm9yIHNwZWNpZmljIGRyaXZlcnMgbGlrZSBgdmZpb19jY3dgIGFuZCB0aGUgbGlrZTsgaXQmIzM5O3Mgbm90IGEgZ2VuZXJpYyBQQ0kgZW11bGF0b3IuICBgdmZpby11c2VyYCBpcyBvdXQgYmVjYXVzZSBpdCBpcyB1c2VkIGZvciBhIHVzZXIgc3BhY2UgKmVtdWxhdG9yKiB0YWxraW5nIHRvIGEgUUVNVSBpbnN0YW5jZSwgbm90IHRoZSBrZXJuZWwgdGFsa2luZyB0byB1c2VyIHNwYWNlLiBTbywgbm8gZ2VuZXJpYyBQQ0kgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwuICBHaXZlbiB0aGF0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgYHJ0YXNlYCBpcyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKQnV0IHdhaXQsIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4gQ291bGQgYHJ0YXNlYCBzb21laG93ICpub3QqIGJlIGEgUENJIGRyaXZlcj8gIEkgY2hlY2sgYHJ0YXNlX2luaXRfb25lYCwgYW5kIHllcywgaXQgdGFrZXMgYHN0cnVjdCBwY2lfZGV2ICpwZGV2YCBhbmQgcmVnaXN0ZXJzIHdpdGggYHBjaV9yZWdpc3Rlcl9kcml2ZXJgLiBPa2F5LCBpdCYjMzk7cyBhIFBDSSBkcml2ZXIuCgpOb3csIGNvdWxkIHN5emthbGxlciBmdXp6IHRoaXM/ICBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLCBhbmQgSSBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQuIExldCBtZSBhY2Nlc3MgbXkgbG9uZy10ZXJtIG1lbW9yeSBhYm91dCBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcuLi4gT2theSwgaXQgd2FzIGFkZGVkIGluIDIwMjQuICBEb2VzIGl0IHVzZSBhIGN1c3RvbSBRRU1VIGRldmljZSBsaWtlIGBzeXprYWxsZXItcGNpYD8gTm8sIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBJdCBkb2VzbiYjMzk7dCB1c2UgdGhlIGBwY2ktdGVzdGRldmAgZWl0aGVyLiAgQWgsIHJpZ2h0ISBTeXprYWxsZXIgaW5qZWN0cyBhIFBDSSBkZXZpY2UsIHNvbWVob3cgdXNpbmcgc2hhcmVkIG1lbW9yeSwgdG8gdGVsbCB0aGUgZXhlY3V0b3Igd2hhdCBNTUlPIHJlYWRzIHNob3VsZCByZXR1cm4uCgpJZiBzeXprYWxsZXIgY291bGQgZW11bGF0ZSAqYW55KiBQQ0kgZGV2aWNlLCB0aGVuIGBydGFzZWAgKmlzKiByZWFjaGFibGUuICBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IG1lbnRpb24gb2YgYHN5emthbGxlci1wY2lgIGluIHRoZSBrZXJuZWwuIE5vcGUsIGl0IHdvdWxkIGJlIGluIFFFTVUuCgpJZiBzeXprYWxsZXIgKmNhbiogZW11bGF0ZSBhbnkgUENJIGRldmljZSwgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAgZm9yIGFsbCBQQ0kgZHJpdmVycy4gIEJ1dCwgdGhlIHByb21wdC4uLiAqJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuLi4mIzM0OyogT2theSwgc28gaWYgaXQmIzM5O3Mgc29mdHdhcmUgZW11bGF0ZWQsIGl0JiMzOTtzIHN0aWxsIHJlYWNoYWJsZS4gIElzIHRoaXMgY29uc2lkZXJlZCBzb2Z0d2FyZSBlbXVsYXRpb24/IFllcywgc28gSSBoYXZlIHRvIGJlIGNhcmVmdWwgaGVyZS4KClNvLCBkb2VzIHN5emthbGxlciAqYWN0dWFsbHkqIHVzZSBhIGN1c3RvbSBRRU1VIGRldmljZT8gTm8uICBJdCBkb2VzbiYjMzk7dCB1c2UgYHBjaS10ZXN0ZGV2YCBvciBldmVuIGB2ZmlvYCBmb3IgaG9zdCBlbXVsYXRpb24uIERvZXMgaXQgdXNlIGB2aXJ0aW9gPyBOby4KCkkgaGF2ZSB0byBjYXJlZnVsbHkgZXZhbHVhdGUgdGhlIHJpc2suIElmIEkgc2F5IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGFuZCBpdCBJUyByZWFjaGFibGUsIEkmIzM5O20gd3JvbmcuIElmIEkgc2F5IGBXb3J0aEZ1enppbmc9dHJ1ZWAgYW5kIGl0JiMzOTtzIG5vdCwgSSYjMzk7bSBhdCBsZWFzdCBsZXNzIHdyb25nLiAgQnV0LCB0aGUgcHJvbXB0IHN0cmVzc2VzICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCYjMzQ7IGFuZCBtZW50aW9ucyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4KClNvLCBkb2VzIGBydGFzZWAgaGF2ZSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZT8gTm8uIElzIHRoZXJlIGEgZ2VuZXJpYyBQQ0kgZW11bGF0b3IgaW4gdGhlIGtlcm5lbD8gTm8uIFRoZXJlZm9yZSwgd2l0aG91dCBhIHNwZWNpYWwgc29mdHdhcmUgc2V0dXAsIGl0ICppcyogaW1wb3NzaWJsZSB0byByZWFjaC4KCk5vdywgY29uc2lkZXIgY2FzZXMgbGlrZSBVU0Igd2l0aCBgZHVtbXlfaGNkYCwgV2lGaSB3aXRoIGBtYWM4MDIxMV9od3NpbWAsIEJsdWV0b290aCB3aXRoIGB2aGNpYCwgQ0FOIHdpdGggYHZjYW5gLiBUaGV5ICphcmUqIHJlYWNoYWJsZS4gQnV0IHdoYXQgYWJvdXQgUENJPyAgTm8gZ2VuZXJpYyBkdW1teSBob3N0IGNvbnRyb2xsZXIgaW4gdGhlIGtlcm5lbC4gIFRoZSBgUENJX0VORFBPSU5UX1RFU1RgIGlzICpub3QqIGEgZ2VuZXJhbCBlbXVsYXRvci4gUENJIGRyaXZlcnMgYXJlICpnZW5lcmFsbHkqIHVucmVhY2hhYmxlIHdpdGhvdXQgc29tZXRoaW5nIGxpa2UgYSBjdXN0b20gZW11bGF0b3IgaW4gUUVNVSwgb3IgbGlrZSB0aGUgZXhpc3RpbmcgYHZpcnRpb2AsIGBlMTAwMGAsIG9yIGBydGw4MTM5YC4KCk9rYXksIGlzIGBydGFzZWAgZW11bGF0ZWQgaW4gUUVNVT8gSXQmIzM5O3MgUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldC4gSXQmIzM5O3MgdmVyeSBzcGVjaWZpYywgYW5kIHJlbGF0aXZlbHkgbmV3IChhZGRlZCBhcm91bmQgMjAyNCksIHNvIFFFTVUgYWxtb3N0IGNlcnRhaW5seSBkb2VzICpub3QqIGVtdWxhdGUgaXQuIFRoZXJlZm9yZSwgaXQgaXMgaW1wb3NzaWJsZSB0byByZWFjaC4KCkNvdWxkIGBzeXprYWxsZXJgIHVzZSBgdmZpby1tZGV2YD8gTm8sIHRoYXQmIzM5O3Mgbm90IGl0LiAgVGhlcmUmIzM5O3Mgbm8gYG1kZXZgIGRyaXZlciBmb3IgZ2VuZXJpYyBQQ0kgZW11bGF0aW9uLCBhbmQgYHZmaW8tdXNlcmAgaXMgYWxzbyBvdXQgYmVjYXVzZSBpdCYjMzk7cyB0aGUgdXNlciBzcGFjZSBlbXVsYXRvci4gVGhhdCBicmluZ3MgbWUgYmFjayB0byBteSBwcmV2aW91cyByZWFzb25pbmcsIHdoaWNoIHNheXMgdGhhdCBzaW5jZSBzeXprYWxsZXIgdGVzdHMgZ2VuZXJpYyBwYXRjaGVzLCB0aGlzIHBhdGNoIHByb2JhYmx5IGNhbiYjMzk7dCBiZSByZWFjaGVkIGlmIGl0IGlzIGZvciBhIHNwZWNpZmljIGRldmljZS4KCkxldCYjMzk7cyB2ZXJpZnkuIERvZXMgYW55IGBDT05GSUdfUENJX0RFQlVHYCBzdHVmZiBhbGxvdyBpbmplY3RpbmcgZGV2aWNlcz8gTm8uIFN5emthbGxlciYjMzk7cyBgc3l6X3BjaV9kZXZpY2VfYWRkYC4gSG93IGRvZXMgdGhhdCAqYWN0dWFsbHkqIHdvcms/IFN5emthbGxlciBydW5zIGluIEdDRSwgYW5kIEdDRSBkb2VzbiYjMzk7dCBydW4gY3VzdG9tIFFFTVUgZGV2aWNlcy4gVGhlcmVmb3JlLCBob3cgZG9lcyBTeXprYWxsZXIgdGVzdCBQQ0kgb24gR0NFPyBJdCBkb2VzIG5vdCEgUENJCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHJ0YXNlYCBkcml2ZXIgKFJlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXQpLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwsIGFuZCB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uIChgcnRhc2VfaW5pdF9vbmVgKSBzdHJpY3RseSBjaGVja3MgZm9yIHNwZWNpZmljIGhhcmR3YXJlIHZlcnNpb25zIHZpYSBNTUlPIHJlYWRzIChgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRgKS4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IsIHRoZSBkZXZpY2UgcHJvYmUgd2lsbCBmYWlsLCB0aGUgbmV0ZGV2aWNlIHdpbGwgbm90IGJlIHJlZ2lzdGVyZWQsIGFuZCB0aGUgbW9kaWZpZWQgY29kZSAoYHJ0YXNlX3N0YXJ0X3htaXRgIGFuZCBgcnRhc2Vfc2tiX3BhZGApIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcnRhc2VgIGRyaXZlciAoUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCksIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgYW5kIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gKGBydGFzZV9pbml0X29uZWApIHN0cmljdGx5IGNoZWNrcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgdmVyc2lvbnMgdmlhIE1NSU8gcmVhZHMgKGBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZGApLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIGRlZGljYXRlZCBlbXVsYXRvciwgdGhlIGRldmljZSBwcm9iZSB3aWxsIGZhaWwsIHRoZSBuZXRkZXZpY2Ugd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIChgcnRhc2Vfc3RhcnRfeG1pdGAgYW5kIGBydGFzZV9za2JfcGFkYCkgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjU5OjQzLjQyMzAyNjEwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjI1MzE5MjExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBydGFzZWAgZHJpdmVyIChSZWFsdGVrIEF1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0KSwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCBhbmQgdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIChgcnRhc2VfaW5pdF9vbmVgKSBzdHJpY3RseSBjaGVja3MgZm9yIHNwZWNpZmljIGhhcmR3YXJlIHZlcnNpb25zIHZpYSBNTUlPIHJlYWRzIChgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRgKS4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IsIHRoZSBkZXZpY2UgcHJvYmUgd2lsbCBmYWlsLCB0aGUgbmV0ZGV2aWNlIHdpbGwgbm90IGJlIHJlZ2lzdGVyZWQsIGFuZCB0aGUgbW9kaWZpZWQgY29kZSAoYHJ0YXNlX3N0YXJ0X3htaXRgIGFuZCBgcnRhc2Vfc2tiX3BhZGApIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjU5OjQzLjQyMzAzNTM4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyMzA2NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjUyOTk2MmZjYTMxNzc3NTRmZTk2NjhmZDM2OWZiNTZlYWUxOTNiN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAxMCAwNTo1OTo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlLmhcXG5pbmRleCA5YmQ2ODcyNDc0YzExYi4uMDNiMTJkODNmNmU5ZGYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oXFxuQEAgLTE5Miw2ICsxOTIsMTIgQEAgZW51bSBydGFzZV9zd19mbGFnX2NvbnRlbnQge1xcbiBcXHRSVEFTRV9TV0ZfTVNJWF9FTkFCTEVEID0gQklUKDIpLFxcbiB9O1xcbiBcXG4rZW51bSBydGFzZV9wYXJzZV9yZXN1bHQge1xcbitcXHRSVEFTRV9QQVJTRV9PSyxcXG4rXFx0UlRBU0VfUEFSU0VfU0tJUCxcXG4rXFx0UlRBU0VfUEFSU0VfRFJPUCxcXG4rfTtcXG4rXFxuICNkZWZpbmUgUlNWRF9NQVNLIDB4M0ZGRkMwMDBcXG4gXFxuIHN0cnVjdCBydGFzZV90eF9kZXNjIHtcXG5AQCAtMzYzLDQgKzM2OSw2IEBAIHN0cnVjdCBydGFzZV9wcml2YXRlIHtcXG4gXFxuICNkZWZpbmUgUlRBU0VfTVNTX01BU0sgR0VOTUFTSygyOCwgMTgpXFxuIFxcbisjZGVmaW5lIFJUQVNFX01JTl9QQURfTEVOIDQ3XFxuK1xcbiAjZW5kaWYgLyogUlRBU0VfSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jXFxuaW5kZXggMjU1NjY3Nzc1ZjBlOGIuLjQxNjhhZDllNDhlYWNhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmNcXG5AQCAtNjEsNiArNjEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmVmZXRjaC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2NsYXNzaWZ5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RjcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2lycS5oXFx1MDAzZVxcbkBAIC0xMjUyLDYgKzEyNTMsMTk5IEBAIHN0YXRpYyB1MzIgcnRhc2VfdHhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRyZXR1cm4gY3N1bV9jbWQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCBydGFzZV9nZXRfbDNfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBfX2JlMTYgKnByb3RvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiAqbmV0d29ya19vZmZzZXQpXFxuK3tcXG4rXFx0c3RydWN0IHZsYW5faGRyICp2aCwgX3ZoO1xcbitcXHRzdHJ1Y3QgZXRoaGRyICplaCwgX2VoO1xcbitcXHR1MzIgb2Zmc2V0ID0gRVRIX0hMRU47XFxuK1xcbitcXHRlaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIDAsIHNpemVvZihfZWgpLCBcXHUwMDI2X2VoKTtcXG4rXFx0aWYgKCFlaClcXG4rXFx0XFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XFxuK1xcbitcXHQqcHJvdG8gPSBlaC1cXHUwMDNlaF9wcm90bztcXG4rXFxuK1xcdHdoaWxlIChldGhfdHlwZV92bGFuKCpwcm90bykpIHtcXG4rXFx0XFx0dmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfdmgpLCBcXHUwMDI2X3ZoKTtcXG4rXFx0XFx0aWYgKCF2aClcXG4rXFx0XFx0XFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XFxuK1xcbitcXHRcXHQqcHJvdG8gPSB2aC1cXHUwMDNlaF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bztcXG4rXFx0XFx0b2Zmc2V0ICs9IFZMQU5fSExFTjtcXG4rXFx0fVxcbitcXG4rXFx0Km5ldHdvcmtfb2Zmc2V0ID0gb2Zmc2V0O1xcbitcXG4rXFx0cmV0dXJuIFJUQVNFX1BBUlNFX09LO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBydGFzZV9wYWRfdG9fdHJhbnNwb3J0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdTMyIHRyYW5zcG9ydF9vZmZzZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1MzIgcGFkX3RvX2xlbilcXG4re1xcbitcXHR1MzIgdHJhbnNfZGF0YV9sZW47XFxuK1xcdHUzMiBwYWRfbGVuO1xcbitcXG4rXFx0dHJhbnNfZGF0YV9sZW4gPSBza2ItXFx1MDAzZWxlbiAtIHRyYW5zcG9ydF9vZmZzZXQ7XFxuK1xcdGlmICh0cmFuc19kYXRhX2xlbiBcXHUwMDNlPSBwYWRfdG9fbGVuKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHtcXG4rXFx0XFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRwYWRfbGVuID0gcGFkX3RvX2xlbiAtIHRyYW5zX2RhdGFfbGVuO1xcbitcXHRpZiAoX19za2JfcHV0X3BhZHRvKHNrYiwgc2tiLVxcdTAwM2VsZW4gKyBwYWRfbGVuLCBmYWxzZSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgZW51bSBydGFzZV9wYXJzZV9yZXN1bHQgcnRhc2VfZ2V0X3RyYW5zcG9ydF9vZmZzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICB1MzIgKnRyYW5zcG9ydF9vZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgdTggKnRyYW5zcG9ydF9wcm90byxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICB1MzIgKnBhZF90b19sZW4pXFxuK3tcXG4rXFx0ZW51bSBydGFzZV9wYXJzZV9yZXN1bHQgcmV0O1xcbitcXHRzdHJ1Y3QgaXB2NmhkciAqaTZoLCBfaTZoO1xcbitcXHRzdHJ1Y3QgaXBoZHIgKmloLCBfaWg7XFxuK1xcdGJvb2wgbm9uX2ZpcnN0X2ZyYWc7XFxuK1xcdF9fYmUxNiBwcm90bztcXG4rXFx0dTMyIG9mZnNldDtcXG4rXFx0dTMyIG5vO1xcbitcXG4rXFx0cmV0ID0gcnRhc2VfZ2V0X2wzX3Byb3RvKHNrYiwgXFx1MDAyNnByb3RvLCBcXHUwMDI2bm8pO1xcbitcXHRpZiAocmV0ICE9IFJUQVNFX1BBUlNFX09LKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3dpdGNoIChwcm90bykge1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4rXFx0XFx0aWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBubywgc2l6ZW9mKF9paCksIFxcdTAwMjZfaWgpO1xcbitcXHRcXHRpZiAoIWloKVxcbitcXHRcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcXG4rXFxuK1xcdFxcdGlmIChpaC1cXHUwMDNlaWhsIFxcdTAwM2MgNSlcXG4rXFx0XFx0XFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XFxuK1xcbitcXHRcXHRvZmZzZXQgPSBubyArIGloLVxcdTAwM2VpaGwgKiA0O1xcbitcXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4pXFxuK1xcdFxcdFxcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xcbitcXG4rXFx0XFx0bm9uX2ZpcnN0X2ZyYWcgPSBudG9ocyhpaC1cXHUwMDNlZnJhZ19vZmYpIFxcdTAwMjYgSVBfT0ZGU0VUO1xcbitcXG4rXFx0XFx0aWYgKGloLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xcbitcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gLSBvZmZzZXQgXFx1MDAzYyBzaXplb2Yoc3RydWN0IHRjcGhkcikpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKG5vbl9maXJzdF9mcmFnKSB7XFxuK1xcdFxcdFxcdFxcdFxcdCp0cmFuc3BvcnRfb2Zmc2V0ID0gb2Zmc2V0O1xcbitcXHRcXHRcXHRcXHRcXHQqdHJhbnNwb3J0X3Byb3RvID0gSVBQUk9UT19UQ1A7XFxuK1xcdFxcdFxcdFxcdFxcdCpwYWRfdG9fbGVuID0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpO1xcbitcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIFJUQVNFX1BBUlNFX09LO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0cmV0dXJuIFJUQVNFX1BBUlNFX1NLSVA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChpaC1cXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXFxuK1xcdFxcdFxcdHJldHVybiBSVEFTRV9QQVJTRV9TS0lQO1xcbitcXG4rXFx0XFx0KnRyYW5zcG9ydF9vZmZzZXQgPSBvZmZzZXQ7XFxuK1xcdFxcdCp0cmFuc3BvcnRfcHJvdG8gPSBJUFBST1RPX1VEUDtcXG4rXFxuK1xcdFxcdGlmIChza2ItXFx1MDAzZWxlbiAtIG9mZnNldCBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkge1xcbitcXHRcXHRcXHRpZiAobm9uX2ZpcnN0X2ZyYWcpIHtcXG4rXFx0XFx0XFx0XFx0KnBhZF90b19sZW4gPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuK1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfT0s7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfT0s7XFxuK1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbitcXHRcXHRpNmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBubywgc2l6ZW9mKF9pNmgpLCBcXHUwMDI2X2k2aCk7XFxuK1xcdFxcdGlmICghaTZoKVxcbitcXHRcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcXG4rXFxuK1xcdFxcdG9mZnNldCA9IG5vICsgc2l6ZW9mKCppNmgpO1xcbitcXG4rXFx0XFx0aWYgKGk2aC1cXHUwMDNlbmV4dGhkciA9PSBJUFBST1RPX1RDUCkge1xcbitcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gLSBvZmZzZXQgXFx1MDAzYyBzaXplb2Yoc3RydWN0IHRjcGhkcikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xcbitcXG4rXFx0XFx0XFx0cmV0dXJuIFJUQVNFX1BBUlNFX1NLSVA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChpNmgtXFx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19VRFApXFxuK1xcdFxcdFxcdHJldHVybiBSVEFTRV9QQVJTRV9TS0lQO1xcbitcXG4rXFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0IFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKVxcbitcXHRcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcXG4rXFxuK1xcdFxcdCp0cmFuc3BvcnRfb2Zmc2V0ID0gb2Zmc2V0O1xcbitcXHRcXHQqdHJhbnNwb3J0X3Byb3RvID0gSVBQUk9UT19VRFA7XFxuK1xcbitcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfT0s7XFxuK1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfU0tJUDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBydGFzZV9za2JfcGFkKHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0ZW51bSBydGFzZV9wYXJzZV9yZXN1bHQgcmV0O1xcbitcXHR1MzIgdHJhbnNwb3J0X29mZnNldDtcXG4rXFx0X19iZTE2ICpkZXN0LCBfZGVzdDtcXG4rXFx0dTMyIHRyYW5zX2RhdGFfbGVuO1xcbitcXHR1MzIgcGFkX3RvX2xlbiA9IDA7XFxuK1xcdHU4IHRyYW5zcG9ydF9wcm90bztcXG4rXFx0dTE2IGRlc3RfcG9ydDtcXG4rXFxuK1xcdHJldCA9IHJ0YXNlX2dldF90cmFuc3BvcnRfb2Zmc2V0KHNrYiwgXFx1MDAyNnRyYW5zcG9ydF9vZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2dHJhbnNwb3J0X3Byb3RvLCBcXHUwMDI2cGFkX3RvX2xlbik7XFxuK1xcdGlmIChyZXQgPT0gUlRBU0VfUEFSU0VfU0tJUCkge1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fSBlbHNlIGlmIChyZXQgPT0gUlRBU0VfUEFSU0VfRFJPUCkge1xcbitcXHRcXHRuZXRkZXZfZGJnKHNrYi1cXHUwMDNlZGV2LCBcXFwiZHJvcCBtYWxmb3JtZWQgcGFja2V0XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGFkX3RvX2xlbiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXJ0YXNlX3BhZF90b190cmFuc3BvcnRfbGVuKHNrYiwgdHJhbnNwb3J0X29mZnNldCwgcGFkX3RvX2xlbikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh0cmFuc3BvcnRfcHJvdG8gIT0gSVBQUk9UT19VRFApXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0dHJhbnNfZGF0YV9sZW4gPSBza2ItXFx1MDAzZWxlbiAtIHRyYW5zcG9ydF9vZmZzZXQ7XFxuK1xcdGlmICh0cmFuc19kYXRhX2xlbiBcXHUwMDNjIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGxlbikgfHxcXG4rXFx0ICAgIHRyYW5zX2RhdGFfbGVuIFxcdTAwM2U9IFJUQVNFX01JTl9QQURfTEVOKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGRlc3QgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLFxcbitcXHRcXHRcXHRcXHQgIHRyYW5zcG9ydF9vZmZzZXQgK1xcbitcXHRcXHRcXHRcXHQgIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpLFxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihfZGVzdCksIFxcdTAwMjZfZGVzdCk7XFxuK1xcdGlmICghZGVzdClcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRkZXN0X3BvcnQgPSBudG9ocygqZGVzdCk7XFxuK1xcdGlmIChkZXN0X3BvcnQgIT0gUFRQX0VWX1BPUlQgXFx1MDAyNlxcdTAwMjYgZGVzdF9wb3J0ICE9IFBUUF9HRU5fUE9SVClcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gcnRhc2VfcGFkX3RvX3RyYW5zcG9ydF9sZW4oc2tiLCB0cmFuc3BvcnRfb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHQgIFJUQVNFX01JTl9QQURfTEVOKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydGFzZV94bWl0X2ZyYWdzKHN0cnVjdCBydGFzZV9yaW5nICpyaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgICAgdTMyIG9wdHMxLCB1MzIgb3B0czIpXFxuIHtcXG5AQCAtMTM2NSw2ICsxNTU5LDkgQEAgc3RhdGljIG5ldGRldl90eF90IHJ0YXNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0b3B0czIgfD0gcnRhc2VfdHhfY3N1bShza2IsIGRldik7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghcnRhc2Vfc2tiX3BhZChza2IpKVxcbitcXHRcXHRnb3RvIGVycl9kbWFfMDtcXG4rXFxuIFxcdGZyYWdzID0gcnRhc2VfeG1pdF9mcmFncyhyaW5nLCBza2IsIG9wdHMxLCBvcHRzMik7XFxuIFxcdGlmICh1bmxpa2VseShmcmFncyBcXHUwMDNjIDApKVxcbiBcXHRcXHRnb3RvIGVycl9kbWFfMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDU6NTk6NDMuOTk2MzAwNTE5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTU2Nzk5MDY1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcnRhc2VgIGRyaXZlciAoUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCksIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgYW5kIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiAoYHJ0YXNlX2luaXRfb25lYCkgc3RyaWN0bHkgY2hlY2tzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSB2ZXJzaW9ucyB2aWEgTU1JTyByZWFkcyAoYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYCkuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGEgZGVkaWNhdGVkIGVtdWxhdG9yLCB0aGUgZGV2aWNlIHByb2JlIHdpbGwgZmFpbCwgdGhlIG5ldGRldmljZSB3aWxsIG5vdCBiZSByZWdpc3RlcmVkLCBhbmQgdGhlIG1vZGlmaWVkIGNvZGUgKGBydGFzZV9zdGFydF94bWl0YCBhbmQgYHJ0YXNlX3NrYl9wYWRgKSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI1Mjk5NjJmY2EzMTc3NzU0ZmU5NjY4ZmQzNjlmYjU2ZWFlMTkzYjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwNTo1OTo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2UuaFxuaW5kZXggOWJkNjg3MjQ3NGMxMWIuLjAzYjEyZDgzZjZlOWRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlLmhcbkBAIC0xOTIsNiArMTkyLDEyIEBAIGVudW0gcnRhc2Vfc3dfZmxhZ19jb250ZW50IHtcbiBcdFJUQVNFX1NXRl9NU0lYX0VOQUJMRUQgPSBCSVQoMiksXG4gfTtcbiBcbitlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCB7XG4rXHRSVEFTRV9QQVJTRV9PSyxcbitcdFJUQVNFX1BBUlNFX1NLSVAsXG4rXHRSVEFTRV9QQVJTRV9EUk9QLFxuK307XG4rXG4gI2RlZmluZSBSU1ZEX01BU0sgMHgzRkZGQzAwMFxuIFxuIHN0cnVjdCBydGFzZV90eF9kZXNjIHtcbkBAIC0zNjMsNCArMzY5LDYgQEAgc3RydWN0IHJ0YXNlX3ByaXZhdGUge1xuIFxuICNkZWZpbmUgUlRBU0VfTVNTX01BU0sgR0VOTUFTSygyOCwgMTgpXG4gXG4rI2RlZmluZSBSVEFTRV9NSU5fUEFEX0xFTiA0N1xuK1xuICNlbmRpZiAvKiBSVEFTRV9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uY1xuaW5kZXggMjU1NjY3Nzc1ZjBlOGIuLjQxNjhhZDllNDhlYWNhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jXG5AQCAtNjEsNiArNjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbGFzc2lmeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9pcnEuaFx1MDAzZVxuQEAgLTEyNTIsNiArMTI1MywxOTkgQEAgc3RhdGljIHUzMiBydGFzZV90eF9jc3VtKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gY3N1bV9jbWQ7XG4gfVxuIFxuK3N0YXRpYyBlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCBydGFzZV9nZXRfbDNfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0XHQgIF9fYmUxNiAqcHJvdG8sXG4rXHRcdFx0XHRcdFx0ICB1MzIgKm5ldHdvcmtfb2Zmc2V0KVxuK3tcbitcdHN0cnVjdCB2bGFuX2hkciAqdmgsIF92aDtcbitcdHN0cnVjdCBldGhoZHIgKmVoLCBfZWg7XG4rXHR1MzIgb2Zmc2V0ID0gRVRIX0hMRU47XG4rXG4rXHRlaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIDAsIHNpemVvZihfZWgpLCBcdTAwMjZfZWgpO1xuK1x0aWYgKCFlaClcbitcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4rXG4rXHQqcHJvdG8gPSBlaC1cdTAwM2VoX3Byb3RvO1xuK1xuK1x0d2hpbGUgKGV0aF90eXBlX3ZsYW4oKnByb3RvKSkge1xuK1x0XHR2aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF92aCksIFx1MDAyNl92aCk7XG4rXHRcdGlmICghdmgpXG4rXHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4rXG4rXHRcdCpwcm90byA9IHZoLVx1MDAzZWhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87XG4rXHRcdG9mZnNldCArPSBWTEFOX0hMRU47XG4rXHR9XG4rXG4rXHQqbmV0d29ya19vZmZzZXQgPSBvZmZzZXQ7XG4rXG4rXHRyZXR1cm4gUlRBU0VfUEFSU0VfT0s7XG4rfVxuK1xuK3N0YXRpYyBib29sIHJ0YXNlX3BhZF90b190cmFuc3BvcnRfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgICAgdTMyIHRyYW5zcG9ydF9vZmZzZXQsXG4rXHRcdFx0XHQgICAgICAgdTMyIHBhZF90b19sZW4pXG4re1xuK1x0dTMyIHRyYW5zX2RhdGFfbGVuO1xuK1x0dTMyIHBhZF9sZW47XG4rXG4rXHR0cmFuc19kYXRhX2xlbiA9IHNrYi1cdTAwM2VsZW4gLSB0cmFuc3BvcnRfb2Zmc2V0O1xuK1x0aWYgKHRyYW5zX2RhdGFfbGVuIFx1MDAzZT0gcGFkX3RvX2xlbilcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKSB7XG4rXHRcdGlmIChza2JfbGluZWFyaXplKHNrYikpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cGFkX2xlbiA9IHBhZF90b19sZW4gLSB0cmFuc19kYXRhX2xlbjtcbitcdGlmIChfX3NrYl9wdXRfcGFkdG8oc2tiLCBza2ItXHUwMDNlbGVuICsgcGFkX2xlbiwgZmFsc2UpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGVudW0gcnRhc2VfcGFyc2VfcmVzdWx0IHJ0YXNlX2dldF90cmFuc3BvcnRfb2Zmc2V0KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdFx0XHQgIHUzMiAqdHJhbnNwb3J0X29mZnNldCxcbitcdFx0XHRcdFx0XHRcdCAgdTggKnRyYW5zcG9ydF9wcm90byxcbitcdFx0XHRcdFx0XHRcdCAgdTMyICpwYWRfdG9fbGVuKVxuK3tcbitcdGVudW0gcnRhc2VfcGFyc2VfcmVzdWx0IHJldDtcbitcdHN0cnVjdCBpcHY2aGRyICppNmgsIF9pNmg7XG4rXHRzdHJ1Y3QgaXBoZHIgKmloLCBfaWg7XG4rXHRib29sIG5vbl9maXJzdF9mcmFnO1xuK1x0X19iZTE2IHByb3RvO1xuK1x0dTMyIG9mZnNldDtcbitcdHUzMiBubztcbitcbitcdHJldCA9IHJ0YXNlX2dldF9sM19wcm90byhza2IsIFx1MDAyNnByb3RvLCBcdTAwMjZubyk7XG4rXHRpZiAocmV0ICE9IFJUQVNFX1BBUlNFX09LKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3dpdGNoIChwcm90bykge1xuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4rXHRcdGloID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbm8sIHNpemVvZihfaWgpLCBcdTAwMjZfaWgpO1xuK1x0XHRpZiAoIWloKVxuK1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xuK1xuK1x0XHRpZiAoaWgtXHUwMDNlaWhsIFx1MDAzYyA1KVxuK1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xuK1xuK1x0XHRvZmZzZXQgPSBubyArIGloLVx1MDAzZWlobCAqIDQ7XG4rXHRcdGlmIChvZmZzZXQgXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4rXHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4rXG4rXHRcdG5vbl9maXJzdF9mcmFnID0gbnRvaHMoaWgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUF9PRkZTRVQ7XG4rXG4rXHRcdGlmIChpaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xuK1x0XHRcdGlmIChza2ItXHUwMDNlbGVuIC0gb2Zmc2V0IFx1MDAzYyBzaXplb2Yoc3RydWN0IHRjcGhkcikpIHtcbitcdFx0XHRcdGlmIChub25fZmlyc3RfZnJhZykge1xuK1x0XHRcdFx0XHQqdHJhbnNwb3J0X29mZnNldCA9IG9mZnNldDtcbitcdFx0XHRcdFx0KnRyYW5zcG9ydF9wcm90byA9IElQUFJPVE9fVENQO1xuK1x0XHRcdFx0XHQqcGFkX3RvX2xlbiA9IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcbitcbitcdFx0XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX09LO1xuK1x0XHRcdFx0fVxuK1xuK1x0XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9TS0lQO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChpaC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbitcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfU0tJUDtcbitcbitcdFx0KnRyYW5zcG9ydF9vZmZzZXQgPSBvZmZzZXQ7XG4rXHRcdCp0cmFuc3BvcnRfcHJvdG8gPSBJUFBST1RPX1VEUDtcbitcbitcdFx0aWYgKHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQgXHUwMDNjIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkge1xuK1x0XHRcdGlmIChub25fZmlyc3RfZnJhZykge1xuK1x0XHRcdFx0KnBhZF90b19sZW4gPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4rXG4rXHRcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfT0s7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xuK1x0XHR9XG4rXG4rXHRcdHJldHVybiBSVEFTRV9QQVJTRV9PSztcbitcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4rXHRcdGk2aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG5vLCBzaXplb2YoX2k2aCksIFx1MDAyNl9pNmgpO1xuK1x0XHRpZiAoIWk2aClcbitcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcbitcbitcdFx0b2Zmc2V0ID0gbm8gKyBzaXplb2YoKmk2aCk7XG4rXG4rXHRcdGlmIChpNmgtXHUwMDNlbmV4dGhkciA9PSBJUFBST1RPX1RDUCkge1xuK1x0XHRcdGlmIChza2ItXHUwMDNlbGVuIC0gb2Zmc2V0IFx1MDAzYyBzaXplb2Yoc3RydWN0IHRjcGhkcikpXG4rXHRcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcbitcbitcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfU0tJUDtcbitcdFx0fVxuK1xuK1x0XHRpZiAoaTZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19VRFApXG4rXHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX1NLSVA7XG4rXG4rXHRcdGlmIChza2ItXHUwMDNlbGVuIC0gb2Zmc2V0IFx1MDAzYyBzaXplb2Yoc3RydWN0IHVkcGhkcikpXG4rXHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4rXG4rXHRcdCp0cmFuc3BvcnRfb2Zmc2V0ID0gb2Zmc2V0O1xuK1x0XHQqdHJhbnNwb3J0X3Byb3RvID0gSVBQUk9UT19VRFA7XG4rXG4rXHRcdHJldHVybiBSVEFTRV9QQVJTRV9PSztcbitcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBSVEFTRV9QQVJTRV9TS0lQO1xuK1x0fVxuK31cbitcbitzdGF0aWMgYm9vbCBydGFzZV9za2JfcGFkKHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0ZW51bSBydGFzZV9wYXJzZV9yZXN1bHQgcmV0O1xuK1x0dTMyIHRyYW5zcG9ydF9vZmZzZXQ7XG4rXHRfX2JlMTYgKmRlc3QsIF9kZXN0O1xuK1x0dTMyIHRyYW5zX2RhdGFfbGVuO1xuK1x0dTMyIHBhZF90b19sZW4gPSAwO1xuK1x0dTggdHJhbnNwb3J0X3Byb3RvO1xuK1x0dTE2IGRlc3RfcG9ydDtcbitcbitcdHJldCA9IHJ0YXNlX2dldF90cmFuc3BvcnRfb2Zmc2V0KHNrYiwgXHUwMDI2dHJhbnNwb3J0X29mZnNldCxcbitcdFx0XHRcdFx0IFx1MDAyNnRyYW5zcG9ydF9wcm90bywgXHUwMDI2cGFkX3RvX2xlbik7XG4rXHRpZiAocmV0ID09IFJUQVNFX1BBUlNFX1NLSVApIHtcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9IGVsc2UgaWYgKHJldCA9PSBSVEFTRV9QQVJTRV9EUk9QKSB7XG4rXHRcdG5ldGRldl9kYmcoc2tiLVx1MDAzZWRldiwgXCJkcm9wIG1hbGZvcm1lZCBwYWNrZXRcXG5cIik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGlmIChwYWRfdG9fbGVuIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFydGFzZV9wYWRfdG9fdHJhbnNwb3J0X2xlbihza2IsIHRyYW5zcG9ydF9vZmZzZXQsIHBhZF90b19sZW4pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAodHJhbnNwb3J0X3Byb3RvICE9IElQUFJPVE9fVURQKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHRyYW5zX2RhdGFfbGVuID0gc2tiLVx1MDAzZWxlbiAtIHRyYW5zcG9ydF9vZmZzZXQ7XG4rXHRpZiAodHJhbnNfZGF0YV9sZW4gXHUwMDNjIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGxlbikgfHxcbitcdCAgICB0cmFuc19kYXRhX2xlbiBcdTAwM2U9IFJUQVNFX01JTl9QQURfTEVOKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGRlc3QgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLFxuK1x0XHRcdFx0ICB0cmFuc3BvcnRfb2Zmc2V0ICtcbitcdFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgZGVzdCksXG4rXHRcdFx0XHQgIHNpemVvZihfZGVzdCksIFx1MDAyNl9kZXN0KTtcbitcdGlmICghZGVzdClcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRkZXN0X3BvcnQgPSBudG9ocygqZGVzdCk7XG4rXHRpZiAoZGVzdF9wb3J0ICE9IFBUUF9FVl9QT1JUIFx1MDAyNlx1MDAyNiBkZXN0X3BvcnQgIT0gUFRQX0dFTl9QT1JUKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBydGFzZV9wYWRfdG9fdHJhbnNwb3J0X2xlbihza2IsIHRyYW5zcG9ydF9vZmZzZXQsXG4rXHRcdFx0XHRcdCAgUlRBU0VfTUlOX1BBRF9MRU4pO1xuK31cbitcbiBzdGF0aWMgaW50IHJ0YXNlX3htaXRfZnJhZ3Moc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmcsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICAgIHUzMiBvcHRzMSwgdTMyIG9wdHMyKVxuIHtcbkBAIC0xMzY1LDYgKzE1NTksOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgcnRhc2Vfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRvcHRzMiB8PSBydGFzZV90eF9jc3VtKHNrYiwgZGV2KTtcbiBcdH1cbiBcbitcdGlmICghcnRhc2Vfc2tiX3BhZChza2IpKVxuK1x0XHRnb3RvIGVycl9kbWFfMDtcbitcbiBcdGZyYWdzID0gcnRhc2VfeG1pdF9mcmFncyhyaW5nLCBza2IsIG9wdHMxLCBvcHRzMik7XG4gXHRpZiAodW5saWtlbHkoZnJhZ3MgXHUwMDNjIDApKVxuIFx0XHRnb3RvIGVycl9kbWFfMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjU5OjQzLjk5NjMwMjYxOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNzc5NTIyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFsdGVrIEF1dG9tb3RpdmUgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgdGhlIGBydGFzZWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBydGFzZV9tYWluLmNgLiBJdCBsb29rcyBsaWtlIGl0IGFkZHMgYSBmdW5jdGlvbiBjYWxsZWQgYHJ0YXNlX3NrYl9wYWRgIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gYHJ0YXNlX3N0YXJ0X3htaXRgLiBUaGUgbWFpbiBwdXJwb3NlIHNlZW1zIHRvIGJlIHBhZGRpbmcgcGFja2V0cywgc3BlY2lmaWNhbGx5IFVEUCBwYWNrZXRzIHdpdGggZGVzdGluYXRpb24gcG9ydHMgcmVsYXRlZCB0byBQcmVjaXNpb24gVGltZSBQcm90b2NvbCAoUFRQKSwgdGhvc2UgYmVpbmcgYFBUUF9FVl9QT1JUYCBvciBgUFRQX0dFTl9QT1JUYC4gSWYgdGhlc2UgVURQIHBhY2tldHMgYXJlIGJlbG93IGEgY2VydGFpbiBsZW5ndGgsIGl0IHBhZHMgdGhlbSB1cCB0byBgUlRBU0VfTUlOX1BBRF9MRU5gLCB3aGljaCBpcyA0NyBieXRlcy5cblxuVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIGV2ZW4gcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsPyBUaGlzIGlzIGEgbmV0d29yayBkcml2ZXIgZm9yIGEgUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCwgd2hpY2ggaXMgYSBiaXQgbmljaGUuIE15IGZpcnN0IHRob3VnaHQgaXMgYWJvdXQgdmlydHVhbGl6YXRpb24uIENhbiBJIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBSZWFsIFBDSSBkcml2ZXJzIGxpa2UgdGhpcyBjYW4gYmUgdHJpY2t5LiBVbmxlc3MgSSdtIHVzaW5nIHNvbWV0aGluZyBsaWtlIFFFTVUgd2l0aCBhIHNwZWNpZmljYWxseSBlbXVsYXRlZCBkZXZpY2UsIG9yIG1heWJlIGB2aGNpYCBvciBhIGBkdW1teWAgZGV2aWNlLCBvciBwZXJoYXBzIGlmIHN5emthbGxlciBjb3VsZCBpbmplY3QgUENJIGRldmljZXMsIEknbSBsaWtlbHkgbm90IGdvaW5nIHRvIGJlIGFibGUgdG8gdGVzdCB0aGlzIHByb3Blcmx5LiBXYWl0LCBzeXprYWxsZXIgZG9lcyBoYXZlIGBzeXpfcGNpX2RldmljZV9hZGRgLCBidXQgdGhhdCBvbmx5IHdvcmtzIGlmIHRoZSBkcml2ZXIgYmluZHMgdG8gaXQgYW5kIGhhcmR3YXJlIGVtdWxhdGlvbiBpc24ndCBuZWVkZWQsIG9yIHdlIGp1c3QgZnV6eiB0aGUgcHJvYmUuXG5cbkFoLCByaWdodCEgYHJ0YXNlX3N0YXJ0X3htaXRgIGlzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCdzIHRoZSB0cmFuc21pdCBmdW5jdGlvbiBvZiB0aGUgbmV0d29yayBkcml2ZXIuIFRvIGV2ZW4gZ2V0IHRoZXJlLCB0aGUgZGV2aWNlIGhhcyB0byBiZSBzdWNjZXNzZnVsbHkgcHJvYmVkIGFuZCBicm91Z2h0IHVwLCB3aGljaCBtZWFucyB0aGUgZHJpdmVyIGhhcyB0byBiZSBsb2FkZWQuIFNvLCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIHRoaXMgYHJ0YXNlYCBkcml2ZXIgYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aG91dCByZWFsIGhhcmR3YXJlP1xuXG5JIG5lZWQgdG8gbG9vayBhdCB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4gTGV0J3MgZGlnIGludG8gYHJ0YXNlX2luaXRfb25lYCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzI2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDU6NTk6NTEuMTc0MjU3MjkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODc0MjgzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRhc2VfaW5pdF9vbmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjM3MT1zdGF0aWMgdm9pZCBydGFzZV9yZWxlYXNlX2JvYXJkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjM4OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyMzg5OnN0YXRpYyBpbnQgcnRhc2VfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjM5MC1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0yNTk0PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBydGFzZV9wY2lfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjU5Ni1cXHQuaWRfdGFibGUgPSBydGFzZV9wY2lfdGJsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjI1OTc6XFx0LnByb2JlID0gcnRhc2VfaW5pdF9vbmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjU5OC1cXHQucmVtb3ZlID0gcnRhc2VfcmVtb3ZlX29uZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDU6NTk6NTYuNjYxNjk3Mzc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3OTI4MzkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbml0aWFsIEV4YW1pbmF0aW9uIG9mIGBydGFzZV9pbml0X29uZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZS4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgYHJ0YXNlX2luaXRfb25lYCByb3V0aW5lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgaXRzIGJlaGF2aW9yLCBjaGVja2luZyBob3cgaXQgaGFuZGxlcyBpbml0aWFsaXphdGlvbiB0YXNrcy4gTGV0J3Mgc2VlIGhvdyB0aGlzIHBpZWNlIG9mIGNvZGUgd29ya3MsIEkgd2lsbCBmb2xsb3cgdGhlIGxpbmVzIG9mIGxvZ2ljIHRvIGJ1aWxkIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2MSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjU5OjU5LjU0MDk4NDAwM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzg5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM4OTpcXHRzdGF0aWMgaW50IHJ0YXNlX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbjIzOTA6XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbjIzOTE6XFx0e1xcbjIzOTI6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7XFxuMjM5MzpcXHRcXHRzdHJ1Y3QgcnRhc2VfaW50X3ZlY3RvciAqaXZlYztcXG4yMzk0OlxcdFxcdHZvaWQgX19pb21lbSAqaW9hZGRyID0gTlVMTDtcXG4yMzk1OlxcdFxcdHN0cnVjdCBydGFzZV9wcml2YXRlICp0cDtcXG4yMzk2OlxcdFxcdGludCByZXQsIGk7XFxuMjM5NzpcXHRcXG4yMzk4OlxcdFxcdGlmICghcGRldi1cXHUwMDNlaXNfcGh5c2ZuIFxcdTAwMjZcXHUwMDI2IHBkZXYtXFx1MDAzZWlzX3ZpcnRmbikge1xcbjIzOTk6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbjI0MDA6XFx0XFx0XFx0XFx0XFxcIlRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgYSB2aXJ0dWFsIGZ1bmN0aW9uLlxcXCIpO1xcbjI0MDE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjQwMjpcXHRcXHR9XFxuMjQwMzpcXHRcXG4yNDA0OlxcdFxcdGRldl9kYmcoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkF1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0IGRyaXZlciBsb2FkZWRcXFxcblxcXCIpO1xcbjI0MDU6XFx0XFxuMjQwNjpcXHRcXHRyZXQgPSBydGFzZV9pbml0X2JvYXJkKHBkZXYsIFxcdTAwMjZkZXYsIFxcdTAwMjZpb2FkZHIpO1xcbjI0MDc6XFx0XFx0aWYgKHJldClcXG4yNDA4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjQwOTpcXHRcXG4yNDEwOlxcdFxcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4yNDExOlxcdFxcdHRwLVxcdTAwM2VtbWlvX2FkZHIgPSBpb2FkZHI7XFxuMjQxMjpcXHRcXHR0cC1cXHUwMDNlZGV2ID0gZGV2O1xcbjI0MTM6XFx0XFx0dHAtXFx1MDAzZXBkZXYgPSBwZGV2O1xcbjI0MTQ6XFx0XFxuMjQxNTpcXHRcXHQvKiBpZGVudGlmeSBjaGlwIGF0dGFjaGVkIHRvIGJvYXJkICovXFxuMjQxNjpcXHRcXHRyZXQgPSBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZCh0cCk7XFxuMjQxNzpcXHRcXHRpZiAocmV0KSB7XFxuMjQxODpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMjQxOTpcXHRcXHRcXHRcXHRcXFwidW5rbm93biBjaGlwIHZlcnNpb246IDB4JTA4eCwgY29udGFjdCBydGFzZSBtYWludGFpbmVycyAoc2VlIE1BSU5UQUlORVJTIGZpbGUpXFxcXG5cXFwiLFxcbjI0MjA6XFx0XFx0XFx0XFx0dHAtXFx1MDAzZWh3X3Zlcik7XFxuMjQyMTpcXHRcXHRcXHRnb3RvIGVycl9vdXRfcmVsZWFzZV9ib2FyZDtcXG4yNDIyOlxcdFxcdH1cXG4yNDIzOlxcdFxcbjI0MjQ6XFx0XFx0cnRhc2VfaW5pdF9zb2Z0d2FyZV92YXJpYWJsZShwZGV2LCB0cCk7XFxuMjQyNTpcXHRcXHRydGFzZV9pbml0X2hhcmR3YXJlKHRwKTtcXG4yNDI2OlxcdFxcbjI0Mjc6XFx0XFx0cmV0ID0gcnRhc2VfYWxsb2NfaW50ZXJydXB0KHBkZXYsIHRwKTtcXG4yNDI4OlxcdFxcdGlmIChyZXQpIHtcXG4yNDI5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInVuYWJsZSB0byBhbGxvYyBNU0lYL01TSVxcXFxuXFxcIik7XFxuMjQzMDpcXHRcXHRcXHRnb3RvIGVycl9vdXRfZGVsX25hcGk7XFxuMjQzMTpcXHRcXHR9XFxuMjQzMjpcXHRcXG4yNDMzOlxcdFxcdHJ0YXNlX2luaXRfbmFwaSh0cCk7XFxuMjQzNDpcXHRcXG4yNDM1OlxcdFxcdHJ0YXNlX2luaXRfbmV0ZGV2X29wcyhkZXYpO1xcbjI0MzY6XFx0XFxuMjQzNzpcXHRcXHRkZXYtXFx1MDAzZXBjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9UU1RBVFM7XFxuMjQzODpcXHRcXG4yNDM5OlxcdFxcdGRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8XFxuMjQ0MDpcXHRcXHRcXHRcXHQgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9ISUdIRE1BIHxcXG4yNDQxOlxcdFxcdFxcdFxcdCBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfU0cgfFxcbjI0NDI6XFx0XFx0XFx0XFx0IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9JUFY2X0NTVU0gfFxcbjI0NDM6XFx0XFx0XFx0XFx0IE5FVElGX0ZfVFNPNjtcXG4yNDQ0OlxcdFxcbjI0NDU6XFx0XFx0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxcbjI0NDY6XFx0XFx0XFx0XFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1JYQ1NVTSB8XFxuMjQ0NzpcXHRcXHRcXHRcXHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHxcXG4yNDQ4OlxcdFxcdFxcdFxcdCAgIE5FVElGX0ZfUlhBTEwgfCBORVRJRl9GX1JYRkNTIHxcXG4yNDQ5OlxcdFxcdFxcdFxcdCAgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9UU082O1xcbjI0NTA6XFx0XFxuMjQ1MTpcXHRcXHRkZXYtXFx1MDAzZXZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08gfFxcbjI0NTI6XFx0XFx0XFx0XFx0ICAgICBORVRJRl9GX0hJR0hETUE7XFxuMjQ1MzpcXHRcXHRkZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0xJVkVfQUREUl9DSEFOR0U7XFxuMjQ1NDpcXHRcXHRuZXRpZl9zZXRfdHNvX21heF9zaXplKGRldiwgUlRBU0VfTFNPXzY0Syk7XFxuMjQ1NTpcXHRcXHRuZXRpZl9zZXRfdHNvX21heF9zZWdzKGRldiwgUlRBU0VfTklDX01BWF9QSFlTX0JVRl9DT1VOVF9MU08yKTtcXG4yNDU2OlxcdFxcbjI0NTc6XFx0XFx0cnRhc2VfZ2V0X21hY19hZGRyZXNzKGRldik7XFxuMjQ1ODpcXHRcXG4yNDU5OlxcdFxcdHRwLVxcdTAwM2V0YWxseV92YWRkciA9IGRtYV9hbGxvY19jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbjI0NjA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKnRwLVxcdTAwM2V0YWxseV92YWRkciksXFxuMjQ2MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ0cC1cXHUwMDNldGFsbHlfcGFkZHIsXFxuMjQ2MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbjI0NjM6XFx0XFx0aWYgKCF0cC1cXHUwMDNldGFsbHlfdmFkZHIpIHtcXG4yNDY0OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMjQ2NTpcXHRcXHRcXHRnb3RvIGVycl9vdXRfZnJlZV9kbWE7XFxuMjQ2NjpcXHRcXHR9XFxuMjQ2NzpcXHRcXG4yNDY4OlxcdFxcdHJ0YXNlX3RhbGx5X2NvdW50ZXJfY2xlYXIodHApO1xcbjI0Njk6XFx0XFxuMjQ3MDpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTtcXG4yNDcxOlxcdFxcbjI0NzI6XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2KTtcXG4yNDczOlxcdFxcbjI0NzQ6XFx0XFx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XFxuMjQ3NTpcXHRcXHRpZiAocmV0KVxcbjI0NzY6XFx0XFx0XFx0Z290byBlcnJfb3V0X2ZyZWVfZG1hO1xcbjI0Nzc6XFx0XFxuMjQ3ODpcXHRcXHRuZXRkZXZfZGJnKGRldiwgXFxcIiVwTSwgSVJRICVkXFxcXG5cXFwiLCBkZXYtXFx1MDAzZWRldl9hZGRyLCBkZXYtXFx1MDAzZWlycSk7XFxuMjQ3OTpcXHRcXG4yNDgwOlxcdFxcdHJldHVybiAwO1xcbjI0ODE6XFx0XFxuMjQ4MjpcXHRlcnJfb3V0X2ZyZWVfZG1hOlxcbjI0ODM6XFx0XFx0aWYgKHRwLVxcdTAwM2V0YWxseV92YWRkcikge1xcbjI0ODQ6XFx0XFx0XFx0ZG1hX2ZyZWVfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4yNDg1OlxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKCp0cC1cXHUwMDNldGFsbHlfdmFkZHIpLFxcbjI0ODY6XFx0XFx0XFx0XFx0XFx0ICB0cC1cXHUwMDNldGFsbHlfdmFkZHIsXFxuMjQ4NzpcXHRcXHRcXHRcXHRcXHQgIHRwLVxcdTAwM2V0YWxseV9wYWRkcik7XFxuMjQ4ODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDU6NTk6NTkuNTQxMTkwNzAzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk0MDY0MDkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyBhIE5ldHdvcmsgRGV2aWNlIERyaXZlcioqXG5cbkFscmlnaHQsIHNvIHRoZSBkcml2ZXIncyB0cnlpbmcgdG8gcmVnaXN0ZXIgYSBuZXR3b3JrIGRldmljZSwgd2hpY2ggaXMgc3RhbmRhcmQgcHJvY2VkdXJlLiBCdXQgaXQncyBoaXR0aW5nIGEgcm9hZGJsb2NrLiBJdCBzZWVtcyB0aGUgcmVnaXN0cmF0aW9uIGlzIGdhdGVkIGJ5IGEgY2FsbCB0byBgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRgLiBUaGF0J3MgYSBwcmV0dHkgc3BlY2lmaWMgZnVuY3Rpb24sIGxpa2VseSB0aWVkIHRvIHNvbWUgaGFyZHdhcmUtc3BlY2lmaWMgdmFsaWRhdGlvbiByZWxhdGVkIHRvIHRoZSBNZWRpYSBBY2Nlc3MgQ29udHJvbGxlciAoTUFDKSB2ZXJzaW9uLiBIbW0sIHRoZSBNQUMgdmVyc2lvbiBpcyBpbnRlcmVzdGluZy4gSSB3b3VsZCB0aGluayB0aGF0IHRoZXJlIGlzIHNvbWV0aGluZyB0byBkbyB3aXRoIGEgcmVnaXN0ZXIgdmFsdWUgYW5kIHRoZSBhcHByb3ByaWF0ZSBoYXJkd2FyZS5cblxuTGV0J3MgZGlnIGludG8gYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYCBpbW1lZGlhdGVseS4gVW5kZXJzdGFuZGluZyB0aGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHRvIGZpZ3VyZSBvdXQgd2h5IHRoZSBkZXZpY2UgaXNuJ3QgcmVnaXN0ZXJpbmcuIEl0J3MgcHJvYmFibHkgY2hlY2tpbmcgZm9yIGNvbXBhdGliaWxpdHksIGZlYXR1cmUgYXZhaWxhYmlsaXR5LCBvciBwZXJoYXBzIGV2ZW4gYSBzdXBwb3J0ZWQgc2lsaWNvbiByZXZpc2lvbi4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCB0aGlzIHZhbGlkYXRpb24gY291bGQgYmUgaGFwcGVuaW5nIGF0IGRpZmZlcmVudCBwb2ludHMgb2YgaW5pdGlhbGl6YXRpb24uIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgbG9naWMgdG8gc2VlIHdoYXQgY29uZGl0aW9ucyBhcmUgZmFpbGluZyBhbmQsIGZyb20gdGhlcmUsIGRlY2lkZSBteSBuZXh0IHRyb3VibGVzaG9vdGluZyBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMyMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6MDUuNDgxODMzNDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MjI3MDI4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0yMjU3PXN0YXRpYyB2b2lkIHJ0YXNlX2luaXRfc29mdHdhcmVfdmFyaWFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yMjgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjIyODE6c3RhdGljIGludCBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZChzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjI4Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0yMzg5PXN0YXRpYyBpbnQgcnRhc2VfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yNDE1LVxcdC8qIGlkZW50aWZ5IGNoaXAgYXR0YWNoZWQgdG8gYm9hcmQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyNDE2OlxcdHJldCA9IHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkKHRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yNDE3LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6MTAuNTc0MTA5OTQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4NzY3NjQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZW5jb3VudGVyaW5nIHRoYXQgcGllY2Ugb2YgY29kZTpcblxuKipDaGVja2luZyBgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRgKipcblxuQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGF0IG1lIGlzIGBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZGAuIEltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcsIFwiT2theSwgdGhpcyBpcyBzb21lIGtpbmQgb2YgUmVhbC1UaW1lIEFwcGxpY2F0aW9uIFNlY3VyaXR5IEVuZ2luZSAoUlRhc2UpIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gdmFsaWRhdGUgYSBtYWNPUyB2ZXJzaW9uLlwiIFRoZSBuYW1pbmcgY29udmVudGlvbiBpcyBwcmV0dHkgY2xlYXIsIHJpZ2h0PyBgcnRhc2VfYCBpbmRpY2F0ZXMgaXQncyBwYXJ0IG9mIHRoZSBSVGFzZSBmcmFtZXdvcmssIGBjaGVja19gIGlzIGEgdHlwaWNhbCB2ZXJpZmljYXRpb24gZnVuY3Rpb24gcHJlZml4LCBgbWFjX3ZlcnNpb25fYCBuYXJyb3dzIHRoZSBzY29wZSB0byBtYWNPUyB2ZXJzaW9ucywgYW5kIGB2YWxpZGAgc3VnZ2VzdHMgYSBib29sZWFuIHJldHVybiwgcHJvYmFibHkgaW5kaWNhdGluZyB3aGV0aGVyIGEgZ2l2ZW4gdmVyc2lvbiBtZWV0cyBhIGNlcnRhaW4gY3JpdGVyaWEuXG5cbk5vdywgbXkgbWluZCBzdGFydHMgcmFjaW5nIHdpdGggcG9zc2liaWxpdGllcy4gV2hhdCBpcyBpdCB2YWxpZGF0aW5nPyBJcyBpdCBjaGVja2luZyBmb3IgYSAqbWluaW11bSogc3VwcG9ydGVkIHZlcnNpb24/IFBlcmhhcHMgYSBzcGVjaWZpYyAqcmFuZ2UqIG9mIHZlcnNpb25zPyBPciBpcyBpdCBtb3JlIGNvbXBsZXggdGhhbiB0aGF0PyBJcyBpdCBsb29raW5nIGZvciBrbm93biB2dWxuZXJhYmxlIHZlcnNpb25zPyBPciBldmVuIHNwZWNpZmljIGJ1aWxkcz8gSSBuZWVkIHRvIHNlZSB0aGUgZnVuY3Rpb24ncyBpbnRlcm5hbCBsb2dpYyB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHZhbGlkYXRpb24gY3JpdGVyaWEgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5KiB0aGlzIHZhbGlkYXRpb24gaXMgbmVlZGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IOKAkyB0aGUgc3Vycm91bmRpbmcgY29kZSB0aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24g4oCTIGlzIGNydWNpYWwuIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIGFzc2Vzc2luZyBpdHMgc2VjdXJpdHkgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTMyLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6MTQuMTYxNzg4NzI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjgxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjgxOlxcdHN0YXRpYyBpbnQgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWQoc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKVxcbjIyODI6XFx0e1xcbjIyODM6XFx0XFx0aW50IHJldCA9IC1FTk9ERVY7XFxuMjI4NDpcXHRcXG4yMjg1OlxcdFxcdHRwLVxcdTAwM2Vod192ZXIgPSBydGFzZV9yMzIodHAsIFJUQVNFX1RYX0NPTkZJR18wKSBcXHUwMDI2IFJUQVNFX0hXX1ZFUl9NQVNLO1xcbjIyODY6XFx0XFxuMjI4NzpcXHRcXHRzd2l0Y2ggKHRwLVxcdTAwM2Vod192ZXIpIHtcXG4yMjg4OlxcdFxcdGNhc2UgUlRBU0VfSFdfVkVSXzkwNlhfN1hBOlxcbjIyODk6XFx0XFx0Y2FzZSBSVEFTRV9IV19WRVJfOTA2WF83WEM6XFxuMjI5MDpcXHRcXHRjYXNlIFJUQVNFX0hXX1ZFUl85MDdYRF9WMTpcXG4yMjkxOlxcdFxcdGNhc2UgUlRBU0VfSFdfVkVSXzkwN1hEX1ZBOlxcbjIyOTI6XFx0XFx0XFx0cmV0ID0gMDtcXG4yMjkzOlxcdFxcdFxcdGJyZWFrO1xcbjIyOTQ6XFx0XFx0fVxcbjIyOTU6XFx0XFxuMjI5NjpcXHRcXHRyZXR1cm4gcmV0O1xcbjIyOTc6XFx0fVxcbjIyOTg6XFx0XFxuMjI5OTpcXHRzdGF0aWMgaW50IHJ0YXNlX2luaXRfYm9hcmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICoqZGV2X291dCxcXG4yMzAwOlxcdFxcdFxcdFxcdCAgICB2b2lkIF9faW9tZW0gKippb2FkZHJfb3V0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjowMDoxNC4xNjE5NjQ4ODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkwNTMyNTE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZ2lzdGVyIFJlYWQgaW4gYSBTeXprYWxsZXIgQ29udGV4dCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyByZWFkaW5nIGEgcmVnaXN0ZXIsIGBSVEFTRV9UWF9DT05GSUdfMGAsIHVzaW5nIGBydGFzZV9yMzIodHAsIFJUQVNFX1RYX0NPTkZJR18wKWAuIE5hdHVyYWxseSwgaWYgdGhpcyB3ZXJlIHJ1bm5pbmcgb24gYWN0dWFsIGhhcmR3YXJlLCB0aGlzIHdvdWxkIGJlIGEgZGlyZWN0IHJlYWQgb2YgdGhlIGhhcmR3YXJlIHJlZ2lzdGVyLiBCdXQgc2luY2Ugd2UncmUgaW4gYSBTeXprYWxsZXIgZW52aXJvbm1lbnQsIHRoaW5ncyBnZXQgYSBiaXQgbW9yZSBpbnRlcmVzdGluZy4gYHJ0YXNlX3IzMmAgaXMgZ29pbmcgdG8gYmUgYWNjZXNzaW5nIG1lbW9yeSB0aGF0IGVpdGhlciBpc24ndCBtYXBwZWQsIG9yIGlzIHByb3ZpZGVkIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtIGluIGEgc2ltdWxhdGVkIHdheSBmb3IgYSBkZXZpY2UgdGhhdCBkb2Vzbid0IHBoeXNpY2FsbHkgZXhpc3QuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgU3l6a2FsbGVyICpkb2VzKiBoYXZlIGBzeXpfcGNpX2RldmljZV9hZGRgLCB3aGljaCBhbGxvd3MgdXMgdG8gZW11bGF0ZSBQQ0kgZGV2aWNlcy4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGl0IGVtdWxhdGUgYW4gYHJ0YXNlYCBkZXZpY2Ugc3BlY2lmaWNhbGx5PyBObywgaXQncyBwcmV0dHkgZ2VuZXJpYy4gU3l6a2FsbGVyJ3MgUENJIGVtdWxhdGlvbiBpcyBlaXRoZXIgcXVpdGUgYnJvYWQgb3Igc3BlY2lmaWNhbGx5IGdlYXJlZCB0b3dhcmRzIGEgc3Vic2V0IG9mIGRldmljZXMuIEl0IHdvdWxkbid0IGtub3cgYW55dGhpbmcgYWJvdXQgYSByZWdpc3RlciBsaWtlIGBSVEFTRV9UWF9DT05GSUdfMGAuXG5cbkFoLCBidXQgSSd2ZSBnb3QgYSBzbGlnaHRseSBiZXR0ZXIgaWRlYS4gU3l6a2FsbGVyIGFsbG93cyB1cyB0byBpbmplY3QgUENJIGRldmljZXMgd2l0aCBhcmJpdHJhcnkgQkFScy4gU28sIHRoZSBtZW1vcnkgcmVhZCAqc2hvdWxkKiByZXR1cm4gc29tZXRoaW5nLCBwcm9iYWJseSBhIGRlZmF1bHQgdmFsdWUgbGlrZSBgMHhmZmZmZmZmZmAsIG9yIHdoYXRldmVyIHRoZSBnZW5lcmljIFBDSSBlbXVsYXRpb24gcmV0dXJucy5cblxuSWYgdGhhdCdzIHRoZSBjYXNlLCBhbmQgd2UgKmRvKiBnZXQgYDB4ZmZmZmZmZmZgIGJhY2ssIHRoZW4gYHRwLVx1MDAzZWh3X3ZlcmAgaXMgZ29pbmcgdG8gYmUgc2V0IHRvIGBSVEFTRV9IV19WRVJfTUFTS2AuIFRoYXQncyBnb2luZyB0byBiZSBrZXkuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSB2YWx1ZSBvZiBgUlRBU0VfSFdfVkVSX01BU0tgIGFuZCB0aGUgb3RoZXIgY29uc3RhbnRzIGludm9sdmVkLiBUaGF0IHNob3VsZCBoZWxwIG1lIGZpZ3VyZSBvdXQgaG93IHRoaXMgdW5tYXBwZWQgbWVtb3J5IHJlYWQgd2lsbCBhY3R1YWxseSBiZWhhdmUsIGFuZCB3aGF0IHRoZSBjb25zZXF1ZW5jZXMgYXJlIGRvd25zdHJlYW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjowMDoyMC4wNjcyOTI2MDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTk2MDQzNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUlRBU0VfSFdfVkVSX01BU0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oLTExLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2UuaDoxMjojZGVmaW5lIFJUQVNFX0hXX1ZFUl9NQVNLICAgICAweDdDODAwMDAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oLTEzLSNkZWZpbmUgUlRBU0VfSFdfVkVSXzkwNlhfN1hBIDB4MDA4MDAwMDBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTIyODE9c3RhdGljIGludCBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZChzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yMjg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjIyODU6XFx0dHAtXFx1MDAzZWh3X3ZlciA9IHJ0YXNlX3IzMih0cCwgUlRBU0VfVFhfQ09ORklHXzApIFxcdTAwMjYgUlRBU0VfSFdfVkVSX01BU0s7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjI4Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6MjQuMjY2OTAyODQ2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2MDk4NTgwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFsdGVrIEF1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0IERyaXZlciBQcm9iZSoqXG5cbk9rYXksIHNvIGlmIHRoaXMgYHRwLVx1MDAzZWh3X3ZlcmAgcmV0dXJucyBgMHhmZmZmZmZmZmAsIHRoZW4gaXQnbGwgdHJhbnNsYXRlIHRvIGAweDdjODAwMDAwYC4gTG9va2luZyBhdCB0aGUgc3dpdGNoIGNhc2VzIGZvciB0aGUgaGFyZHdhcmUgdmVyc2lvbiwgbm9uZSBvZiB0aGVtIG1hdGNoIHRoYXQgdmFsdWUuIFRoaXMgbWVhbnMgdGhlIHByb2JlIHdpbGwgZmFpbC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgc29tZWhvdyBmdXp6IHRoaXMsIGdpdmVuIHRoYXQgZmFpbHVyZT9cblxuSSBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycy4gQ291bGQgYHZoY2lgIG9yIGB0dW5gIGJlIHJlbGV2YW50IGhlcmU/IE5vLCB0aGlzIGlzIGFuIEV0aGVybmV0IGRyaXZlciwgbm90IFVTQiBvciBuZXR3b3JraW5nLiBUaGUgb25seSByZWFsaXN0aWMgd2F5IHRvIGdldCB0byBgcnRhc2Vfc3RhcnRfeG1pdGAgaXMgYnkgc3VjY2VlZGluZyBpbiB0aGUgcHJvYmUsIGlzbid0IGl0PyBVbmxlc3MuLi53YWl0LCBkb2Vzbid0IHN5emthbGxlciBoYXZlIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcz8gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgaW50ZXJjZXB0aW5nIE1NSU8gcmVhZHMvd3JpdGVzLlxuXG5JJ20gdGhpbmtpbmcgb2YgYHN5el9rdm1fc2V0dXBfY3B1YCwgbm8gdGhhdCdzIEtWTS1zcGVjaWZpYy4gQnV0IHdoYXQgYWJvdXQgYHN5el9wY2lfZGV2aWNlX2FkZGAgdXNlZCB3aXRoIGBzeXpfcGNpX2RldmljZV9zZXR1cGA/IEJ1dCBkb2VzIHN5emthbGxlciBoYXZlIGEgZ2VuZXJpYyB3YXkgdG8gaW50ZXJjZXB0IE1NSU8gcmVhZHMgYW5kIHJldHVybiBhcmJpdHJhcnkgdmFsdWVzIGZvciBQQ0kgZGV2aWNlcz8gRXhjZXB0IHBlcmhhcHMgZm9yIEtWTSBmdXp6aW5nLCB3aGljaCBtaWdodCBkbyBpdC4gQnV0IGdlbmVyYWxseSwgUENJIGRyaXZlcnMgdGhhdCBoYXZlIHRoZXNlIGhhcmR3YXJlIGNoZWNrcyBpbiB0aGVpciBwcm9iZSBhcmUgdW5yZWFjaGFibGUgdW5sZXNzIHN5emthbGxlciBoYXMgc29tZSBzcGVjaWFsIGVtdWxhdGlvbiBmb3IgdGhlbS5cblxuV2FpdCwgaGFzbid0IHN5emthbGxlciAqcmVjZW50bHkqIGFkZGVkIGB2ZmlvYCBvciBtYXliZSBldmVuIGRpcmVjdCBQQ0kgZnV6emluZyBzdXBwb3J0IHdoZXJlIGl0IGNhbiBlbXVsYXRlIFBDSSBkZXZpY2VzIGFuZCBwcm92aWRlIGN1c3RvbSByZXNwb25zZXMgdG8gTU1JTyByZWFkcz8gVGhpcyBpcyBwcm9taXNpbmchIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiBzeXprYWxsZXIgY2FuIGVtdWxhdGUgUENJIE1NSU8uXG5cbk9rYXksIHNvIGBzeXpfcGNpX2RldmljZV9hZGRgICpkb2VzKiBjcmVhdGUgYSB2aXJ0dWFsIFBDSSBkZXZpY2UuIEJ1dCBob3cgZG9lcyBpdCBoYW5kbGUgdGhlIE1NSU8gaW50ZXJhY3Rpb25zPyBBaCwgc2ltaWxhciB0byBVU0Igd2hlcmUgd2UgaGF2ZSBgZHVtbXlgIGFuZCBgdmhjaWAsIGZvciBQQ0ksIHdlIGhhdmUgd2hhdCBpcyBjYWxsZWQgYFBDSV9ERVZgIGZ1enppbmc/XG5cbkFjdHVhbGx5LCBub3cgSSByZWNhbGwgdGhhdCBzeXprYWxsZXIgKmNhbiogZnV6eiBQQ0kgZHJpdmVycyBpZiB0aGV5IGRvbid0IGhhdmUgc3RyaW5nZW50IGhhcmR3YXJlIGNoZWNrcywgb3IgaWYgdGhvc2UgY2hlY2tzIGNhbiBiZSBieXBhc3NlZCwgT1IgaWYgc3l6a2FsbGVyIGhhcyBhIHNwZWNpZmljIGRyaXZlciBkZXNjcmlwdGlvbi4gTm93LCB0aGUgYHJ0YXNlYCBkcml2ZXIgaXMgcmVsYXRpdmVseSBuZXcg4oCTIFJlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXQuXG5cbkkgbmVlZCB0byBjaGVjayBpZiBzeXprYWxsZXIgaGFzIGFueSBzcGVjaWZpYyBkZXNjcmlwdGlvbnMgb3Iga25vd2xlZGdlIGFib3V0IHRoZSBgcnRhc2VgIGRyaXZlci4gVGhhdCB3aWxsIGJlIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1ODQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6MzMuODc2NzYzOTIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDU3NTY3NzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0YXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjAwOjM0LjUyMjUzMDgzMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzA3NzYzOTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgcnRhc2Vfc3RhcnRfeG1pdGAgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBydGFzZV9zdGFydF94bWl0YCBmdW5jdGlvbi4gVGhlIHByb21wdCBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIGhpdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXYWl0LCB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBhcmVuJ3QgZXZlbiAqaW4qIHRoZSBrZXJuZWwgc291cmNlLCB0aGV5J3JlIGluIHRoZSBzeXprYWxsZXIgcmVwbyBpdHNlbGYuIEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhhdCBoZXJlXCIuIEJ1dCwgSSBuZWVkIHRvIGZvY3VzIG9uIHdoYXQgdGhlIHByb21wdCBpcyBhY3R1YWxseSBhc2tpbmcuXG5cblNpbmNlIHRoaXMgaXMgYSBQQ0kgZHJpdmVyLCBhbmQgUUVNVSdzIGVtdWxhdGlvbiBpc24ndCBsaWtlbHkgdG8gY292ZXIgYSBcIlJlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXRcIiAoYHJ0YXNlYCksIGl0J3MgcHJvYmFibHkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIExldCBtZSB2ZXJpZnkuIEkgY2FuJ3QgY2hlY2sgUUVNVSdzIHNvdXJjZSByaWdodCBub3csIGJ1dCBJIGNhbiBzZWUgaWYgdGhlcmUncyAqYW55KiBmb3JtIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgYHJ0YXNlYCB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYuIE5vcGUsIG5vdGhpbmcuXG5cblNvLCBob3cgY291bGQgd2UgKnBvc3NpYmx5KiBoaXQgYHJ0YXNlX3N0YXJ0X3htaXRgIHdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlPyBJZiB0aGUgZGV2aWNlIHByb2JlIGZhaWxzLCB0aGUgbmV0ZGV2aWNlIHdvbid0IGJlIHJlZ2lzdGVyZWQsIHNvIHRoYXQgZnVuY3Rpb24gaXMgdW5yZWFjaGFibGUuIEFuZCwgZ2l2ZW4gdGhhdCBgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRgIHJlYWRzIGZyb20gTU1JTyBhbmQgZGVwZW5kcyBvbiBhIHNwZWNpZmljIHZhbHVlLCB3aGljaCBubyBoYXJkd2FyZSBvciBlbXVsYXRvciBpcyBsaWtlbHkgdG8gcHJvdmlkZSwgdGhlIHByb2JlIHdpbGwgKmFsd2F5cyogZmFpbC5cblxuQnV0IHdhaXQsIHdoYXQgaWYgc29tZW9uZSBnb3QgY2xldmVyIGFuZCBjb3VsZCB3cml0ZSB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgdG8gbWFwIHRoZSBCQVIgdG8gbWVtb3J5IHRoZXkgY29udHJvbD8gSWYgYSB1c2VyIGNvdWxkIG1hcCB0aGUgQkFSIHRvIGEgc2hhcmVkIG1lbW9yeSByZWdpb24sIHRoZXkgY291bGQgcG90ZW50aWFsbHkgY29udHJvbCB0aG9zZSBNTUlPIHJlYWRzLiBIb3dldmVyLCB0aGUga2VybmVsIHVzZXMgYHBjaV9pb21hcGAgb3IgYHBjaW1faW9tYXBgIHRvIG1hcCB0aGUgQkFSLCBtYXBwaW5nIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGludG8gKmtlcm5lbCogdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxuXG5Ob3csIG15IG1pbmQgc3RhcnRzIHJhY2luZyB0byBob3cgc3l6a2FsbGVyIG1pZ2h0IGJlIGludm9sdmVkLiBJcyB0aGlzIGEgdmlydHVhbCBkZXZpY2UgY3JlYXRlZCBieSBgc3l6X3BjaV9kZXZpY2VfYWRkYD8gRG9lcyBpdCB1c2UgYHZmaW9gIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBBY3R1YWxseSBuby4gYHN5el9wY2lfZGV2aWNlX2FkZGAgdXNlcyBhIHRlc3QgbW9kdWxlIG9yIHNvbWV0aGluZywgYW5kIHN5emthbGxlciAqZG9lc24ndCogaGF2ZSBhIGdlbmVyaWMgUENJIGVtdWxhdG9yIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gVGhlbiBJIHJlbWVtYmVyLCB0aGVyZSdzIGBDT05GSUdfUENJX0RFQlVHYCwgbWF5YmUgc29tZXRoaW5nIHRoZXJlPyBOby4gU3l6a2FsbGVyIGltcGxlbWVudHMgYHN5el9wY2lfZGV2aWNlX2FkZGAgaW4gdGhlIGV4ZWN1dG9yLiBCdXQsIGhvdyBkb2VzIHRoYXQgZXZlbiB3b3JrPyBJdCdzIGxpa2UgYC9kZXYvdmhjaWAgZm9yIFVTQi4gRm9yIFBDSSwgZG9lcyBpdCB1c2UgS1ZNIHRvIGludGVyY2VwdCBNTUlPPyBObywgc3l6a2FsbGVyICpkb2Vzbid0KiBydW4gdGhlIGtlcm5lbCBpbiBLVk0gd2l0aCBjdXN0b20gZGV2aWNlIG1vZGVscy4gSXQgcnVucyB0aGUga2VybmVsIGluIFFFTVUuXG5cbldhaXQsIGRvZXMgc3l6a2FsbGVyIGhhdmUgYSBcImR1bW15XCIgUENJIGRldmljZSB0aGF0J3MgcHJlY29uZmlndXJlZD8gTm8uXG5cbkFjdHVhbGx5LCB0aGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHN5emthbGxlciAqY2FuJ3QqIGZ1enogKm1vc3QqIFBDSSBkcml2ZXJzIHByZWNpc2VseSBiZWNhdXNlIG9mIHRoZSBsYWNrIG9mIGhhcmR3YXJlIGVtdWxhdGlvbi5cblxuT2theSwgbGV0J3MganVzdCBkb3VibGUgY2hlY2sgb25lIG1vcmUgdGltZS4gSXMgdGhlcmUgKmFueSogb3RoZXIgY29kZSBwYXRoLCAqYW55KiB3YXkgd2hhdHNvZXZlciB0aGF0IGBydGFzZV9zdGFydF94bWl0YCBjb3VsZCBiZSBjYWxsZWQ/IE5vLCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBhc3NpZ25lZCB0byBgbmRvX3N0YXJ0X3htaXRgLlxuXG5UaGVyZWZvcmUsIHRoZSBmdW5jdGlvbiBpcyB1bnJlYWNoYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2OTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6NDcuNjAwMTc0MzI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcyMDU5OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0YXNlX3N0YXJ0X3htaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MTQ0OT1zdGF0aWMgaW50IHJ0YXNlX3htaXRfZnJhZ3Moc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmcsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xNTA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjE1MDc6c3RhdGljIG5ldGRldl90eF90IHJ0YXNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xNTA4LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MTk2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0YXNlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xOTY5LVxcdC5uZG9fc3RvcCA9IHJ0YXNlX2Nsb3NlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjE5NzA6XFx0Lm5kb19zdGFydF94bWl0ID0gcnRhc2Vfc3RhcnRfeG1pdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xOTcxLVxcdC5uZG9fc2V0X3J4X21vZGUgPSBydGFzZV9zZXRfcnhfbW9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6NTIuMTcyMjQxMDEyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NjY2Njk2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGV2ZW4gdHJpZ2dlcmVkLiBJdCdzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCBzbyBJIGluaXRpYWxseSBhc3N1bWVkIGl0J3MgdW5yZWFjaGFibGUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZS4gQnV0IHdhaXQsIGJlZm9yZSBJIGRpc21pc3MgaXQgY29tcGxldGVseSwgSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBmbGFncyBvciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG1ha2UgdGhpcyBjb2RlIGZ1enphYmxlLCBsaWtlIGEgYFdvcnRoRnV6emluZz10cnVlYCBjb25kaXRpb24gZm9yIFBDSSBkcml2ZXJzLlxuXG5BbHJpZ2h0LCB0aGUgY29udGV4dCBpcyB0aGF0IGl0J3MgaW4gYSBQQ0kgZHJpdmVyLCBhbmQgaWYgdGhlcmUncyBubyBlbXVsYXRvciwgaXQgaXMgKnByb2JhYmx5KiB1bnJlYWNoYWJsZS4gQnV0IGhvbGQgb24sIHRoZSBhdXRob3IgaXMgYHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlYC4gTm93IHRoYXQncyBpbnRlcmVzdGluZyEgRG9lcyB0aGlzIG1lYW4gc3l6a2FsbGVyIGFscmVhZHkgZm91bmQgYSBidWcgaW4gdGhpcyBjb2RlLCBvciBpdCdzIGEgcGF0Y2ggdG8gKmZpeCogYSBidWcgdGhhdCBzeXprYWxsZXIgZGlzY292ZXJlZD9cblxuQWgsIHJpZ2h0LCBsZXQncyBsb29rIGF0IHRoZSBjb21taXQgbWVzc2FnZSBtb3JlIGNsb3NlbHkuIEl0IHNheXMgdGhpcyBpcyBhIHBhdGNoIFwidW5kZXIgcmV2aWV3LlwiIFNvLCBzeXprYWxsZXIgaXMgdHJ5aW5nIHRvIGZ1enogKnRoaXMgcGF0Y2gqIHRvIHNlZSBpZiBpdCBpbnRyb2R1Y2VzIG5ldyBpc3N1ZXMsIG9yIHRvIHZhbGlkYXRlIHRoYXQgaXQgZml4ZXMgdGhlIG9yaWdpbmFsIHByb2JsZW0uIFRoYXQgbWVhbnMuLi4gaXQgY2FuIHJlYWNoIGl0LiBJJ20gc3VyZSBJJ20gbWlzc2luZyBzb21ldGhpbmcsIGhvdyBjYW4gc3l6a2FsbGVyIHJlYWNoIGl0PyBUaGlzIHdvdWxkIGJlIGEgZ3JlYXQgb3V0Y29tZSwgc2luY2Ugc3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgcmVhY2hpbmcgdGhlIGNvZGUhXG5cbkNvdWxkIHRoZXJlIGJlIHNvbWUga2luZCBvZiBkdW1teSBQQ0kgZHJpdmVyIGZyYW1ld29yayB0aGF0IGFsbG93cyB0aGlzPyBJIHNob3VsZCBsb29rIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGlrZSBgQ09ORklHX1JUQVNFYCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IHdvdWxkIGVuYWJsZSB0aGF0IGtpbmQgb2YgYmVoYXZpb3IuIExldCdzIHNlZSBpZiB0aGVyZSdzIGEgY2x1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6NTguMTM4OTE0NzQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDIzODE3MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19SVEFTRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19SODE2OSkgKz0gcjgxNjkub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1JUQVNFKSArPSBydGFzZS9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvTWFrZWZpbGUtNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1JUQVNFKSArPSBydGFzZS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9NYWtlZmlsZS05LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjowMTowMy4xNjI3NDUzMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTMzOTY3NjY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFBDSSBEZXZpY2UgUmVhY2hhYmlsaXR5IHdpdGggU3l6a2FsbGVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IGhvdyBzeXprYWxsZXIgaGFuZGxlcyBQQ0kgZGV2aWNlcy4gSSBrbm93IHRoZXJlJ3MgYSBmZWF0dXJlLCBlaXRoZXIgXCJwc2V1ZG8gZGV2aWNlc1wiIG9yIHRoZSBhYmlsaXR5IHRvIGZ1enogUENJIGRldmljZXMgYnkgbW9ja2luZyB0aGUgUENJIGNvbmZpZyBzcGFjZS4gQWN0dWFsbHksIHRoZXJlJ3MgYHN5el9wY2lfZGV2aWNlX2FkZGAsIHdoaWNoIGxvb2tzIHByb21pc2luZy4gQnV0IGhvdyBkb2VzIGl0ICphY3R1YWxseSogaGFuZGxlIE1lbW9yeS1NYXBwZWQgSS9PIChNTUlPKT9cblxuSSBpbml0aWFsbHkgdGhvdWdodCB0aGF0IHN5emthbGxlciBtaWdodCBiZSB1c2luZyBgdmZpb2Agb3IgYSBjdXN0b20gUENJIGVtdWxhdG9yIHdpdGhpbiBRRU1VLCBvciBtYXliZSBpdCBsZXZlcmFnZXMgYEtWTWAgdG8gaW50ZXJjZXB0IE1NSU8gdmlhIGBzeXpfcGNpX2RldmljZV9hZGRgLiBIb3dldmVyLCBpdCBzZWVtcyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgIHVzZXMgYSBkdW1teSBQQ0kgZGV2aWNlIGluIFFFTVUsIHBlcmhhcHMgc29tZXRoaW5nIGxpa2UgdGhlIGBlZHVgIGRldmljZSwgb3IgbWF5YmUgaXQgdXNlcyBgUENJX1ZJUlRJT2AuXG5cblRoZW4gaXQgY2xpY2tlZDogdGhlcmUncyBhIGBwY2lgIHN1YnN5c3RlbSBmdXp6ZXIgaW4gc3l6a2FsbGVyLiBJdCBpbnRlcmNlcHRzIE1NSU8gcmVhZHMgYW5kIHdyaXRlcyB1c2luZyBLVk0hIFllcywgdGhhdCdzIGl0LiBTeXprYWxsZXIgKmNhbiogaW50ZXJjZXB0IE1NSU8gYW5kIHJldHVybiBmdXp6ZWQgdmFsdWVzLiBUaGlzIGlzIGtleS5cblxuSWYgc3l6a2FsbGVyIGNhbiBpbnRlcmNlcHQgTU1JTywgdGhlbiB0aGUga2VybmVsIGRyaXZlciBjYW4gcmVhZCBmcm9tIGBydGFzZV9yMzIodHAsIFJUQVNFX1RYX0NPTkZJR18wKWAgYW5kIHBvdGVudGlhbGx5IGdldCBgUlRBU0VfSFdfVkVSXzkwNlhfN1hBYCAoMHgwMDgwMDAwMCkgaWYgdGhlIGZ1enplciBnZXRzIGx1Y2t5IG9yIGhhcyBpdCBpbiBpdHMgZGljdGlvbmFyeS4gVGhpcyBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLlxuXG5JZiBzeXprYWxsZXIgY2FuIGluZGVlZCBmdXp6IFBDSSBkZXZpY2VzIHRoaXMgd2F5LCAqYW55KiBQQ0kgZHJpdmVyIHNob3VsZCBiZSByZWFjaGFibGUsIHJpZ2h0PyBMZXQgbWUgY29uZmlybSB0aGF0LiBZZXMsIGBzeXpfcGNpX2RldmljZV9hZGRgIGFuZCBNTUlPIGludGVyY2VwdGlvbiBhcmUgdGhlIGNyaXRpY2FsIGNvbXBvbmVudHMgaGVyZS5cblxuTm93LCB0aGUgcHJvbXB0J3MgY29uZGl0aW9uIGNvbWVzIGludG8gcGxheTogXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVGhpcyBpcyBhIGNydWNpYWwgY29uc3RyYWludC4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgKmltcG9zc2libGUqIGZvciBzeXprYWxsZXIgdG8gcmVhY2ggdGhlc2UgY29kZSBwYXRocy5cblxuSWYgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIFBDSSBNTUlPLCBpdCdzICpwb3NzaWJsZSouIFNvLCB0aGUgcXVlc3Rpb24gaGluZ2VzIG9uIHdoZXRoZXIgc3l6a2FsbGVyIGFjdHVhbGx5IGVtdWxhdGVzIFBDSSBNTUlPLlxuXG5MZXQgbWUgcmVzZWFyY2ggYSBiaXQgYW5kIGNoZWNrIGZvciBleGFtcGxlcyBvZiBQQ0kgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgYnkgc2VhcmNoaW5nIGZvciBzeXprYWxsZXIgY29kZS4gT2theSwgSSBzZWUgdGhhdCBgc3l6X3BjaV9kZXZpY2VfYWRkYCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZXhlY3V0b3IsIG5vdCBkaXJlY3RseSBpbiB0aGUga2VybmVsIGl0c2VsZi4gSXQgdXNlcyBgL2Rldi92ZmlvYCBvciBzb21ldGhpbmc/IE5vcGUsIGl0IGxldmVyYWdlcyBgS1ZNX1JVTmAgdG8gcnVuIHRoZSBrZXJuZWwsIGFuZCB0aGVuIGl0IGludGVyY2VwdHMgTU1JTyBleGl0cy4gVGhpcyBtZWFucyBzeXprYWxsZXIgKmRvZXNuJ3QqIHJ1biB0aGUga2VybmVsOyBRRU1VIGRvZXMuIFRoZSBzeXprYWxsZXIgZXhlY3V0b3IgcnVucyAqaW5zaWRlKiB0aGUgVk0uXG5cblRoaXMgcmFpc2VzIHRoZSBrZXkgcXVlc3Rpb246IGhvdyBkb2VzIGEgdXNlci1zcGFjZSBwcm9jZXNzICppbnNpZGUqIHRoZSBWTSBpbnRlcmNlcHQgTU1JTyByZWFkcyBvZiBhIGtlcm5lbCBkcml2ZXI/IEl0IGNhbid0LCB1bmxlc3MgdGhlcmUgaXMgYSBzcGVjaWZpYyBkcml2ZXIgZm9yIGl0IChsaWtlIGBkdW1teV9oY2RgIGZvciBVU0IsIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmkpLiBTbywgaXQgbmVlZHMgYSBzcGVjaWZpYyBkcml2ZXIgb3IgYXBwcm9hY2guXG5cbkFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhIGR1bW15IFBDSSBkcml2ZXIgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNzUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDE6MTQuNTAyNDI0ODA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTM0MjY4NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR1bW15LipwY2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jPTEwOD1zdGF0aWMgaW50IF9faW5pdCByYzMyNDM0X3BjaWJyaWRnZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTEwLVxcdHVuc2lnbmVkIGludCBwY2ljdmFsdWUsIHBjaWNkYXRhID0gMDtcXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmM6MTExOlxcdHVuc2lnbmVkIGludCBkdW1teXJlYWQsIHBjaWNudGx2YWw7XFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTExMi1cXHRpbnQgbG9vcENvdW50O1xcbi0tXFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE2MC1cXHQgICAgKCgoU0laRV8yNTZNQiBcXHUwMDI2IDB4MWYpIFxcdTAwM2NcXHUwMDNjIFBDSV9MQkFDX1NJWkVfQklUKSB8IFBDSV9FTkRJQU5fRkxBRyk7XFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jOjE2MTpcXHRkdW1teXJlYWQgPSByYzMyNDM0X3BjaS1cXHUwMDNlcGNpbGJhWzBdLmNvbnRyb2w7XFx0LyogZmx1c2ggdGhlIENQVSB3cml0ZSBCdWZmZXJzICovXFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE2Mi1cXHRyYzMyNDM0X3BjaS1cXHUwMDNlcGNpbGJhWzFdLmFkZHJlc3MgPSAweDYwMDAwMDAwO1xcbi0tXFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE2Ny1cXHQgICAgKCgoU0laRV8yNTZNQiBcXHUwMDI2IDB4MWYpIFxcdTAwM2NcXHUwMDNjIFBDSV9MQkFDX1NJWkVfQklUKSB8IFBDSV9FTkRJQU5fRkxBRyk7XFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jOjE2ODpcXHRkdW1teXJlYWQgPSByYzMyNDM0X3BjaS1cXHUwMDNlcGNpbGJhWzFdLmNvbnRyb2w7XFx0LyogZmx1c2ggdGhlIENQVSB3cml0ZSBCdWZmZXJzICovXFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE2OS1cXHRyYzMyNDM0X3BjaS1cXHUwMDNlcGNpbGJhWzJdLmFkZHJlc3MgPSAweDE4QzAwMDAwO1xcbi0tXFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE3NC1cXHQgICAgKCgoU0laRV80TUIgXFx1MDAyNiAweDFmKSBcXHUwMDNjXFx1MDAzYyBQQ0lfTEJBQ19TSVpFX0JJVCkgfCBQQ0lfRU5ESUFOX0ZMQUcpO1xcbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYzoxNzU6XFx0ZHVtbXlyZWFkID0gcmMzMjQzNF9wY2ktXFx1MDAzZXBjaWxiYVsyXS5jb250cm9sO1xcdC8qIGZsdXNoIHRoZSBDUFUgd3JpdGUgQnVmZmVycyAqL1xcbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYy0xNzYtXFxuLS1cXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTgyLVxcdCAgICAgUENJX0VORElBTl9GTEFHKTtcXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmM6MTgzOlxcdGR1bW15cmVhZCA9IHJjMzI0MzRfcGNpLVxcdTAwM2VwY2lsYmFbM10uY29udHJvbDtcXHQvKiBmbHVzaCB0aGUgQ1BVIHdyaXRlIEJ1ZmZlcnMgKi9cXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTg0LVxcbi0tXFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE4Ny1cXHRcXHRyYzMyNDM0X3BjaS1cXHUwMDNlcGNpY2ZnYSA9IHBjaV9jb25maWdfYWRkcjtcXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmM6MTg4OlxcdFxcdGR1bW15cmVhZCA9IHJjMzI0MzRfcGNpLVxcdTAwM2VwY2ljZmdhO1xcbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYy0xODktXFx0XFx0cmMzMjQzNF9wY2ktXFx1MDAzZXBjaWNmZ2QgPSBrb3JpbmFfY25mZ19yZWdzW2xvb3BDb3VudF07XFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jOjE5MDpcXHRcXHRkdW1teXJlYWQgPSByYzMyNDM0X3BjaS1cXHUwMDNlcGNpY2ZnZDtcXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTkxLVxcdFxcdHBjaV9jb25maWdfYWRkciArPSA0O1xcbi0tXFxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jPTE3MjE9c3RhdGljIGludCBvY3Rlb25fcGNpZTFfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLFxcbi0tXFxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jLTE3MjYtXFxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jOjE3Mjc6c3RhdGljIGludCBvY3Rlb25fZHVtbXlfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLFxcbmFyY2gvbWlwcy9wY2kvcGNpZS1vY3Rlb24uYy0xNzI4LVxcdFxcdFxcdFxcdCAgICBpbnQgcmVnLCBpbnQgc2l6ZSwgdTMyICp2YWwpXFxuLS1cXG5hcmNoL21pcHMvcGNpL3BjaWUtb2N0ZW9uLmM9MTc3Nz1zdGF0aWMgaW50IG9jdGVvbl9wY2llMV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLFxcbi0tXFxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jLTE3ODItXFxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jOjE3ODM6c3RhdGljIGludCBvY3Rlb25fZHVtbXlfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbixcXG5hcmNoL21pcHMvcGNpL3BjaWUtb2N0ZW9uLmMtMTc4NC1cXHRcXHRcXHRcXHQgICAgIGludCByZWcsIGludCBzaXplLCB1MzIgdmFsKVxcbi0tXFxuYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jPTY0OD1zdGF0aWMgdm9pZCBwY2ljX2NsZWFyX2Nsb2NrX2lycSh2b2lkKVxcbmFyY2gvc3BhcmMva2VybmVsL3BjaWMuYy02NDkte1xcbmFyY2gvc3BhcmMva2VybmVsL3BjaWMuYzo2NTA6XFx0cGNpY190aW1lcl9kdW1teSA9IHJlYWRsKHBjaWMwLnBjaWNfcmVncytQQ0lfU1lTX0xJTUlUKTtcXG5hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMtNjUxLX1cXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnN4LmM9NjM9c3RhdGljIGNvbnN0IGNoYXIgKmNrbzJfc2Vsc1tdXFx0XFx0PSB7XFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c3guYy02NC1cXHRcXFwiZHVtbXlcXFwiLCBcXFwibW1kY19wMF9mYXN0XFxcIiwgXFxcInVzZGhjNFxcXCIsIFxcXCJ1c2RoYzFcXFwiLCBcXFwiZHVtbXlcXFwiLCBcXFwid3Jja1xcXCIsXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c3guYzo2NTpcXHRcXFwiZWNzcGlfcm9vdFxcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJ1c2RoYzNcXFwiLCBcXFwicGNpZVxcXCIsIFxcXCJhcm1cXFwiLCBcXFwiY3NpX2NvcmVcXFwiLFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnN4LmMtNjYtXFx0XFxcImRpc3BsYXlfYXhpXFxcIiwgXFxcImR1bW15XFxcIiwgXFxcIm9zY1xcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJkdW1teVxcXCIsXFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzeC5jPTcyPXN0YXRpYyBjb25zdCBjaGFyICpsdmRzX3NlbHNbXVxcdD0ge1xcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnN4LmMtNzMtXFx0XFxcImFybVxcXCIsIFxcXCJwbGwxX3N5c1xcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJwbGw1X3ZpZGVvX2RpdlxcXCIsXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c3guYzo3NDpcXHRcXFwiZHVtbXlcXFwiLCBcXFwiZHVtbXlcXFwiLCBcXFwicGNpZV9yZWZfMTI1bVxcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJ1c2JwaHkxXFxcIiwgXFxcInVzYnBoeTJcXFwiLFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnN4LmMtNzUtfTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NvYzI0LmM9MjY4PXN0YXRpYyB1aW50NjRfdCBzb2MyNF9nZXRfcGNpZV9yZXBsYXlfY291bnQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zb2MyNC5jLTI3MC1cXHQvKiBUT0RPXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvc29jMjQuYzoyNzE6XFx0ICogZHVtbXkgaW1wbGVtZW50IGZvciBwY2llX3JlcGxheV9jb3VudCBzeXNmcyBpbnRlcmZhY2VcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zb2MyNC5jLTI3Mi1cXHQgKiAqL1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTM3Mi1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0Lmg6MzczOi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkwX3BjaWVkdW1teV9jZmdkZWNcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0LmgtMzc0LSNkZWZpbmUgY2ZnTkJfUENJRURVTU1ZMF8wX0RFVklDRV9WRU5ET1JfSURfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0LmgtMzgwLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaDozODE6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTFfcGNpZWR1bW15X2NmZ2RlY1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0zODItI2RlZmluZSBjZmdOQl9QQ0lFRFVNTVkxXzBfREVWSUNFX1ZFTkRPUl9JRF9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0xMDAwNC1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0Lmg6MTAwMDU6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTBfcGNpZWR1bW15X2NmZ2RlY1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0xMDAwNi0jZGVmaW5lIHNtbk5CX1BDSUVEVU1NWTBfMV9ERVZJQ0VfVkVORE9SX0lEX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTEwMDEyLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaDoxMDAxMzovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MV9wY2llZHVtbXlfY2ZnZGVjXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTEwMDE0LSNkZWZpbmUgc21uTkJfUENJRURVTU1ZMV8xX0RFVklDRV9WRU5ET1JfSURfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0LmgtMTExMjktXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oOjExMTMwOi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkwX3BjaWVkdW1teV9jZmdkZWNcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0LmgtMTExMzEtI2RlZmluZSBzbW5OQl9QQ0lFRFVNTVkwXzJfREVWSUNFX1ZFTkRPUl9JRF9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0xMjM0MS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0Lmg6MTIzNDI6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTFfcGNpZWR1bW15X2NmZ2RlY1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0xMjM0My0jZGVmaW5lIHNtbk5CX1BDSUVEVU1NWTFfMl9ERVZJQ0VfVkVORE9SX0lEX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfb2Zmc2V0LmgtMzc3LVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX29mZnNldC5oOjM3ODovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MF9wY2llZHVtbXlfY2ZnZGVjXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfb2Zmc2V0LmgtMzc5LS8vIGJhc2UgYWRkcmVzczogMHgwXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9vZmZzZXQuaC0zODYtXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfb2Zmc2V0Lmg6Mzg3Oi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkxX3BjaWVkdW1teV9jZmdkZWNcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9vZmZzZXQuaC0zODgtLy8gYmFzZSBhZGRyZXNzOiAweDBcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaC0yOTc2LVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaDoyOTc3Oi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkwX3BjaWVkdW1teV9jZmdkZWNcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtMjk3OC0vL05CX1BDSUVEVU1NWTBfMF9ERVZJQ0VfVkVORE9SX0lEXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtMzAwMi1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmg6MzAwMzovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MV9wY2llZHVtbXlfY2ZnZGVjXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oLTMwMDQtLy9OQl9QQ0lFRFVNTVkxXzBfREVWSUNFX1ZFTkRPUl9JRFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oLTgyMTk4LVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaDo4MjE5OTovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MF9wY2llZHVtbXlfY2ZnZGVjXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oLTgyMjAwLS8vTkJfUENJRURVTU1ZMF8xX0RFVklDRV9WRU5ET1JfSURcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaC04MjIyNC1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmg6ODIyMjU6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTFfcGNpZWR1bW15X2NmZ2RlY1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaC04MjIyNi0vL05CX1BDSUVEVU1NWTFfMV9ERVZJQ0VfVkVORE9SX0lEXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtODg1MDEtXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oOjg4NTAyOi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkwX3BjaWVkdW1teV9jZmdkZWNcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtODg1MDMtLy9OQl9QQ0lFRFVNTVkwXzJfREVWSUNFX1ZFTkRPUl9JRFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oLTEwMTQzNS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmg6MTAxNDM2Oi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkxX3BjaWVkdW1teV9jZmdkZWNcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtMTAxNDM3LS8vTkJfUENJRURVTU1ZMV8yX0RFVklDRV9WRU5ET1JfSURcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18yXzBfc2hfbWFzay5oLTMyNTItXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzJfMF9zaF9tYXNrLmg6MzI1MzovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MF9wY2llZHVtbXlfY2ZnZGVjXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzJfMF9zaF9tYXNrLmgtMzI1NC1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMl8wX3NoX21hc2suaC0zMjU1LVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18yXzBfc2hfbWFzay5oOjMyNTY6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTFfcGNpZWR1bW15X2NmZ2RlY1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18yXzBfc2hfbWFzay5oLTMyNTctXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMl8wX3NoX21hc2suaC0xMDg5ODYtXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzJfMF9zaF9tYXNrLmg6MTA4OTg3Oi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkwX3BjaWVkdW1teV9jZmdkZWNcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMl8wX3NoX21hc2suaC0xMDg5ODgtXFxuLS1cXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jPTQwND1zdGF0aWMgaW50IHNpczYzMF9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqc2lzNjMwX2RldilcXG4tLVxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMtNDEzLVxcdGZvciAoaSA9IDA7IHN1cHBvcnRlZFtpXSBcXHUwMDNlIDA7IGkrKykge1xcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmM6NDE0OlxcdFxcdGR1bW15ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9TSSwgc3VwcG9ydGVkW2ldLCBkdW1teSk7XFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYy00MTUtXFx0XFx0aWYgKGR1bW15KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYz00MTA9c3RhdGljIGludCBvdHgyX3RjX3BhcnNlX2FjdGlvbnMoc3RydWN0IG90eDJfbmljICpuaWMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jLTUxNC1cXHRcXHRcXHRwcml2ID0gbmV0ZGV2X3ByaXYodGFyZ2V0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jOjUxNTpcXHRcXHRcXHRkdW1teV9ncnBfdXBkYXRlX3JlcS5wY2lmdW5jW251bV9pbnRmXSA9IHByaXYtXFx1MDAzZXBjaWZ1bmM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYy01MTYtXFx0XFx0XFx0ZHVtbXlfZ3JwX3VwZGF0ZV9yZXEuY2hhbm5lbFtudW1faW50Zl0gPSBwcml2LVxcdTAwM2Vody50eF9jaGFuX2Jhc2U7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmM9MzgwMD1pd2xfdHJhbnNfcGNpZV9hbGxvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYy0zODc4LVxcdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYzozODc5OlxcdHRyYW5zX3BjaWUtXFx1MDAzZW5hcGlfZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KHNpemVvZihzdHJ1Y3QgaXdsX3RyYW5zX3BjaWUgKikpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYy0zODgwLVxcdGlmICghdHJhbnNfcGNpZS1cXHUwMDNlbmFwaV9kZXYpIHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2h3aS5jPTIxMTQ9aW50IGJueDJmY19zZXR1cF9md19yZXNjKHN0cnVjdCBibngyZmNfaGJhICpoYmEpXFxuLS1cXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYy0yMTQ5LVxcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2h3aS5jOjIxNTA6XFx0aGJhLVxcdTAwM2VkdW1teV9idWZmZXIgPSBkbWFfYWxsb2NfY29oZXJlbnQoXFx1MDAyNmhiYS1cXHUwMDNlcGNpZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaHdpLmMtMjE1MS1cXHRcXHRcXHRcXHRcXHQgICAgICAgUEFHRV9TSVpFLCBcXHUwMDI2aGJhLVxcdTAwM2VkdW1teV9idWZfZG1hLFxcbi0tXFxuZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmM9NTIzPXN0YXRpYyBpbnQgYm54Mmlfc2V0dXBfbXBfYmR0KHN0cnVjdCBibngyaV9oYmEgKmhiYSlcXG4tLVxcbmRyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jLTUzNi1cXG5kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYzo1Mzc6XFx0aGJhLVxcdTAwM2VkdW1teV9idWZmZXIgPSBkbWFfYWxsb2NfY29oZXJlbnQoXFx1MDAyNmhiYS1cXHUwMDNlcGNpZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMtNTM4LVxcdFxcdFxcdFxcdFxcdCAgICAgICBDTklDX1BBR0VfU0laRSxcXG4tLVxcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYz0yNzM9c3RhdGljIHZvaWQgc25kX2ljZTE3MTJfc2V0X2dwaW9fZGlyKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBpbnQgZGF0YSlcXG4tLVxcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYy0yNzUtXFx0c25kX2ljZTE3MTJfd3JpdGUoaWNlLCBJQ0UxNzEyX0lSRUdfR1BJT19ESVJFQ1RJT04sIGRhdGEpO1xcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYzoyNzY6XFx0aW5iKElDRVJFRyhpY2UsIERBVEEpKTsgLyogZHVtbXkgcmVhZCBmb3IgcGNpLXBvc3RpbmcgKi9cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMtMjc3LX1cXG4tLVxcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYz0yODk9c3RhdGljIHZvaWQgc25kX2ljZTE3MTJfc2V0X2dwaW9fbWFzayhzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdW5zaWduZWQgaW50IGRhdGEpXFxuLS1cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMtMjkxLVxcdHNuZF9pY2UxNzEyX3dyaXRlKGljZSwgSUNFMTcxMl9JUkVHX0dQSU9fV1JJVEVfTUFTSywgZGF0YSk7XFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jOjI5MjpcXHRpbmIoSUNFUkVHKGljZSwgREFUQSkpOyAvKiBkdW1teSByZWFkIGZvciBwY2ktcG9zdGluZyAqL1xcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYy0yOTMtfVxcbi0tXFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jPTMwMD1zdGF0aWMgdm9pZCBzbmRfaWNlMTcxMl9zZXRfZ3Bpb19kYXRhKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBpbnQgdmFsKVxcbi0tXFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jLTMwMi1cXHRzbmRfaWNlMTcxMl93cml0ZShpY2UsIElDRTE3MTJfSVJFR19HUElPX0RBVEEsIHZhbCk7XFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jOjMwMzpcXHRpbmIoSUNFUkVHKGljZSwgREFUQSkpOyAvKiBkdW1teSByZWFkIGZvciBwY2ktcG9zdGluZyAqL1xcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYy0zMDQtfVxcbi0tXFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jPTE2Nz1zdGF0aWMgdm9pZCBzbmRfdnQxNzI0X3NldF9ncGlvX2RpcihzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdW5zaWduZWQgaW50IGRhdGEpXFxuLS1cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMTY5LVxcdG91dGwoZGF0YSwgSUNFUkVHMTcyNChpY2UsIEdQSU9fRElSRUNUSU9OKSk7XFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jOjE3MDpcXHRpbncoSUNFUkVHMTcyNChpY2UsIEdQSU9fRElSRUNUSU9OKSk7IC8qIGR1bW15IHJlYWQgZm9yIHBjaS1wb3N0aW5nICovXFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jLTE3MS19XFxuLS1cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmM9MTgwPXN0YXRpYyB2b2lkIHNuZF92dDE3MjRfc2V0X2dwaW9fbWFzayhzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdW5zaWduZWQgaW50IGRhdGEpXFxuLS1cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMTg0LVxcdFxcdG91dGIoKGRhdGEgXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHhmZiwgSUNFUkVHMTcyNChpY2UsIEdQSU9fV1JJVEVfTUFTS18yMikpO1xcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYzoxODU6XFx0aW53KElDRVJFRzE3MjQoaWNlLCBHUElPX1dSSVRFX01BU0spKTsgLyogZHVtbXkgcmVhZCBmb3IgcGNpLXBvc3RpbmcgKi9cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMTg2LX1cXG4tLVxcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYz0xOTk9c3RhdGljIHZvaWQgc25kX3Z0MTcyNF9zZXRfZ3Bpb19kYXRhKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBpbnQgZGF0YSlcXG4tLVxcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYy0yMDMtXFx0XFx0b3V0YihkYXRhIFxcdTAwM2VcXHUwMDNlIDE2LCBJQ0VSRUcxNzI0KGljZSwgR1BJT19EQVRBXzIyKSk7XFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jOjIwNDpcXHRpbncoSUNFUkVHMTcyNChpY2UsIEdQSU9fREFUQSkpOyAvKiBkdW1teSByZWFkIGZvciBwY2ktcG9zdGluZyAqL1xcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYy0yMDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjowMToyMC42MzY2OTkyOTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc0OTM3ODAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVhY2hhYmlsaXR5IG9mIHRoZSBgcnRhc2VgIENvZGUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGlzIGBydGFzZWAgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuIEZpcnN0LCBpdCBzZWVtcyBsaWtlIHRoZXJlIGlzbid0IHNvbWUgZ2VuZXJpYyBkdW1teSBQQ0kgZGV2aWNlIGF2YWlsYWJsZSBhcyBhIGRlZmF1bHQuIEJ1dCB3YWl0LCBJIHJlY2FsbCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSB3YXkgdG8gZnV6eiBQQ0kgZGV2aWNlcy4gSG93IGRvZXMgaXQgd29yaz9cblxuSSByZW1lbWJlciBgc3l6X3BjaV9kZXZpY2VfYWRkYCBhbmQgc3RhcnRlZCBkb3duIHRoZSByb3V0ZSB0aGlua2luZyBpdCB1c2VkIGB2ZmlvYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbWF5YmUgS1ZNLiBCdXQgbm8sIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIFN5emthbGxlciBydW5zIGluIFFFTVUsIHNvIGhvdyBkb2VzIGl0IGFkZCBhIFBDSSBkZXZpY2UgYXQgYWxsPyBEb2VzIGl0IHVzZSBgUENJX1ZJUlRJT2Agb3IgYFBDSV9FRFVgIG9yIHNvbWUgUUVNVSBwYXRjaD8gTm8sIHRoYXQgaXMgbm90IGhvdyBpdCBpcyBkb25lIGZvciBVU0IuIEZvciBVU0IgaXQgdXNlcyBgdmhjaWAsIGJ1dCBmb3IgUENJIGl0IHVzZXMgYHBjaV90ZXN0YCBvciBhIGN1c3RvbSBRRU1VIGRldmljZS5cblxuVGhlbiwgd2FpdCwgbWF5YmUgc3l6a2FsbGVyIGhhcyBhIGN1c3RvbSBRRU1VIGRldmljZSBsaWtlIGBzeXprYWxsZXItcGNpYCBvciBpcyBpdCBgdmZpby11c2VyYD8gTm8sIG5vbmUgb2YgdGhlc2Ugb3B0aW9ucyBhcmUgcmlnaHQuIFN5emthbGxlciB1c2VzIGBzeXpfcGNpX2RldmljZV9hZGRgLCB3aGljaCBpcyBpbXBsZW1lbnRlZCB2aWEgYSBjdXN0b20gUUVNVSBkZXZpY2UuIEl0IGRvZXNuJ3QgdXNlIGB2ZmlvYC4gSG1tLCBubywgaXQgZG9lcyBub3QgcmVxdWlyZSBhIGN1c3RvbSBRRU1VLlxuXG5Pa2F5LCBJJ20gZ2V0dGluZyBjbG9zZXIuIEkga25vdyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHN5el9wY2lfZGV2aWNlX2FkZGAgaXMgaW4gYGV4ZWN1dG9yL2NvbW1vbl9saW51eC5oYC4gRG9lcyBpdCB0YWxrIHRvIGAvZGV2L3ZmaW8vLi4uYD8gTm8sIEkgYW0gd3JvbmcsIGl0IHVzZXMgYG5ldGxpbmtgIHRvIHRhbGsgdG8gYSBkdW1teSBQQ0kgZHJpdmVyP1xuXG5XYWl0LCBpcyB0aGVyZSBldmVuIGEgYGR1bW15YCBQQ0kgZHJpdmVyIGluIHRoZSBrZXJuZWw/IE5vLiBUaGlzIGlzIG5vdCB0aGUgY2FzZS5cblxuT2theSwgc28gd2hhdCBpcyB0aGUgcmVhbCBhbnN3ZXIgaGVyZT8gSXQgc2VlbXMgSSBhbSBzdGFydGluZyB0byByZW1lbWJlciwgc3l6a2FsbGVyIGRvZXMgUENJIGZ1enppbmcgc3VwcG9ydCBieSBlaXRoZXIgdXNpbmcgYSBjdXN0b20gUUVNVSBkZXZpY2Ugb3IgYnkgdXNpbmcgYHZmaW9gP1xuXG5Ob3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdGhhdCBjZXJ0YWluIGNvZGUgcGF0aHMgYXJlICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gSXQgbWVudGlvbnMgdGhpbmdzIGxpa2UgdXNiIGdhZGdldCBhbmQgbWFjODAyMTFfaHdzaW0uXG5cblNvLCBpZiBpdCdzIHRydWx5IGltcG9zc2libGUsIG15IHJlc3BvbnNlIHNob3VsZCBiZSBmYWxzZS4gQnV0LCBpcyBgcnRhc2VgIHJlYWNoYWJsZT9cblxuSWYgdGhlcmUncyBubyBRRU1VIGVtdWxhdGlvbiBmb3IgYHJ0YXNlYCwgYW5kIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciBpdCwgdGhlbiBpdCdzICppbXBvc3NpYmxlKiB0byByZWFjaC4gQnV0IHdhaXQhIFdoYXQgaWYgc3l6a2FsbGVyICpjYW4qIHJlYWNoIGl0PyBUaGUgcGF0Y2ggYXV0aG9yIGlzIGxpc3RlZCBhcyBgc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLlxuXG5UaGlzIG1lYW5zIHN5emthbGxlciAqZGlkKiByZWFjaCBpdCEgSG93PyBNYXliZSBgcnRhc2VgIGlzIE5PVCBhIFBDSSBkcml2ZXI/IEkgbmVlZCB0byBjaGVjayBgcnRhc2VfaW5pdF9vbmVgIHRvIHNlZSBpZiBteSBndWVzcyBpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNzYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDE6MjkuMzg2MDgxNzI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDU4MTc3NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0YXNlX2luaXRfb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTIzNzE9c3RhdGljIHZvaWQgcnRhc2VfcmVsZWFzZV9ib2FyZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIzODgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MjM4OTpzdGF0aWMgaW50IHJ0YXNlX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIzOTAtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjU5ND1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRhc2VfcGNpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTI1OTYtXFx0LmlkX3RhYmxlID0gcnRhc2VfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyNTk3OlxcdC5wcm9iZSA9IHJ0YXNlX2luaXRfb25lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTI1OTgtXFx0LnJlbW92ZSA9IHJ0YXNlX3JlbW92ZV9vbmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjAxOjM1Ljg0NDI2NTczNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDk1ODA2NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29uc3RydWN0aW5nIHRoZSBTeXprYWxsZXIgUENJIEZ1enppbmcgTWVjaGFuaXNtKipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciB0aGF0J3MgYmVlbiB0YXJnZXRlZC4gVGhlIHF1ZXN0aW9uIGlzLCAqaG93KiBkaWQgc3l6a2FsbGVyIHJlYWNoIGl0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVyZSBtaWdodCBiZSBhIGdlbmVyaWMgUENJIGZ1enplciB3aXRoaW4gc3l6a2FsbGVyLCBzb21ldGhpbmcgdGhhdCBjYW4gZXNzZW50aWFsbHkgZW11bGF0ZSBhbnkgUENJIGRldmljZSBieSBpbnRlcmNlcHRpbmcgYW5kIGludGVycHJldGluZyBNZW1vcnktTWFwcGVkIEkvTyAoTU1JTykgb3BlcmF0aW9ucy5cblxuQWgsIHllcyEgSSB2YWd1ZWx5IHJlbWVtYmVyIHNlZWluZyBhIGBzeXpfcGNpX2RldmljZV9hZGRgIHN5c2NhbGwuIEl0IHNlZW1zIGxpa2UgdGhlIHdheSB0aGlzIHdvcmtzIGludm9sdmVzIGVpdGhlciB1c2luZyBhIGN1c3RvbSBRRU1VIGRldmljZSBvciBsZXZlcmFnaW5nIGB2ZmlvYC4gV2FpdCwgbm8uIEl0J3Mgbm90IGEgY3VzdG9tIFFFTVUgZGV2aWNlLiBUaGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gY2xlYXJseSBzaG93cyBpdCBpcyB1c2luZyBgdmZpb2AgZm9yIGl0cyBQQ0kgZW11bGF0aW9uLlxuXG5JZiBzeXprYWxsZXIgaXMgdXNpbmcgYHZmaW9gIHRvIGVtdWxhdGUgdGhlIFBDSSBkZXZpY2VzIGluIHVzZXIgc3BhY2UsIHRoZW4gdGhlIGtlcm5lbCAqdGhpbmtzKiBpdCdzIHNlZWluZyBhIHJlYWwgUENJIGRldmljZS4gVGhlIGFjdHVhbCBzeXprYWxsZXIgZXhlY3V0b3IgcHJvY2VzcyB0aGVuIGhhbmRsZXMgdGhlIE1NSU8gcmVhZHMgYW5kIHdyaXRlcy5cblxuQnV0IHdhaXQuIENhbiBgdmZpb2AgYmUgdXNlZCB0byAqZW11bGF0ZSogYSBQQ0kgZGV2aWNlICp0byB0aGUga2VybmVsKj8gTm8sIEknbSBwcmV0dHkgc3VyZSBgdmZpb2AgaXMgcHJpbWFyaWx5IGZvciBleHBvc2luZyAqcmVhbCogUENJIGRldmljZXMgdG8gdXNlciBzcGFjZSwgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBUbyB0cnVseSBtYWtlIGEgdXNlci1zcGFjZSBlbXVsYXRlZCBQQ0kgZGV2aWNlIGxvb2sgcmVhbCB0byB0aGUga2VybmVsLCB5b3UnZCBuZWVkIHNvbWV0aGluZyBsaWtlIGBtZGV2YCAobWVkaWF0ZWQgZGV2aWNlcykgb3Igc29tZSBzb3J0IG9mIGR1bW15IFBDSSBob3N0IGJyaWRnZS5cblxuRG9lcyB0aGUga2VybmVsIGV2ZW4gKmhhdmUqIGEgZHVtbXkgUENJIGhvc3QgYnJpZGdlPyBJJ2QgbmVlZCB0byBsb29rIGF0IHRoZSBQQ0kgY29udHJvbGxlciBjb2RlIGZvciB0aGF0LiBJIHNob3VsZCBjaGVjayBgZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaG9zdC1jb21tb24uY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIuXG5cbkhhbmcgb24uLi4gSSByZWNhbGwgc29tZXRoaW5nIGFib3V0IHN5emthbGxlcidzIHJlY2VudCBkZXZlbG9wbWVudHMgaW4gUENJIGZ1enppbmcuIFdhc24ndCB0aGVyZSBhIGB2aXJ0aW8tcGNpYCBmZWF0dXJlIGFkZGVkPyBOb3BlLCB3YWl0LiBJdCdzIGdlbmVyaWMgUENJIGZ1enppbmcsIG5vdCBzcGVjaWZpY2FsbHkgdmlydGlvLXBjaS4gSXQncyBnZW5lcmljLlxuXG5TbywgaG93IGlzIHN5emthbGxlciBkb2luZyB0aGlzPyBJdCBkb2Vzbid0IHVzZSBhIGN1c3RvbSBRRU1VIGRldmljZSwgc28gdGhhdCdzIG91dC4gRG9lcyBzeXprYWxsZXIgbGV2ZXJhZ2UgYSBzcGVjaWFsIGtlcm5lbCBtb2R1bGUgZm9yIFBDSSBmdXp6aW5nPyBMaWtlIGBrY292YCBvciBga3VuaXRgPyBNYXliZSBzb21ldGhpbmcgaW4gdGhlIFBDSSBkcml2ZXIgaXRzZWxmPyBJIHNob3VsZCBjaGVjayB0aGUgYGRyaXZlcnMvcGNpYCBkaXJlY3RvcnkgZm9yIGFueXRoaW5nIGxpa2UgYSBgcGNpX3Rlc3RgIG9yIGEgYGR1bW15YCBQQ0kgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU5NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjowMTo0NS4zNDAwNzgyNTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMjU4ODIzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkdW1teVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BjaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWRyYTd4eC5jPTE5MD1zdGF0aWMgaW50IGRyYTd4eF9wY2llX2ludHhfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCBpcnEsXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktZHJhN3h4LmMtMTkyLXtcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktZHJhN3h4LmM6MTkzOlxcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFxcdTAwMjZkdW1teV9pcnFfY2hpcCwgaGFuZGxlX3NpbXBsZV9pcnEpO1xcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1kcmE3eHguYy0xOTQtXFx0aXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tXFx1MDAzZWhvc3RfZGF0YSk7XFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktaW14Ni5jPTE0ODE9c3RhdGljIHZvaWQgaW14X3BjaWVfaG9zdF9wb3N0X2luaXQoc3RydWN0IGR3X3BjaWVfcnAgKnBwKVxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWlteDYuYy0xNTE1LSAqIHJlZ2lzdGVyIGlzIHJlc2VydmVkLCBzbyB0aGUgZ2VuZXJpYyBEV0MgaW1wbGVtZW50YXRpb24gb2Ygc2VuZGluZyB0aGVcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktaW14Ni5jOjE1MTY6ICogUE1FX1R1cm5fT2ZmIG1lc3NhZ2UgdXNpbmcgYSBkdW1teSBNTUlPIHdyaXRlIGNhbm5vdCBiZSB1c2VkLlxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1pbXg2LmMtMTUxNy0gKi9cXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaWUtZGVzaWdud2FyZS1ob3N0LmM9MTE4Nz1zdGF0aWMgaW50IGR3X3BjaWVfcG1lX3R1cm5fb2ZmKHN0cnVjdCBkd19wY2llICpwY2kpXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2llLWRlc2lnbndhcmUtaG9zdC5jLTEyMTQtXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpZS1kZXNpZ253YXJlLWhvc3QuYzoxMjE1OlxcdC8qIEEgZHVtbXkgd3JpdGUgaXMgY29udmVydGVkIHRvIGEgTXNnIFRMUCAqL1xcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaWUtZGVzaWdud2FyZS1ob3N0LmMtMTIxNi1cXHR3cml0ZWwoMCwgbWVtKTtcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1ob3N0LmM9ODM9c3RhdGljIHZvaWQgbW9iaXZlaWxfcGNpZV9pc3Ioc3RydWN0IGlycV9kZXNjICpkZXNjKVxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLWhvc3QuYy0xNDUtXFx0XFx0ICogZnJvbSBNU0kgaGFyZHdhcmUgRklGTy4gU28ga2VlcGluZyB0aGVzZSBmb2xsb3dpbmdcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwtaG9zdC5jOjE0NjpcXHRcXHQgKiB0d28gZHVtbXkgcmVhZHMuXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLWhvc3QuYy0xNDctXFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYz0xNzUxPXN0YXRpYyB1MzIgaHZfY29tcG9zZV9tc2lfcmVxX3YxKFxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc2MS1cXHQvKlxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE3NjI6XFx0ICogQ3JlYXRlIE1TSSB3LyBkdW1teSB2Q1BVIHNldCwgb3ZlcndyaXR0ZW4gYnkgc3Vic2VxdWVudCByZXRhcmdldCBpblxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3NjMtXFx0ICogaHZfaXJxX3VubWFzaygpLlxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc3MS0gKiBUaGUgdkNQVSBzZWxlY3RlZCBieSBodl9jb21wb3NlX211bHRpX21zaV9yZXFfZ2V0X2NwdSgpIGFuZFxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE3NzI6ICogaHZfY29tcG9zZV9tc2lfcmVxX2dldF9jcHUoKSBpcyBhIFxcXCJkdW1teVxcXCIgdkNQVSBiZWNhdXNlIHRoZSBmaW5hbCB2Q1BVIHRvIGJlXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc3My0gKiBpbnRlcnJ1cHRlZCBpcyBzcGVjaWZpZWQgbGF0ZXIgaW4gaHZfaXJxX3VubWFzaygpIGFuZCBjb21tdW5pY2F0ZWQgdG8gSHlwZXItVlxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE3NzQ6ICogdmlhIHRoZSBIVkNBTExfUkVUQVJHRVRfSU5URVJSVVBUIGh5cGVyY2FsbC4gQnV0IHRoZSBjaG9pY2Ugb2YgZHVtbXkgdkNQVSBpc1xcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3NzUtICogbm90IGlycmVsZXZhbnQgYmVjYXVzZSBIeXBlci1WIGNob29zZXMgdGhlIHBoeXNpY2FsIENQVSB0byBoYW5kbGUgdGhlXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xNzc4LSAqIGJ1dCBhc3NpZ25pbmcgdG9vIG1hbnkgdlBDSSBkZXZpY2UgaW50ZXJydXB0cyB0byB0aGUgc2FtZSBwQ1BVIGNhbiBjYXVzZSBhXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc3OTogKiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBTbyB3ZSBzcHJlYWQgb3V0IHRoZSBkdW1teSB2Q1BVcyB0byBpbmZsdWVuY2UgSHlwZXItVlxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3ODAtICogdG8gc3ByZWFkIG91dCB0aGUgcENQVXMgdGhhdCBpdCBzZWxlY3RzLlxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc4Mi0gKiBGb3IgdGhlIHNpbmdsZS1NU0kgYW5kIE1TSS1YIGNhc2VzLCBpdCdzIE9LIGZvciBodl9jb21wb3NlX21zaV9yZXFfZ2V0X2NwdSgpXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc4MzogKiB0byBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGR1bW15IHZDUFUsIGJlY2F1c2UgYSBzZWNvbmQgY2FsbCB0b1xcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3ODQtICogaHZfY29tcG9zZV9tc2lfbXNnKCkgY29udGFpbnMgdGhlIFxcXCJyZWFsXFxcIiB2Q1BVLCBjYXVzaW5nIEh5cGVyLVYgdG8gY2hvb3NlIGFcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3ODYtICogaHZfY29tcG9zZV9tc2lfbXNnKCkgZXhpdHMgd2l0aG91dCBzZW5kaW5nIGEgbWVzc2FnZSB0byB0aGUgdlBDSSBWU1AsIHNvIHRoZVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE3ODc6ICogb3JpZ2luYWwgZHVtbXkgdkNQVSBpcyB1c2VkLiBUaGlzIGR1bW15IHZDUFUgbXVzdCBiZSByb3VuZC1yb2JpbidlZCBzbyB0aGF0XFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc4OC0gKiB0aGUgcENQVXMgYXJlIHNwcmVhZCBvdXQuIEFsbCBpbnRlcnJ1cHRzIGZvciBhIG11bHRpLU1TSSBkZXZpY2UgZW5kIHVwIHVzaW5nXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xNzk0LSAqIGVuaGFuY2VtZW50IGlzIHBsYW5uZWQgZm9yIGEgZnV0dXJlIHZlcnNpb24uIFdpdGggdGhhdCBlbmhhbmNlbWVudCwgdGhlXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc5NTogKiBkdW1teSB2Q1BVIHNlbGVjdGlvbiB3b24ndCBtYXR0ZXIsIGFuZCBpbnRlcnJ1cHRzIGZvciB0aGUgc2FtZSBtdWx0aS1NU0lcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xNzk2LSAqIGRldmljZSB3aWxsIGJlIHNwcmVhZCBhY3Jvc3MgbXVsdGlwbGUgcENQVXMuXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xNzk5LS8qXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTgwMDogKiBDcmVhdGUgTVNJIHcvIGR1bW15IHZDUFUgc2V0IHRhcmdldGluZyBqdXN0IG9uZSB2Q1BVLCBvdmVyd3JpdHRlblxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE4MDEtICogYnkgc3Vic2VxdWVudCByZXRhcmdldCBpbiBodl9pcnFfdW5tYXNrKCkuXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYz0xODAzPXN0YXRpYyBpbnQgaHZfY29tcG9zZV9tc2lfcmVxX2dldF9jcHUoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5KVxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTgwOC0vKlxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE4MDk6ICogTWFrZSBzdXJlIHRoZSBkdW1teSB2Q1BVIHZhbHVlcyBmb3IgbXVsdGktTVNJIGRvbid0IGFsbCBwb2ludCB0byB2Q1BVMC5cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xODEwLSAqL1xcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM9MTg3NT1zdGF0aWMgdm9pZCBodl9jb21wb3NlX21zaV9tc2coc3RydWN0IGlycV9kYXRhICpkYXRhLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKVxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTk1Ni1cXHRcXHQvKlxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE5NTc6XFx0XFx0ICogVGhlIHZlY3RvciB3ZSBzZWxlY3QgaGVyZSBpcyBhIGR1bW15IHZhbHVlLiAgVGhlIGNvcnJlY3RcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xOTU4LVxcdFxcdCAqIHZhbHVlIGdldHMgc2VudCB0byB0aGUgaHlwZXJ2aXNvciBpbiB1bm1hc2soKS4gIFRoaXMgbmVlZHNcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1hbHRlcmEuYz0zNjY9c3RhdGljIHZvaWQgczEwX3RscF93cml0ZV9wYWNrZXQoc3RydWN0IGFsdGVyYV9wY2llICpwY2llLCB1MzIgKmhlYWRlcnMsXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLWFsdGVyYS5jOjM2NzpcXHRcXHRcXHRcXHQgdTMyIGRhdGEsIGJvb2wgZHVtbXkpXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLWFsdGVyYS5jLTM2OC17XFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtYWx0ZXJhLmM9Nzg2PXN0YXRpYyBpbnQgYWx0ZXJhX3BjaWVfaW50eF9tYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IGlycSxcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1hbHRlcmEuYy03ODgte1xcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1hbHRlcmEuYzo3ODk6XFx0aXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgXFx1MDAyNmR1bW15X2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7XFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLWFsdGVyYS5jLTc5MC1cXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGRvbWFpbi1cXHUwMDNlaG9zdF9kYXRhKTtcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tZWRpYXRlay5jPTU1ND1zdGF0aWMgaW50IG10a19wY2llX2ludHhfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCBpcnEsXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWsuYy01NTYte1xcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tZWRpYXRlay5jOjU1NzpcXHRpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBcXHUwMDI2ZHVtbXlfaXJxX2NoaXAsIGhhbmRsZV9zaW1wbGVfaXJxKTtcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWsuYy01NTgtXFx0aXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tXFx1MDAzZWhvc3RfZGF0YSk7XFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtcm9ja2NoaXAtZXAuYz02NTI9c3RhdGljIGludCByb2NrY2hpcF9wY2llX2VwX3NldHVwX2lycShzdHJ1Y3QgcGNpX2VwYyAqZXBjKVxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWVwLmMtNjc0LVxcdCAqIGlzIGhpZ2ggYW5kIHdpbGwgdHJpZ2dlciB0aGUgcGVyc3RfaXJxIGhhbmRsZXIuIFNvIHRyZWF0IHRoaXMgaW5pdGlhbFxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1yb2NrY2hpcC1lcC5jOjY3NTpcXHQgKiBJUlEgYXMgYSBkdW1teSBvbmUgYnkgZmFraW5nIHRoZSBob3N0IGFzc2VydGluZyBQRVJTVCMuXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWVwLmMtNjc2LVxcdCAqL1xcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYz02Njk9c3RhdGljIGludCByb2NrY2hpcF9wY2llX2ludHhfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCBpcnEsXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtcm9ja2NoaXAtaG9zdC5jLTY3MS17XFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYzo2NzI6XFx0aXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgXFx1MDAyNmR1bW15X2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7XFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYy02NzMtXFx0aXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tXFx1MDAzZWhvc3RfZGF0YSk7XFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUteGlsaW54LmM9MzIxPXN0YXRpYyBpbnQgeGlsaW54X3BjaWVfaW50eF9tYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IGlycSxcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS14aWxpbnguYy0zMjMte1xcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS14aWxpbnguYzozMjQ6XFx0aXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgXFx1MDAyNmR1bW15X2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7XFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXhpbGlueC5jLTMyNS1cXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGRvbWFpbi1cXHUwMDNlaG9zdF9kYXRhKTtcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYz0xMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfZGV2aWNlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTc1LVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxNzY6XFx0LyogZHJpdmVyX292ZXJyaWRlIHdpbGwgYWx3YXlzIG1hdGNoLCBzZW5kIGEgZHVtbXkgaWQgKi9cXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTc3LVxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbi0tXFxuZHJpdmVycy9wY2kvcHdyY3RybC9wY2ktcHdyY3RybC10Yzk1NjMuYz01MzQ9c3RhdGljIGludCB0Yzk1NjNfcHdyY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9wY2kvcHdyY3RybC9wY2ktcHdyY3RybC10Yzk1NjMuYy01NTYtXFxuZHJpdmVycy9wY2kvcHdyY3RybC9wY2ktcHdyY3RybC10Yzk1NjMuYzo1NTc6XFx0dGM5NTYzLVxcdTAwM2VjbGllbnQgPSBpMmNfbmV3X2R1bW15X2RldmljZSh0Yzk1NjMtXFx1MDAzZWFkYXB0ZXIsIGFkZHIpO1xcbmRyaXZlcnMvcGNpL3B3cmN0cmwvcGNpLXB3cmN0cmwtdGM5NTYzLmMtNTU4LVxcdGlmIChJU19FUlIodGM5NTYzLVxcdTAwM2VjbGllbnQpKSB7XFxuLS1cXG5kcml2ZXJzL3BjaS9zZXR1cC1idXMuYz01Nzc9c3RhdGljIHZvaWQgX19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxuZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMtNjA1LVxcdExJU1RfSEVBRChsb2NhbF9mYWlsX2hlYWQpO1xcbmRyaXZlcnMvcGNpL3NldHVwLWJ1cy5jOjYwNjpcXHRMSVNUX0hFQUQoZHVtbXlfaGVhZCk7XFxuZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMtNjA3LVxcdHN0cnVjdCBwY2lfZGV2X3Jlc291cmNlICpzYXZlX3JlcztcXG4tLVxcbmRyaXZlcnMvcGNpL3NldHVwLWJ1cy5jLTYxNC1cXHRpZiAoIXJlYWxsb2NfaGVhZClcXG5kcml2ZXJzL3BjaS9zZXR1cC1idXMuYzo2MTU6XFx0XFx0cmVhbGxvY19oZWFkID0gXFx1MDAyNmR1bW15X2hlYWQ7XFxuZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMtNjE2LVxcbi0tXFxuZHJpdmVycy9wY2kvdmdhYXJiLmM9MTY3PWludCB2Z2FfcmVtb3ZlX3ZnYWNvbihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGNpL3ZnYWFyYi5jLTE3Ni1cXHRpZiAoY29uX2lzX2JvdW5kKFxcdTAwMjZ2Z2FfY29uKSlcXG5kcml2ZXJzL3BjaS92Z2FhcmIuYzoxNzc6XFx0XFx0cmV0ID0gZG9fdGFrZV9vdmVyX2NvbnNvbGUoXFx1MDAyNmR1bW15X2NvbiwgMCxcXG5kcml2ZXJzL3BjaS92Z2FhcmIuYy0xNzgtXFx0XFx0XFx0XFx0XFx0ICAgTUFYX05SX0NPTlNPTEVTIC0gMSwgMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjAxOjQ1Ljk3MjY3MjgxMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDQ5MjM4ODk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgVW5yZWFjaGFibGU6IEEgUENJIERyaXZlciBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gcHJlc2VudGVkIHdpdGggdGhpcyBQQ0kgZHJpdmVyLCBgcnRhc2VgLCBhbmQgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgaXRzIGNvcmUgZnVuY3Rpb24gYHJ0YXNlX3N0YXJ0X3htaXRgIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc21pc3MgdGhpcyBvdXRyaWdodCDigJMgbm8gZ2VuZXJpYyBQQ0kgZHVtbXkgZHJpdmVyIGV4aXN0cywgd2hpY2ggd291bGQgYmUgdGhlIGVhc2llc3Qgd2F5IHRvIGV4cG9zZSBpdCBpbiBhIHRlc3Qgc2V0dXAuIEJ1dCB0aGUgc2l0dWF0aW9uJ3MgYSBsaXR0bGUgbW9yZSBjb21wbGljYXRlZC5cblxuVGhlIHByZXNlbmNlIG9mIGBzeXpfcGNpX2RldmljZV9hZGRgIGluIHN5emthbGxlciB0aHJvd3MgYSB3cmVuY2ggaW4gdGhlIHdvcmtzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIEtWTSwgYnV0IHRoYXTigJlzIHF1aWNrbHkgZGlzbWlzc2VkIGJlY2F1c2UgdGhlIGltcGxlbWVudGF0aW9uIHNlZW1zIHRpZWQgdG8gYHBjaV90ZXN0YCBvciBgcGNpX2VuZHBvaW50YCBmcmFtZXdvcmtzLiBIb3dldmVyLCBgcGNpX2VuZHBvaW50YCBpcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uLCBub3QgZ2VuZXJhbCBQQ0kgZGV2aWNlIG1vZGVsaW5nLiBgQ09ORklHX1BDSV9TVFVCYCBpcyBmb3IgaGlkaW5nIGRldmljZXMgYW5kIFVNTCBpcyBpcnJlbGV2YW50LiBcblxuU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBzeXpfcGNpX2RldmljZV9hZGRgLiBJcyBpdCBhIHBzZXVkby1zeXNjYWxsPyBIb3cgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKmRvKiB0aGlzPyBEb2VzIGl0IHdyaXRlIHNvbWV0aGluZyB0byBgL3N5cy9idXMvcGNpL2RyaXZlcnMvLi4uYD8gTm8uIEkgcmVjYWxsIHRoYXQgc3l6a2FsbGVyIHJlY2VudGx5IGFkZGVkIGEgUENJIGZ1enplciwgYnV0IGlzIHRoYXQgcmVsZXZhbnQ/IE1heWJlIGl0J3MgYHN5emthbGxlci1wY2lgIG9yIGB2ZmlvYD8gQSBxdWljayBzZWFyY2ggaW4gdGhlIHN5emthbGxlciBzb3VyY2Ugd291bGQgYmUgaGVscGZ1bC4gQnV0IEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gaXQsIHNvIEkgbXVzdCB0aGluayBoYXJkZXIuXG5cblRoZSBrZXkgaXMgdGhhdCBzeXprYWxsZXIgZ2VuZXJhdGVkIHRoaXMgcGF0Y2gsIHdoaWNoIG1lYW5zIGl0IHByb2JhYmx5IGZvdW5kIGEgYnVnIGR1cmluZyB0ZXN0aW5nLiBJZiBzeXprYWxsZXIgZm91bmQgaXQsIGl0ICptdXN0KiBiZSByZWFjaGFibGUgc29tZWhvdy4gVGhpcyBpcyB3aGVuIEkgcmVhbGl6ZSB0aGUgcGF0Y2ggYXV0aG9yIGlzIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAsIGluZGljYXRpbmcgaXQncyBwYXJ0IG9mIHN5emthbGxlcidzIHBhdGNoIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgbWVhbnMgc3l6a2FsbGVyIGlzICp0ZXN0aW5nKiBhIHN1Ym1pdHRlZCBwYXRjaCwgbm90IG5lY2Vzc2FyaWx5IGZpbmRpbmcgYSBidWcgaXQgdHJpZ2dlcmVkIGl0c2VsZi5cblxuR2l2ZW4gdGhpcywgSSBoYXZlIHRvIGNvbnNpZGVyICpob3cqIHN5emthbGxlciBjb3VsZCByZWFjaCBpdC4gSXMgaXQgYSBVU0Igb3IgcGxhdGZvcm0gZGV2aWNlPyBObywgaXQncyBhIFBDSSBkcml2ZXIuIENvdWxkIGl0IGJlIHJlbGF0ZWQgdG8gYG1hYzgwMjExX2h3c2ltYCwgYSBcImR1bW15XCIgbmV0ZGV2aWNlLCBCUEYsIG9yIHZpcnRpbz8gSSBkaXNjYXJkIGFsbCB0aG9zZSBvcHRpb25zIGFzIHdlbGwuIFRoZW4gSSBjb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLCB3aGljaCBpdCBhZGRlZCByZWNlbnRseSwgd2l0aCBRRU1VIGludGVncmF0aW9uIG9yIHZmaW8tdXNlci4gSXQgbmVlZHMgdG8gcnVuIG9uIEdDRSB0b28sIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBjdXN0b20gUUVNVSBkZXZpY2VzLlxuXG5Db3VsZCBpdCB1c2UgYEtWTWAgdG8gaW50ZXJjZXB0IE1NSU8/IE5vLCBpdCBydW5zIGluc2lkZSB0aGUgVk0gYW5kIGNhbid0IHVzZSBhIG5lc3RlZCBoeXBlcnZpc29yIHRvIGRvIHRoaXMuIFRoYXQgbGVhdmVzIGVpdGhlciBgcGNpX3Rlc3RgIG9yIGB2ZmlvYCwgd2hpY2ggYm90aCBhcmUgcG9zc2liaWxpdGllcy4gQnV0LCBgdmZpb2AgZXhwb3NlcyBob3N0IGRldmljZXMgdG8gdXNlciBzcGFjZSwgd2hpY2ggY2FuJ3QgcG9zc2libHkgd29yay4gVGhlIGBtZGV2YCBmcmFtZXdvcmsgbWlnaHQgYmUgdXNlZnVsLCB3aGljaCBhbGxvd3MgY3JlYXRpbmcgdmlydHVhbCBkZXZpY2VzLiBBbmQgYHZpcnRpby1wY2lgIG1pZ2h0IGJlIHJlbGF0ZWQuXG5cbkJ1dCB0aGVuIEkgcmUtcmVhZCB0aGUgcHJvbXB0OiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBUaGF0J3Mgd2hhdCBJIHNob3VsZCBsb29rIGF0ISBJZiBpdCdzIGltcG9zc2libGUsIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHF1ZXN0aW9uIGlzICpjYW4qIHN5emthbGxlciByZWFjaCBpdD8gTWF5YmUgc3l6a2FsbGVyICpjYW5ub3QqIHJlYWNoIGl0LiBNYXliZSBpdCdzIHRlc3RpbmcgYSBwYXRjaCBzdWJtaXR0ZWQgYnkgYSBkZXZlbG9wZXIgdGhhdCBpdCB0ZXN0cyBhcyBhbiBhdXRvbWF0ZWQgc2VydmljZS5cblxuWWVzISBUaGUgYXV0aG9yIGluZGljYXRlcyB0aGlzIGlzIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZy4gU3l6a2FsbGVyIGlzIHRlc3RpbmcgYSBzdWJtaXR0ZWQgcGF0Y2guIEl0IGRvZXNuJ3QgbWVhbiBzeXprYWxsZXIgZm91bmQgYSBidWcgaW4gdGhpcyBzcGVjaWZpYyBjb2RlIVxuXG5HaXZlbiB0aGF0IHRoZSBkcml2ZXIgYHJ0YXNlYCBpcyBoYXJkd2FyZS1zcGVjaWZpYyAoUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCwgZnJvbSBhcm91bmQgMjAyNCksIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGl0LCB0aGVuIHN5emthbGxlciBDQU5OT1QgcmVhY2ggaXQgZHVyaW5nIGZ1enppbmcuIEkgY29uZmlybWVkIHRoaXMgYnkgc2VhcmNoaW5nIHRoZSBgbmV0L2AgZGlyZWN0b3J5IGFuZCBmaW5kaW5nIG5vIGVtdWxhdGlvbi4gVGhlIHNhbWUgZ29lcyBmb3IgUUVNVS4gUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCBpcyB2ZXJ5IG5ldy5cblxuV2l0aG91dCBhbnkgaGFyZHdhcmUgb3IgZW11bGF0aW9uLCB0aGUgYHByb2JlYCBmdW5jdGlvbiAoYHJ0YXNlX2luaXRfb25lYCkgd2lsbCBuZXZlciBmaW5kIHRoZSBkZXZpY2UuIEV2ZW4gaWYgZm9yY2VkIHRvIGJpbmQgdG8gYSBkdW1teSBQQ0kgZGV2aWNlLCBgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRgIHdvdWxkIGZhaWwgZHVlIHRvIE1NSU8gcmVhZHMsIHdoaWNoIHdpbGwgbm90IHJldHVybiBtYWdpYyB2YWx1ZXMsIGFuZCBgcnRhc2VfaW5pdF9vbmVgIHdpbGwgZmFpbC4gVGhlIG5ldGRldmljZSB3b3VsZCBuZXZlciBiZSByZWdpc3RlcmVkLCBhbmQgYHJ0YXNlX3N0YXJ0X3htaXRgIHdvdWxkIG5ldmVyIGJlIGNhbGxlZC4gVGhlcmVmb3JlLCBpdCBpcyAqaW1wb3NzaWJsZSogdG8gcmVhY2ggdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgSSdsbCBxdWlja2x5IGNoZWNrIGZvciBhbnkgYnlwYXNzZXMgb2YgYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTQwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjowMjowNi40NjUwOTA2NTNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODA1NTg5MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjI1Nz1zdGF0aWMgdm9pZCBydGFzZV9pbml0X3NvZnR3YXJlX3ZhcmlhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjI4MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyMjgxOnN0YXRpYyBpbnQgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWQoc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIyODIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjM4OT1zdGF0aWMgaW50IHJ0YXNlX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjQxNS1cXHQvKiBpZGVudGlmeSBjaGlwIGF0dGFjaGVkIHRvIGJvYXJkICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MjQxNjpcXHRyZXQgPSBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZCh0cCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjQxNy1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjAyOjExLjc0NTY1NjU5NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjUyMjc1ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgRmF1bHQgSW5qZWN0aW9uIFBvc3NpYmlsaXRpZXMqKlxuXG5GaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cy4gQ291bGQgdGhlcmUgYmUgYSBmYXVsdCBpbmplY3Rpb24gbWVjaGFuaXNtLCBhIHdheSB0byBieXBhc3MgdGhpcz8gTWF5YmUgYSBzdWJ0bGUgdGltaW5nIGF0dGFjayBvciBhIHNwZWNpZmljIGhhcmR3YXJlIGNvbmRpdGlvbj8gSG1tLCBubywgaXQgbG9va3MgbGlrZSB0aGUgY29kZSBqdXN0IHJldHVybnMgYC1FTk9ERVZgIGlmIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGRvZXNuJ3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHZhbHVlLiBTbywgbm8gaW1tZWRpYXRlIGJ5cGFzcyB0aGVyZS4gVGhhdCdzIGdvb2QsIGxlc3MgdG8gd29ycnkgYWJvdXQuXG5cbk5vdywgYSBtb3JlIGludGVyZXN0aW5nIHF1ZXN0aW9uOiBjYW4gSSBsZXZlcmFnZSBzeXprYWxsZXIgaGVyZT8gQ291bGQgc3l6a2FsbGVyIHBvdGVudGlhbGx5IG1vY2sgb3IgZW11bGF0ZSB0aGUgYHJ0YXNlX3IzMmAgZnVuY3Rpb24/IElmIEkgY291bGQgZ2V0IHN5emthbGxlciB0byByZXNwb25kIGFzIGlmIHRoYXQgZnVuY3Rpb24gY2FsbCB3ZXJlIHN1Y2Nlc3NmdWwsIEkgbWlnaHQgYmUgYWJsZSB0byB0cmlnZ2VyIHNvbWUgaW50ZXJlc3RpbmcgYmVoYXZpb3IgZG93biB0aGUgbGluZS4gVGhhdCdzIHRoZSBhbmdsZSBJJ2xsIG5lZWQgdG8gZXhwbG9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4NzgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjowMjoxNS4zOTc5NjU3MDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTg3MTMyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRhc2VfcjMyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTEyNT1zdGF0aWMgdTE2IHJ0YXNlX3IxNihjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAsIHUxNiByZWcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTMwOnN0YXRpYyB1MzIgcnRhc2VfcjMyKGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCwgdTE2IHJlZylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMzEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9ODA5PXN0YXRpYyB2b2lkIHJ0YXNlX2lycV9kaXNfYW5kX2NsZWFyKGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTgxNi1cXHRydGFzZV93MzIodHAsIGl2ZWMtXFx1MDAzZWltcl9hZGRyLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzo4MTc6XFx0dmFsMSA9IHJ0YXNlX3IzMih0cCwgaXZlYy1cXHUwMDNlaXNyX2FkZHIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTgxOC1cXHRydGFzZV93MzIodHAsIGl2ZWMtXFx1MDAzZWlzcl9hZGRyLCB2YWwxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTkyNT1zdGF0aWMgdm9pZCBydGFzZV9od19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTk1MC1cXHQvKiBzZXQgdHggZG1hIGJ1cnN0IHNpemUgYW5kIGludGVyZnJhbWUgZ2FwIHRpbWUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzo5NTE6XFx0cmVnX2RhdGEzMiA9IHJ0YXNlX3IzMih0cCwgUlRBU0VfVFhfQ09ORklHXzApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTk1Mi1cXHR1MzJwX3JlcGxhY2VfYml0cyhcXHUwMDI2cmVnX2RhdGEzMiwgUlRBU0VfVFhfRE1BX0JVUlNUX1VOTElNSVRFRCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTEwMzM9c3RhdGljIGlycXJldHVybl90IHJ0YXNlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMDQwLVxcdHRwID0gaXZlYy1cXHUwMDNldHA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTA0MTpcXHRzdGF0dXMgPSBydGFzZV9yMzIodHAsIGl2ZWMtXFx1MDAzZWlzcl9hZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMDQyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MTc1Nz1zdGF0aWMgdm9pZCBydGFzZV9kdW1wX3RhbGx5X2NvdW50ZXIoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTc2Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoxNzY4OlxcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0X2F0b21pYyhydGFzZV9yMzIsIHZhbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xNzY5LVxcdFxcdFxcdFxcdCAgICAgICAhKHZhbCBcXHUwMDI2IFJUQVNFX0NPVU5URVJfRFVNUCksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0xNzc2PXN0YXRpYyB2b2lkIHJ0YXNlX2R1bXBfc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTE3OTktXFx0XFx0ICAgcnRhc2VfcjgodHAsIFJUQVNFX0NISVBfQ01EKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTgwMDpcXHRuZXRkZXZfZXJyKGRldiwgXFxcIklNUiA9ICUwOHhcXFxcblxcXCIsIHJ0YXNlX3IzMih0cCwgUlRBU0VfSU1SMCkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjE4MDE6XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJJU1IgPSAlMDh4XFxcXG5cXFwiLCBydGFzZV9yMzIodHAsIFJUQVNFX0lTUjApKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xODAyLVxcdG5ldGRldl9lcnIoZGV2LCBcXFwiQm9vdCBDdHJsIFJlZygweEUwMDQpID0gJTA0eFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTIyODE9c3RhdGljIGludCBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZChzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yMjg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjIyODU6XFx0dHAtXFx1MDAzZWh3X3ZlciA9IHJ0YXNlX3IzMih0cCwgUlRBU0VfVFhfQ09ORklHXzApIFxcdTAwMjYgUlRBU0VfSFdfVkVSX01BU0s7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjI4Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDI6MjAuMDk2Njg4Mzg2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3ODA1MTczNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIGBydGFzZWAgYW5kIFBDSSBEcml2ZXJzIGluIFN5emthbGxlcioqXG5cbk9rYXksIHNvIGBydGFzZV9yMzJgIGlzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCBhIGRpcmVjdCBNTUlPIHJlYWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIHN5emthbGxlciBjYW4ndCBkaXJlY3RseSBpbnRlcmNlcHQgTU1JTyByZWFkcyB3aXRoaW4gdGhlIGtlcm5lbCAod2l0aG91dCBLVk0sIHdoaWNoIGRvZXNuJ3Qgd29yayB3aGVuIHN5emthbGxlciBydW5zICppbnNpZGUqIHRoZSBWTSksIHRoaXMgc2VlbXMgdW5yZWFjaGFibGUuIEkgdGhvdWdodCBtYXliZSB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgdXNlcyBgdmZpb2AsIGJ1dCB0aGF0J3MgZm9yIGV4cG9zaW5nIGhvc3QgZGV2aWNlcyB0byBndWVzdHMgb3IgdXNlcnNwYWNlLCB3aGljaCBpc24ndCB0aGUgaXNzdWUuIEFoLCBidXQgdGhlcmUncyBgc3l6X3BjaV9kZXZpY2VfYWRkYCEgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGF0J3MgaW1wbGVtZW50ZWQuIEJ1dCBJIGNhbid0IGNoZWNrIHRoZSBgZXhlY3V0b3IvY29tbW9uX2xpbnV4LmhgIGRpcmVjdGx5LCBhbmQgSSBrbm93IHRoYXQgc3l6a2FsbGVyJ3MgUENJIGZ1enplciBkb2Vzbid0IHJlcXVpcmUgY3VzdG9tIFFFTVUsIHNvIHRoYXQgaXNuJ3QgaGVscGluZy4gSSB0aG91Z2h0IG1heWJlIGB2aXJ0aW8tcGNpYCwgYnV0IHRoaXMgaXMgYSBSZWFsdGVrIGRyaXZlciwgc28gcHJvYmFibHkgbm90LlxuXG5JZiBpdCdzIHRydWx5IHVucmVhY2hhYmxlLCBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIExldCBtZSBjb25maXJtIHRoZXJlJ3Mgbm8gb3RoZXIgd2F5IHRvIHJlYWNoIGBydGFzZV9zdGFydF94bWl0YC4gTm9wZSwgaXQncyBvbmx5IGNhbGxlZCB2aWEgYG5kb19zdGFydF94bWl0YC4gQ2FuIGl0IGJlIGNvbXBpbGVkIGFzIGEgcGxhdGZvcm0gZHJpdmVyPyBObywgaXQncyBQQ0kuIERldmljZSB0cmVlPyBNYXliZSwgYnV0IHN0aWxsIG5lZWRzIHRoZSBQQ0kgZGV2aWNlLiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgaXQncyB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5XYWl0LCBkb2VzIHN5emthbGxlcidzIFBDSSBmdXp6ZXIgKmVtdWxhdGUqIGl0IHNvbWVob3c/IEkgdmFndWVseSByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgYSBkdW1teSBQQ0kgZGV2aWNlLi4uIERpZCBpdCB1c2UgYEtWTWA/IE5vLiBEaWQgaXQgdXNlIGB2ZmlvLXVzZXJgPyBOby4gIEFoLCB3YWl0LCBkaWRuJ3QgaXQgaW5qZWN0IGEgY3VzdG9tIFBDSSBkZXZpY2UgdGhyb3VnaCBRRU1VJ3MgYGl2c2htZW1gIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBOby4gSSByZWNhbGwgbm93LCBpdCB3cml0ZXMgYSBjdXN0b20gUUVNVSBkZXZpY2UgY2FsbGVkIGBzeXprYWxsZXItcGNpYCB0aGF0IGNvbW11bmljYXRlcyB2aWEgc2hhcmVkIG1lbW9yeSBhbmQgdGhlIGV4ZWN1dG9yIHRlbGxzIHRoZSBRRU1VIGRldmljZSB3aGF0IHRvIHJldHVybiBmb3IgTU1JTyByZWFkcyFcblxuSWYgdGhpcyBpcyB0cnVlLCB0aGVuIHN5emthbGxlciAqY2FuKiBlbXVsYXRlIEFOWSBQQ0kgZGV2aWNlISAgSWYgc28sIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlJ3MgYW55IG1lbnRpb24gb2YgYHN5emthbGxlci1wY2lgIGluIHRoZSBrZXJuZWw/IE5vLCBpdCB3b3VsZCBiZSBpbiBRRU1VLiBUaGVuLCBpZiBzeXprYWxsZXIgY2FuIGVtdWxhdGUgKmFueSogUENJIGRldmljZSwgdGhlbiB0aGlzIGlzIHJlYWNoYWJsZS4gQnV0IHNob3VsZCBJIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgIGZvciBBTEwgUENJIGRyaXZlcnM/XG5cblRoZSBwcm9tcHQgc3BlY2lmaWVzIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIFwiZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiAgRG9lcyBzeXprYWxsZXIncyBjdXN0b20gUUVNVSBkZXZpY2UgY29uc3RpdHV0ZSBzb2Z0d2FyZSBlbXVsYXRpb24/IFllcy4gQnV0IGRvZXMgc3l6a2FsbGVyICphY3R1YWxseSogdXNlIGEgY3VzdG9tIFFFTVUgZGV2aWNlPyBJbiAyMDI0LCBzeXprYWxsZXIgbWVyZ2VkIFBDSSBmdXp6aW5nLCByaWdodD8gRG9lcyBpdCB1c2VzIGEgY3VzdG9tIFFFTVUgZGV2aWNlLCBsaWtlIGBzeXprYWxsZXItcGNpYD8gTm8sIHdhaXQuIERpZCBpdCB1c2UgdGhlIGBwY2ktdGVzdGRldmA/IE5vLiBBY3R1YWxseSwgaXQgdXNlcyBgdmZpb2A/IFlvdSBjYW5ub3QgZW11bGF0ZSBhIFBDSSBkZXZpY2UgdG8gdGhlIGhvc3Qga2VybmVsIHVzaW5nIGB2ZmlvYCwgbm8uXG5cbldhaXQsIGRvZXMgc3l6a2FsbGVyIHVzZSBgdmlydGlvYD8gSWYgSSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgYW5kIGl0IElTIHJlYWNoYWJsZSwgSSBmYWlsLiBJZiBJIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgIGFuZCBpdCdzICpub3QqIHJlYWNoYWJsZSwgdGhhdCdzIG5vdCBpZGVhbC4gSG93ZXZlciwgdGhlIGtleSBwYXJ0IG9mIHRoZSBwcm9tcHQgaXMgXCJldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlwiXG5cblRoaXMgaW1wbGllcyB0aGF0IGlmIGl0J3MgYSBQQ0kgZHJpdmVyIHdpdGhvdXQgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIGl0J3MgaW1wb3NzaWJsZSB0byByZWFjaC4gRG9lcyBgcnRhc2VgIGhhdmUgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmU/IE5vLiBJcyB0aGVyZSBhIGdlbmVyaWMgUENJIGVtdWxhdG9yIGluIHRoZSBrZXJuZWw/IE5vLiBTbywgaXQncyBsaWtlbHkgaW1wb3NzaWJsZSB0byByZWFjaC5cblxuQnV0IHdoYXQgaWYgdGhlIHBhdGNoIGlzIGZvciBhIFVTQiBkcml2ZXI/IFVTQiBkcml2ZXJzIENBTiBiZSByZWFjaGVkIGJlY2F1c2Ugb2YgYGR1bW15X2hjZGAgKFVTQiBnYWRnZXQpLiBXaUZpIGRyaXZlcj8gYG1hYzgwMjExX2h3c2ltYC4gQmx1ZXRvb3RoIGRyaXZlcj8gYHZoY2lgLiBDQU4gZHJpdmVyPyBgdmNhbmAuIEJ1dCB3aGF0IGFib3V0IGEgUENJIGRyaXZlcj8gVGhlcmUncyBubyAqZ2VuZXJpYyogUENJIGR1bW15IGhvc3QgY29udHJvbGxlciBpbiB0aGUgdXBzdHJlYW0ga2VybmVsIHRoYXQgbGV0cyB1c2VyIHNwYWNlIGVtdWxhdGUgaXQuICBXYWl0LCBgUENJX0VORFBPSU5UX1RFU1RgPyBUaGF0J3MgZm9yIHRlc3RpbmcgUENJIGVuZHBvaW50cy4gTm90IGZvciBmdWxsIGFyYml0cmFyeSBlbXVsYXRpb24uXG5cblNvIFBDSSBkcml2ZXJzIGFyZSBnZW5lcmFsbHkgVU5SRUFDSEFCTEUgdW5sZXNzIHRoZXkgaGF2ZSBhIHNwZWNpZmljIGVtdWxhdG9yIGxpa2UgYHZpcnRpb2AsIGBlMTAwMGAsIG9yIGBydGw4MTM5YCBpbiBRRU1VLiBJcyBgcnRhc2VgIGVtdWxhdGVkIGJ5IFFFTVU/IEl0J3MgYSBSZWFsdGVrIEF1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0LCBhIHZlcnkgc3BlY2lmaWMgZGV2aWNlLiBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSBpdC4gVGhlcmVmb3JlLCBpdCdzIGltcG9zc2libGUgdG8gcmVhY2guXG5cbldhaXQsIHdoYXQgYWJvdXQgYHN5emthbGxlcmAnc1xuXG4iLCJJbnB1dFRva2VucyI6MzE0MzAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjAyOjM3LjkwMTg2NTcxMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4NDc3NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyMjcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvdmZpby9LY29uZmlnPTk0PXNvdXJjZSBcXFwiZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWdcXFwiXFxuZHJpdmVycy92ZmlvL0tjb25maWc6OTU6c291cmNlIFxcXCJkcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTk2LXNvdXJjZSBcXFwiZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19WRklPX1BMQVRGT1JNX0JBU0UpICs9IHBsYXRmb3JtL1xcbmRyaXZlcnMvdmZpby9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfVkZJT19NREVWKSArPSBtZGV2L1xcbmRyaXZlcnMvdmZpby9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfVkZJT19GU0xfTUMpICs9IGZzbC1tYy9cXG4tLVxcbmRyaXZlcnMvdmZpby9pb21tdWZkLmM9MjI1PUVYUE9SVF9TWU1CT0xfR1BMKHZmaW9faW9tbXVmZF9waHlzaWNhbF9wYXNpZF9kZXRhY2hfaW9hcyk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jLTIyOC0gKiBUaGUgZW11bGF0ZWQgc3RhbmRhcmQgb3BzIG1lYW4gdGhhdCB2ZmlvX2RldmljZSBpcyBnb2luZyB0byB1c2UgdGhlXFxuZHJpdmVycy92ZmlvL2lvbW11ZmQuYzoyMjk6ICogXFxcIm1kZXYgcGF0aFxcXCIgYW5kIHdpbGwgY2FsbCB2ZmlvX3Bpbl9wYWdlcygpL3ZmaW9fZG1hX3J3KCkuIERyaXZlcnMgdXNpbmcgdGhpc1xcbmRyaXZlcnMvdmZpby9pb21tdWZkLmMtMjMwLSAqIG9wcyBzZXQgc2hvdWxkIGNhbGwgdmZpb19yZWdpc3Rlcl9lbXVsYXRlZF9pb21tdV9kZXYoKS4gRHJpdmVycyB0aGF0IGRvXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9NYWtlZmlsZS0yLVxcbmRyaXZlcnMvdmZpby9tZGV2L01ha2VmaWxlOjM6bWRldi15IDo9IG1kZXZfY29yZS5vIG1kZXZfc3lzZnMubyBtZGV2X2RyaXZlci5vXFxuZHJpdmVycy92ZmlvL21kZXYvTWFrZWZpbGUtNC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19WRklPX01ERVYpICs9IG1kZXYub1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2ZzLmhcXHUwMDNlXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kZXYuaFxcdTAwM2VcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xNC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNTojaW5jbHVkZSBcXFwibWRldl9wcml2YXRlLmhcXFwiXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTYtXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMTpzdGF0aWMgc3RydWN0IGNsYXNzX2NvbXBhdCAqbWRldl9idXNfY29tcGF0X2NsYXNzO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIyLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIzOnN0YXRpYyBMSVNUX0hFQUQobWRldl9saXN0KTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyNDpzdGF0aWMgREVGSU5FX01VVEVYKG1kZXZfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNi0vKiBDYWxsZXIgbXVzdCBob2xkIHBhcmVudCB1bnJlZ19zZW0gcmVhZCBvciB3cml0ZSBsb2NrICovXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6Mjc6c3RhdGljIHZvaWQgbWRldl9kZXZpY2VfcmVtb3ZlX2NvbW1vbihzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjgte1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI5OlxcdHN0cnVjdCBtZGV2X3BhcmVudCAqcGFyZW50ID0gbWRldi1cXHUwMDNldHlwZS1cXHUwMDNlcGFyZW50O1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTMwLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjMxOlxcdG1kZXZfcmVtb3ZlX3N5c2ZzX2ZpbGVzKG1kZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjMyOlxcdGRldmljZV9kZWwoXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMzMtXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cGFyZW50LVxcdTAwM2V1bnJlZ19zZW0pO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTM0LVxcdC8qIEJhbGFuY2VzIHdpdGggZGV2aWNlX2luaXRpYWxpemUoKSAqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjM1OlxcdHB1dF9kZXZpY2UoXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMzYtfVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTM3LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjM4OnN0YXRpYyBpbnQgbWRldl9kZXZpY2VfcmVtb3ZlX2NiKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0zOS17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NDA6XFx0aWYgKGRldi1cXHUwMDNlYnVzID09IFxcdTAwMjZtZGV2X2J1c190eXBlKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjQxOlxcdFxcdG1kZXZfZGV2aWNlX3JlbW92ZV9jb21tb24odG9fbWRldl9kZXZpY2UoZGV2KSk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNDItXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy00NS0vKlxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjQ2OiAqIG1kZXZfcmVnaXN0ZXJfcGFyZW50OiBSZWdpc3RlciBhIGRldmljZSBhcyBwYXJlbnQgZm9yIG1kZXZzXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNDctICogQHBhcmVudDogcGFyZW50IHN0cnVjdHVyZSByZWdpc3RlcmVkXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNDgtICogQGRldjogZGV2aWNlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgcGFyZW50IGRldmljZS5cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo0OTogKiBAbWRldl9kcml2ZXI6IERldmljZSBkcml2ZXIgdG8gYmluZCB0byB0aGUgbmV3bHkgY3JlYXRlZCBtZGV2XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NTA6ICogQHR5cGVzOiBBcnJheSBvZiBzdXBwb3J0ZWQgbWRldiB0eXBlc1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTUxLSAqIEBucl90eXBlczogTnVtYmVyIG9mIGVudHJpZXMgaW4gQHR5cGVzXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNTItICpcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo1MzogKiBSZWdpc3RlcnMgdGhlIEBwYXJlbnQgc3R1Y3R1cmUgYXMgYSBwYXJlbnQgZm9yIG1kZXYgdHlwZXMgYW5kIHRodXMgbWRldlxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTU0LSAqIGRldmljZXMuICBUaGUgY2FsbGVyIG5lZWRzIHRvIGhvbGQgYSByZWZlcmVuY2Ugb24gQGRldiB0aGF0IG11c3Qgbm90IGJlXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NTU6ICogcmVsZWFzZWQgdW50aWwgYWZ0ZXIgdGhlIGNhbGwgdG8gbWRldl91bnJlZ2lzdGVyX3BhcmVudCgpLlxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTU2LSAqXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy01OC0gKi9cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo1OTppbnQgbWRldl9yZWdpc3Rlcl9wYXJlbnQoc3RydWN0IG1kZXZfcGFyZW50ICpwYXJlbnQsIHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo2MDpcXHRcXHRzdHJ1Y3QgbWRldl9kcml2ZXIgKm1kZXZfZHJpdmVyLCBzdHJ1Y3QgbWRldl90eXBlICoqdHlwZXMsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNjEtXFx0XFx0dW5zaWduZWQgaW50IG5yX3R5cGVzKVxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNjktXFx0cGFyZW50LVxcdTAwM2VkZXYgPSBkZXY7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NzA6XFx0cGFyZW50LVxcdTAwM2VtZGV2X2RyaXZlciA9IG1kZXZfZHJpdmVyO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTcxLVxcdHBhcmVudC1cXHUwMDNldHlwZXMgPSB0eXBlcztcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy03Mi1cXHRwYXJlbnQtXFx1MDAzZW5yX3R5cGVzID0gbnJfdHlwZXM7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NzM6XFx0YXRvbWljX3NldChcXHUwMDI2cGFyZW50LVxcdTAwM2VhdmFpbGFibGVfaW5zdGFuY2VzLCBtZGV2X2RyaXZlci1cXHUwMDNlbWF4X2luc3RhbmNlcyk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNzQtXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy03OC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo3OTpcXHRyZXQgPSBjbGFzc19jb21wYXRfY3JlYXRlX2xpbmsobWRldl9idXNfY29tcGF0X2NsYXNzLCBkZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTgwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy04Ni19XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6ODc6RVhQT1JUX1NZTUJPTChtZGV2X3JlZ2lzdGVyX3BhcmVudCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtODgtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtODktLypcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo5MDogKiBtZGV2X3VucmVnaXN0ZXJfcGFyZW50IDogVW5yZWdpc3RlciBhIHBhcmVudCBkZXZpY2VcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy05MS0gKiBAcGFyZW50OiBwYXJlbnQgc3RydWN0dXJlIHRvIHVucmVnaXN0ZXJcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy05Mi0gKi9cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo5Mzp2b2lkIG1kZXZfdW5yZWdpc3Rlcl9wYXJlbnQoc3RydWN0IG1kZXZfcGFyZW50ICpwYXJlbnQpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtOTQte1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTAwLVxcdGRvd25fd3JpdGUoXFx1MDAyNnBhcmVudC1cXHUwMDNldW5yZWdfc2VtKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMDE6XFx0Y2xhc3NfY29tcGF0X3JlbW92ZV9saW5rKG1kZXZfYnVzX2NvbXBhdF9jbGFzcywgcGFyZW50LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEwMjpcXHRkZXZpY2VfZm9yX2VhY2hfY2hpbGQocGFyZW50LVxcdTAwM2VkZXYsIE5VTEwsIG1kZXZfZGV2aWNlX3JlbW92ZV9jYik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTAzLVxcdHBhcmVudF9yZW1vdmVfc3lzZnNfZmlsZXMocGFyZW50KTtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEwNy19XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTA4OkVYUE9SVF9TWU1CT0wobWRldl91bnJlZ2lzdGVyX3BhcmVudCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTA5LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjExMDpzdGF0aWMgdm9pZCBtZGV2X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMTEte1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjExMjpcXHRzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSB0b19tZGV2X2RldmljZShkZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjExMzpcXHRzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCA9IG1kZXYtXFx1MDAzZXR5cGUtXFx1MDAzZXBhcmVudDtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMTQtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTE1OlxcdG11dGV4X2xvY2soXFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMTY6XFx0bGlzdF9kZWwoXFx1MDAyNm1kZXYtXFx1MDAzZW5leHQpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjExNzpcXHRpZiAoIXBhcmVudC1cXHUwMDNlbWRldl9kcml2ZXItXFx1MDAzZWdldF9hdmFpbGFibGUpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTE4LVxcdFxcdGF0b21pY19pbmMoXFx1MDAyNnBhcmVudC1cXHUwMDNlYXZhaWxhYmxlX2luc3RhbmNlcyk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTE5OlxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRldl9saXN0X2xvY2spO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEyMC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMjE6XFx0LyogUGFpcnMgd2l0aCB0aGUgZ2V0IGluIG1kZXZfZGV2aWNlX2NyZWF0ZSgpICovXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTIyOlxcdGtvYmplY3RfcHV0KFxcdTAwMjZtZGV2LVxcdTAwM2V0eXBlLVxcdTAwM2Vrb2JqKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMjMtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTI0OlxcdGRldl9kYmcoXFx1MDAyNm1kZXYtXFx1MDAzZWRldiwgXFxcIk1ERVY6IGRlc3Ryb3lpbmdcXFxcblxcXCIpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEyNTpcXHRrZnJlZShtZGV2KTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMjYtfVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEyNy1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMjg6aW50IG1kZXZfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWRldl90eXBlICp0eXBlLCBjb25zdCBndWlkX3QgKnV1aWQpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTI5LXtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMzAtXFx0aW50IHJldDtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMzE6XFx0c3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCAqdG1wO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEzMjpcXHRzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCA9IHR5cGUtXFx1MDAzZXBhcmVudDtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMzM6XFx0c3RydWN0IG1kZXZfZHJpdmVyICpkcnYgPSBwYXJlbnQtXFx1MDAzZW1kZXZfZHJpdmVyO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEzNC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMzU6XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWRldl9saXN0X2xvY2spO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEzNi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMzctXFx0LyogQ2hlY2sgZm9yIGR1cGxpY2F0ZSAqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEzODpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgXFx1MDAyNm1kZXZfbGlzdCwgbmV4dCkge1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEzOS1cXHRcXHRpZiAoZ3VpZF9lcXVhbChcXHUwMDI2dG1wLVxcdTAwM2V1dWlkLCB1dWlkKSkge1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE0MDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xNDEtXFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xNDctXFx0XFx0ICogTm90ZTogdGhhdCBub24tYXRvbWljIHJlYWQgYW5kIGRlYyBpcyBmaW5lIGhlcmUgYmVjYXVzZVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE0ODpcXHRcXHQgKiBhbGwgbW9kaWZpY2F0aW9ucyBhcmUgdW5kZXIgbWRldl9saXN0X2xvY2suXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTQ5LVxcdFxcdCAqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE1MC1cXHRcXHRpZiAoIWF0b21pY19yZWFkKFxcdTAwMjZwYXJlbnQtXFx1MDAzZWF2YWlsYWJsZV9pbnN0YW5jZXMpKSB7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTUxOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRldl9saXN0X2xvY2spO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE1Mi1cXHRcXHRcXHRyZXR1cm4gLUVVU0VSUztcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE1Ni1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNTc6XFx0bWRldiA9IGt6YWxsb2Nfb2JqKCptZGV2KTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNTg6XFx0aWYgKCFtZGV2KSB7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTU5OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRldl9saXN0X2xvY2spO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE2MC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE2Mi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNjM6XFx0ZGV2aWNlX2luaXRpYWxpemUoXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTY0OlxcdG1kZXYtXFx1MDAzZWRldi5wYXJlbnQgID0gcGFyZW50LVxcdTAwM2VkZXY7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTY1OlxcdG1kZXYtXFx1MDAzZWRldi5idXMgPSBcXHUwMDI2bWRldl9idXNfdHlwZTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNjY6XFx0bWRldi1cXHUwMDNlZGV2LnJlbGVhc2UgPSBtZGV2X2RldmljZV9yZWxlYXNlO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE2NzpcXHRtZGV2LVxcdTAwM2VkZXYuZ3JvdXBzID0gbWRldl9kZXZpY2VfZ3JvdXBzO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE2ODpcXHRtZGV2LVxcdTAwM2V0eXBlID0gdHlwZTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNjk6XFx0LyogUGFpcnMgd2l0aCB0aGUgcHV0IGluIG1kZXZfZGV2aWNlX3JlbGVhc2UoKSAqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE3MC1cXHRrb2JqZWN0X2dldChcXHUwMDI2dHlwZS1cXHUwMDNla29iaik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTcxLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE3MjpcXHRndWlkX2NvcHkoXFx1MDAyNm1kZXYtXFx1MDAzZXV1aWQsIHV1aWQpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE3MzpcXHRsaXN0X2FkZChcXHUwMDI2bWRldi1cXHUwMDNlbmV4dCwgXFx1MDAyNm1kZXZfbGlzdCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTc0OlxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRldl9saXN0X2xvY2spO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE3NS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNzY6XFx0cmV0ID0gZGV2X3NldF9uYW1lKFxcdTAwMjZtZGV2LVxcdTAwM2VkZXYsIFxcXCIlcFVsXFxcIiwgdXVpZCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTc3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xODUtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTg2OlxcdHJldCA9IGRldmljZV9hZGQoXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTg3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xODktXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTkwOlxcdHJldCA9IGRldmljZV9kcml2ZXJfYXR0YWNoKFxcdTAwMjZkcnYtXFx1MDAzZWRyaXZlciwgXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTkxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xOTMtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTk0OlxcdHJldCA9IG1kZXZfY3JlYXRlX3N5c2ZzX2ZpbGVzKG1kZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE5NS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTk3LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE5ODpcXHRtZGV2LVxcdTAwM2VhY3RpdmUgPSB0cnVlO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE5OTpcXHRkZXZfZGJnKFxcdTAwMjZtZGV2LVxcdTAwM2VkZXYsIFxcXCJNREVWOiBjcmVhdGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMDAtXFx0dXBfcmVhZChcXHUwMDI2cGFyZW50LVxcdTAwM2V1bnJlZ19zZW0pO1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjA0LW91dF9kZWw6XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjA1OlxcdGRldmljZV9kZWwoXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjA2LW91dF91bmxvY2s6XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMDgtb3V0X3B1dF9kZXZpY2U6XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjA5OlxcdHB1dF9kZXZpY2UoXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjEwLVxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMTItXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjEzOmludCBtZGV2X2RldmljZV9yZW1vdmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIxNC17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjE1OlxcdHN0cnVjdCBtZGV2X2RldmljZSAqdG1wO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIxNjpcXHRzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCA9IG1kZXYtXFx1MDAzZXR5cGUtXFx1MDAzZXBhcmVudDtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMTctXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjE4OlxcdG11dGV4X2xvY2soXFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMTk6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsIFxcdTAwMjZtZGV2X2xpc3QsIG5leHQpIHtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMjA6XFx0XFx0aWYgKHRtcCA9PSBtZGV2KVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIyMS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIyMy1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMjQ6XFx0aWYgKHRtcCAhPSBtZGV2KSB7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjI1OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRldl9saXN0X2xvY2spO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIyNi1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIyOC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMjk6XFx0aWYgKCFtZGV2LVxcdTAwM2VhY3RpdmUpIHtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMzA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGV2X2xpc3RfbG9jayk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjMxLVxcdFxcdHJldHVybiAtRUFHQUlOO1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjMzLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIzNDpcXHRtZGV2LVxcdTAwM2VhY3RpdmUgPSBmYWxzZTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMzU6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGV2X2xpc3RfbG9jayk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjM2LVxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjQwLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI0MTpcXHRtZGV2X2RldmljZV9yZW1vdmVfY29tbW9uKG1kZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI0Mi1cXHR1cF9yZWFkKFxcdTAwMjZwYXJlbnQtXFx1MDAzZXVucmVnX3NlbSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNDUtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjQ2OnN0YXRpYyBpbnQgX19pbml0IG1kZXZfaW5pdCh2b2lkKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI0Ny17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNDktXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjUwOlxcdHJldCA9IGJ1c19yZWdpc3RlcihcXHUwMDI2bWRldl9idXNfdHlwZSk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjUxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNTMtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjU0OlxcdG1kZXZfYnVzX2NvbXBhdF9jbGFzcyA9IGNsYXNzX2NvbXBhdF9yZWdpc3RlcihcXFwibWRldl9idXNcXFwiKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyNTU6XFx0aWYgKCFtZGV2X2J1c19jb21wYXRfY2xhc3MpIHtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyNTY6XFx0XFx0YnVzX3VucmVnaXN0ZXIoXFx1MDAyNm1kZXZfYnVzX3R5cGUpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI1Ny1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI2Mi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyNjM6c3RhdGljIHZvaWQgX19leGl0IG1kZXZfZXhpdCh2b2lkKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI2NC17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjY1OlxcdGNsYXNzX2NvbXBhdF91bnJlZ2lzdGVyKG1kZXZfYnVzX2NvbXBhdF9jbGFzcyk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjY2OlxcdGJ1c191bnJlZ2lzdGVyKFxcdTAwMjZtZGV2X2J1c190eXBlKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNjctfVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI2OC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyNjk6c3Vic3lzX2luaXRjYWxsKG1kZXZfaW5pdClcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyNzA6bW9kdWxlX2V4aXQobWRldl9leGl0KVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI3MS1cXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbW11LmhcXHUwMDNlXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWRldi5oXFx1MDAzZVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMTItXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoxMzojaW5jbHVkZSBcXFwibWRldl9wcml2YXRlLmhcXFwiXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0xNC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjE1OnN0YXRpYyBpbnQgbWRldl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0xNi17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoxNzpcXHRzdHJ1Y3QgbWRldl9kcml2ZXIgKmRydiA9XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoxODpcXHRcXHRjb250YWluZXJfb2YoZGV2LVxcdTAwM2Vkcml2ZXIsIHN0cnVjdCBtZGV2X2RyaXZlciwgZHJpdmVyKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTE5LVxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0yMS1cXHRcXHRyZXR1cm4gMDtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjIyOlxcdHJldHVybiBkcnYtXFx1MDAzZXByb2JlKHRvX21kZXZfZGV2aWNlKGRldikpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMjMtfVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMjQtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoyNTpzdGF0aWMgdm9pZCBtZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0yNi17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoyNzpcXHRzdHJ1Y3QgbWRldl9kcml2ZXIgKmRydiA9XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoyODpcXHRcXHRjb250YWluZXJfb2YoZGV2LVxcdTAwM2Vkcml2ZXIsIHN0cnVjdCBtZGV2X2RyaXZlciwgZHJpdmVyKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTI5LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMzAtXFx0aWYgKGRydi1cXHUwMDNlcmVtb3ZlKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6MzE6XFx0XFx0ZHJ2LVxcdTAwM2VyZW1vdmUodG9fbWRldl9kZXZpY2UoZGV2KSk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0zMi19XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0zMy1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjM0OnN0YXRpYyBpbnQgbWRldl9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0zNS17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTQyLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6NDM6Y29uc3Qgc3RydWN0IGJ1c190eXBlIG1kZXZfYnVzX3R5cGUgPSB7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo0NDpcXHQubmFtZVxcdFxcdD0gXFxcIm1kZXZcXFwiLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6NDU6XFx0LnByb2JlXFx0XFx0PSBtZGV2X3Byb2JlLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6NDY6XFx0LnJlbW92ZVxcdFxcdD0gbWRldl9yZW1vdmUsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo0NzpcXHQubWF0Y2hcXHRcXHQ9IG1kZXZfbWF0Y2gsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy00OC19O1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy01MC0vKipcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjUxOiAqIG1kZXZfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBuZXcgTURFViBkcml2ZXJcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTUyLSAqIEBkcnY6IHRoZSBkcml2ZXIgdG8gcmVnaXN0ZXJcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNTUtICoqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6NTY6aW50IG1kZXZfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtZGV2X2RyaXZlciAqZHJ2KVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNTcte1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy02MS1cXHQvKiBpbml0aWFsaXplIGNvbW1vbiBkcml2ZXIgZmllbGRzICovXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo2MjpcXHRkcnYtXFx1MDAzZWRyaXZlci5idXMgPSBcXHUwMDI2bWRldl9idXNfdHlwZTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTYzLVxcdHJldHVybiBkcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmRydi1cXHUwMDNlZHJpdmVyKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTY0LX1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjY1OkVYUE9SVF9TWU1CT0wobWRldl9yZWdpc3Rlcl9kcml2ZXIpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNjYtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy02Ny0vKlxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6Njg6ICogbWRldl91bnJlZ2lzdGVyX2RyaXZlciAtIHVucmVnaXN0ZXIgTURFViBkcml2ZXJcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTY5LSAqIEBkcnY6IHRoZSBkcml2ZXIgdG8gdW5yZWdpc3RlclxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNzAtICovXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo3MTp2b2lkIG1kZXZfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1kZXZfZHJpdmVyICpkcnYpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy03Mi17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTc0LX1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjc1OkVYUE9SVF9TWU1CT0wobWRldl91bnJlZ2lzdGVyX2RyaXZlcik7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaC0xMi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoxMzpleHRlcm4gY29uc3Qgc3RydWN0IGJ1c190eXBlIG1kZXZfYnVzX3R5cGU7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6MTQ6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1kZXZfZGV2aWNlX2dyb3Vwc1tdO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oLTE1LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjE2OiNkZWZpbmUgdG9fbWRldl90eXBlX2F0dHIoX2F0dHIpXFx0XFxcXFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjE3OlxcdGNvbnRhaW5lcl9vZihfYXR0ciwgc3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUsIGF0dHIpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6MTg6I2RlZmluZSB0b19tZGV2X3R5cGUoX2tvYmopXFx0XFx0XFxcXFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjE5OlxcdGNvbnRhaW5lcl9vZihfa29iaiwgc3RydWN0IG1kZXZfdHlwZSwga29iailcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaC0yMC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoyMTppbnQgIHBhcmVudF9jcmVhdGVfc3lzZnNfZmlsZXMoc3RydWN0IG1kZXZfcGFyZW50ICpwYXJlbnQpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjIyOnZvaWQgcGFyZW50X3JlbW92ZV9zeXNmc19maWxlcyhzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgtMjMtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6MjQ6aW50ICBtZGV2X2NyZWF0ZV9zeXNmc19maWxlcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjI1OnZvaWQgbWRldl9yZW1vdmVfc3lzZnNfZmlsZXMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaC0yNi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoyNzppbnQgbWRldl9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtZGV2X3R5cGUgKmtvYmosIGNvbnN0IGd1aWRfdCAqdXVpZCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6Mjg6aW50ICBtZGV2X2RldmljZV9yZW1vdmUoc3RydWN0IG1kZXZfZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oLTI5LVxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEzOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGV2LmhcXHUwMDNlXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE0LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNTojaW5jbHVkZSBcXFwibWRldl9wcml2YXRlLmhcXFwiXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE2LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNzpzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSB7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE4LVxcdHN0cnVjdCBhdHRyaWJ1dGUgYXR0cjtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTk6XFx0c3NpemVfdCAoKnNob3cpKHN0cnVjdCBtZGV2X3R5cGUgKm10eXBlLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMDpcXHRcXHRcXHRzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjE6XFx0c3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRldl90eXBlICptdHlwZSxcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjI6XFx0XFx0XFx0IHN0cnVjdCBtZGV2X3R5cGVfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIzLVxcdFxcdFxcdCBzaXplX3QgY291bnQpO1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTI2LSNkZWZpbmUgTURFVl9UWVBFX0FUVFJfUk8oX25hbWUpIFxcXFxcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6Mjc6XFx0c3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgbWRldl90eXBlX2F0dHJfIyNfbmFtZSA9IF9fQVRUUl9STyhfbmFtZSlcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjgtI2RlZmluZSBNREVWX1RZUEVfQVRUUl9XTyhfbmFtZSkgXFxcXFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyOTpcXHRzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSBtZGV2X3R5cGVfYXR0cl8jI19uYW1lID0gX19BVFRSX1dPKF9uYW1lKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0zMC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MzE6c3RhdGljIHNzaXplX3QgbWRldl90eXBlX2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMzItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYXR0cmlidXRlICpfX2F0dHIsIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMzMte1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzozNDpcXHRzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX21kZXZfdHlwZV9hdHRyKF9fYXR0cik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjM1OlxcdHN0cnVjdCBtZGV2X3R5cGUgKnR5cGUgPSB0b19tZGV2X3R5cGUoa29iaik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTM2LVxcdHNzaXplX3QgcmV0ID0gLUVJTztcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy00Mi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6NDM6c3RhdGljIHNzaXplX3QgbWRldl90eXBlX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTQ0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKl9fYXR0cixcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy00Ni17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjQ3OlxcdHN0cnVjdCBtZGV2X3R5cGVfYXR0cmlidXRlICphdHRyID0gdG9fbWRldl90eXBlX2F0dHIoX19hdHRyKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6NDg6XFx0c3RydWN0IG1kZXZfdHlwZSAqdHlwZSA9IHRvX21kZXZfdHlwZShrb2JqKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtNDktXFx0c3NpemVfdCByZXQgPSAtRUlPO1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTU1LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo1NjpzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBtZGV2X3R5cGVfc3lzZnNfb3BzID0ge1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo1NzpcXHQuc2hvdyA9IG1kZXZfdHlwZV9hdHRyX3Nob3csXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjU4OlxcdC5zdG9yZSA9IG1kZXZfdHlwZV9hdHRyX3N0b3JlLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy01OS19O1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy02MC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6NjE6c3RhdGljIHNzaXplX3QgY3JlYXRlX3N0b3JlKHN0cnVjdCBtZGV2X3R5cGUgKm10eXBlLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo2MjpcXHRcXHRcXHQgICAgc3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtNjMtXFx0XFx0XFx0ICAgIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy04MC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6ODE6XFx0cmV0ID0gbWRldl9kZXZpY2VfY3JlYXRlKG10eXBlLCBcXHUwMDI2dXVpZCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTgyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM9ODc9c3RhdGljIE1ERVZfVFlQRV9BVFRSX1dPKGNyZWF0ZSk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTg4LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo4OTpzdGF0aWMgc3NpemVfdCBkZXZpY2VfYXBpX3Nob3coc3RydWN0IG1kZXZfdHlwZSAqbXR5cGUsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjkwOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy05MS17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjkyOlxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVzXFxcXG5cXFwiLCBtdHlwZS1cXHUwMDNlcGFyZW50LVxcdTAwM2VtZGV2X2RyaXZlci1cXHUwMDNlZGV2aWNlX2FwaSk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTkzLX1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM9OTQ9c3RhdGljIE1ERVZfVFlQRV9BVFRSX1JPKGRldmljZV9hcGkpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy05NS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6OTY6c3RhdGljIHNzaXplX3QgbmFtZV9zaG93KHN0cnVjdCBtZGV2X3R5cGUgKm10eXBlLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo5NzpcXHRcXHRcXHQgc3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtOTgte1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTEwMz1zdGF0aWMgTURFVl9UWVBFX0FUVFJfUk8obmFtZSk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTEwNC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTA1OnN0YXRpYyBzc2l6ZV90IGF2YWlsYWJsZV9pbnN0YW5jZXNfc2hvdyhzdHJ1Y3QgbWRldl90eXBlICptdHlwZSxcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTA2OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZGV2X3R5cGVfYXR0cmlidXRlICphdHRyLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMDctXFx0XFx0XFx0XFx0XFx0Y2hhciAqYnVmKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMDgte1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMDk6XFx0c3RydWN0IG1kZXZfZHJpdmVyICpkcnYgPSBtdHlwZS1cXHUwMDNlcGFyZW50LVxcdTAwM2VtZGV2X2RyaXZlcjtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTEwLVxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTExNj1zdGF0aWMgTURFVl9UWVBFX0FUVFJfUk8oYXZhaWxhYmxlX2luc3RhbmNlcyk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTExNy1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTE4OnN0YXRpYyBzc2l6ZV90IGRlc2NyaXB0aW9uX3Nob3coc3RydWN0IG1kZXZfdHlwZSAqbXR5cGUsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjExOTpcXHRcXHRcXHRcXHRzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTIwLVxcdFxcdFxcdFxcdGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTIxLXtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTIyOlxcdHJldHVybiBtdHlwZS1cXHUwMDNlcGFyZW50LVxcdTAwM2VtZGV2X2RyaXZlci1cXHUwMDNlc2hvd19kZXNjcmlwdGlvbihtdHlwZSwgYnVmKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTIzLX1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM9MTI0PXN0YXRpYyBNREVWX1RZUEVfQVRUUl9STyhkZXNjcmlwdGlvbik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTEyNS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTI2OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptZGV2X3R5cGVzX2NvcmVfYXR0cnNbXSA9IHtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTI3OlxcdFxcdTAwMjZtZGV2X3R5cGVfYXR0cl9jcmVhdGUuYXR0cixcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTI4OlxcdFxcdTAwMjZtZGV2X3R5cGVfYXR0cl9kZXZpY2VfYXBpLmF0dHIsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEyOTpcXHRcXHUwMDI2bWRldl90eXBlX2F0dHJfbmFtZS5hdHRyLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMzA6XFx0XFx1MDAyNm1kZXZfdHlwZV9hdHRyX2F2YWlsYWJsZV9pbnN0YW5jZXMuYXR0cixcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTMxOlxcdFxcdTAwMjZtZGV2X3R5cGVfYXR0cl9kZXNjcmlwdGlvbi5hdHRyLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMzItXFx0TlVMTCxcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMzQtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEzNTpzdGF0aWMgdW1vZGVfdCBtZGV2X3R5cGVzX2NvcmVfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTM2LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IG4pXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTEzNy17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEzODpcXHRpZiAoYXR0ciA9PSBcXHUwMDI2bWRldl90eXBlX2F0dHJfZGVzY3JpcHRpb24uYXR0ciBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMzk6XFx0ICAgICF0b19tZGV2X3R5cGUoa29iaiktXFx1MDAzZXBhcmVudC1cXHUwMDNlbWRldl9kcml2ZXItXFx1MDAzZXNob3dfZGVzY3JpcHRpb24pXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE0MC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNDMtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE0NDpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtZGV2X3R5cGVfY29yZV9ncm91cCA9IHtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTQ1OlxcdC5hdHRycyA9IG1kZXZfdHlwZXNfY29yZV9hdHRycyxcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTQ2OlxcdC5pc192aXNpYmxlID0gbWRldl90eXBlc19jb3JlX2lzX3Zpc2libGUsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE0Ny19O1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNDgtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE0OTpzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbWRldl90eXBlX2dyb3Vwc1tdID0ge1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNTA6XFx0XFx1MDAyNm1kZXZfdHlwZV9jb3JlX2dyb3VwLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNTEtXFx0TlVMTCxcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNTMtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE1NDpzdGF0aWMgdm9pZCBtZGV2X3R5cGVfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTU1LXtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTU2OlxcdHN0cnVjdCBtZGV2X3R5cGUgKnR5cGUgPSB0b19tZGV2X3R5cGUoa29iaik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE1Ny1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTU4LVxcdHByX2RlYnVnKFxcXCJSZWxlYXNpbmcgZ3JvdXAgJXNcXFxcblxcXCIsIGtvYmotXFx1MDAzZW5hbWUpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNTk6XFx0LyogUGFpcnMgd2l0aCB0aGUgZ2V0IGluIG1kZXZfdHlwZV9hZGQoKSAqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNjAtXFx0cHV0X2RldmljZSh0eXBlLVxcdTAwM2VwYXJlbnQtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTYyLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNjM6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgbWRldl90eXBlX2t0eXBlID0ge1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNjQ6XFx0LnN5c2ZzX29wc1xcdD0gXFx1MDAyNm1kZXZfdHlwZV9zeXNmc19vcHMsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE2NTpcXHQucmVsZWFzZVxcdD0gbWRldl90eXBlX3JlbGVhc2UsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE2NjpcXHQuZGVmYXVsdF9ncm91cHNcXHQ9IG1kZXZfdHlwZV9ncm91cHMsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE2Ny19O1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNjgtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE2OTpzdGF0aWMgaW50IG1kZXZfdHlwZV9hZGQoc3RydWN0IG1kZXZfcGFyZW50ICpwYXJlbnQsIHN0cnVjdCBtZGV2X3R5cGUgKnR5cGUpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE3MC17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTcyLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNzM6XFx0dHlwZS1cXHUwMDNla29iai5rc2V0ID0gcGFyZW50LVxcdTAwM2VtZGV2X3R5cGVzX2tzZXQ7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE3NC1cXHR0eXBlLVxcdTAwM2VwYXJlbnQgPSBwYXJlbnQ7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE3NTpcXHQvKiBQYWlycyB3aXRoIHRoZSBwdXQgaW4gbWRldl90eXBlX3JlbGVhc2UoKSAqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNzYtXFx0Z2V0X2RldmljZShwYXJlbnQtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE3Ny1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTc4OlxcdHJldCA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZ0eXBlLVxcdTAwM2Vrb2JqLCBcXHUwMDI2bWRldl90eXBlX2t0eXBlLCBOVUxMLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNzktXFx0XFx0XFx0XFx0ICAgXFxcIiVzLSVzXFxcIiwgZGV2X2RyaXZlcl9zdHJpbmcocGFyZW50LVxcdTAwM2VkZXYpLFxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE5OS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjAwOnN0YXRpYyB2b2lkIG1kZXZfdHlwZV9yZW1vdmUoc3RydWN0IG1kZXZfdHlwZSAqdHlwZSlcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjAxLXtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMDYtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjIwNzovKiBtZGV2IHN5c2ZzIGZ1bmN0aW9ucyAqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMDg6dm9pZCBwYXJlbnRfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHN0cnVjdCBtZGV2X3BhcmVudCAqcGFyZW50KVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMDkte1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIxMi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGFyZW50LVxcdTAwM2Vucl90eXBlczsgaSsrKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMTM6XFx0XFx0bWRldl90eXBlX3JlbW92ZShwYXJlbnQtXFx1MDAzZXR5cGVzW2ldKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjE0OlxcdGtzZXRfdW5yZWdpc3RlcihwYXJlbnQtXFx1MDAzZW1kZXZfdHlwZXNfa3NldCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIxNS19XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIxNi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjE3OmludCBwYXJlbnRfY3JlYXRlX3N5c2ZzX2ZpbGVzKHN0cnVjdCBtZGV2X3BhcmVudCAqcGFyZW50KVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMTgte1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIyMC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjIxOlxcdHBhcmVudC1cXHUwMDNlbWRldl90eXBlc19rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZChcXFwibWRldl9zdXBwb3J0ZWRfdHlwZXNcXFwiLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMjItXFx0XFx0XFx0XFx0XFx0ICAgICAgIE5VTEwsIFxcdTAwMjZwYXJlbnQtXFx1MDAzZWRldi1cXHUwMDNla29iaik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjIyMzpcXHRpZiAoIXBhcmVudC1cXHUwMDNlbWRldl90eXBlc19rc2V0KVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMjQtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjI2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwYXJlbnQtXFx1MDAzZW5yX3R5cGVzOyBpKyspIHtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjI3OlxcdFxcdHJldCA9IG1kZXZfdHlwZV9hZGQocGFyZW50LCBwYXJlbnQtXFx1MDAzZXR5cGVzW2ldKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjI4LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjM0LVxcdHdoaWxlICgtLWkgXFx1MDAzZT0gMClcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjM1OlxcdFxcdG1kZXZfdHlwZV9yZW1vdmUocGFyZW50LVxcdTAwM2V0eXBlc1tpXSk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjIzNjpcXHRrc2V0X3VucmVnaXN0ZXIocGFyZW50LVxcdTAwM2VtZGV2X3R5cGVzX2tzZXQpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMzctXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYz0yNDA9c3RhdGljIHNzaXplX3QgcmVtb3ZlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjQyLXtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjQzOlxcdHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHRvX21kZXZfZGV2aWNlKGRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTI0NC1cXHR1bnNpZ25lZCBsb25nIHZhbDtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yNTEtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjI1MjpcXHRcXHRyZXQgPSBtZGV2X2RldmljZV9yZW1vdmUobWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTI1My1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTI2MD1zdGF0aWMgREVWSUNFX0FUVFJfV08ocmVtb3ZlKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjYxLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyNjI6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1kZXZfZGV2aWNlX2F0dHJzW10gPSB7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTI2My1cXHRcXHUwMDI2ZGV2X2F0dHJfcmVtb3ZlLmF0dHIsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjY2LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyNjc6c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWRldl9kZXZpY2VfZ3JvdXAgPSB7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjAyOjM4LjQ5MDM0OTQzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTg1ODE4Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFJlYWNoYWJpbGl0eSBmb3IgdGhlIFJlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXQgRHJpdmVyKipcblxuT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLiBGaXJzdCwgSSBzZWUgYG1kZXZgLCBidXQgdGhhdCdzIGZvciBzcGVjaWZpYyBkcml2ZXJzIGxpa2UgYHZmaW9fY2N3YCBhbmQgdGhlIGxpa2U7IGl0J3Mgbm90IGEgZ2VuZXJpYyBQQ0kgZW11bGF0b3IuICBgdmZpby11c2VyYCBpcyBvdXQgYmVjYXVzZSBpdCBpcyB1c2VkIGZvciBhIHVzZXIgc3BhY2UgKmVtdWxhdG9yKiB0YWxraW5nIHRvIGEgUUVNVSBpbnN0YW5jZSwgbm90IHRoZSBrZXJuZWwgdGFsa2luZyB0byB1c2VyIHNwYWNlLiBTbywgbm8gZ2VuZXJpYyBQQ0kgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwuICBHaXZlbiB0aGF0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgYHJ0YXNlYCBpcyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLiBDb3VsZCBgcnRhc2VgIHNvbWVob3cgKm5vdCogYmUgYSBQQ0kgZHJpdmVyPyAgSSBjaGVjayBgcnRhc2VfaW5pdF9vbmVgLCBhbmQgeWVzLCBpdCB0YWtlcyBgc3RydWN0IHBjaV9kZXYgKnBkZXZgIGFuZCByZWdpc3RlcnMgd2l0aCBgcGNpX3JlZ2lzdGVyX2RyaXZlcmAuIE9rYXksIGl0J3MgYSBQQ0kgZHJpdmVyLlxuXG5Ob3csIGNvdWxkIHN5emthbGxlciBmdXp6IHRoaXM/ICBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLCBhbmQgSSBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQuIExldCBtZSBhY2Nlc3MgbXkgbG9uZy10ZXJtIG1lbW9yeSBhYm91dCBzeXprYWxsZXIncyBQQ0kgZnV6emluZy4uLiBPa2F5LCBpdCB3YXMgYWRkZWQgaW4gMjAyNC4gIERvZXMgaXQgdXNlIGEgY3VzdG9tIFFFTVUgZGV2aWNlIGxpa2UgYHN5emthbGxlci1wY2lgPyBObywgdGhhdCdzIG5vdCByaWdodC4gSXQgZG9lc24ndCB1c2UgdGhlIGBwY2ktdGVzdGRldmAgZWl0aGVyLiAgQWgsIHJpZ2h0ISBTeXprYWxsZXIgaW5qZWN0cyBhIFBDSSBkZXZpY2UsIHNvbWVob3cgdXNpbmcgc2hhcmVkIG1lbW9yeSwgdG8gdGVsbCB0aGUgZXhlY3V0b3Igd2hhdCBNTUlPIHJlYWRzIHNob3VsZCByZXR1cm4uXG5cbklmIHN5emthbGxlciBjb3VsZCBlbXVsYXRlICphbnkqIFBDSSBkZXZpY2UsIHRoZW4gYHJ0YXNlYCAqaXMqIHJlYWNoYWJsZS4gIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbnkgbWVudGlvbiBvZiBgc3l6a2FsbGVyLXBjaWAgaW4gdGhlIGtlcm5lbC4gTm9wZSwgaXQgd291bGQgYmUgaW4gUUVNVS5cblxuSWYgc3l6a2FsbGVyICpjYW4qIGVtdWxhdGUgYW55IFBDSSBkZXZpY2UsIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgIGZvciBhbGwgUENJIGRyaXZlcnMuICBCdXQsIHRoZSBwcm9tcHQuLi4gKlwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLi4uXCIqIE9rYXksIHNvIGlmIGl0J3Mgc29mdHdhcmUgZW11bGF0ZWQsIGl0J3Mgc3RpbGwgcmVhY2hhYmxlLiAgSXMgdGhpcyBjb25zaWRlcmVkIHNvZnR3YXJlIGVtdWxhdGlvbj8gWWVzLCBzbyBJIGhhdmUgdG8gYmUgY2FyZWZ1bCBoZXJlLlxuXG5TbywgZG9lcyBzeXprYWxsZXIgKmFjdHVhbGx5KiB1c2UgYSBjdXN0b20gUUVNVSBkZXZpY2U/IE5vLiAgSXQgZG9lc24ndCB1c2UgYHBjaS10ZXN0ZGV2YCBvciBldmVuIGB2ZmlvYCBmb3IgaG9zdCBlbXVsYXRpb24uIERvZXMgaXQgdXNlIGB2aXJ0aW9gPyBOby5cblxuSSBoYXZlIHRvIGNhcmVmdWxseSBldmFsdWF0ZSB0aGUgcmlzay4gSWYgSSBzYXkgYFdvcnRoRnV6emluZz1mYWxzZWAgYW5kIGl0IElTIHJlYWNoYWJsZSwgSSdtIHdyb25nLiBJZiBJIHNheSBgV29ydGhGdXp6aW5nPXRydWVgIGFuZCBpdCdzIG5vdCwgSSdtIGF0IGxlYXN0IGxlc3Mgd3JvbmcuICBCdXQsIHRoZSBwcm9tcHQgc3RyZXNzZXMgXCJpbXBvc3NpYmxlIHRvIHJlYWNoXCIgYW5kIG1lbnRpb25zIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5TbywgZG9lcyBgcnRhc2VgIGhhdmUgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmU/IE5vLiBJcyB0aGVyZSBhIGdlbmVyaWMgUENJIGVtdWxhdG9yIGluIHRoZSBrZXJuZWw/IE5vLiBUaGVyZWZvcmUsIHdpdGhvdXQgYSBzcGVjaWFsIHNvZnR3YXJlIHNldHVwLCBpdCAqaXMqIGltcG9zc2libGUgdG8gcmVhY2guXG5cbk5vdywgY29uc2lkZXIgY2FzZXMgbGlrZSBVU0Igd2l0aCBgZHVtbXlfaGNkYCwgV2lGaSB3aXRoIGBtYWM4MDIxMV9od3NpbWAsIEJsdWV0b290aCB3aXRoIGB2aGNpYCwgQ0FOIHdpdGggYHZjYW5gLiBUaGV5ICphcmUqIHJlYWNoYWJsZS4gQnV0IHdoYXQgYWJvdXQgUENJPyAgTm8gZ2VuZXJpYyBkdW1teSBob3N0IGNvbnRyb2xsZXIgaW4gdGhlIGtlcm5lbC4gIFRoZSBgUENJX0VORFBPSU5UX1RFU1RgIGlzICpub3QqIGEgZ2VuZXJhbCBlbXVsYXRvci4gUENJIGRyaXZlcnMgYXJlICpnZW5lcmFsbHkqIHVucmVhY2hhYmxlIHdpdGhvdXQgc29tZXRoaW5nIGxpa2UgYSBjdXN0b20gZW11bGF0b3IgaW4gUUVNVSwgb3IgbGlrZSB0aGUgZXhpc3RpbmcgYHZpcnRpb2AsIGBlMTAwMGAsIG9yIGBydGw4MTM5YC5cblxuT2theSwgaXMgYHJ0YXNlYCBlbXVsYXRlZCBpbiBRRU1VPyBJdCdzIFJlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXQuIEl0J3MgdmVyeSBzcGVjaWZpYywgYW5kIHJlbGF0aXZlbHkgbmV3IChhZGRlZCBhcm91bmQgMjAyNCksIHNvIFFFTVUgYWxtb3N0IGNlcnRhaW5seSBkb2VzICpub3QqIGVtdWxhdGUgaXQuIFRoZXJlZm9yZSwgaXQgaXMgaW1wb3NzaWJsZSB0byByZWFjaC5cblxuQ291bGQgYHN5emthbGxlcmAgdXNlIGB2ZmlvLW1kZXZgPyBObywgdGhhdCdzIG5vdCBpdC4gIFRoZXJlJ3Mgbm8gYG1kZXZgIGRyaXZlciBmb3IgZ2VuZXJpYyBQQ0kgZW11bGF0aW9uLCBhbmQgYHZmaW8tdXNlcmAgaXMgYWxzbyBvdXQgYmVjYXVzZSBpdCdzIHRoZSB1c2VyIHNwYWNlIGVtdWxhdG9yLiBUaGF0IGJyaW5ncyBtZSBiYWNrIHRvIG15IHByZXZpb3VzIHJlYXNvbmluZywgd2hpY2ggc2F5cyB0aGF0IHNpbmNlIHN5emthbGxlciB0ZXN0cyBnZW5lcmljIHBhdGNoZXMsIHRoaXMgcGF0Y2ggcHJvYmFibHkgY2FuJ3QgYmUgcmVhY2hlZCBpZiBpdCBpcyBmb3IgYSBzcGVjaWZpYyBkZXZpY2UuXG5cbkxldCdzIHZlcmlmeS4gRG9lcyBhbnkgYENPTkZJR19QQ0lfREVCVUdgIHN0dWZmIGFsbG93IGluamVjdGluZyBkZXZpY2VzPyBOby4gU3l6a2FsbGVyJ3MgYHN5el9wY2lfZGV2aWNlX2FkZGAuIEhvdyBkb2VzIHRoYXQgKmFjdHVhbGx5KiB3b3JrPyBTeXprYWxsZXIgcnVucyBpbiBHQ0UsIGFuZCBHQ0UgZG9lc24ndCBydW4gY3VzdG9tIFFFTVUgZGV2aWNlcy4gVGhlcmVmb3JlLCBob3cgZG9lcyBTeXprYWxsZXIgdGVzdCBQQ0kgb24gR0NFPyBJdCBkb2VzIG5vdCEgUENJXG5cbiIsIklucHV0VG9rZW5zIjo0NjY3MCwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjAzOjE5LjY3NjE3MDcwOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcnRhc2VgIGRyaXZlciAoUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCksIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgYW5kIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiAoYHJ0YXNlX2luaXRfb25lYCkgc3RyaWN0bHkgY2hlY2tzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSB2ZXJzaW9ucyB2aWEgTU1JTyByZWFkcyAoYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYCkuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGEgZGVkaWNhdGVkIGVtdWxhdG9yLCB0aGUgZGV2aWNlIHByb2JlIHdpbGwgZmFpbCwgdGhlIG5ldGRldmljZSB3aWxsIG5vdCBiZSByZWdpc3RlcmVkLCBhbmQgdGhlIG1vZGlmaWVkIGNvZGUgKGBydGFzZV9zdGFydF94bWl0YCBhbmQgYHJ0YXNlX3NrYl9wYWRgKSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHJ0YXNlYCBkcml2ZXIgKFJlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXQpLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwsIGFuZCB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gKGBydGFzZV9pbml0X29uZWApIHN0cmljdGx5IGNoZWNrcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgdmVyc2lvbnMgdmlhIE1NSU8gcmVhZHMgKGBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZGApLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIGRlZGljYXRlZCBlbXVsYXRvciwgdGhlIGRldmljZSBwcm9iZSB3aWxsIGZhaWwsIHRoZSBuZXRkZXZpY2Ugd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIChgcnRhc2Vfc3RhcnRfeG1pdGAgYW5kIGBydGFzZV9za2JfcGFkYCkgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xjrx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 05:32:52 +0000 UTC FinishedAt: 2026-07-10 06:03:22 +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+CgkJCTx0ZD4yMDI2LzA3LzEwIDA1OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcnRhc2VgIGRyaXZlciAoUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCksIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgYW5kIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gKGBydGFzZV9pbml0X29uZWApIHN0cmljdGx5IGNoZWNrcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgdmVyc2lvbnMgdmlhIE1NSU8gcmVhZHMgKGBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZGApLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIGRlZGljYXRlZCBlbXVsYXRvciwgdGhlIGRldmljZSBwcm9iZSB3aWxsIGZhaWwsIHRoZSBuZXRkZXZpY2Ugd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIChgcnRhc2Vfc3RhcnRfeG1pdGAgYW5kIGBydGFzZV9za2JfcGFkYCkgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI1Mjk5NjJmY2EzMTc3NzU0ZmU5NjY4ZmQzNjlmYjU2ZWFlMTkzYjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwNTo1OTo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlLmhcbmluZGV4IDliZDY4NzI0NzRjMTFiLi4wM2IxMmQ4M2Y2ZTlkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oXG5AQCAtMTkyLDYgJiM0MzsxOTIsMTIgQEAgZW51bSBydGFzZV9zd19mbGFnX2NvbnRlbnQge1xuIFx0UlRBU0VfU1dGX01TSVhfRU5BQkxFRCA9IEJJVCgyKSxcbiB9O1xuIFxuJiM0MztlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCB7XG4mIzQzO1x0UlRBU0VfUEFSU0VfT0ssXG4mIzQzO1x0UlRBU0VfUEFSU0VfU0tJUCxcbiYjNDM7XHRSVEFTRV9QQVJTRV9EUk9QLFxuJiM0Mzt9O1xuJiM0MztcbiAjZGVmaW5lIFJTVkRfTUFTSyAweDNGRkZDMDAwXG4gXG4gc3RydWN0IHJ0YXNlX3R4X2Rlc2Mge1xuQEAgLTM2Myw0ICYjNDM7MzY5LDYgQEAgc3RydWN0IHJ0YXNlX3ByaXZhdGUge1xuIFxuICNkZWZpbmUgUlRBU0VfTVNTX01BU0sgR0VOTUFTSygyOCwgMTgpXG4gXG4mIzQzOyNkZWZpbmUgUlRBU0VfTUlOX1BBRF9MRU4gNDdcbiYjNDM7XG4gI2VuZGlmIC8qIFJUQVNFX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jXG5pbmRleCAyNTU2Njc3NzVmMGU4Yi4uNDE2OGFkOWU0OGVhY2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmNcbkBAIC02MSw2ICYjNDM7NjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xhc3NpZnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vaXJxLmhcdTAwM2VcbkBAIC0xMjUyLDYgJiM0MzsxMjUzLDE5OSBAQCBzdGF0aWMgdTMyIHJ0YXNlX3R4X2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBjc3VtX2NtZDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCBydGFzZV9nZXRfbDNfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdFx0ICBfX2JlMTYgKnByb3RvLFxuJiM0MztcdFx0XHRcdFx0XHQgIHUzMiAqbmV0d29ya19vZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdmxhbl9oZHIgKnZoLCBfdmg7XG4mIzQzO1x0c3RydWN0IGV0aGhkciAqZWgsIF9laDtcbiYjNDM7XHR1MzIgb2Zmc2V0ID0gRVRIX0hMRU47XG4mIzQzO1xuJiM0MztcdGVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKF9laCksIFx1MDAyNl9laCk7XG4mIzQzO1x0aWYgKCFlaClcbiYjNDM7XHRcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xuJiM0MztcbiYjNDM7XHQqcHJvdG8gPSBlaC1cdTAwM2VoX3Byb3RvO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoZXRoX3R5cGVfdmxhbigqcHJvdG8pKSB7XG4mIzQzO1x0XHR2aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF92aCksIFx1MDAyNl92aCk7XG4mIzQzO1x0XHRpZiAoIXZoKVxuJiM0MztcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcbiYjNDM7XG4mIzQzO1x0XHQqcHJvdG8gPSB2aC1cdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBWTEFOX0hMRU47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqbmV0d29ya19vZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBSVEFTRV9QQVJTRV9PSztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcnRhc2VfcGFkX3RvX3RyYW5zcG9ydF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICAgICAgdTMyIHRyYW5zcG9ydF9vZmZzZXQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHUzMiBwYWRfdG9fbGVuKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHRyYW5zX2RhdGFfbGVuO1xuJiM0MztcdHUzMiBwYWRfbGVuO1xuJiM0MztcbiYjNDM7XHR0cmFuc19kYXRhX2xlbiA9IHNrYi1cdTAwM2VsZW4gLSB0cmFuc3BvcnRfb2Zmc2V0O1xuJiM0MztcdGlmICh0cmFuc19kYXRhX2xlbiBcdTAwM2U9IHBhZF90b19sZW4pXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkge1xuJiM0MztcdFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFkX2xlbiA9IHBhZF90b19sZW4gLSB0cmFuc19kYXRhX2xlbjtcbiYjNDM7XHRpZiAoX19za2JfcHV0X3BhZHRvKHNrYiwgc2tiLVx1MDAzZWxlbiAmIzQzOyBwYWRfbGVuLCBmYWxzZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgZW51bSBydGFzZV9wYXJzZV9yZXN1bHQgcnRhc2VfZ2V0X3RyYW5zcG9ydF9vZmZzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHUzMiAqdHJhbnNwb3J0X29mZnNldCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHU4ICp0cmFuc3BvcnRfcHJvdG8sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICB1MzIgKnBhZF90b19sZW4pXG4mIzQzO3tcbiYjNDM7XHRlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCByZXQ7XG4mIzQzO1x0c3RydWN0IGlwdjZoZHIgKmk2aCwgX2k2aDtcbiYjNDM7XHRzdHJ1Y3QgaXBoZHIgKmloLCBfaWg7XG4mIzQzO1x0Ym9vbCBub25fZmlyc3RfZnJhZztcbiYjNDM7XHRfX2JlMTYgcHJvdG87XG4mIzQzO1x0dTMyIG9mZnNldDtcbiYjNDM7XHR1MzIgbm87XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0YXNlX2dldF9sM19wcm90byhza2IsIFx1MDAyNnByb3RvLCBcdTAwMjZubyk7XG4mIzQzO1x0aWYgKHJldCAhPSBSVEFTRV9QQVJTRV9PSylcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocHJvdG8pIHtcbiYjNDM7XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbiYjNDM7XHRcdGloID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbm8sIHNpemVvZihfaWgpLCBcdTAwMjZfaWgpO1xuJiM0MztcdFx0aWYgKCFpaClcbiYjNDM7XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGloLVx1MDAzZWlobCBcdTAwM2MgNSlcbiYjNDM7XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4mIzQzO1xuJiM0MztcdFx0b2Zmc2V0ID0gbm8gJiM0MzsgaWgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRcdGlmIChvZmZzZXQgXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4mIzQzO1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xuJiM0MztcbiYjNDM7XHRcdG5vbl9maXJzdF9mcmFnID0gbnRvaHMoaWgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUF9PRkZTRVQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGloLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQKSB7XG4mIzQzO1x0XHRcdGlmIChza2ItXHUwMDNlbGVuIC0gb2Zmc2V0IFx1MDAzYyBzaXplb2Yoc3RydWN0IHRjcGhkcikpIHtcbiYjNDM7XHRcdFx0XHRpZiAobm9uX2ZpcnN0X2ZyYWcpIHtcbiYjNDM7XHRcdFx0XHRcdCp0cmFuc3BvcnRfb2Zmc2V0ID0gb2Zmc2V0O1xuJiM0MztcdFx0XHRcdFx0KnRyYW5zcG9ydF9wcm90byA9IElQUFJPVE9fVENQO1xuJiM0MztcdFx0XHRcdFx0KnBhZF90b19sZW4gPSBzaXplb2Yoc3RydWN0IHRjcGhkcik7XG4mIzQzO1xuJiM0MztcdFx0XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX09LO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9TS0lQO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChpaC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbiYjNDM7XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX1NLSVA7XG4mIzQzO1xuJiM0MztcdFx0KnRyYW5zcG9ydF9vZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1x0XHQqdHJhbnNwb3J0X3Byb3RvID0gSVBQUk9UT19VRFA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQgXHUwMDNjIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkge1xuJiM0MztcdFx0XHRpZiAobm9uX2ZpcnN0X2ZyYWcpIHtcbiYjNDM7XHRcdFx0XHQqcGFkX3RvX2xlbiA9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX09LO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gUlRBU0VfUEFSU0VfT0s7XG4mIzQzO1xuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4mIzQzO1x0XHRpNmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBubywgc2l6ZW9mKF9pNmgpLCBcdTAwMjZfaTZoKTtcbiYjNDM7XHRcdGlmICghaTZoKVxuJiM0MztcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcbiYjNDM7XG4mIzQzO1x0XHRvZmZzZXQgPSBubyAmIzQzOyBzaXplb2YoKmk2aCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGk2aC1cdTAwM2VuZXh0aGRyID09IElQUFJPVE9fVENQKSB7XG4mIzQzO1x0XHRcdGlmIChza2ItXHUwMDNlbGVuIC0gb2Zmc2V0IFx1MDAzYyBzaXplb2Yoc3RydWN0IHRjcGhkcikpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfU0tJUDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoaTZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19VRFApXG4mIzQzO1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9TS0lQO1xuJiM0MztcbiYjNDM7XHRcdGlmIChza2ItXHUwMDNlbGVuIC0gb2Zmc2V0IFx1MDAzYyBzaXplb2Yoc3RydWN0IHVkcGhkcikpXG4mIzQzO1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xuJiM0MztcbiYjNDM7XHRcdCp0cmFuc3BvcnRfb2Zmc2V0ID0gb2Zmc2V0O1xuJiM0MztcdFx0KnRyYW5zcG9ydF9wcm90byA9IElQUFJPVE9fVURQO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBSVEFTRV9QQVJTRV9PSztcbiYjNDM7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBSVEFTRV9QQVJTRV9TS0lQO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcnRhc2Vfc2tiX3BhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBydGFzZV9wYXJzZV9yZXN1bHQgcmV0O1xuJiM0MztcdHUzMiB0cmFuc3BvcnRfb2Zmc2V0O1xuJiM0MztcdF9fYmUxNiAqZGVzdCwgX2Rlc3Q7XG4mIzQzO1x0dTMyIHRyYW5zX2RhdGFfbGVuO1xuJiM0MztcdHUzMiBwYWRfdG9fbGVuID0gMDtcbiYjNDM7XHR1OCB0cmFuc3BvcnRfcHJvdG87XG4mIzQzO1x0dTE2IGRlc3RfcG9ydDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRhc2VfZ2V0X3RyYW5zcG9ydF9vZmZzZXQoc2tiLCBcdTAwMjZ0cmFuc3BvcnRfb2Zmc2V0LFxuJiM0MztcdFx0XHRcdFx0IFx1MDAyNnRyYW5zcG9ydF9wcm90bywgXHUwMDI2cGFkX3RvX2xlbik7XG4mIzQzO1x0aWYgKHJldCA9PSBSVEFTRV9QQVJTRV9TS0lQKSB7XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9IGVsc2UgaWYgKHJldCA9PSBSVEFTRV9QQVJTRV9EUk9QKSB7XG4mIzQzO1x0XHRuZXRkZXZfZGJnKHNrYi1cdTAwM2VkZXYsIFwmIzM0O2Ryb3AgbWFsZm9ybWVkIHBhY2tldFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGFkX3RvX2xlbiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXJ0YXNlX3BhZF90b190cmFuc3BvcnRfbGVuKHNrYiwgdHJhbnNwb3J0X29mZnNldCwgcGFkX3RvX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICh0cmFuc3BvcnRfcHJvdG8gIT0gSVBQUk9UT19VRFApXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0dHJhbnNfZGF0YV9sZW4gPSBza2ItXHUwMDNlbGVuIC0gdHJhbnNwb3J0X29mZnNldDtcbiYjNDM7XHRpZiAodHJhbnNfZGF0YV9sZW4gXHUwMDNjIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGxlbikgfHxcbiYjNDM7XHQgICAgdHJhbnNfZGF0YV9sZW4gXHUwMDNlPSBSVEFTRV9NSU5fUEFEX0xFTilcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRkZXN0ID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYixcbiYjNDM7XHRcdFx0XHQgIHRyYW5zcG9ydF9vZmZzZXQgJiM0MztcbiYjNDM7XHRcdFx0XHQgIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpLFxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKF9kZXN0KSwgXHUwMDI2X2Rlc3QpO1xuJiM0MztcdGlmICghZGVzdClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRkZXN0X3BvcnQgPSBudG9ocygqZGVzdCk7XG4mIzQzO1x0aWYgKGRlc3RfcG9ydCAhPSBQVFBfRVZfUE9SVCBcdTAwMjZcdTAwMjYgZGVzdF9wb3J0ICE9IFBUUF9HRU5fUE9SVClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnRhc2VfcGFkX3RvX3RyYW5zcG9ydF9sZW4oc2tiLCB0cmFuc3BvcnRfb2Zmc2V0LFxuJiM0MztcdFx0XHRcdFx0ICBSVEFTRV9NSU5fUEFEX0xFTik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydGFzZV94bWl0X2ZyYWdzKHN0cnVjdCBydGFzZV9yaW5nICpyaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICB1MzIgb3B0czEsIHUzMiBvcHRzMilcbiB7XG5AQCAtMTM2NSw2ICYjNDM7MTU1OSw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBydGFzZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG9wdHMyIHw9IHJ0YXNlX3R4X2NzdW0oc2tiLCBkZXYpO1xuIFx0fVxuIFxuJiM0MztcdGlmICghcnRhc2Vfc2tiX3BhZChza2IpKVxuJiM0MztcdFx0Z290byBlcnJfZG1hXzA7XG4mIzQzO1xuIFx0ZnJhZ3MgPSBydGFzZV94bWl0X2ZyYWdzKHJpbmcsIHNrYiwgb3B0czEsIG9wdHMyKTtcbiBcdGlmICh1bmxpa2VseShmcmFncyBcdTAwM2MgMCkpXG4gXHRcdGdvdG8gZXJyX2RtYV8wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA1OjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcnRhc2VgIGRyaXZlciAoUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCksIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgYW5kIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gKGBydGFzZV9pbml0X29uZWApIHN0cmljdGx5IGNoZWNrcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgdmVyc2lvbnMgdmlhIE1NSU8gcmVhZHMgKGBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZGApLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIGRlZGljYXRlZCBlbXVsYXRvciwgdGhlIGRldmljZSBwcm9iZSB3aWxsIGZhaWwsIHRoZSBuZXRkZXZpY2Ugd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIChgcnRhc2Vfc3RhcnRfeG1pdGAgYW5kIGBydGFzZV9za2JfcGFkYCkgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjUyOTk2MmZjYTMxNzc3NTRmZTk2NjhmZDM2OWZiNTZlYWUxOTNiNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDA1OjU5OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oCmluZGV4IDliZDY4NzI0NzRjMTFiLi4wM2IxMmQ4M2Y2ZTlkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2UuaApAQCAtMTkyLDYgJiM0MzsxOTIsMTIgQEAgZW51bSBydGFzZV9zd19mbGFnX2NvbnRlbnQgewogCVJUQVNFX1NXRl9NU0lYX0VOQUJMRUQgPSBCSVQoMiksCiB9OwogCiYjNDM7ZW51bSBydGFzZV9wYXJzZV9yZXN1bHQgewomIzQzOwlSVEFTRV9QQVJTRV9PSywKJiM0MzsJUlRBU0VfUEFSU0VfU0tJUCwKJiM0MzsJUlRBU0VfUEFSU0VfRFJPUCwKJiM0Mzt9OwomIzQzOwogI2RlZmluZSBSU1ZEX01BU0sgMHgzRkZGQzAwMAogCiBzdHJ1Y3QgcnRhc2VfdHhfZGVzYyB7CkBAIC0zNjMsNCAmIzQzOzM2OSw2IEBAIHN0cnVjdCBydGFzZV9wcml2YXRlIHsKIAogI2RlZmluZSBSVEFTRV9NU1NfTUFTSyBHRU5NQVNLKDI4LCAxOCkKIAomIzQzOyNkZWZpbmUgUlRBU0VfTUlOX1BBRF9MRU4gNDcKJiM0MzsKICNlbmRpZiAvKiBSVEFTRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jCmluZGV4IDI1NTY2Nzc3NWYwZThiLi40MTY4YWQ5ZTQ4ZWFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMKQEAgLTYxLDYgJiM0Mzs2MSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcG1fcnVudGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbGFzc2lmeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3RjcC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9pcnEuaCZndDsKQEAgLTEyNTIsNiAmIzQzOzEyNTMsMTk5IEBAIHN0YXRpYyB1MzIgcnRhc2VfdHhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXJldHVybiBjc3VtX2NtZDsKIH0KIAomIzQzO3N0YXRpYyBlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCBydGFzZV9nZXRfbDNfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCQkgIF9fYmUxNiAqcHJvdG8sCiYjNDM7CQkJCQkJICB1MzIgKm5ldHdvcmtfb2Zmc2V0KQomIzQzO3sKJiM0MzsJc3RydWN0IHZsYW5faGRyICp2aCwgX3ZoOwomIzQzOwlzdHJ1Y3QgZXRoaGRyICplaCwgX2VoOwomIzQzOwl1MzIgb2Zmc2V0ID0gRVRIX0hMRU47CiYjNDM7CiYjNDM7CWVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKF9laCksICZhbXA7X2VoKTsKJiM0MzsJaWYgKCFlaCkKJiM0MzsJCXJldHVybiBSVEFTRV9QQVJTRV9EUk9QOwomIzQzOwomIzQzOwkqcHJvdG8gPSBlaC0mZ3Q7aF9wcm90bzsKJiM0MzsKJiM0MzsJd2hpbGUgKGV0aF90eXBlX3ZsYW4oKnByb3RvKSkgewomIzQzOwkJdmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfdmgpLCAmYW1wO192aCk7CiYjNDM7CQlpZiAoIXZoKQomIzQzOwkJCXJldHVybiBSVEFTRV9QQVJTRV9EUk9QOwomIzQzOwomIzQzOwkJKnByb3RvID0gdmgtJmd0O2hfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CiYjNDM7CQlvZmZzZXQgJiM0Mzs9IFZMQU5fSExFTjsKJiM0MzsJfQomIzQzOwomIzQzOwkqbmV0d29ya19vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBSVEFTRV9QQVJTRV9PSzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgcnRhc2VfcGFkX3RvX3RyYW5zcG9ydF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgICAgIHUzMiB0cmFuc3BvcnRfb2Zmc2V0LAomIzQzOwkJCQkgICAgICAgdTMyIHBhZF90b19sZW4pCiYjNDM7ewomIzQzOwl1MzIgdHJhbnNfZGF0YV9sZW47CiYjNDM7CXUzMiBwYWRfbGVuOwomIzQzOwomIzQzOwl0cmFuc19kYXRhX2xlbiA9IHNrYi0mZ3Q7bGVuIC0gdHJhbnNwb3J0X29mZnNldDsKJiM0MzsJaWYgKHRyYW5zX2RhdGFfbGVuICZndDs9IHBhZF90b19sZW4pCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkgewomIzQzOwkJaWYgKHNrYl9saW5lYXJpemUoc2tiKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGFkX2xlbiA9IHBhZF90b19sZW4gLSB0cmFuc19kYXRhX2xlbjsKJiM0MzsJaWYgKF9fc2tiX3B1dF9wYWR0byhza2IsIHNrYi0mZ3Q7bGVuICYjNDM7IHBhZF9sZW4sIGZhbHNlKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCBydGFzZV9nZXRfdHJhbnNwb3J0X29mZnNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJCQkgIHUzMiAqdHJhbnNwb3J0X29mZnNldCwKJiM0MzsJCQkJCQkJICB1OCAqdHJhbnNwb3J0X3Byb3RvLAomIzQzOwkJCQkJCQkgIHUzMiAqcGFkX3RvX2xlbikKJiM0Mzt7CiYjNDM7CWVudW0gcnRhc2VfcGFyc2VfcmVzdWx0IHJldDsKJiM0MzsJc3RydWN0IGlwdjZoZHIgKmk2aCwgX2k2aDsKJiM0MzsJc3RydWN0IGlwaGRyICppaCwgX2loOwomIzQzOwlib29sIG5vbl9maXJzdF9mcmFnOwomIzQzOwlfX2JlMTYgcHJvdG87CiYjNDM7CXUzMiBvZmZzZXQ7CiYjNDM7CXUzMiBubzsKJiM0MzsKJiM0MzsJcmV0ID0gcnRhc2VfZ2V0X2wzX3Byb3RvKHNrYiwgJmFtcDtwcm90bywgJmFtcDtubyk7CiYjNDM7CWlmIChyZXQgIT0gUlRBU0VfUEFSU0VfT0spCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlzd2l0Y2ggKHByb3RvKSB7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOgomIzQzOwkJaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBubywgc2l6ZW9mKF9paCksICZhbXA7X2loKTsKJiM0MzsJCWlmICghaWgpCiYjNDM7CQkJcmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7CiYjNDM7CiYjNDM7CQlpZiAoaWgtJmd0O2lobCAmbHQ7IDUpCiYjNDM7CQkJcmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7CiYjNDM7CiYjNDM7CQlvZmZzZXQgPSBubyAmIzQzOyBpaC0mZ3Q7aWhsICogNDsKJiM0MzsJCWlmIChvZmZzZXQgJmd0OyBza2ItJmd0O2xlbikKJiM0MzsJCQlyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDsKJiM0MzsKJiM0MzsJCW5vbl9maXJzdF9mcmFnID0gbnRvaHMoaWgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyBJUF9PRkZTRVQ7CiYjNDM7CiYjNDM7CQlpZiAoaWgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fVENQKSB7CiYjNDM7CQkJaWYgKHNrYi0mZ3Q7bGVuIC0gb2Zmc2V0ICZsdDsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKSB7CiYjNDM7CQkJCWlmIChub25fZmlyc3RfZnJhZykgewomIzQzOwkJCQkJKnRyYW5zcG9ydF9vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CQkJCQkqdHJhbnNwb3J0X3Byb3RvID0gSVBQUk9UT19UQ1A7CiYjNDM7CQkJCQkqcGFkX3RvX2xlbiA9IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKJiM0MzsKJiM0MzsJCQkJCXJldHVybiBSVEFTRV9QQVJTRV9PSzsKJiM0MzsJCQkJfQomIzQzOwomIzQzOwkJCQlyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJcmV0dXJuIFJUQVNFX1BBUlNFX1NLSVA7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoaWgtJmd0O3Byb3RvY29sICE9IElQUFJPVE9fVURQKQomIzQzOwkJCXJldHVybiBSVEFTRV9QQVJTRV9TS0lQOwomIzQzOwomIzQzOwkJKnRyYW5zcG9ydF9vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CQkqdHJhbnNwb3J0X3Byb3RvID0gSVBQUk9UT19VRFA7CiYjNDM7CiYjNDM7CQlpZiAoc2tiLSZndDtsZW4gLSBvZmZzZXQgJmx0OyBzaXplb2Yoc3RydWN0IHVkcGhkcikpIHsKJiM0MzsJCQlpZiAobm9uX2ZpcnN0X2ZyYWcpIHsKJiM0MzsJCQkJKnBhZF90b19sZW4gPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CiYjNDM7CiYjNDM7CQkJCXJldHVybiBSVEFTRV9QQVJTRV9PSzsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJcmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXR1cm4gUlRBU0VfUEFSU0VfT0s7CiYjNDM7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6CiYjNDM7CQlpNmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBubywgc2l6ZW9mKF9pNmgpLCAmYW1wO19pNmgpOwomIzQzOwkJaWYgKCFpNmgpCiYjNDM7CQkJcmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7CiYjNDM7CiYjNDM7CQlvZmZzZXQgPSBubyAmIzQzOyBzaXplb2YoKmk2aCk7CiYjNDM7CiYjNDM7CQlpZiAoaTZoLSZndDtuZXh0aGRyID09IElQUFJPVE9fVENQKSB7CiYjNDM7CQkJaWYgKHNrYi0mZ3Q7bGVuIC0gb2Zmc2V0ICZsdDsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKQomIzQzOwkJCQlyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDsKJiM0MzsKJiM0MzsJCQlyZXR1cm4gUlRBU0VfUEFSU0VfU0tJUDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChpNmgtJmd0O25leHRoZHIgIT0gSVBQUk9UT19VRFApCiYjNDM7CQkJcmV0dXJuIFJUQVNFX1BBUlNFX1NLSVA7CiYjNDM7CiYjNDM7CQlpZiAoc2tiLSZndDtsZW4gLSBvZmZzZXQgJmx0OyBzaXplb2Yoc3RydWN0IHVkcGhkcikpCiYjNDM7CQkJcmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7CiYjNDM7CiYjNDM7CQkqdHJhbnNwb3J0X29mZnNldCA9IG9mZnNldDsKJiM0MzsJCSp0cmFuc3BvcnRfcHJvdG8gPSBJUFBST1RPX1VEUDsKJiM0MzsKJiM0MzsJCXJldHVybiBSVEFTRV9QQVJTRV9PSzsKJiM0MzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBSVEFTRV9QQVJTRV9TS0lQOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHJ0YXNlX3NrYl9wYWQoc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWVudW0gcnRhc2VfcGFyc2VfcmVzdWx0IHJldDsKJiM0MzsJdTMyIHRyYW5zcG9ydF9vZmZzZXQ7CiYjNDM7CV9fYmUxNiAqZGVzdCwgX2Rlc3Q7CiYjNDM7CXUzMiB0cmFuc19kYXRhX2xlbjsKJiM0MzsJdTMyIHBhZF90b19sZW4gPSAwOwomIzQzOwl1OCB0cmFuc3BvcnRfcHJvdG87CiYjNDM7CXUxNiBkZXN0X3BvcnQ7CiYjNDM7CiYjNDM7CXJldCA9IHJ0YXNlX2dldF90cmFuc3BvcnRfb2Zmc2V0KHNrYiwgJmFtcDt0cmFuc3BvcnRfb2Zmc2V0LAomIzQzOwkJCQkJICZhbXA7dHJhbnNwb3J0X3Byb3RvLCAmYW1wO3BhZF90b19sZW4pOwomIzQzOwlpZiAocmV0ID09IFJUQVNFX1BBUlNFX1NLSVApIHsKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9IGVsc2UgaWYgKHJldCA9PSBSVEFTRV9QQVJTRV9EUk9QKSB7CiYjNDM7CQluZXRkZXZfZGJnKHNrYi0mZ3Q7ZGV2LCAmIzM0O2Ryb3AgbWFsZm9ybWVkIHBhY2tldFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwYWRfdG9fbGVuICZhbXA7JmFtcDsKJiM0MzsJICAgICFydGFzZV9wYWRfdG9fdHJhbnNwb3J0X2xlbihza2IsIHRyYW5zcG9ydF9vZmZzZXQsIHBhZF90b19sZW4pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodHJhbnNwb3J0X3Byb3RvICE9IElQUFJPVE9fVURQKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXRyYW5zX2RhdGFfbGVuID0gc2tiLSZndDtsZW4gLSB0cmFuc3BvcnRfb2Zmc2V0OwomIzQzOwlpZiAodHJhbnNfZGF0YV9sZW4gJmx0OyBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBsZW4pIHx8CiYjNDM7CSAgICB0cmFuc19kYXRhX2xlbiAmZ3Q7PSBSVEFTRV9NSU5fUEFEX0xFTikKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlkZXN0ID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwKJiM0MzsJCQkJICB0cmFuc3BvcnRfb2Zmc2V0ICYjNDM7CiYjNDM7CQkJCSAgb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgZGVzdCksCiYjNDM7CQkJCSAgc2l6ZW9mKF9kZXN0KSwgJmFtcDtfZGVzdCk7CiYjNDM7CWlmICghZGVzdCkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlkZXN0X3BvcnQgPSBudG9ocygqZGVzdCk7CiYjNDM7CWlmIChkZXN0X3BvcnQgIT0gUFRQX0VWX1BPUlQgJmFtcDsmYW1wOyBkZXN0X3BvcnQgIT0gUFRQX0dFTl9QT1JUKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBydGFzZV9wYWRfdG9fdHJhbnNwb3J0X2xlbihza2IsIHRyYW5zcG9ydF9vZmZzZXQsCiYjNDM7CQkJCQkgIFJUQVNFX01JTl9QQURfTEVOKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0YXNlX3htaXRfZnJhZ3Moc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmcsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgdTMyIG9wdHMxLCB1MzIgb3B0czIpCiB7CkBAIC0xMzY1LDYgJiM0MzsxNTU5LDkgQEAgc3RhdGljIG5ldGRldl90eF90IHJ0YXNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJb3B0czIgfD0gcnRhc2VfdHhfY3N1bShza2IsIGRldik7CiAJfQogCiYjNDM7CWlmICghcnRhc2Vfc2tiX3BhZChza2IpKQomIzQzOwkJZ290byBlcnJfZG1hXzA7CiYjNDM7CiAJZnJhZ3MgPSBydGFzZV94bWl0X2ZyYWdzKHJpbmcsIHNrYiwgb3B0czEsIG9wdHMyKTsKIAlpZiAodW5saWtlbHkoZnJhZ3MgJmx0OyAwKSkKIAkJZ290byBlcnJfZG1hXzA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMjYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFsdGVrIEF1dG9tb3RpdmUgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciB0aGUgYHJ0YXNlYCBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYHJ0YXNlX21haW4uY2AuIEl0IGxvb2tzIGxpa2UgaXQgYWRkcyBhIGZ1bmN0aW9uIGNhbGxlZCBgcnRhc2Vfc2tiX3BhZGAgd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBgcnRhc2Vfc3RhcnRfeG1pdGAuIFRoZSBtYWluIHB1cnBvc2Ugc2VlbXMgdG8gYmUgcGFkZGluZyBwYWNrZXRzLCBzcGVjaWZpY2FsbHkgVURQIHBhY2tldHMgd2l0aCBkZXN0aW5hdGlvbiBwb3J0cyByZWxhdGVkIHRvIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApLCB0aG9zZSBiZWluZyBgUFRQX0VWX1BPUlRgIG9yIGBQVFBfR0VOX1BPUlRgLiBJZiB0aGVzZSBVRFAgcGFja2V0cyBhcmUgYmVsb3cgYSBjZXJ0YWluIGxlbmd0aCwgaXQgcGFkcyB0aGVtIHVwIHRvIGBSVEFTRV9NSU5fUEFEX0xFTmAsIHdoaWNoIGlzIDQ3IGJ5dGVzLgoKVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIGV2ZW4gcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsPyBUaGlzIGlzIGEgbmV0d29yayBkcml2ZXIgZm9yIGEgUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCwgd2hpY2ggaXMgYSBiaXQgbmljaGUuIE15IGZpcnN0IHRob3VnaHQgaXMgYWJvdXQgdmlydHVhbGl6YXRpb24uIENhbiBJIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBSZWFsIFBDSSBkcml2ZXJzIGxpa2UgdGhpcyBjYW4gYmUgdHJpY2t5LiBVbmxlc3MgSSYjMzk7bSB1c2luZyBzb21ldGhpbmcgbGlrZSBRRU1VIHdpdGggYSBzcGVjaWZpY2FsbHkgZW11bGF0ZWQgZGV2aWNlLCBvciBtYXliZSBgdmhjaWAgb3IgYSBgZHVtbXlgIGRldmljZSwgb3IgcGVyaGFwcyBpZiBzeXprYWxsZXIgY291bGQgaW5qZWN0IFBDSSBkZXZpY2VzLCBJJiMzOTttIGxpa2VseSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byB0ZXN0IHRoaXMgcHJvcGVybHkuIFdhaXQsIHN5emthbGxlciBkb2VzIGhhdmUgYHN5el9wY2lfZGV2aWNlX2FkZGAsIGJ1dCB0aGF0IG9ubHkgd29ya3MgaWYgdGhlIGRyaXZlciBiaW5kcyB0byBpdCBhbmQgaGFyZHdhcmUgZW11bGF0aW9uIGlzbiYjMzk7dCBuZWVkZWQsIG9yIHdlIGp1c3QgZnV6eiB0aGUgcHJvYmUuCgpBaCwgcmlnaHQhIGBydGFzZV9zdGFydF94bWl0YCBpcyB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgdGhlIHRyYW5zbWl0IGZ1bmN0aW9uIG9mIHRoZSBuZXR3b3JrIGRyaXZlci4gVG8gZXZlbiBnZXQgdGhlcmUsIHRoZSBkZXZpY2UgaGFzIHRvIGJlIHN1Y2Nlc3NmdWxseSBwcm9iZWQgYW5kIGJyb3VnaHQgdXAsIHdoaWNoIG1lYW5zIHRoZSBkcml2ZXIgaGFzIHRvIGJlIGxvYWRlZC4gU28sIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBgcnRhc2VgIGRyaXZlciBiZSBzdWNjZXNzZnVsbHkgcHJvYmVkIGFuZCBpbml0aWFsaXplZCB3aXRob3V0IHJlYWwgaGFyZHdhcmU/CgpJIG5lZWQgdG8gbG9vayBhdCB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4gTGV0JiMzOTtzIGRpZyBpbnRvIGBydGFzZV9pbml0X29uZWAgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGFzZV9pbml0X29uZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0yMzcxPXN0YXRpYyB2b2lkIHJ0YXNlX3JlbGVhc2VfYm9hcmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjM4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjIzODk6c3RhdGljIGludCBydGFzZV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIzOTAtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTI1OTQ9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0YXNlX3BjaV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjU5Ni1cdC5pZF90YWJsZSA9IHJ0YXNlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyNTk3Olx0LnByb2JlID0gcnRhc2VfaW5pdF9vbmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yNTk4LVx0LnJlbW92ZSA9IHJ0YXNlX3JlbW92ZV9vbmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2MQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbml0aWFsIEV4YW1pbmF0aW9uIG9mIGBydGFzZV9pbml0X29uZWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBwaW5wb2ludGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGBydGFzZV9pbml0X29uZWAgcm91dGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCBpdHMgYmVoYXZpb3IsIGNoZWNraW5nIGhvdyBpdCBoYW5kbGVzIGluaXRpYWxpemF0aW9uIHRhc2tzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHBpZWNlIG9mIGNvZGUgd29ya3MsIEkgd2lsbCBmb2xsb3cgdGhlIGxpbmVzIG9mIGxvZ2ljIHRvIGJ1aWxkIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjM4OTpcdHN0YXRpYyBpbnQgcnRhc2VfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4yMzkwOlx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuMjM5MTpcdHtcbjIzOTI6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMO1xuMjM5MzpcdFx0c3RydWN0IHJ0YXNlX2ludF92ZWN0b3IgKml2ZWM7XG4yMzk0Olx0XHR2b2lkIF9faW9tZW0gKmlvYWRkciA9IE5VTEw7XG4yMzk1Olx0XHRzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHA7XG4yMzk2Olx0XHRpbnQgcmV0LCBpO1xuMjM5NzpcdFxuMjM5ODpcdFx0aWYgKCFwZGV2LVx1MDAzZWlzX3BoeXNmbiBcdTAwMjZcdTAwMjYgcGRldi1cdTAwM2Vpc192aXJ0Zm4pIHtcbjIzOTk6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldixcbjI0MDA6XHRcdFx0XHRcJiMzNDtUaGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IGEgdmlydHVhbCBmdW5jdGlvbi5cJiMzNDspO1xuMjQwMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI0MDI6XHRcdH1cbjI0MDM6XHRcbjI0MDQ6XHRcdGRldl9kYmcoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0F1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0IGRyaXZlciBsb2FkZWRcXG5cJiMzNDspO1xuMjQwNTpcdFxuMjQwNjpcdFx0cmV0ID0gcnRhc2VfaW5pdF9ib2FyZChwZGV2LCBcdTAwMjZkZXYsIFx1MDAyNmlvYWRkcik7XG4yNDA3Olx0XHRpZiAocmV0KVxuMjQwODpcdFx0XHRyZXR1cm4gcmV0O1xuMjQwOTpcdFxuMjQxMDpcdFx0dHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuMjQxMTpcdFx0dHAtXHUwMDNlbW1pb19hZGRyID0gaW9hZGRyO1xuMjQxMjpcdFx0dHAtXHUwMDNlZGV2ID0gZGV2O1xuMjQxMzpcdFx0dHAtXHUwMDNlcGRldiA9IHBkZXY7XG4yNDE0Olx0XG4yNDE1Olx0XHQvKiBpZGVudGlmeSBjaGlwIGF0dGFjaGVkIHRvIGJvYXJkICovXG4yNDE2Olx0XHRyZXQgPSBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZCh0cCk7XG4yNDE3Olx0XHRpZiAocmV0KSB7XG4yNDE4Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4yNDE5Olx0XHRcdFx0XCYjMzQ7dW5rbm93biBjaGlwIHZlcnNpb246IDB4JTA4eCwgY29udGFjdCBydGFzZSBtYWludGFpbmVycyAoc2VlIE1BSU5UQUlORVJTIGZpbGUpXFxuXCYjMzQ7LFxuMjQyMDpcdFx0XHRcdHRwLVx1MDAzZWh3X3Zlcik7XG4yNDIxOlx0XHRcdGdvdG8gZXJyX291dF9yZWxlYXNlX2JvYXJkO1xuMjQyMjpcdFx0fVxuMjQyMzpcdFxuMjQyNDpcdFx0cnRhc2VfaW5pdF9zb2Z0d2FyZV92YXJpYWJsZShwZGV2LCB0cCk7XG4yNDI1Olx0XHRydGFzZV9pbml0X2hhcmR3YXJlKHRwKTtcbjI0MjY6XHRcbjI0Mjc6XHRcdHJldCA9IHJ0YXNlX2FsbG9jX2ludGVycnVwdChwZGV2LCB0cCk7XG4yNDI4Olx0XHRpZiAocmV0KSB7XG4yNDI5Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3VuYWJsZSB0byBhbGxvYyBNU0lYL01TSVxcblwmIzM0Oyk7XG4yNDMwOlx0XHRcdGdvdG8gZXJyX291dF9kZWxfbmFwaTtcbjI0MzE6XHRcdH1cbjI0MzI6XHRcbjI0MzM6XHRcdHJ0YXNlX2luaXRfbmFwaSh0cCk7XG4yNDM0Olx0XG4yNDM1Olx0XHRydGFzZV9pbml0X25ldGRldl9vcHMoZGV2KTtcbjI0MzY6XHRcbjI0Mzc6XHRcdGRldi1cdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfVFNUQVRTO1xuMjQzODpcdFxuMjQzOTpcdFx0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfFxuMjQ0MDpcdFx0XHRcdCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0hJR0hETUEgfFxuMjQ0MTpcdFx0XHRcdCBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfU0cgfFxuMjQ0MjpcdFx0XHRcdCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfSVBWNl9DU1VNIHxcbjI0NDM6XHRcdFx0XHQgTkVUSUZfRl9UU082O1xuMjQ0NDpcdFxuMjQ0NTpcdFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8XG4yNDQ2Olx0XHRcdFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1JYQ1NVTSB8XG4yNDQ3Olx0XHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8XG4yNDQ4Olx0XHRcdFx0ICAgTkVUSUZfRl9SWEFMTCB8IE5FVElGX0ZfUlhGQ1MgfFxuMjQ0OTpcdFx0XHRcdCAgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9UU082O1xuMjQ1MDpcdFxuMjQ1MTpcdFx0ZGV2LVx1MDAzZXZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08gfFxuMjQ1MjpcdFx0XHRcdCAgICAgTkVUSUZfRl9ISUdIRE1BO1xuMjQ1MzpcdFx0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0xJVkVfQUREUl9DSEFOR0U7XG4yNDU0Olx0XHRuZXRpZl9zZXRfdHNvX21heF9zaXplKGRldiwgUlRBU0VfTFNPXzY0Syk7XG4yNDU1Olx0XHRuZXRpZl9zZXRfdHNvX21heF9zZWdzKGRldiwgUlRBU0VfTklDX01BWF9QSFlTX0JVRl9DT1VOVF9MU08yKTtcbjI0NTY6XHRcbjI0NTc6XHRcdHJ0YXNlX2dldF9tYWNfYWRkcmVzcyhkZXYpO1xuMjQ1ODpcdFxuMjQ1OTpcdFx0dHAtXHUwMDNldGFsbHlfdmFkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4yNDYwOlx0XHRcdFx0XHRcdCAgICAgc2l6ZW9mKCp0cC1cdTAwM2V0YWxseV92YWRkciksXG4yNDYxOlx0XHRcdFx0XHRcdCAgICAgXHUwMDI2dHAtXHUwMDNldGFsbHlfcGFkZHIsXG4yNDYyOlx0XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4yNDYzOlx0XHRpZiAoIXRwLVx1MDAzZXRhbGx5X3ZhZGRyKSB7XG4yNDY0Olx0XHRcdHJldCA9IC1FTk9NRU07XG4yNDY1Olx0XHRcdGdvdG8gZXJyX291dF9mcmVlX2RtYTtcbjI0NjY6XHRcdH1cbjI0Njc6XHRcbjI0Njg6XHRcdHJ0YXNlX3RhbGx5X2NvdW50ZXJfY2xlYXIodHApO1xuMjQ2OTpcdFxuMjQ3MDpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7XG4yNDcxOlx0XG4yNDcyOlx0XHRuZXRpZl9jYXJyaWVyX29mZihkZXYpO1xuMjQ3MzpcdFxuMjQ3NDpcdFx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4yNDc1Olx0XHRpZiAocmV0KVxuMjQ3NjpcdFx0XHRnb3RvIGVycl9vdXRfZnJlZV9kbWE7XG4yNDc3Olx0XG4yNDc4Olx0XHRuZXRkZXZfZGJnKGRldiwgXCYjMzQ7JXBNLCBJUlEgJWRcXG5cJiMzNDssIGRldi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWlycSk7XG4yNDc5Olx0XG4yNDgwOlx0XHRyZXR1cm4gMDtcbjI0ODE6XHRcbjI0ODI6XHRlcnJfb3V0X2ZyZWVfZG1hOlxuMjQ4MzpcdFx0aWYgKHRwLVx1MDAzZXRhbGx5X3ZhZGRyKSB7XG4yNDg0Olx0XHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuMjQ4NTpcdFx0XHRcdFx0ICBzaXplb2YoKnRwLVx1MDAzZXRhbGx5X3ZhZGRyKSxcbjI0ODY6XHRcdFx0XHRcdCAgdHAtXHUwMDNldGFsbHlfdmFkZHIsXG4yNDg3Olx0XHRcdFx0XHQgIHRwLVx1MDAzZXRhbGx5X3BhZGRyKTtcbjI0ODg6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzIxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgYSBOZXR3b3JrIERldmljZSBEcml2ZXIqKgoKQWxyaWdodCwgc28gdGhlIGRyaXZlciYjMzk7cyB0cnlpbmcgdG8gcmVnaXN0ZXIgYSBuZXR3b3JrIGRldmljZSwgd2hpY2ggaXMgc3RhbmRhcmQgcHJvY2VkdXJlLiBCdXQgaXQmIzM5O3MgaGl0dGluZyBhIHJvYWRibG9jay4gSXQgc2VlbXMgdGhlIHJlZ2lzdHJhdGlvbiBpcyBnYXRlZCBieSBhIGNhbGwgdG8gYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBzcGVjaWZpYyBmdW5jdGlvbiwgbGlrZWx5IHRpZWQgdG8gc29tZSBoYXJkd2FyZS1zcGVjaWZpYyB2YWxpZGF0aW9uIHJlbGF0ZWQgdG8gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sbGVyIChNQUMpIHZlcnNpb24uIEhtbSwgdGhlIE1BQyB2ZXJzaW9uIGlzIGludGVyZXN0aW5nLiBJIHdvdWxkIHRoaW5rIHRoYXQgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGRvIHdpdGggYSByZWdpc3RlciB2YWx1ZSBhbmQgdGhlIGFwcHJvcHJpYXRlIGhhcmR3YXJlLgoKTGV0JiMzOTtzIGRpZyBpbnRvIGBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZGAgaW1tZWRpYXRlbHkuIFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbiBpcyBjcml0aWNhbCB0byBmaWd1cmUgb3V0IHdoeSB0aGUgZGV2aWNlIGlzbiYjMzk7dCByZWdpc3RlcmluZy4gSXQmIzM5O3MgcHJvYmFibHkgY2hlY2tpbmcgZm9yIGNvbXBhdGliaWxpdHksIGZlYXR1cmUgYXZhaWxhYmlsaXR5LCBvciBwZXJoYXBzIGV2ZW4gYSBzdXBwb3J0ZWQgc2lsaWNvbiByZXZpc2lvbi4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCB0aGlzIHZhbGlkYXRpb24gY291bGQgYmUgaGFwcGVuaW5nIGF0IGRpZmZlcmVudCBwb2ludHMgb2YgaW5pdGlhbGl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGxvZ2ljIHRvIHNlZSB3aGF0IGNvbmRpdGlvbnMgYXJlIGZhaWxpbmcgYW5kLCBmcm9tIHRoZXJlLCBkZWNpZGUgbXkgbmV4dCB0cm91Ymxlc2hvb3Rpbmcgc3RlcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjI1Nz1zdGF0aWMgdm9pZCBydGFzZV9pbml0X3NvZnR3YXJlX3ZhcmlhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIyODAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyMjgxOnN0YXRpYyBpbnQgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWQoc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjI4Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjM4OT1zdGF0aWMgaW50IHJ0YXNlX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTI0MTUtXHQvKiBpZGVudGlmeSBjaGlwIGF0dGFjaGVkIHRvIGJvYXJkICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyNDE2Olx0cmV0ID0gcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWQodHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjQxNy1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTMyCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZW5jb3VudGVyaW5nIHRoYXQgcGllY2Ugb2YgY29kZToKCioqQ2hlY2tpbmcgYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYCoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7T2theSwgdGhpcyBpcyBzb21lIGtpbmQgb2YgUmVhbC1UaW1lIEFwcGxpY2F0aW9uIFNlY3VyaXR5IEVuZ2luZSAoUlRhc2UpIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gdmFsaWRhdGUgYSBtYWNPUyB2ZXJzaW9uLiYjMzQ7IFRoZSBuYW1pbmcgY29udmVudGlvbiBpcyBwcmV0dHkgY2xlYXIsIHJpZ2h0PyBgcnRhc2VfYCBpbmRpY2F0ZXMgaXQmIzM5O3MgcGFydCBvZiB0aGUgUlRhc2UgZnJhbWV3b3JrLCBgY2hlY2tfYCBpcyBhIHR5cGljYWwgdmVyaWZpY2F0aW9uIGZ1bmN0aW9uIHByZWZpeCwgYG1hY192ZXJzaW9uX2AgbmFycm93cyB0aGUgc2NvcGUgdG8gbWFjT1MgdmVyc2lvbnMsIGFuZCBgdmFsaWRgIHN1Z2dlc3RzIGEgYm9vbGVhbiByZXR1cm4sIHByb2JhYmx5IGluZGljYXRpbmcgd2hldGhlciBhIGdpdmVuIHZlcnNpb24gbWVldHMgYSBjZXJ0YWluIGNyaXRlcmlhLgoKTm93LCBteSBtaW5kIHN0YXJ0cyByYWNpbmcgd2l0aCBwb3NzaWJpbGl0aWVzLiBXaGF0IGlzIGl0IHZhbGlkYXRpbmc/IElzIGl0IGNoZWNraW5nIGZvciBhICptaW5pbXVtKiBzdXBwb3J0ZWQgdmVyc2lvbj8gUGVyaGFwcyBhIHNwZWNpZmljICpyYW5nZSogb2YgdmVyc2lvbnM/IE9yIGlzIGl0IG1vcmUgY29tcGxleCB0aGFuIHRoYXQ/IElzIGl0IGxvb2tpbmcgZm9yIGtub3duIHZ1bG5lcmFibGUgdmVyc2lvbnM/IE9yIGV2ZW4gc3BlY2lmaWMgYnVpbGRzPyBJIG5lZWQgdG8gc2VlIHRoZSBmdW5jdGlvbiYjMzk7cyBpbnRlcm5hbCBsb2dpYyB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHZhbGlkYXRpb24gY3JpdGVyaWEgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5KiB0aGlzIHZhbGlkYXRpb24gaXMgbmVlZGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IOKAkyB0aGUgc3Vycm91bmRpbmcgY29kZSB0aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24g4oCTIGlzIGNydWNpYWwuIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIGFzc2Vzc2luZyBpdHMgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI4MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjgxOlx0c3RhdGljIGludCBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZChzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApXG4yMjgyOlx0e1xuMjI4MzpcdFx0aW50IHJldCA9IC1FTk9ERVY7XG4yMjg0Olx0XG4yMjg1Olx0XHR0cC1cdTAwM2Vod192ZXIgPSBydGFzZV9yMzIodHAsIFJUQVNFX1RYX0NPTkZJR18wKSBcdTAwMjYgUlRBU0VfSFdfVkVSX01BU0s7XG4yMjg2Olx0XG4yMjg3Olx0XHRzd2l0Y2ggKHRwLVx1MDAzZWh3X3Zlcikge1xuMjI4ODpcdFx0Y2FzZSBSVEFTRV9IV19WRVJfOTA2WF83WEE6XG4yMjg5Olx0XHRjYXNlIFJUQVNFX0hXX1ZFUl85MDZYXzdYQzpcbjIyOTA6XHRcdGNhc2UgUlRBU0VfSFdfVkVSXzkwN1hEX1YxOlxuMjI5MTpcdFx0Y2FzZSBSVEFTRV9IV19WRVJfOTA3WERfVkE6XG4yMjkyOlx0XHRcdHJldCA9IDA7XG4yMjkzOlx0XHRcdGJyZWFrO1xuMjI5NDpcdFx0fVxuMjI5NTpcdFxuMjI5NjpcdFx0cmV0dXJuIHJldDtcbjIyOTc6XHR9XG4yMjk4Olx0XG4yMjk5Olx0c3RhdGljIGludCBydGFzZV9pbml0X2JvYXJkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqKmRldl9vdXQsXG4yMzAwOlx0XHRcdFx0ICAgIHZvaWQgX19pb21lbSAqKmlvYWRkcl9vdXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWdpc3RlciBSZWFkIGluIGEgU3l6a2FsbGVyIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQmIzM5O3MgcmVhZGluZyBhIHJlZ2lzdGVyLCBgUlRBU0VfVFhfQ09ORklHXzBgLCB1c2luZyBgcnRhc2VfcjMyKHRwLCBSVEFTRV9UWF9DT05GSUdfMClgLiBOYXR1cmFsbHksIGlmIHRoaXMgd2VyZSBydW5uaW5nIG9uIGFjdHVhbCBoYXJkd2FyZSwgdGhpcyB3b3VsZCBiZSBhIGRpcmVjdCByZWFkIG9mIHRoZSBoYXJkd2FyZSByZWdpc3Rlci4gQnV0IHNpbmNlIHdlJiMzOTtyZSBpbiBhIFN5emthbGxlciBlbnZpcm9ubWVudCwgdGhpbmdzIGdldCBhIGJpdCBtb3JlIGludGVyZXN0aW5nLiBgcnRhc2VfcjMyYCBpcyBnb2luZyB0byBiZSBhY2Nlc3NpbmcgbWVtb3J5IHRoYXQgZWl0aGVyIGlzbiYjMzk7dCBtYXBwZWQsIG9yIGlzIHByb3ZpZGVkIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtIGluIGEgc2ltdWxhdGVkIHdheSBmb3IgYSBkZXZpY2UgdGhhdCBkb2VzbiYjMzk7dCBwaHlzaWNhbGx5IGV4aXN0LgoKTm93LCB3YWl0IGEgbWludXRlLCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYHN5el9wY2lfZGV2aWNlX2FkZGAsIHdoaWNoIGFsbG93cyB1cyB0byBlbXVsYXRlIFBDSSBkZXZpY2VzLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgaXQgZW11bGF0ZSBhbiBgcnRhc2VgIGRldmljZSBzcGVjaWZpY2FsbHk/IE5vLCBpdCYjMzk7cyBwcmV0dHkgZ2VuZXJpYy4gU3l6a2FsbGVyJiMzOTtzIFBDSSBlbXVsYXRpb24gaXMgZWl0aGVyIHF1aXRlIGJyb2FkIG9yIHNwZWNpZmljYWxseSBnZWFyZWQgdG93YXJkcyBhIHN1YnNldCBvZiBkZXZpY2VzLiBJdCB3b3VsZG4mIzM5O3Qga25vdyBhbnl0aGluZyBhYm91dCBhIHJlZ2lzdGVyIGxpa2UgYFJUQVNFX1RYX0NPTkZJR18wYC4KCkFoLCBidXQgSSYjMzk7dmUgZ290IGEgc2xpZ2h0bHkgYmV0dGVyIGlkZWEuIFN5emthbGxlciBhbGxvd3MgdXMgdG8gaW5qZWN0IFBDSSBkZXZpY2VzIHdpdGggYXJiaXRyYXJ5IEJBUnMuIFNvLCB0aGUgbWVtb3J5IHJlYWQgKnNob3VsZCogcmV0dXJuIHNvbWV0aGluZywgcHJvYmFibHkgYSBkZWZhdWx0IHZhbHVlIGxpa2UgYDB4ZmZmZmZmZmZgLCBvciB3aGF0ZXZlciB0aGUgZ2VuZXJpYyBQQ0kgZW11bGF0aW9uIHJldHVybnMuCgpJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCBhbmQgd2UgKmRvKiBnZXQgYDB4ZmZmZmZmZmZgIGJhY2ssIHRoZW4gYHRwLSZndDtod192ZXJgIGlzIGdvaW5nIHRvIGJlIHNldCB0byBgUlRBU0VfSFdfVkVSX01BU0tgLiBUaGF0JiMzOTtzIGdvaW5nIHRvIGJlIGtleS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIHZhbHVlIG9mIGBSVEFTRV9IV19WRVJfTUFTS2AgYW5kIHRoZSBvdGhlciBjb25zdGFudHMgaW52b2x2ZWQuIFRoYXQgc2hvdWxkIGhlbHAgbWUgZmlndXJlIG91dCBob3cgdGhpcyB1bm1hcHBlZCBtZW1vcnkgcmVhZCB3aWxsIGFjdHVhbGx5IGJlaGF2ZSwgYW5kIHdoYXQgdGhlIGNvbnNlcXVlbmNlcyBhcmUgZG93bnN0cmVhbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UlRBU0VfSFdfVkVSX01BU0smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oLTExLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oOjEyOiNkZWZpbmUgUlRBU0VfSFdfVkVSX01BU0sgICAgIDB4N0M4MDAwMDBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2UuaC0xMy0jZGVmaW5lIFJUQVNFX0hXX1ZFUl85MDZYXzdYQSAweDAwODAwMDAwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjI4MT1zdGF0aWMgaW50IHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkKHN0cnVjdCBydGFzZV9wcml2YXRlICp0cClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yMjg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MjI4NTpcdHRwLVx1MDAzZWh3X3ZlciA9IHJ0YXNlX3IzMih0cCwgUlRBU0VfVFhfQ09ORklHXzApIFx1MDAyNiBSVEFTRV9IV19WRVJfTUFTSztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIyODYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1ODQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFsdGVrIEF1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0IERyaXZlciBQcm9iZSoqCgpPa2F5LCBzbyBpZiB0aGlzIGB0cC0mZ3Q7aHdfdmVyYCByZXR1cm5zIGAweGZmZmZmZmZmYCwgdGhlbiBpdCYjMzk7bGwgdHJhbnNsYXRlIHRvIGAweDdjODAwMDAwYC4gTG9va2luZyBhdCB0aGUgc3dpdGNoIGNhc2VzIGZvciB0aGUgaGFyZHdhcmUgdmVyc2lvbiwgbm9uZSBvZiB0aGVtIG1hdGNoIHRoYXQgdmFsdWUuIFRoaXMgbWVhbnMgdGhlIHByb2JlIHdpbGwgZmFpbC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgc29tZWhvdyBmdXp6IHRoaXMsIGdpdmVuIHRoYXQgZmFpbHVyZT8KCkkgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvcnMuIENvdWxkIGB2aGNpYCBvciBgdHVuYCBiZSByZWxldmFudCBoZXJlPyBObywgdGhpcyBpcyBhbiBFdGhlcm5ldCBkcml2ZXIsIG5vdCBVU0Igb3IgbmV0d29ya2luZy4gVGhlIG9ubHkgcmVhbGlzdGljIHdheSB0byBnZXQgdG8gYHJ0YXNlX3N0YXJ0X3htaXRgIGlzIGJ5IHN1Y2NlZWRpbmcgaW4gdGhlIHByb2JlLCBpc24mIzM5O3QgaXQ/IFVubGVzcy4uLndhaXQsIGRvZXNuJiMzOTt0IHN5emthbGxlciBoYXZlIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcz8gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgaW50ZXJjZXB0aW5nIE1NSU8gcmVhZHMvd3JpdGVzLgoKSSYjMzk7bSB0aGlua2luZyBvZiBgc3l6X2t2bV9zZXR1cF9jcHVgLCBubyB0aGF0JiMzOTtzIEtWTS1zcGVjaWZpYy4gQnV0IHdoYXQgYWJvdXQgYHN5el9wY2lfZGV2aWNlX2FkZGAgdXNlZCB3aXRoIGBzeXpfcGNpX2RldmljZV9zZXR1cGA/IEJ1dCBkb2VzIHN5emthbGxlciBoYXZlIGEgZ2VuZXJpYyB3YXkgdG8gaW50ZXJjZXB0IE1NSU8gcmVhZHMgYW5kIHJldHVybiBhcmJpdHJhcnkgdmFsdWVzIGZvciBQQ0kgZGV2aWNlcz8gRXhjZXB0IHBlcmhhcHMgZm9yIEtWTSBmdXp6aW5nLCB3aGljaCBtaWdodCBkbyBpdC4gQnV0IGdlbmVyYWxseSwgUENJIGRyaXZlcnMgdGhhdCBoYXZlIHRoZXNlIGhhcmR3YXJlIGNoZWNrcyBpbiB0aGVpciBwcm9iZSBhcmUgdW5yZWFjaGFibGUgdW5sZXNzIHN5emthbGxlciBoYXMgc29tZSBzcGVjaWFsIGVtdWxhdGlvbiBmb3IgdGhlbS4KCldhaXQsIGhhc24mIzM5O3Qgc3l6a2FsbGVyICpyZWNlbnRseSogYWRkZWQgYHZmaW9gIG9yIG1heWJlIGV2ZW4gZGlyZWN0IFBDSSBmdXp6aW5nIHN1cHBvcnQgd2hlcmUgaXQgY2FuIGVtdWxhdGUgUENJIGRldmljZXMgYW5kIHByb3ZpZGUgY3VzdG9tIHJlc3BvbnNlcyB0byBNTUlPIHJlYWRzPyBUaGlzIGlzIHByb21pc2luZyEgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHN5emthbGxlciBjYW4gZW11bGF0ZSBQQ0kgTU1JTy4KCk9rYXksIHNvIGBzeXpfcGNpX2RldmljZV9hZGRgICpkb2VzKiBjcmVhdGUgYSB2aXJ0dWFsIFBDSSBkZXZpY2UuIEJ1dCBob3cgZG9lcyBpdCBoYW5kbGUgdGhlIE1NSU8gaW50ZXJhY3Rpb25zPyBBaCwgc2ltaWxhciB0byBVU0Igd2hlcmUgd2UgaGF2ZSBgZHVtbXlgIGFuZCBgdmhjaWAsIGZvciBQQ0ksIHdlIGhhdmUgd2hhdCBpcyBjYWxsZWQgYFBDSV9ERVZgIGZ1enppbmc/CgpBY3R1YWxseSwgbm93IEkgcmVjYWxsIHRoYXQgc3l6a2FsbGVyICpjYW4qIGZ1enogUENJIGRyaXZlcnMgaWYgdGhleSBkb24mIzM5O3QgaGF2ZSBzdHJpbmdlbnQgaGFyZHdhcmUgY2hlY2tzLCBvciBpZiB0aG9zZSBjaGVja3MgY2FuIGJlIGJ5cGFzc2VkLCBPUiBpZiBzeXprYWxsZXIgaGFzIGEgc3BlY2lmaWMgZHJpdmVyIGRlc2NyaXB0aW9uLiBOb3csIHRoZSBgcnRhc2VgIGRyaXZlciBpcyByZWxhdGl2ZWx5IG5ldyDigJMgUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldC4KCkkgbmVlZCB0byBjaGVjayBpZiBzeXprYWxsZXIgaGFzIGFueSBzcGVjaWZpYyBkZXNjcmlwdGlvbnMgb3Iga25vd2xlZGdlIGFib3V0IHRoZSBgcnRhc2VgIGRyaXZlci4gVGhhdCB3aWxsIGJlIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2OTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYHJ0YXNlX3N0YXJ0X3htaXRgIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBydGFzZV9zdGFydF94bWl0YCBmdW5jdGlvbi4gVGhlIHByb21wdCBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIGhpdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0LCB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBhcmVuJiMzOTt0IGV2ZW4gKmluKiB0aGUga2VybmVsIHNvdXJjZSwgdGhleSYjMzk7cmUgaW4gdGhlIHN5emthbGxlciByZXBvIGl0c2VsZi4gSSBkb24mIzM5O3QgaGF2ZSBhY2Nlc3MgdG8gdGhhdCBoZXJlJiMzNDsuIEJ1dCwgSSBuZWVkIHRvIGZvY3VzIG9uIHdoYXQgdGhlIHByb21wdCBpcyBhY3R1YWxseSBhc2tpbmcuCgpTaW5jZSB0aGlzIGlzIGEgUENJIGRyaXZlciwgYW5kIFFFTVUmIzM5O3MgZW11bGF0aW9uIGlzbiYjMzk7dCBsaWtlbHkgdG8gY292ZXIgYSAmIzM0O1JlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXQmIzM0OyAoYHJ0YXNlYCksIGl0JiMzOTtzIHByb2JhYmx5IGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLiBMZXQgbWUgdmVyaWZ5LiBJIGNhbiYjMzk7dCBjaGVjayBRRU1VJiMzOTtzIHNvdXJjZSByaWdodCBub3csIGJ1dCBJIGNhbiBzZWUgaWYgdGhlcmUmIzM5O3MgKmFueSogZm9ybSBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGBydGFzZWAgd2l0aGluIHRoZSBrZXJuZWwgaXRzZWxmLiBOb3BlLCBub3RoaW5nLgoKU28sIGhvdyBjb3VsZCB3ZSAqcG9zc2libHkqIGhpdCBgcnRhc2Vfc3RhcnRfeG1pdGAgd2l0aG91dCBhY3R1YWwgaGFyZHdhcmU/IElmIHRoZSBkZXZpY2UgcHJvYmUgZmFpbHMsIHRoZSBuZXRkZXZpY2Ugd29uJiMzOTt0IGJlIHJlZ2lzdGVyZWQsIHNvIHRoYXQgZnVuY3Rpb24gaXMgdW5yZWFjaGFibGUuIEFuZCwgZ2l2ZW4gdGhhdCBgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRgIHJlYWRzIGZyb20gTU1JTyBhbmQgZGVwZW5kcyBvbiBhIHNwZWNpZmljIHZhbHVlLCB3aGljaCBubyBoYXJkd2FyZSBvciBlbXVsYXRvciBpcyBsaWtlbHkgdG8gcHJvdmlkZSwgdGhlIHByb2JlIHdpbGwgKmFsd2F5cyogZmFpbC4KCkJ1dCB3YWl0LCB3aGF0IGlmIHNvbWVvbmUgZ290IGNsZXZlciBhbmQgY291bGQgd3JpdGUgdG8gdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIHRvIG1hcCB0aGUgQkFSIHRvIG1lbW9yeSB0aGV5IGNvbnRyb2w/IElmIGEgdXNlciBjb3VsZCBtYXAgdGhlIEJBUiB0byBhIHNoYXJlZCBtZW1vcnkgcmVnaW9uLCB0aGV5IGNvdWxkIHBvdGVudGlhbGx5IGNvbnRyb2wgdGhvc2UgTU1JTyByZWFkcy4gSG93ZXZlciwgdGhlIGtlcm5lbCB1c2VzIGBwY2lfaW9tYXBgIG9yIGBwY2ltX2lvbWFwYCB0byBtYXAgdGhlIEJBUiwgbWFwcGluZyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpbnRvICprZXJuZWwqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KCk5vdywgbXkgbWluZCBzdGFydHMgcmFjaW5nIHRvIGhvdyBzeXprYWxsZXIgbWlnaHQgYmUgaW52b2x2ZWQuIElzIHRoaXMgYSB2aXJ0dWFsIGRldmljZSBjcmVhdGVkIGJ5IGBzeXpfcGNpX2RldmljZV9hZGRgPyBEb2VzIGl0IHVzZSBgdmZpb2Agb3Igc29tZXRoaW5nIHNpbWlsYXI/IEFjdHVhbGx5IG5vLiBgc3l6X3BjaV9kZXZpY2VfYWRkYCB1c2VzIGEgdGVzdCBtb2R1bGUgb3Igc29tZXRoaW5nLCBhbmQgc3l6a2FsbGVyICpkb2VzbiYjMzk7dCogaGF2ZSBhIGdlbmVyaWMgUENJIGVtdWxhdG9yIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gVGhlbiBJIHJlbWVtYmVyLCB0aGVyZSYjMzk7cyBgQ09ORklHX1BDSV9ERUJVR2AsIG1heWJlIHNvbWV0aGluZyB0aGVyZT8gTm8uIFN5emthbGxlciBpbXBsZW1lbnRzIGBzeXpfcGNpX2RldmljZV9hZGRgIGluIHRoZSBleGVjdXRvci4gQnV0LCBob3cgZG9lcyB0aGF0IGV2ZW4gd29yaz8gSXQmIzM5O3MgbGlrZSBgL2Rldi92aGNpYCBmb3IgVVNCLiBGb3IgUENJLCBkb2VzIGl0IHVzZSBLVk0gdG8gaW50ZXJjZXB0IE1NSU8/IE5vLCBzeXprYWxsZXIgKmRvZXNuJiMzOTt0KiBydW4gdGhlIGtlcm5lbCBpbiBLVk0gd2l0aCBjdXN0b20gZGV2aWNlIG1vZGVscy4gSXQgcnVucyB0aGUga2VybmVsIGluIFFFTVUuCgpXYWl0LCBkb2VzIHN5emthbGxlciBoYXZlIGEgJiMzNDtkdW1teSYjMzQ7IFBDSSBkZXZpY2UgdGhhdCYjMzk7cyBwcmVjb25maWd1cmVkPyBOby4KCkFjdHVhbGx5LCB0aGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBzeXprYWxsZXIgKmNhbiYjMzk7dCogZnV6eiAqbW9zdCogUENJIGRyaXZlcnMgcHJlY2lzZWx5IGJlY2F1c2Ugb2YgdGhlIGxhY2sgb2YgaGFyZHdhcmUgZW11bGF0aW9uLgoKT2theSwgbGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIG9uZSBtb3JlIHRpbWUuIElzIHRoZXJlICphbnkqIG90aGVyIGNvZGUgcGF0aCwgKmFueSogd2F5IHdoYXRzb2V2ZXIgdGhhdCBgcnRhc2Vfc3RhcnRfeG1pdGAgY291bGQgYmUgY2FsbGVkPyBObywgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gYW5kIGFzc2lnbmVkIHRvIGBuZG9fc3RhcnRfeG1pdGAuCgpUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbiBpcyB1bnJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRhc2Vfc3RhcnRfeG1pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0xNDQ5PXN0YXRpYyBpbnQgcnRhc2VfeG1pdF9mcmFncyhzdHJ1Y3QgcnRhc2VfcmluZyAqcmluZywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xNTA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTUwNzpzdGF0aWMgbmV0ZGV2X3R4X3QgcnRhc2Vfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTUwOC1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTE5Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGFzZV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTE5NjktXHQubmRvX3N0b3AgPSBydGFzZV9jbG9zZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjE5NzA6XHQubmRvX3N0YXJ0X3htaXQgPSBydGFzZV9zdGFydF94bWl0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTk3MS1cdC5uZG9fc2V0X3J4X21vZGUgPSBydGFzZV9zZXRfcnhfbW9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0NDAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBSZWFjaGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgZXZlbiB0cmlnZ2VyZWQuIEl0JiMzOTtzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCBzbyBJIGluaXRpYWxseSBhc3N1bWVkIGl0JiMzOTtzIHVucmVhY2hhYmxlIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUuIEJ1dCB3YWl0LCBiZWZvcmUgSSBkaXNtaXNzIGl0IGNvbXBsZXRlbHksIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZmxhZ3Mgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBtYWtlIHRoaXMgY29kZSBmdXp6YWJsZSwgbGlrZSBhIGBXb3J0aEZ1enppbmc9dHJ1ZWAgY29uZGl0aW9uIGZvciBQQ0kgZHJpdmVycy4KCkFscmlnaHQsIHRoZSBjb250ZXh0IGlzIHRoYXQgaXQmIzM5O3MgaW4gYSBQQ0kgZHJpdmVyLCBhbmQgaWYgdGhlcmUmIzM5O3Mgbm8gZW11bGF0b3IsIGl0IGlzICpwcm9iYWJseSogdW5yZWFjaGFibGUuIEJ1dCBob2xkIG9uLCB0aGUgYXV0aG9yIGlzIGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YC4gTm93IHRoYXQmIzM5O3MgaW50ZXJlc3RpbmchIERvZXMgdGhpcyBtZWFuIHN5emthbGxlciBhbHJlYWR5IGZvdW5kIGEgYnVnIGluIHRoaXMgY29kZSwgb3IgaXQmIzM5O3MgYSBwYXRjaCB0byAqZml4KiBhIGJ1ZyB0aGF0IHN5emthbGxlciBkaXNjb3ZlcmVkPwoKQWgsIHJpZ2h0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29tbWl0IG1lc3NhZ2UgbW9yZSBjbG9zZWx5LiBJdCBzYXlzIHRoaXMgaXMgYSBwYXRjaCAmIzM0O3VuZGVyIHJldmlldy4mIzM0OyBTbywgc3l6a2FsbGVyIGlzIHRyeWluZyB0byBmdXp6ICp0aGlzIHBhdGNoKiB0byBzZWUgaWYgaXQgaW50cm9kdWNlcyBuZXcgaXNzdWVzLCBvciB0byB2YWxpZGF0ZSB0aGF0IGl0IGZpeGVzIHRoZSBvcmlnaW5hbCBwcm9ibGVtLiBUaGF0IG1lYW5zLi4uIGl0IGNhbiByZWFjaCBpdC4gSSYjMzk7bSBzdXJlIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcsIGhvdyBjYW4gc3l6a2FsbGVyIHJlYWNoIGl0PyBUaGlzIHdvdWxkIGJlIGEgZ3JlYXQgb3V0Y29tZSwgc2luY2Ugc3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgcmVhY2hpbmcgdGhlIGNvZGUhCgpDb3VsZCB0aGVyZSBiZSBzb21lIGtpbmQgb2YgZHVtbXkgUENJIGRyaXZlciBmcmFtZXdvcmsgdGhhdCBhbGxvd3MgdGhpcz8gSSBzaG91bGQgbG9vayBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIGxpa2UgYENPTkZJR19SVEFTRWAgb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCB3b3VsZCBlbmFibGUgdGhhdCBraW5kIG9mIGJlaGF2aW9yLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGEgY2x1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1JUQVNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX1I4MTY5KSAmIzQzOz0gcjgxNjkub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfUlRBU0UpICYjNDM7PSBydGFzZS9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL01ha2VmaWxlLTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1JUQVNFKSAmIzQzOz0gcnRhc2Uub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9NYWtlZmlsZS05LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDYyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFBDSSBEZXZpY2UgUmVhY2hhYmlsaXR5IHdpdGggU3l6a2FsbGVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgaG93IHN5emthbGxlciBoYW5kbGVzIFBDSSBkZXZpY2VzLiBJIGtub3cgdGhlcmUmIzM5O3MgYSBmZWF0dXJlLCBlaXRoZXIgJiMzNDtwc2V1ZG8gZGV2aWNlcyYjMzQ7IG9yIHRoZSBhYmlsaXR5IHRvIGZ1enogUENJIGRldmljZXMgYnkgbW9ja2luZyB0aGUgUENJIGNvbmZpZyBzcGFjZS4gQWN0dWFsbHksIHRoZXJlJiMzOTtzIGBzeXpfcGNpX2RldmljZV9hZGRgLCB3aGljaCBsb29rcyBwcm9taXNpbmcuIEJ1dCBob3cgZG9lcyBpdCAqYWN0dWFsbHkqIGhhbmRsZSBNZW1vcnktTWFwcGVkIEkvTyAoTU1JTyk/CgpJIGluaXRpYWxseSB0aG91Z2h0IHRoYXQgc3l6a2FsbGVyIG1pZ2h0IGJlIHVzaW5nIGB2ZmlvYCBvciBhIGN1c3RvbSBQQ0kgZW11bGF0b3Igd2l0aGluIFFFTVUsIG9yIG1heWJlIGl0IGxldmVyYWdlcyBgS1ZNYCB0byBpbnRlcmNlcHQgTU1JTyB2aWEgYHN5el9wY2lfZGV2aWNlX2FkZGAuIEhvd2V2ZXIsIGl0IHNlZW1zIGxpa2UgYHN5el9wY2lfZGV2aWNlX2FkZGAgdXNlcyBhIGR1bW15IFBDSSBkZXZpY2UgaW4gUUVNVSwgcGVyaGFwcyBzb21ldGhpbmcgbGlrZSB0aGUgYGVkdWAgZGV2aWNlLCBvciBtYXliZSBpdCB1c2VzIGBQQ0lfVklSVElPYC4KClRoZW4gaXQgY2xpY2tlZDogdGhlcmUmIzM5O3MgYSBgcGNpYCBzdWJzeXN0ZW0gZnV6emVyIGluIHN5emthbGxlci4gSXQgaW50ZXJjZXB0cyBNTUlPIHJlYWRzIGFuZCB3cml0ZXMgdXNpbmcgS1ZNISBZZXMsIHRoYXQmIzM5O3MgaXQuIFN5emthbGxlciAqY2FuKiBpbnRlcmNlcHQgTU1JTyBhbmQgcmV0dXJuIGZ1enplZCB2YWx1ZXMuIFRoaXMgaXMga2V5LgoKSWYgc3l6a2FsbGVyIGNhbiBpbnRlcmNlcHQgTU1JTywgdGhlbiB0aGUga2VybmVsIGRyaXZlciBjYW4gcmVhZCBmcm9tIGBydGFzZV9yMzIodHAsIFJUQVNFX1RYX0NPTkZJR18wKWAgYW5kIHBvdGVudGlhbGx5IGdldCBgUlRBU0VfSFdfVkVSXzkwNlhfN1hBYCAoMHgwMDgwMDAwMCkgaWYgdGhlIGZ1enplciBnZXRzIGx1Y2t5IG9yIGhhcyBpdCBpbiBpdHMgZGljdGlvbmFyeS4gVGhpcyBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLgoKSWYgc3l6a2FsbGVyIGNhbiBpbmRlZWQgZnV6eiBQQ0kgZGV2aWNlcyB0aGlzIHdheSwgKmFueSogUENJIGRyaXZlciBzaG91bGQgYmUgcmVhY2hhYmxlLCByaWdodD8gTGV0IG1lIGNvbmZpcm0gdGhhdC4gWWVzLCBgc3l6X3BjaV9kZXZpY2VfYWRkYCBhbmQgTU1JTyBpbnRlcmNlcHRpb24gYXJlIHRoZSBjcml0aWNhbCBjb21wb25lbnRzIGhlcmUuCgpOb3csIHRoZSBwcm9tcHQmIzM5O3MgY29uZGl0aW9uIGNvbWVzIGludG8gcGxheTogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gVGhpcyBpcyBhIGNydWNpYWwgY29uc3RyYWludC4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzICppbXBvc3NpYmxlKiBmb3Igc3l6a2FsbGVyIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHMuCgpJZiBzeXprYWxsZXIgY2FuIGVtdWxhdGUgUENJIE1NSU8sIGl0JiMzOTtzICpwb3NzaWJsZSouIFNvLCB0aGUgcXVlc3Rpb24gaGluZ2VzIG9uIHdoZXRoZXIgc3l6a2FsbGVyIGFjdHVhbGx5IGVtdWxhdGVzIFBDSSBNTUlPLgoKTGV0IG1lIHJlc2VhcmNoIGEgYml0IGFuZCBjaGVjayBmb3IgZXhhbXBsZXMgb2YgUENJIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsIGJ5IHNlYXJjaGluZyBmb3Igc3l6a2FsbGVyIGNvZGUuIE9rYXksIEkgc2VlIHRoYXQgYHN5el9wY2lfZGV2aWNlX2FkZGAgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGV4ZWN1dG9yLCBub3QgZGlyZWN0bHkgaW4gdGhlIGtlcm5lbCBpdHNlbGYuIEl0IHVzZXMgYC9kZXYvdmZpb2Agb3Igc29tZXRoaW5nPyBOb3BlLCBpdCBsZXZlcmFnZXMgYEtWTV9SVU5gIHRvIHJ1biB0aGUga2VybmVsLCBhbmQgdGhlbiBpdCBpbnRlcmNlcHRzIE1NSU8gZXhpdHMuIFRoaXMgbWVhbnMgc3l6a2FsbGVyICpkb2VzbiYjMzk7dCogcnVuIHRoZSBrZXJuZWw7IFFFTVUgZG9lcy4gVGhlIHN5emthbGxlciBleGVjdXRvciBydW5zICppbnNpZGUqIHRoZSBWTS4KClRoaXMgcmFpc2VzIHRoZSBrZXkgcXVlc3Rpb246IGhvdyBkb2VzIGEgdXNlci1zcGFjZSBwcm9jZXNzICppbnNpZGUqIHRoZSBWTSBpbnRlcmNlcHQgTU1JTyByZWFkcyBvZiBhIGtlcm5lbCBkcml2ZXI/IEl0IGNhbiYjMzk7dCwgdW5sZXNzIHRoZXJlIGlzIGEgc3BlY2lmaWMgZHJpdmVyIGZvciBpdCAobGlrZSBgZHVtbXlfaGNkYCBmb3IgVVNCLCBgbWFjODAyMTFfaHdzaW1gIGZvciB3aWZpKS4gU28sIGl0IG5lZWRzIGEgc3BlY2lmaWMgZHJpdmVyIG9yIGFwcHJvYWNoLgoKQW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGEgZHVtbXkgUENJIGRyaXZlciBpbiB0aGUga2VybmVsLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkdW1teS4qcGNpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYz0xMDg9c3RhdGljIGludCBfX2luaXQgcmMzMjQzNF9wY2licmlkZ2VfaW5pdCh2b2lkKVxuLS1cbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYy0xMTAtXHR1bnNpZ25lZCBpbnQgcGNpY3ZhbHVlLCBwY2ljZGF0YSA9IDA7XG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmM6MTExOlx0dW5zaWduZWQgaW50IGR1bW15cmVhZCwgcGNpY250bHZhbDtcbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYy0xMTItXHRpbnQgbG9vcENvdW50O1xuLS1cbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYy0xNjAtXHQgICAgKCgoU0laRV8yNTZNQiBcdTAwMjYgMHgxZikgXHUwMDNjXHUwMDNjIFBDSV9MQkFDX1NJWkVfQklUKSB8IFBDSV9FTkRJQU5fRkxBRyk7XG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmM6MTYxOlx0ZHVtbXlyZWFkID0gcmMzMjQzNF9wY2ktXHUwMDNlcGNpbGJhWzBdLmNvbnRyb2w7XHQvKiBmbHVzaCB0aGUgQ1BVIHdyaXRlIEJ1ZmZlcnMgKi9cbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYy0xNjItXHRyYzMyNDM0X3BjaS1cdTAwM2VwY2lsYmFbMV0uYWRkcmVzcyA9IDB4NjAwMDAwMDA7XG4tLVxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE2Ny1cdCAgICAoKChTSVpFXzI1Nk1CIFx1MDAyNiAweDFmKSBcdTAwM2NcdTAwM2MgUENJX0xCQUNfU0laRV9CSVQpIHwgUENJX0VORElBTl9GTEFHKTtcbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYzoxNjg6XHRkdW1teXJlYWQgPSByYzMyNDM0X3BjaS1cdTAwM2VwY2lsYmFbMV0uY29udHJvbDtcdC8qIGZsdXNoIHRoZSBDUFUgd3JpdGUgQnVmZmVycyAqL1xuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE2OS1cdHJjMzI0MzRfcGNpLVx1MDAzZXBjaWxiYVsyXS5hZGRyZXNzID0gMHgxOEMwMDAwMDtcbi0tXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTc0LVx0ICAgICgoKFNJWkVfNE1CIFx1MDAyNiAweDFmKSBcdTAwM2NcdTAwM2MgUENJX0xCQUNfU0laRV9CSVQpIHwgUENJX0VORElBTl9GTEFHKTtcbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYzoxNzU6XHRkdW1teXJlYWQgPSByYzMyNDM0X3BjaS1cdTAwM2VwY2lsYmFbMl0uY29udHJvbDtcdC8qIGZsdXNoIHRoZSBDUFUgd3JpdGUgQnVmZmVycyAqL1xuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE3Ni1cbi0tXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTgyLVx0ICAgICBQQ0lfRU5ESUFOX0ZMQUcpO1xuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jOjE4MzpcdGR1bW15cmVhZCA9IHJjMzI0MzRfcGNpLVx1MDAzZXBjaWxiYVszXS5jb250cm9sO1x0LyogZmx1c2ggdGhlIENQVSB3cml0ZSBCdWZmZXJzICovXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTg0LVxuLS1cbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYy0xODctXHRcdHJjMzI0MzRfcGNpLVx1MDAzZXBjaWNmZ2EgPSBwY2lfY29uZmlnX2FkZHI7XG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmM6MTg4Olx0XHRkdW1teXJlYWQgPSByYzMyNDM0X3BjaS1cdTAwM2VwY2ljZmdhO1xuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE4OS1cdFx0cmMzMjQzNF9wY2ktXHUwMDNlcGNpY2ZnZCA9IGtvcmluYV9jbmZnX3JlZ3NbbG9vcENvdW50XTtcbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYzoxOTA6XHRcdGR1bW15cmVhZCA9IHJjMzI0MzRfcGNpLVx1MDAzZXBjaWNmZ2Q7XG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTkxLVx0XHRwY2lfY29uZmlnX2FkZHIgJiM0Mzs9IDQ7XG4tLVxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jPTE3MjE9c3RhdGljIGludCBvY3Rlb25fcGNpZTFfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLFxuLS1cbmFyY2gvbWlwcy9wY2kvcGNpZS1vY3Rlb24uYy0xNzI2LVxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jOjE3Mjc6c3RhdGljIGludCBvY3Rlb25fZHVtbXlfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLFxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jLTE3MjgtXHRcdFx0XHQgICAgaW50IHJlZywgaW50IHNpemUsIHUzMiAqdmFsKVxuLS1cbmFyY2gvbWlwcy9wY2kvcGNpZS1vY3Rlb24uYz0xNzc3PXN0YXRpYyBpbnQgb2N0ZW9uX3BjaWUxX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sXG4tLVxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jLTE3ODItXG5hcmNoL21pcHMvcGNpL3BjaWUtb2N0ZW9uLmM6MTc4MzpzdGF0aWMgaW50IG9jdGVvbl9kdW1teV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLFxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jLTE3ODQtXHRcdFx0XHQgICAgIGludCByZWcsIGludCBzaXplLCB1MzIgdmFsKVxuLS1cbmFyY2gvc3BhcmMva2VybmVsL3BjaWMuYz02NDg9c3RhdGljIHZvaWQgcGNpY19jbGVhcl9jbG9ja19pcnEodm9pZClcbmFyY2gvc3BhcmMva2VybmVsL3BjaWMuYy02NDkte1xuYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jOjY1MDpcdHBjaWNfdGltZXJfZHVtbXkgPSByZWFkbChwY2ljMC5wY2ljX3JlZ3MmIzQzO1BDSV9TWVNfTElNSVQpO1xuYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jLTY1MS19XG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c3guYz02Mz1zdGF0aWMgY29uc3QgY2hhciAqY2tvMl9zZWxzW11cdFx0PSB7XG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzeC5jLTY0LVx0XCYjMzQ7ZHVtbXlcJiMzNDssIFwmIzM0O21tZGNfcDBfZmFzdFwmIzM0OywgXCYjMzQ7dXNkaGM0XCYjMzQ7LCBcJiMzNDt1c2RoYzFcJiMzNDssIFwmIzM0O2R1bW15XCYjMzQ7LCBcJiMzNDt3cmNrXCYjMzQ7LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c3guYzo2NTpcdFwmIzM0O2Vjc3BpX3Jvb3RcJiMzNDssIFwmIzM0O2R1bW15XCYjMzQ7LCBcJiMzNDt1c2RoYzNcJiMzNDssIFwmIzM0O3BjaWVcJiMzNDssIFwmIzM0O2FybVwmIzM0OywgXCYjMzQ7Y3NpX2NvcmVcJiMzNDssXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzeC5jLTY2LVx0XCYjMzQ7ZGlzcGxheV9heGlcJiMzNDssIFwmIzM0O2R1bW15XCYjMzQ7LCBcJiMzNDtvc2NcJiMzNDssIFwmIzM0O2R1bW15XCYjMzQ7LCBcJiMzNDtkdW1teVwmIzM0Oyxcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzeC5jPTcyPXN0YXRpYyBjb25zdCBjaGFyICpsdmRzX3NlbHNbXVx0PSB7XG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzeC5jLTczLVx0XCYjMzQ7YXJtXCYjMzQ7LCBcJiMzNDtwbGwxX3N5c1wmIzM0OywgXCYjMzQ7ZHVtbXlcJiMzNDssIFwmIzM0O2R1bW15XCYjMzQ7LCBcJiMzNDtkdW1teVwmIzM0OywgXCYjMzQ7ZHVtbXlcJiMzNDssIFwmIzM0O2R1bW15XCYjMzQ7LCBcJiMzNDtwbGw1X3ZpZGVvX2RpdlwmIzM0OyxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnN4LmM6NzQ6XHRcJiMzNDtkdW1teVwmIzM0OywgXCYjMzQ7ZHVtbXlcJiMzNDssIFwmIzM0O3BjaWVfcmVmXzEyNW1cJiMzNDssIFwmIzM0O2R1bW15XCYjMzQ7LCBcJiMzNDt1c2JwaHkxXCYjMzQ7LCBcJiMzNDt1c2JwaHkyXCYjMzQ7LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c3guYy03NS19O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NvYzI0LmM9MjY4PXN0YXRpYyB1aW50NjRfdCBzb2MyNF9nZXRfcGNpZV9yZXBsYXlfY291bnQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvc29jMjQuYy0yNzAtXHQvKiBUT0RPXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zb2MyNC5jOjI3MTpcdCAqIGR1bW15IGltcGxlbWVudCBmb3IgcGNpZV9yZXBsYXlfY291bnQgc3lzZnMgaW50ZXJmYWNlXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zb2MyNC5jLTI3Mi1cdCAqICovXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTM3Mi1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaDozNzM6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTBfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTM3NC0jZGVmaW5lIGNmZ05CX1BDSUVEVU1NWTBfMF9ERVZJQ0VfVkVORE9SX0lEX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0zODAtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0Lmg6MzgxOi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkxX3BjaWVkdW1teV9jZmdkZWNcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0zODItI2RlZmluZSBjZmdOQl9QQ0lFRFVNTVkxXzBfREVWSUNFX1ZFTkRPUl9JRF9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0LmgtMTAwMDQtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0Lmg6MTAwMDU6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTBfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTEwMDA2LSNkZWZpbmUgc21uTkJfUENJRURVTU1ZMF8xX0RFVklDRV9WRU5ET1JfSURfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTEwMDEyLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oOjEwMDEzOi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkxX3BjaWVkdW1teV9jZmdkZWNcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0xMDAxNC0jZGVmaW5lIHNtbk5CX1BDSUVEVU1NWTFfMV9ERVZJQ0VfVkVORE9SX0lEX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0xMTEyOS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaDoxMTEzMDovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MF9wY2llZHVtbXlfY2ZnZGVjXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0LmgtMTExMzEtI2RlZmluZSBzbW5OQl9QQ0lFRFVNTVkwXzJfREVWSUNFX1ZFTkRPUl9JRF9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0LmgtMTIzNDEtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0Lmg6MTIzNDI6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTFfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTEyMzQzLSNkZWZpbmUgc21uTkJfUENJRURVTU1ZMV8yX0RFVklDRV9WRU5ET1JfSURfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfb2Zmc2V0LmgtMzc3LVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfb2Zmc2V0Lmg6Mzc4Oi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkwX3BjaWVkdW1teV9jZmdkZWNcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX29mZnNldC5oLTM3OS0vLyBiYXNlIGFkZHJlc3M6IDB4MFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX29mZnNldC5oLTM4Ni1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX29mZnNldC5oOjM4NzovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MV9wY2llZHVtbXlfY2ZnZGVjXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9vZmZzZXQuaC0zODgtLy8gYmFzZSBhZGRyZXNzOiAweDBcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtMjk3Ni1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaDoyOTc3Oi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkwX3BjaWVkdW1teV9jZmdkZWNcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaC0yOTc4LS8vTkJfUENJRURVTU1ZMF8wX0RFVklDRV9WRU5ET1JfSURcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtMzAwMi1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaDozMDAzOi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkxX3BjaWVkdW1teV9jZmdkZWNcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaC0zMDA0LS8vTkJfUENJRURVTU1ZMV8wX0RFVklDRV9WRU5ET1JfSURcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtODIxOTgtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmg6ODIxOTk6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTBfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oLTgyMjAwLS8vTkJfUENJRURVTU1ZMF8xX0RFVklDRV9WRU5ET1JfSURcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtODIyMjQtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmg6ODIyMjU6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTFfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oLTgyMjI2LS8vTkJfUENJRURVTU1ZMV8xX0RFVklDRV9WRU5ET1JfSURcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtODg1MDEtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmg6ODg1MDI6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTBfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oLTg4NTAzLS8vTkJfUENJRURVTU1ZMF8yX0RFVklDRV9WRU5ET1JfSURcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtMTAxNDM1LVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oOjEwMTQzNjovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MV9wY2llZHVtbXlfY2ZnZGVjXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtMTAxNDM3LS8vTkJfUENJRURVTU1ZMV8yX0RFVklDRV9WRU5ET1JfSURcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMl8wX3NoX21hc2suaC0zMjUyLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzJfMF9zaF9tYXNrLmg6MzI1MzovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MF9wY2llZHVtbXlfY2ZnZGVjXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMl8wX3NoX21hc2suaC0zMjU0LVxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzJfMF9zaF9tYXNrLmgtMzI1NS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18yXzBfc2hfbWFzay5oOjMyNTY6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTFfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzJfMF9zaF9tYXNrLmgtMzI1Ny1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMl8wX3NoX21hc2suaC0xMDg5ODYtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMl8wX3NoX21hc2suaDoxMDg5ODc6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTBfcGNpZWR1bW15X2NmZ2RlY1xuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzJfMF9zaF9tYXNrLmgtMTA4OTg4LVxuLS1cbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmM9NDA0PXN0YXRpYyBpbnQgc2lzNjMwX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpzaXM2MzBfZGV2KVxuLS1cbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMtNDEzLVx0Zm9yIChpID0gMDsgc3VwcG9ydGVkW2ldIFx1MDAzZSAwOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYzo0MTQ6XHRcdGR1bW15ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9TSSwgc3VwcG9ydGVkW2ldLCBkdW1teSk7XG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jLTQxNS1cdFx0aWYgKGR1bW15KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmM9NDEwPXN0YXRpYyBpbnQgb3R4Ml90Y19wYXJzZV9hY3Rpb25zKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMtNTE0LVx0XHRcdHByaXYgPSBuZXRkZXZfcHJpdih0YXJnZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYzo1MTU6XHRcdFx0ZHVtbXlfZ3JwX3VwZGF0ZV9yZXEucGNpZnVuY1tudW1faW50Zl0gPSBwcml2LVx1MDAzZXBjaWZ1bmM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jLTUxNi1cdFx0XHRkdW1teV9ncnBfdXBkYXRlX3JlcS5jaGFubmVsW251bV9pbnRmXSA9IHByaXYtXHUwMDNlaHcudHhfY2hhbl9iYXNlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYz0zODAwPWl3bF90cmFuc19wY2llX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYy0zODc4LVx0ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmM6Mzg3OTpcdHRyYW5zX3BjaWUtXHUwMDNlbmFwaV9kZXYgPSBhbGxvY19uZXRkZXZfZHVtbXkoc2l6ZW9mKHN0cnVjdCBpd2xfdHJhbnNfcGNpZSAqKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmMtMzg4MC1cdGlmICghdHJhbnNfcGNpZS1cdTAwM2VuYXBpX2Rldikge1xuLS1cbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2h3aS5jPTIxMTQ9aW50IGJueDJmY19zZXR1cF9md19yZXNjKHN0cnVjdCBibngyZmNfaGJhICpoYmEpXG4tLVxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaHdpLmMtMjE0OS1cbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2h3aS5jOjIxNTA6XHRoYmEtXHUwMDNlZHVtbXlfYnVmZmVyID0gZG1hX2FsbG9jX2NvaGVyZW50KFx1MDAyNmhiYS1cdTAwM2VwY2lkZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaHdpLmMtMjE1MS1cdFx0XHRcdFx0ICAgICAgIFBBR0VfU0laRSwgXHUwMDI2aGJhLVx1MDAzZWR1bW15X2J1Zl9kbWEsXG4tLVxuZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmM9NTIzPXN0YXRpYyBpbnQgYm54Mmlfc2V0dXBfbXBfYmR0KHN0cnVjdCBibngyaV9oYmEgKmhiYSlcbi0tXG5kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYy01MzYtXG5kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYzo1Mzc6XHRoYmEtXHUwMDNlZHVtbXlfYnVmZmVyID0gZG1hX2FsbG9jX2NvaGVyZW50KFx1MDAyNmhiYS1cdTAwM2VwY2lkZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMtNTM4LVx0XHRcdFx0XHQgICAgICAgQ05JQ19QQUdFX1NJWkUsXG4tLVxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jPTI3Mz1zdGF0aWMgdm9pZCBzbmRfaWNlMTcxMl9zZXRfZ3Bpb19kaXIoc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIHVuc2lnbmVkIGludCBkYXRhKVxuLS1cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYy0yNzUtXHRzbmRfaWNlMTcxMl93cml0ZShpY2UsIElDRTE3MTJfSVJFR19HUElPX0RJUkVDVElPTiwgZGF0YSk7XG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmM6Mjc2Olx0aW5iKElDRVJFRyhpY2UsIERBVEEpKTsgLyogZHVtbXkgcmVhZCBmb3IgcGNpLXBvc3RpbmcgKi9cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYy0yNzctfVxuLS1cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYz0yODk9c3RhdGljIHZvaWQgc25kX2ljZTE3MTJfc2V0X2dwaW9fbWFzayhzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdW5zaWduZWQgaW50IGRhdGEpXG4tLVxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jLTI5MS1cdHNuZF9pY2UxNzEyX3dyaXRlKGljZSwgSUNFMTcxMl9JUkVHX0dQSU9fV1JJVEVfTUFTSywgZGF0YSk7XG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmM6MjkyOlx0aW5iKElDRVJFRyhpY2UsIERBVEEpKTsgLyogZHVtbXkgcmVhZCBmb3IgcGNpLXBvc3RpbmcgKi9cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYy0yOTMtfVxuLS1cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYz0zMDA9c3RhdGljIHZvaWQgc25kX2ljZTE3MTJfc2V0X2dwaW9fZGF0YShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdW5zaWduZWQgaW50IHZhbClcbi0tXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMtMzAyLVx0c25kX2ljZTE3MTJfd3JpdGUoaWNlLCBJQ0UxNzEyX0lSRUdfR1BJT19EQVRBLCB2YWwpO1xuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jOjMwMzpcdGluYihJQ0VSRUcoaWNlLCBEQVRBKSk7IC8qIGR1bW15IHJlYWQgZm9yIHBjaS1wb3N0aW5nICovXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMtMzA0LX1cbi0tXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmM9MTY3PXN0YXRpYyB2b2lkIHNuZF92dDE3MjRfc2V0X2dwaW9fZGlyKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBpbnQgZGF0YSlcbi0tXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMTY5LVx0b3V0bChkYXRhLCBJQ0VSRUcxNzI0KGljZSwgR1BJT19ESVJFQ1RJT04pKTtcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYzoxNzA6XHRpbncoSUNFUkVHMTcyNChpY2UsIEdQSU9fRElSRUNUSU9OKSk7IC8qIGR1bW15IHJlYWQgZm9yIHBjaS1wb3N0aW5nICovXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMTcxLX1cbi0tXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmM9MTgwPXN0YXRpYyB2b2lkIHNuZF92dDE3MjRfc2V0X2dwaW9fbWFzayhzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdW5zaWduZWQgaW50IGRhdGEpXG4tLVxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jLTE4NC1cdFx0b3V0YigoZGF0YSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmLCBJQ0VSRUcxNzI0KGljZSwgR1BJT19XUklURV9NQVNLXzIyKSk7XG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmM6MTg1Olx0aW53KElDRVJFRzE3MjQoaWNlLCBHUElPX1dSSVRFX01BU0spKTsgLyogZHVtbXkgcmVhZCBmb3IgcGNpLXBvc3RpbmcgKi9cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYy0xODYtfVxuLS1cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYz0xOTk9c3RhdGljIHZvaWQgc25kX3Z0MTcyNF9zZXRfZ3Bpb19kYXRhKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBpbnQgZGF0YSlcbi0tXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMjAzLVx0XHRvdXRiKGRhdGEgXHUwMDNlXHUwMDNlIDE2LCBJQ0VSRUcxNzI0KGljZSwgR1BJT19EQVRBXzIyKSk7XG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmM6MjA0Olx0aW53KElDRVJFRzE3MjQoaWNlLCBHUElPX0RBVEEpKTsgLyogZHVtbXkgcmVhZCBmb3IgcGNpLXBvc3RpbmcgKi9cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYy0yMDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA3NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVhY2hhYmlsaXR5IG9mIHRoZSBgcnRhc2VgIENvZGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgYHJ0YXNlYCBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS4gRmlyc3QsIGl0IHNlZW1zIGxpa2UgdGhlcmUgaXNuJiMzOTt0IHNvbWUgZ2VuZXJpYyBkdW1teSBQQ0kgZGV2aWNlIGF2YWlsYWJsZSBhcyBhIGRlZmF1bHQuIEJ1dCB3YWl0LCBJIHJlY2FsbCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSB3YXkgdG8gZnV6eiBQQ0kgZGV2aWNlcy4gSG93IGRvZXMgaXQgd29yaz8KCkkgcmVtZW1iZXIgYHN5el9wY2lfZGV2aWNlX2FkZGAgYW5kIHN0YXJ0ZWQgZG93biB0aGUgcm91dGUgdGhpbmtpbmcgaXQgdXNlZCBgdmZpb2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIG1heWJlIEtWTS4gQnV0IG5vLCB0aGF0JiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gU3l6a2FsbGVyIHJ1bnMgaW4gUUVNVSwgc28gaG93IGRvZXMgaXQgYWRkIGEgUENJIGRldmljZSBhdCBhbGw/IERvZXMgaXQgdXNlIGBQQ0lfVklSVElPYCBvciBgUENJX0VEVWAgb3Igc29tZSBRRU1VIHBhdGNoPyBObywgdGhhdCBpcyBub3QgaG93IGl0IGlzIGRvbmUgZm9yIFVTQi4gRm9yIFVTQiBpdCB1c2VzIGB2aGNpYCwgYnV0IGZvciBQQ0kgaXQgdXNlcyBgcGNpX3Rlc3RgIG9yIGEgY3VzdG9tIFFFTVUgZGV2aWNlLgoKVGhlbiwgd2FpdCwgbWF5YmUgc3l6a2FsbGVyIGhhcyBhIGN1c3RvbSBRRU1VIGRldmljZSBsaWtlIGBzeXprYWxsZXItcGNpYCBvciBpcyBpdCBgdmZpby11c2VyYD8gTm8sIG5vbmUgb2YgdGhlc2Ugb3B0aW9ucyBhcmUgcmlnaHQuIFN5emthbGxlciB1c2VzIGBzeXpfcGNpX2RldmljZV9hZGRgLCB3aGljaCBpcyBpbXBsZW1lbnRlZCB2aWEgYSBjdXN0b20gUUVNVSBkZXZpY2UuIEl0IGRvZXNuJiMzOTt0IHVzZSBgdmZpb2AuIEhtbSwgbm8sIGl0IGRvZXMgbm90IHJlcXVpcmUgYSBjdXN0b20gUUVNVS4KCk9rYXksIEkmIzM5O20gZ2V0dGluZyBjbG9zZXIuIEkga25vdyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHN5el9wY2lfZGV2aWNlX2FkZGAgaXMgaW4gYGV4ZWN1dG9yL2NvbW1vbl9saW51eC5oYC4gRG9lcyBpdCB0YWxrIHRvIGAvZGV2L3ZmaW8vLi4uYD8gTm8sIEkgYW0gd3JvbmcsIGl0IHVzZXMgYG5ldGxpbmtgIHRvIHRhbGsgdG8gYSBkdW1teSBQQ0kgZHJpdmVyPwoKV2FpdCwgaXMgdGhlcmUgZXZlbiBhIGBkdW1teWAgUENJIGRyaXZlciBpbiB0aGUga2VybmVsPyBOby4gVGhpcyBpcyBub3QgdGhlIGNhc2UuCgpPa2F5LCBzbyB3aGF0IGlzIHRoZSByZWFsIGFuc3dlciBoZXJlPyBJdCBzZWVtcyBJIGFtIHN0YXJ0aW5nIHRvIHJlbWVtYmVyLCBzeXprYWxsZXIgZG9lcyBQQ0kgZnV6emluZyBzdXBwb3J0IGJ5IGVpdGhlciB1c2luZyBhIGN1c3RvbSBRRU1VIGRldmljZSBvciBieSB1c2luZyBgdmZpb2A/CgpOb3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdGhhdCBjZXJ0YWluIGNvZGUgcGF0aHMgYXJlICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gSXQgbWVudGlvbnMgdGhpbmdzIGxpa2UgdXNiIGdhZGdldCBhbmQgbWFjODAyMTFfaHdzaW0uCgpTbywgaWYgaXQmIzM5O3MgdHJ1bHkgaW1wb3NzaWJsZSwgbXkgcmVzcG9uc2Ugc2hvdWxkIGJlIGZhbHNlLiBCdXQsIGlzIGBydGFzZWAgcmVhY2hhYmxlPwoKSWYgdGhlcmUmIzM5O3Mgbm8gUUVNVSBlbXVsYXRpb24gZm9yIGBydGFzZWAsIGFuZCBubyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBmb3IgaXQsIHRoZW4gaXQmIzM5O3MgKmltcG9zc2libGUqIHRvIHJlYWNoLiBCdXQgd2FpdCEgV2hhdCBpZiBzeXprYWxsZXIgKmNhbiogcmVhY2ggaXQ/IFRoZSBwYXRjaCBhdXRob3IgaXMgbGlzdGVkIGFzIGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YC4KClRoaXMgbWVhbnMgc3l6a2FsbGVyICpkaWQqIHJlYWNoIGl0ISBIb3c/IE1heWJlIGBydGFzZWAgaXMgTk9UIGEgUENJIGRyaXZlcj8gSSBuZWVkIHRvIGNoZWNrIGBydGFzZV9pbml0X29uZWAgdG8gc2VlIGlmIG15IGd1ZXNzIGlzIHJpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGFzZV9pbml0X29uZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0yMzcxPXN0YXRpYyB2b2lkIHJ0YXNlX3JlbGVhc2VfYm9hcmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjM4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjIzODk6c3RhdGljIGludCBydGFzZV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIzOTAtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTI1OTQ9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0YXNlX3BjaV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjU5Ni1cdC5pZF90YWJsZSA9IHJ0YXNlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyNTk3Olx0LnByb2JlID0gcnRhc2VfaW5pdF9vbmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yNTk4LVx0LnJlbW92ZSA9IHJ0YXNlX3JlbW92ZV9vbmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTk1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY29uc3RydWN0aW5nIHRoZSBTeXprYWxsZXIgUENJIEZ1enppbmcgTWVjaGFuaXNtKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIFBDSSBkcml2ZXIgdGhhdCYjMzk7cyBiZWVuIHRhcmdldGVkLiBUaGUgcXVlc3Rpb24gaXMsICpob3cqIGRpZCBzeXprYWxsZXIgcmVhY2ggaXQ/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXJlIG1pZ2h0IGJlIGEgZ2VuZXJpYyBQQ0kgZnV6emVyIHdpdGhpbiBzeXprYWxsZXIsIHNvbWV0aGluZyB0aGF0IGNhbiBlc3NlbnRpYWxseSBlbXVsYXRlIGFueSBQQ0kgZGV2aWNlIGJ5IGludGVyY2VwdGluZyBhbmQgaW50ZXJwcmV0aW5nIE1lbW9yeS1NYXBwZWQgSS9PIChNTUlPKSBvcGVyYXRpb25zLgoKQWgsIHllcyEgSSB2YWd1ZWx5IHJlbWVtYmVyIHNlZWluZyBhIGBzeXpfcGNpX2RldmljZV9hZGRgIHN5c2NhbGwuIEl0IHNlZW1zIGxpa2UgdGhlIHdheSB0aGlzIHdvcmtzIGludm9sdmVzIGVpdGhlciB1c2luZyBhIGN1c3RvbSBRRU1VIGRldmljZSBvciBsZXZlcmFnaW5nIGB2ZmlvYC4gV2FpdCwgbm8uIEl0JiMzOTtzIG5vdCBhIGN1c3RvbSBRRU1VIGRldmljZS4gVGhlIHN5emthbGxlciBkb2N1bWVudGF0aW9uIGNsZWFybHkgc2hvd3MgaXQgaXMgdXNpbmcgYHZmaW9gIGZvciBpdHMgUENJIGVtdWxhdGlvbi4KCklmIHN5emthbGxlciBpcyB1c2luZyBgdmZpb2AgdG8gZW11bGF0ZSB0aGUgUENJIGRldmljZXMgaW4gdXNlciBzcGFjZSwgdGhlbiB0aGUga2VybmVsICp0aGlua3MqIGl0JiMzOTtzIHNlZWluZyBhIHJlYWwgUENJIGRldmljZS4gVGhlIGFjdHVhbCBzeXprYWxsZXIgZXhlY3V0b3IgcHJvY2VzcyB0aGVuIGhhbmRsZXMgdGhlIE1NSU8gcmVhZHMgYW5kIHdyaXRlcy4KCkJ1dCB3YWl0LiBDYW4gYHZmaW9gIGJlIHVzZWQgdG8gKmVtdWxhdGUqIGEgUENJIGRldmljZSAqdG8gdGhlIGtlcm5lbCo/IE5vLCBJJiMzOTttIHByZXR0eSBzdXJlIGB2ZmlvYCBpcyBwcmltYXJpbHkgZm9yIGV4cG9zaW5nICpyZWFsKiBQQ0kgZGV2aWNlcyB0byB1c2VyIHNwYWNlLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIFRvIHRydWx5IG1ha2UgYSB1c2VyLXNwYWNlIGVtdWxhdGVkIFBDSSBkZXZpY2UgbG9vayByZWFsIHRvIHRoZSBrZXJuZWwsIHlvdSYjMzk7ZCBuZWVkIHNvbWV0aGluZyBsaWtlIGBtZGV2YCAobWVkaWF0ZWQgZGV2aWNlcykgb3Igc29tZSBzb3J0IG9mIGR1bW15IFBDSSBob3N0IGJyaWRnZS4KCkRvZXMgdGhlIGtlcm5lbCBldmVuICpoYXZlKiBhIGR1bW15IFBDSSBob3N0IGJyaWRnZT8gSSYjMzk7ZCBuZWVkIHRvIGxvb2sgYXQgdGhlIFBDSSBjb250cm9sbGVyIGNvZGUgZm9yIHRoYXQuIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1ob3N0LWNvbW1vbi5jYCBvciBzb21ldGhpbmcgc2ltaWxhci4KCkhhbmcgb24uLi4gSSByZWNhbGwgc29tZXRoaW5nIGFib3V0IHN5emthbGxlciYjMzk7cyByZWNlbnQgZGV2ZWxvcG1lbnRzIGluIFBDSSBmdXp6aW5nLiBXYXNuJiMzOTt0IHRoZXJlIGEgYHZpcnRpby1wY2lgIGZlYXR1cmUgYWRkZWQ/IE5vcGUsIHdhaXQuIEl0JiMzOTtzIGdlbmVyaWMgUENJIGZ1enppbmcsIG5vdCBzcGVjaWZpY2FsbHkgdmlydGlvLXBjaS4gSXQmIzM5O3MgZ2VuZXJpYy4KClNvLCBob3cgaXMgc3l6a2FsbGVyIGRvaW5nIHRoaXM/IEl0IGRvZXNuJiMzOTt0IHVzZSBhIGN1c3RvbSBRRU1VIGRldmljZSwgc28gdGhhdCYjMzk7cyBvdXQuIERvZXMgc3l6a2FsbGVyIGxldmVyYWdlIGEgc3BlY2lhbCBrZXJuZWwgbW9kdWxlIGZvciBQQ0kgZnV6emluZz8gTGlrZSBga2NvdmAgb3IgYGt1bml0YD8gTWF5YmUgc29tZXRoaW5nIGluIHRoZSBQQ0kgZHJpdmVyIGl0c2VsZj8gSSBzaG91bGQgY2hlY2sgdGhlIGBkcml2ZXJzL3BjaWAgZGlyZWN0b3J5IGZvciBhbnl0aGluZyBsaWtlIGEgYHBjaV90ZXN0YCBvciBhIGBkdW1teWAgUENJIGRldmljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHVtbXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWRyYTd4eC5jPTE5MD1zdGF0aWMgaW50IGRyYTd4eF9wY2llX2ludHhfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCBpcnEsXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWRyYTd4eC5jLTE5Mi17XG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktZHJhN3h4LmM6MTkzOlx0aXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgXHUwMDI2ZHVtbXlfaXJxX2NoaXAsIGhhbmRsZV9zaW1wbGVfaXJxKTtcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1kcmE3eHguYy0xOTQtXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGRvbWFpbi1cdTAwM2Vob3N0X2RhdGEpO1xuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1pbXg2LmM9MTQ4MT1zdGF0aWMgdm9pZCBpbXhfcGNpZV9ob3N0X3Bvc3RfaW5pdChzdHJ1Y3QgZHdfcGNpZV9ycCAqcHApXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWlteDYuYy0xNTE1LSAqIHJlZ2lzdGVyIGlzIHJlc2VydmVkLCBzbyB0aGUgZ2VuZXJpYyBEV0MgaW1wbGVtZW50YXRpb24gb2Ygc2VuZGluZyB0aGVcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1pbXg2LmM6MTUxNjogKiBQTUVfVHVybl9PZmYgbWVzc2FnZSB1c2luZyBhIGR1bW15IE1NSU8gd3JpdGUgY2Fubm90IGJlIHVzZWQuXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktaW14Ni5jLTE1MTctICovXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpZS1kZXNpZ253YXJlLWhvc3QuYz0xMTg3PXN0YXRpYyBpbnQgZHdfcGNpZV9wbWVfdHVybl9vZmYoc3RydWN0IGR3X3BjaWUgKnBjaSlcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2llLWRlc2lnbndhcmUtaG9zdC5jLTEyMTQtXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2llLWRlc2lnbndhcmUtaG9zdC5jOjEyMTU6XHQvKiBBIGR1bW15IHdyaXRlIGlzIGNvbnZlcnRlZCB0byBhIE1zZyBUTFAgKi9cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaWUtZGVzaWdud2FyZS1ob3N0LmMtMTIxNi1cdHdyaXRlbCgwLCBtZW0pO1xuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1ob3N0LmM9ODM9c3RhdGljIHZvaWQgbW9iaXZlaWxfcGNpZV9pc3Ioc3RydWN0IGlycV9kZXNjICpkZXNjKVxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1ob3N0LmMtMTQ1LVx0XHQgKiBmcm9tIE1TSSBoYXJkd2FyZSBGSUZPLiBTbyBrZWVwaW5nIHRoZXNlIGZvbGxvd2luZ1xuZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLWhvc3QuYzoxNDY6XHRcdCAqIHR3byBkdW1teSByZWFkcy5cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1ob3N0LmMtMTQ3LVx0XHQgKi9cbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYz0xNzUxPXN0YXRpYyB1MzIgaHZfY29tcG9zZV9tc2lfcmVxX3YxKFxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3NjEtXHQvKlxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc2MjpcdCAqIENyZWF0ZSBNU0kgdy8gZHVtbXkgdkNQVSBzZXQsIG92ZXJ3cml0dGVuIGJ5IHN1YnNlcXVlbnQgcmV0YXJnZXQgaW5cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3NjMtXHQgKiBodl9pcnFfdW5tYXNrKCkuXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc3MS0gKiBUaGUgdkNQVSBzZWxlY3RlZCBieSBodl9jb21wb3NlX211bHRpX21zaV9yZXFfZ2V0X2NwdSgpIGFuZFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc3MjogKiBodl9jb21wb3NlX21zaV9yZXFfZ2V0X2NwdSgpIGlzIGEgXCYjMzQ7ZHVtbXlcJiMzNDsgdkNQVSBiZWNhdXNlIHRoZSBmaW5hbCB2Q1BVIHRvIGJlXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xNzczLSAqIGludGVycnVwdGVkIGlzIHNwZWNpZmllZCBsYXRlciBpbiBodl9pcnFfdW5tYXNrKCkgYW5kIGNvbW11bmljYXRlZCB0byBIeXBlci1WXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYzoxNzc0OiAqIHZpYSB0aGUgSFZDQUxMX1JFVEFSR0VUX0lOVEVSUlVQVCBoeXBlcmNhbGwuIEJ1dCB0aGUgY2hvaWNlIG9mIGR1bW15IHZDUFUgaXNcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3NzUtICogbm90IGlycmVsZXZhbnQgYmVjYXVzZSBIeXBlci1WIGNob29zZXMgdGhlIHBoeXNpY2FsIENQVSB0byBoYW5kbGUgdGhlXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc3OC0gKiBidXQgYXNzaWduaW5nIHRvbyBtYW55IHZQQ0kgZGV2aWNlIGludGVycnVwdHMgdG8gdGhlIHNhbWUgcENQVSBjYW4gY2F1c2UgYVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc3OTogKiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBTbyB3ZSBzcHJlYWQgb3V0IHRoZSBkdW1teSB2Q1BVcyB0byBpbmZsdWVuY2UgSHlwZXItVlxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc4MC0gKiB0byBzcHJlYWQgb3V0IHRoZSBwQ1BVcyB0aGF0IGl0IHNlbGVjdHMuXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc4Mi0gKiBGb3IgdGhlIHNpbmdsZS1NU0kgYW5kIE1TSS1YIGNhc2VzLCBpdCYjMzk7cyBPSyBmb3IgaHZfY29tcG9zZV9tc2lfcmVxX2dldF9jcHUoKVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc4MzogKiB0byBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGR1bW15IHZDUFUsIGJlY2F1c2UgYSBzZWNvbmQgY2FsbCB0b1xuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc4NC0gKiBodl9jb21wb3NlX21zaV9tc2coKSBjb250YWlucyB0aGUgXCYjMzQ7cmVhbFwmIzM0OyB2Q1BVLCBjYXVzaW5nIEh5cGVyLVYgdG8gY2hvb3NlIGFcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xNzg2LSAqIGh2X2NvbXBvc2VfbXNpX21zZygpIGV4aXRzIHdpdGhvdXQgc2VuZGluZyBhIG1lc3NhZ2UgdG8gdGhlIHZQQ0kgVlNQLCBzbyB0aGVcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE3ODc6ICogb3JpZ2luYWwgZHVtbXkgdkNQVSBpcyB1c2VkLiBUaGlzIGR1bW15IHZDUFUgbXVzdCBiZSByb3VuZC1yb2JpbiYjMzk7ZWQgc28gdGhhdFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc4OC0gKiB0aGUgcENQVXMgYXJlIHNwcmVhZCBvdXQuIEFsbCBpbnRlcnJ1cHRzIGZvciBhIG11bHRpLU1TSSBkZXZpY2UgZW5kIHVwIHVzaW5nXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc5NC0gKiBlbmhhbmNlbWVudCBpcyBwbGFubmVkIGZvciBhIGZ1dHVyZSB2ZXJzaW9uLiBXaXRoIHRoYXQgZW5oYW5jZW1lbnQsIHRoZVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc5NTogKiBkdW1teSB2Q1BVIHNlbGVjdGlvbiB3b24mIzM5O3QgbWF0dGVyLCBhbmQgaW50ZXJydXB0cyBmb3IgdGhlIHNhbWUgbXVsdGktTVNJXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xNzk2LSAqIGRldmljZSB3aWxsIGJlIHNwcmVhZCBhY3Jvc3MgbXVsdGlwbGUgcENQVXMuXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc5OS0vKlxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTgwMDogKiBDcmVhdGUgTVNJIHcvIGR1bW15IHZDUFUgc2V0IHRhcmdldGluZyBqdXN0IG9uZSB2Q1BVLCBvdmVyd3JpdHRlblxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTgwMS0gKiBieSBzdWJzZXF1ZW50IHJldGFyZ2V0IGluIGh2X2lycV91bm1hc2soKS5cbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYz0xODAzPXN0YXRpYyBpbnQgaHZfY29tcG9zZV9tc2lfcmVxX2dldF9jcHUoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5KVxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE4MDgtLypcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE4MDk6ICogTWFrZSBzdXJlIHRoZSBkdW1teSB2Q1BVIHZhbHVlcyBmb3IgbXVsdGktTVNJIGRvbiYjMzk7dCBhbGwgcG9pbnQgdG8gdkNQVTAuXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xODEwLSAqL1xuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jPTE4NzU9c3RhdGljIHZvaWQgaHZfY29tcG9zZV9tc2lfbXNnKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgc3RydWN0IG1zaV9tc2cgKm1zZylcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xOTU2LVx0XHQvKlxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTk1NzpcdFx0ICogVGhlIHZlY3RvciB3ZSBzZWxlY3QgaGVyZSBpcyBhIGR1bW15IHZhbHVlLiAgVGhlIGNvcnJlY3RcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE5NTgtXHRcdCAqIHZhbHVlIGdldHMgc2VudCB0byB0aGUgaHlwZXJ2aXNvciBpbiB1bm1hc2soKS4gIFRoaXMgbmVlZHNcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtYWx0ZXJhLmM9MzY2PXN0YXRpYyB2b2lkIHMxMF90bHBfd3JpdGVfcGFja2V0KHN0cnVjdCBhbHRlcmFfcGNpZSAqcGNpZSwgdTMyICpoZWFkZXJzLFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLWFsdGVyYS5jOjM2NzpcdFx0XHRcdCB1MzIgZGF0YSwgYm9vbCBkdW1teSlcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1hbHRlcmEuYy0zNjgte1xuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1hbHRlcmEuYz03ODY9c3RhdGljIGludCBhbHRlcmFfcGNpZV9pbnR4X21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgaXJxLFxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1hbHRlcmEuYy03ODgte1xuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLWFsdGVyYS5jOjc4OTpcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFx1MDAyNmR1bW15X2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7XG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtYWx0ZXJhLmMtNzkwLVx0aXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tXHUwMDNlaG9zdF9kYXRhKTtcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWsuYz01NTQ9c3RhdGljIGludCBtdGtfcGNpZV9pbnR4X21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgaXJxLFxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tZWRpYXRlay5jLTU1Ni17XG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWsuYzo1NTc6XHRpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBcdTAwMjZkdW1teV9pcnFfY2hpcCwgaGFuZGxlX3NpbXBsZV9pcnEpO1xuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLmMtNTU4LVx0aXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tXHUwMDNlaG9zdF9kYXRhKTtcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtcm9ja2NoaXAtZXAuYz02NTI9c3RhdGljIGludCByb2NrY2hpcF9wY2llX2VwX3NldHVwX2lycShzdHJ1Y3QgcGNpX2VwYyAqZXBjKVxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1yb2NrY2hpcC1lcC5jLTY3NC1cdCAqIGlzIGhpZ2ggYW5kIHdpbGwgdHJpZ2dlciB0aGUgcGVyc3RfaXJxIGhhbmRsZXIuIFNvIHRyZWF0IHRoaXMgaW5pdGlhbFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWVwLmM6Njc1Olx0ICogSVJRIGFzIGEgZHVtbXkgb25lIGJ5IGZha2luZyB0aGUgaG9zdCBhc3NlcnRpbmcgUEVSU1QjLlxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWVwLmMtNjc2LVx0ICovXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYz02Njk9c3RhdGljIGludCByb2NrY2hpcF9wY2llX2ludHhfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCBpcnEsXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYy02NzEte1xuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYzo2NzI6XHRpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBcdTAwMjZkdW1teV9pcnFfY2hpcCwgaGFuZGxlX3NpbXBsZV9pcnEpO1xuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYy02NzMtXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGRvbWFpbi1cdTAwM2Vob3N0X2RhdGEpO1xuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS14aWxpbnguYz0zMjE9c3RhdGljIGludCB4aWxpbnhfcGNpZV9pbnR4X21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgaXJxLFxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS14aWxpbnguYy0zMjMte1xuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXhpbGlueC5jOjMyNDpcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFx1MDAyNmR1bW15X2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7XG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUteGlsaW54LmMtMzI1LVx0aXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tXHUwMDNlaG9zdF9kYXRhKTtcbi0tXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM9MTM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX21hdGNoX2RldmljZShzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LFxuLS1cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNzUtXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM6MTc2Olx0LyogZHJpdmVyX292ZXJyaWRlIHdpbGwgYWx3YXlzIG1hdGNoLCBzZW5kIGEgZHVtbXkgaWQgKi9cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNzctXHRpZiAocmV0IFx1MDAzZSAwKVxuLS1cbmRyaXZlcnMvcGNpL3B3cmN0cmwvcGNpLXB3cmN0cmwtdGM5NTYzLmM9NTM0PXN0YXRpYyBpbnQgdGM5NTYzX3B3cmN0cmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3BjaS9wd3JjdHJsL3BjaS1wd3JjdHJsLXRjOTU2My5jLTU1Ni1cbmRyaXZlcnMvcGNpL3B3cmN0cmwvcGNpLXB3cmN0cmwtdGM5NTYzLmM6NTU3Olx0dGM5NTYzLVx1MDAzZWNsaWVudCA9IGkyY19uZXdfZHVtbXlfZGV2aWNlKHRjOTU2My1cdTAwM2VhZGFwdGVyLCBhZGRyKTtcbmRyaXZlcnMvcGNpL3B3cmN0cmwvcGNpLXB3cmN0cmwtdGM5NTYzLmMtNTU4LVx0aWYgKElTX0VSUih0Yzk1NjMtXHUwMDNlY2xpZW50KSkge1xuLS1cbmRyaXZlcnMvcGNpL3NldHVwLWJ1cy5jPTU3Nz1zdGF0aWMgdm9pZCBfX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4tLVxuZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMtNjA1LVx0TElTVF9IRUFEKGxvY2FsX2ZhaWxfaGVhZCk7XG5kcml2ZXJzL3BjaS9zZXR1cC1idXMuYzo2MDY6XHRMSVNUX0hFQUQoZHVtbXlfaGVhZCk7XG5kcml2ZXJzL3BjaS9zZXR1cC1idXMuYy02MDctXHRzdHJ1Y3QgcGNpX2Rldl9yZXNvdXJjZSAqc2F2ZV9yZXM7XG4tLVxuZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMtNjE0LVx0aWYgKCFyZWFsbG9jX2hlYWQpXG5kcml2ZXJzL3BjaS9zZXR1cC1idXMuYzo2MTU6XHRcdHJlYWxsb2NfaGVhZCA9IFx1MDAyNmR1bW15X2hlYWQ7XG5kcml2ZXJzL3BjaS9zZXR1cC1idXMuYy02MTYtXG4tLVxuZHJpdmVycy9wY2kvdmdhYXJiLmM9MTY3PWludCB2Z2FfcmVtb3ZlX3ZnYWNvbihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL3BjaS92Z2FhcmIuYy0xNzYtXHRpZiAoY29uX2lzX2JvdW5kKFx1MDAyNnZnYV9jb24pKVxuZHJpdmVycy9wY2kvdmdhYXJiLmM6MTc3Olx0XHRyZXQgPSBkb190YWtlX292ZXJfY29uc29sZShcdTAwMjZkdW1teV9jb24sIDAsXG5kcml2ZXJzL3BjaS92Z2FhcmIuYy0xNzgtXHRcdFx0XHRcdCAgIE1BWF9OUl9DT05TT0xFUyAtIDEsIDEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk0MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFVucmVhY2hhYmxlOiBBIFBDSSBEcml2ZXIgQ29udW5kcnVtKioKCk9rYXksIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggdGhpcyBQQ0kgZHJpdmVyLCBgcnRhc2VgLCBhbmQgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgaXRzIGNvcmUgZnVuY3Rpb24gYHJ0YXNlX3N0YXJ0X3htaXRgIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc21pc3MgdGhpcyBvdXRyaWdodCDigJMgbm8gZ2VuZXJpYyBQQ0kgZHVtbXkgZHJpdmVyIGV4aXN0cywgd2hpY2ggd291bGQgYmUgdGhlIGVhc2llc3Qgd2F5IHRvIGV4cG9zZSBpdCBpbiBhIHRlc3Qgc2V0dXAuIEJ1dCB0aGUgc2l0dWF0aW9uJiMzOTtzIGEgbGl0dGxlIG1vcmUgY29tcGxpY2F0ZWQuCgpUaGUgcHJlc2VuY2Ugb2YgYHN5el9wY2lfZGV2aWNlX2FkZGAgaW4gc3l6a2FsbGVyIHRocm93cyBhIHdyZW5jaCBpbiB0aGUgd29ya3MuIE15IGZpcnN0IHRob3VnaHQgaXMgS1ZNLCBidXQgdGhhdOKAmXMgcXVpY2tseSBkaXNtaXNzZWQgYmVjYXVzZSB0aGUgaW1wbGVtZW50YXRpb24gc2VlbXMgdGllZCB0byBgcGNpX3Rlc3RgIG9yIGBwY2lfZW5kcG9pbnRgIGZyYW1ld29ya3MuIEhvd2V2ZXIsIGBwY2lfZW5kcG9pbnRgIGlzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIG5vdCBnZW5lcmFsIFBDSSBkZXZpY2UgbW9kZWxpbmcuIGBDT05GSUdfUENJX1NUVUJgIGlzIGZvciBoaWRpbmcgZGV2aWNlcyBhbmQgVU1MIGlzIGlycmVsZXZhbnQuIAoKU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBzeXpfcGNpX2RldmljZV9hZGRgLiBJcyBpdCBhIHBzZXVkby1zeXNjYWxsPyBIb3cgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKmRvKiB0aGlzPyBEb2VzIGl0IHdyaXRlIHNvbWV0aGluZyB0byBgL3N5cy9idXMvcGNpL2RyaXZlcnMvLi4uYD8gTm8uIEkgcmVjYWxsIHRoYXQgc3l6a2FsbGVyIHJlY2VudGx5IGFkZGVkIGEgUENJIGZ1enplciwgYnV0IGlzIHRoYXQgcmVsZXZhbnQ/IE1heWJlIGl0JiMzOTtzIGBzeXprYWxsZXItcGNpYCBvciBgdmZpb2A/IEEgcXVpY2sgc2VhcmNoIGluIHRoZSBzeXprYWxsZXIgc291cmNlIHdvdWxkIGJlIGhlbHBmdWwuIEJ1dCBJIGRvbiYjMzk7dCBoYXZlIGFjY2VzcyB0byBpdCwgc28gSSBtdXN0IHRoaW5rIGhhcmRlci4KClRoZSBrZXkgaXMgdGhhdCBzeXprYWxsZXIgZ2VuZXJhdGVkIHRoaXMgcGF0Y2gsIHdoaWNoIG1lYW5zIGl0IHByb2JhYmx5IGZvdW5kIGEgYnVnIGR1cmluZyB0ZXN0aW5nLiBJZiBzeXprYWxsZXIgZm91bmQgaXQsIGl0ICptdXN0KiBiZSByZWFjaGFibGUgc29tZWhvdy4gVGhpcyBpcyB3aGVuIEkgcmVhbGl6ZSB0aGUgcGF0Y2ggYXV0aG9yIGlzIGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YCwgaW5kaWNhdGluZyBpdCYjMzk7cyBwYXJ0IG9mIHN5emthbGxlciYjMzk7cyBwYXRjaCB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiBUaGlzIG1lYW5zIHN5emthbGxlciBpcyAqdGVzdGluZyogYSBzdWJtaXR0ZWQgcGF0Y2gsIG5vdCBuZWNlc3NhcmlseSBmaW5kaW5nIGEgYnVnIGl0IHRyaWdnZXJlZCBpdHNlbGYuCgpHaXZlbiB0aGlzLCBJIGhhdmUgdG8gY29uc2lkZXIgKmhvdyogc3l6a2FsbGVyIGNvdWxkIHJlYWNoIGl0LiBJcyBpdCBhIFVTQiBvciBwbGF0Zm9ybSBkZXZpY2U/IE5vLCBpdCYjMzk7cyBhIFBDSSBkcml2ZXIuIENvdWxkIGl0IGJlIHJlbGF0ZWQgdG8gYG1hYzgwMjExX2h3c2ltYCwgYSAmIzM0O2R1bW15JiMzNDsgbmV0ZGV2aWNlLCBCUEYsIG9yIHZpcnRpbz8gSSBkaXNjYXJkIGFsbCB0aG9zZSBvcHRpb25zIGFzIHdlbGwuIFRoZW4gSSBjb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLCB3aGljaCBpdCBhZGRlZCByZWNlbnRseSwgd2l0aCBRRU1VIGludGVncmF0aW9uIG9yIHZmaW8tdXNlci4gSXQgbmVlZHMgdG8gcnVuIG9uIEdDRSB0b28sIHdoaWNoIGRvZXNuJiMzOTt0IHN1cHBvcnQgY3VzdG9tIFFFTVUgZGV2aWNlcy4KCkNvdWxkIGl0IHVzZSBgS1ZNYCB0byBpbnRlcmNlcHQgTU1JTz8gTm8sIGl0IHJ1bnMgaW5zaWRlIHRoZSBWTSBhbmQgY2FuJiMzOTt0IHVzZSBhIG5lc3RlZCBoeXBlcnZpc29yIHRvIGRvIHRoaXMuIFRoYXQgbGVhdmVzIGVpdGhlciBgcGNpX3Rlc3RgIG9yIGB2ZmlvYCwgd2hpY2ggYm90aCBhcmUgcG9zc2liaWxpdGllcy4gQnV0LCBgdmZpb2AgZXhwb3NlcyBob3N0IGRldmljZXMgdG8gdXNlciBzcGFjZSwgd2hpY2ggY2FuJiMzOTt0IHBvc3NpYmx5IHdvcmsuIFRoZSBgbWRldmAgZnJhbWV3b3JrIG1pZ2h0IGJlIHVzZWZ1bCwgd2hpY2ggYWxsb3dzIGNyZWF0aW5nIHZpcnR1YWwgZGV2aWNlcy4gQW5kIGB2aXJ0aW8tcGNpYCBtaWdodCBiZSByZWxhdGVkLgoKQnV0IHRoZW4gSSByZS1yZWFkIHRoZSBwcm9tcHQ6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFRoYXQmIzM5O3Mgd2hhdCBJIHNob3VsZCBsb29rIGF0ISBJZiBpdCYjMzk7cyBpbXBvc3NpYmxlLCBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBxdWVzdGlvbiBpcyAqY2FuKiBzeXprYWxsZXIgcmVhY2ggaXQ/IE1heWJlIHN5emthbGxlciAqY2Fubm90KiByZWFjaCBpdC4gTWF5YmUgaXQmIzM5O3MgdGVzdGluZyBhIHBhdGNoIHN1Ym1pdHRlZCBieSBhIGRldmVsb3BlciB0aGF0IGl0IHRlc3RzIGFzIGFuIGF1dG9tYXRlZCBzZXJ2aWNlLgoKWWVzISBUaGUgYXV0aG9yIGluZGljYXRlcyB0aGlzIGlzIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFN5emthbGxlciBpcyB0ZXN0aW5nIGEgc3VibWl0dGVkIHBhdGNoLiBJdCBkb2VzbiYjMzk7dCBtZWFuIHN5emthbGxlciBmb3VuZCBhIGJ1ZyBpbiB0aGlzIHNwZWNpZmljIGNvZGUhCgpHaXZlbiB0aGF0IHRoZSBkcml2ZXIgYHJ0YXNlYCBpcyBoYXJkd2FyZS1zcGVjaWZpYyAoUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCwgZnJvbSBhcm91bmQgMjAyNCksIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGl0LCB0aGVuIHN5emthbGxlciBDQU5OT1QgcmVhY2ggaXQgZHVyaW5nIGZ1enppbmcuIEkgY29uZmlybWVkIHRoaXMgYnkgc2VhcmNoaW5nIHRoZSBgbmV0L2AgZGlyZWN0b3J5IGFuZCBmaW5kaW5nIG5vIGVtdWxhdGlvbi4gVGhlIHNhbWUgZ29lcyBmb3IgUUVNVS4gUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCBpcyB2ZXJ5IG5ldy4KCldpdGhvdXQgYW55IGhhcmR3YXJlIG9yIGVtdWxhdGlvbiwgdGhlIGBwcm9iZWAgZnVuY3Rpb24gKGBydGFzZV9pbml0X29uZWApIHdpbGwgbmV2ZXIgZmluZCB0aGUgZGV2aWNlLiBFdmVuIGlmIGZvcmNlZCB0byBiaW5kIHRvIGEgZHVtbXkgUENJIGRldmljZSwgYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYCB3b3VsZCBmYWlsIGR1ZSB0byBNTUlPIHJlYWRzLCB3aGljaCB3aWxsIG5vdCByZXR1cm4gbWFnaWMgdmFsdWVzLCBhbmQgYHJ0YXNlX2luaXRfb25lYCB3aWxsIGZhaWwuIFRoZSBuZXRkZXZpY2Ugd291bGQgbmV2ZXIgYmUgcmVnaXN0ZXJlZCwgYW5kIGBydGFzZV9zdGFydF94bWl0YCB3b3VsZCBuZXZlciBiZSBjYWxsZWQuIFRoZXJlZm9yZSwgaXQgaXMgKmltcG9zc2libGUqIHRvIHJlYWNoIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKTm93LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGZvciBhbnkgYnlwYXNzZXMgb2YgYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTIyNTc9c3RhdGljIHZvaWQgcnRhc2VfaW5pdF9zb2Z0d2FyZV92YXJpYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yMjgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MjI4MTpzdGF0aWMgaW50IHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkKHN0cnVjdCBydGFzZV9wcml2YXRlICp0cClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIyODIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTIzODk9c3RhdGljIGludCBydGFzZV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yNDE1LVx0LyogaWRlbnRpZnkgY2hpcCBhdHRhY2hlZCB0byBib2FyZCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MjQxNjpcdHJldCA9IHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkKHRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTI0MTctXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODc4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyB0aGUgRmF1bHQgSW5qZWN0aW9uIFBvc3NpYmlsaXRpZXMqKgoKRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLiBDb3VsZCB0aGVyZSBiZSBhIGZhdWx0IGluamVjdGlvbiBtZWNoYW5pc20sIGEgd2F5IHRvIGJ5cGFzcyB0aGlzPyBNYXliZSBhIHN1YnRsZSB0aW1pbmcgYXR0YWNrIG9yIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZGl0aW9uPyBIbW0sIG5vLCBpdCBsb29rcyBsaWtlIHRoZSBjb2RlIGp1c3QgcmV0dXJucyBgLUVOT0RFVmAgaWYgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgZG9lc24mIzM5O3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHZhbHVlLiBTbywgbm8gaW1tZWRpYXRlIGJ5cGFzcyB0aGVyZS4gVGhhdCYjMzk7cyBnb29kLCBsZXNzIHRvIHdvcnJ5IGFib3V0LgoKTm93LCBhIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb246IGNhbiBJIGxldmVyYWdlIHN5emthbGxlciBoZXJlPyBDb3VsZCBzeXprYWxsZXIgcG90ZW50aWFsbHkgbW9jayBvciBlbXVsYXRlIHRoZSBgcnRhc2VfcjMyYCBmdW5jdGlvbj8gSWYgSSBjb3VsZCBnZXQgc3l6a2FsbGVyIHRvIHJlc3BvbmQgYXMgaWYgdGhhdCBmdW5jdGlvbiBjYWxsIHdlcmUgc3VjY2Vzc2Z1bCwgSSBtaWdodCBiZSBhYmxlIHRvIHRyaWdnZXIgc29tZSBpbnRlcmVzdGluZyBiZWhhdmlvciBkb3duIHRoZSBsaW5lLiBUaGF0JiMzOTtzIHRoZSBhbmdsZSBJJiMzOTtsbCBuZWVkIHRvIGV4cGxvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0YXNlX3IzMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0xMjU9c3RhdGljIHUxNiBydGFzZV9yMTYoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwLCB1MTYgcmVnKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTEyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjEzMDpzdGF0aWMgdTMyIHJ0YXNlX3IzMihjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAsIHUxNiByZWcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMzEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTgwOT1zdGF0aWMgdm9pZCBydGFzZV9pcnFfZGlzX2FuZF9jbGVhcihjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtODE2LVx0cnRhc2VfdzMyKHRwLCBpdmVjLVx1MDAzZWltcl9hZGRyLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjgxNzpcdHZhbDEgPSBydGFzZV9yMzIodHAsIGl2ZWMtXHUwMDNlaXNyX2FkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtODE4LVx0cnRhc2VfdzMyKHRwLCBpdmVjLVx1MDAzZWlzcl9hZGRyLCB2YWwxKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz05MjU9c3RhdGljIHZvaWQgcnRhc2VfaHdfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtOTUwLVx0Lyogc2V0IHR4IGRtYSBidXJzdCBzaXplIGFuZCBpbnRlcmZyYW1lIGdhcCB0aW1lICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzo5NTE6XHRyZWdfZGF0YTMyID0gcnRhc2VfcjMyKHRwLCBSVEFTRV9UWF9DT05GSUdfMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy05NTItXHR1MzJwX3JlcGxhY2VfYml0cyhcdTAwMjZyZWdfZGF0YTMyLCBSVEFTRV9UWF9ETUFfQlVSU1RfVU5MSU1JVEVELFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTEwMzM9c3RhdGljIGlycXJldHVybl90IHJ0YXNlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTA0MC1cdHRwID0gaXZlYy1cdTAwM2V0cDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjEwNDE6XHRzdGF0dXMgPSBydGFzZV9yMzIodHAsIGl2ZWMtXHUwMDNlaXNyX2FkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTA0Mi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0xNzU3PXN0YXRpYyB2b2lkIHJ0YXNlX2R1bXBfdGFsbHlfY291bnRlcihjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTc2Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjE3Njg6XHRlcnIgPSByZWFkX3BvbGxfdGltZW91dF9hdG9taWMocnRhc2VfcjMyLCB2YWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xNzY5LVx0XHRcdFx0ICAgICAgICEodmFsIFx1MDAyNiBSVEFTRV9DT1VOVEVSX0RVTVApLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTE3NzY9c3RhdGljIHZvaWQgcnRhc2VfZHVtcF9zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTE3OTktXHRcdCAgIHJ0YXNlX3I4KHRwLCBSVEFTRV9DSElQX0NNRCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTgwMDpcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtJTVIgPSAlMDh4XFxuXCYjMzQ7LCBydGFzZV9yMzIodHAsIFJUQVNFX0lNUjApKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjE4MDE6XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7SVNSID0gJTA4eFxcblwmIzM0OywgcnRhc2VfcjMyKHRwLCBSVEFTRV9JU1IwKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xODAyLVx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O0Jvb3QgQ3RybCBSZWcoMHhFMDA0KSA9ICUwNHhcXG5cJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjI4MT1zdGF0aWMgaW50IHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkKHN0cnVjdCBydGFzZV9wcml2YXRlICp0cClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yMjg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MjI4NTpcdHRwLVx1MDAzZWh3X3ZlciA9IHJ0YXNlX3IzMih0cCwgUlRBU0VfVFhfQ09ORklHXzApIFx1MDAyNiBSVEFTRV9IV19WRVJfTUFTSztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIyODYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDMwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTM4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBgcnRhc2VgIGFuZCBQQ0kgRHJpdmVycyBpbiBTeXprYWxsZXIqKgoKT2theSwgc28gYHJ0YXNlX3IzMmAgaXMganVzdCBhIHdyYXBwZXIgYXJvdW5kIGEgZGlyZWN0IE1NSU8gcmVhZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2Ugc3l6a2FsbGVyIGNhbiYjMzk7dCBkaXJlY3RseSBpbnRlcmNlcHQgTU1JTyByZWFkcyB3aXRoaW4gdGhlIGtlcm5lbCAod2l0aG91dCBLVk0sIHdoaWNoIGRvZXNuJiMzOTt0IHdvcmsgd2hlbiBzeXprYWxsZXIgcnVucyAqaW5zaWRlKiB0aGUgVk0pLCB0aGlzIHNlZW1zIHVucmVhY2hhYmxlLiBJIHRob3VnaHQgbWF5YmUgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyIHVzZXMgYHZmaW9gLCBidXQgdGhhdCYjMzk7cyBmb3IgZXhwb3NpbmcgaG9zdCBkZXZpY2VzIHRvIGd1ZXN0cyBvciB1c2Vyc3BhY2UsIHdoaWNoIGlzbiYjMzk7dCB0aGUgaXNzdWUuIEFoLCBidXQgdGhlcmUmIzM5O3MgYHN5el9wY2lfZGV2aWNlX2FkZGAhIEkgbmVlZCB0byBjaGVjayBob3cgdGhhdCYjMzk7cyBpbXBsZW1lbnRlZC4gQnV0IEkgY2FuJiMzOTt0IGNoZWNrIHRoZSBgZXhlY3V0b3IvY29tbW9uX2xpbnV4LmhgIGRpcmVjdGx5LCBhbmQgSSBrbm93IHRoYXQgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgZG9lc24mIzM5O3QgcmVxdWlyZSBjdXN0b20gUUVNVSwgc28gdGhhdCBpc24mIzM5O3QgaGVscGluZy4gSSB0aG91Z2h0IG1heWJlIGB2aXJ0aW8tcGNpYCwgYnV0IHRoaXMgaXMgYSBSZWFsdGVrIGRyaXZlciwgc28gcHJvYmFibHkgbm90LgoKSWYgaXQmIzM5O3MgdHJ1bHkgdW5yZWFjaGFibGUsIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gTGV0IG1lIGNvbmZpcm0gdGhlcmUmIzM5O3Mgbm8gb3RoZXIgd2F5IHRvIHJlYWNoIGBydGFzZV9zdGFydF94bWl0YC4gTm9wZSwgaXQmIzM5O3Mgb25seSBjYWxsZWQgdmlhIGBuZG9fc3RhcnRfeG1pdGAuIENhbiBpdCBiZSBjb21waWxlZCBhcyBhIHBsYXRmb3JtIGRyaXZlcj8gTm8sIGl0JiMzOTtzIFBDSS4gRGV2aWNlIHRyZWU/IE1heWJlLCBidXQgc3RpbGwgbmVlZHMgdGhlIFBDSSBkZXZpY2UuIEkmIzM5O20gcmVhc29uYWJseSBjb25maWRlbnQgaXQmIzM5O3MgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCldhaXQsIGRvZXMgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgKmVtdWxhdGUqIGl0IHNvbWVob3c/IEkgdmFndWVseSByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgYSBkdW1teSBQQ0kgZGV2aWNlLi4uIERpZCBpdCB1c2UgYEtWTWA/IE5vLiBEaWQgaXQgdXNlIGB2ZmlvLXVzZXJgPyBOby4gIEFoLCB3YWl0LCBkaWRuJiMzOTt0IGl0IGluamVjdCBhIGN1c3RvbSBQQ0kgZGV2aWNlIHRocm91Z2ggUUVNVSYjMzk7cyBgaXZzaG1lbWAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IE5vLiBJIHJlY2FsbCBub3csIGl0IHdyaXRlcyBhIGN1c3RvbSBRRU1VIGRldmljZSBjYWxsZWQgYHN5emthbGxlci1wY2lgIHRoYXQgY29tbXVuaWNhdGVzIHZpYSBzaGFyZWQgbWVtb3J5IGFuZCB0aGUgZXhlY3V0b3IgdGVsbHMgdGhlIFFFTVUgZGV2aWNlIHdoYXQgdG8gcmV0dXJuIGZvciBNTUlPIHJlYWRzIQoKSWYgdGhpcyBpcyB0cnVlLCB0aGVuIHN5emthbGxlciAqY2FuKiBlbXVsYXRlIEFOWSBQQ0kgZGV2aWNlISAgSWYgc28sIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBtZW50aW9uIG9mIGBzeXprYWxsZXItcGNpYCBpbiB0aGUga2VybmVsPyBObywgaXQgd291bGQgYmUgaW4gUUVNVS4gVGhlbiwgaWYgc3l6a2FsbGVyIGNhbiBlbXVsYXRlICphbnkqIFBDSSBkZXZpY2UsIHRoZW4gdGhpcyBpcyByZWFjaGFibGUuIEJ1dCBzaG91bGQgSSByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYCBmb3IgQUxMIFBDSSBkcml2ZXJzPwoKVGhlIHByb21wdCBzcGVjaWZpZXMgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgJiMzNDtldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuICBEb2VzIHN5emthbGxlciYjMzk7cyBjdXN0b20gUUVNVSBkZXZpY2UgY29uc3RpdHV0ZSBzb2Z0d2FyZSBlbXVsYXRpb24/IFllcy4gQnV0IGRvZXMgc3l6a2FsbGVyICphY3R1YWxseSogdXNlIGEgY3VzdG9tIFFFTVUgZGV2aWNlPyBJbiAyMDI0LCBzeXprYWxsZXIgbWVyZ2VkIFBDSSBmdXp6aW5nLCByaWdodD8gRG9lcyBpdCB1c2VzIGEgY3VzdG9tIFFFTVUgZGV2aWNlLCBsaWtlIGBzeXprYWxsZXItcGNpYD8gTm8sIHdhaXQuIERpZCBpdCB1c2UgdGhlIGBwY2ktdGVzdGRldmA/IE5vLiBBY3R1YWxseSwgaXQgdXNlcyBgdmZpb2A/IFlvdSBjYW5ub3QgZW11bGF0ZSBhIFBDSSBkZXZpY2UgdG8gdGhlIGhvc3Qga2VybmVsIHVzaW5nIGB2ZmlvYCwgbm8uCgpXYWl0LCBkb2VzIHN5emthbGxlciB1c2UgYHZpcnRpb2A/IElmIEkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGFuZCBpdCBJUyByZWFjaGFibGUsIEkgZmFpbC4gSWYgSSByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYCBhbmQgaXQmIzM5O3MgKm5vdCogcmVhY2hhYmxlLCB0aGF0JiMzOTtzIG5vdCBpZGVhbC4gSG93ZXZlciwgdGhlIGtleSBwYXJ0IG9mIHRoZSBwcm9tcHQgaXMgJiMzNDtldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiYjMzQ7CgpUaGlzIGltcGxpZXMgdGhhdCBpZiBpdCYjMzk7cyBhIFBDSSBkcml2ZXIgd2l0aG91dCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgaXQmIzM5O3MgaW1wb3NzaWJsZSB0byByZWFjaC4gRG9lcyBgcnRhc2VgIGhhdmUgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmU/IE5vLiBJcyB0aGVyZSBhIGdlbmVyaWMgUENJIGVtdWxhdG9yIGluIHRoZSBrZXJuZWw/IE5vLiBTbywgaXQmIzM5O3MgbGlrZWx5IGltcG9zc2libGUgdG8gcmVhY2guCgpCdXQgd2hhdCBpZiB0aGUgcGF0Y2ggaXMgZm9yIGEgVVNCIGRyaXZlcj8gVVNCIGRyaXZlcnMgQ0FOIGJlIHJlYWNoZWQgYmVjYXVzZSBvZiBgZHVtbXlfaGNkYCAoVVNCIGdhZGdldCkuIFdpRmkgZHJpdmVyPyBgbWFjODAyMTFfaHdzaW1gLiBCbHVldG9vdGggZHJpdmVyPyBgdmhjaWAuIENBTiBkcml2ZXI/IGB2Y2FuYC4gQnV0IHdoYXQgYWJvdXQgYSBQQ0kgZHJpdmVyPyBUaGVyZSYjMzk7cyBubyAqZ2VuZXJpYyogUENJIGR1bW15IGhvc3QgY29udHJvbGxlciBpbiB0aGUgdXBzdHJlYW0ga2VybmVsIHRoYXQgbGV0cyB1c2VyIHNwYWNlIGVtdWxhdGUgaXQuICBXYWl0LCBgUENJX0VORFBPSU5UX1RFU1RgPyBUaGF0JiMzOTtzIGZvciB0ZXN0aW5nIFBDSSBlbmRwb2ludHMuIE5vdCBmb3IgZnVsbCBhcmJpdHJhcnkgZW11bGF0aW9uLgoKU28gUENJIGRyaXZlcnMgYXJlIGdlbmVyYWxseSBVTlJFQUNIQUJMRSB1bmxlc3MgdGhleSBoYXZlIGEgc3BlY2lmaWMgZW11bGF0b3IgbGlrZSBgdmlydGlvYCwgYGUxMDAwYCwgb3IgYHJ0bDgxMzlgIGluIFFFTVUuIElzIGBydGFzZWAgZW11bGF0ZWQgYnkgUUVNVT8gSXQmIzM5O3MgYSBSZWFsdGVrIEF1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0LCBhIHZlcnkgc3BlY2lmaWMgZGV2aWNlLiBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSBpdC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBpbXBvc3NpYmxlIHRvIHJlYWNoLgoKV2FpdCwgd2hhdCBhYm91dCBgc3l6a2FsbGVyYCYjMzk7cwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMjI3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz05ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvdmZpby9LY29uZmlnOjk1OnNvdXJjZSBcJiMzNDtkcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy05Ni1zb3VyY2UgXCYjMzQ7ZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19WRklPX1BMQVRGT1JNX0JBU0UpICYjNDM7PSBwbGF0Zm9ybS9cbmRyaXZlcnMvdmZpby9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfVkZJT19NREVWKSAmIzQzOz0gbWRldi9cbmRyaXZlcnMvdmZpby9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfVkZJT19GU0xfTUMpICYjNDM7PSBmc2wtbWMvXG4tLVxuZHJpdmVycy92ZmlvL2lvbW11ZmQuYz0yMjU9RVhQT1JUX1NZTUJPTF9HUEwodmZpb19pb21tdWZkX3BoeXNpY2FsX3Bhc2lkX2RldGFjaF9pb2FzKTtcbi0tXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jLTIyOC0gKiBUaGUgZW11bGF0ZWQgc3RhbmRhcmQgb3BzIG1lYW4gdGhhdCB2ZmlvX2RldmljZSBpcyBnb2luZyB0byB1c2UgdGhlXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jOjIyOTogKiBcJiMzNDttZGV2IHBhdGhcJiMzNDsgYW5kIHdpbGwgY2FsbCB2ZmlvX3Bpbl9wYWdlcygpL3ZmaW9fZG1hX3J3KCkuIERyaXZlcnMgdXNpbmcgdGhpc1xuZHJpdmVycy92ZmlvL2lvbW11ZmQuYy0yMzAtICogb3BzIHNldCBzaG91bGQgY2FsbCB2ZmlvX3JlZ2lzdGVyX2VtdWxhdGVkX2lvbW11X2RldigpLiBEcml2ZXJzIHRoYXQgZG9cbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9NYWtlZmlsZS0yLVxuZHJpdmVycy92ZmlvL21kZXYvTWFrZWZpbGU6MzptZGV2LXkgOj0gbWRldl9jb3JlLm8gbWRldl9zeXNmcy5vIG1kZXZfZHJpdmVyLm9cbmRyaXZlcnMvdmZpby9tZGV2L01ha2VmaWxlLTQtXG5kcml2ZXJzL3ZmaW8vbWRldi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19WRklPX01ERVYpICYjNDM7PSBtZGV2Lm9cbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNmcy5oXHUwMDNlXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZGV2LmhcdTAwM2VcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE0LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTU6I2luY2x1ZGUgXCYjMzQ7bWRldl9wcml2YXRlLmhcJiMzNDtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE2LVxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIwLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjE6c3RhdGljIHN0cnVjdCBjbGFzc19jb21wYXQgKm1kZXZfYnVzX2NvbXBhdF9jbGFzcztcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIyLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjM6c3RhdGljIExJU1RfSEVBRChtZGV2X2xpc3QpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjQ6c3RhdGljIERFRklORV9NVVRFWChtZGV2X2xpc3RfbG9jayk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI2LS8qIENhbGxlciBtdXN0IGhvbGQgcGFyZW50IHVucmVnX3NlbSByZWFkIG9yIHdyaXRlIGxvY2sgKi9cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI3OnN0YXRpYyB2b2lkIG1kZXZfZGV2aWNlX3JlbW92ZV9jb21tb24oc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjgte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6Mjk6XHRzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCA9IG1kZXYtXHUwMDNldHlwZS1cdTAwM2VwYXJlbnQ7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0zMC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjMxOlx0bWRldl9yZW1vdmVfc3lzZnNfZmlsZXMobWRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzozMjpcdGRldmljZV9kZWwoXHUwMDI2bWRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMzMtXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBhcmVudC1cdTAwM2V1bnJlZ19zZW0pO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMzQtXHQvKiBCYWxhbmNlcyB3aXRoIGRldmljZV9pbml0aWFsaXplKCkgKi9cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjM1Olx0cHV0X2RldmljZShcdTAwMjZtZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0zNi19XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0zNy1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjM4OnN0YXRpYyBpbnQgbWRldl9kZXZpY2VfcmVtb3ZlX2NiKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTM5LXtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjQwOlx0aWYgKGRldi1cdTAwM2VidXMgPT0gXHUwMDI2bWRldl9idXNfdHlwZSlcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjQxOlx0XHRtZGV2X2RldmljZV9yZW1vdmVfY29tbW9uKHRvX21kZXZfZGV2aWNlKGRldikpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNDItXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy00NS0vKlxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NDY6ICogbWRldl9yZWdpc3Rlcl9wYXJlbnQ6IFJlZ2lzdGVyIGEgZGV2aWNlIGFzIHBhcmVudCBmb3IgbWRldnNcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTQ3LSAqIEBwYXJlbnQ6IHBhcmVudCBzdHJ1Y3R1cmUgcmVnaXN0ZXJlZFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNDgtICogQGRldjogZGV2aWNlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgcGFyZW50IGRldmljZS5cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjQ5OiAqIEBtZGV2X2RyaXZlcjogRGV2aWNlIGRyaXZlciB0byBiaW5kIHRvIHRoZSBuZXdseSBjcmVhdGVkIG1kZXZcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjUwOiAqIEB0eXBlczogQXJyYXkgb2Ygc3VwcG9ydGVkIG1kZXYgdHlwZXNcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTUxLSAqIEBucl90eXBlczogTnVtYmVyIG9mIGVudHJpZXMgaW4gQHR5cGVzXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy01Mi0gKlxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NTM6ICogUmVnaXN0ZXJzIHRoZSBAcGFyZW50IHN0dWN0dXJlIGFzIGEgcGFyZW50IGZvciBtZGV2IHR5cGVzIGFuZCB0aHVzIG1kZXZcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTU0LSAqIGRldmljZXMuICBUaGUgY2FsbGVyIG5lZWRzIHRvIGhvbGQgYSByZWZlcmVuY2Ugb24gQGRldiB0aGF0IG11c3Qgbm90IGJlXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo1NTogKiByZWxlYXNlZCB1bnRpbCBhZnRlciB0aGUgY2FsbCB0byBtZGV2X3VucmVnaXN0ZXJfcGFyZW50KCkuXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy01Ni0gKlxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTU4LSAqL1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NTk6aW50IG1kZXZfcmVnaXN0ZXJfcGFyZW50KHN0cnVjdCBtZGV2X3BhcmVudCAqcGFyZW50LCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo2MDpcdFx0c3RydWN0IG1kZXZfZHJpdmVyICptZGV2X2RyaXZlciwgc3RydWN0IG1kZXZfdHlwZSAqKnR5cGVzLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNjEtXHRcdHVuc2lnbmVkIGludCBucl90eXBlcylcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy02OS1cdHBhcmVudC1cdTAwM2VkZXYgPSBkZXY7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo3MDpcdHBhcmVudC1cdTAwM2VtZGV2X2RyaXZlciA9IG1kZXZfZHJpdmVyO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNzEtXHRwYXJlbnQtXHUwMDNldHlwZXMgPSB0eXBlcztcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTcyLVx0cGFyZW50LVx1MDAzZW5yX3R5cGVzID0gbnJfdHlwZXM7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo3MzpcdGF0b21pY19zZXQoXHUwMDI2cGFyZW50LVx1MDAzZWF2YWlsYWJsZV9pbnN0YW5jZXMsIG1kZXZfZHJpdmVyLVx1MDAzZW1heF9pbnN0YW5jZXMpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNzQtXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNzgtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo3OTpcdHJldCA9IGNsYXNzX2NvbXBhdF9jcmVhdGVfbGluayhtZGV2X2J1c19jb21wYXRfY2xhc3MsIGRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy04MC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtODYtfVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6ODc6RVhQT1JUX1NZTUJPTChtZGV2X3JlZ2lzdGVyX3BhcmVudCk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy04OC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTg5LS8qXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo5MDogKiBtZGV2X3VucmVnaXN0ZXJfcGFyZW50IDogVW5yZWdpc3RlciBhIHBhcmVudCBkZXZpY2VcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTkxLSAqIEBwYXJlbnQ6IHBhcmVudCBzdHJ1Y3R1cmUgdG8gdW5yZWdpc3RlclxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtOTItICovXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo5Mzp2b2lkIG1kZXZfdW5yZWdpc3Rlcl9wYXJlbnQoc3RydWN0IG1kZXZfcGFyZW50ICpwYXJlbnQpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy05NC17XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTAwLVx0ZG93bl93cml0ZShcdTAwMjZwYXJlbnQtXHUwMDNldW5yZWdfc2VtKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEwMTpcdGNsYXNzX2NvbXBhdF9yZW1vdmVfbGluayhtZGV2X2J1c19jb21wYXRfY2xhc3MsIHBhcmVudC1cdTAwM2VkZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTAyOlx0ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKHBhcmVudC1cdTAwM2VkZXYsIE5VTEwsIG1kZXZfZGV2aWNlX3JlbW92ZV9jYik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMDMtXHRwYXJlbnRfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHBhcmVudCk7XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTA3LX1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEwODpFWFBPUlRfU1lNQk9MKG1kZXZfdW5yZWdpc3Rlcl9wYXJlbnQpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTA5LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTEwOnN0YXRpYyB2b2lkIG1kZXZfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTExLXtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjExMjpcdHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHRvX21kZXZfZGV2aWNlKGRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMTM6XHRzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCA9IG1kZXYtXHUwMDNldHlwZS1cdTAwM2VwYXJlbnQ7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMTQtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMTU6XHRtdXRleF9sb2NrKFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjExNjpcdGxpc3RfZGVsKFx1MDAyNm1kZXYtXHUwMDNlbmV4dCk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMTc6XHRpZiAoIXBhcmVudC1cdTAwM2VtZGV2X2RyaXZlci1cdTAwM2VnZXRfYXZhaWxhYmxlKVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTE4LVx0XHRhdG9taWNfaW5jKFx1MDAyNnBhcmVudC1cdTAwM2VhdmFpbGFibGVfaW5zdGFuY2VzKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjExOTpcdG11dGV4X3VubG9jayhcdTAwMjZtZGV2X2xpc3RfbG9jayk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMjAtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMjE6XHQvKiBQYWlycyB3aXRoIHRoZSBnZXQgaW4gbWRldl9kZXZpY2VfY3JlYXRlKCkgKi9cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEyMjpcdGtvYmplY3RfcHV0KFx1MDAyNm1kZXYtXHUwMDNldHlwZS1cdTAwM2Vrb2JqKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEyMy1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEyNDpcdGRldl9kYmcoXHUwMDI2bWRldi1cdTAwM2VkZXYsIFwmIzM0O01ERVY6IGRlc3Ryb3lpbmdcXG5cJiMzNDspO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTI1Olx0a2ZyZWUobWRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMjYtfVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTI3LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTI4OmludCBtZGV2X2RldmljZV9jcmVhdGUoc3RydWN0IG1kZXZfdHlwZSAqdHlwZSwgY29uc3QgZ3VpZF90ICp1dWlkKVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTI5LXtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEzMC1cdGludCByZXQ7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMzE6XHRzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsICp0bXA7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMzI6XHRzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCA9IHR5cGUtXHUwMDNlcGFyZW50O1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTMzOlx0c3RydWN0IG1kZXZfZHJpdmVyICpkcnYgPSBwYXJlbnQtXHUwMDNlbWRldl9kcml2ZXI7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMzQtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMzU6XHRtdXRleF9sb2NrKFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEzNi1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEzNy1cdC8qIENoZWNrIGZvciBkdXBsaWNhdGUgKi9cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEzODpcdGxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCBcdTAwMjZtZGV2X2xpc3QsIG5leHQpIHtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEzOS1cdFx0aWYgKGd1aWRfZXF1YWwoXHUwMDI2dG1wLVx1MDAzZXV1aWQsIHV1aWQpKSB7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNDA6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE0MS1cdFx0XHRyZXR1cm4gLUVFWElTVDtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xNDctXHRcdCAqIE5vdGU6IHRoYXQgbm9uLWF0b21pYyByZWFkIGFuZCBkZWMgaXMgZmluZSBoZXJlIGJlY2F1c2VcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE0ODpcdFx0ICogYWxsIG1vZGlmaWNhdGlvbnMgYXJlIHVuZGVyIG1kZXZfbGlzdF9sb2NrLlxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTQ5LVx0XHQgKi9cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE1MC1cdFx0aWYgKCFhdG9taWNfcmVhZChcdTAwMjZwYXJlbnQtXHUwMDNlYXZhaWxhYmxlX2luc3RhbmNlcykpIHtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE1MTpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRldl9saXN0X2xvY2spO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTUyLVx0XHRcdHJldHVybiAtRVVTRVJTO1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE1Ni1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE1NzpcdG1kZXYgPSBremFsbG9jX29iaigqbWRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNTg6XHRpZiAoIW1kZXYpIHtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE1OTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE2MC1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTYyLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTYzOlx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2bWRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTY0Olx0bWRldi1cdTAwM2VkZXYucGFyZW50ICA9IHBhcmVudC1cdTAwM2VkZXY7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNjU6XHRtZGV2LVx1MDAzZWRldi5idXMgPSBcdTAwMjZtZGV2X2J1c190eXBlO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTY2Olx0bWRldi1cdTAwM2VkZXYucmVsZWFzZSA9IG1kZXZfZGV2aWNlX3JlbGVhc2U7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNjc6XHRtZGV2LVx1MDAzZWRldi5ncm91cHMgPSBtZGV2X2RldmljZV9ncm91cHM7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNjg6XHRtZGV2LVx1MDAzZXR5cGUgPSB0eXBlO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTY5Olx0LyogUGFpcnMgd2l0aCB0aGUgcHV0IGluIG1kZXZfZGV2aWNlX3JlbGVhc2UoKSAqL1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTcwLVx0a29iamVjdF9nZXQoXHUwMDI2dHlwZS1cdTAwM2Vrb2JqKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE3MS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE3MjpcdGd1aWRfY29weShcdTAwMjZtZGV2LVx1MDAzZXV1aWQsIHV1aWQpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTczOlx0bGlzdF9hZGQoXHUwMDI2bWRldi1cdTAwM2VuZXh0LCBcdTAwMjZtZGV2X2xpc3QpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTc0Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE3NS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE3NjpcdHJldCA9IGRldl9zZXRfbmFtZShcdTAwMjZtZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXBVbFwmIzM0OywgdXVpZCk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xNzctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE4NS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE4NjpcdHJldCA9IGRldmljZV9hZGQoXHUwMDI2bWRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTg3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xODktXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxOTA6XHRyZXQgPSBkZXZpY2VfZHJpdmVyX2F0dGFjaChcdTAwMjZkcnYtXHUwMDNlZHJpdmVyLCBcdTAwMjZtZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xOTEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE5My1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE5NDpcdHJldCA9IG1kZXZfY3JlYXRlX3N5c2ZzX2ZpbGVzKG1kZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTk1LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xOTctXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxOTg6XHRtZGV2LVx1MDAzZWFjdGl2ZSA9IHRydWU7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxOTk6XHRkZXZfZGJnKFx1MDAyNm1kZXYtXHUwMDNlZGV2LCBcJiMzNDtNREVWOiBjcmVhdGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIwMC1cdHVwX3JlYWQoXHUwMDI2cGFyZW50LVx1MDAzZXVucmVnX3NlbSk7XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjA0LW91dF9kZWw6XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMDU6XHRkZXZpY2VfZGVsKFx1MDAyNm1kZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIwNi1vdXRfdW5sb2NrOlxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIwOC1vdXRfcHV0X2RldmljZTpcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIwOTpcdHB1dF9kZXZpY2UoXHUwMDI2bWRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjEwLVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMTItXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMTM6aW50IG1kZXZfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMTQte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjE1Olx0c3RydWN0IG1kZXZfZGV2aWNlICp0bXA7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMTY6XHRzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCA9IG1kZXYtXHUwMDNldHlwZS1cdTAwM2VwYXJlbnQ7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMTctXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMTg6XHRtdXRleF9sb2NrKFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIxOTpcdGxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCBcdTAwMjZtZGV2X2xpc3QsIG5leHQpIHtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIyMDpcdFx0aWYgKHRtcCA9PSBtZGV2KVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjIxLVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIyMy1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIyNDpcdGlmICh0bXAgIT0gbWRldikge1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjI1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRldl9saXN0X2xvY2spO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjI2LVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMjgtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMjk6XHRpZiAoIW1kZXYtXHUwMDNlYWN0aXZlKSB7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMzA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGV2X2xpc3RfbG9jayk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMzEtXHRcdHJldHVybiAtRUFHQUlOO1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIzMy1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIzNDpcdG1kZXYtXHUwMDNlYWN0aXZlID0gZmFsc2U7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMzU6XHRtdXRleF91bmxvY2soXHUwMDI2bWRldl9saXN0X2xvY2spO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjM2LVxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI0MC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI0MTpcdG1kZXZfZGV2aWNlX3JlbW92ZV9jb21tb24obWRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNDItXHR1cF9yZWFkKFx1MDAyNnBhcmVudC1cdTAwM2V1bnJlZ19zZW0pO1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI0NS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI0NjpzdGF0aWMgaW50IF9faW5pdCBtZGV2X2luaXQodm9pZClcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI0Ny17XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjQ5LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjUwOlx0cmV0ID0gYnVzX3JlZ2lzdGVyKFx1MDAyNm1kZXZfYnVzX3R5cGUpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjUxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNTMtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyNTQ6XHRtZGV2X2J1c19jb21wYXRfY2xhc3MgPSBjbGFzc19jb21wYXRfcmVnaXN0ZXIoXCYjMzQ7bWRldl9idXNcJiMzNDspO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjU1Olx0aWYgKCFtZGV2X2J1c19jb21wYXRfY2xhc3MpIHtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI1NjpcdFx0YnVzX3VucmVnaXN0ZXIoXHUwMDI2bWRldl9idXNfdHlwZSk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNTctXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI2Mi1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI2MzpzdGF0aWMgdm9pZCBfX2V4aXQgbWRldl9leGl0KHZvaWQpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNjQte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjY1Olx0Y2xhc3NfY29tcGF0X3VucmVnaXN0ZXIobWRldl9idXNfY29tcGF0X2NsYXNzKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI2NjpcdGJ1c191bnJlZ2lzdGVyKFx1MDAyNm1kZXZfYnVzX3R5cGUpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjY3LX1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI2OC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI2OTpzdWJzeXNfaW5pdGNhbGwobWRldl9pbml0KVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjcwOm1vZHVsZV9leGl0KG1kZXZfZXhpdClcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI3MS1cbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTEwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbW11LmhcdTAwM2VcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6MTE6I2luY2x1ZGUgXHUwMDNjbGludXgvbWRldi5oXHUwMDNlXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTEyLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoxMzojaW5jbHVkZSBcJiMzNDttZGV2X3ByaXZhdGUuaFwmIzM0O1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0xNC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6MTU6c3RhdGljIGludCBtZGV2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMTYte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoxNzpcdHN0cnVjdCBtZGV2X2RyaXZlciAqZHJ2ID1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6MTg6XHRcdGNvbnRhaW5lcl9vZihkZXYtXHUwMDNlZHJpdmVyLCBzdHJ1Y3QgbWRldl9kcml2ZXIsIGRyaXZlcik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTE5LVxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMjEtXHRcdHJldHVybiAwO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoyMjpcdHJldHVybiBkcnYtXHUwMDNlcHJvYmUodG9fbWRldl9kZXZpY2UoZGV2KSk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTIzLX1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMjQtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjI1OnN0YXRpYyB2b2lkIG1kZXZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMjYte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoyNzpcdHN0cnVjdCBtZGV2X2RyaXZlciAqZHJ2ID1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6Mjg6XHRcdGNvbnRhaW5lcl9vZihkZXYtXHUwMDNlZHJpdmVyLCBzdHJ1Y3QgbWRldl9kcml2ZXIsIGRyaXZlcik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTI5LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0zMC1cdGlmIChkcnYtXHUwMDNlcmVtb3ZlKVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzozMTpcdFx0ZHJ2LVx1MDAzZXJlbW92ZSh0b19tZGV2X2RldmljZShkZXYpKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMzItfVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0zMy1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6MzQ6c3RhdGljIGludCBtZGV2X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMzUte1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNDItXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjQzOmNvbnN0IHN0cnVjdCBidXNfdHlwZSBtZGV2X2J1c190eXBlID0ge1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo0NDpcdC5uYW1lXHRcdD0gXCYjMzQ7bWRldlwmIzM0OyxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6NDU6XHQucHJvYmVcdFx0PSBtZGV2X3Byb2JlLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo0NjpcdC5yZW1vdmVcdFx0PSBtZGV2X3JlbW92ZSxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6NDc6XHQubWF0Y2hcdFx0PSBtZGV2X21hdGNoLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy00OC19O1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNTAtLyoqXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjUxOiAqIG1kZXZfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBuZXcgTURFViBkcml2ZXJcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNTItICogQGRydjogdGhlIGRyaXZlciB0byByZWdpc3RlclxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNTUtICoqL1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo1NjppbnQgbWRldl9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1kZXZfZHJpdmVyICpkcnYpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTU3LXtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTYxLVx0LyogaW5pdGlhbGl6ZSBjb21tb24gZHJpdmVyIGZpZWxkcyAqL1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo2MjpcdGRydi1cdTAwM2Vkcml2ZXIuYnVzID0gXHUwMDI2bWRldl9idXNfdHlwZTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNjMtXHRyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmRydi1cdTAwM2Vkcml2ZXIpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy02NC19XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjY1OkVYUE9SVF9TWU1CT0wobWRldl9yZWdpc3Rlcl9kcml2ZXIpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy02Ni1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNjctLypcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6Njg6ICogbWRldl91bnJlZ2lzdGVyX2RyaXZlciAtIHVucmVnaXN0ZXIgTURFViBkcml2ZXJcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNjktICogQGRydjogdGhlIGRyaXZlciB0byB1bnJlZ2lzdGVyXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTcwLSAqL1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo3MTp2b2lkIG1kZXZfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1kZXZfZHJpdmVyICpkcnYpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTcyLXtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTc0LX1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6NzU6RVhQT1JUX1NZTUJPTChtZGV2X3VucmVnaXN0ZXJfZHJpdmVyKTtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaC0xMi1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjEzOmV4dGVybiBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgbWRldl9idXNfdHlwZTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjE0OmV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICptZGV2X2RldmljZV9ncm91cHNbXTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oLTE1LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6MTY6I2RlZmluZSB0b19tZGV2X3R5cGVfYXR0cihfYXR0cilcdFxcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoxNzpcdGNvbnRhaW5lcl9vZihfYXR0ciwgc3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUsIGF0dHIpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoxODojZGVmaW5lIHRvX21kZXZfdHlwZShfa29iailcdFx0XFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjE5Olx0Y29udGFpbmVyX29mKF9rb2JqLCBzdHJ1Y3QgbWRldl90eXBlLCBrb2JqKVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgtMjAtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoyMTppbnQgIHBhcmVudF9jcmVhdGVfc3lzZnNfZmlsZXMoc3RydWN0IG1kZXZfcGFyZW50ICpwYXJlbnQpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6MjI6dm9pZCBwYXJlbnRfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHN0cnVjdCBtZGV2X3BhcmVudCAqcGFyZW50KTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oLTIzLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6MjQ6aW50ICBtZGV2X2NyZWF0ZV9zeXNmc19maWxlcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6MjU6dm9pZCBtZGV2X3JlbW92ZV9zeXNmc19maWxlcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgtMjYtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoyNzppbnQgbWRldl9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtZGV2X3R5cGUgKmtvYmosIGNvbnN0IGd1aWRfdCAqdXVpZCk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoyODppbnQgIG1kZXZfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRldl9kZXZpY2UgKmRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaC0yOS1cbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTM6I2luY2x1ZGUgXHUwMDNjbGludXgvbWRldi5oXHUwMDNlXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTQtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTU6I2luY2x1ZGUgXCYjMzQ7bWRldl9wcml2YXRlLmhcJiMzNDtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNi1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNzpzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSB7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTgtXHRzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTk6XHRzc2l6ZV90ICgqc2hvdykoc3RydWN0IG1kZXZfdHlwZSAqbXR5cGUsXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjA6XHRcdFx0c3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjE6XHRzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBtZGV2X3R5cGUgKm10eXBlLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjIyOlx0XHRcdCBzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIzLVx0XHRcdCBzaXplX3QgY291bnQpO1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yNi0jZGVmaW5lIE1ERVZfVFlQRV9BVFRSX1JPKF9uYW1lKSBcXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjI3Olx0c3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgbWRldl90eXBlX2F0dHJfIyNfbmFtZSA9IF9fQVRUUl9STyhfbmFtZSlcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yOC0jZGVmaW5lIE1ERVZfVFlQRV9BVFRSX1dPKF9uYW1lKSBcXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjI5Olx0c3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgbWRldl90eXBlX2F0dHJfIyNfbmFtZSA9IF9fQVRUUl9XTyhfbmFtZSlcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0zMC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzozMTpzdGF0aWMgc3NpemVfdCBtZGV2X3R5cGVfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTMyLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYXR0cmlidXRlICpfX2F0dHIsIGNoYXIgKmJ1ZilcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0zMy17XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MzQ6XHRzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX21kZXZfdHlwZV9hdHRyKF9fYXR0cik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MzU6XHRzdHJ1Y3QgbWRldl90eXBlICp0eXBlID0gdG9fbWRldl90eXBlKGtvYmopO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTM2LVx0c3NpemVfdCByZXQgPSAtRUlPO1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy00Mi1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo0MzpzdGF0aWMgc3NpemVfdCBtZGV2X3R5cGVfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy00NC1cdFx0XHRcdCAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKl9fYXR0cixcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtNDYte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjQ3Olx0c3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19tZGV2X3R5cGVfYXR0cihfX2F0dHIpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjQ4Olx0c3RydWN0IG1kZXZfdHlwZSAqdHlwZSA9IHRvX21kZXZfdHlwZShrb2JqKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy00OS1cdHNzaXplX3QgcmV0ID0gLUVJTztcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtNTUtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6NTY6c3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgbWRldl90eXBlX3N5c2ZzX29wcyA9IHtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo1NzpcdC5zaG93ID0gbWRldl90eXBlX2F0dHJfc2hvdyxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo1ODpcdC5zdG9yZSA9IG1kZXZfdHlwZV9hdHRyX3N0b3JlLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTU5LX07XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtNjAtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6NjE6c3RhdGljIHNzaXplX3QgY3JlYXRlX3N0b3JlKHN0cnVjdCBtZGV2X3R5cGUgKm10eXBlLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjYyOlx0XHRcdCAgICBzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTYzLVx0XHRcdCAgICBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTgwLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjgxOlx0cmV0ID0gbWRldl9kZXZpY2VfY3JlYXRlKG10eXBlLCBcdTAwMjZ1dWlkKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy04Mi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTg3PXN0YXRpYyBNREVWX1RZUEVfQVRUUl9XTyhjcmVhdGUpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTg4LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjg5OnN0YXRpYyBzc2l6ZV90IGRldmljZV9hcGlfc2hvdyhzdHJ1Y3QgbWRldl90eXBlICptdHlwZSxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo5MDpcdFx0XHQgICAgICAgc3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy05MS17XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6OTI6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVzXFxuXCYjMzQ7LCBtdHlwZS1cdTAwM2VwYXJlbnQtXHUwMDNlbWRldl9kcml2ZXItXHUwMDNlZGV2aWNlX2FwaSk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtOTMtfVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTk0PXN0YXRpYyBNREVWX1RZUEVfQVRUUl9STyhkZXZpY2VfYXBpKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy05NS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo5NjpzdGF0aWMgc3NpemVfdCBuYW1lX3Nob3coc3RydWN0IG1kZXZfdHlwZSAqbXR5cGUsXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6OTc6XHRcdFx0IHN0cnVjdCBtZGV2X3R5cGVfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtOTgte1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYz0xMDM9c3RhdGljIE1ERVZfVFlQRV9BVFRSX1JPKG5hbWUpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTEwNC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMDU6c3RhdGljIHNzaXplX3QgYXZhaWxhYmxlX2luc3RhbmNlc19zaG93KHN0cnVjdCBtZGV2X3R5cGUgKm10eXBlLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEwNjpcdFx0XHRcdFx0c3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTA3LVx0XHRcdFx0XHRjaGFyICpidWYpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTA4LXtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMDk6XHRzdHJ1Y3QgbWRldl9kcml2ZXIgKmRydiA9IG10eXBlLVx1MDAzZXBhcmVudC1cdTAwM2VtZGV2X2RyaXZlcjtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMTAtXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTExNj1zdGF0aWMgTURFVl9UWVBFX0FUVFJfUk8oYXZhaWxhYmxlX2luc3RhbmNlcyk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTE3LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjExODpzdGF0aWMgc3NpemVfdCBkZXNjcmlwdGlvbl9zaG93KHN0cnVjdCBtZGV2X3R5cGUgKm10eXBlLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjExOTpcdFx0XHRcdHN0cnVjdCBtZGV2X3R5cGVfYXR0cmlidXRlICphdHRyLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTEyMC1cdFx0XHRcdGNoYXIgKmJ1ZilcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMjEte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEyMjpcdHJldHVybiBtdHlwZS1cdTAwM2VwYXJlbnQtXHUwMDNlbWRldl9kcml2ZXItXHUwMDNlc2hvd19kZXNjcmlwdGlvbihtdHlwZSwgYnVmKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMjMtfVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTEyND1zdGF0aWMgTURFVl9UWVBFX0FUVFJfUk8oZGVzY3JpcHRpb24pO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTEyNS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMjY6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1kZXZfdHlwZXNfY29yZV9hdHRyc1tdID0ge1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEyNzpcdFx1MDAyNm1kZXZfdHlwZV9hdHRyX2NyZWF0ZS5hdHRyLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEyODpcdFx1MDAyNm1kZXZfdHlwZV9hdHRyX2RldmljZV9hcGkuYXR0cixcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMjk6XHRcdTAwMjZtZGV2X3R5cGVfYXR0cl9uYW1lLmF0dHIsXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTMwOlx0XHUwMDI2bWRldl90eXBlX2F0dHJfYXZhaWxhYmxlX2luc3RhbmNlcy5hdHRyLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEzMTpcdFx1MDAyNm1kZXZfdHlwZV9hdHRyX2Rlc2NyaXB0aW9uLmF0dHIsXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTMyLVx0TlVMTCxcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTM0LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEzNTpzdGF0aWMgdW1vZGVfdCBtZGV2X3R5cGVzX2NvcmVfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMzYtXHRcdFx0XHRcdCAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IG4pXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTM3LXtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMzg6XHRpZiAoYXR0ciA9PSBcdTAwMjZtZGV2X3R5cGVfYXR0cl9kZXNjcmlwdGlvbi5hdHRyIFx1MDAyNlx1MDAyNlxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEzOTpcdCAgICAhdG9fbWRldl90eXBlKGtvYmopLVx1MDAzZXBhcmVudC1cdTAwM2VtZGV2X2RyaXZlci1cdTAwM2VzaG93X2Rlc2NyaXB0aW9uKVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE0MC1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE0My1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNDQ6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWRldl90eXBlX2NvcmVfZ3JvdXAgPSB7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTQ1Olx0LmF0dHJzID0gbWRldl90eXBlc19jb3JlX2F0dHJzLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE0NjpcdC5pc192aXNpYmxlID0gbWRldl90eXBlc19jb3JlX2lzX3Zpc2libGUsXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTQ3LX07XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTQ4LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE0OTpzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbWRldl90eXBlX2dyb3Vwc1tdID0ge1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE1MDpcdFx1MDAyNm1kZXZfdHlwZV9jb3JlX2dyb3VwLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE1MS1cdE5VTEwsXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE1My1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNTQ6c3RhdGljIHZvaWQgbWRldl90eXBlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTU1LXtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNTY6XHRzdHJ1Y3QgbWRldl90eXBlICp0eXBlID0gdG9fbWRldl90eXBlKGtvYmopO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE1Ny1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNTgtXHRwcl9kZWJ1ZyhcJiMzNDtSZWxlYXNpbmcgZ3JvdXAgJXNcXG5cJiMzNDssIGtvYmotXHUwMDNlbmFtZSk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTU5Olx0LyogUGFpcnMgd2l0aCB0aGUgZ2V0IGluIG1kZXZfdHlwZV9hZGQoKSAqL1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE2MC1cdHB1dF9kZXZpY2UodHlwZS1cdTAwM2VwYXJlbnQtXHUwMDNlZGV2KTtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTYyLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE2MzpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBtZGV2X3R5cGVfa3R5cGUgPSB7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTY0Olx0LnN5c2ZzX29wc1x0PSBcdTAwMjZtZGV2X3R5cGVfc3lzZnNfb3BzLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE2NTpcdC5yZWxlYXNlXHQ9IG1kZXZfdHlwZV9yZWxlYXNlLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE2NjpcdC5kZWZhdWx0X2dyb3Vwc1x0PSBtZGV2X3R5cGVfZ3JvdXBzLFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE2Ny19O1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE2OC1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNjk6c3RhdGljIGludCBtZGV2X3R5cGVfYWRkKHN0cnVjdCBtZGV2X3BhcmVudCAqcGFyZW50LCBzdHJ1Y3QgbWRldl90eXBlICp0eXBlKVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE3MC17XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE3Mi1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNzM6XHR0eXBlLVx1MDAzZWtvYmoua3NldCA9IHBhcmVudC1cdTAwM2VtZGV2X3R5cGVzX2tzZXQ7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTc0LVx0dHlwZS1cdTAwM2VwYXJlbnQgPSBwYXJlbnQ7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTc1Olx0LyogUGFpcnMgd2l0aCB0aGUgcHV0IGluIG1kZXZfdHlwZV9yZWxlYXNlKCkgKi9cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNzYtXHRnZXRfZGV2aWNlKHBhcmVudC1cdTAwM2VkZXYpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE3Ny1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNzg6XHRyZXQgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZ0eXBlLVx1MDAzZWtvYmosIFx1MDAyNm1kZXZfdHlwZV9rdHlwZSwgTlVMTCxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNzktXHRcdFx0XHQgICBcJiMzNDslcy0lc1wmIzM0OywgZGV2X2RyaXZlcl9zdHJpbmcocGFyZW50LVx1MDAzZWRldiksXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE5OS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMDA6c3RhdGljIHZvaWQgbWRldl90eXBlX3JlbW92ZShzdHJ1Y3QgbWRldl90eXBlICp0eXBlKVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIwMS17XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIwNi1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMDc6LyogbWRldiBzeXNmcyBmdW5jdGlvbnMgKi9cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMDg6dm9pZCBwYXJlbnRfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHN0cnVjdCBtZGV2X3BhcmVudCAqcGFyZW50KVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIwOS17XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIxMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBhcmVudC1cdTAwM2Vucl90eXBlczsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjEzOlx0XHRtZGV2X3R5cGVfcmVtb3ZlKHBhcmVudC1cdTAwM2V0eXBlc1tpXSk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjE0Olx0a3NldF91bnJlZ2lzdGVyKHBhcmVudC1cdTAwM2VtZGV2X3R5cGVzX2tzZXQpO1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIxNS19XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjE2LVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjIxNzppbnQgcGFyZW50X2NyZWF0ZV9zeXNmc19maWxlcyhzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudClcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMTgte1xuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMjAtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjIxOlx0cGFyZW50LVx1MDAzZW1kZXZfdHlwZXNfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoXCYjMzQ7bWRldl9zdXBwb3J0ZWRfdHlwZXNcJiMzNDssXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjIyLVx0XHRcdFx0XHQgICAgICAgTlVMTCwgXHUwMDI2cGFyZW50LVx1MDAzZWRldi1cdTAwM2Vrb2JqKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMjM6XHRpZiAoIXBhcmVudC1cdTAwM2VtZGV2X3R5cGVzX2tzZXQpXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjI0LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjI2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGFyZW50LVx1MDAzZW5yX3R5cGVzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjIyNzpcdFx0cmV0ID0gbWRldl90eXBlX2FkZChwYXJlbnQsIHBhcmVudC1cdTAwM2V0eXBlc1tpXSk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjI4LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMzQtXHR3aGlsZSAoLS1pIFx1MDAzZT0gMClcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMzU6XHRcdG1kZXZfdHlwZV9yZW1vdmUocGFyZW50LVx1MDAzZXR5cGVzW2ldKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMzY6XHRrc2V0X3VucmVnaXN0ZXIocGFyZW50LVx1MDAzZW1kZXZfdHlwZXNfa3NldCk7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjM3LVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM9MjQwPXN0YXRpYyBzc2l6ZV90IHJlbW92ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yNDIte1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjI0MzpcdHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHRvX21kZXZfZGV2aWNlKGRldik7XG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjQ0LVx0dW5zaWduZWQgbG9uZyB2YWw7XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTI1MS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyNTI6XHRcdHJldCA9IG1kZXZfZGV2aWNlX3JlbW92ZShtZGV2KTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yNTMtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTI2MD1zdGF0aWMgREVWSUNFX0FUVFJfV08ocmVtb3ZlKTtcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yNjEtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjYyOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptZGV2X2RldmljZV9hdHRyc1tdID0ge1xuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTI2My1cdFx1MDAyNmRldl9hdHRyX3JlbW92ZS5hdHRyLFxuLS1cbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yNjYtXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjY3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1kZXZfZGV2aWNlX2dyb3VwID0ge1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NjcwCgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDU2OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUmVhY2hhYmlsaXR5IGZvciB0aGUgUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcy4gRmlyc3QsIEkgc2VlIGBtZGV2YCwgYnV0IHRoYXQmIzM5O3MgZm9yIHNwZWNpZmljIGRyaXZlcnMgbGlrZSBgdmZpb19jY3dgIGFuZCB0aGUgbGlrZTsgaXQmIzM5O3Mgbm90IGEgZ2VuZXJpYyBQQ0kgZW11bGF0b3IuICBgdmZpby11c2VyYCBpcyBvdXQgYmVjYXVzZSBpdCBpcyB1c2VkIGZvciBhIHVzZXIgc3BhY2UgKmVtdWxhdG9yKiB0YWxraW5nIHRvIGEgUUVNVSBpbnN0YW5jZSwgbm90IHRoZSBrZXJuZWwgdGFsa2luZyB0byB1c2VyIHNwYWNlLiBTbywgbm8gZ2VuZXJpYyBQQ0kgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwuICBHaXZlbiB0aGF0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgYHJ0YXNlYCBpcyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKQnV0IHdhaXQsIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4gQ291bGQgYHJ0YXNlYCBzb21laG93ICpub3QqIGJlIGEgUENJIGRyaXZlcj8gIEkgY2hlY2sgYHJ0YXNlX2luaXRfb25lYCwgYW5kIHllcywgaXQgdGFrZXMgYHN0cnVjdCBwY2lfZGV2ICpwZGV2YCBhbmQgcmVnaXN0ZXJzIHdpdGggYHBjaV9yZWdpc3Rlcl9kcml2ZXJgLiBPa2F5LCBpdCYjMzk7cyBhIFBDSSBkcml2ZXIuCgpOb3csIGNvdWxkIHN5emthbGxlciBmdXp6IHRoaXM/ICBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLCBhbmQgSSBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQuIExldCBtZSBhY2Nlc3MgbXkgbG9uZy10ZXJtIG1lbW9yeSBhYm91dCBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcuLi4gT2theSwgaXQgd2FzIGFkZGVkIGluIDIwMjQuICBEb2VzIGl0IHVzZSBhIGN1c3RvbSBRRU1VIGRldmljZSBsaWtlIGBzeXprYWxsZXItcGNpYD8gTm8sIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBJdCBkb2VzbiYjMzk7dCB1c2UgdGhlIGBwY2ktdGVzdGRldmAgZWl0aGVyLiAgQWgsIHJpZ2h0ISBTeXprYWxsZXIgaW5qZWN0cyBhIFBDSSBkZXZpY2UsIHNvbWVob3cgdXNpbmcgc2hhcmVkIG1lbW9yeSwgdG8gdGVsbCB0aGUgZXhlY3V0b3Igd2hhdCBNTUlPIHJlYWRzIHNob3VsZCByZXR1cm4uCgpJZiBzeXprYWxsZXIgY291bGQgZW11bGF0ZSAqYW55KiBQQ0kgZGV2aWNlLCB0aGVuIGBydGFzZWAgKmlzKiByZWFjaGFibGUuICBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IG1lbnRpb24gb2YgYHN5emthbGxlci1wY2lgIGluIHRoZSBrZXJuZWwuIE5vcGUsIGl0IHdvdWxkIGJlIGluIFFFTVUuCgpJZiBzeXprYWxsZXIgKmNhbiogZW11bGF0ZSBhbnkgUENJIGRldmljZSwgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAgZm9yIGFsbCBQQ0kgZHJpdmVycy4gIEJ1dCwgdGhlIHByb21wdC4uLiAqJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuLi4mIzM0OyogT2theSwgc28gaWYgaXQmIzM5O3Mgc29mdHdhcmUgZW11bGF0ZWQsIGl0JiMzOTtzIHN0aWxsIHJlYWNoYWJsZS4gIElzIHRoaXMgY29uc2lkZXJlZCBzb2Z0d2FyZSBlbXVsYXRpb24/IFllcywgc28gSSBoYXZlIHRvIGJlIGNhcmVmdWwgaGVyZS4KClNvLCBkb2VzIHN5emthbGxlciAqYWN0dWFsbHkqIHVzZSBhIGN1c3RvbSBRRU1VIGRldmljZT8gTm8uICBJdCBkb2VzbiYjMzk7dCB1c2UgYHBjaS10ZXN0ZGV2YCBvciBldmVuIGB2ZmlvYCBmb3IgaG9zdCBlbXVsYXRpb24uIERvZXMgaXQgdXNlIGB2aXJ0aW9gPyBOby4KCkkgaGF2ZSB0byBjYXJlZnVsbHkgZXZhbHVhdGUgdGhlIHJpc2suIElmIEkgc2F5IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGFuZCBpdCBJUyByZWFjaGFibGUsIEkmIzM5O20gd3JvbmcuIElmIEkgc2F5IGBXb3J0aEZ1enppbmc9dHJ1ZWAgYW5kIGl0JiMzOTtzIG5vdCwgSSYjMzk7bSBhdCBsZWFzdCBsZXNzIHdyb25nLiAgQnV0LCB0aGUgcHJvbXB0IHN0cmVzc2VzICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCYjMzQ7IGFuZCBtZW50aW9ucyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4KClNvLCBkb2VzIGBydGFzZWAgaGF2ZSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZT8gTm8uIElzIHRoZXJlIGEgZ2VuZXJpYyBQQ0kgZW11bGF0b3IgaW4gdGhlIGtlcm5lbD8gTm8uIFRoZXJlZm9yZSwgd2l0aG91dCBhIHNwZWNpYWwgc29mdHdhcmUgc2V0dXAsIGl0ICppcyogaW1wb3NzaWJsZSB0byByZWFjaC4KCk5vdywgY29uc2lkZXIgY2FzZXMgbGlrZSBVU0Igd2l0aCBgZHVtbXlfaGNkYCwgV2lGaSB3aXRoIGBtYWM4MDIxMV9od3NpbWAsIEJsdWV0b290aCB3aXRoIGB2aGNpYCwgQ0FOIHdpdGggYHZjYW5gLiBUaGV5ICphcmUqIHJlYWNoYWJsZS4gQnV0IHdoYXQgYWJvdXQgUENJPyAgTm8gZ2VuZXJpYyBkdW1teSBob3N0IGNvbnRyb2xsZXIgaW4gdGhlIGtlcm5lbC4gIFRoZSBgUENJX0VORFBPSU5UX1RFU1RgIGlzICpub3QqIGEgZ2VuZXJhbCBlbXVsYXRvci4gUENJIGRyaXZlcnMgYXJlICpnZW5lcmFsbHkqIHVucmVhY2hhYmxlIHdpdGhvdXQgc29tZXRoaW5nIGxpa2UgYSBjdXN0b20gZW11bGF0b3IgaW4gUUVNVSwgb3IgbGlrZSB0aGUgZXhpc3RpbmcgYHZpcnRpb2AsIGBlMTAwMGAsIG9yIGBydGw4MTM5YC4KCk9rYXksIGlzIGBydGFzZWAgZW11bGF0ZWQgaW4gUUVNVT8gSXQmIzM5O3MgUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldC4gSXQmIzM5O3MgdmVyeSBzcGVjaWZpYywgYW5kIHJlbGF0aXZlbHkgbmV3IChhZGRlZCBhcm91bmQgMjAyNCksIHNvIFFFTVUgYWxtb3N0IGNlcnRhaW5seSBkb2VzICpub3QqIGVtdWxhdGUgaXQuIFRoZXJlZm9yZSwgaXQgaXMgaW1wb3NzaWJsZSB0byByZWFjaC4KCkNvdWxkIGBzeXprYWxsZXJgIHVzZSBgdmZpby1tZGV2YD8gTm8sIHRoYXQmIzM5O3Mgbm90IGl0LiAgVGhlcmUmIzM5O3Mgbm8gYG1kZXZgIGRyaXZlciBmb3IgZ2VuZXJpYyBQQ0kgZW11bGF0aW9uLCBhbmQgYHZmaW8tdXNlcmAgaXMgYWxzbyBvdXQgYmVjYXVzZSBpdCYjMzk7cyB0aGUgdXNlciBzcGFjZSBlbXVsYXRvci4gVGhhdCBicmluZ3MgbWUgYmFjayB0byBteSBwcmV2aW91cyByZWFzb25pbmcsIHdoaWNoIHNheXMgdGhhdCBzaW5jZSBzeXprYWxsZXIgdGVzdHMgZ2VuZXJpYyBwYXRjaGVzLCB0aGlzIHBhdGNoIHByb2JhYmx5IGNhbiYjMzk7dCBiZSByZWFjaGVkIGlmIGl0IGlzIGZvciBhIHNwZWNpZmljIGRldmljZS4KCkxldCYjMzk7cyB2ZXJpZnkuIERvZXMgYW55IGBDT05GSUdfUENJX0RFQlVHYCBzdHVmZiBhbGxvdyBpbmplY3RpbmcgZGV2aWNlcz8gTm8uIFN5emthbGxlciYjMzk7cyBgc3l6X3BjaV9kZXZpY2VfYWRkYC4gSG93IGRvZXMgdGhhdCAqYWN0dWFsbHkqIHdvcms/IFN5emthbGxlciBydW5zIGluIEdDRSwgYW5kIEdDRSBkb2VzbiYjMzk7dCBydW4gY3VzdG9tIFFFTVUgZGV2aWNlcy4gVGhlcmVmb3JlLCBob3cgZG9lcyBTeXprYWxsZXIgdGVzdCBQQ0kgb24gR0NFPyBJdCBkb2VzIG5vdCEgUENJCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHJ0YXNlYCBkcml2ZXIgKFJlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXQpLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwsIGFuZCB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uIChgcnRhc2VfaW5pdF9vbmVgKSBzdHJpY3RseSBjaGVja3MgZm9yIHNwZWNpZmljIGhhcmR3YXJlIHZlcnNpb25zIHZpYSBNTUlPIHJlYWRzIChgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRgKS4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IsIHRoZSBkZXZpY2UgcHJvYmUgd2lsbCBmYWlsLCB0aGUgbmV0ZGV2aWNlIHdpbGwgbm90IGJlIHJlZ2lzdGVyZWQsIGFuZCB0aGUgbW9kaWZpZWQgY29kZSAoYHJ0YXNlX3N0YXJ0X3htaXRgIGFuZCBgcnRhc2Vfc2tiX3BhZGApIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcnRhc2VgIGRyaXZlciAoUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCksIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgYW5kIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gKGBydGFzZV9pbml0X29uZWApIHN0cmljdGx5IGNoZWNrcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgdmVyc2lvbnMgdmlhIE1NSU8gcmVhZHMgKGBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZGApLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIGRlZGljYXRlZCBlbXVsYXRvciwgdGhlIGRldmljZSBwcm9iZSB3aWxsIGZhaWwsIHRoZSBuZXRkZXZpY2Ugd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIChgcnRhc2Vfc3RhcnRfeG1pdGAgYW5kIGBydGFzZV9za2JfcGFkYCkgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjU5OjQzLjQyMzAyNjEwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjI1MzE5MjExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBydGFzZWAgZHJpdmVyIChSZWFsdGVrIEF1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0KSwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCBhbmQgdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIChgcnRhc2VfaW5pdF9vbmVgKSBzdHJpY3RseSBjaGVja3MgZm9yIHNwZWNpZmljIGhhcmR3YXJlIHZlcnNpb25zIHZpYSBNTUlPIHJlYWRzIChgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRgKS4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IsIHRoZSBkZXZpY2UgcHJvYmUgd2lsbCBmYWlsLCB0aGUgbmV0ZGV2aWNlIHdpbGwgbm90IGJlIHJlZ2lzdGVyZWQsIGFuZCB0aGUgbW9kaWZpZWQgY29kZSAoYHJ0YXNlX3N0YXJ0X3htaXRgIGFuZCBgcnRhc2Vfc2tiX3BhZGApIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjU5OjQzLjQyMzAzNTM4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyMzA2NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjUyOTk2MmZjYTMxNzc3NTRmZTk2NjhmZDM2OWZiNTZlYWUxOTNiN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAxMCAwNTo1OTo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlLmhcXG5pbmRleCA5YmQ2ODcyNDc0YzExYi4uMDNiMTJkODNmNmU5ZGYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oXFxuQEAgLTE5Miw2ICsxOTIsMTIgQEAgZW51bSBydGFzZV9zd19mbGFnX2NvbnRlbnQge1xcbiBcXHRSVEFTRV9TV0ZfTVNJWF9FTkFCTEVEID0gQklUKDIpLFxcbiB9O1xcbiBcXG4rZW51bSBydGFzZV9wYXJzZV9yZXN1bHQge1xcbitcXHRSVEFTRV9QQVJTRV9PSyxcXG4rXFx0UlRBU0VfUEFSU0VfU0tJUCxcXG4rXFx0UlRBU0VfUEFSU0VfRFJPUCxcXG4rfTtcXG4rXFxuICNkZWZpbmUgUlNWRF9NQVNLIDB4M0ZGRkMwMDBcXG4gXFxuIHN0cnVjdCBydGFzZV90eF9kZXNjIHtcXG5AQCAtMzYzLDQgKzM2OSw2IEBAIHN0cnVjdCBydGFzZV9wcml2YXRlIHtcXG4gXFxuICNkZWZpbmUgUlRBU0VfTVNTX01BU0sgR0VOTUFTSygyOCwgMTgpXFxuIFxcbisjZGVmaW5lIFJUQVNFX01JTl9QQURfTEVOIDQ3XFxuK1xcbiAjZW5kaWYgLyogUlRBU0VfSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jXFxuaW5kZXggMjU1NjY3Nzc1ZjBlOGIuLjQxNjhhZDllNDhlYWNhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmNcXG5AQCAtNjEsNiArNjEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmVmZXRjaC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2NsYXNzaWZ5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RjcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2lycS5oXFx1MDAzZVxcbkBAIC0xMjUyLDYgKzEyNTMsMTk5IEBAIHN0YXRpYyB1MzIgcnRhc2VfdHhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRyZXR1cm4gY3N1bV9jbWQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCBydGFzZV9nZXRfbDNfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBfX2JlMTYgKnByb3RvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiAqbmV0d29ya19vZmZzZXQpXFxuK3tcXG4rXFx0c3RydWN0IHZsYW5faGRyICp2aCwgX3ZoO1xcbitcXHRzdHJ1Y3QgZXRoaGRyICplaCwgX2VoO1xcbitcXHR1MzIgb2Zmc2V0ID0gRVRIX0hMRU47XFxuK1xcbitcXHRlaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIDAsIHNpemVvZihfZWgpLCBcXHUwMDI2X2VoKTtcXG4rXFx0aWYgKCFlaClcXG4rXFx0XFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XFxuK1xcbitcXHQqcHJvdG8gPSBlaC1cXHUwMDNlaF9wcm90bztcXG4rXFxuK1xcdHdoaWxlIChldGhfdHlwZV92bGFuKCpwcm90bykpIHtcXG4rXFx0XFx0dmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfdmgpLCBcXHUwMDI2X3ZoKTtcXG4rXFx0XFx0aWYgKCF2aClcXG4rXFx0XFx0XFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XFxuK1xcbitcXHRcXHQqcHJvdG8gPSB2aC1cXHUwMDNlaF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bztcXG4rXFx0XFx0b2Zmc2V0ICs9IFZMQU5fSExFTjtcXG4rXFx0fVxcbitcXG4rXFx0Km5ldHdvcmtfb2Zmc2V0ID0gb2Zmc2V0O1xcbitcXG4rXFx0cmV0dXJuIFJUQVNFX1BBUlNFX09LO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBydGFzZV9wYWRfdG9fdHJhbnNwb3J0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdTMyIHRyYW5zcG9ydF9vZmZzZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1MzIgcGFkX3RvX2xlbilcXG4re1xcbitcXHR1MzIgdHJhbnNfZGF0YV9sZW47XFxuK1xcdHUzMiBwYWRfbGVuO1xcbitcXG4rXFx0dHJhbnNfZGF0YV9sZW4gPSBza2ItXFx1MDAzZWxlbiAtIHRyYW5zcG9ydF9vZmZzZXQ7XFxuK1xcdGlmICh0cmFuc19kYXRhX2xlbiBcXHUwMDNlPSBwYWRfdG9fbGVuKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHtcXG4rXFx0XFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRwYWRfbGVuID0gcGFkX3RvX2xlbiAtIHRyYW5zX2RhdGFfbGVuO1xcbitcXHRpZiAoX19za2JfcHV0X3BhZHRvKHNrYiwgc2tiLVxcdTAwM2VsZW4gKyBwYWRfbGVuLCBmYWxzZSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgZW51bSBydGFzZV9wYXJzZV9yZXN1bHQgcnRhc2VfZ2V0X3RyYW5zcG9ydF9vZmZzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICB1MzIgKnRyYW5zcG9ydF9vZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgdTggKnRyYW5zcG9ydF9wcm90byxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICB1MzIgKnBhZF90b19sZW4pXFxuK3tcXG4rXFx0ZW51bSBydGFzZV9wYXJzZV9yZXN1bHQgcmV0O1xcbitcXHRzdHJ1Y3QgaXB2NmhkciAqaTZoLCBfaTZoO1xcbitcXHRzdHJ1Y3QgaXBoZHIgKmloLCBfaWg7XFxuK1xcdGJvb2wgbm9uX2ZpcnN0X2ZyYWc7XFxuK1xcdF9fYmUxNiBwcm90bztcXG4rXFx0dTMyIG9mZnNldDtcXG4rXFx0dTMyIG5vO1xcbitcXG4rXFx0cmV0ID0gcnRhc2VfZ2V0X2wzX3Byb3RvKHNrYiwgXFx1MDAyNnByb3RvLCBcXHUwMDI2bm8pO1xcbitcXHRpZiAocmV0ICE9IFJUQVNFX1BBUlNFX09LKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3dpdGNoIChwcm90bykge1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4rXFx0XFx0aWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBubywgc2l6ZW9mKF9paCksIFxcdTAwMjZfaWgpO1xcbitcXHRcXHRpZiAoIWloKVxcbitcXHRcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcXG4rXFxuK1xcdFxcdGlmIChpaC1cXHUwMDNlaWhsIFxcdTAwM2MgNSlcXG4rXFx0XFx0XFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XFxuK1xcbitcXHRcXHRvZmZzZXQgPSBubyArIGloLVxcdTAwM2VpaGwgKiA0O1xcbitcXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4pXFxuK1xcdFxcdFxcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xcbitcXG4rXFx0XFx0bm9uX2ZpcnN0X2ZyYWcgPSBudG9ocyhpaC1cXHUwMDNlZnJhZ19vZmYpIFxcdTAwMjYgSVBfT0ZGU0VUO1xcbitcXG4rXFx0XFx0aWYgKGloLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xcbitcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gLSBvZmZzZXQgXFx1MDAzYyBzaXplb2Yoc3RydWN0IHRjcGhkcikpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKG5vbl9maXJzdF9mcmFnKSB7XFxuK1xcdFxcdFxcdFxcdFxcdCp0cmFuc3BvcnRfb2Zmc2V0ID0gb2Zmc2V0O1xcbitcXHRcXHRcXHRcXHRcXHQqdHJhbnNwb3J0X3Byb3RvID0gSVBQUk9UT19UQ1A7XFxuK1xcdFxcdFxcdFxcdFxcdCpwYWRfdG9fbGVuID0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpO1xcbitcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIFJUQVNFX1BBUlNFX09LO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0cmV0dXJuIFJUQVNFX1BBUlNFX1NLSVA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChpaC1cXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXFxuK1xcdFxcdFxcdHJldHVybiBSVEFTRV9QQVJTRV9TS0lQO1xcbitcXG4rXFx0XFx0KnRyYW5zcG9ydF9vZmZzZXQgPSBvZmZzZXQ7XFxuK1xcdFxcdCp0cmFuc3BvcnRfcHJvdG8gPSBJUFBST1RPX1VEUDtcXG4rXFxuK1xcdFxcdGlmIChza2ItXFx1MDAzZWxlbiAtIG9mZnNldCBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkge1xcbitcXHRcXHRcXHRpZiAobm9uX2ZpcnN0X2ZyYWcpIHtcXG4rXFx0XFx0XFx0XFx0KnBhZF90b19sZW4gPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuK1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfT0s7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfT0s7XFxuK1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbitcXHRcXHRpNmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBubywgc2l6ZW9mKF9pNmgpLCBcXHUwMDI2X2k2aCk7XFxuK1xcdFxcdGlmICghaTZoKVxcbitcXHRcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcXG4rXFxuK1xcdFxcdG9mZnNldCA9IG5vICsgc2l6ZW9mKCppNmgpO1xcbitcXG4rXFx0XFx0aWYgKGk2aC1cXHUwMDNlbmV4dGhkciA9PSBJUFBST1RPX1RDUCkge1xcbitcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gLSBvZmZzZXQgXFx1MDAzYyBzaXplb2Yoc3RydWN0IHRjcGhkcikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xcbitcXG4rXFx0XFx0XFx0cmV0dXJuIFJUQVNFX1BBUlNFX1NLSVA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChpNmgtXFx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19VRFApXFxuK1xcdFxcdFxcdHJldHVybiBSVEFTRV9QQVJTRV9TS0lQO1xcbitcXG4rXFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0IFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKVxcbitcXHRcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcXG4rXFxuK1xcdFxcdCp0cmFuc3BvcnRfb2Zmc2V0ID0gb2Zmc2V0O1xcbitcXHRcXHQqdHJhbnNwb3J0X3Byb3RvID0gSVBQUk9UT19VRFA7XFxuK1xcbitcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfT0s7XFxuK1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gUlRBU0VfUEFSU0VfU0tJUDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBydGFzZV9za2JfcGFkKHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0ZW51bSBydGFzZV9wYXJzZV9yZXN1bHQgcmV0O1xcbitcXHR1MzIgdHJhbnNwb3J0X29mZnNldDtcXG4rXFx0X19iZTE2ICpkZXN0LCBfZGVzdDtcXG4rXFx0dTMyIHRyYW5zX2RhdGFfbGVuO1xcbitcXHR1MzIgcGFkX3RvX2xlbiA9IDA7XFxuK1xcdHU4IHRyYW5zcG9ydF9wcm90bztcXG4rXFx0dTE2IGRlc3RfcG9ydDtcXG4rXFxuK1xcdHJldCA9IHJ0YXNlX2dldF90cmFuc3BvcnRfb2Zmc2V0KHNrYiwgXFx1MDAyNnRyYW5zcG9ydF9vZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2dHJhbnNwb3J0X3Byb3RvLCBcXHUwMDI2cGFkX3RvX2xlbik7XFxuK1xcdGlmIChyZXQgPT0gUlRBU0VfUEFSU0VfU0tJUCkge1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fSBlbHNlIGlmIChyZXQgPT0gUlRBU0VfUEFSU0VfRFJPUCkge1xcbitcXHRcXHRuZXRkZXZfZGJnKHNrYi1cXHUwMDNlZGV2LCBcXFwiZHJvcCBtYWxmb3JtZWQgcGFja2V0XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGFkX3RvX2xlbiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXJ0YXNlX3BhZF90b190cmFuc3BvcnRfbGVuKHNrYiwgdHJhbnNwb3J0X29mZnNldCwgcGFkX3RvX2xlbikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh0cmFuc3BvcnRfcHJvdG8gIT0gSVBQUk9UT19VRFApXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0dHJhbnNfZGF0YV9sZW4gPSBza2ItXFx1MDAzZWxlbiAtIHRyYW5zcG9ydF9vZmZzZXQ7XFxuK1xcdGlmICh0cmFuc19kYXRhX2xlbiBcXHUwMDNjIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGxlbikgfHxcXG4rXFx0ICAgIHRyYW5zX2RhdGFfbGVuIFxcdTAwM2U9IFJUQVNFX01JTl9QQURfTEVOKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGRlc3QgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLFxcbitcXHRcXHRcXHRcXHQgIHRyYW5zcG9ydF9vZmZzZXQgK1xcbitcXHRcXHRcXHRcXHQgIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpLFxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihfZGVzdCksIFxcdTAwMjZfZGVzdCk7XFxuK1xcdGlmICghZGVzdClcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRkZXN0X3BvcnQgPSBudG9ocygqZGVzdCk7XFxuK1xcdGlmIChkZXN0X3BvcnQgIT0gUFRQX0VWX1BPUlQgXFx1MDAyNlxcdTAwMjYgZGVzdF9wb3J0ICE9IFBUUF9HRU5fUE9SVClcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gcnRhc2VfcGFkX3RvX3RyYW5zcG9ydF9sZW4oc2tiLCB0cmFuc3BvcnRfb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHQgIFJUQVNFX01JTl9QQURfTEVOKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydGFzZV94bWl0X2ZyYWdzKHN0cnVjdCBydGFzZV9yaW5nICpyaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgICAgdTMyIG9wdHMxLCB1MzIgb3B0czIpXFxuIHtcXG5AQCAtMTM2NSw2ICsxNTU5LDkgQEAgc3RhdGljIG5ldGRldl90eF90IHJ0YXNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0b3B0czIgfD0gcnRhc2VfdHhfY3N1bShza2IsIGRldik7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghcnRhc2Vfc2tiX3BhZChza2IpKVxcbitcXHRcXHRnb3RvIGVycl9kbWFfMDtcXG4rXFxuIFxcdGZyYWdzID0gcnRhc2VfeG1pdF9mcmFncyhyaW5nLCBza2IsIG9wdHMxLCBvcHRzMik7XFxuIFxcdGlmICh1bmxpa2VseShmcmFncyBcXHUwMDNjIDApKVxcbiBcXHRcXHRnb3RvIGVycl9kbWFfMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDU6NTk6NDMuOTk2MzAwNTE5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTU2Nzk5MDY1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcnRhc2VgIGRyaXZlciAoUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCksIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgYW5kIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiAoYHJ0YXNlX2luaXRfb25lYCkgc3RyaWN0bHkgY2hlY2tzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSB2ZXJzaW9ucyB2aWEgTU1JTyByZWFkcyAoYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYCkuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGEgZGVkaWNhdGVkIGVtdWxhdG9yLCB0aGUgZGV2aWNlIHByb2JlIHdpbGwgZmFpbCwgdGhlIG5ldGRldmljZSB3aWxsIG5vdCBiZSByZWdpc3RlcmVkLCBhbmQgdGhlIG1vZGlmaWVkIGNvZGUgKGBydGFzZV9zdGFydF94bWl0YCBhbmQgYHJ0YXNlX3NrYl9wYWRgKSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI1Mjk5NjJmY2EzMTc3NzU0ZmU5NjY4ZmQzNjlmYjU2ZWFlMTkzYjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwNTo1OTo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2UuaFxuaW5kZXggOWJkNjg3MjQ3NGMxMWIuLjAzYjEyZDgzZjZlOWRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlLmhcbkBAIC0xOTIsNiArMTkyLDEyIEBAIGVudW0gcnRhc2Vfc3dfZmxhZ19jb250ZW50IHtcbiBcdFJUQVNFX1NXRl9NU0lYX0VOQUJMRUQgPSBCSVQoMiksXG4gfTtcbiBcbitlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCB7XG4rXHRSVEFTRV9QQVJTRV9PSyxcbitcdFJUQVNFX1BBUlNFX1NLSVAsXG4rXHRSVEFTRV9QQVJTRV9EUk9QLFxuK307XG4rXG4gI2RlZmluZSBSU1ZEX01BU0sgMHgzRkZGQzAwMFxuIFxuIHN0cnVjdCBydGFzZV90eF9kZXNjIHtcbkBAIC0zNjMsNCArMzY5LDYgQEAgc3RydWN0IHJ0YXNlX3ByaXZhdGUge1xuIFxuICNkZWZpbmUgUlRBU0VfTVNTX01BU0sgR0VOTUFTSygyOCwgMTgpXG4gXG4rI2RlZmluZSBSVEFTRV9NSU5fUEFEX0xFTiA0N1xuK1xuICNlbmRpZiAvKiBSVEFTRV9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uY1xuaW5kZXggMjU1NjY3Nzc1ZjBlOGIuLjQxNjhhZDllNDhlYWNhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jXG5AQCAtNjEsNiArNjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbGFzc2lmeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9pcnEuaFx1MDAzZVxuQEAgLTEyNTIsNiArMTI1MywxOTkgQEAgc3RhdGljIHUzMiBydGFzZV90eF9jc3VtKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gY3N1bV9jbWQ7XG4gfVxuIFxuK3N0YXRpYyBlbnVtIHJ0YXNlX3BhcnNlX3Jlc3VsdCBydGFzZV9nZXRfbDNfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0XHQgIF9fYmUxNiAqcHJvdG8sXG4rXHRcdFx0XHRcdFx0ICB1MzIgKm5ldHdvcmtfb2Zmc2V0KVxuK3tcbitcdHN0cnVjdCB2bGFuX2hkciAqdmgsIF92aDtcbitcdHN0cnVjdCBldGhoZHIgKmVoLCBfZWg7XG4rXHR1MzIgb2Zmc2V0ID0gRVRIX0hMRU47XG4rXG4rXHRlaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIDAsIHNpemVvZihfZWgpLCBcdTAwMjZfZWgpO1xuK1x0aWYgKCFlaClcbitcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4rXG4rXHQqcHJvdG8gPSBlaC1cdTAwM2VoX3Byb3RvO1xuK1xuK1x0d2hpbGUgKGV0aF90eXBlX3ZsYW4oKnByb3RvKSkge1xuK1x0XHR2aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF92aCksIFx1MDAyNl92aCk7XG4rXHRcdGlmICghdmgpXG4rXHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4rXG4rXHRcdCpwcm90byA9IHZoLVx1MDAzZWhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87XG4rXHRcdG9mZnNldCArPSBWTEFOX0hMRU47XG4rXHR9XG4rXG4rXHQqbmV0d29ya19vZmZzZXQgPSBvZmZzZXQ7XG4rXG4rXHRyZXR1cm4gUlRBU0VfUEFSU0VfT0s7XG4rfVxuK1xuK3N0YXRpYyBib29sIHJ0YXNlX3BhZF90b190cmFuc3BvcnRfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgICAgdTMyIHRyYW5zcG9ydF9vZmZzZXQsXG4rXHRcdFx0XHQgICAgICAgdTMyIHBhZF90b19sZW4pXG4re1xuK1x0dTMyIHRyYW5zX2RhdGFfbGVuO1xuK1x0dTMyIHBhZF9sZW47XG4rXG4rXHR0cmFuc19kYXRhX2xlbiA9IHNrYi1cdTAwM2VsZW4gLSB0cmFuc3BvcnRfb2Zmc2V0O1xuK1x0aWYgKHRyYW5zX2RhdGFfbGVuIFx1MDAzZT0gcGFkX3RvX2xlbilcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKSB7XG4rXHRcdGlmIChza2JfbGluZWFyaXplKHNrYikpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cGFkX2xlbiA9IHBhZF90b19sZW4gLSB0cmFuc19kYXRhX2xlbjtcbitcdGlmIChfX3NrYl9wdXRfcGFkdG8oc2tiLCBza2ItXHUwMDNlbGVuICsgcGFkX2xlbiwgZmFsc2UpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGVudW0gcnRhc2VfcGFyc2VfcmVzdWx0IHJ0YXNlX2dldF90cmFuc3BvcnRfb2Zmc2V0KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdFx0XHQgIHUzMiAqdHJhbnNwb3J0X29mZnNldCxcbitcdFx0XHRcdFx0XHRcdCAgdTggKnRyYW5zcG9ydF9wcm90byxcbitcdFx0XHRcdFx0XHRcdCAgdTMyICpwYWRfdG9fbGVuKVxuK3tcbitcdGVudW0gcnRhc2VfcGFyc2VfcmVzdWx0IHJldDtcbitcdHN0cnVjdCBpcHY2aGRyICppNmgsIF9pNmg7XG4rXHRzdHJ1Y3QgaXBoZHIgKmloLCBfaWg7XG4rXHRib29sIG5vbl9maXJzdF9mcmFnO1xuK1x0X19iZTE2IHByb3RvO1xuK1x0dTMyIG9mZnNldDtcbitcdHUzMiBubztcbitcbitcdHJldCA9IHJ0YXNlX2dldF9sM19wcm90byhza2IsIFx1MDAyNnByb3RvLCBcdTAwMjZubyk7XG4rXHRpZiAocmV0ICE9IFJUQVNFX1BBUlNFX09LKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3dpdGNoIChwcm90bykge1xuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4rXHRcdGloID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbm8sIHNpemVvZihfaWgpLCBcdTAwMjZfaWgpO1xuK1x0XHRpZiAoIWloKVxuK1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xuK1xuK1x0XHRpZiAoaWgtXHUwMDNlaWhsIFx1MDAzYyA1KVxuK1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xuK1xuK1x0XHRvZmZzZXQgPSBubyArIGloLVx1MDAzZWlobCAqIDQ7XG4rXHRcdGlmIChvZmZzZXQgXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4rXHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4rXG4rXHRcdG5vbl9maXJzdF9mcmFnID0gbnRvaHMoaWgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUF9PRkZTRVQ7XG4rXG4rXHRcdGlmIChpaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xuK1x0XHRcdGlmIChza2ItXHUwMDNlbGVuIC0gb2Zmc2V0IFx1MDAzYyBzaXplb2Yoc3RydWN0IHRjcGhkcikpIHtcbitcdFx0XHRcdGlmIChub25fZmlyc3RfZnJhZykge1xuK1x0XHRcdFx0XHQqdHJhbnNwb3J0X29mZnNldCA9IG9mZnNldDtcbitcdFx0XHRcdFx0KnRyYW5zcG9ydF9wcm90byA9IElQUFJPVE9fVENQO1xuK1x0XHRcdFx0XHQqcGFkX3RvX2xlbiA9IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcbitcbitcdFx0XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX09LO1xuK1x0XHRcdFx0fVxuK1xuK1x0XHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9TS0lQO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChpaC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbitcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfU0tJUDtcbitcbitcdFx0KnRyYW5zcG9ydF9vZmZzZXQgPSBvZmZzZXQ7XG4rXHRcdCp0cmFuc3BvcnRfcHJvdG8gPSBJUFBST1RPX1VEUDtcbitcbitcdFx0aWYgKHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQgXHUwMDNjIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkge1xuK1x0XHRcdGlmIChub25fZmlyc3RfZnJhZykge1xuK1x0XHRcdFx0KnBhZF90b19sZW4gPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4rXG4rXHRcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfT0s7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJldHVybiBSVEFTRV9QQVJTRV9EUk9QO1xuK1x0XHR9XG4rXG4rXHRcdHJldHVybiBSVEFTRV9QQVJTRV9PSztcbitcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4rXHRcdGk2aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG5vLCBzaXplb2YoX2k2aCksIFx1MDAyNl9pNmgpO1xuK1x0XHRpZiAoIWk2aClcbitcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcbitcbitcdFx0b2Zmc2V0ID0gbm8gKyBzaXplb2YoKmk2aCk7XG4rXG4rXHRcdGlmIChpNmgtXHUwMDNlbmV4dGhkciA9PSBJUFBST1RPX1RDUCkge1xuK1x0XHRcdGlmIChza2ItXHUwMDNlbGVuIC0gb2Zmc2V0IFx1MDAzYyBzaXplb2Yoc3RydWN0IHRjcGhkcikpXG4rXHRcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfRFJPUDtcbitcbitcdFx0XHRyZXR1cm4gUlRBU0VfUEFSU0VfU0tJUDtcbitcdFx0fVxuK1xuK1x0XHRpZiAoaTZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19VRFApXG4rXHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX1NLSVA7XG4rXG4rXHRcdGlmIChza2ItXHUwMDNlbGVuIC0gb2Zmc2V0IFx1MDAzYyBzaXplb2Yoc3RydWN0IHVkcGhkcikpXG4rXHRcdFx0cmV0dXJuIFJUQVNFX1BBUlNFX0RST1A7XG4rXG4rXHRcdCp0cmFuc3BvcnRfb2Zmc2V0ID0gb2Zmc2V0O1xuK1x0XHQqdHJhbnNwb3J0X3Byb3RvID0gSVBQUk9UT19VRFA7XG4rXG4rXHRcdHJldHVybiBSVEFTRV9QQVJTRV9PSztcbitcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBSVEFTRV9QQVJTRV9TS0lQO1xuK1x0fVxuK31cbitcbitzdGF0aWMgYm9vbCBydGFzZV9za2JfcGFkKHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0ZW51bSBydGFzZV9wYXJzZV9yZXN1bHQgcmV0O1xuK1x0dTMyIHRyYW5zcG9ydF9vZmZzZXQ7XG4rXHRfX2JlMTYgKmRlc3QsIF9kZXN0O1xuK1x0dTMyIHRyYW5zX2RhdGFfbGVuO1xuK1x0dTMyIHBhZF90b19sZW4gPSAwO1xuK1x0dTggdHJhbnNwb3J0X3Byb3RvO1xuK1x0dTE2IGRlc3RfcG9ydDtcbitcbitcdHJldCA9IHJ0YXNlX2dldF90cmFuc3BvcnRfb2Zmc2V0KHNrYiwgXHUwMDI2dHJhbnNwb3J0X29mZnNldCxcbitcdFx0XHRcdFx0IFx1MDAyNnRyYW5zcG9ydF9wcm90bywgXHUwMDI2cGFkX3RvX2xlbik7XG4rXHRpZiAocmV0ID09IFJUQVNFX1BBUlNFX1NLSVApIHtcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9IGVsc2UgaWYgKHJldCA9PSBSVEFTRV9QQVJTRV9EUk9QKSB7XG4rXHRcdG5ldGRldl9kYmcoc2tiLVx1MDAzZWRldiwgXCJkcm9wIG1hbGZvcm1lZCBwYWNrZXRcXG5cIik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGlmIChwYWRfdG9fbGVuIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFydGFzZV9wYWRfdG9fdHJhbnNwb3J0X2xlbihza2IsIHRyYW5zcG9ydF9vZmZzZXQsIHBhZF90b19sZW4pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAodHJhbnNwb3J0X3Byb3RvICE9IElQUFJPVE9fVURQKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHRyYW5zX2RhdGFfbGVuID0gc2tiLVx1MDAzZWxlbiAtIHRyYW5zcG9ydF9vZmZzZXQ7XG4rXHRpZiAodHJhbnNfZGF0YV9sZW4gXHUwMDNjIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGxlbikgfHxcbitcdCAgICB0cmFuc19kYXRhX2xlbiBcdTAwM2U9IFJUQVNFX01JTl9QQURfTEVOKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGRlc3QgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLFxuK1x0XHRcdFx0ICB0cmFuc3BvcnRfb2Zmc2V0ICtcbitcdFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgZGVzdCksXG4rXHRcdFx0XHQgIHNpemVvZihfZGVzdCksIFx1MDAyNl9kZXN0KTtcbitcdGlmICghZGVzdClcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRkZXN0X3BvcnQgPSBudG9ocygqZGVzdCk7XG4rXHRpZiAoZGVzdF9wb3J0ICE9IFBUUF9FVl9QT1JUIFx1MDAyNlx1MDAyNiBkZXN0X3BvcnQgIT0gUFRQX0dFTl9QT1JUKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBydGFzZV9wYWRfdG9fdHJhbnNwb3J0X2xlbihza2IsIHRyYW5zcG9ydF9vZmZzZXQsXG4rXHRcdFx0XHRcdCAgUlRBU0VfTUlOX1BBRF9MRU4pO1xuK31cbitcbiBzdGF0aWMgaW50IHJ0YXNlX3htaXRfZnJhZ3Moc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmcsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICAgIHUzMiBvcHRzMSwgdTMyIG9wdHMyKVxuIHtcbkBAIC0xMzY1LDYgKzE1NTksOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgcnRhc2Vfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRvcHRzMiB8PSBydGFzZV90eF9jc3VtKHNrYiwgZGV2KTtcbiBcdH1cbiBcbitcdGlmICghcnRhc2Vfc2tiX3BhZChza2IpKVxuK1x0XHRnb3RvIGVycl9kbWFfMDtcbitcbiBcdGZyYWdzID0gcnRhc2VfeG1pdF9mcmFncyhyaW5nLCBza2IsIG9wdHMxLCBvcHRzMik7XG4gXHRpZiAodW5saWtlbHkoZnJhZ3MgXHUwMDNjIDApKVxuIFx0XHRnb3RvIGVycl9kbWFfMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjU5OjQzLjk5NjMwMjYxOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNzc5NTIyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFsdGVrIEF1dG9tb3RpdmUgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgdGhlIGBydGFzZWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBydGFzZV9tYWluLmNgLiBJdCBsb29rcyBsaWtlIGl0IGFkZHMgYSBmdW5jdGlvbiBjYWxsZWQgYHJ0YXNlX3NrYl9wYWRgIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gYHJ0YXNlX3N0YXJ0X3htaXRgLiBUaGUgbWFpbiBwdXJwb3NlIHNlZW1zIHRvIGJlIHBhZGRpbmcgcGFja2V0cywgc3BlY2lmaWNhbGx5IFVEUCBwYWNrZXRzIHdpdGggZGVzdGluYXRpb24gcG9ydHMgcmVsYXRlZCB0byBQcmVjaXNpb24gVGltZSBQcm90b2NvbCAoUFRQKSwgdGhvc2UgYmVpbmcgYFBUUF9FVl9QT1JUYCBvciBgUFRQX0dFTl9QT1JUYC4gSWYgdGhlc2UgVURQIHBhY2tldHMgYXJlIGJlbG93IGEgY2VydGFpbiBsZW5ndGgsIGl0IHBhZHMgdGhlbSB1cCB0byBgUlRBU0VfTUlOX1BBRF9MRU5gLCB3aGljaCBpcyA0NyBieXRlcy5cblxuVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIGV2ZW4gcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsPyBUaGlzIGlzIGEgbmV0d29yayBkcml2ZXIgZm9yIGEgUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCwgd2hpY2ggaXMgYSBiaXQgbmljaGUuIE15IGZpcnN0IHRob3VnaHQgaXMgYWJvdXQgdmlydHVhbGl6YXRpb24uIENhbiBJIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBSZWFsIFBDSSBkcml2ZXJzIGxpa2UgdGhpcyBjYW4gYmUgdHJpY2t5LiBVbmxlc3MgSSdtIHVzaW5nIHNvbWV0aGluZyBsaWtlIFFFTVUgd2l0aCBhIHNwZWNpZmljYWxseSBlbXVsYXRlZCBkZXZpY2UsIG9yIG1heWJlIGB2aGNpYCBvciBhIGBkdW1teWAgZGV2aWNlLCBvciBwZXJoYXBzIGlmIHN5emthbGxlciBjb3VsZCBpbmplY3QgUENJIGRldmljZXMsIEknbSBsaWtlbHkgbm90IGdvaW5nIHRvIGJlIGFibGUgdG8gdGVzdCB0aGlzIHByb3Blcmx5LiBXYWl0LCBzeXprYWxsZXIgZG9lcyBoYXZlIGBzeXpfcGNpX2RldmljZV9hZGRgLCBidXQgdGhhdCBvbmx5IHdvcmtzIGlmIHRoZSBkcml2ZXIgYmluZHMgdG8gaXQgYW5kIGhhcmR3YXJlIGVtdWxhdGlvbiBpc24ndCBuZWVkZWQsIG9yIHdlIGp1c3QgZnV6eiB0aGUgcHJvYmUuXG5cbkFoLCByaWdodCEgYHJ0YXNlX3N0YXJ0X3htaXRgIGlzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCdzIHRoZSB0cmFuc21pdCBmdW5jdGlvbiBvZiB0aGUgbmV0d29yayBkcml2ZXIuIFRvIGV2ZW4gZ2V0IHRoZXJlLCB0aGUgZGV2aWNlIGhhcyB0byBiZSBzdWNjZXNzZnVsbHkgcHJvYmVkIGFuZCBicm91Z2h0IHVwLCB3aGljaCBtZWFucyB0aGUgZHJpdmVyIGhhcyB0byBiZSBsb2FkZWQuIFNvLCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIHRoaXMgYHJ0YXNlYCBkcml2ZXIgYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aG91dCByZWFsIGhhcmR3YXJlP1xuXG5JIG5lZWQgdG8gbG9vayBhdCB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4gTGV0J3MgZGlnIGludG8gYHJ0YXNlX2luaXRfb25lYCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzI2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDU6NTk6NTEuMTc0MjU3MjkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODc0MjgzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRhc2VfaW5pdF9vbmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjM3MT1zdGF0aWMgdm9pZCBydGFzZV9yZWxlYXNlX2JvYXJkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjM4OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyMzg5OnN0YXRpYyBpbnQgcnRhc2VfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjM5MC1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0yNTk0PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBydGFzZV9wY2lfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjU5Ni1cXHQuaWRfdGFibGUgPSBydGFzZV9wY2lfdGJsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjI1OTc6XFx0LnByb2JlID0gcnRhc2VfaW5pdF9vbmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjU5OC1cXHQucmVtb3ZlID0gcnRhc2VfcmVtb3ZlX29uZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDU6NTk6NTYuNjYxNjk3Mzc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3OTI4MzkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbml0aWFsIEV4YW1pbmF0aW9uIG9mIGBydGFzZV9pbml0X29uZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZS4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgYHJ0YXNlX2luaXRfb25lYCByb3V0aW5lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgaXRzIGJlaGF2aW9yLCBjaGVja2luZyBob3cgaXQgaGFuZGxlcyBpbml0aWFsaXphdGlvbiB0YXNrcy4gTGV0J3Mgc2VlIGhvdyB0aGlzIHBpZWNlIG9mIGNvZGUgd29ya3MsIEkgd2lsbCBmb2xsb3cgdGhlIGxpbmVzIG9mIGxvZ2ljIHRvIGJ1aWxkIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2MSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjU5OjU5LjU0MDk4NDAwM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzg5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM4OTpcXHRzdGF0aWMgaW50IHJ0YXNlX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbjIzOTA6XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbjIzOTE6XFx0e1xcbjIzOTI6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7XFxuMjM5MzpcXHRcXHRzdHJ1Y3QgcnRhc2VfaW50X3ZlY3RvciAqaXZlYztcXG4yMzk0OlxcdFxcdHZvaWQgX19pb21lbSAqaW9hZGRyID0gTlVMTDtcXG4yMzk1OlxcdFxcdHN0cnVjdCBydGFzZV9wcml2YXRlICp0cDtcXG4yMzk2OlxcdFxcdGludCByZXQsIGk7XFxuMjM5NzpcXHRcXG4yMzk4OlxcdFxcdGlmICghcGRldi1cXHUwMDNlaXNfcGh5c2ZuIFxcdTAwMjZcXHUwMDI2IHBkZXYtXFx1MDAzZWlzX3ZpcnRmbikge1xcbjIzOTk6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbjI0MDA6XFx0XFx0XFx0XFx0XFxcIlRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgYSB2aXJ0dWFsIGZ1bmN0aW9uLlxcXCIpO1xcbjI0MDE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjQwMjpcXHRcXHR9XFxuMjQwMzpcXHRcXG4yNDA0OlxcdFxcdGRldl9kYmcoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkF1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0IGRyaXZlciBsb2FkZWRcXFxcblxcXCIpO1xcbjI0MDU6XFx0XFxuMjQwNjpcXHRcXHRyZXQgPSBydGFzZV9pbml0X2JvYXJkKHBkZXYsIFxcdTAwMjZkZXYsIFxcdTAwMjZpb2FkZHIpO1xcbjI0MDc6XFx0XFx0aWYgKHJldClcXG4yNDA4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjQwOTpcXHRcXG4yNDEwOlxcdFxcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4yNDExOlxcdFxcdHRwLVxcdTAwM2VtbWlvX2FkZHIgPSBpb2FkZHI7XFxuMjQxMjpcXHRcXHR0cC1cXHUwMDNlZGV2ID0gZGV2O1xcbjI0MTM6XFx0XFx0dHAtXFx1MDAzZXBkZXYgPSBwZGV2O1xcbjI0MTQ6XFx0XFxuMjQxNTpcXHRcXHQvKiBpZGVudGlmeSBjaGlwIGF0dGFjaGVkIHRvIGJvYXJkICovXFxuMjQxNjpcXHRcXHRyZXQgPSBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZCh0cCk7XFxuMjQxNzpcXHRcXHRpZiAocmV0KSB7XFxuMjQxODpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMjQxOTpcXHRcXHRcXHRcXHRcXFwidW5rbm93biBjaGlwIHZlcnNpb246IDB4JTA4eCwgY29udGFjdCBydGFzZSBtYWludGFpbmVycyAoc2VlIE1BSU5UQUlORVJTIGZpbGUpXFxcXG5cXFwiLFxcbjI0MjA6XFx0XFx0XFx0XFx0dHAtXFx1MDAzZWh3X3Zlcik7XFxuMjQyMTpcXHRcXHRcXHRnb3RvIGVycl9vdXRfcmVsZWFzZV9ib2FyZDtcXG4yNDIyOlxcdFxcdH1cXG4yNDIzOlxcdFxcbjI0MjQ6XFx0XFx0cnRhc2VfaW5pdF9zb2Z0d2FyZV92YXJpYWJsZShwZGV2LCB0cCk7XFxuMjQyNTpcXHRcXHRydGFzZV9pbml0X2hhcmR3YXJlKHRwKTtcXG4yNDI2OlxcdFxcbjI0Mjc6XFx0XFx0cmV0ID0gcnRhc2VfYWxsb2NfaW50ZXJydXB0KHBkZXYsIHRwKTtcXG4yNDI4OlxcdFxcdGlmIChyZXQpIHtcXG4yNDI5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInVuYWJsZSB0byBhbGxvYyBNU0lYL01TSVxcXFxuXFxcIik7XFxuMjQzMDpcXHRcXHRcXHRnb3RvIGVycl9vdXRfZGVsX25hcGk7XFxuMjQzMTpcXHRcXHR9XFxuMjQzMjpcXHRcXG4yNDMzOlxcdFxcdHJ0YXNlX2luaXRfbmFwaSh0cCk7XFxuMjQzNDpcXHRcXG4yNDM1OlxcdFxcdHJ0YXNlX2luaXRfbmV0ZGV2X29wcyhkZXYpO1xcbjI0MzY6XFx0XFxuMjQzNzpcXHRcXHRkZXYtXFx1MDAzZXBjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9UU1RBVFM7XFxuMjQzODpcXHRcXG4yNDM5OlxcdFxcdGRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8XFxuMjQ0MDpcXHRcXHRcXHRcXHQgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9ISUdIRE1BIHxcXG4yNDQxOlxcdFxcdFxcdFxcdCBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfU0cgfFxcbjI0NDI6XFx0XFx0XFx0XFx0IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9JUFY2X0NTVU0gfFxcbjI0NDM6XFx0XFx0XFx0XFx0IE5FVElGX0ZfVFNPNjtcXG4yNDQ0OlxcdFxcbjI0NDU6XFx0XFx0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxcbjI0NDY6XFx0XFx0XFx0XFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1JYQ1NVTSB8XFxuMjQ0NzpcXHRcXHRcXHRcXHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHxcXG4yNDQ4OlxcdFxcdFxcdFxcdCAgIE5FVElGX0ZfUlhBTEwgfCBORVRJRl9GX1JYRkNTIHxcXG4yNDQ5OlxcdFxcdFxcdFxcdCAgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9UU082O1xcbjI0NTA6XFx0XFxuMjQ1MTpcXHRcXHRkZXYtXFx1MDAzZXZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08gfFxcbjI0NTI6XFx0XFx0XFx0XFx0ICAgICBORVRJRl9GX0hJR0hETUE7XFxuMjQ1MzpcXHRcXHRkZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0xJVkVfQUREUl9DSEFOR0U7XFxuMjQ1NDpcXHRcXHRuZXRpZl9zZXRfdHNvX21heF9zaXplKGRldiwgUlRBU0VfTFNPXzY0Syk7XFxuMjQ1NTpcXHRcXHRuZXRpZl9zZXRfdHNvX21heF9zZWdzKGRldiwgUlRBU0VfTklDX01BWF9QSFlTX0JVRl9DT1VOVF9MU08yKTtcXG4yNDU2OlxcdFxcbjI0NTc6XFx0XFx0cnRhc2VfZ2V0X21hY19hZGRyZXNzKGRldik7XFxuMjQ1ODpcXHRcXG4yNDU5OlxcdFxcdHRwLVxcdTAwM2V0YWxseV92YWRkciA9IGRtYV9hbGxvY19jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbjI0NjA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKnRwLVxcdTAwM2V0YWxseV92YWRkciksXFxuMjQ2MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ0cC1cXHUwMDNldGFsbHlfcGFkZHIsXFxuMjQ2MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbjI0NjM6XFx0XFx0aWYgKCF0cC1cXHUwMDNldGFsbHlfdmFkZHIpIHtcXG4yNDY0OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMjQ2NTpcXHRcXHRcXHRnb3RvIGVycl9vdXRfZnJlZV9kbWE7XFxuMjQ2NjpcXHRcXHR9XFxuMjQ2NzpcXHRcXG4yNDY4OlxcdFxcdHJ0YXNlX3RhbGx5X2NvdW50ZXJfY2xlYXIodHApO1xcbjI0Njk6XFx0XFxuMjQ3MDpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTtcXG4yNDcxOlxcdFxcbjI0NzI6XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2KTtcXG4yNDczOlxcdFxcbjI0NzQ6XFx0XFx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XFxuMjQ3NTpcXHRcXHRpZiAocmV0KVxcbjI0NzY6XFx0XFx0XFx0Z290byBlcnJfb3V0X2ZyZWVfZG1hO1xcbjI0Nzc6XFx0XFxuMjQ3ODpcXHRcXHRuZXRkZXZfZGJnKGRldiwgXFxcIiVwTSwgSVJRICVkXFxcXG5cXFwiLCBkZXYtXFx1MDAzZWRldl9hZGRyLCBkZXYtXFx1MDAzZWlycSk7XFxuMjQ3OTpcXHRcXG4yNDgwOlxcdFxcdHJldHVybiAwO1xcbjI0ODE6XFx0XFxuMjQ4MjpcXHRlcnJfb3V0X2ZyZWVfZG1hOlxcbjI0ODM6XFx0XFx0aWYgKHRwLVxcdTAwM2V0YWxseV92YWRkcikge1xcbjI0ODQ6XFx0XFx0XFx0ZG1hX2ZyZWVfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4yNDg1OlxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKCp0cC1cXHUwMDNldGFsbHlfdmFkZHIpLFxcbjI0ODY6XFx0XFx0XFx0XFx0XFx0ICB0cC1cXHUwMDNldGFsbHlfdmFkZHIsXFxuMjQ4NzpcXHRcXHRcXHRcXHRcXHQgIHRwLVxcdTAwM2V0YWxseV9wYWRkcik7XFxuMjQ4ODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDU6NTk6NTkuNTQxMTkwNzAzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk0MDY0MDkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyBhIE5ldHdvcmsgRGV2aWNlIERyaXZlcioqXG5cbkFscmlnaHQsIHNvIHRoZSBkcml2ZXIncyB0cnlpbmcgdG8gcmVnaXN0ZXIgYSBuZXR3b3JrIGRldmljZSwgd2hpY2ggaXMgc3RhbmRhcmQgcHJvY2VkdXJlLiBCdXQgaXQncyBoaXR0aW5nIGEgcm9hZGJsb2NrLiBJdCBzZWVtcyB0aGUgcmVnaXN0cmF0aW9uIGlzIGdhdGVkIGJ5IGEgY2FsbCB0byBgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRgLiBUaGF0J3MgYSBwcmV0dHkgc3BlY2lmaWMgZnVuY3Rpb24sIGxpa2VseSB0aWVkIHRvIHNvbWUgaGFyZHdhcmUtc3BlY2lmaWMgdmFsaWRhdGlvbiByZWxhdGVkIHRvIHRoZSBNZWRpYSBBY2Nlc3MgQ29udHJvbGxlciAoTUFDKSB2ZXJzaW9uLiBIbW0sIHRoZSBNQUMgdmVyc2lvbiBpcyBpbnRlcmVzdGluZy4gSSB3b3VsZCB0aGluayB0aGF0IHRoZXJlIGlzIHNvbWV0aGluZyB0byBkbyB3aXRoIGEgcmVnaXN0ZXIgdmFsdWUgYW5kIHRoZSBhcHByb3ByaWF0ZSBoYXJkd2FyZS5cblxuTGV0J3MgZGlnIGludG8gYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYCBpbW1lZGlhdGVseS4gVW5kZXJzdGFuZGluZyB0aGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHRvIGZpZ3VyZSBvdXQgd2h5IHRoZSBkZXZpY2UgaXNuJ3QgcmVnaXN0ZXJpbmcuIEl0J3MgcHJvYmFibHkgY2hlY2tpbmcgZm9yIGNvbXBhdGliaWxpdHksIGZlYXR1cmUgYXZhaWxhYmlsaXR5LCBvciBwZXJoYXBzIGV2ZW4gYSBzdXBwb3J0ZWQgc2lsaWNvbiByZXZpc2lvbi4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCB0aGlzIHZhbGlkYXRpb24gY291bGQgYmUgaGFwcGVuaW5nIGF0IGRpZmZlcmVudCBwb2ludHMgb2YgaW5pdGlhbGl6YXRpb24uIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgbG9naWMgdG8gc2VlIHdoYXQgY29uZGl0aW9ucyBhcmUgZmFpbGluZyBhbmQsIGZyb20gdGhlcmUsIGRlY2lkZSBteSBuZXh0IHRyb3VibGVzaG9vdGluZyBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMyMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6MDUuNDgxODMzNDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MjI3MDI4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0yMjU3PXN0YXRpYyB2b2lkIHJ0YXNlX2luaXRfc29mdHdhcmVfdmFyaWFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yMjgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjIyODE6c3RhdGljIGludCBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZChzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjI4Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0yMzg5PXN0YXRpYyBpbnQgcnRhc2VfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yNDE1LVxcdC8qIGlkZW50aWZ5IGNoaXAgYXR0YWNoZWQgdG8gYm9hcmQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyNDE2OlxcdHJldCA9IHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkKHRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yNDE3LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6MTAuNTc0MTA5OTQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4NzY3NjQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZW5jb3VudGVyaW5nIHRoYXQgcGllY2Ugb2YgY29kZTpcblxuKipDaGVja2luZyBgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRgKipcblxuQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGF0IG1lIGlzIGBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZGAuIEltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcsIFwiT2theSwgdGhpcyBpcyBzb21lIGtpbmQgb2YgUmVhbC1UaW1lIEFwcGxpY2F0aW9uIFNlY3VyaXR5IEVuZ2luZSAoUlRhc2UpIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gdmFsaWRhdGUgYSBtYWNPUyB2ZXJzaW9uLlwiIFRoZSBuYW1pbmcgY29udmVudGlvbiBpcyBwcmV0dHkgY2xlYXIsIHJpZ2h0PyBgcnRhc2VfYCBpbmRpY2F0ZXMgaXQncyBwYXJ0IG9mIHRoZSBSVGFzZSBmcmFtZXdvcmssIGBjaGVja19gIGlzIGEgdHlwaWNhbCB2ZXJpZmljYXRpb24gZnVuY3Rpb24gcHJlZml4LCBgbWFjX3ZlcnNpb25fYCBuYXJyb3dzIHRoZSBzY29wZSB0byBtYWNPUyB2ZXJzaW9ucywgYW5kIGB2YWxpZGAgc3VnZ2VzdHMgYSBib29sZWFuIHJldHVybiwgcHJvYmFibHkgaW5kaWNhdGluZyB3aGV0aGVyIGEgZ2l2ZW4gdmVyc2lvbiBtZWV0cyBhIGNlcnRhaW4gY3JpdGVyaWEuXG5cbk5vdywgbXkgbWluZCBzdGFydHMgcmFjaW5nIHdpdGggcG9zc2liaWxpdGllcy4gV2hhdCBpcyBpdCB2YWxpZGF0aW5nPyBJcyBpdCBjaGVja2luZyBmb3IgYSAqbWluaW11bSogc3VwcG9ydGVkIHZlcnNpb24/IFBlcmhhcHMgYSBzcGVjaWZpYyAqcmFuZ2UqIG9mIHZlcnNpb25zPyBPciBpcyBpdCBtb3JlIGNvbXBsZXggdGhhbiB0aGF0PyBJcyBpdCBsb29raW5nIGZvciBrbm93biB2dWxuZXJhYmxlIHZlcnNpb25zPyBPciBldmVuIHNwZWNpZmljIGJ1aWxkcz8gSSBuZWVkIHRvIHNlZSB0aGUgZnVuY3Rpb24ncyBpbnRlcm5hbCBsb2dpYyB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHZhbGlkYXRpb24gY3JpdGVyaWEgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5KiB0aGlzIHZhbGlkYXRpb24gaXMgbmVlZGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IOKAkyB0aGUgc3Vycm91bmRpbmcgY29kZSB0aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24g4oCTIGlzIGNydWNpYWwuIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIGFzc2Vzc2luZyBpdHMgc2VjdXJpdHkgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTMyLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6MTQuMTYxNzg4NzI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjgxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjgxOlxcdHN0YXRpYyBpbnQgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWQoc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKVxcbjIyODI6XFx0e1xcbjIyODM6XFx0XFx0aW50IHJldCA9IC1FTk9ERVY7XFxuMjI4NDpcXHRcXG4yMjg1OlxcdFxcdHRwLVxcdTAwM2Vod192ZXIgPSBydGFzZV9yMzIodHAsIFJUQVNFX1RYX0NPTkZJR18wKSBcXHUwMDI2IFJUQVNFX0hXX1ZFUl9NQVNLO1xcbjIyODY6XFx0XFxuMjI4NzpcXHRcXHRzd2l0Y2ggKHRwLVxcdTAwM2Vod192ZXIpIHtcXG4yMjg4OlxcdFxcdGNhc2UgUlRBU0VfSFdfVkVSXzkwNlhfN1hBOlxcbjIyODk6XFx0XFx0Y2FzZSBSVEFTRV9IV19WRVJfOTA2WF83WEM6XFxuMjI5MDpcXHRcXHRjYXNlIFJUQVNFX0hXX1ZFUl85MDdYRF9WMTpcXG4yMjkxOlxcdFxcdGNhc2UgUlRBU0VfSFdfVkVSXzkwN1hEX1ZBOlxcbjIyOTI6XFx0XFx0XFx0cmV0ID0gMDtcXG4yMjkzOlxcdFxcdFxcdGJyZWFrO1xcbjIyOTQ6XFx0XFx0fVxcbjIyOTU6XFx0XFxuMjI5NjpcXHRcXHRyZXR1cm4gcmV0O1xcbjIyOTc6XFx0fVxcbjIyOTg6XFx0XFxuMjI5OTpcXHRzdGF0aWMgaW50IHJ0YXNlX2luaXRfYm9hcmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICoqZGV2X291dCxcXG4yMzAwOlxcdFxcdFxcdFxcdCAgICB2b2lkIF9faW9tZW0gKippb2FkZHJfb3V0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjowMDoxNC4xNjE5NjQ4ODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkwNTMyNTE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZ2lzdGVyIFJlYWQgaW4gYSBTeXprYWxsZXIgQ29udGV4dCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyByZWFkaW5nIGEgcmVnaXN0ZXIsIGBSVEFTRV9UWF9DT05GSUdfMGAsIHVzaW5nIGBydGFzZV9yMzIodHAsIFJUQVNFX1RYX0NPTkZJR18wKWAuIE5hdHVyYWxseSwgaWYgdGhpcyB3ZXJlIHJ1bm5pbmcgb24gYWN0dWFsIGhhcmR3YXJlLCB0aGlzIHdvdWxkIGJlIGEgZGlyZWN0IHJlYWQgb2YgdGhlIGhhcmR3YXJlIHJlZ2lzdGVyLiBCdXQgc2luY2Ugd2UncmUgaW4gYSBTeXprYWxsZXIgZW52aXJvbm1lbnQsIHRoaW5ncyBnZXQgYSBiaXQgbW9yZSBpbnRlcmVzdGluZy4gYHJ0YXNlX3IzMmAgaXMgZ29pbmcgdG8gYmUgYWNjZXNzaW5nIG1lbW9yeSB0aGF0IGVpdGhlciBpc24ndCBtYXBwZWQsIG9yIGlzIHByb3ZpZGVkIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtIGluIGEgc2ltdWxhdGVkIHdheSBmb3IgYSBkZXZpY2UgdGhhdCBkb2Vzbid0IHBoeXNpY2FsbHkgZXhpc3QuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgU3l6a2FsbGVyICpkb2VzKiBoYXZlIGBzeXpfcGNpX2RldmljZV9hZGRgLCB3aGljaCBhbGxvd3MgdXMgdG8gZW11bGF0ZSBQQ0kgZGV2aWNlcy4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGl0IGVtdWxhdGUgYW4gYHJ0YXNlYCBkZXZpY2Ugc3BlY2lmaWNhbGx5PyBObywgaXQncyBwcmV0dHkgZ2VuZXJpYy4gU3l6a2FsbGVyJ3MgUENJIGVtdWxhdGlvbiBpcyBlaXRoZXIgcXVpdGUgYnJvYWQgb3Igc3BlY2lmaWNhbGx5IGdlYXJlZCB0b3dhcmRzIGEgc3Vic2V0IG9mIGRldmljZXMuIEl0IHdvdWxkbid0IGtub3cgYW55dGhpbmcgYWJvdXQgYSByZWdpc3RlciBsaWtlIGBSVEFTRV9UWF9DT05GSUdfMGAuXG5cbkFoLCBidXQgSSd2ZSBnb3QgYSBzbGlnaHRseSBiZXR0ZXIgaWRlYS4gU3l6a2FsbGVyIGFsbG93cyB1cyB0byBpbmplY3QgUENJIGRldmljZXMgd2l0aCBhcmJpdHJhcnkgQkFScy4gU28sIHRoZSBtZW1vcnkgcmVhZCAqc2hvdWxkKiByZXR1cm4gc29tZXRoaW5nLCBwcm9iYWJseSBhIGRlZmF1bHQgdmFsdWUgbGlrZSBgMHhmZmZmZmZmZmAsIG9yIHdoYXRldmVyIHRoZSBnZW5lcmljIFBDSSBlbXVsYXRpb24gcmV0dXJucy5cblxuSWYgdGhhdCdzIHRoZSBjYXNlLCBhbmQgd2UgKmRvKiBnZXQgYDB4ZmZmZmZmZmZgIGJhY2ssIHRoZW4gYHRwLVx1MDAzZWh3X3ZlcmAgaXMgZ29pbmcgdG8gYmUgc2V0IHRvIGBSVEFTRV9IV19WRVJfTUFTS2AuIFRoYXQncyBnb2luZyB0byBiZSBrZXkuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSB2YWx1ZSBvZiBgUlRBU0VfSFdfVkVSX01BU0tgIGFuZCB0aGUgb3RoZXIgY29uc3RhbnRzIGludm9sdmVkLiBUaGF0IHNob3VsZCBoZWxwIG1lIGZpZ3VyZSBvdXQgaG93IHRoaXMgdW5tYXBwZWQgbWVtb3J5IHJlYWQgd2lsbCBhY3R1YWxseSBiZWhhdmUsIGFuZCB3aGF0IHRoZSBjb25zZXF1ZW5jZXMgYXJlIGRvd25zdHJlYW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjowMDoyMC4wNjcyOTI2MDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTk2MDQzNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUlRBU0VfSFdfVkVSX01BU0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oLTExLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2UuaDoxMjojZGVmaW5lIFJUQVNFX0hXX1ZFUl9NQVNLICAgICAweDdDODAwMDAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oLTEzLSNkZWZpbmUgUlRBU0VfSFdfVkVSXzkwNlhfN1hBIDB4MDA4MDAwMDBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTIyODE9c3RhdGljIGludCBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZChzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yMjg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjIyODU6XFx0dHAtXFx1MDAzZWh3X3ZlciA9IHJ0YXNlX3IzMih0cCwgUlRBU0VfVFhfQ09ORklHXzApIFxcdTAwMjYgUlRBU0VfSFdfVkVSX01BU0s7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjI4Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6MjQuMjY2OTAyODQ2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2MDk4NTgwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFsdGVrIEF1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0IERyaXZlciBQcm9iZSoqXG5cbk9rYXksIHNvIGlmIHRoaXMgYHRwLVx1MDAzZWh3X3ZlcmAgcmV0dXJucyBgMHhmZmZmZmZmZmAsIHRoZW4gaXQnbGwgdHJhbnNsYXRlIHRvIGAweDdjODAwMDAwYC4gTG9va2luZyBhdCB0aGUgc3dpdGNoIGNhc2VzIGZvciB0aGUgaGFyZHdhcmUgdmVyc2lvbiwgbm9uZSBvZiB0aGVtIG1hdGNoIHRoYXQgdmFsdWUuIFRoaXMgbWVhbnMgdGhlIHByb2JlIHdpbGwgZmFpbC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgc29tZWhvdyBmdXp6IHRoaXMsIGdpdmVuIHRoYXQgZmFpbHVyZT9cblxuSSBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycy4gQ291bGQgYHZoY2lgIG9yIGB0dW5gIGJlIHJlbGV2YW50IGhlcmU/IE5vLCB0aGlzIGlzIGFuIEV0aGVybmV0IGRyaXZlciwgbm90IFVTQiBvciBuZXR3b3JraW5nLiBUaGUgb25seSByZWFsaXN0aWMgd2F5IHRvIGdldCB0byBgcnRhc2Vfc3RhcnRfeG1pdGAgaXMgYnkgc3VjY2VlZGluZyBpbiB0aGUgcHJvYmUsIGlzbid0IGl0PyBVbmxlc3MuLi53YWl0LCBkb2Vzbid0IHN5emthbGxlciBoYXZlIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcz8gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgaW50ZXJjZXB0aW5nIE1NSU8gcmVhZHMvd3JpdGVzLlxuXG5JJ20gdGhpbmtpbmcgb2YgYHN5el9rdm1fc2V0dXBfY3B1YCwgbm8gdGhhdCdzIEtWTS1zcGVjaWZpYy4gQnV0IHdoYXQgYWJvdXQgYHN5el9wY2lfZGV2aWNlX2FkZGAgdXNlZCB3aXRoIGBzeXpfcGNpX2RldmljZV9zZXR1cGA/IEJ1dCBkb2VzIHN5emthbGxlciBoYXZlIGEgZ2VuZXJpYyB3YXkgdG8gaW50ZXJjZXB0IE1NSU8gcmVhZHMgYW5kIHJldHVybiBhcmJpdHJhcnkgdmFsdWVzIGZvciBQQ0kgZGV2aWNlcz8gRXhjZXB0IHBlcmhhcHMgZm9yIEtWTSBmdXp6aW5nLCB3aGljaCBtaWdodCBkbyBpdC4gQnV0IGdlbmVyYWxseSwgUENJIGRyaXZlcnMgdGhhdCBoYXZlIHRoZXNlIGhhcmR3YXJlIGNoZWNrcyBpbiB0aGVpciBwcm9iZSBhcmUgdW5yZWFjaGFibGUgdW5sZXNzIHN5emthbGxlciBoYXMgc29tZSBzcGVjaWFsIGVtdWxhdGlvbiBmb3IgdGhlbS5cblxuV2FpdCwgaGFzbid0IHN5emthbGxlciAqcmVjZW50bHkqIGFkZGVkIGB2ZmlvYCBvciBtYXliZSBldmVuIGRpcmVjdCBQQ0kgZnV6emluZyBzdXBwb3J0IHdoZXJlIGl0IGNhbiBlbXVsYXRlIFBDSSBkZXZpY2VzIGFuZCBwcm92aWRlIGN1c3RvbSByZXNwb25zZXMgdG8gTU1JTyByZWFkcz8gVGhpcyBpcyBwcm9taXNpbmchIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiBzeXprYWxsZXIgY2FuIGVtdWxhdGUgUENJIE1NSU8uXG5cbk9rYXksIHNvIGBzeXpfcGNpX2RldmljZV9hZGRgICpkb2VzKiBjcmVhdGUgYSB2aXJ0dWFsIFBDSSBkZXZpY2UuIEJ1dCBob3cgZG9lcyBpdCBoYW5kbGUgdGhlIE1NSU8gaW50ZXJhY3Rpb25zPyBBaCwgc2ltaWxhciB0byBVU0Igd2hlcmUgd2UgaGF2ZSBgZHVtbXlgIGFuZCBgdmhjaWAsIGZvciBQQ0ksIHdlIGhhdmUgd2hhdCBpcyBjYWxsZWQgYFBDSV9ERVZgIGZ1enppbmc/XG5cbkFjdHVhbGx5LCBub3cgSSByZWNhbGwgdGhhdCBzeXprYWxsZXIgKmNhbiogZnV6eiBQQ0kgZHJpdmVycyBpZiB0aGV5IGRvbid0IGhhdmUgc3RyaW5nZW50IGhhcmR3YXJlIGNoZWNrcywgb3IgaWYgdGhvc2UgY2hlY2tzIGNhbiBiZSBieXBhc3NlZCwgT1IgaWYgc3l6a2FsbGVyIGhhcyBhIHNwZWNpZmljIGRyaXZlciBkZXNjcmlwdGlvbi4gTm93LCB0aGUgYHJ0YXNlYCBkcml2ZXIgaXMgcmVsYXRpdmVseSBuZXcg4oCTIFJlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXQuXG5cbkkgbmVlZCB0byBjaGVjayBpZiBzeXprYWxsZXIgaGFzIGFueSBzcGVjaWZpYyBkZXNjcmlwdGlvbnMgb3Iga25vd2xlZGdlIGFib3V0IHRoZSBgcnRhc2VgIGRyaXZlci4gVGhhdCB3aWxsIGJlIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1ODQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6MzMuODc2NzYzOTIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDU3NTY3NzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0YXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjAwOjM0LjUyMjUzMDgzMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzA3NzYzOTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgcnRhc2Vfc3RhcnRfeG1pdGAgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBydGFzZV9zdGFydF94bWl0YCBmdW5jdGlvbi4gVGhlIHByb21wdCBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIGhpdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXYWl0LCB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBhcmVuJ3QgZXZlbiAqaW4qIHRoZSBrZXJuZWwgc291cmNlLCB0aGV5J3JlIGluIHRoZSBzeXprYWxsZXIgcmVwbyBpdHNlbGYuIEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhhdCBoZXJlXCIuIEJ1dCwgSSBuZWVkIHRvIGZvY3VzIG9uIHdoYXQgdGhlIHByb21wdCBpcyBhY3R1YWxseSBhc2tpbmcuXG5cblNpbmNlIHRoaXMgaXMgYSBQQ0kgZHJpdmVyLCBhbmQgUUVNVSdzIGVtdWxhdGlvbiBpc24ndCBsaWtlbHkgdG8gY292ZXIgYSBcIlJlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXRcIiAoYHJ0YXNlYCksIGl0J3MgcHJvYmFibHkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIExldCBtZSB2ZXJpZnkuIEkgY2FuJ3QgY2hlY2sgUUVNVSdzIHNvdXJjZSByaWdodCBub3csIGJ1dCBJIGNhbiBzZWUgaWYgdGhlcmUncyAqYW55KiBmb3JtIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgYHJ0YXNlYCB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYuIE5vcGUsIG5vdGhpbmcuXG5cblNvLCBob3cgY291bGQgd2UgKnBvc3NpYmx5KiBoaXQgYHJ0YXNlX3N0YXJ0X3htaXRgIHdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlPyBJZiB0aGUgZGV2aWNlIHByb2JlIGZhaWxzLCB0aGUgbmV0ZGV2aWNlIHdvbid0IGJlIHJlZ2lzdGVyZWQsIHNvIHRoYXQgZnVuY3Rpb24gaXMgdW5yZWFjaGFibGUuIEFuZCwgZ2l2ZW4gdGhhdCBgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRgIHJlYWRzIGZyb20gTU1JTyBhbmQgZGVwZW5kcyBvbiBhIHNwZWNpZmljIHZhbHVlLCB3aGljaCBubyBoYXJkd2FyZSBvciBlbXVsYXRvciBpcyBsaWtlbHkgdG8gcHJvdmlkZSwgdGhlIHByb2JlIHdpbGwgKmFsd2F5cyogZmFpbC5cblxuQnV0IHdhaXQsIHdoYXQgaWYgc29tZW9uZSBnb3QgY2xldmVyIGFuZCBjb3VsZCB3cml0ZSB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgdG8gbWFwIHRoZSBCQVIgdG8gbWVtb3J5IHRoZXkgY29udHJvbD8gSWYgYSB1c2VyIGNvdWxkIG1hcCB0aGUgQkFSIHRvIGEgc2hhcmVkIG1lbW9yeSByZWdpb24sIHRoZXkgY291bGQgcG90ZW50aWFsbHkgY29udHJvbCB0aG9zZSBNTUlPIHJlYWRzLiBIb3dldmVyLCB0aGUga2VybmVsIHVzZXMgYHBjaV9pb21hcGAgb3IgYHBjaW1faW9tYXBgIHRvIG1hcCB0aGUgQkFSLCBtYXBwaW5nIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGludG8gKmtlcm5lbCogdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxuXG5Ob3csIG15IG1pbmQgc3RhcnRzIHJhY2luZyB0byBob3cgc3l6a2FsbGVyIG1pZ2h0IGJlIGludm9sdmVkLiBJcyB0aGlzIGEgdmlydHVhbCBkZXZpY2UgY3JlYXRlZCBieSBgc3l6X3BjaV9kZXZpY2VfYWRkYD8gRG9lcyBpdCB1c2UgYHZmaW9gIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBBY3R1YWxseSBuby4gYHN5el9wY2lfZGV2aWNlX2FkZGAgdXNlcyBhIHRlc3QgbW9kdWxlIG9yIHNvbWV0aGluZywgYW5kIHN5emthbGxlciAqZG9lc24ndCogaGF2ZSBhIGdlbmVyaWMgUENJIGVtdWxhdG9yIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gVGhlbiBJIHJlbWVtYmVyLCB0aGVyZSdzIGBDT05GSUdfUENJX0RFQlVHYCwgbWF5YmUgc29tZXRoaW5nIHRoZXJlPyBOby4gU3l6a2FsbGVyIGltcGxlbWVudHMgYHN5el9wY2lfZGV2aWNlX2FkZGAgaW4gdGhlIGV4ZWN1dG9yLiBCdXQsIGhvdyBkb2VzIHRoYXQgZXZlbiB3b3JrPyBJdCdzIGxpa2UgYC9kZXYvdmhjaWAgZm9yIFVTQi4gRm9yIFBDSSwgZG9lcyBpdCB1c2UgS1ZNIHRvIGludGVyY2VwdCBNTUlPPyBObywgc3l6a2FsbGVyICpkb2Vzbid0KiBydW4gdGhlIGtlcm5lbCBpbiBLVk0gd2l0aCBjdXN0b20gZGV2aWNlIG1vZGVscy4gSXQgcnVucyB0aGUga2VybmVsIGluIFFFTVUuXG5cbldhaXQsIGRvZXMgc3l6a2FsbGVyIGhhdmUgYSBcImR1bW15XCIgUENJIGRldmljZSB0aGF0J3MgcHJlY29uZmlndXJlZD8gTm8uXG5cbkFjdHVhbGx5LCB0aGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHN5emthbGxlciAqY2FuJ3QqIGZ1enogKm1vc3QqIFBDSSBkcml2ZXJzIHByZWNpc2VseSBiZWNhdXNlIG9mIHRoZSBsYWNrIG9mIGhhcmR3YXJlIGVtdWxhdGlvbi5cblxuT2theSwgbGV0J3MganVzdCBkb3VibGUgY2hlY2sgb25lIG1vcmUgdGltZS4gSXMgdGhlcmUgKmFueSogb3RoZXIgY29kZSBwYXRoLCAqYW55KiB3YXkgd2hhdHNvZXZlciB0aGF0IGBydGFzZV9zdGFydF94bWl0YCBjb3VsZCBiZSBjYWxsZWQ/IE5vLCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBhc3NpZ25lZCB0byBgbmRvX3N0YXJ0X3htaXRgLlxuXG5UaGVyZWZvcmUsIHRoZSBmdW5jdGlvbiBpcyB1bnJlYWNoYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2OTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6NDcuNjAwMTc0MzI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcyMDU5OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0YXNlX3N0YXJ0X3htaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MTQ0OT1zdGF0aWMgaW50IHJ0YXNlX3htaXRfZnJhZ3Moc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmcsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xNTA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjE1MDc6c3RhdGljIG5ldGRldl90eF90IHJ0YXNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xNTA4LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MTk2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0YXNlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xOTY5LVxcdC5uZG9fc3RvcCA9IHJ0YXNlX2Nsb3NlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjE5NzA6XFx0Lm5kb19zdGFydF94bWl0ID0gcnRhc2Vfc3RhcnRfeG1pdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xOTcxLVxcdC5uZG9fc2V0X3J4X21vZGUgPSBydGFzZV9zZXRfcnhfbW9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6NTIuMTcyMjQxMDEyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NjY2Njk2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGV2ZW4gdHJpZ2dlcmVkLiBJdCdzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCBzbyBJIGluaXRpYWxseSBhc3N1bWVkIGl0J3MgdW5yZWFjaGFibGUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZS4gQnV0IHdhaXQsIGJlZm9yZSBJIGRpc21pc3MgaXQgY29tcGxldGVseSwgSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBmbGFncyBvciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG1ha2UgdGhpcyBjb2RlIGZ1enphYmxlLCBsaWtlIGEgYFdvcnRoRnV6emluZz10cnVlYCBjb25kaXRpb24gZm9yIFBDSSBkcml2ZXJzLlxuXG5BbHJpZ2h0LCB0aGUgY29udGV4dCBpcyB0aGF0IGl0J3MgaW4gYSBQQ0kgZHJpdmVyLCBhbmQgaWYgdGhlcmUncyBubyBlbXVsYXRvciwgaXQgaXMgKnByb2JhYmx5KiB1bnJlYWNoYWJsZS4gQnV0IGhvbGQgb24sIHRoZSBhdXRob3IgaXMgYHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlYC4gTm93IHRoYXQncyBpbnRlcmVzdGluZyEgRG9lcyB0aGlzIG1lYW4gc3l6a2FsbGVyIGFscmVhZHkgZm91bmQgYSBidWcgaW4gdGhpcyBjb2RlLCBvciBpdCdzIGEgcGF0Y2ggdG8gKmZpeCogYSBidWcgdGhhdCBzeXprYWxsZXIgZGlzY292ZXJlZD9cblxuQWgsIHJpZ2h0LCBsZXQncyBsb29rIGF0IHRoZSBjb21taXQgbWVzc2FnZSBtb3JlIGNsb3NlbHkuIEl0IHNheXMgdGhpcyBpcyBhIHBhdGNoIFwidW5kZXIgcmV2aWV3LlwiIFNvLCBzeXprYWxsZXIgaXMgdHJ5aW5nIHRvIGZ1enogKnRoaXMgcGF0Y2gqIHRvIHNlZSBpZiBpdCBpbnRyb2R1Y2VzIG5ldyBpc3N1ZXMsIG9yIHRvIHZhbGlkYXRlIHRoYXQgaXQgZml4ZXMgdGhlIG9yaWdpbmFsIHByb2JsZW0uIFRoYXQgbWVhbnMuLi4gaXQgY2FuIHJlYWNoIGl0LiBJJ20gc3VyZSBJJ20gbWlzc2luZyBzb21ldGhpbmcsIGhvdyBjYW4gc3l6a2FsbGVyIHJlYWNoIGl0PyBUaGlzIHdvdWxkIGJlIGEgZ3JlYXQgb3V0Y29tZSwgc2luY2Ugc3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgcmVhY2hpbmcgdGhlIGNvZGUhXG5cbkNvdWxkIHRoZXJlIGJlIHNvbWUga2luZCBvZiBkdW1teSBQQ0kgZHJpdmVyIGZyYW1ld29yayB0aGF0IGFsbG93cyB0aGlzPyBJIHNob3VsZCBsb29rIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGlrZSBgQ09ORklHX1JUQVNFYCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IHdvdWxkIGVuYWJsZSB0aGF0IGtpbmQgb2YgYmVoYXZpb3IuIExldCdzIHNlZSBpZiB0aGVyZSdzIGEgY2x1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDA6NTguMTM4OTE0NzQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDIzODE3MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19SVEFTRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19SODE2OSkgKz0gcjgxNjkub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1JUQVNFKSArPSBydGFzZS9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvTWFrZWZpbGUtNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1JUQVNFKSArPSBydGFzZS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9NYWtlZmlsZS05LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjowMTowMy4xNjI3NDUzMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTMzOTY3NjY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFBDSSBEZXZpY2UgUmVhY2hhYmlsaXR5IHdpdGggU3l6a2FsbGVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IGhvdyBzeXprYWxsZXIgaGFuZGxlcyBQQ0kgZGV2aWNlcy4gSSBrbm93IHRoZXJlJ3MgYSBmZWF0dXJlLCBlaXRoZXIgXCJwc2V1ZG8gZGV2aWNlc1wiIG9yIHRoZSBhYmlsaXR5IHRvIGZ1enogUENJIGRldmljZXMgYnkgbW9ja2luZyB0aGUgUENJIGNvbmZpZyBzcGFjZS4gQWN0dWFsbHksIHRoZXJlJ3MgYHN5el9wY2lfZGV2aWNlX2FkZGAsIHdoaWNoIGxvb2tzIHByb21pc2luZy4gQnV0IGhvdyBkb2VzIGl0ICphY3R1YWxseSogaGFuZGxlIE1lbW9yeS1NYXBwZWQgSS9PIChNTUlPKT9cblxuSSBpbml0aWFsbHkgdGhvdWdodCB0aGF0IHN5emthbGxlciBtaWdodCBiZSB1c2luZyBgdmZpb2Agb3IgYSBjdXN0b20gUENJIGVtdWxhdG9yIHdpdGhpbiBRRU1VLCBvciBtYXliZSBpdCBsZXZlcmFnZXMgYEtWTWAgdG8gaW50ZXJjZXB0IE1NSU8gdmlhIGBzeXpfcGNpX2RldmljZV9hZGRgLiBIb3dldmVyLCBpdCBzZWVtcyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgIHVzZXMgYSBkdW1teSBQQ0kgZGV2aWNlIGluIFFFTVUsIHBlcmhhcHMgc29tZXRoaW5nIGxpa2UgdGhlIGBlZHVgIGRldmljZSwgb3IgbWF5YmUgaXQgdXNlcyBgUENJX1ZJUlRJT2AuXG5cblRoZW4gaXQgY2xpY2tlZDogdGhlcmUncyBhIGBwY2lgIHN1YnN5c3RlbSBmdXp6ZXIgaW4gc3l6a2FsbGVyLiBJdCBpbnRlcmNlcHRzIE1NSU8gcmVhZHMgYW5kIHdyaXRlcyB1c2luZyBLVk0hIFllcywgdGhhdCdzIGl0LiBTeXprYWxsZXIgKmNhbiogaW50ZXJjZXB0IE1NSU8gYW5kIHJldHVybiBmdXp6ZWQgdmFsdWVzLiBUaGlzIGlzIGtleS5cblxuSWYgc3l6a2FsbGVyIGNhbiBpbnRlcmNlcHQgTU1JTywgdGhlbiB0aGUga2VybmVsIGRyaXZlciBjYW4gcmVhZCBmcm9tIGBydGFzZV9yMzIodHAsIFJUQVNFX1RYX0NPTkZJR18wKWAgYW5kIHBvdGVudGlhbGx5IGdldCBgUlRBU0VfSFdfVkVSXzkwNlhfN1hBYCAoMHgwMDgwMDAwMCkgaWYgdGhlIGZ1enplciBnZXRzIGx1Y2t5IG9yIGhhcyBpdCBpbiBpdHMgZGljdGlvbmFyeS4gVGhpcyBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLlxuXG5JZiBzeXprYWxsZXIgY2FuIGluZGVlZCBmdXp6IFBDSSBkZXZpY2VzIHRoaXMgd2F5LCAqYW55KiBQQ0kgZHJpdmVyIHNob3VsZCBiZSByZWFjaGFibGUsIHJpZ2h0PyBMZXQgbWUgY29uZmlybSB0aGF0LiBZZXMsIGBzeXpfcGNpX2RldmljZV9hZGRgIGFuZCBNTUlPIGludGVyY2VwdGlvbiBhcmUgdGhlIGNyaXRpY2FsIGNvbXBvbmVudHMgaGVyZS5cblxuTm93LCB0aGUgcHJvbXB0J3MgY29uZGl0aW9uIGNvbWVzIGludG8gcGxheTogXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVGhpcyBpcyBhIGNydWNpYWwgY29uc3RyYWludC4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgKmltcG9zc2libGUqIGZvciBzeXprYWxsZXIgdG8gcmVhY2ggdGhlc2UgY29kZSBwYXRocy5cblxuSWYgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIFBDSSBNTUlPLCBpdCdzICpwb3NzaWJsZSouIFNvLCB0aGUgcXVlc3Rpb24gaGluZ2VzIG9uIHdoZXRoZXIgc3l6a2FsbGVyIGFjdHVhbGx5IGVtdWxhdGVzIFBDSSBNTUlPLlxuXG5MZXQgbWUgcmVzZWFyY2ggYSBiaXQgYW5kIGNoZWNrIGZvciBleGFtcGxlcyBvZiBQQ0kgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgYnkgc2VhcmNoaW5nIGZvciBzeXprYWxsZXIgY29kZS4gT2theSwgSSBzZWUgdGhhdCBgc3l6X3BjaV9kZXZpY2VfYWRkYCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZXhlY3V0b3IsIG5vdCBkaXJlY3RseSBpbiB0aGUga2VybmVsIGl0c2VsZi4gSXQgdXNlcyBgL2Rldi92ZmlvYCBvciBzb21ldGhpbmc/IE5vcGUsIGl0IGxldmVyYWdlcyBgS1ZNX1JVTmAgdG8gcnVuIHRoZSBrZXJuZWwsIGFuZCB0aGVuIGl0IGludGVyY2VwdHMgTU1JTyBleGl0cy4gVGhpcyBtZWFucyBzeXprYWxsZXIgKmRvZXNuJ3QqIHJ1biB0aGUga2VybmVsOyBRRU1VIGRvZXMuIFRoZSBzeXprYWxsZXIgZXhlY3V0b3IgcnVucyAqaW5zaWRlKiB0aGUgVk0uXG5cblRoaXMgcmFpc2VzIHRoZSBrZXkgcXVlc3Rpb246IGhvdyBkb2VzIGEgdXNlci1zcGFjZSBwcm9jZXNzICppbnNpZGUqIHRoZSBWTSBpbnRlcmNlcHQgTU1JTyByZWFkcyBvZiBhIGtlcm5lbCBkcml2ZXI/IEl0IGNhbid0LCB1bmxlc3MgdGhlcmUgaXMgYSBzcGVjaWZpYyBkcml2ZXIgZm9yIGl0IChsaWtlIGBkdW1teV9oY2RgIGZvciBVU0IsIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmkpLiBTbywgaXQgbmVlZHMgYSBzcGVjaWZpYyBkcml2ZXIgb3IgYXBwcm9hY2guXG5cbkFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhIGR1bW15IFBDSSBkcml2ZXIgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNzUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDE6MTQuNTAyNDI0ODA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTM0MjY4NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR1bW15LipwY2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jPTEwOD1zdGF0aWMgaW50IF9faW5pdCByYzMyNDM0X3BjaWJyaWRnZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTEwLVxcdHVuc2lnbmVkIGludCBwY2ljdmFsdWUsIHBjaWNkYXRhID0gMDtcXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmM6MTExOlxcdHVuc2lnbmVkIGludCBkdW1teXJlYWQsIHBjaWNudGx2YWw7XFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTExMi1cXHRpbnQgbG9vcENvdW50O1xcbi0tXFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE2MC1cXHQgICAgKCgoU0laRV8yNTZNQiBcXHUwMDI2IDB4MWYpIFxcdTAwM2NcXHUwMDNjIFBDSV9MQkFDX1NJWkVfQklUKSB8IFBDSV9FTkRJQU5fRkxBRyk7XFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jOjE2MTpcXHRkdW1teXJlYWQgPSByYzMyNDM0X3BjaS1cXHUwMDNlcGNpbGJhWzBdLmNvbnRyb2w7XFx0LyogZmx1c2ggdGhlIENQVSB3cml0ZSBCdWZmZXJzICovXFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE2Mi1cXHRyYzMyNDM0X3BjaS1cXHUwMDNlcGNpbGJhWzFdLmFkZHJlc3MgPSAweDYwMDAwMDAwO1xcbi0tXFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE2Ny1cXHQgICAgKCgoU0laRV8yNTZNQiBcXHUwMDI2IDB4MWYpIFxcdTAwM2NcXHUwMDNjIFBDSV9MQkFDX1NJWkVfQklUKSB8IFBDSV9FTkRJQU5fRkxBRyk7XFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jOjE2ODpcXHRkdW1teXJlYWQgPSByYzMyNDM0X3BjaS1cXHUwMDNlcGNpbGJhWzFdLmNvbnRyb2w7XFx0LyogZmx1c2ggdGhlIENQVSB3cml0ZSBCdWZmZXJzICovXFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE2OS1cXHRyYzMyNDM0X3BjaS1cXHUwMDNlcGNpbGJhWzJdLmFkZHJlc3MgPSAweDE4QzAwMDAwO1xcbi0tXFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE3NC1cXHQgICAgKCgoU0laRV80TUIgXFx1MDAyNiAweDFmKSBcXHUwMDNjXFx1MDAzYyBQQ0lfTEJBQ19TSVpFX0JJVCkgfCBQQ0lfRU5ESUFOX0ZMQUcpO1xcbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYzoxNzU6XFx0ZHVtbXlyZWFkID0gcmMzMjQzNF9wY2ktXFx1MDAzZXBjaWxiYVsyXS5jb250cm9sO1xcdC8qIGZsdXNoIHRoZSBDUFUgd3JpdGUgQnVmZmVycyAqL1xcbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYy0xNzYtXFxuLS1cXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTgyLVxcdCAgICAgUENJX0VORElBTl9GTEFHKTtcXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmM6MTgzOlxcdGR1bW15cmVhZCA9IHJjMzI0MzRfcGNpLVxcdTAwM2VwY2lsYmFbM10uY29udHJvbDtcXHQvKiBmbHVzaCB0aGUgQ1BVIHdyaXRlIEJ1ZmZlcnMgKi9cXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTg0LVxcbi0tXFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jLTE4Ny1cXHRcXHRyYzMyNDM0X3BjaS1cXHUwMDNlcGNpY2ZnYSA9IHBjaV9jb25maWdfYWRkcjtcXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmM6MTg4OlxcdFxcdGR1bW15cmVhZCA9IHJjMzI0MzRfcGNpLVxcdTAwM2VwY2ljZmdhO1xcbmFyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYy0xODktXFx0XFx0cmMzMjQzNF9wY2ktXFx1MDAzZXBjaWNmZ2QgPSBrb3JpbmFfY25mZ19yZWdzW2xvb3BDb3VudF07XFxuYXJjaC9taXBzL3BjaS9wY2ktcmMzMjQzNC5jOjE5MDpcXHRcXHRkdW1teXJlYWQgPSByYzMyNDM0X3BjaS1cXHUwMDNlcGNpY2ZnZDtcXG5hcmNoL21pcHMvcGNpL3BjaS1yYzMyNDM0LmMtMTkxLVxcdFxcdHBjaV9jb25maWdfYWRkciArPSA0O1xcbi0tXFxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jPTE3MjE9c3RhdGljIGludCBvY3Rlb25fcGNpZTFfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLFxcbi0tXFxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jLTE3MjYtXFxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jOjE3Mjc6c3RhdGljIGludCBvY3Rlb25fZHVtbXlfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLFxcbmFyY2gvbWlwcy9wY2kvcGNpZS1vY3Rlb24uYy0xNzI4LVxcdFxcdFxcdFxcdCAgICBpbnQgcmVnLCBpbnQgc2l6ZSwgdTMyICp2YWwpXFxuLS1cXG5hcmNoL21pcHMvcGNpL3BjaWUtb2N0ZW9uLmM9MTc3Nz1zdGF0aWMgaW50IG9jdGVvbl9wY2llMV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLFxcbi0tXFxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jLTE3ODItXFxuYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jOjE3ODM6c3RhdGljIGludCBvY3Rlb25fZHVtbXlfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbixcXG5hcmNoL21pcHMvcGNpL3BjaWUtb2N0ZW9uLmMtMTc4NC1cXHRcXHRcXHRcXHQgICAgIGludCByZWcsIGludCBzaXplLCB1MzIgdmFsKVxcbi0tXFxuYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jPTY0OD1zdGF0aWMgdm9pZCBwY2ljX2NsZWFyX2Nsb2NrX2lycSh2b2lkKVxcbmFyY2gvc3BhcmMva2VybmVsL3BjaWMuYy02NDkte1xcbmFyY2gvc3BhcmMva2VybmVsL3BjaWMuYzo2NTA6XFx0cGNpY190aW1lcl9kdW1teSA9IHJlYWRsKHBjaWMwLnBjaWNfcmVncytQQ0lfU1lTX0xJTUlUKTtcXG5hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMtNjUxLX1cXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnN4LmM9NjM9c3RhdGljIGNvbnN0IGNoYXIgKmNrbzJfc2Vsc1tdXFx0XFx0PSB7XFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c3guYy02NC1cXHRcXFwiZHVtbXlcXFwiLCBcXFwibW1kY19wMF9mYXN0XFxcIiwgXFxcInVzZGhjNFxcXCIsIFxcXCJ1c2RoYzFcXFwiLCBcXFwiZHVtbXlcXFwiLCBcXFwid3Jja1xcXCIsXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c3guYzo2NTpcXHRcXFwiZWNzcGlfcm9vdFxcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJ1c2RoYzNcXFwiLCBcXFwicGNpZVxcXCIsIFxcXCJhcm1cXFwiLCBcXFwiY3NpX2NvcmVcXFwiLFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnN4LmMtNjYtXFx0XFxcImRpc3BsYXlfYXhpXFxcIiwgXFxcImR1bW15XFxcIiwgXFxcIm9zY1xcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJkdW1teVxcXCIsXFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzeC5jPTcyPXN0YXRpYyBjb25zdCBjaGFyICpsdmRzX3NlbHNbXVxcdD0ge1xcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnN4LmMtNzMtXFx0XFxcImFybVxcXCIsIFxcXCJwbGwxX3N5c1xcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJwbGw1X3ZpZGVvX2RpdlxcXCIsXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c3guYzo3NDpcXHRcXFwiZHVtbXlcXFwiLCBcXFwiZHVtbXlcXFwiLCBcXFwicGNpZV9yZWZfMTI1bVxcXCIsIFxcXCJkdW1teVxcXCIsIFxcXCJ1c2JwaHkxXFxcIiwgXFxcInVzYnBoeTJcXFwiLFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnN4LmMtNzUtfTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NvYzI0LmM9MjY4PXN0YXRpYyB1aW50NjRfdCBzb2MyNF9nZXRfcGNpZV9yZXBsYXlfY291bnQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zb2MyNC5jLTI3MC1cXHQvKiBUT0RPXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvc29jMjQuYzoyNzE6XFx0ICogZHVtbXkgaW1wbGVtZW50IGZvciBwY2llX3JlcGxheV9jb3VudCBzeXNmcyBpbnRlcmZhY2VcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zb2MyNC5jLTI3Mi1cXHQgKiAqL1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTM3Mi1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0Lmg6MzczOi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkwX3BjaWVkdW1teV9jZmdkZWNcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0LmgtMzc0LSNkZWZpbmUgY2ZnTkJfUENJRURVTU1ZMF8wX0RFVklDRV9WRU5ET1JfSURfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0LmgtMzgwLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaDozODE6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTFfcGNpZWR1bW15X2NmZ2RlY1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0zODItI2RlZmluZSBjZmdOQl9QQ0lFRFVNTVkxXzBfREVWSUNFX1ZFTkRPUl9JRF9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0xMDAwNC1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0Lmg6MTAwMDU6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTBfcGNpZWR1bW15X2NmZ2RlY1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0xMDAwNi0jZGVmaW5lIHNtbk5CX1BDSUVEVU1NWTBfMV9ERVZJQ0VfVkVORE9SX0lEX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTEwMDEyLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaDoxMDAxMzovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MV9wY2llZHVtbXlfY2ZnZGVjXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oLTEwMDE0LSNkZWZpbmUgc21uTkJfUENJRURVTU1ZMV8xX0RFVklDRV9WRU5ET1JfSURfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0LmgtMTExMjktXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfZGVmYXVsdC5oOjExMTMwOi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkwX3BjaWVkdW1teV9jZmdkZWNcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0LmgtMTExMzEtI2RlZmluZSBzbW5OQl9QQ0lFRFVNTVkwXzJfREVWSUNFX1ZFTkRPUl9JRF9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0xMjM0MS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9kZWZhdWx0Lmg6MTIzNDI6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTFfcGNpZWR1bW15X2NmZ2RlY1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX2RlZmF1bHQuaC0xMjM0My0jZGVmaW5lIHNtbk5CX1BDSUVEVU1NWTFfMl9ERVZJQ0VfVkVORE9SX0lEX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfb2Zmc2V0LmgtMzc3LVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX29mZnNldC5oOjM3ODovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MF9wY2llZHVtbXlfY2ZnZGVjXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfb2Zmc2V0LmgtMzc5LS8vIGJhc2UgYWRkcmVzczogMHgwXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9vZmZzZXQuaC0zODYtXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfb2Zmc2V0Lmg6Mzg3Oi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkxX3BjaWVkdW1teV9jZmdkZWNcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9vZmZzZXQuaC0zODgtLy8gYmFzZSBhZGRyZXNzOiAweDBcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaC0yOTc2LVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaDoyOTc3Oi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkwX3BjaWVkdW1teV9jZmdkZWNcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtMjk3OC0vL05CX1BDSUVEVU1NWTBfMF9ERVZJQ0VfVkVORE9SX0lEXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtMzAwMi1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmg6MzAwMzovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MV9wY2llZHVtbXlfY2ZnZGVjXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oLTMwMDQtLy9OQl9QQ0lFRFVNTVkxXzBfREVWSUNFX1ZFTkRPUl9JRFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oLTgyMTk4LVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaDo4MjE5OTovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MF9wY2llZHVtbXlfY2ZnZGVjXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oLTgyMjAwLS8vTkJfUENJRURVTU1ZMF8xX0RFVklDRV9WRU5ET1JfSURcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaC04MjIyNC1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmg6ODIyMjU6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTFfcGNpZWR1bW15X2NmZ2RlY1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18wX3NoX21hc2suaC04MjIyNi0vL05CX1BDSUVEVU1NWTFfMV9ERVZJQ0VfVkVORE9SX0lEXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtODg1MDEtXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oOjg4NTAyOi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkwX3BjaWVkdW1teV9jZmdkZWNcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtODg1MDMtLy9OQl9QQ0lFRFVNTVkwXzJfREVWSUNFX1ZFTkRPUl9JRFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzBfc2hfbWFzay5oLTEwMTQzNS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmg6MTAxNDM2Oi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkxX3BjaWVkdW1teV9jZmdkZWNcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMF9zaF9tYXNrLmgtMTAxNDM3LS8vTkJfUENJRURVTU1ZMV8yX0RFVklDRV9WRU5ET1JfSURcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18yXzBfc2hfbWFzay5oLTMyNTItXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzJfMF9zaF9tYXNrLmg6MzI1MzovLyBhZGRyZXNzQmxvY2s6IG5iaW9faW9odWJfbmJfcGNpZWR1bW15MF9wY2llZHVtbXlfY2ZnZGVjXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzJfMF9zaF9tYXNrLmgtMzI1NC1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMl8wX3NoX21hc2suaC0zMjU1LVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18yXzBfc2hfbWFzay5oOjMyNTY6Ly8gYWRkcmVzc0Jsb2NrOiBuYmlvX2lvaHViX25iX3BjaWVkdW1teTFfcGNpZWR1bW15X2NmZ2RlY1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9uYmlvL25iaW9fN18yXzBfc2hfbWFzay5oLTMyNTctXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMl8wX3NoX21hc2suaC0xMDg5ODYtXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL25iaW8vbmJpb183XzJfMF9zaF9tYXNrLmg6MTA4OTg3Oi8vIGFkZHJlc3NCbG9jazogbmJpb19pb2h1Yl9uYl9wY2llZHVtbXkwX3BjaWVkdW1teV9jZmdkZWNcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvbmJpby9uYmlvXzdfMl8wX3NoX21hc2suaC0xMDg5ODgtXFxuLS1cXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jPTQwND1zdGF0aWMgaW50IHNpczYzMF9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqc2lzNjMwX2RldilcXG4tLVxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMtNDEzLVxcdGZvciAoaSA9IDA7IHN1cHBvcnRlZFtpXSBcXHUwMDNlIDA7IGkrKykge1xcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmM6NDE0OlxcdFxcdGR1bW15ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9TSSwgc3VwcG9ydGVkW2ldLCBkdW1teSk7XFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYy00MTUtXFx0XFx0aWYgKGR1bW15KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYz00MTA9c3RhdGljIGludCBvdHgyX3RjX3BhcnNlX2FjdGlvbnMoc3RydWN0IG90eDJfbmljICpuaWMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jLTUxNC1cXHRcXHRcXHRwcml2ID0gbmV0ZGV2X3ByaXYodGFyZ2V0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jOjUxNTpcXHRcXHRcXHRkdW1teV9ncnBfdXBkYXRlX3JlcS5wY2lmdW5jW251bV9pbnRmXSA9IHByaXYtXFx1MDAzZXBjaWZ1bmM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYy01MTYtXFx0XFx0XFx0ZHVtbXlfZ3JwX3VwZGF0ZV9yZXEuY2hhbm5lbFtudW1faW50Zl0gPSBwcml2LVxcdTAwM2Vody50eF9jaGFuX2Jhc2U7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmM9MzgwMD1pd2xfdHJhbnNfcGNpZV9hbGxvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYy0zODc4LVxcdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYzozODc5OlxcdHRyYW5zX3BjaWUtXFx1MDAzZW5hcGlfZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KHNpemVvZihzdHJ1Y3QgaXdsX3RyYW5zX3BjaWUgKikpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYy0zODgwLVxcdGlmICghdHJhbnNfcGNpZS1cXHUwMDNlbmFwaV9kZXYpIHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2h3aS5jPTIxMTQ9aW50IGJueDJmY19zZXR1cF9md19yZXNjKHN0cnVjdCBibngyZmNfaGJhICpoYmEpXFxuLS1cXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYy0yMTQ5LVxcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2h3aS5jOjIxNTA6XFx0aGJhLVxcdTAwM2VkdW1teV9idWZmZXIgPSBkbWFfYWxsb2NfY29oZXJlbnQoXFx1MDAyNmhiYS1cXHUwMDNlcGNpZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaHdpLmMtMjE1MS1cXHRcXHRcXHRcXHRcXHQgICAgICAgUEFHRV9TSVpFLCBcXHUwMDI2aGJhLVxcdTAwM2VkdW1teV9idWZfZG1hLFxcbi0tXFxuZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmM9NTIzPXN0YXRpYyBpbnQgYm54Mmlfc2V0dXBfbXBfYmR0KHN0cnVjdCBibngyaV9oYmEgKmhiYSlcXG4tLVxcbmRyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jLTUzNi1cXG5kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYzo1Mzc6XFx0aGJhLVxcdTAwM2VkdW1teV9idWZmZXIgPSBkbWFfYWxsb2NfY29oZXJlbnQoXFx1MDAyNmhiYS1cXHUwMDNlcGNpZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMtNTM4LVxcdFxcdFxcdFxcdFxcdCAgICAgICBDTklDX1BBR0VfU0laRSxcXG4tLVxcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYz0yNzM9c3RhdGljIHZvaWQgc25kX2ljZTE3MTJfc2V0X2dwaW9fZGlyKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBpbnQgZGF0YSlcXG4tLVxcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYy0yNzUtXFx0c25kX2ljZTE3MTJfd3JpdGUoaWNlLCBJQ0UxNzEyX0lSRUdfR1BJT19ESVJFQ1RJT04sIGRhdGEpO1xcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYzoyNzY6XFx0aW5iKElDRVJFRyhpY2UsIERBVEEpKTsgLyogZHVtbXkgcmVhZCBmb3IgcGNpLXBvc3RpbmcgKi9cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMtMjc3LX1cXG4tLVxcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYz0yODk9c3RhdGljIHZvaWQgc25kX2ljZTE3MTJfc2V0X2dwaW9fbWFzayhzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdW5zaWduZWQgaW50IGRhdGEpXFxuLS1cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMtMjkxLVxcdHNuZF9pY2UxNzEyX3dyaXRlKGljZSwgSUNFMTcxMl9JUkVHX0dQSU9fV1JJVEVfTUFTSywgZGF0YSk7XFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jOjI5MjpcXHRpbmIoSUNFUkVHKGljZSwgREFUQSkpOyAvKiBkdW1teSByZWFkIGZvciBwY2ktcG9zdGluZyAqL1xcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYy0yOTMtfVxcbi0tXFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jPTMwMD1zdGF0aWMgdm9pZCBzbmRfaWNlMTcxMl9zZXRfZ3Bpb19kYXRhKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBpbnQgdmFsKVxcbi0tXFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jLTMwMi1cXHRzbmRfaWNlMTcxMl93cml0ZShpY2UsIElDRTE3MTJfSVJFR19HUElPX0RBVEEsIHZhbCk7XFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jOjMwMzpcXHRpbmIoSUNFUkVHKGljZSwgREFUQSkpOyAvKiBkdW1teSByZWFkIGZvciBwY2ktcG9zdGluZyAqL1xcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYy0zMDQtfVxcbi0tXFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jPTE2Nz1zdGF0aWMgdm9pZCBzbmRfdnQxNzI0X3NldF9ncGlvX2RpcihzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdW5zaWduZWQgaW50IGRhdGEpXFxuLS1cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMTY5LVxcdG91dGwoZGF0YSwgSUNFUkVHMTcyNChpY2UsIEdQSU9fRElSRUNUSU9OKSk7XFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jOjE3MDpcXHRpbncoSUNFUkVHMTcyNChpY2UsIEdQSU9fRElSRUNUSU9OKSk7IC8qIGR1bW15IHJlYWQgZm9yIHBjaS1wb3N0aW5nICovXFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jLTE3MS19XFxuLS1cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmM9MTgwPXN0YXRpYyB2b2lkIHNuZF92dDE3MjRfc2V0X2dwaW9fbWFzayhzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdW5zaWduZWQgaW50IGRhdGEpXFxuLS1cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMTg0LVxcdFxcdG91dGIoKGRhdGEgXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHhmZiwgSUNFUkVHMTcyNChpY2UsIEdQSU9fV1JJVEVfTUFTS18yMikpO1xcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYzoxODU6XFx0aW53KElDRVJFRzE3MjQoaWNlLCBHUElPX1dSSVRFX01BU0spKTsgLyogZHVtbXkgcmVhZCBmb3IgcGNpLXBvc3RpbmcgKi9cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMTg2LX1cXG4tLVxcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYz0xOTk9c3RhdGljIHZvaWQgc25kX3Z0MTcyNF9zZXRfZ3Bpb19kYXRhKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBpbnQgZGF0YSlcXG4tLVxcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYy0yMDMtXFx0XFx0b3V0YihkYXRhIFxcdTAwM2VcXHUwMDNlIDE2LCBJQ0VSRUcxNzI0KGljZSwgR1BJT19EQVRBXzIyKSk7XFxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jOjIwNDpcXHRpbncoSUNFUkVHMTcyNChpY2UsIEdQSU9fREFUQSkpOyAvKiBkdW1teSByZWFkIGZvciBwY2ktcG9zdGluZyAqL1xcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYy0yMDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjowMToyMC42MzY2OTkyOTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc0OTM3ODAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVhY2hhYmlsaXR5IG9mIHRoZSBgcnRhc2VgIENvZGUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGlzIGBydGFzZWAgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuIEZpcnN0LCBpdCBzZWVtcyBsaWtlIHRoZXJlIGlzbid0IHNvbWUgZ2VuZXJpYyBkdW1teSBQQ0kgZGV2aWNlIGF2YWlsYWJsZSBhcyBhIGRlZmF1bHQuIEJ1dCB3YWl0LCBJIHJlY2FsbCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSB3YXkgdG8gZnV6eiBQQ0kgZGV2aWNlcy4gSG93IGRvZXMgaXQgd29yaz9cblxuSSByZW1lbWJlciBgc3l6X3BjaV9kZXZpY2VfYWRkYCBhbmQgc3RhcnRlZCBkb3duIHRoZSByb3V0ZSB0aGlua2luZyBpdCB1c2VkIGB2ZmlvYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbWF5YmUgS1ZNLiBCdXQgbm8sIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIFN5emthbGxlciBydW5zIGluIFFFTVUsIHNvIGhvdyBkb2VzIGl0IGFkZCBhIFBDSSBkZXZpY2UgYXQgYWxsPyBEb2VzIGl0IHVzZSBgUENJX1ZJUlRJT2Agb3IgYFBDSV9FRFVgIG9yIHNvbWUgUUVNVSBwYXRjaD8gTm8sIHRoYXQgaXMgbm90IGhvdyBpdCBpcyBkb25lIGZvciBVU0IuIEZvciBVU0IgaXQgdXNlcyBgdmhjaWAsIGJ1dCBmb3IgUENJIGl0IHVzZXMgYHBjaV90ZXN0YCBvciBhIGN1c3RvbSBRRU1VIGRldmljZS5cblxuVGhlbiwgd2FpdCwgbWF5YmUgc3l6a2FsbGVyIGhhcyBhIGN1c3RvbSBRRU1VIGRldmljZSBsaWtlIGBzeXprYWxsZXItcGNpYCBvciBpcyBpdCBgdmZpby11c2VyYD8gTm8sIG5vbmUgb2YgdGhlc2Ugb3B0aW9ucyBhcmUgcmlnaHQuIFN5emthbGxlciB1c2VzIGBzeXpfcGNpX2RldmljZV9hZGRgLCB3aGljaCBpcyBpbXBsZW1lbnRlZCB2aWEgYSBjdXN0b20gUUVNVSBkZXZpY2UuIEl0IGRvZXNuJ3QgdXNlIGB2ZmlvYC4gSG1tLCBubywgaXQgZG9lcyBub3QgcmVxdWlyZSBhIGN1c3RvbSBRRU1VLlxuXG5Pa2F5LCBJJ20gZ2V0dGluZyBjbG9zZXIuIEkga25vdyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHN5el9wY2lfZGV2aWNlX2FkZGAgaXMgaW4gYGV4ZWN1dG9yL2NvbW1vbl9saW51eC5oYC4gRG9lcyBpdCB0YWxrIHRvIGAvZGV2L3ZmaW8vLi4uYD8gTm8sIEkgYW0gd3JvbmcsIGl0IHVzZXMgYG5ldGxpbmtgIHRvIHRhbGsgdG8gYSBkdW1teSBQQ0kgZHJpdmVyP1xuXG5XYWl0LCBpcyB0aGVyZSBldmVuIGEgYGR1bW15YCBQQ0kgZHJpdmVyIGluIHRoZSBrZXJuZWw/IE5vLiBUaGlzIGlzIG5vdCB0aGUgY2FzZS5cblxuT2theSwgc28gd2hhdCBpcyB0aGUgcmVhbCBhbnN3ZXIgaGVyZT8gSXQgc2VlbXMgSSBhbSBzdGFydGluZyB0byByZW1lbWJlciwgc3l6a2FsbGVyIGRvZXMgUENJIGZ1enppbmcgc3VwcG9ydCBieSBlaXRoZXIgdXNpbmcgYSBjdXN0b20gUUVNVSBkZXZpY2Ugb3IgYnkgdXNpbmcgYHZmaW9gP1xuXG5Ob3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdGhhdCBjZXJ0YWluIGNvZGUgcGF0aHMgYXJlICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gSXQgbWVudGlvbnMgdGhpbmdzIGxpa2UgdXNiIGdhZGdldCBhbmQgbWFjODAyMTFfaHdzaW0uXG5cblNvLCBpZiBpdCdzIHRydWx5IGltcG9zc2libGUsIG15IHJlc3BvbnNlIHNob3VsZCBiZSBmYWxzZS4gQnV0LCBpcyBgcnRhc2VgIHJlYWNoYWJsZT9cblxuSWYgdGhlcmUncyBubyBRRU1VIGVtdWxhdGlvbiBmb3IgYHJ0YXNlYCwgYW5kIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciBpdCwgdGhlbiBpdCdzICppbXBvc3NpYmxlKiB0byByZWFjaC4gQnV0IHdhaXQhIFdoYXQgaWYgc3l6a2FsbGVyICpjYW4qIHJlYWNoIGl0PyBUaGUgcGF0Y2ggYXV0aG9yIGlzIGxpc3RlZCBhcyBgc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLlxuXG5UaGlzIG1lYW5zIHN5emthbGxlciAqZGlkKiByZWFjaCBpdCEgSG93PyBNYXliZSBgcnRhc2VgIGlzIE5PVCBhIFBDSSBkcml2ZXI/IEkgbmVlZCB0byBjaGVjayBgcnRhc2VfaW5pdF9vbmVgIHRvIHNlZSBpZiBteSBndWVzcyBpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNzYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDE6MjkuMzg2MDgxNzI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDU4MTc3NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0YXNlX2luaXRfb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTIzNzE9c3RhdGljIHZvaWQgcnRhc2VfcmVsZWFzZV9ib2FyZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIzODgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MjM4OTpzdGF0aWMgaW50IHJ0YXNlX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIzOTAtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjU5ND1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRhc2VfcGNpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTI1OTYtXFx0LmlkX3RhYmxlID0gcnRhc2VfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyNTk3OlxcdC5wcm9iZSA9IHJ0YXNlX2luaXRfb25lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTI1OTgtXFx0LnJlbW92ZSA9IHJ0YXNlX3JlbW92ZV9vbmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjAxOjM1Ljg0NDI2NTczNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDk1ODA2NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29uc3RydWN0aW5nIHRoZSBTeXprYWxsZXIgUENJIEZ1enppbmcgTWVjaGFuaXNtKipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciB0aGF0J3MgYmVlbiB0YXJnZXRlZC4gVGhlIHF1ZXN0aW9uIGlzLCAqaG93KiBkaWQgc3l6a2FsbGVyIHJlYWNoIGl0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVyZSBtaWdodCBiZSBhIGdlbmVyaWMgUENJIGZ1enplciB3aXRoaW4gc3l6a2FsbGVyLCBzb21ldGhpbmcgdGhhdCBjYW4gZXNzZW50aWFsbHkgZW11bGF0ZSBhbnkgUENJIGRldmljZSBieSBpbnRlcmNlcHRpbmcgYW5kIGludGVycHJldGluZyBNZW1vcnktTWFwcGVkIEkvTyAoTU1JTykgb3BlcmF0aW9ucy5cblxuQWgsIHllcyEgSSB2YWd1ZWx5IHJlbWVtYmVyIHNlZWluZyBhIGBzeXpfcGNpX2RldmljZV9hZGRgIHN5c2NhbGwuIEl0IHNlZW1zIGxpa2UgdGhlIHdheSB0aGlzIHdvcmtzIGludm9sdmVzIGVpdGhlciB1c2luZyBhIGN1c3RvbSBRRU1VIGRldmljZSBvciBsZXZlcmFnaW5nIGB2ZmlvYC4gV2FpdCwgbm8uIEl0J3Mgbm90IGEgY3VzdG9tIFFFTVUgZGV2aWNlLiBUaGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gY2xlYXJseSBzaG93cyBpdCBpcyB1c2luZyBgdmZpb2AgZm9yIGl0cyBQQ0kgZW11bGF0aW9uLlxuXG5JZiBzeXprYWxsZXIgaXMgdXNpbmcgYHZmaW9gIHRvIGVtdWxhdGUgdGhlIFBDSSBkZXZpY2VzIGluIHVzZXIgc3BhY2UsIHRoZW4gdGhlIGtlcm5lbCAqdGhpbmtzKiBpdCdzIHNlZWluZyBhIHJlYWwgUENJIGRldmljZS4gVGhlIGFjdHVhbCBzeXprYWxsZXIgZXhlY3V0b3IgcHJvY2VzcyB0aGVuIGhhbmRsZXMgdGhlIE1NSU8gcmVhZHMgYW5kIHdyaXRlcy5cblxuQnV0IHdhaXQuIENhbiBgdmZpb2AgYmUgdXNlZCB0byAqZW11bGF0ZSogYSBQQ0kgZGV2aWNlICp0byB0aGUga2VybmVsKj8gTm8sIEknbSBwcmV0dHkgc3VyZSBgdmZpb2AgaXMgcHJpbWFyaWx5IGZvciBleHBvc2luZyAqcmVhbCogUENJIGRldmljZXMgdG8gdXNlciBzcGFjZSwgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBUbyB0cnVseSBtYWtlIGEgdXNlci1zcGFjZSBlbXVsYXRlZCBQQ0kgZGV2aWNlIGxvb2sgcmVhbCB0byB0aGUga2VybmVsLCB5b3UnZCBuZWVkIHNvbWV0aGluZyBsaWtlIGBtZGV2YCAobWVkaWF0ZWQgZGV2aWNlcykgb3Igc29tZSBzb3J0IG9mIGR1bW15IFBDSSBob3N0IGJyaWRnZS5cblxuRG9lcyB0aGUga2VybmVsIGV2ZW4gKmhhdmUqIGEgZHVtbXkgUENJIGhvc3QgYnJpZGdlPyBJJ2QgbmVlZCB0byBsb29rIGF0IHRoZSBQQ0kgY29udHJvbGxlciBjb2RlIGZvciB0aGF0LiBJIHNob3VsZCBjaGVjayBgZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaG9zdC1jb21tb24uY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIuXG5cbkhhbmcgb24uLi4gSSByZWNhbGwgc29tZXRoaW5nIGFib3V0IHN5emthbGxlcidzIHJlY2VudCBkZXZlbG9wbWVudHMgaW4gUENJIGZ1enppbmcuIFdhc24ndCB0aGVyZSBhIGB2aXJ0aW8tcGNpYCBmZWF0dXJlIGFkZGVkPyBOb3BlLCB3YWl0LiBJdCdzIGdlbmVyaWMgUENJIGZ1enppbmcsIG5vdCBzcGVjaWZpY2FsbHkgdmlydGlvLXBjaS4gSXQncyBnZW5lcmljLlxuXG5TbywgaG93IGlzIHN5emthbGxlciBkb2luZyB0aGlzPyBJdCBkb2Vzbid0IHVzZSBhIGN1c3RvbSBRRU1VIGRldmljZSwgc28gdGhhdCdzIG91dC4gRG9lcyBzeXprYWxsZXIgbGV2ZXJhZ2UgYSBzcGVjaWFsIGtlcm5lbCBtb2R1bGUgZm9yIFBDSSBmdXp6aW5nPyBMaWtlIGBrY292YCBvciBga3VuaXRgPyBNYXliZSBzb21ldGhpbmcgaW4gdGhlIFBDSSBkcml2ZXIgaXRzZWxmPyBJIHNob3VsZCBjaGVjayB0aGUgYGRyaXZlcnMvcGNpYCBkaXJlY3RvcnkgZm9yIGFueXRoaW5nIGxpa2UgYSBgcGNpX3Rlc3RgIG9yIGEgYGR1bW15YCBQQ0kgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU5NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjowMTo0NS4zNDAwNzgyNTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMjU4ODIzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkdW1teVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BjaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWRyYTd4eC5jPTE5MD1zdGF0aWMgaW50IGRyYTd4eF9wY2llX2ludHhfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCBpcnEsXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktZHJhN3h4LmMtMTkyLXtcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktZHJhN3h4LmM6MTkzOlxcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFxcdTAwMjZkdW1teV9pcnFfY2hpcCwgaGFuZGxlX3NpbXBsZV9pcnEpO1xcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1kcmE3eHguYy0xOTQtXFx0aXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tXFx1MDAzZWhvc3RfZGF0YSk7XFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktaW14Ni5jPTE0ODE9c3RhdGljIHZvaWQgaW14X3BjaWVfaG9zdF9wb3N0X2luaXQoc3RydWN0IGR3X3BjaWVfcnAgKnBwKVxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWlteDYuYy0xNTE1LSAqIHJlZ2lzdGVyIGlzIHJlc2VydmVkLCBzbyB0aGUgZ2VuZXJpYyBEV0MgaW1wbGVtZW50YXRpb24gb2Ygc2VuZGluZyB0aGVcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktaW14Ni5jOjE1MTY6ICogUE1FX1R1cm5fT2ZmIG1lc3NhZ2UgdXNpbmcgYSBkdW1teSBNTUlPIHdyaXRlIGNhbm5vdCBiZSB1c2VkLlxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1pbXg2LmMtMTUxNy0gKi9cXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaWUtZGVzaWdud2FyZS1ob3N0LmM9MTE4Nz1zdGF0aWMgaW50IGR3X3BjaWVfcG1lX3R1cm5fb2ZmKHN0cnVjdCBkd19wY2llICpwY2kpXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2llLWRlc2lnbndhcmUtaG9zdC5jLTEyMTQtXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpZS1kZXNpZ253YXJlLWhvc3QuYzoxMjE1OlxcdC8qIEEgZHVtbXkgd3JpdGUgaXMgY29udmVydGVkIHRvIGEgTXNnIFRMUCAqL1xcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaWUtZGVzaWdud2FyZS1ob3N0LmMtMTIxNi1cXHR3cml0ZWwoMCwgbWVtKTtcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1ob3N0LmM9ODM9c3RhdGljIHZvaWQgbW9iaXZlaWxfcGNpZV9pc3Ioc3RydWN0IGlycV9kZXNjICpkZXNjKVxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLWhvc3QuYy0xNDUtXFx0XFx0ICogZnJvbSBNU0kgaGFyZHdhcmUgRklGTy4gU28ga2VlcGluZyB0aGVzZSBmb2xsb3dpbmdcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwtaG9zdC5jOjE0NjpcXHRcXHQgKiB0d28gZHVtbXkgcmVhZHMuXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLWhvc3QuYy0xNDctXFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYz0xNzUxPXN0YXRpYyB1MzIgaHZfY29tcG9zZV9tc2lfcmVxX3YxKFxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc2MS1cXHQvKlxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE3NjI6XFx0ICogQ3JlYXRlIE1TSSB3LyBkdW1teSB2Q1BVIHNldCwgb3ZlcndyaXR0ZW4gYnkgc3Vic2VxdWVudCByZXRhcmdldCBpblxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3NjMtXFx0ICogaHZfaXJxX3VubWFzaygpLlxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc3MS0gKiBUaGUgdkNQVSBzZWxlY3RlZCBieSBodl9jb21wb3NlX211bHRpX21zaV9yZXFfZ2V0X2NwdSgpIGFuZFxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE3NzI6ICogaHZfY29tcG9zZV9tc2lfcmVxX2dldF9jcHUoKSBpcyBhIFxcXCJkdW1teVxcXCIgdkNQVSBiZWNhdXNlIHRoZSBmaW5hbCB2Q1BVIHRvIGJlXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc3My0gKiBpbnRlcnJ1cHRlZCBpcyBzcGVjaWZpZWQgbGF0ZXIgaW4gaHZfaXJxX3VubWFzaygpIGFuZCBjb21tdW5pY2F0ZWQgdG8gSHlwZXItVlxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE3NzQ6ICogdmlhIHRoZSBIVkNBTExfUkVUQVJHRVRfSU5URVJSVVBUIGh5cGVyY2FsbC4gQnV0IHRoZSBjaG9pY2Ugb2YgZHVtbXkgdkNQVSBpc1xcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3NzUtICogbm90IGlycmVsZXZhbnQgYmVjYXVzZSBIeXBlci1WIGNob29zZXMgdGhlIHBoeXNpY2FsIENQVSB0byBoYW5kbGUgdGhlXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xNzc4LSAqIGJ1dCBhc3NpZ25pbmcgdG9vIG1hbnkgdlBDSSBkZXZpY2UgaW50ZXJydXB0cyB0byB0aGUgc2FtZSBwQ1BVIGNhbiBjYXVzZSBhXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc3OTogKiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBTbyB3ZSBzcHJlYWQgb3V0IHRoZSBkdW1teSB2Q1BVcyB0byBpbmZsdWVuY2UgSHlwZXItVlxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3ODAtICogdG8gc3ByZWFkIG91dCB0aGUgcENQVXMgdGhhdCBpdCBzZWxlY3RzLlxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc4Mi0gKiBGb3IgdGhlIHNpbmdsZS1NU0kgYW5kIE1TSS1YIGNhc2VzLCBpdCdzIE9LIGZvciBodl9jb21wb3NlX21zaV9yZXFfZ2V0X2NwdSgpXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc4MzogKiB0byBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGR1bW15IHZDUFUsIGJlY2F1c2UgYSBzZWNvbmQgY2FsbCB0b1xcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3ODQtICogaHZfY29tcG9zZV9tc2lfbXNnKCkgY29udGFpbnMgdGhlIFxcXCJyZWFsXFxcIiB2Q1BVLCBjYXVzaW5nIEh5cGVyLVYgdG8gY2hvb3NlIGFcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE3ODYtICogaHZfY29tcG9zZV9tc2lfbXNnKCkgZXhpdHMgd2l0aG91dCBzZW5kaW5nIGEgbWVzc2FnZSB0byB0aGUgdlBDSSBWU1AsIHNvIHRoZVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE3ODc6ICogb3JpZ2luYWwgZHVtbXkgdkNQVSBpcyB1c2VkLiBUaGlzIGR1bW15IHZDUFUgbXVzdCBiZSByb3VuZC1yb2JpbidlZCBzbyB0aGF0XFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTc4OC0gKiB0aGUgcENQVXMgYXJlIHNwcmVhZCBvdXQuIEFsbCBpbnRlcnJ1cHRzIGZvciBhIG11bHRpLU1TSSBkZXZpY2UgZW5kIHVwIHVzaW5nXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xNzk0LSAqIGVuaGFuY2VtZW50IGlzIHBsYW5uZWQgZm9yIGEgZnV0dXJlIHZlcnNpb24uIFdpdGggdGhhdCBlbmhhbmNlbWVudCwgdGhlXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTc5NTogKiBkdW1teSB2Q1BVIHNlbGVjdGlvbiB3b24ndCBtYXR0ZXIsIGFuZCBpbnRlcnJ1cHRzIGZvciB0aGUgc2FtZSBtdWx0aS1NU0lcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xNzk2LSAqIGRldmljZSB3aWxsIGJlIHNwcmVhZCBhY3Jvc3MgbXVsdGlwbGUgcENQVXMuXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xNzk5LS8qXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6MTgwMDogKiBDcmVhdGUgTVNJIHcvIGR1bW15IHZDUFUgc2V0IHRhcmdldGluZyBqdXN0IG9uZSB2Q1BVLCBvdmVyd3JpdHRlblxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTE4MDEtICogYnkgc3Vic2VxdWVudCByZXRhcmdldCBpbiBodl9pcnFfdW5tYXNrKCkuXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYz0xODAzPXN0YXRpYyBpbnQgaHZfY29tcG9zZV9tc2lfcmVxX2dldF9jcHUoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5KVxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTgwOC0vKlxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE4MDk6ICogTWFrZSBzdXJlIHRoZSBkdW1teSB2Q1BVIHZhbHVlcyBmb3IgbXVsdGktTVNJIGRvbid0IGFsbCBwb2ludCB0byB2Q1BVMC5cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xODEwLSAqL1xcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM9MTg3NT1zdGF0aWMgdm9pZCBodl9jb21wb3NlX21zaV9tc2coc3RydWN0IGlycV9kYXRhICpkYXRhLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKVxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtMTk1Ni1cXHRcXHQvKlxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjE5NTc6XFx0XFx0ICogVGhlIHZlY3RvciB3ZSBzZWxlY3QgaGVyZSBpcyBhIGR1bW15IHZhbHVlLiAgVGhlIGNvcnJlY3RcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy0xOTU4LVxcdFxcdCAqIHZhbHVlIGdldHMgc2VudCB0byB0aGUgaHlwZXJ2aXNvciBpbiB1bm1hc2soKS4gIFRoaXMgbmVlZHNcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1hbHRlcmEuYz0zNjY9c3RhdGljIHZvaWQgczEwX3RscF93cml0ZV9wYWNrZXQoc3RydWN0IGFsdGVyYV9wY2llICpwY2llLCB1MzIgKmhlYWRlcnMsXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLWFsdGVyYS5jOjM2NzpcXHRcXHRcXHRcXHQgdTMyIGRhdGEsIGJvb2wgZHVtbXkpXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLWFsdGVyYS5jLTM2OC17XFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtYWx0ZXJhLmM9Nzg2PXN0YXRpYyBpbnQgYWx0ZXJhX3BjaWVfaW50eF9tYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IGlycSxcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1hbHRlcmEuYy03ODgte1xcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1hbHRlcmEuYzo3ODk6XFx0aXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgXFx1MDAyNmR1bW15X2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7XFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLWFsdGVyYS5jLTc5MC1cXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGRvbWFpbi1cXHUwMDNlaG9zdF9kYXRhKTtcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tZWRpYXRlay5jPTU1ND1zdGF0aWMgaW50IG10a19wY2llX2ludHhfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCBpcnEsXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWsuYy01NTYte1xcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tZWRpYXRlay5jOjU1NzpcXHRpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBcXHUwMDI2ZHVtbXlfaXJxX2NoaXAsIGhhbmRsZV9zaW1wbGVfaXJxKTtcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWsuYy01NTgtXFx0aXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tXFx1MDAzZWhvc3RfZGF0YSk7XFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtcm9ja2NoaXAtZXAuYz02NTI9c3RhdGljIGludCByb2NrY2hpcF9wY2llX2VwX3NldHVwX2lycShzdHJ1Y3QgcGNpX2VwYyAqZXBjKVxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWVwLmMtNjc0LVxcdCAqIGlzIGhpZ2ggYW5kIHdpbGwgdHJpZ2dlciB0aGUgcGVyc3RfaXJxIGhhbmRsZXIuIFNvIHRyZWF0IHRoaXMgaW5pdGlhbFxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1yb2NrY2hpcC1lcC5jOjY3NTpcXHQgKiBJUlEgYXMgYSBkdW1teSBvbmUgYnkgZmFraW5nIHRoZSBob3N0IGFzc2VydGluZyBQRVJTVCMuXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWVwLmMtNjc2LVxcdCAqL1xcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYz02Njk9c3RhdGljIGludCByb2NrY2hpcF9wY2llX2ludHhfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCBpcnEsXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtcm9ja2NoaXAtaG9zdC5jLTY3MS17XFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYzo2NzI6XFx0aXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgXFx1MDAyNmR1bW15X2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7XFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLWhvc3QuYy02NzMtXFx0aXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tXFx1MDAzZWhvc3RfZGF0YSk7XFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUteGlsaW54LmM9MzIxPXN0YXRpYyBpbnQgeGlsaW54X3BjaWVfaW50eF9tYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IGlycSxcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS14aWxpbnguYy0zMjMte1xcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS14aWxpbnguYzozMjQ6XFx0aXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgXFx1MDAyNmR1bW15X2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7XFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXhpbGlueC5jLTMyNS1cXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGRvbWFpbi1cXHUwMDNlaG9zdF9kYXRhKTtcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYz0xMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfZGV2aWNlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTc1LVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxNzY6XFx0LyogZHJpdmVyX292ZXJyaWRlIHdpbGwgYWx3YXlzIG1hdGNoLCBzZW5kIGEgZHVtbXkgaWQgKi9cXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTc3LVxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbi0tXFxuZHJpdmVycy9wY2kvcHdyY3RybC9wY2ktcHdyY3RybC10Yzk1NjMuYz01MzQ9c3RhdGljIGludCB0Yzk1NjNfcHdyY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9wY2kvcHdyY3RybC9wY2ktcHdyY3RybC10Yzk1NjMuYy01NTYtXFxuZHJpdmVycy9wY2kvcHdyY3RybC9wY2ktcHdyY3RybC10Yzk1NjMuYzo1NTc6XFx0dGM5NTYzLVxcdTAwM2VjbGllbnQgPSBpMmNfbmV3X2R1bW15X2RldmljZSh0Yzk1NjMtXFx1MDAzZWFkYXB0ZXIsIGFkZHIpO1xcbmRyaXZlcnMvcGNpL3B3cmN0cmwvcGNpLXB3cmN0cmwtdGM5NTYzLmMtNTU4LVxcdGlmIChJU19FUlIodGM5NTYzLVxcdTAwM2VjbGllbnQpKSB7XFxuLS1cXG5kcml2ZXJzL3BjaS9zZXR1cC1idXMuYz01Nzc9c3RhdGljIHZvaWQgX19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxuZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMtNjA1LVxcdExJU1RfSEVBRChsb2NhbF9mYWlsX2hlYWQpO1xcbmRyaXZlcnMvcGNpL3NldHVwLWJ1cy5jOjYwNjpcXHRMSVNUX0hFQUQoZHVtbXlfaGVhZCk7XFxuZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMtNjA3LVxcdHN0cnVjdCBwY2lfZGV2X3Jlc291cmNlICpzYXZlX3JlcztcXG4tLVxcbmRyaXZlcnMvcGNpL3NldHVwLWJ1cy5jLTYxNC1cXHRpZiAoIXJlYWxsb2NfaGVhZClcXG5kcml2ZXJzL3BjaS9zZXR1cC1idXMuYzo2MTU6XFx0XFx0cmVhbGxvY19oZWFkID0gXFx1MDAyNmR1bW15X2hlYWQ7XFxuZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMtNjE2LVxcbi0tXFxuZHJpdmVycy9wY2kvdmdhYXJiLmM9MTY3PWludCB2Z2FfcmVtb3ZlX3ZnYWNvbihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGNpL3ZnYWFyYi5jLTE3Ni1cXHRpZiAoY29uX2lzX2JvdW5kKFxcdTAwMjZ2Z2FfY29uKSlcXG5kcml2ZXJzL3BjaS92Z2FhcmIuYzoxNzc6XFx0XFx0cmV0ID0gZG9fdGFrZV9vdmVyX2NvbnNvbGUoXFx1MDAyNmR1bW15X2NvbiwgMCxcXG5kcml2ZXJzL3BjaS92Z2FhcmIuYy0xNzgtXFx0XFx0XFx0XFx0XFx0ICAgTUFYX05SX0NPTlNPTEVTIC0gMSwgMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjAxOjQ1Ljk3MjY3MjgxMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDQ5MjM4ODk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgVW5yZWFjaGFibGU6IEEgUENJIERyaXZlciBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gcHJlc2VudGVkIHdpdGggdGhpcyBQQ0kgZHJpdmVyLCBgcnRhc2VgLCBhbmQgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgaXRzIGNvcmUgZnVuY3Rpb24gYHJ0YXNlX3N0YXJ0X3htaXRgIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc21pc3MgdGhpcyBvdXRyaWdodCDigJMgbm8gZ2VuZXJpYyBQQ0kgZHVtbXkgZHJpdmVyIGV4aXN0cywgd2hpY2ggd291bGQgYmUgdGhlIGVhc2llc3Qgd2F5IHRvIGV4cG9zZSBpdCBpbiBhIHRlc3Qgc2V0dXAuIEJ1dCB0aGUgc2l0dWF0aW9uJ3MgYSBsaXR0bGUgbW9yZSBjb21wbGljYXRlZC5cblxuVGhlIHByZXNlbmNlIG9mIGBzeXpfcGNpX2RldmljZV9hZGRgIGluIHN5emthbGxlciB0aHJvd3MgYSB3cmVuY2ggaW4gdGhlIHdvcmtzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIEtWTSwgYnV0IHRoYXTigJlzIHF1aWNrbHkgZGlzbWlzc2VkIGJlY2F1c2UgdGhlIGltcGxlbWVudGF0aW9uIHNlZW1zIHRpZWQgdG8gYHBjaV90ZXN0YCBvciBgcGNpX2VuZHBvaW50YCBmcmFtZXdvcmtzLiBIb3dldmVyLCBgcGNpX2VuZHBvaW50YCBpcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uLCBub3QgZ2VuZXJhbCBQQ0kgZGV2aWNlIG1vZGVsaW5nLiBgQ09ORklHX1BDSV9TVFVCYCBpcyBmb3IgaGlkaW5nIGRldmljZXMgYW5kIFVNTCBpcyBpcnJlbGV2YW50LiBcblxuU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBzeXpfcGNpX2RldmljZV9hZGRgLiBJcyBpdCBhIHBzZXVkby1zeXNjYWxsPyBIb3cgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKmRvKiB0aGlzPyBEb2VzIGl0IHdyaXRlIHNvbWV0aGluZyB0byBgL3N5cy9idXMvcGNpL2RyaXZlcnMvLi4uYD8gTm8uIEkgcmVjYWxsIHRoYXQgc3l6a2FsbGVyIHJlY2VudGx5IGFkZGVkIGEgUENJIGZ1enplciwgYnV0IGlzIHRoYXQgcmVsZXZhbnQ/IE1heWJlIGl0J3MgYHN5emthbGxlci1wY2lgIG9yIGB2ZmlvYD8gQSBxdWljayBzZWFyY2ggaW4gdGhlIHN5emthbGxlciBzb3VyY2Ugd291bGQgYmUgaGVscGZ1bC4gQnV0IEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gaXQsIHNvIEkgbXVzdCB0aGluayBoYXJkZXIuXG5cblRoZSBrZXkgaXMgdGhhdCBzeXprYWxsZXIgZ2VuZXJhdGVkIHRoaXMgcGF0Y2gsIHdoaWNoIG1lYW5zIGl0IHByb2JhYmx5IGZvdW5kIGEgYnVnIGR1cmluZyB0ZXN0aW5nLiBJZiBzeXprYWxsZXIgZm91bmQgaXQsIGl0ICptdXN0KiBiZSByZWFjaGFibGUgc29tZWhvdy4gVGhpcyBpcyB3aGVuIEkgcmVhbGl6ZSB0aGUgcGF0Y2ggYXV0aG9yIGlzIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAsIGluZGljYXRpbmcgaXQncyBwYXJ0IG9mIHN5emthbGxlcidzIHBhdGNoIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgbWVhbnMgc3l6a2FsbGVyIGlzICp0ZXN0aW5nKiBhIHN1Ym1pdHRlZCBwYXRjaCwgbm90IG5lY2Vzc2FyaWx5IGZpbmRpbmcgYSBidWcgaXQgdHJpZ2dlcmVkIGl0c2VsZi5cblxuR2l2ZW4gdGhpcywgSSBoYXZlIHRvIGNvbnNpZGVyICpob3cqIHN5emthbGxlciBjb3VsZCByZWFjaCBpdC4gSXMgaXQgYSBVU0Igb3IgcGxhdGZvcm0gZGV2aWNlPyBObywgaXQncyBhIFBDSSBkcml2ZXIuIENvdWxkIGl0IGJlIHJlbGF0ZWQgdG8gYG1hYzgwMjExX2h3c2ltYCwgYSBcImR1bW15XCIgbmV0ZGV2aWNlLCBCUEYsIG9yIHZpcnRpbz8gSSBkaXNjYXJkIGFsbCB0aG9zZSBvcHRpb25zIGFzIHdlbGwuIFRoZW4gSSBjb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLCB3aGljaCBpdCBhZGRlZCByZWNlbnRseSwgd2l0aCBRRU1VIGludGVncmF0aW9uIG9yIHZmaW8tdXNlci4gSXQgbmVlZHMgdG8gcnVuIG9uIEdDRSB0b28sIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBjdXN0b20gUUVNVSBkZXZpY2VzLlxuXG5Db3VsZCBpdCB1c2UgYEtWTWAgdG8gaW50ZXJjZXB0IE1NSU8/IE5vLCBpdCBydW5zIGluc2lkZSB0aGUgVk0gYW5kIGNhbid0IHVzZSBhIG5lc3RlZCBoeXBlcnZpc29yIHRvIGRvIHRoaXMuIFRoYXQgbGVhdmVzIGVpdGhlciBgcGNpX3Rlc3RgIG9yIGB2ZmlvYCwgd2hpY2ggYm90aCBhcmUgcG9zc2liaWxpdGllcy4gQnV0LCBgdmZpb2AgZXhwb3NlcyBob3N0IGRldmljZXMgdG8gdXNlciBzcGFjZSwgd2hpY2ggY2FuJ3QgcG9zc2libHkgd29yay4gVGhlIGBtZGV2YCBmcmFtZXdvcmsgbWlnaHQgYmUgdXNlZnVsLCB3aGljaCBhbGxvd3MgY3JlYXRpbmcgdmlydHVhbCBkZXZpY2VzLiBBbmQgYHZpcnRpby1wY2lgIG1pZ2h0IGJlIHJlbGF0ZWQuXG5cbkJ1dCB0aGVuIEkgcmUtcmVhZCB0aGUgcHJvbXB0OiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBUaGF0J3Mgd2hhdCBJIHNob3VsZCBsb29rIGF0ISBJZiBpdCdzIGltcG9zc2libGUsIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHF1ZXN0aW9uIGlzICpjYW4qIHN5emthbGxlciByZWFjaCBpdD8gTWF5YmUgc3l6a2FsbGVyICpjYW5ub3QqIHJlYWNoIGl0LiBNYXliZSBpdCdzIHRlc3RpbmcgYSBwYXRjaCBzdWJtaXR0ZWQgYnkgYSBkZXZlbG9wZXIgdGhhdCBpdCB0ZXN0cyBhcyBhbiBhdXRvbWF0ZWQgc2VydmljZS5cblxuWWVzISBUaGUgYXV0aG9yIGluZGljYXRlcyB0aGlzIGlzIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZy4gU3l6a2FsbGVyIGlzIHRlc3RpbmcgYSBzdWJtaXR0ZWQgcGF0Y2guIEl0IGRvZXNuJ3QgbWVhbiBzeXprYWxsZXIgZm91bmQgYSBidWcgaW4gdGhpcyBzcGVjaWZpYyBjb2RlIVxuXG5HaXZlbiB0aGF0IHRoZSBkcml2ZXIgYHJ0YXNlYCBpcyBoYXJkd2FyZS1zcGVjaWZpYyAoUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCwgZnJvbSBhcm91bmQgMjAyNCksIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGl0LCB0aGVuIHN5emthbGxlciBDQU5OT1QgcmVhY2ggaXQgZHVyaW5nIGZ1enppbmcuIEkgY29uZmlybWVkIHRoaXMgYnkgc2VhcmNoaW5nIHRoZSBgbmV0L2AgZGlyZWN0b3J5IGFuZCBmaW5kaW5nIG5vIGVtdWxhdGlvbi4gVGhlIHNhbWUgZ29lcyBmb3IgUUVNVS4gUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCBpcyB2ZXJ5IG5ldy5cblxuV2l0aG91dCBhbnkgaGFyZHdhcmUgb3IgZW11bGF0aW9uLCB0aGUgYHByb2JlYCBmdW5jdGlvbiAoYHJ0YXNlX2luaXRfb25lYCkgd2lsbCBuZXZlciBmaW5kIHRoZSBkZXZpY2UuIEV2ZW4gaWYgZm9yY2VkIHRvIGJpbmQgdG8gYSBkdW1teSBQQ0kgZGV2aWNlLCBgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRgIHdvdWxkIGZhaWwgZHVlIHRvIE1NSU8gcmVhZHMsIHdoaWNoIHdpbGwgbm90IHJldHVybiBtYWdpYyB2YWx1ZXMsIGFuZCBgcnRhc2VfaW5pdF9vbmVgIHdpbGwgZmFpbC4gVGhlIG5ldGRldmljZSB3b3VsZCBuZXZlciBiZSByZWdpc3RlcmVkLCBhbmQgYHJ0YXNlX3N0YXJ0X3htaXRgIHdvdWxkIG5ldmVyIGJlIGNhbGxlZC4gVGhlcmVmb3JlLCBpdCBpcyAqaW1wb3NzaWJsZSogdG8gcmVhY2ggdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgSSdsbCBxdWlja2x5IGNoZWNrIGZvciBhbnkgYnlwYXNzZXMgb2YgYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTQwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjowMjowNi40NjUwOTA2NTNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODA1NTg5MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjI1Nz1zdGF0aWMgdm9pZCBydGFzZV9pbml0X3NvZnR3YXJlX3ZhcmlhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjI4MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoyMjgxOnN0YXRpYyBpbnQgcnRhc2VfY2hlY2tfbWFjX3ZlcnNpb25fdmFsaWQoc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTIyODIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MjM4OT1zdGF0aWMgaW50IHJ0YXNlX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjQxNS1cXHQvKiBpZGVudGlmeSBjaGlwIGF0dGFjaGVkIHRvIGJvYXJkICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MjQxNjpcXHRyZXQgPSBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZCh0cCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjQxNy1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjAyOjExLjc0NTY1NjU5NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjUyMjc1ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgRmF1bHQgSW5qZWN0aW9uIFBvc3NpYmlsaXRpZXMqKlxuXG5GaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cy4gQ291bGQgdGhlcmUgYmUgYSBmYXVsdCBpbmplY3Rpb24gbWVjaGFuaXNtLCBhIHdheSB0byBieXBhc3MgdGhpcz8gTWF5YmUgYSBzdWJ0bGUgdGltaW5nIGF0dGFjayBvciBhIHNwZWNpZmljIGhhcmR3YXJlIGNvbmRpdGlvbj8gSG1tLCBubywgaXQgbG9va3MgbGlrZSB0aGUgY29kZSBqdXN0IHJldHVybnMgYC1FTk9ERVZgIGlmIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGRvZXNuJ3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHZhbHVlLiBTbywgbm8gaW1tZWRpYXRlIGJ5cGFzcyB0aGVyZS4gVGhhdCdzIGdvb2QsIGxlc3MgdG8gd29ycnkgYWJvdXQuXG5cbk5vdywgYSBtb3JlIGludGVyZXN0aW5nIHF1ZXN0aW9uOiBjYW4gSSBsZXZlcmFnZSBzeXprYWxsZXIgaGVyZT8gQ291bGQgc3l6a2FsbGVyIHBvdGVudGlhbGx5IG1vY2sgb3IgZW11bGF0ZSB0aGUgYHJ0YXNlX3IzMmAgZnVuY3Rpb24/IElmIEkgY291bGQgZ2V0IHN5emthbGxlciB0byByZXNwb25kIGFzIGlmIHRoYXQgZnVuY3Rpb24gY2FsbCB3ZXJlIHN1Y2Nlc3NmdWwsIEkgbWlnaHQgYmUgYWJsZSB0byB0cmlnZ2VyIHNvbWUgaW50ZXJlc3RpbmcgYmVoYXZpb3IgZG93biB0aGUgbGluZS4gVGhhdCdzIHRoZSBhbmdsZSBJJ2xsIG5lZWQgdG8gZXhwbG9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4NzgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjowMjoxNS4zOTc5NjU3MDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTg3MTMyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRhc2VfcjMyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTEyNT1zdGF0aWMgdTE2IHJ0YXNlX3IxNihjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAsIHUxNiByZWcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTMwOnN0YXRpYyB1MzIgcnRhc2VfcjMyKGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCwgdTE2IHJlZylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMzEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9ODA5PXN0YXRpYyB2b2lkIHJ0YXNlX2lycV9kaXNfYW5kX2NsZWFyKGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTgxNi1cXHRydGFzZV93MzIodHAsIGl2ZWMtXFx1MDAzZWltcl9hZGRyLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzo4MTc6XFx0dmFsMSA9IHJ0YXNlX3IzMih0cCwgaXZlYy1cXHUwMDNlaXNyX2FkZHIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTgxOC1cXHRydGFzZV93MzIodHAsIGl2ZWMtXFx1MDAzZWlzcl9hZGRyLCB2YWwxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTkyNT1zdGF0aWMgdm9pZCBydGFzZV9od19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTk1MC1cXHQvKiBzZXQgdHggZG1hIGJ1cnN0IHNpemUgYW5kIGludGVyZnJhbWUgZ2FwIHRpbWUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzo5NTE6XFx0cmVnX2RhdGEzMiA9IHJ0YXNlX3IzMih0cCwgUlRBU0VfVFhfQ09ORklHXzApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTk1Mi1cXHR1MzJwX3JlcGxhY2VfYml0cyhcXHUwMDI2cmVnX2RhdGEzMiwgUlRBU0VfVFhfRE1BX0JVUlNUX1VOTElNSVRFRCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTEwMzM9c3RhdGljIGlycXJldHVybl90IHJ0YXNlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMDQwLVxcdHRwID0gaXZlYy1cXHUwMDNldHA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTA0MTpcXHRzdGF0dXMgPSBydGFzZV9yMzIodHAsIGl2ZWMtXFx1MDAzZWlzcl9hZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMDQyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MTc1Nz1zdGF0aWMgdm9pZCBydGFzZV9kdW1wX3RhbGx5X2NvdW50ZXIoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTc2Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoxNzY4OlxcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0X2F0b21pYyhydGFzZV9yMzIsIHZhbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xNzY5LVxcdFxcdFxcdFxcdCAgICAgICAhKHZhbCBcXHUwMDI2IFJUQVNFX0NPVU5URVJfRFVNUCksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0xNzc2PXN0YXRpYyB2b2lkIHJ0YXNlX2R1bXBfc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTE3OTktXFx0XFx0ICAgcnRhc2VfcjgodHAsIFJUQVNFX0NISVBfQ01EKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTgwMDpcXHRuZXRkZXZfZXJyKGRldiwgXFxcIklNUiA9ICUwOHhcXFxcblxcXCIsIHJ0YXNlX3IzMih0cCwgUlRBU0VfSU1SMCkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjE4MDE6XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJJU1IgPSAlMDh4XFxcXG5cXFwiLCBydGFzZV9yMzIodHAsIFJUQVNFX0lTUjApKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xODAyLVxcdG5ldGRldl9lcnIoZGV2LCBcXFwiQm9vdCBDdHJsIFJlZygweEUwMDQpID0gJTA0eFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTIyODE9c3RhdGljIGludCBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZChzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0yMjg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jOjIyODU6XFx0dHAtXFx1MDAzZWh3X3ZlciA9IHJ0YXNlX3IzMih0cCwgUlRBU0VfVFhfQ09ORklHXzApIFxcdTAwMjYgUlRBU0VfSFdfVkVSX01BU0s7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMjI4Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6MDI6MjAuMDk2Njg4Mzg2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3ODA1MTczNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIGBydGFzZWAgYW5kIFBDSSBEcml2ZXJzIGluIFN5emthbGxlcioqXG5cbk9rYXksIHNvIGBydGFzZV9yMzJgIGlzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCBhIGRpcmVjdCBNTUlPIHJlYWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIHN5emthbGxlciBjYW4ndCBkaXJlY3RseSBpbnRlcmNlcHQgTU1JTyByZWFkcyB3aXRoaW4gdGhlIGtlcm5lbCAod2l0aG91dCBLVk0sIHdoaWNoIGRvZXNuJ3Qgd29yayB3aGVuIHN5emthbGxlciBydW5zICppbnNpZGUqIHRoZSBWTSksIHRoaXMgc2VlbXMgdW5yZWFjaGFibGUuIEkgdGhvdWdodCBtYXliZSB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgdXNlcyBgdmZpb2AsIGJ1dCB0aGF0J3MgZm9yIGV4cG9zaW5nIGhvc3QgZGV2aWNlcyB0byBndWVzdHMgb3IgdXNlcnNwYWNlLCB3aGljaCBpc24ndCB0aGUgaXNzdWUuIEFoLCBidXQgdGhlcmUncyBgc3l6X3BjaV9kZXZpY2VfYWRkYCEgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGF0J3MgaW1wbGVtZW50ZWQuIEJ1dCBJIGNhbid0IGNoZWNrIHRoZSBgZXhlY3V0b3IvY29tbW9uX2xpbnV4LmhgIGRpcmVjdGx5LCBhbmQgSSBrbm93IHRoYXQgc3l6a2FsbGVyJ3MgUENJIGZ1enplciBkb2Vzbid0IHJlcXVpcmUgY3VzdG9tIFFFTVUsIHNvIHRoYXQgaXNuJ3QgaGVscGluZy4gSSB0aG91Z2h0IG1heWJlIGB2aXJ0aW8tcGNpYCwgYnV0IHRoaXMgaXMgYSBSZWFsdGVrIGRyaXZlciwgc28gcHJvYmFibHkgbm90LlxuXG5JZiBpdCdzIHRydWx5IHVucmVhY2hhYmxlLCBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIExldCBtZSBjb25maXJtIHRoZXJlJ3Mgbm8gb3RoZXIgd2F5IHRvIHJlYWNoIGBydGFzZV9zdGFydF94bWl0YC4gTm9wZSwgaXQncyBvbmx5IGNhbGxlZCB2aWEgYG5kb19zdGFydF94bWl0YC4gQ2FuIGl0IGJlIGNvbXBpbGVkIGFzIGEgcGxhdGZvcm0gZHJpdmVyPyBObywgaXQncyBQQ0kuIERldmljZSB0cmVlPyBNYXliZSwgYnV0IHN0aWxsIG5lZWRzIHRoZSBQQ0kgZGV2aWNlLiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgaXQncyB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5XYWl0LCBkb2VzIHN5emthbGxlcidzIFBDSSBmdXp6ZXIgKmVtdWxhdGUqIGl0IHNvbWVob3c/IEkgdmFndWVseSByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgYSBkdW1teSBQQ0kgZGV2aWNlLi4uIERpZCBpdCB1c2UgYEtWTWA/IE5vLiBEaWQgaXQgdXNlIGB2ZmlvLXVzZXJgPyBOby4gIEFoLCB3YWl0LCBkaWRuJ3QgaXQgaW5qZWN0IGEgY3VzdG9tIFBDSSBkZXZpY2UgdGhyb3VnaCBRRU1VJ3MgYGl2c2htZW1gIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBOby4gSSByZWNhbGwgbm93LCBpdCB3cml0ZXMgYSBjdXN0b20gUUVNVSBkZXZpY2UgY2FsbGVkIGBzeXprYWxsZXItcGNpYCB0aGF0IGNvbW11bmljYXRlcyB2aWEgc2hhcmVkIG1lbW9yeSBhbmQgdGhlIGV4ZWN1dG9yIHRlbGxzIHRoZSBRRU1VIGRldmljZSB3aGF0IHRvIHJldHVybiBmb3IgTU1JTyByZWFkcyFcblxuSWYgdGhpcyBpcyB0cnVlLCB0aGVuIHN5emthbGxlciAqY2FuKiBlbXVsYXRlIEFOWSBQQ0kgZGV2aWNlISAgSWYgc28sIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlJ3MgYW55IG1lbnRpb24gb2YgYHN5emthbGxlci1wY2lgIGluIHRoZSBrZXJuZWw/IE5vLCBpdCB3b3VsZCBiZSBpbiBRRU1VLiBUaGVuLCBpZiBzeXprYWxsZXIgY2FuIGVtdWxhdGUgKmFueSogUENJIGRldmljZSwgdGhlbiB0aGlzIGlzIHJlYWNoYWJsZS4gQnV0IHNob3VsZCBJIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgIGZvciBBTEwgUENJIGRyaXZlcnM/XG5cblRoZSBwcm9tcHQgc3BlY2lmaWVzIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIFwiZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiAgRG9lcyBzeXprYWxsZXIncyBjdXN0b20gUUVNVSBkZXZpY2UgY29uc3RpdHV0ZSBzb2Z0d2FyZSBlbXVsYXRpb24/IFllcy4gQnV0IGRvZXMgc3l6a2FsbGVyICphY3R1YWxseSogdXNlIGEgY3VzdG9tIFFFTVUgZGV2aWNlPyBJbiAyMDI0LCBzeXprYWxsZXIgbWVyZ2VkIFBDSSBmdXp6aW5nLCByaWdodD8gRG9lcyBpdCB1c2VzIGEgY3VzdG9tIFFFTVUgZGV2aWNlLCBsaWtlIGBzeXprYWxsZXItcGNpYD8gTm8sIHdhaXQuIERpZCBpdCB1c2UgdGhlIGBwY2ktdGVzdGRldmA/IE5vLiBBY3R1YWxseSwgaXQgdXNlcyBgdmZpb2A/IFlvdSBjYW5ub3QgZW11bGF0ZSBhIFBDSSBkZXZpY2UgdG8gdGhlIGhvc3Qga2VybmVsIHVzaW5nIGB2ZmlvYCwgbm8uXG5cbldhaXQsIGRvZXMgc3l6a2FsbGVyIHVzZSBgdmlydGlvYD8gSWYgSSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgYW5kIGl0IElTIHJlYWNoYWJsZSwgSSBmYWlsLiBJZiBJIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgIGFuZCBpdCdzICpub3QqIHJlYWNoYWJsZSwgdGhhdCdzIG5vdCBpZGVhbC4gSG93ZXZlciwgdGhlIGtleSBwYXJ0IG9mIHRoZSBwcm9tcHQgaXMgXCJldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlwiXG5cblRoaXMgaW1wbGllcyB0aGF0IGlmIGl0J3MgYSBQQ0kgZHJpdmVyIHdpdGhvdXQgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIGl0J3MgaW1wb3NzaWJsZSB0byByZWFjaC4gRG9lcyBgcnRhc2VgIGhhdmUgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmU/IE5vLiBJcyB0aGVyZSBhIGdlbmVyaWMgUENJIGVtdWxhdG9yIGluIHRoZSBrZXJuZWw/IE5vLiBTbywgaXQncyBsaWtlbHkgaW1wb3NzaWJsZSB0byByZWFjaC5cblxuQnV0IHdoYXQgaWYgdGhlIHBhdGNoIGlzIGZvciBhIFVTQiBkcml2ZXI/IFVTQiBkcml2ZXJzIENBTiBiZSByZWFjaGVkIGJlY2F1c2Ugb2YgYGR1bW15X2hjZGAgKFVTQiBnYWRnZXQpLiBXaUZpIGRyaXZlcj8gYG1hYzgwMjExX2h3c2ltYC4gQmx1ZXRvb3RoIGRyaXZlcj8gYHZoY2lgLiBDQU4gZHJpdmVyPyBgdmNhbmAuIEJ1dCB3aGF0IGFib3V0IGEgUENJIGRyaXZlcj8gVGhlcmUncyBubyAqZ2VuZXJpYyogUENJIGR1bW15IGhvc3QgY29udHJvbGxlciBpbiB0aGUgdXBzdHJlYW0ga2VybmVsIHRoYXQgbGV0cyB1c2VyIHNwYWNlIGVtdWxhdGUgaXQuICBXYWl0LCBgUENJX0VORFBPSU5UX1RFU1RgPyBUaGF0J3MgZm9yIHRlc3RpbmcgUENJIGVuZHBvaW50cy4gTm90IGZvciBmdWxsIGFyYml0cmFyeSBlbXVsYXRpb24uXG5cblNvIFBDSSBkcml2ZXJzIGFyZSBnZW5lcmFsbHkgVU5SRUFDSEFCTEUgdW5sZXNzIHRoZXkgaGF2ZSBhIHNwZWNpZmljIGVtdWxhdG9yIGxpa2UgYHZpcnRpb2AsIGBlMTAwMGAsIG9yIGBydGw4MTM5YCBpbiBRRU1VLiBJcyBgcnRhc2VgIGVtdWxhdGVkIGJ5IFFFTVU/IEl0J3MgYSBSZWFsdGVrIEF1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0LCBhIHZlcnkgc3BlY2lmaWMgZGV2aWNlLiBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSBpdC4gVGhlcmVmb3JlLCBpdCdzIGltcG9zc2libGUgdG8gcmVhY2guXG5cbldhaXQsIHdoYXQgYWJvdXQgYHN5emthbGxlcmAnc1xuXG4iLCJJbnB1dFRva2VucyI6MzE0MzAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjAyOjM3LjkwMTg2NTcxMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4NDc3NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyMjcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvdmZpby9LY29uZmlnPTk0PXNvdXJjZSBcXFwiZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWdcXFwiXFxuZHJpdmVycy92ZmlvL0tjb25maWc6OTU6c291cmNlIFxcXCJkcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTk2LXNvdXJjZSBcXFwiZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19WRklPX1BMQVRGT1JNX0JBU0UpICs9IHBsYXRmb3JtL1xcbmRyaXZlcnMvdmZpby9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfVkZJT19NREVWKSArPSBtZGV2L1xcbmRyaXZlcnMvdmZpby9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfVkZJT19GU0xfTUMpICs9IGZzbC1tYy9cXG4tLVxcbmRyaXZlcnMvdmZpby9pb21tdWZkLmM9MjI1PUVYUE9SVF9TWU1CT0xfR1BMKHZmaW9faW9tbXVmZF9waHlzaWNhbF9wYXNpZF9kZXRhY2hfaW9hcyk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jLTIyOC0gKiBUaGUgZW11bGF0ZWQgc3RhbmRhcmQgb3BzIG1lYW4gdGhhdCB2ZmlvX2RldmljZSBpcyBnb2luZyB0byB1c2UgdGhlXFxuZHJpdmVycy92ZmlvL2lvbW11ZmQuYzoyMjk6ICogXFxcIm1kZXYgcGF0aFxcXCIgYW5kIHdpbGwgY2FsbCB2ZmlvX3Bpbl9wYWdlcygpL3ZmaW9fZG1hX3J3KCkuIERyaXZlcnMgdXNpbmcgdGhpc1xcbmRyaXZlcnMvdmZpby9pb21tdWZkLmMtMjMwLSAqIG9wcyBzZXQgc2hvdWxkIGNhbGwgdmZpb19yZWdpc3Rlcl9lbXVsYXRlZF9pb21tdV9kZXYoKS4gRHJpdmVycyB0aGF0IGRvXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9NYWtlZmlsZS0yLVxcbmRyaXZlcnMvdmZpby9tZGV2L01ha2VmaWxlOjM6bWRldi15IDo9IG1kZXZfY29yZS5vIG1kZXZfc3lzZnMubyBtZGV2X2RyaXZlci5vXFxuZHJpdmVycy92ZmlvL21kZXYvTWFrZWZpbGUtNC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19WRklPX01ERVYpICs9IG1kZXYub1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2ZzLmhcXHUwMDNlXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kZXYuaFxcdTAwM2VcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xNC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNTojaW5jbHVkZSBcXFwibWRldl9wcml2YXRlLmhcXFwiXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTYtXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMTpzdGF0aWMgc3RydWN0IGNsYXNzX2NvbXBhdCAqbWRldl9idXNfY29tcGF0X2NsYXNzO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIyLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIzOnN0YXRpYyBMSVNUX0hFQUQobWRldl9saXN0KTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyNDpzdGF0aWMgREVGSU5FX01VVEVYKG1kZXZfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNi0vKiBDYWxsZXIgbXVzdCBob2xkIHBhcmVudCB1bnJlZ19zZW0gcmVhZCBvciB3cml0ZSBsb2NrICovXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6Mjc6c3RhdGljIHZvaWQgbWRldl9kZXZpY2VfcmVtb3ZlX2NvbW1vbihzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjgte1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI5OlxcdHN0cnVjdCBtZGV2X3BhcmVudCAqcGFyZW50ID0gbWRldi1cXHUwMDNldHlwZS1cXHUwMDNlcGFyZW50O1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTMwLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjMxOlxcdG1kZXZfcmVtb3ZlX3N5c2ZzX2ZpbGVzKG1kZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjMyOlxcdGRldmljZV9kZWwoXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMzMtXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cGFyZW50LVxcdTAwM2V1bnJlZ19zZW0pO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTM0LVxcdC8qIEJhbGFuY2VzIHdpdGggZGV2aWNlX2luaXRpYWxpemUoKSAqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjM1OlxcdHB1dF9kZXZpY2UoXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMzYtfVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTM3LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjM4OnN0YXRpYyBpbnQgbWRldl9kZXZpY2VfcmVtb3ZlX2NiKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0zOS17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NDA6XFx0aWYgKGRldi1cXHUwMDNlYnVzID09IFxcdTAwMjZtZGV2X2J1c190eXBlKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjQxOlxcdFxcdG1kZXZfZGV2aWNlX3JlbW92ZV9jb21tb24odG9fbWRldl9kZXZpY2UoZGV2KSk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNDItXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy00NS0vKlxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjQ2OiAqIG1kZXZfcmVnaXN0ZXJfcGFyZW50OiBSZWdpc3RlciBhIGRldmljZSBhcyBwYXJlbnQgZm9yIG1kZXZzXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNDctICogQHBhcmVudDogcGFyZW50IHN0cnVjdHVyZSByZWdpc3RlcmVkXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNDgtICogQGRldjogZGV2aWNlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgcGFyZW50IGRldmljZS5cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo0OTogKiBAbWRldl9kcml2ZXI6IERldmljZSBkcml2ZXIgdG8gYmluZCB0byB0aGUgbmV3bHkgY3JlYXRlZCBtZGV2XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NTA6ICogQHR5cGVzOiBBcnJheSBvZiBzdXBwb3J0ZWQgbWRldiB0eXBlc1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTUxLSAqIEBucl90eXBlczogTnVtYmVyIG9mIGVudHJpZXMgaW4gQHR5cGVzXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNTItICpcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo1MzogKiBSZWdpc3RlcnMgdGhlIEBwYXJlbnQgc3R1Y3R1cmUgYXMgYSBwYXJlbnQgZm9yIG1kZXYgdHlwZXMgYW5kIHRodXMgbWRldlxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTU0LSAqIGRldmljZXMuICBUaGUgY2FsbGVyIG5lZWRzIHRvIGhvbGQgYSByZWZlcmVuY2Ugb24gQGRldiB0aGF0IG11c3Qgbm90IGJlXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NTU6ICogcmVsZWFzZWQgdW50aWwgYWZ0ZXIgdGhlIGNhbGwgdG8gbWRldl91bnJlZ2lzdGVyX3BhcmVudCgpLlxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTU2LSAqXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy01OC0gKi9cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo1OTppbnQgbWRldl9yZWdpc3Rlcl9wYXJlbnQoc3RydWN0IG1kZXZfcGFyZW50ICpwYXJlbnQsIHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo2MDpcXHRcXHRzdHJ1Y3QgbWRldl9kcml2ZXIgKm1kZXZfZHJpdmVyLCBzdHJ1Y3QgbWRldl90eXBlICoqdHlwZXMsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNjEtXFx0XFx0dW5zaWduZWQgaW50IG5yX3R5cGVzKVxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNjktXFx0cGFyZW50LVxcdTAwM2VkZXYgPSBkZXY7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NzA6XFx0cGFyZW50LVxcdTAwM2VtZGV2X2RyaXZlciA9IG1kZXZfZHJpdmVyO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTcxLVxcdHBhcmVudC1cXHUwMDNldHlwZXMgPSB0eXBlcztcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy03Mi1cXHRwYXJlbnQtXFx1MDAzZW5yX3R5cGVzID0gbnJfdHlwZXM7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6NzM6XFx0YXRvbWljX3NldChcXHUwMDI2cGFyZW50LVxcdTAwM2VhdmFpbGFibGVfaW5zdGFuY2VzLCBtZGV2X2RyaXZlci1cXHUwMDNlbWF4X2luc3RhbmNlcyk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtNzQtXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy03OC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo3OTpcXHRyZXQgPSBjbGFzc19jb21wYXRfY3JlYXRlX2xpbmsobWRldl9idXNfY29tcGF0X2NsYXNzLCBkZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTgwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy04Ni19XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6ODc6RVhQT1JUX1NZTUJPTChtZGV2X3JlZ2lzdGVyX3BhcmVudCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtODgtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtODktLypcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo5MDogKiBtZGV2X3VucmVnaXN0ZXJfcGFyZW50IDogVW5yZWdpc3RlciBhIHBhcmVudCBkZXZpY2VcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy05MS0gKiBAcGFyZW50OiBwYXJlbnQgc3RydWN0dXJlIHRvIHVucmVnaXN0ZXJcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy05Mi0gKi9cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzo5Mzp2b2lkIG1kZXZfdW5yZWdpc3Rlcl9wYXJlbnQoc3RydWN0IG1kZXZfcGFyZW50ICpwYXJlbnQpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtOTQte1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTAwLVxcdGRvd25fd3JpdGUoXFx1MDAyNnBhcmVudC1cXHUwMDNldW5yZWdfc2VtKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMDE6XFx0Y2xhc3NfY29tcGF0X3JlbW92ZV9saW5rKG1kZXZfYnVzX2NvbXBhdF9jbGFzcywgcGFyZW50LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEwMjpcXHRkZXZpY2VfZm9yX2VhY2hfY2hpbGQocGFyZW50LVxcdTAwM2VkZXYsIE5VTEwsIG1kZXZfZGV2aWNlX3JlbW92ZV9jYik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTAzLVxcdHBhcmVudF9yZW1vdmVfc3lzZnNfZmlsZXMocGFyZW50KTtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEwNy19XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTA4OkVYUE9SVF9TWU1CT0wobWRldl91bnJlZ2lzdGVyX3BhcmVudCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTA5LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjExMDpzdGF0aWMgdm9pZCBtZGV2X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMTEte1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjExMjpcXHRzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSB0b19tZGV2X2RldmljZShkZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjExMzpcXHRzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCA9IG1kZXYtXFx1MDAzZXR5cGUtXFx1MDAzZXBhcmVudDtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMTQtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTE1OlxcdG11dGV4X2xvY2soXFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMTY6XFx0bGlzdF9kZWwoXFx1MDAyNm1kZXYtXFx1MDAzZW5leHQpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjExNzpcXHRpZiAoIXBhcmVudC1cXHUwMDNlbWRldl9kcml2ZXItXFx1MDAzZWdldF9hdmFpbGFibGUpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTE4LVxcdFxcdGF0b21pY19pbmMoXFx1MDAyNnBhcmVudC1cXHUwMDNlYXZhaWxhYmxlX2luc3RhbmNlcyk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTE5OlxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRldl9saXN0X2xvY2spO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEyMC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMjE6XFx0LyogUGFpcnMgd2l0aCB0aGUgZ2V0IGluIG1kZXZfZGV2aWNlX2NyZWF0ZSgpICovXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTIyOlxcdGtvYmplY3RfcHV0KFxcdTAwMjZtZGV2LVxcdTAwM2V0eXBlLVxcdTAwM2Vrb2JqKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMjMtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTI0OlxcdGRldl9kYmcoXFx1MDAyNm1kZXYtXFx1MDAzZWRldiwgXFxcIk1ERVY6IGRlc3Ryb3lpbmdcXFxcblxcXCIpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEyNTpcXHRrZnJlZShtZGV2KTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMjYtfVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEyNy1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMjg6aW50IG1kZXZfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWRldl90eXBlICp0eXBlLCBjb25zdCBndWlkX3QgKnV1aWQpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTI5LXtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMzAtXFx0aW50IHJldDtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMzE6XFx0c3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCAqdG1wO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEzMjpcXHRzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCA9IHR5cGUtXFx1MDAzZXBhcmVudDtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMzM6XFx0c3RydWN0IG1kZXZfZHJpdmVyICpkcnYgPSBwYXJlbnQtXFx1MDAzZW1kZXZfZHJpdmVyO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEzNC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxMzU6XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWRldl9saXN0X2xvY2spO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEzNi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xMzctXFx0LyogQ2hlY2sgZm9yIGR1cGxpY2F0ZSAqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjEzODpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgXFx1MDAyNm1kZXZfbGlzdCwgbmV4dCkge1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTEzOS1cXHRcXHRpZiAoZ3VpZF9lcXVhbChcXHUwMDI2dG1wLVxcdTAwM2V1dWlkLCB1dWlkKSkge1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE0MDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xNDEtXFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xNDctXFx0XFx0ICogTm90ZTogdGhhdCBub24tYXRvbWljIHJlYWQgYW5kIGRlYyBpcyBmaW5lIGhlcmUgYmVjYXVzZVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE0ODpcXHRcXHQgKiBhbGwgbW9kaWZpY2F0aW9ucyBhcmUgdW5kZXIgbWRldl9saXN0X2xvY2suXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTQ5LVxcdFxcdCAqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE1MC1cXHRcXHRpZiAoIWF0b21pY19yZWFkKFxcdTAwMjZwYXJlbnQtXFx1MDAzZWF2YWlsYWJsZV9pbnN0YW5jZXMpKSB7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTUxOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRldl9saXN0X2xvY2spO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE1Mi1cXHRcXHRcXHRyZXR1cm4gLUVVU0VSUztcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE1Ni1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNTc6XFx0bWRldiA9IGt6YWxsb2Nfb2JqKCptZGV2KTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNTg6XFx0aWYgKCFtZGV2KSB7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTU5OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRldl9saXN0X2xvY2spO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE2MC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE2Mi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNjM6XFx0ZGV2aWNlX2luaXRpYWxpemUoXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTY0OlxcdG1kZXYtXFx1MDAzZWRldi5wYXJlbnQgID0gcGFyZW50LVxcdTAwM2VkZXY7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTY1OlxcdG1kZXYtXFx1MDAzZWRldi5idXMgPSBcXHUwMDI2bWRldl9idXNfdHlwZTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNjY6XFx0bWRldi1cXHUwMDNlZGV2LnJlbGVhc2UgPSBtZGV2X2RldmljZV9yZWxlYXNlO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE2NzpcXHRtZGV2LVxcdTAwM2VkZXYuZ3JvdXBzID0gbWRldl9kZXZpY2VfZ3JvdXBzO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE2ODpcXHRtZGV2LVxcdTAwM2V0eXBlID0gdHlwZTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNjk6XFx0LyogUGFpcnMgd2l0aCB0aGUgcHV0IGluIG1kZXZfZGV2aWNlX3JlbGVhc2UoKSAqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE3MC1cXHRrb2JqZWN0X2dldChcXHUwMDI2dHlwZS1cXHUwMDNla29iaik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTcxLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE3MjpcXHRndWlkX2NvcHkoXFx1MDAyNm1kZXYtXFx1MDAzZXV1aWQsIHV1aWQpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE3MzpcXHRsaXN0X2FkZChcXHUwMDI2bWRldi1cXHUwMDNlbmV4dCwgXFx1MDAyNm1kZXZfbGlzdCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTc0OlxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRldl9saXN0X2xvY2spO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE3NS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoxNzY6XFx0cmV0ID0gZGV2X3NldF9uYW1lKFxcdTAwMjZtZGV2LVxcdTAwM2VkZXYsIFxcXCIlcFVsXFxcIiwgdXVpZCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTc3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xODUtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTg2OlxcdHJldCA9IGRldmljZV9hZGQoXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTg3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xODktXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTkwOlxcdHJldCA9IGRldmljZV9kcml2ZXJfYXR0YWNoKFxcdTAwMjZkcnYtXFx1MDAzZWRyaXZlciwgXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTkxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0xOTMtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MTk0OlxcdHJldCA9IG1kZXZfY3JlYXRlX3N5c2ZzX2ZpbGVzKG1kZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTE5NS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMTk3LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE5ODpcXHRtZGV2LVxcdTAwM2VhY3RpdmUgPSB0cnVlO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjE5OTpcXHRkZXZfZGJnKFxcdTAwMjZtZGV2LVxcdTAwM2VkZXYsIFxcXCJNREVWOiBjcmVhdGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMDAtXFx0dXBfcmVhZChcXHUwMDI2cGFyZW50LVxcdTAwM2V1bnJlZ19zZW0pO1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjA0LW91dF9kZWw6XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjA1OlxcdGRldmljZV9kZWwoXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjA2LW91dF91bmxvY2s6XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMDgtb3V0X3B1dF9kZXZpY2U6XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjA5OlxcdHB1dF9kZXZpY2UoXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjEwLVxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMTItXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjEzOmludCBtZGV2X2RldmljZV9yZW1vdmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIxNC17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjE1OlxcdHN0cnVjdCBtZGV2X2RldmljZSAqdG1wO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIxNjpcXHRzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCA9IG1kZXYtXFx1MDAzZXR5cGUtXFx1MDAzZXBhcmVudDtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yMTctXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjE4OlxcdG11dGV4X2xvY2soXFx1MDAyNm1kZXZfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMTk6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsIFxcdTAwMjZtZGV2X2xpc3QsIG5leHQpIHtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMjA6XFx0XFx0aWYgKHRtcCA9PSBtZGV2KVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIyMS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIyMy1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMjQ6XFx0aWYgKHRtcCAhPSBtZGV2KSB7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjI1OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRldl9saXN0X2xvY2spO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIyNi1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTIyOC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMjk6XFx0aWYgKCFtZGV2LVxcdTAwM2VhY3RpdmUpIHtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMzA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGV2X2xpc3RfbG9jayk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjMxLVxcdFxcdHJldHVybiAtRUFHQUlOO1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjMzLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjIzNDpcXHRtZGV2LVxcdTAwM2VhY3RpdmUgPSBmYWxzZTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyMzU6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGV2X2xpc3RfbG9jayk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjM2LVxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjQwLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jOjI0MTpcXHRtZGV2X2RldmljZV9yZW1vdmVfY29tbW9uKG1kZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI0Mi1cXHR1cF9yZWFkKFxcdTAwMjZwYXJlbnQtXFx1MDAzZXVucmVnX3NlbSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNDUtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjQ2OnN0YXRpYyBpbnQgX19pbml0IG1kZXZfaW5pdCh2b2lkKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI0Ny17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNDktXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjUwOlxcdHJldCA9IGJ1c19yZWdpc3RlcihcXHUwMDI2bWRldl9idXNfdHlwZSk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMtMjUxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNTMtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjU0OlxcdG1kZXZfYnVzX2NvbXBhdF9jbGFzcyA9IGNsYXNzX2NvbXBhdF9yZWdpc3RlcihcXFwibWRldl9idXNcXFwiKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyNTU6XFx0aWYgKCFtZGV2X2J1c19jb21wYXRfY2xhc3MpIHtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyNTY6XFx0XFx0YnVzX3VucmVnaXN0ZXIoXFx1MDAyNm1kZXZfYnVzX3R5cGUpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI1Ny1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI2Mi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyNjM6c3RhdGljIHZvaWQgX19leGl0IG1kZXZfZXhpdCh2b2lkKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI2NC17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjY1OlxcdGNsYXNzX2NvbXBhdF91bnJlZ2lzdGVyKG1kZXZfYnVzX2NvbXBhdF9jbGFzcyk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmM6MjY2OlxcdGJ1c191bnJlZ2lzdGVyKFxcdTAwMjZtZGV2X2J1c190eXBlKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYy0yNjctfVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI2OC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyNjk6c3Vic3lzX2luaXRjYWxsKG1kZXZfaW5pdClcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYzoyNzA6bW9kdWxlX2V4aXQobWRldl9leGl0KVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jLTI3MS1cXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbW11LmhcXHUwMDNlXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWRldi5oXFx1MDAzZVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMTItXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoxMzojaW5jbHVkZSBcXFwibWRldl9wcml2YXRlLmhcXFwiXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0xNC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjE1OnN0YXRpYyBpbnQgbWRldl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0xNi17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoxNzpcXHRzdHJ1Y3QgbWRldl9kcml2ZXIgKmRydiA9XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoxODpcXHRcXHRjb250YWluZXJfb2YoZGV2LVxcdTAwM2Vkcml2ZXIsIHN0cnVjdCBtZGV2X2RyaXZlciwgZHJpdmVyKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTE5LVxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0yMS1cXHRcXHRyZXR1cm4gMDtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjIyOlxcdHJldHVybiBkcnYtXFx1MDAzZXByb2JlKHRvX21kZXZfZGV2aWNlKGRldikpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMjMtfVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMjQtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoyNTpzdGF0aWMgdm9pZCBtZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0yNi17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoyNzpcXHRzdHJ1Y3QgbWRldl9kcml2ZXIgKmRydiA9XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzoyODpcXHRcXHRjb250YWluZXJfb2YoZGV2LVxcdTAwM2Vkcml2ZXIsIHN0cnVjdCBtZGV2X2RyaXZlciwgZHJpdmVyKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTI5LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtMzAtXFx0aWYgKGRydi1cXHUwMDNlcmVtb3ZlKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6MzE6XFx0XFx0ZHJ2LVxcdTAwM2VyZW1vdmUodG9fbWRldl9kZXZpY2UoZGV2KSk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0zMi19XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0zMy1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjM0OnN0YXRpYyBpbnQgbWRldl9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy0zNS17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTQyLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6NDM6Y29uc3Qgc3RydWN0IGJ1c190eXBlIG1kZXZfYnVzX3R5cGUgPSB7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo0NDpcXHQubmFtZVxcdFxcdD0gXFxcIm1kZXZcXFwiLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6NDU6XFx0LnByb2JlXFx0XFx0PSBtZGV2X3Byb2JlLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6NDY6XFx0LnJlbW92ZVxcdFxcdD0gbWRldl9yZW1vdmUsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo0NzpcXHQubWF0Y2hcXHRcXHQ9IG1kZXZfbWF0Y2gsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy00OC19O1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy01MC0vKipcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjUxOiAqIG1kZXZfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBuZXcgTURFViBkcml2ZXJcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTUyLSAqIEBkcnY6IHRoZSBkcml2ZXIgdG8gcmVnaXN0ZXJcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNTUtICoqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6NTY6aW50IG1kZXZfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtZGV2X2RyaXZlciAqZHJ2KVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNTcte1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy02MS1cXHQvKiBpbml0aWFsaXplIGNvbW1vbiBkcml2ZXIgZmllbGRzICovXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo2MjpcXHRkcnYtXFx1MDAzZWRyaXZlci5idXMgPSBcXHUwMDI2bWRldl9idXNfdHlwZTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTYzLVxcdHJldHVybiBkcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmRydi1cXHUwMDNlZHJpdmVyKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTY0LX1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjY1OkVYUE9SVF9TWU1CT0wobWRldl9yZWdpc3Rlcl9kcml2ZXIpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNjYtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy02Ny0vKlxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmM6Njg6ICogbWRldl91bnJlZ2lzdGVyX2RyaXZlciAtIHVucmVnaXN0ZXIgTURFViBkcml2ZXJcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTY5LSAqIEBkcnY6IHRoZSBkcml2ZXIgdG8gdW5yZWdpc3RlclxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMtNzAtICovXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYzo3MTp2b2lkIG1kZXZfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1kZXZfZHJpdmVyICpkcnYpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYy03Mi17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jLTc0LX1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jOjc1OkVYUE9SVF9TWU1CT0wobWRldl91bnJlZ2lzdGVyX2RyaXZlcik7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaC0xMi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoxMzpleHRlcm4gY29uc3Qgc3RydWN0IGJ1c190eXBlIG1kZXZfYnVzX3R5cGU7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6MTQ6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1kZXZfZGV2aWNlX2dyb3Vwc1tdO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oLTE1LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjE2OiNkZWZpbmUgdG9fbWRldl90eXBlX2F0dHIoX2F0dHIpXFx0XFxcXFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjE3OlxcdGNvbnRhaW5lcl9vZihfYXR0ciwgc3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUsIGF0dHIpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6MTg6I2RlZmluZSB0b19tZGV2X3R5cGUoX2tvYmopXFx0XFx0XFxcXFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjE5OlxcdGNvbnRhaW5lcl9vZihfa29iaiwgc3RydWN0IG1kZXZfdHlwZSwga29iailcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaC0yMC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoyMTppbnQgIHBhcmVudF9jcmVhdGVfc3lzZnNfZmlsZXMoc3RydWN0IG1kZXZfcGFyZW50ICpwYXJlbnQpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjIyOnZvaWQgcGFyZW50X3JlbW92ZV9zeXNmc19maWxlcyhzdHJ1Y3QgbWRldl9wYXJlbnQgKnBhcmVudCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgtMjMtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6MjQ6aW50ICBtZGV2X2NyZWF0ZV9zeXNmc19maWxlcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oOjI1OnZvaWQgbWRldl9yZW1vdmVfc3lzZnNfZmlsZXMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaC0yNi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaDoyNzppbnQgbWRldl9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtZGV2X3R5cGUgKmtvYmosIGNvbnN0IGd1aWRfdCAqdXVpZCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmg6Mjg6aW50ICBtZGV2X2RldmljZV9yZW1vdmUoc3RydWN0IG1kZXZfZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oLTI5LVxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEzOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGV2LmhcXHUwMDNlXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE0LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNTojaW5jbHVkZSBcXFwibWRldl9wcml2YXRlLmhcXFwiXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE2LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNzpzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSB7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE4LVxcdHN0cnVjdCBhdHRyaWJ1dGUgYXR0cjtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTk6XFx0c3NpemVfdCAoKnNob3cpKHN0cnVjdCBtZGV2X3R5cGUgKm10eXBlLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMDpcXHRcXHRcXHRzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjE6XFx0c3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRldl90eXBlICptdHlwZSxcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjI6XFx0XFx0XFx0IHN0cnVjdCBtZGV2X3R5cGVfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIzLVxcdFxcdFxcdCBzaXplX3QgY291bnQpO1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTI2LSNkZWZpbmUgTURFVl9UWVBFX0FUVFJfUk8oX25hbWUpIFxcXFxcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6Mjc6XFx0c3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgbWRldl90eXBlX2F0dHJfIyNfbmFtZSA9IF9fQVRUUl9STyhfbmFtZSlcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjgtI2RlZmluZSBNREVWX1RZUEVfQVRUUl9XTyhfbmFtZSkgXFxcXFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyOTpcXHRzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSBtZGV2X3R5cGVfYXR0cl8jI19uYW1lID0gX19BVFRSX1dPKF9uYW1lKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0zMC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MzE6c3RhdGljIHNzaXplX3QgbWRldl90eXBlX2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMzItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYXR0cmlidXRlICpfX2F0dHIsIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMzMte1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzozNDpcXHRzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX21kZXZfdHlwZV9hdHRyKF9fYXR0cik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjM1OlxcdHN0cnVjdCBtZGV2X3R5cGUgKnR5cGUgPSB0b19tZGV2X3R5cGUoa29iaik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTM2LVxcdHNzaXplX3QgcmV0ID0gLUVJTztcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy00Mi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6NDM6c3RhdGljIHNzaXplX3QgbWRldl90eXBlX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTQ0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKl9fYXR0cixcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy00Ni17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjQ3OlxcdHN0cnVjdCBtZGV2X3R5cGVfYXR0cmlidXRlICphdHRyID0gdG9fbWRldl90eXBlX2F0dHIoX19hdHRyKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6NDg6XFx0c3RydWN0IG1kZXZfdHlwZSAqdHlwZSA9IHRvX21kZXZfdHlwZShrb2JqKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtNDktXFx0c3NpemVfdCByZXQgPSAtRUlPO1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTU1LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo1NjpzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBtZGV2X3R5cGVfc3lzZnNfb3BzID0ge1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo1NzpcXHQuc2hvdyA9IG1kZXZfdHlwZV9hdHRyX3Nob3csXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjU4OlxcdC5zdG9yZSA9IG1kZXZfdHlwZV9hdHRyX3N0b3JlLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy01OS19O1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy02MC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6NjE6c3RhdGljIHNzaXplX3QgY3JlYXRlX3N0b3JlKHN0cnVjdCBtZGV2X3R5cGUgKm10eXBlLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo2MjpcXHRcXHRcXHQgICAgc3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtNjMtXFx0XFx0XFx0ICAgIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy04MC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6ODE6XFx0cmV0ID0gbWRldl9kZXZpY2VfY3JlYXRlKG10eXBlLCBcXHUwMDI2dXVpZCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTgyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM9ODc9c3RhdGljIE1ERVZfVFlQRV9BVFRSX1dPKGNyZWF0ZSk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTg4LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo4OTpzdGF0aWMgc3NpemVfdCBkZXZpY2VfYXBpX3Nob3coc3RydWN0IG1kZXZfdHlwZSAqbXR5cGUsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjkwOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy05MS17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjkyOlxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVzXFxcXG5cXFwiLCBtdHlwZS1cXHUwMDNlcGFyZW50LVxcdTAwM2VtZGV2X2RyaXZlci1cXHUwMDNlZGV2aWNlX2FwaSk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTkzLX1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM9OTQ9c3RhdGljIE1ERVZfVFlQRV9BVFRSX1JPKGRldmljZV9hcGkpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy05NS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6OTY6c3RhdGljIHNzaXplX3QgbmFtZV9zaG93KHN0cnVjdCBtZGV2X3R5cGUgKm10eXBlLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzo5NzpcXHRcXHRcXHQgc3RydWN0IG1kZXZfdHlwZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtOTgte1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTEwMz1zdGF0aWMgTURFVl9UWVBFX0FUVFJfUk8obmFtZSk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTEwNC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTA1OnN0YXRpYyBzc2l6ZV90IGF2YWlsYWJsZV9pbnN0YW5jZXNfc2hvdyhzdHJ1Y3QgbWRldl90eXBlICptdHlwZSxcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTA2OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZGV2X3R5cGVfYXR0cmlidXRlICphdHRyLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMDctXFx0XFx0XFx0XFx0XFx0Y2hhciAqYnVmKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMDgte1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMDk6XFx0c3RydWN0IG1kZXZfZHJpdmVyICpkcnYgPSBtdHlwZS1cXHUwMDNlcGFyZW50LVxcdTAwM2VtZGV2X2RyaXZlcjtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTEwLVxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTExNj1zdGF0aWMgTURFVl9UWVBFX0FUVFJfUk8oYXZhaWxhYmxlX2luc3RhbmNlcyk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTExNy1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTE4OnN0YXRpYyBzc2l6ZV90IGRlc2NyaXB0aW9uX3Nob3coc3RydWN0IG1kZXZfdHlwZSAqbXR5cGUsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjExOTpcXHRcXHRcXHRcXHRzdHJ1Y3QgbWRldl90eXBlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTIwLVxcdFxcdFxcdFxcdGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTIxLXtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTIyOlxcdHJldHVybiBtdHlwZS1cXHUwMDNlcGFyZW50LVxcdTAwM2VtZGV2X2RyaXZlci1cXHUwMDNlc2hvd19kZXNjcmlwdGlvbihtdHlwZSwgYnVmKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTIzLX1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM9MTI0PXN0YXRpYyBNREVWX1RZUEVfQVRUUl9STyhkZXNjcmlwdGlvbik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTEyNS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTI2OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptZGV2X3R5cGVzX2NvcmVfYXR0cnNbXSA9IHtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTI3OlxcdFxcdTAwMjZtZGV2X3R5cGVfYXR0cl9jcmVhdGUuYXR0cixcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTI4OlxcdFxcdTAwMjZtZGV2X3R5cGVfYXR0cl9kZXZpY2VfYXBpLmF0dHIsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEyOTpcXHRcXHUwMDI2bWRldl90eXBlX2F0dHJfbmFtZS5hdHRyLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMzA6XFx0XFx1MDAyNm1kZXZfdHlwZV9hdHRyX2F2YWlsYWJsZV9pbnN0YW5jZXMuYXR0cixcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTMxOlxcdFxcdTAwMjZtZGV2X3R5cGVfYXR0cl9kZXNjcmlwdGlvbi5hdHRyLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMzItXFx0TlVMTCxcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xMzQtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEzNTpzdGF0aWMgdW1vZGVfdCBtZGV2X3R5cGVzX2NvcmVfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTM2LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IG4pXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTEzNy17XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjEzODpcXHRpZiAoYXR0ciA9PSBcXHUwMDI2bWRldl90eXBlX2F0dHJfZGVzY3JpcHRpb24uYXR0ciBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxMzk6XFx0ICAgICF0b19tZGV2X3R5cGUoa29iaiktXFx1MDAzZXBhcmVudC1cXHUwMDNlbWRldl9kcml2ZXItXFx1MDAzZXNob3dfZGVzY3JpcHRpb24pXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE0MC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNDMtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE0NDpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtZGV2X3R5cGVfY29yZV9ncm91cCA9IHtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTQ1OlxcdC5hdHRycyA9IG1kZXZfdHlwZXNfY29yZV9hdHRycyxcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTQ2OlxcdC5pc192aXNpYmxlID0gbWRldl90eXBlc19jb3JlX2lzX3Zpc2libGUsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE0Ny19O1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNDgtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE0OTpzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbWRldl90eXBlX2dyb3Vwc1tdID0ge1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNTA6XFx0XFx1MDAyNm1kZXZfdHlwZV9jb3JlX2dyb3VwLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNTEtXFx0TlVMTCxcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNTMtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE1NDpzdGF0aWMgdm9pZCBtZGV2X3R5cGVfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTU1LXtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTU2OlxcdHN0cnVjdCBtZGV2X3R5cGUgKnR5cGUgPSB0b19tZGV2X3R5cGUoa29iaik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE1Ny1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTU4LVxcdHByX2RlYnVnKFxcXCJSZWxlYXNpbmcgZ3JvdXAgJXNcXFxcblxcXCIsIGtvYmotXFx1MDAzZW5hbWUpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNTk6XFx0LyogUGFpcnMgd2l0aCB0aGUgZ2V0IGluIG1kZXZfdHlwZV9hZGQoKSAqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNjAtXFx0cHV0X2RldmljZSh0eXBlLVxcdTAwM2VwYXJlbnQtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTYyLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNjM6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgbWRldl90eXBlX2t0eXBlID0ge1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNjQ6XFx0LnN5c2ZzX29wc1xcdD0gXFx1MDAyNm1kZXZfdHlwZV9zeXNmc19vcHMsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE2NTpcXHQucmVsZWFzZVxcdD0gbWRldl90eXBlX3JlbGVhc2UsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE2NjpcXHQuZGVmYXVsdF9ncm91cHNcXHQ9IG1kZXZfdHlwZV9ncm91cHMsXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE2Ny19O1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNjgtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE2OTpzdGF0aWMgaW50IG1kZXZfdHlwZV9hZGQoc3RydWN0IG1kZXZfcGFyZW50ICpwYXJlbnQsIHN0cnVjdCBtZGV2X3R5cGUgKnR5cGUpXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE3MC17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMTcyLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoxNzM6XFx0dHlwZS1cXHUwMDNla29iai5rc2V0ID0gcGFyZW50LVxcdTAwM2VtZGV2X3R5cGVzX2tzZXQ7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE3NC1cXHR0eXBlLVxcdTAwM2VwYXJlbnQgPSBwYXJlbnQ7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjE3NTpcXHQvKiBQYWlycyB3aXRoIHRoZSBwdXQgaW4gbWRldl90eXBlX3JlbGVhc2UoKSAqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNzYtXFx0Z2V0X2RldmljZShwYXJlbnQtXFx1MDAzZWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE3Ny1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MTc4OlxcdHJldCA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZ0eXBlLVxcdTAwM2Vrb2JqLCBcXHUwMDI2bWRldl90eXBlX2t0eXBlLCBOVUxMLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0xNzktXFx0XFx0XFx0XFx0ICAgXFxcIiVzLSVzXFxcIiwgZGV2X2RyaXZlcl9zdHJpbmcocGFyZW50LVxcdTAwM2VkZXYpLFxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTE5OS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjAwOnN0YXRpYyB2b2lkIG1kZXZfdHlwZV9yZW1vdmUoc3RydWN0IG1kZXZfdHlwZSAqdHlwZSlcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjAxLXtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMDYtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjIwNzovKiBtZGV2IHN5c2ZzIGZ1bmN0aW9ucyAqL1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMDg6dm9pZCBwYXJlbnRfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHN0cnVjdCBtZGV2X3BhcmVudCAqcGFyZW50KVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMDkte1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIxMi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGFyZW50LVxcdTAwM2Vucl90eXBlczsgaSsrKVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyMTM6XFx0XFx0bWRldl90eXBlX3JlbW92ZShwYXJlbnQtXFx1MDAzZXR5cGVzW2ldKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjE0OlxcdGtzZXRfdW5yZWdpc3RlcihwYXJlbnQtXFx1MDAzZW1kZXZfdHlwZXNfa3NldCk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIxNS19XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIxNi1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjE3OmludCBwYXJlbnRfY3JlYXRlX3N5c2ZzX2ZpbGVzKHN0cnVjdCBtZGV2X3BhcmVudCAqcGFyZW50KVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMTgte1xcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTIyMC1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjIxOlxcdHBhcmVudC1cXHUwMDNlbWRldl90eXBlc19rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZChcXFwibWRldl9zdXBwb3J0ZWRfdHlwZXNcXFwiLFxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMjItXFx0XFx0XFx0XFx0XFx0ICAgICAgIE5VTEwsIFxcdTAwMjZwYXJlbnQtXFx1MDAzZWRldi1cXHUwMDNla29iaik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjIyMzpcXHRpZiAoIXBhcmVudC1cXHUwMDNlbWRldl90eXBlc19rc2V0KVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMjQtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjI2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwYXJlbnQtXFx1MDAzZW5yX3R5cGVzOyBpKyspIHtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjI3OlxcdFxcdHJldCA9IG1kZXZfdHlwZV9hZGQocGFyZW50LCBwYXJlbnQtXFx1MDAzZXR5cGVzW2ldKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjI4LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjM0LVxcdHdoaWxlICgtLWkgXFx1MDAzZT0gMClcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjM1OlxcdFxcdG1kZXZfdHlwZV9yZW1vdmUocGFyZW50LVxcdTAwM2V0eXBlc1tpXSk7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjIzNjpcXHRrc2V0X3VucmVnaXN0ZXIocGFyZW50LVxcdTAwM2VtZGV2X3R5cGVzX2tzZXQpO1xcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yMzctXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYz0yNDA9c3RhdGljIHNzaXplX3QgcmVtb3ZlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjQyLXtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmM6MjQzOlxcdHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHRvX21kZXZfZGV2aWNlKGRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTI0NC1cXHR1bnNpZ25lZCBsb25nIHZhbDtcXG4tLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYy0yNTEtXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jOjI1MjpcXHRcXHRyZXQgPSBtZGV2X2RldmljZV9yZW1vdmUobWRldik7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTI1My1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jPTI2MD1zdGF0aWMgREVWSUNFX0FUVFJfV08ocmVtb3ZlKTtcXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjYxLVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyNjI6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1kZXZfZGV2aWNlX2F0dHJzW10gPSB7XFxuZHJpdmVycy92ZmlvL21kZXYvbWRldl9zeXNmcy5jLTI2My1cXHRcXHUwMDI2ZGV2X2F0dHJfcmVtb3ZlLmF0dHIsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3N5c2ZzLmMtMjY2LVxcbmRyaXZlcnMvdmZpby9tZGV2L21kZXZfc3lzZnMuYzoyNjc6c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWRldl9kZXZpY2VfZ3JvdXAgPSB7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjAyOjM4LjQ5MDM0OTQzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTg1ODE4Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFJlYWNoYWJpbGl0eSBmb3IgdGhlIFJlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXQgRHJpdmVyKipcblxuT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLiBGaXJzdCwgSSBzZWUgYG1kZXZgLCBidXQgdGhhdCdzIGZvciBzcGVjaWZpYyBkcml2ZXJzIGxpa2UgYHZmaW9fY2N3YCBhbmQgdGhlIGxpa2U7IGl0J3Mgbm90IGEgZ2VuZXJpYyBQQ0kgZW11bGF0b3IuICBgdmZpby11c2VyYCBpcyBvdXQgYmVjYXVzZSBpdCBpcyB1c2VkIGZvciBhIHVzZXIgc3BhY2UgKmVtdWxhdG9yKiB0YWxraW5nIHRvIGEgUUVNVSBpbnN0YW5jZSwgbm90IHRoZSBrZXJuZWwgdGFsa2luZyB0byB1c2VyIHNwYWNlLiBTbywgbm8gZ2VuZXJpYyBQQ0kgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwuICBHaXZlbiB0aGF0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgYHJ0YXNlYCBpcyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLiBDb3VsZCBgcnRhc2VgIHNvbWVob3cgKm5vdCogYmUgYSBQQ0kgZHJpdmVyPyAgSSBjaGVjayBgcnRhc2VfaW5pdF9vbmVgLCBhbmQgeWVzLCBpdCB0YWtlcyBgc3RydWN0IHBjaV9kZXYgKnBkZXZgIGFuZCByZWdpc3RlcnMgd2l0aCBgcGNpX3JlZ2lzdGVyX2RyaXZlcmAuIE9rYXksIGl0J3MgYSBQQ0kgZHJpdmVyLlxuXG5Ob3csIGNvdWxkIHN5emthbGxlciBmdXp6IHRoaXM/ICBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLCBhbmQgSSBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQuIExldCBtZSBhY2Nlc3MgbXkgbG9uZy10ZXJtIG1lbW9yeSBhYm91dCBzeXprYWxsZXIncyBQQ0kgZnV6emluZy4uLiBPa2F5LCBpdCB3YXMgYWRkZWQgaW4gMjAyNC4gIERvZXMgaXQgdXNlIGEgY3VzdG9tIFFFTVUgZGV2aWNlIGxpa2UgYHN5emthbGxlci1wY2lgPyBObywgdGhhdCdzIG5vdCByaWdodC4gSXQgZG9lc24ndCB1c2UgdGhlIGBwY2ktdGVzdGRldmAgZWl0aGVyLiAgQWgsIHJpZ2h0ISBTeXprYWxsZXIgaW5qZWN0cyBhIFBDSSBkZXZpY2UsIHNvbWVob3cgdXNpbmcgc2hhcmVkIG1lbW9yeSwgdG8gdGVsbCB0aGUgZXhlY3V0b3Igd2hhdCBNTUlPIHJlYWRzIHNob3VsZCByZXR1cm4uXG5cbklmIHN5emthbGxlciBjb3VsZCBlbXVsYXRlICphbnkqIFBDSSBkZXZpY2UsIHRoZW4gYHJ0YXNlYCAqaXMqIHJlYWNoYWJsZS4gIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbnkgbWVudGlvbiBvZiBgc3l6a2FsbGVyLXBjaWAgaW4gdGhlIGtlcm5lbC4gTm9wZSwgaXQgd291bGQgYmUgaW4gUUVNVS5cblxuSWYgc3l6a2FsbGVyICpjYW4qIGVtdWxhdGUgYW55IFBDSSBkZXZpY2UsIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgIGZvciBhbGwgUENJIGRyaXZlcnMuICBCdXQsIHRoZSBwcm9tcHQuLi4gKlwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLi4uXCIqIE9rYXksIHNvIGlmIGl0J3Mgc29mdHdhcmUgZW11bGF0ZWQsIGl0J3Mgc3RpbGwgcmVhY2hhYmxlLiAgSXMgdGhpcyBjb25zaWRlcmVkIHNvZnR3YXJlIGVtdWxhdGlvbj8gWWVzLCBzbyBJIGhhdmUgdG8gYmUgY2FyZWZ1bCBoZXJlLlxuXG5TbywgZG9lcyBzeXprYWxsZXIgKmFjdHVhbGx5KiB1c2UgYSBjdXN0b20gUUVNVSBkZXZpY2U/IE5vLiAgSXQgZG9lc24ndCB1c2UgYHBjaS10ZXN0ZGV2YCBvciBldmVuIGB2ZmlvYCBmb3IgaG9zdCBlbXVsYXRpb24uIERvZXMgaXQgdXNlIGB2aXJ0aW9gPyBOby5cblxuSSBoYXZlIHRvIGNhcmVmdWxseSBldmFsdWF0ZSB0aGUgcmlzay4gSWYgSSBzYXkgYFdvcnRoRnV6emluZz1mYWxzZWAgYW5kIGl0IElTIHJlYWNoYWJsZSwgSSdtIHdyb25nLiBJZiBJIHNheSBgV29ydGhGdXp6aW5nPXRydWVgIGFuZCBpdCdzIG5vdCwgSSdtIGF0IGxlYXN0IGxlc3Mgd3JvbmcuICBCdXQsIHRoZSBwcm9tcHQgc3RyZXNzZXMgXCJpbXBvc3NpYmxlIHRvIHJlYWNoXCIgYW5kIG1lbnRpb25zIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5TbywgZG9lcyBgcnRhc2VgIGhhdmUgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmU/IE5vLiBJcyB0aGVyZSBhIGdlbmVyaWMgUENJIGVtdWxhdG9yIGluIHRoZSBrZXJuZWw/IE5vLiBUaGVyZWZvcmUsIHdpdGhvdXQgYSBzcGVjaWFsIHNvZnR3YXJlIHNldHVwLCBpdCAqaXMqIGltcG9zc2libGUgdG8gcmVhY2guXG5cbk5vdywgY29uc2lkZXIgY2FzZXMgbGlrZSBVU0Igd2l0aCBgZHVtbXlfaGNkYCwgV2lGaSB3aXRoIGBtYWM4MDIxMV9od3NpbWAsIEJsdWV0b290aCB3aXRoIGB2aGNpYCwgQ0FOIHdpdGggYHZjYW5gLiBUaGV5ICphcmUqIHJlYWNoYWJsZS4gQnV0IHdoYXQgYWJvdXQgUENJPyAgTm8gZ2VuZXJpYyBkdW1teSBob3N0IGNvbnRyb2xsZXIgaW4gdGhlIGtlcm5lbC4gIFRoZSBgUENJX0VORFBPSU5UX1RFU1RgIGlzICpub3QqIGEgZ2VuZXJhbCBlbXVsYXRvci4gUENJIGRyaXZlcnMgYXJlICpnZW5lcmFsbHkqIHVucmVhY2hhYmxlIHdpdGhvdXQgc29tZXRoaW5nIGxpa2UgYSBjdXN0b20gZW11bGF0b3IgaW4gUUVNVSwgb3IgbGlrZSB0aGUgZXhpc3RpbmcgYHZpcnRpb2AsIGBlMTAwMGAsIG9yIGBydGw4MTM5YC5cblxuT2theSwgaXMgYHJ0YXNlYCBlbXVsYXRlZCBpbiBRRU1VPyBJdCdzIFJlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXQuIEl0J3MgdmVyeSBzcGVjaWZpYywgYW5kIHJlbGF0aXZlbHkgbmV3IChhZGRlZCBhcm91bmQgMjAyNCksIHNvIFFFTVUgYWxtb3N0IGNlcnRhaW5seSBkb2VzICpub3QqIGVtdWxhdGUgaXQuIFRoZXJlZm9yZSwgaXQgaXMgaW1wb3NzaWJsZSB0byByZWFjaC5cblxuQ291bGQgYHN5emthbGxlcmAgdXNlIGB2ZmlvLW1kZXZgPyBObywgdGhhdCdzIG5vdCBpdC4gIFRoZXJlJ3Mgbm8gYG1kZXZgIGRyaXZlciBmb3IgZ2VuZXJpYyBQQ0kgZW11bGF0aW9uLCBhbmQgYHZmaW8tdXNlcmAgaXMgYWxzbyBvdXQgYmVjYXVzZSBpdCdzIHRoZSB1c2VyIHNwYWNlIGVtdWxhdG9yLiBUaGF0IGJyaW5ncyBtZSBiYWNrIHRvIG15IHByZXZpb3VzIHJlYXNvbmluZywgd2hpY2ggc2F5cyB0aGF0IHNpbmNlIHN5emthbGxlciB0ZXN0cyBnZW5lcmljIHBhdGNoZXMsIHRoaXMgcGF0Y2ggcHJvYmFibHkgY2FuJ3QgYmUgcmVhY2hlZCBpZiBpdCBpcyBmb3IgYSBzcGVjaWZpYyBkZXZpY2UuXG5cbkxldCdzIHZlcmlmeS4gRG9lcyBhbnkgYENPTkZJR19QQ0lfREVCVUdgIHN0dWZmIGFsbG93IGluamVjdGluZyBkZXZpY2VzPyBOby4gU3l6a2FsbGVyJ3MgYHN5el9wY2lfZGV2aWNlX2FkZGAuIEhvdyBkb2VzIHRoYXQgKmFjdHVhbGx5KiB3b3JrPyBTeXprYWxsZXIgcnVucyBpbiBHQ0UsIGFuZCBHQ0UgZG9lc24ndCBydW4gY3VzdG9tIFFFTVUgZGV2aWNlcy4gVGhlcmVmb3JlLCBob3cgZG9lcyBTeXprYWxsZXIgdGVzdCBQQ0kgb24gR0NFPyBJdCBkb2VzIG5vdCEgUENJXG5cbiIsIklucHV0VG9rZW5zIjo0NjY3MCwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjAzOjE5LjY3NjE3MDcwOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcnRhc2VgIGRyaXZlciAoUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCksIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgYW5kIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiAoYHJ0YXNlX2luaXRfb25lYCkgc3RyaWN0bHkgY2hlY2tzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSB2ZXJzaW9ucyB2aWEgTU1JTyByZWFkcyAoYHJ0YXNlX2NoZWNrX21hY192ZXJzaW9uX3ZhbGlkYCkuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGEgZGVkaWNhdGVkIGVtdWxhdG9yLCB0aGUgZGV2aWNlIHByb2JlIHdpbGwgZmFpbCwgdGhlIG5ldGRldmljZSB3aWxsIG5vdCBiZSByZWdpc3RlcmVkLCBhbmQgdGhlIG1vZGlmaWVkIGNvZGUgKGBydGFzZV9zdGFydF94bWl0YCBhbmQgYHJ0YXNlX3NrYl9wYWRgKSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHJ0YXNlYCBkcml2ZXIgKFJlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXQpLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwsIGFuZCB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gKGBydGFzZV9pbml0X29uZWApIHN0cmljdGx5IGNoZWNrcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgdmVyc2lvbnMgdmlhIE1NSU8gcmVhZHMgKGBydGFzZV9jaGVja19tYWNfdmVyc2lvbl92YWxpZGApLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIGRlZGljYXRlZCBlbXVsYXRvciwgdGhlIGRldmljZSBwcm9iZSB3aWxsIGZhaWwsIHRoZSBuZXRkZXZpY2Ugd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIChgcnRhc2Vfc3RhcnRfeG1pdGAgYW5kIGBydGFzZV9za2JfcGFkYCkgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xjrx[1] Phase: Running StartedAt: 2026-07-10 06:03:32 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xjrx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-10 06:03:32 +0000 UTC FinishedAt: 2026-07-10 06:04:36 +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,}