Name: series-workflow42vcx Phase: Running StartedAt: 2026-08-24 03:06:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42vcx[0] Phase: Running StartedAt: 2026-08-24 03:06:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42vcx[0].run-triage Phase: Running StartedAt: 2026-08-24 03:06:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42vcx[0].run-triage(0) Phase: Running StartedAt: 2026-08-24 03:06:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkgZHJpdmVyLiBQSFkgZHJpdmVycyBhcmUgcHJvYmVkIGJhc2VkIG9uIHRoZSBoYXJkd2FyZSBQSFkgSUQgcmVhZCBmcm9tIHRoZSBNRElPIGJ1cy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIHNwZWNpZmljIFBIWSBoYXJkd2FyZSBpbiBRRU1VLCBhbmQgbm8gZ2VuZXJpYyB3YXkgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFBIWSBkcml2ZXJzIHdpdGggY3VzdG9tIElEcyBmcm9tIHVzZXJzcGFjZSwgdGhlIG5ldyBjb2RlIChpbmNsdWRpbmcgdGhlIG5ld2x5IGFkZGVkIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaGVscGVyIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoaXMgZHJpdmVyKSBpcyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM5YWI1MDY1NjFjNWRiNGJhYmE5ZmEzOWNiMTliN2YxNDM3YTZmYzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwMzoyNDowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbmluZGV4IGM1YTJjZGE4ZDMxYmQuLjUxMGJkMDYzOWE4NTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuQEAgLTEsMjQgJiM0MzsxLDI5IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzO1xuIC8qXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxuJiM0MzsgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cbiAgKlxuICAqIEF1dGhvcjogUGV0ZXIgR2VpcyBcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXHUwMDNlXG4gICogQXV0aG9yOiBGcmFuayBcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cdTAwM2VcbiYjNDM7ICogQXV0aG9yOiBLeWxlIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3BoeWxpYi5oXCYjMzQ7XG4mIzQzO1xuICNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbiYjNDM7I2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0zMCw2ICYjNDM7MzUsMTggQEBcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICovXG4gXG4mIzQzOy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xuJiM0MzsgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIHxcdFVUUCBNSUlcdFx0XHR8XHRGSUJFUiBNSUlcdCAgICAgICAgfFxuJiM0MzsgKiB8XHRVVFAgTU1EXHRcdFx0fFx0XHRcdFx0fFxuJiM0MzsgKiB8XHRVVFAgRXh0ZW5kZWRcdFx0fFx0RklCRVIgRXh0ZW5kZWRcdFx0fFxuJiM0MzsgKiB8XHRVVFAgVG9wIEV4dGVuZGVkXHR8XHRGSUJFUiBUb3AgRXh0ZW5kZWRcdHxcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKiB8XHRcdFx0Q29tbW9uIFRvcCBFeHRlbmRlZFx0XHRcdHxcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKi9cbiYjNDM7XG4gLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cbiBcbiAvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovXG5AQCAtMzc2LDYgJiM0MzszOTMsMTcgQEBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcdDBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXHRcdDFcbiBcbiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRVx0XHQoMHgxKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVx0XHRcdCgweDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXHRcdDB4MVxuJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUxcdFx0MHgwXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URVNUX01PREVfTVx0XHRcdEdFTk1BU0soMTUsIDEzKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVTVF9NT0RFKHgpXHRGSUVMRF9QUkVQKFlUODgyNF9VVFBfVEVTVF9NT0RFX00sICh4KSlcbiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0tcdFx0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfRU5fRklMTF9QUkVcdFx0XHRCSVQoMTMpXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElOR1x0XHQoMHg3KVxuJiM0MztcbiBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcbiBcdCAqIHRoaXMgbWVhbnMgdGhhdCB5dDg1MjEgbWF5IHdvcmsgaW4gdXRwIG9yIGZpYmVyIG1vZGUgd2hpY2ggZGVwZW5kc1xuQEAgLTM5NCw2ICYjNDM7NDIyLDEyIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHR1OCByZWdfcGFnZTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaW50ZXJmYWNlX21vZGU7XG4mIzQzO1x0Lyogc2hhcmVkX2xvY2sgdXNlZCB0byBVVFBzIG9wZXJhdGlvbiBpc29sYXRpb24gZHVyaW5nIHN3YXAgcmVnIHNwYWNlICovXG4mIzQzO1x0c3RydWN0IG11dGV4IHNoYXJlZF9sb2NrO1xuJiM0Mzt9O1xuJiM0MztcbiAvKipcbiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNDMyLDYgJiM0Mzs0NjYsNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcbiYjNDM7ICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXG4mIzQzO1x0XHRcdCAgICAgICB1MTYgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jaygpIC0gd3JpdGUgcGFnZSBmb3IgWVQ4ODI0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbiYjNDM7XHRyZXQgfD0gKHBhZ2UgXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0spO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCk7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNjIxLDExICYjNDM7NzE5LDEwMTMgQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcbiBcdFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXG4gXHRcdFx0XHQgICBZVFBIWV9JRVJfV09MLCAwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2VcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1xuJiM0MzsgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIG9sZF9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb2xkX3BhZ2UgXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHR1MTYgZGF0YTtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBvbGRfcGFnZTtcbiYjNDM7XHRkYXRhID0gb2xkX3BhZ2UgXHUwMDI2ICh+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4mIzQzO1x0ZGF0YSB8PSBwYWdlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIGVuYWJsZSBzZHMgaXNvbGF0ZSAqL1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUsIEJNQ1JfSVNPTEFURSk7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0Lyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHQgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlXG4mIzQzOyAqIGFuZCBzZHMgc29mdHJlc2V0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBzZHMgc29mdHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGUgKi9cbiYjNDM7XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSxcbiYjNDM7XHRcdFx0ICAgQk1DUl9SRVNFVCBcdTAwMjYgfkJNQ1JfSVNPTEFURSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovXG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLCAodmFsIFx1MDAzYyAwKSB8fFxuJiM0MztcdFx0XHRcdCEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQ1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gdmFsO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMoKSAtIGNhbGxlZCB0byBkbyBzdG9yZSB3b3JraW5nIHN0YXR1c1xuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmV0OiBvcGVyYXRpb24mIzM5O3MgcmV0dXJuIGNvZGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0LyogY29uZmlndXJlIG5vcm1hbCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRyID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuJiM0MztcdHIgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgc29mdCByZXNldCAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7cmV0cnk6XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCB1dHAgaW5pdFxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogcG93ZXIgZG93biAqL1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIHBsbCBjYWxpYnJhdGlvbiAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4MGNiYSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGEwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBlbmFibGUgbmliYmxlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogaWRsZSBlcnIgZGV0ZWN0IGVuYWJsZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogMi41RyB0ZW1wbGF0ZSB0b25lICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRlMiwgMHgwMTQ5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMzYsIDB4YWIwYSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MCwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZjLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMTBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY2LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY3LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY5LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgRU1DIENTICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBiZSwgMHg2NDA2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIEVNQyBSRSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODIsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4MDA2ZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogcmVzZXQgKi9cbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuJiM0MztcdFx0XHQgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4mIzQzO1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4mIzQzO1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCBzZHMgaW5pdFxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4mIzQzO1x0aW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIHJlYWQgZWZ1c2UgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsXzEgPSByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2YWxfMiA9IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZhbF8zID0gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogYW5hbG9nIENEUiAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgVkNPICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM4LCAweDkwMjQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4mIzQzO1x0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSkgXHUwMDNlXHUwMDNlIDY7XG4mIzQzO1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCBcdTAwMjY9IH4oQklUKDEpIHwgQklUKDApKTtcbiYjNDM7XHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNSkgfCBCSVQoNCkpKSBcdTAwM2VcdTAwM2UgNDtcbiYjNDM7XHRyZXQgfD0gdG1wO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0MSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4mIzQzO1x0dG1wID0gKHZhbF8zIFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XG4mIzQzO1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDU0LCAweDBmMTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBkaWdpdGFsIGV5ZSBkaWFncmFtIG9mIFNlckRlcyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBTZXJkZXMgTERPICovXG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCBcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcbiYjNDM7XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSBcdTAwM2VcdTAwM2UgMjtcbiYjNDM7XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgNCk7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgXHUwMDI2PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpO1xuJiM0MztcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpIFx1MDAzZVx1MDAzZSA1O1xuJiM0MztcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA4KTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIFNlcmRlcyBSWCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGEsIDB4MGZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA4LCAweDdjMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NGYsIDB4ZmYwOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIFNlcmRlcyBUWCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4ZSwgMHg3ZDAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAzLCAweDU2MDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfUkVTVjEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSztcbiYjNDM7XHRyZXQgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcbiYjNDM7XHRyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTtcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIHJlc2V0IHNlcmRlcyAqL1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0ICAgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrOyBfX3BoeV9yZWFkIHRha2VzIG5vIGxvY2sgKi9cbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsICh2YWwgXHUwMDNjIDApIHx8XG4mIzQzO1x0XHRcdFx0ISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuJiM0MztcdFx0XHRcdDUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSB2YWw7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdFxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhhMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNzIsIDB4NTAzOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzU5LCAweDIxNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIDIuNUcgdGVtcGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiAxMDAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzQwLCAweDMwMWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIDEwMDAgcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNGEsIDB4ZmYwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZCwgMHhkMDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMywgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogMTAwIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NzFmLCAweDM2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiAxMCB0ZW1wYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YywgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiAxMCB0ZW1wYXRlIE1BVSovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY2LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY5LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIEVNQyBDUywgSW5jb25zaXN0ZW50IHdpdGggZXh0ZXJuYWwgcGh5ICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YzgsIDB4ZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhiZSwgMHg2NDA2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogRU1DIFJFKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDZlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGMsIDB4NDFhMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuJiM0MztcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiByZXNldCAqL1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4mIzQzO1x0XHRcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHQgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuJiM0MztcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4gXG4tZXJyX3Jlc3RvcmVfcGFnZTpcbi1cdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0OyVzIGRvbmUsIHBoeSBhZGRyOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0MztlcnI6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeXQ4NTMxX3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbkBAIC0zMDcyLDYgJiM0Mzs0MTcyLDQxMyBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2dldF9mZWF0dXJlcyAtIHJlYWQgbW1kIHJlZ2lzdGVyIHRvIGdldCAyLjVHIGNhcGFiaWxpdHlcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHRyZXQgPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzKHBoeWRldik7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IGxpbmsgPSAwO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdGxpbmsgPSAhIShyZXQgXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcbiYjNDM7XHRyZXR1cm4gbGluaztcbiYjNDM7ZXJyOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbGluayA9IDA7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VhdXRvbmVnX2NvbXBsZXRlKSB7XG4mIzQzO1x0XHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbHBhKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gcmV0O1xuJiM0MztcbiYjNDM7XHRsaW5rID0gdmFsIFx1MDAyNiBZVFBIWV9TU1JfTElOSztcbiYjNDM7XHRpZiAobGluaylcbiYjNDM7XHRcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpbmspIHtcbiYjNDM7XHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAwKVxuJiM0MztcdFx0XHRwaHlkZXZfZGJnKHBoeWRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDslcywgcGh5IGFkZHI6ICVkLCBsaW5rIHVwXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKHBoeWRldi1cdTAwM2VsaW5rID09IDEpXG4mIzQzO1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmsgZG93blxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdHBoeV9yZXNvbHZlX2FuZWdfcGF1c2UocGh5ZGV2KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOIHwgQk1DUl9JU09MQVRFLCAweDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9kb3duKCk6IHV0cCBwb3dlciBkb3duLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0LyogdXRwIHBvd2VyIG9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7cmV0cnk6XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXQgPSB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBkb3duICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3JldHJ5OlxuJiM0MztcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfY29uZmlnX2FuZWcoKSAtIGNvbmZpZyBuZWdvdGlhdGlvblxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcGh5X2N0cmwgPSAwO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbiYjNDM7XHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbiYjNDM7XHRcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcbiYjNDM7XHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxuJiM0MztcdFx0XHRcdCAgICAgcGh5X2N0cmwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrZXQgZm9yIHBoeTg4MjQuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7XG4mIzQzO1x0Y29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGlzZSBzaGFyZWQgbG9jayBmb3IgWVQ4ODI0ICovXG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuJiM0MztcdGlmICghb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsIFwmIzM0O21vdG9yY29tbSxpbnRlcmZhY2UtbW9kZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNmludGVyZmFjZV9tb2RlX25hbWUpKSB7XG4mIzQzO1x0XHRpZiAoIXN0cmNhc2VjbXAoaW50ZXJmYWNlX21vZGVfbmFtZSxcbiYjNDM7XHRcdFx0XHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpKSkge1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXG4mIzQzO1x0XHRcdFx0KGludGVyZmFjZV9tb2RlX25hbWUsXG4mIzQzO1x0XHRcdFx0IHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkge1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGRlZmF1bHQgaW50ZXJuYWwgcGh5ICovXG4mIzQzO1x0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KSkge1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbkBAIC0zMTU4LDEzICYjNDM7NDY2NSwyOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHRcdC5zdXNwZW5kXHRcdD0geXQ4ODIxX3N1c3BlbmQsXG4gXHRcdC5yZXN1bWVcdFx0XHQ9IHl0ODgyMV9yZXN1bWUsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcbiYjNDM7XHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0XCYjMzQ7LFxuJiM0MztcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHl0ODgyNF9nZXRfZmVhdHVyZXMsXG4mIzQzO1x0XHQucmVhZF9wYWdlXHRcdD0geXQ4ODI0X3JlYWRfcGFnZSxcbiYjNDM7XHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXG4mIzQzO1x0XHQucHJvYmVcdFx0ICAgICAgICA9IHl0ODgyNF9wcm9iZSxcbiYjNDM7XHRcdC5jb25maWdfYW5lZ1x0XHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHRcdD0geXQ4ODI0X2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzXHRcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5zdXNwZW5kXHRcdD0geXQ4ODI0X3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjRfcmVzdW1lLFxuJiM0MztcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlclwmIzM0Oyk7XG4gTU9EVUxFX0FVVEhPUihcJiMzNDtQZXRlciBHZWlzXCYjMzQ7KTtcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O0ZyYW5rXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtLeWxlXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuQEAgLTMxNzQsNiAmIzQzOzQ2OTcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4mIzQzO1x0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcbiBcdHsgLyogc2VudGluZWwgKi8gfVxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbmluZGV4IDg3MDkyMDMxMWY5YTAuLjg3OTgxN2ZlMzhjNWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5AQCAtMTQwOCw2ICYjNDM7MTQwOCw2MSBAQCBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IFNldCB0ZW1wbGF0ZSB0ZXN0bW9kZSBpbmNsdWRlIE5vcm1hbCB0byBUZXN0IG1vZGUgN1xuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXJcbiYjNDM7ICpcdHJlYWQvd3JpdGUgZXJyb3IpLlxuJiM0MzsgKi9cbiYjNDM7aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcbiYjNDM7e1xuJiM0MztcdGludCBjdHJsID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0ZXN0X21vZGUpIHtcbiYjNDM7XHRjYXNlIDA6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgMzpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgNTpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgNjpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgNzpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSxcbiYjNDM7XHRcdFx0ICAgICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfVEVNUExBVEUsIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xuJiM0MztcbiAvKipcbiAgKiBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyAtIGdldCBQTENBIGNvbmZpZ3VyYXRpb24gZnJvbSBzdGFuZGFyZCByZWdpc3RlcnNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggNWY4ZDY1ODY4ZTBmZi4uZGE0ODJlODQzMWEwMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzM5LDYgJiM0MzsyMzM5LDcgQEAgaW50IGdlbnBoeV9jNDVfbG9vcGJhY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUsIGludCBzcGVlZCk7XG4gaW50IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpO1xuJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdFx0XHQgICAgc3RydWN0IHBoeV9wbGNhX2NmZyAqcGxjYV9jZmcpO1xuIGludCBnZW5waHlfYzQ1X3BsY2Ffc2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5pbmRleCAwNmY0YmMzYzIwYzcxLi5mZTMzOWIxN2U5ODI0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuQEAgLTYzLDYgJiM0Mzs2Myw3IEBAXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0xcdDEzMFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcdTAwMjYgcG9sYXJpdHkgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RYUFdSXHQxMzFcdC8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREUgMTMyXHQvKiBUZXN0IG1vZGUgY29udHJvbCAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU05SXHQxMzNcdC8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuXG4gXHRcdFx0XHRcdCAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfQ1NSXHQxNDdcdC8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovXG5AQCAtMzIwLDYgJiM0MzszMjEsMTcgQEBcbiAvKiBQTUEgMTBHQkFTRS1SIEZhc3QgUmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRVx0MHgwMDAxXHQvKiBGYXN0IHJldHJhaW4gZW5hYmxlICovXG4gXG4mIzQzOy8qIFBNQSAxMEdCQVNFLVIvLVQgVGVtcGxhdGUgVGVzdCBNb2RlIFJlZ2lzdGVyKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9URU1QTEFURSAweEUwMDAgLyogVGVtcGxhdGUgdGVzdCBtb2RlICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMIDB4MDAwMCAvKiBUZW1wbGF0ZSBOb3JtYWwgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xIDB4MjAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTEgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yIDB4NDAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTIgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zIDB4NjAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTMgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80IDB4ODAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTQgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81IDB4YTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTUgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82IDB4YzAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTYgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83IDB4ZTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTcgKi9cbiYjNDM7XG4gLyogUENTIDEwR0JBU0UtUi8tVCBzdGF0dXMgcmVnaXN0ZXIgMS4gKi9cbiAjZGVmaW5lIE1ESU9fUENTXzEwR0JSVF9TVEFUMV9CTEtMS1x0MHgwMDAxXHQvKiBCbG9jayBsb2NrIGF0dGFpbmVkICovXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIGRyaXZlci4gUEhZIGRyaXZlcnMgYXJlIHByb2JlZCBiYXNlZCBvbiB0aGUgaGFyZHdhcmUgUEhZIElEIHJlYWQgZnJvbSB0aGUgTURJTyBidXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBQSFkgaGFyZHdhcmUgaW4gUUVNVSwgYW5kIG5vIGdlbmVyaWMgd2F5IHRvIGluc3RhbnRpYXRlIGFyYml0cmFyeSBQSFkgZHJpdmVycyB3aXRoIGN1c3RvbSBJRHMgZnJvbSB1c2Vyc3BhY2UsIHRoZSBuZXcgY29kZSAoaW5jbHVkaW5nIHRoZSBuZXdseSBhZGRlZCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIGhlbHBlciB3aGljaCBpcyBvbmx5IGNhbGxlZCBieSB0aGlzIGRyaXZlcikgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzOWFiNTA2NTYxYzVkYjRiYWJhOWZhMzljYjE5YjdmMTQzN2E2ZmMwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMDM6MjQ6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKaW5kZXggYzVhMmNkYThkMzFiZC4uNTEwYmQwNjM5YTg1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYwpAQCAtMSwyNCAmIzQzOzEsMjkgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MzsKIC8qCi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuCiYjNDM7ICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuCiAgKgogICogQXV0aG9yOiBQZXRlciBHZWlzICZsdDtwZ3dpcGVvdXRAZ21haWwuY29tJmd0OwogICogQXV0aG9yOiBGcmFuayAmbHQ7RnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tJmd0OwomIzQzOyAqIEF1dGhvcjogS3lsZSAmbHQ7a3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb20mZ3Q7CiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aGVyZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKIAomIzQzOyNpbmNsdWRlICYjMzQ7cGh5bGliLmgmIzM0OwomIzQzOwogI2RlZmluZSBQSFlfSURfWVQ4NTExCQkweDAwMDAwMTBhCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjEJCTB4MDAwMDAxMWEKICNkZWZpbmUgUEhZX0lEX1lUODUyMgkJMHg0ZjUxZTkyOAogI2RlZmluZSBQSFlfSURfWVQ4NTMxCQkweDRmNTFlOTFiCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFTCQkweDRmNTFlOTFhCiAjZGVmaW5lIFBIWV9JRF9ZVDg4MjEJCTB4NGY1MWVhMTkKJiM0MzsjZGVmaW5lIFBIWV9JRF9ZVDg4MjQJCTB4NGY1MWU4YjgKIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlldwogICoJVVRQIFJlZ2lzdGVyIHNwYWNlCXwJRklCRVIgUmVnaXN0ZXIgc3BhY2UKICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMwLDYgJiM0MzszNSwxOCBAQAogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKJiM0MzsvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXcKJiM0MzsgKglVVFAgUmVnaXN0ZXIgc3BhY2UJfAlGSUJFUiBSZWdpc3RlciBzcGFjZQomIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKiB8CVVUUCBNSUkJCQl8CUZJQkVSIE1JSQkgICAgICAgIHwKJiM0MzsgKiB8CVVUUCBNTUQJCQl8CQkJCXwKJiM0MzsgKiB8CVVUUCBFeHRlbmRlZAkJfAlGSUJFUiBFeHRlbmRlZAkJfAomIzQzOyAqIHwJVVRQIFRvcCBFeHRlbmRlZAl8CUZJQkVSIFRvcCBFeHRlbmRlZAl8CiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqIHwJCQlDb21tb24gVG9wIEV4dGVuZGVkCQkJfAomIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKi8KJiM0MzsKIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovCiAKIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KQEAgLTM3Niw2ICYjNDM7MzkzLDE3IEBACiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUkJMAogI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMAkJMQogCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLCQkJQklUKDApCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFCQkoMHgxKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFCQkJKDB4MCkKJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMQkJMHgxCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMCQkweDAKJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVTVF9NT0RFX00JCQlHRU5NQVNLKDE1LCAxMykKJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVTVF9NT0RFKHgpCUZJRUxEX1BSRVAoWVQ4ODI0X1VUUF9URVNUX01PREVfTSwgKHgpKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFCQkJQklUKDEzKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORwkJKDB4NykKJiM0MzsKIHN0cnVjdCB5dDg1MjFfcHJpdiB7CiAJLyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSwKIAkgKiB0aGlzIG1lYW5zIHRoYXQgeXQ4NTIxIG1heSB3b3JrIGluIHV0cCBvciBmaWJlciBtb2RlIHdoaWNoIGRlcGVuZHMKQEAgLTM5NCw2ICYjNDM7NDIyLDEyIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7CiAJdTggcmVnX3BhZ2U7CiB9OwogCiYjNDM7c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiB7CiYjNDM7CXVuc2lnbmVkIGludCBpbnRlcmZhY2VfbW9kZTsKJiM0MzsJLyogc2hhcmVkX2xvY2sgdXNlZCB0byBVVFBzIG9wZXJhdGlvbiBpc29sYXRpb24gZHVyaW5nIHN3YXAgcmVnIHNwYWNlICovCiYjNDM7CXN0cnVjdCBtdXRleCBzaGFyZWRfbG9jazsKJiM0Mzt9OwomIzQzOwogLyoqCiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlcgogICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQpAQCAtNDMyLDYgJiM0Mzs0NjYsNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byB3cml0ZQomIzQzOyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sCiYjNDM7CQkJICAgICAgIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHBhZ2U6IHJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7CiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CXJldCAmYW1wOz0gfllUODgyNF9SU1NSX1NQQUNFX01BU0s7CiYjNDM7CXJldCB8PSAocGFnZSAmYW1wOyBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0KTsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXIKICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKQEAgLTYyMSwxMSAmIzQzOzcxOSwxMDEzIEBAIHN0YXRpYyBpbnQgeXRwaHlfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiAJCXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLAogCQkJCSAgIFlUUEhZX0lFUl9XT0wsIDApOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvCiYjNDM7ICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCXJldHVybiBvbGRfcGFnZTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9sZF9wYWdlICZhbXA7IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHBhZ2U6IFJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CXUxNiBkYXRhOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2xkX3BhZ2U7CiYjNDM7CWRhdGEgPSBvbGRfcGFnZSAmYW1wOyAofllUODgyNF9SU1NSX1NQQUNFX01BU0spOwomIzQzOwlkYXRhIHw9IHBhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogZW5hYmxlIHNkcyBpc29sYXRlICovCiYjNDM7CXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUsIEJNQ1JfSVNPTEFURSk7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJLyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovCiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IFVUUCBzb2Z0cmVzZXQuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi8KJiM0MzsJcmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsCiYjNDM7CQkJCSAgICAgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCiYjNDM7CQkJCSAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBub3JtYWwgdGVzdCBtb2RlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZCgpIC0gZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUKJiM0MzsgKiBhbmQgc2RzIHNvZnRyZXNldC4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIHNkcyBzb2Z0cmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0ZSAqLwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSwKJiM0MzsJCQkgICBCTUNSX1JFU0VUICZhbXA7IH5CTUNSX0lTT0xBVEUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovCiYjNDM7CXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCAmbHQ7IDApIHx8CiYjNDM7CQkJCSEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQk1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXQgPSB2YWw7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJLyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovCiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKCkgLSBjYWxsZWQgdG8gZG8gc3RvcmUgd29ya2luZyBzdGF0dXMKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJldDogb3BlcmF0aW9uJiMzOTtzIHJldHVybiBjb2RlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZXQpCiYjNDM7ewomIzQzOwlpbnQgcjsKJiM0MzsKJiM0MzsJLyogY29uZmlndXJlIG5vcm1hbCB0ZXN0IG1vZGUgKi8KJiM0MzsJciA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwlyID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfc29mdF9yZXNldCgpIC0gY2FsbGVkIHRvIGRvIFBIWSBzb2Z0d2FyZSByZXNldAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogdXRwIHNvZnQgcmVzZXQgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO3JldHJ5OgomIzQzOwlyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHV0cCBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHBvd2VyIGRvd24gKi8KJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBwbGwgY2FsaWJyYXRpb24gKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemF0aW9uIHV0cCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIGVuYWJsZSBuaWJibGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBFTUMgQ1MgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIEVNQyBSRSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogcmVzZXQgKi8KJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSwKJiM0MzsJCQkgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsCiYjNDM7CQkJCSAgICAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlCiYjNDM7CQkocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHNkcyBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTsKJiM0MzsJaW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDsKJiM0MzsJaW50IHJldCA9IC0xOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiByZWFkIGVmdXNlICovCiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwllbHNlCiYjNDM7CQl2YWxfMSA9IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXZhbF8yID0gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZWxzZQomIzQzOwkJdmFsXzMgPSByZXQ7CiYjNDM7CiYjNDM7CS8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGE5LCAweDAwOWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogYW5hbG9nIENEUiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgVkNPICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBQTEwgbG9jayAqLwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEzKSB8IEJJVCgxMikpOwomIzQzOwl0bXAgPSAodmFsXzEgJmFtcDsgKEJJVCg3KSB8IEJJVCg2KSkpICZndDsmZ3Q7IDY7CiYjNDM7CXJldCB8PSAodG1wICZsdDsmbHQ7IDEyKTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDI5LCByZXQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ICZhbXA7PSB+KEJJVCgxKSB8IEJJVCgwKSk7CiYjNDM7CXRtcCA9ICh2YWxfMSAmYW1wOyAoQklUKDUpIHwgQklUKDQpKSkgJmd0OyZndDsgNDsKJiM0MzsJcmV0IHw9IHRtcDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ICZhbXA7PSB+KEJJVCgxMykgfCBCSVQoMTIpKTsKJiM0MzsJdG1wID0gKHZhbF8zICZhbXA7IChCSVQoMSkgfCBCSVQoMCkpKTsKJiM0MzsJcmV0IHw9ICh0bXAgJmx0OyZsdDsgMTIpOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDU0LCAweDBmMTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogU2VyZGVzIExETyAqLwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTsKJiM0MzsJdG1wID0gKHZhbF8yICZhbXA7IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSAmZ3Q7Jmd0OyAyOwomIzQzOwlyZXQgfD0gKHRtcCAmbHQ7Jmx0OyA0KTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ICZhbXA7PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpOwomIzQzOwl0bXAgPSAodmFsXzIgJmFtcDsgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpICZndDsmZ3Q7IDU7CiYjNDM7CXJldCB8PSAodG1wICZsdDsmbHQ7IDgpOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBTZXJkZXMgVFggKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogcmVzdGFydCBjYWxpYnJhdGlvbiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyAmZ3Q7IDggKi8KJiM0MzsJcmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9SRVNWMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgJmFtcDs9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7CiYjNDM7CXJldCB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HOwomIzQzOwlyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfUkVTVjEsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiByZXNldCBzZXJkZXMgKi8KJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLAomIzQzOwkJCSAgIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jazsgX19waHlfcmVhZCB0YWtlcyBubyBsb2NrICovCiYjNDM7CXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCAmbHQ7IDApIHx8CiYjNDM7CQkJCSEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQk1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXQgPSB2YWw7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJLyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovCiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdAomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHBvd2VyIGRvd24gKi8KJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweGNiYSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4YTAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGUwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzZDAsIDB4NTIxMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzcyLCAweDUwMzgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YywgMHg2MDY4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzODgsIDB4YTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM1OSwgMHgyMTQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiAyLjVHIHRlbXBhdGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzQwLCAweDMwMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIDEwMDAgcGVyZm9ybWFuY2UgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzRhLCAweGZmMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGY4LCAweGIzZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyYywgMHg1MDk0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJlLCAweDUzMDgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyMiwgMHg2NDQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQyLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIDEwMCB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMGIsIDB4YWExZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NzFmLCAweDM2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiAxMCB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YiwgMHgxODE4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogMTAgdGVtcGF0ZSBNQVUqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY3LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogRU1DIENTLCBJbmNvbnNpc3RlbnQgd2l0aCBleHRlcm5hbCBwaHkgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YzgsIDB4ZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhiZSwgMHg2NDA2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogRU1DIFJFKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgyLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjLCAweDQxYTEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiByZXNldCAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLAomIzQzOwkJCSBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZQomIzQzOwkJKHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfaW5pdCgpIC0gcGh5IGluaXRpYWxpemF0aW9pbgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJcmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJCXJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKIAl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTsKIAotZXJyX3Jlc3RvcmVfcGFnZToKLQlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzOwlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDslcyBkb25lLCBwaHkgYWRkcjogJWRcbiYjMzQ7LAomIzQzOwkJICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MztlcnI6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LApAQCAtMzA3Miw2ICYjNDM7NDE3Miw0MTMgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJcmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJcmV0ID0geXQ4ODIxX2dldF9mZWF0dXJlcyhwaHlkZXYpOwomIzQzOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogbGluayBzdGF0dXMgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCBsaW5rID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CWxpbmsgPSAhIShyZXQgJmFtcDsgWVRQSFlfU1NSX0xJTkspOwomIzQzOwomIzQzOwlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDslcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcbiYjMzQ7LAomIzQzOwkJICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyLCBsaW5rKTsKJiM0MzsJcmV0dXJuIGxpbms7CiYjNDM7ZXJyOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZCgpIC0gIGRldGVybWluZXMgdGhlIHNwZWVkIGFuZCBkdXBsZXggb2Ygb25lIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IGxpbmsgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9yZWFkX3N0YXR1cyhwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2F1dG9uZWdfY29tcGxldGUpIHsKJiM0MzsJCXJldCA9IGdlbnBoeV9jNDVfcmVhZF9scGEocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwl2YWwgPSByZXQ7CiYjNDM7CiYjNDM7CWxpbmsgPSB2YWwgJmFtcDsgWVRQSFlfU1NSX0xJTks7CiYjNDM7CWlmIChsaW5rKQomIzQzOwkJeXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpOwomIzQzOwomIzQzOwlpZiAobGluaykgewomIzQzOwkJaWYgKHBoeWRldi0mZ3Q7bGluayA9PSAwKQomIzQzOwkJCXBoeWRldl9kYmcocGh5ZGV2LAomIzQzOwkJCQkgICAmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmsgdXBcbiYjMzQ7LAomIzQzOwkJCQkgICBfX2Z1bmNfXywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwkJcGh5ZGV2LSZndDtsaW5rID0gMTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChwaHlkZXYtJmd0O2xpbmsgPT0gMSkKJiM0MzsJCQlwaHlkZXZfZGJnKHBoeWRldiwKJiM0MzsJCQkJICAgJiMzNDslcywgcGh5IGFkZHI6ICVkLCBsaW5rIGRvd25cbiYjMzQ7LAomIzQzOwkJCQkgICBfX2Z1bmNfXywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwkJcGh5ZGV2LSZndDtsaW5rID0gMDsKJiM0MzsJfQomIzQzOwlwaHlfcmVzb2x2ZV9hbmVnX3BhdXNlKHBoeWRldik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXgKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXQKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQkvKiB1dHAgcG93ZXIgb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBzZHMgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiB1dHAgcG93ZXIgb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztyZXRyeToKJiM0MzsJcmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHl0ODgyNF9wb3dlcl9vbihwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wb3dlcl9kb3duKCkgIC0gc2V0IHV0cCBwb3dlciBkb3duLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXQKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJCS8qIHV0cCBwb3dlciBkb3duICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBzZHMgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiB1dHAgcG93ZXIgZG93biAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7cmV0cnk6CiYjNDM7CXJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcGh5X2N0cmwgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsCiYjNDM7CQkJICAgICAgcGh5ZGV2LSZndDthZHZlcnRpc2luZykpCiYjNDM7CQlwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sCiYjNDM7CQkJCSAgICAgTURJT19BTl8xMEdCVF9DVFJMLAomIzQzOwkJCQkgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLAomIzQzOwkJCQkgICAgIHBoeV9jdHJsKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJcmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpOwomIzQzOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2tldCBmb3IgcGh5ODgyNC4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7CiYjNDM7CWNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqLwomIzQzOwltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDsKJiM0MzsJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgJiMzNDttb3RvcmNvbW0saW50ZXJmYWNlLW1vZGUmIzM0OywKJiM0MzsJCQkJICAgICAmYW1wO2ludGVyZmFjZV9tb2RlX25hbWUpKSB7CiYjNDM7CQlpZiAoIXN0cmNhc2VjbXAoaW50ZXJmYWNlX21vZGVfbmFtZSwKJiM0MzsJCQkJcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSkpIHsKJiM0MzsJCQlwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJOwomIzQzOwkJfSBlbHNlIGlmICghc3RyY2FzZWNtcAomIzQzOwkJCQkoaW50ZXJmYWNlX21vZGVfbmFtZSwKJiM0MzsJCQkJIHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkgewomIzQzOwkJCXByaXYtJmd0O2ludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGRlZmF1bHQgaW50ZXJuYWwgcGh5ICovCiYjNDM7CQlwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Byb2JlKCkgLSBwaHk4ODI0IHByb2JlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHsKJiM0MzsJCXJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0gewogCXsKIAkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLApAQCAtMzE1OCwxMyAmIzQzOzQ2NjUsMjkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0gewogCQkuc3VzcGVuZAkJPSB5dDg4MjFfc3VzcGVuZCwKIAkJLnJlc3VtZQkJCT0geXQ4ODIxX3Jlc3VtZSwKIAl9LAomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksCiYjNDM7CQkubmFtZQkJCT0gJiMzNDtZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0JiMzNDssCiYjNDM7CQkuZ2V0X2ZlYXR1cmVzCQk9IHl0ODgyNF9nZXRfZmVhdHVyZXMsCiYjNDM7CQkucmVhZF9wYWdlCQk9IHl0ODgyNF9yZWFkX3BhZ2UsCiYjNDM7CQkud3JpdGVfcGFnZQkJPSB5dDg4MjRfd3JpdGVfcGFnZSwKJiM0MzsJCS5wcm9iZQkJICAgICAgICA9IHl0ODgyNF9wcm9iZSwKJiM0MzsJCS5jb25maWdfYW5lZwkJPSB5dDg4MjRfY29uZmlnX2FuZWcsCiYjNDM7CQkuYW5lZ19kb25lCQk9IHl0ODgyNF9hbmVnX2RvbmUsCiYjNDM7CQkuY29uZmlnX2luaXQJCT0geXQ4ODI0X2NvbmZpZ19pbml0LAomIzQzOwkJLnJlYWRfc3RhdHVzCQk9IHl0ODgyNF9yZWFkX3N0YXR1cywKJiM0MzsJCS5zb2Z0X3Jlc2V0CQk9IHl0ODgyNF9zb2Z0X3Jlc2V0LAomIzQzOwkJLnN1c3BlbmQJCT0geXQ4ODI0X3N1c3BlbmQsCiYjNDM7CQkucmVzdW1lCQkJPSB5dDg4MjRfcmVzdW1lLAomIzQzOwl9LAogfTsKIAogbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXImIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7UGV0ZXIgR2VpcyYjMzQ7KTsKIE1PRFVMRV9BVVRIT1IoJiMzNDtGcmFuayYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7S3lsZSYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHsKQEAgLTMxNzQsNiAmIzQzOzQ2OTcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHsKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LAogCXsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LAogCXsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sCiYjNDM7CXsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwppbmRleCA4NzA5MjAzMTFmOWEwLi44Nzk4MTdmZTM4YzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKQEAgLTE0MDgsNiAmIzQzOzE0MDgsNjEgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pOwogCiYjNDM7LyoqCiYjNDM7ICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnMKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBOb3JtYWwgdG8gVGVzdCBtb2RlIDcKJiM0MzsgKgomIzQzOyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBOb3JtYWwgdG8gVGVzdCBtb2RlIDcKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiByZWdpc3RlcgomIzQzOyAqCXJlYWQvd3JpdGUgZXJyb3IpLgomIzQzOyAqLwomIzQzO2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpCiYjNDM7ewomIzQzOwlpbnQgY3RybCA9IDA7CiYjNDM7CiYjNDM7CXN3aXRjaCAodGVzdF9tb2RlKSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUw7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSAxOgomIzQzOwkJY3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzE7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSAyOgomIzQzOwkJY3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzI7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSAzOgomIzQzOwkJY3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzM7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSA0OgomIzQzOwkJY3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzQ7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSA1OgomIzQzOwkJY3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzU7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSA2OgomIzQzOwkJY3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzY7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSA3OgomIzQzOwkJY3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzc7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlRfVEVTVE1PREUsCiYjNDM7CQkJICAgICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfVEVNUExBVEUsIGN0cmwpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTsKJiM0MzsKIC8qKgogICogZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcgLSBnZXQgUExDQSBjb25maWd1cmF0aW9uIGZyb20gc3RhbmRhcmQgcmVnaXN0ZXJzCiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDVmOGQ2NTg2OGUwZmYuLmRhNDgyZTg0MzFhMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjMzOSw2ICYjNDM7MjMzOSw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpOwogaW50IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTsKJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTsKIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCQkJICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTsKIGludCBnZW5waHlfYzQ1X3BsY2Ffc2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKaW5kZXggMDZmNGJjM2MyMGM3MS4uZmUzMzliMTdlOTgyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oCkBAIC02Myw2ICYjNDM7NjMsNyBAQAogLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU1dBUFBPTAkxMzAJLyogMTBHQkFTRS1UIHBhaXIgc3dhcCAmYW1wOyBwb2xhcml0eSAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCVF9UWFBXUgkxMzEJLyogMTBHQkFTRS1UIFRYIHBvd2VyIGNvbnRyb2wgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMgkvKiBUZXN0IG1vZGUgY29udHJvbCAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlIJMTMzCS8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuCiAJCQkJCSAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1IJMTQ3CS8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovCkBAIC0zMjAsNiAmIzQzOzMyMSwxNyBAQAogLyogUE1BIDEwR0JBU0UtUiBGYXN0IFJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyLiAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRQkweDAwMDEJLyogRmFzdCByZXRyYWluIGVuYWJsZSAqLwogCiYjNDM7LyogUE1BIDEwR0JBU0UtUi8tVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfVEVNUExBVEUgMHhFMDAwIC8qIFRlbXBsYXRlIHRlc3QgbW9kZSAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMIDB4MDAwMCAvKiBUZW1wbGF0ZSBOb3JtYWwgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEgMHgyMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMSAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMiAweDQwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUyICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zIDB4NjAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTMgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzQgMHg4MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNCAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNSAweGEwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU1ICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82IDB4YzAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTYgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzcgMHhlMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNyAqLwomIzQzOwogLyogUENTIDEwR0JBU0UtUi8tVCBzdGF0dXMgcmVnaXN0ZXIgMS4gKi8KICNkZWZpbmUgTURJT19QQ1NfMTBHQlJUX1NUQVQxX0JMS0xLCTB4MDAwMQkvKiBCbG9jayBsb2NrIGF0dGFpbmVkICovCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2OTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBUZXN0aW5nIFRoaXMgUEhZIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIgYW5kIGEgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgIGZ1bmN0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRlc3QgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIGEgUEhZIGRyaXZlciwgd2hpY2ggbWVhbnMgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgaW5oZXJlbnRseSB0aWVkIHRvIGhhcmR3YXJlLiBUaGUgbW9zdCBkaXJlY3QgcGF0aCBpcyB3aGVuIHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50LCBidXQgd2UgbmVlZCB0byBjb25zaWRlciBlbXVsYXRpb24uCgpDYW4gd2UgcHJvYmUgdGhlIGRyaXZlciB2aWEgdGhlIE1ESU8gYnVzPyBEZWZpbml0ZWx5LiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGhvdyBkbyB3ZSBlbXVsYXRlIGFuIE1ESU8gZGV2aWNlPyBTeXprYWxsZXIgY29tZXMgdG8gbWluZCwgYnV0IGl0cyBNRElPIGZ1enppbmcgY2FwYWJpbGl0aWVzIGFyZSBsaW1pdGVkOyBnZW5lcmFsbHksIE1ESU8gaXMgZnV6emVkIHdpdGggYG1kaW9gIGJ1cyBvciBgbmV0bGlua2Agb3IgYGlvY3RsYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIHVzdWFsbHkgcmVhY2hlZCB2aWEgYG1hYzgwMjExX2h3c2ltYCBvciBgdHVuYC9gdGFwYCwgYnV0IEkmIzM5O20gcHJvYmFibHkgd3JvbmcuIEFjdHVhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXJlIGlzbiYjMzk7dCBhICpnZW5lcmljKiBNRElPIGZ1enplciBpbiBTeXprYWxsZXIsIGJ1dCB3ZSBtaWdodCBiZSBhYmxlIHRvIHJlYWNoIHRoZSBQSFkgZHJpdmVyIHVzaW5nIGBTSU9DU01JSVJFR2AgYW5kIGBTSU9DR01JSVJFR2AgaW9jdGxzIGlmIGEgbmV0ZGV2aWNlIGhhcyBhIFBIWSBhdHRhY2hlZC4KCkFoYSEgQ2FuIHdlIGF0dGFjaCBhIHNwZWNpZmljIFBIWSB0byBhIGR1bW15IG5ldGRldmljZSBvciB2ZXRoIGludGVyZmFjZT8gVGhhdCYjMzk7cyBhIGdvb2QgYW5nbGUgdG8gcHVyc3VlLiBUeXBpY2FsbHksIHRoZSBkcml2ZXIgcHJvYmVzIHdoZW4gYW4gTURJTyBidXMgaXMgcmVnaXN0ZXJlZCBhbmQgc2NhbnMgZm9yIFBIWXMuIFNvLCBpcyB0aGVyZSBhIHZpcnR1YWwgTURJTyBidXMgd2UgY2FuIGxldmVyYWdlIHdpdGhpbiB0aGUga2VybmVsPwoKTGV0IG1lIGNoZWNrLiBQZXJoYXBzIGBkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyIG1pZ2h0IGFsbG93IG1lIHRvIHJlZ2lzdGVyIGFyYml0cmFyeSBQSFlzLiBPciwgbWF5YmUgYG1kaW8tbW9ja3VwLmNgIG9yIGBtZGlvLWJjbS11bmltYWMuY2AgcHJvdmlkZSBjbHVlcz8gTGV0JiMzOTtzIHNlYXJjaCBmb3IgJiMzNDtNRElPIG1vY2t1cCYjMzQ7IG9yIHNpbWlsYXIgdGVybXMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpby4qbW9ja3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQ3MAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1ESU8gQnVzIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHdlJiMzOTtyZSBldmVuIGRlYWxpbmcgd2l0aCBhIHZpcnR1YWwgTURJTyBidXMgaGVyZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBpbml0aWFsIHN0ZXAuIFdlJiMzOTt2ZSBnb3QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsZXZlbCBwcmVzZW50cyBhbiBlbXVsYXRlZCBvciBzaW11bGF0ZWQgTURJTyBpbnRlcmZhY2UuIFRoaXMgaGFzIGEgbWFzc2l2ZSBpbXBhY3Qgb24gZGVidWdnaW5nLCBwZXJmb3JtYW5jZSBleHBlY3RhdGlvbnMsIGFuZCB0aGUgb3ZlcmFsbCBhcHByb2FjaCBJJiMzOTtsbCB0YWtlLiBBIHZpcnR1YWwgYnVzIGltcGxpZXMgYSBkaWZmZXJlbnQgc2V0IG9mIGRlYnVnZ2luZyB0b29scyBhbmQgcG90ZW50aWFsbHkgaW50cm9kdWNlcyBsYXRlbmN5IHRoYXQgaXNuJiMzOTt0IHByZXNlbnQgaW4gYSBwaHlzaWNhbCBpbXBsZW1lbnRhdGlvbi4gU28sIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhlIHR5cGUgb2YgTURJTyBidXMsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCB0byBpbmZvcm0gbXkgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKmR1bW15JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY2OQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkRlbHZpbmcgaW50byB0aGUgTmV0d29yayBQSFkgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIFBIWSBjb25maWd1cmF0aW9uLiBXaGVyZSYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nPyBXZWxsLCBnaXZlbiB0aGUgZmlsZSBwYXRocyBJJiMzOTttIHRoaW5raW5nIGFib3V0LCBgZHJpdmVycy9uZXQvcGh5L0tjb25maWdgIGFuZCBgZHJpdmVycy9uZXQvbWRpby9LY29uZmlnYCBhcmUgdGhlIG9idmlvdXMgY2FuZGlkYXRlcy4gVGhlc2UgYEtjb25maWdgIGZpbGVzIGFyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciBmb3IgYW55IHNlcmlvdXMga2VybmVsIGRldmVsb3Blci4gVGhleSBkZWZpbmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFBIWSBkcml2ZXJzIGFuZCB0aGUgTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgaW50ZXJmYWNlLCByZXNwZWN0aXZlbHkuIFRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQgSSBuZWVkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZXhhbWluaW5nIHRob3NlIGZpbGVzIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQsIGFzIHRoZSBrZXkgdG8gbXkgc29sdXRpb24gd2lsbCBtb3N0IGxpa2VseSBiZSBzaXR1YXRlZCB3aXRoaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2FjcGlfbWRpby5jJiMzNDssCiAgICAmIzM0O2Z3bm9kZV9tZGlvLmMmIzM0OywKICAgICYjMzQ7bWRpby1haXJvaGEuYyYjMzQ7LAogICAgJiMzNDttZGlvLWFzcGVlZC5jJiMzNDssCiAgICAmIzM0O21kaW8tYmNtLWlwcm9jLmMmIzM0OywKICAgICYjMzQ7bWRpby1iY20tdW5pbWFjLmMmIzM0OywKICAgICYjMzQ7bWRpby1iaXRiYW5nLmMmIzM0OywKICAgICYjMzQ7bWRpby1jYXZpdW0uYyYjMzQ7LAogICAgJiMzNDttZGlvLWNhdml1bS5oJiMzNDssCiAgICAmIzM0O21kaW8tZ3Bpby5jJiMzNDssCiAgICAmIzM0O21kaW8taGlzaS1mZW1hYy5jJiMzNDssCiAgICAmIzM0O21kaW8taTJjLmMmIzM0OywKICAgICYjMzQ7bWRpby1pcHE0MDE5LmMmIzM0OywKICAgICYjMzQ7bWRpby1pcHE4MDY0LmMmIzM0OywKICAgICYjMzQ7bWRpby1tb3hhcnQuYyYjMzQ7LAogICAgJiMzNDttZGlvLW1zY2MtbWlpbS5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LWJjbS1pcHJvYy5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LWJjbTYzNjguYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1ncGlvLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtbWVzb24tZzEyYS5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LW1lc29uLWd4bC5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LW1taW9yZWcuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1tdWx0aXBsZXhlci5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LmMmIzM0OywKICAgICYjMzQ7bWRpby1tdnVzYi5jJiMzNDssCiAgICAmIzM0O21kaW8tb2N0ZW9uLmMmIzM0OywKICAgICYjMzQ7bWRpby1waWM2NGhwc2MuYyYjMzQ7LAogICAgJiMzNDttZGlvLXJlYWx0ZWstcnRsOTMwMC5jJiMzNDssCiAgICAmIzM0O21kaW8tcmVnbWFwLmMmIzM0OywKICAgICYjMzQ7bWRpby1zdW40aS5jJiMzNDssCiAgICAmIzM0O21kaW8tdGh1bmRlci5jJiMzNDssCiAgICAmIzM0O21kaW8teGdlbmUuYyYjMzQ7LAogICAgJiMzNDtvZl9tZGlvLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Mjg4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4cGxvcmluZyBVc2Vyc3BhY2UgQ29udHJvbCBvZiBQSFkgRHJpdmVycyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBpcyB0aGVyZSBhIHdheSB0byBhY3R1YWxseSBpbnRlcmFjdCB3aXRoIFBIWSBkcml2ZXJzIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlPyBUaGUgdHlwaWNhbCByb3V0ZSBJJiMzOTttIGF3YXJlIG9mIGludm9sdmVzIHVzaW5nIGBpb2N0bGAgb24gYSBuZXQgZGV2aWNlIHdpdGggYSBQSFksIHNwZWNpZmljYWxseSB0aGUgYFNJT0NTTUlJUkVHYCBjYWxsIHdpdGggYG1paV9kYXRhYC4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0LiBCdXQgdG8gZ2V0IHRvIHRoZSBjb3JlLCB0byBzb21ldGhpbmcgbGlrZSwgc2F5LCBgeXQ4ODI0X3Byb2JlYCwgdGhlIFBIWSBkcml2ZXIgbmVlZHMgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gcHJvYmVkIGFuZCBhdHRhY2hlZCB0byB0aGUgbmV0IGRldmljZSBpbiB0aGUga2VybmVsIHNwYWNlLgoKU28sIGNhbiBJICppbnN0YW50aWF0ZSogYSBQSFkgZHJpdmVyIGZyb20gdXNlcnNwYWNlPyBNeSBpbnR1aXRpb24gaXMgbGVhbmluZyB0b3dhcmRzIHRoZSBpZGVhIHRoYXQgaXQgbWlnaHQgYmUgcG9zc2libGUsIGluIGEgc2ltaWxhciB3YXkgdG8gaG93IEkgY2FuIGRlYWwgd2l0aCBJMkMgYW5kIFNQSSBkZXZpY2VzIHRocm91Z2ggc3lzZnMsIHVzaW5nIGBuZXdfZGV2aWNlYC4gVGhhdCB1c3VhbGx5IHdvcmtzLCBhbmQgaXMgYSByZWFsbHkgY2xlYW4gaW50ZXJmYWNlIGZvciB1c2Vyc3BhY2UgY29udHJvbCwgaW4gYSBsb3Qgb2YgYXJjaGl0ZWN0dXJlcy4gTm93LCB0aGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIE1ESU8gZGV2aWNlcywgc3BlY2lmaWNhbGx5LCBiZSBpbnN0YW50aWF0ZWQgdmlhIHN5c2ZzLCB0b28/IEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSB0byBjaGVjayBpZiB0aGUgTURJTyBidXMgc3VwcG9ydHMgdGhlIGBuZXdfZGV2aWNlYCBtZWNoYW5pc20uIFRoYXQmIzM5O3MgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXdfZGV2aWNlLiptZGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2ODgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgTURJTyBCdXMgRHJpdmVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4sIGdpdmVuIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gdHJvdWJsZXNob290LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBNRElPIGJ1cyBjb2RlIC0gaXQmIzM5O3MgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIG1hbmFnaW5nIHRoZSBQSFkgZGV2aWNlcyBvbiBvdXIgbmV0d29yayBpbnRlcmZhY2VzLCBzbyBhbnkgaXNzdWVzIHRoZXJlIGNvdWxkIG1hbmlmZXN0IGluIGEgdmFyaWV0eSBvZiBzeW1wdG9tcy4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyB3aGF0LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGluZ3MgYXJlIGluaXRpYWxpemVkLCBob3cgdGhlIGJ1cyBvcGVyYXRpb25zIGFyZSBoYW5kbGVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHJlZCBmbGFncyBpbiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIG9yIGVycm9yIHJlY292ZXJ5IHJvdXRpbmVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgY29yZSBsYXllciBpcyBnb2luZyB0byBiZSBrZXkgdG8gZGlhZ25vc2luZyB0aGUgdW5kZXJseWluZyBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ld19kZXZpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbWRpb19idXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTMzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1ESU8gRGV2aWNlIFByb2JpbmcgUXVhbmRhcnkqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlc2UgTURJTyBkZXZpY2VzIHR5cGljYWxseSBnZXQgZGlzY292ZXJlZCBpbiB0aGUgc3lzdGVtLiBEZXZpY2UgdHJlZSBhbmQgQUNQSSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCBhbmQgdGhlbiB0aGVyZSYjMzk7cyB0aGUgbW9yZSBkaXJlY3QgbWV0aG9kIG9mIHNjYW5uaW5nIHRoZSBNRElPIGJ1cyBpdHNlbGYuIFRoZSBjcnV4IG9mIHRoZSBpc3N1ZSBpcywgaWYgd2UgKmRvbiYjMzk7dCogaGF2ZSBhIGJvbmEgZmlkZSBNRElPIGJ1cyBpbiB0aGUgcGljdHVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGlzIHNwZWNpZmljIFBIWSBJRCDigJMgYDB4NGY1MWU4YjhgIOKAkyB3aWxsIHRoZSBjb3JyZXNwb25kaW5nIFBIWSBkcml2ZXIgZXZlbiAqZ2V0KiBwcm9iZWQ/IFRoYXQmIzM5O3MgdGhlIGNvcmUgcXVlc3Rpb24uCgpJIHN0YXJ0IHRvIGNvbnNpZGVyIG90aGVyIHBvdGVudGlhbCBwcm9iaW5nIG1lY2hhbmlzbXMuIFN5emthbGxlciBzcHJpbmdzIHRvIG1pbmQsIHdpdGggaXRzIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgIGFuZCBvdGhlciBzeXNjYWxscy4gQnV0IGZvciBNRElPIHNwZWNpZmljYWxseSwgSSYjMzk7bSBkcmF3aW5nIGEgYmxhbmsuIE1heWJlIGl0IGxldmVyYWdlcyBzb21ldGhpbmcgbGlrZSBgdmhjaWAgb3IgYG1hYzgwMjExX2h3c2ltYD8gTm8sIHRob3NlIGFyZSBkZWZpbml0ZWx5IGZvciBVU0IgYW5kIFdpRmksIHJlc3BlY3RpdmVseS4gVGhhdCYjMzk7cyBhIHJlZCBoZXJyaW5nLiBUaGVuIEkgdGhpbms6IHdoYXQgYWJvdXQgYG5ldGRldnNpbWA/IERvZXMgdGhhdCBoYXZlIGFuIE1ESU8gYnVzIGVtdWxhdGlvbiBjYXBhYmlsaXR5PyBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGF0IHBvc3NpYmlsaXR5LiBJdCYjMzk7cyBhIHBsYXVzaWJsZSBhdmVudWUgdGhhdCBuZWVkcyBleHBsb3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzNjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeHBsb3JpbmcgVmlydHVhbCBOZXR3b3JrIEludGVyZmFjZXMgYW5kIFBIWSBBdHRhY2htZW50KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgUGh5c2ljYWwgTGF5ZXIgKFBIWSkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIHZpcnR1YWwgZHJpdmVyIHRoYXQgYWN0cyBhcyBhIGJyaWRnZSwgYWxsb3dpbmcgbWUgdG8gYXR0YWNoIGFyYml0cmFyeSBQSFkgaW1wbGVtZW50YXRpb25zLgoKUmlnaHQsIHNvIGxldCYjMzk7cyB3YWxrIHRocm91Z2ggc29tZSBvcHRpb25zLiBUaGlua2luZyBhYm91dCBgZHVtbXlgLi4uIG5vcGUsIGl0IGRvZXNuJiMzOTt0IGhhdmUgYSBQSFkuIE1vdmluZyBvbiB0byBgdmV0aGAuLi4gc3RpbGwgbm8gUEhZLiBBbmQgd2hhdCBhYm91dCBgdHVuYC9gdGFwYD8gTm9wZSwgc2FtZSBzdG9yeS4gVGhleSYjMzk7cmUgbW9yZSBhYm91dCB0dW5uZWxpbmcuCgpTbywgdGhlIHJlYWwgcXVlc3Rpb24gaXM6IElzIHRoZXJlICphbnl0aGluZyogdmlydHVhbCBvdXQgdGhlcmUgdGhhdCAqZG9lcyogcmVnaXN0ZXIgYW4gTURJTyBidXM/IEFuZCBvbiB0aGF0IE1ESU8gYnVzLCBjYW4gSSB0aGVuIGF0dGFjaCBzb21lIGNvbXBsZXRlbHkgc2VwYXJhdGUsIGFyYml0cmFyeSBQSFk/IEkmIzM5O20gcGljdHVyaW5nIGEgdmlydHVhbCBkZXZpY2Ugd2hlcmUgSSBjYW4gY29uZmlndXJlIHRoZSBQSFkgaW1wbGVtZW50YXRpb24gaW5kZXBlbmRlbnRseS4KCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBgZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jYC4gVGhpcyBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSB0byBwcm92aWRlIGEgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IFBIWXMgYXJlIGF0dGFjaGVkIGFuZCBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgc2hlZHMgc29tZSBsaWdodCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zml4ZWRfcGh5X3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQ4Mj1zdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkxLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX0ZJWEVEX1BIWVM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDkyOlx0XHRwaHlkZXZzW2ldID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjczOlx0XHRwaHlkZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQoKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNzQtXHRcdGlmICghSVNfRVJSKHBoeWRldikpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYz0xNDM5PWludCBiZ21hY19waHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IGJnbWFjICpiZ21hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jLTE0NDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jOjE0NDk6XHRwaHlfZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyKFx1MDAyNmZwaHlfc3RhdHVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ1MC1cdGlmIChJU19FUlIocGh5X2RldikpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE4NDg9c3RhdGljIGludCBmdGdtYWMxMDBfcHJvYmVfbmNzaShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg2Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTg2NzpcdHBoeWRldiA9IGZpeGVkX3BoeV9yZWdpc3RlcihcdTAwMjZuY3NpX3BoeV9zdGF0dXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg2OC1cdGlmIChJU19FUlIocGh5ZGV2KSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTI5ODE9c3RhdGljIGludCBmZWNfZW5ldF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAwMi1cdFx0XHRuZXRkZXZfaW5mbyhuZGV2LCBcJiMzNDtubyBQSFksIGFzc3VtaW5nIGRpcmVjdCBjb25uZWN0aW9uIHRvIHN3aXRjaFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzozMDAzOlx0XHRcdHBoeV9kZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQoKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMwMDQtXHRcdFx0aWYgKElTX0VSUihwaHlfZGV2KSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjM4PXN0YXRpYyBpbnQgaGJnX2ZpeGVkX3BoeV9pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjUxOlx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyKFx1MDAyNmhiZ19maXhlZF9waHlfc3RhdHVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjUyLVx0aWYgKElTX0VSUihwaHlkZXYpKSB7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9NDEyPWludCBvZl9waHlfcmVnaXN0ZXJfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ1OS1yZWdpc3Rlcl9waHk6XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzo0NjA6XHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGZpeGVkX3BoeV9yZWdpc3RlcihcdTAwMjZzdGF0dXMsIG5wKSk7XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00NjEtfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz0xMTg9c3RhdGljIGludCBmaXhlZF9waHlfZ2V0X2ZyZWVfYWRkcih2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzAtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTMxOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXR1cyxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzItXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzItfVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3MzpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3NC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNzU6c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCh2b2lkKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Ni17XG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4MS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODI6XHRyZXR1cm4gZml4ZWRfcGh5X3JlZ2lzdGVyKFx1MDAyNnN0YXR1cywgTlVMTCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgzLX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODQ6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODUtXG4tLVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0xOT1leHRlcm4gaW50IGZpeGVkX3BoeV9jaGFuZ2VfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5ld19jYXJyaWVyKTtcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MjA6c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yMS1cdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApO1xuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyMjpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpO1xuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yMy1cbi0tXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oPTI5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKlxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDozMDpmaXhlZF9waHlfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXR1cyxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzEtXHRcdCAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0zNS1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MzY6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTM3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzNjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZpeGVkIFBIWXMgaGVyZSwgdGhvc2UgcmVnaXN0ZXJlZCB3aXRoIHRoZSBgZml4ZWRfcGh5YCBkcml2ZXIgc3BlY2lmaWNhbGx5LCBub3QganVzdCBhbnkgUEhZIGRyaXZlci4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUmIzM5O3MgYSB3YXkgdG8gZm9yY2UgdGhlIHN5c3RlbSB0byBpbnN0YW50aWF0ZSBhICpwYXJ0aWN1bGFyKiBQSFkgZHJpdmVyLCBhcyBvcHBvc2VkIHRvIGxldHRpbmcgdGhlIHN5c3RlbSBhdXRvLWRldGVjdC4gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gc3BlY2lmeSBvciBjb250cm9sIHRoYXQgZHJpdmVyIGluc3RhbnRpYXRpb24uCgpUaGVuIEkgcGF1c2VkIOKAkyB3YWl0LCBjb3VsZCBJIHNvbWVob3cgaW5qZWN0IGEgZGV2aWNlIHRyZWUgbm9kZT8gSSBzZWVtIHRvIHJlbWVtYmVyIGBzeXprYWxsZXJgIGhhdmluZyB0aGUgY2FwYWJpbGl0eSB2aWEgc29tZXRoaW5nIGxpa2UgYHN5el9pbml0X25ldF9zb2NrZXRgLi4uIGJ1dCBubywgdGhhdCYjMzk7cyBub3QgcmlnaHQuIEF0IGxlYXN0LCBub3Qgb24geDg2LCBpdCBkb2VzbiYjMzk7dCBkbyBkeW5hbWljIGRldmljZSB0cmVlIGluamVjdGlvbi4KCkJ1dCBob2xkIG9uLCBkaWRu4oCZdCBJIHNlZSBzeXprYWxsZXIgZnV6emluZyBVU0IgZGV2aWNlcyB1c2luZyBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGA/IFRoYXQmIzM5O3MgYSBnb29kIGFwcHJvYWNoIHRvIGNyZWF0ZSBzcGVjaWFsaXplZCB0YXJnZXRzLgoKSG1tLCBzbyBpZiBpdCBoYW5kbGVzIFVTQiwgcGVyaGFwcyBpdCBhbHNvIGZ1enplcyBNRElPIGRldmljZXM/IFRoYXQmIzM5O3MgdGhlIG5leHQgYXZlbnVlIHRvIGV4cGxvcmUuIEkmIzM5O2QgYmV0dGVyIGNoZWNrIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBNRElPLXJlbGF0ZWQgZGVzY3JpcHRpb25zIHdpdGhpbiBzeXprYWxsZXImIzM5O3MgZGVmaW5pdGlvbnMuIFRoYXQgd291bGQgYmUgdGhlIGVhc2llc3Qgd2F5IHRvIGZpZ3VyZSBpdCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgwMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIFN5emthbGxlciBhbmQgTURJTyBEZXNjcmlwdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHNlZSBpZiBzeXprYWxsZXIgaGFzIGFueSBwcmUtZGVmaW5lZCBNRElPIGRlc2NyaXB0aW9ucyBsdXJraW5nIHdpdGhpbiBpdHMga2VybmVsIGludGVncmF0aW9uLiBUaGlzIGlzIGFuIGltcG9ydGFudCBzdGVwIGluIGFzc2Vzc2luZyBpdHMgcG90ZW50aWFsIGZvciBmdXp6aW5nIE1ESU8tcmVsYXRlZCBkcml2ZXJzIGFuZCBzdWJzeXN0ZW1zLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBNRElPIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCwgdGhhdCB0ZWxscyBtZSBzeXprYWxsZXIgaGFzIHNvbWUgZXhpc3RpbmcgYXdhcmVuZXNzIG9mIHRoZSBpbnRlcmZhY2UgYW5kIGl0cyBhc3NvY2lhdGVkIHZ1bG5lcmFiaWxpdGllcywgb3IgdGhhdCBzb21lb25lIGhhcyBhZGRlZCB0aGVtIGluLiBUaGlzIGlzIHZhbHVhYmxlLiBJdCBtaWdodCBtZWFuIEkgY2FuIGxldmVyYWdlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlLCBvciBhdCBsZWFzdCBsZWFybiBmcm9tIGhvdyBvdGhlcnMgaGF2ZSBhcHByb2FjaGVkIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHNlYXJjaCBtZXRob2RvbG9neSB0byBxdWlja2x5IHBpbnBvaW50IGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBkZWZpbml0aW9ucyB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaW1lIHRvIGdldCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kdW1teS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwMjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIE1vY2tpbmcgYSBQSFkgRGV2aWNlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBzaW11bGF0ZSBvciB0cmlnZ2VyIGEgcHJvYmUgZm9yIHRoaXMgc3BlY2lmaWMgUEhZIGRldmljZSwgYHl0ODgyNF9wcm9iZWAsIHdoaWNoIGlzIGFwcGFyZW50bHkgY2FsbGVkIHdoZW4gYSBQSFkgd2l0aCBJRCBgMHg0ZjUxZThiOGAgaXMgcHJvYmVkIG9uIGFuIE1ESU8gYnVzLiBNeSBwcmltYXJ5IHRob3VnaHQgaXMsIGNhbiBJIGNvbmp1cmUgdXAgc3VjaCBhIFBIWSBkZXZpY2U/IEkgaW1tZWRpYXRlbHkgd2VudCBzZWFyY2hpbmcgZm9yIGEgbW9ja3VwIGRyaXZlci4gTXkgaW5pdGlhbCBzZWFyY2ggdGVybXMgd2VyZSBgbWRpby4qbW9ja3VwYCwgYnV0IHRoYXQgeWllbGRlZCBub3RoaW5nIHByb21pc2luZy4gSSBhbHNvIGNvbnNpZGVyZWQgYG1kaW8tZHVtbXlgIGFuZCBgbWRpby1iY20tdW5pbWFjYCwgYnV0IHRoZSBsYXR0ZXIgc2VlbXMgdG8gYmUgZm9yIGFjdHVhbCBoYXJkd2FyZS4KClRoZW4gSSBzaGlmdGVkIG15IGZvY3VzIHRvIHRoZSBNRElPIGluZnJhc3RydWN0dXJlIGl0c2VsZi4gSXMgdGhlcmUgYSBzb2Z0d2FyZS1iYXNlZCBNRElPIGJ1cyBJIGNvdWxkIHVzZT8gSSBmb3VuZCBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWJpdGJhbmcuY2AsIGJ1dCB0aGF0JiMzOTtzIGp1c3QgYml0YmFuZ2luZyBvdmVyIEdQSU8sIHNvIG5vdCB3aGF0IEkgbmVlZC4gYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYCBpcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LCBidXQgY2FuIEkgcmVnaXN0ZXIgYW4gTURJTyBidXMgZnJvbSB1c2Vyc3BhY2UgdG8gY3JlYXRlIGEgc3BlY2lmaWMgc2NlbmFyaW8/IEl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSB0aGVyZSYjMzk7cyBhIGdlbmVyaWMgbmV0bGluayBpbnRlcmZhY2Ugb3IgaW9jdGwgZm9yIHRoYXQuCgpXYWl0IGEgc2Vjb25k4oCmIHdoYXQgYWJvdXQgYGRzYV9sb29wYD8gVGhhdCYjMzk7cyBhIG1vY2t1cCBEU0Egc3dpdGNoLCBmb3VuZCBpbiBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNgLiBNYXliZSBpdCBzaW11bGF0ZXMgYW4gTURJTyBidXMgYXMgcGFydCBvZiBpdHMgc2V0dXA/IFRoaXMgc2VlbXMgbGlrZSBhIHByb21pc2luZyBhdmVudWUgdG8gZXhwbG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTc0PXN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2c1tQSFlfTUFYX0FERFJdO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NzU6c3RhdGljIHN0cnVjdCBtZGlvX2RldmljZSAqc3dpdGNoX21kaW9kZXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy03Ni1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0xODQ9c3RhdGljIGludCBkc2FfbG9vcF9waHlfcmVhZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4OS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5MDpcdHJldCA9IG1kaW9idXNfcmVhZF9uZXN0ZWQoYnVzLCBwcy1cdTAwM2Vwb3J0X2Jhc2UgJiM0MzsgcG9ydCwgcmVnbnVtKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE5MS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9MTk5PXN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3dyaXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjA1LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjA2Olx0cmV0ID0gbWRpb2J1c193cml0ZV9uZXN0ZWQoYnVzLCBwcy1cdTAwM2Vwb3J0X2Jhc2UgJiM0MzsgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDctXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTI1MD1zdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNjMtXHQvKiBKdXN0IGRvIGEgc2xlZXBpbmcgb3BlcmF0aW9uIHRvIG1ha2UgbG9ja2RlcCBjaGVja3MgZWZmZWN0aXZlICovXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNjQ6XHRtZGlvYnVzX3JlYWQoYnVzLCBwcy1cdTAwM2Vwb3J0X2Jhc2UgJiM0MzsgcG9ydCwgTUlJX0JNU1IpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjY1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTI4Mz1zdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOTItXHQvKiBKdXN0IGRvIGEgc2xlZXBpbmcgb3BlcmF0aW9uIHRvIG1ha2UgbG9ja2RlcCBjaGVja3MgZWZmZWN0aXZlICovXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyOTM6XHRtZGlvYnVzX3JlYWQoYnVzLCBwcy1cdTAwM2Vwb3J0X2Jhc2UgJiM0MzsgcG9ydCwgTUlJX0JNU1IpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjk0LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTMzND1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGRzYV9sb29wX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTU6c3RhdGljIGludCBkc2FfbG9vcF9kcnZfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NzpcdHN0cnVjdCBkc2FfbG9vcF9wZGF0YSAqcGRhdGEgPSBtZGlvZGV2LVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU4LVx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2NC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM2NTpcdGRzID0gZGV2bV9remFsbG9jKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBzaXplb2YoKmRzKSwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNjYtXHRpZiAoIWRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2OC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM2OTpcdGRzLVx1MDAzZWRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzcwLVx0ZHMtXHUwMDNlbnVtX3BvcnRzID0gRFNBX0xPT1BfTlVNX1BPUlRTO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzcxLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzcyOlx0cHMgPSBkZXZtX2t6YWxsb2MoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIHNpemVvZigqcHMpLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM3My1cdGlmICghcHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzgxLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzgyOlx0ZHMtXHUwMDNlZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODMtXHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODQtXHRkcy1cdTAwM2Vwcml2ID0gcHM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODU6XHRwcy1cdTAwM2VidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM4NzpcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgZHMpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg4LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5MC1cdGlmICghcmV0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzkxOlx0XHRkZXZfaW5mbyhcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXM6IDB4JTB4XFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzkyLVx0XHRcdCBwZGF0YS1cdTAwM2VuYW1lLCBwZGF0YS1cdTAwM2VlbmFibGVkX3BvcnRzKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozOTc6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTgte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk5Olx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQwMC1cdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTAtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMi17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTM6XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDE0LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxOS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMDpcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgTlVMTCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjEtfVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIyLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDIzOnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgZHNhX2xvb3BfZHJ2ID0ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI0Olx0Lm1kaW9kcnYuZHJpdmVyXHQ9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyNS1cdFx0Lm5hbWVcdD0gXCYjMzQ7ZHNhLWxvb3BcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NDMyPXN0YXRpYyBpbnQgZHNhX2xvb3BfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM1Olx0cmV0dXJuIGRydiA9PSBcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzYtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQzOD1zdGF0aWMgdm9pZCBkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIodm9pZClcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDY6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KHZvaWQpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDcte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ2Mi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ2MzpcdGJ1cyA9IG1kaW9fZmluZF9idXMoXCYjMzQ7Zml4ZWQtMFwmIzM0Oyk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjQtXHRpZiAoV0FSTl9PTighYnVzKSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Njc6XHRzd2l0Y2hfbWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIDMxKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ2ODpcdGlmIChJU19FUlIoc3dpdGNoX21kaW9kZXYpKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDY5LVx0XHRnb3RvIG91dDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MTpcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MjpcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXHUwMDI2ZHNhX2xvb3BfcGRhdGE7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NzMtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzQ6XHRyZXQgPSBtZGlvX2RldmljZV9yZWdpc3Rlcihzd2l0Y2hfbWRpb2Rldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NzUtXHRpZiAocmV0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDc2Olx0XHRtZGlvX2RldmljZV9mcmVlKHN3aXRjaF9tZGlvZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3Ny1vdXQ6XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NDgyPXN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODc6XHRyZXQgPSBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk0Olx0cmV0ID0gbWRpb19kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5NS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5Ni1cdFx0ZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTc6XHRcdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTg6XHRcdG1kaW9fZGV2aWNlX2ZyZWUoc3dpdGNoX21kaW9kZXYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDk5LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTUwNT1zdGF0aWMgdm9pZCBfX2V4aXQgZHNhX2xvb3BfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA2LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcdG1kaW9fZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwOC1cdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTA5Olx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUxMDpcdG1kaW9fZGV2aWNlX2ZyZWUoc3dpdGNoX21kaW9kZXYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTExLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2OTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQSFkgRHJpdmVyIFRlc3RpbmcgaW4gU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHRlc3QgdGhpcyBgeXQ4ODI0YCBQSFkgZHJpdmVyIHdpdGhpbiB0aGUgU3l6a2FsbGVyIGVudmlyb25tZW50LiBGaXJzdCwgSSB0aG91Z2h0IGBtZGlvLW1vY2t1cGAgd2FzIGEgcmVsZXZhbnQgZHJpdmVyLCBidXQgbm8gc3VjaCBmaWxlIGV4aXN0cyDigJMgdGhhdCYjMzk7cyBhIGRlYWQgZW5kLiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgaG93ICpkbyogeW91IHRlc3QgUEhZIGRyaXZlcnMgaW4gYSBnZW5lcmljIHdheT8KCkkgcmVtZW1iZXIgYG1kaW9idXNfcmVnaXN0ZXJgIGluIGBkcml2ZXJzL25ldC9waHkvbWRpb19idXMuY2AsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIGlzc3VlIGlzLCBTeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhIHdheSB0byBhdXRvbWF0aWNhbGx5IGluc3RhbnRpYXRlIFBIWSBkZXZpY2VzIG9yIE1ESU8gYnVzZXMuIElmIHRoZSBrZXJuZWwgaXMgcnVubmluZyBpbiBRRU1VLCB0aGUgZW11bGF0ZWQgaGFyZHdhcmUgdXN1YWxseSBkb2VzbiYjMzk7dCBjcmVhdGUgYSByZWFsIE1ESU8gYnVzIHRoYXQgd291bGQgcHJvYmUgZm9yIGEgYHl0ODgyNGAgKG9yIGFueSBleHRlcm5hbCBQSFkpLgoKSSB0aG91Z2h0IG1heWJlIGFuIGVtdWxhdGVkIE5JQyBsaWtlIGBtYWNiYCwgb3IgYGUxMDAwYCBjb3VsZCBiZSBsZXZlcmFnZWQuIE1heWJlIHRoZXNlIGhhdmUgYW4gTURJTyBidXMgYW5kIHNvbWUgd2F5IHRvIGNvbm5lY3QgdGhpcyBQSFkgdG8gaXQsIGJ1dCwgbm8sIHRob3NlIFFFTVUtZW11bGF0ZWQgTklDcyBoYXZlIHRoZWlyIG93biBpbnRlcm5hbCBQSFlzLCBjb21wbGV0ZWx5IGRpc3RpbmN0LiBUaGUgc2FtZSBnb2VzIGZvciB0aGUgbGlrZXMgb2YgYHJ0bDgxMzlgLiBBbmQgYHZpcnRpby1uZXRgIGlzIG91dDsgaXQgZG9lc24mIzM5O3QgZXZlbiB1c2UgUEhZcy4KClRoZW4gSSBjb25zaWRlcmVkIGBmZWNgIGJlY2F1c2UgUUVNVSAqZG9lcyogZW11bGF0ZSBhIEZyZWVzY2FsZSBGYXN0IEV0aGVybmV0IENvbnRyb2xsZXIgKGBmZWNgKSwgYW5kICp0aGF0KiBoYXMgYW4gTURJTyBidXMuIEhvd2V2ZXIsIHRoZSBQSFkgSUQgaW4gdGhlIFFFTVUgZW11bGF0aW9uIGlzIGhhcmRjb2RlZCwgdHlwaWNhbGx5IHRvIGEgZ2VuZXJpYyBQSFkgb3IgYSBzcGVjaWZpYyBvbmUgdGhhdCBpc24mIzM5O3QgYHl0ODgyNGAuIENhbiBJIGV2ZW4gY2hhbmdlIHRoYXQgUEhZIElEIGluIHRoZSBRRU1VIGVtdWxhdGlvbiBmcm9tIHdpdGhpbiBTeXprYWxsZXI/IE5vLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBjb250cm9sIG92ZXIgUUVNVSBoYXJkd2FyZSBwYXJhbWV0ZXJzIGF0IHRoYXQgbGV2ZWwuCgpTbywgcmVhbGlzdGljYWxseSwgdGhpcyBtZWFucyB0aGUgYHl0ODgyNF9wcm9iZWAgZnVuY3Rpb24gaXMgbmV2ZXIgZ29pbmcgdG8gYmUgY2FsbGVkLCBiZWNhdXNlIG5vIG1hdGNoaW5nIFBIWSBkZXZpY2Ugd2lsbCBldmVyIGJlIGNyZWF0ZWQgb24gYW4gTURJTyBidXMuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcsIGlzIHRoZXJlIGEgd2F5IHRvIGNyZWF0ZSBhIFBIWSBkZXZpY2UgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2ZzPyBNYXliZSBgbWRpb19idXNgIHByb3ZpZGVzIGEgYG5ld19kZXZpY2VgIG9yIHNpbWlsYXIgZnVuY3Rpb25hbGl0eT8gSSBhbHJlYWR5IGdyZXBwZWQgYG1kaW9fYnVzLmNgIGZvciBgbmV3X2RldmljZWAsIGJ1dCBmb3VuZCBub3RoaW5nLiBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCDigJMgbWF5YmUgc29tZXRoaW5nIGlzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ld19kZXZpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2OTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnM6CgoqKlRoaW5raW5nIFRocm91Z2ggUEhZIENvbnRyb2wgd2l0aCBgc3lzZnNgKioKClJpZ2h0LCBzbyBJJiMzOTttIGNoZXdpbmcgb24gdGhpcyBQSFkgY29udHJvbCBpc3N1ZSBhZ2Fpbi4gVGhlIG1vcmUgSSBjb25zaWRlciBpdCwgdGhlIG1vcmUgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCB0aGUgYHN5c2ZzYCBhcHByb2FjaC4gSSBtZWFuLCBpdCYjMzk7cyBhbHJlYWR5IHRoZXJlLCBpc24mIzM5O3QgaXQ/IFdlJiMzOTt2ZSBnb3QgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIGV4cG9zaW5nIGRldmljZSBhdHRyaWJ1dGVzLiBXaHkgcmVpbnZlbnQgdGhlIHdoZWVsPyBJdCBwcm92aWRlcyBhIHdlbGwtZGVmaW5lZCBpbnRlcmZhY2UgZm9yIG1hbmlwdWxhdGluZyBQSFkgcGFyYW1ldGVycywgYW5kIG1vcmUgdG8gdGhlIHBvaW50LCB0aGlzIGV4aXN0aW5nIHN0cnVjdHVyZSBpcyBzb21ldGhpbmcgSSBhbSBmYW1pbGlhciB3aXRoLgoKSSYjMzk7bSBwaWN0dXJpbmcgdGhlIGJlbmVmaXRzLi4uIGBzeXNmc2Agb2ZmZXJzIGEgc2ltcGxlIGFuZCByZWxhdGl2ZWx5IHN0YWJsZSBtZXRob2QuIEl04oCZcyBnb3QgZGVjZW50IGNvbW11bml0eSBzdXBwb3J0IGFuZCBkb2N1bWVudGF0aW9uLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBtYWludGFpbmFiaWxpdHkgZG93biB0aGUgcm9hZC4gSXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBtYWtlIHNjcmlwdGluZyBhbmQgYXV0b21hdGlvbiBhIGJyZWV6ZSwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB0aGUga2luZCBvZiBkaWFnbm9zdGljIHRvb2xzIEkgYW0gY29uc2lkZXJpbmcgdG8gZGV2ZWxvcC4gUGx1cywgdGhlIGtlcm5lbCBoYW5kbGVzIGEgbG90IG9mIHRoZSBsb3ctbGV2ZWwgbG9ja2luZyBhbmQgYWNjZXNzIGNvbnRyb2wsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBwbHVzLgoKT2YgY291cnNlLCB0aGVyZSBhcmUgYWx3YXlzIGNhdmVhdHMuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQsIGJ1dCBJIGNhbiBsaXZlIHdpdGggdGhhdCBpZiBpdCYjMzk7cyBtYW5hZ2VhYmxlLiBJdCYjMzk7cyBtb3JlIGFib3V0IHRyYWRlLW9mZnM6IGVhc2Ugb2YgdXNlLCBtYWludGFpbmFiaWxpdHksIGFuZCBjb21wYXRpYmlsaXR5LCB2ZXJzdXMgcmF3LCBhYnNvbHV0ZSBzcGVlZC4gQWxzbywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW50ZXJmYWNlIGlzIHdlbGwtZGVzaWduZWQgYW5kIG5vdCBvdmVybHkgZ3JhbnVsYXIuIFdlIGRvbiYjMzk7dCB3YW50IHRvIGV4cG9zZSBldmVyeSBzaW5nbGUgUEhZIHJlZ2lzdGVyIGRpcmVjdGx5OyBpdOKAmXMgYWJvdXQgcHJvdmlkaW5nIHRoZSByaWdodCBsZXZlbCBvZiBhYnN0cmFjdGlvbi4gVWx0aW1hdGVseSwgaXTigJlzIGFib3V0IGNyYWZ0aW5nIHRoZSB1c2VyIGV4cGVyaWVuY2U6IGhvdyBlYXN5IHdpbGwgdGhpcyBiZSBmb3Igb3RoZXIgZW5naW5lZXJzIHRvIHVzZSB0byB0ZXN0IHRoZWlyIGRlc2lnbnM/CgpTbywgeWVhaCwgYHN5c2ZzYCBmb3IgUEhZIGNvbnRyb2zigKYgaXQmIzM5O3MgZGVmaW5pdGVseSBoaWdoIG9uIG15IGxpc3QgZm9yIHNlcmlvdXMgY29uc2lkZXJhdGlvbi4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGEgYml0IG1vcmUgYW5kIHNlZSBob3cgaXQgbWVzaGVzIHdpdGggdGhlIHNwZWNpZmljcyBvZiBvdXIgdGFyZ2V0IGhhcmR3YXJlLiBJdCBtaWdodCBub3QgYmUgdGhlIHBlcmZlY3Qgc29sdXRpb24gZm9yIGV2ZXJ5IHNjZW5hcmlvLCBidXQgaXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gc29sdmUgYSBsYXJnZSBwZXJjZW50YWdlIG9mIGNoYWxsZW5nZXMgSSBmb3Jlc2VlIGluIG15IHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWSUNFX0FUVFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NTYxPXBoeV9pZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTU2Ni19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjU2NzpzdGF0aWMgREVWSUNFX0FUVFJfUk8ocGh5X2lkKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNTY4LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NTcwPXBoeV9pbnRlcmZhY2Vfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01ODEtfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo1ODI6c3RhdGljIERFVklDRV9BVFRSX1JPKHBoeV9pbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01ODMtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz01ODU9cGh5X2hhc19maXh1cHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNTkxLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NTkyOnN0YXRpYyBERVZJQ0VfQVRUUl9STyhwaHlfaGFzX2ZpeHVwcyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTU5My1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NTk0PXN0YXRpYyBzc2l6ZV90IHBoeV9kZXZfZmxhZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy02MDEtfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo2MDI6c3RhdGljIERFVklDRV9BVFRSX1JPKHBoeV9kZXZfZmxhZ3MpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy02MDMtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz02MTc9c3RhdGljIHNzaXplX3QgbW1kIyNuIyNfZGV2aWNlX2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBcXFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNjIzLX0gXFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NjI0OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhtbWQjI24jI19kZXZpY2VfaWQpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTYyNS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE0NzA9cGh5X3N0YW5kYWxvbmVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ3Ni19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE0Nzc6c3RhdGljIERFVklDRV9BVFRSX1JPKHBoeV9zdGFuZGFsb25lKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ3OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4MDQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXBwcm9hY2ggdG8gUEhZIERldmljZSBJbnN0YW50aWF0aW9uIHZpYSBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gaW50ZXJhY3Qgd2l0aCBhIFBIWSBkZXZpY2UgdGhyb3VnaCB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB1c2luZyBTeXprYWxsZXIgZm9yIGZ1enppbmcuIFRoZSBpbW1lZGlhdGUgcm9hZGJsb2NrIGlzIHRoYXQgeW91IGNhbiYjMzk7dCBqdXN0ICpjcmVhdGUqIGEgUEhZIGRldmljZSBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZS4gVGhhdCYjMzk7cyBhIG5vLWdvLiBJIGNvbnNpZGVyZWQgdXNpbmcgc29tZXRoaW5nIGxpa2UgYEkyQ2Agb3IgYFNQSWAgYXMgYW4gaW50ZXJtZWRpYXJ5LCB0aGlua2luZyBJIGNvdWxkIGdldCBhcm91bmQgdGhlIGRpcmVjdCBpbnN0YW50aWF0aW9uIHByb2JsZW0sIGJ1dCBxdWlja2x5IHJlYWxpemVkIHRoaXMgaXMgYW4gTURJTyBkZXZpY2UsIG5vdCBzb21ldGhpbmcgZWFzaWx5IGhhbmRsZWQgdGhhdCB3YXkuCgpUaGVuLCBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgdGhlIGV4aXN0aW5nIGRyaXZlciBpbmZyYXN0cnVjdHVyZS4gQ291bGQgc29tZXRoaW5nIGxpa2UgYG1kaW8tYmNtLXVuaW1hYy5jYCBwcm92aWRlIGEgY2x1ZT8gSXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIGJ1dCBob3cgY2FuIEkgaW5qZWN0IGl0LCBvciBzb21ldGhpbmcgc2ltaWxhciwgaW50byB0aGUgc3lzdGVtIHRvIHJlZ2lzdGVyIHRoZSBNRElPIGJ1cyBpbiBhIGNvbnRyb2xsZWQgd2F5PyBUaGUgZ29hbCB3b3VsZCBiZSB0byB0aGVuIG1hbmlwdWxhdGUgTURJTyByZWFkL3dyaXRlIG9wZXJhdGlvbnMgYW5kIGdldCB0aGUgUEhZIElEIGluIHJlc3BvbnNlLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIHBsYXRmb3JtIGRldmljZSBpbmplY3Rvci4gRGFtbiEgQnV0IHdhaXQuLi4gd2hhdCBhYm91dCB0aGUgbW9yZSBzcGVjaWFsaXplZCBmdW5jdGlvbmFsaXR5IGl0ICpkb2VzKiBvZmZlcj8gSSByZW1lbWJlciBzZWVpbmcgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAgYW5kIGFsc28gdGhlIGBzeXpfODAyMTFfLi4uYCBjYWxscy4gQ291bGQgSSBsZXZlcmFnZSB0aGVzZSBzb21laG93PyBEb2VzIFN5emthbGxlciBoYXZlIGFueSBwcmUtYnVpbHQgbWV0aG9kcyB0aGF0IGNvdWxkIGJlIHVzZWQgZm9yIGZ1enppbmcgUEhZIGRyaXZlcnM/IEkgbmVlZCB0byBjaGVjay4KClRoZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzZWFyY2ggdGhlIFN5emthbGxlciBkZXNjcmlwdGlvbnMgZm9yIGFueSBtZW50aW9ucyBvZiAmIzM0O01ESU8mIzM0OyBvciAmIzM0O1BIWS4mIzM0OyBIb3BlZnVsbHksIHRoZXJlJiMzOTtzIHNvbWUgZXhpc3RpbmcgZ3JvdW5kd29yayBJIGNhbiBidWlsZCB1cG9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gbWFraW5nIGFueSBwcm9ncmVzcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL2RzYS5jPTYyMj1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbm5ldC9kc2EvZHNhLmMtNjU0LVx0aWYgKCFkcy1cdTAwM2V1c2VyX21paV9idXMgXHUwMDI2XHUwMDI2IGRzLVx1MDAzZW9wcy1cdTAwM2VwaHlfcmVhZCkge1xubmV0L2RzYS9kc2EuYzo2NTU6XHRcdGRzLVx1MDAzZXVzZXJfbWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcbm5ldC9kc2EvZHNhLmMtNjU2LVx0XHRpZiAoIWRzLVx1MDAzZXVzZXJfbWlpX2J1cykge1xuLS1cbm5ldC9kc2EvZHNhLmMtNjYyLVxubmV0L2RzYS9kc2EuYzo2NjM6XHRcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoZHMtXHUwMDNldXNlcl9taWlfYnVzKTtcbm5ldC9kc2EvZHNhLmMtNjY0LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9kc2EvZHNhLmMtNjc0LVx0aWYgKGRzLVx1MDAzZXVzZXJfbWlpX2J1cyBcdTAwMjZcdTAwMjYgZHMtXHUwMDNlb3BzLVx1MDAzZXBoeV9yZWFkKVxubmV0L2RzYS9kc2EuYzo2NzU6XHRcdG1kaW9idXNfZnJlZShkcy1cdTAwM2V1c2VyX21paV9idXMpO1xubmV0L2RzYS9kc2EuYy02NzYtdGVhcmRvd246XG4tLVxubmV0L2RzYS9kc2EuYz02ODY9c3RhdGljIHZvaWQgZHNhX3N3aXRjaF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxubmV0L2RzYS9kc2EuYy02OTMtXHRpZiAoZHMtXHUwMDNldXNlcl9taWlfYnVzIFx1MDAyNlx1MDAyNiBkcy1cdTAwM2VvcHMtXHUwMDNlcGh5X3JlYWQpIHtcbm5ldC9kc2EvZHNhLmM6Njk0Olx0XHRtZGlvYnVzX3VucmVnaXN0ZXIoZHMtXHUwMDNldXNlcl9taWlfYnVzKTtcbm5ldC9kc2EvZHNhLmM6Njk1Olx0XHRtZGlvYnVzX2ZyZWUoZHMtXHUwMDNldXNlcl9taWlfYnVzKTtcbm5ldC9kc2EvZHNhLmMtNjk2LVx0XHRkcy1cdTAwM2V1c2VyX21paV9idXMgPSBOVUxMO1xuLS1cbm5ldC9kc2EvcG9ydC5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2Vcbm5ldC9kc2EvcG9ydC5jOjEyOiNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxubmV0L2RzYS9wb3J0LmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2Vcbi0tXG5uZXQvZHNhL3BvcnQuYz0xNzI2PXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHNhX3N3aXRjaGVzX2FwcGx5X3dvcmthcm91bmRzW10gPSB7XG4tLVxubmV0L2RzYS9wb3J0LmMtMTc5Ni0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTylcbm5ldC9kc2EvcG9ydC5jOjE3OTc6XHRcJiMzNDtzbXNjLGxhbjkzMDMtbWRpb1wmIzM0Oyxcbm5ldC9kc2EvcG9ydC5jLTE3OTgtI2VuZGlmXG4tLVxubmV0L2RzYS91c2VyLmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2Vcbm5ldC9kc2EvdXNlci5jOjE0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxubmV0L2RzYS91c2VyLmM6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG5uZXQvZHNhL3VzZXIuYy0xNi0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuLS1cbm5ldC9kc2EvdXNlci5jPTI2Mzc9c3RhdGljIGludCBkc2FfdXNlcl9waHlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqdXNlcl9kZXYsIGludCBhZGRyLFxuLS1cbm5ldC9kc2EvdXNlci5jLTI2NDItXG5uZXQvZHNhL3VzZXIuYzoyNjQzOlx0dXNlcl9kZXYtXHUwMDNlcGh5ZGV2ID0gbWRpb2J1c19nZXRfcGh5KGRzLVx1MDAzZXVzZXJfbWlpX2J1cywgYWRkcik7XG5uZXQvZHNhL3VzZXIuYy0yNjQ0LVx0aWYgKCF1c2VyX2Rldi1cdTAwM2VwaHlkZXYpIHtcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYz01ODc9Y29udmVydF9sZWdhY3lfc2V0dGluZ3NfdG9fbGlua19rc2V0dGluZ3MoXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmMtNjIxLVx0XHQ9IGxlZ2FjeV9zZXR0aW5ncy1cdTAwM2VhdXRvbmVnO1xubmV0L2V0aHRvb2wvY29tbW9uLmM6NjIyOlx0bGlua19rc2V0dGluZ3MtXHUwMDNlYmFzZS5tZGlvX3N1cHBvcnRcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjYyMzpcdFx0PSBsZWdhY3lfc2V0dGluZ3MtXHUwMDNlbWRpb19zdXBwb3J0O1xubmV0L2V0aHRvb2wvY29tbW9uLmMtNjI0LVx0bGlua19rc2V0dGluZ3MtXHUwMDNlYmFzZS5ldGhfdHBfbWRpeFxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9MzgyPWNvbnZlcnRfbGlua19rc2V0dGluZ3NfdG9fbGVnYWN5X3NldHRpbmdzKFxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtNDEyLVx0XHQ9IGxpbmtfa3NldHRpbmdzLVx1MDAzZWJhc2UuYXV0b25lZztcbm5ldC9ldGh0b29sL2lvY3RsLmM6NDEzOlx0bGVnYWN5X3NldHRpbmdzLVx1MDAzZW1kaW9fc3VwcG9ydFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0MTQ6XHRcdD0gbGlua19rc2V0dGluZ3MtXHUwMDNlYmFzZS5tZGlvX3N1cHBvcnQ7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTQxNS1cdGxlZ2FjeV9zZXR0aW5ncy1cdTAwM2VldGhfdHBfbWRpeFxuLS1cbm5ldC9ldGh0b29sL3BoeS5jPTcwPXN0YXRpYyBpbnQgcGh5X3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuLS1cbm5ldC9ldGh0b29sL3BoeS5jLTkxLVxubmV0L2V0aHRvb2wvcGh5LmM6OTI6XHRyZXBfZGF0YS1cdTAwM2VuYW1lID0ga3N0cmR1cChkZXZfbmFtZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpLCBHRlBfS0VSTkVMKTtcbm5ldC9ldGh0b29sL3BoeS5jLTkzLVx0aWYgKCFyZXBfZGF0YS1cdTAwM2VuYW1lKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYxNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IFRyYWluIG9mIFRob3VnaHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGRzYV9sb29wYCB0aGluZywgYW5kIGl0JiMzOTtzIGFjdGluZyBsaWtlIGEgbW9jayBEU0Egc3dpdGNoLiBSaWdodCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gcmVnaXN0ZXIgYW4gTURJTyBidXMuIExldCYjMzk7cyBzZWUuLi4gKlllcyosIGl0IGxvb2tzIGxpa2UgYGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldmAgY3JlYXRlcyBhbiBNRElPIGRldmljZSwgc3BlY2lmaWNhbGx5IG9uIHRoZSBgZml4ZWQtMGAgYnVzLiBBaCwgcmlnaHQsIGBmaXhlZC0wYCBpcyB0aGUgYGZpeGVkX3BoeWAgYnVzLgoKQnV0IGhlcmUmIzM5O3Mgd2hlcmUgSSBzdGFydCB0byBoaXQgYSBzbmFnLiBEb2VzIHRoaXMgc2V0dXAgKmFjdHVhbGx5KiBsZXQgdXMgYXR0YWNoIGFuIGFyYml0cmFyeSBQSFk/IEkgZG9uJiMzOTt0IHRoaW5rIHNvOyBpdCBzZWVtcyBsaWtlIHRoZSBQSFlzIG9uIHRoZSBgZml4ZWQtMGAgYnVzIGFyZSwgd2VsbCwgKmZpeGVkKi4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBob3cgZG8gSSBnbyBhYm91dCB0ZXN0aW5nIHRoaXMgUEhZIGRyaXZlciBpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQ/IElmIHRoZSBkcml2ZXImIzM5O3MgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBidXQgdGhlcmUmIzM5O3Mgbm8gcGh5c2ljYWwgaGFyZHdhcmUsIGFuZCBubyBzdHJhaWdodGZvcndhcmQgZW11bGF0aW9uIG1ldGhvZCwgaXQmIzM5O3MgYmFzaWNhbGx5IHVucmVhY2hhYmxlIGluIHNvbWV0aGluZyBsaWtlIFFFTVUuIEl0IGJlY29tZXMgZWZmZWN0aXZlbHkgZGVhZCBjb2RlIGluIGEgdmlydHVhbCBzZXR1cC4KCkkgbmVlZCB0byBjaXJjbGUgYmFjayBhbmQgY29uZmlybSBpZiB0aGVyZSYjMzk7cyAqYW55KiB3YXkgdG8gaW5zdGFudGlhdGUgYSBQSFkgZHJpdmVyIGluIGEgdGVzdGFibGUgd2F5LiBDYW4gSSBsZXZlcmFnZSBzb21ldGhpbmcgbGlrZSBgbWRpby1tb2NrdXBgPyBMZXQmIzM5O3MgY2hlY2suLi4gd2FpdCwgSSBzZWFyY2hlZCwgYW5kIHRoZXJlIHdlcmUgKnplcm8qIHJlc3VsdHMgZm9yIGBtZGlvLiptb2NrdXBgLiBUaGF0JiMzOTtzIG5vdCBnb29kLiBJJiMzOTtsbCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNlYXJjaDsgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgYG1kaW9gIHJlbGF0ZWQgdGVzdCBkcml2ZXIgb3V0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDgyOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTQ9bGlicGh5LXlcdFx0XHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS01LVx0XHRcdFx0ICAgbGlua21vZGUubyBwaHlfbGlua190b3BvbG9neS5vIFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NjpcdFx0XHRcdCAgIHBoeV9jYXBzLm8gbWRpb19idXNfcHJvdmlkZXIubyBwaHlfcG9ydC5vIFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NzpcdFx0XHRcdCAgIG1kaW9fZGV2aWNlLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS04LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0xNj1saWJwaHktJChDT05GSUdfT1BFTl9BTExJQU5DRV9IRUxQRVJTKSAmIzQzOz0gb3Blbl9hbGxpYW5jZV9oZWxwZXJzLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xNy1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxODpvYmotJChDT05GSUdfUEhZTElCKVx0XHQmIzQzOz0gbWRpb19idXMub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19QSFlMSU5LKVx0XHQmIzQzOz0gcGh5bGluay5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX1BIWUxJQilcdFx0JiM0Mzs9IGxpYnBoeS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX1BIWUxJQilcdFx0JiM0Mzs9IG1kaW9fZGV2cmVzLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yMi1vYmotJChDT05GSUdfUEhZX1BBQ0tBR0UpXHQmIzQzOz0gcGh5X3BhY2thZ2Uub1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9MjUyPXN0YXRpYyB1MzIgYWRpbl9nZXRfcmVnX3ZhbHVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0yNTYte1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzoyNTc6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTI1OC1cdHUzMiB2YWw7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz01MDE9c3RhdGljIGludCBhZGluX2NvbmZpZ19jbGtfb3V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTUwMi17XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjUwMzpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNTA0LVx0Y29uc3QgY2hhciAqdmFsID0gTlVMTDtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTUyOD1zdGF0aWMgaW50IGFkaW5fY29uZmlnX3pwdG0xMDAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNTI5LXtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NTMwOlx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy01MzEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz02NDg9c3RhdGljIGludCBhZGluX3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTE2IHJlZ251bSlcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjQ5LXtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjUwOlx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjUxOlx0aW50IHBoeV9hZGRyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjUyLVx0aW50IGFkaW5fcmVnbnVtO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjU4LVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NTk6XHRlcnIgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHlfYWRkciwgQURJTjEzMDBfTUlJX0VYVF9SRUdfUFRSLFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NjAtXHRcdFx0ICAgICAgYWRpbl9yZWdudW0pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjYzLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NjQ6XHRyZXR1cm4gX19tZGlvYnVzX3JlYWQoYnVzLCBwaHlfYWRkciwgQURJTjEzMDBfTUlJX0VYVF9SRUdfREFUQSk7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY2NS19XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz02Njc9c3RhdGljIGludCBhZGluX3dyaXRlX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUxNiByZWdudW0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02Njkte1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NzA6XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NzE6XHRpbnQgcGh5X2FkZHIgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NzItXHRpbnQgYWRpbl9yZWdudW07XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NzgtXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjY3OTpcdGVyciA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeV9hZGRyLCBBRElOMTMwMF9NSUlfRVhUX1JFR19QVFIsXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY4MC1cdFx0XHQgICAgICBhZGluX3JlZ251bSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02ODMtXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjY4NDpcdHJldHVybiBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHlfYWRkciwgQURJTjEzMDBfTUlJX0VYVF9SRUdfREFUQSwgdmFsKTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjg1LX1cbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTg5MD1zdGF0aWMgaW50IGFkaW5fcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtODkxLXtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6ODkyOlx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy04OTMtXHRzdHJ1Y3QgYWRpbl9wcml2ICpwcml2O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9MTA1OT1tb2R1bGVfcGh5X2RyaXZlcihhZGluX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTEwNjAtXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjEwNjE6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhZGluX3RibFtdID0ge1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0xMDYyLVx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoUEhZX0lEX0FESU4xMjAwKSB9LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMTA2Ni1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6MTA2NzpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFkaW5fdGJsKTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMTA2OC1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7QW5hbG9nIERldmljZXMgSW5kdXN0cmlhbCBFdGhlcm5ldCBQSFkgZHJpdmVyXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYz0yNDQ9c3RhdGljIGludCBhZGluX2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI0Ni1cdHN0cnVjdCBhZGluX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjI0NzpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI0OC1cdGludCByZXQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MzA5PXN0YXRpYyBpbnQgYWRpbl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzEwLXtcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjMxMTpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTMxMi1cdHN0cnVjdCBhZGluX3ByaXYgKnByaXY7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MzQzPW1vZHVsZV9waHlfZHJpdmVyKGFkaW5fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTM0NC1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjM0NTpzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFkaW5fdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0zNDYtXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfQURJTjExMDApIH0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzUxLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM6MzUyOk1PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWRpbl90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzUzLU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtBbmFsb2cgRGV2aWNlcyBJbmR1c3RyaWFsIEV0aGVybmV0IFQxTCBQSFkgZHJpdmVyXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbjExNDAtcGh5LmM9NjE9bW9kdWxlX3BoeV9kcml2ZXIoYWRpbjExNDBfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYy02Mi1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYzo2MzpzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFkaW4xMTQwX3RibFtdID0ge1xuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTQwLXBoeS5jLTY0LVx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoQURJTjExNDBfUEhZX0lEKSB9LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYy02Ny1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYzo2ODpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFkaW4xMTQwX3RibCk7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExNDAtcGh5LmMtNjktXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz02NTI9c3RhdGljIGlycXJldHVybl90IGFuODgwMXJfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNjY3LVx0aWYgKGlycV9zdGF0dXMgXHUwMDI2IEFOODgwMV9JUlFfV0FLRV9NQUdJQ1BLVCkge1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo2Njg6XHRcdHBtX3dha2V1cF9ldmVudChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIDApO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy02NjktXHRcdGlycV9oYW5kbGVkID0gdHJ1ZTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTY4MD1zdGF0aWMgdm9pZCBhbjg4MDFyX2dldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTY4OC1cdCAqL1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo2ODk6XHRpZiAoIWRldmljZV9jYW5fd2FrZXVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldikpIHtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNjkwLVx0XHR3b2wtXHUwMDNlc3VwcG9ydGVkID0gMDtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTcwOD1zdGF0aWMgaW50IGFuODgwMXJfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNzE2LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3MTc6XHRpZiAoIWRldmljZV9jYW5fd2FrZXVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldikpXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTcxOC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNzc4LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3Nzk6XHRyZXR1cm4gZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldixcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNzgwLVx0XHRcdFx0XHRwcml2LVx1MDAzZXdha2VfbWFnaWNfZW5hYmxlZCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz03ODM9c3RhdGljIGludCBhbjg4MDFyX29mX2luaXRfbGVkcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCAqbGVkX2NmZylcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNzg0LXtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6Nzg1Olx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03ODYtXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZW9mX25vZGU7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz0xMDM0PXN0YXRpYyBpbnQgYW44ODAxcl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDM1LXtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTAzNjpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtMTAzNy1cdHN0cnVjdCBhbjg4MDFyX3ByaXYgKnByaXY7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz0xMDYwPXN0YXRpYyBpbnQgYW44ODAxcl9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDY3LVx0ICovXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjEwNjg6XHRpZiAoZGV2aWNlX21heV93YWtldXAoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KSkge1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDY5LVx0XHRwcml2LVx1MDAzZXdha2VfbG5rY2hnX2VuYWJsZWQgPSBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTEwOTE9c3RhdGljIGludCBhbjg4MDFyX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtMTEwMi1cdCAqL1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzoxMTAzOlx0aWYgKGRldmljZV9tYXlfd2FrZXVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldikpIHtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtMTEwNC1cdFx0cHJpdi1cdTAwM2V3YWtlX2xua2NoZ19lbmFibGVkID0gdHJ1ZTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTExNDY9bW9kdWxlX3BoeV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNDctXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjExNDg6c3RhdGljIHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhbjg4MDFfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNDktXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChBTjg4MDFSX1BIWV9JRCkgfSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNTEtfTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTE1MjpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFuODgwMV90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMTUzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTE5Nz1zdHJ1Y3QgZW44ODExaF9wcml2IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yMDMtXHR1bnNpZ25lZCBpbnRcdFx0Y2tvX2lzX2VuYWJsZWQ7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyMDQ6XHRzdHJ1Y3QgbWRpb19kZXZpY2VcdCpwYnVzZGV2O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjA1LX07XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MjM5PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGVuODgxMWhfbGVkX3RyaWcgPSBCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpIHxcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNDctXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNDg6c3RhdGljIGludCBfX2Fpcl9wYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNDktXHRcdFx0XHR1MzIgcGJ1c19yZWcsIHUzMiBwYnVzX2RhdGEpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjUyLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MjUzOlx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKG1kaW9kZXYtXHUwMDNlYnVzLCBtZGlvZGV2LVx1MDAzZWFkZHIsIEFJUl9FWFRfUEFHRV9BQ0NFU1MsXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNTQtXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX3JlZykpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI1Ny1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjI1ODpcdHJldCA9IF9fbWRpb2J1c193cml0ZShtZGlvZGV2LVx1MDAzZWJ1cywgbWRpb2Rldi1cdTAwM2VhZGRyLCBBSVJfUEJVU19BRERSX0hJR0gsXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNTktXHRcdFx0ICAgICAgRklFTERfR0VUKEFJUl9QQlVTX1JFR19BRERSX0hJR0hfTUFTSywgcGJ1c19yZWcpKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNjItXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNjM6XHRyZXQgPSBfX21kaW9idXNfd3JpdGUobWRpb2Rldi1cdTAwM2VidXMsIG1kaW9kZXYtXHUwMDNlYWRkcixcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI2NC1cdFx0XHQgICAgICBGSUVMRF9HRVQoQUlSX1BCVVNfUkVHX0FERFJfTE9XX01BU0ssIHBidXNfcmVnKSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNjgtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNjk6XHRyZXR1cm4gX19tZGlvYnVzX3dyaXRlKG1kaW9kZXYtXHUwMDNlYnVzLCBtZGlvZGV2LVx1MDAzZWFkZHIsIEFJUl9QQlVTX0RBVEFfSElHSCxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI3MC1cdFx0XHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0zMjc9c3RhdGljIGludCBlbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzM1LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MzM2Olx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0zMzctXHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9Mzk3PXN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maWxlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzk5LXtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjQwMDpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQwMS1cdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9NDEzPXN0YXRpYyBpbnQgYW44ODExaGJfbWN1X2Fzc2VydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQxNy1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjQxODpcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00MTktXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDMyLXVubG9jazpcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjQzMzpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQzNC1cdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9NDM3PXN0YXRpYyBpbnQgYW44ODExaGJfbWN1X2RlYXNzZXJ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDQxLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NDQyOlx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQ0My1cbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00NTctdW5sb2NrOlxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NDU4Olx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDU5LVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz01MDI9c3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUwMy17XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MDQ6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MDUtXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MSwgKmZ3Mjtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xMDc0PXN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwNzUte1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA3NjpcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwNzctXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwNzktXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDgwOlx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwODEtXHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwOTItXHQgKi9cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTM6XHRtZGlvZGV2ID0gbWRpb19kZXZpY2VfY3JlYXRlKHBoeWRldi1cdTAwM2VtZGlvLmJ1cyxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTQ6XHRcdFx0XHQgICAgIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgJiM0MzsgRU44ODExSF9QQlVTX0FERFJfT0ZGUyk7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDk1Olx0aWYgKElTX0VSUihtZGlvZGV2KSlcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTY6XHRcdHJldHVybiBQVFJfRVJSKG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA5Ny1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTg6XHRyZXQgPSBtZGlvX2RldmljZV9yZWdpc3RlcihtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwOTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExMDEtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTAyOlx0cHJpdi1cdTAwM2VwYnVzZGV2ID0gbWRpb2RldjtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExMDMtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTEyMy1cdC8qIENvLUNsb2NrIE91dHB1dCAqL1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTEyNDpcdHJldCA9IGFuODgxMWhiX2Nsa19wcm92aWRlcl9zZXR1cChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFx1MDAyNnByaXYtXHUwMDNlaHcpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTEyNS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTEzNy1lcnJfZGV2X2NyZWF0ZTpcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjExMzg6XHRtZGlvX2RldmljZV9yZW1vdmUobWRpb2Rldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTM5LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE0MC1lcnJfZGV2X2ZyZWU6XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTQxOlx0bWRpb19kZXZpY2VfZnJlZShtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExNDItXHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTExNDU9c3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE0OS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjExNTA6XHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgc2l6ZW9mKHN0cnVjdCBlbjg4MTFoX3ByaXYpLFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE1MS1cdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE3MS1cdC8qIENvLUNsb2NrIE91dHB1dCAqL1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTE3MjpcdHJldCA9IGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgXHUwMDI2cHJpdi1cdTAwM2Vodyk7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTczLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xMTg2PXN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE4Ny17XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTg4Olx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE4OS1cdHUzMiBwYnVzX3ZhbHVlID0gMDtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xMjE3PXN0YXRpYyBpbnQgZW44ODExaF9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMjE4LXtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEyMTk6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMjIwLVx0dW5zaWduZWQgaW50IHBvbCwgZGVmYXVsdF9wb2w7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTQ5OD1zdGF0aWMgdm9pZCBhbjg4MTFoYl9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNTAyLVx0aWYgKHByaXYtXHUwMDNlcGJ1c2Rldikge1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTUwMzpcdFx0bWRpb19kZXZpY2VfcmVtb3ZlKHByaXYtXHUwMDNlcGJ1c2Rldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxNTA0Olx0XHRtZGlvX2RldmljZV9mcmVlKHByaXYtXHUwMDNlcGJ1c2Rldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNTA1LVx0fVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTE1NTM9bW9kdWxlX3BoeV9kcml2ZXIoZW44ODExaF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTU1NC1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjE1NTU6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBlbjg4MTFoX3RibFtdID0ge1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTU1Ni1cdHsgUEhZX0lEX01BVENIX01PREVMKEVOODgxMUhfUEhZX0lEKSB9LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTE1NjAtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxNTYxOk1PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgZW44ODExaF90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTU2Mi1NT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RNKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYW1kLmM9MTEyPW1vZHVsZV9waHlfZHJpdmVyKGFtNzljX2RyaXZlcnMpO1xuZHJpdmVycy9uZXQvcGh5L2FtZC5jLTExMy1cbmRyaXZlcnMvbmV0L3BoeS9hbWQuYzoxMTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhbWRfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvYW1kLmMtMTE1LVx0eyBQSFlfSURfQUMxMDFMLCAweGZmZmZmZmYwIH0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FtZC5jLTExOS1cbmRyaXZlcnMvbmV0L3BoeS9hbWQuYzoxMjA6TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhbWRfdGJsKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYz0yOTY9c3RhdGljIGludCBhcXJfZmlybXdhcmVfbG9hZF9udm1lbShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jLTMwMi1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jOjMwMzpcdGNlbGwgPSBudm1lbV9jZWxsX2dldChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFwmIzM0O2Zpcm13YXJlXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jLTMwNC1cdGlmIChJU19FUlIoY2VsbCkpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmM9MzI0PXN0YXRpYyBpbnQgYXFyX2Zpcm13YXJlX2xvYWRfZnMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jLTMyNS17XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYzozMjY6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYy0zMjctXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jPTE5MD1pbnQgYXFyX2h3bW9uX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfaHdtb24uYy0xOTEte1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmM6MTkyOlx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmMtMTkzLVx0c3RydWN0IGRldmljZSAqaHdtb25fZGV2O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9NzUwPXN0YXRpYyBpbnQgYXFyMTA3X2NvbmZpZ19tZGkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNzUxLXtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6NzUyOlx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeWRldi1cdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03NTMtXHR1MzIgbWRpX2NvbmY7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz0xMTY0PXN0YXRpYyBpbnQgYXFyMTA3X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xMTY3LVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoxMTY4Olx0cGh5ZGV2LVx1MDAzZXByaXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xMTY5LVx0XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgYXFyMTA3X3ByaXYpLCBHRlBfS0VSTkVMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTE1NjU9bW9kdWxlX3BoeV9kcml2ZXIoYXFyX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE1NjYtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjE1Njc6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhcXJfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE1NjgtXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfQVExMjAyKSB9LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTU4OC1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MTU4OTpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFxcl90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9Mjk3PXN0YXRpYyBpbnQgYWVvbl9maXJtd2FyZV9ib290KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IHU4ICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzIxLVx0aWYgKHZhbCBcdTAwM2UgMSkge1xuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzozMjI6XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDt3cm9uZyBvcmlnaW4gbWRpb19pbmRpcmVjdF9zdGF0dXM6ICV4XFxuXCYjMzQ7LCB2YWwpO1xuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0zMjMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9MzUyPXN0YXRpYyBpbnQgYWVvbl9maXJtd2FyZV9sb2FkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTM1My17XG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjM1NDpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzU1LVx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTYwMz1zdGF0aWMgaW50IGFzMjF4eHhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYwNy1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NjA4Olx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYwOS1cdFx0XHQgICAgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02MTMtXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjYxNDpcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYxNS1cdFx0XHQgICAgICBcdTAwMjZwcml2LVx1MDAzZWlwY19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTEwNzg9bW9kdWxlX3BoeV9kcml2ZXIoYXMyMXh4eF9kcml2ZXJzKTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMTA3OS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6MTA4MDpzdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFzMjF4eHhfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTEwODEtXHR7IFBIWV9JRF9NQVRDSF9WRU5ET1IoUEhZX1ZFTkRPUl9BRU9OU0VNSSkgfSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTEwODMtfTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6MTA4NDpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFzMjF4eHhfdGJsKTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMTA4NS1cbi0tXG5kcml2ZXJzL25ldC9waHkvYXg4ODc5NmIuYz0xMjE9bW9kdWxlX3BoeV9kcml2ZXIoYXNpeF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmMtMTIyLVxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmM6MTIzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYXNpeF90YmxbXSA9IHtcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jLTEyNC1cdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9BU0lYX0FYODg3NzJBKSB9LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jLTEyOS1cbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jOjEzMDpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFzaXhfdGJsKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jPTIzMz1zdGF0aWMgaW50IGJjbV9vbWVnYV9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmMtMjM2LVxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYzoyMzc6XHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTIzOC1cdGlmICghcHJpdilcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI0Mi1cbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmM6MjQzOlx0cHJpdi1cdTAwM2VzdGF0cyA9IGRldm1fa2NhbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI0NC1cdFx0XHRcdCAgIGJjbV9waHlfZ2V0X3NzZXRfY291bnQocGh5ZGV2KSwgc2l6ZW9mKHU2NCksXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYz0yNTI9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbV9jeWdudXNfcGh5X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmMtMjgwLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYzoyODE6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBiY21fY3lnbnVzX3BoeV90YmxbXSA9IHtcbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmMtMjgyLVx0eyBQSFlfSURfQkNNX0NZR05VUywgMHhmZmZmZmZmMCwgfSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI4NS19O1xuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYzoyODY6TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBiY21fY3lnbnVzX3BoeV90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODctXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjExOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz0zMz1pbnQgYmNtX3BoeV93cml0ZV9leHAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZywgdTE2IHZhbClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zNi1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjM3Olx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTM4LVx0cmMgPSBfX2JjbV9waHlfd3JpdGVfZXhwKHBoeWRldiwgcmVnLCB2YWwpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6Mzk6XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy00MC1cbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz02Mj1pbnQgYmNtX3BoeV9yZWFkX2V4cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY1LVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6NjY6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjctXHRyYyA9IF9fYmNtX3BoeV9yZWFkX2V4cChwaHlkZXYsIHJlZyk7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2ODpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY5LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTk0PWludCBiY21fcGh5X21vZGlmeV9leHAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZywgdTE2IG1hc2ssIHUxNiBzZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtOTctXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo5ODpcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy05OS1cdHJldCA9IF9fYmNtX3BoeV9tb2RpZnlfZXhwKHBoeWRldiwgcmVnLCBtYXNrLCBzZXQpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6MTAwOlx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMTAxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTI3MT1pbnQgYmNtX3BoeV9yZWFkX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTI3NC1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjI3NTpcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0yNzYtXHRyZXQgPSBfX2JjbV9waHlfcmVhZF9yZGIocGh5ZGV2LCByZGIpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6Mjc3Olx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMjc4LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTI5NT1pbnQgYmNtX3BoeV93cml0ZV9yZGIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJkYiwgdTE2IHZhbClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0yOTgtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzoyOTk6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzAwLVx0cmV0ID0gX19iY21fcGh5X3dyaXRlX3JkYihwaHlkZXYsIHJkYiwgdmFsKTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjMwMTpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTMwMi1cbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz0zMjc9aW50IGJjbV9waHlfbW9kaWZ5X3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiLCB1MTYgbWFzaywgdTE2IHNldClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zMzAtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzozMzE6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzMyLVx0cmV0ID0gX19iY21fcGh5X21vZGlmeV9yZGIocGh5ZGV2LCByZGIsIG1hc2ssIHNldCk7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzozMzM6XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zMzQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9NjYwPXN0YXRpYyBpbnQgX2JjbV9waHlfY2FibGVfdGVzdF9zdGFydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGlzX3JkYilcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy02NzEtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2NzI6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjczLVx0aWYgKGlzX3JkYikge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY5MC1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjY5MTpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY5Mi1cbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz03NDI9c3RhdGljIGludCBfYmNtX3BoeV9jYWJsZV90ZXN0X2dldF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy03NDgtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo3NDk6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNzUwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTc5OS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjgwMDpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTgwMS1cbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYz05MjA9c3RydWN0IGJjbV9wdHBfcHJpdmF0ZSAqYmNtX3B0cF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jLTkzMS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jOjkzMjpcdHByaXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jLTkzMy1cdGlmICghcHJpdilcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYy05NDAtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYzo5NDE6XHRjbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXB0cF9pbmZvLCBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktcHRwLmMtOTQyLVx0aWYgKElTX0VSUihjbG9jaykpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NDE0PXN0YXRpYyBpbnQgYmNtNTQxNDBfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQyMy1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQyNDpcdGh3bW9uID0gZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldixcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQyNS1cdFx0XHRcdFx0XHQgICAgIFwmIzM0O0JDTTU0MTQwXCYjMzQ7LCBwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NDMyPXN0YXRpYyBpbnQgYmNtNTQxNDBfYmFzZV9yZWFkX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQzNS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQzNjpcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00MzctXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgQkNNNTQxNDBfQkFTRV9BRERSLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ0NS1vdXQ6XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo0NDY6XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00NDctXHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jPTQ1MD1zdGF0aWMgaW50IGJjbTU0MTQwX2Jhc2Vfd3JpdGVfcmRiKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDU0LVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM6NDU1Olx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ1Ni1cdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCBCQ001NDE0MF9CQVNFX0FERFIsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDY0LW91dDpcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQ2NTpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ2Ni1cdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NTA1PXN0YXRpYyBpbnQgYmNtNTQxNDBfZ2V0X2Jhc2VfYWRkcl9hbmRfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MzI0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZydXN0cmF0aW5nIEh1bnQgZm9yIGEgVmlydHVhbCBQSFkqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gYG1kaW8tbW9ja3VwYD8gRG9lc24mIzM5O3QgcmluZyBhIGJlbGwuIFRoYXQmIzM5O3MgYSBub24tc3RhcnRlci4gU28sIHRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBob3cgb24gZWFydGggZG8gSSB0ZXN0IHRoZXNlIFBIWSBkcml2ZXJzIHdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlPyBXaXRob3V0IHNvbWUgd2F5IHRvIHNpbXVsYXRlIHRoZSBlbnZpcm9ubWVudCwgdGhlIGNvZGUmIzM5O3MgZXNzZW50aWFsbHkgZGVhZCBpbiB0aGUgd2F0ZXIsIHRyYXBwZWQgaW5zaWRlIGEgdmlydHVhbGl6ZWQgc3lzdGVtIGxpa2UgUUVNVS4gVW5yZWFjaGFibGUuCgpSaWdodCwgbGV0JiMzOTtzIGJhY2sgdXAuIENhbiBJIGV2ZW4gKnJlYWNoKiBzb21ldGhpbmcgbGlrZSBgeXQ4ODI0X3Byb2JlYD8gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgZm9yIHNvbWUgd2F5IHRvIGZhYnJpY2F0ZSBhIFBIWSBkZXZpY2UgZnJvbSB1c2Vyc3BhY2UuIEdlbmVyaWMgbmV0bGluaz8gaW9jdGw/IE5vcGUsIG5vdGhpbmcgc3RyYWlnaHRmb3J3YXJkIHRoZXJlIHRvIGNyZWF0ZSBhbiBNRElPIGJ1cyBvciBhIGNvcnJlc3BvbmRpbmcgUEhZIGRldmljZS4gRnJ1c3RyYXRpbmcuCgpXYWl0IGEgc2VjLCB3aGF0IGFib3V0IGBtYWM4MDIxMV9od3NpbWA/IE5vLCB0aGF0JiMzOTtzIFdpRmksIG5vdCByZWxldmFudCBoZXJlLiBPa2F5LCBrZWVwIGRpZ2dpbmcuLi4gV2hhdCBhYm91dCBgbmV0ZGV2c2ltYD8gRG9lcyAqdGhhdCogb2ZmZXIgYW4gTURJTyBidXMgb3IgYW55IHJlbGV2YW50IGhvb2tzPyBJdCYjMzk7cyBhIGxvbmcgc2hvdCwgYnV0IHdvcnRoIGNoZWNraW5nLiBMZXQmIzM5O3MgZGlnIGludG8gYGRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY2AgYW5kIHNlZSB3aGF0JiMzOTtzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3OTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTmV0d29ya2luZyBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gc2ltdWxhdGUgb3IgY3JlYXRlIGEgdmlydHVhbCBlbnZpcm9ubWVudCB0byBpbnRlcmFjdCB3aXRoIGEgUEhZLCBhbmQgSSYjMzk7bSBydW5uaW5nIGludG8gc29tZSBsaW1pdGF0aW9ucy4gTGV0JiMzOTtzIHRoaW5rIHRoaXMgdGhyb3VnaC4gYGR1bW15YCBuZXRkZXY/IE5vcGUsIHRoYXQmIzM5O3Mgbm90IGdvaW5nIHRvIGN1dCBpdC4gYHZldGhgPyBOYWgsIGRvZXNuJiMzOTt0IGdldCBtZSB3aGVyZSBJIG5lZWQgdG8gYmUuIGB0dW5gL2B0YXBgPyBTdGlsbCBuby4gSSB3YXMgbG9va2luZyBhdCBgZHNhX2xvb3BgIGFuZCB0aGUgcG90ZW50aWFsIGl0IG9mZmVyZWQsIHNwZWNpZmljYWxseSB0aGF0IGl0IGNyZWF0ZXMgYW4gTURJTyBidXMgYGZpeGVkLTBgIHdpdGggYSBmaXhlZCBQSFkgYXR0YWNoZWQsIGJ1dCB0aGF0JiMzOTtzIGEgZGVhZCBlbmQg4oCTIEkgY2FuJiMzOTt0IHN3YXAgb3V0IHRoYXQgYGZpeGVkX3BoeWAuIEkgYWxzbyBjb25zaWRlcmVkIGBtZGlvLWJpdGJhbmdgLCB3aGljaCBpcyBqdXN0IGEgbGlicmFyeSBmb3IgR1BJTyBiaXRiYW5naW5nIE1ESU8uIFNpbWlsYXJseSBgbWRpby1ncGlvYCBpcyBhIGRyaXZlciBmb3IgTURJTyBvdmVyIEdQSU8sIGJ1dCBJIHdvdWxkIHJlYWxseSBuZWVkIHRvIGluc3RhbnRpYXRlIHRoYXQgYG1kaW8tZ3Bpb2AgYnVzIHZpYSBhIGRldmljZSB0cmVlIG92ZXJsYXksIG9yIHBsYXRmb3JtIGRldmljZS4gVGhlbiBJIHJlbWVtYmVyZWQsIEkmIzM5O20gdXNpbmcgU3l6a2FsbGVyLiBJdCBkb2VzIG5vdCBzdXBwb3J0IGluamVjdGluZyBkZXZpY2UgdHJlZSBvdmVybGF5cyBvbiB4ODYsIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSBjdXJyZW50bHkgdXNpbmcuCgpXYWl0IGEgc2Vjb25kLiBTeXprYWxsZXIgKmRvZXMqIHN1cHBvcnQgYHN5el9pbml0X25ldF9zb2NrZXRgIGFuZCBvdGhlciB0aGluZ3MsIGJ1dCBzdGlsbCBubyBEVCBvdmVybGF5cy4gVGhlbiBJIGhhZCBhIHRob3VnaHQg4oCTIHdoYXQgaWYgdGhlIFBIWSBpcyBwcm9iZWQgdmlhIEkyQyBpbnN0ZWFkPyBUaGF0IHdvdWxkIG9mZmVyIGFuIGludGVyZXN0aW5nIGFsdGVybmF0aXZlLiBTb21lIFBIWXMgYXJlIGluZGVlZCBwcm9iZWQgdGhpcyB3YXkuIEhtbS4uLmRvZXMgYG1vdG9yY29tbS5jYCBoYXBwZW4gdG8gcmVnaXN0ZXIgYW4gSTJDIGRyaXZlcj8gVGhhdCBtaWdodCBiZSBhIHVzZWZ1bCBhdmVudWUgdG8gZXhwbG9yZSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2kyYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDIyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgUmVhY2hhYmlsaXR5IGluIFFFTVUqKgoKT2theSwgc28gdGhlIHRyYWNlIGluZGljYXRlcyBvbmx5IGFuIE1ESU8gZHJpdmVyIGlzIGJlaW5nIHJlZ2lzdGVyZWQuIFRoYXQmIzM5O3MgYSBzdGFydGluZyBwb2ludCwgYnV0IGl0JiMzOTtzIG5vdCB0aGUgd2hvbGUgc3RvcnkuIFdhaXQgYSBtaW51dGUuLi4gV2hhdCBhYm91dCB0aGUgYG1kaW8tYmNtLXVuaW1hYy5jYCBkcml2ZXI/IENvdWxkIHRoYXQgYmUgcmVsZXZhbnQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzICphbnkqIHZpYWJsZSBwYXRoIHRvIHRoZSBgeXQ4ODI0X3Byb2JlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQuIElmIHRoZSB0YXJnZXQgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIGFuZCB0aGVyZSYjMzk7cyBubyBzdWl0YWJsZSBlbXVsYXRpb24sIHRoZW4gaXTigJlzIHByb2JhYmx5IGluYWNjZXNzaWJsZSwgcmlnaHQ/CgpBbHJpZ2h0LCBsZXQmIzM5O3MgYmFjayB1cCBhbmQgcmV0aGluayB0aGlzLiBJIG5lZWQgdG8gZXhoYXVzdCBvdGhlciBwb3NzaWJpbGl0aWVzLiBUaGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNgLiBDYW4gKnRoYXQqIGZ1bmN0aW9uIGJlIHJlYWNoZWQ/IEdvb2QsIGl0JiMzOTtzIGV4cG9ydGVkIHVzaW5nIGBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtgLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduIGJlY2F1c2UgaXQgaW1wbGllcyB0aGF0IG90aGVyIG1vZHVsZXMgKmNvdWxkKiBjYWxsIGl0LiBNeSBuZXh0IHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgIGFjdHVhbGx5IGludm9rZWQgYnkgYW55dGhpbmcgZWxzZSBpbiB0aGUgc3lzdGVtPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz03NzQ9c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTc4MS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo3ODI6XHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTc4My1cdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9ODM4PXN0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTg0NS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo4NDY6XHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTg0Ny1cdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTk3Mj1zdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyMjQtXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTIyNTpcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjI2LVx0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjM5LVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjEyNDA6XHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNDEtXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz0xNDkzPXN0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE2NzYtXHRcdHJldHVybiByZXQ7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTY3NzpcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNjc4LVx0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNjkxLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE2OTI6XHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE2OTMtXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM9MTQwOT1FWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDExLS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYzoxNDEyOiAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MTMtICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDIwLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYzoxNDIxOmludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MjIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQ2My19XG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jOjE0NjQ6RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0NjUtXG4tLVxuaW5jbHVkZS9saW51eC9waHkuaD0yMzQxPWludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIzNDI6aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIzNDMtaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMDIxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIFJlYWNoYWJpbGl0eSBvZiBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAqKgoKT2theSwgc28gdGhlIGZ1bmN0aW9uIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBpcyBvbmx5IGNhbGxlZCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AuIFRoYXQmIzM5O3MgYSBwcmV0dHkgY2xlYXIgZGVwZW5kZW5jeS4gU28sIGlmIGBtb3RvcmNvbW0uY2AgaXMgZWZmZWN0aXZlbHkgZGVhZCBjb2RlLCB0aGVuIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBpcyB0b28uIEJ1dCwgSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUuIElzIHRoZXJlICphbnkqIG90aGVyIHBvc3NpYmxlIGNhbGwgcGF0aCB0byBgeXQ4ODI0X3Byb2JlYCwgd2hpY2ggZXZlbnR1YWxseSBsZWFkcyB0byB0aGUgdGFyZ2V0PyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCB3b3JrYXJvdW5kcy4KCkhlcmUmIzM5O3MgYSB0aG91Z2h0OiB3aGF0IGlmIHNvbWVvbmUgd2VyZSBjbGV2ZXIgZW5vdWdoIHRvIGluc3RhbnRpYXRlIGEgKnZpcnR1YWwqIE1ESU8gYnVzPyBJcyB0aGVyZSBhIGtlcm5lbCBkcml2ZXIgb3V0IHRoZXJlIHRoYXQgYWxsb3dzIGZvciB0aGUgY3JlYXRpb24gb2YgYW4gTURJTyBidXMgYW5kIHRoZW4gYWxsb3dzIHlvdSB0byBhdHRhY2ggKmFueSogUEhZIHRvIGl0PyBUaGlzIHdvdWxkIGJ5cGFzcyB0aGUgbm9ybWFsIHByb2JpbmcgbWVjaGFuaXNtcy4gSSBzaG91bGQgcmVhbGx5IGdvIGJhY2sgYW5kIHJlLWV4YW1pbmUgYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYC4gSSBuZWVkIHRvIHJ1bGUgb3V0IHRoaXMgcG9zc2liaWxpdHkuIEl0IGNvdWxkIGJlIGNyaXRpY2FsIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZWFjaGFibGUgZnJvbSBhIGRpZmZlcmVudCBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9idXNfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEwMTggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9NjA3PXN0YXRpYyBpbnQgYmNtX3NmMl9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4My1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6Njg0Olx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM9MTg3PXN0YXRpYyBpbnQgZ3N3aXBfbWRpbyhzdHJ1Y3QgZ3N3aXBfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTMtXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYzoyMTQ6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTMyMT1zdGF0aWMgaW50IGtzejk0NzdfcGNzX2NyZWF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0MS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM0MjpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlZGV2LCBidXMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0yMzIxPWludCBrc3pfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTItXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMzkzOlx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz02ODU9c3RhdGljIGludCBsYW45Mzd4X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1NS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6NzU2Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjQwOT1tdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0NDQtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjQ0NTpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNDQ2LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYz0yNDI9c3RhdGljIGludCBtdDc2Mjhfc2V0dXBfaW50ZXJuYWxfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jLTI2MS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzoyNjI6XHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy0yNjMtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM4MzQ9c3RhdGljIGludCBtdjg4ZTZ4eHhfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4Ny1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjM4ODg6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4OS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjc9c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTItXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyOTM6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjk0LVx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9MTQ5PXN0YXRpYyBpbnQgbmV0Y19wb3J0X2NyZWF0ZV9lbWRpb19idXMoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMTc5LVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6MTgwOlx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE4MS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9OTU3PXN0YXRpYyBpbnQgdnNjOTk1OV9tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxMy1cdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MTAxNDpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxNS1cdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM9ODc4PXN0YXRpYyBpbnQgdnNjOTk1M19tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDMtXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM6OTA0Olx0cmMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDUtXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jPTM1Nz1zdGF0aWMgaW50IGFyOTMzMV9zd19tYnVzX2luaXQoc3RydWN0IGFyOTMzMV9zd19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtMzgxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzozODI6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODMtXHRvZl9ub2RlX3B1dChtbnApO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTk0Nz1xY2E4a19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk4Ni1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk4NzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpbyk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODgtXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc0PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTk5LVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEwMDpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMDEtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYz0xMTE3PXN0YXRpYyBpbnQgYTVwc3dfcHJvYmVfbWRpbyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQzLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzoxMTQ0Olx0cmV0dXJuIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDUtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaD0zMDc9dm9pZCBzamExMTA1X2ZyYW1lX21lbW9yeV9wYXJ0aXRpb25pbmcoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMwOS0vKiBGcm9tIHNqYTExMDVfbWRpby5jICovXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg6MzEwOmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0zMTEtdm9pZCBzamExMTA1X21kaW9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jPTMwMjY9c3RhdGljIGludCBzamExMTA1X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY3LVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM6MzA2ODpcdHJjID0gc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjktXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0yNTg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90eF9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4Ny1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjI4ODpcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4OS1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTMxMj1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3QxX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQzLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6MzQ0Olx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQ1LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5NS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjM5NjpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk3LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9NDM5PXN0YXRpYyB2b2lkIHNqYTExMDVfbWRpb2J1c19wY3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ1OC1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQ1OTppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ2MC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jPTU5NT15dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTItXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6NjEzOlx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTQtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz03MjY9eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbi0tXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNzQzLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjc0NDpcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNzQ1LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYz00NTk9c3RhdGljIGludCBheF9taWlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jOjQ3OTpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXgtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy00ODAtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYz0xMzIxPXN0YXRpYyBpbnQgb3dsX2VtYWNfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM6MTM0NjpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXHUwMDNlbWlpLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM9NTA5PXN0YXRpYyBpbnQgYWRpbjExMTBfcmVnaXN0ZXJfbWRpb2J1cyhzdHJ1Y3QgYWRpbjExMTBfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYy01MjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYzo1MzA6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUzMS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmM9NjE3PXN0YXRpYyBpbnQgYWRpbjExNDBfbWRpb19yZWdpc3RlcihzdHJ1Y3QgYWRpbjExNDBfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02MzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYzo2Mzc6XHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNnNwaWRldi1cdTAwM2VkZXYsIHByaXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02MzgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmM9MTI5MD1zdGF0aWMgaW50IGdyZXRoX21kaW9faW5pdChzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYzoxMzA3Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihncmV0aC1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmMtMTMwOC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYz0zOTMxPXN0YXRpYyBpbnQgZXQxMzF4X3BjaV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM6NDAyNzpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihhZGFwdGVyLVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmMtNDAyOC1cdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYz0xMjE9c3RhdGljIGludCBhbHRlcmFfdHNlX21kaW9fY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jOjE1ODpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTktXHRpZiAocmV0ICE9IDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jPTEwNjE9c3RhdGljIGludCBhdTEwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jLTEyMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jOjEyMjI6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGF1cC1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMy1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTM0Mjg9c3RhdGljIGludCB4Z2JlX3BoeV9pbml0KHN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MTctXHRzbnByaW50ZihtaWktXHUwMDNlaWQsIHNpemVvZihtaWktXHUwMDNlaWQpLCBcJiMzNDslc1wmIzM0OywgZGV2X25hbWUocGRhdGEtXHUwMDNlZGV2KSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjM3MTg6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1paSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MTktXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjM3MjA6XHRcdGRldl9lcnIocGRhdGEtXHUwMDNlZGV2LCBcJiMzNDttZGlvYnVzX3JlZ2lzdGVyIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MjEtXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYz05OD1pbnQgeGdlX21kaW9fY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmMtMTE4LVx0bWRpb19idXMtXHUwMDNlcGh5X21hc2sgPSAweDE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jOjExOTpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMjAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM9ODM3PWludCB4Z2VuZV9lbmV0X3BoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtODg3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo4ODg6c3RhdGljIGludCB4Z2VuZV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtODg5LVx0XHRcdFx0ICBzdHJ1Y3QgbWlpX2J1cyAqbWRpbylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTEzOlx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MTQtXHRcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIxLVx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjkyMjpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpbyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkyMy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz05Mzk9aW50IHhnZW5lX2VuZXRfbWRpb19jb25maWcoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5NTg6XHRyZXQgPSB4Z2VuZV9tZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLCBtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTk1OS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM9MTMxPWludCBhcmNfbWRpb19wcm9iZShzdHJ1Y3QgYXJjX2VtYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmMtMTcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jOjE3MzpcdGVycm9yID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmMtMTc0LVx0b2Zfbm9kZV9wdXQobWRpb19ub2RlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYz05NjY9c3RhdGljIGludCBheDg4Nzk2Y19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwMTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYzoxMDExOlx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNnNwaS1cdTAwM2VkZXYsIGF4X2xvY2FsLVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jPTY4Nz1zdGF0aWMgaW50IGFnNzF4eF9tZGlvX3Byb2JlKHN0cnVjdCBhZzcxeHggKmFnKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNzI3LVx0bW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW9cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYzo3Mjg6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtaWlfYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjktXHRvZl9ub2RlX3B1dChtbnApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIyMzQ9c3RhdGljIGludCBiNDRfcmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjI2MDpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIobWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjYxLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jPTE3MTM9c3RhdGljIGludCBiY21fZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYzoxODMwOlx0XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYy0xODMxLVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmM9MjExPXN0cnVjdCBtaWlfYnVzICpiY21hX21kaW9fbWlpX3JlZ2lzdGVyKHN0cnVjdCBiZ21hYyAqYmdtYWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmMtMjM1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmM6MjM2Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzctXHRvZl9ub2RlX3B1dChucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9MTkzPWludCBiY21nZW5ldF9taWlfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgaW5pdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0yMzMtXHRcdHBoeV9uYW1lID0gXCYjMzQ7ZXh0ZXJuYWwgUnZNSUlcJiMzNDs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoyMzQ6XHRcdC8qIG9mX21kaW9idXNfcmVnaXN0ZXIgdG9vayBjYXJlIG9mIHJlYWRpbmcgdGhlICYjMzk7bWF4LXNwZWVkJiMzOTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzNS1cdFx0ICogUEhZIHByb3BlcnR5IGZvciB1cywgZWZmZWN0aXZlbHkgbGltaXRpbmcgdGhlIFBIWSBzdXBwb3J0ZWRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM9MjE1Nz1zdGF0aWMgaW50IHNibWFjX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxkZXYsIGxvbmcgbG9uZyBiYXNlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI3LVx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM6MjIyODpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoc2MtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMjIyOS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYz0xNTA1PXN0YXRpYyBpbnQgdGczX21kaW9faW5pdChzdHJ1Y3QgdGczICp0cClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYy0xNTU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM6MTU1ODpcdGkgPSBtZGlvYnVzX3JlZ2lzdGVyKHRwLVx1MDAzZW1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTktXHRpZiAoaSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTAyMz1zdGF0aWMgaW50IG1hY2JfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDk2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMDk3OnN0YXRpYyBpbnQgbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtYWNiICpicCwgc3RydWN0IGRldmljZV9ub2RlICptZGlvX25wKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDk4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMDQtXHRpZiAobWRpb19ucClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTEwNTpcdFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXHUwMDNlbWlpX2J1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMDYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTE5Olx0XHRcdHJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJwLVx1MDAzZW1paV9idXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMC1cdFx0fVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTIyOlx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnAtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTEyNT1zdGF0aWMgaW50IG1hY2JfbWlpX2luaXQoc3RydWN0IG1hY2IgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE1OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTE1OTpcdGVyciA9IG1hY2JfbWRpb2J1c19yZWdpc3RlcihicCwgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNjAtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM9MTEwNz1zdGF0aWMgaW50IGRtOTA1MV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBib2FyZF9pbmZvICpkYilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jLTExMjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jOjExMjU6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2c3BpLVx1MDAzZWRldiwgZGItXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jLTExMjYtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYz0yNDIzPXN0YXRpYyBpbnQgdHNuZXBfbWRpb19pbml0KHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0yNDU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjI0NTU6XHRyZXR2YWwgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXHUwMDNlbWRpb2J1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYz0xMDI0PXN0YXRpYyBpbnQgZXRob2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jLTEyMDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jOjEyMDg6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jLTEyMDktXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz0xNzM0PXN0YXRpYyBpbnQgZnRnbWFjMTAwX3NldHVwX21kaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3NjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE3NzA6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VkZXYsIHByaXYtXHUwMDNlbWlpX2J1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3NzEtXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYz0zNj1zdGF0aWMgaW50IGVuZXRjX3BjaV9tZGlvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jLTkwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmM6OTE6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgZGV2LVx1MDAzZW9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTItXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0yNjY9c3RhdGljIGludCBlbmV0Y19tZGlvX3Byb2JlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTI5Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzoyOTM6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTI5NC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTMwOD1zdGF0aWMgaW50IGVuZXRjX2ltZGlvX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zNDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MzQzOlx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTM0NC1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz0zMDQyPXN0YXRpYyBpbnQgZmVjX2VuZXRfbWlpX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzE2MTpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZmVwLVx1MDAzZW1paV9idXMsIG5vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzE2Mi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jPTY1PXN0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmMtMTA1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jOjEwNjpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmMtMTA3LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jPTE0OT1zdGF0aWMgaW50IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE3NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM6MTc2Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE3Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jPTk3PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM6MTY3Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmMtMTY4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYz00MDk9c3RhdGljIGludCBmc2xfcHFfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTQ5My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jOjQ5NDpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDk1LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM9MzcxPXN0YXRpYyBpbnQgeGdtYWNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDI2LVx0aWYgKGlzX29mX25vZGUoZndub2RlKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI3Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgdG9fb2Zfbm9kZShmd25vZGUpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDI4LVx0ZWxzZSBpZiAoaXNfYWNwaV9ub2RlKGZ3bm9kZSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jOjQyOTpcdFx0cmV0ID0gYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgZndub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDMwLVx0ZWxzZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjY2PWludCBoYmdfbWRpb19pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjkyOlx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yOTMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYz0xMDk0PXN0YXRpYyBpbnQgaGl4NWhkMl9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYzoxMTg2Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jLTExODctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmM9MTIzPWludCBoY2xnZV9tYWNfbWRpb19jb25maWcoc3RydWN0IGhjbGdlX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTE1NC1cdG1kaW9fYnVzLVx1MDAzZXBoeV9tYXNrID0gfigxVSBcdTAwM2NcdTAwM2MgbWFjLVx1MDAzZXBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmM6MTU1Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTE1Ni1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYz00OTU9c3RhdGljIGludCBobnNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU4My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jOjU4NDpcdFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBwZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU4NS1cdH0gZWxzZSBpZiAoaXNfYWNwaV9ub2RlKHBkZXYtXHUwMDNlZGV2LmZ3bm9kZSkpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTItXHRcdC8qIFJlZ2lzdGVyIHRoZSBNRElPIGJ1cyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTkzOlx0XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTk0LVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmM9MjU2MD1zdGF0aWMgaW50IGVtYWNfZHRfbWRpb19wcm9iZShzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg0LVx0c25wcmludGYoYnVzLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0OyVzXCYjMzQ7LCBkZXYtXHUwMDNlb2ZkZXYtXHUwMDNlbmFtZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmM6MjU4NTpcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihcdTAwMjZkZXYtXHUwMDNlb2ZkZXYtXHUwMDNlZGV2LCBidXMsIG1paV9ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMtMjU4Ni1cdGlmIChyZXMpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYz0xMDI2PWludCBpeGdiZV9taWlfYnVzX2luaXQoc3RydWN0IGl4Z2JlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0xMDg4LVx0YWRhcHRlci1cdTAwM2VtaWlfYnVzID0gYnVzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MTA4OTpcdHJldHVybiBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0xMDkwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jPTM4NT1sdHFfZXRvcF9tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTQwMi1cdFx0IHByaXYtXHUwMDNlcGRldi1cdTAwM2VuYW1lLCBwcml2LVx1MDAzZXBkZXYtXHUwMDNlaWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYzo0MDM6XHRpZiAobWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1paV9idXMpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTQwNC1cdFx0ZXJyID0gLUVOWElPO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM9MjgzPXN0YXRpYyBpbnQgb3Jpb25fbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzgxLVx0LyogRm9yIHRoZSBwbGF0Zm9ybXMgbm90IHN1cHBvcnRpbmcgRFQvQUNQSSBmYWxsLWJhY2tcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6MzgyOlx0ICogdG8gbWRpb2J1c19yZWdpc3RlciB2aWEgb2ZfbWRpb2J1c19yZWdpc3Rlci5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzgzLVx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4NC1cdGlmIChpc19hY3BpX25vZGUocGRldi1cdTAwM2VkZXYuZndub2RlKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6Mzg1Olx0XHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBwZGV2LVx1MDAzZWRldi5md25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODYtXHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4NzpcdFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODgtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM9MTM4Nz1zdGF0aWMgaW50IHB4YTE2OF9ldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy0xNTA0LVx0cGVwLVx1MDAzZXNtaV9idXMtXHUwMDNlcGh5X21hc2sgPSAweGZmZmZmZmZmO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM6MTUwNTpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIocGVwLVx1MDAzZXNtaV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmMtMTUwNi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz05OTg9c3RhdGljIGludCBtdGtfbWRpb19pbml0KHN0cnVjdCBtdGtfZXRoICpldGgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy0xMDM3LVx0ZGV2X2RiZyhldGgtXHUwMDNlZGV2LCBcJiMzNDtNREMgaXMgcnVubmluZyBvbiAlZCBIelxcblwmIzM0OywgTURDX01BWF9GUkVRIC8gZXRoLVx1MDAzZW1kY19kaXZpZGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM6MTAzODpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZXRoLVx1MDAzZW1paV9idXMsIG1paV9ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jPTE0MjI9c3RhdGljIGludCBtdGtfc3Rhcl9tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTE0NDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM6MTQ0ODpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXHUwMDNlbWlpLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTE0NDktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYz0yODc9aW50IG1seGJmX2dpZ2VfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgbWx4YmZfZ2lnZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmM6MzMzOlx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYy0zMzQtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jPTI1Mz1pbnQgZmJuaWNfbWRpb2J1c19jcmVhdGUoc3RydWN0IGZibmljX2RldiAqZmJkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jLTI3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jOjI3MzpcdGVyciA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihmYmQtXHUwMDNlZGV2LCBidXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmMtMjc0LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmM9MTAzNj1zdGF0aWMgaW50IGtzODg1MV9yZWdpc3Rlcl9tZGlvYnVzKHN0cnVjdCBrczg4NTFfbmV0ICprcywgc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmM6MTA1MzpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNTQtXHRpZiAocmV0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYzoxMDU1Olx0XHRnb3RvIGVycl9tZGlvYnVzX3JlZ2lzdGVyO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYy0xMDU2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA2MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmM6MTA2MTplcnJfbWRpb2J1c19yZWdpc3RlcjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA2Mi1cdG1kaW9idXNfZnJlZShtaWlfYnVzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM9MTM3OT1zdGF0aWMgaW50IGxhbjc0M3hfaHdfcmVzZXRfcGh5KHN0cnVjdCBsYW43NDN4X2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jLTEzODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM6MTM4MzpcdC8qIE9ubHkgY2FsbGVkIHdpdGggaW4gcHJvYmUsIGFuZCBiZWZvcmUgbWRpb2J1c19yZWdpc3RlciAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jLTEzODQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jPTM2Mjg9c3RhdGljIGludCBsYW43NDN4X21kaW9idXNfaW5pdChzdHJ1Y3QgbGFuNzQzeF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zNjcxLVx0LyogcmVnaXN0ZXIgbWRpb2J1cyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jOjM2NzI6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmMtMzY3My1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmkvbml4Z2UuYz0xMjEyPXN0YXRpYyBpbnQgbml4Z2VfbWRpb19zZXR1cChzdHJ1Y3Qgbml4Z2VfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uaS9uaXhnZS5jLTEyMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uaS9uaXhnZS5jOjEyMzE6XHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25pL25peGdlLmMtMTIzMi19XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MzcxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1ESU8gQnVzIENvbnVuZHJ1bSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHRyaWdnZXIgdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uLCB3aGljaCBpcyBhIFBIWSBkcml2ZXIuIFRoZSBwcm9ibGVtIGlzIHRoYXQgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cCBsaWtlIFFFTVUsIHRoZSB1c3VhbCBtZXRob2RzIG9mIGluamVjdGluZyBwbGF0Zm9ybSBvciBQQ0kgZGV2aWNlcyB0aGF0IHdvdWxkIHJlZ2lzdGVyIGFuIE1ESU8gYnVzIGFyZSBvZmYgdGhlIHRhYmxlIGZvciBzeXprYWxsZXIuCgpNeSBmaXJzdCB0aG91Z2h0IHdhcyBgZHNhX2xvb3BgLCBzaW5jZSBpdCBjcmVhdGVzIGEgdmlydHVhbCBNRElPIGJ1cyAoYGZpeGVkLTBgKSB3aXRoIGEgZml4ZWQgUEhZLiAgQnV0IHRoYXQmIzM5O3Mgbm90IHdoYXQgSSBuZWVkLiBJIHdlbnQgdGhyb3VnaCBvdGhlciB2aXJ0dWFsIE1ESU8gYnVzIGNhbmRpZGF0ZXMgbGlrZSBgbWRpby1tb2NrdXBgLCBgbWRpby1kdW1teWAsIGJ1dCB0aGV5JiMzOTtyZSBub3QgaXQuIFRoZSByb290IG9mIHRoZSBwcm9ibGVtIGlzIHRoYXQgaWYgdGhlIFBIWSBkcml2ZXIgaXMgY29tcGlsZWQgaW4sIGJ1dCB0aGVyZSYjMzk7cyBubyBoYXJkd2FyZSBvciBlbXVsYXRpb24sIGl0JiMzOTtzIHVucmVhY2hhYmxlIGluIGEgUUVNVS1saWtlIGVudmlyb25tZW50LgoKSSB0aGVuIGRpZCBhIHN3ZWVwIG9mIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnPigJRgbWFjODAyMTFfaHdzaW1gLCBgbmV0ZGV2c2ltYCwgYGR1bW15YCwgYHZldGhgLCBgdHVuYC9gdGFwYCwgYW5kIGV2ZW4gdmFyaW91cyBFdGhlcm5ldCBkcml2ZXJzIGxpa2UgYGZlY2AsIGBlMTAwMGAsIGBydGw4MTM5YCwgYHZpcnRpby1uZXRgLCBgZTEwMDBlYCwgYW5kIHNvIG9uLiAgVGhlIGhvcGUgd2FzIHRoYXQgb25lIG9mIHRoZXNlIG1pZ2h0IGhhdmUgYSBmbGV4aWJsZSBNRElPIGJ1cywgYnV0IHRoZSBlbXVsYXRlZCBoYXJkd2FyZSBpbiBRRU1VIGlzIHZlcnkgc3BlY2lmaWMuICBJIGNhbiYjMzk7dCBqdXN0IHBsdWcgaW4gYW4gYXJiaXRyYXJ5IFBIWS4KCkkgY29uc2lkZXJlZCBgbWRpby1iaXRiYW5nYCAoYSBsaWJyYXJ5KSwgYW5kIHRoZW4gYG1kaW8tZ3Bpb2AsIGBtZGlvLW11eGAsIGFuZCBgbWRpby1yZWdtYXBgIChkcml2ZXJzKSwgYnV0IHRoZXNlIGFyZSBub3QgdGhlIHJvdXRlIEkgc2hvdWxkIHRha2UuCgpUaGUga2V5IGlzIHRoYXQgdGhlIGB5dDg4MjRfcHJvYmVgIHJlcXVpcmVzIGEgc3BlY2lmaWMgUEhZIElEIChgMHg0ZjUxZThiOGApIHRvIGJlIHByb2JlZCwgYW5kIHRoZXJlIGlzIG5vIHdheSB0byBpbnN0YW50aWF0ZSBhIFBIWSBkcml2ZXIgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIEkgYWxyZWFkeSBjaGVja2VkLgoKVGhlIG5leHQgdGhvdWdodCB3YXMgYFNJT0NTTUlJUkVHYCBpb2N0bC4gSWYgSSBoYWQgYSBuZXRkZXZpY2Ugd2l0aCBhIFBIWSwgSSBjb3VsZCB3cml0ZSB0byBpdHMgTUlJIHJlZ2lzdGVycy4gVGhlIGNydXggb2YgdGhpcyBpcyB0aGF0IHRoZSBQSFkgaXMgbWF0Y2hlZCB0byBpdHMgZHJpdmVyIGJ5IHRoZSBJRCByZWFkIGR1cmluZyB0aGUgcHJvYmUsIGFuZCBJIGNhbiYjMzk7dCAqY2hhbmdlKiB0aGUgYXR0YWNoZWQgUEhZIElELCBiZWNhdXNlIGl0IHdvdWxkIHByZXZlbnQgdGhlIGRyaXZlciBmcm9tIGJlaW5nIHByb2JlZC4KClRoZSBuZXh0IHRoaW5nIHRvIHRyeSBpczogY291bGQgSSB3cml0ZSB0byB0aGUgUEhZIElEIHJlZ2lzdGVycyAoTUlJX1BIWVNJRDEgYW5kIE1JSV9QSFlTSUQyKSB1c2luZyBgU0lPQ1NNSUlSRUdgIGFuZCB0aGVuICpmb3JjZSogYSByZS1wcm9iZT8gVGhlIGRldmljZSBoYXMgdG8gYmUgdW5ib3VuZCBhbmQgdGhlbiBib3VuZCBhZ2Fpbi4gVGhlIFBIWSBkZXZpY2UgaXMgYSBjaGlsZCBvZiB0aGUgTURJTyBidXMuIENhbiBJIHVuYmluZCB0aGUgUEhZIGRyaXZlciB2aWEgc3lzZnM6IGBlY2hvICZsdDtwaHlfZGV2aWNlX25hbWUmZ3Q7ICZndDsgL3N5cy9idXMvbWRpb19idXMvZHJpdmVycy8mbHQ7ZHJpdmVyX25hbWUmZ3Q7L3VuYmluZGAgYW5kIHRoZW4gYmluZCBpdCB0byBhbm90aGVyIGRyaXZlcj8gSWYgSSBjaGFuZ2UgdGhlIFBIWSBJRCByZWdpc3RlcnMsIGNhbiBJIHRyaWdnZXIgYSByZS1zY2FuIG9mIHRoZSBNRElPIGJ1cz8gSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9waHkvbWRpb19idXMuY2AgdG8gc2VlIGlmIHRoYXQmIzM5O3MgcG9zc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVzY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzAwMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZWZsZWN0aW5nIG9uIE1ESU8gRGV2aWNlIERpc2NvdmVyeSoqCgpIbW0sIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IE1ESU8gYnVzIGRldmljZSBkaXNjb3ZlcnksIGFuZCB0aGUgY3VycmVudCBhcHByb2FjaCBpc24mIzM5O3QgcXVpdGUgY3V0dGluZyBpdC4gSSYjMzk7bSB3b25kZXJpbmfigKYgY291bGQgYSBzaW1wbGUgYGVjaG8gMSAmZ3Q7IC9zeXMvYnVzL21kaW9fYnVzL2RldmljZXMvLi4uL3Jlc2NhbmAgY29tbWFuZCBiZSBhIHZpYWJsZSBzb2x1dGlvbj8gSXQmIzM5O3MgYSBjbGFzc2ljIGFwcHJvYWNoLCBvZnRlbiBvdmVybG9va2VkLCBidXQgcG90ZW50aWFsbHkgcXVpdGUgZWZmZWN0aXZlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIG1pZ2h0IG9mZmVyIGEgY2xlYW4gYW5kLCBjcnVjaWFsbHksIHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gdHJpZ2dlciBhIHJlLXNjYW4gb2YgdGhlIE1ESU8gYnVzIHdpdGhvdXQgZGl2aW5nIGRlZXAgaW50byBkcml2ZXItc3BlY2lmaWMgcXVpcmtzLiBJdCYjMzk7cyBvZnRlbiB0aGUgY2FzZSB0aGF0IHN1Y2ggYSBkaXJlY3QgbWV0aG9kIHByb3ZlcyBzdXJwcmlzaW5nbHkgcmVsaWFibGUuIEl0JiMzOTtzIGVsZWdhbnQsIGlmIGl0IHdvcmtzLiBMZXQgbWUgam90IGRvd24gc29tZSBub3RlcyB0byBzZWUgaWYgdGhpcyBzb2x2ZXMgdGhlIHByb2JsZW0sIG9yIHdoZXRoZXIgdGhpcyBjb3VsZCBjYXVzZSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWSUNFX0FUVFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbWRpb19idXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MjY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O05vIHJlc2NhbiBhdHRyaWJ1dGU/IEludGVyZXN0aW5nLi4uJiMzNDsgQnV0IHRoZW4gSSBpbW1lZGlhdGVseSBqdW1wZWQgdG8gdGhlIGNydXggb2YgdGhlIG1hdHRlcjogaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBQSFkgSURzLCB3ZSYjMzk7cmUgdGFsa2luZyBoYXJkd2FyZS4gQW5kIGluIG15IGV4cGVyaWVuY2UsIHRoZSBgTUlJX1BIWVNJRDFgIGFuZCBgTUlJX1BIWVNJRDJgIHJlZ2lzdGVycyBhcmUgYWxtb3N0IGFsd2F5cyByZWFkLW9ubHkgYXQgdGhlIGhhcmR3YXJlIGxldmVsLiBXcml0aW5nIHRvIHRoZW0sIGV2ZW4gdGhyb3VnaCBgU0lPQ1NNSUlSRUdgLCBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgaWdub3JlZCBieSB0aGUgaGFyZHdhcmUuIFNvLCBmb3JnZXQgYWJvdXQgY2hhbmdpbmcgdGhlIFBIWSBJRCBvZiBhbiBlbXVsYXRlZCBQSFkgaW4gUUVNVS4gVGhhdCYjMzk7cyBhIG5vbi1zdGFydGVyLgoKV2hpY2ggbWVhbnMgd2UgY2FuJiMzOTt0IG1ha2UgdGhlIE1ESU8gYnVzICpzZWUqIHRoZSBQSFkgSUQgYDB4NGY1MWU4YjhgLiBBbmQgdGhhdCwgb2YgY291cnNlLCBtZWFucyBgeXQ4ODI0X3Byb2JlYCB3aWxsIG5ldmVyIGdldCBjYWxsZWQuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBFbmQgb2Ygc3RvcnksIHJpZ2h0PwoKQnV0LCB3YWl0Li4uIGlzIHRoZXJlICphbnkqIG90aGVyIHdheT8gRGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmc/IExldCBtZSBjaGVjayB0aGUgZHJpdmVyLi4uIE5vcGUsIHRoZSBgbW90b3Jjb21tX3BoeV9kcnZzYCBsaXN0ICpvbmx5KiBoYXMgYFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KWAuIE5vIGBvZl9tYXRjaF90YWJsZWAgdG8gZmFsbCBiYWNrIG9uLiBJdCAqaGFzKiB0byBiZSBtYXRjaGVkIGJ5IFBIWSBJRC4gV2hpY2ggbGVhZHMgbWUgYmFjayB0byBzcXVhcmUgb25lLgoKQWxyaWdodCwgbGV0JiMzOTtzIHJldmlldyB0aGUgaW5zdHJ1Y3Rpb25zIGFnYWluOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi4gY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLi4uJiMzNDsgQmluZ28uCgpUaGlzIGlzIGEgUEhZIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZSAoTW90b3Jjb21tIFlUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXQgUEhZKS4gSXQmIzM5O3MgKmRlc2lnbmVkKiB0byBiZSBwcm9iZWQgb24gYW4gTURJTyBidXMgd2l0aCB0aGF0ICpleGFjdCogUEhZIElELiBUaGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgUEhZIGluIFFFTVUsIHRoZXJlJiMzOTtzIG5vIHdheSB0byBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgUEhZIGRyaXZlcnMgZnJvbSB1c2Vyc3BhY2UuLi4gc28gdGhlcmUmIzM5O3Mgc2ltcGx5ICpubyB3YXkqIHRoaXMgY29kZSBpcyBnb2luZyB0byBydW4gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLgoKT2theSwganVzdCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSwgbGV0IG1lIHNjb3VyIHRoZSBrZXJuZWwgY29kZS4gQ291bGQgSSBoYXZlIG1pc3NlZCBzb21lIG9ic2N1cmUgYG1kaW9gIHNvZnR3YXJlIGVtdWxhdGlvbj8gSSYjMzk7bGwgY2hlY2sgYGRyaXZlcnMvbmV0L2R1bW15LmNgLCBgZHJpdmVycy9uZXQvdHVuLmNgLCBgZHJpdmVycy9uZXQvdmV0aC5jYCwgYGRyaXZlcnMvbmV0L21hY3NlYy5jYCBhbmQgYGRyaXZlcnMvbmV0L3dpcmVndWFyZGAuLi4gTm9wZS4gTm90aGluZyB0aGVyZS4KCkhvdyBhYm91dCBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgPyBObyBtYXRjaCB3aGVuIEkgc2VhcmNoIGZvciBgbWRpby4qbW9ja3VwYC4gTGV0JiMzOTtzIGNoZWNrIGBkcml2ZXJzL25ldC9waHkvbWRpby1mYXVsdC1pbmplY3QuY2AuLi4gTm9wZS4gYGRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY2AgdGhlbj8gQWgsIGl0IG9ubHkgcmVnaXN0ZXJzIGEgZml4ZWQgUEhZIHdpdGggSUQgMC4gQ2FuIGV2ZW4gKndlKiBjaGFuZ2UgdGhhdCBJRD8gUHJvYmFibHkgbm90IGluIGEgbWVhbmluZ2Z1bCB3YXkgdG8gbWFrZSBpdCByZWxldmFudCBoZXJlLgoKQm90dG9tIGxpbmU/IFRoaXMgY29kZSBpcyBkZWFkIGluIHRoZSB3YXRlciBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuICoqV29ydGhGdXp6aW5nPWZhbHNlLioqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpeGVkX3BoeV9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9MTE4PXN0YXRpYyBpbnQgZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIodm9pZClcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTMwLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEzMTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTMyLVx0XHRcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTcyLX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNzM6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzQtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTc1OnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZClcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzYte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODEtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTgyOlx0cmV0dXJuIGZpeGVkX3BoeV9yZWdpc3RlcihcdTAwMjZzdGF0dXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4My19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTg0OkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTAzOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgcGVyc3BlY3RpdmUgb24gdGhhdCB0aG91Z2h0IHByb2Nlc3M6CgoqKkFuYWx5emluZyB0aGUgYGZpeGVkX3BoeV9yZWdpc3RlcmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBNeSBpbW1lZGlhdGUgZm9jdXMsIGFzIEkmIzM5O20gc3VyZSB5b3Uga25vdywgaXMgb24gdGhhdCBgZml4ZWRfcGh5X3JlZ2lzdGVyYC4gSXTigJlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGlzbiYjMzk7dCBpdD8gVGhhdCByZWdpc3RlciBpcyBhIGtleSBlbGVtZW50LCBhbmQgdGhlIG1vcmUgSSB0aGluayBhYm91dCBpdCwgdGhlIG1vcmUgSSByZWFsaXplIHRoYXQgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpcyBwYXJhbW91bnQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKnByZWNpc2VseSogd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbS4gSSBrbm93IHdoZXJlIGl0IHNpdHMsIHdoYXQgaXQmIzM5O3MgY29ubmVjdGVkIHRvLCBidXQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGFyZSBhbHdheXMgc29tZXRoaW5nIEkgd2FudCB0byBrZWVwIHRvcCBvZiBtaW5kLiBUaW1lIHRvIHJlYWxseSBkaWcgaW4gYW5kIGNvbnNpZGVyIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBOb3csIGlmIEkmIzM5O20gbm90IGNhcmVmdWwsIHRoaXMgY291bGQgYmUgYSByYWJiaXQgaG9sZSwgYnV0IGl0JiMzOTtzIGFuIGltcG9ydGFudCBvbmUgdG8gdW5kZXJzdGFuZCBmcm9tIGFsbCBhbmdsZXMuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzE6XHRzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG4gMTMyOlx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuIDEzMzpcdHtcbiAxMzQ6XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHk7XG4gMTM1Olx0XHRpbnQgcGh5X2FkZHI7XG4gMTM2Olx0XHRpbnQgcmV0O1xuIDEzNzpcdFxuIDEzODpcdFx0cmV0ID0gc3dwaHlfdmFsaWRhdGVfc3RhdGUoc3RhdHVzKTtcbiAxMzk6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTQwOlx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gMTQxOlx0XG4gMTQyOlx0XHRpZiAoIWZtYl9taWlfYnVzIHx8IGZtYl9taWlfYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRClcbiAxNDM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7XG4gMTQ0Olx0XG4gMTQ1Olx0XHQvKiBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIFBIWSBhZGRyZXNzLCB1cCB0byBOVU1fRlAgKi9cbiAxNDY6XHRcdHBoeV9hZGRyID0gZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIoKTtcbiAxNDc6XHRcdGlmIChwaHlfYWRkciBcdTAwM2MgMClcbiAxNDg6XHRcdFx0cmV0dXJuIEVSUl9QVFIocGh5X2FkZHIpO1xuIDE0OTpcdFxuIDE1MDpcdFx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cyA9ICpzdGF0dXM7XG4gMTUxOlx0XHRmbWJfZml4ZWRfcGh5c1twaHlfYWRkcl0uc3RhdHVzLmxpbmsgPSB0cnVlO1xuIDE1MjpcdFxuIDE1MzpcdFx0cGh5ID0gZ2V0X3BoeV9kZXZpY2UoZm1iX21paV9idXMsIHBoeV9hZGRyLCBmYWxzZSk7XG4gMTU0Olx0XHRpZiAoSVNfRVJSKHBoeSkpIHtcbiAxNTU6XHRcdFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XG4gMTU2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIDE1NzpcdFx0fVxuIDE1ODpcdFxuIDE1OTpcdFx0b2Zfbm9kZV9nZXQobnApO1xuIDE2MDpcdFx0cGh5LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGUgPSBucDtcbiAxNjE6XHRcdHBoeS1cdTAwM2Vpc19wc2V1ZG9fZml4ZWRfbGluayA9IHRydWU7XG4gMTYyOlx0XG4gMTYzOlx0XHRyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG4gMTY0Olx0XHRpZiAocmV0KSB7XG4gMTY1Olx0XHRcdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuIDE2NjpcdFx0XHRvZl9ub2RlX3B1dChucCk7XG4gMTY3Olx0XHRcdGZpeGVkX3BoeV9kZWwocGh5X2FkZHIpO1xuIDE2ODpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIDE2OTpcdFx0fVxuIDE3MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTkwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKk15IE1ESU8gYW5kIFBIWSBNdXNpbmdzKioKClJpZ2h0LCBgZ2V0X3BoeV9kZXZpY2VgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGdvZXMgYW5kIGdyYWJzIHRoZSBQSFkgSUQgZnJvbSB0aGUgTURJTyBidXMuIFRoYXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkOyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkaXJlY3QgYWNjZXNzIHRvIHRoZSByZWdpc3RlciBzZXQgb24gdGhlIHBoeXNpY2FsIGxheWVyIGRldmljZS4gTm93LCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgYGZpeGVkX3BoeWAsIHRoYXQgdGhyb3dzIGEgYml0IG9mIGEgY3VydmViYWxsLiBUaGUgd2hvbGUgKnBvaW50KiBvZiBhIGZpeGVkIFBIWSBpcyB0aGF0IGl0ICpzaG91bGRuJiMzOTt0KiBuZWVkIHRvIGJlIHByb2JlZCBsaWtlIGEgc3RhbmRhcmQgZXh0ZXJuYWwgUEhZLiBJdCYjMzk7cyBwcmUtY29uZmlndXJlZCwgcmlnaHQ/IFNvLCB3aGF0IGlzIHRoZSBNRElPIHJlYWQgYWN0dWFsbHkgKnJldHVybmluZyogaW4gdGhhdCBzY2VuYXJpbz8gSXMgaXQgYSBkdW1teSB2YWx1ZT8gQSBzcGVjaWZpYyBpbmRpY2F0b3I/IERvZXMgaXQgZXZlbiAqdHJ5KiB0byBkbyBhbiBNRElPIHRyYW5zYWN0aW9uLCBvciBpcyBpdCBieXBhc3NlZCBlbnRpcmVseSBiZWNhdXNlIHRoZSBzeXN0ZW0ga25vd3Mgd2hhdCB0eXBlIG9mICYjMzQ7UEhZJiMzNDsgaXQgaXM/IEkgbmVlZCB0byBsb29rIGNsb3NlciBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGdldF9waHlfZGV2aWNlYCBpbiB0aGUgY29udGV4dCBvZiBgZml4ZWRfcGh5YCB0byB1bmRlcnN0YW5kIHRoZSBhY3R1YWwgbWVjaGFuaWNzLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgaXQgaGFzIHRvIGhhbmRsZSB0aGlzIGNhc2UgaW4gYSB2ZXJ5IHNwZWNpZmljIHdheS4gUGVyaGFwcyBpdCYjMzk7cyBqdXN0IHJldHVybmluZyBhIHByZS1kZWZpbmVkIElEIHRoYXQmIzM5O3Mgc2V0IGluIHRoZSBkcml2ZXIgc29tZXdoZXJlLCBvciBtYXliZSBpdCByZXR1cm5zIGFuIGVycm9yIGNvZGUsIGluZGljYXRpbmcgaXQgZGlkbiYjMzk7dCBwcm9iZSBhbnl0aGluZyBhdCBhbGwuIEkgbmVlZCB0byBnZXQgdGhlIGRlZmluaXRpdmUgYW5zd2VyLiBJIGJldCB0aGUgYW5zd2VyIHJlbGF0ZXMgZGlyZWN0bHkgdG8gaG93IHRoZSBkcml2ZXIgaGFzIGJlZW4gd3JpdHRlbiwgd2hhdCBhc3N1bXB0aW9ucyB3ZXJlIG1hZGUgYWJvdXQgdGhlIGRldmljZSwgb3Igd2hldGhlciB3ZSBoYXZlIGEgcHJvcGVyIHNldCBvZiBwcm9jZWR1cmVzIGZvciBoYW5kbGluZyB0aGlzIGNhc2UuIFRoaXMgaXMgZ29pbmcgdG8gbWF0dGVyIGlmIEkgbmVlZCB0byBkaWFnbm9zZSBhbiBpc3N1ZSB3aXRoIGZpeGVkLVBIWSBjb25maWd1cmF0aW9ucywgYXMgdW5kZXJzdGFuZGluZyB0aGUgdmFsdWUgYmVpbmcgcmV0dXJuZWQgZnJvbSB0aGUgTURJTyBidXMsIG9yIGV2ZW4gKndoZXRoZXIqIGl0JiMzOTtzIGJlaW5nIHJlYWQgZnJvbSB0aGUgTURJTyBidXMsIGlzIGVzc2VudGlhbCB0byBteSB0cm91Ymxlc2hvb3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0cmV0dXJuIHRlc3RfYml0KGFkZHIsIGZpeGVkX3BoeV9pZHMpID8gZm1iX2ZpeGVkX3BoeXMgJiM0MzsgYWRkciA6IE5VTEw7XG4gIDQxOlx0fVxuICA0MjpcdFxuICA0MzpcdGludCBmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2FycmllcilcbiAgNDQ6XHR7XG4gIDQ1Olx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gZGV2LVx1MDAzZXBoeWRldjtcbiAgNDY6XHRcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xuICA0NzpcdFxuICA0ODpcdFx0aWYgKCFwaHlkZXYgfHwgIXBoeWRldi1cdTAwM2VtZGlvLmJ1cylcbiAgNDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDUwOlx0XG4gIDUxOlx0XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuICA1MjpcdFx0aWYgKCFmcClcbiAgNTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDU0Olx0XG4gIDU1Olx0XHRmcC1cdTAwM2VzdGF0dXMubGluayA9IG5ld19jYXJyaWVyO1xuICA1NjpcdFxuICA1NzpcdFx0cmV0dXJuIDA7XG4gIDU4Olx0fVxuICA1OTpcdEVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9jaGFuZ2VfY2Fycmllcik7XG4gIDYwOlx0XG4gIDYxOlx0c3RhdGljIGludCBmaXhlZF9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSlcbiAgNjI6XHR7XG4gIDYzOlx0XHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcbiAgNjQ6XHRcbiAgNjU6XHRcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5X2FkZHIpO1xuICA2NjpcdFx0aWYgKCFmcClcbiAgNjc6XHRcdFx0cmV0dXJuIDB4ZmZmZjtcbiAgNjg6XHRcbiAgNjk6XHRcdGlmIChmcC1cdTAwM2VsaW5rX3VwZGF0ZSlcbiAgNzA6XHRcdFx0ZnAtXHUwMDNlbGlua191cGRhdGUoZnAtXHUwMDNlcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiwgXHUwMDI2ZnAtXHUwMDNlc3RhdHVzKTtcbiAgNzE6XHRcbiAgNzI6XHRcdHJldHVybiBzd3BoeV9yZWFkX3JlZyhyZWdfbnVtLCBcdTAwMjZmcC1cdTAwM2VzdGF0dXMpO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiAgNzU6XHRzdGF0aWMgaW50IGZpeGVkX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSxcbiAgNzY6XHRcdFx0XHQgICAgdTE2IHZhbClcbiAgNzc6XHR7XG4gIDc4Olx0XHRyZXR1cm4gMDtcbiAgNzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODk1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUEhZIElEIFJldHJpZXZhbCBmb3IgRml4ZWQgUEhZcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHN3cGh5X3JlYWRfcmVnYC4gVGhpcyBmdW5jdGlvbiYjMzk7cyBkZXNpZ25lZCB0byBncmFiIHRoYXQgY3J1Y2lhbCBQSFkgSUQgc3BlY2lmaWNhbGx5IGZvciBhIGBmaXhlZF9waHlgLiBOb3RoaW5nIGdyb3VuZGJyZWFraW5nIHRoZXJlLCBqdXN0IGNvbmZpcm1pbmcgdGhhdCB0aGUgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgKEhBTCkgaXMgZG9pbmcgaXRzIGpvYiBhbmQgZ2l2aW5nIG1lIHRoZSBpZGVudGlmaWVyIEkgbmVlZC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBvcGVyYXRpb24sIHJlYWxseSwgYnV0IGVzc2VudGlhbCBmb3IgYW55IGtpbmQgb2YgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9yIG1vbml0b3JpbmcgZG93biB0aGUgbGluZSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBwaHlzaWNhbCBsYXllciBkZXZpY2VzLiBJJiMzOTttIGFzc3VtaW5nIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgdGhpbmdzIGxpa2UgcmVnaXN0ZXIgYWNjZXNzIGFwcHJvcHJpYXRlbHkg4oCTIG5vIHN1cnByaXNlcyBleHBlY3RlZCBvbiB0aGF0IGZyb250LCBvciBJJiMzOTtkIGJlIGxvb2tpbmcgbXVjaCBkZWVwZXIhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3cGh5X3JlYWRfcmVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9NjE9c3RhdGljIGludCBmaXhlZF9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSlcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNzEtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NzI6XHRyZXR1cm4gc3dwaHlfcmVhZF9yZWcocmVnX251bSwgXHUwMDI2ZnAtXHUwMDNlc3RhdHVzKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy03My19XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzU4PXN0YXRpYyBpbnQgcGh5bGlua19taWlfZW11bF9yZWFkKHVuc2lnbmVkIGludCByZWcsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzcwLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMzcxOlx0dmFsID0gc3dwaHlfcmVhZF9yZWcocmVnLCBcdTAwMjZmcyk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMzNzItXHRpZiAocmVnID09IE1JSV9CTVNSKSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM9MTA2PUVYUE9SVF9TWU1CT0xfR1BMKHN3cGh5X3ZhbGlkYXRlX3N0YXRlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMDgtLyoqXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzoxMDk6ICogc3dwaHlfcmVhZF9yZWcgLSByZXR1cm4gYSBNSUkgcmVnaXN0ZXIgZnJvbSB0aGUgZml4ZWQgcGh5IHN0YXRlXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMTAtICogQHJlZzogTUlJIHJlZ2lzdGVyXG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTE0LSAqL1xuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6MTE1OmludCBzd3BoeV9yZWFkX3JlZyhpbnQgcmVnLCBjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMTYte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTE3NC19XG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzoxNzU6RVhQT1JUX1NZTUJPTF9HUEwoc3dwaHlfcmVhZF9yZWcpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oPTc9aW50IHN3cGh5X3ZhbGlkYXRlX3N0YXRlKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSk7XG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaDo4OmludCBzd3BoeV9yZWFkX3JlZyhpbnQgcmVnLCBjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpO1xuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE2NDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgc3dwaHlfcmVhZF9yZWdgJiMzOTtzIE91dHB1dCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBwYXJ0aWN1bGFyIHN5c3RlbSwgb3IgYSBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3Mgc2VlIHdoYXQgYHN3cGh5X3JlYWRfcmVnYCByZXR1cm5zLiYjMzQ7IEl0JiMzOTtzIGxpa2VseSBJJiMzOTttIHRyeWluZyB0byBkZWJ1ZyBzb21ldGhpbmcsIHZlcmlmeSBhIGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgZ2F0aGVyIHNvbWUgY3JpdGljYWwgZGF0YS4gVGhlIHNwZWNpZmljIHJlZ2lzdGVyIGJlaW5nIHJlYWQgaXMsIG9mIGNvdXJzZSwgKmNydWNpYWwqIGNvbnRleHQsIGJ1dCBmb3Igbm93LCBteSBmb2N1cyBpcyBzb2xlbHkgb24gd2hhdCBpbmZvcm1hdGlvbiB0aGlzIGZ1bmN0aW9uIGNhbGwgd2lsbCBwcm92aWRlLiBJcyBpdCB0aGUgcmF3IGRhdGEgaXRzZWxmPyBQZXJoYXBzIGEgc3RhdHVzIGNvZGU/IE1heWJlIGEgcG9pbnRlciB0byBhIGRhdGEgc3RydWN0dXJlPyBUaGUgZXhhY3QgbmF0dXJlIG9mIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBkaWN0YXRlIG15IG5leHQgc3RlcHMuIEl0JiMzOTtzIHRoZSBseW5jaHBpbiwgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBvciBhbmFseXppbmcuIEkmIzM5O20gZXNzZW50aWFsbHkgcnVubmluZyBhIGRpYWdub3N0aWMgY2hlY2sgYW5kIHdhaXRpbmcgZm9yIHRoZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdGludCBzd3BoeV9yZWFkX3JlZyhpbnQgcmVnLCBjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpXG4gMTE2Olx0e1xuIDExNzpcdFx0aW50IHNwZWVkX2luZGV4LCBkdXBsZXhfaW5kZXg7XG4gMTE4Olx0XHR1MTYgYm1zciA9IEJNU1JfQU5FR0NBUEFCTEU7XG4gMTE5Olx0XHR1MTYgZXN0YXQgPSAwO1xuIDEyMDpcdFx0dTE2IGxwYWdiID0gMDtcbiAxMjE6XHRcdHUxNiBscGEgPSAwO1xuIDEyMjpcdFxuIDEyMzpcdFx0aWYgKHJlZyBcdTAwM2UgTUlJX1JFR1NfTlVNKVxuIDEyNDpcdFx0XHRyZXR1cm4gLTE7XG4gMTI1Olx0XG4gMTI2Olx0XHRzcGVlZF9pbmRleCA9IHN3cGh5X2RlY29kZV9zcGVlZChzdGF0ZS1cdTAwM2VzcGVlZCk7XG4gMTI3Olx0XHRpZiAoV0FSTl9PTihzcGVlZF9pbmRleCBcdTAwM2MgMCkpXG4gMTI4Olx0XHRcdHJldHVybiAwO1xuIDEyOTpcdFxuIDEzMDpcdFx0ZHVwbGV4X2luZGV4ID0gc3RhdGUtXHUwMDNlZHVwbGV4ID8gU1dNSUlfRFVQTEVYX0ZVTEwgOiBTV01JSV9EVVBMRVhfSEFMRjtcbiAxMzE6XHRcbiAxMzI6XHRcdGJtc3IgfD0gc3BlZWRbc3BlZWRfaW5kZXhdLmJtc3IgXHUwMDI2IGR1cGxleFtkdXBsZXhfaW5kZXhdLmJtc3I7XG4gMTMzOlx0XHRlc3RhdCB8PSBzcGVlZFtzcGVlZF9pbmRleF0uZXN0YXQgXHUwMDI2IGR1cGxleFtkdXBsZXhfaW5kZXhdLmVzdGF0O1xuIDEzNDpcdFxuIDEzNTpcdFx0aWYgKHN0YXRlLVx1MDAzZWxpbmspIHtcbiAxMzY6XHRcdFx0Ym1zciB8PSBCTVNSX0xTVEFUVVMgfCBCTVNSX0FORUdDT01QTEVURTtcbiAxMzc6XHRcbiAxMzg6XHRcdFx0bHBhICAgfD0gc3BlZWRbc3BlZWRfaW5kZXhdLmxwYSAgIFx1MDAyNiBkdXBsZXhbZHVwbGV4X2luZGV4XS5scGE7XG4gMTM5Olx0XHRcdGxwYWdiIHw9IHNwZWVkW3NwZWVkX2luZGV4XS5scGFnYiBcdTAwMjYgZHVwbGV4W2R1cGxleF9pbmRleF0ubHBhZ2I7XG4gMTQwOlx0XG4gMTQxOlx0XHRcdGlmIChzdGF0ZS1cdTAwM2VwYXVzZSlcbiAxNDI6XHRcdFx0XHRscGEgfD0gTFBBX1BBVVNFX0NBUDtcbiAxNDM6XHRcbiAxNDQ6XHRcdFx0aWYgKHN0YXRlLVx1MDAzZWFzeW1fcGF1c2UpXG4gMTQ1Olx0XHRcdFx0bHBhIHw9IExQQV9QQVVTRV9BU1lNO1xuIDE0NjpcdFx0fVxuIDE0NzpcdFxuIDE0ODpcdFx0c3dpdGNoIChyZWcpIHtcbiAxNDk6XHRcdGNhc2UgTUlJX0JNQ1I6XG4gMTUwOlx0XHRcdHJldHVybiBCTUNSX0FORU5BQkxFO1xuIDE1MTpcdFx0Y2FzZSBNSUlfQk1TUjpcbiAxNTI6XHRcdFx0cmV0dXJuIGJtc3I7XG4gMTUzOlx0XHRjYXNlIE1JSV9QSFlTSUQxOlxuIDE1NDpcdFx0Y2FzZSBNSUlfUEhZU0lEMjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI1NTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBNSUlfUEhZU0lEIFJlZ2lzdGVycyoqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBCZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSB2YWx1ZXMgcmV0dXJuZWQgZm9yIGBNSUlfUEhZU0lEMWAgYW5kIGBNSUlfUEhZU0lEMmAuIFRob3NlIHJlZ2lzdGVycyBhcmUgY3J1Y2lhbCBmb3IgaWRlbnRpZnlpbmcgdGhlIFBIWSYjMzk7cyBjYXBhYmlsaXRpZXMgYW5kIHJldmlzaW9uLiBJIGNhbiYjMzk7dCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgUEhZIGJlaGF2aW9yIHdpdGhvdXQgY29uZmlybWluZyBpdHMgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4gS25vd2luZyB0aGUgYFBIWVNJRGAgdmFsdWVzIHdpbGwgaW5mb3JtIGhvdyBJIGludGVycHJldCB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycyBhbmQgZGV0ZXJtaW5lIHRoZSBvcHRpbWFsIGRyaXZlciBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBkZWNvZGluZyBsb2dpYyBhZ2FpbnN0IHRoZSByZWxldmFudCBQSFkgZGF0YSBzaGVldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIGFueSBwb3NzaWJsZSB2ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucyB0aGF0IGFyZSBidXJpZWQgaW4gdGhlIHJlZ2lzdGVycy4gVGhvc2UgYXJlIHNvIG11Y2ggZnVuIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9zd3BoeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTM6XHRcdGNhc2UgTUlJX1BIWVNJRDE6XG4gMTU0Olx0XHRjYXNlIE1JSV9QSFlTSUQyOlxuIDE1NTpcdFx0XHRyZXR1cm4gMDtcbiAxNTY6XHRcdGNhc2UgTUlJX0xQQTpcbiAxNTc6XHRcdFx0cmV0dXJuIGxwYTtcbiAxNTg6XHRcdGNhc2UgTUlJX1NUQVQxMDAwOlxuIDE1OTpcdFx0XHRyZXR1cm4gbHBhZ2I7XG4gMTYwOlx0XHRjYXNlIE1JSV9FU1RBVFVTOlxuIDE2MTpcdFx0XHRyZXR1cm4gZXN0YXQ7XG4gMTYyOlx0XG4gMTYzOlx0XHQvKlxuIDE2NDpcdFx0ICogV2UgZG8gbm90IHN1cHBvcnQgZW11bGF0aW5nIENsYXVzZSA0NSBvdmVyIENsYXVzZSAyMiByZWdpc3RlclxuIDE2NTpcdFx0ICogcmVhZHMuICBSZXR1cm4gYW4gZXJyb3IgaW5zdGVhZCBvZiBib2d1cyBkYXRhLlxuIDE2NjpcdFx0ICovXG4gMTY3Olx0XHRjYXNlIE1JSV9NTURfQ1RSTDpcbiAxNjg6XHRcdGNhc2UgTUlJX01NRF9EQVRBOlxuIDE2OTpcdFx0XHRyZXR1cm4gLTE7XG4gMTcwOlx0XG4gMTcxOlx0XHRkZWZhdWx0OlxuIDE3MjpcdFx0XHRyZXR1cm4gMHhmZmZmO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzA2MQoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiAyMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGR1ZyBpbnRvIHRoaXMgcGF0Y2ggYW5kLCBiYXNlZCBvbiB3aGF0IEkmIzM5O20gc2VlaW5nLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpc24mIzM5O3QgZ29pbmcgdG8gYmUgZnJ1aXRmdWwgZm9yIGZ1enppbmcgaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgUEhZIElELiBUaGUgY29kZSBpcyBjb25zaXN0ZW50bHkgcmV0dXJuaW5nIHplcm8gZm9yIGJvdGggYE1JSV9QSFlTSUQxYCBhbmQgYE1JSV9QSFlTSUQyYC4gVGhhdCBtZWFucyBgZml4ZWRfcGh5YCBhbHdheXMgaGFzIGEgUEhZIElEIG9mIHplcm8sIGFuZCB3ZSBjYW4mIzM5O3Qgc2VlbSB0byBtYW5pcHVsYXRlIGl0IHRvIHRoZSB0YXJnZXQgSUQgb2YgYDB4NGY1MWU4YjhgLiBDb25zZXF1ZW50bHksIHRoZSBjcnVjaWFsIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgd2l0aGluIFFFTVUuCgpMb29raW5nIGJleW9uZCB0aGF0LCB0aGlzIHBhdGNoIGlzIHNvbGVseSBmb2N1c2VkIG9uIGFkZGluZyBzdXBwb3J0IGZvciBuZXcgUEhZIGhhcmR3YXJlLiBObyBhY3R1YWwgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgYXJlIGludHJvZHVjZWQgd2l0aGluIHRoZSBjdXJyZW50bHkgb2JzZXJ2ZWQgb3BlcmF0aW5nIGVudmlyb25tZW50LgoKSSBkZWNpZGVkIHRvIGRvdWJsZS1jaGVjayBieSBleHBsb3Jpbmcgb3RoZXIgY2hhbmdlcy4gVGhlcmUmIzM5O3MgYSBuZXcgZnVuY3Rpb24gYWRkZWQsIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBpbiBgcGh5LWM0NS5jYC4gSG93ZXZlciwgYSBxdWljayBncmVwIHJldmVhbGVkIHRoaXMgZnVuY3Rpb24gaXMgb25seSBldmVyIGNhbGxlZCBmcm9tIGBtb3RvcmNvbW0uY2AuIFRoaXMgbWFrZXMgaXQgdW5yZWFjaGFibGUgYXMgd2VsbC4KCkluIHNob3J0LCB0aGVyZSYjMzk7cyBhYnNvbHV0ZWx5IG5vIGZ1bmN0aW9uYWwgcGF0aHdheSB0aGlzIHBhdGNoIHVubG9ja3MgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgUUVNVSBlbnZpcm9ubWVudC4gVGhlcmVmb3JlLCBteSByZWNvbW1lbmRhdGlvbiBpcyBjbGVhcjogV29ydGhGdXp6aW5nID0gZmFsc2UuIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoYXQgZmxhZyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIFBIWSBkcml2ZXJzIGFyZSBwcm9iZWQgYmFzZWQgb24gdGhlIGhhcmR3YXJlIFBIWSBJRCByZWFkIGZyb20gdGhlIE1ESU8gYnVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgUEhZIGhhcmR3YXJlIGluIFFFTVUsIGFuZCBubyBnZW5lcmljIHdheSB0byBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgUEhZIGRyaXZlcnMgd2l0aCBjdXN0b20gSURzIGZyb20gdXNlcnNwYWNlLCB0aGUgbmV3IGNvZGUgKGluY2x1ZGluZyB0aGUgbmV3bHkgYWRkZWQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBoZWxwZXIgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgdGhpcyBkcml2ZXIpIGlzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIFBIWSBkcml2ZXJzIGFyZSBwcm9iZWQgYmFzZWQgb24gdGhlIGhhcmR3YXJlIFBIWSBJRCByZWFkIGZyb20gdGhlIE1ESU8gYnVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgUEhZIGhhcmR3YXJlIGluIFFFTVUsIGFuZCBubyBnZW5lcmljIHdheSB0byBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgUEhZIGRyaXZlcnMgd2l0aCBjdXN0b20gSURzIGZyb20gdXNlcnNwYWNlLCB0aGUgbmV3IGNvZGUgKGluY2x1ZGluZyB0aGUgbmV3bHkgYWRkZWQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBoZWxwZXIgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgdGhpcyBkcml2ZXIpIGlzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjQ6MDMuOTQ4MzA5ODY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0OTIxMTM5NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkgZHJpdmVyLiBQSFkgZHJpdmVycyBhcmUgcHJvYmVkIGJhc2VkIG9uIHRoZSBoYXJkd2FyZSBQSFkgSUQgcmVhZCBmcm9tIHRoZSBNRElPIGJ1cy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIHNwZWNpZmljIFBIWSBoYXJkd2FyZSBpbiBRRU1VLCBhbmQgbm8gZ2VuZXJpYyB3YXkgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFBIWSBkcml2ZXJzIHdpdGggY3VzdG9tIElEcyBmcm9tIHVzZXJzcGFjZSwgdGhlIG5ldyBjb2RlIChpbmNsdWRpbmcgdGhlIG5ld2x5IGFkZGVkIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaGVscGVyIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoaXMgZHJpdmVyKSBpcyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjQ6MDMuOTQ4MzE3Njc3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYwNjEwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzOWFiNTA2NTYxYzVkYjRiYWJhOWZhMzljYjE5YjdmMTQzN2E2ZmMwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDAzOjI0OjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbmluZGV4IGM1YTJjZGE4ZDMxYmQuLjUxMGJkMDYzOWE4NTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXFxuQEAgLTEsMjQgKzEsMjkgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXFxuIC8qXFxuLSAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlci5cXG4rICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuXFxuICAqXFxuICAqIEF1dGhvcjogUGV0ZXIgR2VpcyBcXHUwMDNjcGd3aXBlb3V0QGdtYWlsLmNvbVxcdTAwM2VcXG4gICogQXV0aG9yOiBGcmFuayBcXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXFx1MDAzZVxcbisgKiBBdXRob3I6IEt5bGUgXFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXFx1MDAzZVxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcXCJwaHlsaWIuaFxcXCJcXG4rXFxuICNkZWZpbmUgUEhZX0lEX1lUODUxMVxcdFxcdDB4MDAwMDAxMGFcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXFx0XFx0MHgwMDAwMDExYVxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcXHRcXHQweDRmNTFlOTI4XFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVxcdFxcdDB4NGY1MWU5MWJcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1xcdFxcdDB4NGY1MWU5MWFcXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXFx0XFx0MHg0ZjUxZWExOVxcbisjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcXHRcXHQweDRmNTFlOGI4XFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xcbiAgKlxcdFVUUCBSZWdpc3RlciBzcGFjZVxcdHxcXHRGSUJFUiBSZWdpc3RlciBzcGFjZVxcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuQEAgLTMwLDYgKzM1LDE4IEBAXFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gICovXFxuIFxcbisvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcXG4rICpcXHRVVFAgUmVnaXN0ZXIgc3BhY2VcXHR8XFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcXG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiB8XFx0VVRQIE1JSVxcdFxcdFxcdHxcXHRGSUJFUiBNSUlcXHQgICAgICAgIHxcXG4rICogfFxcdFVUUCBNTURcXHRcXHRcXHR8XFx0XFx0XFx0XFx0fFxcbisgKiB8XFx0VVRQIEV4dGVuZGVkXFx0XFx0fFxcdEZJQkVSIEV4dGVuZGVkXFx0XFx0fFxcbisgKiB8XFx0VVRQIFRvcCBFeHRlbmRlZFxcdHxcXHRGSUJFUiBUb3AgRXh0ZW5kZWRcXHR8XFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICogfFxcdFxcdFxcdENvbW1vbiBUb3AgRXh0ZW5kZWRcXHRcXHRcXHR8XFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICovXFxuK1xcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xcbiBcXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xcbkBAIC0zNzYsNiArMzkzLDE3IEBAXFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSVxcdDBcXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFxcdFxcdDFcXG4gXFxuKyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTS1xcdFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcXHRcXHQoMHgxKVxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVxcdFxcdFxcdCgweDApXFxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXFx0XFx0MHgxXFxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTFxcdFxcdDB4MFxcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVTVF9NT0RFX01cXHRcXHRcXHRHRU5NQVNLKDE1LCAxMylcXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFU1RfTU9ERSh4KVxcdEZJRUxEX1BSRVAoWVQ4ODI0X1VUUF9URVNUX01PREVfTSwgKHgpKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1xcdFxcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXFx0XFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkdcXHRcXHQoMHg3KVxcbitcXG4gc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcXG4gXFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXFxuQEAgLTM5NCw2ICs0MjIsMTIgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0dTggcmVnX3BhZ2U7XFxuIH07XFxuIFxcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcXG4rXFx0dW5zaWduZWQgaW50IGludGVyZmFjZV9tb2RlO1xcbitcXHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUHMgb3BlcmF0aW9uIGlzb2xhdGlvbiBkdXJpbmcgc3dhcCByZWcgc3BhY2UgKi9cXG4rXFx0c3RydWN0IG11dGV4IHNoYXJlZF9sb2NrO1xcbit9O1xcbitcXG4gLyoqXFxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuQEAgLTQzMiw2ICs0NjYsNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxcbisgKlxcbisgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcXG4rICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdHJldCBcXHUwMDI2PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcXG4rXFx0cmV0IHw9IChwYWdlIFxcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCk7XFxuK1xcbitlcnI6XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG5AQCAtNjIxLDExICs3MTksMTAxMyBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxcbiBcXHRcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcXG4gXFx0XFx0XFx0XFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgUEhZODgyNCByZWcgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1xcbisgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFxuK1xcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIG9sZF9wYWdlO1xcbitcXG4rXFx0cmV0dXJuIG9sZF9wYWdlIFxcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2VcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdHUxNiBkYXRhO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gb2xkX3BhZ2U7XFxuK1xcdGRhdGEgPSBvbGRfcGFnZSBcXHUwMDI2ICh+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XFxuK1xcdGRhdGEgfD0gcGFnZTtcXG4rXFxuK1xcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIGVuYWJsZSBzZHMgaXNvbGF0ZSAqL1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpO1xcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xcbitcXHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbitcXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZVxcbisgKiBhbmQgc2RzIHNvZnRyZXNldC5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcXG4rXFx0aW50IHZhbCA9IDA7XFxuK1xcdGludCByZXQgPSAtMTtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIHNkcyBzb2Z0cmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0ZSAqL1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSxcXG4rXFx0XFx0XFx0ICAgQk1DUl9SRVNFVCBcXHUwMDI2IH5CTUNSX0lTT0xBVEUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovXFxuK1xcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCBcXHUwMDNjIDApIHx8XFxuK1xcdFxcdFxcdFxcdCEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdDUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gdmFsO1xcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cygpIC0gY2FsbGVkIHRvIGRvIHN0b3JlIHdvcmtpbmcgc3RhdHVzXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmV0OiBvcGVyYXRpb24ncyByZXR1cm4gY29kZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHJldClcXG4re1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdC8qIGNvbmZpZ3VyZSBub3JtYWwgdGVzdCBtb2RlICovXFxuK1xcdHIgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0ciA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiB1dHAgc29mdCByZXNldCAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rcmV0cnk6XFxuK1xcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHV0cCBpbml0XFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IHZhbCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHBvd2VyIGRvd24gKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIGVuYWJsZSBuaWJibGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBFTUMgQ1MgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIEVNQyBSRSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHJlc2V0ICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXFxuK1xcdFxcdFxcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbitcXHRcXHRcXHRcXHQgICAgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHNkcyBpbml0XFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XFxuK1xcdGludCB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7XFxuK1xcdGludCByZXQgPSAtMTtcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIHJlYWQgZWZ1c2UgKi9cXG4rXFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2YWxfMSA9IHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsXzIgPSByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRlbHNlXFxuK1xcdFxcdHZhbF8zID0gcmV0O1xcbitcXG4rXFx0LyogU2VyZGVzIG9wdGltaXphdGlvbiAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBhbmFsb2cgQ0RSICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBWQ08gKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM4LCAweDkwMjQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM5LCAweDAwYzApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIFBMTCBsb2NrICovXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCBcXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcXG4rXFx0dG1wID0gKHZhbF8xIFxcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkpIFxcdTAwM2VcXHUwMDNlIDY7XFxuK1xcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDEyKTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDI5LCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH4oQklUKDEpIHwgQklUKDApKTtcXG4rXFx0dG1wID0gKHZhbF8xIFxcdTAwMjYgKEJJVCg1KSB8IEJJVCg0KSkpIFxcdTAwM2VcXHUwMDNlIDQ7XFxuK1xcdHJldCB8PSB0bXA7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0MSwgcmV0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDJiKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCBcXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcXG4rXFx0dG1wID0gKHZhbF8zIFxcdTAwMjYgKEJJVCgxKSB8IEJJVCgwKSkpO1xcbitcXHRyZXQgfD0gKHRtcCBcXHUwMDNjXFx1MDAzYyAxMik7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NTQsIDB4MGYxNCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTcsIDB4MGE0NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBkaWdpdGFsIGV5ZSBkaWFncmFtIG9mIFNlckRlcyAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBTZXJkZXMgTERPICovXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCBcXHUwMDI2PSB+KEJJVCg2KSB8IEJJVCg1KSB8IEJJVCg0KSk7XFxuK1xcdHRtcCA9ICh2YWxfMiBcXHUwMDI2IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSBcXHUwMDNlXFx1MDAzZSAyO1xcbitcXHRyZXQgfD0gKHRtcCBcXHUwMDNjXFx1MDAzYyA0KTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7XFxuK1xcdHRtcCA9ICh2YWxfMiBcXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpKSBcXHUwMDNlXFx1MDAzZSA1O1xcbitcXHRyZXQgfD0gKHRtcCBcXHUwMDNjXFx1MDAzYyA4KTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI0LCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIFNlcmRlcyBSWCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGEsIDB4MGZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDgsIDB4N2MwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NGYsIDB4ZmYwOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFRYICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4ZSwgMHg3ZDAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwZCwgMHgwNjA2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIFNlcmRlcyBtYW51YWwgY29uZmlnICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMSwgMHg3MDc0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAzLCAweDU2MDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgXFx1MDAzZSA4ICovXFxuK1xcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfUkVTVjEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgXFx1MDAyNj0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSztcXG4rXFx0cmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7XFxuK1xcdHJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFO1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgcmV0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogcmVzZXQgc2VyZGVzICovXFxuK1xcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcXG4rXFx0XFx0XFx0ICAgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiBwb2xsIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2s7IF9fcGh5X3JlYWQgdGFrZXMgbm8gbG9jayAqL1xcbitcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsICh2YWwgXFx1MDAzYyAwKSB8fFxcbitcXHRcXHRcXHRcXHQhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHQ1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHZhbDtcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBpbnRlcm5hbCBwaHk4ODI0IGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IHZhbCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogcG93ZXIgZG93biAqL1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGUwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiAyLjVHIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdmLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMzNiwgMHhhYjBhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIDEwMDAgcGVyZm9ybWFuY2UgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzRhLCAweGZmMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiAxMDAgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg3MWYsIDB4MzYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogMTAgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiAxMCB0ZW1wYXRlIE1BVSovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIEVNQyBDUywgSW5jb25zaXN0ZW50IHdpdGggZXh0ZXJuYWwgcGh5ICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGM4LCAweGZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhiZSwgMHg2NDA2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIEVNQyBSRSovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDZlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjLCAweDQxYTEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbitcXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiByZXNldCAqL1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxcbitcXHRcXHRcXHQgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XFxuIFxcbi1lcnJfcmVzdG9yZV9wYWdlOlxcbi1cXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbitcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIiVzIGRvbmUsIHBoeSBhZGRyOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgX19mdW5jX18sIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rZXJyOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbkBAIC0zMDcyLDYgKzQxNzIsNDEzIEBAIHN0YXRpYyBpbnQgeXQ4ODIxX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHRyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApO1xcbiB9XFxuIFxcbisvKipcXG4rICogeXQ4ODI0X2dldF9mZWF0dXJlcyAtIHJlYWQgbW1kIHJlZ2lzdGVyIHRvIGdldCAyLjVHIGNhcGFiaWxpdHlcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcXG4rXFxuK2VycjpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiBsaW5rIHN0YXR1cyBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IGxpbmsgPSAwO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdGxpbmsgPSAhIShyZXQgXFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XFxuK1xcbitcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgX19mdW5jX18sIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcXG4rXFx0cmV0dXJuIGxpbms7XFxuK2VycjpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IGxpbmsgPSAwO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IHZhbCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfcmVhZF9zdGF0dXMocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VhdXRvbmVnX2NvbXBsZXRlKSB7XFxuK1xcdFxcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9scGEocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0dmFsID0gcmV0O1xcbitcXG4rXFx0bGluayA9IHZhbCBcXHUwMDI2IFlUUEhZX1NTUl9MSU5LO1xcbitcXHRpZiAobGluaylcXG4rXFx0XFx0eXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpO1xcbitcXG4rXFx0aWYgKGxpbmspIHtcXG4rXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlbGluayA9PSAwKVxcbitcXHRcXHRcXHRwaHlkZXZfZGJnKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmsgdXBcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbGluayA9IDE7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChwaHlkZXYtXFx1MDAzZWxpbmsgPT0gMSlcXG4rXFx0XFx0XFx0cGh5ZGV2X2RiZyhwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rIGRvd25cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbGluayA9IDA7XFxuK1xcdH1cXG4rXFx0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQocGh5ZGV2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiB8IEJNQ1JfSVNPTEFURSwgMHgwKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK3JldHJ5OlxcbitcXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9wb3dlcl9kb3duKCkgIC0gc2V0IHV0cCBwb3dlciBkb3duLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0LyogdXRwIHBvd2VyIGRvd24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBzZHMgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHV0cCBwb3dlciBkb3duICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK3JldHJ5OlxcbitcXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0geXQ4ODI0X3Bvd2VyX2Rvd24ocGh5ZGV2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHBoeV9jdHJsID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHQgICAgICBwaHlkZXYtXFx1MDAzZWFkdmVydGlzaW5nKSlcXG4rXFx0XFx0cGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RztcXG4rXFxuK1xcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcXG4rXFx0XFx0XFx0XFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGh5X2N0cmwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRyZXQgPSBfX2dlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYsIHJldCk7XFxuK1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrZXQgZm9yIHBoeTg4MjQuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7XFxuK1xcdGNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7XFxuK1xcbitcXHQvKiBJbml0aWFsaXNlIHNoYXJlZCBsb2NrIGZvciBZVDg4MjQgKi9cXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcXG4rXFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgXFxcIm1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmludGVyZmFjZV9tb2RlX25hbWUpKSB7XFxuK1xcdFxcdGlmICghc3RyY2FzZWNtcChpbnRlcmZhY2VfbW9kZV9uYW1lLFxcbitcXHRcXHRcXHRcXHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpKSkge1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJO1xcbitcXHRcXHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXFxuK1xcdFxcdFxcdFxcdChpbnRlcmZhY2VfbW9kZV9uYW1lLFxcbitcXHRcXHRcXHRcXHQgcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkpKSB7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBkZWZhdWx0IGludGVybmFsIHBoeSAqL1xcbitcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxcbkBAIC0zMTU4LDEzICs0NjY1LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcXG4gXFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyMV9zdXNwZW5kLFxcbiBcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSB5dDg4MjFfcmVzdW1lLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0XFxcIixcXG4rXFx0XFx0LmdldF9mZWF0dXJlc1xcdFxcdD0geXQ4ODI0X2dldF9mZWF0dXJlcyxcXG4rXFx0XFx0LnJlYWRfcGFnZVxcdFxcdD0geXQ4ODI0X3JlYWRfcGFnZSxcXG4rXFx0XFx0LndyaXRlX3BhZ2VcXHRcXHQ9IHl0ODgyNF93cml0ZV9wYWdlLFxcbitcXHRcXHQucHJvYmVcXHRcXHQgICAgICAgID0geXQ4ODI0X3Byb2JlLFxcbitcXHRcXHQuY29uZmlnX2FuZWdcXHRcXHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcXG4rXFx0XFx0LmFuZWdfZG9uZVxcdFxcdD0geXQ4ODI0X2FuZWdfZG9uZSxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSB5dDg4MjRfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5yZWFkX3N0YXR1c1xcdFxcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxcbitcXHRcXHQuc29mdF9yZXNldFxcdFxcdD0geXQ4ODI0X3NvZnRfcmVzZXQsXFxuK1xcdFxcdC5zdXNwZW5kXFx0XFx0PSB5dDg4MjRfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0geXQ4ODI0X3Jlc3VtZSxcXG4rXFx0fSxcXG4gfTtcXG4gXFxuIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7XFxuIFxcbi1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXJcXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiUGV0ZXIgR2Vpc1xcXCIpO1xcbiBNT0RVTEVfQVVUSE9SKFxcXCJGcmFua1xcXCIpO1xcbitNT0RVTEVfQVVUSE9SKFxcXCJLeWxlXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xcbkBAIC0zMTc0LDYgKzQ2OTcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSxcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpIH0sXFxuIFxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXFxuK1xcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sXFxuIFxcdHsgLyogc2VudGluZWwgKi8gfVxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG5pbmRleCA4NzA5MjAzMTFmOWEwLi44Nzk4MTdmZTM4YzVhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuQEAgLTE0MDgsNiArMTQwOCw2MSBAQCBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xcbiBcXG4rLyoqXFxuKyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcXG4rICpcXG4rICogRGVzY3JpcHRpb246IFNldCB0ZW1wbGF0ZSB0ZXN0bW9kZSBpbmNsdWRlIE5vcm1hbCB0byBUZXN0IG1vZGUgN1xcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXJcXG4rICpcXHRyZWFkL3dyaXRlIGVycm9yKS5cXG4rICovXFxuK2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpXFxuK3tcXG4rXFx0aW50IGN0cmwgPSAwO1xcbitcXG4rXFx0c3dpdGNoICh0ZXN0X21vZGUpIHtcXG4rXFx0Y2FzZSAwOlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIDM6XFxuK1xcdFxcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSA1OlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIDY6XFxuK1xcdFxcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82O1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgNzpcXG4rXFx0XFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzc7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSxcXG4rXFx0XFx0XFx0ICAgICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfVEVNUExBVEUsIGN0cmwpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xcbitcXG4gLyoqXFxuICAqIGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnIC0gZ2V0IFBMQ0EgY29uZmlndXJhdGlvbiBmcm9tIHN0YW5kYXJkIHJlZ2lzdGVyc1xcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCA1ZjhkNjU4NjhlMGZmLi5kYTQ4MmU4NDMxYTAyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuQEAgLTIzMzksNiArMjMzOSw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTtcXG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XFxuIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IHBoeV9wbGNhX2NmZyAqcGxjYV9jZmcpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG5pbmRleCAwNmY0YmMzYzIwYzcxLi5mZTMzOWIxN2U5ODI0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuQEAgLTYzLDYgKzYzLDcgQEBcXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TV0FQUE9MXFx0MTMwXFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcXHUwMDI2IHBvbGFyaXR5ICovXFxuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfVFhQV1JcXHQxMzFcXHQvKiAxMEdCQVNFLVQgVFggcG93ZXIgY29udHJvbCAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMlxcdC8qIFRlc3QgbW9kZSBjb250cm9sICovXFxuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU05SXFx0MTMzXFx0LyogMTBHQkFTRS1UIFNOUiBtYXJnaW4sIGxhbmUgQS5cXG4gXFx0XFx0XFx0XFx0XFx0ICogTGFuZXMgQi1EIGFyZSBudW1iZXJlZCAxMzQtMTM2LiAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfQ1NSXFx0MTQ3XFx0LyogMTBHQkFTRS1SIGZhc3QgcmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgKi9cXG5AQCAtMzIwLDYgKzMyMSwxNyBAQFxcbiAvKiBQTUEgMTBHQkFTRS1SIEZhc3QgUmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIuICovXFxuICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9FTkFCTEVcXHQweDAwMDFcXHQvKiBGYXN0IHJldHJhaW4gZW5hYmxlICovXFxuIFxcbisvKiBQTUEgMTBHQkFTRS1SLy1UIFRlbXBsYXRlIFRlc3QgTW9kZSBSZWdpc3RlciovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfVEVNUExBVEUgMHhFMDAwIC8qIFRlbXBsYXRlIHRlc3QgbW9kZSAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCAweDAwMDAgLyogVGVtcGxhdGUgTm9ybWFsICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSAweDIwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUxICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMiAweDQwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUyICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMyAweDYwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUzICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNCAweDgwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU0ICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNSAweGEwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU1ICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNiAweGMwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU2ICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNyAweGUwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU3ICovXFxuK1xcbiAvKiBQQ1MgMTBHQkFTRS1SLy1UIHN0YXR1cyByZWdpc3RlciAxLiAqL1xcbiAjZGVmaW5lIE1ESU9fUENTXzEwR0JSVF9TVEFUMV9CTEtMS1xcdDB4MDAwMVxcdC8qIEJsb2NrIGxvY2sgYXR0YWluZWQgKi9cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI0OjA0LjQ1NDk3NTI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTY0NDE0NDYxMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIFBIWSBkcml2ZXJzIGFyZSBwcm9iZWQgYmFzZWQgb24gdGhlIGhhcmR3YXJlIFBIWSBJRCByZWFkIGZyb20gdGhlIE1ESU8gYnVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgUEhZIGhhcmR3YXJlIGluIFFFTVUsIGFuZCBubyBnZW5lcmljIHdheSB0byBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgUEhZIGRyaXZlcnMgd2l0aCBjdXN0b20gSURzIGZyb20gdXNlcnNwYWNlLCB0aGUgbmV3IGNvZGUgKGluY2x1ZGluZyB0aGUgbmV3bHkgYWRkZWQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBoZWxwZXIgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgdGhpcyBkcml2ZXIpIGlzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOWFiNTA2NTYxYzVkYjRiYWJhOWZhMzljYjE5YjdmMTQzN2E2ZmMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDM6MjQ6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbmluZGV4IGM1YTJjZGE4ZDMxYmQuLjUxMGJkMDYzOWE4NTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuQEAgLTEsMjQgKzEsMjkgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcbiAvKlxuLSAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlci5cbisgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cbiAgKlxuICAqIEF1dGhvcjogUGV0ZXIgR2VpcyBcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXHUwMDNlXG4gICogQXV0aG9yOiBGcmFuayBcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cdTAwM2VcbisgKiBBdXRob3I6IEt5bGUgXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cdTAwM2VcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwicGh5bGliLmhcIlxuK1xuICNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbisjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcdFx0MHg0ZjUxZThiOFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xuICAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQEAgLTMwLDYgKzM1LDE4IEBAXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAqL1xuIFxuKy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xuKyAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHxcdFVUUCBNSUlcdFx0XHR8XHRGSUJFUiBNSUlcdCAgICAgICAgfFxuKyAqIHxcdFVUUCBNTURcdFx0XHR8XHRcdFx0XHR8XG4rICogfFx0VVRQIEV4dGVuZGVkXHRcdHxcdEZJQkVSIEV4dGVuZGVkXHRcdHxcbisgKiB8XHRVVFAgVG9wIEV4dGVuZGVkXHR8XHRGSUJFUiBUb3AgRXh0ZW5kZWRcdHxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICogfFx0XHRcdENvbW1vbiBUb3AgRXh0ZW5kZWRcdFx0XHR8XG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqL1xuK1xuIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovXG4gXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuQEAgLTM3Niw2ICszOTMsMTcgQEBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcdDBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXHRcdDFcbiBcbisjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcdFx0XHRCSVQoMClcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcdFx0KDB4MSlcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVx0XHRcdCgweDApXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTFcdFx0MHgxXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMXHRcdDB4MFxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URVNUX01PREVfTVx0XHRcdEdFTk1BU0soMTUsIDEzKVxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URVNUX01PREUoeClcdEZJRUxEX1BSRVAoWVQ4ODI0X1VUUF9URVNUX01PREVfTSwgKHgpKVxuKyNkZWZpbmUgWVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLXHRcdEdFTk1BU0soMywgMClcbisjZGVmaW5lIFlUODgyNF9TRFNfRU5fRklMTF9QUkVcdFx0XHRCSVQoMTMpXG4rI2RlZmluZSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HXHRcdCgweDcpXG4rXG4gc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdC8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsXG4gXHQgKiB0aGlzIG1lYW5zIHRoYXQgeXQ4NTIxIG1heSB3b3JrIGluIHV0cCBvciBmaWJlciBtb2RlIHdoaWNoIGRlcGVuZHNcbkBAIC0zOTQsNiArNDIyLDEyIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHR1OCByZWdfcGFnZTtcbiB9O1xuIFxuK3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYge1xuK1x0dW5zaWduZWQgaW50IGludGVyZmFjZV9tb2RlO1xuK1x0Lyogc2hhcmVkX2xvY2sgdXNlZCB0byBVVFBzIG9wZXJhdGlvbiBpc29sYXRpb24gZHVyaW5nIHN3YXAgcmVnIHNwYWNlICovXG4rXHRzdHJ1Y3QgbXV0ZXggc2hhcmVkX2xvY2s7XG4rfTtcbitcbiAvKipcbiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC00MzIsNiArNDY2LDcwIEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiB5dHBoeV9yZWFkX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcbisgKlxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpO1xuK31cbitcbisvKipcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcbisgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGVcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuK1x0XHRcdCAgICAgICB1MTYgdmFsKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xuK31cbitcbisvKipcbisgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbitcdHJldCB8PSAocGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQpO1xuK1xuK2VycjpcbitcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIC8qKlxuICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNjIxLDExICs3MTksMTAxMyBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxuIFx0XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcbiBcdFx0XHRcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgUEhZODgyNCByZWcgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvXG4rICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1xuK1x0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4rXG4rXHRyZXR1cm4gb2xkX3BhZ2UgXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XG4rfTtcbitcbisvKipcbisgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2VcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdHUxNiBkYXRhO1xuK1xuK1x0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4rXHRkYXRhID0gb2xkX3BhZ2UgXHUwMDI2ICh+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4rXHRkYXRhIHw9IHBhZ2U7XG4rXG4rXHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XG4rfTtcbitcbisvKipcbisgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4rXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIGVuYWJsZSBzZHMgaXNvbGF0ZSAqL1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSwgQk1DUl9JU09MQVRFKTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXHRpbnQgdmFsO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VULCBCTUNSX1JFU0VUKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xuK1x0cmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4rXHRcdFx0XHQgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBub3JtYWwgdGVzdCBtb2RlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZVxuKyAqIGFuZCBzZHMgc29mdHJlc2V0LlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xuK1x0aW50IHZhbCA9IDA7XG4rXHRpbnQgcmV0ID0gLTE7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBzZHMgc29mdHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGUgKi9cbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9JU09MQVRFLFxuK1x0XHRcdCAgIEJNQ1JfUkVTRVQgXHUwMDI2IH5CTUNSX0lTT0xBVEUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsICh2YWwgXHUwMDNjIDApIHx8XG4rXHRcdFx0XHQhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQ1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldCA9IHZhbDtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cygpIC0gY2FsbGVkIHRvIGRvIHN0b3JlIHdvcmtpbmcgc3RhdHVzXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmV0OiBvcGVyYXRpb24ncyByZXR1cm4gY29kZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmV0KVxuK3tcbitcdGludCByO1xuK1xuK1x0LyogY29uZmlndXJlIG5vcm1hbCB0ZXN0IG1vZGUgKi9cbitcdHIgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRyID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldHVybiByZXQ7XG4rcmV0cnk6XG4rXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCB2YWwgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogcG93ZXIgZG93biAqL1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBlMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogZW5hYmxlIG5pYmJsZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwM2QwLCAweDUyMTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNzIsIDB4NTAzOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRlMiwgMHgwMTQ5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMi41RyB0ZW1wbGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODAsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MCwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDcxZiwgMHgwMDM2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY2LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY5LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplIHV0cCAxMDAwTSBwZXJmb3JtYW5jZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Lyogb3B0aW1pemVkIEVNQyBSRSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4MDA2ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4rXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogcmVzZXQgKi9cbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4rXHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuK1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuK1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHNkcyBpbml0XG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4rXHRpbnQgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wO1xuK1x0aW50IHJldCA9IC0xO1xuK1x0aW50IHZhbDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIHJlYWQgZWZ1c2UgKi9cbitcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRlbHNlXG4rXHRcdHZhbF8xID0gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGVsc2VcbitcdFx0dmFsXzIgPSByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0ZWxzZVxuK1x0XHR2YWxfMyA9IHJldDtcbitcbitcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiZSwgMHgwMDBkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIGFuYWxvZyBDRFIgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIG9wdGltaXplZCBWQ08gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xuK1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MjkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4rXHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNykgfCBCSVQoNikpKSBcdTAwM2VcdTAwM2UgNjtcbitcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgXHUwMDI2PSB+KEJJVCgxKSB8IEJJVCgwKSk7XG4rXHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNSkgfCBCSVQoNCkpKSBcdTAwM2VcdTAwM2UgNDtcbitcdHJldCB8PSB0bXA7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbitcdHRtcCA9ICh2YWxfMyBcdTAwMjYgKEJJVCgxKSB8IEJJVCgwKSkpO1xuK1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBTZXJkZXMgTERPICovXG4rXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgXHUwMDI2PSB+KEJJVCg2KSB8IEJJVCg1KSB8IEJJVCg0KSk7XG4rXHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSBcdTAwM2VcdTAwM2UgMjtcbitcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA0KTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNSwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCBcdTAwMjY9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7XG4rXHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpKSBcdTAwM2VcdTAwM2UgNTtcbitcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA4KTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIG9wdGltaXplZCBTZXJkZXMgUlggKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4ZSwgMHg3ZDAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwZCwgMHgwNjA2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIFNlcmRlcyBtYW51YWwgY29uZmlnICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuK1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9SRVNWMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLO1xuK1x0cmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7XG4rXHRyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogcmVzZXQgc2VyZGVzICovXG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4rXHRcdFx0ICAgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrOyBfX3BoeV9yZWFkIHRha2VzIG5vIGxvY2sgKi9cbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCBcdTAwM2MgMCkgfHxcbitcdFx0XHRcdCEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdDUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0cmV0ID0gdmFsO1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIHBvd2VyIGRvd24gKi9cbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4Myk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHg4Myk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogMi41RyB0ZW1wYXRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2UsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdmLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODEsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzQwLCAweDMwMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIDEwMDAgcGVyZm9ybWFuY2UgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhmOCwgMHhiM2ZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZSwgMHg1MzA4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMiwgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiAxMDAgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZiwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIDEwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NzFmLCAweDM2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiAxMCB0ZW1wYXRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIDEwIHRlbXBhdGUgTUFVKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY4LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiBFTUMgQ1MsIEluY29uc2lzdGVudCB3aXRoIGV4dGVybmFsIHBoeSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YzgsIDB4ZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhiZSwgMHg2NDA2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogRU1DIFJFKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4NmUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4rXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogcmVzZXQgKi9cbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4rXHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuK1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuK1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuK1x0XHRyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcdH0gZWxzZSB7XG4rXHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnI7XG4rXHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnI7XG4gXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldChwaHlkZXYpO1xuIFxuLWVycl9yZXN0b3JlX3BhZ2U6XG4tXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwiJXMgZG9uZSwgcGh5IGFkZHI6ICVkXFxuXCIsXG4rXHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdHJldHVybiByZXQ7XG4rZXJyOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuQEAgLTMwNzIsNiArNDE3Miw0MTMgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApO1xuIH1cbiBcbisvKipcbisgKiB5dDg4MjRfZ2V0X2ZlYXR1cmVzIC0gcmVhZCBtbWQgcmVnaXN0ZXIgdG8gZ2V0IDIuNUcgY2FwYWJpbGl0eVxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXHRyZXQgPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzKHBoeWRldik7XG4rXG4rZXJyOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X2FuZWdfZG9uZSgpICAtIGNoZWNrIG5lZ290aWF0aW9uIHN0YXRlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiBsaW5rIHN0YXR1cyBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgbGluayA9IDA7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0bGluayA9ICEhKHJldCBcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xuK1xuK1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwiJXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXFxuXCIsXG4rXHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcbitcdHJldHVybiBsaW5rO1xuK2VycjpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZCgpIC0gIGRldGVybWluZXMgdGhlIHNwZWVkIGFuZCBkdXBsZXggb2Ygb25lIHBhZ2VcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgbGluayA9IDA7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCB2YWwgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X3JlYWRfc3RhdHVzKHBoeWRldik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VhdXRvbmVnX2NvbXBsZXRlKSB7XG4rXHRcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9scGEocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHR2YWwgPSByZXQ7XG4rXG4rXHRsaW5rID0gdmFsIFx1MDAyNiBZVFBIWV9TU1JfTElOSztcbitcdGlmIChsaW5rKVxuK1x0XHR5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7XG4rXG4rXHRpZiAobGluaykge1xuK1x0XHRpZiAocGh5ZGV2LVx1MDAzZWxpbmsgPT0gMClcbitcdFx0XHRwaHlkZXZfZGJnKHBoeWRldixcbitcdFx0XHRcdCAgIFwiJXMsIHBoeSBhZGRyOiAlZCwgbGluayB1cFxcblwiLFxuK1x0XHRcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDE7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocGh5ZGV2LVx1MDAzZWxpbmsgPT0gMSlcbitcdFx0XHRwaHlkZXZfZGJnKHBoeWRldixcbitcdFx0XHRcdCAgIFwiJXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXFxuXCIsXG4rXHRcdFx0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4rXHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbitcdH1cbitcdHBoeV9yZXNvbHZlX2FuZWdfcGF1c2UocGh5ZGV2KTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXhcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOIHwgQk1DUl9JU09MQVRFLCAweDApO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdHJldHVybiAwO1xuK1xuK3JldHJ5OlxuK1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Jlc3VtZSgpIC0gcmVzdW1lIHRoZSBoYXJkd2FyZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHl0ODgyNF9wb3dlcl9vbihwaHlkZXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdC8qIHV0cCBwb3dlciBkb3duICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rXG4rcmV0cnk6XG4rXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0geXQ4ODI0X3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcGh5X2N0cmwgPSAwO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4rXHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbitcdFx0cGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RztcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcbitcdFx0XHRcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMLFxuK1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RyxcbitcdFx0XHRcdCAgICAgcGh5X2N0cmwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXG4rXHRyZXQgPSBfX2dlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYsIHJldCk7XG4rXG4rZXJyOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrZXQgZm9yIHBoeTg4MjQuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpO1xuK1x0Y29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTtcbitcbitcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4rXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcIm1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZVwiLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKSkge1xuK1x0XHRpZiAoIXN0cmNhc2VjbXAoaW50ZXJmYWNlX21vZGVfbmFtZSxcbitcdFx0XHRcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7XG4rXHRcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJO1xuK1x0XHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXG4rXHRcdFx0XHQoaW50ZXJmYWNlX21vZGVfbmFtZSxcbitcdFx0XHRcdCBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHtcbitcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBkZWZhdWx0IGludGVybmFsIHBoeSAqL1xuK1x0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbkBAIC0zMTU4LDEzICs0NjY1LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbiBcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiBcdH0sXG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcbitcdFx0Lm5hbWVcdFx0XHQ9IFwiWVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFwiLFxuK1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODI0X2dldF9mZWF0dXJlcyxcbitcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODgyNF9yZWFkX3BhZ2UsXG4rXHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXG4rXHRcdC5wcm9iZVx0XHQgICAgICAgID0geXQ4ODI0X3Byb2JlLFxuK1x0XHQuY29uZmlnX2FuZWdcdFx0PSB5dDg4MjRfY29uZmlnX2FuZWcsXG4rXHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuK1x0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjRfY29uZmlnX2luaXQsXG4rXHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyNF9yZWFkX3N0YXR1cyxcbitcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjRfc3VzcGVuZCxcbitcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODI0X3Jlc3VtZSxcbitcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJQZXRlciBHZWlzXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJGcmFua1wiKTtcbitNT0RVTEVfQVVUSE9SKFwiS3lsZVwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbkBAIC0zMTc0LDYgKzQ2OTcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4rXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggODcwOTIwMzExZjlhMC4uODc5ODE3ZmUzOGM1YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbkBAIC0xNDA4LDYgKzE0MDgsNjEgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XG4gXG4rLyoqXG4rICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbisgKlxuKyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiByZWdpc3RlclxuKyAqXHRyZWFkL3dyaXRlIGVycm9yKS5cbisgKi9cbitpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxuK3tcbitcdGludCBjdHJsID0gMDtcbitcbitcdHN3aXRjaCAodGVzdF9tb2RlKSB7XG4rXHRjYXNlIDA6XG4rXHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUw7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSAxOlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIDI6XG4rXHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgMzpcbitcdFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzM7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSA0OlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNDtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIDU6XG4rXHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81O1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgNjpcbitcdFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzY7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSA3OlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNztcbitcdFx0YnJlYWs7XG4rXG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdHJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlRfVEVTVE1PREUsXG4rXHRcdFx0ICAgICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfVEVNUExBVEUsIGN0cmwpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcbitcbiAvKipcbiAgKiBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyAtIGdldCBQTENBIGNvbmZpZ3VyYXRpb24gZnJvbSBzdGFuZGFyZCByZWdpc3RlcnNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggNWY4ZDY1ODY4ZTBmZi4uZGE0ODJlODQzMWEwMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzM5LDYgKzIzMzksNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0ICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuaW5kZXggMDZmNGJjM2MyMGM3MS4uZmUzMzliMTdlOTgyNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbkBAIC02Myw2ICs2Myw3IEBAXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0xcdDEzMFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcdTAwMjYgcG9sYXJpdHkgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RYUFdSXHQxMzFcdC8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzJcdC8qIFRlc3QgbW9kZSBjb250cm9sICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlJcdDEzM1x0LyogMTBHQkFTRS1UIFNOUiBtYXJnaW4sIGxhbmUgQS5cbiBcdFx0XHRcdFx0ICogTGFuZXMgQi1EIGFyZSBudW1iZXJlZCAxMzQtMTM2LiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1JcdDE0N1x0LyogMTBHQkFTRS1SIGZhc3QgcmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgKi9cbkBAIC0zMjAsNiArMzIxLDE3IEBAXG4gLyogUE1BIDEwR0JBU0UtUiBGYXN0IFJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyLiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9FTkFCTEVcdDB4MDAwMVx0LyogRmFzdCByZXRyYWluIGVuYWJsZSAqL1xuIFxuKy8qIFBNQSAxMEdCQVNFLVIvLVQgVGVtcGxhdGUgVGVzdCBNb2RlIFJlZ2lzdGVyKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX1RFTVBMQVRFIDB4RTAwMCAvKiBUZW1wbGF0ZSB0ZXN0IG1vZGUgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCAweDAwMDAgLyogVGVtcGxhdGUgTm9ybWFsICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xIDB4MjAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTEgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzIgMHg0MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMiAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMyAweDYwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUzICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80IDB4ODAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTQgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzUgMHhhMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNSAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNiAweGMwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU2ICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83IDB4ZTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTcgKi9cbitcbiAvKiBQQ1MgMTBHQkFTRS1SLy1UIHN0YXR1cyByZWdpc3RlciAxLiAqL1xuICNkZWZpbmUgTURJT19QQ1NfMTBHQlJUX1NUQVQxX0JMS0xLXHQweDAwMDFcdC8qIEJsb2NrIGxvY2sgYXR0YWluZWQgKi9cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI0OjA0LjQ1NDk3NjgwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzMwODk2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBUZXN0aW5nIFRoaXMgUEhZIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIGRyaXZlciBhbmQgYSBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgZnVuY3Rpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgdGVzdCB0aGlzIGNoYW5nZS4gSXQncyBhIFBIWSBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0cyBmdW5jdGlvbmFsaXR5IGlzIGluaGVyZW50bHkgdGllZCB0byBoYXJkd2FyZS4gVGhlIG1vc3QgZGlyZWN0IHBhdGggaXMgd2hlbiB0aGUgaGFyZHdhcmUgaXMgcHJlc2VudCwgYnV0IHdlIG5lZWQgdG8gY29uc2lkZXIgZW11bGF0aW9uLlxuXG5DYW4gd2UgcHJvYmUgdGhlIGRyaXZlciB2aWEgdGhlIE1ESU8gYnVzPyBEZWZpbml0ZWx5LiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGhvdyBkbyB3ZSBlbXVsYXRlIGFuIE1ESU8gZGV2aWNlPyBTeXprYWxsZXIgY29tZXMgdG8gbWluZCwgYnV0IGl0cyBNRElPIGZ1enppbmcgY2FwYWJpbGl0aWVzIGFyZSBsaW1pdGVkOyBnZW5lcmFsbHksIE1ESU8gaXMgZnV6emVkIHdpdGggYG1kaW9gIGJ1cyBvciBgbmV0bGlua2Agb3IgYGlvY3RsYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgdXN1YWxseSByZWFjaGVkIHZpYSBgbWFjODAyMTFfaHdzaW1gIG9yIGB0dW5gL2B0YXBgLCBidXQgSSdtIHByb2JhYmx5IHdyb25nLiBBY3R1YWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSBpc24ndCBhICpnZW5lcmljKiBNRElPIGZ1enplciBpbiBTeXprYWxsZXIsIGJ1dCB3ZSBtaWdodCBiZSBhYmxlIHRvIHJlYWNoIHRoZSBQSFkgZHJpdmVyIHVzaW5nIGBTSU9DU01JSVJFR2AgYW5kIGBTSU9DR01JSVJFR2AgaW9jdGxzIGlmIGEgbmV0ZGV2aWNlIGhhcyBhIFBIWSBhdHRhY2hlZC5cblxuQWhhISBDYW4gd2UgYXR0YWNoIGEgc3BlY2lmaWMgUEhZIHRvIGEgZHVtbXkgbmV0ZGV2aWNlIG9yIHZldGggaW50ZXJmYWNlPyBUaGF0J3MgYSBnb29kIGFuZ2xlIHRvIHB1cnN1ZS4gVHlwaWNhbGx5LCB0aGUgZHJpdmVyIHByb2JlcyB3aGVuIGFuIE1ESU8gYnVzIGlzIHJlZ2lzdGVyZWQgYW5kIHNjYW5zIGZvciBQSFlzLiBTbywgaXMgdGhlcmUgYSB2aXJ0dWFsIE1ESU8gYnVzIHdlIGNhbiBsZXZlcmFnZSB3aXRoaW4gdGhlIGtlcm5lbD9cblxuTGV0IG1lIGNoZWNrLiBQZXJoYXBzIGBkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyIG1pZ2h0IGFsbG93IG1lIHRvIHJlZ2lzdGVyIGFyYml0cmFyeSBQSFlzLiBPciwgbWF5YmUgYG1kaW8tbW9ja3VwLmNgIG9yIGBtZGlvLWJjbS11bmltYWMuY2AgcHJvdmlkZSBjbHVlcz8gTGV0J3Mgc2VhcmNoIGZvciBcIk1ESU8gbW9ja3VwXCIgb3Igc2ltaWxhciB0ZXJtcyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjkyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjQ6MTEuNzg4MDY5OTc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjEzNjYzMjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKm1vY2t1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjQ6MTQuNjA5NDQ3ODUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0MzkyMzAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTURJTyBCdXMgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB3ZSdyZSBldmVuIGRlYWxpbmcgd2l0aCBhIHZpcnR1YWwgTURJTyBidXMgaGVyZS4gSXQncyBhIGZ1bmRhbWVudGFsIGluaXRpYWwgc3RlcC4gV2UndmUgZ290IHRvIGRldGVybWluZSBpZiB0aGUgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGV2ZWwgcHJlc2VudHMgYW4gZW11bGF0ZWQgb3Igc2ltdWxhdGVkIE1ESU8gaW50ZXJmYWNlLiBUaGlzIGhhcyBhIG1hc3NpdmUgaW1wYWN0IG9uIGRlYnVnZ2luZywgcGVyZm9ybWFuY2UgZXhwZWN0YXRpb25zLCBhbmQgdGhlIG92ZXJhbGwgYXBwcm9hY2ggSSdsbCB0YWtlLiBBIHZpcnR1YWwgYnVzIGltcGxpZXMgYSBkaWZmZXJlbnQgc2V0IG9mIGRlYnVnZ2luZyB0b29scyBhbmQgcG90ZW50aWFsbHkgaW50cm9kdWNlcyBsYXRlbmN5IHRoYXQgaXNuJ3QgcHJlc2VudCBpbiBhIHBoeXNpY2FsIGltcGxlbWVudGF0aW9uLiBTbywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGUgdHlwZSBvZiBNRElPIGJ1cywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIHRvIGluZm9ybSBteSB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ3MCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI0OjE3LjQ1MzM3MzU3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQ5MTI5NzE0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvLipkdW1teVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjQ6MjAuMzAyNTE1NzYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0MzQ0NjE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBOZXR3b3JrIFBIWSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gbmV0d29yayBQSFkgY29uZmlndXJhdGlvbi4gV2hlcmUncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nPyBXZWxsLCBnaXZlbiB0aGUgZmlsZSBwYXRocyBJJ20gdGhpbmtpbmcgYWJvdXQsIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIGFyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzLiBUaGVzZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBicmVhZCBhbmQgYnV0dGVyIGZvciBhbnkgc2VyaW91cyBrZXJuZWwgZGV2ZWxvcGVyLiBUaGV5IGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gUEhZIGRyaXZlcnMgYW5kIHRoZSBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBpbnRlcmZhY2UsIHJlc3BlY3RpdmVseS4gVGhhdCdzIHByZWNpc2VseSB3aGF0IEkgbmVlZC4gTGV0J3Mgc3RhcnQgYnkgZXhhbWluaW5nIHRob3NlIGZpbGVzIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQsIGFzIHRoZSBrZXkgdG8gbXkgc29sdXRpb24gd2lsbCBtb3N0IGxpa2VseSBiZSBzaXR1YXRlZCB3aXRoaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjY5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjQ6MjMuNTQ1OTY1NzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L21kaW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYWNwaV9tZGlvLmNcIixcbiAgICBcImZ3bm9kZV9tZGlvLmNcIixcbiAgICBcIm1kaW8tYWlyb2hhLmNcIixcbiAgICBcIm1kaW8tYXNwZWVkLmNcIixcbiAgICBcIm1kaW8tYmNtLWlwcm9jLmNcIixcbiAgICBcIm1kaW8tYmNtLXVuaW1hYy5jXCIsXG4gICAgXCJtZGlvLWJpdGJhbmcuY1wiLFxuICAgIFwibWRpby1jYXZpdW0uY1wiLFxuICAgIFwibWRpby1jYXZpdW0uaFwiLFxuICAgIFwibWRpby1ncGlvLmNcIixcbiAgICBcIm1kaW8taGlzaS1mZW1hYy5jXCIsXG4gICAgXCJtZGlvLWkyYy5jXCIsXG4gICAgXCJtZGlvLWlwcTQwMTkuY1wiLFxuICAgIFwibWRpby1pcHE4MDY0LmNcIixcbiAgICBcIm1kaW8tbW94YXJ0LmNcIixcbiAgICBcIm1kaW8tbXNjYy1taWltLmNcIixcbiAgICBcIm1kaW8tbXV4LWJjbS1pcHJvYy5jXCIsXG4gICAgXCJtZGlvLW11eC1iY202MzY4LmNcIixcbiAgICBcIm1kaW8tbXV4LWdwaW8uY1wiLFxuICAgIFwibWRpby1tdXgtbWVzb24tZzEyYS5jXCIsXG4gICAgXCJtZGlvLW11eC1tZXNvbi1neGwuY1wiLFxuICAgIFwibWRpby1tdXgtbW1pb3JlZy5jXCIsXG4gICAgXCJtZGlvLW11eC1tdWx0aXBsZXhlci5jXCIsXG4gICAgXCJtZGlvLW11eC5jXCIsXG4gICAgXCJtZGlvLW12dXNiLmNcIixcbiAgICBcIm1kaW8tb2N0ZW9uLmNcIixcbiAgICBcIm1kaW8tcGljNjRocHNjLmNcIixcbiAgICBcIm1kaW8tcmVhbHRlay1ydGw5MzAwLmNcIixcbiAgICBcIm1kaW8tcmVnbWFwLmNcIixcbiAgICBcIm1kaW8tc3VuNGkuY1wiLFxuICAgIFwibWRpby10aHVuZGVyLmNcIixcbiAgICBcIm1kaW8teGdlbmUuY1wiLFxuICAgIFwib2ZfbWRpby5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI0OjIzLjU0NjEwMDE2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg5NzIwMDg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeHBsb3JpbmcgVXNlcnNwYWNlIENvbnRyb2wgb2YgUEhZIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGlzIHRoZXJlIGEgd2F5IHRvIGFjdHVhbGx5IGludGVyYWN0IHdpdGggUEhZIGRyaXZlcnMgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2U/IFRoZSB0eXBpY2FsIHJvdXRlIEknbSBhd2FyZSBvZiBpbnZvbHZlcyB1c2luZyBgaW9jdGxgIG9uIGEgbmV0IGRldmljZSB3aXRoIGEgUEhZLCBzcGVjaWZpY2FsbHkgdGhlIGBTSU9DU01JSVJFR2AgY2FsbCB3aXRoIGBtaWlfZGF0YWAuIFRoYXQncyBhIHNvbGlkIHN0YXJ0LiBCdXQgdG8gZ2V0IHRvIHRoZSBjb3JlLCB0byBzb21ldGhpbmcgbGlrZSwgc2F5LCBgeXQ4ODI0X3Byb2JlYCwgdGhlIFBIWSBkcml2ZXIgbmVlZHMgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gcHJvYmVkIGFuZCBhdHRhY2hlZCB0byB0aGUgbmV0IGRldmljZSBpbiB0aGUga2VybmVsIHNwYWNlLlxuXG5TbywgY2FuIEkgKmluc3RhbnRpYXRlKiBhIFBIWSBkcml2ZXIgZnJvbSB1c2Vyc3BhY2U/IE15IGludHVpdGlvbiBpcyBsZWFuaW5nIHRvd2FyZHMgdGhlIGlkZWEgdGhhdCBpdCBtaWdodCBiZSBwb3NzaWJsZSwgaW4gYSBzaW1pbGFyIHdheSB0byBob3cgSSBjYW4gZGVhbCB3aXRoIEkyQyBhbmQgU1BJIGRldmljZXMgdGhyb3VnaCBzeXNmcywgdXNpbmcgYG5ld19kZXZpY2VgLiBUaGF0IHVzdWFsbHkgd29ya3MsIGFuZCBpcyBhIHJlYWxseSBjbGVhbiBpbnRlcmZhY2UgZm9yIHVzZXJzcGFjZSBjb250cm9sLCBpbiBhIGxvdCBvZiBhcmNoaXRlY3R1cmVzLiBOb3csIHRoZSBxdWVzdGlvbiBiZWNvbWVzLCBjYW4gTURJTyBkZXZpY2VzLCBzcGVjaWZpY2FsbHksIGJlIGluc3RhbnRpYXRlZCB2aWEgc3lzZnMsIHRvbz8gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UgdG8gY2hlY2sgaWYgdGhlIE1ESU8gYnVzIHN1cHBvcnRzIHRoZSBgbmV3X2RldmljZWAgbWVjaGFuaXNtLiBUaGF0J3MgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyODgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI0OjI4LjQ0MzMwNDA1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0OTcwMDMwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV3X2RldmljZS4qbWRpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjQ6MzEuMDkzMDE0MTk1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDczMDk3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNRElPIEJ1cyBEcml2ZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTGV0J3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBiZWdpbiwgZ2l2ZW4gd2hhdCBJJ20gdHJ5aW5nIHRvIHRyb3VibGVzaG9vdC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBNRElPIGJ1cyBjb2RlIC0gaXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3IgbWFuYWdpbmcgdGhlIFBIWSBkZXZpY2VzIG9uIG91ciBuZXR3b3JrIGludGVyZmFjZXMsIHNvIGFueSBpc3N1ZXMgdGhlcmUgY291bGQgbWFuaWZlc3QgaW4gYSB2YXJpZXR5IG9mIHN5bXB0b21zLiBUaW1lIHRvIHNlZSB3aGF0J3Mgd2hhdC4gTGV0J3Mgc2VlIGhvdyB0aGluZ3MgYXJlIGluaXRpYWxpemVkLCBob3cgdGhlIGJ1cyBvcGVyYXRpb25zIGFyZSBoYW5kbGVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHJlZCBmbGFncyBpbiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIG9yIGVycm9yIHJlY292ZXJ5IHJvdXRpbmVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgY29yZSBsYXllciBpcyBnb2luZyB0byBiZSBrZXkgdG8gZGlhZ25vc2luZyB0aGUgdW5kZXJseWluZyBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTY4OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI0OjM0LjM0MDMyNzEyNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ2ODYxODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ld19kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI0OjM0LjQyNTAyMTM0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzA3ODUxNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1ESU8gRGV2aWNlIFByb2JpbmcgUXVhbmRhcnkqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIE1ESU8gZGV2aWNlcyB0eXBpY2FsbHkgZ2V0IGRpc2NvdmVyZWQgaW4gdGhlIHN5c3RlbS4gRGV2aWNlIHRyZWUgYW5kIEFDUEkgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cywgYW5kIHRoZW4gdGhlcmUncyB0aGUgbW9yZSBkaXJlY3QgbWV0aG9kIG9mIHNjYW5uaW5nIHRoZSBNRElPIGJ1cyBpdHNlbGYuIFRoZSBjcnV4IG9mIHRoZSBpc3N1ZSBpcywgaWYgd2UgKmRvbid0KiBoYXZlIGEgYm9uYSBmaWRlIE1ESU8gYnVzIGluIHRoZSBwaWN0dXJlLCBlc3BlY2lhbGx5IGdpdmVuIHRoaXMgc3BlY2lmaWMgUEhZIElEIOKAkyBgMHg0ZjUxZThiOGAg4oCTIHdpbGwgdGhlIGNvcnJlc3BvbmRpbmcgUEhZIGRyaXZlciBldmVuICpnZXQqIHByb2JlZD8gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uLlxuXG5JIHN0YXJ0IHRvIGNvbnNpZGVyIG90aGVyIHBvdGVudGlhbCBwcm9iaW5nIG1lY2hhbmlzbXMuIFN5emthbGxlciBzcHJpbmdzIHRvIG1pbmQsIHdpdGggaXRzIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgIGFuZCBvdGhlciBzeXNjYWxscy4gQnV0IGZvciBNRElPIHNwZWNpZmljYWxseSwgSSdtIGRyYXdpbmcgYSBibGFuay4gTWF5YmUgaXQgbGV2ZXJhZ2VzIHNvbWV0aGluZyBsaWtlIGB2aGNpYCBvciBgbWFjODAyMTFfaHdzaW1gPyBObywgdGhvc2UgYXJlIGRlZmluaXRlbHkgZm9yIFVTQiBhbmQgV2lGaSwgcmVzcGVjdGl2ZWx5LiBUaGF0J3MgYSByZWQgaGVycmluZy4gVGhlbiBJIHRoaW5rOiB3aGF0IGFib3V0IGBuZXRkZXZzaW1gPyBEb2VzIHRoYXQgaGF2ZSBhbiBNRElPIGJ1cyBlbXVsYXRpb24gY2FwYWJpbGl0eT8gSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhhdCBwb3NzaWJpbGl0eS4gSXQncyBhIHBsYXVzaWJsZSBhdmVudWUgdGhhdCBuZWVkcyBleHBsb3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MzMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjQ6NDAuMTMyODc2MjcxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAwODEwMjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNDo0MC4yNDI5NjQ1N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMxNTY3OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4cGxvcmluZyBWaXJ0dWFsIE5ldHdvcmsgSW50ZXJmYWNlcyBhbmQgUEhZIEF0dGFjaG1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgUGh5c2ljYWwgTGF5ZXIgKFBIWSkuIFNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYSB2aXJ0dWFsIGRyaXZlciB0aGF0IGFjdHMgYXMgYSBicmlkZ2UsIGFsbG93aW5nIG1lIHRvIGF0dGFjaCBhcmJpdHJhcnkgUEhZIGltcGxlbWVudGF0aW9ucy5cblxuUmlnaHQsIHNvIGxldCdzIHdhbGsgdGhyb3VnaCBzb21lIG9wdGlvbnMuIFRoaW5raW5nIGFib3V0IGBkdW1teWAuLi4gbm9wZSwgaXQgZG9lc24ndCBoYXZlIGEgUEhZLiBNb3Zpbmcgb24gdG8gYHZldGhgLi4uIHN0aWxsIG5vIFBIWS4gQW5kIHdoYXQgYWJvdXQgYHR1bmAvYHRhcGA/IE5vcGUsIHNhbWUgc3RvcnkuIFRoZXkncmUgbW9yZSBhYm91dCB0dW5uZWxpbmcuXG5cblNvLCB0aGUgcmVhbCBxdWVzdGlvbiBpczogSXMgdGhlcmUgKmFueXRoaW5nKiB2aXJ0dWFsIG91dCB0aGVyZSB0aGF0ICpkb2VzKiByZWdpc3RlciBhbiBNRElPIGJ1cz8gQW5kIG9uIHRoYXQgTURJTyBidXMsIGNhbiBJIHRoZW4gYXR0YWNoIHNvbWUgY29tcGxldGVseSBzZXBhcmF0ZSwgYXJiaXRyYXJ5IFBIWT8gSSdtIHBpY3R1cmluZyBhIHZpcnR1YWwgZGV2aWNlIHdoZXJlIEkgY2FuIGNvbmZpZ3VyZSB0aGUgUEhZIGltcGxlbWVudGF0aW9uIGluZGVwZW5kZW50bHkuXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZSBjb2RlLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmNgLiBUaGlzIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIHRvIHByb3ZpZGUgYSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgUEhZcyBhcmUgYXR0YWNoZWQgYW5kIGhhbmRsZWQuIExldCdzIHNlZSBpZiB0aGlzIHNoZWRzIHNvbWUgbGlnaHQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzYyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjQ6NDQuNDc0NTM1ODI2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE3NDEwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpeGVkX3BoeV9yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00ODI9c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkxLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOVU1fRklYRURfUEhZUzsgaSsrKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5MjpcXHRcXHRwaHlkZXZzW2ldID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjczOlxcdFxcdHBoeWRldiA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNzQtXFx0XFx0aWYgKCFJU19FUlIocGh5ZGV2KSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmM9MTQzOT1pbnQgYmdtYWNfcGh5X2Nvbm5lY3RfZGlyZWN0KHN0cnVjdCBiZ21hYyAqYmdtYWMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jLTE0NDgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYzoxNDQ5OlxcdHBoeV9kZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXFx1MDAyNmZwaHlfc3RhdHVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jLTE0NTAtXFx0aWYgKElTX0VSUihwaHlfZGV2KSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz0xODQ4PXN0YXRpYyBpbnQgZnRnbWFjMTAwX3Byb2JlX25jc2koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg2Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE4Njc6XFx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyKFxcdTAwMjZuY3NpX3BoeV9zdGF0dXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4NjgtXFx0aWYgKElTX0VSUihwaHlkZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz0yOTgxPXN0YXRpYyBpbnQgZmVjX2VuZXRfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAwMi1cXHRcXHRcXHRuZXRkZXZfaW5mbyhuZGV2LCBcXFwibm8gUEhZLCBhc3N1bWluZyBkaXJlY3QgY29ubmVjdGlvbiB0byBzd2l0Y2hcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjMwMDM6XFx0XFx0XFx0cGh5X2RldiA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMwMDQtXFx0XFx0XFx0aWYgKElTX0VSUihwaHlfZGV2KSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yMzg9c3RhdGljIGludCBoYmdfZml4ZWRfcGh5X2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyNTE6XFx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyKFxcdTAwMjZoYmdfZml4ZWRfcGh5X3N0YXR1cywgTlVMTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTItXFx0aWYgKElTX0VSUihwaHlkZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz00MTI9aW50IG9mX3BoeV9yZWdpc3Rlcl9maXhlZF9saW5rKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00NTktcmVnaXN0ZXJfcGh5OlxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQ2MDpcXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGZpeGVkX3BoeV9yZWdpc3RlcihcXHUwMDI2c3RhdHVzLCBucCkpO1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ2MS19XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9MTE4PXN0YXRpYyBpbnQgZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEzMTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Mi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3MzpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzQtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgxLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODI6XFx0cmV0dXJuIGZpeGVkX3BoeV9yZWdpc3RlcihcXHUwMDI2c3RhdHVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgzLX1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTg0OkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4NS1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg9MTk9ZXh0ZXJuIGludCBmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcik7XFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyMDpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yMS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjIyOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg9Mjk9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X2RldmljZSAqXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDozMDpmaXhlZF9waHlfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXR1cyxcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTMxLVxcdFxcdCAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTM1LVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MzY6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0zNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI0OjQ2Ljg5MTk1MTY1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODY3MjI3OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZml4ZWQgUEhZcyBoZXJlLCB0aG9zZSByZWdpc3RlcmVkIHdpdGggdGhlIGBmaXhlZF9waHlgIGRyaXZlciBzcGVjaWZpY2FsbHksIG5vdCBqdXN0IGFueSBQSFkgZHJpdmVyLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlJ3MgYSB3YXkgdG8gZm9yY2UgdGhlIHN5c3RlbSB0byBpbnN0YW50aWF0ZSBhICpwYXJ0aWN1bGFyKiBQSFkgZHJpdmVyLCBhcyBvcHBvc2VkIHRvIGxldHRpbmcgdGhlIHN5c3RlbSBhdXRvLWRldGVjdC4gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0byBzcGVjaWZ5IG9yIGNvbnRyb2wgdGhhdCBkcml2ZXIgaW5zdGFudGlhdGlvbi5cblxuVGhlbiBJIHBhdXNlZCDigJMgd2FpdCwgY291bGQgSSBzb21laG93IGluamVjdCBhIGRldmljZSB0cmVlIG5vZGU/IEkgc2VlbSB0byByZW1lbWJlciBgc3l6a2FsbGVyYCBoYXZpbmcgdGhlIGNhcGFiaWxpdHkgdmlhIHNvbWV0aGluZyBsaWtlIGBzeXpfaW5pdF9uZXRfc29ja2V0YC4uLiBidXQgbm8sIHRoYXQncyBub3QgcmlnaHQuIEF0IGxlYXN0LCBub3Qgb24geDg2LCBpdCBkb2Vzbid0IGRvIGR5bmFtaWMgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLlxuXG5CdXQgaG9sZCBvbiwgZGlkbuKAmXQgSSBzZWUgc3l6a2FsbGVyIGZ1enppbmcgVVNCIGRldmljZXMgdXNpbmcgYGR1bW15X2hjZGAgYW5kIGBzeXpfdXNiX2Nvbm5lY3RgPyBUaGF0J3MgYSBnb29kIGFwcHJvYWNoIHRvIGNyZWF0ZSBzcGVjaWFsaXplZCB0YXJnZXRzLlxuXG5IbW0sIHNvIGlmIGl0IGhhbmRsZXMgVVNCLCBwZXJoYXBzIGl0IGFsc28gZnV6emVzIE1ESU8gZGV2aWNlcz8gVGhhdCdzIHRoZSBuZXh0IGF2ZW51ZSB0byBleHBsb3JlLiBJJ2QgYmV0dGVyIGNoZWNrIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBNRElPLXJlbGF0ZWQgZGVzY3JpcHRpb25zIHdpdGhpbiBzeXprYWxsZXIncyBkZWZpbml0aW9ucy4gVGhhdCB3b3VsZCBiZSB0aGUgZWFzaWVzdCB3YXkgdG8gZmlndXJlIGl0IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNjAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjQ6NTEuNzU5MTgyMTM0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTM4ODU1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNDo1MS44NTg1ODAzNDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4MDk5OTM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgU3l6a2FsbGVyIGFuZCBNRElPIERlc2NyaXB0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBzZWUgaWYgc3l6a2FsbGVyIGhhcyBhbnkgcHJlLWRlZmluZWQgTURJTyBkZXNjcmlwdGlvbnMgbHVya2luZyB3aXRoaW4gaXRzIGtlcm5lbCBpbnRlZ3JhdGlvbi4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgc3RlcCBpbiBhc3Nlc3NpbmcgaXRzIHBvdGVudGlhbCBmb3IgZnV6emluZyBNRElPLXJlbGF0ZWQgZHJpdmVycyBhbmQgc3Vic3lzdGVtcy4gSWYgdGhlcmUgYXJlIGFscmVhZHkgTURJTyBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIHRoYXQgdGVsbHMgbWUgc3l6a2FsbGVyIGhhcyBzb21lIGV4aXN0aW5nIGF3YXJlbmVzcyBvZiB0aGUgaW50ZXJmYWNlIGFuZCBpdHMgYXNzb2NpYXRlZCB2dWxuZXJhYmlsaXRpZXMsIG9yIHRoYXQgc29tZW9uZSBoYXMgYWRkZWQgdGhlbSBpbi4gVGhpcyBpcyB2YWx1YWJsZS4gSXQgbWlnaHQgbWVhbiBJIGNhbiBsZXZlcmFnZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZSwgb3IgYXQgbGVhc3QgbGVhcm4gZnJvbSBob3cgb3RoZXJzIGhhdmUgYXBwcm9hY2hlZCB0aGlzLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHNlYXJjaCBtZXRob2RvbG9neSB0byBxdWlja2x5IHBpbnBvaW50IGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBkZWZpbml0aW9ucyB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaW1lIHRvIGdldCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgwMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI0OjU1LjkzOTU4MjQ5MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzODE1ODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHVtbXkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjQ6NTYuMDMxOTczMTAxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMzM1NzE5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIE1vY2tpbmcgYSBQSFkgRGV2aWNlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHNpbXVsYXRlIG9yIHRyaWdnZXIgYSBwcm9iZSBmb3IgdGhpcyBzcGVjaWZpYyBQSFkgZGV2aWNlLCBgeXQ4ODI0X3Byb2JlYCwgd2hpY2ggaXMgYXBwYXJlbnRseSBjYWxsZWQgd2hlbiBhIFBIWSB3aXRoIElEIGAweDRmNTFlOGI4YCBpcyBwcm9iZWQgb24gYW4gTURJTyBidXMuIE15IHByaW1hcnkgdGhvdWdodCBpcywgY2FuIEkgY29uanVyZSB1cCBzdWNoIGEgUEhZIGRldmljZT8gSSBpbW1lZGlhdGVseSB3ZW50IHNlYXJjaGluZyBmb3IgYSBtb2NrdXAgZHJpdmVyLiBNeSBpbml0aWFsIHNlYXJjaCB0ZXJtcyB3ZXJlIGBtZGlvLiptb2NrdXBgLCBidXQgdGhhdCB5aWVsZGVkIG5vdGhpbmcgcHJvbWlzaW5nLiBJIGFsc28gY29uc2lkZXJlZCBgbWRpby1kdW1teWAgYW5kIGBtZGlvLWJjbS11bmltYWNgLCBidXQgdGhlIGxhdHRlciBzZWVtcyB0byBiZSBmb3IgYWN0dWFsIGhhcmR3YXJlLlxuXG5UaGVuIEkgc2hpZnRlZCBteSBmb2N1cyB0byB0aGUgTURJTyBpbmZyYXN0cnVjdHVyZSBpdHNlbGYuIElzIHRoZXJlIGEgc29mdHdhcmUtYmFzZWQgTURJTyBidXMgSSBjb3VsZCB1c2U/IEkgZm91bmQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1iaXRiYW5nLmNgLCBidXQgdGhhdCdzIGp1c3QgYml0YmFuZ2luZyBvdmVyIEdQSU8sIHNvIG5vdCB3aGF0IEkgbmVlZC4gYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYCBpcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LCBidXQgY2FuIEkgcmVnaXN0ZXIgYW4gTURJTyBidXMgZnJvbSB1c2Vyc3BhY2UgdG8gY3JlYXRlIGEgc3BlY2lmaWMgc2NlbmFyaW8/IEl0IGRvZXNuJ3QgbG9vayBsaWtlIHRoZXJlJ3MgYSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlIG9yIGlvY3RsIGZvciB0aGF0LlxuXG5XYWl0IGEgc2Vjb25k4oCmIHdoYXQgYWJvdXQgYGRzYV9sb29wYD8gVGhhdCdzIGEgbW9ja3VwIERTQSBzd2l0Y2gsIGZvdW5kIGluIGBkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuY2AuIE1heWJlIGl0IHNpbXVsYXRlcyBhbiBNRElPIGJ1cyBhcyBwYXJ0IG9mIGl0cyBzZXR1cD8gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGF2ZW51ZSB0byBleHBsb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTowMi4wNjU1NDc4NTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODAzOTExNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTc0PXN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2c1tQSFlfTUFYX0FERFJdO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc1OnN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKnN3aXRjaF9tZGlvZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9MTg0PXN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3JlYWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4OS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxOTA6XFx0cmV0ID0gbWRpb2J1c19yZWFkX25lc3RlZChidXMsIHBzLVxcdTAwM2Vwb3J0X2Jhc2UgKyBwb3J0LCByZWdudW0pO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE5MS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTE5OT1zdGF0aWMgaW50IGRzYV9sb29wX3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjA1LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIwNjpcXHRyZXQgPSBtZGlvYnVzX3dyaXRlX25lc3RlZChidXMsIHBzLVxcdTAwM2Vwb3J0X2Jhc2UgKyBwb3J0LCByZWdudW0sIHZhbHVlKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0yNTA9c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNjMtXFx0LyogSnVzdCBkbyBhIHNsZWVwaW5nIG9wZXJhdGlvbiB0byBtYWtlIGxvY2tkZXAgY2hlY2tzIGVmZmVjdGl2ZSAqL1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI2NDpcXHRtZGlvYnVzX3JlYWQoYnVzLCBwcy1cXHUwMDNlcG9ydF9iYXNlICsgcG9ydCwgTUlJX0JNU1IpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI2NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTI4Mz1zdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI5Mi1cXHQvKiBKdXN0IGRvIGEgc2xlZXBpbmcgb3BlcmF0aW9uIHRvIG1ha2UgbG9ja2RlcCBjaGVja3MgZWZmZWN0aXZlICovXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjkzOlxcdG1kaW9idXNfcmVhZChidXMsIHBzLVxcdTAwM2Vwb3J0X2Jhc2UgKyBwb3J0LCBNSUlfQk1TUik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjk0LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9MzM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZHNhX2xvb3BfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTc6XFx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM1OC1cXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNjQtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzY1OlxcdGRzID0gZGV2bV9remFsbG9jKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqZHMpLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNjYtXFx0aWYgKCFkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2OC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNjk6XFx0ZHMtXFx1MDAzZWRldiA9IFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzcwLVxcdGRzLVxcdTAwM2VudW1fcG9ydHMgPSBEU0FfTE9PUF9OVU1fUE9SVFM7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzcxLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM3MjpcXHRwcyA9IGRldm1fa3phbGxvYyhcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LCBzaXplb2YoKnBzKSwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzczLVxcdGlmICghcHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODEtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzgyOlxcdGRzLVxcdTAwM2VkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4My1cXHRkcy1cXHUwMDNlb3BzID0gXFx1MDAyNmRzYV9sb29wX2RyaXZlcjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODQtXFx0ZHMtXFx1MDAzZXByaXYgPSBwcztcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODU6XFx0cHMtXFx1MDAzZWJ1cyA9IG1kaW9kZXYtXFx1MDAzZWJ1cztcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzg3OlxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LCBkcyk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzkwLVxcdGlmICghcmV0KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5MTpcXHRcXHRkZXZfaW5mbyhcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IDB4JTB4XFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5Mi1cXHRcXHRcXHQgcGRhdGEtXFx1MDAzZW5hbWUsIHBkYXRhLVxcdTAwM2VlbmFibGVkX3BvcnRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5Ni1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozOTc6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk4LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozOTk6XFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2X2dldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQwMC1cXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTAtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDExOnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDEyLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTM6XFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2X2dldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxNC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxOS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MjA6XFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyMS19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MjQ6XFx0Lm1kaW9kcnYuZHJpdmVyXFx0PSB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDI1LVxcdFxcdC5uYW1lXFx0PSBcXFwiZHNhLWxvb3BcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NDMyPXN0YXRpYyBpbnQgZHNhX2xvb3BfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNC17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM1OlxcdHJldHVybiBkcnYgPT0gXFx1MDAyNmRzYV9sb29wX2Rydi5tZGlvZHJ2LmRyaXZlcjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzYtfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NDM4PXN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ1LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0NjpzdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDcte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDYyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ2MzpcXHRidXMgPSBtZGlvX2ZpbmRfYnVzKFxcXCJmaXhlZC0wXFxcIik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDY0LVxcdGlmIChXQVJOX09OKCFidXMpKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDY2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ2NzpcXHRzd2l0Y2hfbWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIDMxKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Njg6XFx0aWYgKElTX0VSUihzd2l0Y2hfbWRpb2RldikpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDY5LVxcdFxcdGdvdG8gb3V0O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzE6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzI6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXFx1MDAyNmRzYV9sb29wX3BkYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzQ6XFx0cmV0ID0gbWRpb19kZXZpY2VfcmVnaXN0ZXIoc3dpdGNoX21kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3NS1cXHRpZiAocmV0KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3NjpcXHRcXHRtZGlvX2RldmljZV9mcmVlKHN3aXRjaF9tZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00Nzctb3V0Olxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NDgyPXN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4Ni1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODc6XFx0cmV0ID0gZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KCk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDg4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTMtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk0OlxcdHJldCA9IG1kaW9fZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZkc2FfbG9vcF9kcnYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5NS1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDk2LVxcdFxcdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NzpcXHRcXHRtZGlvX2RldmljZV9yZW1vdmUoc3dpdGNoX21kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5ODpcXHRcXHRtZGlvX2RldmljZV9mcmVlKHN3aXRjaF9tZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTktXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NTA1PXN0YXRpYyB2b2lkIF9fZXhpdCBkc2FfbG9vcF9leGl0KHZvaWQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDc6XFx0bWRpb19kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDgtXFx0ZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKCk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTA5OlxcdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEwOlxcdG1kaW9fZGV2aWNlX2ZyZWUoc3dpdGNoX21kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjAyLjI3MzU5MjQ3MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTc5NTc0MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUEhZIERyaXZlciBUZXN0aW5nIGluIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gdGVzdCB0aGlzIGB5dDg4MjRgIFBIWSBkcml2ZXIgd2l0aGluIHRoZSBTeXprYWxsZXIgZW52aXJvbm1lbnQuIEZpcnN0LCBJIHRob3VnaHQgYG1kaW8tbW9ja3VwYCB3YXMgYSByZWxldmFudCBkcml2ZXIsIGJ1dCBubyBzdWNoIGZpbGUgZXhpc3RzIOKAkyB0aGF0J3MgYSBkZWFkIGVuZC4gVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyAqZG8qIHlvdSB0ZXN0IFBIWSBkcml2ZXJzIGluIGEgZ2VuZXJpYyB3YXk/XG5cbkkgcmVtZW1iZXIgYG1kaW9idXNfcmVnaXN0ZXJgIGluIGBkcml2ZXJzL25ldC9waHkvbWRpb19idXMuY2AsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIGlzc3VlIGlzLCBTeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgd2F5IHRvIGF1dG9tYXRpY2FsbHkgaW5zdGFudGlhdGUgUEhZIGRldmljZXMgb3IgTURJTyBidXNlcy4gSWYgdGhlIGtlcm5lbCBpcyBydW5uaW5nIGluIFFFTVUsIHRoZSBlbXVsYXRlZCBoYXJkd2FyZSB1c3VhbGx5IGRvZXNuJ3QgY3JlYXRlIGEgcmVhbCBNRElPIGJ1cyB0aGF0IHdvdWxkIHByb2JlIGZvciBhIGB5dDg4MjRgIChvciBhbnkgZXh0ZXJuYWwgUEhZKS5cblxuSSB0aG91Z2h0IG1heWJlIGFuIGVtdWxhdGVkIE5JQyBsaWtlIGBtYWNiYCwgb3IgYGUxMDAwYCBjb3VsZCBiZSBsZXZlcmFnZWQuIE1heWJlIHRoZXNlIGhhdmUgYW4gTURJTyBidXMgYW5kIHNvbWUgd2F5IHRvIGNvbm5lY3QgdGhpcyBQSFkgdG8gaXQsIGJ1dCwgbm8sIHRob3NlIFFFTVUtZW11bGF0ZWQgTklDcyBoYXZlIHRoZWlyIG93biBpbnRlcm5hbCBQSFlzLCBjb21wbGV0ZWx5IGRpc3RpbmN0LiBUaGUgc2FtZSBnb2VzIGZvciB0aGUgbGlrZXMgb2YgYHJ0bDgxMzlgLiBBbmQgYHZpcnRpby1uZXRgIGlzIG91dDsgaXQgZG9lc24ndCBldmVuIHVzZSBQSFlzLlxuXG5UaGVuIEkgY29uc2lkZXJlZCBgZmVjYCBiZWNhdXNlIFFFTVUgKmRvZXMqIGVtdWxhdGUgYSBGcmVlc2NhbGUgRmFzdCBFdGhlcm5ldCBDb250cm9sbGVyIChgZmVjYCksIGFuZCAqdGhhdCogaGFzIGFuIE1ESU8gYnVzLiBIb3dldmVyLCB0aGUgUEhZIElEIGluIHRoZSBRRU1VIGVtdWxhdGlvbiBpcyBoYXJkY29kZWQsIHR5cGljYWxseSB0byBhIGdlbmVyaWMgUEhZIG9yIGEgc3BlY2lmaWMgb25lIHRoYXQgaXNuJ3QgYHl0ODgyNGAuIENhbiBJIGV2ZW4gY2hhbmdlIHRoYXQgUEhZIElEIGluIHRoZSBRRU1VIGVtdWxhdGlvbiBmcm9tIHdpdGhpbiBTeXprYWxsZXI/IE5vLiBTeXprYWxsZXIgZG9lc24ndCBoYXZlIGNvbnRyb2wgb3ZlciBRRU1VIGhhcmR3YXJlIHBhcmFtZXRlcnMgYXQgdGhhdCBsZXZlbC5cblxuU28sIHJlYWxpc3RpY2FsbHksIHRoaXMgbWVhbnMgdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uIGlzIG5ldmVyIGdvaW5nIHRvIGJlIGNhbGxlZCwgYmVjYXVzZSBubyBtYXRjaGluZyBQSFkgZGV2aWNlIHdpbGwgZXZlciBiZSBjcmVhdGVkIG9uIGFuIE1ESU8gYnVzLlxuXG5Ob3csIEknbSB0aGlua2luZywgaXMgdGhlcmUgYSB3YXkgdG8gY3JlYXRlIGEgUEhZIGRldmljZSBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzZnM/IE1heWJlIGBtZGlvX2J1c2AgcHJvdmlkZXMgYSBgbmV3X2RldmljZWAgb3Igc2ltaWxhciBmdW5jdGlvbmFsaXR5PyBJIGFscmVhZHkgZ3JlcHBlZCBgbWRpb19idXMuY2AgZm9yIGBuZXdfZGV2aWNlYCwgYnV0IGZvdW5kIG5vdGhpbmcuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIOKAkyBtYXliZSBzb21ldGhpbmcgaXMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjk5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjEwLjQ1MzE2ODk5OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNTkyMzE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXdfZGV2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjEwLjU2NDc3Mjc2OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzAzMzU4MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggUEhZIENvbnRyb2wgd2l0aCBgc3lzZnNgKipcblxuUmlnaHQsIHNvIEknbSBjaGV3aW5nIG9uIHRoaXMgUEhZIGNvbnRyb2wgaXNzdWUgYWdhaW4uIFRoZSBtb3JlIEkgY29uc2lkZXIgaXQsIHRoZSBtb3JlIEknbSBsZWFuaW5nIHRvd2FyZCB0aGUgYHN5c2ZzYCBhcHByb2FjaC4gSSBtZWFuLCBpdCdzIGFscmVhZHkgdGhlcmUsIGlzbid0IGl0PyBXZSd2ZSBnb3QgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIGV4cG9zaW5nIGRldmljZSBhdHRyaWJ1dGVzLiBXaHkgcmVpbnZlbnQgdGhlIHdoZWVsPyBJdCBwcm92aWRlcyBhIHdlbGwtZGVmaW5lZCBpbnRlcmZhY2UgZm9yIG1hbmlwdWxhdGluZyBQSFkgcGFyYW1ldGVycywgYW5kIG1vcmUgdG8gdGhlIHBvaW50LCB0aGlzIGV4aXN0aW5nIHN0cnVjdHVyZSBpcyBzb21ldGhpbmcgSSBhbSBmYW1pbGlhciB3aXRoLlxuXG5JJ20gcGljdHVyaW5nIHRoZSBiZW5lZml0cy4uLiBgc3lzZnNgIG9mZmVycyBhIHNpbXBsZSBhbmQgcmVsYXRpdmVseSBzdGFibGUgbWV0aG9kLiBJdOKAmXMgZ290IGRlY2VudCBjb21tdW5pdHkgc3VwcG9ydCBhbmQgZG9jdW1lbnRhdGlvbi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgbWFpbnRhaW5hYmlsaXR5IGRvd24gdGhlIHJvYWQuIEl0IHNlZW1zIGxpa2UgaXQgd291bGQgbWFrZSBzY3JpcHRpbmcgYW5kIGF1dG9tYXRpb24gYSBicmVlemUsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIGtpbmQgb2YgZGlhZ25vc3RpYyB0b29scyBJIGFtIGNvbnNpZGVyaW5nIHRvIGRldmVsb3AuIFBsdXMsIHRoZSBrZXJuZWwgaGFuZGxlcyBhIGxvdCBvZiB0aGUgbG93LWxldmVsIGxvY2tpbmcgYW5kIGFjY2VzcyBjb250cm9sLCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgcGx1cy5cblxuT2YgY291cnNlLCB0aGVyZSBhcmUgYWx3YXlzIGNhdmVhdHMuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQsIGJ1dCBJIGNhbiBsaXZlIHdpdGggdGhhdCBpZiBpdCdzIG1hbmFnZWFibGUuIEl0J3MgbW9yZSBhYm91dCB0cmFkZS1vZmZzOiBlYXNlIG9mIHVzZSwgbWFpbnRhaW5hYmlsaXR5LCBhbmQgY29tcGF0aWJpbGl0eSwgdmVyc3VzIHJhdywgYWJzb2x1dGUgc3BlZWQuIEFsc28sIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGludGVyZmFjZSBpcyB3ZWxsLWRlc2lnbmVkIGFuZCBub3Qgb3Zlcmx5IGdyYW51bGFyLiBXZSBkb24ndCB3YW50IHRvIGV4cG9zZSBldmVyeSBzaW5nbGUgUEhZIHJlZ2lzdGVyIGRpcmVjdGx5OyBpdOKAmXMgYWJvdXQgcHJvdmlkaW5nIHRoZSByaWdodCBsZXZlbCBvZiBhYnN0cmFjdGlvbi4gVWx0aW1hdGVseSwgaXTigJlzIGFib3V0IGNyYWZ0aW5nIHRoZSB1c2VyIGV4cGVyaWVuY2U6IGhvdyBlYXN5IHdpbGwgdGhpcyBiZSBmb3Igb3RoZXIgZW5naW5lZXJzIHRvIHVzZSB0byB0ZXN0IHRoZWlyIGRlc2lnbnM/XG5cblNvLCB5ZWFoLCBgc3lzZnNgIGZvciBQSFkgY29udHJvbOKApiBpdCdzIGRlZmluaXRlbHkgaGlnaCBvbiBteSBsaXN0IGZvciBzZXJpb3VzIGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBhIGJpdCBtb3JlIGFuZCBzZWUgaG93IGl0IG1lc2hlcyB3aXRoIHRoZSBzcGVjaWZpY3Mgb2Ygb3VyIHRhcmdldCBoYXJkd2FyZS4gSXQgbWlnaHQgbm90IGJlIHRoZSBwZXJmZWN0IHNvbHV0aW9uIGZvciBldmVyeSBzY2VuYXJpbywgYnV0IGl0IGhhcyB0aGUgcG90ZW50aWFsIHRvIHNvbHZlIGEgbGFyZ2UgcGVyY2VudGFnZSBvZiBjaGFsbGVuZ2VzIEkgZm9yZXNlZSBpbiBteSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNjk1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6MTUuODY4MTMzODYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIwMjQxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVWSUNFX0FUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTU2MT1waHlfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTU2Ni19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo1Njc6c3RhdGljIERFVklDRV9BVFRSX1JPKHBoeV9pZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01NjgtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTU3MD1waHlfaW50ZXJmYWNlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy01ODEtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NTgyOnN0YXRpYyBERVZJQ0VfQVRUUl9STyhwaHlfaW50ZXJmYWNlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTU4My1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NTg1PXBoeV9oYXNfZml4dXBzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNTkxLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjU5MjpzdGF0aWMgREVWSUNFX0FUVFJfUk8ocGh5X2hhc19maXh1cHMpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNTkzLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NTk0PXN0YXRpYyBzc2l6ZV90IHBoeV9kZXZfZmxhZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTYwMS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo2MDI6c3RhdGljIERFVklDRV9BVFRSX1JPKHBoeV9kZXZfZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNjAzLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz02MTc9c3RhdGljIHNzaXplX3QgbW1kIyNuIyNfZGV2aWNlX2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTYyMy19IFxcXFxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjYyNDpzdGF0aWMgREVWSUNFX0FUVFJfUk8obW1kIyNuIyNfZGV2aWNlX2lkKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNjI1LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNDcwPXBoeV9zdGFuZGFsb25lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ3Ni19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNDc3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhwaHlfc3RhbmRhbG9uZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDc4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNToxNS45NzAxNjU0MjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEzMDk4MjQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBcHByb2FjaCB0byBQSFkgRGV2aWNlIEluc3RhbnRpYXRpb24gdmlhIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gaW50ZXJhY3Qgd2l0aCBhIFBIWSBkZXZpY2UgdGhyb3VnaCB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB1c2luZyBTeXprYWxsZXIgZm9yIGZ1enppbmcuIFRoZSBpbW1lZGlhdGUgcm9hZGJsb2NrIGlzIHRoYXQgeW91IGNhbid0IGp1c3QgKmNyZWF0ZSogYSBQSFkgZGV2aWNlIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlLiBUaGF0J3MgYSBuby1nby4gSSBjb25zaWRlcmVkIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBJMkNgIG9yIGBTUElgIGFzIGFuIGludGVybWVkaWFyeSwgdGhpbmtpbmcgSSBjb3VsZCBnZXQgYXJvdW5kIHRoZSBkaXJlY3QgaW5zdGFudGlhdGlvbiBwcm9ibGVtLCBidXQgcXVpY2tseSByZWFsaXplZCB0aGlzIGlzIGFuIE1ESU8gZGV2aWNlLCBub3Qgc29tZXRoaW5nIGVhc2lseSBoYW5kbGVkIHRoYXQgd2F5LlxuXG5UaGVuLCBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgdGhlIGV4aXN0aW5nIGRyaXZlciBpbmZyYXN0cnVjdHVyZS4gQ291bGQgc29tZXRoaW5nIGxpa2UgYG1kaW8tYmNtLXVuaW1hYy5jYCBwcm92aWRlIGEgY2x1ZT8gSXQncyBhIHBsYXRmb3JtIGRyaXZlciwgYnV0IGhvdyBjYW4gSSBpbmplY3QgaXQsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBpbnRvIHRoZSBzeXN0ZW0gdG8gcmVnaXN0ZXIgdGhlIE1ESU8gYnVzIGluIGEgY29udHJvbGxlZCB3YXk/IFRoZSBnb2FsIHdvdWxkIGJlIHRvIHRoZW4gbWFuaXB1bGF0ZSBNRElPIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBhbmQgZ2V0IHRoZSBQSFkgSUQgaW4gcmVzcG9uc2UuXG5cbkhlcmUncyB0aGUgcHJvYmxlbTogU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGdlbmVyaWMgcGxhdGZvcm0gZGV2aWNlIGluamVjdG9yLiBEYW1uISBCdXQgd2FpdC4uLiB3aGF0IGFib3V0IHRoZSBtb3JlIHNwZWNpYWxpemVkIGZ1bmN0aW9uYWxpdHkgaXQgKmRvZXMqIG9mZmVyPyBJIHJlbWVtYmVyIHNlZWluZyBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5YCBhbmQgYWxzbyB0aGUgYHN5el84MDIxMV8uLi5gIGNhbGxzLiBDb3VsZCBJIGxldmVyYWdlIHRoZXNlIHNvbWVob3c/IERvZXMgU3l6a2FsbGVyIGhhdmUgYW55IHByZS1idWlsdCBtZXRob2RzIHRoYXQgY291bGQgYmUgdXNlZCBmb3IgZnV6emluZyBQSFkgZHJpdmVycz8gSSBuZWVkIHRvIGNoZWNrLlxuXG5UaGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gc2VhcmNoIHRoZSBTeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciBhbnkgbWVudGlvbnMgb2YgXCJNRElPXCIgb3IgXCJQSFkuXCIgSG9wZWZ1bGx5LCB0aGVyZSdzIHNvbWUgZXhpc3RpbmcgZ3JvdW5kd29yayBJIGNhbiBidWlsZCB1cG9uLiBUaGF0J3MgdGhlIGtleSB0byBtYWtpbmcgYW55IHByb2dyZXNzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0ODA0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjIzLjEwMTE1MjM5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQ3OTM0MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2EvZHNhLmM9NjIyPXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTY1NC1cXHRpZiAoIWRzLVxcdTAwM2V1c2VyX21paV9idXMgXFx1MDAyNlxcdTAwMjYgZHMtXFx1MDAzZW9wcy1cXHUwMDNlcGh5X3JlYWQpIHtcXG5uZXQvZHNhL2RzYS5jOjY1NTpcXHRcXHRkcy1cXHUwMDNldXNlcl9taWlfYnVzID0gbWRpb2J1c19hbGxvYygpO1xcbm5ldC9kc2EvZHNhLmMtNjU2LVxcdFxcdGlmICghZHMtXFx1MDAzZXVzZXJfbWlpX2J1cykge1xcbi0tXFxubmV0L2RzYS9kc2EuYy02NjItXFxubmV0L2RzYS9kc2EuYzo2NjM6XFx0XFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihkcy1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5uZXQvZHNhL2RzYS5jLTY2NC1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9kc2EvZHNhLmMtNjc0LVxcdGlmIChkcy1cXHUwMDNldXNlcl9taWlfYnVzIFxcdTAwMjZcXHUwMDI2IGRzLVxcdTAwM2VvcHMtXFx1MDAzZXBoeV9yZWFkKVxcbm5ldC9kc2EvZHNhLmM6Njc1OlxcdFxcdG1kaW9idXNfZnJlZShkcy1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5uZXQvZHNhL2RzYS5jLTY3Ni10ZWFyZG93bjpcXG4tLVxcbm5ldC9kc2EvZHNhLmM9Njg2PXN0YXRpYyB2b2lkIGRzYV9zd2l0Y2hfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxubmV0L2RzYS9kc2EuYy02OTMtXFx0aWYgKGRzLVxcdTAwM2V1c2VyX21paV9idXMgXFx1MDAyNlxcdTAwMjYgZHMtXFx1MDAzZW9wcy1cXHUwMDNlcGh5X3JlYWQpIHtcXG5uZXQvZHNhL2RzYS5jOjY5NDpcXHRcXHRtZGlvYnVzX3VucmVnaXN0ZXIoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyk7XFxubmV0L2RzYS9kc2EuYzo2OTU6XFx0XFx0bWRpb2J1c19mcmVlKGRzLVxcdTAwM2V1c2VyX21paV9idXMpO1xcbm5ldC9kc2EvZHNhLmMtNjk2LVxcdFxcdGRzLVxcdTAwM2V1c2VyX21paV9idXMgPSBOVUxMO1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxubmV0L2RzYS9wb3J0LmM6MTI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG5uZXQvZHNhL3BvcnQuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbmV0LmhcXHUwMDNlXFxuLS1cXG5uZXQvZHNhL3BvcnQuYz0xNzI2PXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHNhX3N3aXRjaGVzX2FwcGx5X3dvcmthcm91bmRzW10gPSB7XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0xNzk2LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKVxcbm5ldC9kc2EvcG9ydC5jOjE3OTc6XFx0XFxcInNtc2MsbGFuOTMwMy1tZGlvXFxcIixcXG5uZXQvZHNhL3BvcnQuYy0xNzk4LSNlbmRpZlxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX25ldC5oXFx1MDAzZVxcbm5ldC9kc2EvdXNlci5jOjE0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9tZGlvLmhcXHUwMDNlXFxubmV0L2RzYS91c2VyLmM6MTU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG5uZXQvZHNhL3VzZXIuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcXHUwMDNlXFxuLS1cXG5uZXQvZHNhL3VzZXIuYz0yNjM3PXN0YXRpYyBpbnQgZHNhX3VzZXJfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKnVzZXJfZGV2LCBpbnQgYWRkcixcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTI2NDItXFxubmV0L2RzYS91c2VyLmM6MjY0MzpcXHR1c2VyX2Rldi1cXHUwMDNlcGh5ZGV2ID0gbWRpb2J1c19nZXRfcGh5KGRzLVxcdTAwM2V1c2VyX21paV9idXMsIGFkZHIpO1xcbm5ldC9kc2EvdXNlci5jLTI2NDQtXFx0aWYgKCF1c2VyX2Rldi1cXHUwMDNlcGh5ZGV2KSB7XFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uYz01ODc9Y29udmVydF9sZWdhY3lfc2V0dGluZ3NfdG9fbGlua19rc2V0dGluZ3MoXFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uYy02MjEtXFx0XFx0PSBsZWdhY3lfc2V0dGluZ3MtXFx1MDAzZWF1dG9uZWc7XFxubmV0L2V0aHRvb2wvY29tbW9uLmM6NjIyOlxcdGxpbmtfa3NldHRpbmdzLVxcdTAwM2ViYXNlLm1kaW9fc3VwcG9ydFxcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjYyMzpcXHRcXHQ9IGxlZ2FjeV9zZXR0aW5ncy1cXHUwMDNlbWRpb19zdXBwb3J0O1xcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTYyNC1cXHRsaW5rX2tzZXR0aW5ncy1cXHUwMDNlYmFzZS5ldGhfdHBfbWRpeFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0zODI9Y29udmVydF9saW5rX2tzZXR0aW5nc190b19sZWdhY3lfc2V0dGluZ3MoXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQxMi1cXHRcXHQ9IGxpbmtfa3NldHRpbmdzLVxcdTAwM2ViYXNlLmF1dG9uZWc7XFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0MTM6XFx0bGVnYWN5X3NldHRpbmdzLVxcdTAwM2VtZGlvX3N1cHBvcnRcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjQxNDpcXHRcXHQ9IGxpbmtfa3NldHRpbmdzLVxcdTAwM2ViYXNlLm1kaW9fc3VwcG9ydDtcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQxNS1cXHRsZWdhY3lfc2V0dGluZ3MtXFx1MDAzZWV0aF90cF9tZGl4XFxuLS1cXG5uZXQvZXRodG9vbC9waHkuYz03MD1zdGF0aWMgaW50IHBoeV9wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcXG4tLVxcbm5ldC9ldGh0b29sL3BoeS5jLTkxLVxcbm5ldC9ldGh0b29sL3BoeS5jOjkyOlxcdHJlcF9kYXRhLVxcdTAwM2VuYW1lID0ga3N0cmR1cChkZXZfbmFtZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiksIEdGUF9LRVJORUwpO1xcbm5ldC9ldGh0b29sL3BoeS5jLTkzLVxcdGlmICghcmVwX2RhdGEtXFx1MDAzZW5hbWUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjIzLjQyNTk1MTUwNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTY5OTcwNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgVHJhaW4gb2YgVGhvdWdodCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRzYV9sb29wYCB0aGluZywgYW5kIGl0J3MgYWN0aW5nIGxpa2UgYSBtb2NrIERTQSBzd2l0Y2guIFJpZ2h0LCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIHN1cHBvc2VkIHRvIHJlZ2lzdGVyIGFuIE1ESU8gYnVzLiBMZXQncyBzZWUuLi4gKlllcyosIGl0IGxvb2tzIGxpa2UgYGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldmAgY3JlYXRlcyBhbiBNRElPIGRldmljZSwgc3BlY2lmaWNhbGx5IG9uIHRoZSBgZml4ZWQtMGAgYnVzLiBBaCwgcmlnaHQsIGBmaXhlZC0wYCBpcyB0aGUgYGZpeGVkX3BoeWAgYnVzLlxuXG5CdXQgaGVyZSdzIHdoZXJlIEkgc3RhcnQgdG8gaGl0IGEgc25hZy4gRG9lcyB0aGlzIHNldHVwICphY3R1YWxseSogbGV0IHVzIGF0dGFjaCBhbiBhcmJpdHJhcnkgUEhZPyBJIGRvbid0IHRoaW5rIHNvOyBpdCBzZWVtcyBsaWtlIHRoZSBQSFlzIG9uIHRoZSBgZml4ZWQtMGAgYnVzIGFyZSwgd2VsbCwgKmZpeGVkKi5cblxuVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBkbyBJIGdvIGFib3V0IHRlc3RpbmcgdGhpcyBQSFkgZHJpdmVyIGluIGEgY29udHJvbGxlZCBlbnZpcm9ubWVudD8gSWYgdGhlIGRyaXZlcidzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgYnV0IHRoZXJlJ3Mgbm8gcGh5c2ljYWwgaGFyZHdhcmUsIGFuZCBubyBzdHJhaWdodGZvcndhcmQgZW11bGF0aW9uIG1ldGhvZCwgaXQncyBiYXNpY2FsbHkgdW5yZWFjaGFibGUgaW4gc29tZXRoaW5nIGxpa2UgUUVNVS4gSXQgYmVjb21lcyBlZmZlY3RpdmVseSBkZWFkIGNvZGUgaW4gYSB2aXJ0dWFsIHNldHVwLlxuXG5JIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIGNvbmZpcm0gaWYgdGhlcmUncyAqYW55KiB3YXkgdG8gaW5zdGFudGlhdGUgYSBQSFkgZHJpdmVyIGluIGEgdGVzdGFibGUgd2F5LiBDYW4gSSBsZXZlcmFnZSBzb21ldGhpbmcgbGlrZSBgbWRpby1tb2NrdXBgPyBMZXQncyBjaGVjay4uLiB3YWl0LCBJIHNlYXJjaGVkLCBhbmQgdGhlcmUgd2VyZSAqemVybyogcmVzdWx0cyBmb3IgYG1kaW8uKm1vY2t1cGAuIFRoYXQncyBub3QgZ29vZC4gSSdsbCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNlYXJjaDsgbGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW55IGBtZGlvYCByZWxhdGVkIHRlc3QgZHJpdmVyIG91dCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6MjguOTk1OTI1NDE1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDIzMzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA0ODI4IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9ND1saWJwaHkteVxcdFxcdFxcdDo9IHBoeS5vIHBoeS1jNDUubyBwaHktY29yZS5vIHBoeV9kZXZpY2UubyBcXFxcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTUtXFx0XFx0XFx0XFx0ICAgbGlua21vZGUubyBwaHlfbGlua190b3BvbG9neS5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NjpcXHRcXHRcXHRcXHQgICBwaHlfY2Fwcy5vIG1kaW9fYnVzX3Byb3ZpZGVyLm8gcGh5X3BvcnQubyBcXFxcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjc6XFx0XFx0XFx0XFx0ICAgbWRpb19kZXZpY2Uub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS04LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTE2PWxpYnBoeS0kKENPTkZJR19PUEVOX0FMTElBTkNFX0hFTFBFUlMpICs9IG9wZW5fYWxsaWFuY2VfaGVscGVycy5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTE3LVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxODpvYmotJChDT05GSUdfUEhZTElCKVxcdFxcdCs9IG1kaW9fYnVzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMTktb2JqLSQoQ09ORklHX1BIWUxJTkspXFx0XFx0Kz0gcGh5bGluay5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19QSFlMSUIpXFx0XFx0Kz0gbGlicGh5Lm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX1BIWUxJQilcXHRcXHQrPSBtZGlvX2RldnJlcy5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19QSFlfUEFDS0FHRSlcXHQrPSBwaHlfcGFja2FnZS5vXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTI1Mj1zdGF0aWMgdTMyIGFkaW5fZ2V0X3JlZ192YWx1ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0yNTYte1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6MjU3OlxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMjU4LVxcdHUzMiB2YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTUwMT1zdGF0aWMgaW50IGFkaW5fY29uZmlnX2Nsa19vdXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTUwMi17XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo1MDM6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy01MDQtXFx0Y29uc3QgY2hhciAqdmFsID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9NTI4PXN0YXRpYyBpbnQgYWRpbl9jb25maWdfenB0bTEwMChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNTI5LXtcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjUzMDpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTUzMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9NjQ4PXN0YXRpYyBpbnQgYWRpbl9yZWFkX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUxNiByZWdudW0pXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NDkte1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjUwOlxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjUxOlxcdGludCBwaHlfYWRkciA9IHBoeWRldi1cXHUwMDNlbWRpby5hZGRyO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjUyLVxcdGludCBhZGluX3JlZ251bTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjU4LVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjU5OlxcdGVyciA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeV9hZGRyLCBBRElOMTMwMF9NSUlfRVhUX1JFR19QVFIsXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NjAtXFx0XFx0XFx0ICAgICAgYWRpbl9yZWdudW0pO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NjMtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NjQ6XFx0cmV0dXJuIF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5X2FkZHIsIEFESU4xMzAwX01JSV9FWFRfUkVHX0RBVEEpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjY1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9NjY3PXN0YXRpYyBpbnQgYWRpbl93cml0ZV9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MTYgcmVnbnVtLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02Njkte1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjcwOlxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjcxOlxcdGludCBwaHlfYWRkciA9IHBoeWRldi1cXHUwMDNlbWRpby5hZGRyO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjcyLVxcdGludCBhZGluX3JlZ251bTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjc4LVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6Njc5OlxcdGVyciA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeV9hZGRyLCBBRElOMTMwMF9NSUlfRVhUX1JFR19QVFIsXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02ODAtXFx0XFx0XFx0ICAgICAgYWRpbl9yZWdudW0pO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02ODMtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2ODQ6XFx0cmV0dXJuIF9fbWRpb2J1c193cml0ZShidXMsIHBoeV9hZGRyLCBBRElOMTMwMF9NSUlfRVhUX1JFR19EQVRBLCB2YWwpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjg1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9ODkwPXN0YXRpYyBpbnQgYWRpbl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtODkxLXtcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjg5MjpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTg5My1cXHRzdHJ1Y3QgYWRpbl9wcml2ICpwcml2O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz0xMDU5PW1vZHVsZV9waHlfZHJpdmVyKGFkaW5fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTEwNjAtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzoxMDYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWRpbl90YmxbXSA9IHtcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTEwNjItXFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoUEhZX0lEX0FESU4xMjAwKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0xMDY2LVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6MTA2NzpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFkaW5fdGJsKTtcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTEwNjgtTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJBbmFsb2cgRGV2aWNlcyBJbmR1c3RyaWFsIEV0aGVybmV0IFBIWSBkcml2ZXJcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTI0ND1zdGF0aWMgaW50IGFkaW5fZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yNDYtXFx0c3RydWN0IGFkaW5fcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzoyNDc6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMjQ4LVxcdGludCByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYz0zMDk9c3RhdGljIGludCBhZGluX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzEwLXtcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzozMTE6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzEyLVxcdHN0cnVjdCBhZGluX3ByaXYgKnByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYz0zNDM9bW9kdWxlX3BoeV9kcml2ZXIoYWRpbl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTM0NC1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzozNDU6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhZGluX3RibFtdID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTM0Ni1cXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfQURJTjExMDApIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0zNTEtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM6MzUyOk1PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWRpbl90YmwpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTM1My1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFuYWxvZyBEZXZpY2VzIEluZHVzdHJpYWwgRXRoZXJuZXQgVDFMIFBIWSBkcml2ZXJcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYz02MT1tb2R1bGVfcGh5X2RyaXZlcihhZGluMTE0MF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYy02Mi1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExNDAtcGh5LmM6NjM6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhZGluMTE0MF90YmxbXSA9IHtcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExNDAtcGh5LmMtNjQtXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoQURJTjExNDBfUEhZX0lEKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTQwLXBoeS5jLTY3LVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYzo2ODpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFkaW4xMTQwX3RibCk7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTQwLXBoeS5jLTY5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz02NTI9c3RhdGljIGlycXJldHVybl90IGFuODgwMXJfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy02NjctXFx0aWYgKGlycV9zdGF0dXMgXFx1MDAyNiBBTjg4MDFfSVJRX1dBS0VfTUFHSUNQS1QpIHtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjY2ODpcXHRcXHRwbV93YWtldXBfZXZlbnQoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIDApO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNjY5LVxcdFxcdGlycV9oYW5kbGVkID0gdHJ1ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9NjgwPXN0YXRpYyB2b2lkIGFuODgwMXJfZ2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy02ODgtXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo2ODk6XFx0aWYgKCFkZXZpY2VfY2FuX3dha2V1cChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldikpIHtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTY5MC1cXHRcXHR3b2wtXFx1MDAzZXN1cHBvcnRlZCA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTcwOD1zdGF0aWMgaW50IGFuODgwMXJfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03MTYtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3MTc6XFx0aWYgKCFkZXZpY2VfY2FuX3dha2V1cChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldikpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03MTgtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03NzgtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3Nzk6XFx0cmV0dXJuIGRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTc4MC1cXHRcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2V3YWtlX21hZ2ljX2VuYWJsZWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz03ODM9c3RhdGljIGludCBhbjg4MDFyX29mX2luaXRfbGVkcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCAqbGVkX2NmZylcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTc4NC17XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3ODU6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03ODYtXFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cXHUwMDNlb2Zfbm9kZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MTAzND1zdGF0aWMgaW50IGFuODgwMXJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTEwMzUte1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTAzNjpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTEwMzctXFx0c3RydWN0IGFuODgwMXJfcHJpdiAqcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MTA2MD1zdGF0aWMgaW50IGFuODgwMXJfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDY3LVxcdCAqL1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTA2ODpcXHRpZiAoZGV2aWNlX21heV93YWtldXAoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYpKSB7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDY5LVxcdFxcdHByaXYtXFx1MDAzZXdha2VfbG5rY2hnX2VuYWJsZWQgPSBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MTA5MT1zdGF0aWMgaW50IGFuODgwMXJfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExMDItXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzoxMTAzOlxcdGlmIChkZXZpY2VfbWF5X3dha2V1cChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldikpIHtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExMDQtXFx0XFx0cHJpdi1cXHUwMDNld2FrZV9sbmtjaGdfZW5hYmxlZCA9IHRydWU7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTExNDY9bW9kdWxlX3BoeV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMTQ3LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTE0ODpzdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFuODgwMV90YmxbXSA9IHtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNDktXFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODAxUl9QSFlfSUQpIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNTEtfTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjExNTI6TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhbjg4MDFfdGJsKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNTMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xOTc9c3RydWN0IGVuODgxMWhfcHJpdiB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yMDMtXFx0dW5zaWduZWQgaW50XFx0XFx0Y2tvX2lzX2VuYWJsZWQ7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MjA0OlxcdHN0cnVjdCBtZGlvX2RldmljZVxcdCpwYnVzZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTIwNS19O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MjM5PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGVuODgxMWhfbGVkX3RyaWcgPSBCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpIHxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI0Ny1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNDg6c3RhdGljIGludCBfX2Fpcl9wYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjQ5LVxcdFxcdFxcdFxcdHUzMiBwYnVzX3JlZywgdTMyIHBidXNfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI1Mi1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNTM6XFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKG1kaW9kZXYtXFx1MDAzZWJ1cywgbWRpb2Rldi1cXHUwMDNlYWRkciwgQUlSX0VYVF9QQUdFX0FDQ0VTUyxcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNTQtXFx0XFx0XFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX3JlZykpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjU3LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjI1ODpcXHRyZXQgPSBfX21kaW9idXNfd3JpdGUobWRpb2Rldi1cXHUwMDNlYnVzLCBtZGlvZGV2LVxcdTAwM2VhZGRyLCBBSVJfUEJVU19BRERSX0hJR0gsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjU5LVxcdFxcdFxcdCAgICAgIEZJRUxEX0dFVChBSVJfUEJVU19SRUdfQUREUl9ISUdIX01BU0ssIHBidXNfcmVnKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNjItXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MjYzOlxcdHJldCA9IF9fbWRpb2J1c193cml0ZShtZGlvZGV2LVxcdTAwM2VidXMsIG1kaW9kZXYtXFx1MDAzZWFkZHIsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjY0LVxcdFxcdFxcdCAgICAgIEZJRUxEX0dFVChBSVJfUEJVU19SRUdfQUREUl9MT1dfTUFTSywgcGJ1c19yZWcpLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjY4LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjI2OTpcXHRyZXR1cm4gX19tZGlvYnVzX3dyaXRlKG1kaW9kZXYtXFx1MDAzZWJ1cywgbWRpb2Rldi1cXHUwMDNlYWRkciwgQUlSX1BCVVNfREFUQV9ISUdILFxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI3MC1cXHRcXHRcXHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTMyNz1zdGF0aWMgaW50IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTMzNS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzozMzY6XFx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzM3LVxcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTM5Nz1zdGF0aWMgaW50IGFuODgxMWhiX2xvYWRfZmlsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzk5LXtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo0MDA6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDAxLVxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz00MTM9c3RhdGljIGludCBhbjg4MTFoYl9tY3VfYXNzZXJ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00MTctXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NDE4OlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDE5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDMyLXVubG9jazpcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo0MzM6XFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQzNC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9NDM3PXN0YXRpYyBpbnQgYW44ODExaGJfbWN1X2RlYXNzZXJ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00NDEtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NDQyOlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDQzLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDU3LXVubG9jazpcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo0NTg6XFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQ1OS1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9NTAyPXN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTAzLXtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MDQ6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTA1LVxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncxLCAqZncyO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTA3ND1zdGF0aWMgaW50IGFuODgxMWhiX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA3NS17XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA3NjpcXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA3Ny1cXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA3OS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDgwOlxcdHByaXYgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMDgxLVxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwOTItXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA5MzpcXHRtZGlvZGV2ID0gbWRpb19kZXZpY2VfY3JlYXRlKHBoeWRldi1cXHUwMDNlbWRpby5idXMsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA5NDpcXHRcXHRcXHRcXHQgICAgIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyICsgRU44ODExSF9QQlVTX0FERFJfT0ZGUyk7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA5NTpcXHRpZiAoSVNfRVJSKG1kaW9kZXYpKVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTY6XFx0XFx0cmV0dXJuIFBUUl9FUlIobWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA5Ny1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDk4OlxcdHJldCA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwOTktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExMDEtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTEwMjpcXHRwcml2LVxcdTAwM2VwYnVzZGV2ID0gbWRpb2RldjtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTAzLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTEyMy1cXHQvKiBDby1DbG9jayBPdXRwdXQgKi9cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTI0OlxcdHJldCA9IGFuODgxMWhiX2Nsa19wcm92aWRlcl9zZXR1cChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgXFx1MDAyNnByaXYtXFx1MDAzZWh3KTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTI1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTM3LWVycl9kZXZfY3JlYXRlOlxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjExMzg6XFx0bWRpb19kZXZpY2VfcmVtb3ZlKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExMzktXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE0MC1lcnJfZGV2X2ZyZWU6XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTE0MTpcXHRtZGlvX2RldmljZV9mcmVlKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExNDItXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTExNDU9c3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTQ5LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjExNTA6XFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgc2l6ZW9mKHN0cnVjdCBlbjg4MTFoX3ByaXYpLFxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExNTEtXFx0XFx0XFx0ICAgIEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE3MS1cXHQvKiBDby1DbG9jayBPdXRwdXQgKi9cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTcyOlxcdHJldCA9IGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlaHcpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExNzMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTExODY9c3RhdGljIGludCBhbjg4MTFoYl9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE4Ny17XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTE4ODpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTg5LVxcdHUzMiBwYnVzX3ZhbHVlID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTEyMTc9c3RhdGljIGludCBlbjg4MTFoX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMjE4LXtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMjE5OlxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEyMjAtXFx0dW5zaWduZWQgaW50IHBvbCwgZGVmYXVsdF9wb2w7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xNDk4PXN0YXRpYyB2b2lkIGFuODgxMWhiX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTUwMi1cXHRpZiAocHJpdi1cXHUwMDNlcGJ1c2Rldikge1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjE1MDM6XFx0XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHByaXYtXFx1MDAzZXBidXNkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjE1MDQ6XFx0XFx0bWRpb19kZXZpY2VfZnJlZShwcml2LVxcdTAwM2VwYnVzZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNTA1LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTE1NTM9bW9kdWxlX3BoeV9kcml2ZXIoZW44ODExaF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTE1NTQtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTU1NTpzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGVuODgxMWhfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTU1Ni1cXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChFTjg4MTFIX1BIWV9JRCkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTE1NjAtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTU2MTpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGVuODgxMWhfdGJsKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNTYyLU1PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRE0pO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FtZC5jPTExMj1tb2R1bGVfcGh5X2RyaXZlcihhbTc5Y19kcml2ZXJzKTtcXG5kcml2ZXJzL25ldC9waHkvYW1kLmMtMTEzLVxcbmRyaXZlcnMvbmV0L3BoeS9hbWQuYzoxMTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhbWRfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2FtZC5jLTExNS1cXHR7IFBIWV9JRF9BQzEwMUwsIDB4ZmZmZmZmZjAgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hbWQuYy0xMTktXFxuZHJpdmVycy9uZXQvcGh5L2FtZC5jOjEyMDpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFtZF90YmwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmM9Mjk2PXN0YXRpYyBpbnQgYXFyX2Zpcm13YXJlX2xvYWRfbnZtZW0oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jLTMwMi1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYzozMDM6XFx0Y2VsbCA9IG52bWVtX2NlbGxfZ2V0KFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBcXFwiZmlybXdhcmVcXFwiKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYy0zMDQtXFx0aWYgKElTX0VSUihjZWxsKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jPTMyND1zdGF0aWMgaW50IGFxcl9maXJtd2FyZV9sb2FkX2ZzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmMtMzI1LXtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYzozMjY6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmMtMzI3LVxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfaHdtb24uYz0xOTA9aW50IGFxcl9od21vbl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jLTE5MS17XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmM6MTkyOlxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jLTE5My1cXHRzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTc1MD1zdGF0aWMgaW50IGFxcjEwN19jb25maWdfbWRpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03NTEte1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6NzUyOlxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlkZXYtXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03NTMtXFx0dTMyIG1kaV9jb25mO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz0xMTY0PXN0YXRpYyBpbnQgYXFyMTA3X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTExNjctXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoxMTY4OlxcdHBoeWRldi1cXHUwMDNlcHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTExNjktXFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgYXFyMTA3X3ByaXYpLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9MTU2NT1tb2R1bGVfcGh5X2RyaXZlcihhcXJfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE1NjYtXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoxNTY3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYXFyX3RibFtdID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTU2OC1cXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfQVExMjAyKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNTg4LVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MTU4OTpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFxcl90YmwpO1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTU5MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9Mjk3PXN0YXRpYyBpbnQgYWVvbl9maXJtd2FyZV9ib290KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IHU4ICpkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0zMjEtXFx0aWYgKHZhbCBcXHUwMDNlIDEpIHtcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjMyMjpcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIndyb25nIG9yaWdpbiBtZGlvX2luZGlyZWN0X3N0YXR1czogJXhcXFxcblxcXCIsIHZhbCk7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0zMjMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTM1Mj1zdGF0aWMgaW50IGFlb25fZmlybXdhcmVfbG9hZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzUzLXtcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjM1NDpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTM1NS1cXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz02MDM9c3RhdGljIGludCBhczIxeHh4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYwNy1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjYwODpcXHRwcml2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjA5LVxcdFxcdFxcdCAgICBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjEzLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NjE0OlxcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYxNS1cXHRcXHRcXHQgICAgICBcXHUwMDI2cHJpdi1cXHUwMDNlaXBjX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz0xMDc4PW1vZHVsZV9waHlfZHJpdmVyKGFzMjF4eHhfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0xMDc5LVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6MTA4MDpzdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFzMjF4eHhfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0xMDgxLVxcdHsgUEhZX0lEX01BVENIX1ZFTkRPUihQSFlfVkVORE9SX0FFT05TRU1JKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0xMDgzLX07XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzoxMDg0Ok1PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYXMyMXh4eF90YmwpO1xcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMTA4NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jPTEyMT1tb2R1bGVfcGh5X2RyaXZlcihhc2l4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmMtMTIyLVxcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jOjEyMzpzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFzaXhfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmMtMTI0LVxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9BU0lYX0FYODg3NzJBKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmMtMTI5LVxcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jOjEzMDpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFzaXhfdGJsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmM9MjMzPXN0YXRpYyBpbnQgYmNtX29tZWdhX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTIzNi1cXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jOjIzNzpcXHRwcml2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTIzOC1cXHRpZiAoIXByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI0Mi1cXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jOjI0MzpcXHRwcml2LVxcdTAwM2VzdGF0cyA9IGRldm1fa2NhbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI0NC1cXHRcXHRcXHRcXHQgICBiY21fcGh5X2dldF9zc2V0X2NvdW50KHBoeWRldiksIHNpemVvZih1NjQpLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYz0yNTI9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbV9jeWdudXNfcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODAtXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYzoyODE6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBiY21fY3lnbnVzX3BoeV90YmxbXSA9IHtcXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI4Mi1cXHR7IFBIWV9JRF9CQ01fQ1lHTlVTLCAweGZmZmZmZmYwLCB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODUtfTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jOjI4NjpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGJjbV9jeWdudXNfcGh5X3RibCk7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6MTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz0zMz1pbnQgYmNtX3BoeV93cml0ZV9leHAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZywgdTE2IHZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTM2LVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjM3OlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzgtXFx0cmMgPSBfX2JjbV9waHlfd3JpdGVfZXhwKHBoeWRldiwgcmVnLCB2YWwpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjM5OlxcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy00MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTYyPWludCBiY21fcGh5X3JlYWRfZXhwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWcpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy02NS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2NjpcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY3LVxcdHJjID0gX19iY21fcGh5X3JlYWRfZXhwKHBoeWRldiwgcmVnKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2ODpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjktXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz05ND1pbnQgYmNtX3BoeV9tb2RpZnlfZXhwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWcsIHUxNiBtYXNrLCB1MTYgc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtOTctXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6OTg6XFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy05OS1cXHRyZXQgPSBfX2JjbV9waHlfbW9kaWZ5X2V4cChwaHlkZXYsIHJlZywgbWFzaywgc2V0KTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzoxMDA6XFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTEwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTI3MT1pbnQgYmNtX3BoeV9yZWFkX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMjc0LVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjI3NTpcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTI3Ni1cXHRyZXQgPSBfX2JjbV9waHlfcmVhZF9yZGIocGh5ZGV2LCByZGIpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjI3NzpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMjc4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9Mjk1PWludCBiY21fcGh5X3dyaXRlX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiLCB1MTYgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMjk4LVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjI5OTpcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTMwMC1cXHRyZXQgPSBfX2JjbV9waHlfd3JpdGVfcmRiKHBoeWRldiwgcmRiLCB2YWwpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjMwMTpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzAyLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9MzI3PWludCBiY21fcGh5X21vZGlmeV9yZGIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJkYiwgdTE2IG1hc2ssIHUxNiBzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zMzAtXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6MzMxOlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzMyLVxcdHJldCA9IF9fYmNtX3BoeV9tb2RpZnlfcmRiKHBoeWRldiwgcmRiLCBtYXNrLCBzZXQpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjMzMzpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzM0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9NjYwPXN0YXRpYyBpbnQgX2JjbV9waHlfY2FibGVfdGVzdF9zdGFydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGlzX3JkYilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY3MS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2NzI6XFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy02NzMtXFx0aWYgKGlzX3JkYikge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjkwLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjY5MTpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjkyLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9NzQyPXN0YXRpYyBpbnQgX2JjbV9waHlfY2FibGVfdGVzdF9nZXRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy03NDgtXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6NzQ5OlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNzUwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNzk5LVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjgwMDpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtODAxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktcHRwLmM9OTIwPXN0cnVjdCBiY21fcHRwX3ByaXZhdGUgKmJjbV9wdHBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jLTkzMS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYzo5MzI6XFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktcHRwLmMtOTMzLVxcdGlmICghcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jLTk0MC1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYzo5NDE6XFx0Y2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXFx1MDAyNnByaXYtXFx1MDAzZXB0cF9pbmZvLCBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktcHRwLmMtOTQyLVxcdGlmIChJU19FUlIoY2xvY2spKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NDE0PXN0YXRpYyBpbnQgYmNtNTQxNDBfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDIzLVxcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQyNDpcXHRod21vbiA9IGRldm1faHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00MjUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiQkNNNTQxNDBcXFwiLCBwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYz00MzI9c3RhdGljIGludCBiY201NDE0MF9iYXNlX3JlYWRfcmRiKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZGIpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00MzUtXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM6NDM2OlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDM3LVxcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCBCQ001NDE0MF9CQVNFX0FERFIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00NDUtb3V0OlxcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQ0NjpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDQ3LVxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYz00NTA9c3RhdGljIGludCBiY201NDE0MF9iYXNlX3dyaXRlX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDU0LVxcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQ1NTpcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ1Ni1cXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgQkNNNTQxNDBfQkFTRV9BRERSLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDY0LW91dDpcXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo0NjU6XFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ2Ni1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NTA1PXN0YXRpYyBpbnQgYmNtNTQxNDBfZ2V0X2Jhc2VfYWRkcl9hbmRfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNToyOS4wODAxNjQzNzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcxOTMwNTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGcnVzdHJhdGluZyBIdW50IGZvciBhIFZpcnR1YWwgUEhZKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gYG1kaW8tbW9ja3VwYD8gRG9lc24ndCByaW5nIGEgYmVsbC4gVGhhdCdzIGEgbm9uLXN0YXJ0ZXIuIFNvLCB0aGUgY29yZSBxdWVzdGlvbiBpcywgaG93IG9uIGVhcnRoIGRvIEkgdGVzdCB0aGVzZSBQSFkgZHJpdmVycyB3aXRob3V0IGFjdHVhbCBoYXJkd2FyZT8gV2l0aG91dCBzb21lIHdheSB0byBzaW11bGF0ZSB0aGUgZW52aXJvbm1lbnQsIHRoZSBjb2RlJ3MgZXNzZW50aWFsbHkgZGVhZCBpbiB0aGUgd2F0ZXIsIHRyYXBwZWQgaW5zaWRlIGEgdmlydHVhbGl6ZWQgc3lzdGVtIGxpa2UgUUVNVS4gVW5yZWFjaGFibGUuXG5cblJpZ2h0LCBsZXQncyBiYWNrIHVwLiBDYW4gSSBldmVuICpyZWFjaCogc29tZXRoaW5nIGxpa2UgYHl0ODgyNF9wcm9iZWA/IE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGZvciBzb21lIHdheSB0byBmYWJyaWNhdGUgYSBQSFkgZGV2aWNlIGZyb20gdXNlcnNwYWNlLiBHZW5lcmljIG5ldGxpbms/IGlvY3RsPyBOb3BlLCBub3RoaW5nIHN0cmFpZ2h0Zm9yd2FyZCB0aGVyZSB0byBjcmVhdGUgYW4gTURJTyBidXMgb3IgYSBjb3JyZXNwb25kaW5nIFBIWSBkZXZpY2UuIEZydXN0cmF0aW5nLlxuXG5XYWl0IGEgc2VjLCB3aGF0IGFib3V0IGBtYWM4MDIxMV9od3NpbWA/IE5vLCB0aGF0J3MgV2lGaSwgbm90IHJlbGV2YW50IGhlcmUuIE9rYXksIGtlZXAgZGlnZ2luZy4uLiBXaGF0IGFib3V0IGBuZXRkZXZzaW1gPyBEb2VzICp0aGF0KiBvZmZlciBhbiBNRElPIGJ1cyBvciBhbnkgcmVsZXZhbnQgaG9va3M/IEl0J3MgYSBsb25nIHNob3QsIGJ1dCB3b3J0aCBjaGVja2luZy4gTGV0J3MgZGlnIGludG8gYGRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY2AgYW5kIHNlZSB3aGF0J3MgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MzI0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjM0Ljc5OTQ3NDE4MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1MTAzMTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6MzQuODc2OTkwNTExWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMzc0NjE3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTmV0d29ya2luZyBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHNpbXVsYXRlIG9yIGNyZWF0ZSBhIHZpcnR1YWwgZW52aXJvbm1lbnQgdG8gaW50ZXJhY3Qgd2l0aCBhIFBIWSwgYW5kIEknbSBydW5uaW5nIGludG8gc29tZSBsaW1pdGF0aW9ucy4gTGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBgZHVtbXlgIG5ldGRldj8gTm9wZSwgdGhhdCdzIG5vdCBnb2luZyB0byBjdXQgaXQuIGB2ZXRoYD8gTmFoLCBkb2Vzbid0IGdldCBtZSB3aGVyZSBJIG5lZWQgdG8gYmUuIGB0dW5gL2B0YXBgPyBTdGlsbCBuby4gSSB3YXMgbG9va2luZyBhdCBgZHNhX2xvb3BgIGFuZCB0aGUgcG90ZW50aWFsIGl0IG9mZmVyZWQsIHNwZWNpZmljYWxseSB0aGF0IGl0IGNyZWF0ZXMgYW4gTURJTyBidXMgYGZpeGVkLTBgIHdpdGggYSBmaXhlZCBQSFkgYXR0YWNoZWQsIGJ1dCB0aGF0J3MgYSBkZWFkIGVuZCDigJMgSSBjYW4ndCBzd2FwIG91dCB0aGF0IGBmaXhlZF9waHlgLiBJIGFsc28gY29uc2lkZXJlZCBgbWRpby1iaXRiYW5nYCwgd2hpY2ggaXMganVzdCBhIGxpYnJhcnkgZm9yIEdQSU8gYml0YmFuZ2luZyBNRElPLiBTaW1pbGFybHkgYG1kaW8tZ3Bpb2AgaXMgYSBkcml2ZXIgZm9yIE1ESU8gb3ZlciBHUElPLCBidXQgSSB3b3VsZCByZWFsbHkgbmVlZCB0byBpbnN0YW50aWF0ZSB0aGF0IGBtZGlvLWdwaW9gIGJ1cyB2aWEgYSBkZXZpY2UgdHJlZSBvdmVybGF5LCBvciBwbGF0Zm9ybSBkZXZpY2UuIFRoZW4gSSByZW1lbWJlcmVkLCBJJ20gdXNpbmcgU3l6a2FsbGVyLiBJdCBkb2VzIG5vdCBzdXBwb3J0IGluamVjdGluZyBkZXZpY2UgdHJlZSBvdmVybGF5cyBvbiB4ODYsIHdoaWNoIGlzIHdoYXQgSSdtIGN1cnJlbnRseSB1c2luZy5cblxuV2FpdCBhIHNlY29uZC4gU3l6a2FsbGVyICpkb2VzKiBzdXBwb3J0IGBzeXpfaW5pdF9uZXRfc29ja2V0YCBhbmQgb3RoZXIgdGhpbmdzLCBidXQgc3RpbGwgbm8gRFQgb3ZlcmxheXMuIFRoZW4gSSBoYWQgYSB0aG91Z2h0IOKAkyB3aGF0IGlmIHRoZSBQSFkgaXMgcHJvYmVkIHZpYSBJMkMgaW5zdGVhZD8gVGhhdCB3b3VsZCBvZmZlciBhbiBpbnRlcmVzdGluZyBhbHRlcm5hdGl2ZS4gU29tZSBQSFlzIGFyZSBpbmRlZWQgcHJvYmVkIHRoaXMgd2F5LiBIbW0uLi5kb2VzIGBtb3RvcmNvbW0uY2AgaGFwcGVuIHRvIHJlZ2lzdGVyIGFuIEkyQyBkcml2ZXI/IFRoYXQgbWlnaHQgYmUgYSB1c2VmdWwgYXZlbnVlIHRvIGV4cGxvcmUgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3OTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6NDEuMjE0NDU2ODAyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzYyNjU5MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaTJjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6NDEuMjkyMDk3MDgxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjAyMzg1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBSZWFjaGFiaWxpdHkgaW4gUUVNVSoqXG5cbk9rYXksIHNvIHRoZSB0cmFjZSBpbmRpY2F0ZXMgb25seSBhbiBNRElPIGRyaXZlciBpcyBiZWluZyByZWdpc3RlcmVkLiBUaGF0J3MgYSBzdGFydGluZyBwb2ludCwgYnV0IGl0J3Mgbm90IHRoZSB3aG9sZSBzdG9yeS4gV2FpdCBhIG1pbnV0ZS4uLiBXaGF0IGFib3V0IHRoZSBgbWRpby1iY20tdW5pbWFjLmNgIGRyaXZlcj8gQ291bGQgdGhhdCBiZSByZWxldmFudD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyAqYW55KiB2aWFibGUgcGF0aCB0byB0aGUgYHl0ODgyNF9wcm9iZWAgZnVuY3Rpb24gd2l0aGluIHRoZSBRRU1VIGVudmlyb25tZW50LiBJZiB0aGUgdGFyZ2V0IGhhcmR3YXJlIGlzbid0IHByZXNlbnQsIGFuZCB0aGVyZSdzIG5vIHN1aXRhYmxlIGVtdWxhdGlvbiwgdGhlbiBpdOKAmXMgcHJvYmFibHkgaW5hY2Nlc3NpYmxlLCByaWdodD9cblxuQWxyaWdodCwgbGV0J3MgYmFjayB1cCBhbmQgcmV0aGluayB0aGlzLiBJIG5lZWQgdG8gZXhoYXVzdCBvdGhlciBwb3NzaWJpbGl0aWVzLiBUaGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNgLiBDYW4gKnRoYXQqIGZ1bmN0aW9uIGJlIHJlYWNoZWQ/IEdvb2QsIGl0J3MgZXhwb3J0ZWQgdXNpbmcgYEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO2AuIFRoYXQncyBhIGdvb2Qgc2lnbiBiZWNhdXNlIGl0IGltcGxpZXMgdGhhdCBvdGhlciBtb2R1bGVzICpjb3VsZCogY2FsbCBpdC4gTXkgbmV4dCBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBhY3R1YWxseSBpbnZva2VkIGJ5IGFueXRoaW5nIGVsc2UgaW4gdGhlIHN5c3RlbT8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQyMiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTo0Ni40NTIzMzkyNDVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjQ4NjcxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9Nzc0PXN0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTc4MS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6NzgyOlxcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTc4My1cXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTgzOD1zdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTg0NS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6ODQ2OlxcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTg0Ny1cXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz05NzI9c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyMjQtXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjEyMjU6XFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjI2LVxcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTIzOS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTI0MDpcXHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjQxLVxcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTE0OTM9c3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNjc2LVxcdFxcdHJldHVybiByZXQ7XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE2Nzc6XFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNjc4LVxcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTY5MS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTY5MjpcXHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNjkzLVxcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYz0xNDA5PUVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQxMS0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jOjE0MTI6ICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MTMtICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MjAtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYzoxNDIxOmludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQ2My19XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYzoxNDY0OkVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQ2NS1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9MjM0MT1pbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpO1xcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjM0MjppbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTtcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIzNDMtaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjQ4Ljc3NzIxMTA3NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjAyNTY1NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIFJlYWNoYWJpbGl0eSBvZiBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAqKlxuXG5Pa2F5LCBzbyB0aGUgZnVuY3Rpb24gYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgIGlzIG9ubHkgY2FsbGVkIHdpdGhpbiBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYC4gVGhhdCdzIGEgcHJldHR5IGNsZWFyIGRlcGVuZGVuY3kuIFNvLCBpZiBgbW90b3Jjb21tLmNgIGlzIGVmZmVjdGl2ZWx5IGRlYWQgY29kZSwgdGhlbiBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgaXMgdG9vLiBCdXQsIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlLiBJcyB0aGVyZSAqYW55KiBvdGhlciBwb3NzaWJsZSBjYWxsIHBhdGggdG8gYHl0ODgyNF9wcm9iZWAsIHdoaWNoIGV2ZW50dWFsbHkgbGVhZHMgdG8gdGhlIHRhcmdldD8gSSdtIHRoaW5raW5nIGFib3V0IGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCB3b3JrYXJvdW5kcy5cblxuSGVyZSdzIGEgdGhvdWdodDogd2hhdCBpZiBzb21lb25lIHdlcmUgY2xldmVyIGVub3VnaCB0byBpbnN0YW50aWF0ZSBhICp2aXJ0dWFsKiBNRElPIGJ1cz8gSXMgdGhlcmUgYSBrZXJuZWwgZHJpdmVyIG91dCB0aGVyZSB0aGF0IGFsbG93cyBmb3IgdGhlIGNyZWF0aW9uIG9mIGFuIE1ESU8gYnVzIGFuZCB0aGVuIGFsbG93cyB5b3UgdG8gYXR0YWNoICphbnkqIFBIWSB0byBpdD8gVGhpcyB3b3VsZCBieXBhc3MgdGhlIG5vcm1hbCBwcm9iaW5nIG1lY2hhbmlzbXMuIEkgc2hvdWxkIHJlYWxseSBnbyBiYWNrIGFuZCByZS1leGFtaW5lIGBkcml2ZXJzL25ldC9waHkvbWRpb19idXMuY2AuIEkgbmVlZCB0byBydWxlIG91dCB0aGlzIHBvc3NpYmlsaXR5LiBJdCBjb3VsZCBiZSBjcml0aWNhbCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVhY2hhYmxlIGZyb20gYSBkaWZmZXJlbnQgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjAyMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTo1My4zNzk3NzkyMjhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjIyOTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEwMTggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9NjA3PXN0YXRpYyBpbnQgYmNtX3NmMl9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtNjgzLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6Njg0OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4NS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM9MTg3PXN0YXRpYyBpbnQgZ3N3aXBfbWRpbyhzdHJ1Y3QgZ3N3aXBfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTIxMy1cXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYzoyMTQ6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0zMjE9c3RhdGljIGludCBrc3o5NDc3X3Bjc19jcmVhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0MS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzozNDI6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cXHUwMDNlZGV2LCBidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0My1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MjMyMT1pbnQga3N6X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTItXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MjM5MzpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZHMtXFx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMzk0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM9Njg1PXN0YXRpYyBpbnQgbGFuOTM3eF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1NS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jOjc1NjpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZHMtXFx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTI0MDk9bXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0NDQtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI0NDU6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNDQ2LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYz0yNDI9c3RhdGljIGludCBtdDc2Mjhfc2V0dXBfaW50ZXJuYWxfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtMjYxLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzoyNjI6XFx0cmV0dXJuIGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jLTI2My19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz0zODM0PXN0YXRpYyBpbnQgbXY4OGU2eHh4X21kaW9fcmVnaXN0ZXIoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4Ny1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzozODg4OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4OS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjc9c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5Mi1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyOTM6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTQtXFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0xNDk9c3RhdGljIGludCBuZXRjX3BvcnRfY3JlYXRlX2VtZGlvX2J1cyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE3OS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoxODA6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0xODEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jPTk1Nz1zdGF0aWMgaW50IHZzYzk5NTlfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxMy1cXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoxMDE0OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTEwMTUtXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYz04Nzg9c3RhdGljIGludCB2c2M5OTUzX21kaW9fYnVzX2FsbG9jKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTAzLVxcdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM6OTA0OlxcdHJjID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jLTkwNS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jPTM1Nz1zdGF0aWMgaW50IGFyOTMzMV9zd19tYnVzX2luaXQoc3RydWN0IGFyOTMzMV9zd19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODEtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzozODI6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4My1cXHRvZl9ub2RlX3B1dChtbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTQ3PXFjYThrX21kaW9fcmVnaXN0ZXIoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODYtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTg3OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpbyk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTg4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc0PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtOTktXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEwMDpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMDEtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYz0xMTE3PXN0YXRpYyBpbnQgYTVwc3dfcHJvYmVfbWRpbyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDMtXFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzoxMTQ0OlxcdHJldHVybiBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE0NS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg9MzA3PXZvaWQgc2phMTEwNV9mcmFtZV9tZW1vcnlfcGFydGl0aW9uaW5nKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMwOS0vKiBGcm9tIHNqYTExMDVfbWRpby5jICovXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oOjMxMDppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMxMS12b2lkIHNqYTExMDVfbWRpb2J1c191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0zMDI2PXN0YXRpYyBpbnQgc2phMTEwNV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY3LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjMwNjg6XFx0cmMgPSBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjktXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MjU4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX2Jhc2VfdHhfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4Ny1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzoyODg6XFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4OS1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTMxMj1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3QxX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zNDMtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6MzQ0OlxcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zNDUtXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0zNjg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfcGNzX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zOTUtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6Mzk2OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5Ny1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTQzOT1zdGF0aWMgdm9pZCBzamExMTA1X21kaW9idXNfcGNzX3VucmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ1OC1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzo0NTk6aW50IHNqYTExMDVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz01OTU9eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTItXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjYxMzpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTQtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz03MjY9eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy03NDMtXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjc0NDpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy03NDUtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jPTQ1OT1zdGF0aWMgaW50IGF4X21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy00NzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM6NDc5OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXgtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ4MC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jPTEzMjE9c3RhdGljIGludCBvd2xfZW1hY19tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzQ1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYzoxMzQ2OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXFx1MDAzZW1paSwgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jPTUwOT1zdGF0aWMgaW50IGFkaW4xMTEwX3JlZ2lzdGVyX21kaW9idXMoc3RydWN0IGFkaW4xMTEwX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYy01MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM6NTMwOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUzMS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmM9NjE3PXN0YXRpYyBpbnQgYWRpbjExNDBfbWRpb19yZWdpc3RlcihzdHJ1Y3QgYWRpbjExNDBfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTYzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYzo2Mzc6XFx0cmV0dXJuIGRldm1fbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2c3BpZGV2LVxcdTAwM2VkZXYsIHByaXYtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTYzOC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jPTEyOTA9c3RhdGljIGludCBncmV0aF9tZGlvX2luaXQoc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmM6MTMwNzpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGdyZXRoLVxcdTAwM2VtZGlvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDgtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM9MzkzMT1zdGF0aWMgaW50IGV0MTMxeF9wY2lfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jOjQwMjc6XFx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjgtXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jPTEyMT1zdGF0aWMgaW50IGFsdGVyYV90c2VfbWRpb19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM6MTU4OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTU5LVxcdGlmIChyZXQgIT0gMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYz0xMDYxPXN0YXRpYyBpbnQgYXUxMDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jLTEyMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYzoxMjIyOlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXVwLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jLTEyMjMtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYz0zNDI4PXN0YXRpYyBpbnQgeGdiZV9waHlfaW5pdChzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MTctXFx0c25wcmludGYobWlpLVxcdTAwM2VpZCwgc2l6ZW9mKG1paS1cXHUwMDNlaWQpLCBcXFwiJXNcXFwiLCBkZXZfbmFtZShwZGF0YS1cXHUwMDNlZGV2KSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzozNzE4OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWlpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MTktXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcyMDpcXHRcXHRkZXZfZXJyKHBkYXRhLVxcdTAwM2VkZXYsIFxcXCJtZGlvYnVzX3JlZ2lzdGVyIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzIxLVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jPTk4PWludCB4Z2VfbWRpb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTExOC1cXHRtZGlvX2J1cy1cXHUwMDNlcGh5X21hc2sgPSAweDE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYzoxMTk6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMjAtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM9ODM3PWludCB4Z2VuZV9lbmV0X3BoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo4ODg6c3RhdGljIGludCB4Z2VuZV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTg4OS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBtaWlfYnVzICptZGlvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MTM6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxNC1cXHRcXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIxLVxcdC8qIFJlZ2lzdGVyIHRoZSBNRElPIGJ1cyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTIyOlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM9OTM5PWludCB4Z2VuZV9lbmV0X21kaW9fY29uZmlnKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTU4OlxcdHJldCA9IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIocGRhdGEsIG1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTk1OS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM9MTMxPWludCBhcmNfbWRpb19wcm9iZShzdHJ1Y3QgYXJjX2VtYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jOjE3MzpcXHRlcnJvciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBtZGlvX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzQtXFx0b2Zfbm9kZV9wdXQobWRpb19ub2RlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jPTk2Nj1zdGF0aWMgaW50IGF4ODg3OTZjX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jOjEwMTE6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgYXhfbG9jYWwtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwMTItXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM9Njg3PXN0YXRpYyBpbnQgYWc3MXh4X21kaW9fcHJvYmUoc3RydWN0IGFnNzF4eCAqYWcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyNy1cXHRtbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXFxcIm1kaW9cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jOjcyODpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtaWlfYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNzI5LVxcdG9mX25vZGVfcHV0KG1ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYz0yMjM0PXN0YXRpYyBpbnQgYjQ0X3JlZ2lzdGVyX3BoeV9vbmUoc3RydWN0IGI0NCAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjU5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jOjIyNjA6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjYxLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jPTE3MTM9c3RhdGljIGludCBiY21fZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYzoxODMwOlxcdFxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYy0xODMxLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jPTIxMT1zdHJ1Y3QgbWlpX2J1cyAqYmNtYV9tZGlvX21paV9yZWdpc3RlcihzdHJ1Y3QgYmdtYWMgKmJnbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmMtMjM1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jOjIzNjpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzctXFx0b2Zfbm9kZV9wdXQobnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9MTkzPWludCBiY21nZW5ldF9taWlfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgaW5pdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzMy1cXHRcXHRwaHlfbmFtZSA9IFxcXCJleHRlcm5hbCBSdk1JSVxcXCI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MjM0OlxcdFxcdC8qIG9mX21kaW9idXNfcmVnaXN0ZXIgdG9vayBjYXJlIG9mIHJlYWRpbmcgdGhlICdtYXgtc3BlZWQnXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjM1LVxcdFxcdCAqIFBIWSBwcm9wZXJ0eSBmb3IgdXMsIGVmZmVjdGl2ZWx5IGxpbWl0aW5nIHRoZSBQSFkgc3VwcG9ydGVkXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM9MjE1Nz1zdGF0aWMgaW50IHNibWFjX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxkZXYsIGxvbmcgbG9uZyBiYXNlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jLTIyMjctXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jOjIyMjg6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihzYy1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jLTIyMjktXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM9MTUwNT1zdGF0aWMgaW50IHRnM19tZGlvX2luaXQoc3RydWN0IHRnMyAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYy0xNTU3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jOjE1NTg6XFx0aSA9IG1kaW9idXNfcmVnaXN0ZXIodHAtXFx1MDAzZW1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYy0xNTU5LVxcdGlmIChpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTEwMjM9c3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDk2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTA5NzpzdGF0aWMgaW50IG1hY2JfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWFjYiAqYnAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWRpb19ucClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTA0LVxcdGlmIChtZGlvX25wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTEwNTpcXHRcXHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihicC1cXHUwMDNlbWlpX2J1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTA2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTExOTpcXHRcXHRcXHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihicC1cXHUwMDNlbWlpX2J1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMC1cXHRcXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTEyMjpcXHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihicC1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTEyNT1zdGF0aWMgaW50IG1hY2JfbWlpX2luaXQoc3RydWN0IG1hY2IgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTE1OTpcXHRlcnIgPSBtYWNiX21kaW9idXNfcmVnaXN0ZXIoYnAsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE2MC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYz0xMTA3PXN0YXRpYyBpbnQgZG05MDUxX21kaW9fcmVnaXN0ZXIoc3RydWN0IGJvYXJkX2luZm8gKmRiKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYy0xMTI0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM6MTEyNTpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBkYi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYy0xMTI2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM9MjQyMz1zdGF0aWMgaW50IHRzbmVwX21kaW9faW5pdChzdHJ1Y3QgdHNuZXBfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0yNDU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYzoyNDU1OlxcdHJldHZhbCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cXHUwMDNlbWRpb2J1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0yNDU2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYz0xMDI0PXN0YXRpYyBpbnQgZXRob2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jOjEyMDg6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VtZGlvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jLTEyMDktXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz0xNzM0PXN0YXRpYyBpbnQgZnRnbWFjMTAwX3NldHVwX21kaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE3NzA6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZWRldiwgcHJpdi1cXHUwMDNlbWlpX2J1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xNzcxLVxcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmM9MzY9c3RhdGljIGludCBlbmV0Y19wY2lfbWRpb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jLTkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jOjkxOlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBkZXYtXFx1MDAzZW9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jLTkyLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MjY2PXN0YXRpYyBpbnQgZW5ldGNfbWRpb19wcm9iZShzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTI5Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MjkzOlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTI5NC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTMwOD1zdGF0aWMgaW50IGVuZXRjX2ltZGlvX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTM0Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MzQzOlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQ0LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTMwNDI9c3RhdGljIGludCBmZWNfZW5ldF9taWlfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzE2MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzozMTYxOlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZmVwLVxcdTAwM2VtaWlfYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYyLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM9NjU9c3RhdGljIGludCBtcGM1Mnh4X2ZlY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jLTEwNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM6MTA2OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jLTEwNy1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYz0xNDk9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE3NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jOjE3NjpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYy0xNzctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYz05Nz1zdGF0aWMgaW50IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jOjE2NzpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM9NDA5PXN0YXRpYyBpbnQgZnNsX3BxX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTQ5My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYzo0OTQ6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDk1LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM9MzcxPXN0YXRpYyBpbnQgeGdtYWNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjYtXFx0aWYgKGlzX29mX25vZGUoZndub2RlKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jOjQyNzpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgdG9fb2Zfbm9kZShmd25vZGUpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQyOC1cXHRlbHNlIGlmIChpc19hY3BpX25vZGUoZndub2RlKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jOjQyOTpcXHRcXHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBmd25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDMwLVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjY2PWludCBoYmdfbWRpb19pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjkyOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIG1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5My1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jPTEwOTQ9c3RhdGljIGludCBoaXg1aGQyX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jLTExODUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jOjExODY6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jPTEyMz1pbnQgaGNsZ2VfbWFjX21kaW9fY29uZmlnKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTE1NC1cXHRtZGlvX2J1cy1cXHUwMDNlcGh5X21hc2sgPSB+KDFVIFxcdTAwM2NcXHUwMDNjIG1hYy1cXHUwMDNlcGh5X2FkZHIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmM6MTU1OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU2LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jPTQ5NT1zdGF0aWMgaW50IGhuc19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01ODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTg0OlxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgcGRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU4NS1cXHR9IGVsc2UgaWYgKGlzX2FjcGlfbm9kZShwZGV2LVxcdTAwM2VkZXYuZndub2RlKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTkyLVxcdFxcdC8qIFJlZ2lzdGVyIHRoZSBNRElPIGJ1cyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jOjU5MzpcXHRcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5NC1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jPTI1NjA9c3RhdGljIGludCBlbWFjX2R0X21kaW9fcHJvYmUoc3RydWN0IGVtYWNfaW5zdGFuY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg0LVxcdHNucHJpbnRmKGJ1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcIiVzXFxcIiwgZGV2LVxcdTAwM2VvZmRldi1cXHUwMDNlbmFtZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jOjI1ODU6XFx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKFxcdTAwMjZkZXYtXFx1MDAzZW9mZGV2LVxcdTAwM2VkZXYsIGJ1cywgbWlpX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMtMjU4Ni1cXHRpZiAocmVzKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYz0xMDI2PWludCBpeGdiZV9taWlfYnVzX2luaXQoc3RydWN0IGl4Z2JlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwODgtXFx0YWRhcHRlci1cXHUwMDNlbWlpX2J1cyA9IGJ1cztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoxMDg5OlxcdHJldHVybiBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMTA5MC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jPTM4NT1sdHFfZXRvcF9tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDAyLVxcdFxcdCBwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VuYW1lLCBwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VpZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYzo0MDM6XFx0aWYgKG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWlpX2J1cykpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTQwNC1cXHRcXHRlcnIgPSAtRU5YSU87XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jPTI4Mz1zdGF0aWMgaW50IG9yaW9uX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzgxLVxcdC8qIEZvciB0aGUgcGxhdGZvcm1zIG5vdCBzdXBwb3J0aW5nIERUL0FDUEkgZmFsbC1iYWNrXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODI6XFx0ICogdG8gbWRpb2J1c19yZWdpc3RlciB2aWEgb2ZfbWRpb2J1c19yZWdpc3Rlci5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4My1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4NC1cXHRpZiAoaXNfYWNwaV9ub2RlKHBkZXYtXFx1MDAzZWRldi5md25vZGUpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6Mzg1OlxcdFxcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXFx1MDAzZWRldi5md25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg2LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4NzpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg4LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYz0xMzg3PXN0YXRpYyBpbnQgcHhhMTY4X2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmMtMTUwNC1cXHRwZXAtXFx1MDAzZXNtaV9idXMtXFx1MDAzZXBoeV9tYXNrID0gMHhmZmZmZmZmZjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYzoxNTA1OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIocGVwLVxcdTAwM2VzbWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy0xNTA2LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTk5OD1zdGF0aWMgaW50IG10a19tZGlvX2luaXQoc3RydWN0IG10a19ldGggKmV0aClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMTAzNy1cXHRkZXZfZGJnKGV0aC1cXHUwMDNlZGV2LCBcXFwiTURDIGlzIHJ1bm5pbmcgb24gJWQgSHpcXFxcblxcXCIsIE1EQ19NQVhfRlJFUSAvIGV0aC1cXHUwMDNlbWRjX2RpdmlkZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM6MTAzODpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGV0aC1cXHUwMDNlbWlpX2J1cywgbWlpX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM9MTQyMj1zdGF0aWMgaW50IG10a19zdGFyX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYy0xNDQ3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYzoxNDQ4OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXFx1MDAzZW1paSwgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmM9Mjg3PWludCBtbHhiZl9naWdlX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IG1seGJmX2dpZ2UgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jOjMzMzpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmMtMzM0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21kaW8uYz0yNTM9aW50IGZibmljX21kaW9idXNfY3JlYXRlKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jLTI3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21kaW8uYzoyNzM6XFx0ZXJyID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGZiZC1cXHUwMDNlZGV2LCBidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jLTI3NC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jPTEwMzY9c3RhdGljIGludCBrczg4NTFfcmVnaXN0ZXJfbWRpb2J1cyhzdHJ1Y3Qga3M4ODUxX25ldCAqa3MsIHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jOjEwNTM6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNTQtXFx0aWYgKHJldClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jOjEwNTU6XFx0XFx0Z290byBlcnJfbWRpb2J1c19yZWdpc3RlcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYzoxMDYxOmVycl9tZGlvYnVzX3JlZ2lzdGVyOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA2Mi1cXHRtZGlvYnVzX2ZyZWUobWlpX2J1cyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM9MTM3OT1zdGF0aWMgaW50IGxhbjc0M3hfaHdfcmVzZXRfcGh5KHN0cnVjdCBsYW43NDN4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmMtMTM4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM6MTM4MzpcXHQvKiBPbmx5IGNhbGxlZCB3aXRoIGluIHByb2JlLCBhbmQgYmVmb3JlIG1kaW9idXNfcmVnaXN0ZXIgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmMtMTM4NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYz0zNjI4PXN0YXRpYyBpbnQgbGFuNzQzeF9tZGlvYnVzX2luaXQoc3RydWN0IGxhbjc0M3hfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zNjcxLVxcdC8qIHJlZ2lzdGVyIG1kaW9idXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM6MzY3MjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zNjczLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmkvbml4Z2UuYz0xMjEyPXN0YXRpYyBpbnQgbml4Z2VfbWRpb19zZXR1cChzdHJ1Y3Qgbml4Z2VfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25pL25peGdlLmMtMTIzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uaS9uaXhnZS5jOjEyMzE6XFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmkvbml4Z2UuYy0xMjMyLX1cXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTo1My41OTYwMTQ1OTVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwMDkyOTE3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTURJTyBCdXMgQ29udW5kcnVtIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHRyaWdnZXIgdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uLCB3aGljaCBpcyBhIFBIWSBkcml2ZXIuIFRoZSBwcm9ibGVtIGlzIHRoYXQgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cCBsaWtlIFFFTVUsIHRoZSB1c3VhbCBtZXRob2RzIG9mIGluamVjdGluZyBwbGF0Zm9ybSBvciBQQ0kgZGV2aWNlcyB0aGF0IHdvdWxkIHJlZ2lzdGVyIGFuIE1ESU8gYnVzIGFyZSBvZmYgdGhlIHRhYmxlIGZvciBzeXprYWxsZXIuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzIGBkc2FfbG9vcGAsIHNpbmNlIGl0IGNyZWF0ZXMgYSB2aXJ0dWFsIE1ESU8gYnVzIChgZml4ZWQtMGApIHdpdGggYSBmaXhlZCBQSFkuICBCdXQgdGhhdCdzIG5vdCB3aGF0IEkgbmVlZC4gSSB3ZW50IHRocm91Z2ggb3RoZXIgdmlydHVhbCBNRElPIGJ1cyBjYW5kaWRhdGVzIGxpa2UgYG1kaW8tbW9ja3VwYCwgYG1kaW8tZHVtbXlgLCBidXQgdGhleSdyZSBub3QgaXQuIFRoZSByb290IG9mIHRoZSBwcm9ibGVtIGlzIHRoYXQgaWYgdGhlIFBIWSBkcml2ZXIgaXMgY29tcGlsZWQgaW4sIGJ1dCB0aGVyZSdzIG5vIGhhcmR3YXJlIG9yIGVtdWxhdGlvbiwgaXQncyB1bnJlYWNoYWJsZSBpbiBhIFFFTVUtbGlrZSBlbnZpcm9ubWVudC5cblxuSSB0aGVuIGRpZCBhIHN3ZWVwIG9mIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnPigJRgbWFjODAyMTFfaHdzaW1gLCBgbmV0ZGV2c2ltYCwgYGR1bW15YCwgYHZldGhgLCBgdHVuYC9gdGFwYCwgYW5kIGV2ZW4gdmFyaW91cyBFdGhlcm5ldCBkcml2ZXJzIGxpa2UgYGZlY2AsIGBlMTAwMGAsIGBydGw4MTM5YCwgYHZpcnRpby1uZXRgLCBgZTEwMDBlYCwgYW5kIHNvIG9uLiAgVGhlIGhvcGUgd2FzIHRoYXQgb25lIG9mIHRoZXNlIG1pZ2h0IGhhdmUgYSBmbGV4aWJsZSBNRElPIGJ1cywgYnV0IHRoZSBlbXVsYXRlZCBoYXJkd2FyZSBpbiBRRU1VIGlzIHZlcnkgc3BlY2lmaWMuICBJIGNhbid0IGp1c3QgcGx1ZyBpbiBhbiBhcmJpdHJhcnkgUEhZLlxuXG5JIGNvbnNpZGVyZWQgYG1kaW8tYml0YmFuZ2AgKGEgbGlicmFyeSksIGFuZCB0aGVuIGBtZGlvLWdwaW9gLCBgbWRpby1tdXhgLCBhbmQgYG1kaW8tcmVnbWFwYCAoZHJpdmVycyksIGJ1dCB0aGVzZSBhcmUgbm90IHRoZSByb3V0ZSBJIHNob3VsZCB0YWtlLlxuXG5UaGUga2V5IGlzIHRoYXQgdGhlIGB5dDg4MjRfcHJvYmVgIHJlcXVpcmVzIGEgc3BlY2lmaWMgUEhZIElEIChgMHg0ZjUxZThiOGApIHRvIGJlIHByb2JlZCwgYW5kIHRoZXJlIGlzIG5vIHdheSB0byBpbnN0YW50aWF0ZSBhIFBIWSBkcml2ZXIgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIEkgYWxyZWFkeSBjaGVja2VkLlxuXG5UaGUgbmV4dCB0aG91Z2h0IHdhcyBgU0lPQ1NNSUlSRUdgIGlvY3RsLiBJZiBJIGhhZCBhIG5ldGRldmljZSB3aXRoIGEgUEhZLCBJIGNvdWxkIHdyaXRlIHRvIGl0cyBNSUkgcmVnaXN0ZXJzLiBUaGUgY3J1eCBvZiB0aGlzIGlzIHRoYXQgdGhlIFBIWSBpcyBtYXRjaGVkIHRvIGl0cyBkcml2ZXIgYnkgdGhlIElEIHJlYWQgZHVyaW5nIHRoZSBwcm9iZSwgYW5kIEkgY2FuJ3QgKmNoYW5nZSogdGhlIGF0dGFjaGVkIFBIWSBJRCwgYmVjYXVzZSBpdCB3b3VsZCBwcmV2ZW50IHRoZSBkcml2ZXIgZnJvbSBiZWluZyBwcm9iZWQuXG5cblRoZSBuZXh0IHRoaW5nIHRvIHRyeSBpczogY291bGQgSSB3cml0ZSB0byB0aGUgUEhZIElEIHJlZ2lzdGVycyAoTUlJX1BIWVNJRDEgYW5kIE1JSV9QSFlTSUQyKSB1c2luZyBgU0lPQ1NNSUlSRUdgIGFuZCB0aGVuICpmb3JjZSogYSByZS1wcm9iZT8gVGhlIGRldmljZSBoYXMgdG8gYmUgdW5ib3VuZCBhbmQgdGhlbiBib3VuZCBhZ2Fpbi4gVGhlIFBIWSBkZXZpY2UgaXMgYSBjaGlsZCBvZiB0aGUgTURJTyBidXMuIENhbiBJIHVuYmluZCB0aGUgUEhZIGRyaXZlciB2aWEgc3lzZnM6IGBlY2hvIFx1MDAzY3BoeV9kZXZpY2VfbmFtZVx1MDAzZSBcdTAwM2UgL3N5cy9idXMvbWRpb19idXMvZHJpdmVycy9cdTAwM2Nkcml2ZXJfbmFtZVx1MDAzZS91bmJpbmRgIGFuZCB0aGVuIGJpbmQgaXQgdG8gYW5vdGhlciBkcml2ZXI/IElmIEkgY2hhbmdlIHRoZSBQSFkgSUQgcmVnaXN0ZXJzLCBjYW4gSSB0cmlnZ2VyIGEgcmUtc2NhbiBvZiB0aGUgTURJTyBidXM/IEkgbmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgIHRvIHNlZSBpZiB0aGF0J3MgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MzcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjA1LjYwNTMxMDY2NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzODMzNzY3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXNjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjA1LjkxOTE1MjUyMVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDE2OTU1NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUmVmbGVjdGluZyBvbiBNRElPIERldmljZSBEaXNjb3ZlcnkqKlxuXG5IbW0sIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgTURJTyBidXMgZGV2aWNlIGRpc2NvdmVyeSwgYW5kIHRoZSBjdXJyZW50IGFwcHJvYWNoIGlzbid0IHF1aXRlIGN1dHRpbmcgaXQuIEknbSB3b25kZXJpbmfigKYgY291bGQgYSBzaW1wbGUgYGVjaG8gMSBcdTAwM2UgL3N5cy9idXMvbWRpb19idXMvZGV2aWNlcy8uLi4vcmVzY2FuYCBjb21tYW5kIGJlIGEgdmlhYmxlIHNvbHV0aW9uPyBJdCdzIGEgY2xhc3NpYyBhcHByb2FjaCwgb2Z0ZW4gb3Zlcmxvb2tlZCwgYnV0IHBvdGVudGlhbGx5IHF1aXRlIGVmZmVjdGl2ZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBtaWdodCBvZmZlciBhIGNsZWFuIGFuZCwgY3J1Y2lhbGx5LCBzdHJhaWdodGZvcndhcmQgd2F5IHRvIHRyaWdnZXIgYSByZS1zY2FuIG9mIHRoZSBNRElPIGJ1cyB3aXRob3V0IGRpdmluZyBkZWVwIGludG8gZHJpdmVyLXNwZWNpZmljIHF1aXJrcy4gSXQncyBvZnRlbiB0aGUgY2FzZSB0aGF0IHN1Y2ggYSBkaXJlY3QgbWV0aG9kIHByb3ZlcyBzdXJwcmlzaW5nbHkgcmVsaWFibGUuIEl0J3MgZWxlZ2FudCwgaWYgaXQgd29ya3MuIExldCBtZSBqb3QgZG93biBzb21lIG5vdGVzIHRvIHNlZSBpZiB0aGlzIHNvbHZlcyB0aGUgcHJvYmxlbSwgb3Igd2hldGhlciB0aGlzIGNvdWxkIGNhdXNlIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcwMDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjowOS45MzYxMTMwMloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMDQ0NjQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERVZJQ0VfQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19idXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MTAuMDQ2MTkwMzI4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTEyODU5OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJObyByZXNjYW4gYXR0cmlidXRlPyBJbnRlcmVzdGluZy4uLlwiIEJ1dCB0aGVuIEkgaW1tZWRpYXRlbHkganVtcGVkIHRvIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXI6IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBQSFkgSURzLCB3ZSdyZSB0YWxraW5nIGhhcmR3YXJlLiBBbmQgaW4gbXkgZXhwZXJpZW5jZSwgdGhlIGBNSUlfUEhZU0lEMWAgYW5kIGBNSUlfUEhZU0lEMmAgcmVnaXN0ZXJzIGFyZSBhbG1vc3QgYWx3YXlzIHJlYWQtb25seSBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwuIFdyaXRpbmcgdG8gdGhlbSwgZXZlbiB0aHJvdWdoIGBTSU9DU01JSVJFR2AsIGlzIGxpa2VseSBnb2luZyB0byBiZSBpZ25vcmVkIGJ5IHRoZSBoYXJkd2FyZS4gU28sIGZvcmdldCBhYm91dCBjaGFuZ2luZyB0aGUgUEhZIElEIG9mIGFuIGVtdWxhdGVkIFBIWSBpbiBRRU1VLiBUaGF0J3MgYSBub24tc3RhcnRlci5cblxuV2hpY2ggbWVhbnMgd2UgY2FuJ3QgbWFrZSB0aGUgTURJTyBidXMgKnNlZSogdGhlIFBIWSBJRCBgMHg0ZjUxZThiOGAuIEFuZCB0aGF0LCBvZiBjb3Vyc2UsIG1lYW5zIGB5dDg4MjRfcHJvYmVgIHdpbGwgbmV2ZXIgZ2V0IGNhbGxlZC4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIEVuZCBvZiBzdG9yeSwgcmlnaHQ/XG5cbkJ1dCwgd2FpdC4uLiBpcyB0aGVyZSAqYW55KiBvdGhlciB3YXk/IERldmljZSB0cmVlIGNvbXBhdGlibGUgc3RyaW5nPyBMZXQgbWUgY2hlY2sgdGhlIGRyaXZlci4uLiBOb3BlLCB0aGUgYG1vdG9yY29tbV9waHlfZHJ2c2AgbGlzdCAqb25seSogaGFzIGBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNClgLiBObyBgb2ZfbWF0Y2hfdGFibGVgIHRvIGZhbGwgYmFjayBvbi4gSXQgKmhhcyogdG8gYmUgbWF0Y2hlZCBieSBQSFkgSUQuIFdoaWNoIGxlYWRzIG1lIGJhY2sgdG8gc3F1YXJlIG9uZS5cblxuQWxyaWdodCwgbGV0J3MgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgYWdhaW46IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuLi5cIiBCaW5nby5cblxuVGhpcyBpcyBhIFBIWSBkcml2ZXIgZm9yIGEgc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUgKE1vdG9yY29tbSBZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0IFBIWSkuIEl0J3MgKmRlc2lnbmVkKiB0byBiZSBwcm9iZWQgb24gYW4gTURJTyBidXMgd2l0aCB0aGF0ICpleGFjdCogUEhZIElELiBUaGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBQSFkgaW4gUUVNVSwgdGhlcmUncyBubyB3YXkgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFBIWSBkcml2ZXJzIGZyb20gdXNlcnNwYWNlLi4uIHNvIHRoZXJlJ3Mgc2ltcGx5ICpubyB3YXkqIHRoaXMgY29kZSBpcyBnb2luZyB0byBydW4gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLlxuXG5Pa2F5LCBqdXN0IHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLCBsZXQgbWUgc2NvdXIgdGhlIGtlcm5lbCBjb2RlLiBDb3VsZCBJIGhhdmUgbWlzc2VkIHNvbWUgb2JzY3VyZSBgbWRpb2Agc29mdHdhcmUgZW11bGF0aW9uPyBJJ2xsIGNoZWNrIGBkcml2ZXJzL25ldC9kdW1teS5jYCwgYGRyaXZlcnMvbmV0L3R1bi5jYCwgYGRyaXZlcnMvbmV0L3ZldGguY2AsIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AgYW5kIGBkcml2ZXJzL25ldC93aXJlZ3VhcmRgLi4uIE5vcGUuIE5vdGhpbmcgdGhlcmUuXG5cbkhvdyBhYm91dCBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgPyBObyBtYXRjaCB3aGVuIEkgc2VhcmNoIGZvciBgbWRpby4qbW9ja3VwYC4gTGV0J3MgY2hlY2sgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWZhdWx0LWluamVjdC5jYC4uLiBOb3BlLiBgZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jYCB0aGVuPyBBaCwgaXQgb25seSByZWdpc3RlcnMgYSBmaXhlZCBQSFkgd2l0aCBJRCAwLiBDYW4gZXZlbiAqd2UqIGNoYW5nZSB0aGF0IElEPyBQcm9iYWJseSBub3QgaW4gYSBtZWFuaW5nZnVsIHdheSB0byBtYWtlIGl0IHJlbGV2YW50IGhlcmUuXG5cbkJvdHRvbSBsaW5lPyBUaGlzIGNvZGUgaXMgZGVhZCBpbiB0aGUgd2F0ZXIgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50LiAqKldvcnRoRnV6emluZz1mYWxzZS4qKlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzI2NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjoyMC4xNTkwNTMxMzFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzQwOTQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaXhlZF9waHlfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz0xMTg9c3RhdGljIGludCBmaXhlZF9waHlfZ2V0X2ZyZWVfYWRkcih2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMC1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTMxOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXR1cyxcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTMyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTcyLX1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTczOkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3NC1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTc1OnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZClcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODEtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4MjpcXHRyZXR1cm4gZml4ZWRfcGh5X3JlZ2lzdGVyKFxcdTAwMjZzdGF0dXMsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODMtfVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODQ6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjoyMC4yNjY0Njc2MVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM0NDYxODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHBlcnNwZWN0aXZlIG9uIHRoYXQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgYGZpeGVkX3BoeV9yZWdpc3RlcmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gTXkgaW1tZWRpYXRlIGZvY3VzLCBhcyBJJ20gc3VyZSB5b3Uga25vdywgaXMgb24gdGhhdCBgZml4ZWRfcGh5X3JlZ2lzdGVyYC4gSXTigJlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGlzbid0IGl0PyBUaGF0IHJlZ2lzdGVyIGlzIGEga2V5IGVsZW1lbnQsIGFuZCB0aGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCB0aGUgbW9yZSBJIHJlYWxpemUgdGhhdCB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGlzIHBhcmFtb3VudC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqcHJlY2lzZWx5KiB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLiBJIGtub3cgd2hlcmUgaXQgc2l0cywgd2hhdCBpdCdzIGNvbm5lY3RlZCB0bywgYnV0IHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBhcmUgYWx3YXlzIHNvbWV0aGluZyBJIHdhbnQgdG8ga2VlcCB0b3Agb2YgbWluZC4gVGltZSB0byByZWFsbHkgZGlnIGluIGFuZCBjb25zaWRlciBob3cgaXQncyBiZWluZyB1c2VkLiBOb3csIGlmIEknbSBub3QgY2FyZWZ1bCwgdGhpcyBjb3VsZCBiZSBhIHJhYmJpdCBob2xlLCBidXQgaXQncyBhbiBpbXBvcnRhbnQgb25lIHRvIHVuZGVyc3RhbmQgZnJvbSBhbGwgYW5nbGVzLiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTAzOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjI0LjUwMDkzMzExNloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMTpcXHRzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXFxuIDEzMjpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbiAxMzM6XFx0e1xcbiAxMzQ6XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeTtcXG4gMTM1OlxcdFxcdGludCBwaHlfYWRkcjtcXG4gMTM2OlxcdFxcdGludCByZXQ7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdHJldCA9IHN3cGh5X3ZhbGlkYXRlX3N0YXRlKHN0YXR1cyk7XFxuIDEzOTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMTQwOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdGlmICghZm1iX21paV9idXMgfHwgZm1iX21paV9idXMtXFx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRClcXG4gMTQzOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHQvKiBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIFBIWSBhZGRyZXNzLCB1cCB0byBOVU1fRlAgKi9cXG4gMTQ2OlxcdFxcdHBoeV9hZGRyID0gZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIoKTtcXG4gMTQ3OlxcdFxcdGlmIChwaHlfYWRkciBcXHUwMDNjIDApXFxuIDE0ODpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihwaHlfYWRkcik7XFxuIDE0OTpcXHRcXG4gMTUwOlxcdFxcdGZtYl9maXhlZF9waHlzW3BoeV9hZGRyXS5zdGF0dXMgPSAqc3RhdHVzO1xcbiAxNTE6XFx0XFx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cy5saW5rID0gdHJ1ZTtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0cGh5ID0gZ2V0X3BoeV9kZXZpY2UoZm1iX21paV9idXMsIHBoeV9hZGRyLCBmYWxzZSk7XFxuIDE1NDpcXHRcXHRpZiAoSVNfRVJSKHBoeSkpIHtcXG4gMTU1OlxcdFxcdFxcdGZpeGVkX3BoeV9kZWwocGh5X2FkZHIpO1xcbiAxNTY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIDE1NzpcXHRcXHR9XFxuIDE1ODpcXHRcXG4gMTU5OlxcdFxcdG9mX25vZGVfZ2V0KG5wKTtcXG4gMTYwOlxcdFxcdHBoeS1cXHUwMDNlbWRpby5kZXYub2Zfbm9kZSA9IG5wO1xcbiAxNjE6XFx0XFx0cGh5LVxcdTAwM2Vpc19wc2V1ZG9fZml4ZWRfbGluayA9IHRydWU7XFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdHJldCA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG4gMTY0OlxcdFxcdGlmIChyZXQpIHtcXG4gMTY1OlxcdFxcdFxcdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xcbiAxNjY6XFx0XFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbiAxNjc6XFx0XFx0XFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XFxuIDE2ODpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiAxNjk6XFx0XFx0fVxcbiAxNzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjI0LjUwMTEzOTUwNloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjQ0NzYxMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipNeSBNRElPIGFuZCBQSFkgTXVzaW5ncyoqXG5cblJpZ2h0LCBgZ2V0X3BoeV9kZXZpY2VgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGdvZXMgYW5kIGdyYWJzIHRoZSBQSFkgSUQgZnJvbSB0aGUgTURJTyBidXMuIFRoYXQncyBwcmV0dHkgc3RhbmRhcmQ7IHdlJ3JlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGFjY2VzcyB0byB0aGUgcmVnaXN0ZXIgc2V0IG9uIHRoZSBwaHlzaWNhbCBsYXllciBkZXZpY2UuIE5vdywgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgYGZpeGVkX3BoeWAsIHRoYXQgdGhyb3dzIGEgYml0IG9mIGEgY3VydmViYWxsLiBUaGUgd2hvbGUgKnBvaW50KiBvZiBhIGZpeGVkIFBIWSBpcyB0aGF0IGl0ICpzaG91bGRuJ3QqIG5lZWQgdG8gYmUgcHJvYmVkIGxpa2UgYSBzdGFuZGFyZCBleHRlcm5hbCBQSFkuIEl0J3MgcHJlLWNvbmZpZ3VyZWQsIHJpZ2h0PyBTbywgd2hhdCBpcyB0aGUgTURJTyByZWFkIGFjdHVhbGx5ICpyZXR1cm5pbmcqIGluIHRoYXQgc2NlbmFyaW8/IElzIGl0IGEgZHVtbXkgdmFsdWU/IEEgc3BlY2lmaWMgaW5kaWNhdG9yPyBEb2VzIGl0IGV2ZW4gKnRyeSogdG8gZG8gYW4gTURJTyB0cmFuc2FjdGlvbiwgb3IgaXMgaXQgYnlwYXNzZWQgZW50aXJlbHkgYmVjYXVzZSB0aGUgc3lzdGVtIGtub3dzIHdoYXQgdHlwZSBvZiBcIlBIWVwiIGl0IGlzPyBJIG5lZWQgdG8gbG9vayBjbG9zZXIgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRfcGh5X2RldmljZWAgaW4gdGhlIGNvbnRleHQgb2YgYGZpeGVkX3BoeWAgdG8gdW5kZXJzdGFuZCB0aGUgYWN0dWFsIG1lY2hhbmljcy4gSSdtIGd1ZXNzaW5nIHRoYXQgaXQgaGFzIHRvIGhhbmRsZSB0aGlzIGNhc2UgaW4gYSB2ZXJ5IHNwZWNpZmljIHdheS4gUGVyaGFwcyBpdCdzIGp1c3QgcmV0dXJuaW5nIGEgcHJlLWRlZmluZWQgSUQgdGhhdCdzIHNldCBpbiB0aGUgZHJpdmVyIHNvbWV3aGVyZSwgb3IgbWF5YmUgaXQgcmV0dXJucyBhbiBlcnJvciBjb2RlLCBpbmRpY2F0aW5nIGl0IGRpZG4ndCBwcm9iZSBhbnl0aGluZyBhdCBhbGwuIEkgbmVlZCB0byBnZXQgdGhlIGRlZmluaXRpdmUgYW5zd2VyLiBJIGJldCB0aGUgYW5zd2VyIHJlbGF0ZXMgZGlyZWN0bHkgdG8gaG93IHRoZSBkcml2ZXIgaGFzIGJlZW4gd3JpdHRlbiwgd2hhdCBhc3N1bXB0aW9ucyB3ZXJlIG1hZGUgYWJvdXQgdGhlIGRldmljZSwgb3Igd2hldGhlciB3ZSBoYXZlIGEgcHJvcGVyIHNldCBvZiBwcm9jZWR1cmVzIGZvciBoYW5kbGluZyB0aGlzIGNhc2UuIFRoaXMgaXMgZ29pbmcgdG8gbWF0dGVyIGlmIEkgbmVlZCB0byBkaWFnbm9zZSBhbiBpc3N1ZSB3aXRoIGZpeGVkLVBIWSBjb25maWd1cmF0aW9ucywgYXMgdW5kZXJzdGFuZGluZyB0aGUgdmFsdWUgYmVpbmcgcmV0dXJuZWQgZnJvbSB0aGUgTURJTyBidXMsIG9yIGV2ZW4gKndoZXRoZXIqIGl0J3MgYmVpbmcgcmVhZCBmcm9tIHRoZSBNRElPIGJ1cywgaXMgZXNzZW50aWFsIHRvIG15IHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk5MDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjI5Ljc0NTkwNDU3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0cmV0dXJuIHRlc3RfYml0KGFkZHIsIGZpeGVkX3BoeV9pZHMpID8gZm1iX2ZpeGVkX3BoeXMgKyBhZGRyIDogTlVMTDtcXG4gIDQxOlxcdH1cXG4gIDQyOlxcdFxcbiAgNDM6XFx0aW50IGZpeGVkX3BoeV9jaGFuZ2VfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5ld19jYXJyaWVyKVxcbiAgNDQ6XFx0e1xcbiAgNDU6XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGRldi1cXHUwMDNlcGh5ZGV2O1xcbiAgNDY6XFx0XFx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdGlmICghcGh5ZGV2IHx8ICFwaHlkZXYtXFx1MDAzZW1kaW8uYnVzKVxcbiAgNDk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbiAgNTI6XFx0XFx0aWYgKCFmcClcXG4gIDUzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHRmcC1cXHUwMDNlc3RhdHVzLmxpbmsgPSBuZXdfY2FycmllcjtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0cmV0dXJuIDA7XFxuICA1ODpcXHR9XFxuICA1OTpcXHRFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIpO1xcbiAgNjA6XFx0XFxuICA2MTpcXHRzdGF0aWMgaW50IGZpeGVkX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtKVxcbiAgNjI6XFx0e1xcbiAgNjM6XFx0XFx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XFxuICA2NDpcXHRcXG4gIDY1OlxcdFxcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5X2FkZHIpO1xcbiAgNjY6XFx0XFx0aWYgKCFmcClcXG4gIDY3OlxcdFxcdFxcdHJldHVybiAweGZmZmY7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGlmIChmcC1cXHUwMDNlbGlua191cGRhdGUpXFxuICA3MDpcXHRcXHRcXHRmcC1cXHUwMDNlbGlua191cGRhdGUoZnAtXFx1MDAzZXBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2LCBcXHUwMDI2ZnAtXFx1MDAzZXN0YXR1cyk7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHJldHVybiBzd3BoeV9yZWFkX3JlZyhyZWdfbnVtLCBcXHUwMDI2ZnAtXFx1MDAzZXN0YXR1cyk7XFxuICA3MzpcXHR9XFxuICA3NDpcXHRcXG4gIDc1OlxcdHN0YXRpYyBpbnQgZml4ZWRfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtLFxcbiAgNzY6XFx0XFx0XFx0XFx0ICAgIHUxNiB2YWwpXFxuICA3NzpcXHR7XFxuICA3ODpcXHRcXHRyZXR1cm4gMDtcXG4gIDc5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MjkuNzQ2MDI5NjNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NDMxNDU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUEhZIElEIFJldHJpZXZhbCBmb3IgRml4ZWQgUEhZcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzd3BoeV9yZWFkX3JlZ2AuIFRoaXMgZnVuY3Rpb24ncyBkZXNpZ25lZCB0byBncmFiIHRoYXQgY3J1Y2lhbCBQSFkgSUQgc3BlY2lmaWNhbGx5IGZvciBhIGBmaXhlZF9waHlgLiBOb3RoaW5nIGdyb3VuZGJyZWFraW5nIHRoZXJlLCBqdXN0IGNvbmZpcm1pbmcgdGhhdCB0aGUgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgKEhBTCkgaXMgZG9pbmcgaXRzIGpvYiBhbmQgZ2l2aW5nIG1lIHRoZSBpZGVudGlmaWVyIEkgbmVlZC4gSXQncyBhIGZ1bmRhbWVudGFsIG9wZXJhdGlvbiwgcmVhbGx5LCBidXQgZXNzZW50aWFsIGZvciBhbnkga2luZCBvZiBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb3IgbW9uaXRvcmluZyBkb3duIHRoZSBsaW5lIHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIHNvcnRzIG9mIHBoeXNpY2FsIGxheWVyIGRldmljZXMuIEknbSBhc3N1bWluZyB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIHRoaW5ncyBsaWtlIHJlZ2lzdGVyIGFjY2VzcyBhcHByb3ByaWF0ZWx5IOKAkyBubyBzdXJwcmlzZXMgZXhwZWN0ZWQgb24gdGhhdCBmcm9udCwgb3IgSSdkIGJlIGxvb2tpbmcgbXVjaCBkZWVwZXIhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODk1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjozMy4xOTAzNDkxMzdaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDUyMjEwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd3BoeV9yZWFkX3JlZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz02MT1zdGF0aWMgaW50IGZpeGVkX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTcxLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo3MjpcXHRyZXR1cm4gc3dwaHlfcmVhZF9yZWcocmVnX251bSwgXFx1MDAyNmZwLVxcdTAwM2VzdGF0dXMpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy03My19XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTMzNTg9c3RhdGljIGludCBwaHlsaW5rX21paV9lbXVsX3JlYWQodW5zaWduZWQgaW50IHJlZyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM3MC1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMzNzE6XFx0dmFsID0gc3dwaHlfcmVhZF9yZWcocmVnLCBcXHUwMDI2ZnMpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM3Mi1cXHRpZiAocmVnID09IE1JSV9CTVNSKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYz0xMDY9RVhQT1JUX1NZTUJPTF9HUEwoc3dwaHlfdmFsaWRhdGVfc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTA4LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjEwOTogKiBzd3BoeV9yZWFkX3JlZyAtIHJldHVybiBhIE1JSSByZWdpc3RlciBmcm9tIHRoZSBmaXhlZCBwaHkgc3RhdGVcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMTAtICogQHJlZzogTUlJIHJlZ2lzdGVyXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMTQtICovXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6MTE1OmludCBzd3BoeV9yZWFkX3JlZyhpbnQgcmVnLCBjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTE2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTE3NC19XFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6MTc1OkVYUE9SVF9TWU1CT0xfR1BMKHN3cGh5X3JlYWRfcmVnKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oPTc9aW50IHN3cGh5X3ZhbGlkYXRlX3N0YXRlKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg6ODppbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKTtcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC05LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjozMy40NzQ4NzU3MDNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3OTE1OTExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBzd3BoeV9yZWFkX3JlZ2AncyBPdXRwdXQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBwYXJ0aWN1bGFyIHN5c3RlbSwgb3IgYSBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZS4gSSdtIHRoaW5raW5nLCBcIkxldCdzIHNlZSB3aGF0IGBzd3BoeV9yZWFkX3JlZ2AgcmV0dXJucy5cIiBJdCdzIGxpa2VseSBJJ20gdHJ5aW5nIHRvIGRlYnVnIHNvbWV0aGluZywgdmVyaWZ5IGEgY29uZmlndXJhdGlvbiwgb3IgcGVyaGFwcyBnYXRoZXIgc29tZSBjcml0aWNhbCBkYXRhLiBUaGUgc3BlY2lmaWMgcmVnaXN0ZXIgYmVpbmcgcmVhZCBpcywgb2YgY291cnNlLCAqY3J1Y2lhbCogY29udGV4dCwgYnV0IGZvciBub3csIG15IGZvY3VzIGlzIHNvbGVseSBvbiB3aGF0IGluZm9ybWF0aW9uIHRoaXMgZnVuY3Rpb24gY2FsbCB3aWxsIHByb3ZpZGUuIElzIGl0IHRoZSByYXcgZGF0YSBpdHNlbGY/IFBlcmhhcHMgYSBzdGF0dXMgY29kZT8gTWF5YmUgYSBwb2ludGVyIHRvIGEgZGF0YSBzdHJ1Y3R1cmU/IFRoZSBleGFjdCBuYXR1cmUgb2YgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGRpY3RhdGUgbXkgbmV4dCBzdGVwcy4gSXQncyB0aGUgbHluY2hwaW4sIHRoZSBzdGFydGluZyBwb2ludCBmb3Igd2hhdGV2ZXIgSSdtIHRyb3VibGVzaG9vdGluZyBvciBhbmFseXppbmcuIEknbSBlc3NlbnRpYWxseSBydW5uaW5nIGEgZGlhZ25vc3RpYyBjaGVjayBhbmQgd2FpdGluZyBmb3IgdGhlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE2NDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjozOC4xNTQwMzc1NTRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3N3cGh5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdGludCBzd3BoeV9yZWFkX3JlZyhpbnQgcmVnLCBjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpXFxuIDExNjpcXHR7XFxuIDExNzpcXHRcXHRpbnQgc3BlZWRfaW5kZXgsIGR1cGxleF9pbmRleDtcXG4gMTE4OlxcdFxcdHUxNiBibXNyID0gQk1TUl9BTkVHQ0FQQUJMRTtcXG4gMTE5OlxcdFxcdHUxNiBlc3RhdCA9IDA7XFxuIDEyMDpcXHRcXHR1MTYgbHBhZ2IgPSAwO1xcbiAxMjE6XFx0XFx0dTE2IGxwYSA9IDA7XFxuIDEyMjpcXHRcXG4gMTIzOlxcdFxcdGlmIChyZWcgXFx1MDAzZSBNSUlfUkVHU19OVU0pXFxuIDEyNDpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDEyNTpcXHRcXG4gMTI2OlxcdFxcdHNwZWVkX2luZGV4ID0gc3dwaHlfZGVjb2RlX3NwZWVkKHN0YXRlLVxcdTAwM2VzcGVlZCk7XFxuIDEyNzpcXHRcXHRpZiAoV0FSTl9PTihzcGVlZF9pbmRleCBcXHUwMDNjIDApKVxcbiAxMjg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDEyOTpcXHRcXG4gMTMwOlxcdFxcdGR1cGxleF9pbmRleCA9IHN0YXRlLVxcdTAwM2VkdXBsZXggPyBTV01JSV9EVVBMRVhfRlVMTCA6IFNXTUlJX0RVUExFWF9IQUxGO1xcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHRibXNyIHw9IHNwZWVkW3NwZWVkX2luZGV4XS5ibXNyIFxcdTAwMjYgZHVwbGV4W2R1cGxleF9pbmRleF0uYm1zcjtcXG4gMTMzOlxcdFxcdGVzdGF0IHw9IHNwZWVkW3NwZWVkX2luZGV4XS5lc3RhdCBcXHUwMDI2IGR1cGxleFtkdXBsZXhfaW5kZXhdLmVzdGF0O1xcbiAxMzQ6XFx0XFxuIDEzNTpcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWxpbmspIHtcXG4gMTM2OlxcdFxcdFxcdGJtc3IgfD0gQk1TUl9MU1RBVFVTIHwgQk1TUl9BTkVHQ09NUExFVEU7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdFxcdGxwYSAgIHw9IHNwZWVkW3NwZWVkX2luZGV4XS5scGEgICBcXHUwMDI2IGR1cGxleFtkdXBsZXhfaW5kZXhdLmxwYTtcXG4gMTM5OlxcdFxcdFxcdGxwYWdiIHw9IHNwZWVkW3NwZWVkX2luZGV4XS5scGFnYiBcXHUwMDI2IGR1cGxleFtkdXBsZXhfaW5kZXhdLmxwYWdiO1xcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZXBhdXNlKVxcbiAxNDI6XFx0XFx0XFx0XFx0bHBhIHw9IExQQV9QQVVTRV9DQVA7XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlYXN5bV9wYXVzZSlcXG4gMTQ1OlxcdFxcdFxcdFxcdGxwYSB8PSBMUEFfUEFVU0VfQVNZTTtcXG4gMTQ2OlxcdFxcdH1cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0c3dpdGNoIChyZWcpIHtcXG4gMTQ5OlxcdFxcdGNhc2UgTUlJX0JNQ1I6XFxuIDE1MDpcXHRcXHRcXHRyZXR1cm4gQk1DUl9BTkVOQUJMRTtcXG4gMTUxOlxcdFxcdGNhc2UgTUlJX0JNU1I6XFxuIDE1MjpcXHRcXHRcXHRyZXR1cm4gYm1zcjtcXG4gMTUzOlxcdFxcdGNhc2UgTUlJX1BIWVNJRDE6XFxuIDE1NDpcXHRcXHRjYXNlIE1JSV9QSFlTSUQyOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjozOC4xNTQxMTg2NTRaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2OTQ5Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTUlJX1BIWVNJRCBSZWdpc3RlcnMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiBCZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSB2YWx1ZXMgcmV0dXJuZWQgZm9yIGBNSUlfUEhZU0lEMWAgYW5kIGBNSUlfUEhZU0lEMmAuIFRob3NlIHJlZ2lzdGVycyBhcmUgY3J1Y2lhbCBmb3IgaWRlbnRpZnlpbmcgdGhlIFBIWSdzIGNhcGFiaWxpdGllcyBhbmQgcmV2aXNpb24uIEkgY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIFBIWSBiZWhhdmlvciB3aXRob3V0IGNvbmZpcm1pbmcgaXRzIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uIEtub3dpbmcgdGhlIGBQSFlTSURgIHZhbHVlcyB3aWxsIGluZm9ybSBob3cgSSBpbnRlcnByZXQgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMgYW5kIGRldGVybWluZSB0aGUgb3B0aW1hbCBkcml2ZXIgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBkZWNvZGluZyBsb2dpYyBhZ2FpbnN0IHRoZSByZWxldmFudCBQSFkgZGF0YSBzaGVldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIGFueSBwb3NzaWJsZSB2ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucyB0aGF0IGFyZSBidXJpZWQgaW4gdGhlIHJlZ2lzdGVycy4gVGhvc2UgYXJlIHNvIG11Y2ggZnVuIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjU1OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6NDIuMTIzNjIwOTY0WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvc3dwaHkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTM6XFx0XFx0Y2FzZSBNSUlfUEhZU0lEMTpcXG4gMTU0OlxcdFxcdGNhc2UgTUlJX1BIWVNJRDI6XFxuIDE1NTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTU2OlxcdFxcdGNhc2UgTUlJX0xQQTpcXG4gMTU3OlxcdFxcdFxcdHJldHVybiBscGE7XFxuIDE1ODpcXHRcXHRjYXNlIE1JSV9TVEFUMTAwMDpcXG4gMTU5OlxcdFxcdFxcdHJldHVybiBscGFnYjtcXG4gMTYwOlxcdFxcdGNhc2UgTUlJX0VTVEFUVVM6XFxuIDE2MTpcXHRcXHRcXHRyZXR1cm4gZXN0YXQ7XFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdC8qXFxuIDE2NDpcXHRcXHQgKiBXZSBkbyBub3Qgc3VwcG9ydCBlbXVsYXRpbmcgQ2xhdXNlIDQ1IG92ZXIgQ2xhdXNlIDIyIHJlZ2lzdGVyXFxuIDE2NTpcXHRcXHQgKiByZWFkcy4gIFJldHVybiBhbiBlcnJvciBpbnN0ZWFkIG9mIGJvZ3VzIGRhdGEuXFxuIDE2NjpcXHRcXHQgKi9cXG4gMTY3OlxcdFxcdGNhc2UgTUlJX01NRF9DVFJMOlxcbiAxNjg6XFx0XFx0Y2FzZSBNSUlfTU1EX0RBVEE6XFxuIDE2OTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdGRlZmF1bHQ6XFxuIDE3MjpcXHRcXHRcXHRyZXR1cm4gMHhmZmZmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjo0Mi4xMjM4MTUyNDRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc0NTU4ODk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIEkndmUgZHVnIGludG8gdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIHdoYXQgSSdtIHNlZWluZywgaXQncyBwcmV0dHkgY2xlYXIgdGhpcyBpc24ndCBnb2luZyB0byBiZSBmcnVpdGZ1bCBmb3IgZnV6emluZyBpbiBhIFFFTVUgZW52aXJvbm1lbnQuIFRoZSBjb3JlIGlzc3VlIGlzIHRoZSBQSFkgSUQuIFRoZSBjb2RlIGlzIGNvbnNpc3RlbnRseSByZXR1cm5pbmcgemVybyBmb3IgYm90aCBgTUlJX1BIWVNJRDFgIGFuZCBgTUlJX1BIWVNJRDJgLiBUaGF0IG1lYW5zIGBmaXhlZF9waHlgIGFsd2F5cyBoYXMgYSBQSFkgSUQgb2YgemVybywgYW5kIHdlIGNhbid0IHNlZW0gdG8gbWFuaXB1bGF0ZSBpdCB0byB0aGUgdGFyZ2V0IElEIG9mIGAweDRmNTFlOGI4YC4gQ29uc2VxdWVudGx5LCB0aGUgY3J1Y2lhbCBgeXQ4ODI0X3Byb2JlYCBmdW5jdGlvbiBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIHdpdGhpbiBRRU1VLlxuXG5Mb29raW5nIGJleW9uZCB0aGF0LCB0aGlzIHBhdGNoIGlzIHNvbGVseSBmb2N1c2VkIG9uIGFkZGluZyBzdXBwb3J0IGZvciBuZXcgUEhZIGhhcmR3YXJlLiBObyBhY3R1YWwgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgYXJlIGludHJvZHVjZWQgd2l0aGluIHRoZSBjdXJyZW50bHkgb2JzZXJ2ZWQgb3BlcmF0aW5nIGVudmlyb25tZW50LlxuXG5JIGRlY2lkZWQgdG8gZG91YmxlLWNoZWNrIGJ5IGV4cGxvcmluZyBvdGhlciBjaGFuZ2VzLiBUaGVyZSdzIGEgbmV3IGZ1bmN0aW9uIGFkZGVkLCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgaW4gYHBoeS1jNDUuY2AuIEhvd2V2ZXIsIGEgcXVpY2sgZ3JlcCByZXZlYWxlZCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXZlciBjYWxsZWQgZnJvbSBgbW90b3Jjb21tLmNgLiBUaGlzIG1ha2VzIGl0IHVucmVhY2hhYmxlIGFzIHdlbGwuXG5cbkluIHNob3J0LCB0aGVyZSdzIGFic29sdXRlbHkgbm8gZnVuY3Rpb25hbCBwYXRod2F5IHRoaXMgcGF0Y2ggdW5sb2NrcyB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBRRU1VIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIG15IHJlY29tbWVuZGF0aW9uIGlzIGNsZWFyOiBXb3J0aEZ1enppbmcgPSBmYWxzZS4gSSdtIGdvaW5nIHRvIHNldCB0aGF0IGZsYWcgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMDYxLCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjQ4Ljg2OTQwNzUxOVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIGRyaXZlci4gUEhZIGRyaXZlcnMgYXJlIHByb2JlZCBiYXNlZCBvbiB0aGUgaGFyZHdhcmUgUEhZIElEIHJlYWQgZnJvbSB0aGUgTURJTyBidXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBQSFkgaGFyZHdhcmUgaW4gUUVNVSwgYW5kIG5vIGdlbmVyaWMgd2F5IHRvIGluc3RhbnRpYXRlIGFyYml0cmFyeSBQSFkgZHJpdmVycyB3aXRoIGN1c3RvbSBJRHMgZnJvbSB1c2Vyc3BhY2UsIHRoZSBuZXcgY29kZSAoaW5jbHVkaW5nIHRoZSBuZXdseSBhZGRlZCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIGhlbHBlciB3aGljaCBpcyBvbmx5IGNhbGxlZCBieSB0aGlzIGRyaXZlcikgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIGRyaXZlci4gUEhZIGRyaXZlcnMgYXJlIHByb2JlZCBiYXNlZCBvbiB0aGUgaGFyZHdhcmUgUEhZIElEIHJlYWQgZnJvbSB0aGUgTURJTyBidXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBQSFkgaGFyZHdhcmUgaW4gUUVNVSwgYW5kIG5vIGdlbmVyaWMgd2F5IHRvIGluc3RhbnRpYXRlIGFyYml0cmFyeSBQSFkgZHJpdmVycyB3aXRoIGN1c3RvbSBJRHMgZnJvbSB1c2Vyc3BhY2UsIHRoZSBuZXcgY29kZSAoaW5jbHVkaW5nIHRoZSBuZXdseSBhZGRlZCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIGhlbHBlciB3aGljaCBpcyBvbmx5IGNhbGxlZCBieSB0aGlzIGRyaXZlcikgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjQ4Ljg2OTQzODc1OVoiLCJTZXEiOjU3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:nil,}