Name: series-workflowd45sf Phase: Failed StartedAt: 2026-09-02 21:32:59 +0000 UTC FinishedAt: 2026-09-02 22:10:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd45sf[0] Phase: Succeeded StartedAt: 2026-09-02 21:32:59 +0000 UTC FinishedAt: 2026-09-02 22:10:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd45sf[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 21:32:59 +0000 UTC FinishedAt: 2026-09-02 22:10:13 +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+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjg4MTFIIEV0aGVybmV0IFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jKSB0byBhZGQgYSBmaXJtd2FyZSBzaXplIGFsaWdubWVudCBjaGVjay4gRXRoZXJuZXQgUEhZIGhhcmR3YXJlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgaGFyZHdhcmUgY29ubmVjdGVkIHZpYSBNRElPLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyMGNjOTQ4ZTJiNGIyZjZmMTE5MTc2Y2ZhMDY5ZWFiZTQwZTc0ZmMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMjowODo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG5pbmRleCAwZWViN2I5YTRlMjYwLi4zNGQyNzI3ZTgyMjJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG5AQCAtMzEyLDYgJiM0MzszMTIsMTIgQEAgc3RhdGljIGludCBhaXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxuIFx0aW50IHNhdmVkX3BhZ2U7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiYjNDM7XHRpZiAoZnctXHUwMDNlc2l6ZSAlIDQpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBmdy1cdTAwM2VzaXplKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuIFxuIFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjg4MTFIIEV0aGVybmV0IFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jKSB0byBhZGQgYSBmaXJtd2FyZSBzaXplIGFsaWdubWVudCBjaGVjay4gRXRoZXJuZXQgUEhZIGhhcmR3YXJlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgaGFyZHdhcmUgY29ubmVjdGVkIHZpYSBNRElPLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMGNjOTQ4ZTJiNGIyZjZmMTE5MTc2Y2ZhMDY5ZWFiZTQwZTc0ZmMzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAyMjowODo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKaW5kZXggMGVlYjdiOWE0ZTI2MC4uMzRkMjcyN2U4MjIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKQEAgLTMxMiw2ICYjNDM7MzEyLDEyIEBAIHN0YXRpYyBpbnQgYWlyX3dyaXRlX2J1ZihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgYWRkcmVzcywKIAlpbnQgc2F2ZWRfcGFnZTsKIAlpbnQgcmV0ID0gMDsKIAomIzQzOwlpZiAoZnctJmd0O3NpemUgJSA0KSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XG4mIzM0OywKJiM0MzsJCQkgICBmdy0mZ3Q7c2l6ZSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwogCXNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7CiAKIAlpZiAoc2F2ZWRfcGFnZSAmZ3Q7PSAwKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZXZpZXdpbmcgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIHRha2UgYSBsb29rIGF0IGEgcGF0Y2ggdGhhdCBpbXBhY3RzIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgbmV0d29yayBQSFkgZHJpdmVyIGZvciB0aGUgQWlyLUVOODgxMUguIEJlZm9yZSBJIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2VzIHRoZW1zZWx2ZXMsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0LgoKTXkgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSB0byBhY3R1YWxseSBvcGVuIGFuZCByZXZpZXcgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCBkaXJlY3RseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEFmdGVyIHRoYXQsIEkgd2lsbCBhbHNvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYW5kIGRldGVybWluZSBleGFjdGx5IHdoZXJlIGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgYmVpbmcgdXNlZC4gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyAKClRvIGFjaGlldmUgdGhpcywgSSYjMzk7bGwgbGlrZWx5IHVzZSBhIHRvb2wgbGlrZSBgcmVhZC1maWxlYCwgb3IgbWF5YmUgYGdyZXBwZXJgIGlmIEkmIzM5O20gbG9va2luZyBmb3Igc3BlY2lmaWMgc3RyaW5ncyBvciB1c2FnZXMuIEkgbmVlZCBhIHNvbGlkIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgY2FuIGFzc2VzcyB0aGUgaW1wYWN0IGFuZCBjb3JyZWN0bmVzcyBvZiB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjkwOlx0XHRcdFx0ICBsb3dlcl8xNl9iaXRzKGFkZHJlc3MpKTtcbiAyOTE6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMjkyOlx0XHRcdHJldHVybiByZXQ7XG4gMjkzOlx0XG4gMjk0Olx0XHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcdTAwM2MgZnctXHUwMDNlc2l6ZTsgb2Zmc2V0ICYjNDM7PSA0KSB7XG4gMjk1Olx0XHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZmdy1cdTAwM2VkYXRhW29mZnNldCAmIzQzOyAyXSk7XG4gMjk2Olx0XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCwgdmFsKTtcbiAyOTc6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyOTg6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDI5OTpcdFxuIDMwMDpcdFx0XHR2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMTYoXHUwMDI2ZnctXHUwMDNlZGF0YVtvZmZzZXRdKTtcbiAzMDE6XHRcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csIHZhbCk7XG4gMzAyOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMzAzOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAzMDQ6XHRcdH1cbiAzMDU6XHRcbiAzMDY6XHRcdHJldHVybiAwO1xuIDMwNzpcdH1cbiAzMDg6XHRcbiAzMDk6XHRzdGF0aWMgaW50IGFpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXG4gMzEwOlx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gMzExOlx0e1xuIDMxMjpcdFx0aW50IHNhdmVkX3BhZ2U7XG4gMzEzOlx0XHRpbnQgcmV0ID0gMDtcbiAzMTQ6XHRcbiAzMTU6XHRcdGlmIChmdy1cdTAwM2VzaXplICUgNCkge1xuIDMxNjpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7ZmlybXdhcmUgc2l6ZSAlenUgaXMgbm90IGEgbXVsdGlwbGUgb2YgNFxcblwmIzM0OyxcbiAzMTc6XHRcdFx0XHQgICBmdy1cdTAwM2VzaXplKTtcbiAzMTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzE5Olx0XHR9XG4gMzIwOlx0XG4gMzIxOlx0XHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuIDMyMjpcdFxuIDMyMzpcdFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4gMzI0Olx0XHRcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihwaHlkZXYsIGFkZHJlc3MsIGZ3KTtcbiAzMjU6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAzMjY6XHRcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7JXMgMHglMDh4IGZhaWxlZDogJWRcXG5cJiMzNDssIF9fZnVuY19fLFxuIDMyNzpcdFx0XHRcdFx0ICAgYWRkcmVzcywgcmV0KTtcbiAzMjg6XHRcdH1cbiAzMjk6XHRcbiAzMzA6XHRcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgc2F2ZWRfcGFnZSwgcmV0KTtcbiAzMzE6XHR9XG4gMzMyOlx0XG4gMzMzOlx0c3RhdGljIGludCBlbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gMzM0Olx0e1xuIDMzNTpcdFx0aW50IHJldCwgcmVnX3ZhbHVlO1xuIDMzNjpcdFxuIDMzNzpcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbiAzMzg6XHRcdFx0XHRcdFx0IEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSCk7XG4gMzM5Olx0XHRpZiAocmV0KVxuIDM0MDpcdFx0XHRyZXR1cm4gcmV0O1xuIDM0MTpcdFxuIDM0MjpcdFx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovXG4gMzQzOlx0XHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsXG4gMzQ0Olx0XHRcdFx0XHRcdEVOODgxMUhfUEhZX0ZXX1NUQVRVUywgcmVnX3ZhbHVlLFxuIDM0NTpcdFx0XHRcdFx0XHRyZWdfdmFsdWUgPT0gRU44ODExSF9QSFlfUkVBRFksXG4gMzQ2Olx0XHRcdFx0XHRcdDIwMDAwLCA3NTAwMDAwLCB0cnVlKTtcbiAzNDc6XHRcdGlmIChyZXQpIHtcbiAzNDg6XHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O01DVSBub3QgcmVhZHk6IDB4JXhcXG5cJiMzNDssIHJlZ192YWx1ZSk7XG4gMzQ5Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDM1MDpcdFx0fVxuIDM1MTpcdFxuIDM1MjpcdFx0cmV0dXJuIDA7XG4gMzUzOlx0fVxuIDM1NDpcdFxuIDM1NTpcdHN0YXRpYyBpbnQgYW44ODExaGJfY2hlY2tfY3JjKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBzZXQxLFxuIDM1NjpcdFx0XHRcdCAgICAgIHUzMiBtb24yLCB1MzIgbW9uMylcbiAzNTc6XHR7XG4gMzU4Olx0XHR1MzIgcGJ1c192YWx1ZTtcbiAzNTk6XHRcdGludCByZXRyeSA9IDI1O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBBaXJvaGEgRU44ODExSCBFdGhlcm5ldCBQSFkgRHJpdmVyKioKCkFscmlnaHQsIEkmIzM5O3ZlIGdvdCBgYWlyX2VuODgxMWguY2AgaGVyZSwgdGhlIEFpcm9oYSBFTjg4MTFIIDIuNUcgRXRoZXJuZXQgUEhZIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCB0aGUgd2F5IGl0JiMzOTtzIGJyb3VnaHQgaW50byB0aGUgc3lzdGVtLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBLY29uZmlnIGVudHJ5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRyaXZlci4gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyB3aWxsIHJldmVhbCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXNwZWN0cyDigJMgZG9lcyBpdCBuZWVkIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgb3IgY2FuIGl0IGJlIGJ1aWx0IGFzIGEgbW9kdWxlIG1vcmUgZ2VuZXJhbGx5PyBUaGlzIHByb2JlIHByb2Nlc3MgaXMga2V5LiBEb2VzIGl0IGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZSBQSFksIG9yIGRvZXMgaXQgcmVxdWlyZSBzb21lIGtpbmQgb2YgdXNlci1kZWZpbmVkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIGhhcmR3YXJlPyBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgS2NvbmZpZyBicmVhZGNydW1icyB0byBlc3RhYmxpc2ggaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBSVJfRU44ODExSHxhaXJfZW44ODExaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZz05Mz1jb25maWcgQUlSX0FOODgwMV9QSFlcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy05OC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjk5OmNvbmZpZyBBSVJfRU44ODExSF9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwMC1cdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBFTjg4MTFIIDIuNSBHaWdhYml0IFBIWVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfQUlSX0FOODgwMV9QSFkpXHQmIzQzOz0gYWlyX2FuODgwMS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0FJUl9FTjg4MTFIX1BIWSkgICAmIzQzOz0gYWlyX2VuODgxMWgub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTM1LW9iai0kKENPTkZJR19BSVJfTkVUX1BIWUxJQilcdCYjNDM7PSBhaXJfcGh5X2xpYi5vXG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0zMjQtLyogTEVEIGJhc2ljIGNvbnRyb2wgcmVnaXN0ZXIsIHBhcnQgb2YgdGhlIHNhbWUgTEVEIGJsb2NrIGFzIHRoZSBMRUQwL0xFRDFcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM6MzI1OiAqIGNvbnRyb2wgcmVnaXN0ZXJzIGFib3ZlLiBUaGUgYWlyX2VuODgxMWggZHJpdmVyIGRlc2NyaWJlcyB0aGUgc2FtZVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0zMjYtICogcmVnaXN0ZXIgYXMgQUlSX1BIWV9MRURfQkNSLlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM9MTQ4Mj1zdGF0aWMgaW50IGVuNzUyOF9waHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTE0ODYtXHQgKiBwcm9ncmFtbWVkIGludG8gdGhlIExFRCBjb250cm9sIHJlZ2lzdGVycy4gSGFuZCB0aGUgcGlucyBvdmVyIHRvXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jOjE0ODc6XHQgKiB0aGUgTEVEIGNvbnRyb2wgcmVnaXN0ZXJzIHRoZSBzYW1lIHdheSB0aGUgYWlyX2VuODgxMWggZHJpdmVyXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTE0ODgtXHQgKiBkb2VzOyB0aGUgbW9kZSBmaWVsZCBvZiB0aGlzIHJlZ2lzdGVyIGlzIGFscmVhZHkgc2V0IG91dCBvZiByZXNldC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDE4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBhaXJfZW44ODExaC5jYCBQSFkgRHJpdmVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGVudGlyZSBgYWlyX2VuODgxMWguY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyZSBhbmQgZmxvdyBvZiB0aGlzIFBIWSBkcml2ZXIuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IGV4YWN0bHkgd2hhdCBtZWNoYW5pc21zIGtpY2sgb2ZmIHRoZSBgYWlyX3dyaXRlX2J1ZmAgZnVuY3Rpb24uIEkmIzM5O20gbm90IGp1c3QgaW50ZXJlc3RlZCBpbiAqd2hlcmUqIGl0JiMzOTtzIGNhbGxlZCwgYnV0IHRoZSAqd2h5KiAtIHRoZSB1bmRlcmx5aW5nIGNvbmRpdGlvbnMgYW5kIGV2ZW50cyB0aGF0IHRyaWdnZXIgaXRzIGV4ZWN1dGlvbi4gSSB3YW50IHRvIGJ1aWxkIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIHRoZSBkcml2ZXImIzM5O3Mgb3BlcmF0aW9uLCBzbyBJIGNhbiBwcmVkaWN0IGl0cyBiZWhhdmlvciBhbmQgcGlucG9pbnQgcG90ZW50aWFsIGlzc3Vlcy4gVGhpcyBtZWFucyBtYXBwaW5nIG91dCB0aGUgY29udHJvbCBmbG93LCBpZGVudGlmeWluZyBrZXkgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGludGVycnVwdCBoYW5kbGVycywgdGFza2xldHMsIERNQSBvcGVyYXRpb25zLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IG1lY2hhbmlzbXMgdGhhdCBjb3VsZCBsZWFkIHRvIGEgY2FsbCB0byBgYWlyX3dyaXRlX2J1ZmAuIFRoZSBnb2FsIGlzIGEgaG9saXN0aWMgdW5kZXJzdGFuZGluZywgbm90IGp1c3QgYSBzdXJmYWNlLWxldmVsIHNjYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyX3dyaXRlX2J1ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTI0OD1zdGF0aWMgaW50IF9fYWlyX3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldixcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNzItXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNzM6c3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNzQtXHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0zMDgtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzozMDk6c3RhdGljIGludCBhaXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzEwLVx0XHRcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTMyMy1cdGlmIChzYXZlZF9wYWdlIFx1MDAzZT0gMCkge1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MzI0Olx0XHRyZXQgPSBfX2Fpcl93cml0ZV9idWYocGh5ZGV2LCBhZGRyZXNzLCBmdyk7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0zMjUtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9NDAzPXN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maWxlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDEzLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NDE0Olx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIGFkZHJlc3MsICBmdyk7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00MTUtXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz01MDg9c3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzItXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MzM6XHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgQUlSX0ZXX0FERFJfRE0sICBmdzEpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTM0LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzYtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1Mzc6XHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgQUlSX0ZXX0FERFJfRFNQLCBmdzIpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTM4LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDgyCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGUgY29kZSwgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uLCBhbmQgdGFpbG9yZWQgZm9yIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYGFpcl9lbjg4MTFoLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBhaXJfZW44ODExaC5jYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3BoeWAgZGlyZWN0b3J5LiBJJiMzOTttIGFscmVhZHkgZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBQSFkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIGFuIEFpciBFdGhlcm5ldCBFTjg4MTFILiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGtleSBhcmVhcy4gRmlyc3QsIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoZSBzdGFuZGFyZCBQSFkgZHJpdmVyIHN0cnVjdHVyZTogaW5pdGlhbGl6YXRpb24gcm91dGluZXMgKGBhaXJfZW44ODExaF9wcm9iZWAsIGBhaXJfZW44ODExaF9jb25maWdfaW5pdGApLCBjb25maWd1cmF0aW9uL2xpbmsgbWFuYWdlbWVudCBmdW5jdGlvbnMgKGBhaXJfZW44ODExaF9jb25maWdgLCBgYWlyX2VuODgxMWhfbGlua191cGAsIGBhaXJfZW44ODExaF9saW5rX2Rvd25gKSwgYW5kIHBvdGVudGlhbGx5IGludGVycnVwdCBoYW5kbGVycyBpZiBpdCYjMzk7cyBnb3QgYSBmYW5jeSBpbnRlcnJ1cHQtZHJpdmVuIGxpbmsgc3RhdHVzIGNoYW5nZSBzeXN0ZW0uCgpJJiMzOTtsbCBiZSB6ZXJvaW5nIGluIG9uIHRoZSByZWdpc3RlciBhY2Nlc3MgbWV0aG9kcyB1c2VkLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHVzaW5nIGEgc3RhbmRhcmQgTURJTyBpbnRlcmZhY2Ugb3Igc29tZXRoaW5nIHByb3ByaWV0YXJ5LiBBbmQsIEkmIzM5O2xsIGJlIG1ha2luZyBub3RlIG9mIHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyB0aGF0IGFyZSB1bmlxdWUgdG8gdGhpcyBzcGVjaWZpYyBQSFkuIEFueSB2ZW5kb3Itc3BlY2lmaWMgcXVpcmtzPyBBcmUgdGhleSBpbXBsZW1lbnRpbmcgYW55IGF1dG8tbmVnb3RpYXRpb24gb3ZlcnJpZGVzIG9yIGN1c3RvbSBwb3dlci1zYXZpbmcgbW9kZXM/IEFsc28sIEkgYW0gZXhwZWN0aW5nIHNvbWUgc29ydCBvZiBzdXBwb3J0IGZvciBkaWZmZXJlbnQgTUlJIG1vZGVzLgoKTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBhcmUgZ29vZCwgYmVjYXVzZSBJJiMzOTttIGhvcGluZyBJIGRvbiYjMzk7dCBoYXZlIHRvIHNwZW5kIGEgbG90IG9mIHRpbWUgcmV2ZXJzZSBlbmdpbmVlcmluZyB0aGUgcmVnaXN0ZXIgZGVzY3JpcHRpb25zLiBUaGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZHJpdmVyIHdvcmtzIGlzIHRocm91Z2ggYSBsb29rIGludG8gdGhlIGRldmljZSYjMzk7cyBkYXRhc2hlZXQuIEkgc2hvdWxkIGdyYWIgdGhhdCBkYXRhc2hlZXQgZm9yIHRoaXMgZGV2aWNlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgbGluayBwYXJ0bmVyJiMzOTtzIGRldGVjdGlvbiBhbmQgYXV0by1uZWdvdGlhdGlvbiBoYW5kbGluZyDigJMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJJiMzOTtsbCBhbHNvIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGVycm9yIGhhbmRsaW5nIG9yIHJldHJ5IGxvZ2ljOyByb2J1c3RuZXNzIGlzIGtleSBpbiBuZXR3b3JrIGRyaXZlcnMuIExldCYjMzk7cyBzZWUgaG93IHdlbGwgaXQmIzM5O3MgYmVlbiBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTAwOlx0XHRcdFx0XHQgQU44ODExSEJfQ1JDX1BNX01PTjIsXG4gNTAxOlx0XHRcdFx0XHQgQU44ODExSEJfQ1JDX1BNX01PTjMpO1xuIDUwMjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA1MDM6XHRcdFx0cmV0dXJuIHJldDtcbiA1MDQ6XHRcbiA1MDU6XHRcdHJldHVybiBlbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHBoeWRldik7XG4gNTA2Olx0fVxuIDUwNzpcdFxuIDUwODpcdHN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gNTA5Olx0e1xuIDUxMDpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuIDUxMTpcdFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XG4gNTEyOlx0XHRpbnQgcmV0O1xuIDUxMzpcdFxuIDUxNDpcdFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4gNTE1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDUxNjpcdFx0XHRyZXR1cm4gcmV0O1xuIDUxNzpcdFxuIDUxODpcdFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xuIDUxOTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA1MjA6XHRcdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTtcbiA1MjE6XHRcbiA1MjI6XHRcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXG4gNTIzOlx0XHRcdFx0XHRcdCBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCk7XG4gNTI0Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDUyNTpcdFx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4gNTI2Olx0XG4gNTI3Olx0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbiA1Mjg6XHRcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLFxuIDUyOTpcdFx0XHRcdFx0XHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcpO1xuIDUzMDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA1MzE6XHRcdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xuIDUzMjpcdFxuIDUzMzpcdFx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RNLCAgZncxKTtcbiA1MzQ6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNTM1Olx0XHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbiA1MzY6XHRcbiA1Mzc6XHRcdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3Mik7XG4gNTM4Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDUzOTpcdFx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4gNTQwOlx0XG4gNTQxOlx0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbiA1NDI6XHRcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCAwKTtcbiA1NDM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNTQ0Olx0XHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbiA1NDU6XHRcbiA1NDY6XHRcdHJldCA9IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkocGh5ZGV2KTtcbiA1NDc6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNTQ4Olx0XHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbiA1NDk6XHRcbiA1NTA6XHRcdGVuODgxMWhfcHJpbnRfZndfdmVyc2lvbihwaHlkZXYpO1xuIDU1MTpcdFxuIDU1MjpcdGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XG4gNTUzOlx0XHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XG4gNTU0Olx0XG4gNTU1Olx0ZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE6XG4gNTU2Olx0XHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XG4gNTU3Olx0XG4gNTU4Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDU1OTpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7TG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDU2MDpcdFxuIDU2MTpcdFx0cmV0dXJuIHJldDtcbiA1NjI6XHR9XG4gNTYzOlx0XG4gNTY0Olx0c3RhdGljIGludCBlbjg4MTFoX3Jlc3RhcnRfbWN1KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gNTY1Olx0e1xuIDU2NjpcdFx0aW50IHJldDtcbiA1Njc6XHRcbiA1Njg6XHRcdGlmIChwaHlfaWRfY29tcGFyZV9tb2RlbChwaHlkZXYtXHUwMDNlcGh5X2lkLCBBTjg4MTFIQl9QSFlfSUQpKSB7XG4gNTY5Olx0XHRcdHJldCA9IGFuODgxMWhiX21jdV9hc3NlcnQocGh5ZGV2KTtcbiA1NzA6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA1NzE6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDU3MjpcdFxuIDU3MzpcdFx0XHRyZXQgPSBhbjg4MTFoYl9tY3VfZGVhc3NlcnQocGh5ZGV2KTtcbiA1NzQ6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA1NzU6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDU3NjpcdFx0fVxuIDU3NzpcdFxuIDU3ODpcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbiA1Nzk6XHRcdFx0XHRcdFx0IEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUKTtcbiA1ODA6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNTgxOlx0XHRcdHJldHVybiByZXQ7XG4gNTgyOlx0XG4gNTgzOlx0XHRyZXR1cm4gZW44ODExaF93YWl0X21jdV9yZWFkeShwaHlkZXYpO1xuIDU4NDpcdH1cbiA1ODU6XHRcbiA1ODY6XHRzdGF0aWMgaW50IGFpcl9od19sZWRfb25fc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LCBib29sIG9uKVxuIDU4NzpcdHtcbiA1ODg6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiA1ODk6XHRcdGJvb2wgY2hhbmdlZDtcbiA1OTA6XHRcbiA1OTE6XHRcdGlmIChpbmRleCBcdTAwM2U9IEVOODgxMUhfTEVEX0NPVU5UKVxuIDU5MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1OTM6XHRcbiA1OTQ6XHRcdGlmIChvbilcbiA1OTU6XHRcdFx0Y2hhbmdlZCA9ICF0ZXN0X2FuZF9zZXRfYml0KEFJUl9QSFlfTEVEX1NUQVRFX0ZPUkNFX09OLFxuIDU5NjpcdFx0XHRcdFx0XHQgICAgXHUwMDI2cHJpdi1cdTAwM2VsZWRbaW5kZXhdLnN0YXRlKTtcbiA1OTc6XHRcdGVsc2VcbiA1OTg6XHRcdFx0Y2hhbmdlZCA9ICEhdGVzdF9hbmRfY2xlYXJfYml0KEFJUl9QSFlfTEVEX1NUQVRFX0ZPUkNFX09OLFxuIDU5OTpcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2cHJpdi1cdTAwM2VsZWRbaW5kZXhdLnN0YXRlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3NQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgUEhZIGRldmljZSByZWdpc3RyYXRpb24gYW5kIHByb2JpbmcgcHJvY2VzcyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBkcml2ZXIuIEtub3dpbmcgaG93IGl0JiMzOTtzIGhhbmRsZWQgaW4gdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGV2aWNlJiMzOTtzIGxpZmVjeWNsZS4gSSBleHBlY3QgdG8gZmluZCB0aGUgc3RhbmRhcmQgUEhZIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMsIGxpa2VseSBhIGBwaHlfZHJpdmVyYCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgYW5kIHRoZSBwcm9iZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgaW5pdGlhbCBjb25maWd1cmF0aW9uIGFuZCBsaW5rIGVzdGFibGlzaG1lbnQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzOyBob3cgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGludGVycnVwdHMsIHJlc2V0IHNlcXVlbmNlcywgYW5kIGFueSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGlzIHNwZWNpZmljIGRyaXZlciByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0XG4gNjAxOlx0XHRjaGFuZ2VkIHw9IChwcml2LVx1MDAzZWxlZFtpbmRleF0ucnVsZXMgIT0gMCk7XG4gNjAyOlx0XG4gNjAzOlx0XHQvKiBjbGVhciBuZXRkZXYgdHJpZ2dlciBydWxlcyBpbiBjYXNlIExFRF9PRkYgaGFzIGJlZW4gc2V0ICovXG4gNjA0Olx0XHRpZiAoIW9uKVxuIDYwNTpcdFx0XHRwcml2LVx1MDAzZWxlZFtpbmRleF0ucnVsZXMgPSAwO1xuIDYwNjpcdFxuIDYwNzpcdFx0aWYgKGNoYW5nZWQpXG4gNjA4Olx0XHRcdHJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxuIDYwOTpcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9MRURfT04oaW5kZXgpLFxuIDYxMDpcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9MRURfT05fTUFTSyxcbiA2MTE6XHRcdFx0XHRcdCAgICAgIG9uID8gQUlSX1BIWV9MRURfT05fRk9SQ0VfT04gOiAwKTtcbiA2MTI6XHRcbiA2MTM6XHRcdHJldHVybiAwO1xuIDYxNDpcdH1cbiA2MTU6XHRcbiA2MTY6XHRzdGF0aWMgaW50IGFpcl9od19sZWRfYmxpbmtfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuIDYxNzpcdFx0XHRcdFx0Ym9vbCBibGlua2luZylcbiA2MTg6XHR7XG4gNjE5Olx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4gNjIwOlx0XHRib29sIGNoYW5nZWQ7XG4gNjIxOlx0XG4gNjIyOlx0XHRpZiAoaW5kZXggXHUwMDNlPSBFTjg4MTFIX0xFRF9DT1VOVClcbiA2MjM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjI0Olx0XG4gNjI1Olx0XHRpZiAoYmxpbmtpbmcpXG4gNjI2Olx0XHRcdGNoYW5nZWQgPSAhdGVzdF9hbmRfc2V0X2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9CTElOSyxcbiA2Mjc6XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnByaXYtXHUwMDNlbGVkW2luZGV4XS5zdGF0ZSk7XG4gNjI4Olx0XHRlbHNlXG4gNjI5Olx0XHRcdGNoYW5nZWQgPSAhIXRlc3RfYW5kX2NsZWFyX2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9CTElOSyxcbiA2MzA6XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnByaXYtXHUwMDNlbGVkW2luZGV4XS5zdGF0ZSk7XG4gNjMxOlx0XG4gNjMyOlx0XHRjaGFuZ2VkIHw9IChwcml2LVx1MDAzZWxlZFtpbmRleF0ucnVsZXMgIT0gMCk7XG4gNjMzOlx0XG4gNjM0Olx0XHRpZiAoY2hhbmdlZClcbiA2MzU6XHRcdFx0cmV0dXJuIHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbiA2MzY6XHRcdFx0XHRcdCAgICAgQUlSX1BIWV9MRURfQkxJTksoaW5kZXgpLFxuIDYzNzpcdFx0XHRcdFx0ICAgICBibGlua2luZyA/XG4gNjM4Olx0XHRcdFx0XHQgICAgIEFJUl9QSFlfTEVEX0JMSU5LX0ZPUkNFX0JMSU5LIDogMCk7XG4gNjM5Olx0XHRlbHNlXG4gNjQwOlx0XHRcdHJldHVybiAwO1xuIDY0MTpcdH1cbiA2NDI6XHRcbiA2NDM6XHRzdGF0aWMgaW50IGFpcl9sZWRfYmxpbmtfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuIDY0NDpcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4gNjQ1Olx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXG4gNjQ2Olx0e1xuIDY0NzpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuIDY0ODpcdFx0Ym9vbCBibGlua2luZyA9IGZhbHNlO1xuIDY0OTpcdFx0aW50IGVycjtcbiA2NTA6XHRcbiA2NTE6XHRcdGlmIChpbmRleCBcdTAwM2U9IEVOODgxMUhfTEVEX0NPVU5UKVxuIDY1MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2NTM6XHRcbiA2NTQ6XHRcdGlmIChkZWxheV9vbiBcdTAwMjZcdTAwMjYgZGVsYXlfb2ZmIFx1MDAyNlx1MDAyNiAoKmRlbGF5X29uIFx1MDAzZSAwKSBcdTAwMjZcdTAwMjYgKCpkZWxheV9vZmYgXHUwMDNlIDApKSB7XG4gNjU1Olx0XHRcdGJsaW5raW5nID0gdHJ1ZTtcbiA2NTY6XHRcdFx0KmRlbGF5X29uID0gNTA7XG4gNjU3Olx0XHRcdCpkZWxheV9vZmYgPSA1MDtcbiA2NTg6XHRcdH1cbiA2NTk6XHRcbiA2NjA6XHRcdGVyciA9IGFpcl9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGJsaW5raW5nKTtcbiA2NjE6XHRcdGlmIChlcnIpXG4gNjYyOlx0XHRcdHJldHVybiBlcnI7XG4gNjYzOlx0XG4gNjY0Olx0XHQvKiBsZWQtYmxpbmsgc2V0LCBzbyBzd2l0Y2ggbGVkLW9uIG9mZiAqL1xuIDY2NTpcdFx0ZXJyID0gYWlyX2h3X2xlZF9vbl9zZXQocGh5ZGV2LCBpbmRleCwgZmFsc2UpO1xuIDY2NjpcdFx0aWYgKGVycilcbiA2Njc6XHRcdFx0cmV0dXJuIGVycjtcbiA2Njg6XHRcbiA2Njk6XHRcdC8qIGh3LWNvbnRyb2wgaXMgb2ZmKi9cbiA2NzA6XHRcdGlmICghIXRlc3RfYml0KEFJUl9QSFlfTEVEX1NUQVRFX0ZPUkNFX0JMSU5LLCBcdTAwMjZwcml2LVx1MDAzZWxlZFtpbmRleF0uc3RhdGUpKVxuIDY3MTpcdFx0XHRwcml2LVx1MDAzZWxlZFtpbmRleF0ucnVsZXMgPSAwO1xuIDY3MjpcdFxuIDY3MzpcdFx0cmV0dXJuIDA7XG4gNjc0Olx0fVxuIDY3NTpcdFxuIDY3NjpcdHN0YXRpYyBpbnQgYWlyX2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbiA2Nzc6XHRcdFx0XHRcdCAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSlcbiA2Nzg6XHR7XG4gNjc5Olx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4gNjgwOlx0XHRpbnQgZXJyO1xuIDY4MTpcdFxuIDY4MjpcdFx0aWYgKGluZGV4IFx1MDAzZT0gRU44ODExSF9MRURfQ09VTlQpXG4gNjgzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY4NDpcdFxuIDY4NTpcdFx0LyogbGVkLW9uIHNldCwgc28gc3dpdGNoIGxlZC1ibGluayBvZmYgKi9cbiA2ODY6XHRcdGVyciA9IGFpcl9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGZhbHNlKTtcbiA2ODc6XHRcdGlmIChlcnIpXG4gNjg4Olx0XHRcdHJldHVybiBlcnI7XG4gNjg5Olx0XG4gNjkwOlx0XHRlcnIgPSBhaXJfaHdfbGVkX29uX3NldChwaHlkZXYsIGluZGV4LCAodmFsdWUgIT0gTEVEX09GRikpO1xuIDY5MTpcdFx0aWYgKGVycilcbiA2OTI6XHRcdFx0cmV0dXJuIGVycjtcbiA2OTM6XHRcbiA2OTQ6XHRcdC8qIGh3LWNvbnRyb2wgaXMgb2ZmICovXG4gNjk1Olx0XHRpZiAoISF0ZXN0X2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9PTiwgXHUwMDI2cHJpdi1cdTAwM2VsZWRbaW5kZXhdLnN0YXRlKSlcbiA2OTY6XHRcdFx0cHJpdi1cdTAwM2VsZWRbaW5kZXhdLnJ1bGVzID0gMDtcbiA2OTc6XHRcbiA2OTg6XHRcdHJldHVybiAwO1xuIDY5OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM5NwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgY29kZToKCioqRGl2aW5nIEJhY2sgaW50byBgYWlyX2VuODgxMWguY2AqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgYmFjayBpbnRvIHRoZSB3ZWVkcyB3aXRoIGBhaXJfZW44ODExaC5jYC4gSSBuZWVkIHRvIHBpY2sgdXAgd2hlcmUgSSBsZWZ0IG9mZiDigJMgcHJvYmFibHkgc29tZSBsb3ctbGV2ZWwgZHJpdmVyIGRldGFpbHMsIG1heWJlIHJlZ2lzdGVyIGludGVyYWN0aW9ucywgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBlcnJvciBjaGVja2luZy4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSByZXN0IG9mIHRoZSBmaWxlIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGZsb3cuIEkgZXhwZWN0IHRoaXMgZmlsZSBpcyBnb2luZyB0byBiZSBwYWNrZWQgd2l0aCBjcml0aWNhbCBmdW5jdGlvbnMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMgaXQgaGFzIGFuZCBob3cgdGhvc2UgcGxheSBvdXQuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgbW9yZSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb21wb25lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHRcbiA3MDE6XHRzdGF0aWMgaW50IGFpcl9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4gNzAyOlx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKnJ1bGVzKVxuIDcwMzpcdHtcbiA3MDQ6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiA3MDU6XHRcbiA3MDY6XHRcdGlmIChpbmRleCBcdTAwM2U9IEVOODgxMUhfTEVEX0NPVU5UKVxuIDcwNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3MDg6XHRcbiA3MDk6XHRcdCpydWxlcyA9IHByaXYtXHUwMDNlbGVkW2luZGV4XS5ydWxlcztcbiA3MTA6XHRcbiA3MTE6XHRcdHJldHVybiAwO1xuIDcxMjpcdH07XG4gNzEzOlx0XG4gNzE0Olx0c3RhdGljIGludCBhaXJfbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuIDcxNTpcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHJ1bGVzKVxuIDcxNjpcdHtcbiA3MTc6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiA3MTg6XHRcdHUxNiBvbiA9IDAsIGJsaW5rID0gMDtcbiA3MTk6XHRcdGludCByZXQ7XG4gNzIwOlx0XG4gNzIxOlx0XHRpZiAoaW5kZXggXHUwMDNlPSBFTjg4MTFIX0xFRF9DT1VOVClcbiA3MjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzIzOlx0XG4gNzI0Olx0XHRwcml2LVx1MDAzZWxlZFtpbmRleF0ucnVsZXMgPSBydWxlcztcbiA3MjU6XHRcbiA3MjY6XHRcdGlmIChydWxlcyBcdTAwMjYgQklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSlcbiA3Mjc6XHRcdFx0b24gfD0gQUlSX1BIWV9MRURfT05fRkRYO1xuIDcyODpcdFxuIDcyOTpcdFx0aWYgKHJ1bGVzIFx1MDAyNiAoQklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApIHwgQklUKFRSSUdHRVJfTkVUREVWX0xJTkspKSlcbiA3MzA6XHRcdFx0b24gfD0gQUlSX1BIWV9MRURfT05fTElOSzEwO1xuIDczMTpcdFxuIDczMjpcdFx0aWYgKHJ1bGVzIFx1MDAyNiAoQklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSB8IEJJVChUUklHR0VSX05FVERFVl9MSU5LKSkpXG4gNzMzOlx0XHRcdG9uIHw9IEFJUl9QSFlfTEVEX09OX0xJTksxMDA7XG4gNzM0Olx0XG4gNzM1Olx0XHRpZiAocnVsZXMgXHUwMDI2IChCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSB8IEJJVChUUklHR0VSX05FVERFVl9MSU5LKSkpXG4gNzM2Olx0XHRcdG9uIHw9IEFJUl9QSFlfTEVEX09OX0xJTksxMDAwO1xuIDczNzpcdFxuIDczODpcdFx0aWYgKHJ1bGVzIFx1MDAyNiAoQklUKFRSSUdHRVJfTkVUREVWX0xJTktfMjUwMCkgfCBCSVQoVFJJR0dFUl9ORVRERVZfTElOSykpKVxuIDczOTpcdFx0XHRvbiB8PSBBSVJfUEhZX0xFRF9PTl9MSU5LMjUwMDtcbiA3NDA6XHRcbiA3NDE6XHRcdGlmIChydWxlcyBcdTAwMjYgQklUKFRSSUdHRVJfTkVUREVWX1JYKSkge1xuIDc0MjpcdFx0XHRibGluayB8PSBBSVJfUEhZX0xFRF9CTElOS18xMFJYICAgfFxuIDc0MzpcdFx0XHRcdCBBSVJfUEhZX0xFRF9CTElOS18xMDBSWCAgfFxuIDc0NDpcdFx0XHRcdCBBSVJfUEhZX0xFRF9CTElOS18xMDAwUlggfFxuIDc0NTpcdFx0XHRcdCBBSVJfUEhZX0xFRF9CTElOS18yNTAwUlg7XG4gNzQ2Olx0XHR9XG4gNzQ3Olx0XG4gNzQ4Olx0XHRpZiAocnVsZXMgXHUwMDI2IEJJVChUUklHR0VSX05FVERFVl9UWCkpIHtcbiA3NDk6XHRcdFx0YmxpbmsgfD0gQUlSX1BIWV9MRURfQkxJTktfMTBUWCAgIHxcbiA3NTA6XHRcdFx0XHQgQUlSX1BIWV9MRURfQkxJTktfMTAwVFggIHxcbiA3NTE6XHRcdFx0XHQgQUlSX1BIWV9MRURfQkxJTktfMTAwMFRYIHxcbiA3NTI6XHRcdFx0XHQgQUlSX1BIWV9MRURfQkxJTktfMjUwMFRYO1xuIDc1MzpcdFx0fVxuIDc1NDpcdFxuIDc1NTpcdFx0aWYgKGJsaW5rIHx8IG9uKSB7XG4gNzU2Olx0XHRcdC8qIHN3aXRjaCBody1jb250cm9sIG9uLCBzbyBsZWQtb24gYW5kIGxlZC1ibGluayBhcmUgb2ZmICovXG4gNzU3Olx0XHRcdGNsZWFyX2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9PTixcbiA3NTg6XHRcdFx0XHQgIFx1MDAyNnByaXYtXHUwMDNlbGVkW2luZGV4XS5zdGF0ZSk7XG4gNzU5Olx0XHRcdGNsZWFyX2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9CTElOSyxcbiA3NjA6XHRcdFx0XHQgIFx1MDAyNnByaXYtXHUwMDNlbGVkW2luZGV4XS5zdGF0ZSk7XG4gNzYxOlx0XHR9IGVsc2Uge1xuIDc2MjpcdFx0XHRwcml2LVx1MDAzZWxlZFtpbmRleF0ucnVsZXMgPSAwO1xuIDc2MzpcdFx0fVxuIDc2NDpcdFxuIDc2NTpcdFx0cmV0ID0gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgQUlSX1BIWV9MRURfT04oaW5kZXgpLFxuIDc2NjpcdFx0XHRcdCAgICAgQUlSX1BIWV9MRURfT05fTUFTSywgb24pO1xuIDc2NzpcdFxuIDc2ODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3Njk6XHRcdFx0cmV0dXJuIHJldDtcbiA3NzA6XHRcbiA3NzE6XHRcdHJldHVybiBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIEFJUl9QSFlfTEVEX0JMSU5LKGluZGV4KSxcbiA3NzI6XHRcdFx0XHQgICAgIGJsaW5rKTtcbiA3NzM6XHR9O1xuIDc3NDpcdFxuIDc3NTpcdHN0YXRpYyBpbnQgYWlyX2xlZF9pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LCB1OCBzdGF0ZSwgdTggcG9sKVxuIDc3NjpcdHtcbiA3Nzc6XHRcdGludCB2YWwgPSAwO1xuIDc3ODpcdFx0aW50IGVycjtcbiA3Nzk6XHRcbiA3ODA6XHRcdGlmIChpbmRleCBcdTAwM2U9IEVOODgxMUhfTEVEX0NPVU5UKVxuIDc4MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3ODI6XHRcbiA3ODM6XHRcdGlmIChzdGF0ZSA9PSBBSVJfTEVEX0VOQUJMRSlcbiA3ODQ6XHRcdFx0dmFsIHw9IEFJUl9QSFlfTEVEX09OX0VOQUJMRTtcbiA3ODU6XHRcdGVsc2VcbiA3ODY6XHRcdFx0dmFsIFx1MDAyNj0gfkFJUl9QSFlfTEVEX09OX0VOQUJMRTtcbiA3ODc6XHRcbiA3ODg6XHRcdGlmIChwb2wgPT0gQUlSX0FDVElWRV9ISUdIKVxuIDc4OTpcdFx0XHR2YWwgfD0gQUlSX1BIWV9MRURfT05fUE9MQVJJVFk7XG4gNzkwOlx0XHRlbHNlXG4gNzkxOlx0XHRcdHZhbCBcdTAwMjY9IH5BSVJfUEhZX0xFRF9PTl9QT0xBUklUWTtcbiA3OTI6XHRcbiA3OTM6XHRcdGVyciA9IHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIEFJUl9QSFlfTEVEX09OKGluZGV4KSxcbiA3OTQ6XHRcdFx0XHQgICAgIEFJUl9QSFlfTEVEX09OX0VOQUJMRSB8XG4gNzk1Olx0XHRcdFx0ICAgICBBSVJfUEhZX0xFRF9PTl9QT0xBUklUWSwgdmFsKTtcbiA3OTY6XHRcbiA3OTc6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNzk4Olx0XHRcdHJldHVybiBlcnI7XG4gNzk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjU2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgQmFjayBJbjogUmVzdW1pbmcgdGhlIGBhaXJfZW44ODExaC5jYCBEaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgYmFjayB0byBpdC4gV2UgbGVmdCBvZmYgc29tZXdoZXJlIGluIHRoZSBgYWlyX2VuODgxMWguY2AgZmlsZSwgYW5kIEkgbmVlZCB0byBjb250aW51ZSBteSBhbmFseXNpcyB0b3dhcmRzIHRoZSBlbmQgb2YgaXQuIE15IGZvY3VzLCBhcyBhbHdheXMsIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludHJpY2FjaWVzIG9mIHRoaXMgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbnRhbCBtYXAgb2YgdGhlIGNvZGUuIEkgYW50aWNpcGF0ZSBwb3RlbnRpYWxseSBpbXBvcnRhbnQgc2VjdGlvbnMgcmVsYXRpbmcgdG8gdGhlIG92ZXJhbGwgZnVuY3Rpb25hbGl0eSB3aWxsIHByZXNlbnQgdGhlbXNlbHZlcyBhcyBJIG5hdmlnYXRlIHRvd2FyZHMgdGhlIGZpbmFsIGxpbmVzIG9mIHRoZSBmaWxlLiBObyB0aW1lIGxpa2UgdGhlIHByZXNlbnQgdG8gZ2V0IHN0YXJ0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSB3YWl0aW5nIHRvIGJlIHVuY292ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMDpcdFx0cmV0dXJuIDA7XG4gODAxOlx0fVxuIDgwMjpcdFxuIDgwMzpcdHN0YXRpYyBpbnQgYWlyX2xlZHNfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgbnVtLCBpbnQgZHVyLCBpbnQgbW9kZSlcbiA4MDQ6XHR7XG4gODA1Olx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4gODA2Olx0XHRpbnQgcmV0LCBpO1xuIDgwNzpcdFxuIDgwODpcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBBSVJfUEhZX0xFRF9EVVJfQkxJTkssXG4gODA5Olx0XHRcdFx0ICAgIGR1cik7XG4gODEwOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDgxMTpcdFx0XHRyZXR1cm4gcmV0O1xuIDgxMjpcdFxuIDgxMzpcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBBSVJfUEhZX0xFRF9EVVJfT04sXG4gODE0Olx0XHRcdFx0ICAgIGR1ciBcdTAwM2VcdTAwM2UgMSk7XG4gODE1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDgxNjpcdFx0XHRyZXR1cm4gcmV0O1xuIDgxNzpcdFxuIDgxODpcdFx0c3dpdGNoIChtb2RlKSB7XG4gODE5Olx0XHRjYXNlIEFJUl9MRURfTU9ERV9ESVNBQkxFOlxuIDgyMDpcdFx0XHRyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBBSVJfUEhZX0xFRF9CQ1IsXG4gODIxOlx0XHRcdFx0XHQgICAgIEFJUl9QSFlfTEVEX0JDUl9FWFRfQ1RSTCB8XG4gODIyOlx0XHRcdFx0XHQgICAgIEFJUl9QSFlfTEVEX0JDUl9NT0RFX01BU0ssIDApO1xuIDgyMzpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDgyNDpcdFx0XHRcdHJldHVybiByZXQ7XG4gODI1Olx0XHRcdGJyZWFrO1xuIDgyNjpcdFx0Y2FzZSBBSVJfTEVEX01PREVfVVNFUl9ERUZJTkU6XG4gODI3Olx0XHRcdHJldCA9IHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIEFJUl9QSFlfTEVEX0JDUixcbiA4Mjg6XHRcdFx0XHRcdCAgICAgQUlSX1BIWV9MRURfQkNSX0VYVF9DVFJMIHxcbiA4Mjk6XHRcdFx0XHRcdCAgICAgQUlSX1BIWV9MRURfQkNSX0NMS19FTixcbiA4MzA6XHRcdFx0XHRcdCAgICAgQUlSX1BIWV9MRURfQkNSX0VYVF9DVFJMIHxcbiA4MzE6XHRcdFx0XHRcdCAgICAgQUlSX1BIWV9MRURfQkNSX0NMS19FTik7XG4gODMyOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gODMzOlx0XHRcdFx0cmV0dXJuIHJldDtcbiA4MzQ6XHRcdFx0YnJlYWs7XG4gODM1Olx0XHRkZWZhdWx0OlxuIDgzNjpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7TEVEIG1vZGUgJWQgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0OywgbW9kZSk7XG4gODM3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDgzODpcdFx0fVxuIDgzOTpcdFxuIDg0MDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtOyAmIzQzOyYjNDM7aSkge1xuIDg0MTpcdFx0XHRyZXQgPSBhaXJfbGVkX2luaXQocGh5ZGV2LCBpLCBBSVJfTEVEX0VOQUJMRSwgQUlSX0FDVElWRV9ISUdIKTtcbiA4NDI6XHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDg0MzpcdFx0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtMRUQlZCBpbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIGksIHJldCk7XG4gODQ0Olx0XHRcdFx0cmV0dXJuIHJldDtcbiA4NDU6XHRcdFx0fVxuIDg0NjpcdFx0XHRhaXJfbGVkX2h3X2NvbnRyb2xfc2V0KHBoeWRldiwgaSwgcHJpdi1cdTAwM2VsZWRbaV0ucnVsZXMpO1xuIDg0NzpcdFx0fVxuIDg0ODpcdFxuIDg0OTpcdFx0cmV0dXJuIDA7XG4gODUwOlx0fVxuIDg1MTpcdFxuIDg1MjpcdHN0YXRpYyBpbnQgZW44ODExaF9sZWRfaHdfaXNfc3VwcG9ydGVkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuIDg1MzpcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgcnVsZXMpXG4gODU0Olx0e1xuIDg1NTpcdFx0aWYgKGluZGV4IFx1MDAzZT0gRU44ODExSF9MRURfQ09VTlQpXG4gODU2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDg1NzpcdFxuIDg1ODpcdFx0LyogQWxsIGNvbWJpbmF0aW9ucyBvZiB0aGUgc3VwcG9ydGVkIHRyaWdnZXJzIGFyZSBhbGxvd2VkICovXG4gODU5Olx0XHRpZiAocnVsZXMgXHUwMDI2IH5lbjg4MTFoX2xlZF90cmlnKVxuIDg2MDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gODYxOlx0XG4gODYyOlx0XHRyZXR1cm4gMDtcbiA4NjM6XHR9O1xuIDg2NDpcdFxuIDg2NTpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGFuODgxMWhiX2Nsa19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodyxcbiA4NjY6XHRcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnQpXG4gODY3Olx0e1xuIDg2ODpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xuIDg2OTpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXHUwMDNlcGh5ZGV2O1xuIDg3MDpcdFx0dTMyIHBidXNfdmFsdWU7XG4gODcxOlx0XHRpbnQgcmV0O1xuIDg3MjpcdFxuIDg3MzpcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChwaHlkZXYsIEFOODgxMUhCX0hXVFJBUDIsIFx1MDAyNnBidXNfdmFsdWUpO1xuIDg3NDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA4NzU6XHRcdFx0cmV0dXJuIHJldDtcbiA4NzY6XHRcbiA4Nzc6XHRcdHJldHVybiAocGJ1c192YWx1ZSBcdTAwMjYgQU44ODExSEJfSFdUUkFQMl9DS08pID8gNTAwMDAwMDAgOiAyNTAwMDAwMDtcbiA4Nzg6XHR9XG4gODc5Olx0XG4gODgwOlx0c3RhdGljIGludCBhbjg4MTFoYl9jbGtfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KVxuIDg4MTpcdHtcbiA4ODI6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBjbGtfaHdfdG9fZW44ODExaF9wcml2KGh3KTtcbiA4ODM6XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBwcml2LVx1MDAzZXBoeWRldjtcbiA4ODQ6XHRcbiA4ODU6XHRcdHJldHVybiBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9DTEtfRFJWLFxuIDg4NjpcdFx0XHRcdFx0XHQgICBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLLFxuIDg4NzpcdFx0XHRcdFx0XHQgICBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLKTtcbiA4ODg6XHR9XG4gODg5Olx0XG4gODkwOlx0c3RhdGljIHZvaWQgYW44ODExaGJfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpXG4gODkxOlx0e1xuIDg5MjpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xuIDg5MzpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXHUwMDNlcGh5ZGV2O1xuIDg5NDpcdFxuIDg5NTpcdFx0YWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfQ0xLX0RSVixcbiA4OTY6XHRcdFx0XHRcdCAgICBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLLCAwKTtcbiA4OTc6XHR9XG4gODk4Olx0XG4gODk5Olx0c3RhdGljIGludCBhbjg4MTFoYl9jbGtfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3ICpodylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMDkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byB0aGUgUEhZIERyaXZlcioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbW92aW5nIG9uLiBXZSYjMzk7dmUgZ290IHRoZSBiYXNpY3MgZG93biwgbm93IGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRoaW5nICpyZWFsbHkqIHdvcmtzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgYHBoeV9kcml2ZXJgIHN0cnVjdHVyZSBhbmQgdGhvc2Uga2V5IGZ1bmN0aW9uczogdGhlIGBwcm9iZWAgYW5kIHRoZSBgY29uZmlnX2luaXRgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgcGllY2VzLCB0aGUgYmFja2JvbmUgb2YgaG93IGEgUEhZIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIHN5c3RlbSwgYW5kIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCBhbmQgYnJvdWdodCBvbmxpbmUuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZ2l2ZSB1cyBhIHZlcnkgZ29vZCBncmFzcCBvZiB0aGUgd2hvbGUgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBoYW5kbGUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTAwOlx0e1xuIDkwMTpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xuIDkwMjpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXHUwMDNlcGh5ZGV2O1xuIDkwMzpcdFx0dTMyIHBidXNfdmFsdWU7XG4gOTA0Olx0XHRpbnQgcmV0O1xuIDkwNTpcdFxuIDkwNjpcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChwaHlkZXYsIEFOODgxMUhCX0NMS19EUlYsIFx1MDAyNnBidXNfdmFsdWUpO1xuIDkwNzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA5MDg6XHRcdFx0cmV0dXJuIHJldDtcbiA5MDk6XHRcbiA5MTA6XHRcdHJldHVybiAocGJ1c192YWx1ZSBcdTAwMjYgQU44ODExSEJfQ0xLX0RSVl9DS09fTUFTSyk7XG4gOTExOlx0fVxuIDkxMjpcdFxuIDkxMzpcdHN0YXRpYyBpbnQgYW44ODExaGJfY2xrX3NhdmVfY29udGV4dChzdHJ1Y3QgY2xrX2h3ICpodylcbiA5MTQ6XHR7XG4gOTE1Olx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XG4gOTE2Olx0XG4gOTE3Olx0XHRwcml2LVx1MDAzZWNrb19pc19lbmFibGVkID0gYW44ODExaGJfY2xrX2lzX2VuYWJsZWQoaHcpO1xuIDkxODpcdFxuIDkxOTpcdFx0cmV0dXJuIDA7XG4gOTIwOlx0fVxuIDkyMTpcdFxuIDkyMjpcdHN0YXRpYyB2b2lkIGFuODgxMWhiX2Nsa19yZXN0b3JlX2NvbnRleHQoc3RydWN0IGNsa19odyAqaHcpXG4gOTIzOlx0e1xuIDkyNDpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xuIDkyNTpcdFxuIDkyNjpcdFx0aWYgKCFwcml2LVx1MDAzZWNrb19pc19lbmFibGVkKVxuIDkyNzpcdFx0XHRhbjg4MTFoYl9jbGtfZGlzYWJsZShodyk7XG4gOTI4Olx0fVxuIDkyOTpcdFxuIDkzMDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBhbjg4MTFoYl9jbGtfb3BzID0ge1xuIDkzMTpcdFx0LnJlY2FsY19yYXRlXHRcdD0gYW44ODExaGJfY2xrX3JlY2FsY19yYXRlLFxuIDkzMjpcdFx0LmVuYWJsZVx0XHRcdD0gYW44ODExaGJfY2xrX2VuYWJsZSxcbiA5MzM6XHRcdC5kaXNhYmxlXHRcdD0gYW44ODExaGJfY2xrX2Rpc2FibGUsXG4gOTM0Olx0XHQuaXNfZW5hYmxlZFx0XHQ9IGFuODgxMWhiX2Nsa19pc19lbmFibGVkLFxuIDkzNTpcdFx0LnNhdmVfY29udGV4dFx0XHQ9IGFuODgxMWhiX2Nsa19zYXZlX2NvbnRleHQsXG4gOTM2Olx0XHQucmVzdG9yZV9jb250ZXh0XHQ9IGFuODgxMWhiX2Nsa19yZXN0b3JlX2NvbnRleHQsXG4gOTM3Olx0fTtcbiA5Mzg6XHRcbiA5Mzk6XHRzdGF0aWMgaW50IGFuODgxMWhiX2Nsa19wcm92aWRlcl9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBjbGtfaHcgKmh3KVxuIDk0MDpcdHtcbiA5NDE6XHRcdHN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7XG4gOTQyOlx0XHRpbnQgcmV0O1xuIDk0MzpcdFxuIDk0NDpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DT01NT05fQ0xLKSlcbiA5NDU6XHRcdFx0cmV0dXJuIDA7XG4gOTQ2Olx0XG4gOTQ3Olx0XHRpbml0Lm5hbWUgPSBkZXZtX2thc3ByaW50ZihkZXYsIEdGUF9LRVJORUwsIFwmIzM0OyVzLWNrb1wmIzM0OyxcbiA5NDg6XHRcdFx0XHRcdCAgIGZ3bm9kZV9nZXRfbmFtZShkZXZfZndub2RlKGRldikpKTtcbiA5NDk6XHRcdGlmICghaW5pdC5uYW1lKVxuIDk1MDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5NTE6XHRcbiA5NTI6XHRcdGluaXQub3BzID0gXHUwMDI2YW44ODExaGJfY2xrX29wcztcbiA5NTM6XHRcdGluaXQuZmxhZ3MgPSAwO1xuIDk1NDpcdFx0aW5pdC5udW1fcGFyZW50cyA9IDA7XG4gOTU1Olx0XHRody1cdTAwM2Vpbml0ID0gXHUwMDI2aW5pdDtcbiA5NTY6XHRcbiA5NTc6XHRcdHJldCA9IGRldm1fY2xrX2h3X3JlZ2lzdGVyKGRldiwgaHcpO1xuIDk1ODpcdFx0aWYgKHJldClcbiA5NTk6XHRcdFx0cmV0dXJuIHJldDtcbiA5NjA6XHRcbiA5NjE6XHRcdHJldHVybiBkZXZtX29mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LCBvZl9jbGtfaHdfc2ltcGxlX2dldCwgaHcpO1xuIDk2MjpcdH1cbiA5NjM6XHRcbiA5NjQ6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBlbjg4MTFoX2Nsa19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodyxcbiA5NjU6XHRcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHBhcmVudClcbiA5NjY6XHR7XG4gOTY3Olx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XG4gOTY4Olx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi1cdTAwM2VwaHlkZXY7XG4gOTY5Olx0XHR1MzIgcGJ1c192YWx1ZTtcbiA5NzA6XHRcdGludCByZXQ7XG4gOTcxOlx0XG4gOTcyOlx0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgRU44ODExSF9IV1RSQVAxLCBcdTAwMjZwYnVzX3ZhbHVlKTtcbiA5NzM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gOTc0Olx0XHRcdHJldHVybiByZXQ7XG4gOTc1Olx0XG4gOTc2Olx0XHRyZXR1cm4gKHBidXNfdmFsdWUgXHUwMDI2IEVOODgxMUhfSFdUUkFQMV9DS08pID8gNTAwMDAwMDAgOiAyNTAwMDAwMDtcbiA5Nzc6XHR9XG4gOTc4Olx0XG4gOTc5Olx0c3RhdGljIGludCBlbjg4MTFoX2Nsa19lbmFibGUoc3RydWN0IGNsa19odyAqaHcpXG4gOTgwOlx0e1xuIDk4MTpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xuIDk4MjpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXHUwMDNlcGh5ZGV2O1xuIDk4MzpcdFxuIDk4NDpcdFx0cmV0dXJuIGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfQ0xLX0NHTSxcbiA5ODU6XHRcdFx0XHRcdFx0ICAgRU44ODExSF9DTEtfQ0dNX0NLTyxcbiA5ODY6XHRcdFx0XHRcdFx0ICAgRU44ODExSF9DTEtfQ0dNX0NLTyk7XG4gOTg3Olx0fVxuIDk4ODpcdFxuIDk4OTpcdHN0YXRpYyB2b2lkIGVuODgxMWhfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpXG4gOTkwOlx0e1xuIDk5MTpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xuIDk5MjpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXHUwMDNlcGh5ZGV2O1xuIDk5MzpcdFxuIDk5NDpcdFx0YWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9DTEtfQ0dNLFxuIDk5NTpcdFx0XHRcdFx0ICAgIEVOODgxMUhfQ0xLX0NHTV9DS08sIDApO1xuIDk5NjpcdH1cbiA5OTc6XHRcbiA5OTg6XHRzdGF0aWMgaW50IGVuODgxMWhfY2xrX2lzX2VuYWJsZWQoc3RydWN0IGNsa19odyAqaHcpXG4gOTk5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE4OQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGFpcl9lbjg4MTFoLmNgIC0gVXAgdG8gTGluZSAxMjAwKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZXN0IG9mIGBhaXJfZW44ODExaC5jYC4gVGhhdCBmaWxlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBzeXN0ZW0gd29ya3MsIGFuZCBJJiMzOTttIGd1ZXNzaW5nIHVwIHRvIGxpbmUgMTIwMCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBjaHVuayB0byB3b3JrIHdpdGguIEkgd2FudCB0byBzZWUgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCBhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgcGVyaGFwcyBzb21lIGludGVycnVwdCBoYW5kbGVycyBvciBETUEgc2V0dXAsIGFuZCBkZWZpbml0ZWx5IHNvbWUgY29yZSBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgc2VjdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gYW5kIHBvc3NpYmx5IHRoZSBiYXNpYyBpbnRlcmZhY2Ugd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgb3IgbWF5YmUgdGhlIGNvcmUgbmV0d29yayBoYW5kbGluZy4gTGV0JiMzOTtzIHNlZSBpZiBteSBpbml0aWFsIGFzc3VtcHRpb25zIGhvbGQgd2F0ZXIgb25jZSBJIGdldCBpbnRvIGl0LiBUaGUgZ29hbCBpcyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhpcyBjcml0aWNhbCBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAwOlx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XG4xMDAxOlx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi1cdTAwM2VwaHlkZXY7XG4xMDAyOlx0XHR1MzIgcGJ1c192YWx1ZTtcbjEwMDM6XHRcdGludCByZXQ7XG4xMDA0Olx0XG4xMDA1Olx0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgRU44ODExSF9DTEtfQ0dNLCBcdTAwMjZwYnVzX3ZhbHVlKTtcbjEwMDY6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMDA3Olx0XHRcdHJldHVybiByZXQ7XG4xMDA4Olx0XG4xMDA5Olx0XHRyZXR1cm4gKHBidXNfdmFsdWUgXHUwMDI2IEVOODgxMUhfQ0xLX0NHTV9DS08pO1xuMTAxMDpcdH1cbjEwMTE6XHRcbjEwMTI6XHRzdGF0aWMgaW50IGVuODgxMWhfY2xrX3NhdmVfY29udGV4dChzdHJ1Y3QgY2xrX2h3ICpodylcbjEwMTM6XHR7XG4xMDE0Olx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XG4xMDE1Olx0XG4xMDE2Olx0XHRwcml2LVx1MDAzZWNrb19pc19lbmFibGVkID0gZW44ODExaF9jbGtfaXNfZW5hYmxlZChodyk7XG4xMDE3Olx0XG4xMDE4Olx0XHRyZXR1cm4gMDtcbjEwMTk6XHR9XG4xMDIwOlx0XG4xMDIxOlx0c3RhdGljIHZvaWQgZW44ODExaF9jbGtfcmVzdG9yZV9jb250ZXh0KHN0cnVjdCBjbGtfaHcgKmh3KVxuMTAyMjpcdHtcbjEwMjM6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBjbGtfaHdfdG9fZW44ODExaF9wcml2KGh3KTtcbjEwMjQ6XHRcbjEwMjU6XHRcdGlmICghcHJpdi1cdTAwM2Vja29faXNfZW5hYmxlZClcbjEwMjY6XHRcdFx0ZW44ODExaF9jbGtfZGlzYWJsZShodyk7XG4xMDI3Olx0fVxuMTAyODpcdFxuMTAyOTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBlbjg4MTFoX2Nsa19vcHMgPSB7XG4xMDMwOlx0XHQucmVjYWxjX3JhdGVcdFx0PSBlbjg4MTFoX2Nsa19yZWNhbGNfcmF0ZSxcbjEwMzE6XHRcdC5lbmFibGVcdFx0XHQ9IGVuODgxMWhfY2xrX2VuYWJsZSxcbjEwMzI6XHRcdC5kaXNhYmxlXHRcdD0gZW44ODExaF9jbGtfZGlzYWJsZSxcbjEwMzM6XHRcdC5pc19lbmFibGVkXHRcdD0gZW44ODExaF9jbGtfaXNfZW5hYmxlZCxcbjEwMzQ6XHRcdC5zYXZlX2NvbnRleHRcdFx0PSBlbjg4MTFoX2Nsa19zYXZlX2NvbnRleHQsXG4xMDM1Olx0XHQucmVzdG9yZV9jb250ZXh0XHQ9IGVuODgxMWhfY2xrX3Jlc3RvcmVfY29udGV4dCxcbjEwMzY6XHR9O1xuMTAzNzpcdFxuMTAzODpcdHN0YXRpYyBpbnQgZW44ODExaF9jbGtfcHJvdmlkZXJfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgY2xrX2h3ICpodylcbjEwMzk6XHR7XG4xMDQwOlx0XHRzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0O1xuMTA0MTpcdFx0aW50IHJldDtcbjEwNDI6XHRcbjEwNDM6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQ09NTU9OX0NMSykpXG4xMDQ0Olx0XHRcdHJldHVybiAwO1xuMTA0NTpcdFxuMTA0NjpcdFx0aW5pdC5uYW1lID0gZGV2bV9rYXNwcmludGYoZGV2LCBHRlBfS0VSTkVMLCBcJiMzNDslcy1ja29cJiMzNDssXG4xMDQ3Olx0XHRcdFx0XHQgICBmd25vZGVfZ2V0X25hbWUoZGV2X2Z3bm9kZShkZXYpKSk7XG4xMDQ4Olx0XHRpZiAoIWluaXQubmFtZSlcbjEwNDk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMDUwOlx0XG4xMDUxOlx0XHRpbml0Lm9wcyA9IFx1MDAyNmVuODgxMWhfY2xrX29wcztcbjEwNTI6XHRcdGluaXQuZmxhZ3MgPSAwO1xuMTA1MzpcdFx0aW5pdC5udW1fcGFyZW50cyA9IDA7XG4xMDU0Olx0XHRody1cdTAwM2Vpbml0ID0gXHUwMDI2aW5pdDtcbjEwNTU6XHRcbjEwNTY6XHRcdHJldCA9IGRldm1fY2xrX2h3X3JlZ2lzdGVyKGRldiwgaHcpO1xuMTA1NzpcdFx0aWYgKHJldClcbjEwNTg6XHRcdFx0cmV0dXJuIHJldDtcbjEwNTk6XHRcbjEwNjA6XHRcdHJldHVybiBkZXZtX29mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LCBvZl9jbGtfaHdfc2ltcGxlX2dldCwgaHcpO1xuMTA2MTpcdH1cbjEwNjI6XHRcbjEwNjM6XHRzdGF0aWMgaW50IGVuODgxMWhfbGVkc19zZXR1cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTA2NDpcdHtcbjEwNjU6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbjEwNjY6XHRcdGludCByZXQ7XG4xMDY3Olx0XG4xMDY4Olx0XHRwcml2LVx1MDAzZWxlZFswXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMDtcbjEwNjk6XHRcdHByaXYtXHUwMDNlbGVkWzFdLnJ1bGVzID0gQUlSX0RFRkFVTFRfVFJJR0dFUl9MRUQxO1xuMTA3MDpcdFx0cHJpdi1cdTAwM2VsZWRbMl0ucnVsZXMgPSBBSVJfREVGQVVMVF9UUklHR0VSX0xFRDI7XG4xMDcxOlx0XG4xMDcyOlx0XHRyZXQgPSBhaXJfbGVkc19pbml0KHBoeWRldiwgRU44ODExSF9MRURfQ09VTlQsIEFJUl9QSFlfTEVEX0RVUixcbjEwNzM6XHRcdFx0XHQgICAgQUlSX0xFRF9NT0RFX0RJU0FCTEUpO1xuMTA3NDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEwNzU6XHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0ZhaWxlZCB0byBkaXNhYmxlIGxlZHM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTA3NjpcdFxuMTA3NzpcdFx0cmV0dXJuIHJldDtcbjEwNzg6XHR9XG4xMDc5Olx0XG4xMDgwOlx0c3RhdGljIGludCBhbjg4MTFoYl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTA4MTpcdHtcbjEwODI6XHRcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbjEwODM6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXY7XG4xMDg0Olx0XHRpbnQgcmV0O1xuMTA4NTpcdFxuMTA4NjpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcbjEwODc6XHRcdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4xMDg4Olx0XHRpZiAoIXByaXYpXG4xMDg5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTA5MDpcdFx0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuMTA5MTpcdFxuMTA5MjpcdFx0LypcbjEwOTM6XHRcdCAqIFRoZSBBTjg4MTFIQiBQSFkgYWRkcmVzcyBpcyByZXN0cmljdGVkIHRvIDgtMTUgKGRlY2ltYWwpLFxuMTA5NDpcdFx0ICogZGVwZW5kaW5nIG9uIHRoZSBib2FyZCBoYXJkd2FyZSBzdHJhcHBpbmcuXG4xMDk1Olx0XHQgKiBUaGlzIG1lYW5zIHRoZSBQQlVTIGFkZHJlc3MgaXMgb25seSBpbiB0aGUgcmFuZ2UgMTYtMjEgKGRlY2ltYWwpLFxuMTA5NjpcdFx0ICogc28gd2UgZG8gbm90IG5lZWQgdG8gaGFuZGxlIHRoZSBjYXNlXG4xMDk3Olx0XHQgKiB3aGVyZSB0aGUgUEJVUyBhZGRyZXNzIGV4Y2VlZHMgMzEgKGRlY2ltYWwpLlxuMTA5ODpcdFx0ICovXG4xMDk5Olx0XHRtZGlvZGV2ID0gbWRpb19kZXZpY2VfY3JlYXRlKHBoeWRldi1cdTAwM2VtZGlvLmJ1cyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNTMKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgc28gSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgcmVzdCBvZiBgYWlyX2VuODgxMWguY2AgYWxsIHRoZSB3YXkgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gTm8gcG9pbnQganVzdCBmb2N1c2luZyBvbiBhIGZyYWdtZW50LCBnb3R0YSBzZWUgdGhlIHdob2xlIGNvbnRleHQgaGVyZS4gTGV0JiMzOTtzIGdldCB0aGUgd2hvbGUgdGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTAwOlx0XHRcdFx0XHQgICAgIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgJiM0MzsgRU44ODExSF9QQlVTX0FERFJfT0ZGUyk7XG4xMTAxOlx0XHRpZiAoSVNfRVJSKG1kaW9kZXYpKVxuMTEwMjpcdFx0XHRyZXR1cm4gUFRSX0VSUihtZGlvZGV2KTtcbjExMDM6XHRcbjExMDQ6XHRcdHJldCA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKG1kaW9kZXYpO1xuMTEwNTpcdFx0aWYgKHJldClcbjExMDY6XHRcdFx0Z290byBlcnJfZGV2X2ZyZWU7XG4xMTA3Olx0XG4xMTA4Olx0XHRwcml2LVx1MDAzZXBidXNkZXYgPSBtZGlvZGV2O1xuMTEwOTpcdFxuMTExMDpcdFx0cmV0ID0gYW44ODExaGJfbG9hZF9maXJtd2FyZShwaHlkZXYpO1xuMTExMTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTExMjpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7TG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTExMzpcdFx0XHRnb3RvIGVycl9kZXZfY3JlYXRlO1xuMTExNDpcdFx0fVxuMTExNTpcdFxuMTExNjpcdFx0ZW44ODExaF9wcmludF9md192ZXJzaW9uKHBoeWRldik7XG4xMTE3Olx0XG4xMTE4Olx0XHQvKiBtY3UgaGFzIGp1c3QgcmVzdGFydGVkIGFmdGVyIGZpcm13YXJlIGxvYWQgKi9cbjExMTk6XHRcdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcbjExMjA6XHRcbjExMjE6XHRcdC8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi9cbjExMjI6XHRcdHBoeWRldi1cdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xuMTEyMzpcdFxuMTEyNDpcdFx0cmV0ID0gZW44ODExaF9sZWRzX3NldHVwKHBoeWRldik7XG4xMTI1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTEyNjpcdFx0XHRnb3RvIGVycl9kZXZfY3JlYXRlO1xuMTEyNzpcdFxuMTEyODpcdFx0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4xMTI5Olx0XHQvKiBDby1DbG9jayBPdXRwdXQgKi9cbjExMzA6XHRcdHJldCA9IGFuODgxMWhiX2Nsa19wcm92aWRlcl9zZXR1cChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFx1MDAyNnByaXYtXHUwMDNlaHcpO1xuMTEzMTpcdFx0aWYgKHJldClcbjExMzI6XHRcdFx0Z290byBlcnJfZGV2X2NyZWF0ZTtcbjExMzM6XHRcbjExMzQ6XHRcdC8qIENvbmZpZ3VyZSBsZWQgZ3BpbyBwaW5zIGFzIG91dHB1dCAqL1xuMTEzNTpcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19PVVRQVVQsXG4xMTM2Olx0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1LFxuMTEzNzpcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSk7XG4xMTM4Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTEzOTpcdFx0XHRnb3RvIGVycl9kZXZfY3JlYXRlO1xuMTE0MDpcdFxuMTE0MTpcdFx0cmV0dXJuIDA7XG4xMTQyOlx0XG4xMTQzOlx0ZXJyX2Rldl9jcmVhdGU6XG4xMTQ0Olx0XHRtZGlvX2RldmljZV9yZW1vdmUobWRpb2Rldik7XG4xMTQ1Olx0XG4xMTQ2Olx0ZXJyX2Rldl9mcmVlOlxuMTE0NzpcdFx0bWRpb19kZXZpY2VfZnJlZShtZGlvZGV2KTtcbjExNDg6XHRcdHJldHVybiByZXQ7XG4xMTQ5Olx0fVxuMTE1MDpcdFxuMTE1MTpcdHN0YXRpYyBpbnQgZW44ODExaF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTE1MjpcdHtcbjExNTM6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXY7XG4xMTU0Olx0XHRpbnQgcmV0O1xuMTE1NTpcdFxuMTE1NjpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcbjExNTc6XHRcdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4xMTU4Olx0XHRpZiAoIXByaXYpXG4xMTU5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTE2MDpcdFx0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuMTE2MTpcdFxuMTE2MjpcdFx0cmV0ID0gZW44ODExaF9sb2FkX2Zpcm13YXJlKHBoeWRldik7XG4xMTYzOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTE2NDpcdFx0XHRyZXR1cm4gcmV0O1xuMTE2NTpcdFxuMTE2NjpcdFx0LyogbWN1IGhhcyBqdXN0IHJlc3RhcnRlZCBhZnRlciBmaXJtd2FyZSBsb2FkICovXG4xMTY3Olx0XHRwcml2LVx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gZmFsc2U7XG4xMTY4Olx0XG4xMTY5Olx0XHQvKiBNRElPX0RFVlMxLzIgZW1wdHksIHNvIHNldCBtbWRzX3ByZXNlbnQgYml0cyBoZXJlICovXG4xMTcwOlx0XHRwaHlkZXYtXHUwMDNlYzQ1X2lkcy5tbWRzX3ByZXNlbnQgfD0gTURJT19ERVZTX1BNQVBNRCB8IE1ESU9fREVWU19BTjtcbjExNzE6XHRcbjExNzI6XHRcdHJldCA9IGVuODgxMWhfbGVkc19zZXR1cChwaHlkZXYpO1xuMTE3MzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjExNzQ6XHRcdFx0cmV0dXJuIHJldDtcbjExNzU6XHRcbjExNzY6XHRcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuMTE3NzpcdFx0LyogQ28tQ2xvY2sgT3V0cHV0ICovXG4xMTc4Olx0XHRyZXQgPSBlbjg4MTFoX2Nsa19wcm92aWRlcl9zZXR1cChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFx1MDAyNnByaXYtXHUwMDNlaHcpO1xuMTE3OTpcdFx0aWYgKHJldClcbjExODA6XHRcdFx0cmV0dXJuIHJldDtcbjExODE6XHRcbjExODI6XHRcdHJldHVybiAwO1xuMTE4MzpcdH1cbjExODQ6XHRcbjExODU6XHRzdGF0aWMgaW50IGFuODgxMWhiX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjExODY6XHR7XG4xMTg3Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4xMTg4Olx0XHR1MzIgcGJ1c192YWx1ZSA9IDA7XG4xMTg5Olx0XHR1bnNpZ25lZCBpbnQgcG9sO1xuMTE5MDpcdFx0aW50IHJldDtcbjExOTE6XHRcbjExOTI6XHRcdHJldCA9IHBoeV9nZXRfbWFudWFsX3J4X3BvbGFyaXR5KGRldl9md25vZGUoZGV2KSxcbjExOTM6XHRcdFx0XHRcdFx0IHBoeV9tb2RlcyhwaHlkZXYtXHUwMDNlaW50ZXJmYWNlKSwgXHUwMDI2cG9sKTtcbjExOTQ6XHRcdGlmIChyZXQpXG4xMTk1Olx0XHRcdHJldHVybiByZXQ7XG4xMTk2Olx0XHRpZiAocG9sID09IFBIWV9QT0xfTk9STUFMKVxuMTE5NzpcdFx0XHRwYnVzX3ZhbHVlIHw9IEFOODgxMUhCX1JYX1BPTEFSSVRZX05PUk1BTDtcbjExOTg6XHRcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX1JYX1BPTEFSSVRZLFxuMTE5OTpcdFx0XHRcdFx0XHQgIEFOODgxMUhCX1JYX1BPTEFSSVRZX05PUk1BTCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NzgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgc28gSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgcmVzdCBvZiBgYWlyX2VuODgxMWguY2AgYWxsIHRoZSB3YXkgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gTm8gcG9pbnQganVzdCBmb2N1c2luZyBvbiBhIGZyYWdtZW50LCBnb3R0YSBzZWUgdGhlIHdob2xlIGNvbnRleHQgaGVyZS4gTGV0JiMzOTtzIGdldCB0aGUgd2hvbGUgdGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAwOlx0XHRcdFx0XHRcdCAgcGJ1c192YWx1ZSk7XG4xMjAxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTIwMjpcdFx0XHRyZXR1cm4gcmV0O1xuMTIwMzpcdFxuMTIwNDpcdFx0cmV0ID0gcGh5X2dldF9tYW51YWxfdHhfcG9sYXJpdHkoZGV2X2Z3bm9kZShkZXYpLFxuMTIwNTpcdFx0XHRcdFx0XHQgcGh5X21vZGVzKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpLCBcdTAwMjZwb2wpO1xuMTIwNjpcdFx0aWYgKHJldClcbjEyMDc6XHRcdFx0cmV0dXJuIHJldDtcbjEyMDg6XHRcdHBidXNfdmFsdWUgPSAwO1xuMTIwOTpcdFx0aWYgKHBvbCA9PSBQSFlfUE9MX05PUk1BTClcbjEyMTA6XHRcdFx0cGJ1c192YWx1ZSB8PSBBTjg4MTFIQl9UWF9QT0xBUklUWV9OT1JNQUw7XG4xMjExOlx0XHRyZXR1cm4gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfVFhfUE9MQVJJVFksXG4xMjEyOlx0XHRcdFx0XHRcdCAgIEFOODgxMUhCX1RYX1BPTEFSSVRZX05PUk1BTCxcbjEyMTM6XHRcdFx0XHRcdFx0ICAgcGJ1c192YWx1ZSk7XG4xMjE0Olx0fVxuMTIxNTpcdFxuMTIxNjpcdHN0YXRpYyBpbnQgZW44ODExaF9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMjE3Olx0e1xuMTIxODpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuMTIxOTpcdFx0dW5zaWduZWQgaW50IHBvbCwgZGVmYXVsdF9wb2w7XG4xMjIwOlx0XHR1MzIgcGJ1c192YWx1ZSA9IDA7XG4xMjIxOlx0XHRpbnQgcmV0O1xuMTIyMjpcdFxuMTIyMzpcdFx0ZGVmYXVsdF9wb2wgPSBQSFlfUE9MX05PUk1BTDtcbjEyMjQ6XHRcdGlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgXCYjMzQ7YWlyb2hhLHBuc3dhcC1yeFwmIzM0OykpXG4xMjI1Olx0XHRcdGRlZmF1bHRfcG9sID0gUEhZX1BPTF9JTlZFUlQ7XG4xMjI2Olx0XG4xMjI3Olx0XHRyZXQgPSBwaHlfZ2V0X3J4X3BvbGFyaXR5KGRldl9md25vZGUoZGV2KSwgcGh5X21vZGVzKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpLFxuMTIyODpcdFx0XHRcdFx0ICBCSVQoUEhZX1BPTF9OT1JNQUwpIHwgQklUKFBIWV9QT0xfSU5WRVJUKSxcbjEyMjk6XHRcdFx0XHRcdCAgZGVmYXVsdF9wb2wsIFx1MDAyNnBvbCk7XG4xMjMwOlx0XHRpZiAocmV0KVxuMTIzMTpcdFx0XHRyZXR1cm4gcmV0O1xuMTIzMjpcdFx0aWYgKHBvbCA9PSBQSFlfUE9MX0lOVkVSVClcbjEyMzM6XHRcdFx0cGJ1c192YWx1ZSB8PSBFTjg4MTFIX1BPTEFSSVRZX1JYX1JFVkVSU0U7XG4xMjM0Olx0XG4xMjM1Olx0XHRkZWZhdWx0X3BvbCA9IFBIWV9QT0xfTk9STUFMO1xuMTIzNjpcdFx0aWYgKGRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCBcJiMzNDthaXJvaGEscG5zd2FwLXR4XCYjMzQ7KSlcbjEyMzc6XHRcdFx0ZGVmYXVsdF9wb2wgPSBQSFlfUE9MX0lOVkVSVDtcbjEyMzg6XHRcbjEyMzk6XHRcdHJldCA9IHBoeV9nZXRfdHhfcG9sYXJpdHkoZGV2X2Z3bm9kZShkZXYpLCBwaHlfbW9kZXMocGh5ZGV2LVx1MDAzZWludGVyZmFjZSksXG4xMjQwOlx0XHRcdFx0XHQgIEJJVChQSFlfUE9MX05PUk1BTCkgfCBCSVQoUEhZX1BPTF9JTlZFUlQpLFxuMTI0MTpcdFx0XHRcdFx0ICBkZWZhdWx0X3BvbCwgXHUwMDI2cG9sKTtcbjEyNDI6XHRcdGlmIChyZXQpXG4xMjQzOlx0XHRcdHJldHVybiByZXQ7XG4xMjQ0Olx0XHRpZiAocG9sID09IFBIWV9QT0xfTk9STUFMKVxuMTI0NTpcdFx0XHRwYnVzX3ZhbHVlIHw9IEVOODgxMUhfUE9MQVJJVFlfVFhfTk9STUFMO1xuMTI0NjpcdFxuMTI0NzpcdFx0cmV0dXJuIGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfUE9MQVJJVFksXG4xMjQ4Olx0XHRcdFx0XHRcdCAgIEVOODgxMUhfUE9MQVJJVFlfUlhfUkVWRVJTRSB8XG4xMjQ5Olx0XHRcdFx0XHRcdCAgIEVOODgxMUhfUE9MQVJJVFlfVFhfTk9STUFMLFxuMTI1MDpcdFx0XHRcdFx0XHQgICBwYnVzX3ZhbHVlKTtcbjEyNTE6XHR9XG4xMjUyOlx0XG4xMjUzOlx0c3RhdGljIGludCBhbjg4MTFoYl9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTI1NDpcdHtcbjEyNTU6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbjEyNTY6XHRcdGludCByZXQ7XG4xMjU3Olx0XG4xMjU4Olx0XHQvKiBJZiByZXN0YXJ0IGhhcHBlbmVkIGluIC5wcm9iZSgpLCBubyBuZWVkIHRvIHJlc3RhcnQgbm93ICovXG4xMjU5Olx0XHRpZiAocHJpdi1cdTAwM2VtY3VfbmVlZHNfcmVzdGFydCkge1xuMTI2MDpcdFx0XHRyZXQgPSBlbjg4MTFoX3Jlc3RhcnRfbWN1KHBoeWRldik7XG4xMjYxOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMjYyOlx0XHRcdFx0cmV0dXJuIHJldDtcbjEyNjM6XHRcdH0gZWxzZSB7XG4xMjY0Olx0XHRcdC8qIE5leHQgY2FsbHMgdG8gLmNvbmZpZ19pbml0KCkgbWN1IG5lZWRzIHRvIHJlc3RhcnQgKi9cbjEyNjU6XHRcdFx0cHJpdi1cdTAwM2VtY3VfbmVlZHNfcmVzdGFydCA9IHRydWU7XG4xMjY2Olx0XHR9XG4xMjY3Olx0XG4xMjY4Olx0XHRyZXQgPSBhbjg4MTFoYl9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHBoeWRldik7XG4xMjY5Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTI3MDpcdFx0XHRyZXR1cm4gcmV0O1xuMTI3MTpcdFxuMTI3MjpcdFx0cmV0ID0gYWlyX2xlZHNfaW5pdChwaHlkZXYsIEVOODgxMUhfTEVEX0NPVU5ULCBBSVJfUEhZX0xFRF9EVVIsXG4xMjczOlx0XHRcdFx0ICAgIEFJUl9MRURfTU9ERV9VU0VSX0RFRklORSk7XG4xMjc0Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTI3NTpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbGVkczogJWRcXG5cJiMzNDssIHJldCk7XG4xMjc2Olx0XG4xMjc3Olx0XHRyZXR1cm4gcmV0O1xuMTI3ODpcdH1cbjEyNzk6XHRcbjEyODA6XHRzdGF0aWMgaW50IGVuODgxMWhfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjEyODE6XHR7XG4xMjgyOlx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4xMjgzOlx0XHRpbnQgcmV0O1xuMTI4NDpcdFxuMTI4NTpcdFx0LyogSWYgcmVzdGFydCBoYXBwZW5lZCBpbiAucHJvYmUoKSwgbm8gbmVlZCB0byByZXN0YXJ0IG5vdyAqL1xuMTI4NjpcdFx0aWYgKHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQpIHtcbjEyODc6XHRcdFx0cmV0ID0gZW44ODExaF9yZXN0YXJ0X21jdShwaHlkZXYpO1xuMTI4ODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTI4OTpcdFx0XHRcdHJldHVybiByZXQ7XG4xMjkwOlx0XHR9IGVsc2Uge1xuMTI5MTpcdFx0XHQvKiBOZXh0IGNhbGxzIHRvIC5jb25maWdfaW5pdCgpIG1jdSBuZWVkcyB0byByZXN0YXJ0ICovXG4xMjkyOlx0XHRcdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSB0cnVlO1xuMTI5MzpcdFx0fVxuMTI5NDpcdFxuMTI5NTpcdFx0LyogU2VsZWN0IG1vZGUgMSwgdGhlIG9ubHkgbW9kZSBzdXBwb3J0ZWQuXG4xMjk2Olx0XHQgKiBDb25maWd1cmVzIHRoZSBTZXJEZXMgZm9yIDI1MDBCYXNlLVggd2l0aCByYXRlIGFkYXB0YXRpb25cbjEyOTc6XHRcdCAqL1xuMTI5ODpcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfMSxcbjEyOTk6XHRcdFx0XHQgICAgQUlSX1BIWV9NQ1VfQ01EXzFfTU9ERTEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcwNwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoaXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGlzIGRvY3VtZW50IGNvbnRhaW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGZvcm11bGF0ZSBhIGNvaGVyZW50IHJlc3BvbnNlLiBKdXN0IGdpbW1lIGEgc2Vjb25kLiBJIG5lZWQgdG8gc2VlIHRoZSBlbnRpcmUgdGV4dCBiZWZvcmUgSSBjYW4gZnVsbHkgc3ludGhlc2l6ZSBpdC4gSSYjMzk7bGwgcmVhZCB0byB0aGUgdmVyeSBlbmQgb2YgdGhlIGZpbGUuLi4gYW5kIHRoZW4gSSYjMzk7bGwgYmUgYWJsZSB0byBwcm9wZXJseSBzdW1tYXJpemUgd2hhdCYjMzk7cyBiZWluZyBhc2tlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMDA6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMzAxOlx0XHRcdHJldHVybiByZXQ7XG4xMzAyOlx0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF8yLFxuMTMwMzpcdFx0XHRcdCAgICBBSVJfUEhZX01DVV9DTURfMl9NT0RFMSk7XG4xMzA0Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTMwNTpcdFx0XHRyZXR1cm4gcmV0O1xuMTMwNjpcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfMyxcbjEzMDc6XHRcdFx0XHQgICAgQUlSX1BIWV9NQ1VfQ01EXzNfTU9ERTEpO1xuMTMwODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzMDk6XHRcdFx0cmV0dXJuIHJldDtcbjEzMTA6XHRcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQUlSX1BIWV9NQ1VfQ01EXzQsXG4xMzExOlx0XHRcdFx0ICAgIEFJUl9QSFlfTUNVX0NNRF80X01PREUxKTtcbjEzMTI6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMzEzOlx0XHRcdHJldHVybiByZXQ7XG4xMzE0Olx0XG4xMzE1Olx0XHRyZXQgPSBlbjg4MTFoX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkocGh5ZGV2KTtcbjEzMTY6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMzE3Olx0XHRcdHJldHVybiByZXQ7XG4xMzE4Olx0XG4xMzE5Olx0XHRyZXQgPSBhaXJfbGVkc19pbml0KHBoeWRldiwgRU44ODExSF9MRURfQ09VTlQsIEFJUl9QSFlfTEVEX0RVUixcbjEzMjA6XHRcdFx0XHQgICAgQUlSX0xFRF9NT0RFX1VTRVJfREVGSU5FKTtcbjEzMjE6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjEzMjI6XHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIGxlZHM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTMyMzpcdFx0XHRyZXR1cm4gcmV0O1xuMTMyNDpcdFx0fVxuMTMyNTpcdFxuMTMyNjpcdFx0LyogQ29uZmlndXJlIGxlZCBncGlvIHBpbnMgYXMgb3V0cHV0LiBNdXN0IGJlIHJlZG9uZSBvbiBldmVyeVxuMTMyNzpcdFx0ICogLmNvbmZpZ19pbml0KCksIG5vdCBqdXN0IG9uY2UgaW4gLnByb2JlKCk6IGVuODgxMWhfcmVzdGFydF9tY3UoKVxuMTMyODpcdFx0ICogcmVzZXRzIGJ1Y2twYnVzLW1hcHBlZCBNQ1Ugc3RhdGUgKGluY2wuIHRoaXMgcmVnaXN0ZXIpIG9uIGV2ZXJ5XG4xMzI5Olx0XHQgKiBjYWxsIGFmdGVyIHRoZSBmaXJzdCwgZS5nLiBvbiBsaW5rIHJlbmVnb3RpYXRpb24gb3IgaWZ1cC9pZmRvd24uXG4xMzMwOlx0XHQgKi9cbjEzMzE6XHRcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfR1BJT19PVVRQVVQsXG4xMzMyOlx0XHRcdFx0XHRcdCAgRU44ODExSF9HUElPX09VVFBVVF8zNDUsXG4xMzMzOlx0XHRcdFx0XHRcdCAgRU44ODExSF9HUElPX09VVFBVVF8zNDUpO1xuMTMzNDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzMzU6XHRcdFx0cmV0dXJuIHJldDtcbjEzMzY6XHRcbjEzMzc6XHRcdHJldHVybiAwO1xuMTMzODpcdH1cbjEzMzk6XHRcbjEzNDA6XHRzdGF0aWMgaW50IGVuODgxMWhfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMzQxOlx0e1xuMTM0MjpcdFx0bGlua21vZGVfc2V0X2JpdF9hcnJheShwaHlfYmFzaWNfcG9ydHNfYXJyYXksXG4xMzQzOlx0XHRcdFx0ICAgICAgIEFSUkFZX1NJWkUocGh5X2Jhc2ljX3BvcnRzX2FycmF5KSxcbjEzNDQ6XHRcdFx0XHQgICAgICAgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4xMzQ1Olx0XG4xMzQ2Olx0XHRyZXR1cm4gZ2VucGh5X2M0NV9wbWFfcmVhZF9hYmlsaXRpZXMocGh5ZGV2KTtcbjEzNDc6XHR9XG4xMzQ4Olx0XG4xMzQ5Olx0c3RhdGljIGludCBlbjg4MTFoX2dldF9yYXRlX21hdGNoaW5nKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4xMzUwOlx0XHRcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpZmFjZSlcbjEzNTE6XHR7XG4xMzUyOlx0XHRyZXR1cm4gUkFURV9NQVRDSF9QQVVTRTtcbjEzNTM6XHR9XG4xMzU0Olx0XG4xMzU1Olx0c3RhdGljIGludCBlbjg4MTFoX2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMzU2Olx0e1xuMTM1NzpcdFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4xMzU4Olx0XHRpbnQgcmV0O1xuMTM1OTpcdFx0dTMyIGFkdjtcbjEzNjA6XHRcbjEzNjE6XHRcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpIHtcbjEzNjI6XHRcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtEaXNhYmxpbmcgYXV0b25lZyBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbjEzNjM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMzY0Olx0XHR9XG4xMzY1Olx0XG4xMzY2Olx0XHRhZHYgPSBsaW5rbW9kZV9hZHZfdG9fbWlpXzEwZ2J0X2Fkdl90KHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4xMzY3Olx0XG4xMzY4Olx0XHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCxcbjEzNjk6XHRcdFx0XHRcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsIGFkdik7XG4xMzcwOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTM3MTpcdFx0XHRyZXR1cm4gcmV0O1xuMTM3MjpcdFx0aWYgKHJldCBcdTAwM2UgMClcbjEzNzM6XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4xMzc0Olx0XG4xMzc1Olx0XHRyZXR1cm4gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCBjaGFuZ2VkKTtcbjEzNzY6XHR9XG4xMzc3Olx0XG4xMzc4Olx0c3RhdGljIGludCBlbjg4MTFoX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMzc5Olx0e1xuMTM4MDpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuMTM4MTpcdFx0dTMyIHBidXNfdmFsdWU7XG4xMzgyOlx0XHRpbnQgcmV0LCB2YWw7XG4xMzgzOlx0XG4xMzg0Olx0XHRyZXQgPSBnZW5waHlfdXBkYXRlX2xpbmsocGh5ZGV2KTtcbjEzODU6XHRcdGlmIChyZXQpXG4xMzg2Olx0XHRcdHJldHVybiByZXQ7XG4xMzg3Olx0XG4xMzg4Olx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5TVVBQT1JURUQ7XG4xMzg5Olx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOU1VQUE9SVEVEO1xuMTM5MDpcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbjEzOTE6XHRcdHBoeWRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcbjEzOTI6XHRcdHBoeWRldi1cdTAwM2VwYXVzZSA9IDA7XG4xMzkzOlx0XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4xMzk0Olx0XHRwaHlkZXYtXHUwMDNlcmF0ZV9tYXRjaGluZyA9IFJBVEVfTUFUQ0hfUEFVU0U7XG4xMzk1Olx0XG4xMzk2Olx0XHRyZXQgPSBnZW5waHlfcmVhZF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcbjEzOTc6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMzk4Olx0XHRcdHJldHVybiByZXQ7XG4xMzk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDk5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIHJlc3Qgb2YgYGFpcl9lbjg4MTFoLmNgIGFsbCB0aGUgd2F5IHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIE5vIHBvaW50IGp1c3QgZm9jdXNpbmcgb24gYSBmcmFnbWVudCwgZ290dGEgc2VlIHRoZSB3aG9sZSBjb250ZXh0IGhlcmUuIExldCYjMzk7cyBnZXQgdGhlIHdob2xlIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQwMDpcdFx0cmV0ID0gZ2VucGh5X3JlYWRfbHBhKHBoeWRldik7XG4xNDAxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTQwMjpcdFx0XHRyZXR1cm4gcmV0O1xuMTQwMzpcdFxuMTQwNDpcdFx0aWYgKHBoeV9pZF9jb21wYXJlX21vZGVsKHBoeWRldi1cdTAwM2VwaHlfaWQsIEFOODgxMUhCX1BIWV9JRCkpIHtcbjE0MDU6XHRcdFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfU1RBVCk7XG4xNDA2Olx0XHRcdGlmICh2YWwgXHUwMDNjIDApXG4xNDA3Olx0XHRcdFx0cmV0dXJuIHZhbDtcbjE0MDg6XHRcdFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4xNDA5Olx0XHRcdFx0XHQgcGh5ZGV2LVx1MDAzZWxwX2FkdmVydGlzaW5nLFxuMTQxMDpcdFx0XHRcdFx0IHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81Ryk7XG4xNDExOlx0XHR9IGVsc2Uge1xuMTQxMjpcdFx0XHQvKiBHZXQgbGluayBwYXJ0bmVyIDIuNUdCQVNFLVQgYWJpbGl0eSBmcm9tIHZlbmRvciByZWdpc3RlciAqL1xuMTQxMzpcdFx0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgRU44ODExSF8yUDVHX0xQQSxcbjE0MTQ6XHRcdFx0XHRcdFx0XHRcdTAwMjZwYnVzX3ZhbHVlKTtcbjE0MTU6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0MTY6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTQxNzpcdFx0XHRsaW5rbW9kZV9tb2RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbjE0MTg6XHRcdFx0XHRcdCBwaHlkZXYtXHUwMDNlbHBfYWR2ZXJ0aXNpbmcsXG4xNDE5Olx0XHRcdFx0XHQgcGJ1c192YWx1ZSBcdTAwMjYgRU44ODExSF8yUDVHX0xQQV8yUDVHKTtcbjE0MjA6XHRcdH1cbjE0MjE6XHRcbjE0MjI6XHRcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZ19jb21wbGV0ZSlcbjE0MjM6XHRcdFx0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xuMTQyNDpcdFxuMTQyNTpcdFx0aWYgKCFwaHlkZXYtXHUwMDNlbGluaylcbjE0MjY6XHRcdFx0cmV0dXJuIDA7XG4xNDI3Olx0XG4xNDI4Olx0XHQvKiBHZXQgcmVhbCBzcGVlZCBmcm9tIHZlbmRvciByZWdpc3RlciAqL1xuMTQyOTpcdFx0dmFsID0gcGh5X3JlYWQocGh5ZGV2LCBBSVJfQVVYX0NUUkxfU1RBVFVTKTtcbjE0MzA6XHRcdGlmICh2YWwgXHUwMDNjIDApXG4xNDMxOlx0XHRcdHJldHVybiB2YWw7XG4xNDMyOlx0XHRzd2l0Y2ggKHZhbCBcdTAwMjYgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF9NQVNLKSB7XG4xNDMzOlx0XHRjYXNlIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMjUwMDpcbjE0MzQ6XHRcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMjUwMDtcbjE0MzU6XHRcdFx0YnJlYWs7XG4xNDM2Olx0XHRjYXNlIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMTAwMDpcbjE0Mzc6XHRcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDtcbjE0Mzg6XHRcdFx0YnJlYWs7XG4xNDM5Olx0XHRjYXNlIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMTAwOlxuMTQ0MDpcdFx0XHRwaHlkZXYtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDA7XG4xNDQxOlx0XHRcdGJyZWFrO1xuMTQ0MjpcdFx0Y2FzZSBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEXzEwOlxuMTQ0MzpcdFx0XHRwaHlkZXYtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDtcbjE0NDQ6XHRcdFx0YnJlYWs7XG4xNDQ1Olx0XHR9XG4xNDQ2Olx0XG4xNDQ3Olx0XHQvKiBGaXJtd2FyZSBiZWZvcmUgdmVyc2lvbiAyNDAxMTIwMiBoYXMgbm8gdmVuZG9yIHJlZ2lzdGVyIDJQNUdfTFBBLlxuMTQ0ODpcdFx0ICogQXNzdW1lIGxpbmsgcGFydG5lciBhZHZlcnRpc2VkIGl0IGlmIGNvbm5lY3RlZCBhdCAyNTAwTWJwcy5cbjE0NDk6XHRcdCAqL1xuMTQ1MDpcdFx0aWYgKHByaXYtXHUwMDNlZmlybXdhcmVfdmVyc2lvbiBcdTAwM2MgMHgyNDAxMTIwMikge1xuMTQ1MTpcdFx0XHRsaW5rbW9kZV9tb2RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbjE0NTI6XHRcdFx0XHRcdCBwaHlkZXYtXHUwMDNlbHBfYWR2ZXJ0aXNpbmcsXG4xNDUzOlx0XHRcdFx0XHQgcGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzI1MDApO1xuMTQ1NDpcdFx0fVxuMTQ1NTpcdFxuMTQ1NjpcdFx0LyogT25seSBzdXBwb3J0cyBmdWxsIGR1cGxleCAqL1xuMTQ1NzpcdFx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xuMTQ1ODpcdFxuMTQ1OTpcdFx0cmV0dXJuIDA7XG4xNDYwOlx0fVxuMTQ2MTpcdFxuMTQ2MjpcdHN0YXRpYyBpbnQgZW44ODExaF9jbGVhcl9pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xNDYzOlx0e1xuMTQ2NDpcdFx0aW50IHJldDtcbjE0NjU6XHRcbjE0NjY6XHRcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQUlSX1BIWV9NQ1VfQ01EXzMsXG4xNDY3Olx0XHRcdFx0ICAgIEFJUl9QSFlfTUNVX0NNRF8zX0RPQ01EKTtcbjE0Njg6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNDY5Olx0XHRcdHJldHVybiByZXQ7XG4xNDcwOlx0XG4xNDcxOlx0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF80LFxuMTQ3MjpcdFx0XHRcdCAgICBBSVJfUEhZX01DVV9DTURfNF9JTlRDTFIpO1xuMTQ3MzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0NzQ6XHRcdFx0cmV0dXJuIHJldDtcbjE0NzU6XHRcbjE0NzY6XHRcdHJldHVybiAwO1xuMTQ3NzpcdH1cbjE0Nzg6XHRcbjE0Nzk6XHRzdGF0aWMgaXJxcmV0dXJuX3QgZW44ODExaF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xNDgwOlx0e1xuMTQ4MTpcdFx0aW50IHJldDtcbjE0ODI6XHRcbjE0ODM6XHRcdHJldCA9IGVuODgxMWhfY2xlYXJfaW50cihwaHlkZXYpO1xuMTQ4NDpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTQ4NTpcdFx0XHRwaHlfZXJyb3IocGh5ZGV2KTtcbjE0ODY6XHRcdFx0cmV0dXJuIElSUV9OT05FO1xuMTQ4NzpcdFx0fVxuMTQ4ODpcdFxuMTQ4OTpcdFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xuMTQ5MDpcdFxuMTQ5MTpcdFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuMTQ5MjpcdH1cbjE0OTM6XHRcbjE0OTQ6XHRzdGF0aWMgaW50IGVuODgxMWhfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xNDk1Olx0e1xuMTQ5NjpcdFx0Y2xrX3Jlc3RvcmVfY29udGV4dCgpO1xuMTQ5NzpcdFxuMTQ5ODpcdFx0cmV0dXJuIGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcbjE0OTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjI0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gc3ludGhlc2l6ZSB0aGVzZSB0aG91Z2h0cy4gSGVyZSYjMzk7cyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSwgYW50aWNpcGF0aW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBSZW1haW5kZXIqKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvY2Vzc2luZyBzdGFnZSBpcyBjb21wbGV0ZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGxlZnQuIE15IG5leHQgc3RlcCBpbnZvbHZlcyBleGFtaW5pbmcgdGhlIHJlbWFpbmluZyBsaW5lcyBvZiB0aGUgZmlsZS4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzdGF0ZSBvZiB0aGUgcmVtYWluaW5nIGRhdGEgYW5kIGl0cyBuYXR1cmUuIEkmIzM5O2xsIGJlIGFzc2Vzc2luZyBpdCB0byBpZGVudGlmeSBwYXR0ZXJucywgcG90ZW50aWFsIGFub21hbGllcywgYW5kIHRoZSBvdmVyYWxsIGNvbnRleHQgdGhhdCBjYW4gaW5mb3JtIHRoZSBzdWJzZXF1ZW50IHN0ZXBzLiBUaGlzICYjMzk7cmVtYWluaW5nIGxpbmVzJiMzOTsgc2VjdGlvbiBjb3VsZCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdG8gcHJvY2VlZCB3aXRoIHRoZSBvdmVyYWxsIHRhc2suIEFyZSB0aGVyZSBhbnkgb3Zlcmxvb2tlZCBpc3N1ZXMsIG9yIGlzIHRoaXMgdGhlIGZpbmFsIHBpZWNlIG9mIHRoZSBwdXp6bGU/IFRoZSBpbmZvcm1hdGlvbiBoZXJlIHdpbGwgZGlyZWN0bHkgc2hhcGUgbXkgbmV4dCBkZWNpc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MDA6XHRcbjE1MDE6XHRzdGF0aWMgaW50IGVuODgxMWhfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTUwMjpcdHtcbjE1MDM6XHRcdGNsa19zYXZlX2NvbnRleHQoKTtcbjE1MDQ6XHRcbjE1MDU6XHRcdHJldHVybiBnZW5waHlfc3VzcGVuZChwaHlkZXYpO1xuMTUwNjpcdH1cbjE1MDc6XHRcbjE1MDg6XHRzdGF0aWMgdm9pZCBhbjg4MTFoYl9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjE1MDk6XHR7XG4xNTEwOlx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4xNTExOlx0XG4xNTEyOlx0XHRpZiAocHJpdi1cdTAwM2VwYnVzZGV2KSB7XG4xNTEzOlx0XHRcdG1kaW9fZGV2aWNlX3JlbW92ZShwcml2LVx1MDAzZXBidXNkZXYpO1xuMTUxNDpcdFx0XHRtZGlvX2RldmljZV9mcmVlKHByaXYtXHUwMDNlcGJ1c2Rldik7XG4xNTE1Olx0XHR9XG4xNTE2Olx0fVxuMTUxNzpcdFxuMTUxODpcdHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBlbjg4MTFoX2RyaXZlcltdID0ge1xuMTUxOTpcdHtcbjE1MjA6XHRcdFBIWV9JRF9NQVRDSF9NT0RFTChFTjg4MTFIX1BIWV9JRCksXG4xNTIxOlx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7QWlyb2hhIEVOODgxMUhcJiMzNDssXG4xNTIyOlx0XHQucHJvYmVcdFx0XHQ9IGVuODgxMWhfcHJvYmUsXG4xNTIzOlx0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0gZW44ODExaF9nZXRfZmVhdHVyZXMsXG4xNTI0Olx0XHQuY29uZmlnX2luaXRcdFx0PSBlbjg4MTFoX2NvbmZpZ19pbml0LFxuMTUyNTpcdFx0LmdldF9yYXRlX21hdGNoaW5nXHQ9IGVuODgxMWhfZ2V0X3JhdGVfbWF0Y2hpbmcsXG4xNTI2Olx0XHQuY29uZmlnX2FuZWdcdFx0PSBlbjg4MTFoX2NvbmZpZ19hbmVnLFxuMTUyNzpcdFx0LnJlYWRfc3RhdHVzXHRcdD0gZW44ODExaF9yZWFkX3N0YXR1cyxcbjE1Mjg6XHRcdC5yZXN1bWVcdFx0XHQ9IGVuODgxMWhfcmVzdW1lLFxuMTUyOTpcdFx0LnN1c3BlbmRcdFx0PSBlbjg4MTFoX3N1c3BlbmQsXG4xNTMwOlx0XHQuY29uZmlnX2ludHJcdFx0PSBlbjg4MTFoX2NsZWFyX2ludHIsXG4xNTMxOlx0XHQuaGFuZGxlX2ludGVycnVwdFx0PSBlbjg4MTFoX2hhbmRsZV9pbnRlcnJ1cHQsXG4xNTMyOlx0XHQubGVkX2h3X2lzX3N1cHBvcnRlZFx0PSBlbjg4MTFoX2xlZF9od19pc19zdXBwb3J0ZWQsXG4xNTMzOlx0XHQucmVhZF9wYWdlXHRcdD0gYWlyX3BoeV9yZWFkX3BhZ2UsXG4xNTM0Olx0XHQud3JpdGVfcGFnZVx0XHQ9IGFpcl9waHlfd3JpdGVfcGFnZSxcbjE1MzU6XHRcdC5sZWRfYmxpbmtfc2V0XHRcdD0gYWlyX2xlZF9ibGlua19zZXQsXG4xNTM2Olx0XHQubGVkX2JyaWdodG5lc3Nfc2V0XHQ9IGFpcl9sZWRfYnJpZ2h0bmVzc19zZXQsXG4xNTM3Olx0XHQubGVkX2h3X2NvbnRyb2xfc2V0XHQ9IGFpcl9sZWRfaHdfY29udHJvbF9zZXQsXG4xNTM4Olx0XHQubGVkX2h3X2NvbnRyb2xfZ2V0XHQ9IGFpcl9sZWRfaHdfY29udHJvbF9nZXQsXG4xNTM5Olx0fSxcbjE1NDA6XHR7XG4xNTQxOlx0XHRQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODExSEJfUEhZX0lEKSxcbjE1NDI6XHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtBaXJvaGEgQU44ODExSEJcJiMzNDssXG4xNTQzOlx0XHQucHJvYmVcdFx0XHQ9IGFuODgxMWhiX3Byb2JlLFxuMTU0NDpcdFx0LnJlbW92ZVx0XHRcdD0gYW44ODExaGJfcmVtb3ZlLFxuMTU0NTpcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IGVuODgxMWhfZ2V0X2ZlYXR1cmVzLFxuMTU0NjpcdFx0LmNvbmZpZ19pbml0XHRcdD0gYW44ODExaGJfY29uZmlnX2luaXQsXG4xNTQ3Olx0XHQuZ2V0X3JhdGVfbWF0Y2hpbmdcdD0gZW44ODExaF9nZXRfcmF0ZV9tYXRjaGluZyxcbjE1NDg6XHRcdC5jb25maWdfYW5lZ1x0XHQ9IGVuODgxMWhfY29uZmlnX2FuZWcsXG4xNTQ5Olx0XHQucmVhZF9zdGF0dXNcdFx0PSBlbjg4MTFoX3JlYWRfc3RhdHVzLFxuMTU1MDpcdFx0LnJlc3VtZVx0XHRcdD0gZW44ODExaF9yZXN1bWUsXG4xNTUxOlx0XHQuc3VzcGVuZFx0XHQ9IGVuODgxMWhfc3VzcGVuZCxcbjE1NTI6XHRcdC5jb25maWdfaW50clx0XHQ9IGVuODgxMWhfY2xlYXJfaW50cixcbjE1NTM6XHRcdC5oYW5kbGVfaW50ZXJydXB0XHQ9IGVuODgxMWhfaGFuZGxlX2ludGVycnVwdCxcbjE1NTQ6XHRcdC5sZWRfaHdfaXNfc3VwcG9ydGVkXHQ9IGVuODgxMWhfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbjE1NTU6XHRcdC5yZWFkX3BhZ2VcdFx0PSBhaXJfcGh5X3JlYWRfcGFnZSxcbjE1NTY6XHRcdC53cml0ZV9wYWdlXHRcdD0gYWlyX3BoeV93cml0ZV9wYWdlLFxuMTU1NzpcdFx0LmxlZF9ibGlua19zZXRcdFx0PSBhaXJfbGVkX2JsaW5rX3NldCxcbjE1NTg6XHRcdC5sZWRfYnJpZ2h0bmVzc19zZXRcdD0gYWlyX2xlZF9icmlnaHRuZXNzX3NldCxcbjE1NTk6XHRcdC5sZWRfaHdfY29udHJvbF9zZXRcdD0gYWlyX2xlZF9od19jb250cm9sX3NldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2MzcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1MjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhpbmVzcyBvZiBGdXp6aW5nIHRoZSBhaXJfZW44ODExaC5jIERyaXZlcioqCgpPa2F5LCBzbyBgYWlyX2VuODgxMWguY2AgaXMgYW4gTURJTyBFdGhlcm5ldCBQSFkgZHJpdmVyLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIEkgY2FuIGV2ZW4gKnJlYWNoKiB0aGlzIGRyaXZlciBmb3IgZnV6emluZyBwdXJwb3NlcyB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlLiBDYW4gaXQgYmUgcHJvYmVkIG9yIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSk/CgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgTURJTyBQSFkgZGV2aWNlcyB0eXBpY2FsbHkgd29yayB3aXRoaW4gTGludXgsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byB2aXJ0dWFsaXphdGlvbi4gIFRoZXkgYXR0YWNoIHRvIE1ESU8gYnVzZXMg4oCTIE1JSSAvIE1ESU8gYnVzZXMsIHRvIGJlIHByZWNpc2UuICBBcmUgdGhvc2UgTURJTyBQSFkgZHJpdmVycyBhY2Nlc3NpYmxlIGR1cmluZyBmdXp6aW5nIGV4ZXJjaXNlcyBpbiBRRU1VIG9yIEdDRT8gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4KCkkgbmVlZCB0byBiZSBzdXBlciBjYXJlZnVsIHRvIGZvbGxvdyB0aGUgZ3VpZGVsaW5lcyBmb3IgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0Oy4gIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYXRjaCBJJiMzOTttIGV4YW1pbmluZyBkb2VzbiYjMzk7dCBmYWxsIHVuZGVyIHRoZXNlIGRpc3F1YWxpZmljYXRpb25zOiBkb2N1bWVudGF0aW9uIGNoYW5nZXMsIGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIGNvc21ldGljIGNoYW5nZXMgdG8gY29uc3RhbnRzLCBjb2RlIHBhdGhzIHRoYXQgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIHNldHVwcyAoZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbiwgbGlrZSBVU0IgZ2FkZ2V0IG9yIG1hYzgwMjExX2h3c2ltKSwgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyIGNvZGUgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGNhcmRzLCBvciBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aG9zZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLgoKU28sIGhvdyBkb2VzIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgZ2V0IHByb2JlZCBpbiB0aGUgZmlyc3QgcGxhY2U/IEl0IHNlZW1zIHRoYXQgUEhZIGRyaXZlcnMgZ2V0IHByb2JlZCB3aGVuIHRoZSBrZXJuZWwgZGlzY292ZXJzIGEgUEhZIGRldmljZSB3aXRoIHRoZSByaWdodCBQSFkgSUQgb24gYW4gTURJTyBidXMsIG9yIG1heWJlIHRocm91Z2ggTURJTyBidXMgcHJvYmluZywgRGV2aWNlIFRyZWUgKERUKSwgb3IgcGxhdGZvcm0gc2V0dXAuIENydWNpYWxseSwgY2FuIHRoZXNlIE1ESU8gUEhZcyBiZSAqaW5zdGFudGlhdGVkKiBvciBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCAqd2l0aG91dCogcmVhbCBoYXJkd2FyZT8KCkkgaGF2ZSB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBraW5kIG9mIHZpcnR1YWwgb3IgbW9jayBNRElPIGJ1cyBpbXBsZW1lbnRhdGlvbiBpbiBRRU1VLCBvciBtYXliZSBzb21ldGhpbmcgbGlrZSBhIFVTQi10by1NRElPIGJyaWRnZSB0aGF0IHdvdWxkIGFsbG93IG1lIHRvIHNpbXVsYXRlIGhhcmR3YXJlIGludGVyYWN0aW9uLiBEb2VzIHN5emthbGxlciBvZmZlciBhIHdheSB0byBjcmVhdGUgYSBQSFkgZGV2aWNlIG9yIE1ESU8gZGV2aWNlPyBUaGlzIGlzIHdoYXQgSSBuZWVkIHRvIGNoZWNrLiAgSSBuZWVkIHRvIGNoZWNrIGhvdyBtZGlvYnVzIGFuZCBwaHkgZGV2aWNlcyBhcmUgaGFuZGxlZC4gVGltZSB0byBncmVwIHRoZSBrZXJuZWwgc291cmNlIGZvciBrZXl3b3JkcyBsaWtlICYjMzQ7bWRpbyYjMzQ7LCAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXImIzM0OywgYW5kICYjMzQ7bWRpb2J1c19yZWdpc3RlciYjMzQ7IHRvIHNlZSB3aGF0JiMzOTtzIHBvc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvYnVzX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEwMTggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9NjA3PXN0YXRpYyBpbnQgYmNtX3NmMl9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4My1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6Njg0Olx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM9MTg3PXN0YXRpYyBpbnQgZ3N3aXBfbWRpbyhzdHJ1Y3QgZ3N3aXBfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTMtXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYzoyMTQ6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTMyMT1zdGF0aWMgaW50IGtzejk0NzdfcGNzX2NyZWF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0MS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM0MjpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlZGV2LCBidXMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0yMzIxPWludCBrc3pfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTItXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMzkzOlx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz02ODU9c3RhdGljIGludCBsYW45Mzd4X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1NS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6NzU2Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjQwOT1tdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0NDQtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjQ0NTpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNDQ2LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYz0yNDI9c3RhdGljIGludCBtdDc2Mjhfc2V0dXBfaW50ZXJuYWxfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jLTI2MS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzoyNjI6XHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy0yNjMtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM4MzQ9c3RhdGljIGludCBtdjg4ZTZ4eHhfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4Ny1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjM4ODg6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4OS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjc9c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTItXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyOTM6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjk0LVx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9MTQ5PXN0YXRpYyBpbnQgbmV0Y19wb3J0X2NyZWF0ZV9lbWRpb19idXMoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMTc5LVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6MTgwOlx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE4MS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9OTU3PXN0YXRpYyBpbnQgdnNjOTk1OV9tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxMy1cdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MTAxNDpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxNS1cdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM9ODc4PXN0YXRpYyBpbnQgdnNjOTk1M19tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDMtXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM6OTA0Olx0cmMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDUtXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jPTM1Nz1zdGF0aWMgaW50IGFyOTMzMV9zd19tYnVzX2luaXQoc3RydWN0IGFyOTMzMV9zd19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtMzgxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzozODI6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODMtXHRvZl9ub2RlX3B1dChtbnApO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTk0Nz1xY2E4a19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk4Ni1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk4NzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpbyk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODgtXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc0PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTk5LVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEwMDpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMDEtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYz0xMTE3PXN0YXRpYyBpbnQgYTVwc3dfcHJvYmVfbWRpbyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQzLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzoxMTQ0Olx0cmV0dXJuIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDUtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaD0zMDc9dm9pZCBzamExMTA1X2ZyYW1lX21lbW9yeV9wYXJ0aXRpb25pbmcoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMwOS0vKiBGcm9tIHNqYTExMDVfbWRpby5jICovXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg6MzEwOmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0zMTEtdm9pZCBzamExMTA1X21kaW9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jPTMwMjY9c3RhdGljIGludCBzamExMTA1X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY3LVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM6MzA2ODpcdHJjID0gc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjktXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0yNTg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90eF9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4Ny1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjI4ODpcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4OS1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTMxMj1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3QxX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQzLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6MzQ0Olx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQ1LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5NS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjM5NjpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk3LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9NDM5PXN0YXRpYyB2b2lkIHNqYTExMDVfbWRpb2J1c19wY3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ1OC1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQ1OTppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ2MC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jPTU5NT15dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTItXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6NjEzOlx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTQtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz03MjY9eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbi0tXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNzQzLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjc0NDpcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNzQ1LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYz00NTk9c3RhdGljIGludCBheF9taWlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jOjQ3OTpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXgtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy00ODAtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYz0xMzIxPXN0YXRpYyBpbnQgb3dsX2VtYWNfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM6MTM0NjpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXHUwMDNlbWlpLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM9NTA5PXN0YXRpYyBpbnQgYWRpbjExMTBfcmVnaXN0ZXJfbWRpb2J1cyhzdHJ1Y3QgYWRpbjExMTBfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYy01MjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYzo1MzA6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUzMS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmM9NjE3PXN0YXRpYyBpbnQgYWRpbjExNDBfbWRpb19yZWdpc3RlcihzdHJ1Y3QgYWRpbjExNDBfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02MzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYzo2Mzc6XHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNnNwaWRldi1cdTAwM2VkZXYsIHByaXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02MzgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmM9MTI5MD1zdGF0aWMgaW50IGdyZXRoX21kaW9faW5pdChzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYzoxMzA3Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihncmV0aC1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmMtMTMwOC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYz0zOTMxPXN0YXRpYyBpbnQgZXQxMzF4X3BjaV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM6NDAyNzpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihhZGFwdGVyLVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmMtNDAyOC1cdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYz0xMjE9c3RhdGljIGludCBhbHRlcmFfdHNlX21kaW9fY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jOjE1ODpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTktXHRpZiAocmV0ICE9IDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jPTEwNjE9c3RhdGljIGludCBhdTEwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jLTEyMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jOjEyMjI6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGF1cC1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMy1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTM0Mjg9c3RhdGljIGludCB4Z2JlX3BoeV9pbml0KHN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MTctXHRzbnByaW50ZihtaWktXHUwMDNlaWQsIHNpemVvZihtaWktXHUwMDNlaWQpLCBcJiMzNDslc1wmIzM0OywgZGV2X25hbWUocGRhdGEtXHUwMDNlZGV2KSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjM3MTg6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1paSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MTktXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjM3MjA6XHRcdGRldl9lcnIocGRhdGEtXHUwMDNlZGV2LCBcJiMzNDttZGlvYnVzX3JlZ2lzdGVyIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MjEtXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYz05OD1pbnQgeGdlX21kaW9fY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmMtMTE4LVx0bWRpb19idXMtXHUwMDNlcGh5X21hc2sgPSAweDE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jOjExOTpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMjAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM9ODM3PWludCB4Z2VuZV9lbmV0X3BoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtODg3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo4ODg6c3RhdGljIGludCB4Z2VuZV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtODg5LVx0XHRcdFx0ICBzdHJ1Y3QgbWlpX2J1cyAqbWRpbylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTEzOlx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MTQtXHRcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIxLVx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjkyMjpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpbyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkyMy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz05Mzk9aW50IHhnZW5lX2VuZXRfbWRpb19jb25maWcoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5NTg6XHRyZXQgPSB4Z2VuZV9tZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLCBtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTk1OS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM9MTMxPWludCBhcmNfbWRpb19wcm9iZShzdHJ1Y3QgYXJjX2VtYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmMtMTcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jOjE3MzpcdGVycm9yID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmMtMTc0LVx0b2Zfbm9kZV9wdXQobWRpb19ub2RlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYz05NjY9c3RhdGljIGludCBheDg4Nzk2Y19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwMTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYzoxMDExOlx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNnNwaS1cdTAwM2VkZXYsIGF4X2xvY2FsLVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jPTY4Nz1zdGF0aWMgaW50IGFnNzF4eF9tZGlvX3Byb2JlKHN0cnVjdCBhZzcxeHggKmFnKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNzI3LVx0bW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW9cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYzo3Mjg6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtaWlfYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjktXHRvZl9ub2RlX3B1dChtbnApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIyMzQ9c3RhdGljIGludCBiNDRfcmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjI2MDpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIobWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjYxLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jPTE3MTM9c3RhdGljIGludCBiY21fZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYzoxODMwOlx0XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYy0xODMxLVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmM9MjExPXN0cnVjdCBtaWlfYnVzICpiY21hX21kaW9fbWlpX3JlZ2lzdGVyKHN0cnVjdCBiZ21hYyAqYmdtYWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmMtMjM1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmM6MjM2Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzctXHRvZl9ub2RlX3B1dChucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9MTkzPWludCBiY21nZW5ldF9taWlfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgaW5pdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0yMzMtXHRcdHBoeV9uYW1lID0gXCYjMzQ7ZXh0ZXJuYWwgUnZNSUlcJiMzNDs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoyMzQ6XHRcdC8qIG9mX21kaW9idXNfcmVnaXN0ZXIgdG9vayBjYXJlIG9mIHJlYWRpbmcgdGhlICYjMzk7bWF4LXNwZWVkJiMzOTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzNS1cdFx0ICogUEhZIHByb3BlcnR5IGZvciB1cywgZWZmZWN0aXZlbHkgbGltaXRpbmcgdGhlIFBIWSBzdXBwb3J0ZWRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM9MjE1Nz1zdGF0aWMgaW50IHNibWFjX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxkZXYsIGxvbmcgbG9uZyBiYXNlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI3LVx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM6MjIyODpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoc2MtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMjIyOS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYz0xNTA1PXN0YXRpYyBpbnQgdGczX21kaW9faW5pdChzdHJ1Y3QgdGczICp0cClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYy0xNTU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM6MTU1ODpcdGkgPSBtZGlvYnVzX3JlZ2lzdGVyKHRwLVx1MDAzZW1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTktXHRpZiAoaSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTAyMz1zdGF0aWMgaW50IG1hY2JfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDk2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMDk3OnN0YXRpYyBpbnQgbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtYWNiICpicCwgc3RydWN0IGRldmljZV9ub2RlICptZGlvX25wKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDk4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMDQtXHRpZiAobWRpb19ucClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTEwNTpcdFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXHUwMDNlbWlpX2J1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMDYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTE5Olx0XHRcdHJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJwLVx1MDAzZW1paV9idXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMC1cdFx0fVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTIyOlx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnAtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTEyNT1zdGF0aWMgaW50IG1hY2JfbWlpX2luaXQoc3RydWN0IG1hY2IgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE1OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTE1OTpcdGVyciA9IG1hY2JfbWRpb2J1c19yZWdpc3RlcihicCwgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNjAtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM9MTEwNz1zdGF0aWMgaW50IGRtOTA1MV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBib2FyZF9pbmZvICpkYilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jLTExMjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jOjExMjU6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2c3BpLVx1MDAzZWRldiwgZGItXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jLTExMjYtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYz0yNDIzPXN0YXRpYyBpbnQgdHNuZXBfbWRpb19pbml0KHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0yNDU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjI0NTU6XHRyZXR2YWwgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXHUwMDNlbWRpb2J1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYz0xMDI0PXN0YXRpYyBpbnQgZXRob2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jLTEyMDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jOjEyMDg6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jLTEyMDktXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz0xNzM0PXN0YXRpYyBpbnQgZnRnbWFjMTAwX3NldHVwX21kaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3NjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE3NzA6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VkZXYsIHByaXYtXHUwMDNlbWlpX2J1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3NzEtXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYz0zNj1zdGF0aWMgaW50IGVuZXRjX3BjaV9tZGlvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jLTkwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmM6OTE6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgZGV2LVx1MDAzZW9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTItXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0yNjY9c3RhdGljIGludCBlbmV0Y19tZGlvX3Byb2JlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTI5Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzoyOTM6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTI5NC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTMwOD1zdGF0aWMgaW50IGVuZXRjX2ltZGlvX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zNDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MzQzOlx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTM0NC1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz0zMDQyPXN0YXRpYyBpbnQgZmVjX2VuZXRfbWlpX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzE2MTpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZmVwLVx1MDAzZW1paV9idXMsIG5vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzE2Mi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jPTY1PXN0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmMtMTA1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jOjEwNjpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmMtMTA3LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jPTE0OT1zdGF0aWMgaW50IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE3NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM6MTc2Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE3Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jPTk3PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM6MTY3Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmMtMTY4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYz00MDk9c3RhdGljIGludCBmc2xfcHFfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTQ5My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jOjQ5NDpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDk1LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM9MzcxPXN0YXRpYyBpbnQgeGdtYWNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDI2LVx0aWYgKGlzX29mX25vZGUoZndub2RlKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI3Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgdG9fb2Zfbm9kZShmd25vZGUpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDI4LVx0ZWxzZSBpZiAoaXNfYWNwaV9ub2RlKGZ3bm9kZSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jOjQyOTpcdFx0cmV0ID0gYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgZndub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDMwLVx0ZWxzZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjY2PWludCBoYmdfbWRpb19pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjkyOlx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yOTMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYz0xMDk0PXN0YXRpYyBpbnQgaGl4NWhkMl9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYzoxMTg2Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jLTExODctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmM9MTIzPWludCBoY2xnZV9tYWNfbWRpb19jb25maWcoc3RydWN0IGhjbGdlX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTE1NC1cdG1kaW9fYnVzLVx1MDAzZXBoeV9tYXNrID0gfigxVSBcdTAwM2NcdTAwM2MgbWFjLVx1MDAzZXBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmM6MTU1Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTE1Ni1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYz00OTU9c3RhdGljIGludCBobnNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU4My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jOjU4NDpcdFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBwZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU4NS1cdH0gZWxzZSBpZiAoaXNfYWNwaV9ub2RlKHBkZXYtXHUwMDNlZGV2LmZ3bm9kZSkpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTItXHRcdC8qIFJlZ2lzdGVyIHRoZSBNRElPIGJ1cyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTkzOlx0XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTk0LVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmM9MjU2MD1zdGF0aWMgaW50IGVtYWNfZHRfbWRpb19wcm9iZShzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg0LVx0c25wcmludGYoYnVzLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0OyVzXCYjMzQ7LCBkZXYtXHUwMDNlb2ZkZXYtXHUwMDNlbmFtZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmM6MjU4NTpcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihcdTAwMjZkZXYtXHUwMDNlb2ZkZXYtXHUwMDNlZGV2LCBidXMsIG1paV9ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMtMjU4Ni1cdGlmIChyZXMpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYz0xMDI2PWludCBpeGdiZV9taWlfYnVzX2luaXQoc3RydWN0IGl4Z2JlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0xMDg4LVx0YWRhcHRlci1cdTAwM2VtaWlfYnVzID0gYnVzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MTA4OTpcdHJldHVybiBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0xMDkwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jPTM4NT1sdHFfZXRvcF9tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTQwMi1cdFx0IHByaXYtXHUwMDNlcGRldi1cdTAwM2VuYW1lLCBwcml2LVx1MDAzZXBkZXYtXHUwMDNlaWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYzo0MDM6XHRpZiAobWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1paV9idXMpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTQwNC1cdFx0ZXJyID0gLUVOWElPO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM9MjgzPXN0YXRpYyBpbnQgb3Jpb25fbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzgxLVx0LyogRm9yIHRoZSBwbGF0Zm9ybXMgbm90IHN1cHBvcnRpbmcgRFQvQUNQSSBmYWxsLWJhY2tcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6MzgyOlx0ICogdG8gbWRpb2J1c19yZWdpc3RlciB2aWEgb2ZfbWRpb2J1c19yZWdpc3Rlci5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzgzLVx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4NC1cdGlmIChpc19hY3BpX25vZGUocGRldi1cdTAwM2VkZXYuZndub2RlKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6Mzg1Olx0XHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBwZGV2LVx1MDAzZWRldi5md25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODYtXHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4NzpcdFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODgtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM9MTM4Nz1zdGF0aWMgaW50IHB4YTE2OF9ldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy0xNTA0LVx0cGVwLVx1MDAzZXNtaV9idXMtXHUwMDNlcGh5X21hc2sgPSAweGZmZmZmZmZmO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM6MTUwNTpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIocGVwLVx1MDAzZXNtaV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmMtMTUwNi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz05OTg9c3RhdGljIGludCBtdGtfbWRpb19pbml0KHN0cnVjdCBtdGtfZXRoICpldGgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy0xMDM3LVx0ZGV2X2RiZyhldGgtXHUwMDNlZGV2LCBcJiMzNDtNREMgaXMgcnVubmluZyBvbiAlZCBIelxcblwmIzM0OywgTURDX01BWF9GUkVRIC8gZXRoLVx1MDAzZW1kY19kaXZpZGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM6MTAzODpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZXRoLVx1MDAzZW1paV9idXMsIG1paV9ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jPTE0MjI9c3RhdGljIGludCBtdGtfc3Rhcl9tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTE0NDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM6MTQ0ODpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXHUwMDNlbWlpLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTE0NDktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYz0yODc9aW50IG1seGJmX2dpZ2VfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgbWx4YmZfZ2lnZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmM6MzMzOlx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYy0zMzQtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jPTI1Mz1pbnQgZmJuaWNfbWRpb2J1c19jcmVhdGUoc3RydWN0IGZibmljX2RldiAqZmJkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jLTI3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jOjI3MzpcdGVyciA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihmYmQtXHUwMDNlZGV2LCBidXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmMtMjc0LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmM9MTAzNj1zdGF0aWMgaW50IGtzODg1MV9yZWdpc3Rlcl9tZGlvYnVzKHN0cnVjdCBrczg4NTFfbmV0ICprcywgc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmM6MTA1MzpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNTQtXHRpZiAocmV0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYzoxMDU1Olx0XHRnb3RvIGVycl9tZGlvYnVzX3JlZ2lzdGVyO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYy0xMDU2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA2MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmM6MTA2MTplcnJfbWRpb2J1c19yZWdpc3RlcjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA2Mi1cdG1kaW9idXNfZnJlZShtaWlfYnVzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM9MTM3OT1zdGF0aWMgaW50IGxhbjc0M3hfaHdfcmVzZXRfcGh5KHN0cnVjdCBsYW43NDN4X2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jLTEzODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM6MTM4MzpcdC8qIE9ubHkgY2FsbGVkIHdpdGggaW4gcHJvYmUsIGFuZCBiZWZvcmUgbWRpb2J1c19yZWdpc3RlciAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jLTEzODQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jPTM2Mjg9c3RhdGljIGludCBsYW43NDN4X21kaW9idXNfaW5pdChzdHJ1Y3QgbGFuNzQzeF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zNjcxLVx0LyogcmVnaXN0ZXIgbWRpb2J1cyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jOjM2NzI6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmMtMzY3My1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmkvbml4Z2UuYz0xMjEyPXN0YXRpYyBpbnQgbml4Z2VfbWRpb19zZXR1cChzdHJ1Y3Qgbml4Z2VfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uaS9uaXhnZS5jLTEyMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uaS9uaXhnZS5jOjEyMzE6XHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25pL25peGdlLmMtMTIzMi19XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjIyCgkJCQkJCQlvdXRwdXQ6IDU3CgkJCQkJCQl0aG91Z2h0czogNjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1ESU8gUEhZIERyaXZlcnMgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYWlyX2VuODgxMWguY2AsIGFuIEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBhbmQgQU44ODExSEIgY2hpcHMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHRoaXMgYmUgZWZmZWN0aXZlbHkgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgZ3VpZGVsaW5lcy4gTGV0IG1lIHJlLXJlYWQgdGhvc2UgcXVpY2tseS4uLiByaWdodCwgaWYgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGluYWNjZXNzaWJsZSBoYXJkd2FyZSwgaXQmIzM5O3Mgbm90IHdvcnRoIGZ1enppbmcuCgpMZXQmIzM5O3Mgc2VlLCB3aGF0IGlzIHRoZSBwcm9iZSBmbG93PyBUaGlzIGRyaXZlciwgbGlrZSBhbnkgTURJTyBQSFkgZHJpdmVyLCBpcyBib3VuZCB0byBhIHNwZWNpZmljIE1ESU8gYnVzLiBJdCByZWxpZXMgb24gdGhlIGBtZGlvX2J1c190eXBlYCBtYXRjaCwgbWVhbmluZyB0aGUgc3lzdGVtIGhhcyB0byBoYXZlIGEgcmVhbCBNRElPIGJ1cy4gRHVyaW5nIHRoZSBidXMgc2Nhbm5pbmcsIGl0IHJlYWRzIHRoZSBNRElPX0RFVklEMSBhbmQgTURJT19ERVZJRDIgcmVnaXN0ZXJzIChyZWdpc3RlcnMgMiBhbmQgMykgZnJvbSB0aGUgUEhZLiBJdCB0aGVuIGNvbXBhcmVzIHRob3NlIHZhbHVlcyB0byB0aGUgSURzIGluIGl0cyBgcGh5X2RldmljZV9pZGAgdGFibGUuIEluIHRoaXMgY2FzZSwgdGhhdCYjMzk7cyBsb29raW5nIGZvciBgRU44ODExSF9QSFlfSURgIGFuZCBgQU44ODExSEJfUEhZX0lEYC4gRm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyIHRvIGV2ZW4gKnByb2JlKiBzdWNjZXNzZnVsbHkgYW5kIHJ1biBpdHMgYGVuODgxMWhfcHJvYmVgIG9yIGBhbjg4MTFoYl9wcm9iZWAgZnVuY3Rpb25zIGFuZCwgZXZlbnR1YWxseSwgYGFpcl93cml0ZV9idWZgLCBhICpyZWFsKiBBaXJvaGEgRU44ODExSC9BTjg4MTFIQiBjaGlwIG5lZWRzIHRvIGJlIHBoeXNpY2FsbHkgcHJlc2VudCBvbiBhbiBNRElPIGJ1cy4gVGhlIGNvZGUgcmVhZHMgYW5kIHdyaXRlcyByZWdpc3RlcnMgdmlhIE1ESU8gZHVyaW5nIHRoZSBwcm9iZSwgYW5kIGl0IHRyaWVzIHRvIGxvYWQgZmlybXdhcmUgaW50byB0aGUgY2hpcCYjMzk7cyBNQ1UuCgpUaGUgaXNzdWUgaXMgdGhhdCBzdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBjaGlwIG9yIGFuIEFpcm9oYSBNRElPIGNvbnRyb2xsZXIuIFRoZXJlJiMzOTtzIG5vIGVtdWxhdGlvbiwgbm8gbW9jaywgbm90aGluZyBpbiBzeXprYWxsZXIgb3IgUUVNVSB0aGF0IHdvdWxkIHJlc3BvbmQgdG8gdGhlIHZlcnkgc3BlY2lmaWMgcHJvcHJpZXRhcnkgJiMzNDtidWNrcGJ1cyYjMzQ7IHJlZ2lzdGVyIHByb3RvY29sIHVzZWQgYnkgdGhpcyBjaGlwLiBUaGF0JiMzOTtzIGEgaHVnZSBibG9ja2VyLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcy4uLmlzIHRoZXJlICphbnkqIHdheSB0byBzaW11bGF0ZSBvciBwcm92aWRlIGEgJiMzNDtmYWtlJiMzNDsgTURJTyBidXMgb3IgUEhZIHdpdGhpbiBRRU1VIHRoYXQgbWlnaHQgbGV0IHVzIHRyaWNrIGl0PyBQZXJoYXBzIGEgVVNCLXRvLU1ESU8gZ2FkZ2V0LCBvciBzb21lIGtpbmQgb2YgbW9jayBNRElPIFBIWT8gSSYjMzk7bGwgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yICYjMzQ7ZHVtbXkmIzM0OyBvciAmIzM0O21vY2smIzM0OyBNRElPIGltcGxlbWVudGF0aW9ucyB0byBzZWUgaWYgYW55dGhpbmcgZXZlbiByZW1vdGVseSBzdWl0YWJsZSBleGlzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vY2suKm1kaW98ZHVtbXkuKm1kaW98bWRpby4qbW9ja3xtZGlvLipkdW1teXxtZGlvLip0ZXN0fG1kaW8tZ3Bpb3xtZGlvLWJpdGJhbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jOjIzOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8tYml0YmFuZy5oXHUwMDNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy0yNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM6MjA6I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby1iaXRiYW5nLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMjEtI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfYWRkcmVzcy5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYz0yMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZnNfZW5ldF9tZGlvX2JiX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTIwNC1cdHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM6MjA1Olx0XHQuY29tcGF0aWJsZSA9IFwmIzM0O2ZzbCxjcG0yLW1kaW8tYml0YmFuZ1wmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMjA2LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaC0xNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmg6MTc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby1iaXRiYW5nLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYy0xOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYzoxOTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLWJpdGJhbmcuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYy0yMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuYz0yOTY9dTggZWY0X21kaW9fZ2V0X3BhdXNlKHN0cnVjdCBlZjRfbmljICplZngpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9tZGlvXzEwZy5jLTMwOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuYzozMTA6aW50IGVmNF9tZGlvX3Rlc3RfYWxpdmUoc3RydWN0IGVmNF9uaWMgKmVmeClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuYy0zMTEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuaD05OT1lZjRfbWRpb19zZXRfZmxhZyhzdHJ1Y3QgZWY0X25pYyAqZWZ4LCBpbnQgZGV2YWQsIGludCBhZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuaC0xMDUtLyogTGl2ZW5lc3Mgc2VsZi10ZXN0IGZvciBNRElPIFBIWXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuaDoxMDY6aW50IGVmNF9tZGlvX3Rlc3RfYWxpdmUoc3RydWN0IGVmNF9uaWMgKmVmeCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL21kaW9fMTBnLmgtMTA3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vcXQyMDJ4X3BoeS5jPTQ4MT1jb25zdCBzdHJ1Y3QgZWY0X3BoeV9vcGVyYXRpb25zIGZhbGNvbl9xdDIwMnhfcGh5X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3F0MjAyeF9waHkuYy00ODktXHQuc2V0X2xpbmtfa3NldHRpbmdzID0gZWY0X21kaW9fc2V0X2xpbmtfa3NldHRpbmdzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9xdDIwMnhfcGh5LmM6NDkwOlx0LnRlc3RfYWxpdmVcdCA9IGVmNF9tZGlvX3Rlc3RfYWxpdmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3F0MjAyeF9waHkuYy00OTEtXHQuZ2V0X21vZHVsZV9lZXByb20gPSBxdDIwMnhfcGh5X2dldF9tb2R1bGVfZWVwcm9tLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vdGVueHByZXNzLmM9NDc4PWNvbnN0IHN0cnVjdCBlZjRfcGh5X29wZXJhdGlvbnMgZmFsY29uX3NmeDcxMDFfcGh5X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3RlbnhwcmVzcy5jLTQ4Ny1cdC5zZXRfbnBhZ2VfYWR2ICAgID0gc2Z4NzEwMV9zZXRfbnBhZ2VfYWR2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi90ZW54cHJlc3MuYzo0ODg6XHQudGVzdF9hbGl2ZVx0ICA9IGVmNF9tZGlvX3Rlc3RfYWxpdmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3RlbnhwcmVzcy5jLTQ4OS1cdC50ZXN0X25hbWVcdCAgPSBzZng3MTAxX3Rlc3RfbmFtZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3R4YzQzMTI4X3BoeS5jPTU0Nj1jb25zdCBzdHJ1Y3QgZWY0X3BoeV9vcGVyYXRpb25zIGZhbGNvbl90eGNfcGh5X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3R4YzQzMTI4X3BoeS5jLTU1NC1cdC5zZXRfbGlua19rc2V0dGluZ3MgPSBlZjRfbWRpb19zZXRfbGlua19rc2V0dGluZ3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3R4YzQzMTI4X3BoeS5jOjU1NTpcdC50ZXN0X2FsaXZlXHQ9IGVmNF9tZGlvX3Rlc3RfYWxpdmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3R4YzQzMTI4X3BoeS5jLTU1Ni1cdC5ydW5fdGVzdHNcdD0gdHhjNDMxMjhfcnVuX3Rlc3RzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM9MzgxPWludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNDE2LVx0ICogSXQgZG9lc24mIzM5O3QgY29tcGxldGUgaXRzIHJlc2V0IHVudGlsIGF0IGxlYXN0IG9uZSBjbG9jayBjeWNsZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo0MTc6XHQgKiBvbiBNREMsIHNvIHBlcmZvcm0gYSBkdW1teSBtZGlvIHJlYWQuIFRvIGJlIHVwZGF0ZWQgZm9yIEdNQUM0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTQxOC1cdCAqIGlmIG5lZWRlZC5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX21kaW8uYy0yNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9waW5jdHJsL2NvbnN1bWVyLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2RhdmluY2lfbWRpby5jOjI4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8tYml0YmFuZy5oXHUwMDNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX21kaW8uYy0yOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNfc29jLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc9OTA9Y29uZmlnIE1ESU9fR1BJT1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy05Ny1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjk4Olx0ICB3aWxsIGJlIGNhbGxlZCBtZGlvLWdwaW8uXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctOTktXG4tLVxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0xMT1vYmotJChDT05GSUdfTURJT19CQ01fVU5JTUFDKVx0XHQmIzQzOz0gbWRpby1iY20tdW5pbWFjLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX01ESU9fQklUQkFORylcdFx0JiM0Mzs9IG1kaW8tYml0YmFuZy5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19NRElPX0NBVklVTSlcdFx0JiM0Mzs9IG1kaW8tY2F2aXVtLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX01ESU9fR1BJTylcdFx0XHQmIzQzOz0gbWRpby1ncGlvLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtMTUtb2JqLSQoQ09ORklHX01ESU9fSElTSV9GRU1BQylcdFx0JiM0Mzs9IG1kaW8taGlzaS1mZW1hYy5vXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJpdGJhbmcuYy0xNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYml0YmFuZy5jOjE4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8tYml0YmFuZy5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYml0YmFuZy5jLTE5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0yMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYzoyMjojaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLWJpdGJhbmcuaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0yMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmM9MTU3PXN0YXRpYyBpbnQgbWRpb19ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0xNzEtXHRpZiAocGRldi1cdTAwM2VkZXYub2Zfbm9kZSkge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYzoxNzI6XHRcdGJ1c19pZCA9IG9mX2FsaWFzX2dldF9pZChwZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcJiMzNDttZGlvLWdwaW9cJiMzNDspO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0xNzMtXHRcdGlmIChidXNfaWQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jPTE5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtZGlvX2dwaW9fb2ZfbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmM6MTk4Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3ZpcnR1YWwsbWRpby1ncGlvXCYjMzQ7LCB9LFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0xOTktXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWljcm9jaGlwLG1kaW8tc21pMFwmIzM0OyB9LFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmM9MjA0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1kaW9fZ3Bpb19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0yMDctXHQuZHJpdmVyXHRcdD0ge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYzoyMDg6XHRcdC5uYW1lXHQ9IFwmIzM0O21kaW8tZ3Bpb1wmIzM0OyxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmMtMjA5LVx0XHQub2ZfbWF0Y2hfdGFibGUgPSBtZGlvX2dwaW9fb2ZfbWF0Y2gsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYz0yMTM9bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtZGlvX2dwaW9fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmMtMjE0LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYzoyMTU6TU9EVUxFX0FMSUFTKFwmIzM0O3BsYXRmb3JtOm1kaW8tZ3Bpb1wmIzM0Oyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jLTIxNi1NT0RVTEVfQVVUSE9SKFwmIzM0O0xhdXJlbnQgUGluY2hhcnQsIFBhdWxpdXMgWmFsZWNrYXNcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE5ODU9c3RhdGljIHZvaWQgcjgxNTJfbWRpb19zZXRfYml0KHN0cnVjdCByODE1MiAqdHAsIHUxNiBhZGRyLCB1MTYgc2V0KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE5OTItXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxOTkzOnN0YXRpYyBpbnQgcjgxNTJfbWRpb190ZXN0X2FuZF9jbHJfYml0KHN0cnVjdCByODE1MiAqdHAsIHUxNiBhZGRyLCB1MTYgY2xlYXIpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xOTk0LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz03MjEyPXN0YXRpYyB2b2lkIHI4MTUyYl9pbml0KHN0cnVjdCByODE1MiAqdHApXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzIxOC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjcyMTk6XHRyODE1Ml9tZGlvX3Rlc3RfYW5kX2Nscl9iaXQodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTcyMjAtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NzI0Nj1zdGF0aWMgdm9pZCByODE1M19pbml0KHN0cnVjdCByODE1MiAqdHApXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzI3MS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjcyNzI6XHRyODE1Ml9tZGlvX3Rlc3RfYW5kX2Nscl9iaXQodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTcyNzMtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NzM2Mz1zdGF0aWMgdm9pZCByODE1M2JfaW5pdChzdHJ1Y3QgcjgxNTIgKnRwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTczODMtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo3Mzg0Olx0cjgxNTJfbWRpb190ZXN0X2FuZF9jbHJfYml0KHRwLCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy03Mzg1LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTc0MzM9c3RhdGljIHZvaWQgcjgxNTNjX2luaXQoc3RydWN0IHI4MTUyICp0cClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy03NDYwLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NzQ2MTpcdHI4MTUyX21kaW9fdGVzdF9hbmRfY2xyX2JpdCh0cCwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzQ2Mi1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz03NzE2PXN0YXRpYyB2b2lkIHI4MTU2Yl9od19waHlfY2ZnKHN0cnVjdCByODE1MiAqdHApXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzc1NC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjc3NTU6XHRyODE1Ml9tZGlvX3Rlc3RfYW5kX2Nscl9iaXQodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTc3NTYtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9Nzk3NT1zdGF0aWMgdm9pZCByODE1N19od19waHlfY2ZnKHN0cnVjdCByODE1MiAqdHApXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzk5Ni1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjc5OTc6XHRyODE1Ml9tZGlvX3Rlc3RfYW5kX2Nscl9iaXQodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTc5OTgtXG4tLVxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1MDE4LmM9Njc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNtX3Bpbmdyb3VwIGlwcTUwMThfZ3JvdXBzW10gPSB7XG4tLVxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1MDE4LmMtNzE1LVx0UElOR1JPVVAoMzYsIG1kYywgcWRzc190cmFjZWRhdGFfYiwgXywgd3NpX2NsazMsIF8sIF8sIF8sIF8sIF8pLFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1MDE4LmM6NzE2Olx0UElOR1JPVVAoMzcsIG1kaW8sIGF0ZXN0X2NoYXIsIHFkc3NfdHJhY2VkYXRhX2IsIF8sIHdzaV9kYXRhMywgXywgXywgXywgXyksXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTUwMTguYy03MTctXHRQSU5HUk9VUCgzOCwgcWRzc190cmFjZWRhdGFfYiwgXywgXywgXywgXywgXywgXywgXywgXyksXG4tLVxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1NDI0LmM9NzEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNtX3Bpbmdyb3VwIGlwcTU0MjRfZ3JvdXBzW10gPSB7XG4tLVxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1NDI0LmMtNzM0LVx0UElOR1JPVVAoMjAsIG1kY19zbHYsIGF0ZXN0X2NoYXIwLCBfLCBxZHNzX3RyYWNlZGF0YV9hLCBfLCBfLCBfLCBfLCBfKSxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxNTQyNC5jOjczNTpcdFBJTkdST1VQKDIxLCBtZGlvX3NsdiwgYXRlc3RfY2hhcjEsIF8sIHFkc3NfdHJhY2VkYXRhX2EsIF8sIF8sIF8sIF8sIF8pLFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1NDI0LmMtNzM2LVx0UElOR1JPVVAoMjIsIG1kY19tc3QsIGF0ZXN0X2NoYXIyLCBfLCBfLCBfLCBfLCBfLCBfLCBfKSxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxNTQyNC5jOjczNzpcdFBJTkdST1VQKDIzLCBtZGlvX21zdCwgYXRlc3RfY2hhcjMsIF8sIF8sIF8sIF8sIF8sIF8sIF8pLFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1NDI0LmMtNzM4LVx0UElOR1JPVVAoMjQsIHBjaWUwX2NsaywgUFRBMTAsIG1hYzAsIF8sIHdzaV9jbGssIF8sIGF0ZXN0X2NoYXIsIHFkc3NfY3RpX3RyaWdfb3V0X2EwLCBfKSxcbi0tXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTk2NTAuYz02NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtc21fcGluZ3JvdXAgaXBxOTY1MF9ncm91cHNbXSA9IHtcbi0tXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTk2NTAuYy02ODUtXHRbMjBdID0gUElOR1JPVVAoMjAsIG1kY19zbHYwLCBxdXBfc2UzLCBfLCBxZHNzX3RyYWNlZGF0YV9hLCBfLCBfLCBfLCBfLCBfKSxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxOTY1MC5jOjY4NjpcdFsyMV0gPSBQSU5HUk9VUCgyMSwgbWRpb19zbHYwLCBxdXBfc2UzLCBhdGVzdF9jaGFyX3N0YXJ0LCBfLCBxZHNzX3RyYWNlZGF0YV9hLCBfLCBfLCBfLCBfKSxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxOTY1MC5jLTY4Ny1cdFsyMl0gPSBQSU5HUk9VUCgyMiwgbWRjX21zdCwgYXRlc3RfY2hhcl9zdGF0dXMyLCBfLCBfLCBfLCBfLCBfLCBfLCBfKSxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxOTY1MC5jOjY4ODpcdFsyM10gPSBQSU5HUk9VUCgyMywgbWRpb19tc3QsIGF0ZXN0X2NoYXJfc3RhdHVzMywgXywgXywgXywgXywgXywgXywgXyksXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTk2NTAuYy02ODktXHRbMjRdID0gUElOR1JPVVAoMjQsIHBjaWUwX2Nsa19yZXFfbiwgXywgXywgXywgXywgXywgXywgXywgXyksXG4tLVxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tZG05NjA3LmM9OTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNtX3Bpbmdyb3VwIG1kbTk2MDdfZ3JvdXBzW10gPSB7XG4tLVxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tZG05NjA3LmMtOTU5LVx0XHQgXywgXyksXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1kbTk2MDcuYzo5NjA6XHRQSU5HUk9VUCgyNywgdWltMl9kYXRhLCBnbWFjX21kaW8sIGdjY19ncDFfY2xrX2EsIF8sIF8sIGF0ZXN0X2NvbWJvZGFjX3RvX2dwaW9fbmF0aXZlLCBfLCBfLFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tZG05NjA3LmMtOTYxLVx0XHQgXyksXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1kbTk2MDcuYzo5NjI6XHRQSU5HUk9VUCgyOCwgdWltMl9jbGssIGdtYWNfbWRpbywgZ2NjX2dwMl9jbGtfYSwgXywgXywgYXRlc3RfY29tYm9kYWNfdG9fZ3Bpb19uYXRpdmUsIF8sIF8sXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1kbTk2MDcuYy05NjMtXHRcdCBfKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3OTUKCQkJCQkJCW91dHB1dDogMTE5CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgdGhlIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AgZmlsZSwgd2hpY2ggaXMgdGhlIGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIGFuZCBBTjg4MTFIQiBFdGhlcm5ldCBQSFkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsaWtlIG1hbnkgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXJzLCB0aGlzIGlzIGdvaW5nIHRvIGJlIHByb2JsZW1hdGljIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLgoKVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCB0aGlzIGRyaXZlciwgbGlrZSBtb3N0IG9mIGl0cyBraW5kLCBhYnNvbHV0ZWx5ICpkZW1hbmRzKiB0aGUgcHJlc2VuY2Ugb2YgcGh5c2ljYWwgaGFyZHdhcmUg4oCTIHNwZWNpZmljYWxseSwgYW4gRU44ODExSCBQSFkgY29ubmVjdGVkIHRvIGFuIE1ESU8gYnVzLiBXaXRob3V0IHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBwcm9iZSBhbmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzIHNpbXBseSBjYW5ub3QgZXhlY3V0ZS4gVGhlIGNvZGUgcGF0aHMgd2l0aGluIGBhaXJfZW44ODExaC5jYCBhcmUgaW5oZXJlbnRseSB0aWVkIHRvIHRoZSBwaHlzaWNhbCBsYXllci4gVGhpcyBydWxlcyBvdXQgY29tbW9uIHZpcnR1YWxpemVkIHNldHVwcy4KClRoZXJlZm9yZSwgYWZ0ZXIgY29uc2lkZXJpbmcgYWxsIG9mIHRoaXMsIHRoZSBmaW5hbCB2ZXJkaWN0IGlzOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBGYWxzZS4gVGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoqICAgYEZvY3VzU3ltYm9sc2A6IEVtcHR5LiBObyBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIHdvcnRoIHRhcmdldGluZyBiZWNhdXNlIG9mIHRoZSBlbnZpcm9ubWVudCBkZXBlbmRlbmN5LgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBFbXB0eS4gTm8ga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjaGFuZ2UgdGhpcyBmdW5kYW1lbnRhbCBoYXJkd2FyZSBkZXBlbmRlbmN5LgoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBhbiBFdGhlcm5ldCBQSFkgZHJpdmVyIChhaXJfZW44ODExaC5jKSB0aGF0IHJlbGllcyBvbiBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQWlyb2hhIEVOODgxMUgvQU44ODExSEIpIGNvbm5lY3RlZCB0byBhbiBNRElPIGJ1cy4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4KCkkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIG15IGFzc3VtcHRpb25zLCBhbmQgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgY29uY2x1c2lvbnMuIFRpbWUgdG8gY2FsbCBpdCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIEVOODgxMUggRXRoZXJuZXQgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMpIHRvIGFkZCBhIGZpcm13YXJlIHNpemUgYWxpZ25tZW50IGNoZWNrLiBFdGhlcm5ldCBQSFkgaGFyZHdhcmUgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIFBIWSBoYXJkd2FyZSBjb25uZWN0ZWQgdmlhIE1ESU8sIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSBvciBHQ0UpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjg4MTFIIEV0aGVybmV0IFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jKSB0byBhZGQgYSBmaXJtd2FyZSBzaXplIGFsaWdubWVudCBjaGVjay4gRXRoZXJuZXQgUEhZIGhhcmR3YXJlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgaGFyZHdhcmUgY29ubmVjdGVkIHZpYSBNRElPLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowODo1Ni4xNzIxMTYzODdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTc3ODcwMzMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU44ODExSCBFdGhlcm5ldCBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYykgdG8gYWRkIGEgZmlybXdhcmUgc2l6ZSBhbGlnbm1lbnQgY2hlY2suIEV0aGVybmV0IFBIWSBoYXJkd2FyZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgUEhZIGhhcmR3YXJlIGNvbm5lY3RlZCB2aWEgTURJTywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSkuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowODo1Ni4xNzIxMjI1OTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjI4NTY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIwY2M5NDhlMmI0YjJmNmYxMTkxNzZjZmEwNjllYWJlNDBlNzRmYzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAyMjowODo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXFxuaW5kZXggMGVlYjdiOWE0ZTI2MC4uMzRkMjcyN2U4MjIyYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXFxuQEAgLTMxMiw2ICszMTIsMTIgQEAgc3RhdGljIGludCBhaXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxcbiBcXHRpbnQgc2F2ZWRfcGFnZTtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbitcXHRpZiAoZnctXFx1MDAzZXNpemUgJSA0KSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiZmlybXdhcmUgc2l6ZSAlenUgaXMgbm90IGEgbXVsdGlwbGUgb2YgNFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgZnctXFx1MDAzZXNpemUpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4gXFx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcXG4gXFxuIFxcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2U9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDg6NTYuNzQ5MDEwMTMzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NTIwMTc5MTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjg4MTFIIEV0aGVybmV0IFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jKSB0byBhZGQgYSBmaXJtd2FyZSBzaXplIGFsaWdubWVudCBjaGVjay4gRXRoZXJuZXQgUEhZIGhhcmR3YXJlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgaGFyZHdhcmUgY29ubmVjdGVkIHZpYSBNRElPLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDIwY2M5NDhlMmI0YjJmNmYxMTkxNzZjZmEwNjllYWJlNDBlNzRmYzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIyOjA4OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuaW5kZXggMGVlYjdiOWE0ZTI2MC4uMzRkMjcyN2U4MjIyYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuQEAgLTMxMiw2ICszMTIsMTIgQEAgc3RhdGljIGludCBhaXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxuIFx0aW50IHNhdmVkX3BhZ2U7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbitcdGlmIChmdy1cdTAwM2VzaXplICUgNCkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XFxuXCIsXG4rXHRcdFx0ICAgZnctXHUwMDNlc2l6ZSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuIFx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbiBcbiBcdGlmIChzYXZlZF9wYWdlIFx1MDAzZT0gMCkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDg6NTYuNzQ5MDExODQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAzNjc4NzA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZXZpZXdpbmcgdGhlIFByb3Bvc2VkIFBhdGNoKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gdGFrZSBhIGxvb2sgYXQgYSBwYXRjaCB0aGF0IGltcGFjdHMgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYC4gVGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIG5ldHdvcmsgUEhZIGRyaXZlciBmb3IgdGhlIEFpci1FTjg4MTFILiBCZWZvcmUgSSBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlcyB0aGVtc2VsdmVzLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29udGV4dC5cblxuTXkgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSB0byBhY3R1YWxseSBvcGVuIGFuZCByZXZpZXcgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCBkaXJlY3RseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEFmdGVyIHRoYXQsIEkgd2lsbCBhbHNvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYW5kIGRldGVybWluZSBleGFjdGx5IHdoZXJlIGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgYmVpbmcgdXNlZC4gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBcblxuVG8gYWNoaWV2ZSB0aGlzLCBJJ2xsIGxpa2VseSB1c2UgYSB0b29sIGxpa2UgYHJlYWQtZmlsZWAsIG9yIG1heWJlIGBncmVwcGVyYCBpZiBJJ20gbG9va2luZyBmb3Igc3BlY2lmaWMgc3RyaW5ncyBvciB1c2FnZXMuIEkgbmVlZCBhIHNvbGlkIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgY2FuIGFzc2VzcyB0aGUgaW1wYWN0IGFuZCBjb3JyZWN0bmVzcyBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjAxLjc4NTgwMjUzMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTA6XFx0XFx0XFx0XFx0ICBsb3dlcl8xNl9iaXRzKGFkZHJlc3MpKTtcXG4gMjkxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAyOTI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjkzOlxcdFxcbiAyOTQ6XFx0XFx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXFx1MDAzYyBmdy1cXHUwMDNlc2l6ZTsgb2Zmc2V0ICs9IDQpIHtcXG4gMjk1OlxcdFxcdFxcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcXHUwMDI2ZnctXFx1MDAzZWRhdGFbb2Zmc2V0ICsgMl0pO1xcbiAyOTY6XFx0XFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILCB2YWwpO1xcbiAyOTc6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDI5ODpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHRcXHR2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMTYoXFx1MDAyNmZ3LVxcdTAwM2VkYXRhW29mZnNldF0pO1xcbiAzMDE6XFx0XFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csIHZhbCk7XFxuIDMwMjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMzAzOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDMwNDpcXHRcXHR9XFxuIDMwNTpcXHRcXG4gMzA2OlxcdFxcdHJldHVybiAwO1xcbiAzMDc6XFx0fVxcbiAzMDg6XFx0XFxuIDMwOTpcXHRzdGF0aWMgaW50IGFpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXFxuIDMxMDpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcXG4gMzExOlxcdHtcXG4gMzEyOlxcdFxcdGludCBzYXZlZF9wYWdlO1xcbiAzMTM6XFx0XFx0aW50IHJldCA9IDA7XFxuIDMxNDpcXHRcXG4gMzE1OlxcdFxcdGlmIChmdy1cXHUwMDNlc2l6ZSAlIDQpIHtcXG4gMzE2OlxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiZmlybXdhcmUgc2l6ZSAlenUgaXMgbm90IGEgbXVsdGlwbGUgb2YgNFxcXFxuXFxcIixcXG4gMzE3OlxcdFxcdFxcdFxcdCAgIGZ3LVxcdTAwM2VzaXplKTtcXG4gMzE4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMTk6XFx0XFx0fVxcbiAzMjA6XFx0XFxuIDMyMTpcXHRcXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xcbiAzMjI6XFx0XFxuIDMyMzpcXHRcXHRpZiAoc2F2ZWRfcGFnZSBcXHUwMDNlPSAwKSB7XFxuIDMyNDpcXHRcXHRcXHRyZXQgPSBfX2Fpcl93cml0ZV9idWYocGh5ZGV2LCBhZGRyZXNzLCBmdyk7XFxuIDMyNTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMzI2OlxcdFxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiJXMgMHglMDh4IGZhaWxlZDogJWRcXFxcblxcXCIsIF9fZnVuY19fLFxcbiAzMjc6XFx0XFx0XFx0XFx0XFx0ICAgYWRkcmVzcywgcmV0KTtcXG4gMzI4OlxcdFxcdH1cXG4gMzI5OlxcdFxcbiAzMzA6XFx0XFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBzYXZlZF9wYWdlLCByZXQpO1xcbiAzMzE6XFx0fVxcbiAzMzI6XFx0XFxuIDMzMzpcXHRzdGF0aWMgaW50IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gMzM0OlxcdHtcXG4gMzM1OlxcdFxcdGludCByZXQsIHJlZ192YWx1ZTtcXG4gMzM2OlxcdFxcbiAzMzc6XFx0XFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcXG4gMzM4OlxcdFxcdFxcdFxcdFxcdFxcdCBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gpO1xcbiAzMzk6XFx0XFx0aWYgKHJldClcXG4gMzQwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdC8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2FkcyAqL1xcbiAzNDM6XFx0XFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxcbiAzNDQ6XFx0XFx0XFx0XFx0XFx0XFx0RU44ODExSF9QSFlfRldfU1RBVFVTLCByZWdfdmFsdWUsXFxuIDM0NTpcXHRcXHRcXHRcXHRcXHRcXHRyZWdfdmFsdWUgPT0gRU44ODExSF9QSFlfUkVBRFksXFxuIDM0NjpcXHRcXHRcXHRcXHRcXHRcXHQyMDAwMCwgNzUwMDAwMCwgdHJ1ZSk7XFxuIDM0NzpcXHRcXHRpZiAocmV0KSB7XFxuIDM0ODpcXHRcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIk1DVSBub3QgcmVhZHk6IDB4JXhcXFxcblxcXCIsIHJlZ192YWx1ZSk7XFxuIDM0OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMzUwOlxcdFxcdH1cXG4gMzUxOlxcdFxcbiAzNTI6XFx0XFx0cmV0dXJuIDA7XFxuIDM1MzpcXHR9XFxuIDM1NDpcXHRcXG4gMzU1OlxcdHN0YXRpYyBpbnQgYW44ODExaGJfY2hlY2tfY3JjKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBzZXQxLFxcbiAzNTY6XFx0XFx0XFx0XFx0ICAgICAgdTMyIG1vbjIsIHUzMiBtb24zKVxcbiAzNTc6XFx0e1xcbiAzNTg6XFx0XFx0dTMyIHBidXNfdmFsdWU7XFxuIDM1OTpcXHRcXHRpbnQgcmV0cnkgPSAyNTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MDEuNzg1OTYwOTYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjczNTYwMDcwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQWlyb2hhIEVOODgxMUggRXRoZXJuZXQgUEhZIERyaXZlcioqXG5cbkFscmlnaHQsIEkndmUgZ290IGBhaXJfZW44ODExaC5jYCBoZXJlLCB0aGUgQWlyb2hhIEVOODgxMUggMi41RyBFdGhlcm5ldCBQSFkgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIHRoZSB3YXkgaXQncyBicm91Z2h0IGludG8gdGhlIHN5c3RlbS4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgS2NvbmZpZyBlbnRyeSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkcml2ZXIuIFVuZGVyc3RhbmRpbmcgdGhlIEtjb25maWcgd2lsbCByZXZlYWwgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMg4oCTIGRvZXMgaXQgbmVlZCBzcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJlbWVudHMsIG9yIGNhbiBpdCBiZSBidWlsdCBhcyBhIG1vZHVsZSBtb3JlIGdlbmVyYWxseT8gVGhpcyBwcm9iZSBwcm9jZXNzIGlzIGtleS4gRG9lcyBpdCBhdXRvbWF0aWNhbGx5IGRldGVjdCB0aGUgUEhZLCBvciBkb2VzIGl0IHJlcXVpcmUgc29tZSBraW5kIG9mIHVzZXItZGVmaW5lZCBjb25maWd1cmF0aW9uIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCBoYXJkd2FyZT8gSSdsbCBuZWVkIHRvIGZvbGxvdyB0aGUgS2NvbmZpZyBicmVhZGNydW1icyB0byBlc3RhYmxpc2ggaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYxNSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MDQuNTIxNTY2NDg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODkzNDI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBSVJfRU44ODExSHxhaXJfZW44ODExaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9OTM9Y29uZmlnIEFJUl9BTjg4MDFfUEhZXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy05OC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo5OTpjb25maWcgQUlSX0VOODgxMUhfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTAwLVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgRU44ODExSCAyLjUgR2lnYWJpdCBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX0FJUl9BTjg4MDFfUEhZKVxcdCs9IGFpcl9hbjg4MDEub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQUlSX0VOODgxMUhfUEhZKSAgICs9IGFpcl9lbjg4MTFoLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMzUtb2JqLSQoQ09ORklHX0FJUl9ORVRfUEhZTElCKVxcdCs9IGFpcl9waHlfbGliLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMzI0LS8qIExFRCBiYXNpYyBjb250cm9sIHJlZ2lzdGVyLCBwYXJ0IG9mIHRoZSBzYW1lIExFRCBibG9jayBhcyB0aGUgTEVEMC9MRUQxXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYzozMjU6ICogY29udHJvbCByZWdpc3RlcnMgYWJvdmUuIFRoZSBhaXJfZW44ODExaCBkcml2ZXIgZGVzY3JpYmVzIHRoZSBzYW1lXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0zMjYtICogcmVnaXN0ZXIgYXMgQUlSX1BIWV9MRURfQkNSLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYz0xNDgyPXN0YXRpYyBpbnQgZW43NTI4X3BoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNDg2LVxcdCAqIHByb2dyYW1tZWQgaW50byB0aGUgTEVEIGNvbnRyb2wgcmVnaXN0ZXJzLiBIYW5kIHRoZSBwaW5zIG92ZXIgdG9cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jOjE0ODc6XFx0ICogdGhlIExFRCBjb250cm9sIHJlZ2lzdGVycyB0aGUgc2FtZSB3YXkgdGhlIGFpcl9lbjg4MTFoIGRyaXZlclxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTQ4OC1cXHQgKiBkb2VzOyB0aGUgbW9kZSBmaWVsZCBvZiB0aGlzIHJlZ2lzdGVyIGlzIGFscmVhZHkgc2V0IG91dCBvZiByZXNldC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MDQuNjUwNTA5NzcyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk3MTk2NjQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBhaXJfZW44ODExaC5jYCBQSFkgRHJpdmVyKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBlbnRpcmUgYGFpcl9lbjg4MTFoLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBhcmNoaXRlY3R1cmUgYW5kIGZsb3cgb2YgdGhpcyBQSFkgZHJpdmVyLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBleGFjdGx5IHdoYXQgbWVjaGFuaXNtcyBraWNrIG9mZiB0aGUgYGFpcl93cml0ZV9idWZgIGZ1bmN0aW9uLiBJJ20gbm90IGp1c3QgaW50ZXJlc3RlZCBpbiAqd2hlcmUqIGl0J3MgY2FsbGVkLCBidXQgdGhlICp3aHkqIC0gdGhlIHVuZGVybHlpbmcgY29uZGl0aW9ucyBhbmQgZXZlbnRzIHRoYXQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uLiBJIHdhbnQgdG8gYnVpbGQgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgdGhlIGRyaXZlcidzIG9wZXJhdGlvbiwgc28gSSBjYW4gcHJlZGljdCBpdHMgYmVoYXZpb3IgYW5kIHBpbnBvaW50IHBvdGVudGlhbCBpc3N1ZXMuIFRoaXMgbWVhbnMgbWFwcGluZyBvdXQgdGhlIGNvbnRyb2wgZmxvdywgaWRlbnRpZnlpbmcga2V5IGRhdGEgc3RydWN0dXJlcywgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGludGVycnVwdCBoYW5kbGVycywgdGFza2xldHMsIERNQSBvcGVyYXRpb25zLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IG1lY2hhbmlzbXMgdGhhdCBjb3VsZCBsZWFkIHRvIGEgY2FsbCB0byBgYWlyX3dyaXRlX2J1ZmAuIFRoZSBnb2FsIGlzIGEgaG9saXN0aWMgdW5kZXJzdGFuZGluZywgbm90IGp1c3QgYSBzdXJmYWNlLWxldmVsIHNjYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOToxMC42MjI0Nzg4NDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ1NDE5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyX3dyaXRlX2J1ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0yNDg9c3RhdGljIGludCBfX2Fpcl9wYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNzItXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MjczOnN0YXRpYyBpbnQgX19haXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI3NC1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzA4LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjMwOTpzdGF0aWMgaW50IGFpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzEwLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzIzLVxcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2U9IDApIHtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzozMjQ6XFx0XFx0cmV0ID0gX19haXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgZncpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTMyNS1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTQwMz1zdGF0aWMgaW50IGFuODgxMWhiX2xvYWRfZmlsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDEzLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjQxNDpcXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgIGZ3KTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00MTUtXFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz01MDg9c3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUzMi1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MzM6XFx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RNLCAgZncxKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzQtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzYtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTM3OlxcdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3Mik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTM4LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOToxMC43MDcwMjU5MThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjQ1NDk3MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb24sIGFuZCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBhaXJfZW44ODExaC5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBhaXJfZW44ODExaC5jYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3BoeWAgZGlyZWN0b3J5LiBJJ20gYWxyZWFkeSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIFBIWSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgYW4gQWlyIEV0aGVybmV0IEVOODgxMUguIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBrZXkgYXJlYXMuIEZpcnN0LCBJJ20gYW50aWNpcGF0aW5nIHRoZSBzdGFuZGFyZCBQSFkgZHJpdmVyIHN0cnVjdHVyZTogaW5pdGlhbGl6YXRpb24gcm91dGluZXMgKGBhaXJfZW44ODExaF9wcm9iZWAsIGBhaXJfZW44ODExaF9jb25maWdfaW5pdGApLCBjb25maWd1cmF0aW9uL2xpbmsgbWFuYWdlbWVudCBmdW5jdGlvbnMgKGBhaXJfZW44ODExaF9jb25maWdgLCBgYWlyX2VuODgxMWhfbGlua191cGAsIGBhaXJfZW44ODExaF9saW5rX2Rvd25gKSwgYW5kIHBvdGVudGlhbGx5IGludGVycnVwdCBoYW5kbGVycyBpZiBpdCdzIGdvdCBhIGZhbmN5IGludGVycnVwdC1kcml2ZW4gbGluayBzdGF0dXMgY2hhbmdlIHN5c3RlbS5cblxuSSdsbCBiZSB6ZXJvaW5nIGluIG9uIHRoZSByZWdpc3RlciBhY2Nlc3MgbWV0aG9kcyB1c2VkLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhleSdyZSB1c2luZyBhIHN0YW5kYXJkIE1ESU8gaW50ZXJmYWNlIG9yIHNvbWV0aGluZyBwcm9wcmlldGFyeS4gQW5kLCBJJ2xsIGJlIG1ha2luZyBub3RlIG9mIHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyB0aGF0IGFyZSB1bmlxdWUgdG8gdGhpcyBzcGVjaWZpYyBQSFkuIEFueSB2ZW5kb3Itc3BlY2lmaWMgcXVpcmtzPyBBcmUgdGhleSBpbXBsZW1lbnRpbmcgYW55IGF1dG8tbmVnb3RpYXRpb24gb3ZlcnJpZGVzIG9yIGN1c3RvbSBwb3dlci1zYXZpbmcgbW9kZXM/IEFsc28sIEkgYW0gZXhwZWN0aW5nIHNvbWUgc29ydCBvZiBzdXBwb3J0IGZvciBkaWZmZXJlbnQgTUlJIG1vZGVzLlxuXG5MZXQncyBzZWUgaWYgdGhlIGNvZGUgY29tbWVudHMgYXJlIGdvb2QsIGJlY2F1c2UgSSdtIGhvcGluZyBJIGRvbid0IGhhdmUgdG8gc3BlbmQgYSBsb3Qgb2YgdGltZSByZXZlcnNlIGVuZ2luZWVyaW5nIHRoZSByZWdpc3RlciBkZXNjcmlwdGlvbnMuIFRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZmlndXJlIG91dCBob3cgdGhpcyBkcml2ZXIgd29ya3MgaXMgdGhyb3VnaCBhIGxvb2sgaW50byB0aGUgZGV2aWNlJ3MgZGF0YXNoZWV0LiBJIHNob3VsZCBncmFiIHRoYXQgZGF0YXNoZWV0IGZvciB0aGlzIGRldmljZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgbGluayBwYXJ0bmVyJ3MgZGV0ZWN0aW9uIGFuZCBhdXRvLW5lZ290aWF0aW9uIGhhbmRsaW5nIOKAkyB0aGF0J3Mgb2Z0ZW4gd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSdsbCBhbHNvIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGVycm9yIGhhbmRsaW5nIG9yIHJldHJ5IGxvZ2ljOyByb2J1c3RuZXNzIGlzIGtleSBpbiBuZXR3b3JrIGRyaXZlcnMuIExldCdzIHNlZSBob3cgd2VsbCBpdCdzIGJlZW4gZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ4MiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjE1LjM1MjUyNzg4M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRcXHRcXHRcXHQgQU44ODExSEJfQ1JDX1BNX01PTjIsXFxuIDUwMTpcXHRcXHRcXHRcXHRcXHQgQU44ODExSEJfQ1JDX1BNX01PTjMpO1xcbiA1MDI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDUwMzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1MDQ6XFx0XFxuIDUwNTpcXHRcXHRyZXR1cm4gZW44ODExaF93YWl0X21jdV9yZWFkeShwaHlkZXYpO1xcbiA1MDY6XFx0fVxcbiA1MDc6XFx0XFxuIDUwODpcXHRzdGF0aWMgaW50IGVuODgxMWhfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiA1MDk6XFx0e1xcbiA1MTA6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuIDUxMTpcXHRcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MSwgKmZ3MjtcXG4gNTEyOlxcdFxcdGludCByZXQ7XFxuIDUxMzpcXHRcXG4gNTE0OlxcdFxcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFxcdTAwMjZmdzEsIEVOODgxMUhfTUQzMl9ETSwgZGV2KTtcXG4gNTE1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA1MTY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNTE3OlxcdFxcbiA1MTg6XFx0XFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNmZ3MiwgRU44ODExSF9NRDMyX0RTUCwgZGV2KTtcXG4gNTE5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA1MjA6XFx0XFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTtcXG4gNTIxOlxcdFxcbiA1MjI6XFx0XFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcXG4gNTIzOlxcdFxcdFxcdFxcdFxcdFxcdCBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCk7XFxuIDUyNDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNTI1OlxcdFxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9GV19DVFJMXzIsXFxuIDUyODpcXHRcXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsXFxuIDUyOTpcXHRcXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcpO1xcbiA1MzA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDUzMTpcXHRcXHRcXHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XFxuIDUzMjpcXHRcXG4gNTMzOlxcdFxcdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9ETSwgIGZ3MSk7XFxuIDUzNDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNTM1OlxcdFxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG4gNTM2OlxcdFxcbiA1Mzc6XFx0XFx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RTUCwgZncyKTtcXG4gNTM4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA1Mzk6XFx0XFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xcbiA1NDA6XFx0XFxuIDU0MTpcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcXG4gNTQyOlxcdFxcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgMCk7XFxuIDU0MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNTQ0OlxcdFxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0cmV0ID0gZW44ODExaF93YWl0X21jdV9yZWFkeShwaHlkZXYpO1xcbiA1NDc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDU0ODpcXHRcXHRcXHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XFxuIDU0OTpcXHRcXG4gNTUwOlxcdFxcdGVuODgxMWhfcHJpbnRfZndfdmVyc2lvbihwaHlkZXYpO1xcbiA1NTE6XFx0XFxuIDU1MjpcXHRlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0OlxcbiA1NTM6XFx0XFx0cmVsZWFzZV9maXJtd2FyZShmdzIpO1xcbiA1NTQ6XFx0XFxuIDU1NTpcXHRlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTpcXG4gNTU2OlxcdFxcdHJlbGVhc2VfZmlybXdhcmUoZncxKTtcXG4gNTU3OlxcdFxcbiA1NTg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDU1OTpcXHRcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkxvYWQgZmlybXdhcmUgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0cmV0dXJuIHJldDtcXG4gNTYyOlxcdH1cXG4gNTYzOlxcdFxcbiA1NjQ6XFx0c3RhdGljIGludCBlbjg4MTFoX3Jlc3RhcnRfbWN1KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIDU2NTpcXHR7XFxuIDU2NjpcXHRcXHRpbnQgcmV0O1xcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHRpZiAocGh5X2lkX2NvbXBhcmVfbW9kZWwocGh5ZGV2LVxcdTAwM2VwaHlfaWQsIEFOODgxMUhCX1BIWV9JRCkpIHtcXG4gNTY5OlxcdFxcdFxcdHJldCA9IGFuODgxMWhiX21jdV9hc3NlcnQocGh5ZGV2KTtcXG4gNTcwOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA1NzE6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNTcyOlxcdFxcbiA1NzM6XFx0XFx0XFx0cmV0ID0gYW44ODExaGJfbWN1X2RlYXNzZXJ0KHBoeWRldik7XFxuIDU3NDpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNTc1OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDU3NjpcXHRcXHR9XFxuIDU3NzpcXHRcXG4gNTc4OlxcdFxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXFxuIDU3OTpcXHRcXHRcXHRcXHRcXHRcXHQgRU44ODExSF9GV19DVFJMXzFfU1RBUlQpO1xcbiA1ODA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDU4MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHRyZXR1cm4gZW44ODExaF93YWl0X21jdV9yZWFkeShwaHlkZXYpO1xcbiA1ODQ6XFx0fVxcbiA1ODU6XFx0XFxuIDU4NjpcXHRzdGF0aWMgaW50IGFpcl9od19sZWRfb25fc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LCBib29sIG9uKVxcbiA1ODc6XFx0e1xcbiA1ODg6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4gNTg5OlxcdFxcdGJvb2wgY2hhbmdlZDtcXG4gNTkwOlxcdFxcbiA1OTE6XFx0XFx0aWYgKGluZGV4IFxcdTAwM2U9IEVOODgxMUhfTEVEX0NPVU5UKVxcbiA1OTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU5MzpcXHRcXG4gNTk0OlxcdFxcdGlmIChvbilcXG4gNTk1OlxcdFxcdFxcdGNoYW5nZWQgPSAhdGVzdF9hbmRfc2V0X2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9PTixcXG4gNTk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cHJpdi1cXHUwMDNlbGVkW2luZGV4XS5zdGF0ZSk7XFxuIDU5NzpcXHRcXHRlbHNlXFxuIDU5ODpcXHRcXHRcXHRjaGFuZ2VkID0gISF0ZXN0X2FuZF9jbGVhcl9iaXQoQUlSX1BIWV9MRURfU1RBVEVfRk9SQ0VfT04sXFxuIDU5OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnByaXYtXFx1MDAzZWxlZFtpbmRleF0uc3RhdGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOToxNS4zNTMwMDAxNDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI2NjcyMDY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgUEhZIGRldmljZSByZWdpc3RyYXRpb24gYW5kIHByb2JpbmcgcHJvY2VzcyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBkcml2ZXIuIEtub3dpbmcgaG93IGl0J3MgaGFuZGxlZCBpbiB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gaXMgY3J1Y2lhbCBmb3IgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXZpY2UncyBsaWZlY3ljbGUuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHN0YW5kYXJkIFBIWSByZWdpc3RyYXRpb24gZnVuY3Rpb25zLCBsaWtlbHkgYSBgcGh5X2RyaXZlcmAgc3RydWN0dXJlIGRlZmluaXRpb24sIGFuZCB0aGUgcHJvYmUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGluaXRpYWwgY29uZmlndXJhdGlvbiBhbmQgbGluayBlc3RhYmxpc2htZW50LiBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzOyBob3cgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJJ20gaW50ZXJlc3RlZCBpbiBob3cgdGhleSdyZSBoYW5kbGluZyBpbnRlcnJ1cHRzLCByZXNldCBzZXF1ZW5jZXMsIGFuZCBhbnkgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGlzIHNwZWNpZmljIGRyaXZlciByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njc1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOToxNy42MTk3MzA0ODhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MDA6XFx0XFxuIDYwMTpcXHRcXHRjaGFuZ2VkIHw9IChwcml2LVxcdTAwM2VsZWRbaW5kZXhdLnJ1bGVzICE9IDApO1xcbiA2MDI6XFx0XFxuIDYwMzpcXHRcXHQvKiBjbGVhciBuZXRkZXYgdHJpZ2dlciBydWxlcyBpbiBjYXNlIExFRF9PRkYgaGFzIGJlZW4gc2V0ICovXFxuIDYwNDpcXHRcXHRpZiAoIW9uKVxcbiA2MDU6XFx0XFx0XFx0cHJpdi1cXHUwMDNlbGVkW2luZGV4XS5ydWxlcyA9IDA7XFxuIDYwNjpcXHRcXG4gNjA3OlxcdFxcdGlmIChjaGFuZ2VkKVxcbiA2MDg6XFx0XFx0XFx0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsXFxuIDYwOTpcXHRcXHRcXHRcXHRcXHQgICAgICBBSVJfUEhZX0xFRF9PTihpbmRleCksXFxuIDYxMDpcXHRcXHRcXHRcXHRcXHQgICAgICBBSVJfUEhZX0xFRF9PTl9NQVNLLFxcbiA2MTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgb24gPyBBSVJfUEhZX0xFRF9PTl9GT1JDRV9PTiA6IDApO1xcbiA2MTI6XFx0XFxuIDYxMzpcXHRcXHRyZXR1cm4gMDtcXG4gNjE0OlxcdH1cXG4gNjE1OlxcdFxcbiA2MTY6XFx0c3RhdGljIGludCBhaXJfaHdfbGVkX2JsaW5rX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcXG4gNjE3OlxcdFxcdFxcdFxcdFxcdGJvb2wgYmxpbmtpbmcpXFxuIDYxODpcXHR7XFxuIDYxOTpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbiA2MjA6XFx0XFx0Ym9vbCBjaGFuZ2VkO1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRpZiAoaW5kZXggXFx1MDAzZT0gRU44ODExSF9MRURfQ09VTlQpXFxuIDYyMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjI0OlxcdFxcbiA2MjU6XFx0XFx0aWYgKGJsaW5raW5nKVxcbiA2MjY6XFx0XFx0XFx0Y2hhbmdlZCA9ICF0ZXN0X2FuZF9zZXRfYml0KEFJUl9QSFlfTEVEX1NUQVRFX0ZPUkNFX0JMSU5LLFxcbiA2Mjc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZwcml2LVxcdTAwM2VsZWRbaW5kZXhdLnN0YXRlKTtcXG4gNjI4OlxcdFxcdGVsc2VcXG4gNjI5OlxcdFxcdFxcdGNoYW5nZWQgPSAhIXRlc3RfYW5kX2NsZWFyX2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9CTElOSyxcXG4gNjMwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2cHJpdi1cXHUwMDNlbGVkW2luZGV4XS5zdGF0ZSk7XFxuIDYzMTpcXHRcXG4gNjMyOlxcdFxcdGNoYW5nZWQgfD0gKHByaXYtXFx1MDAzZWxlZFtpbmRleF0ucnVsZXMgIT0gMCk7XFxuIDYzMzpcXHRcXG4gNjM0OlxcdFxcdGlmIChjaGFuZ2VkKVxcbiA2MzU6XFx0XFx0XFx0cmV0dXJuIHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcXG4gNjM2OlxcdFxcdFxcdFxcdFxcdCAgICAgQUlSX1BIWV9MRURfQkxJTksoaW5kZXgpLFxcbiA2Mzc6XFx0XFx0XFx0XFx0XFx0ICAgICBibGlua2luZyA/XFxuIDYzODpcXHRcXHRcXHRcXHRcXHQgICAgIEFJUl9QSFlfTEVEX0JMSU5LX0ZPUkNFX0JMSU5LIDogMCk7XFxuIDYzOTpcXHRcXHRlbHNlXFxuIDY0MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjQxOlxcdH1cXG4gNjQyOlxcdFxcbiA2NDM6XFx0c3RhdGljIGludCBhaXJfbGVkX2JsaW5rX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcXG4gNjQ0OlxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXFxuIDY0NTpcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcXG4gNjQ2OlxcdHtcXG4gNjQ3OlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuIDY0ODpcXHRcXHRib29sIGJsaW5raW5nID0gZmFsc2U7XFxuIDY0OTpcXHRcXHRpbnQgZXJyO1xcbiA2NTA6XFx0XFxuIDY1MTpcXHRcXHRpZiAoaW5kZXggXFx1MDAzZT0gRU44ODExSF9MRURfQ09VTlQpXFxuIDY1MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjUzOlxcdFxcbiA2NTQ6XFx0XFx0aWYgKGRlbGF5X29uIFxcdTAwMjZcXHUwMDI2IGRlbGF5X29mZiBcXHUwMDI2XFx1MDAyNiAoKmRlbGF5X29uIFxcdTAwM2UgMCkgXFx1MDAyNlxcdTAwMjYgKCpkZWxheV9vZmYgXFx1MDAzZSAwKSkge1xcbiA2NTU6XFx0XFx0XFx0YmxpbmtpbmcgPSB0cnVlO1xcbiA2NTY6XFx0XFx0XFx0KmRlbGF5X29uID0gNTA7XFxuIDY1NzpcXHRcXHRcXHQqZGVsYXlfb2ZmID0gNTA7XFxuIDY1ODpcXHRcXHR9XFxuIDY1OTpcXHRcXG4gNjYwOlxcdFxcdGVyciA9IGFpcl9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGJsaW5raW5nKTtcXG4gNjYxOlxcdFxcdGlmIChlcnIpXFxuIDY2MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA2NjM6XFx0XFxuIDY2NDpcXHRcXHQvKiBsZWQtYmxpbmsgc2V0LCBzbyBzd2l0Y2ggbGVkLW9uIG9mZiAqL1xcbiA2NjU6XFx0XFx0ZXJyID0gYWlyX2h3X2xlZF9vbl9zZXQocGh5ZGV2LCBpbmRleCwgZmFsc2UpO1xcbiA2NjY6XFx0XFx0aWYgKGVycilcXG4gNjY3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDY2ODpcXHRcXG4gNjY5OlxcdFxcdC8qIGh3LWNvbnRyb2wgaXMgb2ZmKi9cXG4gNjcwOlxcdFxcdGlmICghIXRlc3RfYml0KEFJUl9QSFlfTEVEX1NUQVRFX0ZPUkNFX0JMSU5LLCBcXHUwMDI2cHJpdi1cXHUwMDNlbGVkW2luZGV4XS5zdGF0ZSkpXFxuIDY3MTpcXHRcXHRcXHRwcml2LVxcdTAwM2VsZWRbaW5kZXhdLnJ1bGVzID0gMDtcXG4gNjcyOlxcdFxcbiA2NzM6XFx0XFx0cmV0dXJuIDA7XFxuIDY3NDpcXHR9XFxuIDY3NTpcXHRcXG4gNjc2OlxcdHN0YXRpYyBpbnQgYWlyX2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcXG4gNjc3OlxcdFxcdFxcdFxcdFxcdCAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSlcXG4gNjc4OlxcdHtcXG4gNjc5OlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuIDY4MDpcXHRcXHRpbnQgZXJyO1xcbiA2ODE6XFx0XFxuIDY4MjpcXHRcXHRpZiAoaW5kZXggXFx1MDAzZT0gRU44ODExSF9MRURfQ09VTlQpXFxuIDY4MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0LyogbGVkLW9uIHNldCwgc28gc3dpdGNoIGxlZC1ibGluayBvZmYgKi9cXG4gNjg2OlxcdFxcdGVyciA9IGFpcl9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGZhbHNlKTtcXG4gNjg3OlxcdFxcdGlmIChlcnIpXFxuIDY4ODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA2ODk6XFx0XFxuIDY5MDpcXHRcXHRlcnIgPSBhaXJfaHdfbGVkX29uX3NldChwaHlkZXYsIGluZGV4LCAodmFsdWUgIT0gTEVEX09GRikpO1xcbiA2OTE6XFx0XFx0aWYgKGVycilcXG4gNjkyOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDY5MzpcXHRcXG4gNjk0OlxcdFxcdC8qIGh3LWNvbnRyb2wgaXMgb2ZmICovXFxuIDY5NTpcXHRcXHRpZiAoISF0ZXN0X2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9PTiwgXFx1MDAyNnByaXYtXFx1MDAzZWxlZFtpbmRleF0uc3RhdGUpKVxcbiA2OTY6XFx0XFx0XFx0cHJpdi1cXHUwMDNlbGVkW2luZGV4XS5ydWxlcyA9IDA7XFxuIDY5NzpcXHRcXG4gNjk4OlxcdFxcdHJldHVybiAwO1xcbiA2OTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOToxNy42MjAwMjc4NzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgyMzMyNjkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBjb2RlOlxuXG4qKkRpdmluZyBCYWNrIGludG8gYGFpcl9lbjg4MTFoLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgYmFjayBpbnRvIHRoZSB3ZWVkcyB3aXRoIGBhaXJfZW44ODExaC5jYC4gSSBuZWVkIHRvIHBpY2sgdXAgd2hlcmUgSSBsZWZ0IG9mZiDigJMgcHJvYmFibHkgc29tZSBsb3ctbGV2ZWwgZHJpdmVyIGRldGFpbHMsIG1heWJlIHJlZ2lzdGVyIGludGVyYWN0aW9ucywgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBlcnJvciBjaGVja2luZy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgZmxvdy4gSSBleHBlY3QgdGhpcyBmaWxlIGlzIGdvaW5nIHRvIGJlIHBhY2tlZCB3aXRoIGNyaXRpY2FsIGZ1bmN0aW9ucywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaXQuIEknbSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzIGl0IGhhcyBhbmQgaG93IHRob3NlIHBsYXkgb3V0LiBJdCdzIHRpbWUgdG8gZ2V0IGEgbW9yZSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbXBvbmVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM5NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MjAuNDQzMzU4Nzg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdFxcbiA3MDE6XFx0c3RhdGljIGludCBhaXJfbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxcbiA3MDI6XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nICpydWxlcylcXG4gNzAzOlxcdHtcXG4gNzA0OlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuIDcwNTpcXHRcXG4gNzA2OlxcdFxcdGlmIChpbmRleCBcXHUwMDNlPSBFTjg4MTFIX0xFRF9DT1VOVClcXG4gNzA3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3MDg6XFx0XFxuIDcwOTpcXHRcXHQqcnVsZXMgPSBwcml2LVxcdTAwM2VsZWRbaW5kZXhdLnJ1bGVzO1xcbiA3MTA6XFx0XFxuIDcxMTpcXHRcXHRyZXR1cm4gMDtcXG4gNzEyOlxcdH07XFxuIDcxMzpcXHRcXG4gNzE0OlxcdHN0YXRpYyBpbnQgYWlyX2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcXG4gNzE1OlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBydWxlcylcXG4gNzE2OlxcdHtcXG4gNzE3OlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuIDcxODpcXHRcXHR1MTYgb24gPSAwLCBibGluayA9IDA7XFxuIDcxOTpcXHRcXHRpbnQgcmV0O1xcbiA3MjA6XFx0XFxuIDcyMTpcXHRcXHRpZiAoaW5kZXggXFx1MDAzZT0gRU44ODExSF9MRURfQ09VTlQpXFxuIDcyMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0XFx0cHJpdi1cXHUwMDNlbGVkW2luZGV4XS5ydWxlcyA9IHJ1bGVzO1xcbiA3MjU6XFx0XFxuIDcyNjpcXHRcXHRpZiAocnVsZXMgXFx1MDAyNiBCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpKVxcbiA3Mjc6XFx0XFx0XFx0b24gfD0gQUlSX1BIWV9MRURfT05fRkRYO1xcbiA3Mjg6XFx0XFxuIDcyOTpcXHRcXHRpZiAocnVsZXMgXFx1MDAyNiAoQklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApIHwgQklUKFRSSUdHRVJfTkVUREVWX0xJTkspKSlcXG4gNzMwOlxcdFxcdFxcdG9uIHw9IEFJUl9QSFlfTEVEX09OX0xJTksxMDtcXG4gNzMxOlxcdFxcbiA3MzI6XFx0XFx0aWYgKHJ1bGVzIFxcdTAwMjYgKEJJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMCkgfCBCSVQoVFJJR0dFUl9ORVRERVZfTElOSykpKVxcbiA3MzM6XFx0XFx0XFx0b24gfD0gQUlSX1BIWV9MRURfT05fTElOSzEwMDtcXG4gNzM0OlxcdFxcbiA3MzU6XFx0XFx0aWYgKHJ1bGVzIFxcdTAwMjYgKEJJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApIHwgQklUKFRSSUdHRVJfTkVUREVWX0xJTkspKSlcXG4gNzM2OlxcdFxcdFxcdG9uIHw9IEFJUl9QSFlfTEVEX09OX0xJTksxMDAwO1xcbiA3Mzc6XFx0XFxuIDczODpcXHRcXHRpZiAocnVsZXMgXFx1MDAyNiAoQklUKFRSSUdHRVJfTkVUREVWX0xJTktfMjUwMCkgfCBCSVQoVFJJR0dFUl9ORVRERVZfTElOSykpKVxcbiA3Mzk6XFx0XFx0XFx0b24gfD0gQUlSX1BIWV9MRURfT05fTElOSzI1MDA7XFxuIDc0MDpcXHRcXG4gNzQxOlxcdFxcdGlmIChydWxlcyBcXHUwMDI2IEJJVChUUklHR0VSX05FVERFVl9SWCkpIHtcXG4gNzQyOlxcdFxcdFxcdGJsaW5rIHw9IEFJUl9QSFlfTEVEX0JMSU5LXzEwUlggICB8XFxuIDc0MzpcXHRcXHRcXHRcXHQgQUlSX1BIWV9MRURfQkxJTktfMTAwUlggIHxcXG4gNzQ0OlxcdFxcdFxcdFxcdCBBSVJfUEhZX0xFRF9CTElOS18xMDAwUlggfFxcbiA3NDU6XFx0XFx0XFx0XFx0IEFJUl9QSFlfTEVEX0JMSU5LXzI1MDBSWDtcXG4gNzQ2OlxcdFxcdH1cXG4gNzQ3OlxcdFxcbiA3NDg6XFx0XFx0aWYgKHJ1bGVzIFxcdTAwMjYgQklUKFRSSUdHRVJfTkVUREVWX1RYKSkge1xcbiA3NDk6XFx0XFx0XFx0YmxpbmsgfD0gQUlSX1BIWV9MRURfQkxJTktfMTBUWCAgIHxcXG4gNzUwOlxcdFxcdFxcdFxcdCBBSVJfUEhZX0xFRF9CTElOS18xMDBUWCAgfFxcbiA3NTE6XFx0XFx0XFx0XFx0IEFJUl9QSFlfTEVEX0JMSU5LXzEwMDBUWCB8XFxuIDc1MjpcXHRcXHRcXHRcXHQgQUlSX1BIWV9MRURfQkxJTktfMjUwMFRYO1xcbiA3NTM6XFx0XFx0fVxcbiA3NTQ6XFx0XFxuIDc1NTpcXHRcXHRpZiAoYmxpbmsgfHwgb24pIHtcXG4gNzU2OlxcdFxcdFxcdC8qIHN3aXRjaCBody1jb250cm9sIG9uLCBzbyBsZWQtb24gYW5kIGxlZC1ibGluayBhcmUgb2ZmICovXFxuIDc1NzpcXHRcXHRcXHRjbGVhcl9iaXQoQUlSX1BIWV9MRURfU1RBVEVfRk9SQ0VfT04sXFxuIDc1ODpcXHRcXHRcXHRcXHQgIFxcdTAwMjZwcml2LVxcdTAwM2VsZWRbaW5kZXhdLnN0YXRlKTtcXG4gNzU5OlxcdFxcdFxcdGNsZWFyX2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9CTElOSyxcXG4gNzYwOlxcdFxcdFxcdFxcdCAgXFx1MDAyNnByaXYtXFx1MDAzZWxlZFtpbmRleF0uc3RhdGUpO1xcbiA3NjE6XFx0XFx0fSBlbHNlIHtcXG4gNzYyOlxcdFxcdFxcdHByaXYtXFx1MDAzZWxlZFtpbmRleF0ucnVsZXMgPSAwO1xcbiA3NjM6XFx0XFx0fVxcbiA3NjQ6XFx0XFxuIDc2NTpcXHRcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBBSVJfUEhZX0xFRF9PTihpbmRleCksXFxuIDc2NjpcXHRcXHRcXHRcXHQgICAgIEFJUl9QSFlfTEVEX09OX01BU0ssIG9uKTtcXG4gNzY3OlxcdFxcbiA3Njg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDc2OTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA3NzA6XFx0XFxuIDc3MTpcXHRcXHRyZXR1cm4gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBBSVJfUEhZX0xFRF9CTElOSyhpbmRleCksXFxuIDc3MjpcXHRcXHRcXHRcXHQgICAgIGJsaW5rKTtcXG4gNzczOlxcdH07XFxuIDc3NDpcXHRcXG4gNzc1OlxcdHN0YXRpYyBpbnQgYWlyX2xlZF9pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LCB1OCBzdGF0ZSwgdTggcG9sKVxcbiA3NzY6XFx0e1xcbiA3Nzc6XFx0XFx0aW50IHZhbCA9IDA7XFxuIDc3ODpcXHRcXHRpbnQgZXJyO1xcbiA3Nzk6XFx0XFxuIDc4MDpcXHRcXHRpZiAoaW5kZXggXFx1MDAzZT0gRU44ODExSF9MRURfQ09VTlQpXFxuIDc4MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzgyOlxcdFxcbiA3ODM6XFx0XFx0aWYgKHN0YXRlID09IEFJUl9MRURfRU5BQkxFKVxcbiA3ODQ6XFx0XFx0XFx0dmFsIHw9IEFJUl9QSFlfTEVEX09OX0VOQUJMRTtcXG4gNzg1OlxcdFxcdGVsc2VcXG4gNzg2OlxcdFxcdFxcdHZhbCBcXHUwMDI2PSB+QUlSX1BIWV9MRURfT05fRU5BQkxFO1xcbiA3ODc6XFx0XFxuIDc4ODpcXHRcXHRpZiAocG9sID09IEFJUl9BQ1RJVkVfSElHSClcXG4gNzg5OlxcdFxcdFxcdHZhbCB8PSBBSVJfUEhZX0xFRF9PTl9QT0xBUklUWTtcXG4gNzkwOlxcdFxcdGVsc2VcXG4gNzkxOlxcdFxcdFxcdHZhbCBcXHUwMDI2PSB+QUlSX1BIWV9MRURfT05fUE9MQVJJVFk7XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdGVyciA9IHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIEFJUl9QSFlfTEVEX09OKGluZGV4KSxcXG4gNzk0OlxcdFxcdFxcdFxcdCAgICAgQUlSX1BIWV9MRURfT05fRU5BQkxFIHxcXG4gNzk1OlxcdFxcdFxcdFxcdCAgICAgQUlSX1BIWV9MRURfT05fUE9MQVJJVFksIHZhbCk7XFxuIDc5NjpcXHRcXG4gNzk3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiA3OTg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOToyMC40NDM1NDkyNjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2NTg0NjM1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgQmFjayBJbjogUmVzdW1pbmcgdGhlIGBhaXJfZW44ODExaC5jYCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGJhY2sgdG8gaXQuIFdlIGxlZnQgb2ZmIHNvbWV3aGVyZSBpbiB0aGUgYGFpcl9lbjg4MTFoLmNgIGZpbGUsIGFuZCBJIG5lZWQgdG8gY29udGludWUgbXkgYW5hbHlzaXMgdG93YXJkcyB0aGUgZW5kIG9mIGl0LiBNeSBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIHRoZSBjb2RlLiBJIGFudGljaXBhdGUgcG90ZW50aWFsbHkgaW1wb3J0YW50IHNlY3Rpb25zIHJlbGF0aW5nIHRvIHRoZSBvdmVyYWxsIGZ1bmN0aW9uYWxpdHkgd2lsbCBwcmVzZW50IHRoZW1zZWx2ZXMgYXMgSSBuYXZpZ2F0ZSB0b3dhcmRzIHRoZSBmaW5hbCBsaW5lcyBvZiB0aGUgZmlsZS4gTm8gdGltZSBsaWtlIHRoZSBwcmVzZW50IHRvIGdldCBzdGFydGVkLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSB3YWl0aW5nIHRvIGJlIHVuY292ZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNTYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjIyLjkwOTM5OTc3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXHRyZXR1cm4gMDtcXG4gODAxOlxcdH1cXG4gODAyOlxcdFxcbiA4MDM6XFx0c3RhdGljIGludCBhaXJfbGVkc19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBudW0sIGludCBkdXIsIGludCBtb2RlKVxcbiA4MDQ6XFx0e1xcbiA4MDU6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4gODA2OlxcdFxcdGludCByZXQsIGk7XFxuIDgwNzpcXHRcXG4gODA4OlxcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgQUlSX1BIWV9MRURfRFVSX0JMSU5LLFxcbiA4MDk6XFx0XFx0XFx0XFx0ICAgIGR1cik7XFxuIDgxMDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gODExOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDgxMjpcXHRcXG4gODEzOlxcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgQUlSX1BIWV9MRURfRFVSX09OLFxcbiA4MTQ6XFx0XFx0XFx0XFx0ICAgIGR1ciBcXHUwMDNlXFx1MDAzZSAxKTtcXG4gODE1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4MTY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODE3OlxcdFxcbiA4MTg6XFx0XFx0c3dpdGNoIChtb2RlKSB7XFxuIDgxOTpcXHRcXHRjYXNlIEFJUl9MRURfTU9ERV9ESVNBQkxFOlxcbiA4MjA6XFx0XFx0XFx0cmV0ID0gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgQUlSX1BIWV9MRURfQkNSLFxcbiA4MjE6XFx0XFx0XFx0XFx0XFx0ICAgICBBSVJfUEhZX0xFRF9CQ1JfRVhUX0NUUkwgfFxcbiA4MjI6XFx0XFx0XFx0XFx0XFx0ICAgICBBSVJfUEhZX0xFRF9CQ1JfTU9ERV9NQVNLLCAwKTtcXG4gODIzOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4MjQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODI1OlxcdFxcdFxcdGJyZWFrO1xcbiA4MjY6XFx0XFx0Y2FzZSBBSVJfTEVEX01PREVfVVNFUl9ERUZJTkU6XFxuIDgyNzpcXHRcXHRcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBBSVJfUEhZX0xFRF9CQ1IsXFxuIDgyODpcXHRcXHRcXHRcXHRcXHQgICAgIEFJUl9QSFlfTEVEX0JDUl9FWFRfQ1RSTCB8XFxuIDgyOTpcXHRcXHRcXHRcXHRcXHQgICAgIEFJUl9QSFlfTEVEX0JDUl9DTEtfRU4sXFxuIDgzMDpcXHRcXHRcXHRcXHRcXHQgICAgIEFJUl9QSFlfTEVEX0JDUl9FWFRfQ1RSTCB8XFxuIDgzMTpcXHRcXHRcXHRcXHRcXHQgICAgIEFJUl9QSFlfTEVEX0JDUl9DTEtfRU4pO1xcbiA4MzI6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDgzMzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MzQ6XFx0XFx0XFx0YnJlYWs7XFxuIDgzNTpcXHRcXHRkZWZhdWx0OlxcbiA4MzY6XFx0XFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJMRUQgbW9kZSAlZCBpcyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiLCBtb2RlKTtcXG4gODM3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4Mzg6XFx0XFx0fVxcbiA4Mzk6XFx0XFxuIDg0MDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtOyArK2kpIHtcXG4gODQxOlxcdFxcdFxcdHJldCA9IGFpcl9sZWRfaW5pdChwaHlkZXYsIGksIEFJUl9MRURfRU5BQkxFLCBBSVJfQUNUSVZFX0hJR0gpO1xcbiA4NDI6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gODQzOlxcdFxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiTEVEJWQgaW5pdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBpLCByZXQpO1xcbiA4NDQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODQ1OlxcdFxcdFxcdH1cXG4gODQ2OlxcdFxcdFxcdGFpcl9sZWRfaHdfY29udHJvbF9zZXQocGh5ZGV2LCBpLCBwcml2LVxcdTAwM2VsZWRbaV0ucnVsZXMpO1xcbiA4NDc6XFx0XFx0fVxcbiA4NDg6XFx0XFxuIDg0OTpcXHRcXHRyZXR1cm4gMDtcXG4gODUwOlxcdH1cXG4gODUxOlxcdFxcbiA4NTI6XFx0c3RhdGljIGludCBlbjg4MTFoX2xlZF9od19pc19zdXBwb3J0ZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXFxuIDg1MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBydWxlcylcXG4gODU0OlxcdHtcXG4gODU1OlxcdFxcdGlmIChpbmRleCBcXHUwMDNlPSBFTjg4MTFIX0xFRF9DT1VOVClcXG4gODU2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHQvKiBBbGwgY29tYmluYXRpb25zIG9mIHRoZSBzdXBwb3J0ZWQgdHJpZ2dlcnMgYXJlIGFsbG93ZWQgKi9cXG4gODU5OlxcdFxcdGlmIChydWxlcyBcXHUwMDI2IH5lbjg4MTFoX2xlZF90cmlnKVxcbiA4NjA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA4NjE6XFx0XFxuIDg2MjpcXHRcXHRyZXR1cm4gMDtcXG4gODYzOlxcdH07XFxuIDg2NDpcXHRcXG4gODY1OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGFuODgxMWhiX2Nsa19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodyxcXG4gODY2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50KVxcbiA4Njc6XFx0e1xcbiA4Njg6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xcbiA4Njk6XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXFx1MDAzZXBoeWRldjtcXG4gODcwOlxcdFxcdHUzMiBwYnVzX3ZhbHVlO1xcbiA4NzE6XFx0XFx0aW50IHJldDtcXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChwaHlkZXYsIEFOODgxMUhCX0hXVFJBUDIsIFxcdTAwMjZwYnVzX3ZhbHVlKTtcXG4gODc0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4NzU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODc2OlxcdFxcbiA4Nzc6XFx0XFx0cmV0dXJuIChwYnVzX3ZhbHVlIFxcdTAwMjYgQU44ODExSEJfSFdUUkFQMl9DS08pID8gNTAwMDAwMDAgOiAyNTAwMDAwMDtcXG4gODc4OlxcdH1cXG4gODc5OlxcdFxcbiA4ODA6XFx0c3RhdGljIGludCBhbjg4MTFoYl9jbGtfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KVxcbiA4ODE6XFx0e1xcbiA4ODI6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xcbiA4ODM6XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXFx1MDAzZXBoeWRldjtcXG4gODg0OlxcdFxcbiA4ODU6XFx0XFx0cmV0dXJuIGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX0NMS19EUlYsXFxuIDg4NjpcXHRcXHRcXHRcXHRcXHRcXHQgICBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLLFxcbiA4ODc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgQU44ODExSEJfQ0xLX0RSVl9DS09fTUFTSyk7XFxuIDg4ODpcXHR9XFxuIDg4OTpcXHRcXG4gODkwOlxcdHN0YXRpYyB2b2lkIGFuODgxMWhiX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KVxcbiA4OTE6XFx0e1xcbiA4OTI6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xcbiA4OTM6XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXFx1MDAzZXBoeWRldjtcXG4gODk0OlxcdFxcbiA4OTU6XFx0XFx0YWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfQ0xLX0RSVixcXG4gODk2OlxcdFxcdFxcdFxcdFxcdCAgICBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLLCAwKTtcXG4gODk3OlxcdH1cXG4gODk4OlxcdFxcbiA4OTk6XFx0c3RhdGljIGludCBhbjg4MTFoYl9jbGtfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3ICpodylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MjIuOTA5NTg5MDQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTc3MzAxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBQSFkgRHJpdmVyKipcblxuT2theSwgc28gd2UncmUgbW92aW5nIG9uLiBXZSd2ZSBnb3QgdGhlIGJhc2ljcyBkb3duLCBub3cgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyB0aGluZyAqcmVhbGx5KiB3b3Jrcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgYHBoeV9kcml2ZXJgIHN0cnVjdHVyZSBhbmQgdGhvc2Uga2V5IGZ1bmN0aW9uczogdGhlIGBwcm9iZWAgYW5kIHRoZSBgY29uZmlnX2luaXRgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgcGllY2VzLCB0aGUgYmFja2JvbmUgb2YgaG93IGEgUEhZIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIHN5c3RlbSwgYW5kIGhvdyBpdCdzIGluaXRpYWxpemVkIGFuZCBicm91Z2h0IG9ubGluZS4gVW5kZXJzdGFuZGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBnaXZlIHVzIGEgdmVyeSBnb29kIGdyYXNwIG9mIHRoZSB3aG9sZSBwaWN0dXJlLiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlIHRoZSBsb3ctbGV2ZWwgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMDksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjI1LjAyNzMyMTgwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkwMDpcXHR7XFxuIDkwMTpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XFxuIDkwMjpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi1cXHUwMDNlcGh5ZGV2O1xcbiA5MDM6XFx0XFx0dTMyIHBidXNfdmFsdWU7XFxuIDkwNDpcXHRcXHRpbnQgcmV0O1xcbiA5MDU6XFx0XFxuIDkwNjpcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgQU44ODExSEJfQ0xLX0RSViwgXFx1MDAyNnBidXNfdmFsdWUpO1xcbiA5MDc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDkwODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5MDk6XFx0XFxuIDkxMDpcXHRcXHRyZXR1cm4gKHBidXNfdmFsdWUgXFx1MDAyNiBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLKTtcXG4gOTExOlxcdH1cXG4gOTEyOlxcdFxcbiA5MTM6XFx0c3RhdGljIGludCBhbjg4MTFoYl9jbGtfc2F2ZV9jb250ZXh0KHN0cnVjdCBjbGtfaHcgKmh3KVxcbiA5MTQ6XFx0e1xcbiA5MTU6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xcbiA5MTY6XFx0XFxuIDkxNzpcXHRcXHRwcml2LVxcdTAwM2Vja29faXNfZW5hYmxlZCA9IGFuODgxMWhiX2Nsa19pc19lbmFibGVkKGh3KTtcXG4gOTE4OlxcdFxcbiA5MTk6XFx0XFx0cmV0dXJuIDA7XFxuIDkyMDpcXHR9XFxuIDkyMTpcXHRcXG4gOTIyOlxcdHN0YXRpYyB2b2lkIGFuODgxMWhiX2Nsa19yZXN0b3JlX2NvbnRleHQoc3RydWN0IGNsa19odyAqaHcpXFxuIDkyMzpcXHR7XFxuIDkyNDpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XFxuIDkyNTpcXHRcXG4gOTI2OlxcdFxcdGlmICghcHJpdi1cXHUwMDNlY2tvX2lzX2VuYWJsZWQpXFxuIDkyNzpcXHRcXHRcXHRhbjg4MTFoYl9jbGtfZGlzYWJsZShodyk7XFxuIDkyODpcXHR9XFxuIDkyOTpcXHRcXG4gOTMwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBhbjg4MTFoYl9jbGtfb3BzID0ge1xcbiA5MzE6XFx0XFx0LnJlY2FsY19yYXRlXFx0XFx0PSBhbjg4MTFoYl9jbGtfcmVjYWxjX3JhdGUsXFxuIDkzMjpcXHRcXHQuZW5hYmxlXFx0XFx0XFx0PSBhbjg4MTFoYl9jbGtfZW5hYmxlLFxcbiA5MzM6XFx0XFx0LmRpc2FibGVcXHRcXHQ9IGFuODgxMWhiX2Nsa19kaXNhYmxlLFxcbiA5MzQ6XFx0XFx0LmlzX2VuYWJsZWRcXHRcXHQ9IGFuODgxMWhiX2Nsa19pc19lbmFibGVkLFxcbiA5MzU6XFx0XFx0LnNhdmVfY29udGV4dFxcdFxcdD0gYW44ODExaGJfY2xrX3NhdmVfY29udGV4dCxcXG4gOTM2OlxcdFxcdC5yZXN0b3JlX2NvbnRleHRcXHQ9IGFuODgxMWhiX2Nsa19yZXN0b3JlX2NvbnRleHQsXFxuIDkzNzpcXHR9O1xcbiA5Mzg6XFx0XFxuIDkzOTpcXHRzdGF0aWMgaW50IGFuODgxMWhiX2Nsa19wcm92aWRlcl9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBjbGtfaHcgKmh3KVxcbiA5NDA6XFx0e1xcbiA5NDE6XFx0XFx0c3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDtcXG4gOTQyOlxcdFxcdGludCByZXQ7XFxuIDk0MzpcXHRcXG4gOTQ0OlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQ09NTU9OX0NMSykpXFxuIDk0NTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gOTQ2OlxcdFxcbiA5NDc6XFx0XFx0aW5pdC5uYW1lID0gZGV2bV9rYXNwcmludGYoZGV2LCBHRlBfS0VSTkVMLCBcXFwiJXMtY2tvXFxcIixcXG4gOTQ4OlxcdFxcdFxcdFxcdFxcdCAgIGZ3bm9kZV9nZXRfbmFtZShkZXZfZndub2RlKGRldikpKTtcXG4gOTQ5OlxcdFxcdGlmICghaW5pdC5uYW1lKVxcbiA5NTA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDk1MTpcXHRcXG4gOTUyOlxcdFxcdGluaXQub3BzID0gXFx1MDAyNmFuODgxMWhiX2Nsa19vcHM7XFxuIDk1MzpcXHRcXHRpbml0LmZsYWdzID0gMDtcXG4gOTU0OlxcdFxcdGluaXQubnVtX3BhcmVudHMgPSAwO1xcbiA5NTU6XFx0XFx0aHctXFx1MDAzZWluaXQgPSBcXHUwMDI2aW5pdDtcXG4gOTU2OlxcdFxcbiA5NTc6XFx0XFx0cmV0ID0gZGV2bV9jbGtfaHdfcmVnaXN0ZXIoZGV2LCBodyk7XFxuIDk1ODpcXHRcXHRpZiAocmV0KVxcbiA5NTk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gOTYwOlxcdFxcbiA5NjE6XFx0XFx0cmV0dXJuIGRldm1fb2ZfY2xrX2FkZF9od19wcm92aWRlcihkZXYsIG9mX2Nsa19od19zaW1wbGVfZ2V0LCBodyk7XFxuIDk2MjpcXHR9XFxuIDk2MzpcXHRcXG4gOTY0OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGVuODgxMWhfY2xrX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LFxcbiA5NjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHBhcmVudClcXG4gOTY2OlxcdHtcXG4gOTY3OlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBjbGtfaHdfdG9fZW44ODExaF9wcml2KGh3KTtcXG4gOTY4OlxcdFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBwcml2LVxcdTAwM2VwaHlkZXY7XFxuIDk2OTpcXHRcXHR1MzIgcGJ1c192YWx1ZTtcXG4gOTcwOlxcdFxcdGludCByZXQ7XFxuIDk3MTpcXHRcXG4gOTcyOlxcdFxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3JlYWQocGh5ZGV2LCBFTjg4MTFIX0hXVFJBUDEsIFxcdTAwMjZwYnVzX3ZhbHVlKTtcXG4gOTczOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA5NzQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gOTc1OlxcdFxcbiA5NzY6XFx0XFx0cmV0dXJuIChwYnVzX3ZhbHVlIFxcdTAwMjYgRU44ODExSF9IV1RSQVAxX0NLTykgPyA1MDAwMDAwMCA6IDI1MDAwMDAwO1xcbiA5Nzc6XFx0fVxcbiA5Nzg6XFx0XFxuIDk3OTpcXHRzdGF0aWMgaW50IGVuODgxMWhfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrX2h3ICpodylcXG4gOTgwOlxcdHtcXG4gOTgxOlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBjbGtfaHdfdG9fZW44ODExaF9wcml2KGh3KTtcXG4gOTgyOlxcdFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBwcml2LVxcdTAwM2VwaHlkZXY7XFxuIDk4MzpcXHRcXG4gOTg0OlxcdFxcdHJldHVybiBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0NMS19DR00sXFxuIDk4NTpcXHRcXHRcXHRcXHRcXHRcXHQgICBFTjg4MTFIX0NMS19DR01fQ0tPLFxcbiA5ODY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgRU44ODExSF9DTEtfQ0dNX0NLTyk7XFxuIDk4NzpcXHR9XFxuIDk4ODpcXHRcXG4gOTg5OlxcdHN0YXRpYyB2b2lkIGVuODgxMWhfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpXFxuIDk5MDpcXHR7XFxuIDk5MTpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XFxuIDk5MjpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi1cXHUwMDNlcGh5ZGV2O1xcbiA5OTM6XFx0XFxuIDk5NDpcXHRcXHRhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0NMS19DR00sXFxuIDk5NTpcXHRcXHRcXHRcXHRcXHQgICAgRU44ODExSF9DTEtfQ0dNX0NLTywgMCk7XFxuIDk5NjpcXHR9XFxuIDk5NzpcXHRcXG4gOTk4OlxcdHN0YXRpYyBpbnQgZW44ODExaF9jbGtfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3ICpodylcXG4gOTk5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MjUuMDI3NTA5Mjk3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjUwMDUwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgYWlyX2VuODgxMWguY2AgLSBVcCB0byBMaW5lIDEyMDAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVzdCBvZiBgYWlyX2VuODgxMWguY2AuIFRoYXQgZmlsZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgc3lzdGVtIHdvcmtzLCBhbmQgSSdtIGd1ZXNzaW5nIHVwIHRvIGxpbmUgMTIwMCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBjaHVuayB0byB3b3JrIHdpdGguIEkgd2FudCB0byBzZWUgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCBhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBwZXJoYXBzIHNvbWUgaW50ZXJydXB0IGhhbmRsZXJzIG9yIERNQSBzZXR1cCwgYW5kIGRlZmluaXRlbHkgc29tZSBjb3JlIHByb2Nlc3NpbmcgZnVuY3Rpb25zLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBzZWN0aW9uIHByb2JhYmx5IGRlYWxzIHdpdGggdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBhbmQgcG9zc2libHkgdGhlIGJhc2ljIGludGVyZmFjZSB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBvciBtYXliZSB0aGUgY29yZSBuZXR3b3JrIGhhbmRsaW5nLiBMZXQncyBzZWUgaWYgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBob2xkIHdhdGVyIG9uY2UgSSBnZXQgaW50byBpdC4gVGhlIGdvYWwgaXMgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoaXMgY3JpdGljYWwgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE4OSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MjcuMzkyNTE3NTQ4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAwMDpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XFxuMTAwMTpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi1cXHUwMDNlcGh5ZGV2O1xcbjEwMDI6XFx0XFx0dTMyIHBidXNfdmFsdWU7XFxuMTAwMzpcXHRcXHRpbnQgcmV0O1xcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgRU44ODExSF9DTEtfQ0dNLCBcXHUwMDI2cGJ1c192YWx1ZSk7XFxuMTAwNjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMDA3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTAwODpcXHRcXG4xMDA5OlxcdFxcdHJldHVybiAocGJ1c192YWx1ZSBcXHUwMDI2IEVOODgxMUhfQ0xLX0NHTV9DS08pO1xcbjEwMTA6XFx0fVxcbjEwMTE6XFx0XFxuMTAxMjpcXHRzdGF0aWMgaW50IGVuODgxMWhfY2xrX3NhdmVfY29udGV4dChzdHJ1Y3QgY2xrX2h3ICpodylcXG4xMDEzOlxcdHtcXG4xMDE0OlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBjbGtfaHdfdG9fZW44ODExaF9wcml2KGh3KTtcXG4xMDE1OlxcdFxcbjEwMTY6XFx0XFx0cHJpdi1cXHUwMDNlY2tvX2lzX2VuYWJsZWQgPSBlbjg4MTFoX2Nsa19pc19lbmFibGVkKGh3KTtcXG4xMDE3OlxcdFxcbjEwMTg6XFx0XFx0cmV0dXJuIDA7XFxuMTAxOTpcXHR9XFxuMTAyMDpcXHRcXG4xMDIxOlxcdHN0YXRpYyB2b2lkIGVuODgxMWhfY2xrX3Jlc3RvcmVfY29udGV4dChzdHJ1Y3QgY2xrX2h3ICpodylcXG4xMDIyOlxcdHtcXG4xMDIzOlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBjbGtfaHdfdG9fZW44ODExaF9wcml2KGh3KTtcXG4xMDI0OlxcdFxcbjEwMjU6XFx0XFx0aWYgKCFwcml2LVxcdTAwM2Vja29faXNfZW5hYmxlZClcXG4xMDI2OlxcdFxcdFxcdGVuODgxMWhfY2xrX2Rpc2FibGUoaHcpO1xcbjEwMjc6XFx0fVxcbjEwMjg6XFx0XFxuMTAyOTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgZW44ODExaF9jbGtfb3BzID0ge1xcbjEwMzA6XFx0XFx0LnJlY2FsY19yYXRlXFx0XFx0PSBlbjg4MTFoX2Nsa19yZWNhbGNfcmF0ZSxcXG4xMDMxOlxcdFxcdC5lbmFibGVcXHRcXHRcXHQ9IGVuODgxMWhfY2xrX2VuYWJsZSxcXG4xMDMyOlxcdFxcdC5kaXNhYmxlXFx0XFx0PSBlbjg4MTFoX2Nsa19kaXNhYmxlLFxcbjEwMzM6XFx0XFx0LmlzX2VuYWJsZWRcXHRcXHQ9IGVuODgxMWhfY2xrX2lzX2VuYWJsZWQsXFxuMTAzNDpcXHRcXHQuc2F2ZV9jb250ZXh0XFx0XFx0PSBlbjg4MTFoX2Nsa19zYXZlX2NvbnRleHQsXFxuMTAzNTpcXHRcXHQucmVzdG9yZV9jb250ZXh0XFx0PSBlbjg4MTFoX2Nsa19yZXN0b3JlX2NvbnRleHQsXFxuMTAzNjpcXHR9O1xcbjEwMzc6XFx0XFxuMTAzODpcXHRzdGF0aWMgaW50IGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGNsa19odyAqaHcpXFxuMTAzOTpcXHR7XFxuMTA0MDpcXHRcXHRzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0O1xcbjEwNDE6XFx0XFx0aW50IHJldDtcXG4xMDQyOlxcdFxcbjEwNDM6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DT01NT05fQ0xLKSlcXG4xMDQ0OlxcdFxcdFxcdHJldHVybiAwO1xcbjEwNDU6XFx0XFxuMTA0NjpcXHRcXHRpbml0Lm5hbWUgPSBkZXZtX2thc3ByaW50ZihkZXYsIEdGUF9LRVJORUwsIFxcXCIlcy1ja29cXFwiLFxcbjEwNDc6XFx0XFx0XFx0XFx0XFx0ICAgZndub2RlX2dldF9uYW1lKGRldl9md25vZGUoZGV2KSkpO1xcbjEwNDg6XFx0XFx0aWYgKCFpbml0Lm5hbWUpXFxuMTA0OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMDUwOlxcdFxcbjEwNTE6XFx0XFx0aW5pdC5vcHMgPSBcXHUwMDI2ZW44ODExaF9jbGtfb3BzO1xcbjEwNTI6XFx0XFx0aW5pdC5mbGFncyA9IDA7XFxuMTA1MzpcXHRcXHRpbml0Lm51bV9wYXJlbnRzID0gMDtcXG4xMDU0OlxcdFxcdGh3LVxcdTAwM2Vpbml0ID0gXFx1MDAyNmluaXQ7XFxuMTA1NTpcXHRcXG4xMDU2OlxcdFxcdHJldCA9IGRldm1fY2xrX2h3X3JlZ2lzdGVyKGRldiwgaHcpO1xcbjEwNTc6XFx0XFx0aWYgKHJldClcXG4xMDU4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTA1OTpcXHRcXG4xMDYwOlxcdFxcdHJldHVybiBkZXZtX29mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LCBvZl9jbGtfaHdfc2ltcGxlX2dldCwgaHcpO1xcbjEwNjE6XFx0fVxcbjEwNjI6XFx0XFxuMTA2MzpcXHRzdGF0aWMgaW50IGVuODgxMWhfbGVkc19zZXR1cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjEwNjQ6XFx0e1xcbjEwNjU6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4xMDY2OlxcdFxcdGludCByZXQ7XFxuMTA2NzpcXHRcXG4xMDY4OlxcdFxcdHByaXYtXFx1MDAzZWxlZFswXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMDtcXG4xMDY5OlxcdFxcdHByaXYtXFx1MDAzZWxlZFsxXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMTtcXG4xMDcwOlxcdFxcdHByaXYtXFx1MDAzZWxlZFsyXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMjtcXG4xMDcxOlxcdFxcbjEwNzI6XFx0XFx0cmV0ID0gYWlyX2xlZHNfaW5pdChwaHlkZXYsIEVOODgxMUhfTEVEX0NPVU5ULCBBSVJfUEhZX0xFRF9EVVIsXFxuMTA3MzpcXHRcXHRcXHRcXHQgICAgQUlSX0xFRF9NT0RFX0RJU0FCTEUpO1xcbjEwNzQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTA3NTpcXHRcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkZhaWxlZCB0byBkaXNhYmxlIGxlZHM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEwNzY6XFx0XFxuMTA3NzpcXHRcXHRyZXR1cm4gcmV0O1xcbjEwNzg6XFx0fVxcbjEwNzk6XFx0XFxuMTA4MDpcXHRzdGF0aWMgaW50IGFuODgxMWhiX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTA4MTpcXHR7XFxuMTA4MjpcXHRcXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XFxuMTA4MzpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2O1xcbjEwODQ6XFx0XFx0aW50IHJldDtcXG4xMDg1OlxcdFxcbjEwODY6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgc2l6ZW9mKHN0cnVjdCBlbjg4MTFoX3ByaXYpLFxcbjEwODc6XFx0XFx0XFx0XFx0ICAgIEdGUF9LRVJORUwpO1xcbjEwODg6XFx0XFx0aWYgKCFwcml2KVxcbjEwODk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTA5MDpcXHRcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbjEwOTE6XFx0XFxuMTA5MjpcXHRcXHQvKlxcbjEwOTM6XFx0XFx0ICogVGhlIEFOODgxMUhCIFBIWSBhZGRyZXNzIGlzIHJlc3RyaWN0ZWQgdG8gOC0xNSAoZGVjaW1hbCksXFxuMTA5NDpcXHRcXHQgKiBkZXBlbmRpbmcgb24gdGhlIGJvYXJkIGhhcmR3YXJlIHN0cmFwcGluZy5cXG4xMDk1OlxcdFxcdCAqIFRoaXMgbWVhbnMgdGhlIFBCVVMgYWRkcmVzcyBpcyBvbmx5IGluIHRoZSByYW5nZSAxNi0yMSAoZGVjaW1hbCksXFxuMTA5NjpcXHRcXHQgKiBzbyB3ZSBkbyBub3QgbmVlZCB0byBoYW5kbGUgdGhlIGNhc2VcXG4xMDk3OlxcdFxcdCAqIHdoZXJlIHRoZSBQQlVTIGFkZHJlc3MgZXhjZWVkcyAzMSAoZGVjaW1hbCkuXFxuMTA5ODpcXHRcXHQgKi9cXG4xMDk5OlxcdFxcdG1kaW9kZXYgPSBtZGlvX2RldmljZV9jcmVhdGUocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MjcuMzkyNzI0ODM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODA5MTgxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgc28gSSdsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IHRoZSByZXN0IG9mIGBhaXJfZW44ODExaC5jYCBhbGwgdGhlIHdheSB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLiBObyBwb2ludCBqdXN0IGZvY3VzaW5nIG9uIGEgZnJhZ21lbnQsIGdvdHRhIHNlZSB0aGUgd2hvbGUgY29udGV4dCBoZXJlLiBMZXQncyBnZXQgdGhlIHdob2xlIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE1MywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MjkuNTczNjQ1NzM2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwMDpcXHRcXHRcXHRcXHRcXHQgICAgIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyICsgRU44ODExSF9QQlVTX0FERFJfT0ZGUyk7XFxuMTEwMTpcXHRcXHRpZiAoSVNfRVJSKG1kaW9kZXYpKVxcbjExMDI6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobWRpb2Rldik7XFxuMTEwMzpcXHRcXG4xMTA0OlxcdFxcdHJldCA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKG1kaW9kZXYpO1xcbjExMDU6XFx0XFx0aWYgKHJldClcXG4xMTA2OlxcdFxcdFxcdGdvdG8gZXJyX2Rldl9mcmVlO1xcbjExMDc6XFx0XFxuMTEwODpcXHRcXHRwcml2LVxcdTAwM2VwYnVzZGV2ID0gbWRpb2RldjtcXG4xMTA5OlxcdFxcbjExMTA6XFx0XFx0cmV0ID0gYW44ODExaGJfbG9hZF9maXJtd2FyZShwaHlkZXYpO1xcbjExMTE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4xMTEyOlxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiTG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjExMTM6XFx0XFx0XFx0Z290byBlcnJfZGV2X2NyZWF0ZTtcXG4xMTE0OlxcdFxcdH1cXG4xMTE1OlxcdFxcbjExMTY6XFx0XFx0ZW44ODExaF9wcmludF9md192ZXJzaW9uKHBoeWRldik7XFxuMTExNzpcXHRcXG4xMTE4OlxcdFxcdC8qIG1jdSBoYXMganVzdCByZXN0YXJ0ZWQgYWZ0ZXIgZmlybXdhcmUgbG9hZCAqL1xcbjExMTk6XFx0XFx0cHJpdi1cXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcXG4xMTIwOlxcdFxcbjExMjE6XFx0XFx0LyogTURJT19ERVZTMS8yIGVtcHR5LCBzbyBzZXQgbW1kc19wcmVzZW50IGJpdHMgaGVyZSAqL1xcbjExMjI6XFx0XFx0cGh5ZGV2LVxcdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xcbjExMjM6XFx0XFxuMTEyNDpcXHRcXHRyZXQgPSBlbjg4MTFoX2xlZHNfc2V0dXAocGh5ZGV2KTtcXG4xMTI1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjExMjY6XFx0XFx0XFx0Z290byBlcnJfZGV2X2NyZWF0ZTtcXG4xMTI3OlxcdFxcbjExMjg6XFx0XFx0cHJpdi1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbjExMjk6XFx0XFx0LyogQ28tQ2xvY2sgT3V0cHV0ICovXFxuMTEzMDpcXHRcXHRyZXQgPSBhbjg4MTFoYl9jbGtfcHJvdmlkZXJfc2V0dXAoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIFxcdTAwMjZwcml2LVxcdTAwM2Vodyk7XFxuMTEzMTpcXHRcXHRpZiAocmV0KVxcbjExMzI6XFx0XFx0XFx0Z290byBlcnJfZGV2X2NyZWF0ZTtcXG4xMTMzOlxcdFxcbjExMzQ6XFx0XFx0LyogQ29uZmlndXJlIGxlZCBncGlvIHBpbnMgYXMgb3V0cHV0ICovXFxuMTEzNTpcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9HUElPX09VVFBVVCxcXG4xMTM2OlxcdFxcdFxcdFxcdFxcdFxcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1LFxcbjExMzc6XFx0XFx0XFx0XFx0XFx0XFx0ICBBTjg4MTFIQl9HUElPX09VVFBVVF8zNDUpO1xcbjExMzg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTEzOTpcXHRcXHRcXHRnb3RvIGVycl9kZXZfY3JlYXRlO1xcbjExNDA6XFx0XFxuMTE0MTpcXHRcXHRyZXR1cm4gMDtcXG4xMTQyOlxcdFxcbjExNDM6XFx0ZXJyX2Rldl9jcmVhdGU6XFxuMTE0NDpcXHRcXHRtZGlvX2RldmljZV9yZW1vdmUobWRpb2Rldik7XFxuMTE0NTpcXHRcXG4xMTQ2OlxcdGVycl9kZXZfZnJlZTpcXG4xMTQ3OlxcdFxcdG1kaW9fZGV2aWNlX2ZyZWUobWRpb2Rldik7XFxuMTE0ODpcXHRcXHRyZXR1cm4gcmV0O1xcbjExNDk6XFx0fVxcbjExNTA6XFx0XFxuMTE1MTpcXHRzdGF0aWMgaW50IGVuODgxMWhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xMTUyOlxcdHtcXG4xMTUzOlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXY7XFxuMTE1NDpcXHRcXHRpbnQgcmV0O1xcbjExNTU6XFx0XFxuMTE1NjpcXHRcXHRwcml2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBzaXplb2Yoc3RydWN0IGVuODgxMWhfcHJpdiksXFxuMTE1NzpcXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCk7XFxuMTE1ODpcXHRcXHRpZiAoIXByaXYpXFxuMTE1OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMTYwOlxcdFxcdHBoeWRldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuMTE2MTpcXHRcXG4xMTYyOlxcdFxcdHJldCA9IGVuODgxMWhfbG9hZF9maXJtd2FyZShwaHlkZXYpO1xcbjExNjM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTE2NDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjExNjU6XFx0XFxuMTE2NjpcXHRcXHQvKiBtY3UgaGFzIGp1c3QgcmVzdGFydGVkIGFmdGVyIGZpcm13YXJlIGxvYWQgKi9cXG4xMTY3OlxcdFxcdHByaXYtXFx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gZmFsc2U7XFxuMTE2ODpcXHRcXG4xMTY5OlxcdFxcdC8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi9cXG4xMTcwOlxcdFxcdHBoeWRldi1cXHUwMDNlYzQ1X2lkcy5tbWRzX3ByZXNlbnQgfD0gTURJT19ERVZTX1BNQVBNRCB8IE1ESU9fREVWU19BTjtcXG4xMTcxOlxcdFxcbjExNzI6XFx0XFx0cmV0ID0gZW44ODExaF9sZWRzX3NldHVwKHBoeWRldik7XFxuMTE3MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTc0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE3NTpcXHRcXG4xMTc2OlxcdFxcdHByaXYtXFx1MDAzZXBoeWRldiA9IHBoeWRldjtcXG4xMTc3OlxcdFxcdC8qIENvLUNsb2NrIE91dHB1dCAqL1xcbjExNzg6XFx0XFx0cmV0ID0gZW44ODExaF9jbGtfcHJvdmlkZXJfc2V0dXAoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIFxcdTAwMjZwcml2LVxcdTAwM2Vodyk7XFxuMTE3OTpcXHRcXHRpZiAocmV0KVxcbjExODA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTgxOlxcdFxcbjExODI6XFx0XFx0cmV0dXJuIDA7XFxuMTE4MzpcXHR9XFxuMTE4NDpcXHRcXG4xMTg1OlxcdHN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjExODY6XFx0e1xcbjExODc6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuMTE4ODpcXHRcXHR1MzIgcGJ1c192YWx1ZSA9IDA7XFxuMTE4OTpcXHRcXHR1bnNpZ25lZCBpbnQgcG9sO1xcbjExOTA6XFx0XFx0aW50IHJldDtcXG4xMTkxOlxcdFxcbjExOTI6XFx0XFx0cmV0ID0gcGh5X2dldF9tYW51YWxfcnhfcG9sYXJpdHkoZGV2X2Z3bm9kZShkZXYpLFxcbjExOTM6XFx0XFx0XFx0XFx0XFx0XFx0IHBoeV9tb2RlcyhwaHlkZXYtXFx1MDAzZWludGVyZmFjZSksIFxcdTAwMjZwb2wpO1xcbjExOTQ6XFx0XFx0aWYgKHJldClcXG4xMTk1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE5NjpcXHRcXHRpZiAocG9sID09IFBIWV9QT0xfTk9STUFMKVxcbjExOTc6XFx0XFx0XFx0cGJ1c192YWx1ZSB8PSBBTjg4MTFIQl9SWF9QT0xBUklUWV9OT1JNQUw7XFxuMTE5ODpcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9SWF9QT0xBUklUWSxcXG4xMTk5OlxcdFxcdFxcdFxcdFxcdFxcdCAgQU44ODExSEJfUlhfUE9MQVJJVFlfTk9STUFMLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOToyOS41NzM4MTM1ODZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2Mzk5Mzk1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBzbyBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIHJlc3Qgb2YgYGFpcl9lbjg4MTFoLmNgIGFsbCB0aGUgd2F5IHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIE5vIHBvaW50IGp1c3QgZm9jdXNpbmcgb24gYSBmcmFnbWVudCwgZ290dGEgc2VlIHRoZSB3aG9sZSBjb250ZXh0IGhlcmUuIExldCdzIGdldCB0aGUgd2hvbGUgdGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODc4LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOTozMS42Mzc4MTEyM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDA6XFx0XFx0XFx0XFx0XFx0XFx0ICBwYnVzX3ZhbHVlKTtcXG4xMjAxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEyMDI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMjAzOlxcdFxcbjEyMDQ6XFx0XFx0cmV0ID0gcGh5X2dldF9tYW51YWxfdHhfcG9sYXJpdHkoZGV2X2Z3bm9kZShkZXYpLFxcbjEyMDU6XFx0XFx0XFx0XFx0XFx0XFx0IHBoeV9tb2RlcyhwaHlkZXYtXFx1MDAzZWludGVyZmFjZSksIFxcdTAwMjZwb2wpO1xcbjEyMDY6XFx0XFx0aWYgKHJldClcXG4xMjA3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTIwODpcXHRcXHRwYnVzX3ZhbHVlID0gMDtcXG4xMjA5OlxcdFxcdGlmIChwb2wgPT0gUEhZX1BPTF9OT1JNQUwpXFxuMTIxMDpcXHRcXHRcXHRwYnVzX3ZhbHVlIHw9IEFOODgxMUhCX1RYX1BPTEFSSVRZX05PUk1BTDtcXG4xMjExOlxcdFxcdHJldHVybiBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9UWF9QT0xBUklUWSxcXG4xMjEyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIEFOODgxMUhCX1RYX1BPTEFSSVRZX05PUk1BTCxcXG4xMjEzOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHBidXNfdmFsdWUpO1xcbjEyMTQ6XFx0fVxcbjEyMTU6XFx0XFxuMTIxNjpcXHRzdGF0aWMgaW50IGVuODgxMWhfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjEyMTc6XFx0e1xcbjEyMTg6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuMTIxOTpcXHRcXHR1bnNpZ25lZCBpbnQgcG9sLCBkZWZhdWx0X3BvbDtcXG4xMjIwOlxcdFxcdHUzMiBwYnVzX3ZhbHVlID0gMDtcXG4xMjIxOlxcdFxcdGludCByZXQ7XFxuMTIyMjpcXHRcXG4xMjIzOlxcdFxcdGRlZmF1bHRfcG9sID0gUEhZX1BPTF9OT1JNQUw7XFxuMTIyNDpcXHRcXHRpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsIFxcXCJhaXJvaGEscG5zd2FwLXJ4XFxcIikpXFxuMTIyNTpcXHRcXHRcXHRkZWZhdWx0X3BvbCA9IFBIWV9QT0xfSU5WRVJUO1xcbjEyMjY6XFx0XFxuMTIyNzpcXHRcXHRyZXQgPSBwaHlfZ2V0X3J4X3BvbGFyaXR5KGRldl9md25vZGUoZGV2KSwgcGh5X21vZGVzKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlKSxcXG4xMjI4OlxcdFxcdFxcdFxcdFxcdCAgQklUKFBIWV9QT0xfTk9STUFMKSB8IEJJVChQSFlfUE9MX0lOVkVSVCksXFxuMTIyOTpcXHRcXHRcXHRcXHRcXHQgIGRlZmF1bHRfcG9sLCBcXHUwMDI2cG9sKTtcXG4xMjMwOlxcdFxcdGlmIChyZXQpXFxuMTIzMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEyMzI6XFx0XFx0aWYgKHBvbCA9PSBQSFlfUE9MX0lOVkVSVClcXG4xMjMzOlxcdFxcdFxcdHBidXNfdmFsdWUgfD0gRU44ODExSF9QT0xBUklUWV9SWF9SRVZFUlNFO1xcbjEyMzQ6XFx0XFxuMTIzNTpcXHRcXHRkZWZhdWx0X3BvbCA9IFBIWV9QT0xfTk9STUFMO1xcbjEyMzY6XFx0XFx0aWYgKGRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCBcXFwiYWlyb2hhLHBuc3dhcC10eFxcXCIpKVxcbjEyMzc6XFx0XFx0XFx0ZGVmYXVsdF9wb2wgPSBQSFlfUE9MX0lOVkVSVDtcXG4xMjM4OlxcdFxcbjEyMzk6XFx0XFx0cmV0ID0gcGh5X2dldF90eF9wb2xhcml0eShkZXZfZndub2RlKGRldiksIHBoeV9tb2RlcyhwaHlkZXYtXFx1MDAzZWludGVyZmFjZSksXFxuMTI0MDpcXHRcXHRcXHRcXHRcXHQgIEJJVChQSFlfUE9MX05PUk1BTCkgfCBCSVQoUEhZX1BPTF9JTlZFUlQpLFxcbjEyNDE6XFx0XFx0XFx0XFx0XFx0ICBkZWZhdWx0X3BvbCwgXFx1MDAyNnBvbCk7XFxuMTI0MjpcXHRcXHRpZiAocmV0KVxcbjEyNDM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMjQ0OlxcdFxcdGlmIChwb2wgPT0gUEhZX1BPTF9OT1JNQUwpXFxuMTI0NTpcXHRcXHRcXHRwYnVzX3ZhbHVlIHw9IEVOODgxMUhfUE9MQVJJVFlfVFhfTk9STUFMO1xcbjEyNDY6XFx0XFxuMTI0NzpcXHRcXHRyZXR1cm4gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9QT0xBUklUWSxcXG4xMjQ4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIEVOODgxMUhfUE9MQVJJVFlfUlhfUkVWRVJTRSB8XFxuMTI0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICBFTjg4MTFIX1BPTEFSSVRZX1RYX05PUk1BTCxcXG4xMjUwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHBidXNfdmFsdWUpO1xcbjEyNTE6XFx0fVxcbjEyNTI6XFx0XFxuMTI1MzpcXHRzdGF0aWMgaW50IGFuODgxMWhiX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTI1NDpcXHR7XFxuMTI1NTpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbjEyNTY6XFx0XFx0aW50IHJldDtcXG4xMjU3OlxcdFxcbjEyNTg6XFx0XFx0LyogSWYgcmVzdGFydCBoYXBwZW5lZCBpbiAucHJvYmUoKSwgbm8gbmVlZCB0byByZXN0YXJ0IG5vdyAqL1xcbjEyNTk6XFx0XFx0aWYgKHByaXYtXFx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0KSB7XFxuMTI2MDpcXHRcXHRcXHRyZXQgPSBlbjg4MTFoX3Jlc3RhcnRfbWN1KHBoeWRldik7XFxuMTI2MTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjYyOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTI2MzpcXHRcXHR9IGVsc2Uge1xcbjEyNjQ6XFx0XFx0XFx0LyogTmV4dCBjYWxscyB0byAuY29uZmlnX2luaXQoKSBtY3UgbmVlZHMgdG8gcmVzdGFydCAqL1xcbjEyNjU6XFx0XFx0XFx0cHJpdi1cXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSB0cnVlO1xcbjEyNjY6XFx0XFx0fVxcbjEyNjc6XFx0XFxuMTI2ODpcXHRcXHRyZXQgPSBhbjg4MTFoYl9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHBoeWRldik7XFxuMTI2OTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjcwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTI3MTpcXHRcXG4xMjcyOlxcdFxcdHJldCA9IGFpcl9sZWRzX2luaXQocGh5ZGV2LCBFTjg4MTFIX0xFRF9DT1VOVCwgQUlSX1BIWV9MRURfRFVSLFxcbjEyNzM6XFx0XFx0XFx0XFx0ICAgIEFJUl9MRURfTU9ERV9VU0VSX0RFRklORSk7XFxuMTI3NDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjc1OlxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbGVkczogJWRcXFxcblxcXCIsIHJldCk7XFxuMTI3NjpcXHRcXG4xMjc3OlxcdFxcdHJldHVybiByZXQ7XFxuMTI3ODpcXHR9XFxuMTI3OTpcXHRcXG4xMjgwOlxcdHN0YXRpYyBpbnQgZW44ODExaF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjEyODE6XFx0e1xcbjEyODI6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4xMjgzOlxcdFxcdGludCByZXQ7XFxuMTI4NDpcXHRcXG4xMjg1OlxcdFxcdC8qIElmIHJlc3RhcnQgaGFwcGVuZWQgaW4gLnByb2JlKCksIG5vIG5lZWQgdG8gcmVzdGFydCBub3cgKi9cXG4xMjg2OlxcdFxcdGlmIChwcml2LVxcdTAwM2VtY3VfbmVlZHNfcmVzdGFydCkge1xcbjEyODc6XFx0XFx0XFx0cmV0ID0gZW44ODExaF9yZXN0YXJ0X21jdShwaHlkZXYpO1xcbjEyODg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTI4OTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEyOTA6XFx0XFx0fSBlbHNlIHtcXG4xMjkxOlxcdFxcdFxcdC8qIE5leHQgY2FsbHMgdG8gLmNvbmZpZ19pbml0KCkgbWN1IG5lZWRzIHRvIHJlc3RhcnQgKi9cXG4xMjkyOlxcdFxcdFxcdHByaXYtXFx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gdHJ1ZTtcXG4xMjkzOlxcdFxcdH1cXG4xMjk0OlxcdFxcbjEyOTU6XFx0XFx0LyogU2VsZWN0IG1vZGUgMSwgdGhlIG9ubHkgbW9kZSBzdXBwb3J0ZWQuXFxuMTI5NjpcXHRcXHQgKiBDb25maWd1cmVzIHRoZSBTZXJEZXMgZm9yIDI1MDBCYXNlLVggd2l0aCByYXRlIGFkYXB0YXRpb25cXG4xMjk3OlxcdFxcdCAqL1xcbjEyOTg6XFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfMSxcXG4xMjk5OlxcdFxcdFxcdFxcdCAgICBBSVJfUEhZX01DVV9DTURfMV9NT0RFMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjMxLjYzODA3ODVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA4NjU2MzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGlzLiBMZXQncyBzZWUgd2hhdCB0aGlzIGRvY3VtZW50IGNvbnRhaW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGZvcm11bGF0ZSBhIGNvaGVyZW50IHJlc3BvbnNlLiBKdXN0IGdpbW1lIGEgc2Vjb25kLiBJIG5lZWQgdG8gc2VlIHRoZSBlbnRpcmUgdGV4dCBiZWZvcmUgSSBjYW4gZnVsbHkgc3ludGhlc2l6ZSBpdC4gSSdsbCByZWFkIHRvIHRoZSB2ZXJ5IGVuZCBvZiB0aGUgZmlsZS4uLiBhbmQgdGhlbiBJJ2xsIGJlIGFibGUgdG8gcHJvcGVybHkgc3VtbWFyaXplIHdoYXQncyBiZWluZyBhc2tlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MDcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MzMuNzI0NjQ1NTczWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjg0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMDA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTMwMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMDI6XFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfMixcXG4xMzAzOlxcdFxcdFxcdFxcdCAgICBBSVJfUEhZX01DVV9DTURfMl9NT0RFMSk7XFxuMTMwNDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzA1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTMwNjpcXHRcXHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF8zLFxcbjEzMDc6XFx0XFx0XFx0XFx0ICAgIEFJUl9QSFlfTUNVX0NNRF8zX01PREUxKTtcXG4xMzA4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEzMDk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzEwOlxcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQUlSX1BIWV9NQ1VfQ01EXzQsXFxuMTMxMTpcXHRcXHRcXHRcXHQgICAgQUlSX1BIWV9NQ1VfQ01EXzRfTU9ERTEpO1xcbjEzMTI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTMxMzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMTQ6XFx0XFxuMTMxNTpcXHRcXHRyZXQgPSBlbjg4MTFoX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkocGh5ZGV2KTtcXG4xMzE2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEzMTc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzE4OlxcdFxcbjEzMTk6XFx0XFx0cmV0ID0gYWlyX2xlZHNfaW5pdChwaHlkZXYsIEVOODgxMUhfTEVEX0NPVU5ULCBBSVJfUEhZX0xFRF9EVVIsXFxuMTMyMDpcXHRcXHRcXHRcXHQgICAgQUlSX0xFRF9NT0RFX1VTRVJfREVGSU5FKTtcXG4xMzIxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMTMyMjpcXHRcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIGxlZHM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEzMjM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzI0OlxcdFxcdH1cXG4xMzI1OlxcdFxcbjEzMjY6XFx0XFx0LyogQ29uZmlndXJlIGxlZCBncGlvIHBpbnMgYXMgb3V0cHV0LiBNdXN0IGJlIHJlZG9uZSBvbiBldmVyeVxcbjEzMjc6XFx0XFx0ICogLmNvbmZpZ19pbml0KCksIG5vdCBqdXN0IG9uY2UgaW4gLnByb2JlKCk6IGVuODgxMWhfcmVzdGFydF9tY3UoKVxcbjEzMjg6XFx0XFx0ICogcmVzZXRzIGJ1Y2twYnVzLW1hcHBlZCBNQ1Ugc3RhdGUgKGluY2wuIHRoaXMgcmVnaXN0ZXIpIG9uIGV2ZXJ5XFxuMTMyOTpcXHRcXHQgKiBjYWxsIGFmdGVyIHRoZSBmaXJzdCwgZS5nLiBvbiBsaW5rIHJlbmVnb3RpYXRpb24gb3IgaWZ1cC9pZmRvd24uXFxuMTMzMDpcXHRcXHQgKi9cXG4xMzMxOlxcdFxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfR1BJT19PVVRQVVQsXFxuMTMzMjpcXHRcXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfR1BJT19PVVRQVVRfMzQ1LFxcbjEzMzM6XFx0XFx0XFx0XFx0XFx0XFx0ICBFTjg4MTFIX0dQSU9fT1VUUFVUXzM0NSk7XFxuMTMzNDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzM1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTMzNjpcXHRcXG4xMzM3OlxcdFxcdHJldHVybiAwO1xcbjEzMzg6XFx0fVxcbjEzMzk6XFx0XFxuMTM0MDpcXHRzdGF0aWMgaW50IGVuODgxMWhfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTM0MTpcXHR7XFxuMTM0MjpcXHRcXHRsaW5rbW9kZV9zZXRfYml0X2FycmF5KHBoeV9iYXNpY19wb3J0c19hcnJheSxcXG4xMzQzOlxcdFxcdFxcdFxcdCAgICAgICBBUlJBWV9TSVpFKHBoeV9iYXNpY19wb3J0c19hcnJheSksXFxuMTM0NDpcXHRcXHRcXHRcXHQgICAgICAgcGh5ZGV2LVxcdTAwM2VzdXBwb3J0ZWQpO1xcbjEzNDU6XFx0XFxuMTM0NjpcXHRcXHRyZXR1cm4gZ2VucGh5X2M0NV9wbWFfcmVhZF9hYmlsaXRpZXMocGh5ZGV2KTtcXG4xMzQ3OlxcdH1cXG4xMzQ4OlxcdFxcbjEzNDk6XFx0c3RhdGljIGludCBlbjg4MTFoX2dldF9yYXRlX21hdGNoaW5nKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuMTM1MDpcXHRcXHRcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpZmFjZSlcXG4xMzUxOlxcdHtcXG4xMzUyOlxcdFxcdHJldHVybiBSQVRFX01BVENIX1BBVVNFO1xcbjEzNTM6XFx0fVxcbjEzNTQ6XFx0XFxuMTM1NTpcXHRzdGF0aWMgaW50IGVuODgxMWhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xMzU2OlxcdHtcXG4xMzU3OlxcdFxcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbjEzNTg6XFx0XFx0aW50IHJldDtcXG4xMzU5OlxcdFxcdHUzMiBhZHY7XFxuMTM2MDpcXHRcXG4xMzYxOlxcdFxcdGlmIChwaHlkZXYtXFx1MDAzZWF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKSB7XFxuMTM2MjpcXHRcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsIFxcXCJEaXNhYmxpbmcgYXV0b25lZyBpcyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4xMzYzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEzNjQ6XFx0XFx0fVxcbjEzNjU6XFx0XFxuMTM2NjpcXHRcXHRhZHYgPSBsaW5rbW9kZV9hZHZfdG9fbWlpXzEwZ2J0X2Fkdl90KHBoeWRldi1cXHUwMDNlYWR2ZXJ0aXNpbmcpO1xcbjEzNjc6XFx0XFxuMTM2ODpcXHRcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCxcXG4xMzY5OlxcdFxcdFxcdFxcdFxcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsIGFkdik7XFxuMTM3MDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzcxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTM3MjpcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4xMzczOlxcdFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbjEzNzQ6XFx0XFxuMTM3NTpcXHRcXHRyZXR1cm4gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCBjaGFuZ2VkKTtcXG4xMzc2OlxcdH1cXG4xMzc3OlxcdFxcbjEzNzg6XFx0c3RhdGljIGludCBlbjg4MTFoX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTM3OTpcXHR7XFxuMTM4MDpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbjEzODE6XFx0XFx0dTMyIHBidXNfdmFsdWU7XFxuMTM4MjpcXHRcXHRpbnQgcmV0LCB2YWw7XFxuMTM4MzpcXHRcXG4xMzg0OlxcdFxcdHJldCA9IGdlbnBoeV91cGRhdGVfbGluayhwaHlkZXYpO1xcbjEzODU6XFx0XFx0aWYgKHJldClcXG4xMzg2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTM4NzpcXHRcXG4xMzg4OlxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5TVVBQT1JURUQ7XFxuMTM4OTpcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTlNVUFBPUlRFRDtcXG4xMzkwOlxcdFxcdHBoeWRldi1cXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xcbjEzOTE6XFx0XFx0cGh5ZGV2LVxcdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcXG4xMzkyOlxcdFxcdHBoeWRldi1cXHUwMDNlcGF1c2UgPSAwO1xcbjEzOTM6XFx0XFx0cGh5ZGV2LVxcdTAwM2Vhc3ltX3BhdXNlID0gMDtcXG4xMzk0OlxcdFxcdHBoeWRldi1cXHUwMDNlcmF0ZV9tYXRjaGluZyA9IFJBVEVfTUFUQ0hfUEFVU0U7XFxuMTM5NTpcXHRcXG4xMzk2OlxcdFxcdHJldCA9IGdlbnBoeV9yZWFkX21hc3Rlcl9zbGF2ZShwaHlkZXYpO1xcbjEzOTc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTM5ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjMzLjcyNjkxNzM5MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzI2ODIwNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIHNvIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgcmVzdCBvZiBgYWlyX2VuODgxMWguY2AgYWxsIHRoZSB3YXkgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gTm8gcG9pbnQganVzdCBmb2N1c2luZyBvbiBhIGZyYWdtZW50LCBnb3R0YSBzZWUgdGhlIHdob2xlIGNvbnRleHQgaGVyZS4gTGV0J3MgZ2V0IHRoZSB3aG9sZSB0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0OTksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjM1LjQ1Mzc0MDg5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQwMDpcXHRcXHRyZXQgPSBnZW5waHlfcmVhZF9scGEocGh5ZGV2KTtcXG4xNDAxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0MDI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNDAzOlxcdFxcbjE0MDQ6XFx0XFx0aWYgKHBoeV9pZF9jb21wYXJlX21vZGVsKHBoeWRldi1cXHUwMDNlcGh5X2lkLCBBTjg4MTFIQl9QSFlfSUQpKSB7XFxuMTQwNTpcXHRcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTtcXG4xNDA2OlxcdFxcdFxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbjE0MDc6XFx0XFx0XFx0XFx0cmV0dXJuIHZhbDtcXG4xNDA4OlxcdFxcdFxcdGxpbmttb2RlX21vZF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbjE0MDk6XFx0XFx0XFx0XFx0XFx0IHBoeWRldi1cXHUwMDNlbHBfYWR2ZXJ0aXNpbmcsXFxuMTQxMDpcXHRcXHRcXHRcXHRcXHQgdmFsIFxcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81Ryk7XFxuMTQxMTpcXHRcXHR9IGVsc2Uge1xcbjE0MTI6XFx0XFx0XFx0LyogR2V0IGxpbmsgcGFydG5lciAyLjVHQkFTRS1UIGFiaWxpdHkgZnJvbSB2ZW5kb3IgcmVnaXN0ZXIgKi9cXG4xNDEzOlxcdFxcdFxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3JlYWQocGh5ZGV2LCBFTjg4MTFIXzJQNUdfTFBBLFxcbjE0MTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnBidXNfdmFsdWUpO1xcbjE0MTU6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTQxNjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0MTc6XFx0XFx0XFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXFxuMTQxODpcXHRcXHRcXHRcXHRcXHQgcGh5ZGV2LVxcdTAwM2VscF9hZHZlcnRpc2luZyxcXG4xNDE5OlxcdFxcdFxcdFxcdFxcdCBwYnVzX3ZhbHVlIFxcdTAwMjYgRU44ODExSF8yUDVHX0xQQV8yUDVHKTtcXG4xNDIwOlxcdFxcdH1cXG4xNDIxOlxcdFxcbjE0MjI6XFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlYXV0b25lZ19jb21wbGV0ZSlcXG4xNDIzOlxcdFxcdFxcdHBoeV9yZXNvbHZlX2FuZWdfcGF1c2UocGh5ZGV2KTtcXG4xNDI0OlxcdFxcbjE0MjU6XFx0XFx0aWYgKCFwaHlkZXYtXFx1MDAzZWxpbmspXFxuMTQyNjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNDI3OlxcdFxcbjE0Mjg6XFx0XFx0LyogR2V0IHJlYWwgc3BlZWQgZnJvbSB2ZW5kb3IgcmVnaXN0ZXIgKi9cXG4xNDI5OlxcdFxcdHZhbCA9IHBoeV9yZWFkKHBoeWRldiwgQUlSX0FVWF9DVFJMX1NUQVRVUyk7XFxuMTQzMDpcXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4xNDMxOlxcdFxcdFxcdHJldHVybiB2YWw7XFxuMTQzMjpcXHRcXHRzd2l0Y2ggKHZhbCBcXHUwMDI2IEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfTUFTSykge1xcbjE0MzM6XFx0XFx0Y2FzZSBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEXzI1MDA6XFxuMTQzNDpcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfMjUwMDtcXG4xNDM1OlxcdFxcdFxcdGJyZWFrO1xcbjE0MzY6XFx0XFx0Y2FzZSBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEXzEwMDA6XFxuMTQzNzpcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDtcXG4xNDM4OlxcdFxcdFxcdGJyZWFrO1xcbjE0Mzk6XFx0XFx0Y2FzZSBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEXzEwMDpcXG4xNDQwOlxcdFxcdFxcdHBoeWRldi1cXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDA7XFxuMTQ0MTpcXHRcXHRcXHRicmVhaztcXG4xNDQyOlxcdFxcdGNhc2UgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF8xMDpcXG4xNDQzOlxcdFxcdFxcdHBoeWRldi1cXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDtcXG4xNDQ0OlxcdFxcdFxcdGJyZWFrO1xcbjE0NDU6XFx0XFx0fVxcbjE0NDY6XFx0XFxuMTQ0NzpcXHRcXHQvKiBGaXJtd2FyZSBiZWZvcmUgdmVyc2lvbiAyNDAxMTIwMiBoYXMgbm8gdmVuZG9yIHJlZ2lzdGVyIDJQNUdfTFBBLlxcbjE0NDg6XFx0XFx0ICogQXNzdW1lIGxpbmsgcGFydG5lciBhZHZlcnRpc2VkIGl0IGlmIGNvbm5lY3RlZCBhdCAyNTAwTWJwcy5cXG4xNDQ5OlxcdFxcdCAqL1xcbjE0NTA6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWZpcm13YXJlX3ZlcnNpb24gXFx1MDAzYyAweDI0MDExMjAyKSB7XFxuMTQ1MTpcXHRcXHRcXHRsaW5rbW9kZV9tb2RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcXG4xNDUyOlxcdFxcdFxcdFxcdFxcdCBwaHlkZXYtXFx1MDAzZWxwX2FkdmVydGlzaW5nLFxcbjE0NTM6XFx0XFx0XFx0XFx0XFx0IHBoeWRldi1cXHUwMDNlc3BlZWQgPT0gU1BFRURfMjUwMCk7XFxuMTQ1NDpcXHRcXHR9XFxuMTQ1NTpcXHRcXG4xNDU2OlxcdFxcdC8qIE9ubHkgc3VwcG9ydHMgZnVsbCBkdXBsZXggKi9cXG4xNDU3OlxcdFxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XFxuMTQ1ODpcXHRcXG4xNDU5OlxcdFxcdHJldHVybiAwO1xcbjE0NjA6XFx0fVxcbjE0NjE6XFx0XFxuMTQ2MjpcXHRzdGF0aWMgaW50IGVuODgxMWhfY2xlYXJfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjE0NjM6XFx0e1xcbjE0NjQ6XFx0XFx0aW50IHJldDtcXG4xNDY1OlxcdFxcbjE0NjY6XFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfMyxcXG4xNDY3OlxcdFxcdFxcdFxcdCAgICBBSVJfUEhZX01DVV9DTURfM19ET0NNRCk7XFxuMTQ2ODpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNDY5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTQ3MDpcXHRcXG4xNDcxOlxcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQUlSX1BIWV9NQ1VfQ01EXzQsXFxuMTQ3MjpcXHRcXHRcXHRcXHQgICAgQUlSX1BIWV9NQ1VfQ01EXzRfSU5UQ0xSKTtcXG4xNDczOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0NzQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNDc1OlxcdFxcbjE0NzY6XFx0XFx0cmV0dXJuIDA7XFxuMTQ3NzpcXHR9XFxuMTQ3ODpcXHRcXG4xNDc5OlxcdHN0YXRpYyBpcnFyZXR1cm5fdCBlbjg4MTFoX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNDgwOlxcdHtcXG4xNDgxOlxcdFxcdGludCByZXQ7XFxuMTQ4MjpcXHRcXG4xNDgzOlxcdFxcdHJldCA9IGVuODgxMWhfY2xlYXJfaW50cihwaHlkZXYpO1xcbjE0ODQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4xNDg1OlxcdFxcdFxcdHBoeV9lcnJvcihwaHlkZXYpO1xcbjE0ODY6XFx0XFx0XFx0cmV0dXJuIElSUV9OT05FO1xcbjE0ODc6XFx0XFx0fVxcbjE0ODg6XFx0XFxuMTQ4OTpcXHRcXHRwaHlfdHJpZ2dlcl9tYWNoaW5lKHBoeWRldik7XFxuMTQ5MDpcXHRcXG4xNDkxOlxcdFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4xNDkyOlxcdH1cXG4xNDkzOlxcdFxcbjE0OTQ6XFx0c3RhdGljIGludCBlbjg4MTFoX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjE0OTU6XFx0e1xcbjE0OTY6XFx0XFx0Y2xrX3Jlc3RvcmVfY29udGV4dCgpO1xcbjE0OTc6XFx0XFxuMTQ5ODpcXHRcXHRyZXR1cm4gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xcbjE0OTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOTozNS40NTM4NTcyMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTg2NTQ0OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gc3ludGhlc2l6ZSB0aGVzZSB0aG91Z2h0cy4gSGVyZSdzIGEgc3VtbWFyeSBmcm9tIG15IHBlcnNwZWN0aXZlLCBhbnRpY2lwYXRpbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgUmVtYWluZGVyKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvY2Vzc2luZyBzdGFnZSBpcyBjb21wbGV0ZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgbGVmdC4gTXkgbmV4dCBzdGVwIGludm9sdmVzIGV4YW1pbmluZyB0aGUgcmVtYWluaW5nIGxpbmVzIG9mIHRoZSBmaWxlLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHN0YXRlIG9mIHRoZSByZW1haW5pbmcgZGF0YSBhbmQgaXRzIG5hdHVyZS4gSSdsbCBiZSBhc3Nlc3NpbmcgaXQgdG8gaWRlbnRpZnkgcGF0dGVybnMsIHBvdGVudGlhbCBhbm9tYWxpZXMsIGFuZCB0aGUgb3ZlcmFsbCBjb250ZXh0IHRoYXQgY2FuIGluZm9ybSB0aGUgc3Vic2VxdWVudCBzdGVwcy4gVGhpcyAncmVtYWluaW5nIGxpbmVzJyBzZWN0aW9uIGNvdWxkIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0byBwcm9jZWVkIHdpdGggdGhlIG92ZXJhbGwgdGFzay4gQXJlIHRoZXJlIGFueSBvdmVybG9va2VkIGlzc3Vlcywgb3IgaXMgdGhpcyB0aGUgZmluYWwgcGllY2Ugb2YgdGhlIHB1enpsZT8gVGhlIGluZm9ybWF0aW9uIGhlcmUgd2lsbCBkaXJlY3RseSBzaGFwZSBteSBuZXh0IGRlY2lzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyMjQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjM5LjQ0MDQwNjcwM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUwMDpcXHRcXG4xNTAxOlxcdHN0YXRpYyBpbnQgZW44ODExaF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTUwMjpcXHR7XFxuMTUwMzpcXHRcXHRjbGtfc2F2ZV9jb250ZXh0KCk7XFxuMTUwNDpcXHRcXG4xNTA1OlxcdFxcdHJldHVybiBnZW5waHlfc3VzcGVuZChwaHlkZXYpO1xcbjE1MDY6XFx0fVxcbjE1MDc6XFx0XFxuMTUwODpcXHRzdGF0aWMgdm9pZCBhbjg4MTFoYl9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNTA5OlxcdHtcXG4xNTEwOlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuMTUxMTpcXHRcXG4xNTEyOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwYnVzZGV2KSB7XFxuMTUxMzpcXHRcXHRcXHRtZGlvX2RldmljZV9yZW1vdmUocHJpdi1cXHUwMDNlcGJ1c2Rldik7XFxuMTUxNDpcXHRcXHRcXHRtZGlvX2RldmljZV9mcmVlKHByaXYtXFx1MDAzZXBidXNkZXYpO1xcbjE1MTU6XFx0XFx0fVxcbjE1MTY6XFx0fVxcbjE1MTc6XFx0XFxuMTUxODpcXHRzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW44ODExaF9kcml2ZXJbXSA9IHtcXG4xNTE5OlxcdHtcXG4xNTIwOlxcdFxcdFBIWV9JRF9NQVRDSF9NT0RFTChFTjg4MTFIX1BIWV9JRCksXFxuMTUyMTpcXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIkFpcm9oYSBFTjg4MTFIXFxcIixcXG4xNTIyOlxcdFxcdC5wcm9iZVxcdFxcdFxcdD0gZW44ODExaF9wcm9iZSxcXG4xNTIzOlxcdFxcdC5nZXRfZmVhdHVyZXNcXHRcXHQ9IGVuODgxMWhfZ2V0X2ZlYXR1cmVzLFxcbjE1MjQ6XFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSBlbjg4MTFoX2NvbmZpZ19pbml0LFxcbjE1MjU6XFx0XFx0LmdldF9yYXRlX21hdGNoaW5nXFx0PSBlbjg4MTFoX2dldF9yYXRlX21hdGNoaW5nLFxcbjE1MjY6XFx0XFx0LmNvbmZpZ19hbmVnXFx0XFx0PSBlbjg4MTFoX2NvbmZpZ19hbmVnLFxcbjE1Mjc6XFx0XFx0LnJlYWRfc3RhdHVzXFx0XFx0PSBlbjg4MTFoX3JlYWRfc3RhdHVzLFxcbjE1Mjg6XFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0gZW44ODExaF9yZXN1bWUsXFxuMTUyOTpcXHRcXHQuc3VzcGVuZFxcdFxcdD0gZW44ODExaF9zdXNwZW5kLFxcbjE1MzA6XFx0XFx0LmNvbmZpZ19pbnRyXFx0XFx0PSBlbjg4MTFoX2NsZWFyX2ludHIsXFxuMTUzMTpcXHRcXHQuaGFuZGxlX2ludGVycnVwdFxcdD0gZW44ODExaF9oYW5kbGVfaW50ZXJydXB0LFxcbjE1MzI6XFx0XFx0LmxlZF9od19pc19zdXBwb3J0ZWRcXHQ9IGVuODgxMWhfbGVkX2h3X2lzX3N1cHBvcnRlZCxcXG4xNTMzOlxcdFxcdC5yZWFkX3BhZ2VcXHRcXHQ9IGFpcl9waHlfcmVhZF9wYWdlLFxcbjE1MzQ6XFx0XFx0LndyaXRlX3BhZ2VcXHRcXHQ9IGFpcl9waHlfd3JpdGVfcGFnZSxcXG4xNTM1OlxcdFxcdC5sZWRfYmxpbmtfc2V0XFx0XFx0PSBhaXJfbGVkX2JsaW5rX3NldCxcXG4xNTM2OlxcdFxcdC5sZWRfYnJpZ2h0bmVzc19zZXRcXHQ9IGFpcl9sZWRfYnJpZ2h0bmVzc19zZXQsXFxuMTUzNzpcXHRcXHQubGVkX2h3X2NvbnRyb2xfc2V0XFx0PSBhaXJfbGVkX2h3X2NvbnRyb2xfc2V0LFxcbjE1Mzg6XFx0XFx0LmxlZF9od19jb250cm9sX2dldFxcdD0gYWlyX2xlZF9od19jb250cm9sX2dldCxcXG4xNTM5OlxcdH0sXFxuMTU0MDpcXHR7XFxuMTU0MTpcXHRcXHRQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODExSEJfUEhZX0lEKSxcXG4xNTQyOlxcdFxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiQWlyb2hhIEFOODgxMUhCXFxcIixcXG4xNTQzOlxcdFxcdC5wcm9iZVxcdFxcdFxcdD0gYW44ODExaGJfcHJvYmUsXFxuMTU0NDpcXHRcXHQucmVtb3ZlXFx0XFx0XFx0PSBhbjg4MTFoYl9yZW1vdmUsXFxuMTU0NTpcXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0XFx0PSBlbjg4MTFoX2dldF9mZWF0dXJlcyxcXG4xNTQ2OlxcdFxcdC5jb25maWdfaW5pdFxcdFxcdD0gYW44ODExaGJfY29uZmlnX2luaXQsXFxuMTU0NzpcXHRcXHQuZ2V0X3JhdGVfbWF0Y2hpbmdcXHQ9IGVuODgxMWhfZ2V0X3JhdGVfbWF0Y2hpbmcsXFxuMTU0ODpcXHRcXHQuY29uZmlnX2FuZWdcXHRcXHQ9IGVuODgxMWhfY29uZmlnX2FuZWcsXFxuMTU0OTpcXHRcXHQucmVhZF9zdGF0dXNcXHRcXHQ9IGVuODgxMWhfcmVhZF9zdGF0dXMsXFxuMTU1MDpcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSBlbjg4MTFoX3Jlc3VtZSxcXG4xNTUxOlxcdFxcdC5zdXNwZW5kXFx0XFx0PSBlbjg4MTFoX3N1c3BlbmQsXFxuMTU1MjpcXHRcXHQuY29uZmlnX2ludHJcXHRcXHQ9IGVuODgxMWhfY2xlYXJfaW50cixcXG4xNTUzOlxcdFxcdC5oYW5kbGVfaW50ZXJydXB0XFx0PSBlbjg4MTFoX2hhbmRsZV9pbnRlcnJ1cHQsXFxuMTU1NDpcXHRcXHQubGVkX2h3X2lzX3N1cHBvcnRlZFxcdD0gZW44ODExaF9sZWRfaHdfaXNfc3VwcG9ydGVkLFxcbjE1NTU6XFx0XFx0LnJlYWRfcGFnZVxcdFxcdD0gYWlyX3BoeV9yZWFkX3BhZ2UsXFxuMTU1NjpcXHRcXHQud3JpdGVfcGFnZVxcdFxcdD0gYWlyX3BoeV93cml0ZV9wYWdlLFxcbjE1NTc6XFx0XFx0LmxlZF9ibGlua19zZXRcXHRcXHQ9IGFpcl9sZWRfYmxpbmtfc2V0LFxcbjE1NTg6XFx0XFx0LmxlZF9icmlnaHRuZXNzX3NldFxcdD0gYWlyX2xlZF9icmlnaHRuZXNzX3NldCxcXG4xNTU5OlxcdFxcdC5sZWRfaHdfY29udHJvbF9zZXRcXHQ9IGFpcl9sZWRfaHdfY29udHJvbF9zZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjM5LjQ0MDYzMTQzM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDcyMDg1MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdvcnRoaW5lc3Mgb2YgRnV6emluZyB0aGUgYWlyX2VuODgxMWguYyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBgYWlyX2VuODgxMWguY2AgaXMgYW4gTURJTyBFdGhlcm5ldCBQSFkgZHJpdmVyLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIEkgY2FuIGV2ZW4gKnJlYWNoKiB0aGlzIGRyaXZlciBmb3IgZnV6emluZyBwdXJwb3NlcyB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlLiBDYW4gaXQgYmUgcHJvYmVkIG9yIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSk/XG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBNRElPIFBIWSBkZXZpY2VzIHR5cGljYWxseSB3b3JrIHdpdGhpbiBMaW51eCwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHZpcnR1YWxpemF0aW9uLiAgVGhleSBhdHRhY2ggdG8gTURJTyBidXNlcyDigJMgTUlJIC8gTURJTyBidXNlcywgdG8gYmUgcHJlY2lzZS4gIEFyZSB0aG9zZSBNRElPIFBIWSBkcml2ZXJzIGFjY2Vzc2libGUgZHVyaW5nIGZ1enppbmcgZXhlcmNpc2VzIGluIFFFTVUgb3IgR0NFPyBUaGF0J3MgdGhlIGNydXggb2YgaXQuXG5cbkkgbmVlZCB0byBiZSBzdXBlciBjYXJlZnVsIHRvIGZvbGxvdyB0aGUgZ3VpZGVsaW5lcyBmb3IgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIi4gIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYXRjaCBJJ20gZXhhbWluaW5nIGRvZXNuJ3QgZmFsbCB1bmRlciB0aGVzZSBkaXNxdWFsaWZpY2F0aW9uczogZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBkZWNvcmF0aXZlIGNoYW5nZXMgbGlrZSBsb2dnaW5nLCBjb3NtZXRpYyBjaGFuZ2VzIHRvIGNvbnN0YW50cywgY29kZSBwYXRocyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBzZXR1cHMgKGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24sIGxpa2UgVVNCIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbSksIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlciBjb2RlIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBjYXJkcywgb3IgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aG9zZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuXG5TbywgaG93IGRvZXMgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBnZXQgcHJvYmVkIGluIHRoZSBmaXJzdCBwbGFjZT8gSXQgc2VlbXMgdGhhdCBQSFkgZHJpdmVycyBnZXQgcHJvYmVkIHdoZW4gdGhlIGtlcm5lbCBkaXNjb3ZlcnMgYSBQSFkgZGV2aWNlIHdpdGggdGhlIHJpZ2h0IFBIWSBJRCBvbiBhbiBNRElPIGJ1cywgb3IgbWF5YmUgdGhyb3VnaCBNRElPIGJ1cyBwcm9iaW5nLCBEZXZpY2UgVHJlZSAoRFQpLCBvciBwbGF0Zm9ybSBzZXR1cC4gQ3J1Y2lhbGx5LCBjYW4gdGhlc2UgTURJTyBQSFlzIGJlICppbnN0YW50aWF0ZWQqIG9yIHByb2JlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50ICp3aXRob3V0KiByZWFsIGhhcmR3YXJlP1xuXG5JIGhhdmUgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBraW5kIG9mIHZpcnR1YWwgb3IgbW9jayBNRElPIGJ1cyBpbXBsZW1lbnRhdGlvbiBpbiBRRU1VLCBvciBtYXliZSBzb21ldGhpbmcgbGlrZSBhIFVTQi10by1NRElPIGJyaWRnZSB0aGF0IHdvdWxkIGFsbG93IG1lIHRvIHNpbXVsYXRlIGhhcmR3YXJlIGludGVyYWN0aW9uLiBEb2VzIHN5emthbGxlciBvZmZlciBhIHdheSB0byBjcmVhdGUgYSBQSFkgZGV2aWNlIG9yIE1ESU8gZGV2aWNlPyBUaGlzIGlzIHdoYXQgSSBuZWVkIHRvIGNoZWNrLiAgSSBuZWVkIHRvIGNoZWNrIGhvdyBtZGlvYnVzIGFuZCBwaHkgZGV2aWNlcyBhcmUgaGFuZGxlZC4gVGltZSB0byBncmVwIHRoZSBrZXJuZWwgc291cmNlIGZvciBrZXl3b3JkcyBsaWtlIFwibWRpb1wiLCBcInBoeV9kZXZpY2VfcmVnaXN0ZXJcIiwgYW5kIFwibWRpb2J1c19yZWdpc3RlclwiIHRvIHNlZSB3aGF0J3MgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjM3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6NDYuOTEyNzE5NzlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTcxNjQ4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb2J1c19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEwMTggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9NjA3PXN0YXRpYyBpbnQgYmNtX3NmMl9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtNjgzLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6Njg0OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4NS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM9MTg3PXN0YXRpYyBpbnQgZ3N3aXBfbWRpbyhzdHJ1Y3QgZ3N3aXBfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTIxMy1cXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYzoyMTQ6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0zMjE9c3RhdGljIGludCBrc3o5NDc3X3Bjc19jcmVhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0MS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzozNDI6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cXHUwMDNlZGV2LCBidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0My1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MjMyMT1pbnQga3N6X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTItXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MjM5MzpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZHMtXFx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMzk0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM9Njg1PXN0YXRpYyBpbnQgbGFuOTM3eF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1NS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jOjc1NjpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZHMtXFx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTI0MDk9bXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0NDQtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI0NDU6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNDQ2LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYz0yNDI9c3RhdGljIGludCBtdDc2Mjhfc2V0dXBfaW50ZXJuYWxfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtMjYxLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzoyNjI6XFx0cmV0dXJuIGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jLTI2My19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz0zODM0PXN0YXRpYyBpbnQgbXY4OGU2eHh4X21kaW9fcmVnaXN0ZXIoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4Ny1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzozODg4OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4OS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjc9c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5Mi1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyOTM6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTQtXFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0xNDk9c3RhdGljIGludCBuZXRjX3BvcnRfY3JlYXRlX2VtZGlvX2J1cyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE3OS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoxODA6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0xODEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jPTk1Nz1zdGF0aWMgaW50IHZzYzk5NTlfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxMy1cXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoxMDE0OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTEwMTUtXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYz04Nzg9c3RhdGljIGludCB2c2M5OTUzX21kaW9fYnVzX2FsbG9jKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTAzLVxcdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM6OTA0OlxcdHJjID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jLTkwNS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jPTM1Nz1zdGF0aWMgaW50IGFyOTMzMV9zd19tYnVzX2luaXQoc3RydWN0IGFyOTMzMV9zd19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODEtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzozODI6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4My1cXHRvZl9ub2RlX3B1dChtbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTQ3PXFjYThrX21kaW9fcmVnaXN0ZXIoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODYtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTg3OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpbyk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTg4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc0PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtOTktXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEwMDpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMDEtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYz0xMTE3PXN0YXRpYyBpbnQgYTVwc3dfcHJvYmVfbWRpbyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDMtXFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzoxMTQ0OlxcdHJldHVybiBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE0NS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg9MzA3PXZvaWQgc2phMTEwNV9mcmFtZV9tZW1vcnlfcGFydGl0aW9uaW5nKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMwOS0vKiBGcm9tIHNqYTExMDVfbWRpby5jICovXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oOjMxMDppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMxMS12b2lkIHNqYTExMDVfbWRpb2J1c191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0zMDI2PXN0YXRpYyBpbnQgc2phMTEwNV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY3LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjMwNjg6XFx0cmMgPSBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjktXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MjU4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX2Jhc2VfdHhfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4Ny1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzoyODg6XFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4OS1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTMxMj1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3QxX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zNDMtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6MzQ0OlxcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zNDUtXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0zNjg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfcGNzX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zOTUtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6Mzk2OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5Ny1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTQzOT1zdGF0aWMgdm9pZCBzamExMTA1X21kaW9idXNfcGNzX3VucmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ1OC1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzo0NTk6aW50IHNqYTExMDVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz01OTU9eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTItXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjYxMzpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTQtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz03MjY9eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy03NDMtXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjc0NDpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy03NDUtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jPTQ1OT1zdGF0aWMgaW50IGF4X21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy00NzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM6NDc5OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXgtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ4MC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jPTEzMjE9c3RhdGljIGludCBvd2xfZW1hY19tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzQ1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYzoxMzQ2OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXFx1MDAzZW1paSwgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jPTUwOT1zdGF0aWMgaW50IGFkaW4xMTEwX3JlZ2lzdGVyX21kaW9idXMoc3RydWN0IGFkaW4xMTEwX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYy01MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM6NTMwOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUzMS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmM9NjE3PXN0YXRpYyBpbnQgYWRpbjExNDBfbWRpb19yZWdpc3RlcihzdHJ1Y3QgYWRpbjExNDBfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTYzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYzo2Mzc6XFx0cmV0dXJuIGRldm1fbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2c3BpZGV2LVxcdTAwM2VkZXYsIHByaXYtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTYzOC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jPTEyOTA9c3RhdGljIGludCBncmV0aF9tZGlvX2luaXQoc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmM6MTMwNzpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGdyZXRoLVxcdTAwM2VtZGlvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDgtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM9MzkzMT1zdGF0aWMgaW50IGV0MTMxeF9wY2lfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jOjQwMjc6XFx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjgtXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jPTEyMT1zdGF0aWMgaW50IGFsdGVyYV90c2VfbWRpb19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM6MTU4OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTU5LVxcdGlmIChyZXQgIT0gMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYz0xMDYxPXN0YXRpYyBpbnQgYXUxMDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jLTEyMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYzoxMjIyOlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXVwLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jLTEyMjMtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYz0zNDI4PXN0YXRpYyBpbnQgeGdiZV9waHlfaW5pdChzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MTctXFx0c25wcmludGYobWlpLVxcdTAwM2VpZCwgc2l6ZW9mKG1paS1cXHUwMDNlaWQpLCBcXFwiJXNcXFwiLCBkZXZfbmFtZShwZGF0YS1cXHUwMDNlZGV2KSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzozNzE4OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWlpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MTktXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcyMDpcXHRcXHRkZXZfZXJyKHBkYXRhLVxcdTAwM2VkZXYsIFxcXCJtZGlvYnVzX3JlZ2lzdGVyIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzIxLVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jPTk4PWludCB4Z2VfbWRpb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTExOC1cXHRtZGlvX2J1cy1cXHUwMDNlcGh5X21hc2sgPSAweDE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYzoxMTk6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMjAtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM9ODM3PWludCB4Z2VuZV9lbmV0X3BoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo4ODg6c3RhdGljIGludCB4Z2VuZV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTg4OS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBtaWlfYnVzICptZGlvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MTM6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxNC1cXHRcXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIxLVxcdC8qIFJlZ2lzdGVyIHRoZSBNRElPIGJ1cyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTIyOlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM9OTM5PWludCB4Z2VuZV9lbmV0X21kaW9fY29uZmlnKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTU4OlxcdHJldCA9IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIocGRhdGEsIG1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTk1OS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM9MTMxPWludCBhcmNfbWRpb19wcm9iZShzdHJ1Y3QgYXJjX2VtYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jOjE3MzpcXHRlcnJvciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBtZGlvX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzQtXFx0b2Zfbm9kZV9wdXQobWRpb19ub2RlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jPTk2Nj1zdGF0aWMgaW50IGF4ODg3OTZjX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jOjEwMTE6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgYXhfbG9jYWwtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwMTItXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM9Njg3PXN0YXRpYyBpbnQgYWc3MXh4X21kaW9fcHJvYmUoc3RydWN0IGFnNzF4eCAqYWcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyNy1cXHRtbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXFxcIm1kaW9cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jOjcyODpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtaWlfYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNzI5LVxcdG9mX25vZGVfcHV0KG1ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYz0yMjM0PXN0YXRpYyBpbnQgYjQ0X3JlZ2lzdGVyX3BoeV9vbmUoc3RydWN0IGI0NCAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjU5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jOjIyNjA6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjYxLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jPTE3MTM9c3RhdGljIGludCBiY21fZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYzoxODMwOlxcdFxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYy0xODMxLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jPTIxMT1zdHJ1Y3QgbWlpX2J1cyAqYmNtYV9tZGlvX21paV9yZWdpc3RlcihzdHJ1Y3QgYmdtYWMgKmJnbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmMtMjM1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jOjIzNjpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzctXFx0b2Zfbm9kZV9wdXQobnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9MTkzPWludCBiY21nZW5ldF9taWlfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgaW5pdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzMy1cXHRcXHRwaHlfbmFtZSA9IFxcXCJleHRlcm5hbCBSdk1JSVxcXCI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MjM0OlxcdFxcdC8qIG9mX21kaW9idXNfcmVnaXN0ZXIgdG9vayBjYXJlIG9mIHJlYWRpbmcgdGhlICdtYXgtc3BlZWQnXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjM1LVxcdFxcdCAqIFBIWSBwcm9wZXJ0eSBmb3IgdXMsIGVmZmVjdGl2ZWx5IGxpbWl0aW5nIHRoZSBQSFkgc3VwcG9ydGVkXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM9MjE1Nz1zdGF0aWMgaW50IHNibWFjX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxkZXYsIGxvbmcgbG9uZyBiYXNlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jLTIyMjctXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jOjIyMjg6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihzYy1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jLTIyMjktXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM9MTUwNT1zdGF0aWMgaW50IHRnM19tZGlvX2luaXQoc3RydWN0IHRnMyAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYy0xNTU3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jOjE1NTg6XFx0aSA9IG1kaW9idXNfcmVnaXN0ZXIodHAtXFx1MDAzZW1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYy0xNTU5LVxcdGlmIChpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTEwMjM9c3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDk2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTA5NzpzdGF0aWMgaW50IG1hY2JfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWFjYiAqYnAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWRpb19ucClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTA0LVxcdGlmIChtZGlvX25wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTEwNTpcXHRcXHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihicC1cXHUwMDNlbWlpX2J1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTA2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTExOTpcXHRcXHRcXHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihicC1cXHUwMDNlbWlpX2J1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMC1cXHRcXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTEyMjpcXHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihicC1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTEyNT1zdGF0aWMgaW50IG1hY2JfbWlpX2luaXQoc3RydWN0IG1hY2IgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTE1OTpcXHRlcnIgPSBtYWNiX21kaW9idXNfcmVnaXN0ZXIoYnAsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE2MC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYz0xMTA3PXN0YXRpYyBpbnQgZG05MDUxX21kaW9fcmVnaXN0ZXIoc3RydWN0IGJvYXJkX2luZm8gKmRiKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYy0xMTI0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM6MTEyNTpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBkYi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYy0xMTI2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM9MjQyMz1zdGF0aWMgaW50IHRzbmVwX21kaW9faW5pdChzdHJ1Y3QgdHNuZXBfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0yNDU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYzoyNDU1OlxcdHJldHZhbCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cXHUwMDNlbWRpb2J1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0yNDU2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYz0xMDI0PXN0YXRpYyBpbnQgZXRob2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jOjEyMDg6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VtZGlvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jLTEyMDktXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz0xNzM0PXN0YXRpYyBpbnQgZnRnbWFjMTAwX3NldHVwX21kaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE3NzA6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZWRldiwgcHJpdi1cXHUwMDNlbWlpX2J1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xNzcxLVxcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmM9MzY9c3RhdGljIGludCBlbmV0Y19wY2lfbWRpb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jLTkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jOjkxOlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBkZXYtXFx1MDAzZW9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jLTkyLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MjY2PXN0YXRpYyBpbnQgZW5ldGNfbWRpb19wcm9iZShzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTI5Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MjkzOlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTI5NC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTMwOD1zdGF0aWMgaW50IGVuZXRjX2ltZGlvX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTM0Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MzQzOlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQ0LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTMwNDI9c3RhdGljIGludCBmZWNfZW5ldF9taWlfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzE2MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzozMTYxOlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZmVwLVxcdTAwM2VtaWlfYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYyLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM9NjU9c3RhdGljIGludCBtcGM1Mnh4X2ZlY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jLTEwNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM6MTA2OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jLTEwNy1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYz0xNDk9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE3NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jOjE3NjpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYy0xNzctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYz05Nz1zdGF0aWMgaW50IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jOjE2NzpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM9NDA5PXN0YXRpYyBpbnQgZnNsX3BxX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTQ5My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYzo0OTQ6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDk1LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM9MzcxPXN0YXRpYyBpbnQgeGdtYWNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjYtXFx0aWYgKGlzX29mX25vZGUoZndub2RlKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jOjQyNzpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgdG9fb2Zfbm9kZShmd25vZGUpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQyOC1cXHRlbHNlIGlmIChpc19hY3BpX25vZGUoZndub2RlKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jOjQyOTpcXHRcXHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBmd25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDMwLVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjY2PWludCBoYmdfbWRpb19pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjkyOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIG1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5My1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jPTEwOTQ9c3RhdGljIGludCBoaXg1aGQyX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jLTExODUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jOjExODY6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jPTEyMz1pbnQgaGNsZ2VfbWFjX21kaW9fY29uZmlnKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTE1NC1cXHRtZGlvX2J1cy1cXHUwMDNlcGh5X21hc2sgPSB+KDFVIFxcdTAwM2NcXHUwMDNjIG1hYy1cXHUwMDNlcGh5X2FkZHIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmM6MTU1OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU2LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jPTQ5NT1zdGF0aWMgaW50IGhuc19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01ODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTg0OlxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgcGRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU4NS1cXHR9IGVsc2UgaWYgKGlzX2FjcGlfbm9kZShwZGV2LVxcdTAwM2VkZXYuZndub2RlKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTkyLVxcdFxcdC8qIFJlZ2lzdGVyIHRoZSBNRElPIGJ1cyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jOjU5MzpcXHRcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5NC1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jPTI1NjA9c3RhdGljIGludCBlbWFjX2R0X21kaW9fcHJvYmUoc3RydWN0IGVtYWNfaW5zdGFuY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg0LVxcdHNucHJpbnRmKGJ1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcIiVzXFxcIiwgZGV2LVxcdTAwM2VvZmRldi1cXHUwMDNlbmFtZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jOjI1ODU6XFx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKFxcdTAwMjZkZXYtXFx1MDAzZW9mZGV2LVxcdTAwM2VkZXYsIGJ1cywgbWlpX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMtMjU4Ni1cXHRpZiAocmVzKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYz0xMDI2PWludCBpeGdiZV9taWlfYnVzX2luaXQoc3RydWN0IGl4Z2JlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwODgtXFx0YWRhcHRlci1cXHUwMDNlbWlpX2J1cyA9IGJ1cztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoxMDg5OlxcdHJldHVybiBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMTA5MC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jPTM4NT1sdHFfZXRvcF9tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDAyLVxcdFxcdCBwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VuYW1lLCBwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VpZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYzo0MDM6XFx0aWYgKG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWlpX2J1cykpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTQwNC1cXHRcXHRlcnIgPSAtRU5YSU87XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jPTI4Mz1zdGF0aWMgaW50IG9yaW9uX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzgxLVxcdC8qIEZvciB0aGUgcGxhdGZvcm1zIG5vdCBzdXBwb3J0aW5nIERUL0FDUEkgZmFsbC1iYWNrXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODI6XFx0ICogdG8gbWRpb2J1c19yZWdpc3RlciB2aWEgb2ZfbWRpb2J1c19yZWdpc3Rlci5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4My1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4NC1cXHRpZiAoaXNfYWNwaV9ub2RlKHBkZXYtXFx1MDAzZWRldi5md25vZGUpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6Mzg1OlxcdFxcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXFx1MDAzZWRldi5md25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg2LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4NzpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg4LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYz0xMzg3PXN0YXRpYyBpbnQgcHhhMTY4X2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmMtMTUwNC1cXHRwZXAtXFx1MDAzZXNtaV9idXMtXFx1MDAzZXBoeV9tYXNrID0gMHhmZmZmZmZmZjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYzoxNTA1OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIocGVwLVxcdTAwM2VzbWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy0xNTA2LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTk5OD1zdGF0aWMgaW50IG10a19tZGlvX2luaXQoc3RydWN0IG10a19ldGggKmV0aClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMTAzNy1cXHRkZXZfZGJnKGV0aC1cXHUwMDNlZGV2LCBcXFwiTURDIGlzIHJ1bm5pbmcgb24gJWQgSHpcXFxcblxcXCIsIE1EQ19NQVhfRlJFUSAvIGV0aC1cXHUwMDNlbWRjX2RpdmlkZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM6MTAzODpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGV0aC1cXHUwMDNlbWlpX2J1cywgbWlpX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM9MTQyMj1zdGF0aWMgaW50IG10a19zdGFyX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYy0xNDQ3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYzoxNDQ4OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXFx1MDAzZW1paSwgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmM9Mjg3PWludCBtbHhiZl9naWdlX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IG1seGJmX2dpZ2UgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jOjMzMzpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmMtMzM0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21kaW8uYz0yNTM9aW50IGZibmljX21kaW9idXNfY3JlYXRlKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jLTI3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21kaW8uYzoyNzM6XFx0ZXJyID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGZiZC1cXHUwMDNlZGV2LCBidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jLTI3NC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jPTEwMzY9c3RhdGljIGludCBrczg4NTFfcmVnaXN0ZXJfbWRpb2J1cyhzdHJ1Y3Qga3M4ODUxX25ldCAqa3MsIHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jOjEwNTM6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNTQtXFx0aWYgKHJldClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jOjEwNTU6XFx0XFx0Z290byBlcnJfbWRpb2J1c19yZWdpc3RlcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYzoxMDYxOmVycl9tZGlvYnVzX3JlZ2lzdGVyOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA2Mi1cXHRtZGlvYnVzX2ZyZWUobWlpX2J1cyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM9MTM3OT1zdGF0aWMgaW50IGxhbjc0M3hfaHdfcmVzZXRfcGh5KHN0cnVjdCBsYW43NDN4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmMtMTM4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM6MTM4MzpcXHQvKiBPbmx5IGNhbGxlZCB3aXRoIGluIHByb2JlLCBhbmQgYmVmb3JlIG1kaW9idXNfcmVnaXN0ZXIgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmMtMTM4NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYz0zNjI4PXN0YXRpYyBpbnQgbGFuNzQzeF9tZGlvYnVzX2luaXQoc3RydWN0IGxhbjc0M3hfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zNjcxLVxcdC8qIHJlZ2lzdGVyIG1kaW9idXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM6MzY3MjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zNjczLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmkvbml4Z2UuYz0xMjEyPXN0YXRpYyBpbnQgbml4Z2VfbWRpb19zZXR1cChzdHJ1Y3Qgbml4Z2VfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25pL25peGdlLmMtMTIzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uaS9uaXhnZS5jOjEyMzE6XFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmkvbml4Z2UuYy0xMjMyLX1cXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOTo0OC4zNjk4OTA4MDlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY5ODY2MzkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNRElPIFBIWSBEcml2ZXJzIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhaXJfZW44ODExaC5jYCwgYW4gRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIGFuZCBBTjg4MTFIQiBjaGlwcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBiZSBlZmZlY3RpdmVseSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGd1aWRlbGluZXMuIExldCBtZSByZS1yZWFkIHRob3NlIHF1aWNrbHkuLi4gcmlnaHQsIGlmIGl0J3MgZGVwZW5kZW50IG9uIGluYWNjZXNzaWJsZSBoYXJkd2FyZSwgaXQncyBub3Qgd29ydGggZnV6emluZy5cblxuTGV0J3Mgc2VlLCB3aGF0IGlzIHRoZSBwcm9iZSBmbG93PyBUaGlzIGRyaXZlciwgbGlrZSBhbnkgTURJTyBQSFkgZHJpdmVyLCBpcyBib3VuZCB0byBhIHNwZWNpZmljIE1ESU8gYnVzLiBJdCByZWxpZXMgb24gdGhlIGBtZGlvX2J1c190eXBlYCBtYXRjaCwgbWVhbmluZyB0aGUgc3lzdGVtIGhhcyB0byBoYXZlIGEgcmVhbCBNRElPIGJ1cy4gRHVyaW5nIHRoZSBidXMgc2Nhbm5pbmcsIGl0IHJlYWRzIHRoZSBNRElPX0RFVklEMSBhbmQgTURJT19ERVZJRDIgcmVnaXN0ZXJzIChyZWdpc3RlcnMgMiBhbmQgMykgZnJvbSB0aGUgUEhZLiBJdCB0aGVuIGNvbXBhcmVzIHRob3NlIHZhbHVlcyB0byB0aGUgSURzIGluIGl0cyBgcGh5X2RldmljZV9pZGAgdGFibGUuIEluIHRoaXMgY2FzZSwgdGhhdCdzIGxvb2tpbmcgZm9yIGBFTjg4MTFIX1BIWV9JRGAgYW5kIGBBTjg4MTFIQl9QSFlfSURgLiBGb3IgdGhpcyBzcGVjaWZpYyBkcml2ZXIgdG8gZXZlbiAqcHJvYmUqIHN1Y2Nlc3NmdWxseSBhbmQgcnVuIGl0cyBgZW44ODExaF9wcm9iZWAgb3IgYGFuODgxMWhiX3Byb2JlYCBmdW5jdGlvbnMgYW5kLCBldmVudHVhbGx5LCBgYWlyX3dyaXRlX2J1ZmAsIGEgKnJlYWwqIEFpcm9oYSBFTjg4MTFIL0FOODgxMUhCIGNoaXAgbmVlZHMgdG8gYmUgcGh5c2ljYWxseSBwcmVzZW50IG9uIGFuIE1ESU8gYnVzLiBUaGUgY29kZSByZWFkcyBhbmQgd3JpdGVzIHJlZ2lzdGVycyB2aWEgTURJTyBkdXJpbmcgdGhlIHByb2JlLCBhbmQgaXQgdHJpZXMgdG8gbG9hZCBmaXJtd2FyZSBpbnRvIHRoZSBjaGlwJ3MgTUNVLlxuXG5UaGUgaXNzdWUgaXMgdGhhdCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgQWlyb2hhIEVOODgxMUggUEhZIGNoaXAgb3IgYW4gQWlyb2hhIE1ESU8gY29udHJvbGxlci4gVGhlcmUncyBubyBlbXVsYXRpb24sIG5vIG1vY2ssIG5vdGhpbmcgaW4gc3l6a2FsbGVyIG9yIFFFTVUgdGhhdCB3b3VsZCByZXNwb25kIHRvIHRoZSB2ZXJ5IHNwZWNpZmljIHByb3ByaWV0YXJ5IFwiYnVja3BidXNcIiByZWdpc3RlciBwcm90b2NvbCB1c2VkIGJ5IHRoaXMgY2hpcC4gVGhhdCdzIGEgaHVnZSBibG9ja2VyLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLi4uaXMgdGhlcmUgKmFueSogd2F5IHRvIHNpbXVsYXRlIG9yIHByb3ZpZGUgYSBcImZha2VcIiBNRElPIGJ1cyBvciBQSFkgd2l0aGluIFFFTVUgdGhhdCBtaWdodCBsZXQgdXMgdHJpY2sgaXQ/IFBlcmhhcHMgYSBVU0ItdG8tTURJTyBnYWRnZXQsIG9yIHNvbWUga2luZCBvZiBtb2NrIE1ESU8gUEhZPyBJJ2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGZvciBcImR1bW15XCIgb3IgXCJtb2NrXCIgTURJTyBpbXBsZW1lbnRhdGlvbnMgdG8gc2VlIGlmIGFueXRoaW5nIGV2ZW4gcmVtb3RlbHkgc3VpdGFibGUgZXhpc3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTYyMiwiT3V0cHV0VG9rZW5zIjo1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOTo1NS4wNjg1NTY4NzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTYzOTk1NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9jay4qbWRpb3xkdW1teS4qbWRpb3xtZGlvLiptb2NrfG1kaW8uKmR1bW15fG1kaW8uKnRlc3R8bWRpby1ncGlvfG1kaW8tYml0YmFuZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbC5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jOjIzOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLWJpdGJhbmcuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jOjIwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLWJpdGJhbmcuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTIxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9hZGRyZXNzLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jPTIwMz1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmc19lbmV0X21kaW9fYmJfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTIwNC1cXHR7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYzoyMDU6XFx0XFx0LmNvbXBhdGlibGUgPSBcXFwiZnNsLGNwbTItbWRpby1iaXRiYW5nXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTIwNi1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmgtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oOjE3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLWJpdGJhbmcuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaC0xOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jLTE4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jOjE5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLWJpdGJhbmcuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jLTIwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuYz0yOTY9dTggZWY0X21kaW9fZ2V0X3BhdXNlKHN0cnVjdCBlZjRfbmljICplZngpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL21kaW9fMTBnLmMtMzA5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuYzozMTA6aW50IGVmNF9tZGlvX3Rlc3RfYWxpdmUoc3RydWN0IGVmNF9uaWMgKmVmeClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL21kaW9fMTBnLmMtMzExLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuaD05OT1lZjRfbWRpb19zZXRfZmxhZyhzdHJ1Y3QgZWY0X25pYyAqZWZ4LCBpbnQgZGV2YWQsIGludCBhZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9tZGlvXzEwZy5oLTEwNS0vKiBMaXZlbmVzcyBzZWxmLXRlc3QgZm9yIE1ESU8gUEhZcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuaDoxMDY6aW50IGVmNF9tZGlvX3Rlc3RfYWxpdmUoc3RydWN0IGVmNF9uaWMgKmVmeCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9tZGlvXzEwZy5oLTEwNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vcXQyMDJ4X3BoeS5jPTQ4MT1jb25zdCBzdHJ1Y3QgZWY0X3BoeV9vcGVyYXRpb25zIGZhbGNvbl9xdDIwMnhfcGh5X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vcXQyMDJ4X3BoeS5jLTQ4OS1cXHQuc2V0X2xpbmtfa3NldHRpbmdzID0gZWY0X21kaW9fc2V0X2xpbmtfa3NldHRpbmdzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vcXQyMDJ4X3BoeS5jOjQ5MDpcXHQudGVzdF9hbGl2ZVxcdCA9IGVmNF9tZGlvX3Rlc3RfYWxpdmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9xdDIwMnhfcGh5LmMtNDkxLVxcdC5nZXRfbW9kdWxlX2VlcHJvbSA9IHF0MjAyeF9waHlfZ2V0X21vZHVsZV9lZXByb20sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3RlbnhwcmVzcy5jPTQ3OD1jb25zdCBzdHJ1Y3QgZWY0X3BoeV9vcGVyYXRpb25zIGZhbGNvbl9zZng3MTAxX3BoeV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3RlbnhwcmVzcy5jLTQ4Ny1cXHQuc2V0X25wYWdlX2FkdiAgICA9IHNmeDcxMDFfc2V0X25wYWdlX2FkdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3RlbnhwcmVzcy5jOjQ4ODpcXHQudGVzdF9hbGl2ZVxcdCAgPSBlZjRfbWRpb190ZXN0X2FsaXZlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vdGVueHByZXNzLmMtNDg5LVxcdC50ZXN0X25hbWVcXHQgID0gc2Z4NzEwMV90ZXN0X25hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3R4YzQzMTI4X3BoeS5jPTU0Nj1jb25zdCBzdHJ1Y3QgZWY0X3BoeV9vcGVyYXRpb25zIGZhbGNvbl90eGNfcGh5X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vdHhjNDMxMjhfcGh5LmMtNTU0LVxcdC5zZXRfbGlua19rc2V0dGluZ3MgPSBlZjRfbWRpb19zZXRfbGlua19rc2V0dGluZ3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi90eGM0MzEyOF9waHkuYzo1NTU6XFx0LnRlc3RfYWxpdmVcXHQ9IGVmNF9tZGlvX3Rlc3RfYWxpdmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi90eGM0MzEyOF9waHkuYy01NTYtXFx0LnJ1bl90ZXN0c1xcdD0gdHhjNDMxMjhfcnVuX3Rlc3RzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYz0zODE9aW50IHN0bW1hY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTQxNi1cXHQgKiBJdCBkb2Vzbid0IGNvbXBsZXRlIGl0cyByZXNldCB1bnRpbCBhdCBsZWFzdCBvbmUgY2xvY2sgY3ljbGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jOjQxNzpcXHQgKiBvbiBNREMsIHNvIHBlcmZvcm0gYSBkdW1teSBtZGlvIHJlYWQuIFRvIGJlIHVwZGF0ZWQgZm9yIEdNQUM0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy00MTgtXFx0ICogaWYgbmVlZGVkLlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvZGF2aW5jaV9tZGlvLmMtMjctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BpbmN0cmwvY29uc3VtZXIuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX21kaW8uYzoyODojaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby1iaXRiYW5nLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvZGF2aW5jaV9tZGlvLmMtMjktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c19zb2MuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05MD1jb25maWcgTURJT19HUElPXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctOTctXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjk4OlxcdCAgd2lsbCBiZSBjYWxsZWQgbWRpby1ncGlvLlxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy05OS1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX01ESU9fQkNNX1VOSU1BQylcXHRcXHQrPSBtZGlvLWJjbS11bmltYWMub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX01ESU9fQklUQkFORylcXHRcXHQrPSBtZGlvLWJpdGJhbmcub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtMTMtb2JqLSQoQ09ORklHX01ESU9fQ0FWSVVNKVxcdFxcdCs9IG1kaW8tY2F2aXVtLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19NRElPX0dQSU8pXFx0XFx0XFx0Kz0gbWRpby1ncGlvLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTE1LW9iai0kKENPTkZJR19NRElPX0hJU0lfRkVNQUMpXFx0XFx0Kz0gbWRpby1oaXNpLWZlbWFjLm9cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iaXRiYW5nLmMtMTctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJpdGJhbmcuYzoxODojaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby1iaXRiYW5nLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJpdGJhbmcuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jLTIxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jOjIyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLWJpdGJhbmcuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jLTIzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmM9MTU3PXN0YXRpYyBpbnQgbWRpb19ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jLTE3MS1cXHRpZiAocGRldi1cXHUwMDNlZGV2Lm9mX25vZGUpIHtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jOjE3MjpcXHRcXHRidXNfaWQgPSBvZl9hbGlhc19nZXRfaWQocGRldi1cXHUwMDNlZGV2Lm9mX25vZGUsIFxcXCJtZGlvLWdwaW9cXFwiKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jLTE3My1cXHRcXHRpZiAoYnVzX2lkIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYz0xOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWRpb19ncGlvX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYzoxOTg6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCIsIH0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0xOTktXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtaWNyb2NoaXAsbWRpby1zbWkwXFxcIiB9LFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYz0yMDQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWRpb19ncGlvX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmMtMjA3LVxcdC5kcml2ZXJcXHRcXHQ9IHtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jOjIwODpcXHRcXHQubmFtZVxcdD0gXFxcIm1kaW8tZ3Bpb1xcXCIsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0yMDktXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gbWRpb19ncGlvX29mX21hdGNoLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYz0yMTM9bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtZGlvX2dwaW9fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jLTIxNC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jOjIxNTpNT0RVTEVfQUxJQVMoXFxcInBsYXRmb3JtOm1kaW8tZ3Bpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmMtMjE2LU1PRFVMRV9BVVRIT1IoXFxcIkxhdXJlbnQgUGluY2hhcnQsIFBhdWxpdXMgWmFsZWNrYXNcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE5ODU9c3RhdGljIHZvaWQgcjgxNTJfbWRpb19zZXRfYml0KHN0cnVjdCByODE1MiAqdHAsIHUxNiBhZGRyLCB1MTYgc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTk5Mi1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxOTkzOnN0YXRpYyBpbnQgcjgxNTJfbWRpb190ZXN0X2FuZF9jbHJfYml0KHN0cnVjdCByODE1MiAqdHAsIHUxNiBhZGRyLCB1MTYgY2xlYXIpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTk5NC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz03MjEyPXN0YXRpYyB2b2lkIHI4MTUyYl9pbml0KHN0cnVjdCByODE1MiAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy03MjE4LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjcyMTk6XFx0cjgxNTJfbWRpb190ZXN0X2FuZF9jbHJfYml0KHRwLCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzIyMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTcyNDY9c3RhdGljIHZvaWQgcjgxNTNfaW5pdChzdHJ1Y3QgcjgxNTIgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzI3MS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo3MjcyOlxcdHI4MTUyX21kaW9fdGVzdF9hbmRfY2xyX2JpdCh0cCwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTcyNzMtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz03MzYzPXN0YXRpYyB2b2lkIHI4MTUzYl9pbml0KHN0cnVjdCByODE1MiAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy03MzgzLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjczODQ6XFx0cjgxNTJfbWRpb190ZXN0X2FuZF9jbHJfYml0KHRwLCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzM4NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTc0MzM9c3RhdGljIHZvaWQgcjgxNTNjX2luaXQoc3RydWN0IHI4MTUyICp0cClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTc0NjAtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NzQ2MTpcXHRyODE1Ml9tZGlvX3Rlc3RfYW5kX2Nscl9iaXQodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy03NDYyLVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NzcxNj1zdGF0aWMgdm9pZCByODE1NmJfaHdfcGh5X2NmZyhzdHJ1Y3QgcjgxNTIgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzc1NC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo3NzU1OlxcdHI4MTUyX21kaW9fdGVzdF9hbmRfY2xyX2JpdCh0cCwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTc3NTYtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz03OTc1PXN0YXRpYyB2b2lkIHI4MTU3X2h3X3BoeV9jZmcoc3RydWN0IHI4MTUyICp0cClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTc5OTYtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6Nzk5NzpcXHRyODE1Ml9tZGlvX3Rlc3RfYW5kX2Nscl9iaXQodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy03OTk4LVxcbi0tXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1MDE4LmM9Njc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNtX3Bpbmdyb3VwIGlwcTUwMThfZ3JvdXBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTUwMTguYy03MTUtXFx0UElOR1JPVVAoMzYsIG1kYywgcWRzc190cmFjZWRhdGFfYiwgXywgd3NpX2NsazMsIF8sIF8sIF8sIF8sIF8pLFxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxNTAxOC5jOjcxNjpcXHRQSU5HUk9VUCgzNywgbWRpbywgYXRlc3RfY2hhciwgcWRzc190cmFjZWRhdGFfYiwgXywgd3NpX2RhdGEzLCBfLCBfLCBfLCBfKSxcXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTUwMTguYy03MTctXFx0UElOR1JPVVAoMzgsIHFkc3NfdHJhY2VkYXRhX2IsIF8sIF8sIF8sIF8sIF8sIF8sIF8sIF8pLFxcbi0tXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1NDI0LmM9NzEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNtX3Bpbmdyb3VwIGlwcTU0MjRfZ3JvdXBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTU0MjQuYy03MzQtXFx0UElOR1JPVVAoMjAsIG1kY19zbHYsIGF0ZXN0X2NoYXIwLCBfLCBxZHNzX3RyYWNlZGF0YV9hLCBfLCBfLCBfLCBfLCBfKSxcXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTU0MjQuYzo3MzU6XFx0UElOR1JPVVAoMjEsIG1kaW9fc2x2LCBhdGVzdF9jaGFyMSwgXywgcWRzc190cmFjZWRhdGFfYSwgXywgXywgXywgXywgXyksXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1NDI0LmMtNzM2LVxcdFBJTkdST1VQKDIyLCBtZGNfbXN0LCBhdGVzdF9jaGFyMiwgXywgXywgXywgXywgXywgXywgXyksXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1NDI0LmM6NzM3OlxcdFBJTkdST1VQKDIzLCBtZGlvX21zdCwgYXRlc3RfY2hhcjMsIF8sIF8sIF8sIF8sIF8sIF8sIF8pLFxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxNTQyNC5jLTczOC1cXHRQSU5HUk9VUCgyNCwgcGNpZTBfY2xrLCBQVEExMCwgbWFjMCwgXywgd3NpX2NsaywgXywgYXRlc3RfY2hhciwgcWRzc19jdGlfdHJpZ19vdXRfYTAsIF8pLFxcbi0tXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE5NjUwLmM9NjY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNtX3Bpbmdyb3VwIGlwcTk2NTBfZ3JvdXBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTk2NTAuYy02ODUtXFx0WzIwXSA9IFBJTkdST1VQKDIwLCBtZGNfc2x2MCwgcXVwX3NlMywgXywgcWRzc190cmFjZWRhdGFfYSwgXywgXywgXywgXywgXyksXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE5NjUwLmM6Njg2OlxcdFsyMV0gPSBQSU5HUk9VUCgyMSwgbWRpb19zbHYwLCBxdXBfc2UzLCBhdGVzdF9jaGFyX3N0YXJ0LCBfLCBxZHNzX3RyYWNlZGF0YV9hLCBfLCBfLCBfLCBfKSxcXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTk2NTAuYy02ODctXFx0WzIyXSA9IFBJTkdST1VQKDIyLCBtZGNfbXN0LCBhdGVzdF9jaGFyX3N0YXR1czIsIF8sIF8sIF8sIF8sIF8sIF8sIF8pLFxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxOTY1MC5jOjY4ODpcXHRbMjNdID0gUElOR1JPVVAoMjMsIG1kaW9fbXN0LCBhdGVzdF9jaGFyX3N0YXR1czMsIF8sIF8sIF8sIF8sIF8sIF8sIF8pLFxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxOTY1MC5jLTY4OS1cXHRbMjRdID0gUElOR1JPVVAoMjQsIHBjaWUwX2Nsa19yZXFfbiwgXywgXywgXywgXywgXywgXywgXywgXyksXFxuLS1cXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1kbTk2MDcuYz05Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBtc21fcGluZ3JvdXAgbWRtOTYwN19ncm91cHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtbWRtOTYwNy5jLTk1OS1cXHRcXHQgXywgXyksXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tZG05NjA3LmM6OTYwOlxcdFBJTkdST1VQKDI3LCB1aW0yX2RhdGEsIGdtYWNfbWRpbywgZ2NjX2dwMV9jbGtfYSwgXywgXywgYXRlc3RfY29tYm9kYWNfdG9fZ3Bpb19uYXRpdmUsIF8sIF8sXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tZG05NjA3LmMtOTYxLVxcdFxcdCBfKSxcXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1kbTk2MDcuYzo5NjI6XFx0UElOR1JPVVAoMjgsIHVpbTJfY2xrLCBnbWFjX21kaW8sIGdjY19ncDJfY2xrX2EsIF8sIF8sIGF0ZXN0X2NvbWJvZGFjX3RvX2dwaW9fbmF0aXZlLCBfLCBfLFxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtbWRtOTYwNy5jLTk2My1cXHRcXHQgXyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjU2Ljg2NDk2NTc3MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDg1Nzk5MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgdGhlIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AgZmlsZSwgd2hpY2ggaXMgdGhlIGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIGFuZCBBTjg4MTFIQiBFdGhlcm5ldCBQSFkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsaWtlIG1hbnkgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXJzLCB0aGlzIGlzIGdvaW5nIHRvIGJlIHByb2JsZW1hdGljIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlxuXG5UaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHRoaXMgZHJpdmVyLCBsaWtlIG1vc3Qgb2YgaXRzIGtpbmQsIGFic29sdXRlbHkgKmRlbWFuZHMqIHRoZSBwcmVzZW5jZSBvZiBwaHlzaWNhbCBoYXJkd2FyZSDigJMgc3BlY2lmaWNhbGx5LCBhbiBFTjg4MTFIIFBIWSBjb25uZWN0ZWQgdG8gYW4gTURJTyBidXMuIFdpdGhvdXQgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZSwgdGhlIHByb2JlIGFuZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgc2ltcGx5IGNhbm5vdCBleGVjdXRlLiBUaGUgY29kZSBwYXRocyB3aXRoaW4gYGFpcl9lbjg4MTFoLmNgIGFyZSBpbmhlcmVudGx5IHRpZWQgdG8gdGhlIHBoeXNpY2FsIGxheWVyLiBUaGlzIHJ1bGVzIG91dCBjb21tb24gdmlydHVhbGl6ZWQgc2V0dXBzLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGNvbnNpZGVyaW5nIGFsbCBvZiB0aGlzLCB0aGUgZmluYWwgdmVyZGljdCBpczpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBGYWxzZS4gVGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBFbXB0eS4gTm8gc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSB3b3J0aCB0YXJnZXRpbmcgYmVjYXVzZSBvZiB0aGUgZW52aXJvbm1lbnQgZGVwZW5kZW5jeS5cbiogICBgRW5hYmxlQ29uZmlnc2A6IEVtcHR5LiBObyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGNoYW5nZSB0aGlzIGZ1bmRhbWVudGFsIGhhcmR3YXJlIGRlcGVuZGVuY3kuXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBhbiBFdGhlcm5ldCBQSFkgZHJpdmVyIChhaXJfZW44ODExaC5jKSB0aGF0IHJlbGllcyBvbiBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQWlyb2hhIEVOODgxMUgvQU44ODExSEIpIGNvbm5lY3RlZCB0byBhbiBNRElPIGJ1cy4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cblxuSSd2ZSBkb3VibGUtY2hlY2tlZCBteSBhc3N1bXB0aW9ucywgYW5kIEknbSBjb25maWRlbnQgaW4gdGhlc2UgY29uY2x1c2lvbnMuIFRpbWUgdG8gY2FsbCBpdCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU3OTUsIk91dHB1dFRva2VucyI6MTE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjEwOjAxLjk1MDc2ODI3OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU44ODExSCBFdGhlcm5ldCBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYykgdG8gYWRkIGEgZmlybXdhcmUgc2l6ZSBhbGlnbm1lbnQgY2hlY2suIEV0aGVybmV0IFBIWSBoYXJkd2FyZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgUEhZIGhhcmR3YXJlIGNvbm5lY3RlZCB2aWEgTURJTywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSkuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIEVOODgxMUggRXRoZXJuZXQgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMpIHRvIGFkZCBhIGZpcm13YXJlIHNpemUgYWxpZ25tZW50IGNoZWNrLiBFdGhlcm5ldCBQSFkgaGFyZHdhcmUgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIFBIWSBoYXJkd2FyZSBjb25uZWN0ZWQgdmlhIE1ESU8sIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSBvciBHQ0UpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MTA6MDEuOTUwODA0NjI5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd45sf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 21:32:59 +0000 UTC FinishedAt: 2026-09-02 22:10:03 +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+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjg4MTFIIEV0aGVybmV0IFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jKSB0byBhZGQgYSBmaXJtd2FyZSBzaXplIGFsaWdubWVudCBjaGVjay4gRXRoZXJuZXQgUEhZIGhhcmR3YXJlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgaGFyZHdhcmUgY29ubmVjdGVkIHZpYSBNRElPLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyMGNjOTQ4ZTJiNGIyZjZmMTE5MTc2Y2ZhMDY5ZWFiZTQwZTc0ZmMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMjowODo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG5pbmRleCAwZWViN2I5YTRlMjYwLi4zNGQyNzI3ZTgyMjJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG5AQCAtMzEyLDYgJiM0MzszMTIsMTIgQEAgc3RhdGljIGludCBhaXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxuIFx0aW50IHNhdmVkX3BhZ2U7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiYjNDM7XHRpZiAoZnctXHUwMDNlc2l6ZSAlIDQpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBmdy1cdTAwM2VzaXplKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuIFxuIFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjg4MTFIIEV0aGVybmV0IFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jKSB0byBhZGQgYSBmaXJtd2FyZSBzaXplIGFsaWdubWVudCBjaGVjay4gRXRoZXJuZXQgUEhZIGhhcmR3YXJlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgaGFyZHdhcmUgY29ubmVjdGVkIHZpYSBNRElPLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMGNjOTQ4ZTJiNGIyZjZmMTE5MTc2Y2ZhMDY5ZWFiZTQwZTc0ZmMzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAyMjowODo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKaW5kZXggMGVlYjdiOWE0ZTI2MC4uMzRkMjcyN2U4MjIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKQEAgLTMxMiw2ICYjNDM7MzEyLDEyIEBAIHN0YXRpYyBpbnQgYWlyX3dyaXRlX2J1ZihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgYWRkcmVzcywKIAlpbnQgc2F2ZWRfcGFnZTsKIAlpbnQgcmV0ID0gMDsKIAomIzQzOwlpZiAoZnctJmd0O3NpemUgJSA0KSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XG4mIzM0OywKJiM0MzsJCQkgICBmdy0mZ3Q7c2l6ZSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwogCXNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7CiAKIAlpZiAoc2F2ZWRfcGFnZSAmZ3Q7PSAwKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZXZpZXdpbmcgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIHRha2UgYSBsb29rIGF0IGEgcGF0Y2ggdGhhdCBpbXBhY3RzIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgbmV0d29yayBQSFkgZHJpdmVyIGZvciB0aGUgQWlyLUVOODgxMUguIEJlZm9yZSBJIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2VzIHRoZW1zZWx2ZXMsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0LgoKTXkgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSB0byBhY3R1YWxseSBvcGVuIGFuZCByZXZpZXcgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCBkaXJlY3RseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEFmdGVyIHRoYXQsIEkgd2lsbCBhbHNvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYW5kIGRldGVybWluZSBleGFjdGx5IHdoZXJlIGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgYmVpbmcgdXNlZC4gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyAKClRvIGFjaGlldmUgdGhpcywgSSYjMzk7bGwgbGlrZWx5IHVzZSBhIHRvb2wgbGlrZSBgcmVhZC1maWxlYCwgb3IgbWF5YmUgYGdyZXBwZXJgIGlmIEkmIzM5O20gbG9va2luZyBmb3Igc3BlY2lmaWMgc3RyaW5ncyBvciB1c2FnZXMuIEkgbmVlZCBhIHNvbGlkIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgY2FuIGFzc2VzcyB0aGUgaW1wYWN0IGFuZCBjb3JyZWN0bmVzcyBvZiB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjkwOlx0XHRcdFx0ICBsb3dlcl8xNl9iaXRzKGFkZHJlc3MpKTtcbiAyOTE6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMjkyOlx0XHRcdHJldHVybiByZXQ7XG4gMjkzOlx0XG4gMjk0Olx0XHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcdTAwM2MgZnctXHUwMDNlc2l6ZTsgb2Zmc2V0ICYjNDM7PSA0KSB7XG4gMjk1Olx0XHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZmdy1cdTAwM2VkYXRhW29mZnNldCAmIzQzOyAyXSk7XG4gMjk2Olx0XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCwgdmFsKTtcbiAyOTc6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyOTg6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDI5OTpcdFxuIDMwMDpcdFx0XHR2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMTYoXHUwMDI2ZnctXHUwMDNlZGF0YVtvZmZzZXRdKTtcbiAzMDE6XHRcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csIHZhbCk7XG4gMzAyOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMzAzOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAzMDQ6XHRcdH1cbiAzMDU6XHRcbiAzMDY6XHRcdHJldHVybiAwO1xuIDMwNzpcdH1cbiAzMDg6XHRcbiAzMDk6XHRzdGF0aWMgaW50IGFpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXG4gMzEwOlx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gMzExOlx0e1xuIDMxMjpcdFx0aW50IHNhdmVkX3BhZ2U7XG4gMzEzOlx0XHRpbnQgcmV0ID0gMDtcbiAzMTQ6XHRcbiAzMTU6XHRcdGlmIChmdy1cdTAwM2VzaXplICUgNCkge1xuIDMxNjpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7ZmlybXdhcmUgc2l6ZSAlenUgaXMgbm90IGEgbXVsdGlwbGUgb2YgNFxcblwmIzM0OyxcbiAzMTc6XHRcdFx0XHQgICBmdy1cdTAwM2VzaXplKTtcbiAzMTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzE5Olx0XHR9XG4gMzIwOlx0XG4gMzIxOlx0XHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuIDMyMjpcdFxuIDMyMzpcdFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4gMzI0Olx0XHRcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihwaHlkZXYsIGFkZHJlc3MsIGZ3KTtcbiAzMjU6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAzMjY6XHRcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7JXMgMHglMDh4IGZhaWxlZDogJWRcXG5cJiMzNDssIF9fZnVuY19fLFxuIDMyNzpcdFx0XHRcdFx0ICAgYWRkcmVzcywgcmV0KTtcbiAzMjg6XHRcdH1cbiAzMjk6XHRcbiAzMzA6XHRcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgc2F2ZWRfcGFnZSwgcmV0KTtcbiAzMzE6XHR9XG4gMzMyOlx0XG4gMzMzOlx0c3RhdGljIGludCBlbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gMzM0Olx0e1xuIDMzNTpcdFx0aW50IHJldCwgcmVnX3ZhbHVlO1xuIDMzNjpcdFxuIDMzNzpcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbiAzMzg6XHRcdFx0XHRcdFx0IEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSCk7XG4gMzM5Olx0XHRpZiAocmV0KVxuIDM0MDpcdFx0XHRyZXR1cm4gcmV0O1xuIDM0MTpcdFxuIDM0MjpcdFx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovXG4gMzQzOlx0XHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsXG4gMzQ0Olx0XHRcdFx0XHRcdEVOODgxMUhfUEhZX0ZXX1NUQVRVUywgcmVnX3ZhbHVlLFxuIDM0NTpcdFx0XHRcdFx0XHRyZWdfdmFsdWUgPT0gRU44ODExSF9QSFlfUkVBRFksXG4gMzQ2Olx0XHRcdFx0XHRcdDIwMDAwLCA3NTAwMDAwLCB0cnVlKTtcbiAzNDc6XHRcdGlmIChyZXQpIHtcbiAzNDg6XHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O01DVSBub3QgcmVhZHk6IDB4JXhcXG5cJiMzNDssIHJlZ192YWx1ZSk7XG4gMzQ5Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDM1MDpcdFx0fVxuIDM1MTpcdFxuIDM1MjpcdFx0cmV0dXJuIDA7XG4gMzUzOlx0fVxuIDM1NDpcdFxuIDM1NTpcdHN0YXRpYyBpbnQgYW44ODExaGJfY2hlY2tfY3JjKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBzZXQxLFxuIDM1NjpcdFx0XHRcdCAgICAgIHUzMiBtb24yLCB1MzIgbW9uMylcbiAzNTc6XHR7XG4gMzU4Olx0XHR1MzIgcGJ1c192YWx1ZTtcbiAzNTk6XHRcdGludCByZXRyeSA9IDI1O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBBaXJvaGEgRU44ODExSCBFdGhlcm5ldCBQSFkgRHJpdmVyKioKCkFscmlnaHQsIEkmIzM5O3ZlIGdvdCBgYWlyX2VuODgxMWguY2AgaGVyZSwgdGhlIEFpcm9oYSBFTjg4MTFIIDIuNUcgRXRoZXJuZXQgUEhZIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCB0aGUgd2F5IGl0JiMzOTtzIGJyb3VnaHQgaW50byB0aGUgc3lzdGVtLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBLY29uZmlnIGVudHJ5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRyaXZlci4gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyB3aWxsIHJldmVhbCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXNwZWN0cyDigJMgZG9lcyBpdCBuZWVkIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgb3IgY2FuIGl0IGJlIGJ1aWx0IGFzIGEgbW9kdWxlIG1vcmUgZ2VuZXJhbGx5PyBUaGlzIHByb2JlIHByb2Nlc3MgaXMga2V5LiBEb2VzIGl0IGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZSBQSFksIG9yIGRvZXMgaXQgcmVxdWlyZSBzb21lIGtpbmQgb2YgdXNlci1kZWZpbmVkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIGhhcmR3YXJlPyBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgS2NvbmZpZyBicmVhZGNydW1icyB0byBlc3RhYmxpc2ggaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBSVJfRU44ODExSHxhaXJfZW44ODExaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZz05Mz1jb25maWcgQUlSX0FOODgwMV9QSFlcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy05OC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjk5OmNvbmZpZyBBSVJfRU44ODExSF9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwMC1cdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBFTjg4MTFIIDIuNSBHaWdhYml0IFBIWVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfQUlSX0FOODgwMV9QSFkpXHQmIzQzOz0gYWlyX2FuODgwMS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0FJUl9FTjg4MTFIX1BIWSkgICAmIzQzOz0gYWlyX2VuODgxMWgub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTM1LW9iai0kKENPTkZJR19BSVJfTkVUX1BIWUxJQilcdCYjNDM7PSBhaXJfcGh5X2xpYi5vXG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0zMjQtLyogTEVEIGJhc2ljIGNvbnRyb2wgcmVnaXN0ZXIsIHBhcnQgb2YgdGhlIHNhbWUgTEVEIGJsb2NrIGFzIHRoZSBMRUQwL0xFRDFcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM6MzI1OiAqIGNvbnRyb2wgcmVnaXN0ZXJzIGFib3ZlLiBUaGUgYWlyX2VuODgxMWggZHJpdmVyIGRlc2NyaWJlcyB0aGUgc2FtZVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0zMjYtICogcmVnaXN0ZXIgYXMgQUlSX1BIWV9MRURfQkNSLlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM9MTQ4Mj1zdGF0aWMgaW50IGVuNzUyOF9waHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTE0ODYtXHQgKiBwcm9ncmFtbWVkIGludG8gdGhlIExFRCBjb250cm9sIHJlZ2lzdGVycy4gSGFuZCB0aGUgcGlucyBvdmVyIHRvXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jOjE0ODc6XHQgKiB0aGUgTEVEIGNvbnRyb2wgcmVnaXN0ZXJzIHRoZSBzYW1lIHdheSB0aGUgYWlyX2VuODgxMWggZHJpdmVyXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTE0ODgtXHQgKiBkb2VzOyB0aGUgbW9kZSBmaWVsZCBvZiB0aGlzIHJlZ2lzdGVyIGlzIGFscmVhZHkgc2V0IG91dCBvZiByZXNldC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDE4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBhaXJfZW44ODExaC5jYCBQSFkgRHJpdmVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGVudGlyZSBgYWlyX2VuODgxMWguY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyZSBhbmQgZmxvdyBvZiB0aGlzIFBIWSBkcml2ZXIuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IGV4YWN0bHkgd2hhdCBtZWNoYW5pc21zIGtpY2sgb2ZmIHRoZSBgYWlyX3dyaXRlX2J1ZmAgZnVuY3Rpb24uIEkmIzM5O20gbm90IGp1c3QgaW50ZXJlc3RlZCBpbiAqd2hlcmUqIGl0JiMzOTtzIGNhbGxlZCwgYnV0IHRoZSAqd2h5KiAtIHRoZSB1bmRlcmx5aW5nIGNvbmRpdGlvbnMgYW5kIGV2ZW50cyB0aGF0IHRyaWdnZXIgaXRzIGV4ZWN1dGlvbi4gSSB3YW50IHRvIGJ1aWxkIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIHRoZSBkcml2ZXImIzM5O3Mgb3BlcmF0aW9uLCBzbyBJIGNhbiBwcmVkaWN0IGl0cyBiZWhhdmlvciBhbmQgcGlucG9pbnQgcG90ZW50aWFsIGlzc3Vlcy4gVGhpcyBtZWFucyBtYXBwaW5nIG91dCB0aGUgY29udHJvbCBmbG93LCBpZGVudGlmeWluZyBrZXkgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGludGVycnVwdCBoYW5kbGVycywgdGFza2xldHMsIERNQSBvcGVyYXRpb25zLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IG1lY2hhbmlzbXMgdGhhdCBjb3VsZCBsZWFkIHRvIGEgY2FsbCB0byBgYWlyX3dyaXRlX2J1ZmAuIFRoZSBnb2FsIGlzIGEgaG9saXN0aWMgdW5kZXJzdGFuZGluZywgbm90IGp1c3QgYSBzdXJmYWNlLWxldmVsIHNjYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyX3dyaXRlX2J1ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTI0OD1zdGF0aWMgaW50IF9fYWlyX3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldixcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNzItXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNzM6c3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNzQtXHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0zMDgtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzozMDk6c3RhdGljIGludCBhaXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzEwLVx0XHRcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTMyMy1cdGlmIChzYXZlZF9wYWdlIFx1MDAzZT0gMCkge1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MzI0Olx0XHRyZXQgPSBfX2Fpcl93cml0ZV9idWYocGh5ZGV2LCBhZGRyZXNzLCBmdyk7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0zMjUtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9NDAzPXN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maWxlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDEzLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NDE0Olx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIGFkZHJlc3MsICBmdyk7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00MTUtXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz01MDg9c3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzItXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MzM6XHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgQUlSX0ZXX0FERFJfRE0sICBmdzEpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTM0LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzYtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1Mzc6XHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgQUlSX0ZXX0FERFJfRFNQLCBmdzIpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTM4LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDgyCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGUgY29kZSwgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uLCBhbmQgdGFpbG9yZWQgZm9yIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYGFpcl9lbjg4MTFoLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBhaXJfZW44ODExaC5jYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3BoeWAgZGlyZWN0b3J5LiBJJiMzOTttIGFscmVhZHkgZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBQSFkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIGFuIEFpciBFdGhlcm5ldCBFTjg4MTFILiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGtleSBhcmVhcy4gRmlyc3QsIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoZSBzdGFuZGFyZCBQSFkgZHJpdmVyIHN0cnVjdHVyZTogaW5pdGlhbGl6YXRpb24gcm91dGluZXMgKGBhaXJfZW44ODExaF9wcm9iZWAsIGBhaXJfZW44ODExaF9jb25maWdfaW5pdGApLCBjb25maWd1cmF0aW9uL2xpbmsgbWFuYWdlbWVudCBmdW5jdGlvbnMgKGBhaXJfZW44ODExaF9jb25maWdgLCBgYWlyX2VuODgxMWhfbGlua191cGAsIGBhaXJfZW44ODExaF9saW5rX2Rvd25gKSwgYW5kIHBvdGVudGlhbGx5IGludGVycnVwdCBoYW5kbGVycyBpZiBpdCYjMzk7cyBnb3QgYSBmYW5jeSBpbnRlcnJ1cHQtZHJpdmVuIGxpbmsgc3RhdHVzIGNoYW5nZSBzeXN0ZW0uCgpJJiMzOTtsbCBiZSB6ZXJvaW5nIGluIG9uIHRoZSByZWdpc3RlciBhY2Nlc3MgbWV0aG9kcyB1c2VkLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHVzaW5nIGEgc3RhbmRhcmQgTURJTyBpbnRlcmZhY2Ugb3Igc29tZXRoaW5nIHByb3ByaWV0YXJ5LiBBbmQsIEkmIzM5O2xsIGJlIG1ha2luZyBub3RlIG9mIHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyB0aGF0IGFyZSB1bmlxdWUgdG8gdGhpcyBzcGVjaWZpYyBQSFkuIEFueSB2ZW5kb3Itc3BlY2lmaWMgcXVpcmtzPyBBcmUgdGhleSBpbXBsZW1lbnRpbmcgYW55IGF1dG8tbmVnb3RpYXRpb24gb3ZlcnJpZGVzIG9yIGN1c3RvbSBwb3dlci1zYXZpbmcgbW9kZXM/IEFsc28sIEkgYW0gZXhwZWN0aW5nIHNvbWUgc29ydCBvZiBzdXBwb3J0IGZvciBkaWZmZXJlbnQgTUlJIG1vZGVzLgoKTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBhcmUgZ29vZCwgYmVjYXVzZSBJJiMzOTttIGhvcGluZyBJIGRvbiYjMzk7dCBoYXZlIHRvIHNwZW5kIGEgbG90IG9mIHRpbWUgcmV2ZXJzZSBlbmdpbmVlcmluZyB0aGUgcmVnaXN0ZXIgZGVzY3JpcHRpb25zLiBUaGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZHJpdmVyIHdvcmtzIGlzIHRocm91Z2ggYSBsb29rIGludG8gdGhlIGRldmljZSYjMzk7cyBkYXRhc2hlZXQuIEkgc2hvdWxkIGdyYWIgdGhhdCBkYXRhc2hlZXQgZm9yIHRoaXMgZGV2aWNlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgbGluayBwYXJ0bmVyJiMzOTtzIGRldGVjdGlvbiBhbmQgYXV0by1uZWdvdGlhdGlvbiBoYW5kbGluZyDigJMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJJiMzOTtsbCBhbHNvIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGVycm9yIGhhbmRsaW5nIG9yIHJldHJ5IGxvZ2ljOyByb2J1c3RuZXNzIGlzIGtleSBpbiBuZXR3b3JrIGRyaXZlcnMuIExldCYjMzk7cyBzZWUgaG93IHdlbGwgaXQmIzM5O3MgYmVlbiBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTAwOlx0XHRcdFx0XHQgQU44ODExSEJfQ1JDX1BNX01PTjIsXG4gNTAxOlx0XHRcdFx0XHQgQU44ODExSEJfQ1JDX1BNX01PTjMpO1xuIDUwMjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA1MDM6XHRcdFx0cmV0dXJuIHJldDtcbiA1MDQ6XHRcbiA1MDU6XHRcdHJldHVybiBlbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHBoeWRldik7XG4gNTA2Olx0fVxuIDUwNzpcdFxuIDUwODpcdHN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gNTA5Olx0e1xuIDUxMDpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuIDUxMTpcdFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XG4gNTEyOlx0XHRpbnQgcmV0O1xuIDUxMzpcdFxuIDUxNDpcdFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4gNTE1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDUxNjpcdFx0XHRyZXR1cm4gcmV0O1xuIDUxNzpcdFxuIDUxODpcdFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xuIDUxOTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA1MjA6XHRcdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTtcbiA1MjE6XHRcbiA1MjI6XHRcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXG4gNTIzOlx0XHRcdFx0XHRcdCBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCk7XG4gNTI0Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDUyNTpcdFx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4gNTI2Olx0XG4gNTI3Olx0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbiA1Mjg6XHRcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLFxuIDUyOTpcdFx0XHRcdFx0XHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcpO1xuIDUzMDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA1MzE6XHRcdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xuIDUzMjpcdFxuIDUzMzpcdFx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RNLCAgZncxKTtcbiA1MzQ6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNTM1Olx0XHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbiA1MzY6XHRcbiA1Mzc6XHRcdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3Mik7XG4gNTM4Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDUzOTpcdFx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4gNTQwOlx0XG4gNTQxOlx0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbiA1NDI6XHRcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCAwKTtcbiA1NDM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNTQ0Olx0XHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbiA1NDU6XHRcbiA1NDY6XHRcdHJldCA9IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkocGh5ZGV2KTtcbiA1NDc6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNTQ4Olx0XHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbiA1NDk6XHRcbiA1NTA6XHRcdGVuODgxMWhfcHJpbnRfZndfdmVyc2lvbihwaHlkZXYpO1xuIDU1MTpcdFxuIDU1MjpcdGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XG4gNTUzOlx0XHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XG4gNTU0Olx0XG4gNTU1Olx0ZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE6XG4gNTU2Olx0XHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XG4gNTU3Olx0XG4gNTU4Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDU1OTpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7TG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDU2MDpcdFxuIDU2MTpcdFx0cmV0dXJuIHJldDtcbiA1NjI6XHR9XG4gNTYzOlx0XG4gNTY0Olx0c3RhdGljIGludCBlbjg4MTFoX3Jlc3RhcnRfbWN1KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gNTY1Olx0e1xuIDU2NjpcdFx0aW50IHJldDtcbiA1Njc6XHRcbiA1Njg6XHRcdGlmIChwaHlfaWRfY29tcGFyZV9tb2RlbChwaHlkZXYtXHUwMDNlcGh5X2lkLCBBTjg4MTFIQl9QSFlfSUQpKSB7XG4gNTY5Olx0XHRcdHJldCA9IGFuODgxMWhiX21jdV9hc3NlcnQocGh5ZGV2KTtcbiA1NzA6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA1NzE6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDU3MjpcdFxuIDU3MzpcdFx0XHRyZXQgPSBhbjg4MTFoYl9tY3VfZGVhc3NlcnQocGh5ZGV2KTtcbiA1NzQ6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA1NzU6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDU3NjpcdFx0fVxuIDU3NzpcdFxuIDU3ODpcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbiA1Nzk6XHRcdFx0XHRcdFx0IEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUKTtcbiA1ODA6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNTgxOlx0XHRcdHJldHVybiByZXQ7XG4gNTgyOlx0XG4gNTgzOlx0XHRyZXR1cm4gZW44ODExaF93YWl0X21jdV9yZWFkeShwaHlkZXYpO1xuIDU4NDpcdH1cbiA1ODU6XHRcbiA1ODY6XHRzdGF0aWMgaW50IGFpcl9od19sZWRfb25fc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LCBib29sIG9uKVxuIDU4NzpcdHtcbiA1ODg6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiA1ODk6XHRcdGJvb2wgY2hhbmdlZDtcbiA1OTA6XHRcbiA1OTE6XHRcdGlmIChpbmRleCBcdTAwM2U9IEVOODgxMUhfTEVEX0NPVU5UKVxuIDU5MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1OTM6XHRcbiA1OTQ6XHRcdGlmIChvbilcbiA1OTU6XHRcdFx0Y2hhbmdlZCA9ICF0ZXN0X2FuZF9zZXRfYml0KEFJUl9QSFlfTEVEX1NUQVRFX0ZPUkNFX09OLFxuIDU5NjpcdFx0XHRcdFx0XHQgICAgXHUwMDI2cHJpdi1cdTAwM2VsZWRbaW5kZXhdLnN0YXRlKTtcbiA1OTc6XHRcdGVsc2VcbiA1OTg6XHRcdFx0Y2hhbmdlZCA9ICEhdGVzdF9hbmRfY2xlYXJfYml0KEFJUl9QSFlfTEVEX1NUQVRFX0ZPUkNFX09OLFxuIDU5OTpcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2cHJpdi1cdTAwM2VsZWRbaW5kZXhdLnN0YXRlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3NQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgUEhZIGRldmljZSByZWdpc3RyYXRpb24gYW5kIHByb2JpbmcgcHJvY2VzcyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBkcml2ZXIuIEtub3dpbmcgaG93IGl0JiMzOTtzIGhhbmRsZWQgaW4gdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGV2aWNlJiMzOTtzIGxpZmVjeWNsZS4gSSBleHBlY3QgdG8gZmluZCB0aGUgc3RhbmRhcmQgUEhZIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMsIGxpa2VseSBhIGBwaHlfZHJpdmVyYCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgYW5kIHRoZSBwcm9iZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgaW5pdGlhbCBjb25maWd1cmF0aW9uIGFuZCBsaW5rIGVzdGFibGlzaG1lbnQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzOyBob3cgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGludGVycnVwdHMsIHJlc2V0IHNlcXVlbmNlcywgYW5kIGFueSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGlzIHNwZWNpZmljIGRyaXZlciByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0XG4gNjAxOlx0XHRjaGFuZ2VkIHw9IChwcml2LVx1MDAzZWxlZFtpbmRleF0ucnVsZXMgIT0gMCk7XG4gNjAyOlx0XG4gNjAzOlx0XHQvKiBjbGVhciBuZXRkZXYgdHJpZ2dlciBydWxlcyBpbiBjYXNlIExFRF9PRkYgaGFzIGJlZW4gc2V0ICovXG4gNjA0Olx0XHRpZiAoIW9uKVxuIDYwNTpcdFx0XHRwcml2LVx1MDAzZWxlZFtpbmRleF0ucnVsZXMgPSAwO1xuIDYwNjpcdFxuIDYwNzpcdFx0aWYgKGNoYW5nZWQpXG4gNjA4Olx0XHRcdHJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxuIDYwOTpcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9MRURfT04oaW5kZXgpLFxuIDYxMDpcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9MRURfT05fTUFTSyxcbiA2MTE6XHRcdFx0XHRcdCAgICAgIG9uID8gQUlSX1BIWV9MRURfT05fRk9SQ0VfT04gOiAwKTtcbiA2MTI6XHRcbiA2MTM6XHRcdHJldHVybiAwO1xuIDYxNDpcdH1cbiA2MTU6XHRcbiA2MTY6XHRzdGF0aWMgaW50IGFpcl9od19sZWRfYmxpbmtfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuIDYxNzpcdFx0XHRcdFx0Ym9vbCBibGlua2luZylcbiA2MTg6XHR7XG4gNjE5Olx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4gNjIwOlx0XHRib29sIGNoYW5nZWQ7XG4gNjIxOlx0XG4gNjIyOlx0XHRpZiAoaW5kZXggXHUwMDNlPSBFTjg4MTFIX0xFRF9DT1VOVClcbiA2MjM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjI0Olx0XG4gNjI1Olx0XHRpZiAoYmxpbmtpbmcpXG4gNjI2Olx0XHRcdGNoYW5nZWQgPSAhdGVzdF9hbmRfc2V0X2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9CTElOSyxcbiA2Mjc6XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnByaXYtXHUwMDNlbGVkW2luZGV4XS5zdGF0ZSk7XG4gNjI4Olx0XHRlbHNlXG4gNjI5Olx0XHRcdGNoYW5nZWQgPSAhIXRlc3RfYW5kX2NsZWFyX2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9CTElOSyxcbiA2MzA6XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnByaXYtXHUwMDNlbGVkW2luZGV4XS5zdGF0ZSk7XG4gNjMxOlx0XG4gNjMyOlx0XHRjaGFuZ2VkIHw9IChwcml2LVx1MDAzZWxlZFtpbmRleF0ucnVsZXMgIT0gMCk7XG4gNjMzOlx0XG4gNjM0Olx0XHRpZiAoY2hhbmdlZClcbiA2MzU6XHRcdFx0cmV0dXJuIHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbiA2MzY6XHRcdFx0XHRcdCAgICAgQUlSX1BIWV9MRURfQkxJTksoaW5kZXgpLFxuIDYzNzpcdFx0XHRcdFx0ICAgICBibGlua2luZyA/XG4gNjM4Olx0XHRcdFx0XHQgICAgIEFJUl9QSFlfTEVEX0JMSU5LX0ZPUkNFX0JMSU5LIDogMCk7XG4gNjM5Olx0XHRlbHNlXG4gNjQwOlx0XHRcdHJldHVybiAwO1xuIDY0MTpcdH1cbiA2NDI6XHRcbiA2NDM6XHRzdGF0aWMgaW50IGFpcl9sZWRfYmxpbmtfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuIDY0NDpcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4gNjQ1Olx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXG4gNjQ2Olx0e1xuIDY0NzpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuIDY0ODpcdFx0Ym9vbCBibGlua2luZyA9IGZhbHNlO1xuIDY0OTpcdFx0aW50IGVycjtcbiA2NTA6XHRcbiA2NTE6XHRcdGlmIChpbmRleCBcdTAwM2U9IEVOODgxMUhfTEVEX0NPVU5UKVxuIDY1MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2NTM6XHRcbiA2NTQ6XHRcdGlmIChkZWxheV9vbiBcdTAwMjZcdTAwMjYgZGVsYXlfb2ZmIFx1MDAyNlx1MDAyNiAoKmRlbGF5X29uIFx1MDAzZSAwKSBcdTAwMjZcdTAwMjYgKCpkZWxheV9vZmYgXHUwMDNlIDApKSB7XG4gNjU1Olx0XHRcdGJsaW5raW5nID0gdHJ1ZTtcbiA2NTY6XHRcdFx0KmRlbGF5X29uID0gNTA7XG4gNjU3Olx0XHRcdCpkZWxheV9vZmYgPSA1MDtcbiA2NTg6XHRcdH1cbiA2NTk6XHRcbiA2NjA6XHRcdGVyciA9IGFpcl9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGJsaW5raW5nKTtcbiA2NjE6XHRcdGlmIChlcnIpXG4gNjYyOlx0XHRcdHJldHVybiBlcnI7XG4gNjYzOlx0XG4gNjY0Olx0XHQvKiBsZWQtYmxpbmsgc2V0LCBzbyBzd2l0Y2ggbGVkLW9uIG9mZiAqL1xuIDY2NTpcdFx0ZXJyID0gYWlyX2h3X2xlZF9vbl9zZXQocGh5ZGV2LCBpbmRleCwgZmFsc2UpO1xuIDY2NjpcdFx0aWYgKGVycilcbiA2Njc6XHRcdFx0cmV0dXJuIGVycjtcbiA2Njg6XHRcbiA2Njk6XHRcdC8qIGh3LWNvbnRyb2wgaXMgb2ZmKi9cbiA2NzA6XHRcdGlmICghIXRlc3RfYml0KEFJUl9QSFlfTEVEX1NUQVRFX0ZPUkNFX0JMSU5LLCBcdTAwMjZwcml2LVx1MDAzZWxlZFtpbmRleF0uc3RhdGUpKVxuIDY3MTpcdFx0XHRwcml2LVx1MDAzZWxlZFtpbmRleF0ucnVsZXMgPSAwO1xuIDY3MjpcdFxuIDY3MzpcdFx0cmV0dXJuIDA7XG4gNjc0Olx0fVxuIDY3NTpcdFxuIDY3NjpcdHN0YXRpYyBpbnQgYWlyX2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbiA2Nzc6XHRcdFx0XHRcdCAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSlcbiA2Nzg6XHR7XG4gNjc5Olx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4gNjgwOlx0XHRpbnQgZXJyO1xuIDY4MTpcdFxuIDY4MjpcdFx0aWYgKGluZGV4IFx1MDAzZT0gRU44ODExSF9MRURfQ09VTlQpXG4gNjgzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY4NDpcdFxuIDY4NTpcdFx0LyogbGVkLW9uIHNldCwgc28gc3dpdGNoIGxlZC1ibGluayBvZmYgKi9cbiA2ODY6XHRcdGVyciA9IGFpcl9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGZhbHNlKTtcbiA2ODc6XHRcdGlmIChlcnIpXG4gNjg4Olx0XHRcdHJldHVybiBlcnI7XG4gNjg5Olx0XG4gNjkwOlx0XHRlcnIgPSBhaXJfaHdfbGVkX29uX3NldChwaHlkZXYsIGluZGV4LCAodmFsdWUgIT0gTEVEX09GRikpO1xuIDY5MTpcdFx0aWYgKGVycilcbiA2OTI6XHRcdFx0cmV0dXJuIGVycjtcbiA2OTM6XHRcbiA2OTQ6XHRcdC8qIGh3LWNvbnRyb2wgaXMgb2ZmICovXG4gNjk1Olx0XHRpZiAoISF0ZXN0X2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9PTiwgXHUwMDI2cHJpdi1cdTAwM2VsZWRbaW5kZXhdLnN0YXRlKSlcbiA2OTY6XHRcdFx0cHJpdi1cdTAwM2VsZWRbaW5kZXhdLnJ1bGVzID0gMDtcbiA2OTc6XHRcbiA2OTg6XHRcdHJldHVybiAwO1xuIDY5OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM5NwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgY29kZToKCioqRGl2aW5nIEJhY2sgaW50byBgYWlyX2VuODgxMWguY2AqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgYmFjayBpbnRvIHRoZSB3ZWVkcyB3aXRoIGBhaXJfZW44ODExaC5jYC4gSSBuZWVkIHRvIHBpY2sgdXAgd2hlcmUgSSBsZWZ0IG9mZiDigJMgcHJvYmFibHkgc29tZSBsb3ctbGV2ZWwgZHJpdmVyIGRldGFpbHMsIG1heWJlIHJlZ2lzdGVyIGludGVyYWN0aW9ucywgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBlcnJvciBjaGVja2luZy4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSByZXN0IG9mIHRoZSBmaWxlIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGZsb3cuIEkgZXhwZWN0IHRoaXMgZmlsZSBpcyBnb2luZyB0byBiZSBwYWNrZWQgd2l0aCBjcml0aWNhbCBmdW5jdGlvbnMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMgaXQgaGFzIGFuZCBob3cgdGhvc2UgcGxheSBvdXQuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgbW9yZSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb21wb25lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHRcbiA3MDE6XHRzdGF0aWMgaW50IGFpcl9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4gNzAyOlx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKnJ1bGVzKVxuIDcwMzpcdHtcbiA3MDQ6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiA3MDU6XHRcbiA3MDY6XHRcdGlmIChpbmRleCBcdTAwM2U9IEVOODgxMUhfTEVEX0NPVU5UKVxuIDcwNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3MDg6XHRcbiA3MDk6XHRcdCpydWxlcyA9IHByaXYtXHUwMDNlbGVkW2luZGV4XS5ydWxlcztcbiA3MTA6XHRcbiA3MTE6XHRcdHJldHVybiAwO1xuIDcxMjpcdH07XG4gNzEzOlx0XG4gNzE0Olx0c3RhdGljIGludCBhaXJfbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuIDcxNTpcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHJ1bGVzKVxuIDcxNjpcdHtcbiA3MTc6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiA3MTg6XHRcdHUxNiBvbiA9IDAsIGJsaW5rID0gMDtcbiA3MTk6XHRcdGludCByZXQ7XG4gNzIwOlx0XG4gNzIxOlx0XHRpZiAoaW5kZXggXHUwMDNlPSBFTjg4MTFIX0xFRF9DT1VOVClcbiA3MjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzIzOlx0XG4gNzI0Olx0XHRwcml2LVx1MDAzZWxlZFtpbmRleF0ucnVsZXMgPSBydWxlcztcbiA3MjU6XHRcbiA3MjY6XHRcdGlmIChydWxlcyBcdTAwMjYgQklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSlcbiA3Mjc6XHRcdFx0b24gfD0gQUlSX1BIWV9MRURfT05fRkRYO1xuIDcyODpcdFxuIDcyOTpcdFx0aWYgKHJ1bGVzIFx1MDAyNiAoQklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApIHwgQklUKFRSSUdHRVJfTkVUREVWX0xJTkspKSlcbiA3MzA6XHRcdFx0b24gfD0gQUlSX1BIWV9MRURfT05fTElOSzEwO1xuIDczMTpcdFxuIDczMjpcdFx0aWYgKHJ1bGVzIFx1MDAyNiAoQklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSB8IEJJVChUUklHR0VSX05FVERFVl9MSU5LKSkpXG4gNzMzOlx0XHRcdG9uIHw9IEFJUl9QSFlfTEVEX09OX0xJTksxMDA7XG4gNzM0Olx0XG4gNzM1Olx0XHRpZiAocnVsZXMgXHUwMDI2IChCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSB8IEJJVChUUklHR0VSX05FVERFVl9MSU5LKSkpXG4gNzM2Olx0XHRcdG9uIHw9IEFJUl9QSFlfTEVEX09OX0xJTksxMDAwO1xuIDczNzpcdFxuIDczODpcdFx0aWYgKHJ1bGVzIFx1MDAyNiAoQklUKFRSSUdHRVJfTkVUREVWX0xJTktfMjUwMCkgfCBCSVQoVFJJR0dFUl9ORVRERVZfTElOSykpKVxuIDczOTpcdFx0XHRvbiB8PSBBSVJfUEhZX0xFRF9PTl9MSU5LMjUwMDtcbiA3NDA6XHRcbiA3NDE6XHRcdGlmIChydWxlcyBcdTAwMjYgQklUKFRSSUdHRVJfTkVUREVWX1JYKSkge1xuIDc0MjpcdFx0XHRibGluayB8PSBBSVJfUEhZX0xFRF9CTElOS18xMFJYICAgfFxuIDc0MzpcdFx0XHRcdCBBSVJfUEhZX0xFRF9CTElOS18xMDBSWCAgfFxuIDc0NDpcdFx0XHRcdCBBSVJfUEhZX0xFRF9CTElOS18xMDAwUlggfFxuIDc0NTpcdFx0XHRcdCBBSVJfUEhZX0xFRF9CTElOS18yNTAwUlg7XG4gNzQ2Olx0XHR9XG4gNzQ3Olx0XG4gNzQ4Olx0XHRpZiAocnVsZXMgXHUwMDI2IEJJVChUUklHR0VSX05FVERFVl9UWCkpIHtcbiA3NDk6XHRcdFx0YmxpbmsgfD0gQUlSX1BIWV9MRURfQkxJTktfMTBUWCAgIHxcbiA3NTA6XHRcdFx0XHQgQUlSX1BIWV9MRURfQkxJTktfMTAwVFggIHxcbiA3NTE6XHRcdFx0XHQgQUlSX1BIWV9MRURfQkxJTktfMTAwMFRYIHxcbiA3NTI6XHRcdFx0XHQgQUlSX1BIWV9MRURfQkxJTktfMjUwMFRYO1xuIDc1MzpcdFx0fVxuIDc1NDpcdFxuIDc1NTpcdFx0aWYgKGJsaW5rIHx8IG9uKSB7XG4gNzU2Olx0XHRcdC8qIHN3aXRjaCBody1jb250cm9sIG9uLCBzbyBsZWQtb24gYW5kIGxlZC1ibGluayBhcmUgb2ZmICovXG4gNzU3Olx0XHRcdGNsZWFyX2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9PTixcbiA3NTg6XHRcdFx0XHQgIFx1MDAyNnByaXYtXHUwMDNlbGVkW2luZGV4XS5zdGF0ZSk7XG4gNzU5Olx0XHRcdGNsZWFyX2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9CTElOSyxcbiA3NjA6XHRcdFx0XHQgIFx1MDAyNnByaXYtXHUwMDNlbGVkW2luZGV4XS5zdGF0ZSk7XG4gNzYxOlx0XHR9IGVsc2Uge1xuIDc2MjpcdFx0XHRwcml2LVx1MDAzZWxlZFtpbmRleF0ucnVsZXMgPSAwO1xuIDc2MzpcdFx0fVxuIDc2NDpcdFxuIDc2NTpcdFx0cmV0ID0gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgQUlSX1BIWV9MRURfT04oaW5kZXgpLFxuIDc2NjpcdFx0XHRcdCAgICAgQUlSX1BIWV9MRURfT05fTUFTSywgb24pO1xuIDc2NzpcdFxuIDc2ODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3Njk6XHRcdFx0cmV0dXJuIHJldDtcbiA3NzA6XHRcbiA3NzE6XHRcdHJldHVybiBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIEFJUl9QSFlfTEVEX0JMSU5LKGluZGV4KSxcbiA3NzI6XHRcdFx0XHQgICAgIGJsaW5rKTtcbiA3NzM6XHR9O1xuIDc3NDpcdFxuIDc3NTpcdHN0YXRpYyBpbnQgYWlyX2xlZF9pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LCB1OCBzdGF0ZSwgdTggcG9sKVxuIDc3NjpcdHtcbiA3Nzc6XHRcdGludCB2YWwgPSAwO1xuIDc3ODpcdFx0aW50IGVycjtcbiA3Nzk6XHRcbiA3ODA6XHRcdGlmIChpbmRleCBcdTAwM2U9IEVOODgxMUhfTEVEX0NPVU5UKVxuIDc4MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3ODI6XHRcbiA3ODM6XHRcdGlmIChzdGF0ZSA9PSBBSVJfTEVEX0VOQUJMRSlcbiA3ODQ6XHRcdFx0dmFsIHw9IEFJUl9QSFlfTEVEX09OX0VOQUJMRTtcbiA3ODU6XHRcdGVsc2VcbiA3ODY6XHRcdFx0dmFsIFx1MDAyNj0gfkFJUl9QSFlfTEVEX09OX0VOQUJMRTtcbiA3ODc6XHRcbiA3ODg6XHRcdGlmIChwb2wgPT0gQUlSX0FDVElWRV9ISUdIKVxuIDc4OTpcdFx0XHR2YWwgfD0gQUlSX1BIWV9MRURfT05fUE9MQVJJVFk7XG4gNzkwOlx0XHRlbHNlXG4gNzkxOlx0XHRcdHZhbCBcdTAwMjY9IH5BSVJfUEhZX0xFRF9PTl9QT0xBUklUWTtcbiA3OTI6XHRcbiA3OTM6XHRcdGVyciA9IHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIEFJUl9QSFlfTEVEX09OKGluZGV4KSxcbiA3OTQ6XHRcdFx0XHQgICAgIEFJUl9QSFlfTEVEX09OX0VOQUJMRSB8XG4gNzk1Olx0XHRcdFx0ICAgICBBSVJfUEhZX0xFRF9PTl9QT0xBUklUWSwgdmFsKTtcbiA3OTY6XHRcbiA3OTc6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNzk4Olx0XHRcdHJldHVybiBlcnI7XG4gNzk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjU2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgQmFjayBJbjogUmVzdW1pbmcgdGhlIGBhaXJfZW44ODExaC5jYCBEaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgYmFjayB0byBpdC4gV2UgbGVmdCBvZmYgc29tZXdoZXJlIGluIHRoZSBgYWlyX2VuODgxMWguY2AgZmlsZSwgYW5kIEkgbmVlZCB0byBjb250aW51ZSBteSBhbmFseXNpcyB0b3dhcmRzIHRoZSBlbmQgb2YgaXQuIE15IGZvY3VzLCBhcyBhbHdheXMsIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludHJpY2FjaWVzIG9mIHRoaXMgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbnRhbCBtYXAgb2YgdGhlIGNvZGUuIEkgYW50aWNpcGF0ZSBwb3RlbnRpYWxseSBpbXBvcnRhbnQgc2VjdGlvbnMgcmVsYXRpbmcgdG8gdGhlIG92ZXJhbGwgZnVuY3Rpb25hbGl0eSB3aWxsIHByZXNlbnQgdGhlbXNlbHZlcyBhcyBJIG5hdmlnYXRlIHRvd2FyZHMgdGhlIGZpbmFsIGxpbmVzIG9mIHRoZSBmaWxlLiBObyB0aW1lIGxpa2UgdGhlIHByZXNlbnQgdG8gZ2V0IHN0YXJ0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSB3YWl0aW5nIHRvIGJlIHVuY292ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMDpcdFx0cmV0dXJuIDA7XG4gODAxOlx0fVxuIDgwMjpcdFxuIDgwMzpcdHN0YXRpYyBpbnQgYWlyX2xlZHNfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgbnVtLCBpbnQgZHVyLCBpbnQgbW9kZSlcbiA4MDQ6XHR7XG4gODA1Olx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4gODA2Olx0XHRpbnQgcmV0LCBpO1xuIDgwNzpcdFxuIDgwODpcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBBSVJfUEhZX0xFRF9EVVJfQkxJTkssXG4gODA5Olx0XHRcdFx0ICAgIGR1cik7XG4gODEwOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDgxMTpcdFx0XHRyZXR1cm4gcmV0O1xuIDgxMjpcdFxuIDgxMzpcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBBSVJfUEhZX0xFRF9EVVJfT04sXG4gODE0Olx0XHRcdFx0ICAgIGR1ciBcdTAwM2VcdTAwM2UgMSk7XG4gODE1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDgxNjpcdFx0XHRyZXR1cm4gcmV0O1xuIDgxNzpcdFxuIDgxODpcdFx0c3dpdGNoIChtb2RlKSB7XG4gODE5Olx0XHRjYXNlIEFJUl9MRURfTU9ERV9ESVNBQkxFOlxuIDgyMDpcdFx0XHRyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBBSVJfUEhZX0xFRF9CQ1IsXG4gODIxOlx0XHRcdFx0XHQgICAgIEFJUl9QSFlfTEVEX0JDUl9FWFRfQ1RSTCB8XG4gODIyOlx0XHRcdFx0XHQgICAgIEFJUl9QSFlfTEVEX0JDUl9NT0RFX01BU0ssIDApO1xuIDgyMzpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDgyNDpcdFx0XHRcdHJldHVybiByZXQ7XG4gODI1Olx0XHRcdGJyZWFrO1xuIDgyNjpcdFx0Y2FzZSBBSVJfTEVEX01PREVfVVNFUl9ERUZJTkU6XG4gODI3Olx0XHRcdHJldCA9IHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIEFJUl9QSFlfTEVEX0JDUixcbiA4Mjg6XHRcdFx0XHRcdCAgICAgQUlSX1BIWV9MRURfQkNSX0VYVF9DVFJMIHxcbiA4Mjk6XHRcdFx0XHRcdCAgICAgQUlSX1BIWV9MRURfQkNSX0NMS19FTixcbiA4MzA6XHRcdFx0XHRcdCAgICAgQUlSX1BIWV9MRURfQkNSX0VYVF9DVFJMIHxcbiA4MzE6XHRcdFx0XHRcdCAgICAgQUlSX1BIWV9MRURfQkNSX0NMS19FTik7XG4gODMyOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gODMzOlx0XHRcdFx0cmV0dXJuIHJldDtcbiA4MzQ6XHRcdFx0YnJlYWs7XG4gODM1Olx0XHRkZWZhdWx0OlxuIDgzNjpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7TEVEIG1vZGUgJWQgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0OywgbW9kZSk7XG4gODM3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDgzODpcdFx0fVxuIDgzOTpcdFxuIDg0MDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtOyAmIzQzOyYjNDM7aSkge1xuIDg0MTpcdFx0XHRyZXQgPSBhaXJfbGVkX2luaXQocGh5ZGV2LCBpLCBBSVJfTEVEX0VOQUJMRSwgQUlSX0FDVElWRV9ISUdIKTtcbiA4NDI6XHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDg0MzpcdFx0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtMRUQlZCBpbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIGksIHJldCk7XG4gODQ0Olx0XHRcdFx0cmV0dXJuIHJldDtcbiA4NDU6XHRcdFx0fVxuIDg0NjpcdFx0XHRhaXJfbGVkX2h3X2NvbnRyb2xfc2V0KHBoeWRldiwgaSwgcHJpdi1cdTAwM2VsZWRbaV0ucnVsZXMpO1xuIDg0NzpcdFx0fVxuIDg0ODpcdFxuIDg0OTpcdFx0cmV0dXJuIDA7XG4gODUwOlx0fVxuIDg1MTpcdFxuIDg1MjpcdHN0YXRpYyBpbnQgZW44ODExaF9sZWRfaHdfaXNfc3VwcG9ydGVkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxuIDg1MzpcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgcnVsZXMpXG4gODU0Olx0e1xuIDg1NTpcdFx0aWYgKGluZGV4IFx1MDAzZT0gRU44ODExSF9MRURfQ09VTlQpXG4gODU2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDg1NzpcdFxuIDg1ODpcdFx0LyogQWxsIGNvbWJpbmF0aW9ucyBvZiB0aGUgc3VwcG9ydGVkIHRyaWdnZXJzIGFyZSBhbGxvd2VkICovXG4gODU5Olx0XHRpZiAocnVsZXMgXHUwMDI2IH5lbjg4MTFoX2xlZF90cmlnKVxuIDg2MDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gODYxOlx0XG4gODYyOlx0XHRyZXR1cm4gMDtcbiA4NjM6XHR9O1xuIDg2NDpcdFxuIDg2NTpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGFuODgxMWhiX2Nsa19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodyxcbiA4NjY6XHRcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnQpXG4gODY3Olx0e1xuIDg2ODpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xuIDg2OTpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXHUwMDNlcGh5ZGV2O1xuIDg3MDpcdFx0dTMyIHBidXNfdmFsdWU7XG4gODcxOlx0XHRpbnQgcmV0O1xuIDg3MjpcdFxuIDg3MzpcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChwaHlkZXYsIEFOODgxMUhCX0hXVFJBUDIsIFx1MDAyNnBidXNfdmFsdWUpO1xuIDg3NDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA4NzU6XHRcdFx0cmV0dXJuIHJldDtcbiA4NzY6XHRcbiA4Nzc6XHRcdHJldHVybiAocGJ1c192YWx1ZSBcdTAwMjYgQU44ODExSEJfSFdUUkFQMl9DS08pID8gNTAwMDAwMDAgOiAyNTAwMDAwMDtcbiA4Nzg6XHR9XG4gODc5Olx0XG4gODgwOlx0c3RhdGljIGludCBhbjg4MTFoYl9jbGtfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KVxuIDg4MTpcdHtcbiA4ODI6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBjbGtfaHdfdG9fZW44ODExaF9wcml2KGh3KTtcbiA4ODM6XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBwcml2LVx1MDAzZXBoeWRldjtcbiA4ODQ6XHRcbiA4ODU6XHRcdHJldHVybiBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9DTEtfRFJWLFxuIDg4NjpcdFx0XHRcdFx0XHQgICBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLLFxuIDg4NzpcdFx0XHRcdFx0XHQgICBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLKTtcbiA4ODg6XHR9XG4gODg5Olx0XG4gODkwOlx0c3RhdGljIHZvaWQgYW44ODExaGJfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpXG4gODkxOlx0e1xuIDg5MjpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xuIDg5MzpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXHUwMDNlcGh5ZGV2O1xuIDg5NDpcdFxuIDg5NTpcdFx0YWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfQ0xLX0RSVixcbiA4OTY6XHRcdFx0XHRcdCAgICBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLLCAwKTtcbiA4OTc6XHR9XG4gODk4Olx0XG4gODk5Olx0c3RhdGljIGludCBhbjg4MTFoYl9jbGtfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3ICpodylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMDkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byB0aGUgUEhZIERyaXZlcioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbW92aW5nIG9uLiBXZSYjMzk7dmUgZ290IHRoZSBiYXNpY3MgZG93biwgbm93IGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRoaW5nICpyZWFsbHkqIHdvcmtzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgYHBoeV9kcml2ZXJgIHN0cnVjdHVyZSBhbmQgdGhvc2Uga2V5IGZ1bmN0aW9uczogdGhlIGBwcm9iZWAgYW5kIHRoZSBgY29uZmlnX2luaXRgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgcGllY2VzLCB0aGUgYmFja2JvbmUgb2YgaG93IGEgUEhZIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIHN5c3RlbSwgYW5kIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCBhbmQgYnJvdWdodCBvbmxpbmUuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZ2l2ZSB1cyBhIHZlcnkgZ29vZCBncmFzcCBvZiB0aGUgd2hvbGUgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBoYW5kbGUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTAwOlx0e1xuIDkwMTpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xuIDkwMjpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXHUwMDNlcGh5ZGV2O1xuIDkwMzpcdFx0dTMyIHBidXNfdmFsdWU7XG4gOTA0Olx0XHRpbnQgcmV0O1xuIDkwNTpcdFxuIDkwNjpcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChwaHlkZXYsIEFOODgxMUhCX0NMS19EUlYsIFx1MDAyNnBidXNfdmFsdWUpO1xuIDkwNzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA5MDg6XHRcdFx0cmV0dXJuIHJldDtcbiA5MDk6XHRcbiA5MTA6XHRcdHJldHVybiAocGJ1c192YWx1ZSBcdTAwMjYgQU44ODExSEJfQ0xLX0RSVl9DS09fTUFTSyk7XG4gOTExOlx0fVxuIDkxMjpcdFxuIDkxMzpcdHN0YXRpYyBpbnQgYW44ODExaGJfY2xrX3NhdmVfY29udGV4dChzdHJ1Y3QgY2xrX2h3ICpodylcbiA5MTQ6XHR7XG4gOTE1Olx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XG4gOTE2Olx0XG4gOTE3Olx0XHRwcml2LVx1MDAzZWNrb19pc19lbmFibGVkID0gYW44ODExaGJfY2xrX2lzX2VuYWJsZWQoaHcpO1xuIDkxODpcdFxuIDkxOTpcdFx0cmV0dXJuIDA7XG4gOTIwOlx0fVxuIDkyMTpcdFxuIDkyMjpcdHN0YXRpYyB2b2lkIGFuODgxMWhiX2Nsa19yZXN0b3JlX2NvbnRleHQoc3RydWN0IGNsa19odyAqaHcpXG4gOTIzOlx0e1xuIDkyNDpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xuIDkyNTpcdFxuIDkyNjpcdFx0aWYgKCFwcml2LVx1MDAzZWNrb19pc19lbmFibGVkKVxuIDkyNzpcdFx0XHRhbjg4MTFoYl9jbGtfZGlzYWJsZShodyk7XG4gOTI4Olx0fVxuIDkyOTpcdFxuIDkzMDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBhbjg4MTFoYl9jbGtfb3BzID0ge1xuIDkzMTpcdFx0LnJlY2FsY19yYXRlXHRcdD0gYW44ODExaGJfY2xrX3JlY2FsY19yYXRlLFxuIDkzMjpcdFx0LmVuYWJsZVx0XHRcdD0gYW44ODExaGJfY2xrX2VuYWJsZSxcbiA5MzM6XHRcdC5kaXNhYmxlXHRcdD0gYW44ODExaGJfY2xrX2Rpc2FibGUsXG4gOTM0Olx0XHQuaXNfZW5hYmxlZFx0XHQ9IGFuODgxMWhiX2Nsa19pc19lbmFibGVkLFxuIDkzNTpcdFx0LnNhdmVfY29udGV4dFx0XHQ9IGFuODgxMWhiX2Nsa19zYXZlX2NvbnRleHQsXG4gOTM2Olx0XHQucmVzdG9yZV9jb250ZXh0XHQ9IGFuODgxMWhiX2Nsa19yZXN0b3JlX2NvbnRleHQsXG4gOTM3Olx0fTtcbiA5Mzg6XHRcbiA5Mzk6XHRzdGF0aWMgaW50IGFuODgxMWhiX2Nsa19wcm92aWRlcl9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBjbGtfaHcgKmh3KVxuIDk0MDpcdHtcbiA5NDE6XHRcdHN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7XG4gOTQyOlx0XHRpbnQgcmV0O1xuIDk0MzpcdFxuIDk0NDpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DT01NT05fQ0xLKSlcbiA5NDU6XHRcdFx0cmV0dXJuIDA7XG4gOTQ2Olx0XG4gOTQ3Olx0XHRpbml0Lm5hbWUgPSBkZXZtX2thc3ByaW50ZihkZXYsIEdGUF9LRVJORUwsIFwmIzM0OyVzLWNrb1wmIzM0OyxcbiA5NDg6XHRcdFx0XHRcdCAgIGZ3bm9kZV9nZXRfbmFtZShkZXZfZndub2RlKGRldikpKTtcbiA5NDk6XHRcdGlmICghaW5pdC5uYW1lKVxuIDk1MDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5NTE6XHRcbiA5NTI6XHRcdGluaXQub3BzID0gXHUwMDI2YW44ODExaGJfY2xrX29wcztcbiA5NTM6XHRcdGluaXQuZmxhZ3MgPSAwO1xuIDk1NDpcdFx0aW5pdC5udW1fcGFyZW50cyA9IDA7XG4gOTU1Olx0XHRody1cdTAwM2Vpbml0ID0gXHUwMDI2aW5pdDtcbiA5NTY6XHRcbiA5NTc6XHRcdHJldCA9IGRldm1fY2xrX2h3X3JlZ2lzdGVyKGRldiwgaHcpO1xuIDk1ODpcdFx0aWYgKHJldClcbiA5NTk6XHRcdFx0cmV0dXJuIHJldDtcbiA5NjA6XHRcbiA5NjE6XHRcdHJldHVybiBkZXZtX29mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LCBvZl9jbGtfaHdfc2ltcGxlX2dldCwgaHcpO1xuIDk2MjpcdH1cbiA5NjM6XHRcbiA5NjQ6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBlbjg4MTFoX2Nsa19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodyxcbiA5NjU6XHRcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHBhcmVudClcbiA5NjY6XHR7XG4gOTY3Olx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XG4gOTY4Olx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi1cdTAwM2VwaHlkZXY7XG4gOTY5Olx0XHR1MzIgcGJ1c192YWx1ZTtcbiA5NzA6XHRcdGludCByZXQ7XG4gOTcxOlx0XG4gOTcyOlx0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgRU44ODExSF9IV1RSQVAxLCBcdTAwMjZwYnVzX3ZhbHVlKTtcbiA5NzM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gOTc0Olx0XHRcdHJldHVybiByZXQ7XG4gOTc1Olx0XG4gOTc2Olx0XHRyZXR1cm4gKHBidXNfdmFsdWUgXHUwMDI2IEVOODgxMUhfSFdUUkFQMV9DS08pID8gNTAwMDAwMDAgOiAyNTAwMDAwMDtcbiA5Nzc6XHR9XG4gOTc4Olx0XG4gOTc5Olx0c3RhdGljIGludCBlbjg4MTFoX2Nsa19lbmFibGUoc3RydWN0IGNsa19odyAqaHcpXG4gOTgwOlx0e1xuIDk4MTpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xuIDk4MjpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXHUwMDNlcGh5ZGV2O1xuIDk4MzpcdFxuIDk4NDpcdFx0cmV0dXJuIGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfQ0xLX0NHTSxcbiA5ODU6XHRcdFx0XHRcdFx0ICAgRU44ODExSF9DTEtfQ0dNX0NLTyxcbiA5ODY6XHRcdFx0XHRcdFx0ICAgRU44ODExSF9DTEtfQ0dNX0NLTyk7XG4gOTg3Olx0fVxuIDk4ODpcdFxuIDk4OTpcdHN0YXRpYyB2b2lkIGVuODgxMWhfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpXG4gOTkwOlx0e1xuIDk5MTpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xuIDk5MjpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXHUwMDNlcGh5ZGV2O1xuIDk5MzpcdFxuIDk5NDpcdFx0YWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9DTEtfQ0dNLFxuIDk5NTpcdFx0XHRcdFx0ICAgIEVOODgxMUhfQ0xLX0NHTV9DS08sIDApO1xuIDk5NjpcdH1cbiA5OTc6XHRcbiA5OTg6XHRzdGF0aWMgaW50IGVuODgxMWhfY2xrX2lzX2VuYWJsZWQoc3RydWN0IGNsa19odyAqaHcpXG4gOTk5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE4OQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGFpcl9lbjg4MTFoLmNgIC0gVXAgdG8gTGluZSAxMjAwKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZXN0IG9mIGBhaXJfZW44ODExaC5jYC4gVGhhdCBmaWxlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBzeXN0ZW0gd29ya3MsIGFuZCBJJiMzOTttIGd1ZXNzaW5nIHVwIHRvIGxpbmUgMTIwMCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBjaHVuayB0byB3b3JrIHdpdGguIEkgd2FudCB0byBzZWUgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCBhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgcGVyaGFwcyBzb21lIGludGVycnVwdCBoYW5kbGVycyBvciBETUEgc2V0dXAsIGFuZCBkZWZpbml0ZWx5IHNvbWUgY29yZSBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgc2VjdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gYW5kIHBvc3NpYmx5IHRoZSBiYXNpYyBpbnRlcmZhY2Ugd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgb3IgbWF5YmUgdGhlIGNvcmUgbmV0d29yayBoYW5kbGluZy4gTGV0JiMzOTtzIHNlZSBpZiBteSBpbml0aWFsIGFzc3VtcHRpb25zIGhvbGQgd2F0ZXIgb25jZSBJIGdldCBpbnRvIGl0LiBUaGUgZ29hbCBpcyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhpcyBjcml0aWNhbCBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAwOlx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XG4xMDAxOlx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi1cdTAwM2VwaHlkZXY7XG4xMDAyOlx0XHR1MzIgcGJ1c192YWx1ZTtcbjEwMDM6XHRcdGludCByZXQ7XG4xMDA0Olx0XG4xMDA1Olx0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgRU44ODExSF9DTEtfQ0dNLCBcdTAwMjZwYnVzX3ZhbHVlKTtcbjEwMDY6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMDA3Olx0XHRcdHJldHVybiByZXQ7XG4xMDA4Olx0XG4xMDA5Olx0XHRyZXR1cm4gKHBidXNfdmFsdWUgXHUwMDI2IEVOODgxMUhfQ0xLX0NHTV9DS08pO1xuMTAxMDpcdH1cbjEwMTE6XHRcbjEwMTI6XHRzdGF0aWMgaW50IGVuODgxMWhfY2xrX3NhdmVfY29udGV4dChzdHJ1Y3QgY2xrX2h3ICpodylcbjEwMTM6XHR7XG4xMDE0Olx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XG4xMDE1Olx0XG4xMDE2Olx0XHRwcml2LVx1MDAzZWNrb19pc19lbmFibGVkID0gZW44ODExaF9jbGtfaXNfZW5hYmxlZChodyk7XG4xMDE3Olx0XG4xMDE4Olx0XHRyZXR1cm4gMDtcbjEwMTk6XHR9XG4xMDIwOlx0XG4xMDIxOlx0c3RhdGljIHZvaWQgZW44ODExaF9jbGtfcmVzdG9yZV9jb250ZXh0KHN0cnVjdCBjbGtfaHcgKmh3KVxuMTAyMjpcdHtcbjEwMjM6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBjbGtfaHdfdG9fZW44ODExaF9wcml2KGh3KTtcbjEwMjQ6XHRcbjEwMjU6XHRcdGlmICghcHJpdi1cdTAwM2Vja29faXNfZW5hYmxlZClcbjEwMjY6XHRcdFx0ZW44ODExaF9jbGtfZGlzYWJsZShodyk7XG4xMDI3Olx0fVxuMTAyODpcdFxuMTAyOTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBlbjg4MTFoX2Nsa19vcHMgPSB7XG4xMDMwOlx0XHQucmVjYWxjX3JhdGVcdFx0PSBlbjg4MTFoX2Nsa19yZWNhbGNfcmF0ZSxcbjEwMzE6XHRcdC5lbmFibGVcdFx0XHQ9IGVuODgxMWhfY2xrX2VuYWJsZSxcbjEwMzI6XHRcdC5kaXNhYmxlXHRcdD0gZW44ODExaF9jbGtfZGlzYWJsZSxcbjEwMzM6XHRcdC5pc19lbmFibGVkXHRcdD0gZW44ODExaF9jbGtfaXNfZW5hYmxlZCxcbjEwMzQ6XHRcdC5zYXZlX2NvbnRleHRcdFx0PSBlbjg4MTFoX2Nsa19zYXZlX2NvbnRleHQsXG4xMDM1Olx0XHQucmVzdG9yZV9jb250ZXh0XHQ9IGVuODgxMWhfY2xrX3Jlc3RvcmVfY29udGV4dCxcbjEwMzY6XHR9O1xuMTAzNzpcdFxuMTAzODpcdHN0YXRpYyBpbnQgZW44ODExaF9jbGtfcHJvdmlkZXJfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgY2xrX2h3ICpodylcbjEwMzk6XHR7XG4xMDQwOlx0XHRzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0O1xuMTA0MTpcdFx0aW50IHJldDtcbjEwNDI6XHRcbjEwNDM6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQ09NTU9OX0NMSykpXG4xMDQ0Olx0XHRcdHJldHVybiAwO1xuMTA0NTpcdFxuMTA0NjpcdFx0aW5pdC5uYW1lID0gZGV2bV9rYXNwcmludGYoZGV2LCBHRlBfS0VSTkVMLCBcJiMzNDslcy1ja29cJiMzNDssXG4xMDQ3Olx0XHRcdFx0XHQgICBmd25vZGVfZ2V0X25hbWUoZGV2X2Z3bm9kZShkZXYpKSk7XG4xMDQ4Olx0XHRpZiAoIWluaXQubmFtZSlcbjEwNDk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMDUwOlx0XG4xMDUxOlx0XHRpbml0Lm9wcyA9IFx1MDAyNmVuODgxMWhfY2xrX29wcztcbjEwNTI6XHRcdGluaXQuZmxhZ3MgPSAwO1xuMTA1MzpcdFx0aW5pdC5udW1fcGFyZW50cyA9IDA7XG4xMDU0Olx0XHRody1cdTAwM2Vpbml0ID0gXHUwMDI2aW5pdDtcbjEwNTU6XHRcbjEwNTY6XHRcdHJldCA9IGRldm1fY2xrX2h3X3JlZ2lzdGVyKGRldiwgaHcpO1xuMTA1NzpcdFx0aWYgKHJldClcbjEwNTg6XHRcdFx0cmV0dXJuIHJldDtcbjEwNTk6XHRcbjEwNjA6XHRcdHJldHVybiBkZXZtX29mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LCBvZl9jbGtfaHdfc2ltcGxlX2dldCwgaHcpO1xuMTA2MTpcdH1cbjEwNjI6XHRcbjEwNjM6XHRzdGF0aWMgaW50IGVuODgxMWhfbGVkc19zZXR1cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTA2NDpcdHtcbjEwNjU6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbjEwNjY6XHRcdGludCByZXQ7XG4xMDY3Olx0XG4xMDY4Olx0XHRwcml2LVx1MDAzZWxlZFswXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMDtcbjEwNjk6XHRcdHByaXYtXHUwMDNlbGVkWzFdLnJ1bGVzID0gQUlSX0RFRkFVTFRfVFJJR0dFUl9MRUQxO1xuMTA3MDpcdFx0cHJpdi1cdTAwM2VsZWRbMl0ucnVsZXMgPSBBSVJfREVGQVVMVF9UUklHR0VSX0xFRDI7XG4xMDcxOlx0XG4xMDcyOlx0XHRyZXQgPSBhaXJfbGVkc19pbml0KHBoeWRldiwgRU44ODExSF9MRURfQ09VTlQsIEFJUl9QSFlfTEVEX0RVUixcbjEwNzM6XHRcdFx0XHQgICAgQUlSX0xFRF9NT0RFX0RJU0FCTEUpO1xuMTA3NDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEwNzU6XHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0ZhaWxlZCB0byBkaXNhYmxlIGxlZHM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTA3NjpcdFxuMTA3NzpcdFx0cmV0dXJuIHJldDtcbjEwNzg6XHR9XG4xMDc5Olx0XG4xMDgwOlx0c3RhdGljIGludCBhbjg4MTFoYl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTA4MTpcdHtcbjEwODI6XHRcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbjEwODM6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXY7XG4xMDg0Olx0XHRpbnQgcmV0O1xuMTA4NTpcdFxuMTA4NjpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcbjEwODc6XHRcdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4xMDg4Olx0XHRpZiAoIXByaXYpXG4xMDg5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTA5MDpcdFx0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuMTA5MTpcdFxuMTA5MjpcdFx0LypcbjEwOTM6XHRcdCAqIFRoZSBBTjg4MTFIQiBQSFkgYWRkcmVzcyBpcyByZXN0cmljdGVkIHRvIDgtMTUgKGRlY2ltYWwpLFxuMTA5NDpcdFx0ICogZGVwZW5kaW5nIG9uIHRoZSBib2FyZCBoYXJkd2FyZSBzdHJhcHBpbmcuXG4xMDk1Olx0XHQgKiBUaGlzIG1lYW5zIHRoZSBQQlVTIGFkZHJlc3MgaXMgb25seSBpbiB0aGUgcmFuZ2UgMTYtMjEgKGRlY2ltYWwpLFxuMTA5NjpcdFx0ICogc28gd2UgZG8gbm90IG5lZWQgdG8gaGFuZGxlIHRoZSBjYXNlXG4xMDk3Olx0XHQgKiB3aGVyZSB0aGUgUEJVUyBhZGRyZXNzIGV4Y2VlZHMgMzEgKGRlY2ltYWwpLlxuMTA5ODpcdFx0ICovXG4xMDk5Olx0XHRtZGlvZGV2ID0gbWRpb19kZXZpY2VfY3JlYXRlKHBoeWRldi1cdTAwM2VtZGlvLmJ1cyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNTMKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgc28gSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgcmVzdCBvZiBgYWlyX2VuODgxMWguY2AgYWxsIHRoZSB3YXkgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gTm8gcG9pbnQganVzdCBmb2N1c2luZyBvbiBhIGZyYWdtZW50LCBnb3R0YSBzZWUgdGhlIHdob2xlIGNvbnRleHQgaGVyZS4gTGV0JiMzOTtzIGdldCB0aGUgd2hvbGUgdGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTAwOlx0XHRcdFx0XHQgICAgIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgJiM0MzsgRU44ODExSF9QQlVTX0FERFJfT0ZGUyk7XG4xMTAxOlx0XHRpZiAoSVNfRVJSKG1kaW9kZXYpKVxuMTEwMjpcdFx0XHRyZXR1cm4gUFRSX0VSUihtZGlvZGV2KTtcbjExMDM6XHRcbjExMDQ6XHRcdHJldCA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKG1kaW9kZXYpO1xuMTEwNTpcdFx0aWYgKHJldClcbjExMDY6XHRcdFx0Z290byBlcnJfZGV2X2ZyZWU7XG4xMTA3Olx0XG4xMTA4Olx0XHRwcml2LVx1MDAzZXBidXNkZXYgPSBtZGlvZGV2O1xuMTEwOTpcdFxuMTExMDpcdFx0cmV0ID0gYW44ODExaGJfbG9hZF9maXJtd2FyZShwaHlkZXYpO1xuMTExMTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTExMjpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7TG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTExMzpcdFx0XHRnb3RvIGVycl9kZXZfY3JlYXRlO1xuMTExNDpcdFx0fVxuMTExNTpcdFxuMTExNjpcdFx0ZW44ODExaF9wcmludF9md192ZXJzaW9uKHBoeWRldik7XG4xMTE3Olx0XG4xMTE4Olx0XHQvKiBtY3UgaGFzIGp1c3QgcmVzdGFydGVkIGFmdGVyIGZpcm13YXJlIGxvYWQgKi9cbjExMTk6XHRcdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcbjExMjA6XHRcbjExMjE6XHRcdC8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi9cbjExMjI6XHRcdHBoeWRldi1cdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xuMTEyMzpcdFxuMTEyNDpcdFx0cmV0ID0gZW44ODExaF9sZWRzX3NldHVwKHBoeWRldik7XG4xMTI1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTEyNjpcdFx0XHRnb3RvIGVycl9kZXZfY3JlYXRlO1xuMTEyNzpcdFxuMTEyODpcdFx0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4xMTI5Olx0XHQvKiBDby1DbG9jayBPdXRwdXQgKi9cbjExMzA6XHRcdHJldCA9IGFuODgxMWhiX2Nsa19wcm92aWRlcl9zZXR1cChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFx1MDAyNnByaXYtXHUwMDNlaHcpO1xuMTEzMTpcdFx0aWYgKHJldClcbjExMzI6XHRcdFx0Z290byBlcnJfZGV2X2NyZWF0ZTtcbjExMzM6XHRcbjExMzQ6XHRcdC8qIENvbmZpZ3VyZSBsZWQgZ3BpbyBwaW5zIGFzIG91dHB1dCAqL1xuMTEzNTpcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19PVVRQVVQsXG4xMTM2Olx0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1LFxuMTEzNzpcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSk7XG4xMTM4Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTEzOTpcdFx0XHRnb3RvIGVycl9kZXZfY3JlYXRlO1xuMTE0MDpcdFxuMTE0MTpcdFx0cmV0dXJuIDA7XG4xMTQyOlx0XG4xMTQzOlx0ZXJyX2Rldl9jcmVhdGU6XG4xMTQ0Olx0XHRtZGlvX2RldmljZV9yZW1vdmUobWRpb2Rldik7XG4xMTQ1Olx0XG4xMTQ2Olx0ZXJyX2Rldl9mcmVlOlxuMTE0NzpcdFx0bWRpb19kZXZpY2VfZnJlZShtZGlvZGV2KTtcbjExNDg6XHRcdHJldHVybiByZXQ7XG4xMTQ5Olx0fVxuMTE1MDpcdFxuMTE1MTpcdHN0YXRpYyBpbnQgZW44ODExaF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTE1MjpcdHtcbjExNTM6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXY7XG4xMTU0Olx0XHRpbnQgcmV0O1xuMTE1NTpcdFxuMTE1NjpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcbjExNTc6XHRcdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4xMTU4Olx0XHRpZiAoIXByaXYpXG4xMTU5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTE2MDpcdFx0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuMTE2MTpcdFxuMTE2MjpcdFx0cmV0ID0gZW44ODExaF9sb2FkX2Zpcm13YXJlKHBoeWRldik7XG4xMTYzOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTE2NDpcdFx0XHRyZXR1cm4gcmV0O1xuMTE2NTpcdFxuMTE2NjpcdFx0LyogbWN1IGhhcyBqdXN0IHJlc3RhcnRlZCBhZnRlciBmaXJtd2FyZSBsb2FkICovXG4xMTY3Olx0XHRwcml2LVx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gZmFsc2U7XG4xMTY4Olx0XG4xMTY5Olx0XHQvKiBNRElPX0RFVlMxLzIgZW1wdHksIHNvIHNldCBtbWRzX3ByZXNlbnQgYml0cyBoZXJlICovXG4xMTcwOlx0XHRwaHlkZXYtXHUwMDNlYzQ1X2lkcy5tbWRzX3ByZXNlbnQgfD0gTURJT19ERVZTX1BNQVBNRCB8IE1ESU9fREVWU19BTjtcbjExNzE6XHRcbjExNzI6XHRcdHJldCA9IGVuODgxMWhfbGVkc19zZXR1cChwaHlkZXYpO1xuMTE3MzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjExNzQ6XHRcdFx0cmV0dXJuIHJldDtcbjExNzU6XHRcbjExNzY6XHRcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuMTE3NzpcdFx0LyogQ28tQ2xvY2sgT3V0cHV0ICovXG4xMTc4Olx0XHRyZXQgPSBlbjg4MTFoX2Nsa19wcm92aWRlcl9zZXR1cChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFx1MDAyNnByaXYtXHUwMDNlaHcpO1xuMTE3OTpcdFx0aWYgKHJldClcbjExODA6XHRcdFx0cmV0dXJuIHJldDtcbjExODE6XHRcbjExODI6XHRcdHJldHVybiAwO1xuMTE4MzpcdH1cbjExODQ6XHRcbjExODU6XHRzdGF0aWMgaW50IGFuODgxMWhiX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjExODY6XHR7XG4xMTg3Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4xMTg4Olx0XHR1MzIgcGJ1c192YWx1ZSA9IDA7XG4xMTg5Olx0XHR1bnNpZ25lZCBpbnQgcG9sO1xuMTE5MDpcdFx0aW50IHJldDtcbjExOTE6XHRcbjExOTI6XHRcdHJldCA9IHBoeV9nZXRfbWFudWFsX3J4X3BvbGFyaXR5KGRldl9md25vZGUoZGV2KSxcbjExOTM6XHRcdFx0XHRcdFx0IHBoeV9tb2RlcyhwaHlkZXYtXHUwMDNlaW50ZXJmYWNlKSwgXHUwMDI2cG9sKTtcbjExOTQ6XHRcdGlmIChyZXQpXG4xMTk1Olx0XHRcdHJldHVybiByZXQ7XG4xMTk2Olx0XHRpZiAocG9sID09IFBIWV9QT0xfTk9STUFMKVxuMTE5NzpcdFx0XHRwYnVzX3ZhbHVlIHw9IEFOODgxMUhCX1JYX1BPTEFSSVRZX05PUk1BTDtcbjExOTg6XHRcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX1JYX1BPTEFSSVRZLFxuMTE5OTpcdFx0XHRcdFx0XHQgIEFOODgxMUhCX1JYX1BPTEFSSVRZX05PUk1BTCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NzgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgc28gSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgcmVzdCBvZiBgYWlyX2VuODgxMWguY2AgYWxsIHRoZSB3YXkgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gTm8gcG9pbnQganVzdCBmb2N1c2luZyBvbiBhIGZyYWdtZW50LCBnb3R0YSBzZWUgdGhlIHdob2xlIGNvbnRleHQgaGVyZS4gTGV0JiMzOTtzIGdldCB0aGUgd2hvbGUgdGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAwOlx0XHRcdFx0XHRcdCAgcGJ1c192YWx1ZSk7XG4xMjAxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTIwMjpcdFx0XHRyZXR1cm4gcmV0O1xuMTIwMzpcdFxuMTIwNDpcdFx0cmV0ID0gcGh5X2dldF9tYW51YWxfdHhfcG9sYXJpdHkoZGV2X2Z3bm9kZShkZXYpLFxuMTIwNTpcdFx0XHRcdFx0XHQgcGh5X21vZGVzKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpLCBcdTAwMjZwb2wpO1xuMTIwNjpcdFx0aWYgKHJldClcbjEyMDc6XHRcdFx0cmV0dXJuIHJldDtcbjEyMDg6XHRcdHBidXNfdmFsdWUgPSAwO1xuMTIwOTpcdFx0aWYgKHBvbCA9PSBQSFlfUE9MX05PUk1BTClcbjEyMTA6XHRcdFx0cGJ1c192YWx1ZSB8PSBBTjg4MTFIQl9UWF9QT0xBUklUWV9OT1JNQUw7XG4xMjExOlx0XHRyZXR1cm4gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfVFhfUE9MQVJJVFksXG4xMjEyOlx0XHRcdFx0XHRcdCAgIEFOODgxMUhCX1RYX1BPTEFSSVRZX05PUk1BTCxcbjEyMTM6XHRcdFx0XHRcdFx0ICAgcGJ1c192YWx1ZSk7XG4xMjE0Olx0fVxuMTIxNTpcdFxuMTIxNjpcdHN0YXRpYyBpbnQgZW44ODExaF9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMjE3Olx0e1xuMTIxODpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuMTIxOTpcdFx0dW5zaWduZWQgaW50IHBvbCwgZGVmYXVsdF9wb2w7XG4xMjIwOlx0XHR1MzIgcGJ1c192YWx1ZSA9IDA7XG4xMjIxOlx0XHRpbnQgcmV0O1xuMTIyMjpcdFxuMTIyMzpcdFx0ZGVmYXVsdF9wb2wgPSBQSFlfUE9MX05PUk1BTDtcbjEyMjQ6XHRcdGlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgXCYjMzQ7YWlyb2hhLHBuc3dhcC1yeFwmIzM0OykpXG4xMjI1Olx0XHRcdGRlZmF1bHRfcG9sID0gUEhZX1BPTF9JTlZFUlQ7XG4xMjI2Olx0XG4xMjI3Olx0XHRyZXQgPSBwaHlfZ2V0X3J4X3BvbGFyaXR5KGRldl9md25vZGUoZGV2KSwgcGh5X21vZGVzKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpLFxuMTIyODpcdFx0XHRcdFx0ICBCSVQoUEhZX1BPTF9OT1JNQUwpIHwgQklUKFBIWV9QT0xfSU5WRVJUKSxcbjEyMjk6XHRcdFx0XHRcdCAgZGVmYXVsdF9wb2wsIFx1MDAyNnBvbCk7XG4xMjMwOlx0XHRpZiAocmV0KVxuMTIzMTpcdFx0XHRyZXR1cm4gcmV0O1xuMTIzMjpcdFx0aWYgKHBvbCA9PSBQSFlfUE9MX0lOVkVSVClcbjEyMzM6XHRcdFx0cGJ1c192YWx1ZSB8PSBFTjg4MTFIX1BPTEFSSVRZX1JYX1JFVkVSU0U7XG4xMjM0Olx0XG4xMjM1Olx0XHRkZWZhdWx0X3BvbCA9IFBIWV9QT0xfTk9STUFMO1xuMTIzNjpcdFx0aWYgKGRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCBcJiMzNDthaXJvaGEscG5zd2FwLXR4XCYjMzQ7KSlcbjEyMzc6XHRcdFx0ZGVmYXVsdF9wb2wgPSBQSFlfUE9MX0lOVkVSVDtcbjEyMzg6XHRcbjEyMzk6XHRcdHJldCA9IHBoeV9nZXRfdHhfcG9sYXJpdHkoZGV2X2Z3bm9kZShkZXYpLCBwaHlfbW9kZXMocGh5ZGV2LVx1MDAzZWludGVyZmFjZSksXG4xMjQwOlx0XHRcdFx0XHQgIEJJVChQSFlfUE9MX05PUk1BTCkgfCBCSVQoUEhZX1BPTF9JTlZFUlQpLFxuMTI0MTpcdFx0XHRcdFx0ICBkZWZhdWx0X3BvbCwgXHUwMDI2cG9sKTtcbjEyNDI6XHRcdGlmIChyZXQpXG4xMjQzOlx0XHRcdHJldHVybiByZXQ7XG4xMjQ0Olx0XHRpZiAocG9sID09IFBIWV9QT0xfTk9STUFMKVxuMTI0NTpcdFx0XHRwYnVzX3ZhbHVlIHw9IEVOODgxMUhfUE9MQVJJVFlfVFhfTk9STUFMO1xuMTI0NjpcdFxuMTI0NzpcdFx0cmV0dXJuIGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfUE9MQVJJVFksXG4xMjQ4Olx0XHRcdFx0XHRcdCAgIEVOODgxMUhfUE9MQVJJVFlfUlhfUkVWRVJTRSB8XG4xMjQ5Olx0XHRcdFx0XHRcdCAgIEVOODgxMUhfUE9MQVJJVFlfVFhfTk9STUFMLFxuMTI1MDpcdFx0XHRcdFx0XHQgICBwYnVzX3ZhbHVlKTtcbjEyNTE6XHR9XG4xMjUyOlx0XG4xMjUzOlx0c3RhdGljIGludCBhbjg4MTFoYl9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTI1NDpcdHtcbjEyNTU6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbjEyNTY6XHRcdGludCByZXQ7XG4xMjU3Olx0XG4xMjU4Olx0XHQvKiBJZiByZXN0YXJ0IGhhcHBlbmVkIGluIC5wcm9iZSgpLCBubyBuZWVkIHRvIHJlc3RhcnQgbm93ICovXG4xMjU5Olx0XHRpZiAocHJpdi1cdTAwM2VtY3VfbmVlZHNfcmVzdGFydCkge1xuMTI2MDpcdFx0XHRyZXQgPSBlbjg4MTFoX3Jlc3RhcnRfbWN1KHBoeWRldik7XG4xMjYxOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMjYyOlx0XHRcdFx0cmV0dXJuIHJldDtcbjEyNjM6XHRcdH0gZWxzZSB7XG4xMjY0Olx0XHRcdC8qIE5leHQgY2FsbHMgdG8gLmNvbmZpZ19pbml0KCkgbWN1IG5lZWRzIHRvIHJlc3RhcnQgKi9cbjEyNjU6XHRcdFx0cHJpdi1cdTAwM2VtY3VfbmVlZHNfcmVzdGFydCA9IHRydWU7XG4xMjY2Olx0XHR9XG4xMjY3Olx0XG4xMjY4Olx0XHRyZXQgPSBhbjg4MTFoYl9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHBoeWRldik7XG4xMjY5Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTI3MDpcdFx0XHRyZXR1cm4gcmV0O1xuMTI3MTpcdFxuMTI3MjpcdFx0cmV0ID0gYWlyX2xlZHNfaW5pdChwaHlkZXYsIEVOODgxMUhfTEVEX0NPVU5ULCBBSVJfUEhZX0xFRF9EVVIsXG4xMjczOlx0XHRcdFx0ICAgIEFJUl9MRURfTU9ERV9VU0VSX0RFRklORSk7XG4xMjc0Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTI3NTpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbGVkczogJWRcXG5cJiMzNDssIHJldCk7XG4xMjc2Olx0XG4xMjc3Olx0XHRyZXR1cm4gcmV0O1xuMTI3ODpcdH1cbjEyNzk6XHRcbjEyODA6XHRzdGF0aWMgaW50IGVuODgxMWhfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjEyODE6XHR7XG4xMjgyOlx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4xMjgzOlx0XHRpbnQgcmV0O1xuMTI4NDpcdFxuMTI4NTpcdFx0LyogSWYgcmVzdGFydCBoYXBwZW5lZCBpbiAucHJvYmUoKSwgbm8gbmVlZCB0byByZXN0YXJ0IG5vdyAqL1xuMTI4NjpcdFx0aWYgKHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQpIHtcbjEyODc6XHRcdFx0cmV0ID0gZW44ODExaF9yZXN0YXJ0X21jdShwaHlkZXYpO1xuMTI4ODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTI4OTpcdFx0XHRcdHJldHVybiByZXQ7XG4xMjkwOlx0XHR9IGVsc2Uge1xuMTI5MTpcdFx0XHQvKiBOZXh0IGNhbGxzIHRvIC5jb25maWdfaW5pdCgpIG1jdSBuZWVkcyB0byByZXN0YXJ0ICovXG4xMjkyOlx0XHRcdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSB0cnVlO1xuMTI5MzpcdFx0fVxuMTI5NDpcdFxuMTI5NTpcdFx0LyogU2VsZWN0IG1vZGUgMSwgdGhlIG9ubHkgbW9kZSBzdXBwb3J0ZWQuXG4xMjk2Olx0XHQgKiBDb25maWd1cmVzIHRoZSBTZXJEZXMgZm9yIDI1MDBCYXNlLVggd2l0aCByYXRlIGFkYXB0YXRpb25cbjEyOTc6XHRcdCAqL1xuMTI5ODpcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfMSxcbjEyOTk6XHRcdFx0XHQgICAgQUlSX1BIWV9NQ1VfQ01EXzFfTU9ERTEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcwNwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoaXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGlzIGRvY3VtZW50IGNvbnRhaW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGZvcm11bGF0ZSBhIGNvaGVyZW50IHJlc3BvbnNlLiBKdXN0IGdpbW1lIGEgc2Vjb25kLiBJIG5lZWQgdG8gc2VlIHRoZSBlbnRpcmUgdGV4dCBiZWZvcmUgSSBjYW4gZnVsbHkgc3ludGhlc2l6ZSBpdC4gSSYjMzk7bGwgcmVhZCB0byB0aGUgdmVyeSBlbmQgb2YgdGhlIGZpbGUuLi4gYW5kIHRoZW4gSSYjMzk7bGwgYmUgYWJsZSB0byBwcm9wZXJseSBzdW1tYXJpemUgd2hhdCYjMzk7cyBiZWluZyBhc2tlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMDA6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMzAxOlx0XHRcdHJldHVybiByZXQ7XG4xMzAyOlx0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF8yLFxuMTMwMzpcdFx0XHRcdCAgICBBSVJfUEhZX01DVV9DTURfMl9NT0RFMSk7XG4xMzA0Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTMwNTpcdFx0XHRyZXR1cm4gcmV0O1xuMTMwNjpcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfMyxcbjEzMDc6XHRcdFx0XHQgICAgQUlSX1BIWV9NQ1VfQ01EXzNfTU9ERTEpO1xuMTMwODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzMDk6XHRcdFx0cmV0dXJuIHJldDtcbjEzMTA6XHRcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQUlSX1BIWV9NQ1VfQ01EXzQsXG4xMzExOlx0XHRcdFx0ICAgIEFJUl9QSFlfTUNVX0NNRF80X01PREUxKTtcbjEzMTI6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMzEzOlx0XHRcdHJldHVybiByZXQ7XG4xMzE0Olx0XG4xMzE1Olx0XHRyZXQgPSBlbjg4MTFoX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkocGh5ZGV2KTtcbjEzMTY6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMzE3Olx0XHRcdHJldHVybiByZXQ7XG4xMzE4Olx0XG4xMzE5Olx0XHRyZXQgPSBhaXJfbGVkc19pbml0KHBoeWRldiwgRU44ODExSF9MRURfQ09VTlQsIEFJUl9QSFlfTEVEX0RVUixcbjEzMjA6XHRcdFx0XHQgICAgQUlSX0xFRF9NT0RFX1VTRVJfREVGSU5FKTtcbjEzMjE6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjEzMjI6XHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIGxlZHM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTMyMzpcdFx0XHRyZXR1cm4gcmV0O1xuMTMyNDpcdFx0fVxuMTMyNTpcdFxuMTMyNjpcdFx0LyogQ29uZmlndXJlIGxlZCBncGlvIHBpbnMgYXMgb3V0cHV0LiBNdXN0IGJlIHJlZG9uZSBvbiBldmVyeVxuMTMyNzpcdFx0ICogLmNvbmZpZ19pbml0KCksIG5vdCBqdXN0IG9uY2UgaW4gLnByb2JlKCk6IGVuODgxMWhfcmVzdGFydF9tY3UoKVxuMTMyODpcdFx0ICogcmVzZXRzIGJ1Y2twYnVzLW1hcHBlZCBNQ1Ugc3RhdGUgKGluY2wuIHRoaXMgcmVnaXN0ZXIpIG9uIGV2ZXJ5XG4xMzI5Olx0XHQgKiBjYWxsIGFmdGVyIHRoZSBmaXJzdCwgZS5nLiBvbiBsaW5rIHJlbmVnb3RpYXRpb24gb3IgaWZ1cC9pZmRvd24uXG4xMzMwOlx0XHQgKi9cbjEzMzE6XHRcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfR1BJT19PVVRQVVQsXG4xMzMyOlx0XHRcdFx0XHRcdCAgRU44ODExSF9HUElPX09VVFBVVF8zNDUsXG4xMzMzOlx0XHRcdFx0XHRcdCAgRU44ODExSF9HUElPX09VVFBVVF8zNDUpO1xuMTMzNDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzMzU6XHRcdFx0cmV0dXJuIHJldDtcbjEzMzY6XHRcbjEzMzc6XHRcdHJldHVybiAwO1xuMTMzODpcdH1cbjEzMzk6XHRcbjEzNDA6XHRzdGF0aWMgaW50IGVuODgxMWhfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMzQxOlx0e1xuMTM0MjpcdFx0bGlua21vZGVfc2V0X2JpdF9hcnJheShwaHlfYmFzaWNfcG9ydHNfYXJyYXksXG4xMzQzOlx0XHRcdFx0ICAgICAgIEFSUkFZX1NJWkUocGh5X2Jhc2ljX3BvcnRzX2FycmF5KSxcbjEzNDQ6XHRcdFx0XHQgICAgICAgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4xMzQ1Olx0XG4xMzQ2Olx0XHRyZXR1cm4gZ2VucGh5X2M0NV9wbWFfcmVhZF9hYmlsaXRpZXMocGh5ZGV2KTtcbjEzNDc6XHR9XG4xMzQ4Olx0XG4xMzQ5Olx0c3RhdGljIGludCBlbjg4MTFoX2dldF9yYXRlX21hdGNoaW5nKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4xMzUwOlx0XHRcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpZmFjZSlcbjEzNTE6XHR7XG4xMzUyOlx0XHRyZXR1cm4gUkFURV9NQVRDSF9QQVVTRTtcbjEzNTM6XHR9XG4xMzU0Olx0XG4xMzU1Olx0c3RhdGljIGludCBlbjg4MTFoX2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMzU2Olx0e1xuMTM1NzpcdFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4xMzU4Olx0XHRpbnQgcmV0O1xuMTM1OTpcdFx0dTMyIGFkdjtcbjEzNjA6XHRcbjEzNjE6XHRcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpIHtcbjEzNjI6XHRcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtEaXNhYmxpbmcgYXV0b25lZyBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbjEzNjM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMzY0Olx0XHR9XG4xMzY1Olx0XG4xMzY2Olx0XHRhZHYgPSBsaW5rbW9kZV9hZHZfdG9fbWlpXzEwZ2J0X2Fkdl90KHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4xMzY3Olx0XG4xMzY4Olx0XHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCxcbjEzNjk6XHRcdFx0XHRcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsIGFkdik7XG4xMzcwOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTM3MTpcdFx0XHRyZXR1cm4gcmV0O1xuMTM3MjpcdFx0aWYgKHJldCBcdTAwM2UgMClcbjEzNzM6XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4xMzc0Olx0XG4xMzc1Olx0XHRyZXR1cm4gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCBjaGFuZ2VkKTtcbjEzNzY6XHR9XG4xMzc3Olx0XG4xMzc4Olx0c3RhdGljIGludCBlbjg4MTFoX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMzc5Olx0e1xuMTM4MDpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuMTM4MTpcdFx0dTMyIHBidXNfdmFsdWU7XG4xMzgyOlx0XHRpbnQgcmV0LCB2YWw7XG4xMzgzOlx0XG4xMzg0Olx0XHRyZXQgPSBnZW5waHlfdXBkYXRlX2xpbmsocGh5ZGV2KTtcbjEzODU6XHRcdGlmIChyZXQpXG4xMzg2Olx0XHRcdHJldHVybiByZXQ7XG4xMzg3Olx0XG4xMzg4Olx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5TVVBQT1JURUQ7XG4xMzg5Olx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOU1VQUE9SVEVEO1xuMTM5MDpcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbjEzOTE6XHRcdHBoeWRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcbjEzOTI6XHRcdHBoeWRldi1cdTAwM2VwYXVzZSA9IDA7XG4xMzkzOlx0XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4xMzk0Olx0XHRwaHlkZXYtXHUwMDNlcmF0ZV9tYXRjaGluZyA9IFJBVEVfTUFUQ0hfUEFVU0U7XG4xMzk1Olx0XG4xMzk2Olx0XHRyZXQgPSBnZW5waHlfcmVhZF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcbjEzOTc6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMzk4Olx0XHRcdHJldHVybiByZXQ7XG4xMzk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDk5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIHJlc3Qgb2YgYGFpcl9lbjg4MTFoLmNgIGFsbCB0aGUgd2F5IHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIE5vIHBvaW50IGp1c3QgZm9jdXNpbmcgb24gYSBmcmFnbWVudCwgZ290dGEgc2VlIHRoZSB3aG9sZSBjb250ZXh0IGhlcmUuIExldCYjMzk7cyBnZXQgdGhlIHdob2xlIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQwMDpcdFx0cmV0ID0gZ2VucGh5X3JlYWRfbHBhKHBoeWRldik7XG4xNDAxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTQwMjpcdFx0XHRyZXR1cm4gcmV0O1xuMTQwMzpcdFxuMTQwNDpcdFx0aWYgKHBoeV9pZF9jb21wYXJlX21vZGVsKHBoeWRldi1cdTAwM2VwaHlfaWQsIEFOODgxMUhCX1BIWV9JRCkpIHtcbjE0MDU6XHRcdFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfU1RBVCk7XG4xNDA2Olx0XHRcdGlmICh2YWwgXHUwMDNjIDApXG4xNDA3Olx0XHRcdFx0cmV0dXJuIHZhbDtcbjE0MDg6XHRcdFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4xNDA5Olx0XHRcdFx0XHQgcGh5ZGV2LVx1MDAzZWxwX2FkdmVydGlzaW5nLFxuMTQxMDpcdFx0XHRcdFx0IHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81Ryk7XG4xNDExOlx0XHR9IGVsc2Uge1xuMTQxMjpcdFx0XHQvKiBHZXQgbGluayBwYXJ0bmVyIDIuNUdCQVNFLVQgYWJpbGl0eSBmcm9tIHZlbmRvciByZWdpc3RlciAqL1xuMTQxMzpcdFx0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgRU44ODExSF8yUDVHX0xQQSxcbjE0MTQ6XHRcdFx0XHRcdFx0XHRcdTAwMjZwYnVzX3ZhbHVlKTtcbjE0MTU6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0MTY6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTQxNzpcdFx0XHRsaW5rbW9kZV9tb2RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbjE0MTg6XHRcdFx0XHRcdCBwaHlkZXYtXHUwMDNlbHBfYWR2ZXJ0aXNpbmcsXG4xNDE5Olx0XHRcdFx0XHQgcGJ1c192YWx1ZSBcdTAwMjYgRU44ODExSF8yUDVHX0xQQV8yUDVHKTtcbjE0MjA6XHRcdH1cbjE0MjE6XHRcbjE0MjI6XHRcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZ19jb21wbGV0ZSlcbjE0MjM6XHRcdFx0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xuMTQyNDpcdFxuMTQyNTpcdFx0aWYgKCFwaHlkZXYtXHUwMDNlbGluaylcbjE0MjY6XHRcdFx0cmV0dXJuIDA7XG4xNDI3Olx0XG4xNDI4Olx0XHQvKiBHZXQgcmVhbCBzcGVlZCBmcm9tIHZlbmRvciByZWdpc3RlciAqL1xuMTQyOTpcdFx0dmFsID0gcGh5X3JlYWQocGh5ZGV2LCBBSVJfQVVYX0NUUkxfU1RBVFVTKTtcbjE0MzA6XHRcdGlmICh2YWwgXHUwMDNjIDApXG4xNDMxOlx0XHRcdHJldHVybiB2YWw7XG4xNDMyOlx0XHRzd2l0Y2ggKHZhbCBcdTAwMjYgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF9NQVNLKSB7XG4xNDMzOlx0XHRjYXNlIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMjUwMDpcbjE0MzQ6XHRcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMjUwMDtcbjE0MzU6XHRcdFx0YnJlYWs7XG4xNDM2Olx0XHRjYXNlIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMTAwMDpcbjE0Mzc6XHRcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDtcbjE0Mzg6XHRcdFx0YnJlYWs7XG4xNDM5Olx0XHRjYXNlIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMTAwOlxuMTQ0MDpcdFx0XHRwaHlkZXYtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDA7XG4xNDQxOlx0XHRcdGJyZWFrO1xuMTQ0MjpcdFx0Y2FzZSBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEXzEwOlxuMTQ0MzpcdFx0XHRwaHlkZXYtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDtcbjE0NDQ6XHRcdFx0YnJlYWs7XG4xNDQ1Olx0XHR9XG4xNDQ2Olx0XG4xNDQ3Olx0XHQvKiBGaXJtd2FyZSBiZWZvcmUgdmVyc2lvbiAyNDAxMTIwMiBoYXMgbm8gdmVuZG9yIHJlZ2lzdGVyIDJQNUdfTFBBLlxuMTQ0ODpcdFx0ICogQXNzdW1lIGxpbmsgcGFydG5lciBhZHZlcnRpc2VkIGl0IGlmIGNvbm5lY3RlZCBhdCAyNTAwTWJwcy5cbjE0NDk6XHRcdCAqL1xuMTQ1MDpcdFx0aWYgKHByaXYtXHUwMDNlZmlybXdhcmVfdmVyc2lvbiBcdTAwM2MgMHgyNDAxMTIwMikge1xuMTQ1MTpcdFx0XHRsaW5rbW9kZV9tb2RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbjE0NTI6XHRcdFx0XHRcdCBwaHlkZXYtXHUwMDNlbHBfYWR2ZXJ0aXNpbmcsXG4xNDUzOlx0XHRcdFx0XHQgcGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzI1MDApO1xuMTQ1NDpcdFx0fVxuMTQ1NTpcdFxuMTQ1NjpcdFx0LyogT25seSBzdXBwb3J0cyBmdWxsIGR1cGxleCAqL1xuMTQ1NzpcdFx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xuMTQ1ODpcdFxuMTQ1OTpcdFx0cmV0dXJuIDA7XG4xNDYwOlx0fVxuMTQ2MTpcdFxuMTQ2MjpcdHN0YXRpYyBpbnQgZW44ODExaF9jbGVhcl9pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xNDYzOlx0e1xuMTQ2NDpcdFx0aW50IHJldDtcbjE0NjU6XHRcbjE0NjY6XHRcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQUlSX1BIWV9NQ1VfQ01EXzMsXG4xNDY3Olx0XHRcdFx0ICAgIEFJUl9QSFlfTUNVX0NNRF8zX0RPQ01EKTtcbjE0Njg6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNDY5Olx0XHRcdHJldHVybiByZXQ7XG4xNDcwOlx0XG4xNDcxOlx0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF80LFxuMTQ3MjpcdFx0XHRcdCAgICBBSVJfUEhZX01DVV9DTURfNF9JTlRDTFIpO1xuMTQ3MzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0NzQ6XHRcdFx0cmV0dXJuIHJldDtcbjE0NzU6XHRcbjE0NzY6XHRcdHJldHVybiAwO1xuMTQ3NzpcdH1cbjE0Nzg6XHRcbjE0Nzk6XHRzdGF0aWMgaXJxcmV0dXJuX3QgZW44ODExaF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xNDgwOlx0e1xuMTQ4MTpcdFx0aW50IHJldDtcbjE0ODI6XHRcbjE0ODM6XHRcdHJldCA9IGVuODgxMWhfY2xlYXJfaW50cihwaHlkZXYpO1xuMTQ4NDpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTQ4NTpcdFx0XHRwaHlfZXJyb3IocGh5ZGV2KTtcbjE0ODY6XHRcdFx0cmV0dXJuIElSUV9OT05FO1xuMTQ4NzpcdFx0fVxuMTQ4ODpcdFxuMTQ4OTpcdFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xuMTQ5MDpcdFxuMTQ5MTpcdFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuMTQ5MjpcdH1cbjE0OTM6XHRcbjE0OTQ6XHRzdGF0aWMgaW50IGVuODgxMWhfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xNDk1Olx0e1xuMTQ5NjpcdFx0Y2xrX3Jlc3RvcmVfY29udGV4dCgpO1xuMTQ5NzpcdFxuMTQ5ODpcdFx0cmV0dXJuIGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcbjE0OTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjI0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gc3ludGhlc2l6ZSB0aGVzZSB0aG91Z2h0cy4gSGVyZSYjMzk7cyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSwgYW50aWNpcGF0aW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBSZW1haW5kZXIqKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvY2Vzc2luZyBzdGFnZSBpcyBjb21wbGV0ZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGxlZnQuIE15IG5leHQgc3RlcCBpbnZvbHZlcyBleGFtaW5pbmcgdGhlIHJlbWFpbmluZyBsaW5lcyBvZiB0aGUgZmlsZS4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzdGF0ZSBvZiB0aGUgcmVtYWluaW5nIGRhdGEgYW5kIGl0cyBuYXR1cmUuIEkmIzM5O2xsIGJlIGFzc2Vzc2luZyBpdCB0byBpZGVudGlmeSBwYXR0ZXJucywgcG90ZW50aWFsIGFub21hbGllcywgYW5kIHRoZSBvdmVyYWxsIGNvbnRleHQgdGhhdCBjYW4gaW5mb3JtIHRoZSBzdWJzZXF1ZW50IHN0ZXBzLiBUaGlzICYjMzk7cmVtYWluaW5nIGxpbmVzJiMzOTsgc2VjdGlvbiBjb3VsZCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdG8gcHJvY2VlZCB3aXRoIHRoZSBvdmVyYWxsIHRhc2suIEFyZSB0aGVyZSBhbnkgb3Zlcmxvb2tlZCBpc3N1ZXMsIG9yIGlzIHRoaXMgdGhlIGZpbmFsIHBpZWNlIG9mIHRoZSBwdXp6bGU/IFRoZSBpbmZvcm1hdGlvbiBoZXJlIHdpbGwgZGlyZWN0bHkgc2hhcGUgbXkgbmV4dCBkZWNpc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MDA6XHRcbjE1MDE6XHRzdGF0aWMgaW50IGVuODgxMWhfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTUwMjpcdHtcbjE1MDM6XHRcdGNsa19zYXZlX2NvbnRleHQoKTtcbjE1MDQ6XHRcbjE1MDU6XHRcdHJldHVybiBnZW5waHlfc3VzcGVuZChwaHlkZXYpO1xuMTUwNjpcdH1cbjE1MDc6XHRcbjE1MDg6XHRzdGF0aWMgdm9pZCBhbjg4MTFoYl9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjE1MDk6XHR7XG4xNTEwOlx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4xNTExOlx0XG4xNTEyOlx0XHRpZiAocHJpdi1cdTAwM2VwYnVzZGV2KSB7XG4xNTEzOlx0XHRcdG1kaW9fZGV2aWNlX3JlbW92ZShwcml2LVx1MDAzZXBidXNkZXYpO1xuMTUxNDpcdFx0XHRtZGlvX2RldmljZV9mcmVlKHByaXYtXHUwMDNlcGJ1c2Rldik7XG4xNTE1Olx0XHR9XG4xNTE2Olx0fVxuMTUxNzpcdFxuMTUxODpcdHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBlbjg4MTFoX2RyaXZlcltdID0ge1xuMTUxOTpcdHtcbjE1MjA6XHRcdFBIWV9JRF9NQVRDSF9NT0RFTChFTjg4MTFIX1BIWV9JRCksXG4xNTIxOlx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7QWlyb2hhIEVOODgxMUhcJiMzNDssXG4xNTIyOlx0XHQucHJvYmVcdFx0XHQ9IGVuODgxMWhfcHJvYmUsXG4xNTIzOlx0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0gZW44ODExaF9nZXRfZmVhdHVyZXMsXG4xNTI0Olx0XHQuY29uZmlnX2luaXRcdFx0PSBlbjg4MTFoX2NvbmZpZ19pbml0LFxuMTUyNTpcdFx0LmdldF9yYXRlX21hdGNoaW5nXHQ9IGVuODgxMWhfZ2V0X3JhdGVfbWF0Y2hpbmcsXG4xNTI2Olx0XHQuY29uZmlnX2FuZWdcdFx0PSBlbjg4MTFoX2NvbmZpZ19hbmVnLFxuMTUyNzpcdFx0LnJlYWRfc3RhdHVzXHRcdD0gZW44ODExaF9yZWFkX3N0YXR1cyxcbjE1Mjg6XHRcdC5yZXN1bWVcdFx0XHQ9IGVuODgxMWhfcmVzdW1lLFxuMTUyOTpcdFx0LnN1c3BlbmRcdFx0PSBlbjg4MTFoX3N1c3BlbmQsXG4xNTMwOlx0XHQuY29uZmlnX2ludHJcdFx0PSBlbjg4MTFoX2NsZWFyX2ludHIsXG4xNTMxOlx0XHQuaGFuZGxlX2ludGVycnVwdFx0PSBlbjg4MTFoX2hhbmRsZV9pbnRlcnJ1cHQsXG4xNTMyOlx0XHQubGVkX2h3X2lzX3N1cHBvcnRlZFx0PSBlbjg4MTFoX2xlZF9od19pc19zdXBwb3J0ZWQsXG4xNTMzOlx0XHQucmVhZF9wYWdlXHRcdD0gYWlyX3BoeV9yZWFkX3BhZ2UsXG4xNTM0Olx0XHQud3JpdGVfcGFnZVx0XHQ9IGFpcl9waHlfd3JpdGVfcGFnZSxcbjE1MzU6XHRcdC5sZWRfYmxpbmtfc2V0XHRcdD0gYWlyX2xlZF9ibGlua19zZXQsXG4xNTM2Olx0XHQubGVkX2JyaWdodG5lc3Nfc2V0XHQ9IGFpcl9sZWRfYnJpZ2h0bmVzc19zZXQsXG4xNTM3Olx0XHQubGVkX2h3X2NvbnRyb2xfc2V0XHQ9IGFpcl9sZWRfaHdfY29udHJvbF9zZXQsXG4xNTM4Olx0XHQubGVkX2h3X2NvbnRyb2xfZ2V0XHQ9IGFpcl9sZWRfaHdfY29udHJvbF9nZXQsXG4xNTM5Olx0fSxcbjE1NDA6XHR7XG4xNTQxOlx0XHRQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODExSEJfUEhZX0lEKSxcbjE1NDI6XHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtBaXJvaGEgQU44ODExSEJcJiMzNDssXG4xNTQzOlx0XHQucHJvYmVcdFx0XHQ9IGFuODgxMWhiX3Byb2JlLFxuMTU0NDpcdFx0LnJlbW92ZVx0XHRcdD0gYW44ODExaGJfcmVtb3ZlLFxuMTU0NTpcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IGVuODgxMWhfZ2V0X2ZlYXR1cmVzLFxuMTU0NjpcdFx0LmNvbmZpZ19pbml0XHRcdD0gYW44ODExaGJfY29uZmlnX2luaXQsXG4xNTQ3Olx0XHQuZ2V0X3JhdGVfbWF0Y2hpbmdcdD0gZW44ODExaF9nZXRfcmF0ZV9tYXRjaGluZyxcbjE1NDg6XHRcdC5jb25maWdfYW5lZ1x0XHQ9IGVuODgxMWhfY29uZmlnX2FuZWcsXG4xNTQ5Olx0XHQucmVhZF9zdGF0dXNcdFx0PSBlbjg4MTFoX3JlYWRfc3RhdHVzLFxuMTU1MDpcdFx0LnJlc3VtZVx0XHRcdD0gZW44ODExaF9yZXN1bWUsXG4xNTUxOlx0XHQuc3VzcGVuZFx0XHQ9IGVuODgxMWhfc3VzcGVuZCxcbjE1NTI6XHRcdC5jb25maWdfaW50clx0XHQ9IGVuODgxMWhfY2xlYXJfaW50cixcbjE1NTM6XHRcdC5oYW5kbGVfaW50ZXJydXB0XHQ9IGVuODgxMWhfaGFuZGxlX2ludGVycnVwdCxcbjE1NTQ6XHRcdC5sZWRfaHdfaXNfc3VwcG9ydGVkXHQ9IGVuODgxMWhfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbjE1NTU6XHRcdC5yZWFkX3BhZ2VcdFx0PSBhaXJfcGh5X3JlYWRfcGFnZSxcbjE1NTY6XHRcdC53cml0ZV9wYWdlXHRcdD0gYWlyX3BoeV93cml0ZV9wYWdlLFxuMTU1NzpcdFx0LmxlZF9ibGlua19zZXRcdFx0PSBhaXJfbGVkX2JsaW5rX3NldCxcbjE1NTg6XHRcdC5sZWRfYnJpZ2h0bmVzc19zZXRcdD0gYWlyX2xlZF9icmlnaHRuZXNzX3NldCxcbjE1NTk6XHRcdC5sZWRfaHdfY29udHJvbF9zZXRcdD0gYWlyX2xlZF9od19jb250cm9sX3NldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2MzcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1MjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhpbmVzcyBvZiBGdXp6aW5nIHRoZSBhaXJfZW44ODExaC5jIERyaXZlcioqCgpPa2F5LCBzbyBgYWlyX2VuODgxMWguY2AgaXMgYW4gTURJTyBFdGhlcm5ldCBQSFkgZHJpdmVyLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIEkgY2FuIGV2ZW4gKnJlYWNoKiB0aGlzIGRyaXZlciBmb3IgZnV6emluZyBwdXJwb3NlcyB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlLiBDYW4gaXQgYmUgcHJvYmVkIG9yIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSk/CgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgTURJTyBQSFkgZGV2aWNlcyB0eXBpY2FsbHkgd29yayB3aXRoaW4gTGludXgsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byB2aXJ0dWFsaXphdGlvbi4gIFRoZXkgYXR0YWNoIHRvIE1ESU8gYnVzZXMg4oCTIE1JSSAvIE1ESU8gYnVzZXMsIHRvIGJlIHByZWNpc2UuICBBcmUgdGhvc2UgTURJTyBQSFkgZHJpdmVycyBhY2Nlc3NpYmxlIGR1cmluZyBmdXp6aW5nIGV4ZXJjaXNlcyBpbiBRRU1VIG9yIEdDRT8gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4KCkkgbmVlZCB0byBiZSBzdXBlciBjYXJlZnVsIHRvIGZvbGxvdyB0aGUgZ3VpZGVsaW5lcyBmb3IgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0Oy4gIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYXRjaCBJJiMzOTttIGV4YW1pbmluZyBkb2VzbiYjMzk7dCBmYWxsIHVuZGVyIHRoZXNlIGRpc3F1YWxpZmljYXRpb25zOiBkb2N1bWVudGF0aW9uIGNoYW5nZXMsIGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIGNvc21ldGljIGNoYW5nZXMgdG8gY29uc3RhbnRzLCBjb2RlIHBhdGhzIHRoYXQgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIHNldHVwcyAoZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbiwgbGlrZSBVU0IgZ2FkZ2V0IG9yIG1hYzgwMjExX2h3c2ltKSwgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyIGNvZGUgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGNhcmRzLCBvciBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aG9zZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLgoKU28sIGhvdyBkb2VzIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgZ2V0IHByb2JlZCBpbiB0aGUgZmlyc3QgcGxhY2U/IEl0IHNlZW1zIHRoYXQgUEhZIGRyaXZlcnMgZ2V0IHByb2JlZCB3aGVuIHRoZSBrZXJuZWwgZGlzY292ZXJzIGEgUEhZIGRldmljZSB3aXRoIHRoZSByaWdodCBQSFkgSUQgb24gYW4gTURJTyBidXMsIG9yIG1heWJlIHRocm91Z2ggTURJTyBidXMgcHJvYmluZywgRGV2aWNlIFRyZWUgKERUKSwgb3IgcGxhdGZvcm0gc2V0dXAuIENydWNpYWxseSwgY2FuIHRoZXNlIE1ESU8gUEhZcyBiZSAqaW5zdGFudGlhdGVkKiBvciBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCAqd2l0aG91dCogcmVhbCBoYXJkd2FyZT8KCkkgaGF2ZSB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBraW5kIG9mIHZpcnR1YWwgb3IgbW9jayBNRElPIGJ1cyBpbXBsZW1lbnRhdGlvbiBpbiBRRU1VLCBvciBtYXliZSBzb21ldGhpbmcgbGlrZSBhIFVTQi10by1NRElPIGJyaWRnZSB0aGF0IHdvdWxkIGFsbG93IG1lIHRvIHNpbXVsYXRlIGhhcmR3YXJlIGludGVyYWN0aW9uLiBEb2VzIHN5emthbGxlciBvZmZlciBhIHdheSB0byBjcmVhdGUgYSBQSFkgZGV2aWNlIG9yIE1ESU8gZGV2aWNlPyBUaGlzIGlzIHdoYXQgSSBuZWVkIHRvIGNoZWNrLiAgSSBuZWVkIHRvIGNoZWNrIGhvdyBtZGlvYnVzIGFuZCBwaHkgZGV2aWNlcyBhcmUgaGFuZGxlZC4gVGltZSB0byBncmVwIHRoZSBrZXJuZWwgc291cmNlIGZvciBrZXl3b3JkcyBsaWtlICYjMzQ7bWRpbyYjMzQ7LCAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXImIzM0OywgYW5kICYjMzQ7bWRpb2J1c19yZWdpc3RlciYjMzQ7IHRvIHNlZSB3aGF0JiMzOTtzIHBvc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvYnVzX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEwMTggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9NjA3PXN0YXRpYyBpbnQgYmNtX3NmMl9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4My1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6Njg0Olx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM9MTg3PXN0YXRpYyBpbnQgZ3N3aXBfbWRpbyhzdHJ1Y3QgZ3N3aXBfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTMtXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYzoyMTQ6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTMyMT1zdGF0aWMgaW50IGtzejk0NzdfcGNzX2NyZWF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0MS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM0MjpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlZGV2LCBidXMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0yMzIxPWludCBrc3pfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTItXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMzkzOlx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz02ODU9c3RhdGljIGludCBsYW45Mzd4X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1NS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6NzU2Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjQwOT1tdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0NDQtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjQ0NTpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNDQ2LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYz0yNDI9c3RhdGljIGludCBtdDc2Mjhfc2V0dXBfaW50ZXJuYWxfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jLTI2MS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzoyNjI6XHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy0yNjMtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM4MzQ9c3RhdGljIGludCBtdjg4ZTZ4eHhfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4Ny1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjM4ODg6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4OS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjc9c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTItXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyOTM6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjk0LVx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9MTQ5PXN0YXRpYyBpbnQgbmV0Y19wb3J0X2NyZWF0ZV9lbWRpb19idXMoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMTc5LVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6MTgwOlx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE4MS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9OTU3PXN0YXRpYyBpbnQgdnNjOTk1OV9tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxMy1cdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MTAxNDpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxNS1cdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM9ODc4PXN0YXRpYyBpbnQgdnNjOTk1M19tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDMtXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM6OTA0Olx0cmMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDUtXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jPTM1Nz1zdGF0aWMgaW50IGFyOTMzMV9zd19tYnVzX2luaXQoc3RydWN0IGFyOTMzMV9zd19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtMzgxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzozODI6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODMtXHRvZl9ub2RlX3B1dChtbnApO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTk0Nz1xY2E4a19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk4Ni1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk4NzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpbyk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODgtXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc0PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTk5LVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEwMDpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMDEtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYz0xMTE3PXN0YXRpYyBpbnQgYTVwc3dfcHJvYmVfbWRpbyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQzLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzoxMTQ0Olx0cmV0dXJuIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDUtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaD0zMDc9dm9pZCBzamExMTA1X2ZyYW1lX21lbW9yeV9wYXJ0aXRpb25pbmcoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMwOS0vKiBGcm9tIHNqYTExMDVfbWRpby5jICovXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg6MzEwOmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0zMTEtdm9pZCBzamExMTA1X21kaW9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jPTMwMjY9c3RhdGljIGludCBzamExMTA1X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY3LVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM6MzA2ODpcdHJjID0gc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjktXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0yNTg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90eF9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4Ny1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjI4ODpcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4OS1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTMxMj1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3QxX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQzLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6MzQ0Olx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQ1LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5NS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjM5NjpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk3LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9NDM5PXN0YXRpYyB2b2lkIHNqYTExMDVfbWRpb2J1c19wY3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ1OC1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQ1OTppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ2MC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jPTU5NT15dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTItXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6NjEzOlx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTQtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz03MjY9eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbi0tXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNzQzLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjc0NDpcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNzQ1LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYz00NTk9c3RhdGljIGludCBheF9taWlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jOjQ3OTpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXgtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy00ODAtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYz0xMzIxPXN0YXRpYyBpbnQgb3dsX2VtYWNfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM6MTM0NjpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXHUwMDNlbWlpLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM9NTA5PXN0YXRpYyBpbnQgYWRpbjExMTBfcmVnaXN0ZXJfbWRpb2J1cyhzdHJ1Y3QgYWRpbjExMTBfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYy01MjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYzo1MzA6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUzMS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmM9NjE3PXN0YXRpYyBpbnQgYWRpbjExNDBfbWRpb19yZWdpc3RlcihzdHJ1Y3QgYWRpbjExNDBfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02MzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYzo2Mzc6XHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNnNwaWRldi1cdTAwM2VkZXYsIHByaXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02MzgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmM9MTI5MD1zdGF0aWMgaW50IGdyZXRoX21kaW9faW5pdChzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYzoxMzA3Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihncmV0aC1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmMtMTMwOC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYz0zOTMxPXN0YXRpYyBpbnQgZXQxMzF4X3BjaV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM6NDAyNzpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihhZGFwdGVyLVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmMtNDAyOC1cdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYz0xMjE9c3RhdGljIGludCBhbHRlcmFfdHNlX21kaW9fY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jOjE1ODpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTktXHRpZiAocmV0ICE9IDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jPTEwNjE9c3RhdGljIGludCBhdTEwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jLTEyMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jOjEyMjI6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGF1cC1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMy1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTM0Mjg9c3RhdGljIGludCB4Z2JlX3BoeV9pbml0KHN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MTctXHRzbnByaW50ZihtaWktXHUwMDNlaWQsIHNpemVvZihtaWktXHUwMDNlaWQpLCBcJiMzNDslc1wmIzM0OywgZGV2X25hbWUocGRhdGEtXHUwMDNlZGV2KSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjM3MTg6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1paSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MTktXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjM3MjA6XHRcdGRldl9lcnIocGRhdGEtXHUwMDNlZGV2LCBcJiMzNDttZGlvYnVzX3JlZ2lzdGVyIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MjEtXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYz05OD1pbnQgeGdlX21kaW9fY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmMtMTE4LVx0bWRpb19idXMtXHUwMDNlcGh5X21hc2sgPSAweDE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jOjExOTpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMjAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM9ODM3PWludCB4Z2VuZV9lbmV0X3BoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtODg3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo4ODg6c3RhdGljIGludCB4Z2VuZV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtODg5LVx0XHRcdFx0ICBzdHJ1Y3QgbWlpX2J1cyAqbWRpbylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTEzOlx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MTQtXHRcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIxLVx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjkyMjpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpbyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkyMy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz05Mzk9aW50IHhnZW5lX2VuZXRfbWRpb19jb25maWcoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5NTg6XHRyZXQgPSB4Z2VuZV9tZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLCBtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTk1OS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM9MTMxPWludCBhcmNfbWRpb19wcm9iZShzdHJ1Y3QgYXJjX2VtYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmMtMTcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jOjE3MzpcdGVycm9yID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmMtMTc0LVx0b2Zfbm9kZV9wdXQobWRpb19ub2RlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYz05NjY9c3RhdGljIGludCBheDg4Nzk2Y19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwMTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYzoxMDExOlx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNnNwaS1cdTAwM2VkZXYsIGF4X2xvY2FsLVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jPTY4Nz1zdGF0aWMgaW50IGFnNzF4eF9tZGlvX3Byb2JlKHN0cnVjdCBhZzcxeHggKmFnKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNzI3LVx0bW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW9cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYzo3Mjg6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtaWlfYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjktXHRvZl9ub2RlX3B1dChtbnApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIyMzQ9c3RhdGljIGludCBiNDRfcmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjI2MDpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIobWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjYxLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jPTE3MTM9c3RhdGljIGludCBiY21fZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYzoxODMwOlx0XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYy0xODMxLVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmM9MjExPXN0cnVjdCBtaWlfYnVzICpiY21hX21kaW9fbWlpX3JlZ2lzdGVyKHN0cnVjdCBiZ21hYyAqYmdtYWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmMtMjM1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmM6MjM2Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzctXHRvZl9ub2RlX3B1dChucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9MTkzPWludCBiY21nZW5ldF9taWlfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgaW5pdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0yMzMtXHRcdHBoeV9uYW1lID0gXCYjMzQ7ZXh0ZXJuYWwgUnZNSUlcJiMzNDs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoyMzQ6XHRcdC8qIG9mX21kaW9idXNfcmVnaXN0ZXIgdG9vayBjYXJlIG9mIHJlYWRpbmcgdGhlICYjMzk7bWF4LXNwZWVkJiMzOTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzNS1cdFx0ICogUEhZIHByb3BlcnR5IGZvciB1cywgZWZmZWN0aXZlbHkgbGltaXRpbmcgdGhlIFBIWSBzdXBwb3J0ZWRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM9MjE1Nz1zdGF0aWMgaW50IHNibWFjX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxkZXYsIGxvbmcgbG9uZyBiYXNlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI3LVx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM6MjIyODpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoc2MtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMjIyOS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYz0xNTA1PXN0YXRpYyBpbnQgdGczX21kaW9faW5pdChzdHJ1Y3QgdGczICp0cClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYy0xNTU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM6MTU1ODpcdGkgPSBtZGlvYnVzX3JlZ2lzdGVyKHRwLVx1MDAzZW1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTktXHRpZiAoaSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTAyMz1zdGF0aWMgaW50IG1hY2JfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDk2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMDk3OnN0YXRpYyBpbnQgbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtYWNiICpicCwgc3RydWN0IGRldmljZV9ub2RlICptZGlvX25wKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDk4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMDQtXHRpZiAobWRpb19ucClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTEwNTpcdFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXHUwMDNlbWlpX2J1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMDYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTE5Olx0XHRcdHJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJwLVx1MDAzZW1paV9idXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMC1cdFx0fVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTIyOlx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnAtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTEyNT1zdGF0aWMgaW50IG1hY2JfbWlpX2luaXQoc3RydWN0IG1hY2IgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE1OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTE1OTpcdGVyciA9IG1hY2JfbWRpb2J1c19yZWdpc3RlcihicCwgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNjAtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM9MTEwNz1zdGF0aWMgaW50IGRtOTA1MV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBib2FyZF9pbmZvICpkYilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jLTExMjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jOjExMjU6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2c3BpLVx1MDAzZWRldiwgZGItXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jLTExMjYtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYz0yNDIzPXN0YXRpYyBpbnQgdHNuZXBfbWRpb19pbml0KHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0yNDU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjI0NTU6XHRyZXR2YWwgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXHUwMDNlbWRpb2J1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYz0xMDI0PXN0YXRpYyBpbnQgZXRob2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jLTEyMDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jOjEyMDg6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jLTEyMDktXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz0xNzM0PXN0YXRpYyBpbnQgZnRnbWFjMTAwX3NldHVwX21kaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3NjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE3NzA6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VkZXYsIHByaXYtXHUwMDNlbWlpX2J1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3NzEtXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYz0zNj1zdGF0aWMgaW50IGVuZXRjX3BjaV9tZGlvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jLTkwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmM6OTE6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgZGV2LVx1MDAzZW9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTItXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0yNjY9c3RhdGljIGludCBlbmV0Y19tZGlvX3Byb2JlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTI5Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzoyOTM6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTI5NC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTMwOD1zdGF0aWMgaW50IGVuZXRjX2ltZGlvX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zNDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MzQzOlx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTM0NC1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz0zMDQyPXN0YXRpYyBpbnQgZmVjX2VuZXRfbWlpX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzE2MTpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZmVwLVx1MDAzZW1paV9idXMsIG5vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzE2Mi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jPTY1PXN0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmMtMTA1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jOjEwNjpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmMtMTA3LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jPTE0OT1zdGF0aWMgaW50IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE3NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM6MTc2Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE3Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jPTk3PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM6MTY3Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmMtMTY4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYz00MDk9c3RhdGljIGludCBmc2xfcHFfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTQ5My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jOjQ5NDpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDk1LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM9MzcxPXN0YXRpYyBpbnQgeGdtYWNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDI2LVx0aWYgKGlzX29mX25vZGUoZndub2RlKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI3Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgdG9fb2Zfbm9kZShmd25vZGUpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDI4LVx0ZWxzZSBpZiAoaXNfYWNwaV9ub2RlKGZ3bm9kZSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jOjQyOTpcdFx0cmV0ID0gYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgZndub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDMwLVx0ZWxzZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjY2PWludCBoYmdfbWRpb19pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjkyOlx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yOTMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYz0xMDk0PXN0YXRpYyBpbnQgaGl4NWhkMl9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYzoxMTg2Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jLTExODctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmM9MTIzPWludCBoY2xnZV9tYWNfbWRpb19jb25maWcoc3RydWN0IGhjbGdlX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTE1NC1cdG1kaW9fYnVzLVx1MDAzZXBoeV9tYXNrID0gfigxVSBcdTAwM2NcdTAwM2MgbWFjLVx1MDAzZXBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmM6MTU1Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTE1Ni1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYz00OTU9c3RhdGljIGludCBobnNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU4My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jOjU4NDpcdFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBwZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU4NS1cdH0gZWxzZSBpZiAoaXNfYWNwaV9ub2RlKHBkZXYtXHUwMDNlZGV2LmZ3bm9kZSkpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTItXHRcdC8qIFJlZ2lzdGVyIHRoZSBNRElPIGJ1cyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTkzOlx0XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTk0LVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmM9MjU2MD1zdGF0aWMgaW50IGVtYWNfZHRfbWRpb19wcm9iZShzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg0LVx0c25wcmludGYoYnVzLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0OyVzXCYjMzQ7LCBkZXYtXHUwMDNlb2ZkZXYtXHUwMDNlbmFtZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmM6MjU4NTpcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihcdTAwMjZkZXYtXHUwMDNlb2ZkZXYtXHUwMDNlZGV2LCBidXMsIG1paV9ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMtMjU4Ni1cdGlmIChyZXMpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYz0xMDI2PWludCBpeGdiZV9taWlfYnVzX2luaXQoc3RydWN0IGl4Z2JlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0xMDg4LVx0YWRhcHRlci1cdTAwM2VtaWlfYnVzID0gYnVzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MTA4OTpcdHJldHVybiBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0xMDkwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jPTM4NT1sdHFfZXRvcF9tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTQwMi1cdFx0IHByaXYtXHUwMDNlcGRldi1cdTAwM2VuYW1lLCBwcml2LVx1MDAzZXBkZXYtXHUwMDNlaWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYzo0MDM6XHRpZiAobWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1paV9idXMpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTQwNC1cdFx0ZXJyID0gLUVOWElPO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM9MjgzPXN0YXRpYyBpbnQgb3Jpb25fbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzgxLVx0LyogRm9yIHRoZSBwbGF0Zm9ybXMgbm90IHN1cHBvcnRpbmcgRFQvQUNQSSBmYWxsLWJhY2tcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6MzgyOlx0ICogdG8gbWRpb2J1c19yZWdpc3RlciB2aWEgb2ZfbWRpb2J1c19yZWdpc3Rlci5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzgzLVx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4NC1cdGlmIChpc19hY3BpX25vZGUocGRldi1cdTAwM2VkZXYuZndub2RlKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6Mzg1Olx0XHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBwZGV2LVx1MDAzZWRldi5md25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODYtXHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4NzpcdFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODgtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM9MTM4Nz1zdGF0aWMgaW50IHB4YTE2OF9ldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy0xNTA0LVx0cGVwLVx1MDAzZXNtaV9idXMtXHUwMDNlcGh5X21hc2sgPSAweGZmZmZmZmZmO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM6MTUwNTpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIocGVwLVx1MDAzZXNtaV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmMtMTUwNi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz05OTg9c3RhdGljIGludCBtdGtfbWRpb19pbml0KHN0cnVjdCBtdGtfZXRoICpldGgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy0xMDM3LVx0ZGV2X2RiZyhldGgtXHUwMDNlZGV2LCBcJiMzNDtNREMgaXMgcnVubmluZyBvbiAlZCBIelxcblwmIzM0OywgTURDX01BWF9GUkVRIC8gZXRoLVx1MDAzZW1kY19kaXZpZGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM6MTAzODpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZXRoLVx1MDAzZW1paV9idXMsIG1paV9ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jPTE0MjI9c3RhdGljIGludCBtdGtfc3Rhcl9tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTE0NDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM6MTQ0ODpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXHUwMDNlbWlpLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTE0NDktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYz0yODc9aW50IG1seGJmX2dpZ2VfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgbWx4YmZfZ2lnZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmM6MzMzOlx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYy0zMzQtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jPTI1Mz1pbnQgZmJuaWNfbWRpb2J1c19jcmVhdGUoc3RydWN0IGZibmljX2RldiAqZmJkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jLTI3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jOjI3MzpcdGVyciA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihmYmQtXHUwMDNlZGV2LCBidXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmMtMjc0LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmM9MTAzNj1zdGF0aWMgaW50IGtzODg1MV9yZWdpc3Rlcl9tZGlvYnVzKHN0cnVjdCBrczg4NTFfbmV0ICprcywgc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmM6MTA1MzpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNTQtXHRpZiAocmV0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYzoxMDU1Olx0XHRnb3RvIGVycl9tZGlvYnVzX3JlZ2lzdGVyO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYy0xMDU2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA2MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmM6MTA2MTplcnJfbWRpb2J1c19yZWdpc3RlcjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA2Mi1cdG1kaW9idXNfZnJlZShtaWlfYnVzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM9MTM3OT1zdGF0aWMgaW50IGxhbjc0M3hfaHdfcmVzZXRfcGh5KHN0cnVjdCBsYW43NDN4X2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jLTEzODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM6MTM4MzpcdC8qIE9ubHkgY2FsbGVkIHdpdGggaW4gcHJvYmUsIGFuZCBiZWZvcmUgbWRpb2J1c19yZWdpc3RlciAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jLTEzODQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jPTM2Mjg9c3RhdGljIGludCBsYW43NDN4X21kaW9idXNfaW5pdChzdHJ1Y3QgbGFuNzQzeF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zNjcxLVx0LyogcmVnaXN0ZXIgbWRpb2J1cyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jOjM2NzI6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmMtMzY3My1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmkvbml4Z2UuYz0xMjEyPXN0YXRpYyBpbnQgbml4Z2VfbWRpb19zZXR1cChzdHJ1Y3Qgbml4Z2VfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uaS9uaXhnZS5jLTEyMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uaS9uaXhnZS5jOjEyMzE6XHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25pL25peGdlLmMtMTIzMi19XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjIyCgkJCQkJCQlvdXRwdXQ6IDU3CgkJCQkJCQl0aG91Z2h0czogNjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1ESU8gUEhZIERyaXZlcnMgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYWlyX2VuODgxMWguY2AsIGFuIEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBhbmQgQU44ODExSEIgY2hpcHMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHRoaXMgYmUgZWZmZWN0aXZlbHkgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgZ3VpZGVsaW5lcy4gTGV0IG1lIHJlLXJlYWQgdGhvc2UgcXVpY2tseS4uLiByaWdodCwgaWYgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGluYWNjZXNzaWJsZSBoYXJkd2FyZSwgaXQmIzM5O3Mgbm90IHdvcnRoIGZ1enppbmcuCgpMZXQmIzM5O3Mgc2VlLCB3aGF0IGlzIHRoZSBwcm9iZSBmbG93PyBUaGlzIGRyaXZlciwgbGlrZSBhbnkgTURJTyBQSFkgZHJpdmVyLCBpcyBib3VuZCB0byBhIHNwZWNpZmljIE1ESU8gYnVzLiBJdCByZWxpZXMgb24gdGhlIGBtZGlvX2J1c190eXBlYCBtYXRjaCwgbWVhbmluZyB0aGUgc3lzdGVtIGhhcyB0byBoYXZlIGEgcmVhbCBNRElPIGJ1cy4gRHVyaW5nIHRoZSBidXMgc2Nhbm5pbmcsIGl0IHJlYWRzIHRoZSBNRElPX0RFVklEMSBhbmQgTURJT19ERVZJRDIgcmVnaXN0ZXJzIChyZWdpc3RlcnMgMiBhbmQgMykgZnJvbSB0aGUgUEhZLiBJdCB0aGVuIGNvbXBhcmVzIHRob3NlIHZhbHVlcyB0byB0aGUgSURzIGluIGl0cyBgcGh5X2RldmljZV9pZGAgdGFibGUuIEluIHRoaXMgY2FzZSwgdGhhdCYjMzk7cyBsb29raW5nIGZvciBgRU44ODExSF9QSFlfSURgIGFuZCBgQU44ODExSEJfUEhZX0lEYC4gRm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyIHRvIGV2ZW4gKnByb2JlKiBzdWNjZXNzZnVsbHkgYW5kIHJ1biBpdHMgYGVuODgxMWhfcHJvYmVgIG9yIGBhbjg4MTFoYl9wcm9iZWAgZnVuY3Rpb25zIGFuZCwgZXZlbnR1YWxseSwgYGFpcl93cml0ZV9idWZgLCBhICpyZWFsKiBBaXJvaGEgRU44ODExSC9BTjg4MTFIQiBjaGlwIG5lZWRzIHRvIGJlIHBoeXNpY2FsbHkgcHJlc2VudCBvbiBhbiBNRElPIGJ1cy4gVGhlIGNvZGUgcmVhZHMgYW5kIHdyaXRlcyByZWdpc3RlcnMgdmlhIE1ESU8gZHVyaW5nIHRoZSBwcm9iZSwgYW5kIGl0IHRyaWVzIHRvIGxvYWQgZmlybXdhcmUgaW50byB0aGUgY2hpcCYjMzk7cyBNQ1UuCgpUaGUgaXNzdWUgaXMgdGhhdCBzdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBjaGlwIG9yIGFuIEFpcm9oYSBNRElPIGNvbnRyb2xsZXIuIFRoZXJlJiMzOTtzIG5vIGVtdWxhdGlvbiwgbm8gbW9jaywgbm90aGluZyBpbiBzeXprYWxsZXIgb3IgUUVNVSB0aGF0IHdvdWxkIHJlc3BvbmQgdG8gdGhlIHZlcnkgc3BlY2lmaWMgcHJvcHJpZXRhcnkgJiMzNDtidWNrcGJ1cyYjMzQ7IHJlZ2lzdGVyIHByb3RvY29sIHVzZWQgYnkgdGhpcyBjaGlwLiBUaGF0JiMzOTtzIGEgaHVnZSBibG9ja2VyLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcy4uLmlzIHRoZXJlICphbnkqIHdheSB0byBzaW11bGF0ZSBvciBwcm92aWRlIGEgJiMzNDtmYWtlJiMzNDsgTURJTyBidXMgb3IgUEhZIHdpdGhpbiBRRU1VIHRoYXQgbWlnaHQgbGV0IHVzIHRyaWNrIGl0PyBQZXJoYXBzIGEgVVNCLXRvLU1ESU8gZ2FkZ2V0LCBvciBzb21lIGtpbmQgb2YgbW9jayBNRElPIFBIWT8gSSYjMzk7bGwgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yICYjMzQ7ZHVtbXkmIzM0OyBvciAmIzM0O21vY2smIzM0OyBNRElPIGltcGxlbWVudGF0aW9ucyB0byBzZWUgaWYgYW55dGhpbmcgZXZlbiByZW1vdGVseSBzdWl0YWJsZSBleGlzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vY2suKm1kaW98ZHVtbXkuKm1kaW98bWRpby4qbW9ja3xtZGlvLipkdW1teXxtZGlvLip0ZXN0fG1kaW8tZ3Bpb3xtZGlvLWJpdGJhbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jOjIzOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8tYml0YmFuZy5oXHUwMDNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy0yNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM6MjA6I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby1iaXRiYW5nLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMjEtI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfYWRkcmVzcy5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYz0yMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZnNfZW5ldF9tZGlvX2JiX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTIwNC1cdHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM6MjA1Olx0XHQuY29tcGF0aWJsZSA9IFwmIzM0O2ZzbCxjcG0yLW1kaW8tYml0YmFuZ1wmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMjA2LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaC0xNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmg6MTc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby1iaXRiYW5nLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYy0xOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYzoxOTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLWJpdGJhbmcuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYy0yMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuYz0yOTY9dTggZWY0X21kaW9fZ2V0X3BhdXNlKHN0cnVjdCBlZjRfbmljICplZngpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9tZGlvXzEwZy5jLTMwOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuYzozMTA6aW50IGVmNF9tZGlvX3Rlc3RfYWxpdmUoc3RydWN0IGVmNF9uaWMgKmVmeClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuYy0zMTEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuaD05OT1lZjRfbWRpb19zZXRfZmxhZyhzdHJ1Y3QgZWY0X25pYyAqZWZ4LCBpbnQgZGV2YWQsIGludCBhZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuaC0xMDUtLyogTGl2ZW5lc3Mgc2VsZi10ZXN0IGZvciBNRElPIFBIWXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuaDoxMDY6aW50IGVmNF9tZGlvX3Rlc3RfYWxpdmUoc3RydWN0IGVmNF9uaWMgKmVmeCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL21kaW9fMTBnLmgtMTA3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vcXQyMDJ4X3BoeS5jPTQ4MT1jb25zdCBzdHJ1Y3QgZWY0X3BoeV9vcGVyYXRpb25zIGZhbGNvbl9xdDIwMnhfcGh5X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3F0MjAyeF9waHkuYy00ODktXHQuc2V0X2xpbmtfa3NldHRpbmdzID0gZWY0X21kaW9fc2V0X2xpbmtfa3NldHRpbmdzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9xdDIwMnhfcGh5LmM6NDkwOlx0LnRlc3RfYWxpdmVcdCA9IGVmNF9tZGlvX3Rlc3RfYWxpdmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3F0MjAyeF9waHkuYy00OTEtXHQuZ2V0X21vZHVsZV9lZXByb20gPSBxdDIwMnhfcGh5X2dldF9tb2R1bGVfZWVwcm9tLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vdGVueHByZXNzLmM9NDc4PWNvbnN0IHN0cnVjdCBlZjRfcGh5X29wZXJhdGlvbnMgZmFsY29uX3NmeDcxMDFfcGh5X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3RlbnhwcmVzcy5jLTQ4Ny1cdC5zZXRfbnBhZ2VfYWR2ICAgID0gc2Z4NzEwMV9zZXRfbnBhZ2VfYWR2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi90ZW54cHJlc3MuYzo0ODg6XHQudGVzdF9hbGl2ZVx0ICA9IGVmNF9tZGlvX3Rlc3RfYWxpdmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3RlbnhwcmVzcy5jLTQ4OS1cdC50ZXN0X25hbWVcdCAgPSBzZng3MTAxX3Rlc3RfbmFtZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3R4YzQzMTI4X3BoeS5jPTU0Nj1jb25zdCBzdHJ1Y3QgZWY0X3BoeV9vcGVyYXRpb25zIGZhbGNvbl90eGNfcGh5X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3R4YzQzMTI4X3BoeS5jLTU1NC1cdC5zZXRfbGlua19rc2V0dGluZ3MgPSBlZjRfbWRpb19zZXRfbGlua19rc2V0dGluZ3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3R4YzQzMTI4X3BoeS5jOjU1NTpcdC50ZXN0X2FsaXZlXHQ9IGVmNF9tZGlvX3Rlc3RfYWxpdmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3R4YzQzMTI4X3BoeS5jLTU1Ni1cdC5ydW5fdGVzdHNcdD0gdHhjNDMxMjhfcnVuX3Rlc3RzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM9MzgxPWludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNDE2LVx0ICogSXQgZG9lc24mIzM5O3QgY29tcGxldGUgaXRzIHJlc2V0IHVudGlsIGF0IGxlYXN0IG9uZSBjbG9jayBjeWNsZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo0MTc6XHQgKiBvbiBNREMsIHNvIHBlcmZvcm0gYSBkdW1teSBtZGlvIHJlYWQuIFRvIGJlIHVwZGF0ZWQgZm9yIEdNQUM0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTQxOC1cdCAqIGlmIG5lZWRlZC5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX21kaW8uYy0yNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9waW5jdHJsL2NvbnN1bWVyLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2RhdmluY2lfbWRpby5jOjI4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8tYml0YmFuZy5oXHUwMDNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX21kaW8uYy0yOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNfc29jLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc9OTA9Y29uZmlnIE1ESU9fR1BJT1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy05Ny1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjk4Olx0ICB3aWxsIGJlIGNhbGxlZCBtZGlvLWdwaW8uXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctOTktXG4tLVxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0xMT1vYmotJChDT05GSUdfTURJT19CQ01fVU5JTUFDKVx0XHQmIzQzOz0gbWRpby1iY20tdW5pbWFjLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX01ESU9fQklUQkFORylcdFx0JiM0Mzs9IG1kaW8tYml0YmFuZy5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19NRElPX0NBVklVTSlcdFx0JiM0Mzs9IG1kaW8tY2F2aXVtLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX01ESU9fR1BJTylcdFx0XHQmIzQzOz0gbWRpby1ncGlvLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtMTUtb2JqLSQoQ09ORklHX01ESU9fSElTSV9GRU1BQylcdFx0JiM0Mzs9IG1kaW8taGlzaS1mZW1hYy5vXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJpdGJhbmcuYy0xNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYml0YmFuZy5jOjE4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8tYml0YmFuZy5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYml0YmFuZy5jLTE5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0yMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYzoyMjojaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLWJpdGJhbmcuaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0yMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmM9MTU3PXN0YXRpYyBpbnQgbWRpb19ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0xNzEtXHRpZiAocGRldi1cdTAwM2VkZXYub2Zfbm9kZSkge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYzoxNzI6XHRcdGJ1c19pZCA9IG9mX2FsaWFzX2dldF9pZChwZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcJiMzNDttZGlvLWdwaW9cJiMzNDspO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0xNzMtXHRcdGlmIChidXNfaWQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jPTE5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtZGlvX2dwaW9fb2ZfbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmM6MTk4Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3ZpcnR1YWwsbWRpby1ncGlvXCYjMzQ7LCB9LFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0xOTktXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWljcm9jaGlwLG1kaW8tc21pMFwmIzM0OyB9LFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmM9MjA0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1kaW9fZ3Bpb19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0yMDctXHQuZHJpdmVyXHRcdD0ge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYzoyMDg6XHRcdC5uYW1lXHQ9IFwmIzM0O21kaW8tZ3Bpb1wmIzM0OyxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmMtMjA5LVx0XHQub2ZfbWF0Y2hfdGFibGUgPSBtZGlvX2dwaW9fb2ZfbWF0Y2gsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYz0yMTM9bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtZGlvX2dwaW9fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmMtMjE0LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYzoyMTU6TU9EVUxFX0FMSUFTKFwmIzM0O3BsYXRmb3JtOm1kaW8tZ3Bpb1wmIzM0Oyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jLTIxNi1NT0RVTEVfQVVUSE9SKFwmIzM0O0xhdXJlbnQgUGluY2hhcnQsIFBhdWxpdXMgWmFsZWNrYXNcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE5ODU9c3RhdGljIHZvaWQgcjgxNTJfbWRpb19zZXRfYml0KHN0cnVjdCByODE1MiAqdHAsIHUxNiBhZGRyLCB1MTYgc2V0KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE5OTItXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxOTkzOnN0YXRpYyBpbnQgcjgxNTJfbWRpb190ZXN0X2FuZF9jbHJfYml0KHN0cnVjdCByODE1MiAqdHAsIHUxNiBhZGRyLCB1MTYgY2xlYXIpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xOTk0LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz03MjEyPXN0YXRpYyB2b2lkIHI4MTUyYl9pbml0KHN0cnVjdCByODE1MiAqdHApXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzIxOC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjcyMTk6XHRyODE1Ml9tZGlvX3Rlc3RfYW5kX2Nscl9iaXQodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTcyMjAtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NzI0Nj1zdGF0aWMgdm9pZCByODE1M19pbml0KHN0cnVjdCByODE1MiAqdHApXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzI3MS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjcyNzI6XHRyODE1Ml9tZGlvX3Rlc3RfYW5kX2Nscl9iaXQodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTcyNzMtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NzM2Mz1zdGF0aWMgdm9pZCByODE1M2JfaW5pdChzdHJ1Y3QgcjgxNTIgKnRwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTczODMtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo3Mzg0Olx0cjgxNTJfbWRpb190ZXN0X2FuZF9jbHJfYml0KHRwLCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy03Mzg1LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTc0MzM9c3RhdGljIHZvaWQgcjgxNTNjX2luaXQoc3RydWN0IHI4MTUyICp0cClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy03NDYwLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NzQ2MTpcdHI4MTUyX21kaW9fdGVzdF9hbmRfY2xyX2JpdCh0cCwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzQ2Mi1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz03NzE2PXN0YXRpYyB2b2lkIHI4MTU2Yl9od19waHlfY2ZnKHN0cnVjdCByODE1MiAqdHApXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzc1NC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjc3NTU6XHRyODE1Ml9tZGlvX3Rlc3RfYW5kX2Nscl9iaXQodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTc3NTYtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9Nzk3NT1zdGF0aWMgdm9pZCByODE1N19od19waHlfY2ZnKHN0cnVjdCByODE1MiAqdHApXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzk5Ni1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjc5OTc6XHRyODE1Ml9tZGlvX3Rlc3RfYW5kX2Nscl9iaXQodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTc5OTgtXG4tLVxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1MDE4LmM9Njc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNtX3Bpbmdyb3VwIGlwcTUwMThfZ3JvdXBzW10gPSB7XG4tLVxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1MDE4LmMtNzE1LVx0UElOR1JPVVAoMzYsIG1kYywgcWRzc190cmFjZWRhdGFfYiwgXywgd3NpX2NsazMsIF8sIF8sIF8sIF8sIF8pLFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1MDE4LmM6NzE2Olx0UElOR1JPVVAoMzcsIG1kaW8sIGF0ZXN0X2NoYXIsIHFkc3NfdHJhY2VkYXRhX2IsIF8sIHdzaV9kYXRhMywgXywgXywgXywgXyksXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTUwMTguYy03MTctXHRQSU5HUk9VUCgzOCwgcWRzc190cmFjZWRhdGFfYiwgXywgXywgXywgXywgXywgXywgXywgXyksXG4tLVxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1NDI0LmM9NzEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNtX3Bpbmdyb3VwIGlwcTU0MjRfZ3JvdXBzW10gPSB7XG4tLVxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1NDI0LmMtNzM0LVx0UElOR1JPVVAoMjAsIG1kY19zbHYsIGF0ZXN0X2NoYXIwLCBfLCBxZHNzX3RyYWNlZGF0YV9hLCBfLCBfLCBfLCBfLCBfKSxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxNTQyNC5jOjczNTpcdFBJTkdST1VQKDIxLCBtZGlvX3NsdiwgYXRlc3RfY2hhcjEsIF8sIHFkc3NfdHJhY2VkYXRhX2EsIF8sIF8sIF8sIF8sIF8pLFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1NDI0LmMtNzM2LVx0UElOR1JPVVAoMjIsIG1kY19tc3QsIGF0ZXN0X2NoYXIyLCBfLCBfLCBfLCBfLCBfLCBfLCBfKSxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxNTQyNC5jOjczNzpcdFBJTkdST1VQKDIzLCBtZGlvX21zdCwgYXRlc3RfY2hhcjMsIF8sIF8sIF8sIF8sIF8sIF8sIF8pLFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1NDI0LmMtNzM4LVx0UElOR1JPVVAoMjQsIHBjaWUwX2NsaywgUFRBMTAsIG1hYzAsIF8sIHdzaV9jbGssIF8sIGF0ZXN0X2NoYXIsIHFkc3NfY3RpX3RyaWdfb3V0X2EwLCBfKSxcbi0tXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTk2NTAuYz02NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtc21fcGluZ3JvdXAgaXBxOTY1MF9ncm91cHNbXSA9IHtcbi0tXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTk2NTAuYy02ODUtXHRbMjBdID0gUElOR1JPVVAoMjAsIG1kY19zbHYwLCBxdXBfc2UzLCBfLCBxZHNzX3RyYWNlZGF0YV9hLCBfLCBfLCBfLCBfLCBfKSxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxOTY1MC5jOjY4NjpcdFsyMV0gPSBQSU5HUk9VUCgyMSwgbWRpb19zbHYwLCBxdXBfc2UzLCBhdGVzdF9jaGFyX3N0YXJ0LCBfLCBxZHNzX3RyYWNlZGF0YV9hLCBfLCBfLCBfLCBfKSxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxOTY1MC5jLTY4Ny1cdFsyMl0gPSBQSU5HUk9VUCgyMiwgbWRjX21zdCwgYXRlc3RfY2hhcl9zdGF0dXMyLCBfLCBfLCBfLCBfLCBfLCBfLCBfKSxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxOTY1MC5jOjY4ODpcdFsyM10gPSBQSU5HUk9VUCgyMywgbWRpb19tc3QsIGF0ZXN0X2NoYXJfc3RhdHVzMywgXywgXywgXywgXywgXywgXywgXyksXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTk2NTAuYy02ODktXHRbMjRdID0gUElOR1JPVVAoMjQsIHBjaWUwX2Nsa19yZXFfbiwgXywgXywgXywgXywgXywgXywgXywgXyksXG4tLVxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tZG05NjA3LmM9OTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNtX3Bpbmdyb3VwIG1kbTk2MDdfZ3JvdXBzW10gPSB7XG4tLVxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tZG05NjA3LmMtOTU5LVx0XHQgXywgXyksXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1kbTk2MDcuYzo5NjA6XHRQSU5HUk9VUCgyNywgdWltMl9kYXRhLCBnbWFjX21kaW8sIGdjY19ncDFfY2xrX2EsIF8sIF8sIGF0ZXN0X2NvbWJvZGFjX3RvX2dwaW9fbmF0aXZlLCBfLCBfLFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tZG05NjA3LmMtOTYxLVx0XHQgXyksXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1kbTk2MDcuYzo5NjI6XHRQSU5HUk9VUCgyOCwgdWltMl9jbGssIGdtYWNfbWRpbywgZ2NjX2dwMl9jbGtfYSwgXywgXywgYXRlc3RfY29tYm9kYWNfdG9fZ3Bpb19uYXRpdmUsIF8sIF8sXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1kbTk2MDcuYy05NjMtXHRcdCBfKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3OTUKCQkJCQkJCW91dHB1dDogMTE5CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgdGhlIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AgZmlsZSwgd2hpY2ggaXMgdGhlIGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIGFuZCBBTjg4MTFIQiBFdGhlcm5ldCBQSFkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsaWtlIG1hbnkgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXJzLCB0aGlzIGlzIGdvaW5nIHRvIGJlIHByb2JsZW1hdGljIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLgoKVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCB0aGlzIGRyaXZlciwgbGlrZSBtb3N0IG9mIGl0cyBraW5kLCBhYnNvbHV0ZWx5ICpkZW1hbmRzKiB0aGUgcHJlc2VuY2Ugb2YgcGh5c2ljYWwgaGFyZHdhcmUg4oCTIHNwZWNpZmljYWxseSwgYW4gRU44ODExSCBQSFkgY29ubmVjdGVkIHRvIGFuIE1ESU8gYnVzLiBXaXRob3V0IHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBwcm9iZSBhbmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzIHNpbXBseSBjYW5ub3QgZXhlY3V0ZS4gVGhlIGNvZGUgcGF0aHMgd2l0aGluIGBhaXJfZW44ODExaC5jYCBhcmUgaW5oZXJlbnRseSB0aWVkIHRvIHRoZSBwaHlzaWNhbCBsYXllci4gVGhpcyBydWxlcyBvdXQgY29tbW9uIHZpcnR1YWxpemVkIHNldHVwcy4KClRoZXJlZm9yZSwgYWZ0ZXIgY29uc2lkZXJpbmcgYWxsIG9mIHRoaXMsIHRoZSBmaW5hbCB2ZXJkaWN0IGlzOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBGYWxzZS4gVGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoqICAgYEZvY3VzU3ltYm9sc2A6IEVtcHR5LiBObyBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIHdvcnRoIHRhcmdldGluZyBiZWNhdXNlIG9mIHRoZSBlbnZpcm9ubWVudCBkZXBlbmRlbmN5LgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBFbXB0eS4gTm8ga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjaGFuZ2UgdGhpcyBmdW5kYW1lbnRhbCBoYXJkd2FyZSBkZXBlbmRlbmN5LgoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBhbiBFdGhlcm5ldCBQSFkgZHJpdmVyIChhaXJfZW44ODExaC5jKSB0aGF0IHJlbGllcyBvbiBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQWlyb2hhIEVOODgxMUgvQU44ODExSEIpIGNvbm5lY3RlZCB0byBhbiBNRElPIGJ1cy4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4KCkkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIG15IGFzc3VtcHRpb25zLCBhbmQgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgY29uY2x1c2lvbnMuIFRpbWUgdG8gY2FsbCBpdCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIEVOODgxMUggRXRoZXJuZXQgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMpIHRvIGFkZCBhIGZpcm13YXJlIHNpemUgYWxpZ25tZW50IGNoZWNrLiBFdGhlcm5ldCBQSFkgaGFyZHdhcmUgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIFBIWSBoYXJkd2FyZSBjb25uZWN0ZWQgdmlhIE1ESU8sIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSBvciBHQ0UpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjg4MTFIIEV0aGVybmV0IFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jKSB0byBhZGQgYSBmaXJtd2FyZSBzaXplIGFsaWdubWVudCBjaGVjay4gRXRoZXJuZXQgUEhZIGhhcmR3YXJlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgaGFyZHdhcmUgY29ubmVjdGVkIHZpYSBNRElPLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowODo1Ni4xNzIxMTYzODdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTc3ODcwMzMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU44ODExSCBFdGhlcm5ldCBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYykgdG8gYWRkIGEgZmlybXdhcmUgc2l6ZSBhbGlnbm1lbnQgY2hlY2suIEV0aGVybmV0IFBIWSBoYXJkd2FyZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgUEhZIGhhcmR3YXJlIGNvbm5lY3RlZCB2aWEgTURJTywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSkuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowODo1Ni4xNzIxMjI1OTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjI4NTY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIwY2M5NDhlMmI0YjJmNmYxMTkxNzZjZmEwNjllYWJlNDBlNzRmYzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAyMjowODo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXFxuaW5kZXggMGVlYjdiOWE0ZTI2MC4uMzRkMjcyN2U4MjIyYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXFxuQEAgLTMxMiw2ICszMTIsMTIgQEAgc3RhdGljIGludCBhaXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxcbiBcXHRpbnQgc2F2ZWRfcGFnZTtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbitcXHRpZiAoZnctXFx1MDAzZXNpemUgJSA0KSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiZmlybXdhcmUgc2l6ZSAlenUgaXMgbm90IGEgbXVsdGlwbGUgb2YgNFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgZnctXFx1MDAzZXNpemUpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4gXFx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcXG4gXFxuIFxcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2U9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDg6NTYuNzQ5MDEwMTMzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NTIwMTc5MTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjg4MTFIIEV0aGVybmV0IFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jKSB0byBhZGQgYSBmaXJtd2FyZSBzaXplIGFsaWdubWVudCBjaGVjay4gRXRoZXJuZXQgUEhZIGhhcmR3YXJlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgaGFyZHdhcmUgY29ubmVjdGVkIHZpYSBNRElPLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDIwY2M5NDhlMmI0YjJmNmYxMTkxNzZjZmEwNjllYWJlNDBlNzRmYzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIyOjA4OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuaW5kZXggMGVlYjdiOWE0ZTI2MC4uMzRkMjcyN2U4MjIyYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuQEAgLTMxMiw2ICszMTIsMTIgQEAgc3RhdGljIGludCBhaXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxuIFx0aW50IHNhdmVkX3BhZ2U7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbitcdGlmIChmdy1cdTAwM2VzaXplICUgNCkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XFxuXCIsXG4rXHRcdFx0ICAgZnctXHUwMDNlc2l6ZSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuIFx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbiBcbiBcdGlmIChzYXZlZF9wYWdlIFx1MDAzZT0gMCkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDg6NTYuNzQ5MDExODQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAzNjc4NzA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZXZpZXdpbmcgdGhlIFByb3Bvc2VkIFBhdGNoKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gdGFrZSBhIGxvb2sgYXQgYSBwYXRjaCB0aGF0IGltcGFjdHMgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYC4gVGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIG5ldHdvcmsgUEhZIGRyaXZlciBmb3IgdGhlIEFpci1FTjg4MTFILiBCZWZvcmUgSSBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlcyB0aGVtc2VsdmVzLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29udGV4dC5cblxuTXkgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSB0byBhY3R1YWxseSBvcGVuIGFuZCByZXZpZXcgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCBkaXJlY3RseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEFmdGVyIHRoYXQsIEkgd2lsbCBhbHNvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYW5kIGRldGVybWluZSBleGFjdGx5IHdoZXJlIGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgYmVpbmcgdXNlZC4gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBcblxuVG8gYWNoaWV2ZSB0aGlzLCBJJ2xsIGxpa2VseSB1c2UgYSB0b29sIGxpa2UgYHJlYWQtZmlsZWAsIG9yIG1heWJlIGBncmVwcGVyYCBpZiBJJ20gbG9va2luZyBmb3Igc3BlY2lmaWMgc3RyaW5ncyBvciB1c2FnZXMuIEkgbmVlZCBhIHNvbGlkIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgY2FuIGFzc2VzcyB0aGUgaW1wYWN0IGFuZCBjb3JyZWN0bmVzcyBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjAxLjc4NTgwMjUzMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTA6XFx0XFx0XFx0XFx0ICBsb3dlcl8xNl9iaXRzKGFkZHJlc3MpKTtcXG4gMjkxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAyOTI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjkzOlxcdFxcbiAyOTQ6XFx0XFx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXFx1MDAzYyBmdy1cXHUwMDNlc2l6ZTsgb2Zmc2V0ICs9IDQpIHtcXG4gMjk1OlxcdFxcdFxcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcXHUwMDI2ZnctXFx1MDAzZWRhdGFbb2Zmc2V0ICsgMl0pO1xcbiAyOTY6XFx0XFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILCB2YWwpO1xcbiAyOTc6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDI5ODpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHRcXHR2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMTYoXFx1MDAyNmZ3LVxcdTAwM2VkYXRhW29mZnNldF0pO1xcbiAzMDE6XFx0XFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csIHZhbCk7XFxuIDMwMjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMzAzOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDMwNDpcXHRcXHR9XFxuIDMwNTpcXHRcXG4gMzA2OlxcdFxcdHJldHVybiAwO1xcbiAzMDc6XFx0fVxcbiAzMDg6XFx0XFxuIDMwOTpcXHRzdGF0aWMgaW50IGFpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXFxuIDMxMDpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcXG4gMzExOlxcdHtcXG4gMzEyOlxcdFxcdGludCBzYXZlZF9wYWdlO1xcbiAzMTM6XFx0XFx0aW50IHJldCA9IDA7XFxuIDMxNDpcXHRcXG4gMzE1OlxcdFxcdGlmIChmdy1cXHUwMDNlc2l6ZSAlIDQpIHtcXG4gMzE2OlxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiZmlybXdhcmUgc2l6ZSAlenUgaXMgbm90IGEgbXVsdGlwbGUgb2YgNFxcXFxuXFxcIixcXG4gMzE3OlxcdFxcdFxcdFxcdCAgIGZ3LVxcdTAwM2VzaXplKTtcXG4gMzE4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMTk6XFx0XFx0fVxcbiAzMjA6XFx0XFxuIDMyMTpcXHRcXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xcbiAzMjI6XFx0XFxuIDMyMzpcXHRcXHRpZiAoc2F2ZWRfcGFnZSBcXHUwMDNlPSAwKSB7XFxuIDMyNDpcXHRcXHRcXHRyZXQgPSBfX2Fpcl93cml0ZV9idWYocGh5ZGV2LCBhZGRyZXNzLCBmdyk7XFxuIDMyNTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMzI2OlxcdFxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiJXMgMHglMDh4IGZhaWxlZDogJWRcXFxcblxcXCIsIF9fZnVuY19fLFxcbiAzMjc6XFx0XFx0XFx0XFx0XFx0ICAgYWRkcmVzcywgcmV0KTtcXG4gMzI4OlxcdFxcdH1cXG4gMzI5OlxcdFxcbiAzMzA6XFx0XFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBzYXZlZF9wYWdlLCByZXQpO1xcbiAzMzE6XFx0fVxcbiAzMzI6XFx0XFxuIDMzMzpcXHRzdGF0aWMgaW50IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gMzM0OlxcdHtcXG4gMzM1OlxcdFxcdGludCByZXQsIHJlZ192YWx1ZTtcXG4gMzM2OlxcdFxcbiAzMzc6XFx0XFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcXG4gMzM4OlxcdFxcdFxcdFxcdFxcdFxcdCBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gpO1xcbiAzMzk6XFx0XFx0aWYgKHJldClcXG4gMzQwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdC8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2FkcyAqL1xcbiAzNDM6XFx0XFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxcbiAzNDQ6XFx0XFx0XFx0XFx0XFx0XFx0RU44ODExSF9QSFlfRldfU1RBVFVTLCByZWdfdmFsdWUsXFxuIDM0NTpcXHRcXHRcXHRcXHRcXHRcXHRyZWdfdmFsdWUgPT0gRU44ODExSF9QSFlfUkVBRFksXFxuIDM0NjpcXHRcXHRcXHRcXHRcXHRcXHQyMDAwMCwgNzUwMDAwMCwgdHJ1ZSk7XFxuIDM0NzpcXHRcXHRpZiAocmV0KSB7XFxuIDM0ODpcXHRcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIk1DVSBub3QgcmVhZHk6IDB4JXhcXFxcblxcXCIsIHJlZ192YWx1ZSk7XFxuIDM0OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMzUwOlxcdFxcdH1cXG4gMzUxOlxcdFxcbiAzNTI6XFx0XFx0cmV0dXJuIDA7XFxuIDM1MzpcXHR9XFxuIDM1NDpcXHRcXG4gMzU1OlxcdHN0YXRpYyBpbnQgYW44ODExaGJfY2hlY2tfY3JjKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBzZXQxLFxcbiAzNTY6XFx0XFx0XFx0XFx0ICAgICAgdTMyIG1vbjIsIHUzMiBtb24zKVxcbiAzNTc6XFx0e1xcbiAzNTg6XFx0XFx0dTMyIHBidXNfdmFsdWU7XFxuIDM1OTpcXHRcXHRpbnQgcmV0cnkgPSAyNTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MDEuNzg1OTYwOTYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjczNTYwMDcwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQWlyb2hhIEVOODgxMUggRXRoZXJuZXQgUEhZIERyaXZlcioqXG5cbkFscmlnaHQsIEkndmUgZ290IGBhaXJfZW44ODExaC5jYCBoZXJlLCB0aGUgQWlyb2hhIEVOODgxMUggMi41RyBFdGhlcm5ldCBQSFkgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIHRoZSB3YXkgaXQncyBicm91Z2h0IGludG8gdGhlIHN5c3RlbS4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgS2NvbmZpZyBlbnRyeSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkcml2ZXIuIFVuZGVyc3RhbmRpbmcgdGhlIEtjb25maWcgd2lsbCByZXZlYWwgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMg4oCTIGRvZXMgaXQgbmVlZCBzcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJlbWVudHMsIG9yIGNhbiBpdCBiZSBidWlsdCBhcyBhIG1vZHVsZSBtb3JlIGdlbmVyYWxseT8gVGhpcyBwcm9iZSBwcm9jZXNzIGlzIGtleS4gRG9lcyBpdCBhdXRvbWF0aWNhbGx5IGRldGVjdCB0aGUgUEhZLCBvciBkb2VzIGl0IHJlcXVpcmUgc29tZSBraW5kIG9mIHVzZXItZGVmaW5lZCBjb25maWd1cmF0aW9uIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCBoYXJkd2FyZT8gSSdsbCBuZWVkIHRvIGZvbGxvdyB0aGUgS2NvbmZpZyBicmVhZGNydW1icyB0byBlc3RhYmxpc2ggaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYxNSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MDQuNTIxNTY2NDg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODkzNDI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBSVJfRU44ODExSHxhaXJfZW44ODExaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9OTM9Y29uZmlnIEFJUl9BTjg4MDFfUEhZXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy05OC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo5OTpjb25maWcgQUlSX0VOODgxMUhfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTAwLVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgRU44ODExSCAyLjUgR2lnYWJpdCBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX0FJUl9BTjg4MDFfUEhZKVxcdCs9IGFpcl9hbjg4MDEub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQUlSX0VOODgxMUhfUEhZKSAgICs9IGFpcl9lbjg4MTFoLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMzUtb2JqLSQoQ09ORklHX0FJUl9ORVRfUEhZTElCKVxcdCs9IGFpcl9waHlfbGliLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMzI0LS8qIExFRCBiYXNpYyBjb250cm9sIHJlZ2lzdGVyLCBwYXJ0IG9mIHRoZSBzYW1lIExFRCBibG9jayBhcyB0aGUgTEVEMC9MRUQxXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYzozMjU6ICogY29udHJvbCByZWdpc3RlcnMgYWJvdmUuIFRoZSBhaXJfZW44ODExaCBkcml2ZXIgZGVzY3JpYmVzIHRoZSBzYW1lXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0zMjYtICogcmVnaXN0ZXIgYXMgQUlSX1BIWV9MRURfQkNSLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYz0xNDgyPXN0YXRpYyBpbnQgZW43NTI4X3BoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNDg2LVxcdCAqIHByb2dyYW1tZWQgaW50byB0aGUgTEVEIGNvbnRyb2wgcmVnaXN0ZXJzLiBIYW5kIHRoZSBwaW5zIG92ZXIgdG9cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jOjE0ODc6XFx0ICogdGhlIExFRCBjb250cm9sIHJlZ2lzdGVycyB0aGUgc2FtZSB3YXkgdGhlIGFpcl9lbjg4MTFoIGRyaXZlclxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTQ4OC1cXHQgKiBkb2VzOyB0aGUgbW9kZSBmaWVsZCBvZiB0aGlzIHJlZ2lzdGVyIGlzIGFscmVhZHkgc2V0IG91dCBvZiByZXNldC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MDQuNjUwNTA5NzcyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk3MTk2NjQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBhaXJfZW44ODExaC5jYCBQSFkgRHJpdmVyKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBlbnRpcmUgYGFpcl9lbjg4MTFoLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBhcmNoaXRlY3R1cmUgYW5kIGZsb3cgb2YgdGhpcyBQSFkgZHJpdmVyLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBleGFjdGx5IHdoYXQgbWVjaGFuaXNtcyBraWNrIG9mZiB0aGUgYGFpcl93cml0ZV9idWZgIGZ1bmN0aW9uLiBJJ20gbm90IGp1c3QgaW50ZXJlc3RlZCBpbiAqd2hlcmUqIGl0J3MgY2FsbGVkLCBidXQgdGhlICp3aHkqIC0gdGhlIHVuZGVybHlpbmcgY29uZGl0aW9ucyBhbmQgZXZlbnRzIHRoYXQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uLiBJIHdhbnQgdG8gYnVpbGQgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgdGhlIGRyaXZlcidzIG9wZXJhdGlvbiwgc28gSSBjYW4gcHJlZGljdCBpdHMgYmVoYXZpb3IgYW5kIHBpbnBvaW50IHBvdGVudGlhbCBpc3N1ZXMuIFRoaXMgbWVhbnMgbWFwcGluZyBvdXQgdGhlIGNvbnRyb2wgZmxvdywgaWRlbnRpZnlpbmcga2V5IGRhdGEgc3RydWN0dXJlcywgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGludGVycnVwdCBoYW5kbGVycywgdGFza2xldHMsIERNQSBvcGVyYXRpb25zLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IG1lY2hhbmlzbXMgdGhhdCBjb3VsZCBsZWFkIHRvIGEgY2FsbCB0byBgYWlyX3dyaXRlX2J1ZmAuIFRoZSBnb2FsIGlzIGEgaG9saXN0aWMgdW5kZXJzdGFuZGluZywgbm90IGp1c3QgYSBzdXJmYWNlLWxldmVsIHNjYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOToxMC42MjI0Nzg4NDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ1NDE5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyX3dyaXRlX2J1ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0yNDg9c3RhdGljIGludCBfX2Fpcl9wYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNzItXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MjczOnN0YXRpYyBpbnQgX19haXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI3NC1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzA4LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjMwOTpzdGF0aWMgaW50IGFpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzEwLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzIzLVxcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2U9IDApIHtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzozMjQ6XFx0XFx0cmV0ID0gX19haXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgZncpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTMyNS1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTQwMz1zdGF0aWMgaW50IGFuODgxMWhiX2xvYWRfZmlsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDEzLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjQxNDpcXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgIGZ3KTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00MTUtXFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz01MDg9c3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUzMi1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MzM6XFx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RNLCAgZncxKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzQtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzYtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTM3OlxcdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3Mik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTM4LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOToxMC43MDcwMjU5MThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjQ1NDk3MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb24sIGFuZCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBhaXJfZW44ODExaC5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBhaXJfZW44ODExaC5jYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3BoeWAgZGlyZWN0b3J5LiBJJ20gYWxyZWFkeSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIFBIWSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgYW4gQWlyIEV0aGVybmV0IEVOODgxMUguIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBrZXkgYXJlYXMuIEZpcnN0LCBJJ20gYW50aWNpcGF0aW5nIHRoZSBzdGFuZGFyZCBQSFkgZHJpdmVyIHN0cnVjdHVyZTogaW5pdGlhbGl6YXRpb24gcm91dGluZXMgKGBhaXJfZW44ODExaF9wcm9iZWAsIGBhaXJfZW44ODExaF9jb25maWdfaW5pdGApLCBjb25maWd1cmF0aW9uL2xpbmsgbWFuYWdlbWVudCBmdW5jdGlvbnMgKGBhaXJfZW44ODExaF9jb25maWdgLCBgYWlyX2VuODgxMWhfbGlua191cGAsIGBhaXJfZW44ODExaF9saW5rX2Rvd25gKSwgYW5kIHBvdGVudGlhbGx5IGludGVycnVwdCBoYW5kbGVycyBpZiBpdCdzIGdvdCBhIGZhbmN5IGludGVycnVwdC1kcml2ZW4gbGluayBzdGF0dXMgY2hhbmdlIHN5c3RlbS5cblxuSSdsbCBiZSB6ZXJvaW5nIGluIG9uIHRoZSByZWdpc3RlciBhY2Nlc3MgbWV0aG9kcyB1c2VkLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhleSdyZSB1c2luZyBhIHN0YW5kYXJkIE1ESU8gaW50ZXJmYWNlIG9yIHNvbWV0aGluZyBwcm9wcmlldGFyeS4gQW5kLCBJJ2xsIGJlIG1ha2luZyBub3RlIG9mIHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyB0aGF0IGFyZSB1bmlxdWUgdG8gdGhpcyBzcGVjaWZpYyBQSFkuIEFueSB2ZW5kb3Itc3BlY2lmaWMgcXVpcmtzPyBBcmUgdGhleSBpbXBsZW1lbnRpbmcgYW55IGF1dG8tbmVnb3RpYXRpb24gb3ZlcnJpZGVzIG9yIGN1c3RvbSBwb3dlci1zYXZpbmcgbW9kZXM/IEFsc28sIEkgYW0gZXhwZWN0aW5nIHNvbWUgc29ydCBvZiBzdXBwb3J0IGZvciBkaWZmZXJlbnQgTUlJIG1vZGVzLlxuXG5MZXQncyBzZWUgaWYgdGhlIGNvZGUgY29tbWVudHMgYXJlIGdvb2QsIGJlY2F1c2UgSSdtIGhvcGluZyBJIGRvbid0IGhhdmUgdG8gc3BlbmQgYSBsb3Qgb2YgdGltZSByZXZlcnNlIGVuZ2luZWVyaW5nIHRoZSByZWdpc3RlciBkZXNjcmlwdGlvbnMuIFRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZmlndXJlIG91dCBob3cgdGhpcyBkcml2ZXIgd29ya3MgaXMgdGhyb3VnaCBhIGxvb2sgaW50byB0aGUgZGV2aWNlJ3MgZGF0YXNoZWV0LiBJIHNob3VsZCBncmFiIHRoYXQgZGF0YXNoZWV0IGZvciB0aGlzIGRldmljZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgbGluayBwYXJ0bmVyJ3MgZGV0ZWN0aW9uIGFuZCBhdXRvLW5lZ290aWF0aW9uIGhhbmRsaW5nIOKAkyB0aGF0J3Mgb2Z0ZW4gd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSdsbCBhbHNvIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGVycm9yIGhhbmRsaW5nIG9yIHJldHJ5IGxvZ2ljOyByb2J1c3RuZXNzIGlzIGtleSBpbiBuZXR3b3JrIGRyaXZlcnMuIExldCdzIHNlZSBob3cgd2VsbCBpdCdzIGJlZW4gZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ4MiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjE1LjM1MjUyNzg4M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRcXHRcXHRcXHQgQU44ODExSEJfQ1JDX1BNX01PTjIsXFxuIDUwMTpcXHRcXHRcXHRcXHRcXHQgQU44ODExSEJfQ1JDX1BNX01PTjMpO1xcbiA1MDI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDUwMzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1MDQ6XFx0XFxuIDUwNTpcXHRcXHRyZXR1cm4gZW44ODExaF93YWl0X21jdV9yZWFkeShwaHlkZXYpO1xcbiA1MDY6XFx0fVxcbiA1MDc6XFx0XFxuIDUwODpcXHRzdGF0aWMgaW50IGVuODgxMWhfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiA1MDk6XFx0e1xcbiA1MTA6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuIDUxMTpcXHRcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MSwgKmZ3MjtcXG4gNTEyOlxcdFxcdGludCByZXQ7XFxuIDUxMzpcXHRcXG4gNTE0OlxcdFxcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFxcdTAwMjZmdzEsIEVOODgxMUhfTUQzMl9ETSwgZGV2KTtcXG4gNTE1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA1MTY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNTE3OlxcdFxcbiA1MTg6XFx0XFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNmZ3MiwgRU44ODExSF9NRDMyX0RTUCwgZGV2KTtcXG4gNTE5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA1MjA6XFx0XFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTtcXG4gNTIxOlxcdFxcbiA1MjI6XFx0XFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcXG4gNTIzOlxcdFxcdFxcdFxcdFxcdFxcdCBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCk7XFxuIDUyNDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNTI1OlxcdFxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9GV19DVFJMXzIsXFxuIDUyODpcXHRcXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsXFxuIDUyOTpcXHRcXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcpO1xcbiA1MzA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDUzMTpcXHRcXHRcXHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XFxuIDUzMjpcXHRcXG4gNTMzOlxcdFxcdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9ETSwgIGZ3MSk7XFxuIDUzNDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNTM1OlxcdFxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG4gNTM2OlxcdFxcbiA1Mzc6XFx0XFx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RTUCwgZncyKTtcXG4gNTM4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA1Mzk6XFx0XFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xcbiA1NDA6XFx0XFxuIDU0MTpcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcXG4gNTQyOlxcdFxcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgMCk7XFxuIDU0MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNTQ0OlxcdFxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0cmV0ID0gZW44ODExaF93YWl0X21jdV9yZWFkeShwaHlkZXYpO1xcbiA1NDc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDU0ODpcXHRcXHRcXHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XFxuIDU0OTpcXHRcXG4gNTUwOlxcdFxcdGVuODgxMWhfcHJpbnRfZndfdmVyc2lvbihwaHlkZXYpO1xcbiA1NTE6XFx0XFxuIDU1MjpcXHRlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0OlxcbiA1NTM6XFx0XFx0cmVsZWFzZV9maXJtd2FyZShmdzIpO1xcbiA1NTQ6XFx0XFxuIDU1NTpcXHRlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTpcXG4gNTU2OlxcdFxcdHJlbGVhc2VfZmlybXdhcmUoZncxKTtcXG4gNTU3OlxcdFxcbiA1NTg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDU1OTpcXHRcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkxvYWQgZmlybXdhcmUgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0cmV0dXJuIHJldDtcXG4gNTYyOlxcdH1cXG4gNTYzOlxcdFxcbiA1NjQ6XFx0c3RhdGljIGludCBlbjg4MTFoX3Jlc3RhcnRfbWN1KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIDU2NTpcXHR7XFxuIDU2NjpcXHRcXHRpbnQgcmV0O1xcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHRpZiAocGh5X2lkX2NvbXBhcmVfbW9kZWwocGh5ZGV2LVxcdTAwM2VwaHlfaWQsIEFOODgxMUhCX1BIWV9JRCkpIHtcXG4gNTY5OlxcdFxcdFxcdHJldCA9IGFuODgxMWhiX21jdV9hc3NlcnQocGh5ZGV2KTtcXG4gNTcwOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA1NzE6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNTcyOlxcdFxcbiA1NzM6XFx0XFx0XFx0cmV0ID0gYW44ODExaGJfbWN1X2RlYXNzZXJ0KHBoeWRldik7XFxuIDU3NDpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNTc1OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDU3NjpcXHRcXHR9XFxuIDU3NzpcXHRcXG4gNTc4OlxcdFxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXFxuIDU3OTpcXHRcXHRcXHRcXHRcXHRcXHQgRU44ODExSF9GV19DVFJMXzFfU1RBUlQpO1xcbiA1ODA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDU4MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHRyZXR1cm4gZW44ODExaF93YWl0X21jdV9yZWFkeShwaHlkZXYpO1xcbiA1ODQ6XFx0fVxcbiA1ODU6XFx0XFxuIDU4NjpcXHRzdGF0aWMgaW50IGFpcl9od19sZWRfb25fc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LCBib29sIG9uKVxcbiA1ODc6XFx0e1xcbiA1ODg6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4gNTg5OlxcdFxcdGJvb2wgY2hhbmdlZDtcXG4gNTkwOlxcdFxcbiA1OTE6XFx0XFx0aWYgKGluZGV4IFxcdTAwM2U9IEVOODgxMUhfTEVEX0NPVU5UKVxcbiA1OTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU5MzpcXHRcXG4gNTk0OlxcdFxcdGlmIChvbilcXG4gNTk1OlxcdFxcdFxcdGNoYW5nZWQgPSAhdGVzdF9hbmRfc2V0X2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9PTixcXG4gNTk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cHJpdi1cXHUwMDNlbGVkW2luZGV4XS5zdGF0ZSk7XFxuIDU5NzpcXHRcXHRlbHNlXFxuIDU5ODpcXHRcXHRcXHRjaGFuZ2VkID0gISF0ZXN0X2FuZF9jbGVhcl9iaXQoQUlSX1BIWV9MRURfU1RBVEVfRk9SQ0VfT04sXFxuIDU5OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnByaXYtXFx1MDAzZWxlZFtpbmRleF0uc3RhdGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOToxNS4zNTMwMDAxNDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI2NjcyMDY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgUEhZIGRldmljZSByZWdpc3RyYXRpb24gYW5kIHByb2JpbmcgcHJvY2VzcyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBkcml2ZXIuIEtub3dpbmcgaG93IGl0J3MgaGFuZGxlZCBpbiB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gaXMgY3J1Y2lhbCBmb3IgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXZpY2UncyBsaWZlY3ljbGUuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHN0YW5kYXJkIFBIWSByZWdpc3RyYXRpb24gZnVuY3Rpb25zLCBsaWtlbHkgYSBgcGh5X2RyaXZlcmAgc3RydWN0dXJlIGRlZmluaXRpb24sIGFuZCB0aGUgcHJvYmUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGluaXRpYWwgY29uZmlndXJhdGlvbiBhbmQgbGluayBlc3RhYmxpc2htZW50LiBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzOyBob3cgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJJ20gaW50ZXJlc3RlZCBpbiBob3cgdGhleSdyZSBoYW5kbGluZyBpbnRlcnJ1cHRzLCByZXNldCBzZXF1ZW5jZXMsIGFuZCBhbnkgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGlzIHNwZWNpZmljIGRyaXZlciByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njc1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOToxNy42MTk3MzA0ODhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MDA6XFx0XFxuIDYwMTpcXHRcXHRjaGFuZ2VkIHw9IChwcml2LVxcdTAwM2VsZWRbaW5kZXhdLnJ1bGVzICE9IDApO1xcbiA2MDI6XFx0XFxuIDYwMzpcXHRcXHQvKiBjbGVhciBuZXRkZXYgdHJpZ2dlciBydWxlcyBpbiBjYXNlIExFRF9PRkYgaGFzIGJlZW4gc2V0ICovXFxuIDYwNDpcXHRcXHRpZiAoIW9uKVxcbiA2MDU6XFx0XFx0XFx0cHJpdi1cXHUwMDNlbGVkW2luZGV4XS5ydWxlcyA9IDA7XFxuIDYwNjpcXHRcXG4gNjA3OlxcdFxcdGlmIChjaGFuZ2VkKVxcbiA2MDg6XFx0XFx0XFx0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsXFxuIDYwOTpcXHRcXHRcXHRcXHRcXHQgICAgICBBSVJfUEhZX0xFRF9PTihpbmRleCksXFxuIDYxMDpcXHRcXHRcXHRcXHRcXHQgICAgICBBSVJfUEhZX0xFRF9PTl9NQVNLLFxcbiA2MTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgb24gPyBBSVJfUEhZX0xFRF9PTl9GT1JDRV9PTiA6IDApO1xcbiA2MTI6XFx0XFxuIDYxMzpcXHRcXHRyZXR1cm4gMDtcXG4gNjE0OlxcdH1cXG4gNjE1OlxcdFxcbiA2MTY6XFx0c3RhdGljIGludCBhaXJfaHdfbGVkX2JsaW5rX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcXG4gNjE3OlxcdFxcdFxcdFxcdFxcdGJvb2wgYmxpbmtpbmcpXFxuIDYxODpcXHR7XFxuIDYxOTpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbiA2MjA6XFx0XFx0Ym9vbCBjaGFuZ2VkO1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRpZiAoaW5kZXggXFx1MDAzZT0gRU44ODExSF9MRURfQ09VTlQpXFxuIDYyMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjI0OlxcdFxcbiA2MjU6XFx0XFx0aWYgKGJsaW5raW5nKVxcbiA2MjY6XFx0XFx0XFx0Y2hhbmdlZCA9ICF0ZXN0X2FuZF9zZXRfYml0KEFJUl9QSFlfTEVEX1NUQVRFX0ZPUkNFX0JMSU5LLFxcbiA2Mjc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZwcml2LVxcdTAwM2VsZWRbaW5kZXhdLnN0YXRlKTtcXG4gNjI4OlxcdFxcdGVsc2VcXG4gNjI5OlxcdFxcdFxcdGNoYW5nZWQgPSAhIXRlc3RfYW5kX2NsZWFyX2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9CTElOSyxcXG4gNjMwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2cHJpdi1cXHUwMDNlbGVkW2luZGV4XS5zdGF0ZSk7XFxuIDYzMTpcXHRcXG4gNjMyOlxcdFxcdGNoYW5nZWQgfD0gKHByaXYtXFx1MDAzZWxlZFtpbmRleF0ucnVsZXMgIT0gMCk7XFxuIDYzMzpcXHRcXG4gNjM0OlxcdFxcdGlmIChjaGFuZ2VkKVxcbiA2MzU6XFx0XFx0XFx0cmV0dXJuIHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcXG4gNjM2OlxcdFxcdFxcdFxcdFxcdCAgICAgQUlSX1BIWV9MRURfQkxJTksoaW5kZXgpLFxcbiA2Mzc6XFx0XFx0XFx0XFx0XFx0ICAgICBibGlua2luZyA/XFxuIDYzODpcXHRcXHRcXHRcXHRcXHQgICAgIEFJUl9QSFlfTEVEX0JMSU5LX0ZPUkNFX0JMSU5LIDogMCk7XFxuIDYzOTpcXHRcXHRlbHNlXFxuIDY0MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjQxOlxcdH1cXG4gNjQyOlxcdFxcbiA2NDM6XFx0c3RhdGljIGludCBhaXJfbGVkX2JsaW5rX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcXG4gNjQ0OlxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXFxuIDY0NTpcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcXG4gNjQ2OlxcdHtcXG4gNjQ3OlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuIDY0ODpcXHRcXHRib29sIGJsaW5raW5nID0gZmFsc2U7XFxuIDY0OTpcXHRcXHRpbnQgZXJyO1xcbiA2NTA6XFx0XFxuIDY1MTpcXHRcXHRpZiAoaW5kZXggXFx1MDAzZT0gRU44ODExSF9MRURfQ09VTlQpXFxuIDY1MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjUzOlxcdFxcbiA2NTQ6XFx0XFx0aWYgKGRlbGF5X29uIFxcdTAwMjZcXHUwMDI2IGRlbGF5X29mZiBcXHUwMDI2XFx1MDAyNiAoKmRlbGF5X29uIFxcdTAwM2UgMCkgXFx1MDAyNlxcdTAwMjYgKCpkZWxheV9vZmYgXFx1MDAzZSAwKSkge1xcbiA2NTU6XFx0XFx0XFx0YmxpbmtpbmcgPSB0cnVlO1xcbiA2NTY6XFx0XFx0XFx0KmRlbGF5X29uID0gNTA7XFxuIDY1NzpcXHRcXHRcXHQqZGVsYXlfb2ZmID0gNTA7XFxuIDY1ODpcXHRcXHR9XFxuIDY1OTpcXHRcXG4gNjYwOlxcdFxcdGVyciA9IGFpcl9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGJsaW5raW5nKTtcXG4gNjYxOlxcdFxcdGlmIChlcnIpXFxuIDY2MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA2NjM6XFx0XFxuIDY2NDpcXHRcXHQvKiBsZWQtYmxpbmsgc2V0LCBzbyBzd2l0Y2ggbGVkLW9uIG9mZiAqL1xcbiA2NjU6XFx0XFx0ZXJyID0gYWlyX2h3X2xlZF9vbl9zZXQocGh5ZGV2LCBpbmRleCwgZmFsc2UpO1xcbiA2NjY6XFx0XFx0aWYgKGVycilcXG4gNjY3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDY2ODpcXHRcXG4gNjY5OlxcdFxcdC8qIGh3LWNvbnRyb2wgaXMgb2ZmKi9cXG4gNjcwOlxcdFxcdGlmICghIXRlc3RfYml0KEFJUl9QSFlfTEVEX1NUQVRFX0ZPUkNFX0JMSU5LLCBcXHUwMDI2cHJpdi1cXHUwMDNlbGVkW2luZGV4XS5zdGF0ZSkpXFxuIDY3MTpcXHRcXHRcXHRwcml2LVxcdTAwM2VsZWRbaW5kZXhdLnJ1bGVzID0gMDtcXG4gNjcyOlxcdFxcbiA2NzM6XFx0XFx0cmV0dXJuIDA7XFxuIDY3NDpcXHR9XFxuIDY3NTpcXHRcXG4gNjc2OlxcdHN0YXRpYyBpbnQgYWlyX2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcXG4gNjc3OlxcdFxcdFxcdFxcdFxcdCAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSlcXG4gNjc4OlxcdHtcXG4gNjc5OlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuIDY4MDpcXHRcXHRpbnQgZXJyO1xcbiA2ODE6XFx0XFxuIDY4MjpcXHRcXHRpZiAoaW5kZXggXFx1MDAzZT0gRU44ODExSF9MRURfQ09VTlQpXFxuIDY4MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0LyogbGVkLW9uIHNldCwgc28gc3dpdGNoIGxlZC1ibGluayBvZmYgKi9cXG4gNjg2OlxcdFxcdGVyciA9IGFpcl9od19sZWRfYmxpbmtfc2V0KHBoeWRldiwgaW5kZXgsIGZhbHNlKTtcXG4gNjg3OlxcdFxcdGlmIChlcnIpXFxuIDY4ODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA2ODk6XFx0XFxuIDY5MDpcXHRcXHRlcnIgPSBhaXJfaHdfbGVkX29uX3NldChwaHlkZXYsIGluZGV4LCAodmFsdWUgIT0gTEVEX09GRikpO1xcbiA2OTE6XFx0XFx0aWYgKGVycilcXG4gNjkyOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDY5MzpcXHRcXG4gNjk0OlxcdFxcdC8qIGh3LWNvbnRyb2wgaXMgb2ZmICovXFxuIDY5NTpcXHRcXHRpZiAoISF0ZXN0X2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9PTiwgXFx1MDAyNnByaXYtXFx1MDAzZWxlZFtpbmRleF0uc3RhdGUpKVxcbiA2OTY6XFx0XFx0XFx0cHJpdi1cXHUwMDNlbGVkW2luZGV4XS5ydWxlcyA9IDA7XFxuIDY5NzpcXHRcXG4gNjk4OlxcdFxcdHJldHVybiAwO1xcbiA2OTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOToxNy42MjAwMjc4NzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgyMzMyNjkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBjb2RlOlxuXG4qKkRpdmluZyBCYWNrIGludG8gYGFpcl9lbjg4MTFoLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgYmFjayBpbnRvIHRoZSB3ZWVkcyB3aXRoIGBhaXJfZW44ODExaC5jYC4gSSBuZWVkIHRvIHBpY2sgdXAgd2hlcmUgSSBsZWZ0IG9mZiDigJMgcHJvYmFibHkgc29tZSBsb3ctbGV2ZWwgZHJpdmVyIGRldGFpbHMsIG1heWJlIHJlZ2lzdGVyIGludGVyYWN0aW9ucywgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBlcnJvciBjaGVja2luZy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgZmxvdy4gSSBleHBlY3QgdGhpcyBmaWxlIGlzIGdvaW5nIHRvIGJlIHBhY2tlZCB3aXRoIGNyaXRpY2FsIGZ1bmN0aW9ucywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaXQuIEknbSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzIGl0IGhhcyBhbmQgaG93IHRob3NlIHBsYXkgb3V0LiBJdCdzIHRpbWUgdG8gZ2V0IGEgbW9yZSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbXBvbmVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM5NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MjAuNDQzMzU4Nzg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdFxcbiA3MDE6XFx0c3RhdGljIGludCBhaXJfbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxcbiA3MDI6XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nICpydWxlcylcXG4gNzAzOlxcdHtcXG4gNzA0OlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuIDcwNTpcXHRcXG4gNzA2OlxcdFxcdGlmIChpbmRleCBcXHUwMDNlPSBFTjg4MTFIX0xFRF9DT1VOVClcXG4gNzA3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3MDg6XFx0XFxuIDcwOTpcXHRcXHQqcnVsZXMgPSBwcml2LVxcdTAwM2VsZWRbaW5kZXhdLnJ1bGVzO1xcbiA3MTA6XFx0XFxuIDcxMTpcXHRcXHRyZXR1cm4gMDtcXG4gNzEyOlxcdH07XFxuIDcxMzpcXHRcXG4gNzE0OlxcdHN0YXRpYyBpbnQgYWlyX2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcXG4gNzE1OlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBydWxlcylcXG4gNzE2OlxcdHtcXG4gNzE3OlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuIDcxODpcXHRcXHR1MTYgb24gPSAwLCBibGluayA9IDA7XFxuIDcxOTpcXHRcXHRpbnQgcmV0O1xcbiA3MjA6XFx0XFxuIDcyMTpcXHRcXHRpZiAoaW5kZXggXFx1MDAzZT0gRU44ODExSF9MRURfQ09VTlQpXFxuIDcyMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0XFx0cHJpdi1cXHUwMDNlbGVkW2luZGV4XS5ydWxlcyA9IHJ1bGVzO1xcbiA3MjU6XFx0XFxuIDcyNjpcXHRcXHRpZiAocnVsZXMgXFx1MDAyNiBCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpKVxcbiA3Mjc6XFx0XFx0XFx0b24gfD0gQUlSX1BIWV9MRURfT05fRkRYO1xcbiA3Mjg6XFx0XFxuIDcyOTpcXHRcXHRpZiAocnVsZXMgXFx1MDAyNiAoQklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApIHwgQklUKFRSSUdHRVJfTkVUREVWX0xJTkspKSlcXG4gNzMwOlxcdFxcdFxcdG9uIHw9IEFJUl9QSFlfTEVEX09OX0xJTksxMDtcXG4gNzMxOlxcdFxcbiA3MzI6XFx0XFx0aWYgKHJ1bGVzIFxcdTAwMjYgKEJJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMCkgfCBCSVQoVFJJR0dFUl9ORVRERVZfTElOSykpKVxcbiA3MzM6XFx0XFx0XFx0b24gfD0gQUlSX1BIWV9MRURfT05fTElOSzEwMDtcXG4gNzM0OlxcdFxcbiA3MzU6XFx0XFx0aWYgKHJ1bGVzIFxcdTAwMjYgKEJJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApIHwgQklUKFRSSUdHRVJfTkVUREVWX0xJTkspKSlcXG4gNzM2OlxcdFxcdFxcdG9uIHw9IEFJUl9QSFlfTEVEX09OX0xJTksxMDAwO1xcbiA3Mzc6XFx0XFxuIDczODpcXHRcXHRpZiAocnVsZXMgXFx1MDAyNiAoQklUKFRSSUdHRVJfTkVUREVWX0xJTktfMjUwMCkgfCBCSVQoVFJJR0dFUl9ORVRERVZfTElOSykpKVxcbiA3Mzk6XFx0XFx0XFx0b24gfD0gQUlSX1BIWV9MRURfT05fTElOSzI1MDA7XFxuIDc0MDpcXHRcXG4gNzQxOlxcdFxcdGlmIChydWxlcyBcXHUwMDI2IEJJVChUUklHR0VSX05FVERFVl9SWCkpIHtcXG4gNzQyOlxcdFxcdFxcdGJsaW5rIHw9IEFJUl9QSFlfTEVEX0JMSU5LXzEwUlggICB8XFxuIDc0MzpcXHRcXHRcXHRcXHQgQUlSX1BIWV9MRURfQkxJTktfMTAwUlggIHxcXG4gNzQ0OlxcdFxcdFxcdFxcdCBBSVJfUEhZX0xFRF9CTElOS18xMDAwUlggfFxcbiA3NDU6XFx0XFx0XFx0XFx0IEFJUl9QSFlfTEVEX0JMSU5LXzI1MDBSWDtcXG4gNzQ2OlxcdFxcdH1cXG4gNzQ3OlxcdFxcbiA3NDg6XFx0XFx0aWYgKHJ1bGVzIFxcdTAwMjYgQklUKFRSSUdHRVJfTkVUREVWX1RYKSkge1xcbiA3NDk6XFx0XFx0XFx0YmxpbmsgfD0gQUlSX1BIWV9MRURfQkxJTktfMTBUWCAgIHxcXG4gNzUwOlxcdFxcdFxcdFxcdCBBSVJfUEhZX0xFRF9CTElOS18xMDBUWCAgfFxcbiA3NTE6XFx0XFx0XFx0XFx0IEFJUl9QSFlfTEVEX0JMSU5LXzEwMDBUWCB8XFxuIDc1MjpcXHRcXHRcXHRcXHQgQUlSX1BIWV9MRURfQkxJTktfMjUwMFRYO1xcbiA3NTM6XFx0XFx0fVxcbiA3NTQ6XFx0XFxuIDc1NTpcXHRcXHRpZiAoYmxpbmsgfHwgb24pIHtcXG4gNzU2OlxcdFxcdFxcdC8qIHN3aXRjaCBody1jb250cm9sIG9uLCBzbyBsZWQtb24gYW5kIGxlZC1ibGluayBhcmUgb2ZmICovXFxuIDc1NzpcXHRcXHRcXHRjbGVhcl9iaXQoQUlSX1BIWV9MRURfU1RBVEVfRk9SQ0VfT04sXFxuIDc1ODpcXHRcXHRcXHRcXHQgIFxcdTAwMjZwcml2LVxcdTAwM2VsZWRbaW5kZXhdLnN0YXRlKTtcXG4gNzU5OlxcdFxcdFxcdGNsZWFyX2JpdChBSVJfUEhZX0xFRF9TVEFURV9GT1JDRV9CTElOSyxcXG4gNzYwOlxcdFxcdFxcdFxcdCAgXFx1MDAyNnByaXYtXFx1MDAzZWxlZFtpbmRleF0uc3RhdGUpO1xcbiA3NjE6XFx0XFx0fSBlbHNlIHtcXG4gNzYyOlxcdFxcdFxcdHByaXYtXFx1MDAzZWxlZFtpbmRleF0ucnVsZXMgPSAwO1xcbiA3NjM6XFx0XFx0fVxcbiA3NjQ6XFx0XFxuIDc2NTpcXHRcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBBSVJfUEhZX0xFRF9PTihpbmRleCksXFxuIDc2NjpcXHRcXHRcXHRcXHQgICAgIEFJUl9QSFlfTEVEX09OX01BU0ssIG9uKTtcXG4gNzY3OlxcdFxcbiA3Njg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDc2OTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA3NzA6XFx0XFxuIDc3MTpcXHRcXHRyZXR1cm4gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBBSVJfUEhZX0xFRF9CTElOSyhpbmRleCksXFxuIDc3MjpcXHRcXHRcXHRcXHQgICAgIGJsaW5rKTtcXG4gNzczOlxcdH07XFxuIDc3NDpcXHRcXG4gNzc1OlxcdHN0YXRpYyBpbnQgYWlyX2xlZF9pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LCB1OCBzdGF0ZSwgdTggcG9sKVxcbiA3NzY6XFx0e1xcbiA3Nzc6XFx0XFx0aW50IHZhbCA9IDA7XFxuIDc3ODpcXHRcXHRpbnQgZXJyO1xcbiA3Nzk6XFx0XFxuIDc4MDpcXHRcXHRpZiAoaW5kZXggXFx1MDAzZT0gRU44ODExSF9MRURfQ09VTlQpXFxuIDc4MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzgyOlxcdFxcbiA3ODM6XFx0XFx0aWYgKHN0YXRlID09IEFJUl9MRURfRU5BQkxFKVxcbiA3ODQ6XFx0XFx0XFx0dmFsIHw9IEFJUl9QSFlfTEVEX09OX0VOQUJMRTtcXG4gNzg1OlxcdFxcdGVsc2VcXG4gNzg2OlxcdFxcdFxcdHZhbCBcXHUwMDI2PSB+QUlSX1BIWV9MRURfT05fRU5BQkxFO1xcbiA3ODc6XFx0XFxuIDc4ODpcXHRcXHRpZiAocG9sID09IEFJUl9BQ1RJVkVfSElHSClcXG4gNzg5OlxcdFxcdFxcdHZhbCB8PSBBSVJfUEhZX0xFRF9PTl9QT0xBUklUWTtcXG4gNzkwOlxcdFxcdGVsc2VcXG4gNzkxOlxcdFxcdFxcdHZhbCBcXHUwMDI2PSB+QUlSX1BIWV9MRURfT05fUE9MQVJJVFk7XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdGVyciA9IHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIEFJUl9QSFlfTEVEX09OKGluZGV4KSxcXG4gNzk0OlxcdFxcdFxcdFxcdCAgICAgQUlSX1BIWV9MRURfT05fRU5BQkxFIHxcXG4gNzk1OlxcdFxcdFxcdFxcdCAgICAgQUlSX1BIWV9MRURfT05fUE9MQVJJVFksIHZhbCk7XFxuIDc5NjpcXHRcXG4gNzk3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiA3OTg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOToyMC40NDM1NDkyNjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2NTg0NjM1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgQmFjayBJbjogUmVzdW1pbmcgdGhlIGBhaXJfZW44ODExaC5jYCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGJhY2sgdG8gaXQuIFdlIGxlZnQgb2ZmIHNvbWV3aGVyZSBpbiB0aGUgYGFpcl9lbjg4MTFoLmNgIGZpbGUsIGFuZCBJIG5lZWQgdG8gY29udGludWUgbXkgYW5hbHlzaXMgdG93YXJkcyB0aGUgZW5kIG9mIGl0LiBNeSBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIHRoZSBjb2RlLiBJIGFudGljaXBhdGUgcG90ZW50aWFsbHkgaW1wb3J0YW50IHNlY3Rpb25zIHJlbGF0aW5nIHRvIHRoZSBvdmVyYWxsIGZ1bmN0aW9uYWxpdHkgd2lsbCBwcmVzZW50IHRoZW1zZWx2ZXMgYXMgSSBuYXZpZ2F0ZSB0b3dhcmRzIHRoZSBmaW5hbCBsaW5lcyBvZiB0aGUgZmlsZS4gTm8gdGltZSBsaWtlIHRoZSBwcmVzZW50IHRvIGdldCBzdGFydGVkLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSB3YWl0aW5nIHRvIGJlIHVuY292ZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNTYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjIyLjkwOTM5OTc3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXHRyZXR1cm4gMDtcXG4gODAxOlxcdH1cXG4gODAyOlxcdFxcbiA4MDM6XFx0c3RhdGljIGludCBhaXJfbGVkc19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBudW0sIGludCBkdXIsIGludCBtb2RlKVxcbiA4MDQ6XFx0e1xcbiA4MDU6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4gODA2OlxcdFxcdGludCByZXQsIGk7XFxuIDgwNzpcXHRcXG4gODA4OlxcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgQUlSX1BIWV9MRURfRFVSX0JMSU5LLFxcbiA4MDk6XFx0XFx0XFx0XFx0ICAgIGR1cik7XFxuIDgxMDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gODExOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDgxMjpcXHRcXG4gODEzOlxcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgQUlSX1BIWV9MRURfRFVSX09OLFxcbiA4MTQ6XFx0XFx0XFx0XFx0ICAgIGR1ciBcXHUwMDNlXFx1MDAzZSAxKTtcXG4gODE1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4MTY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODE3OlxcdFxcbiA4MTg6XFx0XFx0c3dpdGNoIChtb2RlKSB7XFxuIDgxOTpcXHRcXHRjYXNlIEFJUl9MRURfTU9ERV9ESVNBQkxFOlxcbiA4MjA6XFx0XFx0XFx0cmV0ID0gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgQUlSX1BIWV9MRURfQkNSLFxcbiA4MjE6XFx0XFx0XFx0XFx0XFx0ICAgICBBSVJfUEhZX0xFRF9CQ1JfRVhUX0NUUkwgfFxcbiA4MjI6XFx0XFx0XFx0XFx0XFx0ICAgICBBSVJfUEhZX0xFRF9CQ1JfTU9ERV9NQVNLLCAwKTtcXG4gODIzOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4MjQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODI1OlxcdFxcdFxcdGJyZWFrO1xcbiA4MjY6XFx0XFx0Y2FzZSBBSVJfTEVEX01PREVfVVNFUl9ERUZJTkU6XFxuIDgyNzpcXHRcXHRcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBBSVJfUEhZX0xFRF9CQ1IsXFxuIDgyODpcXHRcXHRcXHRcXHRcXHQgICAgIEFJUl9QSFlfTEVEX0JDUl9FWFRfQ1RSTCB8XFxuIDgyOTpcXHRcXHRcXHRcXHRcXHQgICAgIEFJUl9QSFlfTEVEX0JDUl9DTEtfRU4sXFxuIDgzMDpcXHRcXHRcXHRcXHRcXHQgICAgIEFJUl9QSFlfTEVEX0JDUl9FWFRfQ1RSTCB8XFxuIDgzMTpcXHRcXHRcXHRcXHRcXHQgICAgIEFJUl9QSFlfTEVEX0JDUl9DTEtfRU4pO1xcbiA4MzI6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDgzMzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MzQ6XFx0XFx0XFx0YnJlYWs7XFxuIDgzNTpcXHRcXHRkZWZhdWx0OlxcbiA4MzY6XFx0XFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJMRUQgbW9kZSAlZCBpcyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiLCBtb2RlKTtcXG4gODM3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4Mzg6XFx0XFx0fVxcbiA4Mzk6XFx0XFxuIDg0MDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtOyArK2kpIHtcXG4gODQxOlxcdFxcdFxcdHJldCA9IGFpcl9sZWRfaW5pdChwaHlkZXYsIGksIEFJUl9MRURfRU5BQkxFLCBBSVJfQUNUSVZFX0hJR0gpO1xcbiA4NDI6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gODQzOlxcdFxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiTEVEJWQgaW5pdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBpLCByZXQpO1xcbiA4NDQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODQ1OlxcdFxcdFxcdH1cXG4gODQ2OlxcdFxcdFxcdGFpcl9sZWRfaHdfY29udHJvbF9zZXQocGh5ZGV2LCBpLCBwcml2LVxcdTAwM2VsZWRbaV0ucnVsZXMpO1xcbiA4NDc6XFx0XFx0fVxcbiA4NDg6XFx0XFxuIDg0OTpcXHRcXHRyZXR1cm4gMDtcXG4gODUwOlxcdH1cXG4gODUxOlxcdFxcbiA4NTI6XFx0c3RhdGljIGludCBlbjg4MTFoX2xlZF9od19pc19zdXBwb3J0ZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXFxuIDg1MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBydWxlcylcXG4gODU0OlxcdHtcXG4gODU1OlxcdFxcdGlmIChpbmRleCBcXHUwMDNlPSBFTjg4MTFIX0xFRF9DT1VOVClcXG4gODU2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHQvKiBBbGwgY29tYmluYXRpb25zIG9mIHRoZSBzdXBwb3J0ZWQgdHJpZ2dlcnMgYXJlIGFsbG93ZWQgKi9cXG4gODU5OlxcdFxcdGlmIChydWxlcyBcXHUwMDI2IH5lbjg4MTFoX2xlZF90cmlnKVxcbiA4NjA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA4NjE6XFx0XFxuIDg2MjpcXHRcXHRyZXR1cm4gMDtcXG4gODYzOlxcdH07XFxuIDg2NDpcXHRcXG4gODY1OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGFuODgxMWhiX2Nsa19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodyxcXG4gODY2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50KVxcbiA4Njc6XFx0e1xcbiA4Njg6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xcbiA4Njk6XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXFx1MDAzZXBoeWRldjtcXG4gODcwOlxcdFxcdHUzMiBwYnVzX3ZhbHVlO1xcbiA4NzE6XFx0XFx0aW50IHJldDtcXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChwaHlkZXYsIEFOODgxMUhCX0hXVFJBUDIsIFxcdTAwMjZwYnVzX3ZhbHVlKTtcXG4gODc0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4NzU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODc2OlxcdFxcbiA4Nzc6XFx0XFx0cmV0dXJuIChwYnVzX3ZhbHVlIFxcdTAwMjYgQU44ODExSEJfSFdUUkFQMl9DS08pID8gNTAwMDAwMDAgOiAyNTAwMDAwMDtcXG4gODc4OlxcdH1cXG4gODc5OlxcdFxcbiA4ODA6XFx0c3RhdGljIGludCBhbjg4MTFoYl9jbGtfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KVxcbiA4ODE6XFx0e1xcbiA4ODI6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xcbiA4ODM6XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXFx1MDAzZXBoeWRldjtcXG4gODg0OlxcdFxcbiA4ODU6XFx0XFx0cmV0dXJuIGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX0NMS19EUlYsXFxuIDg4NjpcXHRcXHRcXHRcXHRcXHRcXHQgICBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLLFxcbiA4ODc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgQU44ODExSEJfQ0xLX0RSVl9DS09fTUFTSyk7XFxuIDg4ODpcXHR9XFxuIDg4OTpcXHRcXG4gODkwOlxcdHN0YXRpYyB2b2lkIGFuODgxMWhiX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KVxcbiA4OTE6XFx0e1xcbiA4OTI6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xcbiA4OTM6XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtXFx1MDAzZXBoeWRldjtcXG4gODk0OlxcdFxcbiA4OTU6XFx0XFx0YWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfQ0xLX0RSVixcXG4gODk2OlxcdFxcdFxcdFxcdFxcdCAgICBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLLCAwKTtcXG4gODk3OlxcdH1cXG4gODk4OlxcdFxcbiA4OTk6XFx0c3RhdGljIGludCBhbjg4MTFoYl9jbGtfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3ICpodylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MjIuOTA5NTg5MDQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTc3MzAxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBQSFkgRHJpdmVyKipcblxuT2theSwgc28gd2UncmUgbW92aW5nIG9uLiBXZSd2ZSBnb3QgdGhlIGJhc2ljcyBkb3duLCBub3cgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyB0aGluZyAqcmVhbGx5KiB3b3Jrcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgYHBoeV9kcml2ZXJgIHN0cnVjdHVyZSBhbmQgdGhvc2Uga2V5IGZ1bmN0aW9uczogdGhlIGBwcm9iZWAgYW5kIHRoZSBgY29uZmlnX2luaXRgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgcGllY2VzLCB0aGUgYmFja2JvbmUgb2YgaG93IGEgUEhZIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIHN5c3RlbSwgYW5kIGhvdyBpdCdzIGluaXRpYWxpemVkIGFuZCBicm91Z2h0IG9ubGluZS4gVW5kZXJzdGFuZGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBnaXZlIHVzIGEgdmVyeSBnb29kIGdyYXNwIG9mIHRoZSB3aG9sZSBwaWN0dXJlLiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlIHRoZSBsb3ctbGV2ZWwgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMDksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjI1LjAyNzMyMTgwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkwMDpcXHR7XFxuIDkwMTpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XFxuIDkwMjpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi1cXHUwMDNlcGh5ZGV2O1xcbiA5MDM6XFx0XFx0dTMyIHBidXNfdmFsdWU7XFxuIDkwNDpcXHRcXHRpbnQgcmV0O1xcbiA5MDU6XFx0XFxuIDkwNjpcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgQU44ODExSEJfQ0xLX0RSViwgXFx1MDAyNnBidXNfdmFsdWUpO1xcbiA5MDc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDkwODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5MDk6XFx0XFxuIDkxMDpcXHRcXHRyZXR1cm4gKHBidXNfdmFsdWUgXFx1MDAyNiBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLKTtcXG4gOTExOlxcdH1cXG4gOTEyOlxcdFxcbiA5MTM6XFx0c3RhdGljIGludCBhbjg4MTFoYl9jbGtfc2F2ZV9jb250ZXh0KHN0cnVjdCBjbGtfaHcgKmh3KVxcbiA5MTQ6XFx0e1xcbiA5MTU6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IGNsa19od190b19lbjg4MTFoX3ByaXYoaHcpO1xcbiA5MTY6XFx0XFxuIDkxNzpcXHRcXHRwcml2LVxcdTAwM2Vja29faXNfZW5hYmxlZCA9IGFuODgxMWhiX2Nsa19pc19lbmFibGVkKGh3KTtcXG4gOTE4OlxcdFxcbiA5MTk6XFx0XFx0cmV0dXJuIDA7XFxuIDkyMDpcXHR9XFxuIDkyMTpcXHRcXG4gOTIyOlxcdHN0YXRpYyB2b2lkIGFuODgxMWhiX2Nsa19yZXN0b3JlX2NvbnRleHQoc3RydWN0IGNsa19odyAqaHcpXFxuIDkyMzpcXHR7XFxuIDkyNDpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XFxuIDkyNTpcXHRcXG4gOTI2OlxcdFxcdGlmICghcHJpdi1cXHUwMDNlY2tvX2lzX2VuYWJsZWQpXFxuIDkyNzpcXHRcXHRcXHRhbjg4MTFoYl9jbGtfZGlzYWJsZShodyk7XFxuIDkyODpcXHR9XFxuIDkyOTpcXHRcXG4gOTMwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBhbjg4MTFoYl9jbGtfb3BzID0ge1xcbiA5MzE6XFx0XFx0LnJlY2FsY19yYXRlXFx0XFx0PSBhbjg4MTFoYl9jbGtfcmVjYWxjX3JhdGUsXFxuIDkzMjpcXHRcXHQuZW5hYmxlXFx0XFx0XFx0PSBhbjg4MTFoYl9jbGtfZW5hYmxlLFxcbiA5MzM6XFx0XFx0LmRpc2FibGVcXHRcXHQ9IGFuODgxMWhiX2Nsa19kaXNhYmxlLFxcbiA5MzQ6XFx0XFx0LmlzX2VuYWJsZWRcXHRcXHQ9IGFuODgxMWhiX2Nsa19pc19lbmFibGVkLFxcbiA5MzU6XFx0XFx0LnNhdmVfY29udGV4dFxcdFxcdD0gYW44ODExaGJfY2xrX3NhdmVfY29udGV4dCxcXG4gOTM2OlxcdFxcdC5yZXN0b3JlX2NvbnRleHRcXHQ9IGFuODgxMWhiX2Nsa19yZXN0b3JlX2NvbnRleHQsXFxuIDkzNzpcXHR9O1xcbiA5Mzg6XFx0XFxuIDkzOTpcXHRzdGF0aWMgaW50IGFuODgxMWhiX2Nsa19wcm92aWRlcl9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBjbGtfaHcgKmh3KVxcbiA5NDA6XFx0e1xcbiA5NDE6XFx0XFx0c3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDtcXG4gOTQyOlxcdFxcdGludCByZXQ7XFxuIDk0MzpcXHRcXG4gOTQ0OlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQ09NTU9OX0NMSykpXFxuIDk0NTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gOTQ2OlxcdFxcbiA5NDc6XFx0XFx0aW5pdC5uYW1lID0gZGV2bV9rYXNwcmludGYoZGV2LCBHRlBfS0VSTkVMLCBcXFwiJXMtY2tvXFxcIixcXG4gOTQ4OlxcdFxcdFxcdFxcdFxcdCAgIGZ3bm9kZV9nZXRfbmFtZShkZXZfZndub2RlKGRldikpKTtcXG4gOTQ5OlxcdFxcdGlmICghaW5pdC5uYW1lKVxcbiA5NTA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDk1MTpcXHRcXG4gOTUyOlxcdFxcdGluaXQub3BzID0gXFx1MDAyNmFuODgxMWhiX2Nsa19vcHM7XFxuIDk1MzpcXHRcXHRpbml0LmZsYWdzID0gMDtcXG4gOTU0OlxcdFxcdGluaXQubnVtX3BhcmVudHMgPSAwO1xcbiA5NTU6XFx0XFx0aHctXFx1MDAzZWluaXQgPSBcXHUwMDI2aW5pdDtcXG4gOTU2OlxcdFxcbiA5NTc6XFx0XFx0cmV0ID0gZGV2bV9jbGtfaHdfcmVnaXN0ZXIoZGV2LCBodyk7XFxuIDk1ODpcXHRcXHRpZiAocmV0KVxcbiA5NTk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gOTYwOlxcdFxcbiA5NjE6XFx0XFx0cmV0dXJuIGRldm1fb2ZfY2xrX2FkZF9od19wcm92aWRlcihkZXYsIG9mX2Nsa19od19zaW1wbGVfZ2V0LCBodyk7XFxuIDk2MjpcXHR9XFxuIDk2MzpcXHRcXG4gOTY0OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGVuODgxMWhfY2xrX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LFxcbiA5NjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHBhcmVudClcXG4gOTY2OlxcdHtcXG4gOTY3OlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBjbGtfaHdfdG9fZW44ODExaF9wcml2KGh3KTtcXG4gOTY4OlxcdFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBwcml2LVxcdTAwM2VwaHlkZXY7XFxuIDk2OTpcXHRcXHR1MzIgcGJ1c192YWx1ZTtcXG4gOTcwOlxcdFxcdGludCByZXQ7XFxuIDk3MTpcXHRcXG4gOTcyOlxcdFxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3JlYWQocGh5ZGV2LCBFTjg4MTFIX0hXVFJBUDEsIFxcdTAwMjZwYnVzX3ZhbHVlKTtcXG4gOTczOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA5NzQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gOTc1OlxcdFxcbiA5NzY6XFx0XFx0cmV0dXJuIChwYnVzX3ZhbHVlIFxcdTAwMjYgRU44ODExSF9IV1RSQVAxX0NLTykgPyA1MDAwMDAwMCA6IDI1MDAwMDAwO1xcbiA5Nzc6XFx0fVxcbiA5Nzg6XFx0XFxuIDk3OTpcXHRzdGF0aWMgaW50IGVuODgxMWhfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrX2h3ICpodylcXG4gOTgwOlxcdHtcXG4gOTgxOlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBjbGtfaHdfdG9fZW44ODExaF9wcml2KGh3KTtcXG4gOTgyOlxcdFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBwcml2LVxcdTAwM2VwaHlkZXY7XFxuIDk4MzpcXHRcXG4gOTg0OlxcdFxcdHJldHVybiBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0NMS19DR00sXFxuIDk4NTpcXHRcXHRcXHRcXHRcXHRcXHQgICBFTjg4MTFIX0NMS19DR01fQ0tPLFxcbiA5ODY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgRU44ODExSF9DTEtfQ0dNX0NLTyk7XFxuIDk4NzpcXHR9XFxuIDk4ODpcXHRcXG4gOTg5OlxcdHN0YXRpYyB2b2lkIGVuODgxMWhfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpXFxuIDk5MDpcXHR7XFxuIDk5MTpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XFxuIDk5MjpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi1cXHUwMDNlcGh5ZGV2O1xcbiA5OTM6XFx0XFxuIDk5NDpcXHRcXHRhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0NMS19DR00sXFxuIDk5NTpcXHRcXHRcXHRcXHRcXHQgICAgRU44ODExSF9DTEtfQ0dNX0NLTywgMCk7XFxuIDk5NjpcXHR9XFxuIDk5NzpcXHRcXG4gOTk4OlxcdHN0YXRpYyBpbnQgZW44ODExaF9jbGtfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3ICpodylcXG4gOTk5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MjUuMDI3NTA5Mjk3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjUwMDUwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgYWlyX2VuODgxMWguY2AgLSBVcCB0byBMaW5lIDEyMDAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVzdCBvZiBgYWlyX2VuODgxMWguY2AuIFRoYXQgZmlsZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgc3lzdGVtIHdvcmtzLCBhbmQgSSdtIGd1ZXNzaW5nIHVwIHRvIGxpbmUgMTIwMCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBjaHVuayB0byB3b3JrIHdpdGguIEkgd2FudCB0byBzZWUgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCBhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBwZXJoYXBzIHNvbWUgaW50ZXJydXB0IGhhbmRsZXJzIG9yIERNQSBzZXR1cCwgYW5kIGRlZmluaXRlbHkgc29tZSBjb3JlIHByb2Nlc3NpbmcgZnVuY3Rpb25zLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBzZWN0aW9uIHByb2JhYmx5IGRlYWxzIHdpdGggdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBhbmQgcG9zc2libHkgdGhlIGJhc2ljIGludGVyZmFjZSB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBvciBtYXliZSB0aGUgY29yZSBuZXR3b3JrIGhhbmRsaW5nLiBMZXQncyBzZWUgaWYgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBob2xkIHdhdGVyIG9uY2UgSSBnZXQgaW50byBpdC4gVGhlIGdvYWwgaXMgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoaXMgY3JpdGljYWwgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE4OSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MjcuMzkyNTE3NTQ4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAwMDpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gY2xrX2h3X3RvX2VuODgxMWhfcHJpdihodyk7XFxuMTAwMTpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi1cXHUwMDNlcGh5ZGV2O1xcbjEwMDI6XFx0XFx0dTMyIHBidXNfdmFsdWU7XFxuMTAwMzpcXHRcXHRpbnQgcmV0O1xcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgRU44ODExSF9DTEtfQ0dNLCBcXHUwMDI2cGJ1c192YWx1ZSk7XFxuMTAwNjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMDA3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTAwODpcXHRcXG4xMDA5OlxcdFxcdHJldHVybiAocGJ1c192YWx1ZSBcXHUwMDI2IEVOODgxMUhfQ0xLX0NHTV9DS08pO1xcbjEwMTA6XFx0fVxcbjEwMTE6XFx0XFxuMTAxMjpcXHRzdGF0aWMgaW50IGVuODgxMWhfY2xrX3NhdmVfY29udGV4dChzdHJ1Y3QgY2xrX2h3ICpodylcXG4xMDEzOlxcdHtcXG4xMDE0OlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBjbGtfaHdfdG9fZW44ODExaF9wcml2KGh3KTtcXG4xMDE1OlxcdFxcbjEwMTY6XFx0XFx0cHJpdi1cXHUwMDNlY2tvX2lzX2VuYWJsZWQgPSBlbjg4MTFoX2Nsa19pc19lbmFibGVkKGh3KTtcXG4xMDE3OlxcdFxcbjEwMTg6XFx0XFx0cmV0dXJuIDA7XFxuMTAxOTpcXHR9XFxuMTAyMDpcXHRcXG4xMDIxOlxcdHN0YXRpYyB2b2lkIGVuODgxMWhfY2xrX3Jlc3RvcmVfY29udGV4dChzdHJ1Y3QgY2xrX2h3ICpodylcXG4xMDIyOlxcdHtcXG4xMDIzOlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBjbGtfaHdfdG9fZW44ODExaF9wcml2KGh3KTtcXG4xMDI0OlxcdFxcbjEwMjU6XFx0XFx0aWYgKCFwcml2LVxcdTAwM2Vja29faXNfZW5hYmxlZClcXG4xMDI2OlxcdFxcdFxcdGVuODgxMWhfY2xrX2Rpc2FibGUoaHcpO1xcbjEwMjc6XFx0fVxcbjEwMjg6XFx0XFxuMTAyOTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgZW44ODExaF9jbGtfb3BzID0ge1xcbjEwMzA6XFx0XFx0LnJlY2FsY19yYXRlXFx0XFx0PSBlbjg4MTFoX2Nsa19yZWNhbGNfcmF0ZSxcXG4xMDMxOlxcdFxcdC5lbmFibGVcXHRcXHRcXHQ9IGVuODgxMWhfY2xrX2VuYWJsZSxcXG4xMDMyOlxcdFxcdC5kaXNhYmxlXFx0XFx0PSBlbjg4MTFoX2Nsa19kaXNhYmxlLFxcbjEwMzM6XFx0XFx0LmlzX2VuYWJsZWRcXHRcXHQ9IGVuODgxMWhfY2xrX2lzX2VuYWJsZWQsXFxuMTAzNDpcXHRcXHQuc2F2ZV9jb250ZXh0XFx0XFx0PSBlbjg4MTFoX2Nsa19zYXZlX2NvbnRleHQsXFxuMTAzNTpcXHRcXHQucmVzdG9yZV9jb250ZXh0XFx0PSBlbjg4MTFoX2Nsa19yZXN0b3JlX2NvbnRleHQsXFxuMTAzNjpcXHR9O1xcbjEwMzc6XFx0XFxuMTAzODpcXHRzdGF0aWMgaW50IGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGNsa19odyAqaHcpXFxuMTAzOTpcXHR7XFxuMTA0MDpcXHRcXHRzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0O1xcbjEwNDE6XFx0XFx0aW50IHJldDtcXG4xMDQyOlxcdFxcbjEwNDM6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DT01NT05fQ0xLKSlcXG4xMDQ0OlxcdFxcdFxcdHJldHVybiAwO1xcbjEwNDU6XFx0XFxuMTA0NjpcXHRcXHRpbml0Lm5hbWUgPSBkZXZtX2thc3ByaW50ZihkZXYsIEdGUF9LRVJORUwsIFxcXCIlcy1ja29cXFwiLFxcbjEwNDc6XFx0XFx0XFx0XFx0XFx0ICAgZndub2RlX2dldF9uYW1lKGRldl9md25vZGUoZGV2KSkpO1xcbjEwNDg6XFx0XFx0aWYgKCFpbml0Lm5hbWUpXFxuMTA0OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMDUwOlxcdFxcbjEwNTE6XFx0XFx0aW5pdC5vcHMgPSBcXHUwMDI2ZW44ODExaF9jbGtfb3BzO1xcbjEwNTI6XFx0XFx0aW5pdC5mbGFncyA9IDA7XFxuMTA1MzpcXHRcXHRpbml0Lm51bV9wYXJlbnRzID0gMDtcXG4xMDU0OlxcdFxcdGh3LVxcdTAwM2Vpbml0ID0gXFx1MDAyNmluaXQ7XFxuMTA1NTpcXHRcXG4xMDU2OlxcdFxcdHJldCA9IGRldm1fY2xrX2h3X3JlZ2lzdGVyKGRldiwgaHcpO1xcbjEwNTc6XFx0XFx0aWYgKHJldClcXG4xMDU4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTA1OTpcXHRcXG4xMDYwOlxcdFxcdHJldHVybiBkZXZtX29mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LCBvZl9jbGtfaHdfc2ltcGxlX2dldCwgaHcpO1xcbjEwNjE6XFx0fVxcbjEwNjI6XFx0XFxuMTA2MzpcXHRzdGF0aWMgaW50IGVuODgxMWhfbGVkc19zZXR1cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjEwNjQ6XFx0e1xcbjEwNjU6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4xMDY2OlxcdFxcdGludCByZXQ7XFxuMTA2NzpcXHRcXG4xMDY4OlxcdFxcdHByaXYtXFx1MDAzZWxlZFswXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMDtcXG4xMDY5OlxcdFxcdHByaXYtXFx1MDAzZWxlZFsxXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMTtcXG4xMDcwOlxcdFxcdHByaXYtXFx1MDAzZWxlZFsyXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMjtcXG4xMDcxOlxcdFxcbjEwNzI6XFx0XFx0cmV0ID0gYWlyX2xlZHNfaW5pdChwaHlkZXYsIEVOODgxMUhfTEVEX0NPVU5ULCBBSVJfUEhZX0xFRF9EVVIsXFxuMTA3MzpcXHRcXHRcXHRcXHQgICAgQUlSX0xFRF9NT0RFX0RJU0FCTEUpO1xcbjEwNzQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTA3NTpcXHRcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkZhaWxlZCB0byBkaXNhYmxlIGxlZHM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEwNzY6XFx0XFxuMTA3NzpcXHRcXHRyZXR1cm4gcmV0O1xcbjEwNzg6XFx0fVxcbjEwNzk6XFx0XFxuMTA4MDpcXHRzdGF0aWMgaW50IGFuODgxMWhiX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTA4MTpcXHR7XFxuMTA4MjpcXHRcXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XFxuMTA4MzpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2O1xcbjEwODQ6XFx0XFx0aW50IHJldDtcXG4xMDg1OlxcdFxcbjEwODY6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgc2l6ZW9mKHN0cnVjdCBlbjg4MTFoX3ByaXYpLFxcbjEwODc6XFx0XFx0XFx0XFx0ICAgIEdGUF9LRVJORUwpO1xcbjEwODg6XFx0XFx0aWYgKCFwcml2KVxcbjEwODk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTA5MDpcXHRcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbjEwOTE6XFx0XFxuMTA5MjpcXHRcXHQvKlxcbjEwOTM6XFx0XFx0ICogVGhlIEFOODgxMUhCIFBIWSBhZGRyZXNzIGlzIHJlc3RyaWN0ZWQgdG8gOC0xNSAoZGVjaW1hbCksXFxuMTA5NDpcXHRcXHQgKiBkZXBlbmRpbmcgb24gdGhlIGJvYXJkIGhhcmR3YXJlIHN0cmFwcGluZy5cXG4xMDk1OlxcdFxcdCAqIFRoaXMgbWVhbnMgdGhlIFBCVVMgYWRkcmVzcyBpcyBvbmx5IGluIHRoZSByYW5nZSAxNi0yMSAoZGVjaW1hbCksXFxuMTA5NjpcXHRcXHQgKiBzbyB3ZSBkbyBub3QgbmVlZCB0byBoYW5kbGUgdGhlIGNhc2VcXG4xMDk3OlxcdFxcdCAqIHdoZXJlIHRoZSBQQlVTIGFkZHJlc3MgZXhjZWVkcyAzMSAoZGVjaW1hbCkuXFxuMTA5ODpcXHRcXHQgKi9cXG4xMDk5OlxcdFxcdG1kaW9kZXYgPSBtZGlvX2RldmljZV9jcmVhdGUocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MjcuMzkyNzI0ODM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODA5MTgxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgc28gSSdsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IHRoZSByZXN0IG9mIGBhaXJfZW44ODExaC5jYCBhbGwgdGhlIHdheSB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLiBObyBwb2ludCBqdXN0IGZvY3VzaW5nIG9uIGEgZnJhZ21lbnQsIGdvdHRhIHNlZSB0aGUgd2hvbGUgY29udGV4dCBoZXJlLiBMZXQncyBnZXQgdGhlIHdob2xlIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE1MywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MjkuNTczNjQ1NzM2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwMDpcXHRcXHRcXHRcXHRcXHQgICAgIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyICsgRU44ODExSF9QQlVTX0FERFJfT0ZGUyk7XFxuMTEwMTpcXHRcXHRpZiAoSVNfRVJSKG1kaW9kZXYpKVxcbjExMDI6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobWRpb2Rldik7XFxuMTEwMzpcXHRcXG4xMTA0OlxcdFxcdHJldCA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKG1kaW9kZXYpO1xcbjExMDU6XFx0XFx0aWYgKHJldClcXG4xMTA2OlxcdFxcdFxcdGdvdG8gZXJyX2Rldl9mcmVlO1xcbjExMDc6XFx0XFxuMTEwODpcXHRcXHRwcml2LVxcdTAwM2VwYnVzZGV2ID0gbWRpb2RldjtcXG4xMTA5OlxcdFxcbjExMTA6XFx0XFx0cmV0ID0gYW44ODExaGJfbG9hZF9maXJtd2FyZShwaHlkZXYpO1xcbjExMTE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4xMTEyOlxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiTG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjExMTM6XFx0XFx0XFx0Z290byBlcnJfZGV2X2NyZWF0ZTtcXG4xMTE0OlxcdFxcdH1cXG4xMTE1OlxcdFxcbjExMTY6XFx0XFx0ZW44ODExaF9wcmludF9md192ZXJzaW9uKHBoeWRldik7XFxuMTExNzpcXHRcXG4xMTE4OlxcdFxcdC8qIG1jdSBoYXMganVzdCByZXN0YXJ0ZWQgYWZ0ZXIgZmlybXdhcmUgbG9hZCAqL1xcbjExMTk6XFx0XFx0cHJpdi1cXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcXG4xMTIwOlxcdFxcbjExMjE6XFx0XFx0LyogTURJT19ERVZTMS8yIGVtcHR5LCBzbyBzZXQgbW1kc19wcmVzZW50IGJpdHMgaGVyZSAqL1xcbjExMjI6XFx0XFx0cGh5ZGV2LVxcdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xcbjExMjM6XFx0XFxuMTEyNDpcXHRcXHRyZXQgPSBlbjg4MTFoX2xlZHNfc2V0dXAocGh5ZGV2KTtcXG4xMTI1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjExMjY6XFx0XFx0XFx0Z290byBlcnJfZGV2X2NyZWF0ZTtcXG4xMTI3OlxcdFxcbjExMjg6XFx0XFx0cHJpdi1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbjExMjk6XFx0XFx0LyogQ28tQ2xvY2sgT3V0cHV0ICovXFxuMTEzMDpcXHRcXHRyZXQgPSBhbjg4MTFoYl9jbGtfcHJvdmlkZXJfc2V0dXAoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIFxcdTAwMjZwcml2LVxcdTAwM2Vodyk7XFxuMTEzMTpcXHRcXHRpZiAocmV0KVxcbjExMzI6XFx0XFx0XFx0Z290byBlcnJfZGV2X2NyZWF0ZTtcXG4xMTMzOlxcdFxcbjExMzQ6XFx0XFx0LyogQ29uZmlndXJlIGxlZCBncGlvIHBpbnMgYXMgb3V0cHV0ICovXFxuMTEzNTpcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9HUElPX09VVFBVVCxcXG4xMTM2OlxcdFxcdFxcdFxcdFxcdFxcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1LFxcbjExMzc6XFx0XFx0XFx0XFx0XFx0XFx0ICBBTjg4MTFIQl9HUElPX09VVFBVVF8zNDUpO1xcbjExMzg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTEzOTpcXHRcXHRcXHRnb3RvIGVycl9kZXZfY3JlYXRlO1xcbjExNDA6XFx0XFxuMTE0MTpcXHRcXHRyZXR1cm4gMDtcXG4xMTQyOlxcdFxcbjExNDM6XFx0ZXJyX2Rldl9jcmVhdGU6XFxuMTE0NDpcXHRcXHRtZGlvX2RldmljZV9yZW1vdmUobWRpb2Rldik7XFxuMTE0NTpcXHRcXG4xMTQ2OlxcdGVycl9kZXZfZnJlZTpcXG4xMTQ3OlxcdFxcdG1kaW9fZGV2aWNlX2ZyZWUobWRpb2Rldik7XFxuMTE0ODpcXHRcXHRyZXR1cm4gcmV0O1xcbjExNDk6XFx0fVxcbjExNTA6XFx0XFxuMTE1MTpcXHRzdGF0aWMgaW50IGVuODgxMWhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xMTUyOlxcdHtcXG4xMTUzOlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXY7XFxuMTE1NDpcXHRcXHRpbnQgcmV0O1xcbjExNTU6XFx0XFxuMTE1NjpcXHRcXHRwcml2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBzaXplb2Yoc3RydWN0IGVuODgxMWhfcHJpdiksXFxuMTE1NzpcXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCk7XFxuMTE1ODpcXHRcXHRpZiAoIXByaXYpXFxuMTE1OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMTYwOlxcdFxcdHBoeWRldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuMTE2MTpcXHRcXG4xMTYyOlxcdFxcdHJldCA9IGVuODgxMWhfbG9hZF9maXJtd2FyZShwaHlkZXYpO1xcbjExNjM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTE2NDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjExNjU6XFx0XFxuMTE2NjpcXHRcXHQvKiBtY3UgaGFzIGp1c3QgcmVzdGFydGVkIGFmdGVyIGZpcm13YXJlIGxvYWQgKi9cXG4xMTY3OlxcdFxcdHByaXYtXFx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gZmFsc2U7XFxuMTE2ODpcXHRcXG4xMTY5OlxcdFxcdC8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi9cXG4xMTcwOlxcdFxcdHBoeWRldi1cXHUwMDNlYzQ1X2lkcy5tbWRzX3ByZXNlbnQgfD0gTURJT19ERVZTX1BNQVBNRCB8IE1ESU9fREVWU19BTjtcXG4xMTcxOlxcdFxcbjExNzI6XFx0XFx0cmV0ID0gZW44ODExaF9sZWRzX3NldHVwKHBoeWRldik7XFxuMTE3MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTc0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE3NTpcXHRcXG4xMTc2OlxcdFxcdHByaXYtXFx1MDAzZXBoeWRldiA9IHBoeWRldjtcXG4xMTc3OlxcdFxcdC8qIENvLUNsb2NrIE91dHB1dCAqL1xcbjExNzg6XFx0XFx0cmV0ID0gZW44ODExaF9jbGtfcHJvdmlkZXJfc2V0dXAoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIFxcdTAwMjZwcml2LVxcdTAwM2Vodyk7XFxuMTE3OTpcXHRcXHRpZiAocmV0KVxcbjExODA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTgxOlxcdFxcbjExODI6XFx0XFx0cmV0dXJuIDA7XFxuMTE4MzpcXHR9XFxuMTE4NDpcXHRcXG4xMTg1OlxcdHN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjExODY6XFx0e1xcbjExODc6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuMTE4ODpcXHRcXHR1MzIgcGJ1c192YWx1ZSA9IDA7XFxuMTE4OTpcXHRcXHR1bnNpZ25lZCBpbnQgcG9sO1xcbjExOTA6XFx0XFx0aW50IHJldDtcXG4xMTkxOlxcdFxcbjExOTI6XFx0XFx0cmV0ID0gcGh5X2dldF9tYW51YWxfcnhfcG9sYXJpdHkoZGV2X2Z3bm9kZShkZXYpLFxcbjExOTM6XFx0XFx0XFx0XFx0XFx0XFx0IHBoeV9tb2RlcyhwaHlkZXYtXFx1MDAzZWludGVyZmFjZSksIFxcdTAwMjZwb2wpO1xcbjExOTQ6XFx0XFx0aWYgKHJldClcXG4xMTk1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE5NjpcXHRcXHRpZiAocG9sID09IFBIWV9QT0xfTk9STUFMKVxcbjExOTc6XFx0XFx0XFx0cGJ1c192YWx1ZSB8PSBBTjg4MTFIQl9SWF9QT0xBUklUWV9OT1JNQUw7XFxuMTE5ODpcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9SWF9QT0xBUklUWSxcXG4xMTk5OlxcdFxcdFxcdFxcdFxcdFxcdCAgQU44ODExSEJfUlhfUE9MQVJJVFlfTk9STUFMLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOToyOS41NzM4MTM1ODZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2Mzk5Mzk1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBzbyBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIHJlc3Qgb2YgYGFpcl9lbjg4MTFoLmNgIGFsbCB0aGUgd2F5IHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIE5vIHBvaW50IGp1c3QgZm9jdXNpbmcgb24gYSBmcmFnbWVudCwgZ290dGEgc2VlIHRoZSB3aG9sZSBjb250ZXh0IGhlcmUuIExldCdzIGdldCB0aGUgd2hvbGUgdGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODc4LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOTozMS42Mzc4MTEyM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDA6XFx0XFx0XFx0XFx0XFx0XFx0ICBwYnVzX3ZhbHVlKTtcXG4xMjAxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEyMDI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMjAzOlxcdFxcbjEyMDQ6XFx0XFx0cmV0ID0gcGh5X2dldF9tYW51YWxfdHhfcG9sYXJpdHkoZGV2X2Z3bm9kZShkZXYpLFxcbjEyMDU6XFx0XFx0XFx0XFx0XFx0XFx0IHBoeV9tb2RlcyhwaHlkZXYtXFx1MDAzZWludGVyZmFjZSksIFxcdTAwMjZwb2wpO1xcbjEyMDY6XFx0XFx0aWYgKHJldClcXG4xMjA3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTIwODpcXHRcXHRwYnVzX3ZhbHVlID0gMDtcXG4xMjA5OlxcdFxcdGlmIChwb2wgPT0gUEhZX1BPTF9OT1JNQUwpXFxuMTIxMDpcXHRcXHRcXHRwYnVzX3ZhbHVlIHw9IEFOODgxMUhCX1RYX1BPTEFSSVRZX05PUk1BTDtcXG4xMjExOlxcdFxcdHJldHVybiBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9UWF9QT0xBUklUWSxcXG4xMjEyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIEFOODgxMUhCX1RYX1BPTEFSSVRZX05PUk1BTCxcXG4xMjEzOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHBidXNfdmFsdWUpO1xcbjEyMTQ6XFx0fVxcbjEyMTU6XFx0XFxuMTIxNjpcXHRzdGF0aWMgaW50IGVuODgxMWhfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjEyMTc6XFx0e1xcbjEyMTg6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuMTIxOTpcXHRcXHR1bnNpZ25lZCBpbnQgcG9sLCBkZWZhdWx0X3BvbDtcXG4xMjIwOlxcdFxcdHUzMiBwYnVzX3ZhbHVlID0gMDtcXG4xMjIxOlxcdFxcdGludCByZXQ7XFxuMTIyMjpcXHRcXG4xMjIzOlxcdFxcdGRlZmF1bHRfcG9sID0gUEhZX1BPTF9OT1JNQUw7XFxuMTIyNDpcXHRcXHRpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsIFxcXCJhaXJvaGEscG5zd2FwLXJ4XFxcIikpXFxuMTIyNTpcXHRcXHRcXHRkZWZhdWx0X3BvbCA9IFBIWV9QT0xfSU5WRVJUO1xcbjEyMjY6XFx0XFxuMTIyNzpcXHRcXHRyZXQgPSBwaHlfZ2V0X3J4X3BvbGFyaXR5KGRldl9md25vZGUoZGV2KSwgcGh5X21vZGVzKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlKSxcXG4xMjI4OlxcdFxcdFxcdFxcdFxcdCAgQklUKFBIWV9QT0xfTk9STUFMKSB8IEJJVChQSFlfUE9MX0lOVkVSVCksXFxuMTIyOTpcXHRcXHRcXHRcXHRcXHQgIGRlZmF1bHRfcG9sLCBcXHUwMDI2cG9sKTtcXG4xMjMwOlxcdFxcdGlmIChyZXQpXFxuMTIzMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEyMzI6XFx0XFx0aWYgKHBvbCA9PSBQSFlfUE9MX0lOVkVSVClcXG4xMjMzOlxcdFxcdFxcdHBidXNfdmFsdWUgfD0gRU44ODExSF9QT0xBUklUWV9SWF9SRVZFUlNFO1xcbjEyMzQ6XFx0XFxuMTIzNTpcXHRcXHRkZWZhdWx0X3BvbCA9IFBIWV9QT0xfTk9STUFMO1xcbjEyMzY6XFx0XFx0aWYgKGRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCBcXFwiYWlyb2hhLHBuc3dhcC10eFxcXCIpKVxcbjEyMzc6XFx0XFx0XFx0ZGVmYXVsdF9wb2wgPSBQSFlfUE9MX0lOVkVSVDtcXG4xMjM4OlxcdFxcbjEyMzk6XFx0XFx0cmV0ID0gcGh5X2dldF90eF9wb2xhcml0eShkZXZfZndub2RlKGRldiksIHBoeV9tb2RlcyhwaHlkZXYtXFx1MDAzZWludGVyZmFjZSksXFxuMTI0MDpcXHRcXHRcXHRcXHRcXHQgIEJJVChQSFlfUE9MX05PUk1BTCkgfCBCSVQoUEhZX1BPTF9JTlZFUlQpLFxcbjEyNDE6XFx0XFx0XFx0XFx0XFx0ICBkZWZhdWx0X3BvbCwgXFx1MDAyNnBvbCk7XFxuMTI0MjpcXHRcXHRpZiAocmV0KVxcbjEyNDM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMjQ0OlxcdFxcdGlmIChwb2wgPT0gUEhZX1BPTF9OT1JNQUwpXFxuMTI0NTpcXHRcXHRcXHRwYnVzX3ZhbHVlIHw9IEVOODgxMUhfUE9MQVJJVFlfVFhfTk9STUFMO1xcbjEyNDY6XFx0XFxuMTI0NzpcXHRcXHRyZXR1cm4gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9QT0xBUklUWSxcXG4xMjQ4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIEVOODgxMUhfUE9MQVJJVFlfUlhfUkVWRVJTRSB8XFxuMTI0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICBFTjg4MTFIX1BPTEFSSVRZX1RYX05PUk1BTCxcXG4xMjUwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHBidXNfdmFsdWUpO1xcbjEyNTE6XFx0fVxcbjEyNTI6XFx0XFxuMTI1MzpcXHRzdGF0aWMgaW50IGFuODgxMWhiX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTI1NDpcXHR7XFxuMTI1NTpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbjEyNTY6XFx0XFx0aW50IHJldDtcXG4xMjU3OlxcdFxcbjEyNTg6XFx0XFx0LyogSWYgcmVzdGFydCBoYXBwZW5lZCBpbiAucHJvYmUoKSwgbm8gbmVlZCB0byByZXN0YXJ0IG5vdyAqL1xcbjEyNTk6XFx0XFx0aWYgKHByaXYtXFx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0KSB7XFxuMTI2MDpcXHRcXHRcXHRyZXQgPSBlbjg4MTFoX3Jlc3RhcnRfbWN1KHBoeWRldik7XFxuMTI2MTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjYyOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTI2MzpcXHRcXHR9IGVsc2Uge1xcbjEyNjQ6XFx0XFx0XFx0LyogTmV4dCBjYWxscyB0byAuY29uZmlnX2luaXQoKSBtY3UgbmVlZHMgdG8gcmVzdGFydCAqL1xcbjEyNjU6XFx0XFx0XFx0cHJpdi1cXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSB0cnVlO1xcbjEyNjY6XFx0XFx0fVxcbjEyNjc6XFx0XFxuMTI2ODpcXHRcXHRyZXQgPSBhbjg4MTFoYl9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHBoeWRldik7XFxuMTI2OTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjcwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTI3MTpcXHRcXG4xMjcyOlxcdFxcdHJldCA9IGFpcl9sZWRzX2luaXQocGh5ZGV2LCBFTjg4MTFIX0xFRF9DT1VOVCwgQUlSX1BIWV9MRURfRFVSLFxcbjEyNzM6XFx0XFx0XFx0XFx0ICAgIEFJUl9MRURfTU9ERV9VU0VSX0RFRklORSk7XFxuMTI3NDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjc1OlxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbGVkczogJWRcXFxcblxcXCIsIHJldCk7XFxuMTI3NjpcXHRcXG4xMjc3OlxcdFxcdHJldHVybiByZXQ7XFxuMTI3ODpcXHR9XFxuMTI3OTpcXHRcXG4xMjgwOlxcdHN0YXRpYyBpbnQgZW44ODExaF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjEyODE6XFx0e1xcbjEyODI6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4xMjgzOlxcdFxcdGludCByZXQ7XFxuMTI4NDpcXHRcXG4xMjg1OlxcdFxcdC8qIElmIHJlc3RhcnQgaGFwcGVuZWQgaW4gLnByb2JlKCksIG5vIG5lZWQgdG8gcmVzdGFydCBub3cgKi9cXG4xMjg2OlxcdFxcdGlmIChwcml2LVxcdTAwM2VtY3VfbmVlZHNfcmVzdGFydCkge1xcbjEyODc6XFx0XFx0XFx0cmV0ID0gZW44ODExaF9yZXN0YXJ0X21jdShwaHlkZXYpO1xcbjEyODg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTI4OTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEyOTA6XFx0XFx0fSBlbHNlIHtcXG4xMjkxOlxcdFxcdFxcdC8qIE5leHQgY2FsbHMgdG8gLmNvbmZpZ19pbml0KCkgbWN1IG5lZWRzIHRvIHJlc3RhcnQgKi9cXG4xMjkyOlxcdFxcdFxcdHByaXYtXFx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gdHJ1ZTtcXG4xMjkzOlxcdFxcdH1cXG4xMjk0OlxcdFxcbjEyOTU6XFx0XFx0LyogU2VsZWN0IG1vZGUgMSwgdGhlIG9ubHkgbW9kZSBzdXBwb3J0ZWQuXFxuMTI5NjpcXHRcXHQgKiBDb25maWd1cmVzIHRoZSBTZXJEZXMgZm9yIDI1MDBCYXNlLVggd2l0aCByYXRlIGFkYXB0YXRpb25cXG4xMjk3OlxcdFxcdCAqL1xcbjEyOTg6XFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfMSxcXG4xMjk5OlxcdFxcdFxcdFxcdCAgICBBSVJfUEhZX01DVV9DTURfMV9NT0RFMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjMxLjYzODA3ODVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA4NjU2MzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGlzLiBMZXQncyBzZWUgd2hhdCB0aGlzIGRvY3VtZW50IGNvbnRhaW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGZvcm11bGF0ZSBhIGNvaGVyZW50IHJlc3BvbnNlLiBKdXN0IGdpbW1lIGEgc2Vjb25kLiBJIG5lZWQgdG8gc2VlIHRoZSBlbnRpcmUgdGV4dCBiZWZvcmUgSSBjYW4gZnVsbHkgc3ludGhlc2l6ZSBpdC4gSSdsbCByZWFkIHRvIHRoZSB2ZXJ5IGVuZCBvZiB0aGUgZmlsZS4uLiBhbmQgdGhlbiBJJ2xsIGJlIGFibGUgdG8gcHJvcGVybHkgc3VtbWFyaXplIHdoYXQncyBiZWluZyBhc2tlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MDcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6MzMuNzI0NjQ1NTczWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjg0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMDA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTMwMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMDI6XFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfMixcXG4xMzAzOlxcdFxcdFxcdFxcdCAgICBBSVJfUEhZX01DVV9DTURfMl9NT0RFMSk7XFxuMTMwNDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzA1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTMwNjpcXHRcXHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF8zLFxcbjEzMDc6XFx0XFx0XFx0XFx0ICAgIEFJUl9QSFlfTUNVX0NNRF8zX01PREUxKTtcXG4xMzA4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEzMDk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzEwOlxcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQUlSX1BIWV9NQ1VfQ01EXzQsXFxuMTMxMTpcXHRcXHRcXHRcXHQgICAgQUlSX1BIWV9NQ1VfQ01EXzRfTU9ERTEpO1xcbjEzMTI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTMxMzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMTQ6XFx0XFxuMTMxNTpcXHRcXHRyZXQgPSBlbjg4MTFoX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkocGh5ZGV2KTtcXG4xMzE2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEzMTc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzE4OlxcdFxcbjEzMTk6XFx0XFx0cmV0ID0gYWlyX2xlZHNfaW5pdChwaHlkZXYsIEVOODgxMUhfTEVEX0NPVU5ULCBBSVJfUEhZX0xFRF9EVVIsXFxuMTMyMDpcXHRcXHRcXHRcXHQgICAgQUlSX0xFRF9NT0RFX1VTRVJfREVGSU5FKTtcXG4xMzIxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMTMyMjpcXHRcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIGxlZHM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEzMjM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzI0OlxcdFxcdH1cXG4xMzI1OlxcdFxcbjEzMjY6XFx0XFx0LyogQ29uZmlndXJlIGxlZCBncGlvIHBpbnMgYXMgb3V0cHV0LiBNdXN0IGJlIHJlZG9uZSBvbiBldmVyeVxcbjEzMjc6XFx0XFx0ICogLmNvbmZpZ19pbml0KCksIG5vdCBqdXN0IG9uY2UgaW4gLnByb2JlKCk6IGVuODgxMWhfcmVzdGFydF9tY3UoKVxcbjEzMjg6XFx0XFx0ICogcmVzZXRzIGJ1Y2twYnVzLW1hcHBlZCBNQ1Ugc3RhdGUgKGluY2wuIHRoaXMgcmVnaXN0ZXIpIG9uIGV2ZXJ5XFxuMTMyOTpcXHRcXHQgKiBjYWxsIGFmdGVyIHRoZSBmaXJzdCwgZS5nLiBvbiBsaW5rIHJlbmVnb3RpYXRpb24gb3IgaWZ1cC9pZmRvd24uXFxuMTMzMDpcXHRcXHQgKi9cXG4xMzMxOlxcdFxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfR1BJT19PVVRQVVQsXFxuMTMzMjpcXHRcXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfR1BJT19PVVRQVVRfMzQ1LFxcbjEzMzM6XFx0XFx0XFx0XFx0XFx0XFx0ICBFTjg4MTFIX0dQSU9fT1VUUFVUXzM0NSk7XFxuMTMzNDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzM1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTMzNjpcXHRcXG4xMzM3OlxcdFxcdHJldHVybiAwO1xcbjEzMzg6XFx0fVxcbjEzMzk6XFx0XFxuMTM0MDpcXHRzdGF0aWMgaW50IGVuODgxMWhfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTM0MTpcXHR7XFxuMTM0MjpcXHRcXHRsaW5rbW9kZV9zZXRfYml0X2FycmF5KHBoeV9iYXNpY19wb3J0c19hcnJheSxcXG4xMzQzOlxcdFxcdFxcdFxcdCAgICAgICBBUlJBWV9TSVpFKHBoeV9iYXNpY19wb3J0c19hcnJheSksXFxuMTM0NDpcXHRcXHRcXHRcXHQgICAgICAgcGh5ZGV2LVxcdTAwM2VzdXBwb3J0ZWQpO1xcbjEzNDU6XFx0XFxuMTM0NjpcXHRcXHRyZXR1cm4gZ2VucGh5X2M0NV9wbWFfcmVhZF9hYmlsaXRpZXMocGh5ZGV2KTtcXG4xMzQ3OlxcdH1cXG4xMzQ4OlxcdFxcbjEzNDk6XFx0c3RhdGljIGludCBlbjg4MTFoX2dldF9yYXRlX21hdGNoaW5nKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuMTM1MDpcXHRcXHRcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpZmFjZSlcXG4xMzUxOlxcdHtcXG4xMzUyOlxcdFxcdHJldHVybiBSQVRFX01BVENIX1BBVVNFO1xcbjEzNTM6XFx0fVxcbjEzNTQ6XFx0XFxuMTM1NTpcXHRzdGF0aWMgaW50IGVuODgxMWhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xMzU2OlxcdHtcXG4xMzU3OlxcdFxcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbjEzNTg6XFx0XFx0aW50IHJldDtcXG4xMzU5OlxcdFxcdHUzMiBhZHY7XFxuMTM2MDpcXHRcXG4xMzYxOlxcdFxcdGlmIChwaHlkZXYtXFx1MDAzZWF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKSB7XFxuMTM2MjpcXHRcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsIFxcXCJEaXNhYmxpbmcgYXV0b25lZyBpcyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4xMzYzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEzNjQ6XFx0XFx0fVxcbjEzNjU6XFx0XFxuMTM2NjpcXHRcXHRhZHYgPSBsaW5rbW9kZV9hZHZfdG9fbWlpXzEwZ2J0X2Fkdl90KHBoeWRldi1cXHUwMDNlYWR2ZXJ0aXNpbmcpO1xcbjEzNjc6XFx0XFxuMTM2ODpcXHRcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCxcXG4xMzY5OlxcdFxcdFxcdFxcdFxcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsIGFkdik7XFxuMTM3MDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzcxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTM3MjpcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4xMzczOlxcdFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbjEzNzQ6XFx0XFxuMTM3NTpcXHRcXHRyZXR1cm4gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCBjaGFuZ2VkKTtcXG4xMzc2OlxcdH1cXG4xMzc3OlxcdFxcbjEzNzg6XFx0c3RhdGljIGludCBlbjg4MTFoX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTM3OTpcXHR7XFxuMTM4MDpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbjEzODE6XFx0XFx0dTMyIHBidXNfdmFsdWU7XFxuMTM4MjpcXHRcXHRpbnQgcmV0LCB2YWw7XFxuMTM4MzpcXHRcXG4xMzg0OlxcdFxcdHJldCA9IGdlbnBoeV91cGRhdGVfbGluayhwaHlkZXYpO1xcbjEzODU6XFx0XFx0aWYgKHJldClcXG4xMzg2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTM4NzpcXHRcXG4xMzg4OlxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5TVVBQT1JURUQ7XFxuMTM4OTpcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTlNVUFBPUlRFRDtcXG4xMzkwOlxcdFxcdHBoeWRldi1cXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xcbjEzOTE6XFx0XFx0cGh5ZGV2LVxcdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcXG4xMzkyOlxcdFxcdHBoeWRldi1cXHUwMDNlcGF1c2UgPSAwO1xcbjEzOTM6XFx0XFx0cGh5ZGV2LVxcdTAwM2Vhc3ltX3BhdXNlID0gMDtcXG4xMzk0OlxcdFxcdHBoeWRldi1cXHUwMDNlcmF0ZV9tYXRjaGluZyA9IFJBVEVfTUFUQ0hfUEFVU0U7XFxuMTM5NTpcXHRcXG4xMzk2OlxcdFxcdHJldCA9IGdlbnBoeV9yZWFkX21hc3Rlcl9zbGF2ZShwaHlkZXYpO1xcbjEzOTc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTM5ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjMzLjcyNjkxNzM5MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzI2ODIwNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIHNvIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgcmVzdCBvZiBgYWlyX2VuODgxMWguY2AgYWxsIHRoZSB3YXkgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gTm8gcG9pbnQganVzdCBmb2N1c2luZyBvbiBhIGZyYWdtZW50LCBnb3R0YSBzZWUgdGhlIHdob2xlIGNvbnRleHQgaGVyZS4gTGV0J3MgZ2V0IHRoZSB3aG9sZSB0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0OTksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjM1LjQ1Mzc0MDg5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQwMDpcXHRcXHRyZXQgPSBnZW5waHlfcmVhZF9scGEocGh5ZGV2KTtcXG4xNDAxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0MDI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNDAzOlxcdFxcbjE0MDQ6XFx0XFx0aWYgKHBoeV9pZF9jb21wYXJlX21vZGVsKHBoeWRldi1cXHUwMDNlcGh5X2lkLCBBTjg4MTFIQl9QSFlfSUQpKSB7XFxuMTQwNTpcXHRcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTtcXG4xNDA2OlxcdFxcdFxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbjE0MDc6XFx0XFx0XFx0XFx0cmV0dXJuIHZhbDtcXG4xNDA4OlxcdFxcdFxcdGxpbmttb2RlX21vZF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbjE0MDk6XFx0XFx0XFx0XFx0XFx0IHBoeWRldi1cXHUwMDNlbHBfYWR2ZXJ0aXNpbmcsXFxuMTQxMDpcXHRcXHRcXHRcXHRcXHQgdmFsIFxcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81Ryk7XFxuMTQxMTpcXHRcXHR9IGVsc2Uge1xcbjE0MTI6XFx0XFx0XFx0LyogR2V0IGxpbmsgcGFydG5lciAyLjVHQkFTRS1UIGFiaWxpdHkgZnJvbSB2ZW5kb3IgcmVnaXN0ZXIgKi9cXG4xNDEzOlxcdFxcdFxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3JlYWQocGh5ZGV2LCBFTjg4MTFIXzJQNUdfTFBBLFxcbjE0MTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnBidXNfdmFsdWUpO1xcbjE0MTU6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTQxNjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0MTc6XFx0XFx0XFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXFxuMTQxODpcXHRcXHRcXHRcXHRcXHQgcGh5ZGV2LVxcdTAwM2VscF9hZHZlcnRpc2luZyxcXG4xNDE5OlxcdFxcdFxcdFxcdFxcdCBwYnVzX3ZhbHVlIFxcdTAwMjYgRU44ODExSF8yUDVHX0xQQV8yUDVHKTtcXG4xNDIwOlxcdFxcdH1cXG4xNDIxOlxcdFxcbjE0MjI6XFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlYXV0b25lZ19jb21wbGV0ZSlcXG4xNDIzOlxcdFxcdFxcdHBoeV9yZXNvbHZlX2FuZWdfcGF1c2UocGh5ZGV2KTtcXG4xNDI0OlxcdFxcbjE0MjU6XFx0XFx0aWYgKCFwaHlkZXYtXFx1MDAzZWxpbmspXFxuMTQyNjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNDI3OlxcdFxcbjE0Mjg6XFx0XFx0LyogR2V0IHJlYWwgc3BlZWQgZnJvbSB2ZW5kb3IgcmVnaXN0ZXIgKi9cXG4xNDI5OlxcdFxcdHZhbCA9IHBoeV9yZWFkKHBoeWRldiwgQUlSX0FVWF9DVFJMX1NUQVRVUyk7XFxuMTQzMDpcXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4xNDMxOlxcdFxcdFxcdHJldHVybiB2YWw7XFxuMTQzMjpcXHRcXHRzd2l0Y2ggKHZhbCBcXHUwMDI2IEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfTUFTSykge1xcbjE0MzM6XFx0XFx0Y2FzZSBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEXzI1MDA6XFxuMTQzNDpcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfMjUwMDtcXG4xNDM1OlxcdFxcdFxcdGJyZWFrO1xcbjE0MzY6XFx0XFx0Y2FzZSBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEXzEwMDA6XFxuMTQzNzpcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDtcXG4xNDM4OlxcdFxcdFxcdGJyZWFrO1xcbjE0Mzk6XFx0XFx0Y2FzZSBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEXzEwMDpcXG4xNDQwOlxcdFxcdFxcdHBoeWRldi1cXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDA7XFxuMTQ0MTpcXHRcXHRcXHRicmVhaztcXG4xNDQyOlxcdFxcdGNhc2UgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF8xMDpcXG4xNDQzOlxcdFxcdFxcdHBoeWRldi1cXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDtcXG4xNDQ0OlxcdFxcdFxcdGJyZWFrO1xcbjE0NDU6XFx0XFx0fVxcbjE0NDY6XFx0XFxuMTQ0NzpcXHRcXHQvKiBGaXJtd2FyZSBiZWZvcmUgdmVyc2lvbiAyNDAxMTIwMiBoYXMgbm8gdmVuZG9yIHJlZ2lzdGVyIDJQNUdfTFBBLlxcbjE0NDg6XFx0XFx0ICogQXNzdW1lIGxpbmsgcGFydG5lciBhZHZlcnRpc2VkIGl0IGlmIGNvbm5lY3RlZCBhdCAyNTAwTWJwcy5cXG4xNDQ5OlxcdFxcdCAqL1xcbjE0NTA6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWZpcm13YXJlX3ZlcnNpb24gXFx1MDAzYyAweDI0MDExMjAyKSB7XFxuMTQ1MTpcXHRcXHRcXHRsaW5rbW9kZV9tb2RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcXG4xNDUyOlxcdFxcdFxcdFxcdFxcdCBwaHlkZXYtXFx1MDAzZWxwX2FkdmVydGlzaW5nLFxcbjE0NTM6XFx0XFx0XFx0XFx0XFx0IHBoeWRldi1cXHUwMDNlc3BlZWQgPT0gU1BFRURfMjUwMCk7XFxuMTQ1NDpcXHRcXHR9XFxuMTQ1NTpcXHRcXG4xNDU2OlxcdFxcdC8qIE9ubHkgc3VwcG9ydHMgZnVsbCBkdXBsZXggKi9cXG4xNDU3OlxcdFxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XFxuMTQ1ODpcXHRcXG4xNDU5OlxcdFxcdHJldHVybiAwO1xcbjE0NjA6XFx0fVxcbjE0NjE6XFx0XFxuMTQ2MjpcXHRzdGF0aWMgaW50IGVuODgxMWhfY2xlYXJfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjE0NjM6XFx0e1xcbjE0NjQ6XFx0XFx0aW50IHJldDtcXG4xNDY1OlxcdFxcbjE0NjY6XFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfMyxcXG4xNDY3OlxcdFxcdFxcdFxcdCAgICBBSVJfUEhZX01DVV9DTURfM19ET0NNRCk7XFxuMTQ2ODpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNDY5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTQ3MDpcXHRcXG4xNDcxOlxcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQUlSX1BIWV9NQ1VfQ01EXzQsXFxuMTQ3MjpcXHRcXHRcXHRcXHQgICAgQUlSX1BIWV9NQ1VfQ01EXzRfSU5UQ0xSKTtcXG4xNDczOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0NzQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNDc1OlxcdFxcbjE0NzY6XFx0XFx0cmV0dXJuIDA7XFxuMTQ3NzpcXHR9XFxuMTQ3ODpcXHRcXG4xNDc5OlxcdHN0YXRpYyBpcnFyZXR1cm5fdCBlbjg4MTFoX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNDgwOlxcdHtcXG4xNDgxOlxcdFxcdGludCByZXQ7XFxuMTQ4MjpcXHRcXG4xNDgzOlxcdFxcdHJldCA9IGVuODgxMWhfY2xlYXJfaW50cihwaHlkZXYpO1xcbjE0ODQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4xNDg1OlxcdFxcdFxcdHBoeV9lcnJvcihwaHlkZXYpO1xcbjE0ODY6XFx0XFx0XFx0cmV0dXJuIElSUV9OT05FO1xcbjE0ODc6XFx0XFx0fVxcbjE0ODg6XFx0XFxuMTQ4OTpcXHRcXHRwaHlfdHJpZ2dlcl9tYWNoaW5lKHBoeWRldik7XFxuMTQ5MDpcXHRcXG4xNDkxOlxcdFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4xNDkyOlxcdH1cXG4xNDkzOlxcdFxcbjE0OTQ6XFx0c3RhdGljIGludCBlbjg4MTFoX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjE0OTU6XFx0e1xcbjE0OTY6XFx0XFx0Y2xrX3Jlc3RvcmVfY29udGV4dCgpO1xcbjE0OTc6XFx0XFxuMTQ5ODpcXHRcXHRyZXR1cm4gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xcbjE0OTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOTozNS40NTM4NTcyMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTg2NTQ0OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gc3ludGhlc2l6ZSB0aGVzZSB0aG91Z2h0cy4gSGVyZSdzIGEgc3VtbWFyeSBmcm9tIG15IHBlcnNwZWN0aXZlLCBhbnRpY2lwYXRpbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgUmVtYWluZGVyKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvY2Vzc2luZyBzdGFnZSBpcyBjb21wbGV0ZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgbGVmdC4gTXkgbmV4dCBzdGVwIGludm9sdmVzIGV4YW1pbmluZyB0aGUgcmVtYWluaW5nIGxpbmVzIG9mIHRoZSBmaWxlLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHN0YXRlIG9mIHRoZSByZW1haW5pbmcgZGF0YSBhbmQgaXRzIG5hdHVyZS4gSSdsbCBiZSBhc3Nlc3NpbmcgaXQgdG8gaWRlbnRpZnkgcGF0dGVybnMsIHBvdGVudGlhbCBhbm9tYWxpZXMsIGFuZCB0aGUgb3ZlcmFsbCBjb250ZXh0IHRoYXQgY2FuIGluZm9ybSB0aGUgc3Vic2VxdWVudCBzdGVwcy4gVGhpcyAncmVtYWluaW5nIGxpbmVzJyBzZWN0aW9uIGNvdWxkIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0byBwcm9jZWVkIHdpdGggdGhlIG92ZXJhbGwgdGFzay4gQXJlIHRoZXJlIGFueSBvdmVybG9va2VkIGlzc3Vlcywgb3IgaXMgdGhpcyB0aGUgZmluYWwgcGllY2Ugb2YgdGhlIHB1enpsZT8gVGhlIGluZm9ybWF0aW9uIGhlcmUgd2lsbCBkaXJlY3RseSBzaGFwZSBteSBuZXh0IGRlY2lzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyMjQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjM5LjQ0MDQwNjcwM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUwMDpcXHRcXG4xNTAxOlxcdHN0YXRpYyBpbnQgZW44ODExaF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTUwMjpcXHR7XFxuMTUwMzpcXHRcXHRjbGtfc2F2ZV9jb250ZXh0KCk7XFxuMTUwNDpcXHRcXG4xNTA1OlxcdFxcdHJldHVybiBnZW5waHlfc3VzcGVuZChwaHlkZXYpO1xcbjE1MDY6XFx0fVxcbjE1MDc6XFx0XFxuMTUwODpcXHRzdGF0aWMgdm9pZCBhbjg4MTFoYl9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNTA5OlxcdHtcXG4xNTEwOlxcdFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuMTUxMTpcXHRcXG4xNTEyOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwYnVzZGV2KSB7XFxuMTUxMzpcXHRcXHRcXHRtZGlvX2RldmljZV9yZW1vdmUocHJpdi1cXHUwMDNlcGJ1c2Rldik7XFxuMTUxNDpcXHRcXHRcXHRtZGlvX2RldmljZV9mcmVlKHByaXYtXFx1MDAzZXBidXNkZXYpO1xcbjE1MTU6XFx0XFx0fVxcbjE1MTY6XFx0fVxcbjE1MTc6XFx0XFxuMTUxODpcXHRzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW44ODExaF9kcml2ZXJbXSA9IHtcXG4xNTE5OlxcdHtcXG4xNTIwOlxcdFxcdFBIWV9JRF9NQVRDSF9NT0RFTChFTjg4MTFIX1BIWV9JRCksXFxuMTUyMTpcXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIkFpcm9oYSBFTjg4MTFIXFxcIixcXG4xNTIyOlxcdFxcdC5wcm9iZVxcdFxcdFxcdD0gZW44ODExaF9wcm9iZSxcXG4xNTIzOlxcdFxcdC5nZXRfZmVhdHVyZXNcXHRcXHQ9IGVuODgxMWhfZ2V0X2ZlYXR1cmVzLFxcbjE1MjQ6XFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSBlbjg4MTFoX2NvbmZpZ19pbml0LFxcbjE1MjU6XFx0XFx0LmdldF9yYXRlX21hdGNoaW5nXFx0PSBlbjg4MTFoX2dldF9yYXRlX21hdGNoaW5nLFxcbjE1MjY6XFx0XFx0LmNvbmZpZ19hbmVnXFx0XFx0PSBlbjg4MTFoX2NvbmZpZ19hbmVnLFxcbjE1Mjc6XFx0XFx0LnJlYWRfc3RhdHVzXFx0XFx0PSBlbjg4MTFoX3JlYWRfc3RhdHVzLFxcbjE1Mjg6XFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0gZW44ODExaF9yZXN1bWUsXFxuMTUyOTpcXHRcXHQuc3VzcGVuZFxcdFxcdD0gZW44ODExaF9zdXNwZW5kLFxcbjE1MzA6XFx0XFx0LmNvbmZpZ19pbnRyXFx0XFx0PSBlbjg4MTFoX2NsZWFyX2ludHIsXFxuMTUzMTpcXHRcXHQuaGFuZGxlX2ludGVycnVwdFxcdD0gZW44ODExaF9oYW5kbGVfaW50ZXJydXB0LFxcbjE1MzI6XFx0XFx0LmxlZF9od19pc19zdXBwb3J0ZWRcXHQ9IGVuODgxMWhfbGVkX2h3X2lzX3N1cHBvcnRlZCxcXG4xNTMzOlxcdFxcdC5yZWFkX3BhZ2VcXHRcXHQ9IGFpcl9waHlfcmVhZF9wYWdlLFxcbjE1MzQ6XFx0XFx0LndyaXRlX3BhZ2VcXHRcXHQ9IGFpcl9waHlfd3JpdGVfcGFnZSxcXG4xNTM1OlxcdFxcdC5sZWRfYmxpbmtfc2V0XFx0XFx0PSBhaXJfbGVkX2JsaW5rX3NldCxcXG4xNTM2OlxcdFxcdC5sZWRfYnJpZ2h0bmVzc19zZXRcXHQ9IGFpcl9sZWRfYnJpZ2h0bmVzc19zZXQsXFxuMTUzNzpcXHRcXHQubGVkX2h3X2NvbnRyb2xfc2V0XFx0PSBhaXJfbGVkX2h3X2NvbnRyb2xfc2V0LFxcbjE1Mzg6XFx0XFx0LmxlZF9od19jb250cm9sX2dldFxcdD0gYWlyX2xlZF9od19jb250cm9sX2dldCxcXG4xNTM5OlxcdH0sXFxuMTU0MDpcXHR7XFxuMTU0MTpcXHRcXHRQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODExSEJfUEhZX0lEKSxcXG4xNTQyOlxcdFxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiQWlyb2hhIEFOODgxMUhCXFxcIixcXG4xNTQzOlxcdFxcdC5wcm9iZVxcdFxcdFxcdD0gYW44ODExaGJfcHJvYmUsXFxuMTU0NDpcXHRcXHQucmVtb3ZlXFx0XFx0XFx0PSBhbjg4MTFoYl9yZW1vdmUsXFxuMTU0NTpcXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0XFx0PSBlbjg4MTFoX2dldF9mZWF0dXJlcyxcXG4xNTQ2OlxcdFxcdC5jb25maWdfaW5pdFxcdFxcdD0gYW44ODExaGJfY29uZmlnX2luaXQsXFxuMTU0NzpcXHRcXHQuZ2V0X3JhdGVfbWF0Y2hpbmdcXHQ9IGVuODgxMWhfZ2V0X3JhdGVfbWF0Y2hpbmcsXFxuMTU0ODpcXHRcXHQuY29uZmlnX2FuZWdcXHRcXHQ9IGVuODgxMWhfY29uZmlnX2FuZWcsXFxuMTU0OTpcXHRcXHQucmVhZF9zdGF0dXNcXHRcXHQ9IGVuODgxMWhfcmVhZF9zdGF0dXMsXFxuMTU1MDpcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSBlbjg4MTFoX3Jlc3VtZSxcXG4xNTUxOlxcdFxcdC5zdXNwZW5kXFx0XFx0PSBlbjg4MTFoX3N1c3BlbmQsXFxuMTU1MjpcXHRcXHQuY29uZmlnX2ludHJcXHRcXHQ9IGVuODgxMWhfY2xlYXJfaW50cixcXG4xNTUzOlxcdFxcdC5oYW5kbGVfaW50ZXJydXB0XFx0PSBlbjg4MTFoX2hhbmRsZV9pbnRlcnJ1cHQsXFxuMTU1NDpcXHRcXHQubGVkX2h3X2lzX3N1cHBvcnRlZFxcdD0gZW44ODExaF9sZWRfaHdfaXNfc3VwcG9ydGVkLFxcbjE1NTU6XFx0XFx0LnJlYWRfcGFnZVxcdFxcdD0gYWlyX3BoeV9yZWFkX3BhZ2UsXFxuMTU1NjpcXHRcXHQud3JpdGVfcGFnZVxcdFxcdD0gYWlyX3BoeV93cml0ZV9wYWdlLFxcbjE1NTc6XFx0XFx0LmxlZF9ibGlua19zZXRcXHRcXHQ9IGFpcl9sZWRfYmxpbmtfc2V0LFxcbjE1NTg6XFx0XFx0LmxlZF9icmlnaHRuZXNzX3NldFxcdD0gYWlyX2xlZF9icmlnaHRuZXNzX3NldCxcXG4xNTU5OlxcdFxcdC5sZWRfaHdfY29udHJvbF9zZXRcXHQ9IGFpcl9sZWRfaHdfY29udHJvbF9zZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjM5LjQ0MDYzMTQzM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDcyMDg1MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdvcnRoaW5lc3Mgb2YgRnV6emluZyB0aGUgYWlyX2VuODgxMWguYyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBgYWlyX2VuODgxMWguY2AgaXMgYW4gTURJTyBFdGhlcm5ldCBQSFkgZHJpdmVyLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIEkgY2FuIGV2ZW4gKnJlYWNoKiB0aGlzIGRyaXZlciBmb3IgZnV6emluZyBwdXJwb3NlcyB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlLiBDYW4gaXQgYmUgcHJvYmVkIG9yIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSk/XG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBNRElPIFBIWSBkZXZpY2VzIHR5cGljYWxseSB3b3JrIHdpdGhpbiBMaW51eCwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHZpcnR1YWxpemF0aW9uLiAgVGhleSBhdHRhY2ggdG8gTURJTyBidXNlcyDigJMgTUlJIC8gTURJTyBidXNlcywgdG8gYmUgcHJlY2lzZS4gIEFyZSB0aG9zZSBNRElPIFBIWSBkcml2ZXJzIGFjY2Vzc2libGUgZHVyaW5nIGZ1enppbmcgZXhlcmNpc2VzIGluIFFFTVUgb3IgR0NFPyBUaGF0J3MgdGhlIGNydXggb2YgaXQuXG5cbkkgbmVlZCB0byBiZSBzdXBlciBjYXJlZnVsIHRvIGZvbGxvdyB0aGUgZ3VpZGVsaW5lcyBmb3IgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIi4gIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYXRjaCBJJ20gZXhhbWluaW5nIGRvZXNuJ3QgZmFsbCB1bmRlciB0aGVzZSBkaXNxdWFsaWZpY2F0aW9uczogZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBkZWNvcmF0aXZlIGNoYW5nZXMgbGlrZSBsb2dnaW5nLCBjb3NtZXRpYyBjaGFuZ2VzIHRvIGNvbnN0YW50cywgY29kZSBwYXRocyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBzZXR1cHMgKGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24sIGxpa2UgVVNCIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbSksIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlciBjb2RlIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBjYXJkcywgb3IgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aG9zZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuXG5TbywgaG93IGRvZXMgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBnZXQgcHJvYmVkIGluIHRoZSBmaXJzdCBwbGFjZT8gSXQgc2VlbXMgdGhhdCBQSFkgZHJpdmVycyBnZXQgcHJvYmVkIHdoZW4gdGhlIGtlcm5lbCBkaXNjb3ZlcnMgYSBQSFkgZGV2aWNlIHdpdGggdGhlIHJpZ2h0IFBIWSBJRCBvbiBhbiBNRElPIGJ1cywgb3IgbWF5YmUgdGhyb3VnaCBNRElPIGJ1cyBwcm9iaW5nLCBEZXZpY2UgVHJlZSAoRFQpLCBvciBwbGF0Zm9ybSBzZXR1cC4gQ3J1Y2lhbGx5LCBjYW4gdGhlc2UgTURJTyBQSFlzIGJlICppbnN0YW50aWF0ZWQqIG9yIHByb2JlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50ICp3aXRob3V0KiByZWFsIGhhcmR3YXJlP1xuXG5JIGhhdmUgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBraW5kIG9mIHZpcnR1YWwgb3IgbW9jayBNRElPIGJ1cyBpbXBsZW1lbnRhdGlvbiBpbiBRRU1VLCBvciBtYXliZSBzb21ldGhpbmcgbGlrZSBhIFVTQi10by1NRElPIGJyaWRnZSB0aGF0IHdvdWxkIGFsbG93IG1lIHRvIHNpbXVsYXRlIGhhcmR3YXJlIGludGVyYWN0aW9uLiBEb2VzIHN5emthbGxlciBvZmZlciBhIHdheSB0byBjcmVhdGUgYSBQSFkgZGV2aWNlIG9yIE1ESU8gZGV2aWNlPyBUaGlzIGlzIHdoYXQgSSBuZWVkIHRvIGNoZWNrLiAgSSBuZWVkIHRvIGNoZWNrIGhvdyBtZGlvYnVzIGFuZCBwaHkgZGV2aWNlcyBhcmUgaGFuZGxlZC4gVGltZSB0byBncmVwIHRoZSBrZXJuZWwgc291cmNlIGZvciBrZXl3b3JkcyBsaWtlIFwibWRpb1wiLCBcInBoeV9kZXZpY2VfcmVnaXN0ZXJcIiwgYW5kIFwibWRpb2J1c19yZWdpc3RlclwiIHRvIHNlZSB3aGF0J3MgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjM3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDk6NDYuOTEyNzE5NzlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTcxNjQ4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb2J1c19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEwMTggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9NjA3PXN0YXRpYyBpbnQgYmNtX3NmMl9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtNjgzLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6Njg0OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4NS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM9MTg3PXN0YXRpYyBpbnQgZ3N3aXBfbWRpbyhzdHJ1Y3QgZ3N3aXBfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTIxMy1cXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYzoyMTQ6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0zMjE9c3RhdGljIGludCBrc3o5NDc3X3Bjc19jcmVhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0MS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzozNDI6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cXHUwMDNlZGV2LCBidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0My1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MjMyMT1pbnQga3N6X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTItXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MjM5MzpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZHMtXFx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMzk0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM9Njg1PXN0YXRpYyBpbnQgbGFuOTM3eF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1NS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jOjc1NjpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZHMtXFx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTI0MDk9bXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0NDQtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI0NDU6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNDQ2LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYz0yNDI9c3RhdGljIGludCBtdDc2Mjhfc2V0dXBfaW50ZXJuYWxfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtMjYxLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzoyNjI6XFx0cmV0dXJuIGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jLTI2My19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz0zODM0PXN0YXRpYyBpbnQgbXY4OGU2eHh4X21kaW9fcmVnaXN0ZXIoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4Ny1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzozODg4OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4OS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjc9c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5Mi1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyOTM6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTQtXFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0xNDk9c3RhdGljIGludCBuZXRjX3BvcnRfY3JlYXRlX2VtZGlvX2J1cyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE3OS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoxODA6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0xODEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jPTk1Nz1zdGF0aWMgaW50IHZzYzk5NTlfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxMy1cXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoxMDE0OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTEwMTUtXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYz04Nzg9c3RhdGljIGludCB2c2M5OTUzX21kaW9fYnVzX2FsbG9jKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTAzLVxcdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM6OTA0OlxcdHJjID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jLTkwNS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jPTM1Nz1zdGF0aWMgaW50IGFyOTMzMV9zd19tYnVzX2luaXQoc3RydWN0IGFyOTMzMV9zd19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODEtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzozODI6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4My1cXHRvZl9ub2RlX3B1dChtbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTQ3PXFjYThrX21kaW9fcmVnaXN0ZXIoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODYtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTg3OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpbyk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTg4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc0PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtOTktXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEwMDpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMDEtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYz0xMTE3PXN0YXRpYyBpbnQgYTVwc3dfcHJvYmVfbWRpbyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDMtXFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzoxMTQ0OlxcdHJldHVybiBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE0NS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg9MzA3PXZvaWQgc2phMTEwNV9mcmFtZV9tZW1vcnlfcGFydGl0aW9uaW5nKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMwOS0vKiBGcm9tIHNqYTExMDVfbWRpby5jICovXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oOjMxMDppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMxMS12b2lkIHNqYTExMDVfbWRpb2J1c191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0zMDI2PXN0YXRpYyBpbnQgc2phMTEwNV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY3LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjMwNjg6XFx0cmMgPSBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjktXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MjU4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX2Jhc2VfdHhfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4Ny1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzoyODg6XFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4OS1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTMxMj1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3QxX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zNDMtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6MzQ0OlxcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zNDUtXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0zNjg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfcGNzX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zOTUtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6Mzk2OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5Ny1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTQzOT1zdGF0aWMgdm9pZCBzamExMTA1X21kaW9idXNfcGNzX3VucmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ1OC1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzo0NTk6aW50IHNqYTExMDVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz01OTU9eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTItXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjYxMzpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy02MTQtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz03MjY9eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy03NDMtXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjc0NDpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy03NDUtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jPTQ1OT1zdGF0aWMgaW50IGF4X21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy00NzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM6NDc5OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXgtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ4MC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jPTEzMjE9c3RhdGljIGludCBvd2xfZW1hY19tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzQ1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYzoxMzQ2OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXFx1MDAzZW1paSwgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jPTUwOT1zdGF0aWMgaW50IGFkaW4xMTEwX3JlZ2lzdGVyX21kaW9idXMoc3RydWN0IGFkaW4xMTEwX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYy01MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM6NTMwOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUzMS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmM9NjE3PXN0YXRpYyBpbnQgYWRpbjExNDBfbWRpb19yZWdpc3RlcihzdHJ1Y3QgYWRpbjExNDBfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTYzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYzo2Mzc6XFx0cmV0dXJuIGRldm1fbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2c3BpZGV2LVxcdTAwM2VkZXYsIHByaXYtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTYzOC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jPTEyOTA9c3RhdGljIGludCBncmV0aF9tZGlvX2luaXQoc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmM6MTMwNzpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGdyZXRoLVxcdTAwM2VtZGlvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDgtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM9MzkzMT1zdGF0aWMgaW50IGV0MTMxeF9wY2lfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jOjQwMjc6XFx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjgtXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jPTEyMT1zdGF0aWMgaW50IGFsdGVyYV90c2VfbWRpb19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM6MTU4OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTU5LVxcdGlmIChyZXQgIT0gMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYz0xMDYxPXN0YXRpYyBpbnQgYXUxMDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jLTEyMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYzoxMjIyOlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXVwLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jLTEyMjMtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYz0zNDI4PXN0YXRpYyBpbnQgeGdiZV9waHlfaW5pdChzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MTctXFx0c25wcmludGYobWlpLVxcdTAwM2VpZCwgc2l6ZW9mKG1paS1cXHUwMDNlaWQpLCBcXFwiJXNcXFwiLCBkZXZfbmFtZShwZGF0YS1cXHUwMDNlZGV2KSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzozNzE4OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWlpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MTktXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcyMDpcXHRcXHRkZXZfZXJyKHBkYXRhLVxcdTAwM2VkZXYsIFxcXCJtZGlvYnVzX3JlZ2lzdGVyIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzIxLVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jPTk4PWludCB4Z2VfbWRpb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTExOC1cXHRtZGlvX2J1cy1cXHUwMDNlcGh5X21hc2sgPSAweDE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYzoxMTk6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMjAtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM9ODM3PWludCB4Z2VuZV9lbmV0X3BoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo4ODg6c3RhdGljIGludCB4Z2VuZV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTg4OS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBtaWlfYnVzICptZGlvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MTM6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxNC1cXHRcXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIxLVxcdC8qIFJlZ2lzdGVyIHRoZSBNRElPIGJ1cyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTIyOlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM9OTM5PWludCB4Z2VuZV9lbmV0X21kaW9fY29uZmlnKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTU4OlxcdHJldCA9IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIocGRhdGEsIG1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTk1OS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM9MTMxPWludCBhcmNfbWRpb19wcm9iZShzdHJ1Y3QgYXJjX2VtYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jOjE3MzpcXHRlcnJvciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBtZGlvX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzQtXFx0b2Zfbm9kZV9wdXQobWRpb19ub2RlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jPTk2Nj1zdGF0aWMgaW50IGF4ODg3OTZjX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jOjEwMTE6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgYXhfbG9jYWwtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwMTItXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM9Njg3PXN0YXRpYyBpbnQgYWc3MXh4X21kaW9fcHJvYmUoc3RydWN0IGFnNzF4eCAqYWcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyNy1cXHRtbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXFxcIm1kaW9cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jOjcyODpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtaWlfYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNzI5LVxcdG9mX25vZGVfcHV0KG1ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYz0yMjM0PXN0YXRpYyBpbnQgYjQ0X3JlZ2lzdGVyX3BoeV9vbmUoc3RydWN0IGI0NCAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjU5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jOjIyNjA6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjYxLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jPTE3MTM9c3RhdGljIGludCBiY21fZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYzoxODMwOlxcdFxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYy0xODMxLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jPTIxMT1zdHJ1Y3QgbWlpX2J1cyAqYmNtYV9tZGlvX21paV9yZWdpc3RlcihzdHJ1Y3QgYmdtYWMgKmJnbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmMtMjM1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jOjIzNjpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzctXFx0b2Zfbm9kZV9wdXQobnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9MTkzPWludCBiY21nZW5ldF9taWlfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgaW5pdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzMy1cXHRcXHRwaHlfbmFtZSA9IFxcXCJleHRlcm5hbCBSdk1JSVxcXCI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MjM0OlxcdFxcdC8qIG9mX21kaW9idXNfcmVnaXN0ZXIgdG9vayBjYXJlIG9mIHJlYWRpbmcgdGhlICdtYXgtc3BlZWQnXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjM1LVxcdFxcdCAqIFBIWSBwcm9wZXJ0eSBmb3IgdXMsIGVmZmVjdGl2ZWx5IGxpbWl0aW5nIHRoZSBQSFkgc3VwcG9ydGVkXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM9MjE1Nz1zdGF0aWMgaW50IHNibWFjX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxkZXYsIGxvbmcgbG9uZyBiYXNlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jLTIyMjctXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jOjIyMjg6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihzYy1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jLTIyMjktXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM9MTUwNT1zdGF0aWMgaW50IHRnM19tZGlvX2luaXQoc3RydWN0IHRnMyAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYy0xNTU3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jOjE1NTg6XFx0aSA9IG1kaW9idXNfcmVnaXN0ZXIodHAtXFx1MDAzZW1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYy0xNTU5LVxcdGlmIChpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTEwMjM9c3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDk2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTA5NzpzdGF0aWMgaW50IG1hY2JfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWFjYiAqYnAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWRpb19ucClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTA0LVxcdGlmIChtZGlvX25wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTEwNTpcXHRcXHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihicC1cXHUwMDNlbWlpX2J1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTA2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTExOTpcXHRcXHRcXHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihicC1cXHUwMDNlbWlpX2J1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMC1cXHRcXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTEyMjpcXHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihicC1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTEyNT1zdGF0aWMgaW50IG1hY2JfbWlpX2luaXQoc3RydWN0IG1hY2IgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTE1OTpcXHRlcnIgPSBtYWNiX21kaW9idXNfcmVnaXN0ZXIoYnAsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE2MC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYz0xMTA3PXN0YXRpYyBpbnQgZG05MDUxX21kaW9fcmVnaXN0ZXIoc3RydWN0IGJvYXJkX2luZm8gKmRiKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYy0xMTI0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM6MTEyNTpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBkYi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYy0xMTI2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM9MjQyMz1zdGF0aWMgaW50IHRzbmVwX21kaW9faW5pdChzdHJ1Y3QgdHNuZXBfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0yNDU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYzoyNDU1OlxcdHJldHZhbCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cXHUwMDNlbWRpb2J1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0yNDU2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYz0xMDI0PXN0YXRpYyBpbnQgZXRob2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jOjEyMDg6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VtZGlvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jLTEyMDktXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz0xNzM0PXN0YXRpYyBpbnQgZnRnbWFjMTAwX3NldHVwX21kaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE3NzA6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZWRldiwgcHJpdi1cXHUwMDNlbWlpX2J1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xNzcxLVxcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmM9MzY9c3RhdGljIGludCBlbmV0Y19wY2lfbWRpb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jLTkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jOjkxOlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBkZXYtXFx1MDAzZW9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jLTkyLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MjY2PXN0YXRpYyBpbnQgZW5ldGNfbWRpb19wcm9iZShzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTI5Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MjkzOlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTI5NC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTMwOD1zdGF0aWMgaW50IGVuZXRjX2ltZGlvX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTM0Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MzQzOlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQ0LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTMwNDI9c3RhdGljIGludCBmZWNfZW5ldF9taWlfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzE2MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzozMTYxOlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZmVwLVxcdTAwM2VtaWlfYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYyLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM9NjU9c3RhdGljIGludCBtcGM1Mnh4X2ZlY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jLTEwNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM6MTA2OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jLTEwNy1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYz0xNDk9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE3NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jOjE3NjpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYy0xNzctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYz05Nz1zdGF0aWMgaW50IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jOjE2NzpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM9NDA5PXN0YXRpYyBpbnQgZnNsX3BxX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTQ5My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYzo0OTQ6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDk1LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM9MzcxPXN0YXRpYyBpbnQgeGdtYWNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjYtXFx0aWYgKGlzX29mX25vZGUoZndub2RlKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jOjQyNzpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgdG9fb2Zfbm9kZShmd25vZGUpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQyOC1cXHRlbHNlIGlmIChpc19hY3BpX25vZGUoZndub2RlKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jOjQyOTpcXHRcXHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBmd25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDMwLVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjY2PWludCBoYmdfbWRpb19pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjkyOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIG1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5My1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jPTEwOTQ9c3RhdGljIGludCBoaXg1aGQyX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jLTExODUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jOjExODY6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jPTEyMz1pbnQgaGNsZ2VfbWFjX21kaW9fY29uZmlnKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTE1NC1cXHRtZGlvX2J1cy1cXHUwMDNlcGh5X21hc2sgPSB+KDFVIFxcdTAwM2NcXHUwMDNjIG1hYy1cXHUwMDNlcGh5X2FkZHIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmM6MTU1OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU2LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jPTQ5NT1zdGF0aWMgaW50IGhuc19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01ODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTg0OlxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgcGRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU4NS1cXHR9IGVsc2UgaWYgKGlzX2FjcGlfbm9kZShwZGV2LVxcdTAwM2VkZXYuZndub2RlKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTkyLVxcdFxcdC8qIFJlZ2lzdGVyIHRoZSBNRElPIGJ1cyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jOjU5MzpcXHRcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5NC1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jPTI1NjA9c3RhdGljIGludCBlbWFjX2R0X21kaW9fcHJvYmUoc3RydWN0IGVtYWNfaW5zdGFuY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg0LVxcdHNucHJpbnRmKGJ1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcIiVzXFxcIiwgZGV2LVxcdTAwM2VvZmRldi1cXHUwMDNlbmFtZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jOjI1ODU6XFx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKFxcdTAwMjZkZXYtXFx1MDAzZW9mZGV2LVxcdTAwM2VkZXYsIGJ1cywgbWlpX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMtMjU4Ni1cXHRpZiAocmVzKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYz0xMDI2PWludCBpeGdiZV9taWlfYnVzX2luaXQoc3RydWN0IGl4Z2JlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwODgtXFx0YWRhcHRlci1cXHUwMDNlbWlpX2J1cyA9IGJ1cztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoxMDg5OlxcdHJldHVybiBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMTA5MC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jPTM4NT1sdHFfZXRvcF9tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDAyLVxcdFxcdCBwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VuYW1lLCBwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VpZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYzo0MDM6XFx0aWYgKG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWlpX2J1cykpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTQwNC1cXHRcXHRlcnIgPSAtRU5YSU87XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jPTI4Mz1zdGF0aWMgaW50IG9yaW9uX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzgxLVxcdC8qIEZvciB0aGUgcGxhdGZvcm1zIG5vdCBzdXBwb3J0aW5nIERUL0FDUEkgZmFsbC1iYWNrXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODI6XFx0ICogdG8gbWRpb2J1c19yZWdpc3RlciB2aWEgb2ZfbWRpb2J1c19yZWdpc3Rlci5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4My1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4NC1cXHRpZiAoaXNfYWNwaV9ub2RlKHBkZXYtXFx1MDAzZWRldi5md25vZGUpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6Mzg1OlxcdFxcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXFx1MDAzZWRldi5md25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg2LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4NzpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg4LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYz0xMzg3PXN0YXRpYyBpbnQgcHhhMTY4X2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmMtMTUwNC1cXHRwZXAtXFx1MDAzZXNtaV9idXMtXFx1MDAzZXBoeV9tYXNrID0gMHhmZmZmZmZmZjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYzoxNTA1OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIocGVwLVxcdTAwM2VzbWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy0xNTA2LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTk5OD1zdGF0aWMgaW50IG10a19tZGlvX2luaXQoc3RydWN0IG10a19ldGggKmV0aClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMTAzNy1cXHRkZXZfZGJnKGV0aC1cXHUwMDNlZGV2LCBcXFwiTURDIGlzIHJ1bm5pbmcgb24gJWQgSHpcXFxcblxcXCIsIE1EQ19NQVhfRlJFUSAvIGV0aC1cXHUwMDNlbWRjX2RpdmlkZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM6MTAzODpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGV0aC1cXHUwMDNlbWlpX2J1cywgbWlpX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM9MTQyMj1zdGF0aWMgaW50IG10a19zdGFyX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYy0xNDQ3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYzoxNDQ4OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIHByaXYtXFx1MDAzZW1paSwgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmM9Mjg3PWludCBtbHhiZl9naWdlX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IG1seGJmX2dpZ2UgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jOjMzMzpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmMtMzM0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21kaW8uYz0yNTM9aW50IGZibmljX21kaW9idXNfY3JlYXRlKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jLTI3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21kaW8uYzoyNzM6XFx0ZXJyID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGZiZC1cXHUwMDNlZGV2LCBidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jLTI3NC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jPTEwMzY9c3RhdGljIGludCBrczg4NTFfcmVnaXN0ZXJfbWRpb2J1cyhzdHJ1Y3Qga3M4ODUxX25ldCAqa3MsIHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jOjEwNTM6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNTQtXFx0aWYgKHJldClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jOjEwNTU6XFx0XFx0Z290byBlcnJfbWRpb2J1c19yZWdpc3RlcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3M4ODUxX2NvbW1vbi5jLTEwNjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzODg1MV9jb21tb24uYzoxMDYxOmVycl9tZGlvYnVzX3JlZ2lzdGVyOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rczg4NTFfY29tbW9uLmMtMTA2Mi1cXHRtZGlvYnVzX2ZyZWUobWlpX2J1cyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM9MTM3OT1zdGF0aWMgaW50IGxhbjc0M3hfaHdfcmVzZXRfcGh5KHN0cnVjdCBsYW43NDN4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmMtMTM4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM6MTM4MzpcXHQvKiBPbmx5IGNhbGxlZCB3aXRoIGluIHByb2JlLCBhbmQgYmVmb3JlIG1kaW9idXNfcmVnaXN0ZXIgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmMtMTM4NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYz0zNjI4PXN0YXRpYyBpbnQgbGFuNzQzeF9tZGlvYnVzX2luaXQoc3RydWN0IGxhbjc0M3hfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zNjcxLVxcdC8qIHJlZ2lzdGVyIG1kaW9idXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM6MzY3MjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zNjczLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmkvbml4Z2UuYz0xMjEyPXN0YXRpYyBpbnQgbml4Z2VfbWRpb19zZXR1cChzdHJ1Y3Qgbml4Z2VfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25pL25peGdlLmMtMTIzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uaS9uaXhnZS5jOjEyMzE6XFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmkvbml4Z2UuYy0xMjMyLX1cXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOTo0OC4zNjk4OTA4MDlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY5ODY2MzkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNRElPIFBIWSBEcml2ZXJzIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhaXJfZW44ODExaC5jYCwgYW4gRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIGFuZCBBTjg4MTFIQiBjaGlwcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBiZSBlZmZlY3RpdmVseSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGd1aWRlbGluZXMuIExldCBtZSByZS1yZWFkIHRob3NlIHF1aWNrbHkuLi4gcmlnaHQsIGlmIGl0J3MgZGVwZW5kZW50IG9uIGluYWNjZXNzaWJsZSBoYXJkd2FyZSwgaXQncyBub3Qgd29ydGggZnV6emluZy5cblxuTGV0J3Mgc2VlLCB3aGF0IGlzIHRoZSBwcm9iZSBmbG93PyBUaGlzIGRyaXZlciwgbGlrZSBhbnkgTURJTyBQSFkgZHJpdmVyLCBpcyBib3VuZCB0byBhIHNwZWNpZmljIE1ESU8gYnVzLiBJdCByZWxpZXMgb24gdGhlIGBtZGlvX2J1c190eXBlYCBtYXRjaCwgbWVhbmluZyB0aGUgc3lzdGVtIGhhcyB0byBoYXZlIGEgcmVhbCBNRElPIGJ1cy4gRHVyaW5nIHRoZSBidXMgc2Nhbm5pbmcsIGl0IHJlYWRzIHRoZSBNRElPX0RFVklEMSBhbmQgTURJT19ERVZJRDIgcmVnaXN0ZXJzIChyZWdpc3RlcnMgMiBhbmQgMykgZnJvbSB0aGUgUEhZLiBJdCB0aGVuIGNvbXBhcmVzIHRob3NlIHZhbHVlcyB0byB0aGUgSURzIGluIGl0cyBgcGh5X2RldmljZV9pZGAgdGFibGUuIEluIHRoaXMgY2FzZSwgdGhhdCdzIGxvb2tpbmcgZm9yIGBFTjg4MTFIX1BIWV9JRGAgYW5kIGBBTjg4MTFIQl9QSFlfSURgLiBGb3IgdGhpcyBzcGVjaWZpYyBkcml2ZXIgdG8gZXZlbiAqcHJvYmUqIHN1Y2Nlc3NmdWxseSBhbmQgcnVuIGl0cyBgZW44ODExaF9wcm9iZWAgb3IgYGFuODgxMWhiX3Byb2JlYCBmdW5jdGlvbnMgYW5kLCBldmVudHVhbGx5LCBgYWlyX3dyaXRlX2J1ZmAsIGEgKnJlYWwqIEFpcm9oYSBFTjg4MTFIL0FOODgxMUhCIGNoaXAgbmVlZHMgdG8gYmUgcGh5c2ljYWxseSBwcmVzZW50IG9uIGFuIE1ESU8gYnVzLiBUaGUgY29kZSByZWFkcyBhbmQgd3JpdGVzIHJlZ2lzdGVycyB2aWEgTURJTyBkdXJpbmcgdGhlIHByb2JlLCBhbmQgaXQgdHJpZXMgdG8gbG9hZCBmaXJtd2FyZSBpbnRvIHRoZSBjaGlwJ3MgTUNVLlxuXG5UaGUgaXNzdWUgaXMgdGhhdCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgQWlyb2hhIEVOODgxMUggUEhZIGNoaXAgb3IgYW4gQWlyb2hhIE1ESU8gY29udHJvbGxlci4gVGhlcmUncyBubyBlbXVsYXRpb24sIG5vIG1vY2ssIG5vdGhpbmcgaW4gc3l6a2FsbGVyIG9yIFFFTVUgdGhhdCB3b3VsZCByZXNwb25kIHRvIHRoZSB2ZXJ5IHNwZWNpZmljIHByb3ByaWV0YXJ5IFwiYnVja3BidXNcIiByZWdpc3RlciBwcm90b2NvbCB1c2VkIGJ5IHRoaXMgY2hpcC4gVGhhdCdzIGEgaHVnZSBibG9ja2VyLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLi4uaXMgdGhlcmUgKmFueSogd2F5IHRvIHNpbXVsYXRlIG9yIHByb3ZpZGUgYSBcImZha2VcIiBNRElPIGJ1cyBvciBQSFkgd2l0aGluIFFFTVUgdGhhdCBtaWdodCBsZXQgdXMgdHJpY2sgaXQ/IFBlcmhhcHMgYSBVU0ItdG8tTURJTyBnYWRnZXQsIG9yIHNvbWUga2luZCBvZiBtb2NrIE1ESU8gUEhZPyBJJ2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGZvciBcImR1bW15XCIgb3IgXCJtb2NrXCIgTURJTyBpbXBsZW1lbnRhdGlvbnMgdG8gc2VlIGlmIGFueXRoaW5nIGV2ZW4gcmVtb3RlbHkgc3VpdGFibGUgZXhpc3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTYyMiwiT3V0cHV0VG9rZW5zIjo1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowOTo1NS4wNjg1NTY4NzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTYzOTk1NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9jay4qbWRpb3xkdW1teS4qbWRpb3xtZGlvLiptb2NrfG1kaW8uKmR1bW15fG1kaW8uKnRlc3R8bWRpby1ncGlvfG1kaW8tYml0YmFuZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbC5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jOjIzOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLWJpdGJhbmcuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jOjIwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLWJpdGJhbmcuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTIxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9hZGRyZXNzLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jPTIwMz1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmc19lbmV0X21kaW9fYmJfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTIwNC1cXHR7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYzoyMDU6XFx0XFx0LmNvbXBhdGlibGUgPSBcXFwiZnNsLGNwbTItbWRpby1iaXRiYW5nXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTIwNi1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmgtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oOjE3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLWJpdGJhbmcuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaC0xOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jLTE4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jOjE5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLWJpdGJhbmcuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jLTIwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuYz0yOTY9dTggZWY0X21kaW9fZ2V0X3BhdXNlKHN0cnVjdCBlZjRfbmljICplZngpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL21kaW9fMTBnLmMtMzA5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuYzozMTA6aW50IGVmNF9tZGlvX3Rlc3RfYWxpdmUoc3RydWN0IGVmNF9uaWMgKmVmeClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL21kaW9fMTBnLmMtMzExLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuaD05OT1lZjRfbWRpb19zZXRfZmxhZyhzdHJ1Y3QgZWY0X25pYyAqZWZ4LCBpbnQgZGV2YWQsIGludCBhZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9tZGlvXzEwZy5oLTEwNS0vKiBMaXZlbmVzcyBzZWxmLXRlc3QgZm9yIE1ESU8gUEhZcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vbWRpb18xMGcuaDoxMDY6aW50IGVmNF9tZGlvX3Rlc3RfYWxpdmUoc3RydWN0IGVmNF9uaWMgKmVmeCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9tZGlvXzEwZy5oLTEwNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vcXQyMDJ4X3BoeS5jPTQ4MT1jb25zdCBzdHJ1Y3QgZWY0X3BoeV9vcGVyYXRpb25zIGZhbGNvbl9xdDIwMnhfcGh5X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vcXQyMDJ4X3BoeS5jLTQ4OS1cXHQuc2V0X2xpbmtfa3NldHRpbmdzID0gZWY0X21kaW9fc2V0X2xpbmtfa3NldHRpbmdzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vcXQyMDJ4X3BoeS5jOjQ5MDpcXHQudGVzdF9hbGl2ZVxcdCA9IGVmNF9tZGlvX3Rlc3RfYWxpdmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9xdDIwMnhfcGh5LmMtNDkxLVxcdC5nZXRfbW9kdWxlX2VlcHJvbSA9IHF0MjAyeF9waHlfZ2V0X21vZHVsZV9lZXByb20sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3RlbnhwcmVzcy5jPTQ3OD1jb25zdCBzdHJ1Y3QgZWY0X3BoeV9vcGVyYXRpb25zIGZhbGNvbl9zZng3MTAxX3BoeV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3RlbnhwcmVzcy5jLTQ4Ny1cXHQuc2V0X25wYWdlX2FkdiAgICA9IHNmeDcxMDFfc2V0X25wYWdlX2FkdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3RlbnhwcmVzcy5jOjQ4ODpcXHQudGVzdF9hbGl2ZVxcdCAgPSBlZjRfbWRpb190ZXN0X2FsaXZlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vdGVueHByZXNzLmMtNDg5LVxcdC50ZXN0X25hbWVcXHQgID0gc2Z4NzEwMV90ZXN0X25hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3R4YzQzMTI4X3BoeS5jPTU0Nj1jb25zdCBzdHJ1Y3QgZWY0X3BoeV9vcGVyYXRpb25zIGZhbGNvbl90eGNfcGh5X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vdHhjNDMxMjhfcGh5LmMtNTU0LVxcdC5zZXRfbGlua19rc2V0dGluZ3MgPSBlZjRfbWRpb19zZXRfbGlua19rc2V0dGluZ3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi90eGM0MzEyOF9waHkuYzo1NTU6XFx0LnRlc3RfYWxpdmVcXHQ9IGVmNF9tZGlvX3Rlc3RfYWxpdmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi90eGM0MzEyOF9waHkuYy01NTYtXFx0LnJ1bl90ZXN0c1xcdD0gdHhjNDMxMjhfcnVuX3Rlc3RzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYz0zODE9aW50IHN0bW1hY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTQxNi1cXHQgKiBJdCBkb2Vzbid0IGNvbXBsZXRlIGl0cyByZXNldCB1bnRpbCBhdCBsZWFzdCBvbmUgY2xvY2sgY3ljbGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jOjQxNzpcXHQgKiBvbiBNREMsIHNvIHBlcmZvcm0gYSBkdW1teSBtZGlvIHJlYWQuIFRvIGJlIHVwZGF0ZWQgZm9yIEdNQUM0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy00MTgtXFx0ICogaWYgbmVlZGVkLlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvZGF2aW5jaV9tZGlvLmMtMjctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BpbmN0cmwvY29uc3VtZXIuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX21kaW8uYzoyODojaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby1iaXRiYW5nLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvZGF2aW5jaV9tZGlvLmMtMjktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c19zb2MuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05MD1jb25maWcgTURJT19HUElPXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctOTctXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjk4OlxcdCAgd2lsbCBiZSBjYWxsZWQgbWRpby1ncGlvLlxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy05OS1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX01ESU9fQkNNX1VOSU1BQylcXHRcXHQrPSBtZGlvLWJjbS11bmltYWMub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX01ESU9fQklUQkFORylcXHRcXHQrPSBtZGlvLWJpdGJhbmcub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtMTMtb2JqLSQoQ09ORklHX01ESU9fQ0FWSVVNKVxcdFxcdCs9IG1kaW8tY2F2aXVtLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19NRElPX0dQSU8pXFx0XFx0XFx0Kz0gbWRpby1ncGlvLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTE1LW9iai0kKENPTkZJR19NRElPX0hJU0lfRkVNQUMpXFx0XFx0Kz0gbWRpby1oaXNpLWZlbWFjLm9cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iaXRiYW5nLmMtMTctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJpdGJhbmcuYzoxODojaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby1iaXRiYW5nLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJpdGJhbmcuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jLTIxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jOjIyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLWJpdGJhbmcuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jLTIzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmM9MTU3PXN0YXRpYyBpbnQgbWRpb19ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jLTE3MS1cXHRpZiAocGRldi1cXHUwMDNlZGV2Lm9mX25vZGUpIHtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jOjE3MjpcXHRcXHRidXNfaWQgPSBvZl9hbGlhc19nZXRfaWQocGRldi1cXHUwMDNlZGV2Lm9mX25vZGUsIFxcXCJtZGlvLWdwaW9cXFwiKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jLTE3My1cXHRcXHRpZiAoYnVzX2lkIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYz0xOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWRpb19ncGlvX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYzoxOTg6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCIsIH0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0xOTktXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtaWNyb2NoaXAsbWRpby1zbWkwXFxcIiB9LFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYz0yMDQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWRpb19ncGlvX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmMtMjA3LVxcdC5kcml2ZXJcXHRcXHQ9IHtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jOjIwODpcXHRcXHQubmFtZVxcdD0gXFxcIm1kaW8tZ3Bpb1xcXCIsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0yMDktXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gbWRpb19ncGlvX29mX21hdGNoLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYz0yMTM9bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtZGlvX2dwaW9fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jLTIxNC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jOjIxNTpNT0RVTEVfQUxJQVMoXFxcInBsYXRmb3JtOm1kaW8tZ3Bpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmMtMjE2LU1PRFVMRV9BVVRIT1IoXFxcIkxhdXJlbnQgUGluY2hhcnQsIFBhdWxpdXMgWmFsZWNrYXNcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE5ODU9c3RhdGljIHZvaWQgcjgxNTJfbWRpb19zZXRfYml0KHN0cnVjdCByODE1MiAqdHAsIHUxNiBhZGRyLCB1MTYgc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTk5Mi1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxOTkzOnN0YXRpYyBpbnQgcjgxNTJfbWRpb190ZXN0X2FuZF9jbHJfYml0KHN0cnVjdCByODE1MiAqdHAsIHUxNiBhZGRyLCB1MTYgY2xlYXIpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTk5NC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz03MjEyPXN0YXRpYyB2b2lkIHI4MTUyYl9pbml0KHN0cnVjdCByODE1MiAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy03MjE4LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjcyMTk6XFx0cjgxNTJfbWRpb190ZXN0X2FuZF9jbHJfYml0KHRwLCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzIyMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTcyNDY9c3RhdGljIHZvaWQgcjgxNTNfaW5pdChzdHJ1Y3QgcjgxNTIgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzI3MS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo3MjcyOlxcdHI4MTUyX21kaW9fdGVzdF9hbmRfY2xyX2JpdCh0cCwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTcyNzMtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz03MzYzPXN0YXRpYyB2b2lkIHI4MTUzYl9pbml0KHN0cnVjdCByODE1MiAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy03MzgzLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjczODQ6XFx0cjgxNTJfbWRpb190ZXN0X2FuZF9jbHJfYml0KHRwLCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzM4NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTc0MzM9c3RhdGljIHZvaWQgcjgxNTNjX2luaXQoc3RydWN0IHI4MTUyICp0cClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTc0NjAtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NzQ2MTpcXHRyODE1Ml9tZGlvX3Rlc3RfYW5kX2Nscl9iaXQodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy03NDYyLVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NzcxNj1zdGF0aWMgdm9pZCByODE1NmJfaHdfcGh5X2NmZyhzdHJ1Y3QgcjgxNTIgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzc1NC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo3NzU1OlxcdHI4MTUyX21kaW9fdGVzdF9hbmRfY2xyX2JpdCh0cCwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTc3NTYtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz03OTc1PXN0YXRpYyB2b2lkIHI4MTU3X2h3X3BoeV9jZmcoc3RydWN0IHI4MTUyICp0cClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTc5OTYtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6Nzk5NzpcXHRyODE1Ml9tZGlvX3Rlc3RfYW5kX2Nscl9iaXQodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy03OTk4LVxcbi0tXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1MDE4LmM9Njc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNtX3Bpbmdyb3VwIGlwcTUwMThfZ3JvdXBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTUwMTguYy03MTUtXFx0UElOR1JPVVAoMzYsIG1kYywgcWRzc190cmFjZWRhdGFfYiwgXywgd3NpX2NsazMsIF8sIF8sIF8sIF8sIF8pLFxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxNTAxOC5jOjcxNjpcXHRQSU5HUk9VUCgzNywgbWRpbywgYXRlc3RfY2hhciwgcWRzc190cmFjZWRhdGFfYiwgXywgd3NpX2RhdGEzLCBfLCBfLCBfLCBfKSxcXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTUwMTguYy03MTctXFx0UElOR1JPVVAoMzgsIHFkc3NfdHJhY2VkYXRhX2IsIF8sIF8sIF8sIF8sIF8sIF8sIF8sIF8pLFxcbi0tXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1NDI0LmM9NzEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNtX3Bpbmdyb3VwIGlwcTU0MjRfZ3JvdXBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTU0MjQuYy03MzQtXFx0UElOR1JPVVAoMjAsIG1kY19zbHYsIGF0ZXN0X2NoYXIwLCBfLCBxZHNzX3RyYWNlZGF0YV9hLCBfLCBfLCBfLCBfLCBfKSxcXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTU0MjQuYzo3MzU6XFx0UElOR1JPVVAoMjEsIG1kaW9fc2x2LCBhdGVzdF9jaGFyMSwgXywgcWRzc190cmFjZWRhdGFfYSwgXywgXywgXywgXywgXyksXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1NDI0LmMtNzM2LVxcdFBJTkdST1VQKDIyLCBtZGNfbXN0LCBhdGVzdF9jaGFyMiwgXywgXywgXywgXywgXywgXywgXyksXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE1NDI0LmM6NzM3OlxcdFBJTkdST1VQKDIzLCBtZGlvX21zdCwgYXRlc3RfY2hhcjMsIF8sIF8sIF8sIF8sIF8sIF8sIF8pLFxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxNTQyNC5jLTczOC1cXHRQSU5HUk9VUCgyNCwgcGNpZTBfY2xrLCBQVEExMCwgbWFjMCwgXywgd3NpX2NsaywgXywgYXRlc3RfY2hhciwgcWRzc19jdGlfdHJpZ19vdXRfYTAsIF8pLFxcbi0tXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE5NjUwLmM9NjY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNtX3Bpbmdyb3VwIGlwcTk2NTBfZ3JvdXBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTk2NTAuYy02ODUtXFx0WzIwXSA9IFBJTkdST1VQKDIwLCBtZGNfc2x2MCwgcXVwX3NlMywgXywgcWRzc190cmFjZWRhdGFfYSwgXywgXywgXywgXywgXyksXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1pcHE5NjUwLmM6Njg2OlxcdFsyMV0gPSBQSU5HUk9VUCgyMSwgbWRpb19zbHYwLCBxdXBfc2UzLCBhdGVzdF9jaGFyX3N0YXJ0LCBfLCBxZHNzX3RyYWNlZGF0YV9hLCBfLCBfLCBfLCBfKSxcXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLWlwcTk2NTAuYy02ODctXFx0WzIyXSA9IFBJTkdST1VQKDIyLCBtZGNfbXN0LCBhdGVzdF9jaGFyX3N0YXR1czIsIF8sIF8sIF8sIF8sIF8sIF8sIF8pLFxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxOTY1MC5jOjY4ODpcXHRbMjNdID0gUElOR1JPVVAoMjMsIG1kaW9fbXN0LCBhdGVzdF9jaGFyX3N0YXR1czMsIF8sIF8sIF8sIF8sIF8sIF8sIF8pLFxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtaXBxOTY1MC5jLTY4OS1cXHRbMjRdID0gUElOR1JPVVAoMjQsIHBjaWUwX2Nsa19yZXFfbiwgXywgXywgXywgXywgXywgXywgXywgXyksXFxuLS1cXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1kbTk2MDcuYz05Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBtc21fcGluZ3JvdXAgbWRtOTYwN19ncm91cHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtbWRtOTYwNy5jLTk1OS1cXHRcXHQgXywgXyksXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tZG05NjA3LmM6OTYwOlxcdFBJTkdST1VQKDI3LCB1aW0yX2RhdGEsIGdtYWNfbWRpbywgZ2NjX2dwMV9jbGtfYSwgXywgXywgYXRlc3RfY29tYm9kYWNfdG9fZ3Bpb19uYXRpdmUsIF8sIF8sXFxuZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tZG05NjA3LmMtOTYxLVxcdFxcdCBfKSxcXG5kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1kbTk2MDcuYzo5NjI6XFx0UElOR1JPVVAoMjgsIHVpbTJfY2xrLCBnbWFjX21kaW8sIGdjY19ncDJfY2xrX2EsIF8sIF8sIGF0ZXN0X2NvbWJvZGFjX3RvX2dwaW9fbmF0aXZlLCBfLCBfLFxcbmRyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtbWRtOTYwNy5jLTk2My1cXHRcXHQgXyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA5OjU2Ljg2NDk2NTc3MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDg1Nzk5MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgdGhlIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AgZmlsZSwgd2hpY2ggaXMgdGhlIGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIGFuZCBBTjg4MTFIQiBFdGhlcm5ldCBQSFkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsaWtlIG1hbnkgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXJzLCB0aGlzIGlzIGdvaW5nIHRvIGJlIHByb2JsZW1hdGljIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlxuXG5UaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHRoaXMgZHJpdmVyLCBsaWtlIG1vc3Qgb2YgaXRzIGtpbmQsIGFic29sdXRlbHkgKmRlbWFuZHMqIHRoZSBwcmVzZW5jZSBvZiBwaHlzaWNhbCBoYXJkd2FyZSDigJMgc3BlY2lmaWNhbGx5LCBhbiBFTjg4MTFIIFBIWSBjb25uZWN0ZWQgdG8gYW4gTURJTyBidXMuIFdpdGhvdXQgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZSwgdGhlIHByb2JlIGFuZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgc2ltcGx5IGNhbm5vdCBleGVjdXRlLiBUaGUgY29kZSBwYXRocyB3aXRoaW4gYGFpcl9lbjg4MTFoLmNgIGFyZSBpbmhlcmVudGx5IHRpZWQgdG8gdGhlIHBoeXNpY2FsIGxheWVyLiBUaGlzIHJ1bGVzIG91dCBjb21tb24gdmlydHVhbGl6ZWQgc2V0dXBzLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGNvbnNpZGVyaW5nIGFsbCBvZiB0aGlzLCB0aGUgZmluYWwgdmVyZGljdCBpczpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBGYWxzZS4gVGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBFbXB0eS4gTm8gc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSB3b3J0aCB0YXJnZXRpbmcgYmVjYXVzZSBvZiB0aGUgZW52aXJvbm1lbnQgZGVwZW5kZW5jeS5cbiogICBgRW5hYmxlQ29uZmlnc2A6IEVtcHR5LiBObyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGNoYW5nZSB0aGlzIGZ1bmRhbWVudGFsIGhhcmR3YXJlIGRlcGVuZGVuY3kuXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBhbiBFdGhlcm5ldCBQSFkgZHJpdmVyIChhaXJfZW44ODExaC5jKSB0aGF0IHJlbGllcyBvbiBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQWlyb2hhIEVOODgxMUgvQU44ODExSEIpIGNvbm5lY3RlZCB0byBhbiBNRElPIGJ1cy4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cblxuSSd2ZSBkb3VibGUtY2hlY2tlZCBteSBhc3N1bXB0aW9ucywgYW5kIEknbSBjb25maWRlbnQgaW4gdGhlc2UgY29uY2x1c2lvbnMuIFRpbWUgdG8gY2FsbCBpdCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU3OTUsIk91dHB1dFRva2VucyI6MTE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjEwOjAxLjk1MDc2ODI3OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU44ODExSCBFdGhlcm5ldCBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYykgdG8gYWRkIGEgZmlybXdhcmUgc2l6ZSBhbGlnbm1lbnQgY2hlY2suIEV0aGVybmV0IFBIWSBoYXJkd2FyZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgUEhZIGhhcmR3YXJlIGNvbm5lY3RlZCB2aWEgTURJTywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSkuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIEVOODgxMUggRXRoZXJuZXQgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMpIHRvIGFkZCBhIGZpcm13YXJlIHNpemUgYWxpZ25tZW50IGNoZWNrLiBFdGhlcm5ldCBQSFkgaGFyZHdhcmUgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIFBIWSBoYXJkd2FyZSBjb25uZWN0ZWQgdmlhIE1ESU8sIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSBvciBHQ0UpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MTA6MDEuOTUwODA0NjI5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd45sf[1] Phase: Running StartedAt: 2026-09-02 22:10:13 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd45sf[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-02 22:10:13 +0000 UTC FinishedAt: 2026-09-02 22:10:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}